Name: series-workflow2j75n Phase: Failed StartedAt: 2026-07-29 05:06:25 +0000 UTC FinishedAt: 2026-07-29 05:33:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2j75n[0] Phase: Succeeded StartedAt: 2026-07-29 05:06:25 +0000 UTC FinishedAt: 2026-07-29 05:33:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2j75n[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 05:06:25 +0000 UTC FinishedAt: 2026-07-29 05:33:16 +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+CgkJCTx0ZD4yMDI2LzA3LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNTozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMyZGE2ZmQ1ZDc1MGQ0NDgyNGViOTYwODA0NDdhYmJhMjdiZmY4NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAwNTozMjo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA2MzI5ZTM3ZmZmNGM5Li40NWI4NGY3YjM2NGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMTgyLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgdWludDY0X3QgcnVuX2l0ZXJhdGlvbih2b2lkKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVE9UQUxfUEFHRVM7IGkmIzQzOyYjNDM7KVxuIFx0XHRmaWxsX3BhZ2UobW1hcF9iYXNlLCBpKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKVxuJiM0MztcdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIEZJTEVfU0laRSwgTlJfUE1EX1BBR0UsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBzaG1lbSBUSFAgaXMgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiBcbiBcdGlmIChwdGhyZWFkX2JhcnJpZXJfaW5pdChcdTAwMjZjdGwuYmFycmllciwgTlVMTCwgTlVNX1JFQURFUl9USFJFQURTICYjNDM7IDEpICE9IDApXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCAxMGU4ZGVkY2IwODdkLi5lMjFhNmVjMzgzNjMyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbkBAIC0yNiw5ICYjNDM7MjYsMTEgQEBcbiBcbiAjZGVmaW5lIEJBU0VfQUREUiAoKHZvaWQgKikoMVVMIFx1MDAzY1x1MDAzYyAzMCkpXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBhZ2VfcG1kX3NpemU7XG4mIzQzO3N0YXRpYyBpbnQgaHBhZ2VfcG1kX29yZGVyO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbiBzdGF0aWMgaW50IGhwYWdlX3BtZF9ucjtcbiBzdGF0aWMgaW50IGFub25fb3JkZXI7XG4mIzQzO3N0YXRpYyBpbnQgY29sbGFwc2Vfb3JkZXI7XG4gXG4gI2RlZmluZSBQSURfU01BUFMgXCYjMzQ7L3Byb2Mvc2VsZi9zbWFwc1wmIzM0O1xuICNkZWZpbmUgVEVTVF9GSUxFIFwmIzM0O2NvbGxhcHNlX3Rlc3RfZmlsZVwmIzM0O1xuQEAgLTUxLDcgJiM0Mzs1Myw3IEBAIHN0cnVjdCBtZW1fb3BzIHtcbiBcdHZvaWQgKigqc2V0dXBfYXJlYSkoaW50IG5yX2hwYWdlcyk7XG4gXHR2b2lkICgqY2xlYW51cF9hcmVhKSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFx0dm9pZCAoKmZhdWx0KSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4tXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcyk7XG4mIzQzO1x0Ym9vbCAoKmNoZWNrX2h1Z2UpKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdW5zaWduZWQgbG9uZyBocGFnZV9zaXplKTtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gfTtcbiBcbkBAIC02OSw2ICYjNDM7NzEsNyBAQCBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCB7XG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmtodWdlcGFnZWRfY29udGV4dDtcbiYjNDM7c3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICptdGhwX2todWdlcGFnZWRfY29udGV4dDtcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKm1hZHZpc2VfY29udGV4dDtcbiBcbiBzdHJ1Y3QgZmlsZV9pbmZvIHtcbkBAIC0yNzYsNyAmIzQzOzI3OSw3IEBAIHN0YXRpYyB2b2lkICphbGxvY19ocGFnZShzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7QWxsb2NhdGUgaHVnZSBwYWdlLi4uXCYjMzQ7KTtcbiBcdGlmIChtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O21hZHZpc2UoTUFEVl9DT0xMQVBTRSlcJiMzNDspO1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfQ09MTEFQU0UpXCYjMzQ7KTtcbiBcdGlmIChtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O21hZHZpc2UoTUFEVl9IVUdFUEFHRSlcJiMzNDspO1xuQEAgLTMxMCw5ICYjNDM7MzEzLDEwIEBAIHN0YXRpYyB2b2lkIGFub25fZmF1bHQodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gXHRmaWxsX21lbW9yeShwLCBzdGFydCwgZW5kKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgYW5vbl9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpXG4mIzQzO3N0YXRpYyBib29sIGFub25fY2hlY2tfaHVnZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXG4mIzQzO1x0XHRpbnQgbnJfaHBhZ2VzLCB1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpXG4ge1xuLVx0cmV0dXJuIGNoZWNrX2h1Z2VfYW5vbihhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcbiYjNDM7XHRyZXR1cm4gY2hlY2tfaHVnZV9hbm9uKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG5AQCAtNDEyLDEzICYjNDM7NDE2LDE0IEBAIHN0YXRpYyB2b2lkIGZpbGVfZmF1bHRfd3JpdGUodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfUE9QVUxBVEVfV1JJVEUpXCYjMzQ7KTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpXG4mIzQzO3N0YXRpYyBib29sIGZpbGVfY2hlY2tfaHVnZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXG4mIzQzO1x0XHRpbnQgbnJfaHBhZ2VzLCB1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpXG4ge1xuIFx0c3dpdGNoIChmaW5mby50eXBlKSB7XG4gXHRjYXNlIFZNQV9GSUxFOlxuLVx0XHRyZXR1cm4gY2hlY2tfaHVnZV9maWxlKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xuJiM0MztcdFx0cmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIFx0Y2FzZSBWTUFfU0hNRU06XG4tXHRcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xuJiM0MztcdFx0cmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTQ0OCw5ICYjNDM7NDUzLDEwIEBAIHN0YXRpYyB2b2lkIHNobWVtX2NsZWFudXBfYXJlYSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXHRjbG9zZShmaW5mby5mZCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIHNobWVtX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcylcbiYjNDM7c3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXG4mIzQzO1x0XHRcdGludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcbiYjNDM7XHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IG1lbV9vcHMgX19hbm9uX29wcyA9IHtcbkBAIC01MzMsNyAmIzQzOzUzOSw3IEBAIHN0YXRpYyB2b2lkIF9fbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRyZXQgPSBtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplKTtcbiBcdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbDogQmFkIHJldHVybiB2YWx1ZVwmIzM0Oyk7XG4tXHRlbHNlIGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCkpXG4mIzQzO1x0ZWxzZSBpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbDogY2hlY2tfaHVnZSgpXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG5AQCAtNTQ1LDMwICYjNDM7NTUxLDMxIEBAIHN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4ge1xuIFx0LyogU2FuaXR5IGNoZWNrICovXG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuJiM0MztcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1VuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCYjMzQ7KTtcbiBcdF9fbWFkdmlzZV9jb2xsYXBzZShtc2csIHAsIG5yX2hwYWdlcywgb3BzLCBleHBlY3QpO1xuIH1cbiBcbiAjZGVmaW5lIFRJQ0sgNTAwMDAwXG4tc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4tXHRcdFx0ICBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuJiM0MztzdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgdW5zaWduZWQgbG9uZyBzaXplLFxuJiM0MztcdFx0aW50IG5yX2hwYWdlcywgaW50IGNvbGxhcF9vcmRlciwgc3RydWN0IG1lbV9vcHMgKm9wcylcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gcGFnZV9zaXplIFx1MDAzY1x1MDAzYyBjb2xsYXBfb3JkZXI7XG4gXHRpbnQgZnVsbF9zY2FucztcbiBcdGludCB0aW1lb3V0ID0gNjsgLyogMyBzZWNvbmRzICovXG4gXG4gXHQvKiBTYW5pdHkgY2hlY2sgKi9cbi1cdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBzaXplLCAwLCBocGFnZV9zaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1VuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCYjMzQ7KTtcbiBcbi1cdG1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpO1xuJiM0MztcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4gXG4gXHQvKiBXYWl0IHVudGlsIHRoZSBzZWNvbmQgZnVsbF9zY2FuIGNvbXBsZXRlZCAqL1xuIFx0ZnVsbF9zY2FucyA9IHRocF9yZWFkX251bShcJiMzNDtraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcJiMzNDspICYjNDM7IDI7XG4gXG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDslcy4uLlwmIzM0OywgbXNnKTtcbiBcdHdoaWxlICh0aW1lb3V0LS0pIHtcbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcykpXG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0aWYgKHRocF9yZWFkX251bShcJiMzNDtraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcJiMzNDspIFx1MDAzZT0gZnVsbF9zY2FucylcbiBcdFx0XHRicmVhaztcbkBAIC01ODIsNiAmIzQzOzU4OSw4IEBAIHN0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRcdFx0c3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplO1xuJiM0MztcbiBcdC8qXG4gXHQgKiByZWFkXHUwMDI2d3JpdGUgZmlsZSBjb2xsYXBzZSBmYWlscyBzaW5jZSBraHVnZXBhZ2VkIGRvZXMgbm90IGZsdXNoXG4gXHQgKiB0aGUgdGFyZ2V0IGRpcnR5IGZvbGlvc1xuQEAgLTU4OSw3ICYjNDM7NTk4LDcgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRpZiAoIWlzX3RtcGZzKG9wcykgXHUwMDI2XHUwMDI2IG9wcyA9PSBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHMpXG4gXHRcdGV4cGVjdCA9IGZhbHNlO1xuIFxuLVx0aWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBucl9ocGFnZXMsIG9wcykpIHtcbiYjNDM7XHRpZiAod2FpdF9mb3Jfc2Nhbihtc2csIHAsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX29yZGVyLCBvcHMpKSB7XG4gXHRcdGlmIChleHBlY3QpXG4gXHRcdFx0ZmFpbChcJiMzNDtUaW1lb3V0XCYjMzQ7KTtcbiBcdFx0ZWxzZVxuQEAgLTYwNSwxMCAmIzQzOzYxNCw1NCBAQCBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdGlmIChvcHMgIT0gXHUwMDI2X19hbm9uX29wcylcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplKTtcbiBcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgc2l6ZSwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKVxuJiM0MztcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbXRocF9raHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSBcdTAwM2NcdTAwM2MgY29sbGFwc2Vfb3JkZXI7XG4mIzQzO1x0c3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5ncyA9ICp0aHBfY3VycmVudF9zZXR0aW5ncygpO1xuJiM0MztcdC8qIG1USFAgY29sbHBhc2Ugb25seSBhbGxvY2F0ZXMgUE1EIHNpemVkIG1lbW9yeSAqL1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGhwYWdlX3BtZF9zaXplO1xuJiM0MztcbiYjNDM7XHQvKiBTZXQgbVRIUCBzZXR0aW5nIGZvciBtVEhQIGNvbGxhcHNlICovXG4mIzQzO1x0aWYgKG9wcyA9PSBcdTAwMjZfX2Fub25fb3BzKSB7XG4mIzQzO1x0XHRzZXR0aW5ncy50aHBfZW5hYmxlZCA9IFRIUF9ORVZFUjtcbiYjNDM7XHRcdHNldHRpbmdzLmh1Z2VwYWdlc1tjb2xsYXBzZV9vcmRlcl0uZW5hYmxlZCA9IFRIUF9BTFdBWVM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0aHBfcHVzaF9zZXR0aW5ncyhcdTAwMjZzZXR0aW5ncyk7XG4mIzQzO1xuJiM0MztcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgc2l6ZSwgbnJfaHBhZ2VzLCBjb2xsYXBzZV9vcmRlciwgb3BzKSkge1xuJiM0MztcdFx0aWYgKGV4cGVjdClcbiYjNDM7XHRcdFx0ZmFpbChcJiMzNDtUaW1lb3V0XCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVzdG9yZSBUSFAgc2V0dGluZ3MgZm9yIG1USFAgY29sbGFwc2UuICovXG4mIzQzO1x0XHR0aHBfcG9wX3NldHRpbmdzKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZvciBmaWxlIGFuZCBzaG1lbSBtZW1vcnksIGtodWdlcGFnZWQgb25seSByZXRyYWN0cyBwdGUgZW50cmllcyBhZnRlclxuJiM0MztcdCAqIHB1dHRpbmcgdGhlIG5ldyBodWdlcGFnZSBpbiB0aGUgcGFnZSBjYWNoZS4gVGhlIGh1Z2VwYWdlIG11c3QgYmVcbiYjNDM7XHQgKiBzdWJzZXF1ZW50bHkgcmVmYXVsdGVkIHRvIGluc3RhbGwgdGhlIHBtZCBtYXBwaW5nIGZvciB0aGUgbW0uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG9wcyAhPSBcdTAwMjZfX2Fub25fb3BzKVxuJiM0MztcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3NpemUpO1xuJiM0MztcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgc2l6ZSwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2Vfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBSZXN0b3JlIFRIUCBzZXR0aW5ncyBmb3IgbVRIUCBjb2xsYXBzZS4gKi9cbiYjNDM7XHR0aHBfcG9wX3NldHRpbmdzKCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX2todWdlcGFnZWRfY29udGV4dCA9IHtcbkBAIC02MTcsNiAmIzQzOzY3MCwxMiBAQCBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7XG4gXHQubmFtZSA9IFwmIzM0O2todWdlcGFnZWRcJiMzNDssXG4gfTtcbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQgPSB7XG4mIzQzO1x0LmNvbGxhcHNlID0gXHUwMDI2bXRocF9raHVnZXBhZ2VkX2NvbGxhcHNlLFxuJiM0MztcdC5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IHRydWUsXG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDttdGhwX2todWdlcGFnZWRcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX21hZHZpc2VfY29udGV4dCA9IHtcbiBcdC5jb2xsYXBzZSA9IFx1MDAyNm1hZHZpc2VfY29sbGFwc2UsXG4gXHQuZW5mb3JjZV9wdGVfc2Nhbl9saW1pdHMgPSBmYWxzZSxcbkBAIC02MzQsNyAmIzQzOzY5Myw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXG4gXHRwID0gYWxsb2NfbWFwcGluZygxKTtcbiBcdCpwID0gMTtcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0FsbG9jYXRlIGh1Z2UgcGFnZSBvbiBmYXVsdC4uLlwmIzM0Oyk7XG4tXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiYjNDM7XHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTY0Myw3ICYjNDM7NzAyLDcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZClcbiBcbiBcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTtcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1NwbGl0IGh1Z2UgUE1EIG9uIE1BRFZfRE9OVE5FRUQuLi5cJiMzNDspO1xuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4mIzQzO1x0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC02NTUsMTAgJiM0Mzs3MTQsMTcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZClcbiBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIHtcbiBcdHZvaWQgKnA7XG4tXHRpbnQgbnJfaHBhZ2VzID0gNDtcbiYjNDM7XHRpbnQgbnJfcG1kcyA9IDQsIG5yX2hwYWdlcyA9IDQ7XG4gXHR1bnNpZ25lZCBsb25nIHNpemUgPSBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZTtcbiBcbi1cdHAgPSBvcHMtXHUwMDNlc2V0dXBfYXJlYShucl9ocGFnZXMpO1xuJiM0MztcdC8qIE9ubHkgdHJ5IDEgUE1EIHNpemVkIHJhbmdlIGZvciBtVEhQIGNvbGxhcHNlLiAqL1xuJiM0MztcdGlmIChjID09IFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQpIHtcbiYjNDM7XHRcdG5yX3BtZHMgPSAxO1xuJiM0MztcdFx0bnJfaHBhZ2VzID0gMSBcdTAwM2NcdTAwM2MgKGhwYWdlX3BtZF9vcmRlciAtIGNvbGxhcHNlX29yZGVyKTtcbiYjNDM7XHRcdHNpemUgPSBocGFnZV9wbWRfc2l6ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHAgPSBvcHMtXHUwMDNlc2V0dXBfYXJlYShucl9wbWRzKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBzaXplKTtcbiBcdGMtXHUwMDNlY29sbGFwc2UoXCYjMzQ7Q29sbGFwc2UgbXVsdGlwbGUgZnVsbHkgcG9wdWxhdGVkIFBURSB0YWJsZVwmIzM0OywgcCwgbnJfaHBhZ2VzLFxuIFx0XHQgICAgb3BzLCB0cnVlKTtcbkBAIC02NzAsMTAgJiM0Mzs3MzYsMzEgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBzdGF0aWMgdm9pZCBjb2xsYXBzZV9lbXB0eShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiB7XG4mIzQzO1x0aW50IG5yX2hwYWdlcyA9IDE7XG4gXHR2b2lkICpwO1xuIFxuJiM0MztcdGlmIChjID09IFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXG4mIzQzO1x0XHRucl9ocGFnZXMgPSAxIFx1MDAzY1x1MDAzYyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpO1xuJiM0MztcbiBcdHAgPSBvcHMtXHUwMDNlc2V0dXBfYXJlYSgxKTtcbi1cdGMtXHUwMDNlY29sbGFwc2UoXCYjMzQ7RG8gbm90IGNvbGxhcHNlIGVtcHR5IFBURSB0YWJsZVwmIzM0OywgcCwgMSwgb3BzLCBmYWxzZSk7XG4mIzQzO1x0Yy1cdTAwM2Vjb2xsYXBzZShcJiMzNDtEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXCYjMzQ7LCBwLCBucl9ocGFnZXMsIG9wcywgZmFsc2UpO1xuJiM0MztcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcJiMzNDslc1xcblwmIzM0OywgX19mdW5jX18pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBjb2xsYXBzZV9zaW5nbGVfbXRocChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSBcdTAwM2NcdTAwM2MgY29sbGFwc2Vfb3JkZXI7XG4mIzQzO1x0dm9pZCAqcDtcbiYjNDM7XG4mIzQzO1x0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKDEpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT25seSBmYXVsdCBjb2xsYXBzZV9vcmRlciBzaXplZCByYW5nZXMsIGFuZCBvbmx5IGNoZWNrIDFcbiYjNDM7XHQgKiBjb2xsYXBzZV9vcmRlciBzaXplZCBodWdlIHBhZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIGhwYWdlX3NpemUpO1xuJiM0MztcdGMtXHUwMDNlY29sbGFwc2UoXCYjMzQ7Q29sbGFwc2UgUFRFIHRhYmxlIHdpdGggaGFsZiBQVEUgZW50cmllcyBwcmVzZW50XCYjMzQ7LFxuJiM0MztcdFx0cCwgMSwgb3BzLCB0cnVlKTtcbiBcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpO1xuIFx0a3NmdF90ZXN0X3Jlc3VsdF9yZXBvcnQoZXhpdF9zdGF0dXMsIFwmIzM0OyVzXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gfVxuQEAgLTgxNSw3ICYjNDM7OTAyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeV9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWNcbiBcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIG1hcHBpbmcgY29tcG91bmQgcGFnZS4uLlwmIzM0Oyk7XG4gXHRtYWR2aXNlKHAgJiM0MzsgcGFnZV9zaXplLCBocGFnZV9wbWRfc2l6ZSAtIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTgzNiw3ICYjNDM7OTIzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbF9vZl9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1NwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgcGFnZSB0YWJsZSBmdWxsIG9mIGNvbXBvdW5kIHBhZ2VzLi4uXCYjMzQ7KTtcbiBcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0bWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtODU4LDcgJiM0Mzs5NDUsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9jb21wb3VuZF9leHRyZW1lKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHBhZ2VfcG1kX25yOyBpJiM0MzsmIzQzOykge1xuIFx0XHRtYWR2aXNlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpO1xuIFx0XHRvcHMtXHUwMDNlZmF1bHQoQkFTRV9BRERSLCAwLCBocGFnZV9wbWRfc2l6ZSk7XG4tXHRcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UoQkFTRV9BRERSLCAxKSlcbiYjNDM7XHRcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgaHVnZSBwYWdlXFxuXCYjMzQ7KTtcbiBcdFx0bWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFxuQEAgLTg4MSw3ICYjNDM7OTY4LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfY29tcG91bmRfZXh0cmVtZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcbiBcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSk7XG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgaHBhZ2VfcG1kX3NpemUpO1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTkwMyw3ICYjNDM7OTkwLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0FsbG9jYXRlIHNtYWxsIHBhZ2UuLi5cJiMzNDspO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIHBhZ2Vfc2l6ZSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTkxMSw3ICYjNDM7OTk4LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1NoYXJlIHNtYWxsIHBhZ2Ugb3ZlciBmb3JrKCkuLi5cJiMzNDspO1xuIFx0aWYgKCFmb3JrKCkpIHtcbiBcdFx0LyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi9cbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuJiM0MztcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTkyOSw3ICYjNDM7MTAxNiw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Q2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBzbWFsbCBwYWdlLi4uXCYjMzQ7KTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtOTQ3LDcgJiM0MzsxMDM0LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1NoYXJlIGh1Z2UgcGFnZSBvdmVyIGZvcmsoKS4uLlwmIzM0Oyk7XG4gXHRpZiAoIWZvcmsoKSkge1xuIFx0XHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtOTU1LDcgJiM0MzsxMDQyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U3BsaXQgaHVnZSBwYWdlIFBNRCBpbiBjaGlsZCBwcm9jZXNzLi4uXCYjMzQ7KTtcbiBcdFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXHRcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC05NzYsNyAmIzQzOzEwNjMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb1xuIFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0NoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uXCYjMzQ7KTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtOTk1LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uXCYjMzQ7KTtcbiBcdGlmICghZm9yaygpKSB7XG4gXHRcdC8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovXG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDAzLDcgJiM0MzsxMDkwLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uXCYjMzQ7LFxuIFx0XHRcdFx0aHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSwgaHBhZ2VfcG1kX25yKTtcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxKSAqIHBhZ2Vfc2l6ZSk7XG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDE2LDcgJiM0MzsxMTAzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRcdCAgICAgICBocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQsIGhwYWdlX3BtZF9ucik7XG4gXHRcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQpICpcbiBcdFx0XHRcdCAgICBwYWdlX3NpemUpO1xuLVx0XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTEwMzQsNyAmIzQzOzExMjEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Q2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBodWdlIHBhZ2UuLi5cJiMzNDspO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDc1LDggJiM0MzsxMTYyLDggQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9yZXRyYWN0ZWRfcGFnZV90YWJsZXMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsXG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgc2l6ZSk7XG4gXG4gXHQvKiBMZXQga2h1Z2VwYWdlZCBjb2xsYXBzZSBhbmQgbGVhdmUgcG1kIGNsZWFyZWQgKi9cbi1cdGlmICh3YWl0X2Zvcl9zY2FuKFwmIzM0O0NvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZFwmIzM0OywgcCwgbnJfaHBhZ2VzLFxuLVx0XHRcdCAgb3BzKSkge1xuJiM0MztcdGlmICh3YWl0X2Zvcl9zY2FuKFwmIzM0O0NvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZFwmIzM0OywgcCwgc2l6ZSwgbnJfaHBhZ2VzLFxuJiM0MztcdFx0XHQgIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xuIFx0XHRmYWlsKFwmIzM0O1RpbWVvdXRcJiMzNDspO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMTA5Miw3ICYjNDM7MTE3OSw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4ge1xuIFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcblVzYWdlOiAuL2todWdlcGFnZWQgW09QVElPTlNdIFx1MDAzY3Rlc3QgdHlwZVx1MDAzZSBbZGlyXVxcblxcblwmIzM0Oyk7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFx0XHUwMDNjdGVzdCB0eXBlXHUwMDNlXFx0OiBcdTAwM2Njb250ZXh0XHUwMDNlOlx1MDAzY21lbV90eXBlXHUwMDNlXFxuXCYjMzQ7KTtcbi1cdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXHRcdTAwM2Njb250ZXh0XHUwMDNlXFx0OiBbYWxsfGtodWdlcGFnZWR8bWFkdmlzZV1cXG5cJiMzNDspO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXHRcdTAwM2Njb250ZXh0XHUwMDNlXFx0OiBbYWxsfGtodWdlcGFnZWR8bXRocF9raHVnZXBhZ2VkfG1hZHZpc2VdXFxuXCYjMzQ7KTtcbiBcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXHRcdTAwM2NtZW1fdHlwZVx1MDAzZVxcdDogW2FsbHxhbm9ufGZpbGV8c2htZW1dXFxuXCYjMzQ7KTtcbiBcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5cXHRcXFwmIzM0O2ZpbGUsYWxsXFxcJiMzNDsgbWVtX3R5cGUgcmVxdWlyZXMgW2Rpcl0gYXJndW1lbnRcXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcblxcdFxcXCYjMzQ7ZmlsZSxhbGxcXFwmIzM0OyBtZW1fdHlwZSByZXF1aXJlcyBhIGZpbGUgc3lzdGVtXFxuXCYjMzQ7KTtcbkBAIC0xMTAzLDYgJiM0MzsxMTkwLDcgQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcbiBcdGZwcmludGYoc3RkZXJyLFx0XCYjMzQ7XFx0XFx0LWg6IFRoaXMgaGVscCBtZXNzYWdlLlxcblwmIzM0Oyk7XG4gXHRmcHJpbnRmKHN0ZGVycixcdFwmIzM0O1xcdFxcdC1zOiBtVEhQIHNpemUsIGV4cHJlc3NlZCBhcyBwYWdlIG9yZGVyLlxcblwmIzM0Oyk7XG4gXHRmcHJpbnRmKHN0ZGVycixcdFwmIzM0O1xcdFxcdCAgICBEZWZhdWx0cyB0byAwLiBVc2UgdGhpcyBzaXplIGZvciBhbm9uIG9yIHNobWVtIGFsbG9jYXRpb25zLlxcblwmIzM0Oyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsXHRcJiMzNDtcXHRcXHQtYzogY29sbGFwc2Ugb3JkZXIgZm9yIG1USFAgY29sbGFwc2UsIGV4cHJlc3NlZCBhcyBwYWdlIG9yZGVyLlxcblwmIzM0Oyk7XG4gXHRleGl0KDEpO1xuIH1cbiBcbkBAIC0xMTEyLDExICYjNDM7MTIwMCwxNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0Y2hhciAqYnVmO1xuIFx0Y29uc3QgY2hhciAqdG9rZW47XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDtzOmhcJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O3M6YzpoXCYjMzQ7KSkgIT0gLTEpIHtcbiBcdFx0c3dpdGNoIChvcHQpIHtcbiBcdFx0Y2FzZSAmIzM5O3MmIzM5OzpcbiBcdFx0XHRhbm9uX29yZGVyID0gYXRvaShvcHRhcmcpO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O2MmIzM5OzpcbiYjNDM7XHRcdFx0Y29sbGFwc2Vfb3JkZXIgPSBhdG9pKG9wdGFyZyk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7aCYjMzk7OlxuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHVzYWdlKCk7XG5AQCAtMTE0Miw2ICYjNDM7MTIzMywxMCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRtYWR2aXNlX2NvbnRleHQgPSAgXHUwMDI2X19tYWR2aXNlX2NvbnRleHQ7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFwmIzM0O2todWdlcGFnZWRcJiMzNDspKSB7XG4gXHRcdGtodWdlcGFnZWRfY29udGV4dCA9ICBcdTAwMjZfX2todWdlcGFnZWRfY29udGV4dDtcbiYjNDM7XHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFwmIzM0O210aHBfa2h1Z2VwYWdlZFwmIzM0OykpIHtcbiYjNDM7XHRcdG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0ID0gIFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQ7XG4mIzQzO1x0XHRpZiAoY29sbGFwc2Vfb3JkZXIgXHUwMDNjPSAwIHx8IGNvbGxhcHNlX29yZGVyIFx1MDAzZT0gaHBhZ2VfcG1kX29yZGVyKVxuJiM0MztcdFx0XHR1c2FnZSgpO1xuIFx0fSBlbHNlIGlmICghc3RyY21wKHRva2VuLCBcJiMzNDttYWR2aXNlXCYjMzQ7KSkge1xuIFx0XHRtYWR2aXNlX2NvbnRleHQgPSAgXHUwMDI2X19tYWR2aXNlX2NvbnRleHQ7XG4gXHR9IGVsc2Uge1xuQEAgLTEyMDcsNyAmIzQzOzEzMDIsNiBAQCBzdGF0aWMgaW50IG5yX3Rlc3RfY2FzZXM7XG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIHtcbi1cdGludCBocGFnZV9wbWRfb3JkZXI7XG4gXHRzdHJ1Y3QgdGhwX3NldHRpbmdzIGRlZmF1bHRfc2V0dGluZ3MgPSB7XG4gXHRcdC50aHBfZW5hYmxlZCA9IFRIUF9NQURWSVNFLFxuIFx0XHQudGhwX2RlZnJhZyA9IFRIUF9ERUZSQUdfQUxXQVlTLFxuQEAgLTEyMzMsMTAgJiM0MzsxMzI3LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4gXG4tXHRwYXJzZV90ZXN0X3R5cGUoYXJnYywgYXJndik7XG4tXG4tXHRzZXRidWYoc3Rkb3V0LCBOVUxMKTtcbi1cbiBcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHRocGFnZV9wbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4gXHRpZiAoIWhwYWdlX3BtZF9zaXplKVxuQEAgLTEyNDQsNiAmIzQzOzEzMzQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aHBhZ2VfcG1kX25yID0gaHBhZ2VfcG1kX3NpemUgLyBwYWdlX3NpemU7XG4gXHRocGFnZV9wbWRfb3JkZXIgPSBfX2J1aWx0aW5fY3R6KGhwYWdlX3BtZF9ucik7XG4gXG4mIzQzO1x0cGFyc2VfdGVzdF90eXBlKGFyZ2MsIGFyZ3YpO1xuJiM0MztcbiYjNDM7XHRzZXRidWYoc3Rkb3V0LCBOVUxMKTtcbiYjNDM7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfbm9uZSA9IGhwYWdlX3BtZF9uciAtIDE7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc3dhcCA9IGhwYWdlX3BtZF9uciAvIDg7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc2hhcmVkID0gaHBhZ2VfcG1kX25yIC8gMjtcbkBAIC0xMjYxLDYgJiM0MzsxMzU1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgc2htZW1fb3BzKTtcbiYjNDM7XHRURVNUKGNvbGxhcHNlX2Z1bGwsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcbkBAIC0xMjY4LDggJiM0MzsxMzYzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCBzaG1lbV9vcHMpO1xuIFxuIFx0VEVTVChjb2xsYXBzZV9lbXB0eSwga2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4mIzQzO1x0VEVTVChjb2xsYXBzZV9lbXB0eSwgbXRocF9raHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcbiBcdFRFU1QoY29sbGFwc2VfZW1wdHksIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xuIFxuJiM0MztcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX210aHAsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4mIzQzO1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcbiBcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeSwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX29ubHlfZmlsZV9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCAxYjJkZmZjYzk5OWIwLi5jZmQxOTg3MzM5YzEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLFxuIFx0bWVtc2V0KG1lbSwgMSwgc2l6ZSk7XG4gXHRpZiAodXNlX3RocCBcdTAwMjZcdTAwMjZcbiBcdCAgICAobWFkdmlzZShtZW0sIHNpemUsIE1BRFZfQ09MTEFQU0UpIHx8XG4tXHQgICAgICFjaGVja19odWdlX2Fub24obWVtLCBzaXplIC8gaHBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSkpKSB7XG4mIzQzO1x0ICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7JXMgY291bGQgbm90IGZvcm0gYSBUSFBcXG5cJiMzNDssIG5hbWUpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuaW5kZXggZDhkOWQxZGU1N2I4Yi4uODJjNmU5NmVhNmViMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgaW50IHRlc3RfbW1hcF90aHAoZW51bSB0aHBfY29sbGFwc2VfdHlwZSBtYWR2aXNlX2J1Ziwgc2l6ZV90IHBtZHNpemUpXG4gXHQvKiBIQUNLOiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNlcGFyYXRlIFZNQSB0aGF0IHdlIGNhbiBjaGVjayByZWxpYWJseS4gKi9cbiBcdG1wcm90ZWN0KG1lbSwgcG1kc2l6ZSwgUFJPVF9SRUFEKTtcbiBcbi1cdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIDEsIHBtZHNpemUpO1xuJiM0MztcdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIHBtZHNpemUsIDEsIHBtZHNpemUpO1xuIFx0bXVubWFwKG1tYXBfbWVtLCBtbWFwX3NpemUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggNjg3ZDExNWUzYmQ4MC4uZDA5ZjlmNmEzODRlZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTQxMCw2ICYjNDM7NDEwLDggQEAgQ0FURUdPUlk9XCYjMzQ7dGhwXCYjMzQ7IHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCBhbGw6c2htZW1cbiBcbiBDQVRFR09SWT1cJiMzNDt0aHBcJiMzNDsgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIC1zIDQgYWxsOnNobWVtXG4gXG4mIzQzO0NBVEVHT1JZPVwmIzM0O3RocFwmIzM0OyBydW5fdGVzdCAuL2todWdlcGFnZWQgLWMgNCBtdGhwX2todWdlcGFnZWQ6YW5vblxuJiM0MztcbiAjIFRyeSB0byBjcmVhdGUgWEZTIGlmIG5vdCBwcm92aWRlZFxuIGlmIFsgLXogXCYjMzQ7JHtTUExJVF9IVUdFX1BBR0VfVEVTVF9YRlNfUEFUSH1cJiMzNDsgXTsgdGhlblxuICAgICBpZiB0ZXN0X3NlbGVjdGVkIFwmIzM0O3RocFwmIzM0OzsgdGhlblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggZmIxODY0YTY4ZTFjNi4uZTE5OGZhY2Y3OGJiNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtMTAzLDcgJiM0MzsxMDMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2h1Z2VwYWdlKGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBocGFnZV9sZW47IGkmIzQzOyYjNDM7KVxuIFx0XHRtYXBbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihtYXAsIDEsIGhwYWdlX2xlbikpIHtcbiYjNDM7XHRpZiAoY2hlY2tfaHVnZV9hbm9uKG1hcCwgaHBhZ2VfbGVuLCAxLCBocGFnZV9sZW4pKSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcJiMzNDtUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXG4gXHRcdGNsZWFyX3NvZnRkaXJ0eSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCAzMmI5OTE0NzJmNzQ0Li44NmE2MDM2OTI4MjYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTEwNCwxMjkgJiM0MzsxMDQsNiBAQCBzdGF0aWMgYm9vbCBpc19iYWNrZWRfYnlfZm9saW8oY2hhciAqdmFkZHIsIGludCBvcmRlciwgaW50IHBhZ2VtYXBfZmQsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHR1aW50NjRfdCAqZmxhZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBwZm47XG4tXG4tXHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpO1xuLVxuLVx0Lyogbm9uLXByZXNlbnQgUEZOICovXG4tXHRpZiAocGZuID09IC0xVUwpXG4tXHRcdHJldHVybiAxO1xuLVxuLVx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGFnZWZsYWdzX2ZkLCBmbGFncykpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi0vKlxuLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmRcbi0gKiBmb2xpbyBvcmRlcnNcbi0gKlxuLSAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHJcbi0gKiBAbGVuOiByYW5nZSBsZW5ndGhcbi0gKiBAcGFnZW1hcF9mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9wYWdlbWFwXG4tICogQGtwYWdlZmxhZ3NfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9rcGFnZWZsYWdzXG4tICogQG9yZGVyczogb3V0cHV0IGZvbGlvIG9yZGVyIGFycmF5XG4tICogQG5yX29yZGVyczogZm9saW8gb3JkZXIgYXJyYXkgc2l6ZVxuLSAqXG4tICogZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycygpIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIGNoZWNrXG4tICogYWxsIGZvbGlvcyB3aXRoaW4gdGhlIHJhbmdlIGFuZCByZWNvcmQgdGhlaXIgb3JkZXJzLiBBbGwgb3JkZXItMCBwYWdlcyB3aWxsXG4tICogYmUgcmVjb3JkZWQuIE5vbi1wcmVzZW50IHZhZGRyIGlzIHNraXBwZWQuXG4tICpcbi0gKiBOT1RFOiB0aGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBmb2xpbyBvcmRlcnMgYWZ0ZXIgYSBzcGxpdCBpcyBwZXJmb3JtZWQsXG4tICogc28gaXQgYXNzdW1lcyBbdmFkZHJfc3RhcnQsIGxlbikgZnVsbHkgbWFwcyB0byBhZnRlci1zcGxpdCBmb2xpb3Mgd2l0aGluIHRoYXRcbi0gKiByYW5nZS5cbi0gKlxuLSAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xuLSAqL1xuLXN0YXRpYyBpbnQgZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbi1cdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXG4te1xuLVx0dWludDY0X3QgcGFnZV9mbGFncyA9IDA7XG4tXHRpbnQgY3VyX29yZGVyID0gLTE7XG4tXHRjaGFyICp2YWRkcjtcbi1cbi1cdGlmIChwYWdlbWFwX2ZkID09IC0xIHx8IGtwYWdlZmxhZ3NfZmQgPT0gLTEpXG4tXHRcdHJldHVybiAtMTtcbi1cdGlmICghb3JkZXJzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXHRpZiAobnJfb3JkZXJzIFx1MDAzYz0gMClcbi1cdFx0cmV0dXJuIC0xO1xuLVxuLVx0Zm9yICh2YWRkciA9IHZhZGRyX3N0YXJ0OyB2YWRkciBcdTAwM2MgdmFkZHJfc3RhcnQgJiM0MzsgbGVuOykge1xuLVx0XHRjaGFyICpuZXh0X2ZvbGlvX3ZhZGRyO1xuLVx0XHRpbnQgc3RhdHVzO1xuLVxuLVx0XHRzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHRcdFx0XHRcdTAwMjZwYWdlX2ZsYWdzKTtcbi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLTE7XG4tXG4tXHRcdC8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi9cbi1cdFx0aWYgKHN0YXR1cyA9PSAxKSB7XG4tXHRcdFx0dmFkZHIgJiM0Mzs9IHBzaXplKCk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0LyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovXG4tXHRcdGlmICghKHBhZ2VfZmxhZ3MgXHUwMDI2IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHtcbi1cdFx0XHRvcmRlcnNbMF0mIzQzOyYjNDM7O1xuLVx0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdC8qIHNraXAgbm9uIHRocCBjb21wb3VuZCBwYWdlcyAqL1xuLVx0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfVEhQKSkge1xuLVx0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdC8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovXG4tXHRcdGlmIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcbi1cdFx0XHRjdXJfb3JkZXIgPSAxO1xuLVx0XHRlbHNlIHtcbi1cdFx0XHR2YWRkciAmIzQzOz0gcHNpemUoKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2MgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpO1xuLVxuLVx0XHRpZiAobmV4dF9mb2xpb192YWRkciBcdTAwM2U9IHZhZGRyX3N0YXJ0ICYjNDM7IGxlbilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0d2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cGFnZV9mbGFncykpIFx1MDAzZT0gMCkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvclxuLVx0XHRcdCAqIG9yZGVyLTAgcGFnZVxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChzdGF0dXMgPT0gMSB8fFxuLVx0XHRcdCAgICAocGFnZV9mbGFncyBcdTAwMjYgS1BGX0NPTVBPVU5EX0hFQUQpIHx8XG4tXHRcdFx0ICAgICEocGFnZV9mbGFncyBcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xuLVx0XHRcdFx0aWYgKGN1cl9vcmRlciBcdTAwM2MgbnJfb3JkZXJzKSB7XG4tXHRcdFx0XHRcdG9yZGVyc1tjdXJfb3JkZXJdJiM0MzsmIzQzOztcbi1cdFx0XHRcdFx0Y3VyX29yZGVyID0gLTE7XG4tXHRcdFx0XHRcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRjdXJfb3JkZXImIzQzOyYjNDM7O1xuLVx0XHRcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciAmIzQzOyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICYjNDM7IHBzaGlmdCgpKSk7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gc3RhdHVzO1xuLVx0fVxuLVx0aWYgKGN1cl9vcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpXG4tXHRcdG9yZGVyc1tjdXJfb3JkZXJdJiM0MzsmIzQzOztcbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXG4ge1xuQEAgLTI0MCw3ICYjNDM7MTE3LDcgQEAgc3RhdGljIGludCBjaGVja19hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2YWRkcl9vcmRlcnNcJiMzNDspO1xuIFxuIFx0bWVtc2V0KHZhZGRyX29yZGVycywgMCwgc2l6ZW9mKGludCkgKiBucl9vcmRlcnMpO1xuLVx0c3RhdHVzID0gZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLFxuJiM0MztcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnModmFkZHJfc3RhcnQsIGxlbiwgcGFnZW1hcF9mZCxcbiBcdFx0XHRcdCAgICAga3BhZ2VmbGFnc19mZCwgdmFkZHJfb3JkZXJzLCBucl9vcmRlcnMpO1xuIFx0aWYgKHN0YXR1cylcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2dhdGhlciBmb2xpbyBpbmZvIGZhaWxlZFxcblwmIzM0Oyk7XG5AQCAtMjk2LDcgJiM0MzsxNzMsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0dW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyO1xuIFx0c2l6ZV90IGk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKVxuJiM0MztcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCBucl9ocGFnZXMgKiBwbWRfcGFnZXNpemUsIG5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O05vIFRIUCBpcyBhbGxvY2F0ZWRcXG5cJiMzNDspO1xuIFxuIFx0cnNzX2Fub25fYmVmb3JlID0gcnNzX2Fub24oKTtcbkBAIC0zMTEsNyAmIzQzOzE4OCw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXG4gXHRcdGlmIChvbmVfcGFnZVtpXSAhPSAoY2hhcikwKVxuIFx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslbGQgYnl0ZSBjb3JydXB0ZWRcXG5cJiMzNDssIGkpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCYjMzQ7KTtcbiBcbiBcdHJzc19hbm9uX2FmdGVyID0gcnNzX2Fub24oKTtcbkBAIC0zNDcsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpJiM0MzsmIzQzOylcbiBcdFx0b25lX3BhZ2VbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQsIHBtZF9wYWdlc2l6ZSkpXG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDQsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiBcbiBcdC8qIHNwbGl0IGFsbCBUSFBzICovXG5AQCAtMzY2LDcgJiM0MzsyNDMsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcbiBcdFx0XHRcdFx0ICAgKHBtZF9vcmRlciAmIzQzOyAxKSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmV4cGVjdGVkIFRIUCBzcGxpdFxcblwmIzM0Oyk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiYjNDM7XHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCYjMzQ7KTtcbiBcbiBcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcJiMzNDtTcGxpdCBodWdlIHBhZ2VzIHRvIG9yZGVyICVkIHN1Y2Nlc3NmdWxcXG5cJiMzNDssIG9yZGVyKTtcbkBAIC0zOTMsNyAmIzQzOzI3MCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0aHBfYXJlYV9zaXplOyBpJiM0MzsmIzQzOylcbiBcdFx0dGhwX2FyZWFbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24odGhwX2FyZWEsIG5yX3RocHMsIHBtZF9wYWdlc2l6ZSkpIHtcbiYjNDM7XHRpZiAoIWNoZWNrX2h1Z2VfYW5vbih0aHBfYXJlYSwgbnJfdGhwcyAqIHBtZF9wYWdlc2l6ZSwgbnJfdGhwcywgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7Tm90IGFsbCBUSFBzIGFsbG9jYXRlZFxcblwmIzM0Oyk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTY1Nyw3ICYjNDM7NTM0LDcgQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxuIFxuIFx0Zm9yY2VfcmVhZF9wYWdlcygqYWRkciwgZmRfc2l6ZSAvIHBtZF9wYWdlc2l6ZSwgcG1kX3BhZ2VzaXplKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9maWxlKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpKSB7XG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHtcbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Tm8gbGFyZ2UgcGFnZWNhY2hlIGZvbGlvIGdlbmVyYXRlZCwgcGxlYXNlIHByb3ZpZGUgYSBmaWxlc3lzdGVtIHN1cHBvcnRpbmcgbGFyZ2UgZm9saW9cXG5cJiMzNDspO1xuIFx0XHRtdW5tYXAoKmFkZHIsIGZkX3NpemUpO1xuIFx0XHRjbG9zZSgqZmQpO1xuQEAgLTczNSw3ICYjNDM7NjEyLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfdGhwX2luX3BhZ2VjYWNoZV90b19vcmRlcl9hdChzaXplX3QgZmRfc2l6ZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7XG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgZmRfc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxcblwmIzM0Oyk7XG4gXHRcdGVyciA9IEVYSVRfRkFJTFVSRTtcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcbmluZGV4IGY0OGY1ZDQ1OTRhYjAuLmZhNDZjOGMzYTQzNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG5AQCAtMTk0LDcgJiM0MzsxOTQsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV9hbGlhc19tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgX191NjQgKnN0YXJ0LFxuIFxuIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpXG4ge1xuLVx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBleHBlY3RfbnJfaHBhZ2VzLFxuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGV4cGVjdF9ucl9ocGFnZXMgKiByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNoZWNrX2h1Z2Vfc2htZW0oZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMsIHNpemUsIGV4cGVjdF9ucl9ocGFnZXMsXG4gXHRcdFx0ICAgICAgcmVhZF9wbWRfcGFnZXNpemUoKSkpXG4gXHRcdGVycihcJiMzNDtEaWQgbm90IGZpbmQgZXhwZWN0ZWQgJWQgbnVtYmVyIG9mIGh1Z2VwYWdlc1wmIzM0OyxcbiBcdFx0ICAgIGV4cGVjdF9ucl9ocGFnZXMpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggZWYxZWExMTk4MWE3NC4uYTRmZmFhMGNhNmZhMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtMTUsNiAmIzQzOzE1LDEwIEBAXG4gI2RlZmluZSBTTUFQX0ZJTEVfUEFUSCBcJiMzNDsvcHJvYy9zZWxmL3NtYXBzXCYjMzQ7XG4gI2RlZmluZSBTVEFUVVNfRklMRV9QQVRIIFwmIzM0Oy9wcm9jL3NlbGYvc3RhdHVzXCYjMzQ7XG4gI2RlZmluZSBNQVhfTElORV9MRU5HVEggNTAwXG4mIzQzOyNkZWZpbmUgUEFHRU1BUF9QQVRIIFwmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcFwmIzM0O1xuJiM0MzsjZGVmaW5lIEtQQUdFRkxBR1NfUEFUSCBcJiMzNDsvcHJvYy9rcGFnZWZsYWdzXCYjMzQ7XG4mIzQzOyNkZWZpbmUgR0VUX09SREVSKG5yX3BhZ2VzKSAgICAoMzEgLSBfX2J1aWx0aW5fY2x6KG5yX3BhZ2VzKSlcbiYjNDM7I2RlZmluZSBOUl9PUkRFUlMgMjBcbiBcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcbkBAIC0xOTQsNiAmIzQzOzE5OCwxMjUgQEAgdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKVxuIFx0cmV0dXJuIHJzc19hbm9uO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB2YWRkcl9wYWdlZmxhZ3NfZ2V0KGNoYXIgKnZhZGRyLCBpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsXG4mIzQzO1x0XHR1aW50NjRfdCAqZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBmbjtcbiYjNDM7XG4mIzQzO1x0cGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIHZhZGRyKTtcbiYjNDM7XG4mIzQzO1x0Lyogbm9uLXByZXNlbnQgUEZOICovXG4mIzQzO1x0aWYgKHBmbiA9PSAtMVVMKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogZ2F0aGVyX2ZvbGlvX29yZGVycyAtIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIHJlY29yZFxuJiM0MzsgKiBmb2xpbyBvcmRlcnNcbiYjNDM7ICpcbiYjNDM7ICogQHZhZGRyX3N0YXJ0OiBzdGFydCB2YWRkclxuJiM0MzsgKiBAbGVuOiByYW5nZSBsZW5ndGhcbiYjNDM7ICogQHBhZ2VtYXBfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvcGFnZW1hcFxuJiM0MzsgKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3NcbiYjNDM7ICogQG9yZGVyczogb3V0cHV0IGZvbGlvIG9yZGVyIGFycmF5XG4mIzQzOyAqIEBucl9vcmRlcnM6IGZvbGlvIG9yZGVyIGFycmF5IHNpemVcbiYjNDM7ICpcbiYjNDM7ICogZ2F0aGVyX2ZvbGlvX29yZGVycygpIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIGNoZWNrXG4mIzQzOyAqIGFsbCBmb2xpb3Mgd2l0aGluIHRoZSByYW5nZSBhbmQgcmVjb3JkIHRoZWlyIG9yZGVycy4gQWxsIG9yZGVyLTAgcGFnZXMgd2lsbFxuJiM0MzsgKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIC0gbm8gZXJyb3IsIC0xIC0gdW5oYW5kbGVkIGNhc2VzXG4mIzQzOyAqL1xuJiM0MztpbnQgZ2F0aGVyX2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKVxuJiM0Mzt7XG4mIzQzO1x0dWludDY0X3QgcGFnZV9mbGFncyA9IDA7XG4mIzQzO1x0aW50IGN1cl9vcmRlciA9IC0xO1xuJiM0MztcdGNoYXIgKnZhZGRyO1xuJiM0MztcbiYjNDM7XHRpZiAocGFnZW1hcF9mZCA9PSAtMSB8fCBrcGFnZWZsYWdzX2ZkID09IC0xKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmICghb3JkZXJzKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmIChucl9vcmRlcnMgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyIFx1MDAzYyB2YWRkcl9zdGFydCAmIzQzOyBsZW47KSB7XG4mIzQzO1x0XHRjaGFyICpuZXh0X2ZvbGlvX3ZhZGRyO1xuJiM0MztcdFx0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0XHRzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuJiM0MztcdFx0XHRcdFx1MDAyNnBhZ2VfZmxhZ3MpO1xuJiM0MztcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRcdC8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi9cbiYjNDM7XHRcdGlmIChzdGF0dXMgPT0gMSkge1xuJiM0MztcdFx0XHR2YWRkciAmIzQzOz0gcHNpemUoKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovXG4mIzQzO1x0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4mIzQzO1x0XHRcdG9yZGVyc1swXSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi9cbiYjNDM7XHRcdGlmICghKHBhZ2VfZmxhZ3MgXHUwMDI2IEtQRl9USFApKSB7XG4mIzQzO1x0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiB2cG4gcG9pbnRzIHRvIHBhcnQgb2YgYSBUSFAgYXQgdGhpcyBwb2ludCAqL1xuJiM0MztcdFx0aWYgKHBhZ2VfZmxhZ3MgXHUwMDI2IEtQRl9DT01QT1VORF9IRUFEKVxuJiM0MztcdFx0XHRjdXJfb3JkZXIgPSAxO1xuJiM0MztcdFx0ZWxzZSB7XG4mIzQzO1x0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2MgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuZXh0X2ZvbGlvX3ZhZGRyIFx1MDAzZT0gdmFkZHJfc3RhcnQgJiM0MzsgbGVuKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAoKHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQobmV4dF9mb2xpb192YWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnBhZ2VfZmxhZ3MpKSBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvclxuJiM0MztcdFx0XHQgKiBvcmRlci0wIHBhZ2VcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChzdGF0dXMgPT0gMSB8fFxuJiM0MztcdFx0XHQgICAgKHBhZ2VfZmxhZ3MgXHUwMDI2IEtQRl9DT01QT1VORF9IRUFEKSB8fFxuJiM0MztcdFx0XHQgICAgIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4mIzQzO1x0XHRcdFx0aWYgKGN1cl9vcmRlciBcdTAwM2MgbnJfb3JkZXJzKSB7XG4mIzQzO1x0XHRcdFx0XHRvcmRlcnNbY3VyX29yZGVyXSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdFx0XHRjdXJfb3JkZXIgPSAtMTtcbiYjNDM7XHRcdFx0XHRcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGN1cl9vcmRlciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciAmIzQzOyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICYjNDM7IHBzaGlmdCgpKSk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHN0YXR1cztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGN1cl9vcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpXG4mIzQzO1x0XHRvcmRlcnNbY3VyX29yZGVyXSYjNDM7JiM0Mzs7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4ge1xuIFx0aW50IHJldDtcbkBAIC0yMjksNyAmIzQzOzM1Miw3IEBAIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0cmV0dXJuIGVudHJ5O1xuIH1cbiBcbi1ib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxuJiM0MztzdGF0aWMgYm9vbCBfX2NoZWNrX3BtZF9odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXG4gXHRcdCAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRjaGFyIGJ1ZmZlcltNQVhfTElORV9MRU5HVEhdO1xuQEAgLTI0NywxOSAmIzQzOzM3MCw2MiBAQCBib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxuIFx0cmV0dXJuIHRocCA9PSAobnJfaHBhZ2VzICogKGhwYWdlX3NpemUgXHUwMDNlXHUwMDNlIDEwKSk7XG4gfVxuIFxuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4mIzQzO3N0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcJiMzNDtBbm9uSHVnZVBhZ2VzOiBcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0aW50IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTtcbiYjNDM7XHRpbnQgb3JkZXIgPSBHRVRfT1JERVIoaHBhZ2Vfc2l6ZSAvIHBhZ2VzaXplKTtcbiYjNDM7XHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbiYjNDM7XHRpbnQgb3JkZXJzW05SX09SREVSU10sIHN0YXR1cztcbiYjNDM7XHRib29sIHJldCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQob3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIE5SX09SREVSUyk7XG4mIzQzO1xuJiM0MztcdHBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVBfUEFUSCwgT19SRE9OTFkpO1xuJiM0MztcdGlmIChwYWdlbWFwX2ZkID09IC0xKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3JlYWQgcGFnZW1hcCBmYWlsXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0a3BhZ2VmbGFnc19mZCA9IG9wZW4oS1BBR0VGTEFHU19QQVRILCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGtwYWdlZmxhZ3NfZmQgPT0gLTEpIHtcbiYjNDM7XHRcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3JlYWQga3BhZ2VmbGFncyBmYWlsXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnMoYWRkciwgc2l6ZSwgcGFnZW1hcF9mZCxcbiYjNDM7XHRcdFx0a3BhZ2VmbGFnc19mZCwgb3JkZXJzLCBOUl9PUkRFUlMpO1xuJiM0MztcdGlmIChzdGF0dXMpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9yZGVyc1tvcmRlcl0gPT0gbnJfaHBhZ2VzKVxuJiM0MztcdFx0cmV0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjbG9zZShwYWdlbWFwX2ZkKTtcbiYjNDM7XHRjbG9zZShrcGFnZWZsYWdzX2ZkKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuJiM0Mztib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcJiMzNDtGaWxlUG1kTWFwcGVkOlwmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiYjNDM7XHRpZiAoaHBhZ2Vfc2l6ZSA9PSByZWFkX3BtZF9wYWdlc2l6ZSgpKVxuJiM0MztcdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7QW5vbkh1Z2VQYWdlczogXCYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGlmIChocGFnZV9zaXplID09IHJlYWRfcG1kX3BhZ2VzaXplKCkpXG4mIzQzO1x0XHRyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCBcJiMzNDtGaWxlUG1kTWFwcGVkOlwmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiYjNDM7Ym9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwmIzM0O1NobWVtUG1kTWFwcGVkOlwmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiYjNDM7XHRpZiAoaHBhZ2Vfc2l6ZSA9PSByZWFkX3BtZF9wYWdlc2l6ZSgpKVxuJiM0MztcdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7U2htZW1QbWRNYXBwZWQ6XCYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA3Nzk5MTU0YjY3ZWVkLi4yMGFmM2U1NzRjZDgwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC05MCwxMSAmIzQzOzkwLDEzIEBAIHZvaWQgY2xlYXJfc29mdGRpcnR5KHZvaWQpO1xuIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4gdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XG4gdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKTtcbi1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbi1ib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbi1ib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4mIzQzO2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4mIzQzO2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4mIzQzO2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpO1xuIGludCBwYWdlZmxhZ3NfZ2V0KHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQga3BhZ2VmbGFnc19mZCwgdWludDY0X3QgKmZsYWdzKTtcbiYjNDM7aW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4mIzQzO1x0XHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycyk7XG4gXG4gaW50IHVmZmRfcmVnaXN0ZXIoaW50IHVmZmQsIHZvaWQgKmFkZHIsIHVpbnQ2NF90IGxlbixcbiBcdFx0ICBib29sIG1pc3MsIGJvb2wgd3AsIGJvb2wgbWlub3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMmRhNmZkNWQ3NTBkNDQ4MjRlYjk2MDgwNDQ3YWJiYTI3YmZmODYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDU6MzI6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jCmluZGV4IDYzMjllMzdmZmY0YzkuLjQ1Yjg0ZjdiMzY0ZTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jCkBAIC0xODIsNyAmIzQzOzE4Miw3IEBAIHN0YXRpYyB1aW50NjRfdCBydW5faXRlcmF0aW9uKHZvaWQpCiAJZm9yIChpID0gMDsgaSAmbHQ7IFRPVEFMX1BBR0VTOyBpJiM0MzsmIzQzOykKIAkJZmlsbF9wYWdlKG1tYXBfYmFzZSwgaSk7CiAKLQlpZiAoIWNoZWNrX2h1Z2Vfc2htZW0obW1hcF9iYXNlLCBOUl9QTURfUEFHRSwgcG1kX3BhZ2VzaXplKSkKJiM0MzsJaWYgKCFjaGVja19odWdlX3NobWVtKG1tYXBfYmFzZSwgRklMRV9TSVpFLCBOUl9QTURfUEFHRSwgcG1kX3BhZ2VzaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Tm8gc2htZW0gVEhQIGlzIGFsbG9jYXRlZFxuJiMzNDspOwogCiAJaWYgKHB0aHJlYWRfYmFycmllcl9pbml0KCZhbXA7Y3RsLmJhcnJpZXIsIE5VTEwsIE5VTV9SRUFERVJfVEhSRUFEUyAmIzQzOyAxKSAhPSAwKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDEwZThkZWRjYjA4N2QuLmUyMWE2ZWMzODM2MzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKQEAgLTI2LDkgJiM0MzsyNiwxMSBAQAogCiAjZGVmaW5lIEJBU0VfQUREUiAoKHZvaWQgKikoMVVMICZsdDsmbHQ7IDMwKSkKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplOwomIzQzO3N0YXRpYyBpbnQgaHBhZ2VfcG1kX29yZGVyOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplOwogc3RhdGljIGludCBocGFnZV9wbWRfbnI7CiBzdGF0aWMgaW50IGFub25fb3JkZXI7CiYjNDM7c3RhdGljIGludCBjb2xsYXBzZV9vcmRlcjsKIAogI2RlZmluZSBQSURfU01BUFMgJiMzNDsvcHJvYy9zZWxmL3NtYXBzJiMzNDsKICNkZWZpbmUgVEVTVF9GSUxFICYjMzQ7Y29sbGFwc2VfdGVzdF9maWxlJiMzNDsKQEAgLTUxLDcgJiM0Mzs1Myw3IEBAIHN0cnVjdCBtZW1fb3BzIHsKIAl2b2lkICooKnNldHVwX2FyZWEpKGludCBucl9ocGFnZXMpOwogCXZvaWQgKCpjbGVhbnVwX2FyZWEpKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAJdm9pZCAoKmZhdWx0KSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7Ci0JYm9vbCAoKmNoZWNrX2h1Z2UpKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpOwomIzQzOwlib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpOwogCWNvbnN0IGNoYXIgKm5hbWU7CiB9OwogCkBAIC02OSw2ICYjNDM7NzEsNyBAQCBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCB7CiB9OwogCiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmtodWdlcGFnZWRfY29udGV4dDsKJiM0MztzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKm10aHBfa2h1Z2VwYWdlZF9jb250ZXh0Owogc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICptYWR2aXNlX2NvbnRleHQ7CiAKIHN0cnVjdCBmaWxlX2luZm8gewpAQCAtMjc2LDcgJiM0MzsyNzksNyBAQCBzdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcykKIAlrc2Z0X3ByaW50X21zZygmIzM0O0FsbG9jYXRlIGh1Z2UgcGFnZS4uLiYjMzQ7KTsKIAlpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O21hZHZpc2UoTUFEVl9DT0xMQVBTRSkmIzM0Oyk7Ci0JaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O21hZHZpc2UoTUFEVl9DT0xMQVBTRSkmIzM0Oyk7CiAJaWYgKG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpKQogCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttYWR2aXNlKE1BRFZfSFVHRVBBR0UpJiMzNDspOwpAQCAtMzEwLDkgJiM0MzszMTMsMTAgQEAgc3RhdGljIHZvaWQgYW5vbl9mYXVsdCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIAlmaWxsX21lbW9yeShwLCBzdGFydCwgZW5kKTsKIH0KIAotc3RhdGljIGJvb2wgYW5vbl9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpCiYjNDM7c3RhdGljIGJvb2wgYW5vbl9jaGVja19odWdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCWludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSkKIHsKLQlyZXR1cm4gY2hlY2tfaHVnZV9hbm9uKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpOwomIzQzOwlyZXR1cm4gY2hlY2tfaHVnZV9hbm9uKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiB9CiAKIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApCkBAIC00MTIsMTMgJiM0Mzs0MTYsMTQgQEAgc3RhdGljIHZvaWQgZmlsZV9mYXVsdF93cml0ZSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIAkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7bWFkdmlzZShNQURWX1BPUFVMQVRFX1dSSVRFKSYjMzQ7KTsKIH0KIAotc3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpCiYjNDM7c3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCWludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSkKIHsKIAlzd2l0Y2ggKGZpbmZvLnR5cGUpIHsKIAljYXNlIFZNQV9GSUxFOgotCQlyZXR1cm4gY2hlY2tfaHVnZV9maWxlKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpOwomIzQzOwkJcmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwogCWNhc2UgVk1BX1NITUVNOgotCQlyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTsKJiM0MzsJCXJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiAJZGVmYXVsdDoKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC00NDgsOSAmIzQzOzQ1MywxMCBAQCBzdGF0aWMgdm9pZCBzaG1lbV9jbGVhbnVwX2FyZWEodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKQogCWNsb3NlKGZpbmZvLmZkKTsKIH0KIAotc3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKQomIzQzO3N0YXRpYyBib29sIHNobWVtX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAomIzQzOwkJCWludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSkKIHsKLQlyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTsKJiM0MzsJcmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtZW1fb3BzIF9fYW5vbl9vcHMgPSB7CkBAIC01MzMsNyAmIzQzOzUzOSw3IEBAIHN0YXRpYyB2b2lkIF9fbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJcmV0ID0gbWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7CiAJaWYgKCgoYm9vbClyZXQpID09IGV4cGVjdCkKIAkJZmFpbCgmIzM0O0ZhaWw6IEJhZCByZXR1cm4gdmFsdWUmIzM0Oyk7Ci0JZWxzZSBpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSkKJiM0MzsJZWxzZSBpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKQogCQlmYWlsKCYjMzQ7RmFpbDogY2hlY2tfaHVnZSgpJiMzNDspOwogCWVsc2UKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwpAQCAtNTQ1LDMwICYjNDM7NTUxLDMxIEBAIHN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLAogCQkJICAgICBzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdCkKIHsKIAkvKiBTYW5pdHkgY2hlY2sgKi8KLQlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAwKSkKJiM0MzsJaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBodWdlIHBhZ2VcbiYjMzQ7KTsKIAlfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTsKIH0KIAogI2RlZmluZSBUSUNLIDUwMDAwMAotc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCi0JCQkgIHN0cnVjdCBtZW1fb3BzICpvcHMpCiYjNDM7c3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCWludCBucl9ocGFnZXMsIGludCBjb2xsYXBfb3JkZXIsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSAmbHQ7Jmx0OyBjb2xsYXBfb3JkZXI7CiAJaW50IGZ1bGxfc2NhbnM7CiAJaW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi8KIAogCS8qIFNhbml0eSBjaGVjayAqLwotCWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBzaXplLCAwLCBocGFnZV9zaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBodWdlIHBhZ2VcbiYjMzQ7KTsKIAotCW1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpOwomIzQzOwltYWR2aXNlKHAsIHNpemUsIE1BRFZfSFVHRVBBR0UpOwogCiAJLyogV2FpdCB1bnRpbCB0aGUgc2Vjb25kIGZ1bGxfc2NhbiBjb21wbGV0ZWQgKi8KIAlmdWxsX3NjYW5zID0gdGhwX3JlYWRfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9mdWxsX3NjYW5zJiMzNDspICYjNDM7IDI7CiAKIAlrc2Z0X3ByaW50X21zZygmIzM0OyVzLi4uJiMzNDssIG1zZyk7CiAJd2hpbGUgKHRpbWVvdXQtLSkgewotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIG5yX2hwYWdlcykpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSkpCiAJCQlicmVhazsKIAkJaWYgKHRocF9yZWFkX251bSgmIzM0O2todWdlcGFnZWQvZnVsbF9zY2FucyYjMzQ7KSAmZ3Q7PSBmdWxsX3NjYW5zKQogCQkJYnJlYWs7CkBAIC01ODIsNiAmIzQzOzU4OSw4IEBAIHN0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLAogc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJCQkJc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplOwomIzQzOwogCS8qCiAJICogcmVhZCZhbXA7d3JpdGUgZmlsZSBjb2xsYXBzZSBmYWlscyBzaW5jZSBraHVnZXBhZ2VkIGRvZXMgbm90IGZsdXNoCiAJICogdGhlIHRhcmdldCBkaXJ0eSBmb2xpb3MKQEAgLTU4OSw3ICYjNDM7NTk4LDcgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJaWYgKCFpc190bXBmcyhvcHMpICZhbXA7JmFtcDsgb3BzID09ICZhbXA7X19yZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKQogCQlleHBlY3QgPSBmYWxzZTsKIAotCWlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMpKSB7CiYjNDM7CWlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfb3JkZXIsIG9wcykpIHsKIAkJaWYgKGV4cGVjdCkKIAkJCWZhaWwoJiMzNDtUaW1lb3V0JiMzNDspOwogCQllbHNlCkBAIC02MDUsMTAgJiM0Mzs2MTQsNTQgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJaWYgKG9wcyAhPSAmYW1wO19fYW5vbl9vcHMpCiAJCW9wcy0mZ3Q7ZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpOwogCi0JaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSkKJiM0MzsJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBzaXplLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9wbWRfc2l6ZSkpCiYjNDM7CQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtdGhwX2todWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLAomIzQzOwkJCQlzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSAmbHQ7Jmx0OyBjb2xsYXBzZV9vcmRlcjsKJiM0MzsJc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5ncyA9ICp0aHBfY3VycmVudF9zZXR0aW5ncygpOwomIzQzOwkvKiBtVEhQIGNvbGxwYXNlIG9ubHkgYWxsb2NhdGVzIFBNRCBzaXplZCBtZW1vcnkgKi8KJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplID0gaHBhZ2VfcG1kX3NpemU7CiYjNDM7CiYjNDM7CS8qIFNldCBtVEhQIHNldHRpbmcgZm9yIG1USFAgY29sbGFwc2UgKi8KJiM0MzsJaWYgKG9wcyA9PSAmYW1wO19fYW5vbl9vcHMpIHsKJiM0MzsJCXNldHRpbmdzLnRocF9lbmFibGVkID0gVEhQX05FVkVSOwomIzQzOwkJc2V0dGluZ3MuaHVnZXBhZ2VzW2NvbGxhcHNlX29yZGVyXS5lbmFibGVkID0gVEhQX0FMV0FZUzsKJiM0MzsJfQomIzQzOwomIzQzOwl0aHBfcHVzaF9zZXR0aW5ncygmYW1wO3NldHRpbmdzKTsKJiM0MzsKJiM0MzsJaWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBzaXplLCBucl9ocGFnZXMsIGNvbGxhcHNlX29yZGVyLCBvcHMpKSB7CiYjNDM7CQlpZiAoZXhwZWN0KQomIzQzOwkJCWZhaWwoJiMzNDtUaW1lb3V0JiMzNDspOwomIzQzOwkJZWxzZQomIzQzOwkJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKJiM0MzsKJiM0MzsJCS8qIFJlc3RvcmUgVEhQIHNldHRpbmdzIGZvciBtVEhQIGNvbGxhcHNlLiAqLwomIzQzOwkJdGhwX3BvcF9zZXR0aW5ncygpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvciBmaWxlIGFuZCBzaG1lbSBtZW1vcnksIGtodWdlcGFnZWQgb25seSByZXRyYWN0cyBwdGUgZW50cmllcyBhZnRlcgomIzQzOwkgKiBwdXR0aW5nIHRoZSBuZXcgaHVnZXBhZ2UgaW4gdGhlIHBhZ2UgY2FjaGUuIFRoZSBodWdlcGFnZSBtdXN0IGJlCiYjNDM7CSAqIHN1YnNlcXVlbnRseSByZWZhdWx0ZWQgdG8gaW5zdGFsbCB0aGUgcG1kIG1hcHBpbmcgZm9yIHRoZSBtbS4KJiM0MzsJICovCiYjNDM7CWlmIChvcHMgIT0gJmFtcDtfX2Fub25fb3BzKQomIzQzOwkJb3BzLSZndDtmYXVsdChwLCAwLCBucl9ocGFnZXMgKiBocGFnZV9zaXplKTsKJiM0MzsKJiM0MzsJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBzaXplLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFJlc3RvcmUgVEhQIHNldHRpbmdzIGZvciBtVEhQIGNvbGxhcHNlLiAqLwomIzQzOwl0aHBfcG9wX3NldHRpbmdzKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX2todWdlcGFnZWRfY29udGV4dCA9IHsKQEAgLTYxNyw2ICYjNDM7NjcwLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX2todWdlcGFnZWRfY29udGV4dCA9IHsKIAkubmFtZSA9ICYjMzQ7a2h1Z2VwYWdlZCYjMzQ7LAogfTsKIAomIzQzO3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0ID0gewomIzQzOwkuY29sbGFwc2UgPSAmYW1wO210aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZSwKJiM0MzsJLmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gdHJ1ZSwKJiM0MzsJLm5hbWUgPSAmIzM0O210aHBfa2h1Z2VwYWdlZCYjMzQ7LAomIzQzO307CiYjNDM7CiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tYWR2aXNlX2NvbnRleHQgPSB7CiAJLmNvbGxhcHNlID0gJmFtcDttYWR2aXNlX2NvbGxhcHNlLAogCS5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IGZhbHNlLApAQCAtNjM0LDcgJiM0Mzs2OTMsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKQogCXAgPSBhbGxvY19tYXBwaW5nKDEpOwogCSpwID0gMTsKIAlrc2Z0X3ByaW50X21zZygmIzM0O0FsbG9jYXRlIGh1Z2UgcGFnZSBvbiBmYXVsdC4uLiYjMzQ7KTsKLQlpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIDEsIGhwYWdlX3BtZF9zaXplKSkKJiM0MzsJaWYgKGNoZWNrX2h1Z2VfYW5vbihwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKQogCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJZWxzZQogCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTY0Myw3ICYjNDM7NzAyLDcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZCkKIAogCW1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTsKIAlrc2Z0X3ByaW50X21zZygmIzM0O1NwbGl0IGh1Z2UgUE1EIG9uIE1BRFZfRE9OVE5FRUQuLi4mIzM0Oyk7Ci0JaWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiYjNDM7CWlmIChjaGVja19odWdlX2Fub24ocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC02NTUsMTAgJiM0Mzs3MTQsMTcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZCkKIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGwoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiB7CiAJdm9pZCAqcDsKLQlpbnQgbnJfaHBhZ2VzID0gNDsKJiM0MzsJaW50IG5yX3BtZHMgPSA0LCBucl9ocGFnZXMgPSA0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplOwogCi0JcCA9IG9wcy0mZ3Q7c2V0dXBfYXJlYShucl9ocGFnZXMpOwomIzQzOwkvKiBPbmx5IHRyeSAxIFBNRCBzaXplZCByYW5nZSBmb3IgbVRIUCBjb2xsYXBzZS4gKi8KJiM0MzsJaWYgKGMgPT0gJmFtcDtfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0KSB7CiYjNDM7CQlucl9wbWRzID0gMTsKJiM0MzsJCW5yX2hwYWdlcyA9IDEgJmx0OyZsdDsgKGhwYWdlX3BtZF9vcmRlciAtIGNvbGxhcHNlX29yZGVyKTsKJiM0MzsJCXNpemUgPSBocGFnZV9wbWRfc2l6ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlwID0gb3BzLSZndDtzZXR1cF9hcmVhKG5yX3BtZHMpOwogCW9wcy0mZ3Q7ZmF1bHQocCwgMCwgc2l6ZSk7CiAJYy0mZ3Q7Y29sbGFwc2UoJiMzNDtDb2xsYXBzZSBtdWx0aXBsZSBmdWxseSBwb3B1bGF0ZWQgUFRFIHRhYmxlJiMzNDssIHAsIG5yX2hwYWdlcywKIAkJICAgIG9wcywgdHJ1ZSk7CkBAIC02NzAsMTAgJiM0Mzs3MzYsMzEgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcykKIAogc3RhdGljIHZvaWQgY29sbGFwc2VfZW1wdHkoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiB7CiYjNDM7CWludCBucl9ocGFnZXMgPSAxOwogCXZvaWQgKnA7CiAKJiM0MzsJaWYgKGMgPT0gJmFtcDtfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0KQomIzQzOwkJbnJfaHBhZ2VzID0gMSAmbHQ7Jmx0OyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpOwomIzQzOwogCXAgPSBvcHMtJmd0O3NldHVwX2FyZWEoMSk7Ci0JYy0mZ3Q7Y29sbGFwc2UoJiMzNDtEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlJiMzNDssIHAsIDEsIG9wcywgZmFsc2UpOwomIzQzOwljLSZndDtjb2xsYXBzZSgmIzM0O0RvIG5vdCBjb2xsYXBzZSBlbXB0eSBQVEUgdGFibGUmIzM0OywgcCwgbnJfaHBhZ2VzLCBvcHMsIGZhbHNlKTsKJiM0MzsJb3BzLSZndDtjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgJiMzNDslc1xuJiMzNDssIF9fZnVuY19fKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX210aHAoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgJmx0OyZsdDsgY29sbGFwc2Vfb3JkZXI7CiYjNDM7CXZvaWQgKnA7CiYjNDM7CiYjNDM7CXAgPSBvcHMtJmd0O3NldHVwX2FyZWEoMSk7CiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgZmF1bHQgY29sbGFwc2Vfb3JkZXIgc2l6ZWQgcmFuZ2VzLCBhbmQgb25seSBjaGVjayAxCiYjNDM7CSAqIGNvbGxhcHNlX29yZGVyIHNpemVkIGh1Z2UgcGFnZS4KJiM0MzsJICovCiYjNDM7CW9wcy0mZ3Q7ZmF1bHQocCwgMCwgaHBhZ2Vfc2l6ZSk7CiYjNDM7CWMtJmd0O2NvbGxhcHNlKCYjMzQ7Q29sbGFwc2UgUFRFIHRhYmxlIHdpdGggaGFsZiBQVEUgZW50cmllcyBwcmVzZW50JiMzNDssCiYjNDM7CQlwLCAxLCBvcHMsIHRydWUpOwogCW9wcy0mZ3Q7Y2xlYW51cF9hcmVhKHAsIGhwYWdlX3BtZF9zaXplKTsKIAlrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgJiMzNDslc1xuJiMzNDssIF9fZnVuY19fKTsKIH0KQEAgLTgxNSw3ICYjNDM7OTAyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeV9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWMKIAltYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpOwogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBtYXBwaW5nIGNvbXBvdW5kIHBhZ2UuLi4mIzM0Oyk7CiAJbWFkdmlzZShwICYjNDM7IHBhZ2Vfc2l6ZSwgaHBhZ2VfcG1kX3NpemUgLSBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC04MzYsNyAmIzQzOzkyMyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGxfb2ZfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJa3NmdF9wcmludF9tc2coJiMzNDtTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIHBhZ2UgdGFibGUgZnVsbCBvZiBjb21wb3VuZCBwYWdlcy4uLiYjMzQ7KTsKIAltYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAltYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC04NTgsNyAmIzQzOzk0NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2NvbXBvdW5kX2V4dHJlbWUoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJZm9yIChpID0gMDsgaSAmbHQ7IGhwYWdlX3BtZF9ucjsgaSYjNDM7JiM0MzspIHsKIAkJbWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTsKIAkJb3BzLSZndDtmYXVsdChCQVNFX0FERFIsIDAsIGhwYWdlX3BtZF9zaXplKTsKLQkJaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UoQkFTRV9BRERSLCAxKSkKJiM0MzsJCWlmICghb3BzLSZndDtjaGVja19odWdlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBodWdlIHBhZ2VcbiYjMzQ7KTsKIAkJbWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpOwogCkBAIC04ODEsNyAmIzQzOzk2OCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2NvbXBvdW5kX2V4dHJlbWUoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAKIAlvcHMtJmd0O2NsZWFudXBfYXJlYShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplKTsKIAlvcHMtJmd0O2ZhdWx0KHAsIDAsIGhwYWdlX3BtZF9zaXplKTsKLQlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAxKSkKJiM0MzsJaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC05MDMsNyAmIzQzOzk5MCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiAKIAlrc2Z0X3ByaW50X21zZygmIzM0O0FsbG9jYXRlIHNtYWxsIHBhZ2UuLi4mIzM0Oyk7CiAJb3BzLSZndDtmYXVsdChwLCAwLCBwYWdlX3NpemUpOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC05MTEsNyAmIzQzOzk5OCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiAJa3NmdF9wcmludF9tc2coJiMzNDtTaGFyZSBzbWFsbCBwYWdlIG92ZXIgZm9yaygpLi4uJiMzNDspOwogCWlmICghZm9yaygpKSB7CiAJCS8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovCi0JCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCWVsc2UKIAkJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtOTI5LDcgJiM0MzsxMDE2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcykKIAlleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpOwogCiAJa3NmdF9wcmludF9tc2coJiMzNDtDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIHNtYWxsIHBhZ2UuLi4mIzM0Oyk7Ci0JaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAwKSkKJiM0MzsJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKQogCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJZWxzZQogCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTk0Nyw3ICYjNDM7MTAzNCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvCiAJa3NmdF9wcmludF9tc2coJiMzNDtTaGFyZSBodWdlIHBhZ2Ugb3ZlciBmb3JrKCkuLi4mIzM0Oyk7CiAJaWYgKCFmb3JrKCkpIHsKIAkJLyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi8KLQkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAxKSkKJiM0MzsJCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAkJZWxzZQogCQkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC05NTUsNyAmIzQzOzEwNDIsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqbwogCQlrc2Z0X3ByaW50X21zZygmIzM0O1NwbGl0IGh1Z2UgcGFnZSBQTUQgaW4gY2hpbGQgcHJvY2Vzcy4uLiYjMzQ7KTsKIAkJbWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiAJCW1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7Ci0JCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCWVsc2UKIAkJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtOTc2LDcgJiM0MzsxMDYzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm8KIAlleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpOwogCiAJa3NmdF9wcmludF9tc2coJiMzNDtDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIGh1Z2UgcGFnZS4uLiYjMzQ7KTsKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDEpKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAllbHNlCiAJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtOTk1LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcwogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uJiMzNDspOwogCWlmICghZm9yaygpKSB7CiAJCS8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovCi0JCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCWVsc2UKIAkJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtMTAwMyw3ICYjNDM7MTA5MCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMKIAkJa3NmdF9wcmludF9tc2coJiMzNDtUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uJiMzNDssCiAJCQkJaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSwgaHBhZ2VfcG1kX25yKTsKIAkJb3BzLSZndDtmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSkgKiBwYWdlX3NpemUpOwotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKQogCQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCQllbHNlCiAJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTEwMTYsNyAmIzQzOzExMDMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJCQkgICAgICAgaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkLCBocGFnZV9wbWRfbnIpOwogCQkJb3BzLSZndDtmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkKSAqCiAJCQkJICAgIHBhZ2Vfc2l6ZSk7Ci0JCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCQllbHNlCiAJCQkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC0xMDM0LDcgJiM0MzsxMTIxLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcwogCWV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7CiAKIAlrc2Z0X3ByaW50X21zZygmIzM0O0NoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uJiMzNDspOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC0xMDc1LDggJiM0MzsxMTYyLDggQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9yZXRyYWN0ZWRfcGFnZV90YWJsZXMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsCiAJb3BzLSZndDtmYXVsdChwLCAwLCBzaXplKTsKIAogCS8qIExldCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCBsZWF2ZSBwbWQgY2xlYXJlZCAqLwotCWlmICh3YWl0X2Zvcl9zY2FuKCYjMzQ7Q29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkJiMzNDssIHAsIG5yX2hwYWdlcywKLQkJCSAgb3BzKSkgewomIzQzOwlpZiAod2FpdF9mb3Jfc2NhbigmIzM0O0NvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZCYjMzQ7LCBwLCBzaXplLCBucl9ocGFnZXMsCiYjNDM7CQkJICBocGFnZV9wbWRfb3JkZXIsIG9wcykpIHsKIAkJZmFpbCgmIzM0O1RpbWVvdXQmIzM0Oyk7CiAJCXJldHVybjsKIAl9CkBAIC0xMDkyLDcgJiM0MzsxMTc5LDcgQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcblVzYWdlOiAuL2todWdlcGFnZWQgW09QVElPTlNdICZsdDt0ZXN0IHR5cGUmZ3Q7IFtkaXJdXG5cbiYjMzQ7KTsKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcdCZsdDt0ZXN0IHR5cGUmZ3Q7XHQ6ICZsdDtjb250ZXh0Jmd0OzombHQ7bWVtX3R5cGUmZ3Q7XG4mIzM0Oyk7Ci0JZnByaW50ZihzdGRlcnIsICYjMzQ7XHQmbHQ7Y29udGV4dCZndDtcdDogW2FsbHxraHVnZXBhZ2VkfG1hZHZpc2VdXG4mIzM0Oyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O1x0Jmx0O2NvbnRleHQmZ3Q7XHQ6IFthbGx8a2h1Z2VwYWdlZHxtdGhwX2todWdlcGFnZWR8bWFkdmlzZV1cbiYjMzQ7KTsKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcdCZsdDttZW1fdHlwZSZndDtcdDogW2FsbHxhbm9ufGZpbGV8c2htZW1dXG4mIzM0Oyk7CiAJZnByaW50ZihzdGRlcnIsICYjMzQ7XG5cdFwmIzM0O2ZpbGUsYWxsXCYjMzQ7IG1lbV90eXBlIHJlcXVpcmVzIFtkaXJdIGFyZ3VtZW50XG4mIzM0Oyk7CiAJZnByaW50ZihzdGRlcnIsICYjMzQ7XG5cdFwmIzM0O2ZpbGUsYWxsXCYjMzQ7IG1lbV90eXBlIHJlcXVpcmVzIGEgZmlsZSBzeXN0ZW1cbiYjMzQ7KTsKQEAgLTExMDMsNiAmIzQzOzExOTAsNyBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogCWZwcmludGYoc3RkZXJyLAkmIzM0O1x0XHQtaDogVGhpcyBoZWxwIG1lc3NhZ2UuXG4mIzM0Oyk7CiAJZnByaW50ZihzdGRlcnIsCSYjMzQ7XHRcdC1zOiBtVEhQIHNpemUsIGV4cHJlc3NlZCBhcyBwYWdlIG9yZGVyLlxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLAkmIzM0O1x0XHQgICAgRGVmYXVsdHMgdG8gMC4gVXNlIHRoaXMgc2l6ZSBmb3IgYW5vbiBvciBzaG1lbSBhbGxvY2F0aW9ucy5cbiYjMzQ7KTsKJiM0MzsJZnByaW50ZihzdGRlcnIsCSYjMzQ7XHRcdC1jOiBjb2xsYXBzZSBvcmRlciBmb3IgbVRIUCBjb2xsYXBzZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXG4mIzM0Oyk7CiAJZXhpdCgxKTsKIH0KIApAQCAtMTExMiwxMSAmIzQzOzEyMDAsMTQgQEAgc3RhdGljIHZvaWQgcGFyc2VfdGVzdF90eXBlKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljaGFyICpidWY7CiAJY29uc3QgY2hhciAqdG9rZW47CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O3M6aCYjMzQ7KSkgIT0gLTEpIHsKJiM0MzsJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDtzOmM6aCYjMzQ7KSkgIT0gLTEpIHsKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAmIzM5O3MmIzM5OzoKIAkJCWFub25fb3JkZXIgPSBhdG9pKG9wdGFyZyk7CiAJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtjJiMzOTs6CiYjNDM7CQkJY29sbGFwc2Vfb3JkZXIgPSBhdG9pKG9wdGFyZyk7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtoJiMzOTs6CiAJCWRlZmF1bHQ6CiAJCQl1c2FnZSgpOwpAQCAtMTE0Miw2ICYjNDM7MTIzMywxMCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQltYWR2aXNlX2NvbnRleHQgPSAgJmFtcDtfX21hZHZpc2VfY29udGV4dDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICYjMzQ7a2h1Z2VwYWdlZCYjMzQ7KSkgewogCQlraHVnZXBhZ2VkX2NvbnRleHQgPSAgJmFtcDtfX2todWdlcGFnZWRfY29udGV4dDsKJiM0MzsJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAmIzM0O210aHBfa2h1Z2VwYWdlZCYjMzQ7KSkgewomIzQzOwkJbXRocF9raHVnZXBhZ2VkX2NvbnRleHQgPSAgJmFtcDtfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0OwomIzQzOwkJaWYgKGNvbGxhcHNlX29yZGVyICZsdDs9IDAgfHwgY29sbGFwc2Vfb3JkZXIgJmd0Oz0gaHBhZ2VfcG1kX29yZGVyKQomIzQzOwkJCXVzYWdlKCk7CiAJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAmIzM0O21hZHZpc2UmIzM0OykpIHsKIAkJbWFkdmlzZV9jb250ZXh0ID0gICZhbXA7X19tYWR2aXNlX2NvbnRleHQ7CiAJfSBlbHNlIHsKQEAgLTEyMDcsNyAmIzQzOzEzMDIsNiBAQCBzdGF0aWMgaW50IG5yX3Rlc3RfY2FzZXM7CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKLQlpbnQgaHBhZ2VfcG1kX29yZGVyOwogCXN0cnVjdCB0aHBfc2V0dGluZ3MgZGVmYXVsdF9zZXR0aW5ncyA9IHsKIAkJLnRocF9lbmFibGVkID0gVEhQX01BRFZJU0UsCiAJCS50aHBfZGVmcmFnID0gVEhQX0RFRlJBR19BTFdBWVMsCkBAIC0xMjMzLDEwICYjNDM7MTMyNyw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAoIXRocF9pc19lbmFibGVkKCkpCiAJCWtzZnRfZXhpdF9za2lwKCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcbiYjMzQ7KTsKIAotCXBhcnNlX3Rlc3RfdHlwZShhcmdjLCBhcmd2KTsKLQotCXNldGJ1ZihzdGRvdXQsIE5VTEwpOwotCiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKIAlocGFnZV9wbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiAJaWYgKCFocGFnZV9wbWRfc2l6ZSkKQEAgLTEyNDQsNiAmIzQzOzEzMzQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWhwYWdlX3BtZF9uciA9IGhwYWdlX3BtZF9zaXplIC8gcGFnZV9zaXplOwogCWhwYWdlX3BtZF9vcmRlciA9IF9fYnVpbHRpbl9jdHooaHBhZ2VfcG1kX25yKTsKIAomIzQzOwlwYXJzZV90ZXN0X3R5cGUoYXJnYywgYXJndik7CiYjNDM7CiYjNDM7CXNldGJ1ZihzdGRvdXQsIE5VTEwpOwomIzQzOwogCWRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19ub25lID0gaHBhZ2VfcG1kX25yIC0gMTsKIAlkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc3dhcCA9IGhwYWdlX3BtZF9uciAvIDg7CiAJZGVmYXVsdF9zZXR0aW5ncy5raHVnZXBhZ2VkLm1heF9wdGVzX3NoYXJlZCA9IGhwYWdlX3BtZF9uciAvIDI7CkBAIC0xMjYxLDYgJiM0MzsxMzU1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCVRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpOwogCVRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKTsKIAlURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgc2htZW1fb3BzKTsKJiM0MzsJVEVTVChjb2xsYXBzZV9mdWxsLCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpOwogCVRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7CiAJVEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7CiAJVEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7CkBAIC0xMjY4LDggJiM0MzsxMzYzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgc2htZW1fb3BzKTsKIAogCVRFU1QoY29sbGFwc2VfZW1wdHksIGtodWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpOwomIzQzOwlURVNUKGNvbGxhcHNlX2VtcHR5LCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpOwogCVRFU1QoY29sbGFwc2VfZW1wdHksIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpOwogCiYjNDM7CVRFU1QoY29sbGFwc2Vfc2luZ2xlX210aHAsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7CiYjNDM7CiAJVEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTsKIAlURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF9vbmx5X2ZpbGVfb3BzKTsKIAlURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwppbmRleCAxYjJkZmZjYzk5OWIwLi5jZmQxOTg3MzM5YzEzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLAogCW1lbXNldChtZW0sIDEsIHNpemUpOwogCWlmICh1c2VfdGhwICZhbXA7JmFtcDsKIAkgICAgKG1hZHZpc2UobWVtLCBzaXplLCBNQURWX0NPTExBUFNFKSB8fAotCSAgICAgIWNoZWNrX2h1Z2VfYW5vbihtZW0sIHNpemUgLyBocGFnZV9zaXplLCBocGFnZV9zaXplKSkpIHsKJiM0MzsJICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkgewogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxuJiMzNDssIG5hbWUpOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYwppbmRleCBkOGQ5ZDFkZTU3YjhiLi44MmM2ZTk2ZWE2ZWIzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKQEAgLTY3LDcgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tbWFwX3RocChlbnVtIHRocF9jb2xsYXBzZV90eXBlIG1hZHZpc2VfYnVmLCBzaXplX3QgcG1kc2l6ZSkKIAkvKiBIQUNLOiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNlcGFyYXRlIFZNQSB0aGF0IHdlIGNhbiBjaGVjayByZWxpYWJseS4gKi8KIAltcHJvdGVjdChtZW0sIHBtZHNpemUsIFBST1RfUkVBRCk7CiAKLQlyZXQgPSBjaGVja19odWdlX2Fub24obWVtLCAxLCBwbWRzaXplKTsKJiM0MzsJcmV0ID0gY2hlY2tfaHVnZV9hbm9uKG1lbSwgcG1kc2l6ZSwgMSwgcG1kc2l6ZSk7CiAJbXVubWFwKG1tYXBfbWVtLCBtbWFwX3NpemUpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCmluZGV4IDY4N2QxMTVlM2JkODAuLmQwOWY5ZjZhMzg0ZWUgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCkBAIC00MTAsNiAmIzQzOzQxMCw4IEBAIENBVEVHT1JZPSYjMzQ7dGhwJiMzNDsgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIGFsbDpzaG1lbQogCiBDQVRFR09SWT0mIzM0O3RocCYjMzQ7IHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCAtcyA0IGFsbDpzaG1lbQogCiYjNDM7Q0FURUdPUlk9JiMzNDt0aHAmIzM0OyBydW5fdGVzdCAuL2todWdlcGFnZWQgLWMgNCBtdGhwX2todWdlcGFnZWQ6YW5vbgomIzQzOwogIyBUcnkgdG8gY3JlYXRlIFhGUyBpZiBub3QgcHJvdmlkZWQKIGlmIFsgLXogJiMzNDske1NQTElUX0hVR0VfUEFHRV9URVNUX1hGU19QQVRIfSYjMzQ7IF07IHRoZW4KICAgICBpZiB0ZXN0X3NlbGVjdGVkICYjMzQ7dGhwJiMzNDs7IHRoZW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwppbmRleCBmYjE4NjRhNjhlMWM2Li5lMTk4ZmFjZjc4YmI1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCkBAIC0xMDMsNyAmIzQzOzEwMyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSkKIAlmb3IgKGkgPSAwOyBpICZsdDsgaHBhZ2VfbGVuOyBpJiM0MzsmIzQzOykKIAkJbWFwW2ldID0gKGNoYXIpaTsKIAotCWlmIChjaGVja19odWdlX2Fub24obWFwLCAxLCBocGFnZV9sZW4pKSB7CiYjNDM7CWlmIChjaGVja19odWdlX2Fub24obWFwLCBocGFnZV9sZW4sIDEsIGhwYWdlX2xlbikpIHsKIAkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7VGVzdCAlcyBodWdlIHBhZ2UgYWxsb2NhdGlvblxuJiMzNDssIF9fZnVuY19fKTsKIAogCQljbGVhcl9zb2Z0ZGlydHkoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCmluZGV4IDMyYjk5MTQ3MmY3NDQuLjg2YTYwMzY5MjgyNjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwpAQCAtMTA0LDEyOSAmIzQzOzEwNCw2IEBAIHN0YXRpYyBib29sIGlzX2JhY2tlZF9ieV9mb2xpbyhjaGFyICp2YWRkciwgaW50IG9yZGVyLCBpbnQgcGFnZW1hcF9mZCwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLAotCQl1aW50NjRfdCAqZmxhZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0KLQlwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpOwotCi0JLyogbm9uLXByZXNlbnQgUEZOICovCi0JaWYgKHBmbiA9PSAtMVVMKQotCQlyZXR1cm4gMTsKLQotCWlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgZmxhZ3MpKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmQKLSAqIGZvbGlvIG9yZGVycwotICoKLSAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHIKLSAqIEBsZW46IHJhbmdlIGxlbmd0aAotICogQHBhZ2VtYXBfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy8mbHQ7cGlkJmd0Oy9wYWdlbWFwCi0gKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3MKLSAqIEBvcmRlcnM6IG91dHB1dCBmb2xpbyBvcmRlciBhcnJheQotICogQG5yX29yZGVyczogZm9saW8gb3JkZXIgYXJyYXkgc2l6ZQotICoKLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoKSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCBjaGVjawotICogYWxsIGZvbGlvcyB3aXRoaW4gdGhlIHJhbmdlIGFuZCByZWNvcmQgdGhlaXIgb3JkZXJzLiBBbGwgb3JkZXItMCBwYWdlcyB3aWxsCi0gKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC4KLSAqCi0gKiBOT1RFOiB0aGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBmb2xpbyBvcmRlcnMgYWZ0ZXIgYSBzcGxpdCBpcyBwZXJmb3JtZWQsCi0gKiBzbyBpdCBhc3N1bWVzIFt2YWRkcl9zdGFydCwgbGVuKSBmdWxseSBtYXBzIHRvIGFmdGVyLXNwbGl0IGZvbGlvcyB3aXRoaW4gdGhhdAotICogcmFuZ2UuCi0gKgotICogUmV0dXJuOiAwIC0gbm8gZXJyb3IsIC0xIC0gdW5oYW5kbGVkIGNhc2VzCi0gKi8KLXN0YXRpYyBpbnQgZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbiwKLQkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpCi17Ci0JdWludDY0X3QgcGFnZV9mbGFncyA9IDA7Ci0JaW50IGN1cl9vcmRlciA9IC0xOwotCWNoYXIgKnZhZGRyOwotCi0JaWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSkKLQkJcmV0dXJuIC0xOwotCWlmICghb3JkZXJzKQotCQlyZXR1cm4gLTE7Ci0JaWYgKG5yX29yZGVycyAmbHQ7PSAwKQotCQlyZXR1cm4gLTE7Ci0KLQlmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyICZsdDsgdmFkZHJfc3RhcnQgJiM0MzsgbGVuOykgewotCQljaGFyICpuZXh0X2ZvbGlvX3ZhZGRyOwotCQlpbnQgc3RhdHVzOwotCi0JCXN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQodmFkZHIsIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsCi0JCQkJCSZhbXA7cGFnZV9mbGFncyk7Ci0JCWlmIChzdGF0dXMgJmx0OyAwKQotCQkJcmV0dXJuIC0xOwotCi0JCS8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi8KLQkJaWYgKHN0YXR1cyA9PSAxKSB7Ci0JCQl2YWRkciAmIzQzOz0gcHNpemUoKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovCi0JCWlmICghKHBhZ2VfZmxhZ3MgJmFtcDsgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkgewotCQkJb3JkZXJzWzBdJiM0MzsmIzQzOzsKLQkJCXZhZGRyICYjNDM7PSBwc2l6ZSgpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi8KLQkJaWYgKCEocGFnZV9mbGFncyAmYW1wOyBLUEZfVEhQKSkgewotCQkJdmFkZHIgJiM0Mzs9IHBzaXplKCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovCi0JCWlmIChwYWdlX2ZsYWdzICZhbXA7IEtQRl9DT01QT1VORF9IRUFEKQotCQkJY3VyX29yZGVyID0gMTsKLQkJZWxzZSB7Ci0JCQl2YWRkciAmIzQzOz0gcHNpemUoKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJbmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpOwotCi0JCWlmIChuZXh0X2ZvbGlvX3ZhZGRyICZndDs9IHZhZGRyX3N0YXJ0ICYjNDM7IGxlbikKLQkJCWJyZWFrOwotCi0JCXdoaWxlICgoc3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldChuZXh0X2ZvbGlvX3ZhZGRyLAotCQkJCQkJICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLAotCQkJCQkJICAgICAmYW1wO3BhZ2VfZmxhZ3MpKSAmZ3Q7PSAwKSB7Ci0JCQkvKgotCQkJICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvcgotCQkJICogb3JkZXItMCBwYWdlCi0JCQkgKi8KLQkJCWlmIChzdGF0dXMgPT0gMSB8fAotCQkJICAgIChwYWdlX2ZsYWdzICZhbXA7IEtQRl9DT01QT1VORF9IRUFEKSB8fAotCQkJICAgICEocGFnZV9mbGFncyAmYW1wOyAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7Ci0JCQkJaWYgKGN1cl9vcmRlciAmbHQ7IG5yX29yZGVycykgewotCQkJCQlvcmRlcnNbY3VyX29yZGVyXSYjNDM7JiM0Mzs7Ci0JCQkJCWN1cl9vcmRlciA9IC0xOwotCQkJCQl2YWRkciA9IG5leHRfZm9saW9fdmFkZHI7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCi0JCQljdXJfb3JkZXImIzQzOyYjNDM7OwotCQkJbmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpOwotCQl9Ci0KLQkJaWYgKHN0YXR1cyAmbHQ7IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlpZiAoY3VyX29yZGVyICZndDsgMCAmYW1wOyZhbXA7IGN1cl9vcmRlciAmbHQ7IG5yX29yZGVycykKLQkJb3JkZXJzW2N1cl9vcmRlcl0mIzQzOyYjNDM7OwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbiwKIAkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpCiB7CkBAIC0yNDAsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLAogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2YWRkcl9vcmRlcnMmIzM0Oyk7CiAKIAltZW1zZXQodmFkZHJfb3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIG5yX29yZGVycyk7Ci0Jc3RhdHVzID0gZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLAomIzQzOwlzdGF0dXMgPSBnYXRoZXJfZm9saW9fb3JkZXJzKHZhZGRyX3N0YXJ0LCBsZW4sIHBhZ2VtYXBfZmQsCiAJCQkJICAgICBrcGFnZWZsYWdzX2ZkLCB2YWRkcl9vcmRlcnMsIG5yX29yZGVycyk7CiAJaWYgKHN0YXR1cykKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Z2F0aGVyIGZvbGlvIGluZm8gZmFpbGVkXG4mIzM0Oyk7CkBAIC0yOTYsNyAmIzQzOzE3Myw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwCiAJdW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyOwogCXNpemVfdCBpOwogCi0JaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSkKJiM0MzsJaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtObyBUSFAgaXMgYWxsb2NhdGVkXG4mIzM0Oyk7CiAKIAlyc3NfYW5vbl9iZWZvcmUgPSByc3NfYW5vbigpOwpAQCAtMzExLDcgJiM0MzsxODgsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocAogCQlpZiAob25lX3BhZ2VbaV0gIT0gKGNoYXIpMCkKIAkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0OyVsZCBieXRlIGNvcnJ1cHRlZFxuJiMzNDssIGkpOwogCi0JaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpCiYjNDM7CWlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCBucl9ocGFnZXMgKiBwbWRfcGFnZXNpemUsIDAsIHBtZF9wYWdlc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XG4mIzM0Oyk7CiAKIAlyc3NfYW5vbl9hZnRlciA9IHJzc19hbm9uKCk7CkBAIC0zNDcsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKQogCWZvciAoaSA9IDA7IGkgJmx0OyBsZW47IGkmIzQzOyYjNDM7KQogCQlvbmVfcGFnZVtpXSA9IChjaGFyKWk7CiAKLQlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCwgcG1kX3BhZ2VzaXplKSkKJiM0MzsJaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDQsIHBtZF9wYWdlc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O05vIFRIUCBpcyBhbGxvY2F0ZWRcbiYjMzQ7KTsKIAogCS8qIHNwbGl0IGFsbCBUSFBzICovCkBAIC0zNjYsNyAmIzQzOzI0Myw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKQogCQkJCQkgICAocG1kX29yZGVyICYjNDM7IDEpKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBUSFAgc3BsaXRcbiYjMzQ7KTsKIAotCWlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAwLCBwbWRfcGFnZXNpemUpKQomIzQzOwlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7U3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcbiYjMzQ7KTsKIAogCWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0O1NwbGl0IGh1Z2UgcGFnZXMgdG8gb3JkZXIgJWQgc3VjY2Vzc2Z1bFxuJiMzNDssIG9yZGVyKTsKQEAgLTM5Myw3ICYjNDM7MjcwLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcHRlX21hcHBlZF90aHAodm9pZCkKIAlmb3IgKGkgPSAwOyBpICZsdDsgdGhwX2FyZWFfc2l6ZTsgaSYjNDM7JiM0MzspCiAJCXRocF9hcmVhW2ldID0gKGNoYXIpaTsKIAotCWlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7CiYjNDM7CWlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzICogcG1kX3BhZ2VzaXplLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7CiAJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O05vdCBhbGwgVEhQcyBhbGxvY2F0ZWRcbiYjMzQ7KTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNjU3LDcgJiM0Mzs1MzQsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9wYWdlY2FjaGVfdGhwX2FuZF9mZChjb25zdCBjaGFyICp0ZXN0ZmlsZSwgc2l6ZV90IGZkX3NpemUsCiAKIAlmb3JjZV9yZWFkX3BhZ2VzKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpOwogCi0JaWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHsKJiM0MzsJaWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHsKIAkJa3NmdF9wcmludF9tc2coJiMzNDtObyBsYXJnZSBwYWdlY2FjaGUgZm9saW8gZ2VuZXJhdGVkLCBwbGVhc2UgcHJvdmlkZSBhIGZpbGVzeXN0ZW0gc3VwcG9ydGluZyBsYXJnZSBmb2xpb1xuJiMzNDspOwogCQltdW5tYXAoKmFkZHIsIGZkX3NpemUpOwogCQljbG9zZSgqZmQpOwpAQCAtNzM1LDcgJiM0Mzs2MTIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF90aHBfaW5fcGFnZWNhY2hlX3RvX29yZGVyX2F0KHNpemVfdCBmZF9zaXplLAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7CiYjNDM7CWlmICghY2hlY2tfaHVnZV9maWxlKGFkZHIsIGZkX3NpemUsIDAsIHBtZF9wYWdlc2l6ZSkpIHsKIAkJa3NmdF9wcmludF9tc2coJiMzNDtTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxuJiMzNDspOwogCQllcnIgPSBFWElUX0ZBSUxVUkU7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMKaW5kZXggZjQ4ZjVkNDU5NGFiMC4uZmE0NmM4YzNhNDM0MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jCkBAIC0xOTQsNyAmIzQzOzE5NCw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX2FsaWFzX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBfX3U2NCAqc3RhcnQsCiAKIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpCiB7Ci0JaWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcywgZXhwZWN0X25yX2hwYWdlcywKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplID0gZXhwZWN0X25yX2hwYWdlcyAqIHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CiYjNDM7CWlmICghY2hlY2tfaHVnZV9zaG1lbShnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMsIHNpemUsIGV4cGVjdF9ucl9ocGFnZXMsCiAJCQkgICAgICByZWFkX3BtZF9wYWdlc2l6ZSgpKSkKIAkJZXJyKCYjMzQ7RGlkIG5vdCBmaW5kIGV4cGVjdGVkICVkIG51bWJlciBvZiBodWdlcGFnZXMmIzM0OywKIAkJICAgIGV4cGVjdF9ucl9ocGFnZXMpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCmluZGV4IGVmMWVhMTE5ODFhNzQuLmE0ZmZhYTBjYTZmYTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKQEAgLTE1LDYgJiM0MzsxNSwxMCBAQAogI2RlZmluZSBTTUFQX0ZJTEVfUEFUSCAmIzM0Oy9wcm9jL3NlbGYvc21hcHMmIzM0OwogI2RlZmluZSBTVEFUVVNfRklMRV9QQVRIICYjMzQ7L3Byb2Mvc2VsZi9zdGF0dXMmIzM0OwogI2RlZmluZSBNQVhfTElORV9MRU5HVEggNTAwCiYjNDM7I2RlZmluZSBQQUdFTUFQX1BBVEggJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXAmIzM0OwomIzQzOyNkZWZpbmUgS1BBR0VGTEFHU19QQVRIICYjMzQ7L3Byb2Mva3BhZ2VmbGFncyYjMzQ7CiYjNDM7I2RlZmluZSBHRVRfT1JERVIobnJfcGFnZXMpICAgICgzMSAtIF9fYnVpbHRpbl9jbHoobnJfcGFnZXMpKQomIzQzOyNkZWZpbmUgTlJfT1JERVJTIDIwCiAKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTsKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7CkBAIC0xOTQsNiAmIzQzOzE5OCwxMjUgQEAgdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKQogCXJldHVybiByc3NfYW5vbjsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLAomIzQzOwkJdWludDY0X3QgKmZsYWdzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm47CiYjNDM7CiYjNDM7CXBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCB2YWRkcik7CiYjNDM7CiYjNDM7CS8qIG5vbi1wcmVzZW50IFBGTiAqLwomIzQzOwlpZiAocGZuID09IC0xVUwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJaWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGFnZWZsYWdzX2ZkLCBmbGFncykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIGdhdGhlcl9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmQKJiM0MzsgKiBmb2xpbyBvcmRlcnMKJiM0MzsgKgomIzQzOyAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHIKJiM0MzsgKiBAbGVuOiByYW5nZSBsZW5ndGgKJiM0MzsgKiBAcGFnZW1hcF9mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jLyZsdDtwaWQmZ3Q7L3BhZ2VtYXAKJiM0MzsgKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3MKJiM0MzsgKiBAb3JkZXJzOiBvdXRwdXQgZm9saW8gb3JkZXIgYXJyYXkKJiM0MzsgKiBAbnJfb3JkZXJzOiBmb2xpbyBvcmRlciBhcnJheSBzaXplCiYjNDM7ICoKJiM0MzsgKiBnYXRoZXJfZm9saW9fb3JkZXJzKCkgc2NhbiB0aHJvdWdoIFt2YWRkcl9zdGFydCwgbGVuKSBhbmQgY2hlY2sKJiM0MzsgKiBhbGwgZm9saW9zIHdpdGhpbiB0aGUgcmFuZ2UgYW5kIHJlY29yZCB0aGVpciBvcmRlcnMuIEFsbCBvcmRlci0wIHBhZ2VzIHdpbGwKJiM0MzsgKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlcwomIzQzOyAqLwomIzQzO2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLAomIzQzOwkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpCiYjNDM7ewomIzQzOwl1aW50NjRfdCBwYWdlX2ZsYWdzID0gMDsKJiM0MzsJaW50IGN1cl9vcmRlciA9IC0xOwomIzQzOwljaGFyICp2YWRkcjsKJiM0MzsKJiM0MzsJaWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKCFvcmRlcnMpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWlmIChucl9vcmRlcnMgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJZm9yICh2YWRkciA9IHZhZGRyX3N0YXJ0OyB2YWRkciAmbHQ7IHZhZGRyX3N0YXJ0ICYjNDM7IGxlbjspIHsKJiM0MzsJCWNoYXIgKm5leHRfZm9saW9fdmFkZHI7CiYjNDM7CQlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwkJc3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldCh2YWRkciwgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCwKJiM0MzsJCQkJJmFtcDtwYWdlX2ZsYWdzKTsKJiM0MzsJCWlmIChzdGF0dXMgJmx0OyAwKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJCS8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi8KJiM0MzsJCWlmIChzdGF0dXMgPT0gMSkgewomIzQzOwkJCXZhZGRyICYjNDM7PSBwc2l6ZSgpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovCiYjNDM7CQlpZiAoIShwYWdlX2ZsYWdzICZhbXA7IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHsKJiM0MzsJCQlvcmRlcnNbMF0mIzQzOyYjNDM7OwomIzQzOwkJCXZhZGRyICYjNDM7PSBwc2l6ZSgpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogc2tpcCBub24gdGhwIGNvbXBvdW5kIHBhZ2VzICovCiYjNDM7CQlpZiAoIShwYWdlX2ZsYWdzICZhbXA7IEtQRl9USFApKSB7CiYjNDM7CQkJdmFkZHIgJiM0Mzs9IHBzaXplKCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiB2cG4gcG9pbnRzIHRvIHBhcnQgb2YgYSBUSFAgYXQgdGhpcyBwb2ludCAqLwomIzQzOwkJaWYgKHBhZ2VfZmxhZ3MgJmFtcDsgS1BGX0NPTVBPVU5EX0hFQUQpCiYjNDM7CQkJY3VyX29yZGVyID0gMTsKJiM0MzsJCWVsc2UgewomIzQzOwkJCXZhZGRyICYjNDM7PSBwc2l6ZSgpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpOwomIzQzOwomIzQzOwkJaWYgKG5leHRfZm9saW9fdmFkZHIgJmd0Oz0gdmFkZHJfc3RhcnQgJiM0MzsgbGVuKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJd2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsCiYjNDM7CQkJCQkJICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLAomIzQzOwkJCQkJCSAgICAgJmFtcDtwYWdlX2ZsYWdzKSkgJmd0Oz0gMCkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvcgomIzQzOwkJCSAqIG9yZGVyLTAgcGFnZQomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChzdGF0dXMgPT0gMSB8fAomIzQzOwkJCSAgICAocGFnZV9mbGFncyAmYW1wOyBLUEZfQ09NUE9VTkRfSEVBRCkgfHwKJiM0MzsJCQkgICAgIShwYWdlX2ZsYWdzICZhbXA7IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHsKJiM0MzsJCQkJaWYgKGN1cl9vcmRlciAmbHQ7IG5yX29yZGVycykgewomIzQzOwkJCQkJb3JkZXJzW2N1cl9vcmRlcl0mIzQzOyYjNDM7OwomIzQzOwkJCQkJY3VyX29yZGVyID0gLTE7CiYjNDM7CQkJCQl2YWRkciA9IG5leHRfZm9saW9fdmFkZHI7CiYjNDM7CQkJCX0KJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWN1cl9vcmRlciYjNDM7JiM0Mzs7CiYjNDM7CQkJbmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHN0YXR1cyAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHN0YXR1czsKJiM0MzsJfQomIzQzOwlpZiAoY3VyX29yZGVyICZndDsgMCAmYW1wOyZhbXA7IGN1cl9vcmRlciAmbHQ7IG5yX29yZGVycykKJiM0MzsJCW9yZGVyc1tjdXJfb3JkZXJdJiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CiAJaW50IHJldDsKQEAgLTIyOSw3ICYjNDM7MzUyLDcgQEAgY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiAJcmV0dXJuIGVudHJ5OwogfQogCi1ib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLAomIzQzO3N0YXRpYyBib29sIF9fY2hlY2tfcG1kX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcywKIAkJICB1aW50NjRfdCBocGFnZV9zaXplKQogewogCWNoYXIgYnVmZmVyW01BWF9MSU5FX0xFTkdUSF07CkBAIC0yNDcsMTkgJiM0MzszNzAsNjIgQEAgYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcywKIAlyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSAmZ3Q7Jmd0OyAxMCkpOwogfQogCi1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQomIzQzO3N0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiB7Ci0JcmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCAmIzM0O0Fub25IdWdlUGFnZXM6ICYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwomIzQzOwlpbnQgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwomIzQzOwlpbnQgb3JkZXIgPSBHRVRfT1JERVIoaHBhZ2Vfc2l6ZSAvIHBhZ2VzaXplKTsKJiM0MzsJaW50IHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQ7CiYjNDM7CWludCBvcmRlcnNbTlJfT1JERVJTXSwgc3RhdHVzOwomIzQzOwlib29sIHJldCA9IGZhbHNlOwomIzQzOwomIzQzOwltZW1zZXQob3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIE5SX09SREVSUyk7CiYjNDM7CiYjNDM7CXBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVBfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAocGFnZW1hcF9mZCA9PSAtMSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWQgcGFnZW1hcCBmYWlsXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAoa3BhZ2VmbGFnc19mZCA9PSAtMSkgewomIzQzOwkJY2xvc2UocGFnZW1hcF9mZCk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkIGtwYWdlZmxhZ3MgZmFpbFxuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnMoYWRkciwgc2l6ZSwgcGFnZW1hcF9mZCwKJiM0MzsJCQlrcGFnZWZsYWdzX2ZkLCBvcmRlcnMsIE5SX09SREVSUyk7CiYjNDM7CWlmIChzdGF0dXMpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKG9yZGVyc1tvcmRlcl0gPT0gbnJfaHBhZ2VzKQomIzQzOwkJcmV0ID0gdHJ1ZTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWNsb3NlKHBhZ2VtYXBfZmQpOwomIzQzOwljbG9zZShrcGFnZWZsYWdzX2ZkKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAotYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKJiM0Mztib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiB7Ci0JcmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCAmIzM0O0ZpbGVQbWRNYXBwZWQ6JiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CWlmIChocGFnZV9zaXplID09IHJlYWRfcG1kX3BhZ2VzaXplKCkpCiYjNDM7CQlyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCAmIzM0O0Fub25IdWdlUGFnZXM6ICYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwomIzQzOwomIzQzOwlyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmIChocGFnZV9zaXplID09IHJlYWRfcG1kX3BhZ2VzaXplKCkpCiYjNDM7CQlyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCAmIzM0O0ZpbGVQbWRNYXBwZWQ6JiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKIH0KIAotYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiYjNDM7Ym9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKIHsKLQlyZXR1cm4gX19jaGVja19odWdlKGFkZHIsICYjMzQ7U2htZW1QbWRNYXBwZWQ6JiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CWlmIChocGFnZV9zaXplID09IHJlYWRfcG1kX3BhZ2VzaXplKCkpCiYjNDM7CQlyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCAmIzM0O1NobWVtUG1kTWFwcGVkOiYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwomIzQzOwomIzQzOwlyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiB9CiAKIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKaW5kZXggNzc5OTE1NGI2N2VlZC4uMjBhZjNlNTc0Y2Q4MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaApAQCAtOTAsMTEgJiM0Mzs5MCwxMyBAQCB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTsKIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTsKIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZCk7Ci1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTsKLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwotYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwomIzQzO2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7CiYjNDM7Ym9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTsKJiM0Mztib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTsKIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpOwogaW50IHBhZ2VmbGFnc19nZXQodW5zaWduZWQgbG9uZyBwZm4sIGludCBrcGFnZWZsYWdzX2ZkLCB1aW50NjRfdCAqZmxhZ3MpOwomIzQzO2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLAomIzQzOwkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpOwogCiBpbnQgdWZmZF9yZWdpc3RlcihpbnQgdWZmZCwgdm9pZCAqYWRkciwgdWludDY0X3QgbGVuLAogCQkgIGJvb2wgbWlzcywgYm9vbCB3cCwgYm9vbCBtaW5vcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDcwCgkJCQkJCQlvdXRwdXQ6IDY0CgkJCQkJCQl0aG91Z2h0czogODkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBFdmFsdWF0aW9uOiBBbmFseXNpcyBvZiBhIE1lbW9yeSBNYW5hZ2VtZW50IFNlbGZ0ZXN0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgbGl2ZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFJpZ2h0IGF3YXksIHRoYXQmIzM5O3MgYSByZWQgZmxhZyBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgZnV6emluZy4gVGhlIGZpbGVzIGxpc3RlZCBhcmUgYWxsIHJlbGF0ZWQgdG8gdXNlcnNwYWNlIHRlc3RzIGZvciB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtOiBgZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNgLCBga2h1Z2VwYWdlZC5jYCwgYHBhZ2VtYXBfaW9jdGwuY2AsIGFuZCBzbyBvbi4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggcHJpbWFyaWx5IGNvbmNlcm5zIGl0c2VsZiB3aXRoIGFkZGluZyBtVEhQIChtdWx0aS1zaXplIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIHRlc3RpbmcsIHdpdGggYWRqdXN0bWVudHMgdG8gcmVsYXRlZCBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBwcm9tcHQuIEl0JiMzOTtzIGFza2luZyBpZiB0aGlzIHBhdGNoIGlzICYjMzQ7V29ydGhGdXp6aW5nLiYjMzQ7IEJhc2VkIG9uIHRoZSBjcml0ZXJpYSBpdCBnaXZlcywgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIHRoZSBtb2RpZmljYXRpb25zIGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCAqb25seSogY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byB0ZXN0cyBvciBkb2N1bWVudGF0aW9uLgoKSSYjMzk7dmUgYWxyZWFkeSBhc2NlcnRhaW5lZCB0aGF0IHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgc2VsZnRlc3RzIGRpcmVjdG9yeS4gU2VsZnRlc3RzIGFyZSAqdXNlcnNwYWNlKiBwcm9ncmFtcyBkZXNpZ25lZCB0byB0ZXN0IHRoZSBrZXJuZWwmIzM5O3MgYmVoYXZpb3IuIFRoZSBtb2RpZmljYXRpb25zIGhlcmUgYXJlIHRvICp0ZXN0KiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBub3QgdG8gKmNoYW5nZSogdGhlIGtlcm5lbCBpdHNlbGYuIEZ1enppbmcgc2VsZnRlc3RzIGlzIG5vdCB0aGUgc2FtZSBhcyBmdXp6aW5nIHRoZSBrZXJuZWwsIHNpbmNlIGZ1enppbmcgdGhlIGtlcm5lbCBmb2N1c2VzIG9uIHN5c3RlbSBjYWxscyBhbmQga2VybmVsIGVudHJ5IHBvaW50cy4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgbXkgYXNzZXNzbWVudCBpcyBjb3JyZWN0LiBJIGhhdmUgYSBtZW50YWwgY2hlY2tsaXN0LiBMZXQgbWUgdmVyaWZ5OgotIEkmIzM5O3ZlIHZlcmlmaWVkIHRoZSBwYXRoIHByZWZpeCBmb3IgYWxsIG1vZGlmaWVkIGZpbGVzLgotIFRoZSBwYXRoIHByZWZpeCBpcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4KLSBObyBrZXJuZWwgY29kZSBpcyBwcmVzZW50LgotIEl0JiMzOTtzIGFsbCB1c2Vyc3BhY2UgY29kZS4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzLCBJIGNvbmNsdWRlIHRoYXQgaXQgZG9lcyAqbm90KiB0b3VjaCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYSwgdGhlIHBhdGNoIGlzICoqbm90Kiogd29ydGggZnV6emluZy4gVGhlIHJlc3VsdCBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMDU6MzI6NTUuNDc0MTAzNDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTI2NzgzOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA1OjMyOjU1LjQ3NDEyMDc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM1MjIwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMmRhNmZkNWQ3NTBkNDQ4MjRlYjk2MDgwNDQ3YWJiYTI3YmZmODYxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDA1OjMyOjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG5pbmRleCA2MzI5ZTM3ZmZmNGM5Li40NWI4NGY3YjM2NGUwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG5AQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyB1aW50NjRfdCBydW5faXRlcmF0aW9uKHZvaWQpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBUT1RBTF9QQUdFUzsgaSsrKVxcbiBcXHRcXHRmaWxsX3BhZ2UobW1hcF9iYXNlLCBpKTtcXG4gXFxuLVxcdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKVxcbitcXHRpZiAoIWNoZWNrX2h1Z2Vfc2htZW0obW1hcF9iYXNlLCBGSUxFX1NJWkUsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk5vIHNobWVtIFRIUCBpcyBhbGxvY2F0ZWRcXFxcblxcXCIpO1xcbiBcXG4gXFx0aWYgKHB0aHJlYWRfYmFycmllcl9pbml0KFxcdTAwMjZjdGwuYmFycmllciwgTlVMTCwgTlVNX1JFQURFUl9USFJFQURTICsgMSkgIT0gMClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuaW5kZXggMTBlOGRlZGNiMDg3ZC4uZTIxYTZlYzM4MzYzMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG5AQCAtMjYsOSArMjYsMTEgQEBcXG4gXFxuICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgXFx1MDAzY1xcdTAwM2MgMzApKVxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTtcXG4rc3RhdGljIGludCBocGFnZV9wbWRfb3JkZXI7XFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcXG4gc3RhdGljIGludCBocGFnZV9wbWRfbnI7XFxuIHN0YXRpYyBpbnQgYW5vbl9vcmRlcjtcXG4rc3RhdGljIGludCBjb2xsYXBzZV9vcmRlcjtcXG4gXFxuICNkZWZpbmUgUElEX1NNQVBTIFxcXCIvcHJvYy9zZWxmL3NtYXBzXFxcIlxcbiAjZGVmaW5lIFRFU1RfRklMRSBcXFwiY29sbGFwc2VfdGVzdF9maWxlXFxcIlxcbkBAIC01MSw3ICs1Myw3IEBAIHN0cnVjdCBtZW1fb3BzIHtcXG4gXFx0dm9pZCAqKCpzZXR1cF9hcmVhKShpbnQgbnJfaHBhZ2VzKTtcXG4gXFx0dm9pZCAoKmNsZWFudXBfYXJlYSkodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKTtcXG4gXFx0dm9pZCAoKmZhdWx0KSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XFxuLVxcdGJvb2wgKCpjaGVja19odWdlKSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKTtcXG4rXFx0Ym9vbCAoKmNoZWNrX2h1Z2UpKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdW5zaWduZWQgbG9uZyBocGFnZV9zaXplKTtcXG4gXFx0Y29uc3QgY2hhciAqbmFtZTtcXG4gfTtcXG4gXFxuQEAgLTY5LDYgKzcxLDcgQEAgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQge1xcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpraHVnZXBhZ2VkX2NvbnRleHQ7XFxuK3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqbXRocF9raHVnZXBhZ2VkX2NvbnRleHQ7XFxuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqbWFkdmlzZV9jb250ZXh0O1xcbiBcXG4gc3RydWN0IGZpbGVfaW5mbyB7XFxuQEAgLTI3Niw3ICsyNzksNyBAQCBzdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIkFsbG9jYXRlIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbiBcXHRpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibWFkdmlzZShNQURWX0NPTExBUFNFKVxcXCIpO1xcbi1cXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJtYWR2aXNlKE1BRFZfQ09MTEFQU0UpXFxcIik7XFxuIFxcdGlmIChtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJtYWR2aXNlKE1BRFZfSFVHRVBBR0UpXFxcIik7XFxuQEAgLTMxMCw5ICszMTMsMTAgQEAgc3RhdGljIHZvaWQgYW5vbl9mYXVsdCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4gXFx0ZmlsbF9tZW1vcnkocCwgc3RhcnQsIGVuZCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGFub25fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxcbitzdGF0aWMgYm9vbCBhbm9uX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxcbitcXHRcXHRpbnQgbnJfaHBhZ2VzLCB1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0cmV0dXJuIGNoZWNrX2h1Z2VfYW5vbihhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcXG4rXFx0cmV0dXJuIGNoZWNrX2h1Z2VfYW5vbihhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxcbkBAIC00MTIsMTMgKzQxNiwxNCBAQCBzdGF0aWMgdm9pZCBmaWxlX2ZhdWx0X3dyaXRlKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1hZHZpc2UoTUFEVl9QT1BVTEFURV9XUklURSlcXFwiKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpXFxuK3N0YXRpYyBib29sIGZpbGVfY2hlY2tfaHVnZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuK1xcdFxcdGludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcXG4ge1xcbiBcXHRzd2l0Y2ggKGZpbmZvLnR5cGUpIHtcXG4gXFx0Y2FzZSBWTUFfRklMRTpcXG4tXFx0XFx0cmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcXG4rXFx0XFx0cmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbiBcXHRjYXNlIFZNQV9TSE1FTTpcXG4tXFx0XFx0cmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XFxuK1xcdFxcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbkBAIC00NDgsOSArNDUzLDEwIEBAIHN0YXRpYyB2b2lkIHNobWVtX2NsZWFudXBfYXJlYSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpXFxuIFxcdGNsb3NlKGZpbmZvLmZkKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxcbitzdGF0aWMgYm9vbCBzaG1lbV9jaGVja19odWdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4rXFx0XFx0XFx0aW50IG5yX2hwYWdlcywgdW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xcbitcXHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IG1lbV9vcHMgX19hbm9uX29wcyA9IHtcXG5AQCAtNTMzLDcgKzUzOSw3IEBAIHN0YXRpYyB2b2lkIF9fbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xcbiBcXHRpZiAoKChib29sKXJldCkgPT0gZXhwZWN0KVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsOiBCYWQgcmV0dXJuIHZhbHVlXFxcIik7XFxuLVxcdGVsc2UgaWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCkpXFxuK1xcdGVsc2UgaWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbDogY2hlY2tfaHVnZSgpXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG5AQCAtNTQ1LDMwICs1NTEsMzEgQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXFxuIHtcXG4gXFx0LyogU2FuaXR5IGNoZWNrICovXFxuLVxcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlVuZXhwZWN0ZWQgaHVnZSBwYWdlXFxcXG5cXFwiKTtcXG4gXFx0X19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7XFxuIH1cXG4gXFxuICNkZWZpbmUgVElDSyA1MDAwMDBcXG4tc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuLVxcdFxcdFxcdCAgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4rc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4rXFx0XFx0aW50IG5yX2hwYWdlcywgaW50IGNvbGxhcF9vcmRlciwgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4ge1xcbitcXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXFx1MDAzY1xcdTAwM2MgY29sbGFwX29yZGVyO1xcbiBcXHRpbnQgZnVsbF9zY2FucztcXG4gXFx0aW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi9cXG4gXFxuIFxcdC8qIFNhbml0eSBjaGVjayAqL1xcbi1cXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgc2l6ZSwgMCwgaHBhZ2Vfc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5leHBlY3RlZCBodWdlIHBhZ2VcXFxcblxcXCIpO1xcbiBcXG4tXFx0bWFkdmlzZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XFxuK1xcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XFxuIFxcbiBcXHQvKiBXYWl0IHVudGlsIHRoZSBzZWNvbmQgZnVsbF9zY2FuIGNvbXBsZXRlZCAqL1xcbiBcXHRmdWxsX3NjYW5zID0gdGhwX3JlYWRfbnVtKFxcXCJraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcXFwiKSArIDI7XFxuIFxcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiJXMuLi5cXFwiLCBtc2cpO1xcbiBcXHR3aGlsZSAodGltZW91dC0tKSB7XFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzKSlcXG4rXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKHRocF9yZWFkX251bShcXFwia2h1Z2VwYWdlZC9mdWxsX3NjYW5zXFxcIikgXFx1MDAzZT0gZnVsbF9zY2FucylcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTU4Miw2ICs1ODksOCBAQCBzdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4gc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplO1xcbitcXG4gXFx0LypcXG4gXFx0ICogcmVhZFxcdTAwMjZ3cml0ZSBmaWxlIGNvbGxhcHNlIGZhaWxzIHNpbmNlIGtodWdlcGFnZWQgZG9lcyBub3QgZmx1c2hcXG4gXFx0ICogdGhlIHRhcmdldCBkaXJ0eSBmb2xpb3NcXG5AQCAtNTg5LDcgKzU5OCw3IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxcbiBcXHRpZiAoIWlzX3RtcGZzKG9wcykgXFx1MDAyNlxcdTAwMjYgb3BzID09IFxcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHMpXFxuIFxcdFxcdGV4cGVjdCA9IGZhbHNlO1xcbiBcXG4tXFx0aWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBucl9ocGFnZXMsIG9wcykpIHtcXG4rXFx0aWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xcbiBcXHRcXHRpZiAoZXhwZWN0KVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJUaW1lb3V0XFxcIik7XFxuIFxcdFxcdGVsc2VcXG5AQCAtNjA1LDEwICs2MTQsNTQgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdGlmIChvcHMgIT0gXFx1MDAyNl9fYW5vbl9vcHMpXFxuIFxcdFxcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xcbiBcXG4tXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBzaXplLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuK1xcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtdGhwX2todWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXFx1MDAzY1xcdTAwM2MgY29sbGFwc2Vfb3JkZXI7XFxuK1xcdHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3MgPSAqdGhwX2N1cnJlbnRfc2V0dGluZ3MoKTtcXG4rXFx0LyogbVRIUCBjb2xscGFzZSBvbmx5IGFsbG9jYXRlcyBQTUQgc2l6ZWQgbWVtb3J5ICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGhwYWdlX3BtZF9zaXplO1xcbitcXG4rXFx0LyogU2V0IG1USFAgc2V0dGluZyBmb3IgbVRIUCBjb2xsYXBzZSAqL1xcbitcXHRpZiAob3BzID09IFxcdTAwMjZfX2Fub25fb3BzKSB7XFxuK1xcdFxcdHNldHRpbmdzLnRocF9lbmFibGVkID0gVEhQX05FVkVSO1xcbitcXHRcXHRzZXR0aW5ncy5odWdlcGFnZXNbY29sbGFwc2Vfb3JkZXJdLmVuYWJsZWQgPSBUSFBfQUxXQVlTO1xcbitcXHR9XFxuK1xcbitcXHR0aHBfcHVzaF9zZXR0aW5ncyhcXHUwMDI2c2V0dGluZ3MpO1xcbitcXG4rXFx0aWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBzaXplLCBucl9ocGFnZXMsIGNvbGxhcHNlX29yZGVyLCBvcHMpKSB7XFxuK1xcdFxcdGlmIChleHBlY3QpXFxuK1xcdFxcdFxcdGZhaWwoXFxcIlRpbWVvdXRcXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbitcXG4rXFx0XFx0LyogUmVzdG9yZSBUSFAgc2V0dGluZ3MgZm9yIG1USFAgY29sbGFwc2UuICovXFxuK1xcdFxcdHRocF9wb3Bfc2V0dGluZ3MoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBGb3IgZmlsZSBhbmQgc2htZW0gbWVtb3J5LCBraHVnZXBhZ2VkIG9ubHkgcmV0cmFjdHMgcHRlIGVudHJpZXMgYWZ0ZXJcXG4rXFx0ICogcHV0dGluZyB0aGUgbmV3IGh1Z2VwYWdlIGluIHRoZSBwYWdlIGNhY2hlLiBUaGUgaHVnZXBhZ2UgbXVzdCBiZVxcbitcXHQgKiBzdWJzZXF1ZW50bHkgcmVmYXVsdGVkIHRvIGluc3RhbGwgdGhlIHBtZCBtYXBwaW5nIGZvciB0aGUgbW0uXFxuK1xcdCAqL1xcbitcXHRpZiAob3BzICE9IFxcdTAwMjZfX2Fub25fb3BzKVxcbitcXHRcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3NpemUpO1xcbitcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBzaXplLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuK1xcbitcXHQvKiBSZXN0b3JlIFRIUCBzZXR0aW5ncyBmb3IgbVRIUCBjb2xsYXBzZS4gKi9cXG4rXFx0dGhwX3BvcF9zZXR0aW5ncygpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7XFxuQEAgLTYxNyw2ICs2NzAsMTIgQEAgc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fa2h1Z2VwYWdlZF9jb250ZXh0ID0ge1xcbiBcXHQubmFtZSA9IFxcXCJraHVnZXBhZ2VkXFxcIixcXG4gfTtcXG4gXFxuK3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0ID0ge1xcbitcXHQuY29sbGFwc2UgPSBcXHUwMDI2bXRocF9raHVnZXBhZ2VkX2NvbGxhcHNlLFxcbitcXHQuZW5mb3JjZV9wdGVfc2Nhbl9saW1pdHMgPSB0cnVlLFxcbitcXHQubmFtZSA9IFxcXCJtdGhwX2todWdlcGFnZWRcXFwiLFxcbit9O1xcbitcXG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbWFkdmlzZV9jb250ZXh0ID0ge1xcbiBcXHQuY29sbGFwc2UgPSBcXHUwMDI2bWFkdmlzZV9jb2xsYXBzZSxcXG4gXFx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXFxuQEAgLTYzNCw3ICs2OTMsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxcbiBcXHRwID0gYWxsb2NfbWFwcGluZygxKTtcXG4gXFx0KnAgPSAxO1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiQWxsb2NhdGUgaHVnZSBwYWdlIG9uIGZhdWx0Li4uXFxcIik7XFxuLVxcdGlmIChjaGVja19odWdlX2Fub24ocCwgMSwgaHBhZ2VfcG1kX3NpemUpKVxcbitcXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC02NDMsNyArNzAyLDcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZClcXG4gXFxuIFxcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTtcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIlNwbGl0IGh1Z2UgUE1EIG9uIE1BRFZfRE9OVE5FRUQuLi5cXFwiKTtcXG4tXFx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuK1xcdGlmIChjaGVja19odWdlX2Fub24ocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTY1NSwxMCArNzE0LDE3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXFxuIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGwoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuIHtcXG4gXFx0dm9pZCAqcDtcXG4tXFx0aW50IG5yX2hwYWdlcyA9IDQ7XFxuK1xcdGludCBucl9wbWRzID0gNCwgbnJfaHBhZ2VzID0gNDtcXG4gXFx0dW5zaWduZWQgbG9uZyBzaXplID0gbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemU7XFxuIFxcbi1cXHRwID0gb3BzLVxcdTAwM2VzZXR1cF9hcmVhKG5yX2hwYWdlcyk7XFxuK1xcdC8qIE9ubHkgdHJ5IDEgUE1EIHNpemVkIHJhbmdlIGZvciBtVEhQIGNvbGxhcHNlLiAqL1xcbitcXHRpZiAoYyA9PSBcXHUwMDI2X19tdGhwX2todWdlcGFnZWRfY29udGV4dCkge1xcbitcXHRcXHRucl9wbWRzID0gMTtcXG4rXFx0XFx0bnJfaHBhZ2VzID0gMSBcXHUwMDNjXFx1MDAzYyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpO1xcbitcXHRcXHRzaXplID0gaHBhZ2VfcG1kX3NpemU7XFxuK1xcdH1cXG4rXFxuK1xcdHAgPSBvcHMtXFx1MDAzZXNldHVwX2FyZWEobnJfcG1kcyk7XFxuIFxcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgc2l6ZSk7XFxuIFxcdGMtXFx1MDAzZWNvbGxhcHNlKFxcXCJDb2xsYXBzZSBtdWx0aXBsZSBmdWxseSBwb3B1bGF0ZWQgUFRFIHRhYmxlXFxcIiwgcCwgbnJfaHBhZ2VzLFxcbiBcXHRcXHQgICAgb3BzLCB0cnVlKTtcXG5AQCAtNjcwLDEwICs3MzYsMzEgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4gXFxuIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2VtcHR5KHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiB7XFxuK1xcdGludCBucl9ocGFnZXMgPSAxO1xcbiBcXHR2b2lkICpwO1xcbiBcXG4rXFx0aWYgKGMgPT0gXFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXFxuK1xcdFxcdG5yX2hwYWdlcyA9IDEgXFx1MDAzY1xcdTAwM2MgKGhwYWdlX3BtZF9vcmRlciAtIGNvbGxhcHNlX29yZGVyKTtcXG4rXFxuIFxcdHAgPSBvcHMtXFx1MDAzZXNldHVwX2FyZWEoMSk7XFxuLVxcdGMtXFx1MDAzZWNvbGxhcHNlKFxcXCJEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXFxcIiwgcCwgMSwgb3BzLCBmYWxzZSk7XFxuK1xcdGMtXFx1MDAzZWNvbGxhcHNlKFxcXCJEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXFxcIiwgcCwgbnJfaHBhZ2VzLCBvcHMsIGZhbHNlKTtcXG4rXFx0b3BzLVxcdTAwM2VjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpO1xcbitcXHRrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgXFxcIiVzXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNvbGxhcHNlX3NpbmdsZV9tdGhwKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSBcXHUwMDNjXFx1MDAzYyBjb2xsYXBzZV9vcmRlcjtcXG4rXFx0dm9pZCAqcDtcXG4rXFxuK1xcdHAgPSBvcHMtXFx1MDAzZXNldHVwX2FyZWEoMSk7XFxuK1xcdC8qXFxuK1xcdCAqIE9ubHkgZmF1bHQgY29sbGFwc2Vfb3JkZXIgc2l6ZWQgcmFuZ2VzLCBhbmQgb25seSBjaGVjayAxXFxuK1xcdCAqIGNvbGxhcHNlX29yZGVyIHNpemVkIGh1Z2UgcGFnZS5cXG4rXFx0ICovXFxuK1xcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgaHBhZ2Vfc2l6ZSk7XFxuK1xcdGMtXFx1MDAzZWNvbGxhcHNlKFxcXCJDb2xsYXBzZSBQVEUgdGFibGUgd2l0aCBoYWxmIFBURSBlbnRyaWVzIHByZXNlbnRcXFwiLFxcbitcXHRcXHRwLCAxLCBvcHMsIHRydWUpO1xcbiBcXHRvcHMtXFx1MDAzZWNsZWFudXBfYXJlYShwLCBocGFnZV9wbWRfc2l6ZSk7XFxuIFxcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcXFwiJXNcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gfVxcbkBAIC04MTUsNyArOTAyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeV9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWNcXG4gXFx0bWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIlNwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgbWFwcGluZyBjb21wb3VuZCBwYWdlLi4uXFxcIik7XFxuIFxcdG1hZHZpc2UocCArIHBhZ2Vfc2l6ZSwgaHBhZ2VfcG1kX3NpemUgLSBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC04MzYsNyArOTIzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbF9vZl9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIlNwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgcGFnZSB0YWJsZSBmdWxsIG9mIGNvbXBvdW5kIHBhZ2VzLi4uXFxcIik7XFxuIFxcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbiBcXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC04NTgsNyArOTQ1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfY29tcG91bmRfZXh0cmVtZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGhwYWdlX3BtZF9ucjsgaSsrKSB7XFxuIFxcdFxcdG1hZHZpc2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XFxuIFxcdFxcdG9wcy1cXHUwMDNlZmF1bHQoQkFTRV9BRERSLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuLVxcdFxcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKEJBU0VfQUREUiwgMSkpXFxuK1xcdFxcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgaHVnZSBwYWdlXFxcXG5cXFwiKTtcXG4gXFx0XFx0bWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbiBcXG5AQCAtODgxLDcgKzk2OCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2NvbXBvdW5kX2V4dHJlbWUoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXFxuIFxcbiBcXHRvcHMtXFx1MDAzZWNsZWFudXBfYXJlYShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuLVxcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtOTAzLDcgKzk5MCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuIFxcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiQWxsb2NhdGUgc21hbGwgcGFnZS4uLlxcXCIpO1xcbiBcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIHBhZ2Vfc2l6ZSk7XFxuLVxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTkxMSw3ICs5OTgsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU2hhcmUgc21hbGwgcGFnZSBvdmVyIGZvcmsoKS4uLlxcXCIpO1xcbiBcXHRpZiAoIWZvcmsoKSkge1xcbiBcXHRcXHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC05MjksNyArMTAxNiw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuIFxcdGV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7XFxuIFxcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiQ2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBzbWFsbCBwYWdlLi4uXFxcIik7XFxuLVxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTk0Nyw3ICsxMDM0LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIlNoYXJlIGh1Z2UgcGFnZSBvdmVyIGZvcmsoKS4uLlxcXCIpO1xcbiBcXHRpZiAoIWZvcmsoKSkge1xcbiBcXHRcXHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC05NTUsNyArMTA0Miw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJTcGxpdCBodWdlIHBhZ2UgUE1EIGluIGNoaWxkIHByb2Nlc3MuLi5cXFwiKTtcXG4gXFx0XFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuIFxcdFxcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTk3Niw3ICsxMDYzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cXG4gXFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcXG4gXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC05OTUsNyArMTA4Miw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIlNoYXJlIGh1Z2UgcGFnZSBvdmVyIGZvcmsoKS4uLlxcXCIpO1xcbiBcXHRpZiAoIWZvcmsoKSkge1xcbiBcXHRcXHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC0xMDAzLDcgKzEwOTAsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uXFxcIixcXG4gXFx0XFx0XFx0XFx0aHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSwgaHBhZ2VfcG1kX25yKTtcXG4gXFx0XFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSkgKiBwYWdlX3NpemUpO1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC0xMDE2LDcgKzExMDMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXFxuIFxcdFxcdFxcdCAgICAgICBocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQsIGhwYWdlX3BtZF9ucik7XFxuIFxcdFxcdFxcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCkgKlxcbiBcXHRcXHRcXHRcXHQgICAgcGFnZV9zaXplKTtcXG4tXFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtMTAzNCw3ICsxMTIxLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xcbiBcXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xcbiBcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIkNoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uXFxcIik7XFxuLVxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXFxuK1xcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTEwNzUsOCArMTE2Miw4IEBAIHN0YXRpYyB2b2lkIG1hZHZpc2VfcmV0cmFjdGVkX3BhZ2VfdGFibGVzKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLFxcbiBcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIHNpemUpO1xcbiBcXG4gXFx0LyogTGV0IGtodWdlcGFnZWQgY29sbGFwc2UgYW5kIGxlYXZlIHBtZCBjbGVhcmVkICovXFxuLVxcdGlmICh3YWl0X2Zvcl9zY2FuKFxcXCJDb2xsYXBzZSBhbmQgbGVhdmUgUE1EIGNsZWFyZWRcXFwiLCBwLCBucl9ocGFnZXMsXFxuLVxcdFxcdFxcdCAgb3BzKSkge1xcbitcXHRpZiAod2FpdF9mb3Jfc2NhbihcXFwiQ29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkXFxcIiwgcCwgc2l6ZSwgbnJfaHBhZ2VzLFxcbitcXHRcXHRcXHQgIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xcbiBcXHRcXHRmYWlsKFxcXCJUaW1lb3V0XFxcIik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbkBAIC0xMDkyLDcgKzExNzksNyBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxcbiB7XFxuIFxcdGZwcmludGYoc3RkZXJyLCBcXFwiXFxcXG5Vc2FnZTogLi9raHVnZXBhZ2VkIFtPUFRJT05TXSBcXHUwMDNjdGVzdCB0eXBlXFx1MDAzZSBbZGlyXVxcXFxuXFxcXG5cXFwiKTtcXG4gXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcdFxcdTAwM2N0ZXN0IHR5cGVcXHUwMDNlXFxcXHQ6IFxcdTAwM2Njb250ZXh0XFx1MDAzZTpcXHUwMDNjbWVtX3R5cGVcXHUwMDNlXFxcXG5cXFwiKTtcXG4tXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcdFxcdTAwM2Njb250ZXh0XFx1MDAzZVxcXFx0OiBbYWxsfGtodWdlcGFnZWR8bWFkdmlzZV1cXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFx0XFx1MDAzY2NvbnRleHRcXHUwMDNlXFxcXHQ6IFthbGx8a2h1Z2VwYWdlZHxtdGhwX2todWdlcGFnZWR8bWFkdmlzZV1cXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFx0XFx1MDAzY21lbV90eXBlXFx1MDAzZVxcXFx0OiBbYWxsfGFub258ZmlsZXxzaG1lbV1cXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcXHRcXFxcXFxcImZpbGUsYWxsXFxcXFxcXCIgbWVtX3R5cGUgcmVxdWlyZXMgW2Rpcl0gYXJndW1lbnRcXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcXHRcXFxcXFxcImZpbGUsYWxsXFxcXFxcXCIgbWVtX3R5cGUgcmVxdWlyZXMgYSBmaWxlIHN5c3RlbVxcXFxuXFxcIik7XFxuQEAgLTExMDMsNiArMTE5MCw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXFxuIFxcdGZwcmludGYoc3RkZXJyLFxcdFxcXCJcXFxcdFxcXFx0LWg6IFRoaXMgaGVscCBtZXNzYWdlLlxcXFxuXFxcIik7XFxuIFxcdGZwcmludGYoc3RkZXJyLFxcdFxcXCJcXFxcdFxcXFx0LXM6IG1USFAgc2l6ZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxcXG5cXFwiKTtcXG4gXFx0ZnByaW50ZihzdGRlcnIsXFx0XFxcIlxcXFx0XFxcXHQgICAgRGVmYXVsdHMgdG8gMC4gVXNlIHRoaXMgc2l6ZSBmb3IgYW5vbiBvciBzaG1lbSBhbGxvY2F0aW9ucy5cXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVycixcXHRcXFwiXFxcXHRcXFxcdC1jOiBjb2xsYXBzZSBvcmRlciBmb3IgbVRIUCBjb2xsYXBzZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxcXG5cXFwiKTtcXG4gXFx0ZXhpdCgxKTtcXG4gfVxcbiBcXG5AQCAtMTExMiwxMSArMTIwMCwxNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRjaGFyICpidWY7XFxuIFxcdGNvbnN0IGNoYXIgKnRva2VuO1xcbiBcXG4tXFx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcInM6aFxcXCIpKSAhPSAtMSkge1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiczpjOmhcXFwiKSkgIT0gLTEpIHtcXG4gXFx0XFx0c3dpdGNoIChvcHQpIHtcXG4gXFx0XFx0Y2FzZSAncyc6XFxuIFxcdFxcdFxcdGFub25fb3JkZXIgPSBhdG9pKG9wdGFyZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdjJzpcXG4rXFx0XFx0XFx0Y29sbGFwc2Vfb3JkZXIgPSBhdG9pKG9wdGFyZyk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdoJzpcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0dXNhZ2UoKTtcXG5AQCAtMTE0Miw2ICsxMjMzLDEwIEBAIHN0YXRpYyB2b2lkIHBhcnNlX3Rlc3RfdHlwZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdG1hZHZpc2VfY29udGV4dCA9ICBcXHUwMDI2X19tYWR2aXNlX2NvbnRleHQ7XFxuIFxcdH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgXFxcImtodWdlcGFnZWRcXFwiKSkge1xcbiBcXHRcXHRraHVnZXBhZ2VkX2NvbnRleHQgPSAgXFx1MDAyNl9fa2h1Z2VwYWdlZF9jb250ZXh0O1xcbitcXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFxcXCJtdGhwX2todWdlcGFnZWRcXFwiKSkge1xcbitcXHRcXHRtdGhwX2todWdlcGFnZWRfY29udGV4dCA9ICBcXHUwMDI2X19tdGhwX2todWdlcGFnZWRfY29udGV4dDtcXG4rXFx0XFx0aWYgKGNvbGxhcHNlX29yZGVyIFxcdTAwM2M9IDAgfHwgY29sbGFwc2Vfb3JkZXIgXFx1MDAzZT0gaHBhZ2VfcG1kX29yZGVyKVxcbitcXHRcXHRcXHR1c2FnZSgpO1xcbiBcXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFxcXCJtYWR2aXNlXFxcIikpIHtcXG4gXFx0XFx0bWFkdmlzZV9jb250ZXh0ID0gIFxcdTAwMjZfX21hZHZpc2VfY29udGV4dDtcXG4gXFx0fSBlbHNlIHtcXG5AQCAtMTIwNyw3ICsxMzAyLDYgQEAgc3RhdGljIGludCBucl90ZXN0X2Nhc2VzO1xcbiBcXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiB7XFxuLVxcdGludCBocGFnZV9wbWRfb3JkZXI7XFxuIFxcdHN0cnVjdCB0aHBfc2V0dGluZ3MgZGVmYXVsdF9zZXR0aW5ncyA9IHtcXG4gXFx0XFx0LnRocF9lbmFibGVkID0gVEhQX01BRFZJU0UsXFxuIFxcdFxcdC50aHBfZGVmcmFnID0gVEhQX0RFRlJBR19BTFdBWVMsXFxuQEAgLTEyMzMsMTAgKzEzMjcsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdGlmICghdGhwX2lzX2VuYWJsZWQoKSlcXG4gXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gXFxuLVxcdHBhcnNlX3Rlc3RfdHlwZShhcmdjLCBhcmd2KTtcXG4tXFxuLVxcdHNldGJ1ZihzdGRvdXQsIE5VTEwpO1xcbi1cXG4gXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4gXFx0aHBhZ2VfcG1kX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbiBcXHRpZiAoIWhwYWdlX3BtZF9zaXplKVxcbkBAIC0xMjQ0LDYgKzEzMzQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRocGFnZV9wbWRfbnIgPSBocGFnZV9wbWRfc2l6ZSAvIHBhZ2Vfc2l6ZTtcXG4gXFx0aHBhZ2VfcG1kX29yZGVyID0gX19idWlsdGluX2N0eihocGFnZV9wbWRfbnIpO1xcbiBcXG4rXFx0cGFyc2VfdGVzdF90eXBlKGFyZ2MsIGFyZ3YpO1xcbitcXG4rXFx0c2V0YnVmKHN0ZG91dCwgTlVMTCk7XFxuK1xcbiBcXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfbm9uZSA9IGhwYWdlX3BtZF9uciAtIDE7XFxuIFxcdGRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19zd2FwID0gaHBhZ2VfcG1kX25yIC8gODtcXG4gXFx0ZGVmYXVsdF9zZXR0aW5ncy5raHVnZXBhZ2VkLm1heF9wdGVzX3NoYXJlZCA9IGhwYWdlX3BtZF9uciAvIDI7XFxuQEAgLTEyNjEsNiArMTM1NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0VEVTVChjb2xsYXBzZV9mdWxsLCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XFxuIFxcdFRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKTtcXG4gXFx0VEVTVChjb2xsYXBzZV9mdWxsLCBraHVnZXBhZ2VkX2NvbnRleHQsIHNobWVtX29wcyk7XFxuK1xcdFRFU1QoY29sbGFwc2VfZnVsbCwgbXRocF9raHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcXG4gXFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIGFub25fb3BzKTtcXG4gXFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XFxuIFxcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xcbkBAIC0xMjY4LDggKzEzNjMsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgc2htZW1fb3BzKTtcXG4gXFxuIFxcdFRFU1QoY29sbGFwc2VfZW1wdHksIGtodWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xcbitcXHRURVNUKGNvbGxhcHNlX2VtcHR5LCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xcbiBcXHRURVNUKGNvbGxhcHNlX2VtcHR5LCBtYWR2aXNlX2NvbnRleHQsIGFub25fb3BzKTtcXG4gXFxuK1xcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX210aHAsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XFxuK1xcbiBcXHRURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xcbiBcXHRURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF9vbmx5X2ZpbGVfb3BzKTtcXG4gXFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbmluZGV4IDFiMmRmZmNjOTk5YjAuLmNmZDE5ODczMzljMTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuQEAgLTEwODUsNyArMTA4NSw3IEBAIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3dyaXR0ZW5fdGVzdChjb25zdCBjaGFyICpuYW1lLCBjaGFyICptZW0sIGxvbmcgc2l6ZSxcXG4gXFx0bWVtc2V0KG1lbSwgMSwgc2l6ZSk7XFxuIFxcdGlmICh1c2VfdGhwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAobWFkdmlzZShtZW0sIHNpemUsIE1BRFZfQ09MTEFQU0UpIHx8XFxuLVxcdCAgICAgIWNoZWNrX2h1Z2VfYW5vbihtZW0sIHNpemUgLyBocGFnZV9zaXplLCBocGFnZV9zaXplKSkpIHtcXG4rXFx0ICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkge1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIiVzIGNvdWxkIG5vdCBmb3JtIGEgVEhQXFxcXG5cXFwiLCBuYW1lKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG5pbmRleCBkOGQ5ZDFkZTU3YjhiLi44MmM2ZTk2ZWE2ZWIzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIGludCB0ZXN0X21tYXBfdGhwKGVudW0gdGhwX2NvbGxhcHNlX3R5cGUgbWFkdmlzZV9idWYsIHNpemVfdCBwbWRzaXplKVxcbiBcXHQvKiBIQUNLOiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNlcGFyYXRlIFZNQSB0aGF0IHdlIGNhbiBjaGVjayByZWxpYWJseS4gKi9cXG4gXFx0bXByb3RlY3QobWVtLCBwbWRzaXplLCBQUk9UX1JFQUQpO1xcbiBcXG4tXFx0cmV0ID0gY2hlY2tfaHVnZV9hbm9uKG1lbSwgMSwgcG1kc2l6ZSk7XFxuK1xcdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIHBtZHNpemUsIDEsIHBtZHNpemUpO1xcbiBcXHRtdW5tYXAobW1hcF9tZW0sIG1tYXBfc2l6ZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbmluZGV4IDY4N2QxMTVlM2JkODAuLmQwOWY5ZjZhMzg0ZWUgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbkBAIC00MTAsNiArNDEwLDggQEAgQ0FURUdPUlk9XFxcInRocFxcXCIgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIGFsbDpzaG1lbVxcbiBcXG4gQ0FURUdPUlk9XFxcInRocFxcXCIgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIC1zIDQgYWxsOnNobWVtXFxuIFxcbitDQVRFR09SWT1cXFwidGhwXFxcIiBydW5fdGVzdCAuL2todWdlcGFnZWQgLWMgNCBtdGhwX2todWdlcGFnZWQ6YW5vblxcbitcXG4gIyBUcnkgdG8gY3JlYXRlIFhGUyBpZiBub3QgcHJvdmlkZWRcXG4gaWYgWyAteiBcXFwiJHtTUExJVF9IVUdFX1BBR0VfVEVTVF9YRlNfUEFUSH1cXFwiIF07IHRoZW5cXG4gICAgIGlmIHRlc3Rfc2VsZWN0ZWQgXFxcInRocFxcXCI7IHRoZW5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXFxuaW5kZXggZmIxODY0YTY4ZTFjNi4uZTE5OGZhY2Y3OGJiNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5AQCAtMTAzLDcgKzEwMyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSlcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGhwYWdlX2xlbjsgaSsrKVxcbiBcXHRcXHRtYXBbaV0gPSAoY2hhcilpO1xcbiBcXG4tXFx0aWYgKGNoZWNrX2h1Z2VfYW5vbihtYXAsIDEsIGhwYWdlX2xlbikpIHtcXG4rXFx0aWYgKGNoZWNrX2h1Z2VfYW5vbihtYXAsIGhwYWdlX2xlbiwgMSwgaHBhZ2VfbGVuKSkge1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXFxcIlRlc3QgJXMgaHVnZSBwYWdlIGFsbG9jYXRpb25cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFxuIFxcdFxcdGNsZWFyX3NvZnRkaXJ0eSgpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbmluZGV4IDMyYjk5MTQ3MmY3NDQuLjg2YTYwMzY5MjgyNjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG5AQCAtMTA0LDEyOSArMTA0LDYgQEAgc3RhdGljIGJvb2wgaXNfYmFja2VkX2J5X2ZvbGlvKGNoYXIgKnZhZGRyLCBpbnQgb3JkZXIsIGludCBwYWdlbWFwX2ZkLFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxcbi1cXHRcXHR1aW50NjRfdCAqZmxhZ3MpXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuLVxcbi1cXHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpO1xcbi1cXG4tXFx0Lyogbm9uLXByZXNlbnQgUEZOICovXFxuLVxcdGlmIChwZm4gPT0gLTFVTClcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcbi1cXHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIGZsYWdzKSlcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmRcXG4tICogZm9saW8gb3JkZXJzXFxuLSAqXFxuLSAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHJcXG4tICogQGxlbjogcmFuZ2UgbGVuZ3RoXFxuLSAqIEBwYWdlbWFwX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvcGFnZW1hcFxcbi0gKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3NcXG4tICogQG9yZGVyczogb3V0cHV0IGZvbGlvIG9yZGVyIGFycmF5XFxuLSAqIEBucl9vcmRlcnM6IGZvbGlvIG9yZGVyIGFycmF5IHNpemVcXG4tICpcXG4tICogZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycygpIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIGNoZWNrXFxuLSAqIGFsbCBmb2xpb3Mgd2l0aGluIHRoZSByYW5nZSBhbmQgcmVjb3JkIHRoZWlyIG9yZGVycy4gQWxsIG9yZGVyLTAgcGFnZXMgd2lsbFxcbi0gKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC5cXG4tICpcXG4tICogTk9URTogdGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgZm9saW8gb3JkZXJzIGFmdGVyIGEgc3BsaXQgaXMgcGVyZm9ybWVkLFxcbi0gKiBzbyBpdCBhc3N1bWVzIFt2YWRkcl9zdGFydCwgbGVuKSBmdWxseSBtYXBzIHRvIGFmdGVyLXNwbGl0IGZvbGlvcyB3aXRoaW4gdGhhdFxcbi0gKiByYW5nZS5cXG4tICpcXG4tICogUmV0dXJuOiAwIC0gbm8gZXJyb3IsIC0xIC0gdW5oYW5kbGVkIGNhc2VzXFxuLSAqL1xcbi1zdGF0aWMgaW50IGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXFxuLVxcdFxcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKVxcbi17XFxuLVxcdHVpbnQ2NF90IHBhZ2VfZmxhZ3MgPSAwO1xcbi1cXHRpbnQgY3VyX29yZGVyID0gLTE7XFxuLVxcdGNoYXIgKnZhZGRyO1xcbi1cXG4tXFx0aWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSlcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbi1cXHRpZiAoIW9yZGVycylcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbi1cXHRpZiAobnJfb3JkZXJzIFxcdTAwM2M9IDApXFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFxuLVxcdGZvciAodmFkZHIgPSB2YWRkcl9zdGFydDsgdmFkZHIgXFx1MDAzYyB2YWRkcl9zdGFydCArIGxlbjspIHtcXG4tXFx0XFx0Y2hhciAqbmV4dF9mb2xpb192YWRkcjtcXG4tXFx0XFx0aW50IHN0YXR1cztcXG4tXFxuLVxcdFxcdHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQodmFkZHIsIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZwYWdlX2ZsYWdzKTtcXG4tXFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiAtMTtcXG4tXFxuLVxcdFxcdC8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi9cXG4tXFx0XFx0aWYgKHN0YXR1cyA9PSAxKSB7XFxuLVxcdFxcdFxcdHZhZGRyICs9IHBzaXplKCk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHQvKiBhbGwgb3JkZXItMCBwYWdlcyB3aXRoIHBvc3NpYmxlIGZhbHNlIHBvc3RpdmUgKG5vbiBmb2xpbykgKi9cXG4tXFx0XFx0aWYgKCEocGFnZV9mbGFncyBcXHUwMDI2IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHtcXG4tXFx0XFx0XFx0b3JkZXJzWzBdKys7XFxuLVxcdFxcdFxcdHZhZGRyICs9IHBzaXplKCk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHQvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi9cXG4tXFx0XFx0aWYgKCEocGFnZV9mbGFncyBcXHUwMDI2IEtQRl9USFApKSB7XFxuLVxcdFxcdFxcdHZhZGRyICs9IHBzaXplKCk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHQvKiB2cG4gcG9pbnRzIHRvIHBhcnQgb2YgYSBUSFAgYXQgdGhpcyBwb2ludCAqL1xcbi1cXHRcXHRpZiAocGFnZV9mbGFncyBcXHUwMDI2IEtQRl9DT01QT1VORF9IRUFEKVxcbi1cXHRcXHRcXHRjdXJfb3JkZXIgPSAxO1xcbi1cXHRcXHRlbHNlIHtcXG4tXFx0XFx0XFx0dmFkZHIgKz0gcHNpemUoKTtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciArICgxVUwgXFx1MDAzY1xcdTAwM2MgKGN1cl9vcmRlciArIHBzaGlmdCgpKSk7XFxuLVxcbi1cXHRcXHRpZiAobmV4dF9mb2xpb192YWRkciBcXHUwMDNlPSB2YWRkcl9zdGFydCArIGxlbilcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRcXHR3aGlsZSAoKHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQobmV4dF9mb2xpb192YWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZwYWdlX2ZsYWdzKSkgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBub24gcHJlc2VudCB2YWRkciwgbmV4dCBjb21wb3VuZCBoZWFkIHBhZ2UsIG9yXFxuLVxcdFxcdFxcdCAqIG9yZGVyLTAgcGFnZVxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKHN0YXR1cyA9PSAxIHx8XFxuLVxcdFxcdFxcdCAgICAocGFnZV9mbGFncyBcXHUwMDI2IEtQRl9DT01QT1VORF9IRUFEKSB8fFxcbi1cXHRcXHRcXHQgICAgIShwYWdlX2ZsYWdzIFxcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAoY3VyX29yZGVyIFxcdTAwM2MgbnJfb3JkZXJzKSB7XFxuLVxcdFxcdFxcdFxcdFxcdG9yZGVyc1tjdXJfb3JkZXJdKys7XFxuLVxcdFxcdFxcdFxcdFxcdGN1cl9vcmRlciA9IC0xO1xcbi1cXHRcXHRcXHRcXHRcXHR2YWRkciA9IG5leHRfZm9saW9fdmFkZHI7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdGN1cl9vcmRlcisrO1xcbi1cXHRcXHRcXHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIChjdXJfb3JkZXIgKyBwc2hpZnQoKSkpO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4tXFx0fVxcbi1cXHRpZiAoY3VyX29yZGVyIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBjdXJfb3JkZXIgXFx1MDAzYyBucl9vcmRlcnMpXFxuLVxcdFxcdG9yZGVyc1tjdXJfb3JkZXJdKys7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcXG4gXFx0XFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXFxuIHtcXG5AQCAtMjQwLDcgKzExNyw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHZhZGRyX29yZGVyc1xcXCIpO1xcbiBcXG4gXFx0bWVtc2V0KHZhZGRyX29yZGVycywgMCwgc2l6ZW9mKGludCkgKiBucl9vcmRlcnMpO1xcbi1cXHRzdGF0dXMgPSBnYXRoZXJfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzKHZhZGRyX3N0YXJ0LCBsZW4sIHBhZ2VtYXBfZmQsXFxuK1xcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnModmFkZHJfc3RhcnQsIGxlbiwgcGFnZW1hcF9mZCxcXG4gXFx0XFx0XFx0XFx0ICAgICBrcGFnZWZsYWdzX2ZkLCB2YWRkcl9vcmRlcnMsIG5yX29yZGVycyk7XFxuIFxcdGlmIChzdGF0dXMpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZ2F0aGVyIGZvbGlvIGluZm8gZmFpbGVkXFxcXG5cXFwiKTtcXG5AQCAtMjk2LDcgKzE3Myw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXFxuIFxcdHVuc2lnbmVkIGxvbmcgcnNzX2Fub25fYmVmb3JlLCByc3NfYW5vbl9hZnRlcjtcXG4gXFx0c2l6ZV90IGk7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKVxcbitcXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzICogcG1kX3BhZ2VzaXplLCBucl9ocGFnZXMsIHBtZF9wYWdlc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiTm8gVEhQIGlzIGFsbG9jYXRlZFxcXFxuXFxcIik7XFxuIFxcbiBcXHRyc3NfYW5vbl9iZWZvcmUgPSByc3NfYW5vbigpO1xcbkBAIC0zMTEsNyArMTg4LDcgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3Jzc19hbm9uX3NwbGl0X2h1Z2VfcGFnZV9hbGxfemVyb2VzKGNoYXIgKm9uZV9wYWdlLCBpbnQgbnJfaHBcXG4gXFx0XFx0aWYgKG9uZV9wYWdlW2ldICE9IChjaGFyKTApXFxuIFxcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJWxkIGJ5dGUgY29ycnVwdGVkXFxcXG5cXFwiLCBpKTtcXG4gXFxuLVxcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAwLCBwbWRfcGFnZXNpemUpKVxcbitcXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzICogcG1kX3BhZ2VzaXplLCAwLCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlN0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxcXG5cXFwiKTtcXG4gXFxuIFxcdHJzc19hbm9uX2FmdGVyID0gcnNzX2Fub24oKTtcXG5AQCAtMzQ3LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuOyBpKyspXFxuIFxcdFxcdG9uZV9wYWdlW2ldID0gKGNoYXIpaTtcXG4gXFxuLVxcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCA0LCBwbWRfcGFnZXNpemUpKVxcbitcXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgNCwgcG1kX3BhZ2VzaXplKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJObyBUSFAgaXMgYWxsb2NhdGVkXFxcXG5cXFwiKTtcXG4gXFxuIFxcdC8qIHNwbGl0IGFsbCBUSFBzICovXFxuQEAgLTM2Niw3ICsyNDMsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcXG4gXFx0XFx0XFx0XFx0XFx0ICAgKHBtZF9vcmRlciArIDEpKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJVbmV4cGVjdGVkIFRIUCBzcGxpdFxcXFxuXFxcIik7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcXG4rXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDAsIHBtZF9wYWdlc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiU3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcXFxcblxcXCIpO1xcbiBcXG4gXFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFxcXCJTcGxpdCBodWdlIHBhZ2VzIHRvIG9yZGVyICVkIHN1Y2Nlc3NmdWxcXFxcblxcXCIsIG9yZGVyKTtcXG5AQCAtMzkzLDcgKzI3MCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0aHBfYXJlYV9zaXplOyBpKyspXFxuIFxcdFxcdHRocF9hcmVhW2ldID0gKGNoYXIpaTtcXG4gXFxuLVxcdGlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7XFxuK1xcdGlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzICogcG1kX3BhZ2VzaXplLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7XFxuIFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiTm90IGFsbCBUSFBzIGFsbG9jYXRlZFxcXFxuXFxcIik7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuQEAgLTY1Nyw3ICs1MzQsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9wYWdlY2FjaGVfdGhwX2FuZF9mZChjb25zdCBjaGFyICp0ZXN0ZmlsZSwgc2l6ZV90IGZkX3NpemUsXFxuIFxcbiBcXHRmb3JjZV9yZWFkX3BhZ2VzKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpO1xcbiBcXG4tXFx0aWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHtcXG4rXFx0aWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHtcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIk5vIGxhcmdlIHBhZ2VjYWNoZSBmb2xpbyBnZW5lcmF0ZWQsIHBsZWFzZSBwcm92aWRlIGEgZmlsZXN5c3RlbSBzdXBwb3J0aW5nIGxhcmdlIGZvbGlvXFxcXG5cXFwiKTtcXG4gXFx0XFx0bXVubWFwKCphZGRyLCBmZF9zaXplKTtcXG4gXFx0XFx0Y2xvc2UoKmZkKTtcXG5AQCAtNzM1LDcgKzYxMiw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3RocF9pbl9wYWdlY2FjaGVfdG9fb3JkZXJfYXQoc2l6ZV90IGZkX3NpemUsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7XFxuK1xcdGlmICghY2hlY2tfaHVnZV9maWxlKGFkZHIsIGZkX3NpemUsIDAsIHBtZF9wYWdlc2l6ZSkpIHtcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlN0aWxsIEZpbGVQbWRNYXBwZWQgbm90IHNwbGl0XFxcXG5cXFwiKTtcXG4gXFx0XFx0ZXJyID0gRVhJVF9GQUlMVVJFO1xcbiBcXHRcXHRnb3RvIG91dDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcXG5pbmRleCBmNDhmNWQ0NTk0YWIwLi5mYTQ2YzhjM2E0MzQyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXFxuQEAgLTE5NCw3ICsxOTQsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV9hbGlhc19tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgX191NjQgKnN0YXJ0LFxcbiBcXG4gc3RhdGljIHZvaWQgc2htZW1fY2hlY2tfcG1kX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB2b2lkICpwLCBpbnQgZXhwZWN0X25yX2hwYWdlcylcXG4ge1xcbi1cXHRpZiAoIWNoZWNrX2h1Z2Vfc2htZW0oZ29wdHMtXFx1MDAzZWFyZWFfZHN0X2FsaWFzLCBleHBlY3RfbnJfaHBhZ2VzLFxcbitcXHR1bnNpZ25lZCBsb25nIHNpemUgPSBleHBlY3RfbnJfaHBhZ2VzICogcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFxuK1xcdGlmICghY2hlY2tfaHVnZV9zaG1lbShnb3B0cy1cXHUwMDNlYXJlYV9kc3RfYWxpYXMsIHNpemUsIGV4cGVjdF9ucl9ocGFnZXMsXFxuIFxcdFxcdFxcdCAgICAgIHJlYWRfcG1kX3BhZ2VzaXplKCkpKVxcbiBcXHRcXHRlcnIoXFxcIkRpZCBub3QgZmluZCBleHBlY3RlZCAlZCBudW1iZXIgb2YgaHVnZXBhZ2VzXFxcIixcXG4gXFx0XFx0ICAgIGV4cGVjdF9ucl9ocGFnZXMpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5pbmRleCBlZjFlYTExOTgxYTc0Li5hNGZmYWEwY2E2ZmExIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbkBAIC0xNSw2ICsxNSwxMCBAQFxcbiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3NtYXBzXFxcIlxcbiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggXFxcIi9wcm9jL3NlbGYvc3RhdHVzXFxcIlxcbiAjZGVmaW5lIE1BWF9MSU5FX0xFTkdUSCA1MDBcXG4rI2RlZmluZSBQQUdFTUFQX1BBVEggXFxcIi9wcm9jL3NlbGYvcGFnZW1hcFxcXCJcXG4rI2RlZmluZSBLUEFHRUZMQUdTX1BBVEggXFxcIi9wcm9jL2twYWdlZmxhZ3NcXFwiXFxuKyNkZWZpbmUgR0VUX09SREVSKG5yX3BhZ2VzKSAgICAoMzEgLSBfX2J1aWx0aW5fY2x6KG5yX3BhZ2VzKSlcXG4rI2RlZmluZSBOUl9PUkRFUlMgMjBcXG4gXFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcXG5AQCAtMTk0LDYgKzE5OCwxMjUgQEAgdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKVxcbiBcXHRyZXR1cm4gcnNzX2Fub247XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxcbitcXHRcXHR1aW50NjRfdCAqZmxhZ3MpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuK1xcbitcXHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpO1xcbitcXG4rXFx0Lyogbm9uLXByZXNlbnQgUEZOICovXFxuK1xcdGlmIChwZm4gPT0gLTFVTClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIGZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIGdhdGhlcl9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmRcXG4rICogZm9saW8gb3JkZXJzXFxuKyAqXFxuKyAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHJcXG4rICogQGxlbjogcmFuZ2UgbGVuZ3RoXFxuKyAqIEBwYWdlbWFwX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvcGFnZW1hcFxcbisgKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3NcXG4rICogQG9yZGVyczogb3V0cHV0IGZvbGlvIG9yZGVyIGFycmF5XFxuKyAqIEBucl9vcmRlcnM6IGZvbGlvIG9yZGVyIGFycmF5IHNpemVcXG4rICpcXG4rICogZ2F0aGVyX2ZvbGlvX29yZGVycygpIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIGNoZWNrXFxuKyAqIGFsbCBmb2xpb3Mgd2l0aGluIHRoZSByYW5nZSBhbmQgcmVjb3JkIHRoZWlyIG9yZGVycy4gQWxsIG9yZGVyLTAgcGFnZXMgd2lsbFxcbisgKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC5cXG4rICpcXG4rICogUmV0dXJuOiAwIC0gbm8gZXJyb3IsIC0xIC0gdW5oYW5kbGVkIGNhc2VzXFxuKyAqL1xcbitpbnQgZ2F0aGVyX2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcXG4rXFx0XFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXFxuK3tcXG4rXFx0dWludDY0X3QgcGFnZV9mbGFncyA9IDA7XFxuK1xcdGludCBjdXJfb3JkZXIgPSAtMTtcXG4rXFx0Y2hhciAqdmFkZHI7XFxuK1xcbitcXHRpZiAocGFnZW1hcF9mZCA9PSAtMSB8fCBrcGFnZWZsYWdzX2ZkID09IC0xKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmICghb3JkZXJzKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmIChucl9vcmRlcnMgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0Zm9yICh2YWRkciA9IHZhZGRyX3N0YXJ0OyB2YWRkciBcXHUwMDNjIHZhZGRyX3N0YXJ0ICsgbGVuOykge1xcbitcXHRcXHRjaGFyICpuZXh0X2ZvbGlvX3ZhZGRyO1xcbitcXHRcXHRpbnQgc3RhdHVzO1xcbitcXG4rXFx0XFx0c3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldCh2YWRkciwgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnBhZ2VfZmxhZ3MpO1xcbitcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0XFx0Lyogc2tpcCBub24gcHJlc2VudCB2YWRkciAqL1xcbitcXHRcXHRpZiAoc3RhdHVzID09IDEpIHtcXG4rXFx0XFx0XFx0dmFkZHIgKz0gcHNpemUoKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIGFsbCBvcmRlci0wIHBhZ2VzIHdpdGggcG9zc2libGUgZmFsc2UgcG9zdGl2ZSAobm9uIGZvbGlvKSAqL1xcbitcXHRcXHRpZiAoIShwYWdlX2ZsYWdzIFxcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xcbitcXHRcXHRcXHRvcmRlcnNbMF0rKztcXG4rXFx0XFx0XFx0dmFkZHIgKz0gcHNpemUoKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIHNraXAgbm9uIHRocCBjb21wb3VuZCBwYWdlcyAqL1xcbitcXHRcXHRpZiAoIShwYWdlX2ZsYWdzIFxcdTAwMjYgS1BGX1RIUCkpIHtcXG4rXFx0XFx0XFx0dmFkZHIgKz0gcHNpemUoKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovXFxuK1xcdFxcdGlmIChwYWdlX2ZsYWdzIFxcdTAwMjYgS1BGX0NPTVBPVU5EX0hFQUQpXFxuK1xcdFxcdFxcdGN1cl9vcmRlciA9IDE7XFxuK1xcdFxcdGVsc2Uge1xcbitcXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bmV4dF9mb2xpb192YWRkciA9IHZhZGRyICsgKDFVTCBcXHUwMDNjXFx1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcXG4rXFxuK1xcdFxcdGlmIChuZXh0X2ZvbGlvX3ZhZGRyIFxcdTAwM2U9IHZhZGRyX3N0YXJ0ICsgbGVuKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdHdoaWxlICgoc3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldChuZXh0X2ZvbGlvX3ZhZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnBhZ2VfZmxhZ3MpKSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIG5vbiBwcmVzZW50IHZhZGRyLCBuZXh0IGNvbXBvdW5kIGhlYWQgcGFnZSwgb3JcXG4rXFx0XFx0XFx0ICogb3JkZXItMCBwYWdlXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoc3RhdHVzID09IDEgfHxcXG4rXFx0XFx0XFx0ICAgIChwYWdlX2ZsYWdzIFxcdTAwMjYgS1BGX0NPTVBPVU5EX0hFQUQpIHx8XFxuK1xcdFxcdFxcdCAgICAhKHBhZ2VfZmxhZ3MgXFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChjdXJfb3JkZXIgXFx1MDAzYyBucl9vcmRlcnMpIHtcXG4rXFx0XFx0XFx0XFx0XFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcXG4rXFx0XFx0XFx0XFx0XFx0Y3VyX29yZGVyID0gLTE7XFxuK1xcdFxcdFxcdFxcdFxcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0Y3VyX29yZGVyKys7XFxuK1xcdFxcdFxcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciArICgxVUwgXFx1MDAzY1xcdTAwM2MgKGN1cl9vcmRlciArIHBzaGlmdCgpKSk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbitcXHR9XFxuK1xcdGlmIChjdXJfb3JkZXIgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGN1cl9vcmRlciBcXHUwMDNjIG5yX29yZGVycylcXG4rXFx0XFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTIyOSw3ICszNTIsNyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4gXFx0cmV0dXJuIGVudHJ5O1xcbiB9XFxuIFxcbi1ib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxcbitzdGF0aWMgYm9vbCBfX2NoZWNrX3BtZF9odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXFxuIFxcdFxcdCAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4ge1xcbiBcXHRjaGFyIGJ1ZmZlcltNQVhfTElORV9MRU5HVEhdO1xcbkBAIC0yNDcsMTkgKzM3MCw2MiBAQCBib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxcbiBcXHRyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSBcXHUwMDNlXFx1MDAzZSAxMCkpO1xcbiB9XFxuIFxcbi1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxcbitzdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3Modm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXFxcIkFub25IdWdlUGFnZXM6IFxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcdGludCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XFxuK1xcdGludCBvcmRlciA9IEdFVF9PUkRFUihocGFnZV9zaXplIC8gcGFnZXNpemUpO1xcbitcXHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcXG4rXFx0aW50IG9yZGVyc1tOUl9PUkRFUlNdLCBzdGF0dXM7XFxuK1xcdGJvb2wgcmV0ID0gZmFsc2U7XFxuK1xcbitcXHRtZW1zZXQob3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIE5SX09SREVSUyk7XFxuK1xcbitcXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX1BBVEgsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKHBhZ2VtYXBfZmQgPT0gLTEpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZCBwYWdlbWFwIGZhaWxcXFxcblxcXCIpO1xcbitcXG4rXFx0a3BhZ2VmbGFnc19mZCA9IG9wZW4oS1BBR0VGTEFHU19QQVRILCBPX1JET05MWSk7XFxuK1xcdGlmIChrcGFnZWZsYWdzX2ZkID09IC0xKSB7XFxuK1xcdFxcdGNsb3NlKHBhZ2VtYXBfZmQpO1xcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWQga3BhZ2VmbGFncyBmYWlsXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0c3RhdHVzID0gZ2F0aGVyX2ZvbGlvX29yZGVycyhhZGRyLCBzaXplLCBwYWdlbWFwX2ZkLFxcbitcXHRcXHRcXHRrcGFnZWZsYWdzX2ZkLCBvcmRlcnMsIE5SX09SREVSUyk7XFxuK1xcdGlmIChzdGF0dXMpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKG9yZGVyc1tvcmRlcl0gPT0gbnJfaHBhZ2VzKVxcbitcXHRcXHRyZXQgPSB0cnVlO1xcbitcXG4rb3V0OlxcbitcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFx0Y2xvc2Uoa3BhZ2VmbGFnc19mZCk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4ge1xcbi1cXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFxcXCJGaWxlUG1kTWFwcGVkOlxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcdGlmIChocGFnZV9zaXplID09IHJlYWRfcG1kX3BhZ2VzaXplKCkpXFxuK1xcdFxcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFxcXCJBbm9uSHVnZVBhZ2VzOiBcXFwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbitcXG4rXFx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbit9XFxuK1xcbitib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK3tcXG4rXFx0aWYgKGhwYWdlX3NpemUgPT0gcmVhZF9wbWRfcGFnZXNpemUoKSlcXG4rXFx0XFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXFxcIkZpbGVQbWRNYXBwZWQ6XFxcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4rXFxuK1xcdHJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4gfVxcbiBcXG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcXFwiU2htZW1QbWRNYXBwZWQ6XFxcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4rXFx0aWYgKGhwYWdlX3NpemUgPT0gcmVhZF9wbWRfcGFnZXNpemUoKSlcXG4rXFx0XFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXFxcIlNobWVtUG1kTWFwcGVkOlxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcbitcXHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuIH1cXG4gXFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbmluZGV4IDc3OTkxNTRiNjdlZWQuLjIwYWYzZTU3NGNkODAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuQEAgLTkwLDExICs5MCwxMyBAQCB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcXG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4gdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XFxuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZCk7XFxuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbi1ib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbitib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbitib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbitib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCk7XFxuIGludCBwYWdlZmxhZ3NfZ2V0KHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQga3BhZ2VmbGFnc19mZCwgdWludDY0X3QgKmZsYWdzKTtcXG4raW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXFxuK1xcdFxcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKTtcXG4gXFxuIGludCB1ZmZkX3JlZ2lzdGVyKGludCB1ZmZkLCB2b2lkICphZGRyLCB1aW50NjRfdCBsZW4sXFxuIFxcdFxcdCAgYm9vbCBtaXNzLCBib29sIHdwLCBib29sIG1pbm9yKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDU6MzI6NTYuMzE4Mzk1OTMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODY4MjQ4MjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMmRhNmZkNWQ3NTBkNDQ4MjRlYjk2MDgwNDQ3YWJiYTI3YmZmODYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDU6MzI6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA2MzI5ZTM3ZmZmNGM5Li40NWI4NGY3YjM2NGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyB1aW50NjRfdCBydW5faXRlcmF0aW9uKHZvaWQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUT1RBTF9QQUdFUzsgaSsrKVxuIFx0XHRmaWxsX3BhZ2UobW1hcF9iYXNlLCBpKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKVxuK1x0aWYgKCFjaGVja19odWdlX3NobWVtKG1tYXBfYmFzZSwgRklMRV9TSVpFLCBOUl9QTURfUEFHRSwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiTm8gc2htZW0gVEhQIGlzIGFsbG9jYXRlZFxcblwiKTtcbiBcbiBcdGlmIChwdGhyZWFkX2JhcnJpZXJfaW5pdChcdTAwMjZjdGwuYmFycmllciwgTlVMTCwgTlVNX1JFQURFUl9USFJFQURTICsgMSkgIT0gMClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDEwZThkZWRjYjA4N2QuLmUyMWE2ZWMzODM2MzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuQEAgLTI2LDkgKzI2LDExIEBAXG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuK3N0YXRpYyBpbnQgaHBhZ2VfcG1kX29yZGVyO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbiBzdGF0aWMgaW50IGhwYWdlX3BtZF9ucjtcbiBzdGF0aWMgaW50IGFub25fb3JkZXI7XG4rc3RhdGljIGludCBjb2xsYXBzZV9vcmRlcjtcbiBcbiAjZGVmaW5lIFBJRF9TTUFQUyBcIi9wcm9jL3NlbGYvc21hcHNcIlxuICNkZWZpbmUgVEVTVF9GSUxFIFwiY29sbGFwc2VfdGVzdF9maWxlXCJcbkBAIC01MSw3ICs1Myw3IEBAIHN0cnVjdCBtZW1fb3BzIHtcbiBcdHZvaWQgKigqc2V0dXBfYXJlYSkoaW50IG5yX2hwYWdlcyk7XG4gXHR2b2lkICgqY2xlYW51cF9hcmVhKSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFx0dm9pZCAoKmZhdWx0KSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4tXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcyk7XG4rXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpO1xuIFx0Y29uc3QgY2hhciAqbmFtZTtcbiB9O1xuIFxuQEAgLTY5LDYgKzcxLDcgQEAgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpraHVnZXBhZ2VkX2NvbnRleHQ7XG4rc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICptdGhwX2todWdlcGFnZWRfY29udGV4dDtcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKm1hZHZpc2VfY29udGV4dDtcbiBcbiBzdHJ1Y3QgZmlsZV9pbmZvIHtcbkBAIC0yNzYsNyArMjc5LDcgQEAgc3RhdGljIHZvaWQgKmFsbG9jX2hwYWdlKHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXHRrc2Z0X3ByaW50X21zZyhcIkFsbG9jYXRlIGh1Z2UgcGFnZS4uLlwiKTtcbiBcdGlmIChtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwibWFkdmlzZShNQURWX0NPTExBUFNFKVwiKTtcbi1cdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXG4rXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1hZHZpc2UoTUFEVl9DT0xMQVBTRSlcIik7XG4gXHRpZiAobWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1hZHZpc2UoTUFEVl9IVUdFUEFHRSlcIik7XG5AQCAtMzEwLDkgKzMxMywxMCBAQCBzdGF0aWMgdm9pZCBhbm9uX2ZhdWx0KHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFx0ZmlsbF9tZW1vcnkocCwgc3RhcnQsIGVuZCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGFub25fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxuK3N0YXRpYyBib29sIGFub25fY2hlY2tfaHVnZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXG4rXHRcdGludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gY2hlY2tfaHVnZV9hbm9uKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xuK1x0cmV0dXJuIGNoZWNrX2h1Z2VfYW5vbihhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuQEAgLTQxMiwxMyArNDE2LDE0IEBAIHN0YXRpYyB2b2lkIGZpbGVfZmF1bHRfd3JpdGUodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1hZHZpc2UoTUFEVl9QT1BVTEFURV9XUklURSlcIik7XG4gfVxuIFxuLXN0YXRpYyBib29sIGZpbGVfY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxuK3N0YXRpYyBib29sIGZpbGVfY2hlY2tfaHVnZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXG4rXHRcdGludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRzd2l0Y2ggKGZpbmZvLnR5cGUpIHtcbiBcdGNhc2UgVk1BX0ZJTEU6XG4tXHRcdHJldHVybiBjaGVja19odWdlX2ZpbGUoYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XG4rXHRcdHJldHVybiBjaGVja19odWdlX2ZpbGUoYWRkciwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiBcdGNhc2UgVk1BX1NITUVNOlxuLVx0XHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcbitcdFx0cmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTQ0OCw5ICs0NTMsMTAgQEAgc3RhdGljIHZvaWQgc2htZW1fY2xlYW51cF9hcmVhKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiBcdGNsb3NlKGZpbmZvLmZkKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxuK3N0YXRpYyBib29sIHNobWVtX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHRcdGludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcbitcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgbWVtX29wcyBfX2Fub25fb3BzID0ge1xuQEAgLTUzMyw3ICs1MzksNyBAQCBzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0cmV0ID0gbWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7XG4gXHRpZiAoKChib29sKXJldCkgPT0gZXhwZWN0KVxuIFx0XHRmYWlsKFwiRmFpbDogQmFkIHJldHVybiB2YWx1ZVwiKTtcbi1cdGVsc2UgaWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcbitcdGVsc2UgaWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRmYWlsKFwiRmFpbDogY2hlY2tfaHVnZSgpXCIpO1xuIFx0ZWxzZVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG5AQCAtNTQ1LDMwICs1NTEsMzEgQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcbiB7XG4gXHQvKiBTYW5pdHkgY2hlY2sgKi9cbi1cdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlVuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCIpO1xuIFx0X19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7XG4gfVxuIFxuICNkZWZpbmUgVElDSyA1MDAwMDBcbi1zdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbi1cdFx0XHQgIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4rc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbitcdFx0aW50IG5yX2hwYWdlcywgaW50IGNvbGxhcF9vcmRlciwgc3RydWN0IG1lbV9vcHMgKm9wcylcbiB7XG4rXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXHUwMDNjXHUwMDNjIGNvbGxhcF9vcmRlcjtcbiBcdGludCBmdWxsX3NjYW5zO1xuIFx0aW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi9cbiBcbiBcdC8qIFNhbml0eSBjaGVjayAqL1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgc2l6ZSwgMCwgaHBhZ2Vfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlVuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCIpO1xuIFxuLVx0bWFkdmlzZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4rXHRtYWR2aXNlKHAsIHNpemUsIE1BRFZfSFVHRVBBR0UpO1xuIFxuIFx0LyogV2FpdCB1bnRpbCB0aGUgc2Vjb25kIGZ1bGxfc2NhbiBjb21wbGV0ZWQgKi9cbiBcdGZ1bGxfc2NhbnMgPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcIikgKyAyO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCIlcy4uLlwiLCBtc2cpO1xuIFx0d2hpbGUgKHRpbWVvdXQtLSkge1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzKSlcbitcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmICh0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcIikgXHUwMDNlPSBmdWxsX3NjYW5zKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTU4Miw2ICs1ODksOCBAQCBzdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdFx0XHRcdHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplO1xuK1xuIFx0LypcbiBcdCAqIHJlYWRcdTAwMjZ3cml0ZSBmaWxlIGNvbGxhcHNlIGZhaWxzIHNpbmNlIGtodWdlcGFnZWQgZG9lcyBub3QgZmx1c2hcbiBcdCAqIHRoZSB0YXJnZXQgZGlydHkgZm9saW9zXG5AQCAtNTg5LDcgKzU5OCw3IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aWYgKCFpc190bXBmcyhvcHMpIFx1MDAyNlx1MDAyNiBvcHMgPT0gXHUwMDI2X19yZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKVxuIFx0XHRleHBlY3QgPSBmYWxzZTtcbiBcbi1cdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMpKSB7XG4rXHRpZiAod2FpdF9mb3Jfc2Nhbihtc2csIHAsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX29yZGVyLCBvcHMpKSB7XG4gXHRcdGlmIChleHBlY3QpXG4gXHRcdFx0ZmFpbChcIlRpbWVvdXRcIik7XG4gXHRcdGVsc2VcbkBAIC02MDUsMTAgKzYxNCw1NCBAQCBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdGlmIChvcHMgIT0gXHUwMDI2X19hbm9uX29wcylcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplKTtcbiBcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcbitcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBzaXplLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9wbWRfc2l6ZSkpXG4rXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbitcdGVsc2VcbitcdFx0ZmFpbChcIkZhaWxcIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG10aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4rXHRcdFx0XHRzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXHUwMDNjXHUwMDNjIGNvbGxhcHNlX29yZGVyO1xuK1x0c3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5ncyA9ICp0aHBfY3VycmVudF9zZXR0aW5ncygpO1xuK1x0LyogbVRIUCBjb2xscGFzZSBvbmx5IGFsbG9jYXRlcyBQTUQgc2l6ZWQgbWVtb3J5ICovXG4rXHR1bnNpZ25lZCBsb25nIHNpemUgPSBocGFnZV9wbWRfc2l6ZTtcbitcbitcdC8qIFNldCBtVEhQIHNldHRpbmcgZm9yIG1USFAgY29sbGFwc2UgKi9cbitcdGlmIChvcHMgPT0gXHUwMDI2X19hbm9uX29wcykge1xuK1x0XHRzZXR0aW5ncy50aHBfZW5hYmxlZCA9IFRIUF9ORVZFUjtcbitcdFx0c2V0dGluZ3MuaHVnZXBhZ2VzW2NvbGxhcHNlX29yZGVyXS5lbmFibGVkID0gVEhQX0FMV0FZUztcbitcdH1cbitcbitcdHRocF9wdXNoX3NldHRpbmdzKFx1MDAyNnNldHRpbmdzKTtcbitcbitcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgc2l6ZSwgbnJfaHBhZ2VzLCBjb2xsYXBzZV9vcmRlciwgb3BzKSkge1xuK1x0XHRpZiAoZXhwZWN0KVxuK1x0XHRcdGZhaWwoXCJUaW1lb3V0XCIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuK1xuK1x0XHQvKiBSZXN0b3JlIFRIUCBzZXR0aW5ncyBmb3IgbVRIUCBjb2xsYXBzZS4gKi9cbitcdFx0dGhwX3BvcF9zZXR0aW5ncygpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRm9yIGZpbGUgYW5kIHNobWVtIG1lbW9yeSwga2h1Z2VwYWdlZCBvbmx5IHJldHJhY3RzIHB0ZSBlbnRyaWVzIGFmdGVyXG4rXHQgKiBwdXR0aW5nIHRoZSBuZXcgaHVnZXBhZ2UgaW4gdGhlIHBhZ2UgY2FjaGUuIFRoZSBodWdlcGFnZSBtdXN0IGJlXG4rXHQgKiBzdWJzZXF1ZW50bHkgcmVmYXVsdGVkIHRvIGluc3RhbGwgdGhlIHBtZCBtYXBwaW5nIGZvciB0aGUgbW0uXG4rXHQgKi9cbitcdGlmIChvcHMgIT0gXHUwMDI2X19hbm9uX29wcylcbitcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3NpemUpO1xuK1xuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIHNpemUsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuK1xuK1x0LyogUmVzdG9yZSBUSFAgc2V0dGluZ3MgZm9yIG1USFAgY29sbGFwc2UuICovXG4rXHR0aHBfcG9wX3NldHRpbmdzKCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX2todWdlcGFnZWRfY29udGV4dCA9IHtcbkBAIC02MTcsNiArNjcwLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX2todWdlcGFnZWRfY29udGV4dCA9IHtcbiBcdC5uYW1lID0gXCJraHVnZXBhZ2VkXCIsXG4gfTtcbiBcbitzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tdGhwX2todWdlcGFnZWRfY29udGV4dCA9IHtcbitcdC5jb2xsYXBzZSA9IFx1MDAyNm10aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZSxcbitcdC5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IHRydWUsXG4rXHQubmFtZSA9IFwibXRocF9raHVnZXBhZ2VkXCIsXG4rfTtcbitcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tYWR2aXNlX2NvbnRleHQgPSB7XG4gXHQuY29sbGFwc2UgPSBcdTAwMjZtYWR2aXNlX2NvbGxhcHNlLFxuIFx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXG5AQCAtNjM0LDcgKzY5Myw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXG4gXHRwID0gYWxsb2NfbWFwcGluZygxKTtcbiBcdCpwID0gMTtcbiBcdGtzZnRfcHJpbnRfbXNnKFwiQWxsb2NhdGUgaHVnZSBwYWdlIG9uIGZhdWx0Li4uXCIpO1xuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4rXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtNjQzLDcgKzcwMiw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXG4gXG4gXHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XG4gXHRrc2Z0X3ByaW50X21zZyhcIlNwbGl0IGh1Z2UgUE1EIG9uIE1BRFZfRE9OVE5FRUQuLi5cIik7XG4tXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIDAsIGhwYWdlX3BtZF9zaXplKSlcbitcdGlmIChjaGVja19odWdlX2Fub24ocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC02NTUsMTAgKzcxNCwxNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxuIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGwoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4ge1xuIFx0dm9pZCAqcDtcbi1cdGludCBucl9ocGFnZXMgPSA0O1xuK1x0aW50IG5yX3BtZHMgPSA0LCBucl9ocGFnZXMgPSA0O1xuIFx0dW5zaWduZWQgbG9uZyBzaXplID0gbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemU7XG4gXG4tXHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEobnJfaHBhZ2VzKTtcbitcdC8qIE9ubHkgdHJ5IDEgUE1EIHNpemVkIHJhbmdlIGZvciBtVEhQIGNvbGxhcHNlLiAqL1xuK1x0aWYgKGMgPT0gXHUwMDI2X19tdGhwX2todWdlcGFnZWRfY29udGV4dCkge1xuK1x0XHRucl9wbWRzID0gMTtcbitcdFx0bnJfaHBhZ2VzID0gMSBcdTAwM2NcdTAwM2MgKGhwYWdlX3BtZF9vcmRlciAtIGNvbGxhcHNlX29yZGVyKTtcbitcdFx0c2l6ZSA9IGhwYWdlX3BtZF9zaXplO1xuK1x0fVxuK1xuK1x0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKG5yX3BtZHMpO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIHNpemUpO1xuIFx0Yy1cdTAwM2Vjb2xsYXBzZShcIkNvbGxhcHNlIG11bHRpcGxlIGZ1bGx5IHBvcHVsYXRlZCBQVEUgdGFibGVcIiwgcCwgbnJfaHBhZ2VzLFxuIFx0XHQgICAgb3BzLCB0cnVlKTtcbkBAIC02NzAsMTAgKzczNiwzMSBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFxuIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2VtcHR5KHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIHtcbitcdGludCBucl9ocGFnZXMgPSAxO1xuIFx0dm9pZCAqcDtcbiBcbitcdGlmIChjID09IFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXG4rXHRcdG5yX2hwYWdlcyA9IDEgXHUwMDNjXHUwMDNjIChocGFnZV9wbWRfb3JkZXIgLSBjb2xsYXBzZV9vcmRlcik7XG4rXG4gXHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEoMSk7XG4tXHRjLVx1MDAzZWNvbGxhcHNlKFwiRG8gbm90IGNvbGxhcHNlIGVtcHR5IFBURSB0YWJsZVwiLCBwLCAxLCBvcHMsIGZhbHNlKTtcbitcdGMtXHUwMDNlY29sbGFwc2UoXCJEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXCIsIHAsIG5yX2hwYWdlcywgb3BzLCBmYWxzZSk7XG4rXHRvcHMtXHUwMDNlY2xlYW51cF9hcmVhKHAsIGhwYWdlX3BtZF9zaXplKTtcbitcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcIiVzXFxuXCIsIF9fZnVuY19fKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX210aHAoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gcGFnZV9zaXplIFx1MDAzY1x1MDAzYyBjb2xsYXBzZV9vcmRlcjtcbitcdHZvaWQgKnA7XG4rXG4rXHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEoMSk7XG4rXHQvKlxuK1x0ICogT25seSBmYXVsdCBjb2xsYXBzZV9vcmRlciBzaXplZCByYW5nZXMsIGFuZCBvbmx5IGNoZWNrIDFcbitcdCAqIGNvbGxhcHNlX29yZGVyIHNpemVkIGh1Z2UgcGFnZS5cbitcdCAqL1xuK1x0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIGhwYWdlX3NpemUpO1xuK1x0Yy1cdTAwM2Vjb2xsYXBzZShcIkNvbGxhcHNlIFBURSB0YWJsZSB3aXRoIGhhbGYgUFRFIGVudHJpZXMgcHJlc2VudFwiLFxuK1x0XHRwLCAxLCBvcHMsIHRydWUpO1xuIFx0b3BzLVx1MDAzZWNsZWFudXBfYXJlYShwLCBocGFnZV9wbWRfc2l6ZSk7XG4gXHRrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgXCIlc1xcblwiLCBfX2Z1bmNfXyk7XG4gfVxuQEAgLTgxNSw3ICs5MDIsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5X2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y1xuIFx0bWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcdGtzZnRfcHJpbnRfbXNnKFwiU3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBtYXBwaW5nIGNvbXBvdW5kIHBhZ2UuLi5cIik7XG4gXHRtYWR2aXNlKHAgKyBwYWdlX3NpemUsIGhwYWdlX3BtZF9zaXplIC0gcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTgzNiw3ICs5MjMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsX29mX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0a3NmdF9wcmludF9tc2coXCJTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIHBhZ2UgdGFibGUgZnVsbCBvZiBjb21wb3VuZCBwYWdlcy4uLlwiKTtcbiBcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0bWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTg1OCw3ICs5NDUsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9jb21wb3VuZF9leHRyZW1lKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHBhZ2VfcG1kX25yOyBpKyspIHtcbiBcdFx0bWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KEJBU0VfQUREUiwgMCwgaHBhZ2VfcG1kX3NpemUpO1xuLVx0XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKEJBU0VfQUREUiwgMSkpXG4rXHRcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byBhbGxvY2F0ZSBodWdlIHBhZ2VcXG5cIik7XG4gXHRcdG1hZHZpc2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcbkBAIC04ODEsNyArOTY4LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfY29tcG91bmRfZXh0cmVtZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcbiBcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSk7XG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgaHBhZ2VfcG1kX3NpemUpO1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbitcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC05MDMsNyArOTkwLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwiQWxsb2NhdGUgc21hbGwgcGFnZS4uLlwiKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBwYWdlX3NpemUpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtOTExLDcgKzk5OCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXHRrc2Z0X3ByaW50X21zZyhcIlNoYXJlIHNtYWxsIHBhZ2Ugb3ZlciBmb3JrKCkuLi5cIik7XG4gXHRpZiAoIWZvcmsoKSkge1xuIFx0XHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTkyOSw3ICsxMDE2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcdGV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7XG4gXG4gXHRrc2Z0X3ByaW50X21zZyhcIkNoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgc21hbGwgcGFnZS4uLlwiKTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTk0Nyw3ICsxMDM0LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cbiBcdGtzZnRfcHJpbnRfbXNnKFwiU2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uXCIpO1xuIFx0aWYgKCFmb3JrKCkpIHtcbiBcdFx0LyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi9cbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuK1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC05NTUsNyArMTA0Miw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwiU3BsaXQgaHVnZSBwYWdlIFBNRCBpbiBjaGlsZCBwcm9jZXNzLi4uXCIpO1xuIFx0XHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcdFx0bWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC05NzYsNyArMTA2Myw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCJDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIGh1Z2UgcGFnZS4uLlwiKTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbitcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTk5NSw3ICsxMDgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0a3NmdF9wcmludF9tc2coXCJTaGFyZSBodWdlIHBhZ2Ugb3ZlciBmb3JrKCkuLi5cIik7XG4gXHRpZiAoIWZvcmsoKSkge1xuIFx0XHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXG4rXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTEwMDMsNyArMTA5MCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdFx0a3NmdF9wcmludF9tc2coXCJUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uXCIsXG4gXHRcdFx0XHRocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxLCBocGFnZV9wbWRfbnIpO1xuIFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEpICogcGFnZV9zaXplKTtcbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC0xMDE2LDcgKzExMDMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXG4gXHRcdFx0ICAgICAgIGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCwgaHBhZ2VfcG1kX25yKTtcbiBcdFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCkgKlxuIFx0XHRcdFx0ICAgIHBhZ2Vfc2l6ZSk7XG4tXHRcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTEwMzQsNyArMTEyMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7XG4gXG4gXHRrc2Z0X3ByaW50X21zZyhcIkNoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uXCIpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtMTA3NSw4ICsxMTYyLDggQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9yZXRyYWN0ZWRfcGFnZV90YWJsZXMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsXG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgc2l6ZSk7XG4gXG4gXHQvKiBMZXQga2h1Z2VwYWdlZCBjb2xsYXBzZSBhbmQgbGVhdmUgcG1kIGNsZWFyZWQgKi9cbi1cdGlmICh3YWl0X2Zvcl9zY2FuKFwiQ29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkXCIsIHAsIG5yX2hwYWdlcyxcbi1cdFx0XHQgIG9wcykpIHtcbitcdGlmICh3YWl0X2Zvcl9zY2FuKFwiQ29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkXCIsIHAsIHNpemUsIG5yX2hwYWdlcyxcbitcdFx0XHQgIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xuIFx0XHRmYWlsKFwiVGltZW91dFwiKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTEwOTIsNyArMTE3OSw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4ge1xuIFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuVXNhZ2U6IC4va2h1Z2VwYWdlZCBbT1BUSU9OU10gXHUwMDNjdGVzdCB0eXBlXHUwMDNlIFtkaXJdXFxuXFxuXCIpO1xuIFx0ZnByaW50ZihzdGRlcnIsIFwiXFx0XHUwMDNjdGVzdCB0eXBlXHUwMDNlXFx0OiBcdTAwM2Njb250ZXh0XHUwMDNlOlx1MDAzY21lbV90eXBlXHUwMDNlXFxuXCIpO1xuLVx0ZnByaW50ZihzdGRlcnIsIFwiXFx0XHUwMDNjY29udGV4dFx1MDAzZVxcdDogW2FsbHxraHVnZXBhZ2VkfG1hZHZpc2VdXFxuXCIpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiXFx0XHUwMDNjY29udGV4dFx1MDAzZVxcdDogW2FsbHxraHVnZXBhZ2VkfG10aHBfa2h1Z2VwYWdlZHxtYWR2aXNlXVxcblwiKTtcbiBcdGZwcmludGYoc3RkZXJyLCBcIlxcdFx1MDAzY21lbV90eXBlXHUwMDNlXFx0OiBbYWxsfGFub258ZmlsZXxzaG1lbV1cXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJcXG5cXHRcXFwiZmlsZSxhbGxcXFwiIG1lbV90eXBlIHJlcXVpcmVzIFtkaXJdIGFyZ3VtZW50XFxuXCIpO1xuIFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXFx0XFxcImZpbGUsYWxsXFxcIiBtZW1fdHlwZSByZXF1aXJlcyBhIGZpbGUgc3lzdGVtXFxuXCIpO1xuQEAgLTExMDMsNiArMTE5MCw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4gXHRmcHJpbnRmKHN0ZGVycixcdFwiXFx0XFx0LWg6IFRoaXMgaGVscCBtZXNzYWdlLlxcblwiKTtcbiBcdGZwcmludGYoc3RkZXJyLFx0XCJcXHRcXHQtczogbVRIUCBzaXplLCBleHByZXNzZWQgYXMgcGFnZSBvcmRlci5cXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVycixcdFwiXFx0XFx0ICAgIERlZmF1bHRzIHRvIDAuIFVzZSB0aGlzIHNpemUgZm9yIGFub24gb3Igc2htZW0gYWxsb2NhdGlvbnMuXFxuXCIpO1xuK1x0ZnByaW50ZihzdGRlcnIsXHRcIlxcdFxcdC1jOiBjb2xsYXBzZSBvcmRlciBmb3IgbVRIUCBjb2xsYXBzZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxuXCIpO1xuIFx0ZXhpdCgxKTtcbiB9XG4gXG5AQCAtMTExMiwxMSArMTIwMCwxNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0Y2hhciAqYnVmO1xuIFx0Y29uc3QgY2hhciAqdG9rZW47XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcInM6aFwiKSkgIT0gLTEpIHtcbitcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwiczpjOmhcIikpICE9IC0xKSB7XG4gXHRcdHN3aXRjaCAob3B0KSB7XG4gXHRcdGNhc2UgJ3MnOlxuIFx0XHRcdGFub25fb3JkZXIgPSBhdG9pKG9wdGFyZyk7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ2MnOlxuK1x0XHRcdGNvbGxhcHNlX29yZGVyID0gYXRvaShvcHRhcmcpO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICdoJzpcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHR1c2FnZSgpO1xuQEAgLTExNDIsNiArMTIzMywxMCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRtYWR2aXNlX2NvbnRleHQgPSAgXHUwMDI2X19tYWR2aXNlX2NvbnRleHQ7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFwia2h1Z2VwYWdlZFwiKSkge1xuIFx0XHRraHVnZXBhZ2VkX2NvbnRleHQgPSAgXHUwMDI2X19raHVnZXBhZ2VkX2NvbnRleHQ7XG4rXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFwibXRocF9raHVnZXBhZ2VkXCIpKSB7XG4rXHRcdG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0ID0gIFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQ7XG4rXHRcdGlmIChjb2xsYXBzZV9vcmRlciBcdTAwM2M9IDAgfHwgY29sbGFwc2Vfb3JkZXIgXHUwMDNlPSBocGFnZV9wbWRfb3JkZXIpXG4rXHRcdFx0dXNhZ2UoKTtcbiBcdH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgXCJtYWR2aXNlXCIpKSB7XG4gXHRcdG1hZHZpc2VfY29udGV4dCA9ICBcdTAwMjZfX21hZHZpc2VfY29udGV4dDtcbiBcdH0gZWxzZSB7XG5AQCAtMTIwNyw3ICsxMzAyLDYgQEAgc3RhdGljIGludCBucl90ZXN0X2Nhc2VzO1xuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiB7XG4tXHRpbnQgaHBhZ2VfcG1kX29yZGVyO1xuIFx0c3RydWN0IHRocF9zZXR0aW5ncyBkZWZhdWx0X3NldHRpbmdzID0ge1xuIFx0XHQudGhwX2VuYWJsZWQgPSBUSFBfTUFEVklTRSxcbiBcdFx0LnRocF9kZWZyYWcgPSBUSFBfREVGUkFHX0FMV0FZUyxcbkBAIC0xMjMzLDEwICsxMzI3LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxuXCIpO1xuIFxuLVx0cGFyc2VfdGVzdF90eXBlKGFyZ2MsIGFyZ3YpO1xuLVxuLVx0c2V0YnVmKHN0ZG91dCwgTlVMTCk7XG4tXG4gXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuIFx0aHBhZ2VfcG1kX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuIFx0aWYgKCFocGFnZV9wbWRfc2l6ZSlcbkBAIC0xMjQ0LDYgKzEzMzQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aHBhZ2VfcG1kX25yID0gaHBhZ2VfcG1kX3NpemUgLyBwYWdlX3NpemU7XG4gXHRocGFnZV9wbWRfb3JkZXIgPSBfX2J1aWx0aW5fY3R6KGhwYWdlX3BtZF9ucik7XG4gXG4rXHRwYXJzZV90ZXN0X3R5cGUoYXJnYywgYXJndik7XG4rXG4rXHRzZXRidWYoc3Rkb3V0LCBOVUxMKTtcbitcbiBcdGRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19ub25lID0gaHBhZ2VfcG1kX25yIC0gMTtcbiBcdGRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19zd2FwID0gaHBhZ2VfcG1kX25yIC8gODtcbiBcdGRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19zaGFyZWQgPSBocGFnZV9wbWRfbnIgLyAyO1xuQEAgLTEyNjEsNiArMTM1NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBraHVnZXBhZ2VkX2NvbnRleHQsIHNobWVtX29wcyk7XG4rXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcbkBAIC0xMjY4LDggKzEzNjMsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHNobWVtX29wcyk7XG4gXG4gXHRURVNUKGNvbGxhcHNlX2VtcHR5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcbitcdFRFU1QoY29sbGFwc2VfZW1wdHksIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2VtcHR5LCBtYWR2aXNlX2NvbnRleHQsIGFub25fb3BzKTtcbiBcbitcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX210aHAsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4rXG4gXHRURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbmluZGV4IDFiMmRmZmNjOTk5YjAuLmNmZDE5ODczMzljMTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuQEAgLTEwODUsNyArMTA4NSw3IEBAIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3dyaXR0ZW5fdGVzdChjb25zdCBjaGFyICpuYW1lLCBjaGFyICptZW0sIGxvbmcgc2l6ZSxcbiBcdG1lbXNldChtZW0sIDEsIHNpemUpO1xuIFx0aWYgKHVzZV90aHAgXHUwMDI2XHUwMDI2XG4gXHQgICAgKG1hZHZpc2UobWVtLCBzaXplLCBNQURWX0NPTExBUFNFKSB8fFxuLVx0ICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkge1xuK1x0ICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCIlcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxcblwiLCBuYW1lKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbmluZGV4IGQ4ZDlkMWRlNTdiOGIuLjgyYzZlOTZlYTZlYjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5AQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgaW50IHRlc3RfbW1hcF90aHAoZW51bSB0aHBfY29sbGFwc2VfdHlwZSBtYWR2aXNlX2J1Ziwgc2l6ZV90IHBtZHNpemUpXG4gXHQvKiBIQUNLOiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNlcGFyYXRlIFZNQSB0aGF0IHdlIGNhbiBjaGVjayByZWxpYWJseS4gKi9cbiBcdG1wcm90ZWN0KG1lbSwgcG1kc2l6ZSwgUFJPVF9SRUFEKTtcbiBcbi1cdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIDEsIHBtZHNpemUpO1xuK1x0cmV0ID0gY2hlY2tfaHVnZV9hbm9uKG1lbSwgcG1kc2l6ZSwgMSwgcG1kc2l6ZSk7XG4gXHRtdW5tYXAobW1hcF9tZW0sIG1tYXBfc2l6ZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCA2ODdkMTE1ZTNiZDgwLi5kMDlmOWY2YTM4NGVlIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtNDEwLDYgKzQxMCw4IEBAIENBVEVHT1JZPVwidGhwXCIgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIGFsbDpzaG1lbVxuIFxuIENBVEVHT1JZPVwidGhwXCIgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIC1zIDQgYWxsOnNobWVtXG4gXG4rQ0FURUdPUlk9XCJ0aHBcIiBydW5fdGVzdCAuL2todWdlcGFnZWQgLWMgNCBtdGhwX2todWdlcGFnZWQ6YW5vblxuK1xuICMgVHJ5IHRvIGNyZWF0ZSBYRlMgaWYgbm90IHByb3ZpZGVkXG4gaWYgWyAteiBcIiR7U1BMSVRfSFVHRV9QQUdFX1RFU1RfWEZTX1BBVEh9XCIgXTsgdGhlblxuICAgICBpZiB0ZXN0X3NlbGVjdGVkIFwidGhwXCI7IHRoZW5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbmluZGV4IGZiMTg2NGE2OGUxYzYuLmUxOThmYWNmNzhiYjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuQEAgLTEwMyw3ICsxMDMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2h1Z2VwYWdlKGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBocGFnZV9sZW47IGkrKylcbiBcdFx0bWFwW2ldID0gKGNoYXIpaTtcbiBcbi1cdGlmIChjaGVja19odWdlX2Fub24obWFwLCAxLCBocGFnZV9sZW4pKSB7XG4rXHRpZiAoY2hlY2tfaHVnZV9hbm9uKG1hcCwgaHBhZ2VfbGVuLCAxLCBocGFnZV9sZW4pKSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcIlRlc3QgJXMgaHVnZSBwYWdlIGFsbG9jYXRpb25cXG5cIiwgX19mdW5jX18pO1xuIFxuIFx0XHRjbGVhcl9zb2Z0ZGlydHkoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuaW5kZXggMzJiOTkxNDcyZjc0NC4uODZhNjAzNjkyODI2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbkBAIC0xMDQsMTI5ICsxMDQsNiBAQCBzdGF0aWMgYm9vbCBpc19iYWNrZWRfYnlfZm9saW8oY2hhciAqdmFkZHIsIGludCBvcmRlciwgaW50IHBhZ2VtYXBfZmQsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHR1aW50NjRfdCAqZmxhZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBwZm47XG4tXG4tXHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpO1xuLVxuLVx0Lyogbm9uLXByZXNlbnQgUEZOICovXG4tXHRpZiAocGZuID09IC0xVUwpXG4tXHRcdHJldHVybiAxO1xuLVxuLVx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGFnZWZsYWdzX2ZkLCBmbGFncykpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi0vKlxuLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmRcbi0gKiBmb2xpbyBvcmRlcnNcbi0gKlxuLSAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHJcbi0gKiBAbGVuOiByYW5nZSBsZW5ndGhcbi0gKiBAcGFnZW1hcF9mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9wYWdlbWFwXG4tICogQGtwYWdlZmxhZ3NfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9rcGFnZWZsYWdzXG4tICogQG9yZGVyczogb3V0cHV0IGZvbGlvIG9yZGVyIGFycmF5XG4tICogQG5yX29yZGVyczogZm9saW8gb3JkZXIgYXJyYXkgc2l6ZVxuLSAqXG4tICogZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycygpIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIGNoZWNrXG4tICogYWxsIGZvbGlvcyB3aXRoaW4gdGhlIHJhbmdlIGFuZCByZWNvcmQgdGhlaXIgb3JkZXJzLiBBbGwgb3JkZXItMCBwYWdlcyB3aWxsXG4tICogYmUgcmVjb3JkZWQuIE5vbi1wcmVzZW50IHZhZGRyIGlzIHNraXBwZWQuXG4tICpcbi0gKiBOT1RFOiB0aGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBmb2xpbyBvcmRlcnMgYWZ0ZXIgYSBzcGxpdCBpcyBwZXJmb3JtZWQsXG4tICogc28gaXQgYXNzdW1lcyBbdmFkZHJfc3RhcnQsIGxlbikgZnVsbHkgbWFwcyB0byBhZnRlci1zcGxpdCBmb2xpb3Mgd2l0aGluIHRoYXRcbi0gKiByYW5nZS5cbi0gKlxuLSAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xuLSAqL1xuLXN0YXRpYyBpbnQgZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbi1cdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXG4te1xuLVx0dWludDY0X3QgcGFnZV9mbGFncyA9IDA7XG4tXHRpbnQgY3VyX29yZGVyID0gLTE7XG4tXHRjaGFyICp2YWRkcjtcbi1cbi1cdGlmIChwYWdlbWFwX2ZkID09IC0xIHx8IGtwYWdlZmxhZ3NfZmQgPT0gLTEpXG4tXHRcdHJldHVybiAtMTtcbi1cdGlmICghb3JkZXJzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXHRpZiAobnJfb3JkZXJzIFx1MDAzYz0gMClcbi1cdFx0cmV0dXJuIC0xO1xuLVxuLVx0Zm9yICh2YWRkciA9IHZhZGRyX3N0YXJ0OyB2YWRkciBcdTAwM2MgdmFkZHJfc3RhcnQgKyBsZW47KSB7XG4tXHRcdGNoYXIgKm5leHRfZm9saW9fdmFkZHI7XG4tXHRcdGludCBzdGF0dXM7XG4tXG4tXHRcdHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQodmFkZHIsIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXG4tXHRcdFx0XHRcdFx1MDAyNnBhZ2VfZmxhZ3MpO1xuLVx0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiAtMTtcbi1cbi1cdFx0Lyogc2tpcCBub24gcHJlc2VudCB2YWRkciAqL1xuLVx0XHRpZiAoc3RhdHVzID09IDEpIHtcbi1cdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdC8qIGFsbCBvcmRlci0wIHBhZ2VzIHdpdGggcG9zc2libGUgZmFsc2UgcG9zdGl2ZSAobm9uIGZvbGlvKSAqL1xuLVx0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4tXHRcdFx0b3JkZXJzWzBdKys7XG4tXHRcdFx0dmFkZHIgKz0gcHNpemUoKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHQvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi9cbi1cdFx0aWYgKCEocGFnZV9mbGFncyBcdTAwMjYgS1BGX1RIUCkpIHtcbi1cdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdC8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovXG4tXHRcdGlmIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcbi1cdFx0XHRjdXJfb3JkZXIgPSAxO1xuLVx0XHRlbHNlIHtcbi1cdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciArICgxVUwgXHUwMDNjXHUwMDNjIChjdXJfb3JkZXIgKyBwc2hpZnQoKSkpO1xuLVxuLVx0XHRpZiAobmV4dF9mb2xpb192YWRkciBcdTAwM2U9IHZhZGRyX3N0YXJ0ICsgbGVuKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHR3aGlsZSAoKHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQobmV4dF9mb2xpb192YWRkcixcbi1cdFx0XHRcdFx0XHQgICAgIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXG4tXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZwYWdlX2ZsYWdzKSkgXHUwMDNlPSAwKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBub24gcHJlc2VudCB2YWRkciwgbmV4dCBjb21wb3VuZCBoZWFkIHBhZ2UsIG9yXG4tXHRcdFx0ICogb3JkZXItMCBwYWdlXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHN0YXR1cyA9PSAxIHx8XG4tXHRcdFx0ICAgIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRCkgfHxcbi1cdFx0XHQgICAgIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4tXHRcdFx0XHRpZiAoY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpIHtcbi1cdFx0XHRcdFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcbi1cdFx0XHRcdFx0Y3VyX29yZGVyID0gLTE7XG4tXHRcdFx0XHRcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRjdXJfb3JkZXIrKztcbi1cdFx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcbi1cdFx0fVxuLVxuLVx0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBzdGF0dXM7XG4tXHR9XG4tXHRpZiAoY3VyX29yZGVyIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBjdXJfb3JkZXIgXHUwMDNjIG5yX29yZGVycylcbi1cdFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXG4ge1xuQEAgLTI0MCw3ICsxMTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdmFkZHJfb3JkZXJzXCIpO1xuIFxuIFx0bWVtc2V0KHZhZGRyX29yZGVycywgMCwgc2l6ZW9mKGludCkgKiBucl9vcmRlcnMpO1xuLVx0c3RhdHVzID0gZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLFxuK1x0c3RhdHVzID0gZ2F0aGVyX2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLFxuIFx0XHRcdFx0ICAgICBrcGFnZWZsYWdzX2ZkLCB2YWRkcl9vcmRlcnMsIG5yX29yZGVycyk7XG4gXHRpZiAoc3RhdHVzKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJnYXRoZXIgZm9saW8gaW5mbyBmYWlsZWRcXG5cIik7XG5AQCAtMjk2LDcgKzE3Myw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXG4gXHR1bnNpZ25lZCBsb25nIHJzc19hbm9uX2JlZm9yZSwgcnNzX2Fub25fYWZ0ZXI7XG4gXHRzaXplX3QgaTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCBucl9ocGFnZXMsIHBtZF9wYWdlc2l6ZSkpXG4rXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzICogcG1kX3BhZ2VzaXplLCBucl9ocGFnZXMsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk5vIFRIUCBpcyBhbGxvY2F0ZWRcXG5cIik7XG4gXG4gXHRyc3NfYW5vbl9iZWZvcmUgPSByc3NfYW5vbigpO1xuQEAgLTMxMSw3ICsxODgsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0XHRpZiAob25lX3BhZ2VbaV0gIT0gKGNoYXIpMClcbiBcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlbGQgYnl0ZSBjb3JydXB0ZWRcXG5cIiwgaSk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcbitcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCBucl9ocGFnZXMgKiBwbWRfcGFnZXNpemUsIDAsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlN0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCIpO1xuIFxuIFx0cnNzX2Fub25fYWZ0ZXIgPSByc3NfYW5vbigpO1xuQEAgLTM0Nyw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlbjsgaSsrKVxuIFx0XHRvbmVfcGFnZVtpXSA9IChjaGFyKWk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCwgcG1kX3BhZ2VzaXplKSlcbitcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCA0ICogcG1kX3BhZ2VzaXplLCA0LCBwbWRfcGFnZXNpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCIpO1xuIFxuIFx0Lyogc3BsaXQgYWxsIFRIUHMgKi9cbkBAIC0zNjYsNyArMjQzLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXG4gXHRcdFx0XHRcdCAgIChwbWRfb3JkZXIgKyAxKSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlVuZXhwZWN0ZWQgVEhQIHNwbGl0XFxuXCIpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXG4rXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiU3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcXG5cIik7XG4gXG4gXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCJTcGxpdCBodWdlIHBhZ2VzIHRvIG9yZGVyICVkIHN1Y2Nlc3NmdWxcXG5cIiwgb3JkZXIpO1xuQEAgLTM5Myw3ICsyNzAsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wdGVfbWFwcGVkX3RocCh2b2lkKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGhwX2FyZWFfc2l6ZTsgaSsrKVxuIFx0XHR0aHBfYXJlYVtpXSA9IChjaGFyKWk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbih0aHBfYXJlYSwgbnJfdGhwcywgcG1kX3BhZ2VzaXplKSkge1xuK1x0aWYgKCFjaGVja19odWdlX2Fub24odGhwX2FyZWEsIG5yX3RocHMgKiBwbWRfcGFnZXNpemUsIG5yX3RocHMsIHBtZF9wYWdlc2l6ZSkpIHtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiTm90IGFsbCBUSFBzIGFsbG9jYXRlZFxcblwiKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtNjU3LDcgKzUzNCw3IEBAIHN0YXRpYyBpbnQgY3JlYXRlX3BhZ2VjYWNoZV90aHBfYW5kX2ZkKGNvbnN0IGNoYXIgKnRlc3RmaWxlLCBzaXplX3QgZmRfc2l6ZSxcbiBcbiBcdGZvcmNlX3JlYWRfcGFnZXMoKmFkZHIsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZSgqYWRkciwgZmRfc2l6ZSAvIHBtZF9wYWdlc2l6ZSwgcG1kX3BhZ2VzaXplKSkge1xuK1x0aWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHtcbiBcdFx0a3NmdF9wcmludF9tc2coXCJObyBsYXJnZSBwYWdlY2FjaGUgZm9saW8gZ2VuZXJhdGVkLCBwbGVhc2UgcHJvdmlkZSBhIGZpbGVzeXN0ZW0gc3VwcG9ydGluZyBsYXJnZSBmb2xpb1xcblwiKTtcbiBcdFx0bXVubWFwKCphZGRyLCBmZF9zaXplKTtcbiBcdFx0Y2xvc2UoKmZkKTtcbkBAIC03MzUsNyArNjEyLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfdGhwX2luX3BhZ2VjYWNoZV90b19vcmRlcl9hdChzaXplX3QgZmRfc2l6ZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7XG4rXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCBmZF9zaXplLCAwLCBwbWRfcGFnZXNpemUpKSB7XG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwiU3RpbGwgRmlsZVBtZE1hcHBlZCBub3Qgc3BsaXRcXG5cIik7XG4gXHRcdGVyciA9IEVYSVRfRkFJTFVSRTtcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcbmluZGV4IGY0OGY1ZDQ1OTRhYjAuLmZhNDZjOGMzYTQzNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG5AQCAtMTk0LDcgKzE5NCw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX2FsaWFzX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBfX3U2NCAqc3RhcnQsXG4gXG4gc3RhdGljIHZvaWQgc2htZW1fY2hlY2tfcG1kX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB2b2lkICpwLCBpbnQgZXhwZWN0X25yX2hwYWdlcylcbiB7XG4tXHRpZiAoIWNoZWNrX2h1Z2Vfc2htZW0oZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMsIGV4cGVjdF9ucl9ocGFnZXMsXG4rXHR1bnNpZ25lZCBsb25nIHNpemUgPSBleHBlY3RfbnJfaHBhZ2VzICogcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcbitcdGlmICghY2hlY2tfaHVnZV9zaG1lbShnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcywgc2l6ZSwgZXhwZWN0X25yX2hwYWdlcyxcbiBcdFx0XHQgICAgICByZWFkX3BtZF9wYWdlc2l6ZSgpKSlcbiBcdFx0ZXJyKFwiRGlkIG5vdCBmaW5kIGV4cGVjdGVkICVkIG51bWJlciBvZiBodWdlcGFnZXNcIixcbiBcdFx0ICAgIGV4cGVjdF9ucl9ocGFnZXMpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggZWYxZWExMTk4MWE3NC4uYTRmZmFhMGNhNmZhMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtMTUsNiArMTUsMTAgQEBcbiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIIFwiL3Byb2Mvc2VsZi9zbWFwc1wiXG4gI2RlZmluZSBTVEFUVVNfRklMRV9QQVRIIFwiL3Byb2Mvc2VsZi9zdGF0dXNcIlxuICNkZWZpbmUgTUFYX0xJTkVfTEVOR1RIIDUwMFxuKyNkZWZpbmUgUEFHRU1BUF9QQVRIIFwiL3Byb2Mvc2VsZi9wYWdlbWFwXCJcbisjZGVmaW5lIEtQQUdFRkxBR1NfUEFUSCBcIi9wcm9jL2twYWdlZmxhZ3NcIlxuKyNkZWZpbmUgR0VUX09SREVSKG5yX3BhZ2VzKSAgICAoMzEgLSBfX2J1aWx0aW5fY2x6KG5yX3BhZ2VzKSlcbisjZGVmaW5lIE5SX09SREVSUyAyMFxuIFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0O1xuQEAgLTE5NCw2ICsxOTgsMTI1IEBAIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcbiBcdHJldHVybiByc3NfYW5vbjtcbiB9XG4gXG4rc3RhdGljIGludCB2YWRkcl9wYWdlZmxhZ3NfZ2V0KGNoYXIgKnZhZGRyLCBpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsXG4rXHRcdHVpbnQ2NF90ICpmbGFncylcbit7XG4rXHR1bnNpZ25lZCBsb25nIHBmbjtcbitcbitcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCB2YWRkcik7XG4rXG4rXHQvKiBub24tcHJlc2VudCBQRk4gKi9cbitcdGlmIChwZm4gPT0gLTFVTClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIGZsYWdzKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogZ2F0aGVyX2ZvbGlvX29yZGVycyAtIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIHJlY29yZFxuKyAqIGZvbGlvIG9yZGVyc1xuKyAqXG4rICogQHZhZGRyX3N0YXJ0OiBzdGFydCB2YWRkclxuKyAqIEBsZW46IHJhbmdlIGxlbmd0aFxuKyAqIEBwYWdlbWFwX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3BhZ2VtYXBcbisgKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3NcbisgKiBAb3JkZXJzOiBvdXRwdXQgZm9saW8gb3JkZXIgYXJyYXlcbisgKiBAbnJfb3JkZXJzOiBmb2xpbyBvcmRlciBhcnJheSBzaXplXG4rICpcbisgKiBnYXRoZXJfZm9saW9fb3JkZXJzKCkgc2NhbiB0aHJvdWdoIFt2YWRkcl9zdGFydCwgbGVuKSBhbmQgY2hlY2tcbisgKiBhbGwgZm9saW9zIHdpdGhpbiB0aGUgcmFuZ2UgYW5kIHJlY29yZCB0aGVpciBvcmRlcnMuIEFsbCBvcmRlci0wIHBhZ2VzIHdpbGxcbisgKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC5cbisgKlxuKyAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xuKyAqL1xuK2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxuK1x0XHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycylcbit7XG4rXHR1aW50NjRfdCBwYWdlX2ZsYWdzID0gMDtcbitcdGludCBjdXJfb3JkZXIgPSAtMTtcbitcdGNoYXIgKnZhZGRyO1xuK1xuK1x0aWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKCFvcmRlcnMpXG4rXHRcdHJldHVybiAtMTtcbitcdGlmIChucl9vcmRlcnMgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyIFx1MDAzYyB2YWRkcl9zdGFydCArIGxlbjspIHtcbitcdFx0Y2hhciAqbmV4dF9mb2xpb192YWRkcjtcbitcdFx0aW50IHN0YXR1cztcbitcbitcdFx0c3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldCh2YWRkciwgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcbitcdFx0XHRcdFx1MDAyNnBhZ2VfZmxhZ3MpO1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiAtMTtcbitcbitcdFx0Lyogc2tpcCBub24gcHJlc2VudCB2YWRkciAqL1xuK1x0XHRpZiAoc3RhdHVzID09IDEpIHtcbitcdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdC8qIGFsbCBvcmRlci0wIHBhZ2VzIHdpdGggcG9zc2libGUgZmFsc2UgcG9zdGl2ZSAobm9uIGZvbGlvKSAqL1xuK1x0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4rXHRcdFx0b3JkZXJzWzBdKys7XG4rXHRcdFx0dmFkZHIgKz0gcHNpemUoKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHQvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi9cbitcdFx0aWYgKCEocGFnZV9mbGFncyBcdTAwMjYgS1BGX1RIUCkpIHtcbitcdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdC8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovXG4rXHRcdGlmIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcbitcdFx0XHRjdXJfb3JkZXIgPSAxO1xuK1x0XHRlbHNlIHtcbitcdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciArICgxVUwgXHUwMDNjXHUwMDNjIChjdXJfb3JkZXIgKyBwc2hpZnQoKSkpO1xuK1xuK1x0XHRpZiAobmV4dF9mb2xpb192YWRkciBcdTAwM2U9IHZhZGRyX3N0YXJ0ICsgbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHR3aGlsZSAoKHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQobmV4dF9mb2xpb192YWRkcixcbitcdFx0XHRcdFx0XHQgICAgIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZwYWdlX2ZsYWdzKSkgXHUwMDNlPSAwKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBub24gcHJlc2VudCB2YWRkciwgbmV4dCBjb21wb3VuZCBoZWFkIHBhZ2UsIG9yXG4rXHRcdFx0ICogb3JkZXItMCBwYWdlXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHN0YXR1cyA9PSAxIHx8XG4rXHRcdFx0ICAgIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRCkgfHxcbitcdFx0XHQgICAgIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4rXHRcdFx0XHRpZiAoY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpIHtcbitcdFx0XHRcdFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcbitcdFx0XHRcdFx0Y3VyX29yZGVyID0gLTE7XG4rXHRcdFx0XHRcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHRjdXJfb3JkZXIrKztcbitcdFx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiBzdGF0dXM7XG4rXHR9XG4rXHRpZiAoY3VyX29yZGVyIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBjdXJfb3JkZXIgXHUwMDNjIG5yX29yZGVycylcbitcdFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcbitcdHJldHVybiAwO1xuK31cbitcbiBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTIyOSw3ICszNTIsNyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcbitzdGF0aWMgYm9vbCBfX2NoZWNrX3BtZF9odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXG4gXHRcdCAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRjaGFyIGJ1ZmZlcltNQVhfTElORV9MRU5HVEhdO1xuQEAgLTI0NywxOSArMzcwLDYyIEBAIGJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXG4gXHRyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgMTApKTtcbiB9XG4gXG4tYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbitzdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3Modm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXCJBbm9uSHVnZVBhZ2VzOiBcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdGludCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4rXHRpbnQgb3JkZXIgPSBHRVRfT1JERVIoaHBhZ2Vfc2l6ZSAvIHBhZ2VzaXplKTtcbitcdGludCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkO1xuK1x0aW50IG9yZGVyc1tOUl9PUkRFUlNdLCBzdGF0dXM7XG4rXHRib29sIHJldCA9IGZhbHNlO1xuK1xuK1x0bWVtc2V0KG9yZGVycywgMCwgc2l6ZW9mKGludCkgKiBOUl9PUkRFUlMpO1xuK1xuK1x0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7XG4rXHRpZiAocGFnZW1hcF9mZCA9PSAtMSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZCBwYWdlbWFwIGZhaWxcXG5cIik7XG4rXG4rXHRrcGFnZWZsYWdzX2ZkID0gb3BlbihLUEFHRUZMQUdTX1BBVEgsIE9fUkRPTkxZKTtcbitcdGlmIChrcGFnZWZsYWdzX2ZkID09IC0xKSB7XG4rXHRcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkIGtwYWdlZmxhZ3MgZmFpbFxcblwiKTtcbitcdH1cbitcbitcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnMoYWRkciwgc2l6ZSwgcGFnZW1hcF9mZCxcbitcdFx0XHRrcGFnZWZsYWdzX2ZkLCBvcmRlcnMsIE5SX09SREVSUyk7XG4rXHRpZiAoc3RhdHVzKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmIChvcmRlcnNbb3JkZXJdID09IG5yX2hwYWdlcylcbitcdFx0cmV0ID0gdHJ1ZTtcbitcbitvdXQ6XG4rXHRjbG9zZShwYWdlbWFwX2ZkKTtcbitcdGNsb3NlKGtwYWdlZmxhZ3NfZmQpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4tYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbitib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcIkZpbGVQbWRNYXBwZWQ6XCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXHRpZiAoaHBhZ2Vfc2l6ZSA9PSByZWFkX3BtZF9wYWdlc2l6ZSgpKVxuK1x0XHRyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCBcIkFub25IdWdlUGFnZXM6IFwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuK1xuK1x0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuK31cbitcbitib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4re1xuK1x0aWYgKGhwYWdlX3NpemUgPT0gcmVhZF9wbWRfcGFnZXNpemUoKSlcbitcdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCJGaWxlUG1kTWFwcGVkOlwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuK1xuK1x0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbitib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXCJTaG1lbVBtZE1hcHBlZDpcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdGlmIChocGFnZV9zaXplID09IHJlYWRfcG1kX3BhZ2VzaXplKCkpXG4rXHRcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFwiU2htZW1QbWRNYXBwZWQ6XCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXG4rXHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA3Nzk5MTU0YjY3ZWVkLi4yMGFmM2U1NzRjZDgwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC05MCwxMSArOTAsMTMgQEAgdm9pZCBjbGVhcl9zb2Z0ZGlydHkodm9pZCk7XG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTtcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuLWJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbitib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuK2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4rYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCk7XG4gaW50IHBhZ2VmbGFnc19nZXQodW5zaWduZWQgbG9uZyBwZm4sIGludCBrcGFnZWZsYWdzX2ZkLCB1aW50NjRfdCAqZmxhZ3MpO1xuK2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxuK1x0XHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycyk7XG4gXG4gaW50IHVmZmRfcmVnaXN0ZXIoaW50IHVmZmQsIHZvaWQgKmFkZHIsIHVpbnQ2NF90IGxlbixcbiBcdFx0ICBib29sIG1pc3MsIGJvb2wgd3AsIGJvb2wgbWlub3IpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDU6MzI6NTYuMzE4Mzk4MjgyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY4MjQ0MDQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRXZhbHVhdGlvbjogQW5hbHlzaXMgb2YgYSBNZW1vcnkgTWFuYWdlbWVudCBTZWxmdGVzdCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBsaXZlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gUmlnaHQgYXdheSwgdGhhdCdzIGEgcmVkIGZsYWcgaW4gdGhlIGNvbnRleHQgb2Yga2VybmVsIGZ1enppbmcuIFRoZSBmaWxlcyBsaXN0ZWQgYXJlIGFsbCByZWxhdGVkIHRvIHVzZXJzcGFjZSB0ZXN0cyBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbTogYGZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jYCwgYGtodWdlcGFnZWQuY2AsIGBwYWdlbWFwX2lvY3RsLmNgLCBhbmQgc28gb24uIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHByaW1hcmlseSBjb25jZXJucyBpdHNlbGYgd2l0aCBhZGRpbmcgbVRIUCAobXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSB0ZXN0aW5nLCB3aXRoIGFkanVzdG1lbnRzIHRvIHJlbGF0ZWQgZnVuY3Rpb25zLlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIHByb21wdC4gSXQncyBhc2tpbmcgaWYgdGhpcyBwYXRjaCBpcyBcIldvcnRoRnV6emluZy5cIiBCYXNlZCBvbiB0aGUgY3JpdGVyaWEgaXQgZ2l2ZXMsIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGUgbW9kaWZpY2F0aW9ucyBhZmZlY3QgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggKm9ubHkqIGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgdG8gdGVzdHMgb3IgZG9jdW1lbnRhdGlvbi5cblxuSSd2ZSBhbHJlYWR5IGFzY2VydGFpbmVkIHRoYXQgdGhpcyBwYXRjaCBpcyBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIHRoZSBzZWxmdGVzdHMgZGlyZWN0b3J5LiBTZWxmdGVzdHMgYXJlICp1c2Vyc3BhY2UqIHByb2dyYW1zIGRlc2lnbmVkIHRvIHRlc3QgdGhlIGtlcm5lbCdzIGJlaGF2aW9yLiBUaGUgbW9kaWZpY2F0aW9ucyBoZXJlIGFyZSB0byAqdGVzdCogdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBub3QgdG8gKmNoYW5nZSogdGhlIGtlcm5lbCBpdHNlbGYuIEZ1enppbmcgc2VsZnRlc3RzIGlzIG5vdCB0aGUgc2FtZSBhcyBmdXp6aW5nIHRoZSBrZXJuZWwsIHNpbmNlIGZ1enppbmcgdGhlIGtlcm5lbCBmb2N1c2VzIG9uIHN5c3RlbSBjYWxscyBhbmQga2VybmVsIGVudHJ5IHBvaW50cy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBteSBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuIEkgaGF2ZSBhIG1lbnRhbCBjaGVja2xpc3QuIExldCBtZSB2ZXJpZnk6XG4tIEkndmUgdmVyaWZpZWQgdGhlIHBhdGggcHJlZml4IGZvciBhbGwgbW9kaWZpZWQgZmlsZXMuXG4tIFRoZSBwYXRoIHByZWZpeCBpcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC5cbi0gTm8ga2VybmVsIGNvZGUgaXMgcHJlc2VudC5cbi0gSXQncyBhbGwgdXNlcnNwYWNlIGNvZGUuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzLCBJIGNvbmNsdWRlIHRoYXQgaXQgZG9lcyAqbm90KiB0b3VjaCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIHByb21wdCdzIGNyaXRlcmlhLCB0aGUgcGF0Y2ggaXMgKipub3QqKiB3b3J0aCBmdXp6aW5nLiBUaGUgcmVzdWx0IGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ3MCwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA1OjMzOjA1LjAwMDg0NDQzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow2j75n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 05:06:25 +0000 UTC FinishedAt: 2026-07-29 05:33:06 +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+CgkJCTx0ZD4yMDI2LzA3LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNTozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMyZGE2ZmQ1ZDc1MGQ0NDgyNGViOTYwODA0NDdhYmJhMjdiZmY4NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAwNTozMjo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA2MzI5ZTM3ZmZmNGM5Li40NWI4NGY3YjM2NGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMTgyLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgdWludDY0X3QgcnVuX2l0ZXJhdGlvbih2b2lkKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVE9UQUxfUEFHRVM7IGkmIzQzOyYjNDM7KVxuIFx0XHRmaWxsX3BhZ2UobW1hcF9iYXNlLCBpKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKVxuJiM0MztcdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIEZJTEVfU0laRSwgTlJfUE1EX1BBR0UsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBzaG1lbSBUSFAgaXMgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiBcbiBcdGlmIChwdGhyZWFkX2JhcnJpZXJfaW5pdChcdTAwMjZjdGwuYmFycmllciwgTlVMTCwgTlVNX1JFQURFUl9USFJFQURTICYjNDM7IDEpICE9IDApXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCAxMGU4ZGVkY2IwODdkLi5lMjFhNmVjMzgzNjMyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbkBAIC0yNiw5ICYjNDM7MjYsMTEgQEBcbiBcbiAjZGVmaW5lIEJBU0VfQUREUiAoKHZvaWQgKikoMVVMIFx1MDAzY1x1MDAzYyAzMCkpXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBhZ2VfcG1kX3NpemU7XG4mIzQzO3N0YXRpYyBpbnQgaHBhZ2VfcG1kX29yZGVyO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbiBzdGF0aWMgaW50IGhwYWdlX3BtZF9ucjtcbiBzdGF0aWMgaW50IGFub25fb3JkZXI7XG4mIzQzO3N0YXRpYyBpbnQgY29sbGFwc2Vfb3JkZXI7XG4gXG4gI2RlZmluZSBQSURfU01BUFMgXCYjMzQ7L3Byb2Mvc2VsZi9zbWFwc1wmIzM0O1xuICNkZWZpbmUgVEVTVF9GSUxFIFwmIzM0O2NvbGxhcHNlX3Rlc3RfZmlsZVwmIzM0O1xuQEAgLTUxLDcgJiM0Mzs1Myw3IEBAIHN0cnVjdCBtZW1fb3BzIHtcbiBcdHZvaWQgKigqc2V0dXBfYXJlYSkoaW50IG5yX2hwYWdlcyk7XG4gXHR2b2lkICgqY2xlYW51cF9hcmVhKSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFx0dm9pZCAoKmZhdWx0KSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4tXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcyk7XG4mIzQzO1x0Ym9vbCAoKmNoZWNrX2h1Z2UpKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdW5zaWduZWQgbG9uZyBocGFnZV9zaXplKTtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gfTtcbiBcbkBAIC02OSw2ICYjNDM7NzEsNyBAQCBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCB7XG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmtodWdlcGFnZWRfY29udGV4dDtcbiYjNDM7c3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICptdGhwX2todWdlcGFnZWRfY29udGV4dDtcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKm1hZHZpc2VfY29udGV4dDtcbiBcbiBzdHJ1Y3QgZmlsZV9pbmZvIHtcbkBAIC0yNzYsNyAmIzQzOzI3OSw3IEBAIHN0YXRpYyB2b2lkICphbGxvY19ocGFnZShzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7QWxsb2NhdGUgaHVnZSBwYWdlLi4uXCYjMzQ7KTtcbiBcdGlmIChtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O21hZHZpc2UoTUFEVl9DT0xMQVBTRSlcJiMzNDspO1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfQ09MTEFQU0UpXCYjMzQ7KTtcbiBcdGlmIChtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O21hZHZpc2UoTUFEVl9IVUdFUEFHRSlcJiMzNDspO1xuQEAgLTMxMCw5ICYjNDM7MzEzLDEwIEBAIHN0YXRpYyB2b2lkIGFub25fZmF1bHQodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gXHRmaWxsX21lbW9yeShwLCBzdGFydCwgZW5kKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgYW5vbl9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpXG4mIzQzO3N0YXRpYyBib29sIGFub25fY2hlY2tfaHVnZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXG4mIzQzO1x0XHRpbnQgbnJfaHBhZ2VzLCB1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpXG4ge1xuLVx0cmV0dXJuIGNoZWNrX2h1Z2VfYW5vbihhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcbiYjNDM7XHRyZXR1cm4gY2hlY2tfaHVnZV9hbm9uKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG5AQCAtNDEyLDEzICYjNDM7NDE2LDE0IEBAIHN0YXRpYyB2b2lkIGZpbGVfZmF1bHRfd3JpdGUodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfUE9QVUxBVEVfV1JJVEUpXCYjMzQ7KTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpXG4mIzQzO3N0YXRpYyBib29sIGZpbGVfY2hlY2tfaHVnZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXG4mIzQzO1x0XHRpbnQgbnJfaHBhZ2VzLCB1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpXG4ge1xuIFx0c3dpdGNoIChmaW5mby50eXBlKSB7XG4gXHRjYXNlIFZNQV9GSUxFOlxuLVx0XHRyZXR1cm4gY2hlY2tfaHVnZV9maWxlKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xuJiM0MztcdFx0cmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIFx0Y2FzZSBWTUFfU0hNRU06XG4tXHRcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xuJiM0MztcdFx0cmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTQ0OCw5ICYjNDM7NDUzLDEwIEBAIHN0YXRpYyB2b2lkIHNobWVtX2NsZWFudXBfYXJlYSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXHRjbG9zZShmaW5mby5mZCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIHNobWVtX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcylcbiYjNDM7c3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXG4mIzQzO1x0XHRcdGludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcbiYjNDM7XHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IG1lbV9vcHMgX19hbm9uX29wcyA9IHtcbkBAIC01MzMsNyAmIzQzOzUzOSw3IEBAIHN0YXRpYyB2b2lkIF9fbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRyZXQgPSBtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplKTtcbiBcdGlmICgoKGJvb2wpcmV0KSA9PSBleHBlY3QpXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbDogQmFkIHJldHVybiB2YWx1ZVwmIzM0Oyk7XG4tXHRlbHNlIGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCkpXG4mIzQzO1x0ZWxzZSBpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbDogY2hlY2tfaHVnZSgpXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG5AQCAtNTQ1LDMwICYjNDM7NTUxLDMxIEBAIHN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4ge1xuIFx0LyogU2FuaXR5IGNoZWNrICovXG4tXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuJiM0MztcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1VuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCYjMzQ7KTtcbiBcdF9fbWFkdmlzZV9jb2xsYXBzZShtc2csIHAsIG5yX2hwYWdlcywgb3BzLCBleHBlY3QpO1xuIH1cbiBcbiAjZGVmaW5lIFRJQ0sgNTAwMDAwXG4tc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4tXHRcdFx0ICBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuJiM0MztzdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgdW5zaWduZWQgbG9uZyBzaXplLFxuJiM0MztcdFx0aW50IG5yX2hwYWdlcywgaW50IGNvbGxhcF9vcmRlciwgc3RydWN0IG1lbV9vcHMgKm9wcylcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gcGFnZV9zaXplIFx1MDAzY1x1MDAzYyBjb2xsYXBfb3JkZXI7XG4gXHRpbnQgZnVsbF9zY2FucztcbiBcdGludCB0aW1lb3V0ID0gNjsgLyogMyBzZWNvbmRzICovXG4gXG4gXHQvKiBTYW5pdHkgY2hlY2sgKi9cbi1cdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBzaXplLCAwLCBocGFnZV9zaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1VuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCYjMzQ7KTtcbiBcbi1cdG1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpO1xuJiM0MztcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4gXG4gXHQvKiBXYWl0IHVudGlsIHRoZSBzZWNvbmQgZnVsbF9zY2FuIGNvbXBsZXRlZCAqL1xuIFx0ZnVsbF9zY2FucyA9IHRocF9yZWFkX251bShcJiMzNDtraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcJiMzNDspICYjNDM7IDI7XG4gXG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDslcy4uLlwmIzM0OywgbXNnKTtcbiBcdHdoaWxlICh0aW1lb3V0LS0pIHtcbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcykpXG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0aWYgKHRocF9yZWFkX251bShcJiMzNDtraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcJiMzNDspIFx1MDAzZT0gZnVsbF9zY2FucylcbiBcdFx0XHRicmVhaztcbkBAIC01ODIsNiAmIzQzOzU4OSw4IEBAIHN0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0XHRcdFx0c3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplO1xuJiM0MztcbiBcdC8qXG4gXHQgKiByZWFkXHUwMDI2d3JpdGUgZmlsZSBjb2xsYXBzZSBmYWlscyBzaW5jZSBraHVnZXBhZ2VkIGRvZXMgbm90IGZsdXNoXG4gXHQgKiB0aGUgdGFyZ2V0IGRpcnR5IGZvbGlvc1xuQEAgLTU4OSw3ICYjNDM7NTk4LDcgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRpZiAoIWlzX3RtcGZzKG9wcykgXHUwMDI2XHUwMDI2IG9wcyA9PSBcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHMpXG4gXHRcdGV4cGVjdCA9IGZhbHNlO1xuIFxuLVx0aWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBucl9ocGFnZXMsIG9wcykpIHtcbiYjNDM7XHRpZiAod2FpdF9mb3Jfc2Nhbihtc2csIHAsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX29yZGVyLCBvcHMpKSB7XG4gXHRcdGlmIChleHBlY3QpXG4gXHRcdFx0ZmFpbChcJiMzNDtUaW1lb3V0XCYjMzQ7KTtcbiBcdFx0ZWxzZVxuQEAgLTYwNSwxMCAmIzQzOzYxNCw1NCBAQCBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdGlmIChvcHMgIT0gXHUwMDI2X19hbm9uX29wcylcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplKTtcbiBcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgc2l6ZSwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKVxuJiM0MztcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbXRocF9raHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSBcdTAwM2NcdTAwM2MgY29sbGFwc2Vfb3JkZXI7XG4mIzQzO1x0c3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5ncyA9ICp0aHBfY3VycmVudF9zZXR0aW5ncygpO1xuJiM0MztcdC8qIG1USFAgY29sbHBhc2Ugb25seSBhbGxvY2F0ZXMgUE1EIHNpemVkIG1lbW9yeSAqL1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGhwYWdlX3BtZF9zaXplO1xuJiM0MztcbiYjNDM7XHQvKiBTZXQgbVRIUCBzZXR0aW5nIGZvciBtVEhQIGNvbGxhcHNlICovXG4mIzQzO1x0aWYgKG9wcyA9PSBcdTAwMjZfX2Fub25fb3BzKSB7XG4mIzQzO1x0XHRzZXR0aW5ncy50aHBfZW5hYmxlZCA9IFRIUF9ORVZFUjtcbiYjNDM7XHRcdHNldHRpbmdzLmh1Z2VwYWdlc1tjb2xsYXBzZV9vcmRlcl0uZW5hYmxlZCA9IFRIUF9BTFdBWVM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0aHBfcHVzaF9zZXR0aW5ncyhcdTAwMjZzZXR0aW5ncyk7XG4mIzQzO1xuJiM0MztcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgc2l6ZSwgbnJfaHBhZ2VzLCBjb2xsYXBzZV9vcmRlciwgb3BzKSkge1xuJiM0MztcdFx0aWYgKGV4cGVjdClcbiYjNDM7XHRcdFx0ZmFpbChcJiMzNDtUaW1lb3V0XCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVzdG9yZSBUSFAgc2V0dGluZ3MgZm9yIG1USFAgY29sbGFwc2UuICovXG4mIzQzO1x0XHR0aHBfcG9wX3NldHRpbmdzKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZvciBmaWxlIGFuZCBzaG1lbSBtZW1vcnksIGtodWdlcGFnZWQgb25seSByZXRyYWN0cyBwdGUgZW50cmllcyBhZnRlclxuJiM0MztcdCAqIHB1dHRpbmcgdGhlIG5ldyBodWdlcGFnZSBpbiB0aGUgcGFnZSBjYWNoZS4gVGhlIGh1Z2VwYWdlIG11c3QgYmVcbiYjNDM7XHQgKiBzdWJzZXF1ZW50bHkgcmVmYXVsdGVkIHRvIGluc3RhbGwgdGhlIHBtZCBtYXBwaW5nIGZvciB0aGUgbW0uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG9wcyAhPSBcdTAwMjZfX2Fub25fb3BzKVxuJiM0MztcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3NpemUpO1xuJiM0MztcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgc2l6ZSwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2Vfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBSZXN0b3JlIFRIUCBzZXR0aW5ncyBmb3IgbVRIUCBjb2xsYXBzZS4gKi9cbiYjNDM7XHR0aHBfcG9wX3NldHRpbmdzKCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX2todWdlcGFnZWRfY29udGV4dCA9IHtcbkBAIC02MTcsNiAmIzQzOzY3MCwxMiBAQCBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7XG4gXHQubmFtZSA9IFwmIzM0O2todWdlcGFnZWRcJiMzNDssXG4gfTtcbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQgPSB7XG4mIzQzO1x0LmNvbGxhcHNlID0gXHUwMDI2bXRocF9raHVnZXBhZ2VkX2NvbGxhcHNlLFxuJiM0MztcdC5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IHRydWUsXG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDttdGhwX2todWdlcGFnZWRcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX21hZHZpc2VfY29udGV4dCA9IHtcbiBcdC5jb2xsYXBzZSA9IFx1MDAyNm1hZHZpc2VfY29sbGFwc2UsXG4gXHQuZW5mb3JjZV9wdGVfc2Nhbl9saW1pdHMgPSBmYWxzZSxcbkBAIC02MzQsNyAmIzQzOzY5Myw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXG4gXHRwID0gYWxsb2NfbWFwcGluZygxKTtcbiBcdCpwID0gMTtcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0FsbG9jYXRlIGh1Z2UgcGFnZSBvbiBmYXVsdC4uLlwmIzM0Oyk7XG4tXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiYjNDM7XHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTY0Myw3ICYjNDM7NzAyLDcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZClcbiBcbiBcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTtcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1NwbGl0IGh1Z2UgUE1EIG9uIE1BRFZfRE9OVE5FRUQuLi5cJiMzNDspO1xuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4mIzQzO1x0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC02NTUsMTAgJiM0Mzs3MTQsMTcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZClcbiBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIHtcbiBcdHZvaWQgKnA7XG4tXHRpbnQgbnJfaHBhZ2VzID0gNDtcbiYjNDM7XHRpbnQgbnJfcG1kcyA9IDQsIG5yX2hwYWdlcyA9IDQ7XG4gXHR1bnNpZ25lZCBsb25nIHNpemUgPSBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZTtcbiBcbi1cdHAgPSBvcHMtXHUwMDNlc2V0dXBfYXJlYShucl9ocGFnZXMpO1xuJiM0MztcdC8qIE9ubHkgdHJ5IDEgUE1EIHNpemVkIHJhbmdlIGZvciBtVEhQIGNvbGxhcHNlLiAqL1xuJiM0MztcdGlmIChjID09IFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQpIHtcbiYjNDM7XHRcdG5yX3BtZHMgPSAxO1xuJiM0MztcdFx0bnJfaHBhZ2VzID0gMSBcdTAwM2NcdTAwM2MgKGhwYWdlX3BtZF9vcmRlciAtIGNvbGxhcHNlX29yZGVyKTtcbiYjNDM7XHRcdHNpemUgPSBocGFnZV9wbWRfc2l6ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHAgPSBvcHMtXHUwMDNlc2V0dXBfYXJlYShucl9wbWRzKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBzaXplKTtcbiBcdGMtXHUwMDNlY29sbGFwc2UoXCYjMzQ7Q29sbGFwc2UgbXVsdGlwbGUgZnVsbHkgcG9wdWxhdGVkIFBURSB0YWJsZVwmIzM0OywgcCwgbnJfaHBhZ2VzLFxuIFx0XHQgICAgb3BzLCB0cnVlKTtcbkBAIC02NzAsMTAgJiM0Mzs3MzYsMzEgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBzdGF0aWMgdm9pZCBjb2xsYXBzZV9lbXB0eShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiB7XG4mIzQzO1x0aW50IG5yX2hwYWdlcyA9IDE7XG4gXHR2b2lkICpwO1xuIFxuJiM0MztcdGlmIChjID09IFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXG4mIzQzO1x0XHRucl9ocGFnZXMgPSAxIFx1MDAzY1x1MDAzYyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpO1xuJiM0MztcbiBcdHAgPSBvcHMtXHUwMDNlc2V0dXBfYXJlYSgxKTtcbi1cdGMtXHUwMDNlY29sbGFwc2UoXCYjMzQ7RG8gbm90IGNvbGxhcHNlIGVtcHR5IFBURSB0YWJsZVwmIzM0OywgcCwgMSwgb3BzLCBmYWxzZSk7XG4mIzQzO1x0Yy1cdTAwM2Vjb2xsYXBzZShcJiMzNDtEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXCYjMzQ7LCBwLCBucl9ocGFnZXMsIG9wcywgZmFsc2UpO1xuJiM0MztcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcJiMzNDslc1xcblwmIzM0OywgX19mdW5jX18pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBjb2xsYXBzZV9zaW5nbGVfbXRocChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSBcdTAwM2NcdTAwM2MgY29sbGFwc2Vfb3JkZXI7XG4mIzQzO1x0dm9pZCAqcDtcbiYjNDM7XG4mIzQzO1x0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKDEpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT25seSBmYXVsdCBjb2xsYXBzZV9vcmRlciBzaXplZCByYW5nZXMsIGFuZCBvbmx5IGNoZWNrIDFcbiYjNDM7XHQgKiBjb2xsYXBzZV9vcmRlciBzaXplZCBodWdlIHBhZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIGhwYWdlX3NpemUpO1xuJiM0MztcdGMtXHUwMDNlY29sbGFwc2UoXCYjMzQ7Q29sbGFwc2UgUFRFIHRhYmxlIHdpdGggaGFsZiBQVEUgZW50cmllcyBwcmVzZW50XCYjMzQ7LFxuJiM0MztcdFx0cCwgMSwgb3BzLCB0cnVlKTtcbiBcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpO1xuIFx0a3NmdF90ZXN0X3Jlc3VsdF9yZXBvcnQoZXhpdF9zdGF0dXMsIFwmIzM0OyVzXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gfVxuQEAgLTgxNSw3ICYjNDM7OTAyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeV9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWNcbiBcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIG1hcHBpbmcgY29tcG91bmQgcGFnZS4uLlwmIzM0Oyk7XG4gXHRtYWR2aXNlKHAgJiM0MzsgcGFnZV9zaXplLCBocGFnZV9wbWRfc2l6ZSAtIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTgzNiw3ICYjNDM7OTIzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbF9vZl9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1NwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgcGFnZSB0YWJsZSBmdWxsIG9mIGNvbXBvdW5kIHBhZ2VzLi4uXCYjMzQ7KTtcbiBcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0bWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtODU4LDcgJiM0Mzs5NDUsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9jb21wb3VuZF9leHRyZW1lKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHBhZ2VfcG1kX25yOyBpJiM0MzsmIzQzOykge1xuIFx0XHRtYWR2aXNlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpO1xuIFx0XHRvcHMtXHUwMDNlZmF1bHQoQkFTRV9BRERSLCAwLCBocGFnZV9wbWRfc2l6ZSk7XG4tXHRcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UoQkFTRV9BRERSLCAxKSlcbiYjNDM7XHRcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgaHVnZSBwYWdlXFxuXCYjMzQ7KTtcbiBcdFx0bWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFxuQEAgLTg4MSw3ICYjNDM7OTY4LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfY29tcG91bmRfZXh0cmVtZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcbiBcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSk7XG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgaHBhZ2VfcG1kX3NpemUpO1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTkwMyw3ICYjNDM7OTkwLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0FsbG9jYXRlIHNtYWxsIHBhZ2UuLi5cJiMzNDspO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIHBhZ2Vfc2l6ZSk7XG4tXHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4mIzQzO1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTkxMSw3ICYjNDM7OTk4LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1NoYXJlIHNtYWxsIHBhZ2Ugb3ZlciBmb3JrKCkuLi5cJiMzNDspO1xuIFx0aWYgKCFmb3JrKCkpIHtcbiBcdFx0LyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi9cbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuJiM0MztcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTkyOSw3ICYjNDM7MTAxNiw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Q2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBzbWFsbCBwYWdlLi4uXCYjMzQ7KTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtOTQ3LDcgJiM0MzsxMDM0LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1NoYXJlIGh1Z2UgcGFnZSBvdmVyIGZvcmsoKS4uLlwmIzM0Oyk7XG4gXHRpZiAoIWZvcmsoKSkge1xuIFx0XHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtOTU1LDcgJiM0MzsxMDQyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U3BsaXQgaHVnZSBwYWdlIFBNRCBpbiBjaGlsZCBwcm9jZXNzLi4uXCYjMzQ7KTtcbiBcdFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXHRcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC05NzYsNyAmIzQzOzEwNjMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb1xuIFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0NoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uXCYjMzQ7KTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbiYjNDM7XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcJiMzNDtPS1wmIzM0Oyk7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCYjMzQ7RmFpbFwmIzM0Oyk7XG5AQCAtOTk1LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uXCYjMzQ7KTtcbiBcdGlmICghZm9yaygpKSB7XG4gXHRcdC8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovXG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDAzLDcgJiM0MzsxMDkwLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uXCYjMzQ7LFxuIFx0XHRcdFx0aHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSwgaHBhZ2VfcG1kX25yKTtcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxKSAqIHBhZ2Vfc2l6ZSk7XG4tXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCYjMzQ7T0tcJiMzNDspO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDE2LDcgJiM0MzsxMTAzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0XHRcdCAgICAgICBocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQsIGhwYWdlX3BtZF9ucik7XG4gXHRcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIChocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQpICpcbiBcdFx0XHRcdCAgICBwYWdlX3NpemUpO1xuLVx0XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbiYjNDM7XHRcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRmYWlsKFwmIzM0O0ZhaWxcJiMzNDspO1xuQEAgLTEwMzQsNyAmIzQzOzExMjEsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Q2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBodWdlIHBhZ2UuLi5cJiMzNDspO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuJiM0MztcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcJiMzNDtGYWlsXCYjMzQ7KTtcbkBAIC0xMDc1LDggJiM0MzsxMTYyLDggQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9yZXRyYWN0ZWRfcGFnZV90YWJsZXMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsXG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgc2l6ZSk7XG4gXG4gXHQvKiBMZXQga2h1Z2VwYWdlZCBjb2xsYXBzZSBhbmQgbGVhdmUgcG1kIGNsZWFyZWQgKi9cbi1cdGlmICh3YWl0X2Zvcl9zY2FuKFwmIzM0O0NvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZFwmIzM0OywgcCwgbnJfaHBhZ2VzLFxuLVx0XHRcdCAgb3BzKSkge1xuJiM0MztcdGlmICh3YWl0X2Zvcl9zY2FuKFwmIzM0O0NvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZFwmIzM0OywgcCwgc2l6ZSwgbnJfaHBhZ2VzLFxuJiM0MztcdFx0XHQgIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xuIFx0XHRmYWlsKFwmIzM0O1RpbWVvdXRcJiMzNDspO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMTA5Miw3ICYjNDM7MTE3OSw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4ge1xuIFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcblVzYWdlOiAuL2todWdlcGFnZWQgW09QVElPTlNdIFx1MDAzY3Rlc3QgdHlwZVx1MDAzZSBbZGlyXVxcblxcblwmIzM0Oyk7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7XFx0XHUwMDNjdGVzdCB0eXBlXHUwMDNlXFx0OiBcdTAwM2Njb250ZXh0XHUwMDNlOlx1MDAzY21lbV90eXBlXHUwMDNlXFxuXCYjMzQ7KTtcbi1cdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXHRcdTAwM2Njb250ZXh0XHUwMDNlXFx0OiBbYWxsfGtodWdlcGFnZWR8bWFkdmlzZV1cXG5cJiMzNDspO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXHRcdTAwM2Njb250ZXh0XHUwMDNlXFx0OiBbYWxsfGtodWdlcGFnZWR8bXRocF9raHVnZXBhZ2VkfG1hZHZpc2VdXFxuXCYjMzQ7KTtcbiBcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXHRcdTAwM2NtZW1fdHlwZVx1MDAzZVxcdDogW2FsbHxhbm9ufGZpbGV8c2htZW1dXFxuXCYjMzQ7KTtcbiBcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtcXG5cXHRcXFwmIzM0O2ZpbGUsYWxsXFxcJiMzNDsgbWVtX3R5cGUgcmVxdWlyZXMgW2Rpcl0gYXJndW1lbnRcXG5cJiMzNDspO1xuIFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1xcblxcdFxcXCYjMzQ7ZmlsZSxhbGxcXFwmIzM0OyBtZW1fdHlwZSByZXF1aXJlcyBhIGZpbGUgc3lzdGVtXFxuXCYjMzQ7KTtcbkBAIC0xMTAzLDYgJiM0MzsxMTkwLDcgQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcbiBcdGZwcmludGYoc3RkZXJyLFx0XCYjMzQ7XFx0XFx0LWg6IFRoaXMgaGVscCBtZXNzYWdlLlxcblwmIzM0Oyk7XG4gXHRmcHJpbnRmKHN0ZGVycixcdFwmIzM0O1xcdFxcdC1zOiBtVEhQIHNpemUsIGV4cHJlc3NlZCBhcyBwYWdlIG9yZGVyLlxcblwmIzM0Oyk7XG4gXHRmcHJpbnRmKHN0ZGVycixcdFwmIzM0O1xcdFxcdCAgICBEZWZhdWx0cyB0byAwLiBVc2UgdGhpcyBzaXplIGZvciBhbm9uIG9yIHNobWVtIGFsbG9jYXRpb25zLlxcblwmIzM0Oyk7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsXHRcJiMzNDtcXHRcXHQtYzogY29sbGFwc2Ugb3JkZXIgZm9yIG1USFAgY29sbGFwc2UsIGV4cHJlc3NlZCBhcyBwYWdlIG9yZGVyLlxcblwmIzM0Oyk7XG4gXHRleGl0KDEpO1xuIH1cbiBcbkBAIC0xMTEyLDExICYjNDM7MTIwMCwxNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0Y2hhciAqYnVmO1xuIFx0Y29uc3QgY2hhciAqdG9rZW47XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDtzOmhcJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O3M6YzpoXCYjMzQ7KSkgIT0gLTEpIHtcbiBcdFx0c3dpdGNoIChvcHQpIHtcbiBcdFx0Y2FzZSAmIzM5O3MmIzM5OzpcbiBcdFx0XHRhbm9uX29yZGVyID0gYXRvaShvcHRhcmcpO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O2MmIzM5OzpcbiYjNDM7XHRcdFx0Y29sbGFwc2Vfb3JkZXIgPSBhdG9pKG9wdGFyZyk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7aCYjMzk7OlxuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHVzYWdlKCk7XG5AQCAtMTE0Miw2ICYjNDM7MTIzMywxMCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRtYWR2aXNlX2NvbnRleHQgPSAgXHUwMDI2X19tYWR2aXNlX2NvbnRleHQ7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFwmIzM0O2todWdlcGFnZWRcJiMzNDspKSB7XG4gXHRcdGtodWdlcGFnZWRfY29udGV4dCA9ICBcdTAwMjZfX2todWdlcGFnZWRfY29udGV4dDtcbiYjNDM7XHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFwmIzM0O210aHBfa2h1Z2VwYWdlZFwmIzM0OykpIHtcbiYjNDM7XHRcdG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0ID0gIFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQ7XG4mIzQzO1x0XHRpZiAoY29sbGFwc2Vfb3JkZXIgXHUwMDNjPSAwIHx8IGNvbGxhcHNlX29yZGVyIFx1MDAzZT0gaHBhZ2VfcG1kX29yZGVyKVxuJiM0MztcdFx0XHR1c2FnZSgpO1xuIFx0fSBlbHNlIGlmICghc3RyY21wKHRva2VuLCBcJiMzNDttYWR2aXNlXCYjMzQ7KSkge1xuIFx0XHRtYWR2aXNlX2NvbnRleHQgPSAgXHUwMDI2X19tYWR2aXNlX2NvbnRleHQ7XG4gXHR9IGVsc2Uge1xuQEAgLTEyMDcsNyAmIzQzOzEzMDIsNiBAQCBzdGF0aWMgaW50IG5yX3Rlc3RfY2FzZXM7XG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIHtcbi1cdGludCBocGFnZV9wbWRfb3JkZXI7XG4gXHRzdHJ1Y3QgdGhwX3NldHRpbmdzIGRlZmF1bHRfc2V0dGluZ3MgPSB7XG4gXHRcdC50aHBfZW5hYmxlZCA9IFRIUF9NQURWSVNFLFxuIFx0XHQudGhwX2RlZnJhZyA9IFRIUF9ERUZSQUdfQUxXQVlTLFxuQEAgLTEyMzMsMTAgJiM0MzsxMzI3LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4gXG4tXHRwYXJzZV90ZXN0X3R5cGUoYXJnYywgYXJndik7XG4tXG4tXHRzZXRidWYoc3Rkb3V0LCBOVUxMKTtcbi1cbiBcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4gXHRocGFnZV9wbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4gXHRpZiAoIWhwYWdlX3BtZF9zaXplKVxuQEAgLTEyNDQsNiAmIzQzOzEzMzQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aHBhZ2VfcG1kX25yID0gaHBhZ2VfcG1kX3NpemUgLyBwYWdlX3NpemU7XG4gXHRocGFnZV9wbWRfb3JkZXIgPSBfX2J1aWx0aW5fY3R6KGhwYWdlX3BtZF9ucik7XG4gXG4mIzQzO1x0cGFyc2VfdGVzdF90eXBlKGFyZ2MsIGFyZ3YpO1xuJiM0MztcbiYjNDM7XHRzZXRidWYoc3Rkb3V0LCBOVUxMKTtcbiYjNDM7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfbm9uZSA9IGhwYWdlX3BtZF9uciAtIDE7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc3dhcCA9IGhwYWdlX3BtZF9uciAvIDg7XG4gXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc2hhcmVkID0gaHBhZ2VfcG1kX25yIC8gMjtcbkBAIC0xMjYxLDYgJiM0MzsxMzU1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3dyaXRlX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgc2htZW1fb3BzKTtcbiYjNDM7XHRURVNUKGNvbGxhcHNlX2Z1bGwsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcbkBAIC0xMjY4LDggJiM0MzsxMzYzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCBzaG1lbV9vcHMpO1xuIFxuIFx0VEVTVChjb2xsYXBzZV9lbXB0eSwga2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4mIzQzO1x0VEVTVChjb2xsYXBzZV9lbXB0eSwgbXRocF9raHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcbiBcdFRFU1QoY29sbGFwc2VfZW1wdHksIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xuIFxuJiM0MztcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX210aHAsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4mIzQzO1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcbiBcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeSwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX29ubHlfZmlsZV9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCAxYjJkZmZjYzk5OWIwLi5jZmQxOTg3MzM5YzEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLFxuIFx0bWVtc2V0KG1lbSwgMSwgc2l6ZSk7XG4gXHRpZiAodXNlX3RocCBcdTAwMjZcdTAwMjZcbiBcdCAgICAobWFkdmlzZShtZW0sIHNpemUsIE1BRFZfQ09MTEFQU0UpIHx8XG4tXHQgICAgICFjaGVja19odWdlX2Fub24obWVtLCBzaXplIC8gaHBhZ2Vfc2l6ZSwgaHBhZ2Vfc2l6ZSkpKSB7XG4mIzQzO1x0ICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7JXMgY291bGQgbm90IGZvcm0gYSBUSFBcXG5cJiMzNDssIG5hbWUpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuaW5kZXggZDhkOWQxZGU1N2I4Yi4uODJjNmU5NmVhNmViMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgaW50IHRlc3RfbW1hcF90aHAoZW51bSB0aHBfY29sbGFwc2VfdHlwZSBtYWR2aXNlX2J1Ziwgc2l6ZV90IHBtZHNpemUpXG4gXHQvKiBIQUNLOiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNlcGFyYXRlIFZNQSB0aGF0IHdlIGNhbiBjaGVjayByZWxpYWJseS4gKi9cbiBcdG1wcm90ZWN0KG1lbSwgcG1kc2l6ZSwgUFJPVF9SRUFEKTtcbiBcbi1cdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIDEsIHBtZHNpemUpO1xuJiM0MztcdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIHBtZHNpemUsIDEsIHBtZHNpemUpO1xuIFx0bXVubWFwKG1tYXBfbWVtLCBtbWFwX3NpemUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggNjg3ZDExNWUzYmQ4MC4uZDA5ZjlmNmEzODRlZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTQxMCw2ICYjNDM7NDEwLDggQEAgQ0FURUdPUlk9XCYjMzQ7dGhwXCYjMzQ7IHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCBhbGw6c2htZW1cbiBcbiBDQVRFR09SWT1cJiMzNDt0aHBcJiMzNDsgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIC1zIDQgYWxsOnNobWVtXG4gXG4mIzQzO0NBVEVHT1JZPVwmIzM0O3RocFwmIzM0OyBydW5fdGVzdCAuL2todWdlcGFnZWQgLWMgNCBtdGhwX2todWdlcGFnZWQ6YW5vblxuJiM0MztcbiAjIFRyeSB0byBjcmVhdGUgWEZTIGlmIG5vdCBwcm92aWRlZFxuIGlmIFsgLXogXCYjMzQ7JHtTUExJVF9IVUdFX1BBR0VfVEVTVF9YRlNfUEFUSH1cJiMzNDsgXTsgdGhlblxuICAgICBpZiB0ZXN0X3NlbGVjdGVkIFwmIzM0O3RocFwmIzM0OzsgdGhlblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggZmIxODY0YTY4ZTFjNi4uZTE5OGZhY2Y3OGJiNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtMTAzLDcgJiM0MzsxMDMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2h1Z2VwYWdlKGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBocGFnZV9sZW47IGkmIzQzOyYjNDM7KVxuIFx0XHRtYXBbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihtYXAsIDEsIGhwYWdlX2xlbikpIHtcbiYjNDM7XHRpZiAoY2hlY2tfaHVnZV9hbm9uKG1hcCwgaHBhZ2VfbGVuLCAxLCBocGFnZV9sZW4pKSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcJiMzNDtUZXN0ICVzIGh1Z2UgcGFnZSBhbGxvY2F0aW9uXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXG4gXHRcdGNsZWFyX3NvZnRkaXJ0eSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCAzMmI5OTE0NzJmNzQ0Li44NmE2MDM2OTI4MjYxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTEwNCwxMjkgJiM0MzsxMDQsNiBAQCBzdGF0aWMgYm9vbCBpc19iYWNrZWRfYnlfZm9saW8oY2hhciAqdmFkZHIsIGludCBvcmRlciwgaW50IHBhZ2VtYXBfZmQsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHR1aW50NjRfdCAqZmxhZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBwZm47XG4tXG4tXHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpO1xuLVxuLVx0Lyogbm9uLXByZXNlbnQgUEZOICovXG4tXHRpZiAocGZuID09IC0xVUwpXG4tXHRcdHJldHVybiAxO1xuLVxuLVx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGFnZWZsYWdzX2ZkLCBmbGFncykpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi0vKlxuLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmRcbi0gKiBmb2xpbyBvcmRlcnNcbi0gKlxuLSAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHJcbi0gKiBAbGVuOiByYW5nZSBsZW5ndGhcbi0gKiBAcGFnZW1hcF9mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9wYWdlbWFwXG4tICogQGtwYWdlZmxhZ3NfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9rcGFnZWZsYWdzXG4tICogQG9yZGVyczogb3V0cHV0IGZvbGlvIG9yZGVyIGFycmF5XG4tICogQG5yX29yZGVyczogZm9saW8gb3JkZXIgYXJyYXkgc2l6ZVxuLSAqXG4tICogZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycygpIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIGNoZWNrXG4tICogYWxsIGZvbGlvcyB3aXRoaW4gdGhlIHJhbmdlIGFuZCByZWNvcmQgdGhlaXIgb3JkZXJzLiBBbGwgb3JkZXItMCBwYWdlcyB3aWxsXG4tICogYmUgcmVjb3JkZWQuIE5vbi1wcmVzZW50IHZhZGRyIGlzIHNraXBwZWQuXG4tICpcbi0gKiBOT1RFOiB0aGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBmb2xpbyBvcmRlcnMgYWZ0ZXIgYSBzcGxpdCBpcyBwZXJmb3JtZWQsXG4tICogc28gaXQgYXNzdW1lcyBbdmFkZHJfc3RhcnQsIGxlbikgZnVsbHkgbWFwcyB0byBhZnRlci1zcGxpdCBmb2xpb3Mgd2l0aGluIHRoYXRcbi0gKiByYW5nZS5cbi0gKlxuLSAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xuLSAqL1xuLXN0YXRpYyBpbnQgZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbi1cdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXG4te1xuLVx0dWludDY0X3QgcGFnZV9mbGFncyA9IDA7XG4tXHRpbnQgY3VyX29yZGVyID0gLTE7XG4tXHRjaGFyICp2YWRkcjtcbi1cbi1cdGlmIChwYWdlbWFwX2ZkID09IC0xIHx8IGtwYWdlZmxhZ3NfZmQgPT0gLTEpXG4tXHRcdHJldHVybiAtMTtcbi1cdGlmICghb3JkZXJzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXHRpZiAobnJfb3JkZXJzIFx1MDAzYz0gMClcbi1cdFx0cmV0dXJuIC0xO1xuLVxuLVx0Zm9yICh2YWRkciA9IHZhZGRyX3N0YXJ0OyB2YWRkciBcdTAwM2MgdmFkZHJfc3RhcnQgJiM0MzsgbGVuOykge1xuLVx0XHRjaGFyICpuZXh0X2ZvbGlvX3ZhZGRyO1xuLVx0XHRpbnQgc3RhdHVzO1xuLVxuLVx0XHRzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHRcdFx0XHRcdTAwMjZwYWdlX2ZsYWdzKTtcbi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLTE7XG4tXG4tXHRcdC8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi9cbi1cdFx0aWYgKHN0YXR1cyA9PSAxKSB7XG4tXHRcdFx0dmFkZHIgJiM0Mzs9IHBzaXplKCk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0LyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovXG4tXHRcdGlmICghKHBhZ2VfZmxhZ3MgXHUwMDI2IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHtcbi1cdFx0XHRvcmRlcnNbMF0mIzQzOyYjNDM7O1xuLVx0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdC8qIHNraXAgbm9uIHRocCBjb21wb3VuZCBwYWdlcyAqL1xuLVx0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfVEhQKSkge1xuLVx0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdC8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovXG4tXHRcdGlmIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcbi1cdFx0XHRjdXJfb3JkZXIgPSAxO1xuLVx0XHRlbHNlIHtcbi1cdFx0XHR2YWRkciAmIzQzOz0gcHNpemUoKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2MgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpO1xuLVxuLVx0XHRpZiAobmV4dF9mb2xpb192YWRkciBcdTAwM2U9IHZhZGRyX3N0YXJ0ICYjNDM7IGxlbilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0d2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHRcdFx0XHRcdCAgICAgXHUwMDI2cGFnZV9mbGFncykpIFx1MDAzZT0gMCkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvclxuLVx0XHRcdCAqIG9yZGVyLTAgcGFnZVxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChzdGF0dXMgPT0gMSB8fFxuLVx0XHRcdCAgICAocGFnZV9mbGFncyBcdTAwMjYgS1BGX0NPTVBPVU5EX0hFQUQpIHx8XG4tXHRcdFx0ICAgICEocGFnZV9mbGFncyBcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xuLVx0XHRcdFx0aWYgKGN1cl9vcmRlciBcdTAwM2MgbnJfb3JkZXJzKSB7XG4tXHRcdFx0XHRcdG9yZGVyc1tjdXJfb3JkZXJdJiM0MzsmIzQzOztcbi1cdFx0XHRcdFx0Y3VyX29yZGVyID0gLTE7XG4tXHRcdFx0XHRcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRjdXJfb3JkZXImIzQzOyYjNDM7O1xuLVx0XHRcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciAmIzQzOyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICYjNDM7IHBzaGlmdCgpKSk7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gc3RhdHVzO1xuLVx0fVxuLVx0aWYgKGN1cl9vcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpXG4tXHRcdG9yZGVyc1tjdXJfb3JkZXJdJiM0MzsmIzQzOztcbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXG4ge1xuQEAgLTI0MCw3ICYjNDM7MTE3LDcgQEAgc3RhdGljIGludCBjaGVja19hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2YWRkcl9vcmRlcnNcJiMzNDspO1xuIFxuIFx0bWVtc2V0KHZhZGRyX29yZGVycywgMCwgc2l6ZW9mKGludCkgKiBucl9vcmRlcnMpO1xuLVx0c3RhdHVzID0gZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLFxuJiM0MztcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnModmFkZHJfc3RhcnQsIGxlbiwgcGFnZW1hcF9mZCxcbiBcdFx0XHRcdCAgICAga3BhZ2VmbGFnc19mZCwgdmFkZHJfb3JkZXJzLCBucl9vcmRlcnMpO1xuIFx0aWYgKHN0YXR1cylcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2dhdGhlciBmb2xpbyBpbmZvIGZhaWxlZFxcblwmIzM0Oyk7XG5AQCAtMjk2LDcgJiM0MzsxNzMsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0dW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyO1xuIFx0c2l6ZV90IGk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKVxuJiM0MztcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCBucl9ocGFnZXMgKiBwbWRfcGFnZXNpemUsIG5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O05vIFRIUCBpcyBhbGxvY2F0ZWRcXG5cJiMzNDspO1xuIFxuIFx0cnNzX2Fub25fYmVmb3JlID0gcnNzX2Fub24oKTtcbkBAIC0zMTEsNyAmIzQzOzE4OCw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXG4gXHRcdGlmIChvbmVfcGFnZVtpXSAhPSAoY2hhcikwKVxuIFx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslbGQgYnl0ZSBjb3JydXB0ZWRcXG5cJiMzNDssIGkpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCYjMzQ7KTtcbiBcbiBcdHJzc19hbm9uX2FmdGVyID0gcnNzX2Fub24oKTtcbkBAIC0zNDcsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpJiM0MzsmIzQzOylcbiBcdFx0b25lX3BhZ2VbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQsIHBtZF9wYWdlc2l6ZSkpXG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDQsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiBcbiBcdC8qIHNwbGl0IGFsbCBUSFBzICovXG5AQCAtMzY2LDcgJiM0MzsyNDMsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcbiBcdFx0XHRcdFx0ICAgKHBtZF9vcmRlciAmIzQzOyAxKSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmV4cGVjdGVkIFRIUCBzcGxpdFxcblwmIzM0Oyk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiYjNDM7XHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCYjMzQ7KTtcbiBcbiBcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcJiMzNDtTcGxpdCBodWdlIHBhZ2VzIHRvIG9yZGVyICVkIHN1Y2Nlc3NmdWxcXG5cJiMzNDssIG9yZGVyKTtcbkBAIC0zOTMsNyAmIzQzOzI3MCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0aHBfYXJlYV9zaXplOyBpJiM0MzsmIzQzOylcbiBcdFx0dGhwX2FyZWFbaV0gPSAoY2hhcilpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24odGhwX2FyZWEsIG5yX3RocHMsIHBtZF9wYWdlc2l6ZSkpIHtcbiYjNDM7XHRpZiAoIWNoZWNrX2h1Z2VfYW5vbih0aHBfYXJlYSwgbnJfdGhwcyAqIHBtZF9wYWdlc2l6ZSwgbnJfdGhwcywgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7Tm90IGFsbCBUSFBzIGFsbG9jYXRlZFxcblwmIzM0Oyk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTY1Nyw3ICYjNDM7NTM0LDcgQEAgc3RhdGljIGludCBjcmVhdGVfcGFnZWNhY2hlX3RocF9hbmRfZmQoY29uc3QgY2hhciAqdGVzdGZpbGUsIHNpemVfdCBmZF9zaXplLFxuIFxuIFx0Zm9yY2VfcmVhZF9wYWdlcygqYWRkciwgZmRfc2l6ZSAvIHBtZF9wYWdlc2l6ZSwgcG1kX3BhZ2VzaXplKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9maWxlKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpKSB7XG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHtcbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Tm8gbGFyZ2UgcGFnZWNhY2hlIGZvbGlvIGdlbmVyYXRlZCwgcGxlYXNlIHByb3ZpZGUgYSBmaWxlc3lzdGVtIHN1cHBvcnRpbmcgbGFyZ2UgZm9saW9cXG5cJiMzNDspO1xuIFx0XHRtdW5tYXAoKmFkZHIsIGZkX3NpemUpO1xuIFx0XHRjbG9zZSgqZmQpO1xuQEAgLTczNSw3ICYjNDM7NjEyLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfdGhwX2luX3BhZ2VjYWNoZV90b19vcmRlcl9hdChzaXplX3QgZmRfc2l6ZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7XG4mIzQzO1x0aWYgKCFjaGVja19odWdlX2ZpbGUoYWRkciwgZmRfc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSkge1xuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxcblwmIzM0Oyk7XG4gXHRcdGVyciA9IEVYSVRfRkFJTFVSRTtcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcbmluZGV4IGY0OGY1ZDQ1OTRhYjAuLmZhNDZjOGMzYTQzNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG5AQCAtMTk0LDcgJiM0MzsxOTQsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV9hbGlhc19tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgX191NjQgKnN0YXJ0LFxuIFxuIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpXG4ge1xuLVx0aWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBleHBlY3RfbnJfaHBhZ2VzLFxuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGV4cGVjdF9ucl9ocGFnZXMgKiByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNoZWNrX2h1Z2Vfc2htZW0oZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMsIHNpemUsIGV4cGVjdF9ucl9ocGFnZXMsXG4gXHRcdFx0ICAgICAgcmVhZF9wbWRfcGFnZXNpemUoKSkpXG4gXHRcdGVycihcJiMzNDtEaWQgbm90IGZpbmQgZXhwZWN0ZWQgJWQgbnVtYmVyIG9mIGh1Z2VwYWdlc1wmIzM0OyxcbiBcdFx0ICAgIGV4cGVjdF9ucl9ocGFnZXMpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggZWYxZWExMTk4MWE3NC4uYTRmZmFhMGNhNmZhMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtMTUsNiAmIzQzOzE1LDEwIEBAXG4gI2RlZmluZSBTTUFQX0ZJTEVfUEFUSCBcJiMzNDsvcHJvYy9zZWxmL3NtYXBzXCYjMzQ7XG4gI2RlZmluZSBTVEFUVVNfRklMRV9QQVRIIFwmIzM0Oy9wcm9jL3NlbGYvc3RhdHVzXCYjMzQ7XG4gI2RlZmluZSBNQVhfTElORV9MRU5HVEggNTAwXG4mIzQzOyNkZWZpbmUgUEFHRU1BUF9QQVRIIFwmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcFwmIzM0O1xuJiM0MzsjZGVmaW5lIEtQQUdFRkxBR1NfUEFUSCBcJiMzNDsvcHJvYy9rcGFnZWZsYWdzXCYjMzQ7XG4mIzQzOyNkZWZpbmUgR0VUX09SREVSKG5yX3BhZ2VzKSAgICAoMzEgLSBfX2J1aWx0aW5fY2x6KG5yX3BhZ2VzKSlcbiYjNDM7I2RlZmluZSBOUl9PUkRFUlMgMjBcbiBcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcbkBAIC0xOTQsNiAmIzQzOzE5OCwxMjUgQEAgdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKVxuIFx0cmV0dXJuIHJzc19hbm9uO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB2YWRkcl9wYWdlZmxhZ3NfZ2V0KGNoYXIgKnZhZGRyLCBpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsXG4mIzQzO1x0XHR1aW50NjRfdCAqZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBmbjtcbiYjNDM7XG4mIzQzO1x0cGZuID0gcGFnZW1hcF9nZXRfcGZuKHBhZ2VtYXBfZmQsIHZhZGRyKTtcbiYjNDM7XG4mIzQzO1x0Lyogbm9uLXByZXNlbnQgUEZOICovXG4mIzQzO1x0aWYgKHBmbiA9PSAtMVVMKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogZ2F0aGVyX2ZvbGlvX29yZGVycyAtIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIHJlY29yZFxuJiM0MzsgKiBmb2xpbyBvcmRlcnNcbiYjNDM7ICpcbiYjNDM7ICogQHZhZGRyX3N0YXJ0OiBzdGFydCB2YWRkclxuJiM0MzsgKiBAbGVuOiByYW5nZSBsZW5ndGhcbiYjNDM7ICogQHBhZ2VtYXBfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvcGFnZW1hcFxuJiM0MzsgKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3NcbiYjNDM7ICogQG9yZGVyczogb3V0cHV0IGZvbGlvIG9yZGVyIGFycmF5XG4mIzQzOyAqIEBucl9vcmRlcnM6IGZvbGlvIG9yZGVyIGFycmF5IHNpemVcbiYjNDM7ICpcbiYjNDM7ICogZ2F0aGVyX2ZvbGlvX29yZGVycygpIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIGNoZWNrXG4mIzQzOyAqIGFsbCBmb2xpb3Mgd2l0aGluIHRoZSByYW5nZSBhbmQgcmVjb3JkIHRoZWlyIG9yZGVycy4gQWxsIG9yZGVyLTAgcGFnZXMgd2lsbFxuJiM0MzsgKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIC0gbm8gZXJyb3IsIC0xIC0gdW5oYW5kbGVkIGNhc2VzXG4mIzQzOyAqL1xuJiM0MztpbnQgZ2F0aGVyX2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKVxuJiM0Mzt7XG4mIzQzO1x0dWludDY0X3QgcGFnZV9mbGFncyA9IDA7XG4mIzQzO1x0aW50IGN1cl9vcmRlciA9IC0xO1xuJiM0MztcdGNoYXIgKnZhZGRyO1xuJiM0MztcbiYjNDM7XHRpZiAocGFnZW1hcF9mZCA9PSAtMSB8fCBrcGFnZWZsYWdzX2ZkID09IC0xKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmICghb3JkZXJzKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmIChucl9vcmRlcnMgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyIFx1MDAzYyB2YWRkcl9zdGFydCAmIzQzOyBsZW47KSB7XG4mIzQzO1x0XHRjaGFyICpuZXh0X2ZvbGlvX3ZhZGRyO1xuJiM0MztcdFx0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0XHRzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KHZhZGRyLCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuJiM0MztcdFx0XHRcdFx1MDAyNnBhZ2VfZmxhZ3MpO1xuJiM0MztcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRcdC8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi9cbiYjNDM7XHRcdGlmIChzdGF0dXMgPT0gMSkge1xuJiM0MztcdFx0XHR2YWRkciAmIzQzOz0gcHNpemUoKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovXG4mIzQzO1x0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4mIzQzO1x0XHRcdG9yZGVyc1swXSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi9cbiYjNDM7XHRcdGlmICghKHBhZ2VfZmxhZ3MgXHUwMDI2IEtQRl9USFApKSB7XG4mIzQzO1x0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiB2cG4gcG9pbnRzIHRvIHBhcnQgb2YgYSBUSFAgYXQgdGhpcyBwb2ludCAqL1xuJiM0MztcdFx0aWYgKHBhZ2VfZmxhZ3MgXHUwMDI2IEtQRl9DT01QT1VORF9IRUFEKVxuJiM0MztcdFx0XHRjdXJfb3JkZXIgPSAxO1xuJiM0MztcdFx0ZWxzZSB7XG4mIzQzO1x0XHRcdHZhZGRyICYjNDM7PSBwc2l6ZSgpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2MgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChuZXh0X2ZvbGlvX3ZhZGRyIFx1MDAzZT0gdmFkZHJfc3RhcnQgJiM0MzsgbGVuKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAoKHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQobmV4dF9mb2xpb192YWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnBhZ2VfZmxhZ3MpKSBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvclxuJiM0MztcdFx0XHQgKiBvcmRlci0wIHBhZ2VcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChzdGF0dXMgPT0gMSB8fFxuJiM0MztcdFx0XHQgICAgKHBhZ2VfZmxhZ3MgXHUwMDI2IEtQRl9DT01QT1VORF9IRUFEKSB8fFxuJiM0MztcdFx0XHQgICAgIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4mIzQzO1x0XHRcdFx0aWYgKGN1cl9vcmRlciBcdTAwM2MgbnJfb3JkZXJzKSB7XG4mIzQzO1x0XHRcdFx0XHRvcmRlcnNbY3VyX29yZGVyXSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdFx0XHRjdXJfb3JkZXIgPSAtMTtcbiYjNDM7XHRcdFx0XHRcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGN1cl9vcmRlciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciAmIzQzOyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICYjNDM7IHBzaGlmdCgpKSk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHN0YXR1cztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGN1cl9vcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpXG4mIzQzO1x0XHRvcmRlcnNbY3VyX29yZGVyXSYjNDM7JiM0Mzs7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4ge1xuIFx0aW50IHJldDtcbkBAIC0yMjksNyAmIzQzOzM1Miw3IEBAIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIFx0cmV0dXJuIGVudHJ5O1xuIH1cbiBcbi1ib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxuJiM0MztzdGF0aWMgYm9vbCBfX2NoZWNrX3BtZF9odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXG4gXHRcdCAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRjaGFyIGJ1ZmZlcltNQVhfTElORV9MRU5HVEhdO1xuQEAgLTI0NywxOSAmIzQzOzM3MCw2MiBAQCBib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxuIFx0cmV0dXJuIHRocCA9PSAobnJfaHBhZ2VzICogKGhwYWdlX3NpemUgXHUwMDNlXHUwMDNlIDEwKSk7XG4gfVxuIFxuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4mIzQzO3N0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcJiMzNDtBbm9uSHVnZVBhZ2VzOiBcJiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0aW50IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTtcbiYjNDM7XHRpbnQgb3JkZXIgPSBHRVRfT1JERVIoaHBhZ2Vfc2l6ZSAvIHBhZ2VzaXplKTtcbiYjNDM7XHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcbiYjNDM7XHRpbnQgb3JkZXJzW05SX09SREVSU10sIHN0YXR1cztcbiYjNDM7XHRib29sIHJldCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQob3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIE5SX09SREVSUyk7XG4mIzQzO1xuJiM0MztcdHBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVBfUEFUSCwgT19SRE9OTFkpO1xuJiM0MztcdGlmIChwYWdlbWFwX2ZkID09IC0xKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3JlYWQgcGFnZW1hcCBmYWlsXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0a3BhZ2VmbGFnc19mZCA9IG9wZW4oS1BBR0VGTEFHU19QQVRILCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGtwYWdlZmxhZ3NfZmQgPT0gLTEpIHtcbiYjNDM7XHRcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3JlYWQga3BhZ2VmbGFncyBmYWlsXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnMoYWRkciwgc2l6ZSwgcGFnZW1hcF9mZCxcbiYjNDM7XHRcdFx0a3BhZ2VmbGFnc19mZCwgb3JkZXJzLCBOUl9PUkRFUlMpO1xuJiM0MztcdGlmIChzdGF0dXMpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9yZGVyc1tvcmRlcl0gPT0gbnJfaHBhZ2VzKVxuJiM0MztcdFx0cmV0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjbG9zZShwYWdlbWFwX2ZkKTtcbiYjNDM7XHRjbG9zZShrcGFnZWZsYWdzX2ZkKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuJiM0Mztib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcJiMzNDtGaWxlUG1kTWFwcGVkOlwmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiYjNDM7XHRpZiAoaHBhZ2Vfc2l6ZSA9PSByZWFkX3BtZF9wYWdlc2l6ZSgpKVxuJiM0MztcdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7QW5vbkh1Z2VQYWdlczogXCYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGlmIChocGFnZV9zaXplID09IHJlYWRfcG1kX3BhZ2VzaXplKCkpXG4mIzQzO1x0XHRyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCBcJiMzNDtGaWxlUG1kTWFwcGVkOlwmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiYjNDM7Ym9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFwmIzM0O1NobWVtUG1kTWFwcGVkOlwmIzM0OywgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiYjNDM7XHRpZiAoaHBhZ2Vfc2l6ZSA9PSByZWFkX3BtZF9wYWdlc2l6ZSgpKVxuJiM0MztcdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCYjMzQ7U2htZW1QbWRNYXBwZWQ6XCYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA3Nzk5MTU0YjY3ZWVkLi4yMGFmM2U1NzRjZDgwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC05MCwxMSAmIzQzOzkwLDEzIEBAIHZvaWQgY2xlYXJfc29mdGRpcnR5KHZvaWQpO1xuIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4gdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XG4gdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKTtcbi1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbi1ib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbi1ib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4mIzQzO2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4mIzQzO2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4mIzQzO2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpO1xuIGludCBwYWdlZmxhZ3NfZ2V0KHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQga3BhZ2VmbGFnc19mZCwgdWludDY0X3QgKmZsYWdzKTtcbiYjNDM7aW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXG4mIzQzO1x0XHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycyk7XG4gXG4gaW50IHVmZmRfcmVnaXN0ZXIoaW50IHVmZmQsIHZvaWQgKmFkZHIsIHVpbnQ2NF90IGxlbixcbiBcdFx0ICBib29sIG1pc3MsIGJvb2wgd3AsIGJvb2wgbWlub3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMmRhNmZkNWQ3NTBkNDQ4MjRlYjk2MDgwNDQ3YWJiYTI3YmZmODYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDU6MzI6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jCmluZGV4IDYzMjllMzdmZmY0YzkuLjQ1Yjg0ZjdiMzY0ZTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jCkBAIC0xODIsNyAmIzQzOzE4Miw3IEBAIHN0YXRpYyB1aW50NjRfdCBydW5faXRlcmF0aW9uKHZvaWQpCiAJZm9yIChpID0gMDsgaSAmbHQ7IFRPVEFMX1BBR0VTOyBpJiM0MzsmIzQzOykKIAkJZmlsbF9wYWdlKG1tYXBfYmFzZSwgaSk7CiAKLQlpZiAoIWNoZWNrX2h1Z2Vfc2htZW0obW1hcF9iYXNlLCBOUl9QTURfUEFHRSwgcG1kX3BhZ2VzaXplKSkKJiM0MzsJaWYgKCFjaGVja19odWdlX3NobWVtKG1tYXBfYmFzZSwgRklMRV9TSVpFLCBOUl9QTURfUEFHRSwgcG1kX3BhZ2VzaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Tm8gc2htZW0gVEhQIGlzIGFsbG9jYXRlZFxuJiMzNDspOwogCiAJaWYgKHB0aHJlYWRfYmFycmllcl9pbml0KCZhbXA7Y3RsLmJhcnJpZXIsIE5VTEwsIE5VTV9SRUFERVJfVEhSRUFEUyAmIzQzOyAxKSAhPSAwKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDEwZThkZWRjYjA4N2QuLmUyMWE2ZWMzODM2MzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKQEAgLTI2LDkgJiM0MzsyNiwxMSBAQAogCiAjZGVmaW5lIEJBU0VfQUREUiAoKHZvaWQgKikoMVVMICZsdDsmbHQ7IDMwKSkKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplOwomIzQzO3N0YXRpYyBpbnQgaHBhZ2VfcG1kX29yZGVyOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplOwogc3RhdGljIGludCBocGFnZV9wbWRfbnI7CiBzdGF0aWMgaW50IGFub25fb3JkZXI7CiYjNDM7c3RhdGljIGludCBjb2xsYXBzZV9vcmRlcjsKIAogI2RlZmluZSBQSURfU01BUFMgJiMzNDsvcHJvYy9zZWxmL3NtYXBzJiMzNDsKICNkZWZpbmUgVEVTVF9GSUxFICYjMzQ7Y29sbGFwc2VfdGVzdF9maWxlJiMzNDsKQEAgLTUxLDcgJiM0Mzs1Myw3IEBAIHN0cnVjdCBtZW1fb3BzIHsKIAl2b2lkICooKnNldHVwX2FyZWEpKGludCBucl9ocGFnZXMpOwogCXZvaWQgKCpjbGVhbnVwX2FyZWEpKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAJdm9pZCAoKmZhdWx0KSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7Ci0JYm9vbCAoKmNoZWNrX2h1Z2UpKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpOwomIzQzOwlib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpOwogCWNvbnN0IGNoYXIgKm5hbWU7CiB9OwogCkBAIC02OSw2ICYjNDM7NzEsNyBAQCBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCB7CiB9OwogCiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmtodWdlcGFnZWRfY29udGV4dDsKJiM0MztzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKm10aHBfa2h1Z2VwYWdlZF9jb250ZXh0Owogc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICptYWR2aXNlX2NvbnRleHQ7CiAKIHN0cnVjdCBmaWxlX2luZm8gewpAQCAtMjc2LDcgJiM0MzsyNzksNyBAQCBzdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcykKIAlrc2Z0X3ByaW50X21zZygmIzM0O0FsbG9jYXRlIGh1Z2UgcGFnZS4uLiYjMzQ7KTsKIAlpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O21hZHZpc2UoTUFEVl9DT0xMQVBTRSkmIzM0Oyk7Ci0JaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O21hZHZpc2UoTUFEVl9DT0xMQVBTRSkmIzM0Oyk7CiAJaWYgKG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpKQogCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttYWR2aXNlKE1BRFZfSFVHRVBBR0UpJiMzNDspOwpAQCAtMzEwLDkgJiM0MzszMTMsMTAgQEAgc3RhdGljIHZvaWQgYW5vbl9mYXVsdCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIAlmaWxsX21lbW9yeShwLCBzdGFydCwgZW5kKTsKIH0KIAotc3RhdGljIGJvb2wgYW5vbl9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpCiYjNDM7c3RhdGljIGJvb2wgYW5vbl9jaGVja19odWdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCWludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSkKIHsKLQlyZXR1cm4gY2hlY2tfaHVnZV9hbm9uKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpOwomIzQzOwlyZXR1cm4gY2hlY2tfaHVnZV9hbm9uKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiB9CiAKIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApCkBAIC00MTIsMTMgJiM0Mzs0MTYsMTQgQEAgc3RhdGljIHZvaWQgZmlsZV9mYXVsdF93cml0ZSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIAkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7bWFkdmlzZShNQURWX1BPUFVMQVRFX1dSSVRFKSYjMzQ7KTsKIH0KIAotc3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpCiYjNDM7c3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCWludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSkKIHsKIAlzd2l0Y2ggKGZpbmZvLnR5cGUpIHsKIAljYXNlIFZNQV9GSUxFOgotCQlyZXR1cm4gY2hlY2tfaHVnZV9maWxlKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpOwomIzQzOwkJcmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwogCWNhc2UgVk1BX1NITUVNOgotCQlyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTsKJiM0MzsJCXJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiAJZGVmYXVsdDoKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC00NDgsOSAmIzQzOzQ1MywxMCBAQCBzdGF0aWMgdm9pZCBzaG1lbV9jbGVhbnVwX2FyZWEodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKQogCWNsb3NlKGZpbmZvLmZkKTsKIH0KIAotc3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKQomIzQzO3N0YXRpYyBib29sIHNobWVtX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAomIzQzOwkJCWludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSkKIHsKLQlyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTsKJiM0MzsJcmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtZW1fb3BzIF9fYW5vbl9vcHMgPSB7CkBAIC01MzMsNyAmIzQzOzUzOSw3IEBAIHN0YXRpYyB2b2lkIF9fbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJcmV0ID0gbWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7CiAJaWYgKCgoYm9vbClyZXQpID09IGV4cGVjdCkKIAkJZmFpbCgmIzM0O0ZhaWw6IEJhZCByZXR1cm4gdmFsdWUmIzM0Oyk7Ci0JZWxzZSBpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSkKJiM0MzsJZWxzZSBpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKQogCQlmYWlsKCYjMzQ7RmFpbDogY2hlY2tfaHVnZSgpJiMzNDspOwogCWVsc2UKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwpAQCAtNTQ1LDMwICYjNDM7NTUxLDMxIEBAIHN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLAogCQkJICAgICBzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdCkKIHsKIAkvKiBTYW5pdHkgY2hlY2sgKi8KLQlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAwKSkKJiM0MzsJaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBodWdlIHBhZ2VcbiYjMzQ7KTsKIAlfX21hZHZpc2VfY29sbGFwc2UobXNnLCBwLCBucl9ocGFnZXMsIG9wcywgZXhwZWN0KTsKIH0KIAogI2RlZmluZSBUSUNLIDUwMDAwMAotc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCi0JCQkgIHN0cnVjdCBtZW1fb3BzICpvcHMpCiYjNDM7c3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKJiM0MzsJCWludCBucl9ocGFnZXMsIGludCBjb2xsYXBfb3JkZXIsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSAmbHQ7Jmx0OyBjb2xsYXBfb3JkZXI7CiAJaW50IGZ1bGxfc2NhbnM7CiAJaW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi8KIAogCS8qIFNhbml0eSBjaGVjayAqLwotCWlmICghb3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBzaXplLCAwLCBocGFnZV9zaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBodWdlIHBhZ2VcbiYjMzQ7KTsKIAotCW1hZHZpc2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIE1BRFZfSFVHRVBBR0UpOwomIzQzOwltYWR2aXNlKHAsIHNpemUsIE1BRFZfSFVHRVBBR0UpOwogCiAJLyogV2FpdCB1bnRpbCB0aGUgc2Vjb25kIGZ1bGxfc2NhbiBjb21wbGV0ZWQgKi8KIAlmdWxsX3NjYW5zID0gdGhwX3JlYWRfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9mdWxsX3NjYW5zJiMzNDspICYjNDM7IDI7CiAKIAlrc2Z0X3ByaW50X21zZygmIzM0OyVzLi4uJiMzNDssIG1zZyk7CiAJd2hpbGUgKHRpbWVvdXQtLSkgewotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIG5yX2hwYWdlcykpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSkpCiAJCQlicmVhazsKIAkJaWYgKHRocF9yZWFkX251bSgmIzM0O2todWdlcGFnZWQvZnVsbF9zY2FucyYjMzQ7KSAmZ3Q7PSBmdWxsX3NjYW5zKQogCQkJYnJlYWs7CkBAIC01ODIsNiAmIzQzOzU4OSw4IEBAIHN0YXRpYyBib29sIHdhaXRfZm9yX3NjYW4oY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLAogc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJCQkJc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplOwomIzQzOwogCS8qCiAJICogcmVhZCZhbXA7d3JpdGUgZmlsZSBjb2xsYXBzZSBmYWlscyBzaW5jZSBraHVnZXBhZ2VkIGRvZXMgbm90IGZsdXNoCiAJICogdGhlIHRhcmdldCBkaXJ0eSBmb2xpb3MKQEAgLTU4OSw3ICYjNDM7NTk4LDcgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJaWYgKCFpc190bXBmcyhvcHMpICZhbXA7JmFtcDsgb3BzID09ICZhbXA7X19yZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKQogCQlleHBlY3QgPSBmYWxzZTsKIAotCWlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMpKSB7CiYjNDM7CWlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfb3JkZXIsIG9wcykpIHsKIAkJaWYgKGV4cGVjdCkKIAkJCWZhaWwoJiMzNDtUaW1lb3V0JiMzNDspOwogCQllbHNlCkBAIC02MDUsMTAgJiM0Mzs2MTQsNTQgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsCiAJaWYgKG9wcyAhPSAmYW1wO19fYW5vbl9vcHMpCiAJCW9wcy0mZ3Q7ZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpOwogCi0JaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSkKJiM0MzsJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBzaXplLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9wbWRfc2l6ZSkpCiYjNDM7CQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtdGhwX2todWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLAomIzQzOwkJCQlzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSAmbHQ7Jmx0OyBjb2xsYXBzZV9vcmRlcjsKJiM0MzsJc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5ncyA9ICp0aHBfY3VycmVudF9zZXR0aW5ncygpOwomIzQzOwkvKiBtVEhQIGNvbGxwYXNlIG9ubHkgYWxsb2NhdGVzIFBNRCBzaXplZCBtZW1vcnkgKi8KJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplID0gaHBhZ2VfcG1kX3NpemU7CiYjNDM7CiYjNDM7CS8qIFNldCBtVEhQIHNldHRpbmcgZm9yIG1USFAgY29sbGFwc2UgKi8KJiM0MzsJaWYgKG9wcyA9PSAmYW1wO19fYW5vbl9vcHMpIHsKJiM0MzsJCXNldHRpbmdzLnRocF9lbmFibGVkID0gVEhQX05FVkVSOwomIzQzOwkJc2V0dGluZ3MuaHVnZXBhZ2VzW2NvbGxhcHNlX29yZGVyXS5lbmFibGVkID0gVEhQX0FMV0FZUzsKJiM0MzsJfQomIzQzOwomIzQzOwl0aHBfcHVzaF9zZXR0aW5ncygmYW1wO3NldHRpbmdzKTsKJiM0MzsKJiM0MzsJaWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBzaXplLCBucl9ocGFnZXMsIGNvbGxhcHNlX29yZGVyLCBvcHMpKSB7CiYjNDM7CQlpZiAoZXhwZWN0KQomIzQzOwkJCWZhaWwoJiMzNDtUaW1lb3V0JiMzNDspOwomIzQzOwkJZWxzZQomIzQzOwkJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKJiM0MzsKJiM0MzsJCS8qIFJlc3RvcmUgVEhQIHNldHRpbmdzIGZvciBtVEhQIGNvbGxhcHNlLiAqLwomIzQzOwkJdGhwX3BvcF9zZXR0aW5ncygpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvciBmaWxlIGFuZCBzaG1lbSBtZW1vcnksIGtodWdlcGFnZWQgb25seSByZXRyYWN0cyBwdGUgZW50cmllcyBhZnRlcgomIzQzOwkgKiBwdXR0aW5nIHRoZSBuZXcgaHVnZXBhZ2UgaW4gdGhlIHBhZ2UgY2FjaGUuIFRoZSBodWdlcGFnZSBtdXN0IGJlCiYjNDM7CSAqIHN1YnNlcXVlbnRseSByZWZhdWx0ZWQgdG8gaW5zdGFsbCB0aGUgcG1kIG1hcHBpbmcgZm9yIHRoZSBtbS4KJiM0MzsJICovCiYjNDM7CWlmIChvcHMgIT0gJmFtcDtfX2Fub25fb3BzKQomIzQzOwkJb3BzLSZndDtmYXVsdChwLCAwLCBucl9ocGFnZXMgKiBocGFnZV9zaXplKTsKJiM0MzsKJiM0MzsJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBzaXplLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFJlc3RvcmUgVEhQIHNldHRpbmdzIGZvciBtVEhQIGNvbGxhcHNlLiAqLwomIzQzOwl0aHBfcG9wX3NldHRpbmdzKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX2todWdlcGFnZWRfY29udGV4dCA9IHsKQEAgLTYxNyw2ICYjNDM7NjcwLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX2todWdlcGFnZWRfY29udGV4dCA9IHsKIAkubmFtZSA9ICYjMzQ7a2h1Z2VwYWdlZCYjMzQ7LAogfTsKIAomIzQzO3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0ID0gewomIzQzOwkuY29sbGFwc2UgPSAmYW1wO210aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZSwKJiM0MzsJLmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gdHJ1ZSwKJiM0MzsJLm5hbWUgPSAmIzM0O210aHBfa2h1Z2VwYWdlZCYjMzQ7LAomIzQzO307CiYjNDM7CiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tYWR2aXNlX2NvbnRleHQgPSB7CiAJLmNvbGxhcHNlID0gJmFtcDttYWR2aXNlX2NvbGxhcHNlLAogCS5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IGZhbHNlLApAQCAtNjM0LDcgJiM0Mzs2OTMsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKQogCXAgPSBhbGxvY19tYXBwaW5nKDEpOwogCSpwID0gMTsKIAlrc2Z0X3ByaW50X21zZygmIzM0O0FsbG9jYXRlIGh1Z2UgcGFnZSBvbiBmYXVsdC4uLiYjMzQ7KTsKLQlpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIDEsIGhwYWdlX3BtZF9zaXplKSkKJiM0MzsJaWYgKGNoZWNrX2h1Z2VfYW5vbihwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKQogCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJZWxzZQogCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTY0Myw3ICYjNDM7NzAyLDcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZCkKIAogCW1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTsKIAlrc2Z0X3ByaW50X21zZygmIzM0O1NwbGl0IGh1Z2UgUE1EIG9uIE1BRFZfRE9OVE5FRUQuLi4mIzM0Oyk7Ci0JaWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiYjNDM7CWlmIChjaGVja19odWdlX2Fub24ocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC02NTUsMTAgJiM0Mzs3MTQsMTcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZCkKIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGwoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiB7CiAJdm9pZCAqcDsKLQlpbnQgbnJfaHBhZ2VzID0gNDsKJiM0MzsJaW50IG5yX3BtZHMgPSA0LCBucl9ocGFnZXMgPSA0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplOwogCi0JcCA9IG9wcy0mZ3Q7c2V0dXBfYXJlYShucl9ocGFnZXMpOwomIzQzOwkvKiBPbmx5IHRyeSAxIFBNRCBzaXplZCByYW5nZSBmb3IgbVRIUCBjb2xsYXBzZS4gKi8KJiM0MzsJaWYgKGMgPT0gJmFtcDtfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0KSB7CiYjNDM7CQlucl9wbWRzID0gMTsKJiM0MzsJCW5yX2hwYWdlcyA9IDEgJmx0OyZsdDsgKGhwYWdlX3BtZF9vcmRlciAtIGNvbGxhcHNlX29yZGVyKTsKJiM0MzsJCXNpemUgPSBocGFnZV9wbWRfc2l6ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlwID0gb3BzLSZndDtzZXR1cF9hcmVhKG5yX3BtZHMpOwogCW9wcy0mZ3Q7ZmF1bHQocCwgMCwgc2l6ZSk7CiAJYy0mZ3Q7Y29sbGFwc2UoJiMzNDtDb2xsYXBzZSBtdWx0aXBsZSBmdWxseSBwb3B1bGF0ZWQgUFRFIHRhYmxlJiMzNDssIHAsIG5yX2hwYWdlcywKIAkJICAgIG9wcywgdHJ1ZSk7CkBAIC02NzAsMTAgJiM0Mzs3MzYsMzEgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcykKIAogc3RhdGljIHZvaWQgY29sbGFwc2VfZW1wdHkoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiB7CiYjNDM7CWludCBucl9ocGFnZXMgPSAxOwogCXZvaWQgKnA7CiAKJiM0MzsJaWYgKGMgPT0gJmFtcDtfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0KQomIzQzOwkJbnJfaHBhZ2VzID0gMSAmbHQ7Jmx0OyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpOwomIzQzOwogCXAgPSBvcHMtJmd0O3NldHVwX2FyZWEoMSk7Ci0JYy0mZ3Q7Y29sbGFwc2UoJiMzNDtEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlJiMzNDssIHAsIDEsIG9wcywgZmFsc2UpOwomIzQzOwljLSZndDtjb2xsYXBzZSgmIzM0O0RvIG5vdCBjb2xsYXBzZSBlbXB0eSBQVEUgdGFibGUmIzM0OywgcCwgbnJfaHBhZ2VzLCBvcHMsIGZhbHNlKTsKJiM0MzsJb3BzLSZndDtjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgJiMzNDslc1xuJiMzNDssIF9fZnVuY19fKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX210aHAoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgJmx0OyZsdDsgY29sbGFwc2Vfb3JkZXI7CiYjNDM7CXZvaWQgKnA7CiYjNDM7CiYjNDM7CXAgPSBvcHMtJmd0O3NldHVwX2FyZWEoMSk7CiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgZmF1bHQgY29sbGFwc2Vfb3JkZXIgc2l6ZWQgcmFuZ2VzLCBhbmQgb25seSBjaGVjayAxCiYjNDM7CSAqIGNvbGxhcHNlX29yZGVyIHNpemVkIGh1Z2UgcGFnZS4KJiM0MzsJICovCiYjNDM7CW9wcy0mZ3Q7ZmF1bHQocCwgMCwgaHBhZ2Vfc2l6ZSk7CiYjNDM7CWMtJmd0O2NvbGxhcHNlKCYjMzQ7Q29sbGFwc2UgUFRFIHRhYmxlIHdpdGggaGFsZiBQVEUgZW50cmllcyBwcmVzZW50JiMzNDssCiYjNDM7CQlwLCAxLCBvcHMsIHRydWUpOwogCW9wcy0mZ3Q7Y2xlYW51cF9hcmVhKHAsIGhwYWdlX3BtZF9zaXplKTsKIAlrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgJiMzNDslc1xuJiMzNDssIF9fZnVuY19fKTsKIH0KQEAgLTgxNSw3ICYjNDM7OTAyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeV9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWMKIAltYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpOwogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBtYXBwaW5nIGNvbXBvdW5kIHBhZ2UuLi4mIzM0Oyk7CiAJbWFkdmlzZShwICYjNDM7IHBhZ2Vfc2l6ZSwgaHBhZ2VfcG1kX3NpemUgLSBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC04MzYsNyAmIzQzOzkyMyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGxfb2ZfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJa3NmdF9wcmludF9tc2coJiMzNDtTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIHBhZ2UgdGFibGUgZnVsbCBvZiBjb21wb3VuZCBwYWdlcy4uLiYjMzQ7KTsKIAltYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAltYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC04NTgsNyAmIzQzOzk0NSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2NvbXBvdW5kX2V4dHJlbWUoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJZm9yIChpID0gMDsgaSAmbHQ7IGhwYWdlX3BtZF9ucjsgaSYjNDM7JiM0MzspIHsKIAkJbWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTsKIAkJb3BzLSZndDtmYXVsdChCQVNFX0FERFIsIDAsIGhwYWdlX3BtZF9zaXplKTsKLQkJaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UoQkFTRV9BRERSLCAxKSkKJiM0MzsJCWlmICghb3BzLSZndDtjaGVja19odWdlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBodWdlIHBhZ2VcbiYjMzQ7KTsKIAkJbWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpOwogCkBAIC04ODEsNyAmIzQzOzk2OCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2NvbXBvdW5kX2V4dHJlbWUoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAKIAlvcHMtJmd0O2NsZWFudXBfYXJlYShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplKTsKIAlvcHMtJmd0O2ZhdWx0KHAsIDAsIGhwYWdlX3BtZF9zaXplKTsKLQlpZiAoIW9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAxKSkKJiM0MzsJaWYgKCFvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC05MDMsNyAmIzQzOzk5MCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiAKIAlrc2Z0X3ByaW50X21zZygmIzM0O0FsbG9jYXRlIHNtYWxsIHBhZ2UuLi4mIzM0Oyk7CiAJb3BzLSZndDtmYXVsdChwLCAwLCBwYWdlX3NpemUpOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC05MTEsNyAmIzQzOzk5OCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpCiAJa3NmdF9wcmludF9tc2coJiMzNDtTaGFyZSBzbWFsbCBwYWdlIG92ZXIgZm9yaygpLi4uJiMzNDspOwogCWlmICghZm9yaygpKSB7CiAJCS8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovCi0JCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCWVsc2UKIAkJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtOTI5LDcgJiM0MzsxMDE2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcykKIAlleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpOwogCiAJa3NmdF9wcmludF9tc2coJiMzNDtDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIHNtYWxsIHBhZ2UuLi4mIzM0Oyk7Ci0JaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAwKSkKJiM0MzsJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKQogCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJZWxzZQogCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTk0Nyw3ICYjNDM7MTAzNCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvCiAJa3NmdF9wcmludF9tc2coJiMzNDtTaGFyZSBodWdlIHBhZ2Ugb3ZlciBmb3JrKCkuLi4mIzM0Oyk7CiAJaWYgKCFmb3JrKCkpIHsKIAkJLyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi8KLQkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCAxKSkKJiM0MzsJCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAkJZWxzZQogCQkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC05NTUsNyAmIzQzOzEwNDIsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqbwogCQlrc2Z0X3ByaW50X21zZygmIzM0O1NwbGl0IGh1Z2UgcGFnZSBQTUQgaW4gY2hpbGQgcHJvY2Vzcy4uLiYjMzQ7KTsKIAkJbWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiAJCW1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7Ci0JCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMCkpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpCiAJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCWVsc2UKIAkJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtOTc2LDcgJiM0MzsxMDYzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm8KIAlleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpOwogCiAJa3NmdF9wcmludF9tc2coJiMzNDtDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIGh1Z2UgcGFnZS4uLiYjMzQ7KTsKLQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDEpKQomIzQzOwlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAllbHNlCiAJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtOTk1LDcgJiM0MzsxMDgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcwogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7U2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uJiMzNDspOwogCWlmICghZm9yaygpKSB7CiAJCS8qIERvIG5vdCB0b3VjaCBzZXR0aW5ncyBvbiBjaGlsZCBleGl0ICovCi0JCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpCiAJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCWVsc2UKIAkJCWZhaWwoJiMzNDtGYWlsJiMzNDspOwpAQCAtMTAwMyw3ICYjNDM7MTA5MCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMKIAkJa3NmdF9wcmludF9tc2coJiMzNDtUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uJiMzNDssCiAJCQkJaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSwgaHBhZ2VfcG1kX25yKTsKIAkJb3BzLSZndDtmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSkgKiBwYWdlX3NpemUpOwotCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJaWYgKG9wcy0mZ3Q7Y2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKQogCQkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCQllbHNlCiAJCQlmYWlsKCYjMzQ7RmFpbCYjMzQ7KTsKQEAgLTEwMTYsNyAmIzQzOzExMDMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzCiAJCQkgICAgICAgaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkLCBocGFnZV9wbWRfbnIpOwogCQkJb3BzLSZndDtmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkKSAqCiAJCQkJICAgIHBhZ2Vfc2l6ZSk7Ci0JCQlpZiAob3BzLSZndDtjaGVja19odWdlKHAsIDApKQomIzQzOwkJCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSkKIAkJCQlzdWNjZXNzKCYjMzQ7T0smIzM0Oyk7CiAJCQllbHNlCiAJCQkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC0xMDM0LDcgJiM0MzsxMTIxLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcwogCWV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7CiAKIAlrc2Z0X3ByaW50X21zZygmIzM0O0NoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uJiMzNDspOwotCWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgMSkpCiYjNDM7CWlmIChvcHMtJmd0O2NoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSkKIAkJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCWVsc2UKIAkJZmFpbCgmIzM0O0ZhaWwmIzM0Oyk7CkBAIC0xMDc1LDggJiM0MzsxMTYyLDggQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9yZXRyYWN0ZWRfcGFnZV90YWJsZXMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsCiAJb3BzLSZndDtmYXVsdChwLCAwLCBzaXplKTsKIAogCS8qIExldCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCBsZWF2ZSBwbWQgY2xlYXJlZCAqLwotCWlmICh3YWl0X2Zvcl9zY2FuKCYjMzQ7Q29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkJiMzNDssIHAsIG5yX2hwYWdlcywKLQkJCSAgb3BzKSkgewomIzQzOwlpZiAod2FpdF9mb3Jfc2NhbigmIzM0O0NvbGxhcHNlIGFuZCBsZWF2ZSBQTUQgY2xlYXJlZCYjMzQ7LCBwLCBzaXplLCBucl9ocGFnZXMsCiYjNDM7CQkJICBocGFnZV9wbWRfb3JkZXIsIG9wcykpIHsKIAkJZmFpbCgmIzM0O1RpbWVvdXQmIzM0Oyk7CiAJCXJldHVybjsKIAl9CkBAIC0xMDkyLDcgJiM0MzsxMTc5LDcgQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcblVzYWdlOiAuL2todWdlcGFnZWQgW09QVElPTlNdICZsdDt0ZXN0IHR5cGUmZ3Q7IFtkaXJdXG5cbiYjMzQ7KTsKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcdCZsdDt0ZXN0IHR5cGUmZ3Q7XHQ6ICZsdDtjb250ZXh0Jmd0OzombHQ7bWVtX3R5cGUmZ3Q7XG4mIzM0Oyk7Ci0JZnByaW50ZihzdGRlcnIsICYjMzQ7XHQmbHQ7Y29udGV4dCZndDtcdDogW2FsbHxraHVnZXBhZ2VkfG1hZHZpc2VdXG4mIzM0Oyk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O1x0Jmx0O2NvbnRleHQmZ3Q7XHQ6IFthbGx8a2h1Z2VwYWdlZHxtdGhwX2todWdlcGFnZWR8bWFkdmlzZV1cbiYjMzQ7KTsKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtcdCZsdDttZW1fdHlwZSZndDtcdDogW2FsbHxhbm9ufGZpbGV8c2htZW1dXG4mIzM0Oyk7CiAJZnByaW50ZihzdGRlcnIsICYjMzQ7XG5cdFwmIzM0O2ZpbGUsYWxsXCYjMzQ7IG1lbV90eXBlIHJlcXVpcmVzIFtkaXJdIGFyZ3VtZW50XG4mIzM0Oyk7CiAJZnByaW50ZihzdGRlcnIsICYjMzQ7XG5cdFwmIzM0O2ZpbGUsYWxsXCYjMzQ7IG1lbV90eXBlIHJlcXVpcmVzIGEgZmlsZSBzeXN0ZW1cbiYjMzQ7KTsKQEAgLTExMDMsNiAmIzQzOzExOTAsNyBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogCWZwcmludGYoc3RkZXJyLAkmIzM0O1x0XHQtaDogVGhpcyBoZWxwIG1lc3NhZ2UuXG4mIzM0Oyk7CiAJZnByaW50ZihzdGRlcnIsCSYjMzQ7XHRcdC1zOiBtVEhQIHNpemUsIGV4cHJlc3NlZCBhcyBwYWdlIG9yZGVyLlxuJiMzNDspOwogCWZwcmludGYoc3RkZXJyLAkmIzM0O1x0XHQgICAgRGVmYXVsdHMgdG8gMC4gVXNlIHRoaXMgc2l6ZSBmb3IgYW5vbiBvciBzaG1lbSBhbGxvY2F0aW9ucy5cbiYjMzQ7KTsKJiM0MzsJZnByaW50ZihzdGRlcnIsCSYjMzQ7XHRcdC1jOiBjb2xsYXBzZSBvcmRlciBmb3IgbVRIUCBjb2xsYXBzZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXG4mIzM0Oyk7CiAJZXhpdCgxKTsKIH0KIApAQCAtMTExMiwxMSAmIzQzOzEyMDAsMTQgQEAgc3RhdGljIHZvaWQgcGFyc2VfdGVzdF90eXBlKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljaGFyICpidWY7CiAJY29uc3QgY2hhciAqdG9rZW47CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O3M6aCYjMzQ7KSkgIT0gLTEpIHsKJiM0MzsJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDtzOmM6aCYjMzQ7KSkgIT0gLTEpIHsKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAmIzM5O3MmIzM5OzoKIAkJCWFub25fb3JkZXIgPSBhdG9pKG9wdGFyZyk7CiAJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtjJiMzOTs6CiYjNDM7CQkJY29sbGFwc2Vfb3JkZXIgPSBhdG9pKG9wdGFyZyk7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtoJiMzOTs6CiAJCWRlZmF1bHQ6CiAJCQl1c2FnZSgpOwpAQCAtMTE0Miw2ICYjNDM7MTIzMywxMCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQltYWR2aXNlX2NvbnRleHQgPSAgJmFtcDtfX21hZHZpc2VfY29udGV4dDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICYjMzQ7a2h1Z2VwYWdlZCYjMzQ7KSkgewogCQlraHVnZXBhZ2VkX2NvbnRleHQgPSAgJmFtcDtfX2todWdlcGFnZWRfY29udGV4dDsKJiM0MzsJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAmIzM0O210aHBfa2h1Z2VwYWdlZCYjMzQ7KSkgewomIzQzOwkJbXRocF9raHVnZXBhZ2VkX2NvbnRleHQgPSAgJmFtcDtfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0OwomIzQzOwkJaWYgKGNvbGxhcHNlX29yZGVyICZsdDs9IDAgfHwgY29sbGFwc2Vfb3JkZXIgJmd0Oz0gaHBhZ2VfcG1kX29yZGVyKQomIzQzOwkJCXVzYWdlKCk7CiAJfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAmIzM0O21hZHZpc2UmIzM0OykpIHsKIAkJbWFkdmlzZV9jb250ZXh0ID0gICZhbXA7X19tYWR2aXNlX2NvbnRleHQ7CiAJfSBlbHNlIHsKQEAgLTEyMDcsNyAmIzQzOzEzMDIsNiBAQCBzdGF0aWMgaW50IG5yX3Rlc3RfY2FzZXM7CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKLQlpbnQgaHBhZ2VfcG1kX29yZGVyOwogCXN0cnVjdCB0aHBfc2V0dGluZ3MgZGVmYXVsdF9zZXR0aW5ncyA9IHsKIAkJLnRocF9lbmFibGVkID0gVEhQX01BRFZJU0UsCiAJCS50aHBfZGVmcmFnID0gVEhQX0RFRlJBR19BTFdBWVMsCkBAIC0xMjMzLDEwICYjNDM7MTMyNyw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAoIXRocF9pc19lbmFibGVkKCkpCiAJCWtzZnRfZXhpdF9za2lwKCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcbiYjMzQ7KTsKIAotCXBhcnNlX3Rlc3RfdHlwZShhcmdjLCBhcmd2KTsKLQotCXNldGJ1ZihzdGRvdXQsIE5VTEwpOwotCiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKIAlocGFnZV9wbWRfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiAJaWYgKCFocGFnZV9wbWRfc2l6ZSkKQEAgLTEyNDQsNiAmIzQzOzEzMzQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWhwYWdlX3BtZF9uciA9IGhwYWdlX3BtZF9zaXplIC8gcGFnZV9zaXplOwogCWhwYWdlX3BtZF9vcmRlciA9IF9fYnVpbHRpbl9jdHooaHBhZ2VfcG1kX25yKTsKIAomIzQzOwlwYXJzZV90ZXN0X3R5cGUoYXJnYywgYXJndik7CiYjNDM7CiYjNDM7CXNldGJ1ZihzdGRvdXQsIE5VTEwpOwomIzQzOwogCWRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19ub25lID0gaHBhZ2VfcG1kX25yIC0gMTsKIAlkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfc3dhcCA9IGhwYWdlX3BtZF9uciAvIDg7CiAJZGVmYXVsdF9zZXR0aW5ncy5raHVnZXBhZ2VkLm1heF9wdGVzX3NoYXJlZCA9IGhwYWdlX3BtZF9uciAvIDI7CkBAIC0xMjYxLDYgJiM0MzsxMzU1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCVRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpOwogCVRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKTsKIAlURVNUKGNvbGxhcHNlX2Z1bGwsIGtodWdlcGFnZWRfY29udGV4dCwgc2htZW1fb3BzKTsKJiM0MzsJVEVTVChjb2xsYXBzZV9mdWxsLCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpOwogCVRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7CiAJVEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7CiAJVEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7CkBAIC0xMjY4LDggJiM0MzsxMzYzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgc2htZW1fb3BzKTsKIAogCVRFU1QoY29sbGFwc2VfZW1wdHksIGtodWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpOwomIzQzOwlURVNUKGNvbGxhcHNlX2VtcHR5LCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpOwogCVRFU1QoY29sbGFwc2VfZW1wdHksIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpOwogCiYjNDM7CVRFU1QoY29sbGFwc2Vfc2luZ2xlX210aHAsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7CiYjNDM7CiAJVEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTsKIAlURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF9vbmx5X2ZpbGVfb3BzKTsKIAlURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwppbmRleCAxYjJkZmZjYzk5OWIwLi5jZmQxOTg3MzM5YzEzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RhdGljIHZvaWQgdW5wb3B1bGF0ZWRfd3JpdHRlbl90ZXN0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm1lbSwgbG9uZyBzaXplLAogCW1lbXNldChtZW0sIDEsIHNpemUpOwogCWlmICh1c2VfdGhwICZhbXA7JmFtcDsKIAkgICAgKG1hZHZpc2UobWVtLCBzaXplLCBNQURWX0NPTExBUFNFKSB8fAotCSAgICAgIWNoZWNrX2h1Z2VfYW5vbihtZW0sIHNpemUgLyBocGFnZV9zaXplLCBocGFnZV9zaXplKSkpIHsKJiM0MzsJICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkgewogCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxuJiMzNDssIG5hbWUpOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYwppbmRleCBkOGQ5ZDFkZTU3YjhiLi44MmM2ZTk2ZWE2ZWIzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKQEAgLTY3LDcgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBpbnQgdGVzdF9tbWFwX3RocChlbnVtIHRocF9jb2xsYXBzZV90eXBlIG1hZHZpc2VfYnVmLCBzaXplX3QgcG1kc2l6ZSkKIAkvKiBIQUNLOiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNlcGFyYXRlIFZNQSB0aGF0IHdlIGNhbiBjaGVjayByZWxpYWJseS4gKi8KIAltcHJvdGVjdChtZW0sIHBtZHNpemUsIFBST1RfUkVBRCk7CiAKLQlyZXQgPSBjaGVja19odWdlX2Fub24obWVtLCAxLCBwbWRzaXplKTsKJiM0MzsJcmV0ID0gY2hlY2tfaHVnZV9hbm9uKG1lbSwgcG1kc2l6ZSwgMSwgcG1kc2l6ZSk7CiAJbXVubWFwKG1tYXBfbWVtLCBtbWFwX3NpemUpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCmluZGV4IDY4N2QxMTVlM2JkODAuLmQwOWY5ZjZhMzg0ZWUgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCkBAIC00MTAsNiAmIzQzOzQxMCw4IEBAIENBVEVHT1JZPSYjMzQ7dGhwJiMzNDsgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIGFsbDpzaG1lbQogCiBDQVRFR09SWT0mIzM0O3RocCYjMzQ7IHJ1bl90ZXN0IC4va2h1Z2VwYWdlZCAtcyA0IGFsbDpzaG1lbQogCiYjNDM7Q0FURUdPUlk9JiMzNDt0aHAmIzM0OyBydW5fdGVzdCAuL2todWdlcGFnZWQgLWMgNCBtdGhwX2todWdlcGFnZWQ6YW5vbgomIzQzOwogIyBUcnkgdG8gY3JlYXRlIFhGUyBpZiBub3QgcHJvdmlkZWQKIGlmIFsgLXogJiMzNDske1NQTElUX0hVR0VfUEFHRV9URVNUX1hGU19QQVRIfSYjMzQ7IF07IHRoZW4KICAgICBpZiB0ZXN0X3NlbGVjdGVkICYjMzQ7dGhwJiMzNDs7IHRoZW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwppbmRleCBmYjE4NjRhNjhlMWM2Li5lMTk4ZmFjZjc4YmI1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCkBAIC0xMDMsNyAmIzQzOzEwMyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSkKIAlmb3IgKGkgPSAwOyBpICZsdDsgaHBhZ2VfbGVuOyBpJiM0MzsmIzQzOykKIAkJbWFwW2ldID0gKGNoYXIpaTsKIAotCWlmIChjaGVja19odWdlX2Fub24obWFwLCAxLCBocGFnZV9sZW4pKSB7CiYjNDM7CWlmIChjaGVja19odWdlX2Fub24obWFwLCBocGFnZV9sZW4sIDEsIGhwYWdlX2xlbikpIHsKIAkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7VGVzdCAlcyBodWdlIHBhZ2UgYWxsb2NhdGlvblxuJiMzNDssIF9fZnVuY19fKTsKIAogCQljbGVhcl9zb2Z0ZGlydHkoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCmluZGV4IDMyYjk5MTQ3MmY3NDQuLjg2YTYwMzY5MjgyNjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwpAQCAtMTA0LDEyOSAmIzQzOzEwNCw2IEBAIHN0YXRpYyBib29sIGlzX2JhY2tlZF9ieV9mb2xpbyhjaGFyICp2YWRkciwgaW50IG9yZGVyLCBpbnQgcGFnZW1hcF9mZCwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLAotCQl1aW50NjRfdCAqZmxhZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0KLQlwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpOwotCi0JLyogbm9uLXByZXNlbnQgUEZOICovCi0JaWYgKHBmbiA9PSAtMVVMKQotCQlyZXR1cm4gMTsKLQotCWlmIChwYWdlZmxhZ3NfZ2V0KHBmbiwga3BhZ2VmbGFnc19mZCwgZmxhZ3MpKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmQKLSAqIGZvbGlvIG9yZGVycwotICoKLSAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHIKLSAqIEBsZW46IHJhbmdlIGxlbmd0aAotICogQHBhZ2VtYXBfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy8mbHQ7cGlkJmd0Oy9wYWdlbWFwCi0gKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3MKLSAqIEBvcmRlcnM6IG91dHB1dCBmb2xpbyBvcmRlciBhcnJheQotICogQG5yX29yZGVyczogZm9saW8gb3JkZXIgYXJyYXkgc2l6ZQotICoKLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoKSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCBjaGVjawotICogYWxsIGZvbGlvcyB3aXRoaW4gdGhlIHJhbmdlIGFuZCByZWNvcmQgdGhlaXIgb3JkZXJzLiBBbGwgb3JkZXItMCBwYWdlcyB3aWxsCi0gKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC4KLSAqCi0gKiBOT1RFOiB0aGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBmb2xpbyBvcmRlcnMgYWZ0ZXIgYSBzcGxpdCBpcyBwZXJmb3JtZWQsCi0gKiBzbyBpdCBhc3N1bWVzIFt2YWRkcl9zdGFydCwgbGVuKSBmdWxseSBtYXBzIHRvIGFmdGVyLXNwbGl0IGZvbGlvcyB3aXRoaW4gdGhhdAotICogcmFuZ2UuCi0gKgotICogUmV0dXJuOiAwIC0gbm8gZXJyb3IsIC0xIC0gdW5oYW5kbGVkIGNhc2VzCi0gKi8KLXN0YXRpYyBpbnQgZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbiwKLQkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpCi17Ci0JdWludDY0X3QgcGFnZV9mbGFncyA9IDA7Ci0JaW50IGN1cl9vcmRlciA9IC0xOwotCWNoYXIgKnZhZGRyOwotCi0JaWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSkKLQkJcmV0dXJuIC0xOwotCWlmICghb3JkZXJzKQotCQlyZXR1cm4gLTE7Ci0JaWYgKG5yX29yZGVycyAmbHQ7PSAwKQotCQlyZXR1cm4gLTE7Ci0KLQlmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyICZsdDsgdmFkZHJfc3RhcnQgJiM0MzsgbGVuOykgewotCQljaGFyICpuZXh0X2ZvbGlvX3ZhZGRyOwotCQlpbnQgc3RhdHVzOwotCi0JCXN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQodmFkZHIsIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsCi0JCQkJCSZhbXA7cGFnZV9mbGFncyk7Ci0JCWlmIChzdGF0dXMgJmx0OyAwKQotCQkJcmV0dXJuIC0xOwotCi0JCS8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi8KLQkJaWYgKHN0YXR1cyA9PSAxKSB7Ci0JCQl2YWRkciAmIzQzOz0gcHNpemUoKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovCi0JCWlmICghKHBhZ2VfZmxhZ3MgJmFtcDsgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkgewotCQkJb3JkZXJzWzBdJiM0MzsmIzQzOzsKLQkJCXZhZGRyICYjNDM7PSBwc2l6ZSgpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi8KLQkJaWYgKCEocGFnZV9mbGFncyAmYW1wOyBLUEZfVEhQKSkgewotCQkJdmFkZHIgJiM0Mzs9IHBzaXplKCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovCi0JCWlmIChwYWdlX2ZsYWdzICZhbXA7IEtQRl9DT01QT1VORF9IRUFEKQotCQkJY3VyX29yZGVyID0gMTsKLQkJZWxzZSB7Ci0JCQl2YWRkciAmIzQzOz0gcHNpemUoKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJbmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpOwotCi0JCWlmIChuZXh0X2ZvbGlvX3ZhZGRyICZndDs9IHZhZGRyX3N0YXJ0ICYjNDM7IGxlbikKLQkJCWJyZWFrOwotCi0JCXdoaWxlICgoc3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldChuZXh0X2ZvbGlvX3ZhZGRyLAotCQkJCQkJICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLAotCQkJCQkJICAgICAmYW1wO3BhZ2VfZmxhZ3MpKSAmZ3Q7PSAwKSB7Ci0JCQkvKgotCQkJICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvcgotCQkJICogb3JkZXItMCBwYWdlCi0JCQkgKi8KLQkJCWlmIChzdGF0dXMgPT0gMSB8fAotCQkJICAgIChwYWdlX2ZsYWdzICZhbXA7IEtQRl9DT01QT1VORF9IRUFEKSB8fAotCQkJICAgICEocGFnZV9mbGFncyAmYW1wOyAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7Ci0JCQkJaWYgKGN1cl9vcmRlciAmbHQ7IG5yX29yZGVycykgewotCQkJCQlvcmRlcnNbY3VyX29yZGVyXSYjNDM7JiM0Mzs7Ci0JCQkJCWN1cl9vcmRlciA9IC0xOwotCQkJCQl2YWRkciA9IG5leHRfZm9saW9fdmFkZHI7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCi0JCQljdXJfb3JkZXImIzQzOyYjNDM7OwotCQkJbmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpOwotCQl9Ci0KLQkJaWYgKHN0YXR1cyAmbHQ7IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlpZiAoY3VyX29yZGVyICZndDsgMCAmYW1wOyZhbXA7IGN1cl9vcmRlciAmbHQ7IG5yX29yZGVycykKLQkJb3JkZXJzW2N1cl9vcmRlcl0mIzQzOyYjNDM7OwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbiwKIAkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpCiB7CkBAIC0yNDAsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLAogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2YWRkcl9vcmRlcnMmIzM0Oyk7CiAKIAltZW1zZXQodmFkZHJfb3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIG5yX29yZGVycyk7Ci0Jc3RhdHVzID0gZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLAomIzQzOwlzdGF0dXMgPSBnYXRoZXJfZm9saW9fb3JkZXJzKHZhZGRyX3N0YXJ0LCBsZW4sIHBhZ2VtYXBfZmQsCiAJCQkJICAgICBrcGFnZWZsYWdzX2ZkLCB2YWRkcl9vcmRlcnMsIG5yX29yZGVycyk7CiAJaWYgKHN0YXR1cykKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Z2F0aGVyIGZvbGlvIGluZm8gZmFpbGVkXG4mIzM0Oyk7CkBAIC0yOTYsNyAmIzQzOzE3Myw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwCiAJdW5zaWduZWQgbG9uZyByc3NfYW5vbl9iZWZvcmUsIHJzc19hbm9uX2FmdGVyOwogCXNpemVfdCBpOwogCi0JaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcywgcG1kX3BhZ2VzaXplKSkKJiM0MzsJaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIG5yX2hwYWdlcyAqIHBtZF9wYWdlc2l6ZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtObyBUSFAgaXMgYWxsb2NhdGVkXG4mIzM0Oyk7CiAKIAlyc3NfYW5vbl9iZWZvcmUgPSByc3NfYW5vbigpOwpAQCAtMzExLDcgJiM0MzsxODgsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocAogCQlpZiAob25lX3BhZ2VbaV0gIT0gKGNoYXIpMCkKIAkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0OyVsZCBieXRlIGNvcnJ1cHRlZFxuJiMzNDssIGkpOwogCi0JaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpCiYjNDM7CWlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCBucl9ocGFnZXMgKiBwbWRfcGFnZXNpemUsIDAsIHBtZF9wYWdlc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1N0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XG4mIzM0Oyk7CiAKIAlyc3NfYW5vbl9hZnRlciA9IHJzc19hbm9uKCk7CkBAIC0zNDcsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKQogCWZvciAoaSA9IDA7IGkgJmx0OyBsZW47IGkmIzQzOyYjNDM7KQogCQlvbmVfcGFnZVtpXSA9IChjaGFyKWk7CiAKLQlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCwgcG1kX3BhZ2VzaXplKSkKJiM0MzsJaWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDQsIHBtZF9wYWdlc2l6ZSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O05vIFRIUCBpcyBhbGxvY2F0ZWRcbiYjMzQ7KTsKIAogCS8qIHNwbGl0IGFsbCBUSFBzICovCkBAIC0zNjYsNyAmIzQzOzI0Myw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKQogCQkJCQkgICAocG1kX29yZGVyICYjNDM7IDEpKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5leHBlY3RlZCBUSFAgc3BsaXRcbiYjMzQ7KTsKIAotCWlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAwLCBwbWRfcGFnZXNpemUpKQomIzQzOwlpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7U3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcbiYjMzQ7KTsKIAogCWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0O1NwbGl0IGh1Z2UgcGFnZXMgdG8gb3JkZXIgJWQgc3VjY2Vzc2Z1bFxuJiMzNDssIG9yZGVyKTsKQEAgLTM5Myw3ICYjNDM7MjcwLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcHRlX21hcHBlZF90aHAodm9pZCkKIAlmb3IgKGkgPSAwOyBpICZsdDsgdGhwX2FyZWFfc2l6ZTsgaSYjNDM7JiM0MzspCiAJCXRocF9hcmVhW2ldID0gKGNoYXIpaTsKIAotCWlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7CiYjNDM7CWlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzICogcG1kX3BhZ2VzaXplLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7CiAJCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O05vdCBhbGwgVEhQcyBhbGxvY2F0ZWRcbiYjMzQ7KTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNjU3LDcgJiM0Mzs1MzQsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9wYWdlY2FjaGVfdGhwX2FuZF9mZChjb25zdCBjaGFyICp0ZXN0ZmlsZSwgc2l6ZV90IGZkX3NpemUsCiAKIAlmb3JjZV9yZWFkX3BhZ2VzKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpOwogCi0JaWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHsKJiM0MzsJaWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHsKIAkJa3NmdF9wcmludF9tc2coJiMzNDtObyBsYXJnZSBwYWdlY2FjaGUgZm9saW8gZ2VuZXJhdGVkLCBwbGVhc2UgcHJvdmlkZSBhIGZpbGVzeXN0ZW0gc3VwcG9ydGluZyBsYXJnZSBmb2xpb1xuJiMzNDspOwogCQltdW5tYXAoKmFkZHIsIGZkX3NpemUpOwogCQljbG9zZSgqZmQpOwpAQCAtNzM1LDcgJiM0Mzs2MTIsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF90aHBfaW5fcGFnZWNhY2hlX3RvX29yZGVyX2F0KHNpemVfdCBmZF9zaXplLAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7CiYjNDM7CWlmICghY2hlY2tfaHVnZV9maWxlKGFkZHIsIGZkX3NpemUsIDAsIHBtZF9wYWdlc2l6ZSkpIHsKIAkJa3NmdF9wcmludF9tc2coJiMzNDtTdGlsbCBGaWxlUG1kTWFwcGVkIG5vdCBzcGxpdFxuJiMzNDspOwogCQllcnIgPSBFWElUX0ZBSUxVUkU7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmMKaW5kZXggZjQ4ZjVkNDU5NGFiMC4uZmE0NmM4YzNhNDM0MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jCkBAIC0xOTQsNyAmIzQzOzE5NCw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX2FsaWFzX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBfX3U2NCAqc3RhcnQsCiAKIHN0YXRpYyB2b2lkIHNobWVtX2NoZWNrX3BtZF9tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdm9pZCAqcCwgaW50IGV4cGVjdF9ucl9ocGFnZXMpCiB7Ci0JaWYgKCFjaGVja19odWdlX3NobWVtKGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcywgZXhwZWN0X25yX2hwYWdlcywKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplID0gZXhwZWN0X25yX2hwYWdlcyAqIHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CiYjNDM7CWlmICghY2hlY2tfaHVnZV9zaG1lbShnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMsIHNpemUsIGV4cGVjdF9ucl9ocGFnZXMsCiAJCQkgICAgICByZWFkX3BtZF9wYWdlc2l6ZSgpKSkKIAkJZXJyKCYjMzQ7RGlkIG5vdCBmaW5kIGV4cGVjdGVkICVkIG51bWJlciBvZiBodWdlcGFnZXMmIzM0OywKIAkJICAgIGV4cGVjdF9ucl9ocGFnZXMpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCmluZGV4IGVmMWVhMTE5ODFhNzQuLmE0ZmZhYTBjYTZmYTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKQEAgLTE1LDYgJiM0MzsxNSwxMCBAQAogI2RlZmluZSBTTUFQX0ZJTEVfUEFUSCAmIzM0Oy9wcm9jL3NlbGYvc21hcHMmIzM0OwogI2RlZmluZSBTVEFUVVNfRklMRV9QQVRIICYjMzQ7L3Byb2Mvc2VsZi9zdGF0dXMmIzM0OwogI2RlZmluZSBNQVhfTElORV9MRU5HVEggNTAwCiYjNDM7I2RlZmluZSBQQUdFTUFQX1BBVEggJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXAmIzM0OwomIzQzOyNkZWZpbmUgS1BBR0VGTEFHU19QQVRIICYjMzQ7L3Byb2Mva3BhZ2VmbGFncyYjMzQ7CiYjNDM7I2RlZmluZSBHRVRfT1JERVIobnJfcGFnZXMpICAgICgzMSAtIF9fYnVpbHRpbl9jbHoobnJfcGFnZXMpKQomIzQzOyNkZWZpbmUgTlJfT1JERVJTIDIwCiAKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTsKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7CkBAIC0xOTQsNiAmIzQzOzE5OCwxMjUgQEAgdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKQogCXJldHVybiByc3NfYW5vbjsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLAomIzQzOwkJdWludDY0X3QgKmZsYWdzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBwZm47CiYjNDM7CiYjNDM7CXBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCB2YWRkcik7CiYjNDM7CiYjNDM7CS8qIG5vbi1wcmVzZW50IFBGTiAqLwomIzQzOwlpZiAocGZuID09IC0xVUwpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJaWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGFnZWZsYWdzX2ZkLCBmbGFncykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIGdhdGhlcl9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmQKJiM0MzsgKiBmb2xpbyBvcmRlcnMKJiM0MzsgKgomIzQzOyAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHIKJiM0MzsgKiBAbGVuOiByYW5nZSBsZW5ndGgKJiM0MzsgKiBAcGFnZW1hcF9mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jLyZsdDtwaWQmZ3Q7L3BhZ2VtYXAKJiM0MzsgKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3MKJiM0MzsgKiBAb3JkZXJzOiBvdXRwdXQgZm9saW8gb3JkZXIgYXJyYXkKJiM0MzsgKiBAbnJfb3JkZXJzOiBmb2xpbyBvcmRlciBhcnJheSBzaXplCiYjNDM7ICoKJiM0MzsgKiBnYXRoZXJfZm9saW9fb3JkZXJzKCkgc2NhbiB0aHJvdWdoIFt2YWRkcl9zdGFydCwgbGVuKSBhbmQgY2hlY2sKJiM0MzsgKiBhbGwgZm9saW9zIHdpdGhpbiB0aGUgcmFuZ2UgYW5kIHJlY29yZCB0aGVpciBvcmRlcnMuIEFsbCBvcmRlci0wIHBhZ2VzIHdpbGwKJiM0MzsgKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlcwomIzQzOyAqLwomIzQzO2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLAomIzQzOwkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpCiYjNDM7ewomIzQzOwl1aW50NjRfdCBwYWdlX2ZsYWdzID0gMDsKJiM0MzsJaW50IGN1cl9vcmRlciA9IC0xOwomIzQzOwljaGFyICp2YWRkcjsKJiM0MzsKJiM0MzsJaWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKCFvcmRlcnMpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWlmIChucl9vcmRlcnMgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJZm9yICh2YWRkciA9IHZhZGRyX3N0YXJ0OyB2YWRkciAmbHQ7IHZhZGRyX3N0YXJ0ICYjNDM7IGxlbjspIHsKJiM0MzsJCWNoYXIgKm5leHRfZm9saW9fdmFkZHI7CiYjNDM7CQlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwkJc3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldCh2YWRkciwgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCwKJiM0MzsJCQkJJmFtcDtwYWdlX2ZsYWdzKTsKJiM0MzsJCWlmIChzdGF0dXMgJmx0OyAwKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJCS8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi8KJiM0MzsJCWlmIChzdGF0dXMgPT0gMSkgewomIzQzOwkJCXZhZGRyICYjNDM7PSBwc2l6ZSgpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogYWxsIG9yZGVyLTAgcGFnZXMgd2l0aCBwb3NzaWJsZSBmYWxzZSBwb3N0aXZlIChub24gZm9saW8pICovCiYjNDM7CQlpZiAoIShwYWdlX2ZsYWdzICZhbXA7IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHsKJiM0MzsJCQlvcmRlcnNbMF0mIzQzOyYjNDM7OwomIzQzOwkJCXZhZGRyICYjNDM7PSBwc2l6ZSgpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogc2tpcCBub24gdGhwIGNvbXBvdW5kIHBhZ2VzICovCiYjNDM7CQlpZiAoIShwYWdlX2ZsYWdzICZhbXA7IEtQRl9USFApKSB7CiYjNDM7CQkJdmFkZHIgJiM0Mzs9IHBzaXplKCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiB2cG4gcG9pbnRzIHRvIHBhcnQgb2YgYSBUSFAgYXQgdGhpcyBwb2ludCAqLwomIzQzOwkJaWYgKHBhZ2VfZmxhZ3MgJmFtcDsgS1BGX0NPTVBPVU5EX0hFQUQpCiYjNDM7CQkJY3VyX29yZGVyID0gMTsKJiM0MzsJCWVsc2UgewomIzQzOwkJCXZhZGRyICYjNDM7PSBwc2l6ZSgpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpOwomIzQzOwomIzQzOwkJaWYgKG5leHRfZm9saW9fdmFkZHIgJmd0Oz0gdmFkZHJfc3RhcnQgJiM0MzsgbGVuKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJd2hpbGUgKChzdGF0dXMgPSB2YWRkcl9wYWdlZmxhZ3NfZ2V0KG5leHRfZm9saW9fdmFkZHIsCiYjNDM7CQkJCQkJICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLAomIzQzOwkJCQkJCSAgICAgJmFtcDtwYWdlX2ZsYWdzKSkgJmd0Oz0gMCkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogbm9uIHByZXNlbnQgdmFkZHIsIG5leHQgY29tcG91bmQgaGVhZCBwYWdlLCBvcgomIzQzOwkJCSAqIG9yZGVyLTAgcGFnZQomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChzdGF0dXMgPT0gMSB8fAomIzQzOwkJCSAgICAocGFnZV9mbGFncyAmYW1wOyBLUEZfQ09NUE9VTkRfSEVBRCkgfHwKJiM0MzsJCQkgICAgIShwYWdlX2ZsYWdzICZhbXA7IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHsKJiM0MzsJCQkJaWYgKGN1cl9vcmRlciAmbHQ7IG5yX29yZGVycykgewomIzQzOwkJCQkJb3JkZXJzW2N1cl9vcmRlcl0mIzQzOyYjNDM7OwomIzQzOwkJCQkJY3VyX29yZGVyID0gLTE7CiYjNDM7CQkJCQl2YWRkciA9IG5leHRfZm9saW9fdmFkZHI7CiYjNDM7CQkJCX0KJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWN1cl9vcmRlciYjNDM7JiM0Mzs7CiYjNDM7CQkJbmV4dF9mb2xpb192YWRkciA9IHZhZGRyICYjNDM7ICgxVUwgJmx0OyZsdDsgKGN1cl9vcmRlciAmIzQzOyBwc2hpZnQoKSkpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHN0YXR1cyAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHN0YXR1czsKJiM0MzsJfQomIzQzOwlpZiAoY3VyX29yZGVyICZndDsgMCAmYW1wOyZhbXA7IGN1cl9vcmRlciAmbHQ7IG5yX29yZGVycykKJiM0MzsJCW9yZGVyc1tjdXJfb3JkZXJdJiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CiAJaW50IHJldDsKQEAgLTIyOSw3ICYjNDM7MzUyLDcgQEAgY2hhciAqX19nZXRfc21hcF9lbnRyeSh2b2lkICphZGRyLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiAJcmV0dXJuIGVudHJ5OwogfQogCi1ib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLAomIzQzO3N0YXRpYyBib29sIF9fY2hlY2tfcG1kX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcywKIAkJICB1aW50NjRfdCBocGFnZV9zaXplKQogewogCWNoYXIgYnVmZmVyW01BWF9MSU5FX0xFTkdUSF07CkBAIC0yNDcsMTkgJiM0MzszNzAsNjIgQEAgYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcywKIAlyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSAmZ3Q7Jmd0OyAxMCkpOwogfQogCi1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKQomIzQzO3N0YXRpYyBib29sIGNoZWNrX2xhcmdlX2ZvbGlvcyh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiB7Ci0JcmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCAmIzM0O0Fub25IdWdlUGFnZXM6ICYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwomIzQzOwlpbnQgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwomIzQzOwlpbnQgb3JkZXIgPSBHRVRfT1JERVIoaHBhZ2Vfc2l6ZSAvIHBhZ2VzaXplKTsKJiM0MzsJaW50IHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQ7CiYjNDM7CWludCBvcmRlcnNbTlJfT1JERVJTXSwgc3RhdHVzOwomIzQzOwlib29sIHJldCA9IGZhbHNlOwomIzQzOwomIzQzOwltZW1zZXQob3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIE5SX09SREVSUyk7CiYjNDM7CiYjNDM7CXBhZ2VtYXBfZmQgPSBvcGVuKFBBR0VNQVBfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAocGFnZW1hcF9mZCA9PSAtMSkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWQgcGFnZW1hcCBmYWlsXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWtwYWdlZmxhZ3NfZmQgPSBvcGVuKEtQQUdFRkxBR1NfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAoa3BhZ2VmbGFnc19mZCA9PSAtMSkgewomIzQzOwkJY2xvc2UocGFnZW1hcF9mZCk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkIGtwYWdlZmxhZ3MgZmFpbFxuJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnMoYWRkciwgc2l6ZSwgcGFnZW1hcF9mZCwKJiM0MzsJCQlrcGFnZWZsYWdzX2ZkLCBvcmRlcnMsIE5SX09SREVSUyk7CiYjNDM7CWlmIChzdGF0dXMpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKG9yZGVyc1tvcmRlcl0gPT0gbnJfaHBhZ2VzKQomIzQzOwkJcmV0ID0gdHJ1ZTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWNsb3NlKHBhZ2VtYXBfZmQpOwomIzQzOwljbG9zZShrcGFnZWZsYWdzX2ZkKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAotYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKJiM0Mztib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiB7Ci0JcmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCAmIzM0O0ZpbGVQbWRNYXBwZWQ6JiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CWlmIChocGFnZV9zaXplID09IHJlYWRfcG1kX3BhZ2VzaXplKCkpCiYjNDM7CQlyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCAmIzM0O0Fub25IdWdlUGFnZXM6ICYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwomIzQzOwomIzQzOwlyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmIChocGFnZV9zaXplID09IHJlYWRfcG1kX3BhZ2VzaXplKCkpCiYjNDM7CQlyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCAmIzM0O0ZpbGVQbWRNYXBwZWQ6JiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTsKIH0KIAotYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpCiYjNDM7Ym9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSkKIHsKLQlyZXR1cm4gX19jaGVja19odWdlKGFkZHIsICYjMzQ7U2htZW1QbWRNYXBwZWQ6JiMzNDssIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiYjNDM7CWlmIChocGFnZV9zaXplID09IHJlYWRfcG1kX3BhZ2VzaXplKCkpCiYjNDM7CQlyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCAmIzM0O1NobWVtUG1kTWFwcGVkOiYjMzQ7LCBucl9ocGFnZXMsIGhwYWdlX3NpemUpOwomIzQzOwomIzQzOwlyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7CiB9CiAKIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKaW5kZXggNzc5OTE1NGI2N2VlZC4uMjBhZjNlNTc0Y2Q4MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaApAQCAtOTAsMTEgJiM0Mzs5MCwxMyBAQCB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTsKIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTsKIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZCk7Ci1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTsKLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwotYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwomIzQzO2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7CiYjNDM7Ym9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTsKJiM0Mztib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTsKIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpOwogaW50IHBhZ2VmbGFnc19nZXQodW5zaWduZWQgbG9uZyBwZm4sIGludCBrcGFnZWZsYWdzX2ZkLCB1aW50NjRfdCAqZmxhZ3MpOwomIzQzO2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLAomIzQzOwkJaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpOwogCiBpbnQgdWZmZF9yZWdpc3RlcihpbnQgdWZmZCwgdm9pZCAqYWRkciwgdWludDY0X3QgbGVuLAogCQkgIGJvb2wgbWlzcywgYm9vbCB3cCwgYm9vbCBtaW5vcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDcwCgkJCQkJCQlvdXRwdXQ6IDY0CgkJCQkJCQl0aG91Z2h0czogODkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBFdmFsdWF0aW9uOiBBbmFseXNpcyBvZiBhIE1lbW9yeSBNYW5hZ2VtZW50IFNlbGZ0ZXN0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgbGl2ZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFJpZ2h0IGF3YXksIHRoYXQmIzM5O3MgYSByZWQgZmxhZyBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgZnV6emluZy4gVGhlIGZpbGVzIGxpc3RlZCBhcmUgYWxsIHJlbGF0ZWQgdG8gdXNlcnNwYWNlIHRlc3RzIGZvciB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtOiBgZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNgLCBga2h1Z2VwYWdlZC5jYCwgYHBhZ2VtYXBfaW9jdGwuY2AsIGFuZCBzbyBvbi4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggcHJpbWFyaWx5IGNvbmNlcm5zIGl0c2VsZiB3aXRoIGFkZGluZyBtVEhQIChtdWx0aS1zaXplIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIHRlc3RpbmcsIHdpdGggYWRqdXN0bWVudHMgdG8gcmVsYXRlZCBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBwcm9tcHQuIEl0JiMzOTtzIGFza2luZyBpZiB0aGlzIHBhdGNoIGlzICYjMzQ7V29ydGhGdXp6aW5nLiYjMzQ7IEJhc2VkIG9uIHRoZSBjcml0ZXJpYSBpdCBnaXZlcywgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIHRoZSBtb2RpZmljYXRpb25zIGFmZmVjdCBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCAqb25seSogY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byB0ZXN0cyBvciBkb2N1bWVudGF0aW9uLgoKSSYjMzk7dmUgYWxyZWFkeSBhc2NlcnRhaW5lZCB0aGF0IHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgc2VsZnRlc3RzIGRpcmVjdG9yeS4gU2VsZnRlc3RzIGFyZSAqdXNlcnNwYWNlKiBwcm9ncmFtcyBkZXNpZ25lZCB0byB0ZXN0IHRoZSBrZXJuZWwmIzM5O3MgYmVoYXZpb3IuIFRoZSBtb2RpZmljYXRpb25zIGhlcmUgYXJlIHRvICp0ZXN0KiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBub3QgdG8gKmNoYW5nZSogdGhlIGtlcm5lbCBpdHNlbGYuIEZ1enppbmcgc2VsZnRlc3RzIGlzIG5vdCB0aGUgc2FtZSBhcyBmdXp6aW5nIHRoZSBrZXJuZWwsIHNpbmNlIGZ1enppbmcgdGhlIGtlcm5lbCBmb2N1c2VzIG9uIHN5c3RlbSBjYWxscyBhbmQga2VybmVsIGVudHJ5IHBvaW50cy4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgbXkgYXNzZXNzbWVudCBpcyBjb3JyZWN0LiBJIGhhdmUgYSBtZW50YWwgY2hlY2tsaXN0LiBMZXQgbWUgdmVyaWZ5OgotIEkmIzM5O3ZlIHZlcmlmaWVkIHRoZSBwYXRoIHByZWZpeCBmb3IgYWxsIG1vZGlmaWVkIGZpbGVzLgotIFRoZSBwYXRoIHByZWZpeCBpcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4KLSBObyBrZXJuZWwgY29kZSBpcyBwcmVzZW50LgotIEl0JiMzOTtzIGFsbCB1c2Vyc3BhY2UgY29kZS4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzLCBJIGNvbmNsdWRlIHRoYXQgaXQgZG9lcyAqbm90KiB0b3VjaCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYSwgdGhlIHBhdGNoIGlzICoqbm90Kiogd29ydGggZnV6emluZy4gVGhlIHJlc3VsdCBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMDU6MzI6NTUuNDc0MTAzNDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTI2NzgzOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA1OjMyOjU1LjQ3NDEyMDc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM1MjIwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMmRhNmZkNWQ3NTBkNDQ4MjRlYjk2MDgwNDQ3YWJiYTI3YmZmODYxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDA1OjMyOjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG5pbmRleCA2MzI5ZTM3ZmZmNGM5Li40NWI4NGY3YjM2NGUwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG5AQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyB1aW50NjRfdCBydW5faXRlcmF0aW9uKHZvaWQpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBUT1RBTF9QQUdFUzsgaSsrKVxcbiBcXHRcXHRmaWxsX3BhZ2UobW1hcF9iYXNlLCBpKTtcXG4gXFxuLVxcdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKVxcbitcXHRpZiAoIWNoZWNrX2h1Z2Vfc2htZW0obW1hcF9iYXNlLCBGSUxFX1NJWkUsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk5vIHNobWVtIFRIUCBpcyBhbGxvY2F0ZWRcXFxcblxcXCIpO1xcbiBcXG4gXFx0aWYgKHB0aHJlYWRfYmFycmllcl9pbml0KFxcdTAwMjZjdGwuYmFycmllciwgTlVMTCwgTlVNX1JFQURFUl9USFJFQURTICsgMSkgIT0gMClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuaW5kZXggMTBlOGRlZGNiMDg3ZC4uZTIxYTZlYzM4MzYzMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG5AQCAtMjYsOSArMjYsMTEgQEBcXG4gXFxuICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgXFx1MDAzY1xcdTAwM2MgMzApKVxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTtcXG4rc3RhdGljIGludCBocGFnZV9wbWRfb3JkZXI7XFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcXG4gc3RhdGljIGludCBocGFnZV9wbWRfbnI7XFxuIHN0YXRpYyBpbnQgYW5vbl9vcmRlcjtcXG4rc3RhdGljIGludCBjb2xsYXBzZV9vcmRlcjtcXG4gXFxuICNkZWZpbmUgUElEX1NNQVBTIFxcXCIvcHJvYy9zZWxmL3NtYXBzXFxcIlxcbiAjZGVmaW5lIFRFU1RfRklMRSBcXFwiY29sbGFwc2VfdGVzdF9maWxlXFxcIlxcbkBAIC01MSw3ICs1Myw3IEBAIHN0cnVjdCBtZW1fb3BzIHtcXG4gXFx0dm9pZCAqKCpzZXR1cF9hcmVhKShpbnQgbnJfaHBhZ2VzKTtcXG4gXFx0dm9pZCAoKmNsZWFudXBfYXJlYSkodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKTtcXG4gXFx0dm9pZCAoKmZhdWx0KSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XFxuLVxcdGJvb2wgKCpjaGVja19odWdlKSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKTtcXG4rXFx0Ym9vbCAoKmNoZWNrX2h1Z2UpKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdW5zaWduZWQgbG9uZyBocGFnZV9zaXplKTtcXG4gXFx0Y29uc3QgY2hhciAqbmFtZTtcXG4gfTtcXG4gXFxuQEAgLTY5LDYgKzcxLDcgQEAgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQge1xcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpraHVnZXBhZ2VkX2NvbnRleHQ7XFxuK3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqbXRocF9raHVnZXBhZ2VkX2NvbnRleHQ7XFxuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqbWFkdmlzZV9jb250ZXh0O1xcbiBcXG4gc3RydWN0IGZpbGVfaW5mbyB7XFxuQEAgLTI3Niw3ICsyNzksNyBAQCBzdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIkFsbG9jYXRlIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbiBcXHRpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibWFkdmlzZShNQURWX0NPTExBUFNFKVxcXCIpO1xcbi1cXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJtYWR2aXNlKE1BRFZfQ09MTEFQU0UpXFxcIik7XFxuIFxcdGlmIChtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJtYWR2aXNlKE1BRFZfSFVHRVBBR0UpXFxcIik7XFxuQEAgLTMxMCw5ICszMTMsMTAgQEAgc3RhdGljIHZvaWQgYW5vbl9mYXVsdCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4gXFx0ZmlsbF9tZW1vcnkocCwgc3RhcnQsIGVuZCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGFub25fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxcbitzdGF0aWMgYm9vbCBhbm9uX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxcbitcXHRcXHRpbnQgbnJfaHBhZ2VzLCB1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0cmV0dXJuIGNoZWNrX2h1Z2VfYW5vbihhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcXG4rXFx0cmV0dXJuIGNoZWNrX2h1Z2VfYW5vbihhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxcbkBAIC00MTIsMTMgKzQxNiwxNCBAQCBzdGF0aWMgdm9pZCBmaWxlX2ZhdWx0X3dyaXRlKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1hZHZpc2UoTUFEVl9QT1BVTEFURV9XUklURSlcXFwiKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgZmlsZV9jaGVja19odWdlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMpXFxuK3N0YXRpYyBib29sIGZpbGVfY2hlY2tfaHVnZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuK1xcdFxcdGludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcXG4ge1xcbiBcXHRzd2l0Y2ggKGZpbmZvLnR5cGUpIHtcXG4gXFx0Y2FzZSBWTUFfRklMRTpcXG4tXFx0XFx0cmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcXG4rXFx0XFx0cmV0dXJuIGNoZWNrX2h1Z2VfZmlsZShhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbiBcXHRjYXNlIFZNQV9TSE1FTTpcXG4tXFx0XFx0cmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XFxuK1xcdFxcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbkBAIC00NDgsOSArNDUzLDEwIEBAIHN0YXRpYyB2b2lkIHNobWVtX2NsZWFudXBfYXJlYSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpXFxuIFxcdGNsb3NlKGZpbmZvLmZkKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxcbitzdGF0aWMgYm9vbCBzaG1lbV9jaGVja19odWdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4rXFx0XFx0XFx0aW50IG5yX2hwYWdlcywgdW5zaWduZWQgbG9uZyBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xcbitcXHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IG1lbV9vcHMgX19hbm9uX29wcyA9IHtcXG5AQCAtNTMzLDcgKzUzOSw3IEBAIHN0YXRpYyB2b2lkIF9fbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xcbiBcXHRpZiAoKChib29sKXJldCkgPT0gZXhwZWN0KVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsOiBCYWQgcmV0dXJuIHZhbHVlXFxcIik7XFxuLVxcdGVsc2UgaWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCkpXFxuK1xcdGVsc2UgaWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbDogY2hlY2tfaHVnZSgpXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG5AQCAtNTQ1LDMwICs1NTEsMzEgQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXFxuIHtcXG4gXFx0LyogU2FuaXR5IGNoZWNrICovXFxuLVxcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlVuZXhwZWN0ZWQgaHVnZSBwYWdlXFxcXG5cXFwiKTtcXG4gXFx0X19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7XFxuIH1cXG4gXFxuICNkZWZpbmUgVElDSyA1MDAwMDBcXG4tc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuLVxcdFxcdFxcdCAgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4rc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4rXFx0XFx0aW50IG5yX2hwYWdlcywgaW50IGNvbGxhcF9vcmRlciwgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4ge1xcbitcXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXFx1MDAzY1xcdTAwM2MgY29sbGFwX29yZGVyO1xcbiBcXHRpbnQgZnVsbF9zY2FucztcXG4gXFx0aW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi9cXG4gXFxuIFxcdC8qIFNhbml0eSBjaGVjayAqL1xcbi1cXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgc2l6ZSwgMCwgaHBhZ2Vfc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5leHBlY3RlZCBodWdlIHBhZ2VcXFxcblxcXCIpO1xcbiBcXG4tXFx0bWFkdmlzZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XFxuK1xcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XFxuIFxcbiBcXHQvKiBXYWl0IHVudGlsIHRoZSBzZWNvbmQgZnVsbF9zY2FuIGNvbXBsZXRlZCAqL1xcbiBcXHRmdWxsX3NjYW5zID0gdGhwX3JlYWRfbnVtKFxcXCJraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcXFwiKSArIDI7XFxuIFxcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiJXMuLi5cXFwiLCBtc2cpO1xcbiBcXHR3aGlsZSAodGltZW91dC0tKSB7XFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzKSlcXG4rXFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKHRocF9yZWFkX251bShcXFwia2h1Z2VwYWdlZC9mdWxsX3NjYW5zXFxcIikgXFx1MDAzZT0gZnVsbF9zY2FucylcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTU4Miw2ICs1ODksOCBAQCBzdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG4gc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplO1xcbitcXG4gXFx0LypcXG4gXFx0ICogcmVhZFxcdTAwMjZ3cml0ZSBmaWxlIGNvbGxhcHNlIGZhaWxzIHNpbmNlIGtodWdlcGFnZWQgZG9lcyBub3QgZmx1c2hcXG4gXFx0ICogdGhlIHRhcmdldCBkaXJ0eSBmb2xpb3NcXG5AQCAtNTg5LDcgKzU5OCw3IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxcbiBcXHRpZiAoIWlzX3RtcGZzKG9wcykgXFx1MDAyNlxcdTAwMjYgb3BzID09IFxcdTAwMjZfX3JlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHMpXFxuIFxcdFxcdGV4cGVjdCA9IGZhbHNlO1xcbiBcXG4tXFx0aWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBucl9ocGFnZXMsIG9wcykpIHtcXG4rXFx0aWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xcbiBcXHRcXHRpZiAoZXhwZWN0KVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJUaW1lb3V0XFxcIik7XFxuIFxcdFxcdGVsc2VcXG5AQCAtNjA1LDEwICs2MTQsNTQgQEAgc3RhdGljIHZvaWQga2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXFxuIFxcdGlmIChvcHMgIT0gXFx1MDAyNl9fYW5vbl9vcHMpXFxuIFxcdFxcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xcbiBcXG4tXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBzaXplLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuK1xcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtdGhwX2todWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXFx1MDAzY1xcdTAwM2MgY29sbGFwc2Vfb3JkZXI7XFxuK1xcdHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3MgPSAqdGhwX2N1cnJlbnRfc2V0dGluZ3MoKTtcXG4rXFx0LyogbVRIUCBjb2xscGFzZSBvbmx5IGFsbG9jYXRlcyBQTUQgc2l6ZWQgbWVtb3J5ICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGhwYWdlX3BtZF9zaXplO1xcbitcXG4rXFx0LyogU2V0IG1USFAgc2V0dGluZyBmb3IgbVRIUCBjb2xsYXBzZSAqL1xcbitcXHRpZiAob3BzID09IFxcdTAwMjZfX2Fub25fb3BzKSB7XFxuK1xcdFxcdHNldHRpbmdzLnRocF9lbmFibGVkID0gVEhQX05FVkVSO1xcbitcXHRcXHRzZXR0aW5ncy5odWdlcGFnZXNbY29sbGFwc2Vfb3JkZXJdLmVuYWJsZWQgPSBUSFBfQUxXQVlTO1xcbitcXHR9XFxuK1xcbitcXHR0aHBfcHVzaF9zZXR0aW5ncyhcXHUwMDI2c2V0dGluZ3MpO1xcbitcXG4rXFx0aWYgKHdhaXRfZm9yX3NjYW4obXNnLCBwLCBzaXplLCBucl9ocGFnZXMsIGNvbGxhcHNlX29yZGVyLCBvcHMpKSB7XFxuK1xcdFxcdGlmIChleHBlY3QpXFxuK1xcdFxcdFxcdGZhaWwoXFxcIlRpbWVvdXRcXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbitcXG4rXFx0XFx0LyogUmVzdG9yZSBUSFAgc2V0dGluZ3MgZm9yIG1USFAgY29sbGFwc2UuICovXFxuK1xcdFxcdHRocF9wb3Bfc2V0dGluZ3MoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBGb3IgZmlsZSBhbmQgc2htZW0gbWVtb3J5LCBraHVnZXBhZ2VkIG9ubHkgcmV0cmFjdHMgcHRlIGVudHJpZXMgYWZ0ZXJcXG4rXFx0ICogcHV0dGluZyB0aGUgbmV3IGh1Z2VwYWdlIGluIHRoZSBwYWdlIGNhY2hlLiBUaGUgaHVnZXBhZ2UgbXVzdCBiZVxcbitcXHQgKiBzdWJzZXF1ZW50bHkgcmVmYXVsdGVkIHRvIGluc3RhbGwgdGhlIHBtZCBtYXBwaW5nIGZvciB0aGUgbW0uXFxuK1xcdCAqL1xcbitcXHRpZiAob3BzICE9IFxcdTAwMjZfX2Fub25fb3BzKVxcbitcXHRcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3NpemUpO1xcbitcXG4rXFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBzaXplLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuK1xcbitcXHQvKiBSZXN0b3JlIFRIUCBzZXR0aW5ncyBmb3IgbVRIUCBjb2xsYXBzZS4gKi9cXG4rXFx0dGhwX3BvcF9zZXR0aW5ncygpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19raHVnZXBhZ2VkX2NvbnRleHQgPSB7XFxuQEAgLTYxNyw2ICs2NzAsMTIgQEAgc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fa2h1Z2VwYWdlZF9jb250ZXh0ID0ge1xcbiBcXHQubmFtZSA9IFxcXCJraHVnZXBhZ2VkXFxcIixcXG4gfTtcXG4gXFxuK3N0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX210aHBfa2h1Z2VwYWdlZF9jb250ZXh0ID0ge1xcbitcXHQuY29sbGFwc2UgPSBcXHUwMDI2bXRocF9raHVnZXBhZ2VkX2NvbGxhcHNlLFxcbitcXHQuZW5mb3JjZV9wdGVfc2Nhbl9saW1pdHMgPSB0cnVlLFxcbitcXHQubmFtZSA9IFxcXCJtdGhwX2todWdlcGFnZWRcXFwiLFxcbit9O1xcbitcXG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0IF9fbWFkdmlzZV9jb250ZXh0ID0ge1xcbiBcXHQuY29sbGFwc2UgPSBcXHUwMDI2bWFkdmlzZV9jb2xsYXBzZSxcXG4gXFx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXFxuQEAgLTYzNCw3ICs2OTMsNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxcbiBcXHRwID0gYWxsb2NfbWFwcGluZygxKTtcXG4gXFx0KnAgPSAxO1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiQWxsb2NhdGUgaHVnZSBwYWdlIG9uIGZhdWx0Li4uXFxcIik7XFxuLVxcdGlmIChjaGVja19odWdlX2Fub24ocCwgMSwgaHBhZ2VfcG1kX3NpemUpKVxcbitcXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC02NDMsNyArNzAyLDcgQEAgc3RhdGljIHZvaWQgYWxsb2NfYXRfZmF1bHQodm9pZClcXG4gXFxuIFxcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTtcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIlNwbGl0IGh1Z2UgUE1EIG9uIE1BRFZfRE9OVE5FRUQuLi5cXFwiKTtcXG4tXFx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuK1xcdGlmIChjaGVja19odWdlX2Fub24ocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTY1NSwxMCArNzE0LDE3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXFxuIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGwoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuIHtcXG4gXFx0dm9pZCAqcDtcXG4tXFx0aW50IG5yX2hwYWdlcyA9IDQ7XFxuK1xcdGludCBucl9wbWRzID0gNCwgbnJfaHBhZ2VzID0gNDtcXG4gXFx0dW5zaWduZWQgbG9uZyBzaXplID0gbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemU7XFxuIFxcbi1cXHRwID0gb3BzLVxcdTAwM2VzZXR1cF9hcmVhKG5yX2hwYWdlcyk7XFxuK1xcdC8qIE9ubHkgdHJ5IDEgUE1EIHNpemVkIHJhbmdlIGZvciBtVEhQIGNvbGxhcHNlLiAqL1xcbitcXHRpZiAoYyA9PSBcXHUwMDI2X19tdGhwX2todWdlcGFnZWRfY29udGV4dCkge1xcbitcXHRcXHRucl9wbWRzID0gMTtcXG4rXFx0XFx0bnJfaHBhZ2VzID0gMSBcXHUwMDNjXFx1MDAzYyAoaHBhZ2VfcG1kX29yZGVyIC0gY29sbGFwc2Vfb3JkZXIpO1xcbitcXHRcXHRzaXplID0gaHBhZ2VfcG1kX3NpemU7XFxuK1xcdH1cXG4rXFxuK1xcdHAgPSBvcHMtXFx1MDAzZXNldHVwX2FyZWEobnJfcG1kcyk7XFxuIFxcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgc2l6ZSk7XFxuIFxcdGMtXFx1MDAzZWNvbGxhcHNlKFxcXCJDb2xsYXBzZSBtdWx0aXBsZSBmdWxseSBwb3B1bGF0ZWQgUFRFIHRhYmxlXFxcIiwgcCwgbnJfaHBhZ2VzLFxcbiBcXHRcXHQgICAgb3BzLCB0cnVlKTtcXG5AQCAtNjcwLDEwICs3MzYsMzEgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4gXFxuIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2VtcHR5KHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiB7XFxuK1xcdGludCBucl9ocGFnZXMgPSAxO1xcbiBcXHR2b2lkICpwO1xcbiBcXG4rXFx0aWYgKGMgPT0gXFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXFxuK1xcdFxcdG5yX2hwYWdlcyA9IDEgXFx1MDAzY1xcdTAwM2MgKGhwYWdlX3BtZF9vcmRlciAtIGNvbGxhcHNlX29yZGVyKTtcXG4rXFxuIFxcdHAgPSBvcHMtXFx1MDAzZXNldHVwX2FyZWEoMSk7XFxuLVxcdGMtXFx1MDAzZWNvbGxhcHNlKFxcXCJEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXFxcIiwgcCwgMSwgb3BzLCBmYWxzZSk7XFxuK1xcdGMtXFx1MDAzZWNvbGxhcHNlKFxcXCJEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXFxcIiwgcCwgbnJfaHBhZ2VzLCBvcHMsIGZhbHNlKTtcXG4rXFx0b3BzLVxcdTAwM2VjbGVhbnVwX2FyZWEocCwgaHBhZ2VfcG1kX3NpemUpO1xcbitcXHRrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgXFxcIiVzXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNvbGxhcHNlX3NpbmdsZV9tdGhwKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZSBcXHUwMDNjXFx1MDAzYyBjb2xsYXBzZV9vcmRlcjtcXG4rXFx0dm9pZCAqcDtcXG4rXFxuK1xcdHAgPSBvcHMtXFx1MDAzZXNldHVwX2FyZWEoMSk7XFxuK1xcdC8qXFxuK1xcdCAqIE9ubHkgZmF1bHQgY29sbGFwc2Vfb3JkZXIgc2l6ZWQgcmFuZ2VzLCBhbmQgb25seSBjaGVjayAxXFxuK1xcdCAqIGNvbGxhcHNlX29yZGVyIHNpemVkIGh1Z2UgcGFnZS5cXG4rXFx0ICovXFxuK1xcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgaHBhZ2Vfc2l6ZSk7XFxuK1xcdGMtXFx1MDAzZWNvbGxhcHNlKFxcXCJDb2xsYXBzZSBQVEUgdGFibGUgd2l0aCBoYWxmIFBURSBlbnRyaWVzIHByZXNlbnRcXFwiLFxcbitcXHRcXHRwLCAxLCBvcHMsIHRydWUpO1xcbiBcXHRvcHMtXFx1MDAzZWNsZWFudXBfYXJlYShwLCBocGFnZV9wbWRfc2l6ZSk7XFxuIFxcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcXFwiJXNcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gfVxcbkBAIC04MTUsNyArOTAyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX3B0ZV9lbnRyeV9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWNcXG4gXFx0bWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIlNwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgbWFwcGluZyBjb21wb3VuZCBwYWdlLi4uXFxcIik7XFxuIFxcdG1hZHZpc2UocCArIHBhZ2Vfc2l6ZSwgaHBhZ2VfcG1kX3NpemUgLSBwYWdlX3NpemUsIE1BRFZfRE9OVE5FRUQpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC04MzYsNyArOTIzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZnVsbF9vZl9jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIlNwbGl0IGh1Z2UgcGFnZSBsZWF2aW5nIHNpbmdsZSBQVEUgcGFnZSB0YWJsZSBmdWxsIG9mIGNvbXBvdW5kIHBhZ2VzLi4uXFxcIik7XFxuIFxcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbiBcXHRtYWR2aXNlKHAsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC04NTgsNyArOTQ1LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfY29tcG91bmRfZXh0cmVtZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGhwYWdlX3BtZF9ucjsgaSsrKSB7XFxuIFxcdFxcdG1hZHZpc2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XFxuIFxcdFxcdG9wcy1cXHUwMDNlZmF1bHQoQkFTRV9BRERSLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuLVxcdFxcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKEJBU0VfQUREUiwgMSkpXFxuK1xcdFxcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKEJBU0VfQUREUiwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgaHVnZSBwYWdlXFxcXG5cXFwiKTtcXG4gXFx0XFx0bWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbiBcXG5AQCAtODgxLDcgKzk2OCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2NvbXBvdW5kX2V4dHJlbWUoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXFxuIFxcbiBcXHRvcHMtXFx1MDAzZWNsZWFudXBfYXJlYShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuLVxcdGlmICghb3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRpZiAoIW9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtOTAzLDcgKzk5MCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuIFxcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiQWxsb2NhdGUgc21hbGwgcGFnZS4uLlxcXCIpO1xcbiBcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIHBhZ2Vfc2l6ZSk7XFxuLVxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTkxMSw3ICs5OTgsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mb3JrKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU2hhcmUgc21hbGwgcGFnZSBvdmVyIGZvcmsoKS4uLlxcXCIpO1xcbiBcXHRpZiAoIWZvcmsoKSkge1xcbiBcXHRcXHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC05MjksNyArMTAxNiw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuIFxcdGV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7XFxuIFxcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiQ2hlY2sgaWYgcGFyZW50IHN0aWxsIGhhcyBzbWFsbCBwYWdlLi4uXFxcIik7XFxuLVxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTk0Nyw3ICsxMDM0LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIlNoYXJlIGh1Z2UgcGFnZSBvdmVyIGZvcmsoKS4uLlxcXCIpO1xcbiBcXHRpZiAoIWZvcmsoKSkge1xcbiBcXHRcXHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC05NTUsNyArMTA0Miw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJTcGxpdCBodWdlIHBhZ2UgUE1EIGluIGNoaWxkIHByb2Nlc3MuLi5cXFwiKTtcXG4gXFx0XFx0bWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuIFxcdFxcdG1hZHZpc2UocCwgaHBhZ2VfcG1kX3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXFxuK1xcdFxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTk3Niw3ICsxMDYzLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cXG4gXFx0ZXhpdF9zdGF0dXMgPSBXRVhJVFNUQVRVUyh3c3RhdHVzKTtcXG4gXFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbi1cXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC05OTUsNyArMTA4Miw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIlNoYXJlIGh1Z2UgcGFnZSBvdmVyIGZvcmsoKS4uLlxcXCIpO1xcbiBcXHRpZiAoIWZvcmsoKSkge1xcbiBcXHRcXHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDEpKVxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC0xMDAzLDcgKzEwOTAsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uXFxcIixcXG4gXFx0XFx0XFx0XFx0aHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSwgaHBhZ2VfcG1kX25yKTtcXG4gXFx0XFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCAoaHBhZ2VfcG1kX25yIC0gbWF4X3B0ZXNfc2hhcmVkIC0gMSkgKiBwYWdlX3NpemUpO1xcbi1cXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIDApKVxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXFxuIFxcdFxcdFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZmFpbChcXFwiRmFpbFxcXCIpO1xcbkBAIC0xMDE2LDcgKzExMDMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXFxuIFxcdFxcdFxcdCAgICAgICBocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQsIGhwYWdlX3BtZF9ucik7XFxuIFxcdFxcdFxcdG9wcy1cXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCkgKlxcbiBcXHRcXHRcXHRcXHQgICAgcGFnZV9zaXplKTtcXG4tXFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcXG4rXFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxcbiBcXHRcXHRcXHRcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdGZhaWwoXFxcIkZhaWxcXFwiKTtcXG5AQCAtMTAzNCw3ICsxMTIxLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xcbiBcXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xcbiBcXG4gXFx0a3NmdF9wcmludF9tc2coXFxcIkNoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uXFxcIik7XFxuLVxcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXFxuK1xcdGlmIChvcHMtXFx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcXG4gXFx0XFx0c3VjY2VzcyhcXFwiT0tcXFwiKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmYWlsKFxcXCJGYWlsXFxcIik7XFxuQEAgLTEwNzUsOCArMTE2Miw4IEBAIHN0YXRpYyB2b2lkIG1hZHZpc2VfcmV0cmFjdGVkX3BhZ2VfdGFibGVzKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLFxcbiBcXHRvcHMtXFx1MDAzZWZhdWx0KHAsIDAsIHNpemUpO1xcbiBcXG4gXFx0LyogTGV0IGtodWdlcGFnZWQgY29sbGFwc2UgYW5kIGxlYXZlIHBtZCBjbGVhcmVkICovXFxuLVxcdGlmICh3YWl0X2Zvcl9zY2FuKFxcXCJDb2xsYXBzZSBhbmQgbGVhdmUgUE1EIGNsZWFyZWRcXFwiLCBwLCBucl9ocGFnZXMsXFxuLVxcdFxcdFxcdCAgb3BzKSkge1xcbitcXHRpZiAod2FpdF9mb3Jfc2NhbihcXFwiQ29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkXFxcIiwgcCwgc2l6ZSwgbnJfaHBhZ2VzLFxcbitcXHRcXHRcXHQgIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xcbiBcXHRcXHRmYWlsKFxcXCJUaW1lb3V0XFxcIik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbkBAIC0xMDkyLDcgKzExNzksNyBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxcbiB7XFxuIFxcdGZwcmludGYoc3RkZXJyLCBcXFwiXFxcXG5Vc2FnZTogLi9raHVnZXBhZ2VkIFtPUFRJT05TXSBcXHUwMDNjdGVzdCB0eXBlXFx1MDAzZSBbZGlyXVxcXFxuXFxcXG5cXFwiKTtcXG4gXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcdFxcdTAwM2N0ZXN0IHR5cGVcXHUwMDNlXFxcXHQ6IFxcdTAwM2Njb250ZXh0XFx1MDAzZTpcXHUwMDNjbWVtX3R5cGVcXHUwMDNlXFxcXG5cXFwiKTtcXG4tXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJcXFxcdFxcdTAwM2Njb250ZXh0XFx1MDAzZVxcXFx0OiBbYWxsfGtodWdlcGFnZWR8bWFkdmlzZV1cXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFx0XFx1MDAzY2NvbnRleHRcXHUwMDNlXFxcXHQ6IFthbGx8a2h1Z2VwYWdlZHxtdGhwX2todWdlcGFnZWR8bWFkdmlzZV1cXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFx0XFx1MDAzY21lbV90eXBlXFx1MDAzZVxcXFx0OiBbYWxsfGFub258ZmlsZXxzaG1lbV1cXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcXHRcXFxcXFxcImZpbGUsYWxsXFxcXFxcXCIgbWVtX3R5cGUgcmVxdWlyZXMgW2Rpcl0gYXJndW1lbnRcXFxcblxcXCIpO1xcbiBcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlxcXFxuXFxcXHRcXFxcXFxcImZpbGUsYWxsXFxcXFxcXCIgbWVtX3R5cGUgcmVxdWlyZXMgYSBmaWxlIHN5c3RlbVxcXFxuXFxcIik7XFxuQEAgLTExMDMsNiArMTE5MCw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXFxuIFxcdGZwcmludGYoc3RkZXJyLFxcdFxcXCJcXFxcdFxcXFx0LWg6IFRoaXMgaGVscCBtZXNzYWdlLlxcXFxuXFxcIik7XFxuIFxcdGZwcmludGYoc3RkZXJyLFxcdFxcXCJcXFxcdFxcXFx0LXM6IG1USFAgc2l6ZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxcXG5cXFwiKTtcXG4gXFx0ZnByaW50ZihzdGRlcnIsXFx0XFxcIlxcXFx0XFxcXHQgICAgRGVmYXVsdHMgdG8gMC4gVXNlIHRoaXMgc2l6ZSBmb3IgYW5vbiBvciBzaG1lbSBhbGxvY2F0aW9ucy5cXFxcblxcXCIpO1xcbitcXHRmcHJpbnRmKHN0ZGVycixcXHRcXFwiXFxcXHRcXFxcdC1jOiBjb2xsYXBzZSBvcmRlciBmb3IgbVRIUCBjb2xsYXBzZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxcXG5cXFwiKTtcXG4gXFx0ZXhpdCgxKTtcXG4gfVxcbiBcXG5AQCAtMTExMiwxMSArMTIwMCwxNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRjaGFyICpidWY7XFxuIFxcdGNvbnN0IGNoYXIgKnRva2VuO1xcbiBcXG4tXFx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcInM6aFxcXCIpKSAhPSAtMSkge1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiczpjOmhcXFwiKSkgIT0gLTEpIHtcXG4gXFx0XFx0c3dpdGNoIChvcHQpIHtcXG4gXFx0XFx0Y2FzZSAncyc6XFxuIFxcdFxcdFxcdGFub25fb3JkZXIgPSBhdG9pKG9wdGFyZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdjJzpcXG4rXFx0XFx0XFx0Y29sbGFwc2Vfb3JkZXIgPSBhdG9pKG9wdGFyZyk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdoJzpcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0dXNhZ2UoKTtcXG5AQCAtMTE0Miw2ICsxMjMzLDEwIEBAIHN0YXRpYyB2b2lkIHBhcnNlX3Rlc3RfdHlwZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdG1hZHZpc2VfY29udGV4dCA9ICBcXHUwMDI2X19tYWR2aXNlX2NvbnRleHQ7XFxuIFxcdH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgXFxcImtodWdlcGFnZWRcXFwiKSkge1xcbiBcXHRcXHRraHVnZXBhZ2VkX2NvbnRleHQgPSAgXFx1MDAyNl9fa2h1Z2VwYWdlZF9jb250ZXh0O1xcbitcXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFxcXCJtdGhwX2todWdlcGFnZWRcXFwiKSkge1xcbitcXHRcXHRtdGhwX2todWdlcGFnZWRfY29udGV4dCA9ICBcXHUwMDI2X19tdGhwX2todWdlcGFnZWRfY29udGV4dDtcXG4rXFx0XFx0aWYgKGNvbGxhcHNlX29yZGVyIFxcdTAwM2M9IDAgfHwgY29sbGFwc2Vfb3JkZXIgXFx1MDAzZT0gaHBhZ2VfcG1kX29yZGVyKVxcbitcXHRcXHRcXHR1c2FnZSgpO1xcbiBcXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFxcXCJtYWR2aXNlXFxcIikpIHtcXG4gXFx0XFx0bWFkdmlzZV9jb250ZXh0ID0gIFxcdTAwMjZfX21hZHZpc2VfY29udGV4dDtcXG4gXFx0fSBlbHNlIHtcXG5AQCAtMTIwNyw3ICsxMzAyLDYgQEAgc3RhdGljIGludCBucl90ZXN0X2Nhc2VzO1xcbiBcXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiB7XFxuLVxcdGludCBocGFnZV9wbWRfb3JkZXI7XFxuIFxcdHN0cnVjdCB0aHBfc2V0dGluZ3MgZGVmYXVsdF9zZXR0aW5ncyA9IHtcXG4gXFx0XFx0LnRocF9lbmFibGVkID0gVEhQX01BRFZJU0UsXFxuIFxcdFxcdC50aHBfZGVmcmFnID0gVEhQX0RFRlJBR19BTFdBWVMsXFxuQEAgLTEyMzMsMTAgKzEzMjcsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdGlmICghdGhwX2lzX2VuYWJsZWQoKSlcXG4gXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gXFxuLVxcdHBhcnNlX3Rlc3RfdHlwZShhcmdjLCBhcmd2KTtcXG4tXFxuLVxcdHNldGJ1ZihzdGRvdXQsIE5VTEwpO1xcbi1cXG4gXFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4gXFx0aHBhZ2VfcG1kX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbiBcXHRpZiAoIWhwYWdlX3BtZF9zaXplKVxcbkBAIC0xMjQ0LDYgKzEzMzQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRocGFnZV9wbWRfbnIgPSBocGFnZV9wbWRfc2l6ZSAvIHBhZ2Vfc2l6ZTtcXG4gXFx0aHBhZ2VfcG1kX29yZGVyID0gX19idWlsdGluX2N0eihocGFnZV9wbWRfbnIpO1xcbiBcXG4rXFx0cGFyc2VfdGVzdF90eXBlKGFyZ2MsIGFyZ3YpO1xcbitcXG4rXFx0c2V0YnVmKHN0ZG91dCwgTlVMTCk7XFxuK1xcbiBcXHRkZWZhdWx0X3NldHRpbmdzLmtodWdlcGFnZWQubWF4X3B0ZXNfbm9uZSA9IGhwYWdlX3BtZF9uciAtIDE7XFxuIFxcdGRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19zd2FwID0gaHBhZ2VfcG1kX25yIC8gODtcXG4gXFx0ZGVmYXVsdF9zZXR0aW5ncy5raHVnZXBhZ2VkLm1heF9wdGVzX3NoYXJlZCA9IGhwYWdlX3BtZF9uciAvIDI7XFxuQEAgLTEyNjEsNiArMTM1NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0VEVTVChjb2xsYXBzZV9mdWxsLCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XFxuIFxcdFRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKTtcXG4gXFx0VEVTVChjb2xsYXBzZV9mdWxsLCBraHVnZXBhZ2VkX2NvbnRleHQsIHNobWVtX29wcyk7XFxuK1xcdFRFU1QoY29sbGFwc2VfZnVsbCwgbXRocF9raHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcXG4gXFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIGFub25fb3BzKTtcXG4gXFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XFxuIFxcdFRFU1QoY29sbGFwc2VfZnVsbCwgbWFkdmlzZV9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xcbkBAIC0xMjY4LDggKzEzNjMsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgc2htZW1fb3BzKTtcXG4gXFxuIFxcdFRFU1QoY29sbGFwc2VfZW1wdHksIGtodWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xcbitcXHRURVNUKGNvbGxhcHNlX2VtcHR5LCBtdGhwX2todWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xcbiBcXHRURVNUKGNvbGxhcHNlX2VtcHR5LCBtYWR2aXNlX2NvbnRleHQsIGFub25fb3BzKTtcXG4gXFxuK1xcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX210aHAsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XFxuK1xcbiBcXHRURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xcbiBcXHRURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF9vbmx5X2ZpbGVfb3BzKTtcXG4gXFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV9yZWFkX29wcyk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbmluZGV4IDFiMmRmZmNjOTk5YjAuLmNmZDE5ODczMzljMTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuQEAgLTEwODUsNyArMTA4NSw3IEBAIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3dyaXR0ZW5fdGVzdChjb25zdCBjaGFyICpuYW1lLCBjaGFyICptZW0sIGxvbmcgc2l6ZSxcXG4gXFx0bWVtc2V0KG1lbSwgMSwgc2l6ZSk7XFxuIFxcdGlmICh1c2VfdGhwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAobWFkdmlzZShtZW0sIHNpemUsIE1BRFZfQ09MTEFQU0UpIHx8XFxuLVxcdCAgICAgIWNoZWNrX2h1Z2VfYW5vbihtZW0sIHNpemUgLyBocGFnZV9zaXplLCBocGFnZV9zaXplKSkpIHtcXG4rXFx0ICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkge1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIiVzIGNvdWxkIG5vdCBmb3JtIGEgVEhQXFxcXG5cXFwiLCBuYW1lKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG5pbmRleCBkOGQ5ZDFkZTU3YjhiLi44MmM2ZTk2ZWE2ZWIzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIGludCB0ZXN0X21tYXBfdGhwKGVudW0gdGhwX2NvbGxhcHNlX3R5cGUgbWFkdmlzZV9idWYsIHNpemVfdCBwbWRzaXplKVxcbiBcXHQvKiBIQUNLOiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNlcGFyYXRlIFZNQSB0aGF0IHdlIGNhbiBjaGVjayByZWxpYWJseS4gKi9cXG4gXFx0bXByb3RlY3QobWVtLCBwbWRzaXplLCBQUk9UX1JFQUQpO1xcbiBcXG4tXFx0cmV0ID0gY2hlY2tfaHVnZV9hbm9uKG1lbSwgMSwgcG1kc2l6ZSk7XFxuK1xcdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIHBtZHNpemUsIDEsIHBtZHNpemUpO1xcbiBcXHRtdW5tYXAobW1hcF9tZW0sIG1tYXBfc2l6ZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbmluZGV4IDY4N2QxMTVlM2JkODAuLmQwOWY5ZjZhMzg0ZWUgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbkBAIC00MTAsNiArNDEwLDggQEAgQ0FURUdPUlk9XFxcInRocFxcXCIgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIGFsbDpzaG1lbVxcbiBcXG4gQ0FURUdPUlk9XFxcInRocFxcXCIgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIC1zIDQgYWxsOnNobWVtXFxuIFxcbitDQVRFR09SWT1cXFwidGhwXFxcIiBydW5fdGVzdCAuL2todWdlcGFnZWQgLWMgNCBtdGhwX2todWdlcGFnZWQ6YW5vblxcbitcXG4gIyBUcnkgdG8gY3JlYXRlIFhGUyBpZiBub3QgcHJvdmlkZWRcXG4gaWYgWyAteiBcXFwiJHtTUExJVF9IVUdFX1BBR0VfVEVTVF9YRlNfUEFUSH1cXFwiIF07IHRoZW5cXG4gICAgIGlmIHRlc3Rfc2VsZWN0ZWQgXFxcInRocFxcXCI7IHRoZW5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXFxuaW5kZXggZmIxODY0YTY4ZTFjNi4uZTE5OGZhY2Y3OGJiNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5AQCAtMTAzLDcgKzEwMyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaHVnZXBhZ2UoaW50IHBhZ2VtYXBfZmQsIGludCBwYWdlc2l6ZSlcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGhwYWdlX2xlbjsgaSsrKVxcbiBcXHRcXHRtYXBbaV0gPSAoY2hhcilpO1xcbiBcXG4tXFx0aWYgKGNoZWNrX2h1Z2VfYW5vbihtYXAsIDEsIGhwYWdlX2xlbikpIHtcXG4rXFx0aWYgKGNoZWNrX2h1Z2VfYW5vbihtYXAsIGhwYWdlX2xlbiwgMSwgaHBhZ2VfbGVuKSkge1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXFxcIlRlc3QgJXMgaHVnZSBwYWdlIGFsbG9jYXRpb25cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFxuIFxcdFxcdGNsZWFyX3NvZnRkaXJ0eSgpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbmluZGV4IDMyYjk5MTQ3MmY3NDQuLjg2YTYwMzY5MjgyNjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG5AQCAtMTA0LDEyOSArMTA0LDYgQEAgc3RhdGljIGJvb2wgaXNfYmFja2VkX2J5X2ZvbGlvKGNoYXIgKnZhZGRyLCBpbnQgb3JkZXIsIGludCBwYWdlbWFwX2ZkLFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxcbi1cXHRcXHR1aW50NjRfdCAqZmxhZ3MpXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuLVxcbi1cXHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpO1xcbi1cXG4tXFx0Lyogbm9uLXByZXNlbnQgUEZOICovXFxuLVxcdGlmIChwZm4gPT0gLTFVTClcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcbi1cXHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIGZsYWdzKSlcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmRcXG4tICogZm9saW8gb3JkZXJzXFxuLSAqXFxuLSAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHJcXG4tICogQGxlbjogcmFuZ2UgbGVuZ3RoXFxuLSAqIEBwYWdlbWFwX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvcGFnZW1hcFxcbi0gKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3NcXG4tICogQG9yZGVyczogb3V0cHV0IGZvbGlvIG9yZGVyIGFycmF5XFxuLSAqIEBucl9vcmRlcnM6IGZvbGlvIG9yZGVyIGFycmF5IHNpemVcXG4tICpcXG4tICogZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycygpIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIGNoZWNrXFxuLSAqIGFsbCBmb2xpb3Mgd2l0aGluIHRoZSByYW5nZSBhbmQgcmVjb3JkIHRoZWlyIG9yZGVycy4gQWxsIG9yZGVyLTAgcGFnZXMgd2lsbFxcbi0gKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC5cXG4tICpcXG4tICogTk9URTogdGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgZm9saW8gb3JkZXJzIGFmdGVyIGEgc3BsaXQgaXMgcGVyZm9ybWVkLFxcbi0gKiBzbyBpdCBhc3N1bWVzIFt2YWRkcl9zdGFydCwgbGVuKSBmdWxseSBtYXBzIHRvIGFmdGVyLXNwbGl0IGZvbGlvcyB3aXRoaW4gdGhhdFxcbi0gKiByYW5nZS5cXG4tICpcXG4tICogUmV0dXJuOiAwIC0gbm8gZXJyb3IsIC0xIC0gdW5oYW5kbGVkIGNhc2VzXFxuLSAqL1xcbi1zdGF0aWMgaW50IGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXFxuLVxcdFxcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKVxcbi17XFxuLVxcdHVpbnQ2NF90IHBhZ2VfZmxhZ3MgPSAwO1xcbi1cXHRpbnQgY3VyX29yZGVyID0gLTE7XFxuLVxcdGNoYXIgKnZhZGRyO1xcbi1cXG4tXFx0aWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSlcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbi1cXHRpZiAoIW9yZGVycylcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbi1cXHRpZiAobnJfb3JkZXJzIFxcdTAwM2M9IDApXFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFxuLVxcdGZvciAodmFkZHIgPSB2YWRkcl9zdGFydDsgdmFkZHIgXFx1MDAzYyB2YWRkcl9zdGFydCArIGxlbjspIHtcXG4tXFx0XFx0Y2hhciAqbmV4dF9mb2xpb192YWRkcjtcXG4tXFx0XFx0aW50IHN0YXR1cztcXG4tXFxuLVxcdFxcdHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQodmFkZHIsIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZwYWdlX2ZsYWdzKTtcXG4tXFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiAtMTtcXG4tXFxuLVxcdFxcdC8qIHNraXAgbm9uIHByZXNlbnQgdmFkZHIgKi9cXG4tXFx0XFx0aWYgKHN0YXR1cyA9PSAxKSB7XFxuLVxcdFxcdFxcdHZhZGRyICs9IHBzaXplKCk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHQvKiBhbGwgb3JkZXItMCBwYWdlcyB3aXRoIHBvc3NpYmxlIGZhbHNlIHBvc3RpdmUgKG5vbiBmb2xpbykgKi9cXG4tXFx0XFx0aWYgKCEocGFnZV9mbGFncyBcXHUwMDI2IChLUEZfQ09NUE9VTkRfSEVBRCB8IEtQRl9DT01QT1VORF9UQUlMKSkpIHtcXG4tXFx0XFx0XFx0b3JkZXJzWzBdKys7XFxuLVxcdFxcdFxcdHZhZGRyICs9IHBzaXplKCk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHQvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi9cXG4tXFx0XFx0aWYgKCEocGFnZV9mbGFncyBcXHUwMDI2IEtQRl9USFApKSB7XFxuLVxcdFxcdFxcdHZhZGRyICs9IHBzaXplKCk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHQvKiB2cG4gcG9pbnRzIHRvIHBhcnQgb2YgYSBUSFAgYXQgdGhpcyBwb2ludCAqL1xcbi1cXHRcXHRpZiAocGFnZV9mbGFncyBcXHUwMDI2IEtQRl9DT01QT1VORF9IRUFEKVxcbi1cXHRcXHRcXHRjdXJfb3JkZXIgPSAxO1xcbi1cXHRcXHRlbHNlIHtcXG4tXFx0XFx0XFx0dmFkZHIgKz0gcHNpemUoKTtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciArICgxVUwgXFx1MDAzY1xcdTAwM2MgKGN1cl9vcmRlciArIHBzaGlmdCgpKSk7XFxuLVxcbi1cXHRcXHRpZiAobmV4dF9mb2xpb192YWRkciBcXHUwMDNlPSB2YWRkcl9zdGFydCArIGxlbilcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRcXHR3aGlsZSAoKHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQobmV4dF9mb2xpb192YWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZwYWdlX2ZsYWdzKSkgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBub24gcHJlc2VudCB2YWRkciwgbmV4dCBjb21wb3VuZCBoZWFkIHBhZ2UsIG9yXFxuLVxcdFxcdFxcdCAqIG9yZGVyLTAgcGFnZVxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKHN0YXR1cyA9PSAxIHx8XFxuLVxcdFxcdFxcdCAgICAocGFnZV9mbGFncyBcXHUwMDI2IEtQRl9DT01QT1VORF9IRUFEKSB8fFxcbi1cXHRcXHRcXHQgICAgIShwYWdlX2ZsYWdzIFxcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAoY3VyX29yZGVyIFxcdTAwM2MgbnJfb3JkZXJzKSB7XFxuLVxcdFxcdFxcdFxcdFxcdG9yZGVyc1tjdXJfb3JkZXJdKys7XFxuLVxcdFxcdFxcdFxcdFxcdGN1cl9vcmRlciA9IC0xO1xcbi1cXHRcXHRcXHRcXHRcXHR2YWRkciA9IG5leHRfZm9saW9fdmFkZHI7XFxuLVxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdGN1cl9vcmRlcisrO1xcbi1cXHRcXHRcXHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIChjdXJfb3JkZXIgKyBwc2hpZnQoKSkpO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4tXFx0fVxcbi1cXHRpZiAoY3VyX29yZGVyIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBjdXJfb3JkZXIgXFx1MDAzYyBucl9vcmRlcnMpXFxuLVxcdFxcdG9yZGVyc1tjdXJfb3JkZXJdKys7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcXG4gXFx0XFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXFxuIHtcXG5AQCAtMjQwLDcgKzExNyw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHZhZGRyX29yZGVyc1xcXCIpO1xcbiBcXG4gXFx0bWVtc2V0KHZhZGRyX29yZGVycywgMCwgc2l6ZW9mKGludCkgKiBucl9vcmRlcnMpO1xcbi1cXHRzdGF0dXMgPSBnYXRoZXJfYWZ0ZXJfc3BsaXRfZm9saW9fb3JkZXJzKHZhZGRyX3N0YXJ0LCBsZW4sIHBhZ2VtYXBfZmQsXFxuK1xcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnModmFkZHJfc3RhcnQsIGxlbiwgcGFnZW1hcF9mZCxcXG4gXFx0XFx0XFx0XFx0ICAgICBrcGFnZWZsYWdzX2ZkLCB2YWRkcl9vcmRlcnMsIG5yX29yZGVycyk7XFxuIFxcdGlmIChzdGF0dXMpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZ2F0aGVyIGZvbGlvIGluZm8gZmFpbGVkXFxcXG5cXFwiKTtcXG5AQCAtMjk2LDcgKzE3Myw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXFxuIFxcdHVuc2lnbmVkIGxvbmcgcnNzX2Fub25fYmVmb3JlLCByc3NfYW5vbl9hZnRlcjtcXG4gXFx0c2l6ZV90IGk7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzLCBwbWRfcGFnZXNpemUpKVxcbitcXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzICogcG1kX3BhZ2VzaXplLCBucl9ocGFnZXMsIHBtZF9wYWdlc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiTm8gVEhQIGlzIGFsbG9jYXRlZFxcXFxuXFxcIik7XFxuIFxcbiBcXHRyc3NfYW5vbl9iZWZvcmUgPSByc3NfYW5vbigpO1xcbkBAIC0zMTEsNyArMTg4LDcgQEAgc3RhdGljIHZvaWQgdmVyaWZ5X3Jzc19hbm9uX3NwbGl0X2h1Z2VfcGFnZV9hbGxfemVyb2VzKGNoYXIgKm9uZV9wYWdlLCBpbnQgbnJfaHBcXG4gXFx0XFx0aWYgKG9uZV9wYWdlW2ldICE9IChjaGFyKTApXFxuIFxcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJWxkIGJ5dGUgY29ycnVwdGVkXFxcXG5cXFwiLCBpKTtcXG4gXFxuLVxcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCAwLCBwbWRfcGFnZXNpemUpKVxcbitcXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzICogcG1kX3BhZ2VzaXplLCAwLCBwbWRfcGFnZXNpemUpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlN0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxcXG5cXFwiKTtcXG4gXFxuIFxcdHJzc19hbm9uX2FmdGVyID0gcnNzX2Fub24oKTtcXG5AQCAtMzQ3LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3BtZF90aHBfdG9fb3JkZXIoaW50IG9yZGVyKVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuOyBpKyspXFxuIFxcdFxcdG9uZV9wYWdlW2ldID0gKGNoYXIpaTtcXG4gXFxuLVxcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCA0LCBwbWRfcGFnZXNpemUpKVxcbitcXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgNCwgcG1kX3BhZ2VzaXplKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJObyBUSFAgaXMgYWxsb2NhdGVkXFxcXG5cXFwiKTtcXG4gXFxuIFxcdC8qIHNwbGl0IGFsbCBUSFBzICovXFxuQEAgLTM2Niw3ICsyNDMsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcXG4gXFx0XFx0XFx0XFx0XFx0ICAgKHBtZF9vcmRlciArIDEpKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJVbmV4cGVjdGVkIFRIUCBzcGxpdFxcXFxuXFxcIik7XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcXG4rXFx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDQgKiBwbWRfcGFnZXNpemUsIDAsIHBtZF9wYWdlc2l6ZSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiU3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcXFxcblxcXCIpO1xcbiBcXG4gXFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFxcXCJTcGxpdCBodWdlIHBhZ2VzIHRvIG9yZGVyICVkIHN1Y2Nlc3NmdWxcXFxcblxcXCIsIG9yZGVyKTtcXG5AQCAtMzkzLDcgKzI3MCw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3B0ZV9tYXBwZWRfdGhwKHZvaWQpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0aHBfYXJlYV9zaXplOyBpKyspXFxuIFxcdFxcdHRocF9hcmVhW2ldID0gKGNoYXIpaTtcXG4gXFxuLVxcdGlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7XFxuK1xcdGlmICghY2hlY2tfaHVnZV9hbm9uKHRocF9hcmVhLCBucl90aHBzICogcG1kX3BhZ2VzaXplLCBucl90aHBzLCBwbWRfcGFnZXNpemUpKSB7XFxuIFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiTm90IGFsbCBUSFBzIGFsbG9jYXRlZFxcXFxuXFxcIik7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuQEAgLTY1Nyw3ICs1MzQsNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9wYWdlY2FjaGVfdGhwX2FuZF9mZChjb25zdCBjaGFyICp0ZXN0ZmlsZSwgc2l6ZV90IGZkX3NpemUsXFxuIFxcbiBcXHRmb3JjZV9yZWFkX3BhZ2VzKCphZGRyLCBmZF9zaXplIC8gcG1kX3BhZ2VzaXplLCBwbWRfcGFnZXNpemUpO1xcbiBcXG4tXFx0aWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHtcXG4rXFx0aWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHtcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIk5vIGxhcmdlIHBhZ2VjYWNoZSBmb2xpbyBnZW5lcmF0ZWQsIHBsZWFzZSBwcm92aWRlIGEgZmlsZXN5c3RlbSBzdXBwb3J0aW5nIGxhcmdlIGZvbGlvXFxcXG5cXFwiKTtcXG4gXFx0XFx0bXVubWFwKCphZGRyLCBmZF9zaXplKTtcXG4gXFx0XFx0Y2xvc2UoKmZkKTtcXG5AQCAtNzM1LDcgKzYxMiw3IEBAIHN0YXRpYyB2b2lkIHNwbGl0X3RocF9pbl9wYWdlY2FjaGVfdG9fb3JkZXJfYXQoc2l6ZV90IGZkX3NpemUsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7XFxuK1xcdGlmICghY2hlY2tfaHVnZV9maWxlKGFkZHIsIGZkX3NpemUsIDAsIHBtZF9wYWdlc2l6ZSkpIHtcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlN0aWxsIEZpbGVQbWRNYXBwZWQgbm90IHNwbGl0XFxcXG5cXFwiKTtcXG4gXFx0XFx0ZXJyID0gRVhJVF9GQUlMVVJFO1xcbiBcXHRcXHRnb3RvIG91dDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcXG5pbmRleCBmNDhmNWQ0NTk0YWIwLi5mYTQ2YzhjM2E0MzQyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXFxuQEAgLTE5NCw3ICsxOTQsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV9hbGlhc19tYXBwaW5nKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgX191NjQgKnN0YXJ0LFxcbiBcXG4gc3RhdGljIHZvaWQgc2htZW1fY2hlY2tfcG1kX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB2b2lkICpwLCBpbnQgZXhwZWN0X25yX2hwYWdlcylcXG4ge1xcbi1cXHRpZiAoIWNoZWNrX2h1Z2Vfc2htZW0oZ29wdHMtXFx1MDAzZWFyZWFfZHN0X2FsaWFzLCBleHBlY3RfbnJfaHBhZ2VzLFxcbitcXHR1bnNpZ25lZCBsb25nIHNpemUgPSBleHBlY3RfbnJfaHBhZ2VzICogcmVhZF9wbWRfcGFnZXNpemUoKTtcXG4rXFxuK1xcdGlmICghY2hlY2tfaHVnZV9zaG1lbShnb3B0cy1cXHUwMDNlYXJlYV9kc3RfYWxpYXMsIHNpemUsIGV4cGVjdF9ucl9ocGFnZXMsXFxuIFxcdFxcdFxcdCAgICAgIHJlYWRfcG1kX3BhZ2VzaXplKCkpKVxcbiBcXHRcXHRlcnIoXFxcIkRpZCBub3QgZmluZCBleHBlY3RlZCAlZCBudW1iZXIgb2YgaHVnZXBhZ2VzXFxcIixcXG4gXFx0XFx0ICAgIGV4cGVjdF9ucl9ocGFnZXMpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5pbmRleCBlZjFlYTExOTgxYTc0Li5hNGZmYWEwY2E2ZmExIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbkBAIC0xNSw2ICsxNSwxMCBAQFxcbiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3NtYXBzXFxcIlxcbiAjZGVmaW5lIFNUQVRVU19GSUxFX1BBVEggXFxcIi9wcm9jL3NlbGYvc3RhdHVzXFxcIlxcbiAjZGVmaW5lIE1BWF9MSU5FX0xFTkdUSCA1MDBcXG4rI2RlZmluZSBQQUdFTUFQX1BBVEggXFxcIi9wcm9jL3NlbGYvcGFnZW1hcFxcXCJcXG4rI2RlZmluZSBLUEFHRUZMQUdTX1BBVEggXFxcIi9wcm9jL2twYWdlZmxhZ3NcXFwiXFxuKyNkZWZpbmUgR0VUX09SREVSKG5yX3BhZ2VzKSAgICAoMzEgLSBfX2J1aWx0aW5fY2x6KG5yX3BhZ2VzKSlcXG4rI2RlZmluZSBOUl9PUkRFUlMgMjBcXG4gXFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcXG5AQCAtMTk0LDYgKzE5OCwxMjUgQEAgdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKVxcbiBcXHRyZXR1cm4gcnNzX2Fub247XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxcbitcXHRcXHR1aW50NjRfdCAqZmxhZ3MpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuK1xcbitcXHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpO1xcbitcXG4rXFx0Lyogbm9uLXByZXNlbnQgUEZOICovXFxuK1xcdGlmIChwZm4gPT0gLTFVTClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIGZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIGdhdGhlcl9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmRcXG4rICogZm9saW8gb3JkZXJzXFxuKyAqXFxuKyAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHJcXG4rICogQGxlbjogcmFuZ2UgbGVuZ3RoXFxuKyAqIEBwYWdlbWFwX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvcGFnZW1hcFxcbisgKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3NcXG4rICogQG9yZGVyczogb3V0cHV0IGZvbGlvIG9yZGVyIGFycmF5XFxuKyAqIEBucl9vcmRlcnM6IGZvbGlvIG9yZGVyIGFycmF5IHNpemVcXG4rICpcXG4rICogZ2F0aGVyX2ZvbGlvX29yZGVycygpIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIGNoZWNrXFxuKyAqIGFsbCBmb2xpb3Mgd2l0aGluIHRoZSByYW5nZSBhbmQgcmVjb3JkIHRoZWlyIG9yZGVycy4gQWxsIG9yZGVyLTAgcGFnZXMgd2lsbFxcbisgKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC5cXG4rICpcXG4rICogUmV0dXJuOiAwIC0gbm8gZXJyb3IsIC0xIC0gdW5oYW5kbGVkIGNhc2VzXFxuKyAqL1xcbitpbnQgZ2F0aGVyX2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcXG4rXFx0XFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXFxuK3tcXG4rXFx0dWludDY0X3QgcGFnZV9mbGFncyA9IDA7XFxuK1xcdGludCBjdXJfb3JkZXIgPSAtMTtcXG4rXFx0Y2hhciAqdmFkZHI7XFxuK1xcbitcXHRpZiAocGFnZW1hcF9mZCA9PSAtMSB8fCBrcGFnZWZsYWdzX2ZkID09IC0xKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmICghb3JkZXJzKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmIChucl9vcmRlcnMgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0Zm9yICh2YWRkciA9IHZhZGRyX3N0YXJ0OyB2YWRkciBcXHUwMDNjIHZhZGRyX3N0YXJ0ICsgbGVuOykge1xcbitcXHRcXHRjaGFyICpuZXh0X2ZvbGlvX3ZhZGRyO1xcbitcXHRcXHRpbnQgc3RhdHVzO1xcbitcXG4rXFx0XFx0c3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldCh2YWRkciwgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnBhZ2VfZmxhZ3MpO1xcbitcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0XFx0Lyogc2tpcCBub24gcHJlc2VudCB2YWRkciAqL1xcbitcXHRcXHRpZiAoc3RhdHVzID09IDEpIHtcXG4rXFx0XFx0XFx0dmFkZHIgKz0gcHNpemUoKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIGFsbCBvcmRlci0wIHBhZ2VzIHdpdGggcG9zc2libGUgZmFsc2UgcG9zdGl2ZSAobm9uIGZvbGlvKSAqL1xcbitcXHRcXHRpZiAoIShwYWdlX2ZsYWdzIFxcdTAwMjYgKEtQRl9DT01QT1VORF9IRUFEIHwgS1BGX0NPTVBPVU5EX1RBSUwpKSkge1xcbitcXHRcXHRcXHRvcmRlcnNbMF0rKztcXG4rXFx0XFx0XFx0dmFkZHIgKz0gcHNpemUoKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIHNraXAgbm9uIHRocCBjb21wb3VuZCBwYWdlcyAqL1xcbitcXHRcXHRpZiAoIShwYWdlX2ZsYWdzIFxcdTAwMjYgS1BGX1RIUCkpIHtcXG4rXFx0XFx0XFx0dmFkZHIgKz0gcHNpemUoKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovXFxuK1xcdFxcdGlmIChwYWdlX2ZsYWdzIFxcdTAwMjYgS1BGX0NPTVBPVU5EX0hFQUQpXFxuK1xcdFxcdFxcdGN1cl9vcmRlciA9IDE7XFxuK1xcdFxcdGVsc2Uge1xcbitcXHRcXHRcXHR2YWRkciArPSBwc2l6ZSgpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bmV4dF9mb2xpb192YWRkciA9IHZhZGRyICsgKDFVTCBcXHUwMDNjXFx1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcXG4rXFxuK1xcdFxcdGlmIChuZXh0X2ZvbGlvX3ZhZGRyIFxcdTAwM2U9IHZhZGRyX3N0YXJ0ICsgbGVuKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdHdoaWxlICgoc3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldChuZXh0X2ZvbGlvX3ZhZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnBhZ2VfZmxhZ3MpKSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIG5vbiBwcmVzZW50IHZhZGRyLCBuZXh0IGNvbXBvdW5kIGhlYWQgcGFnZSwgb3JcXG4rXFx0XFx0XFx0ICogb3JkZXItMCBwYWdlXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoc3RhdHVzID09IDEgfHxcXG4rXFx0XFx0XFx0ICAgIChwYWdlX2ZsYWdzIFxcdTAwMjYgS1BGX0NPTVBPVU5EX0hFQUQpIHx8XFxuK1xcdFxcdFxcdCAgICAhKHBhZ2VfZmxhZ3MgXFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChjdXJfb3JkZXIgXFx1MDAzYyBucl9vcmRlcnMpIHtcXG4rXFx0XFx0XFx0XFx0XFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcXG4rXFx0XFx0XFx0XFx0XFx0Y3VyX29yZGVyID0gLTE7XFxuK1xcdFxcdFxcdFxcdFxcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0Y3VyX29yZGVyKys7XFxuK1xcdFxcdFxcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciArICgxVUwgXFx1MDAzY1xcdTAwM2MgKGN1cl9vcmRlciArIHBzaGlmdCgpKSk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbitcXHR9XFxuK1xcdGlmIChjdXJfb3JkZXIgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGN1cl9vcmRlciBcXHUwMDNjIG5yX29yZGVycylcXG4rXFx0XFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGNoYXIgKl9fZ2V0X3NtYXBfZW50cnkodm9pZCAqYWRkciwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTIyOSw3ICszNTIsNyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4gXFx0cmV0dXJuIGVudHJ5O1xcbiB9XFxuIFxcbi1ib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxcbitzdGF0aWMgYm9vbCBfX2NoZWNrX3BtZF9odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXFxuIFxcdFxcdCAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4ge1xcbiBcXHRjaGFyIGJ1ZmZlcltNQVhfTElORV9MRU5HVEhdO1xcbkBAIC0yNDcsMTkgKzM3MCw2MiBAQCBib29sIF9fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBjaGFyICpwYXR0ZXJuLCBpbnQgbnJfaHBhZ2VzLFxcbiBcXHRyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSBcXHUwMDNlXFx1MDAzZSAxMCkpO1xcbiB9XFxuIFxcbi1ib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxcbitzdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3Modm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxcbiB7XFxuLVxcdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXFxcIkFub25IdWdlUGFnZXM6IFxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcdGludCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XFxuK1xcdGludCBvcmRlciA9IEdFVF9PUkRFUihocGFnZV9zaXplIC8gcGFnZXNpemUpO1xcbitcXHRpbnQgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZDtcXG4rXFx0aW50IG9yZGVyc1tOUl9PUkRFUlNdLCBzdGF0dXM7XFxuK1xcdGJvb2wgcmV0ID0gZmFsc2U7XFxuK1xcbitcXHRtZW1zZXQob3JkZXJzLCAwLCBzaXplb2YoaW50KSAqIE5SX09SREVSUyk7XFxuK1xcbitcXHRwYWdlbWFwX2ZkID0gb3BlbihQQUdFTUFQX1BBVEgsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKHBhZ2VtYXBfZmQgPT0gLTEpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZCBwYWdlbWFwIGZhaWxcXFxcblxcXCIpO1xcbitcXG4rXFx0a3BhZ2VmbGFnc19mZCA9IG9wZW4oS1BBR0VGTEFHU19QQVRILCBPX1JET05MWSk7XFxuK1xcdGlmIChrcGFnZWZsYWdzX2ZkID09IC0xKSB7XFxuK1xcdFxcdGNsb3NlKHBhZ2VtYXBfZmQpO1xcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWQga3BhZ2VmbGFncyBmYWlsXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0c3RhdHVzID0gZ2F0aGVyX2ZvbGlvX29yZGVycyhhZGRyLCBzaXplLCBwYWdlbWFwX2ZkLFxcbitcXHRcXHRcXHRrcGFnZWZsYWdzX2ZkLCBvcmRlcnMsIE5SX09SREVSUyk7XFxuK1xcdGlmIChzdGF0dXMpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKG9yZGVyc1tvcmRlcl0gPT0gbnJfaHBhZ2VzKVxcbitcXHRcXHRyZXQgPSB0cnVlO1xcbitcXG4rb3V0OlxcbitcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFx0Y2xvc2Uoa3BhZ2VmbGFnc19mZCk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK2Jvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcXG4ge1xcbi1cXHRyZXR1cm4gX19jaGVja19odWdlKGFkZHIsIFxcXCJGaWxlUG1kTWFwcGVkOlxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcdGlmIChocGFnZV9zaXplID09IHJlYWRfcG1kX3BhZ2VzaXplKCkpXFxuK1xcdFxcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFxcXCJBbm9uSHVnZVBhZ2VzOiBcXFwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbitcXG4rXFx0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xcbit9XFxuK1xcbitib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK3tcXG4rXFx0aWYgKGhwYWdlX3NpemUgPT0gcmVhZF9wbWRfcGFnZXNpemUoKSlcXG4rXFx0XFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXFxcIkZpbGVQbWRNYXBwZWQ6XFxcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4rXFxuK1xcdHJldHVybiBjaGVja19sYXJnZV9mb2xpb3MoYWRkciwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4gfVxcbiBcXG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuK2Jvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXFxuIHtcXG4tXFx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcXFwiU2htZW1QbWRNYXBwZWQ6XFxcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcXG4rXFx0aWYgKGhwYWdlX3NpemUgPT0gcmVhZF9wbWRfcGFnZXNpemUoKSlcXG4rXFx0XFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXFxcIlNobWVtUG1kTWFwcGVkOlxcXCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuK1xcbitcXHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XFxuIH1cXG4gXFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbmluZGV4IDc3OTkxNTRiNjdlZWQuLjIwYWYzZTU3NGNkODAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuQEAgLTkwLDExICs5MCwxMyBAQCB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcXG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4gdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XFxuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZCk7XFxuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbi1ib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4tYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbitib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbitib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xcbitib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCk7XFxuIGludCBwYWdlZmxhZ3NfZ2V0KHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQga3BhZ2VmbGFnc19mZCwgdWludDY0X3QgKmZsYWdzKTtcXG4raW50IGdhdGhlcl9mb2xpb19vcmRlcnMoY2hhciAqdmFkZHJfc3RhcnQsIHNpemVfdCBsZW4sXFxuK1xcdFxcdGludCBwYWdlbWFwX2ZkLCBpbnQga3BhZ2VmbGFnc19mZCwgaW50IG9yZGVyc1tdLCBpbnQgbnJfb3JkZXJzKTtcXG4gXFxuIGludCB1ZmZkX3JlZ2lzdGVyKGludCB1ZmZkLCB2b2lkICphZGRyLCB1aW50NjRfdCBsZW4sXFxuIFxcdFxcdCAgYm9vbCBtaXNzLCBib29sIHdwLCBib29sIG1pbm9yKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDU6MzI6NTYuMzE4Mzk1OTMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODY4MjQ4MjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMmRhNmZkNWQ3NTBkNDQ4MjRlYjk2MDgwNDQ3YWJiYTI3YmZmODYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDU6MzI6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA2MzI5ZTM3ZmZmNGM5Li40NWI4NGY3YjM2NGUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyB1aW50NjRfdCBydW5faXRlcmF0aW9uKHZvaWQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUT1RBTF9QQUdFUzsgaSsrKVxuIFx0XHRmaWxsX3BhZ2UobW1hcF9iYXNlLCBpKTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9zaG1lbShtbWFwX2Jhc2UsIE5SX1BNRF9QQUdFLCBwbWRfcGFnZXNpemUpKVxuK1x0aWYgKCFjaGVja19odWdlX3NobWVtKG1tYXBfYmFzZSwgRklMRV9TSVpFLCBOUl9QTURfUEFHRSwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiTm8gc2htZW0gVEhQIGlzIGFsbG9jYXRlZFxcblwiKTtcbiBcbiBcdGlmIChwdGhyZWFkX2JhcnJpZXJfaW5pdChcdTAwMjZjdGwuYmFycmllciwgTlVMTCwgTlVNX1JFQURFUl9USFJFQURTICsgMSkgIT0gMClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDEwZThkZWRjYjA4N2QuLmUyMWE2ZWMzODM2MzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuQEAgLTI2LDkgKzI2LDExIEBAXG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuK3N0YXRpYyBpbnQgaHBhZ2VfcG1kX29yZGVyO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcbiBzdGF0aWMgaW50IGhwYWdlX3BtZF9ucjtcbiBzdGF0aWMgaW50IGFub25fb3JkZXI7XG4rc3RhdGljIGludCBjb2xsYXBzZV9vcmRlcjtcbiBcbiAjZGVmaW5lIFBJRF9TTUFQUyBcIi9wcm9jL3NlbGYvc21hcHNcIlxuICNkZWZpbmUgVEVTVF9GSUxFIFwiY29sbGFwc2VfdGVzdF9maWxlXCJcbkBAIC01MSw3ICs1Myw3IEBAIHN0cnVjdCBtZW1fb3BzIHtcbiBcdHZvaWQgKigqc2V0dXBfYXJlYSkoaW50IG5yX2hwYWdlcyk7XG4gXHR2b2lkICgqY2xlYW51cF9hcmVhKSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFx0dm9pZCAoKmZhdWx0KSh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4tXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcyk7XG4rXHRib29sICgqY2hlY2tfaHVnZSkodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUpO1xuIFx0Y29uc3QgY2hhciAqbmFtZTtcbiB9O1xuIFxuQEAgLTY5LDYgKzcxLDcgQEAgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpraHVnZXBhZ2VkX2NvbnRleHQ7XG4rc3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICptdGhwX2todWdlcGFnZWRfY29udGV4dDtcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKm1hZHZpc2VfY29udGV4dDtcbiBcbiBzdHJ1Y3QgZmlsZV9pbmZvIHtcbkBAIC0yNzYsNyArMjc5LDcgQEAgc3RhdGljIHZvaWQgKmFsbG9jX2hwYWdlKHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXHRrc2Z0X3ByaW50X21zZyhcIkFsbG9jYXRlIGh1Z2UgcGFnZS4uLlwiKTtcbiBcdGlmIChtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwibWFkdmlzZShNQURWX0NPTExBUFNFKVwiKTtcbi1cdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXG4rXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1hZHZpc2UoTUFEVl9DT0xMQVBTRSlcIik7XG4gXHRpZiAobWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1hZHZpc2UoTUFEVl9IVUdFUEFHRSlcIik7XG5AQCAtMzEwLDkgKzMxMywxMCBAQCBzdGF0aWMgdm9pZCBhbm9uX2ZhdWx0KHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFx0ZmlsbF9tZW1vcnkocCwgc3RhcnQsIGVuZCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGFub25fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxuK3N0YXRpYyBib29sIGFub25fY2hlY2tfaHVnZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXG4rXHRcdGludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gY2hlY2tfaHVnZV9hbm9uKGFkZHIsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX3NpemUpO1xuK1x0cmV0dXJuIGNoZWNrX2h1Z2VfYW5vbihhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuQEAgLTQxMiwxMyArNDE2LDE0IEBAIHN0YXRpYyB2b2lkIGZpbGVfZmF1bHRfd3JpdGUodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1hZHZpc2UoTUFEVl9QT1BVTEFURV9XUklURSlcIik7XG4gfVxuIFxuLXN0YXRpYyBib29sIGZpbGVfY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxuK3N0YXRpYyBib29sIGZpbGVfY2hlY2tfaHVnZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsXG4rXHRcdGludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRzd2l0Y2ggKGZpbmZvLnR5cGUpIHtcbiBcdGNhc2UgVk1BX0ZJTEU6XG4tXHRcdHJldHVybiBjaGVja19odWdlX2ZpbGUoYWRkciwgbnJfaHBhZ2VzLCBocGFnZV9wbWRfc2l6ZSk7XG4rXHRcdHJldHVybiBjaGVja19odWdlX2ZpbGUoYWRkciwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiBcdGNhc2UgVk1BX1NITUVNOlxuLVx0XHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcbitcdFx0cmV0dXJuIGNoZWNrX2h1Z2Vfc2htZW0oYWRkciwgc2l6ZSwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTQ0OCw5ICs0NTMsMTAgQEAgc3RhdGljIHZvaWQgc2htZW1fY2xlYW51cF9hcmVhKHZvaWQgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiBcdGNsb3NlKGZpbmZvLmZkKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgc2htZW1fY2hlY2tfaHVnZSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzKVxuK3N0YXRpYyBib29sIHNobWVtX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxuK1x0XHRcdGludCBucl9ocGFnZXMsIHVuc2lnbmVkIGxvbmcgaHBhZ2Vfc2l6ZSlcbiB7XG4tXHRyZXR1cm4gY2hlY2tfaHVnZV9zaG1lbShhZGRyLCBucl9ocGFnZXMsIGhwYWdlX3BtZF9zaXplKTtcbitcdHJldHVybiBjaGVja19odWdlX3NobWVtKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgbWVtX29wcyBfX2Fub25fb3BzID0ge1xuQEAgLTUzMyw3ICs1MzksNyBAQCBzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0cmV0ID0gbWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSk7XG4gXHRpZiAoKChib29sKXJldCkgPT0gZXhwZWN0KVxuIFx0XHRmYWlsKFwiRmFpbDogQmFkIHJldHVybiB2YWx1ZVwiKTtcbi1cdGVsc2UgaWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcbitcdGVsc2UgaWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgZXhwZWN0ID8gbnJfaHBhZ2VzIDogMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRmYWlsKFwiRmFpbDogY2hlY2tfaHVnZSgpXCIpO1xuIFx0ZWxzZVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG5AQCAtNTQ1LDMwICs1NTEsMzEgQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcbiB7XG4gXHQvKiBTYW5pdHkgY2hlY2sgKi9cbi1cdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlVuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCIpO1xuIFx0X19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7XG4gfVxuIFxuICNkZWZpbmUgVElDSyA1MDAwMDBcbi1zdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbi1cdFx0XHQgIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4rc3RhdGljIGJvb2wgd2FpdF9mb3Jfc2Nhbihjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbitcdFx0aW50IG5yX2hwYWdlcywgaW50IGNvbGxhcF9vcmRlciwgc3RydWN0IG1lbV9vcHMgKm9wcylcbiB7XG4rXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXHUwMDNjXHUwMDNjIGNvbGxhcF9vcmRlcjtcbiBcdGludCBmdWxsX3NjYW5zO1xuIFx0aW50IHRpbWVvdXQgPSA2OyAvKiAzIHNlY29uZHMgKi9cbiBcbiBcdC8qIFNhbml0eSBjaGVjayAqL1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgc2l6ZSwgMCwgaHBhZ2Vfc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlVuZXhwZWN0ZWQgaHVnZSBwYWdlXFxuXCIpO1xuIFxuLVx0bWFkdmlzZShwLCBucl9ocGFnZXMgKiBocGFnZV9wbWRfc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4rXHRtYWR2aXNlKHAsIHNpemUsIE1BRFZfSFVHRVBBR0UpO1xuIFxuIFx0LyogV2FpdCB1bnRpbCB0aGUgc2Vjb25kIGZ1bGxfc2NhbiBjb21wbGV0ZWQgKi9cbiBcdGZ1bGxfc2NhbnMgPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcIikgKyAyO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCIlcy4uLlwiLCBtc2cpO1xuIFx0d2hpbGUgKHRpbWVvdXQtLSkge1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgbnJfaHBhZ2VzKSlcbitcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmICh0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL2Z1bGxfc2NhbnNcIikgXHUwMDNlPSBmdWxsX3NjYW5zKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTU4Miw2ICs1ODksOCBAQCBzdGF0aWMgYm9vbCB3YWl0X2Zvcl9zY2FuKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdFx0XHRcdHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplO1xuK1xuIFx0LypcbiBcdCAqIHJlYWRcdTAwMjZ3cml0ZSBmaWxlIGNvbGxhcHNlIGZhaWxzIHNpbmNlIGtodWdlcGFnZWQgZG9lcyBub3QgZmx1c2hcbiBcdCAqIHRoZSB0YXJnZXQgZGlydHkgZm9saW9zXG5AQCAtNTg5LDcgKzU5OCw3IEBAIHN0YXRpYyB2b2lkIGtodWdlcGFnZWRfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxuIFx0aWYgKCFpc190bXBmcyhvcHMpIFx1MDAyNlx1MDAyNiBvcHMgPT0gXHUwMDI2X19yZWFkX3dyaXRlX2ZpbGVfd3JpdGVfb3BzKVxuIFx0XHRleHBlY3QgPSBmYWxzZTtcbiBcbi1cdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMpKSB7XG4rXHRpZiAod2FpdF9mb3Jfc2Nhbihtc2csIHAsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2VfcG1kX29yZGVyLCBvcHMpKSB7XG4gXHRcdGlmIChleHBlY3QpXG4gXHRcdFx0ZmFpbChcIlRpbWVvdXRcIik7XG4gXHRcdGVsc2VcbkBAIC02MDUsMTAgKzYxNCw1NCBAQCBzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbiBcdGlmIChvcHMgIT0gXHUwMDI2X19hbm9uX29wcylcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplKTtcbiBcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwKSlcbitcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBzaXplLCBleHBlY3QgPyBucl9ocGFnZXMgOiAwLCBocGFnZV9wbWRfc2l6ZSkpXG4rXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbitcdGVsc2VcbitcdFx0ZmFpbChcIkZhaWxcIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG10aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZShjb25zdCBjaGFyICptc2csIGNoYXIgKnAsIGludCBucl9ocGFnZXMsXG4rXHRcdFx0XHRzdHJ1Y3QgbWVtX29wcyAqb3BzLCBib29sIGV4cGVjdClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGhwYWdlX3NpemUgPSBwYWdlX3NpemUgXHUwMDNjXHUwMDNjIGNvbGxhcHNlX29yZGVyO1xuK1x0c3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5ncyA9ICp0aHBfY3VycmVudF9zZXR0aW5ncygpO1xuK1x0LyogbVRIUCBjb2xscGFzZSBvbmx5IGFsbG9jYXRlcyBQTUQgc2l6ZWQgbWVtb3J5ICovXG4rXHR1bnNpZ25lZCBsb25nIHNpemUgPSBocGFnZV9wbWRfc2l6ZTtcbitcbitcdC8qIFNldCBtVEhQIHNldHRpbmcgZm9yIG1USFAgY29sbGFwc2UgKi9cbitcdGlmIChvcHMgPT0gXHUwMDI2X19hbm9uX29wcykge1xuK1x0XHRzZXR0aW5ncy50aHBfZW5hYmxlZCA9IFRIUF9ORVZFUjtcbitcdFx0c2V0dGluZ3MuaHVnZXBhZ2VzW2NvbGxhcHNlX29yZGVyXS5lbmFibGVkID0gVEhQX0FMV0FZUztcbitcdH1cbitcbitcdHRocF9wdXNoX3NldHRpbmdzKFx1MDAyNnNldHRpbmdzKTtcbitcbitcdGlmICh3YWl0X2Zvcl9zY2FuKG1zZywgcCwgc2l6ZSwgbnJfaHBhZ2VzLCBjb2xsYXBzZV9vcmRlciwgb3BzKSkge1xuK1x0XHRpZiAoZXhwZWN0KVxuK1x0XHRcdGZhaWwoXCJUaW1lb3V0XCIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuK1xuK1x0XHQvKiBSZXN0b3JlIFRIUCBzZXR0aW5ncyBmb3IgbVRIUCBjb2xsYXBzZS4gKi9cbitcdFx0dGhwX3BvcF9zZXR0aW5ncygpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRm9yIGZpbGUgYW5kIHNobWVtIG1lbW9yeSwga2h1Z2VwYWdlZCBvbmx5IHJldHJhY3RzIHB0ZSBlbnRyaWVzIGFmdGVyXG4rXHQgKiBwdXR0aW5nIHRoZSBuZXcgaHVnZXBhZ2UgaW4gdGhlIHBhZ2UgY2FjaGUuIFRoZSBodWdlcGFnZSBtdXN0IGJlXG4rXHQgKiBzdWJzZXF1ZW50bHkgcmVmYXVsdGVkIHRvIGluc3RhbGwgdGhlIHBtZCBtYXBwaW5nIGZvciB0aGUgbW0uXG4rXHQgKi9cbitcdGlmIChvcHMgIT0gXHUwMDI2X19hbm9uX29wcylcbitcdFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIG5yX2hwYWdlcyAqIGhwYWdlX3NpemUpO1xuK1xuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIHNpemUsIGV4cGVjdCA/IG5yX2hwYWdlcyA6IDAsIGhwYWdlX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuK1xuK1x0LyogUmVzdG9yZSBUSFAgc2V0dGluZ3MgZm9yIG1USFAgY29sbGFwc2UuICovXG4rXHR0aHBfcG9wX3NldHRpbmdzKCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX2todWdlcGFnZWRfY29udGV4dCA9IHtcbkBAIC02MTcsNiArNjcwLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX2todWdlcGFnZWRfY29udGV4dCA9IHtcbiBcdC5uYW1lID0gXCJraHVnZXBhZ2VkXCIsXG4gfTtcbiBcbitzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tdGhwX2todWdlcGFnZWRfY29udGV4dCA9IHtcbitcdC5jb2xsYXBzZSA9IFx1MDAyNm10aHBfa2h1Z2VwYWdlZF9jb2xsYXBzZSxcbitcdC5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IHRydWUsXG4rXHQubmFtZSA9IFwibXRocF9raHVnZXBhZ2VkXCIsXG4rfTtcbitcbiBzdGF0aWMgc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgX19tYWR2aXNlX2NvbnRleHQgPSB7XG4gXHQuY29sbGFwc2UgPSBcdTAwMjZtYWR2aXNlX2NvbGxhcHNlLFxuIFx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXG5AQCAtNjM0LDcgKzY5Myw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXG4gXHRwID0gYWxsb2NfbWFwcGluZygxKTtcbiBcdCpwID0gMTtcbiBcdGtzZnRfcHJpbnRfbXNnKFwiQWxsb2NhdGUgaHVnZSBwYWdlIG9uIGZhdWx0Li4uXCIpO1xuLVx0aWYgKGNoZWNrX2h1Z2VfYW5vbihwLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4rXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtNjQzLDcgKzcwMiw3IEBAIHN0YXRpYyB2b2lkIGFsbG9jX2F0X2ZhdWx0KHZvaWQpXG4gXG4gXHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9ET05UTkVFRCk7XG4gXHRrc2Z0X3ByaW50X21zZyhcIlNwbGl0IGh1Z2UgUE1EIG9uIE1BRFZfRE9OVE5FRUQuLi5cIik7XG4tXHRpZiAoY2hlY2tfaHVnZV9hbm9uKHAsIDAsIGhwYWdlX3BtZF9zaXplKSlcbitcdGlmIChjaGVja19odWdlX2Fub24ocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC02NTUsMTAgKzcxNCwxNyBAQCBzdGF0aWMgdm9pZCBhbGxvY19hdF9mYXVsdCh2b2lkKVxuIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Z1bGwoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4ge1xuIFx0dm9pZCAqcDtcbi1cdGludCBucl9ocGFnZXMgPSA0O1xuK1x0aW50IG5yX3BtZHMgPSA0LCBucl9ocGFnZXMgPSA0O1xuIFx0dW5zaWduZWQgbG9uZyBzaXplID0gbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemU7XG4gXG4tXHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEobnJfaHBhZ2VzKTtcbitcdC8qIE9ubHkgdHJ5IDEgUE1EIHNpemVkIHJhbmdlIGZvciBtVEhQIGNvbGxhcHNlLiAqL1xuK1x0aWYgKGMgPT0gXHUwMDI2X19tdGhwX2todWdlcGFnZWRfY29udGV4dCkge1xuK1x0XHRucl9wbWRzID0gMTtcbitcdFx0bnJfaHBhZ2VzID0gMSBcdTAwM2NcdTAwM2MgKGhwYWdlX3BtZF9vcmRlciAtIGNvbGxhcHNlX29yZGVyKTtcbitcdFx0c2l6ZSA9IGhwYWdlX3BtZF9zaXplO1xuK1x0fVxuK1xuK1x0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKG5yX3BtZHMpO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIHNpemUpO1xuIFx0Yy1cdTAwM2Vjb2xsYXBzZShcIkNvbGxhcHNlIG11bHRpcGxlIGZ1bGx5IHBvcHVsYXRlZCBQVEUgdGFibGVcIiwgcCwgbnJfaHBhZ2VzLFxuIFx0XHQgICAgb3BzLCB0cnVlKTtcbkBAIC02NzAsMTAgKzczNiwzMSBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIFxuIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2VtcHR5KHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuIHtcbitcdGludCBucl9ocGFnZXMgPSAxO1xuIFx0dm9pZCAqcDtcbiBcbitcdGlmIChjID09IFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQpXG4rXHRcdG5yX2hwYWdlcyA9IDEgXHUwMDNjXHUwMDNjIChocGFnZV9wbWRfb3JkZXIgLSBjb2xsYXBzZV9vcmRlcik7XG4rXG4gXHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEoMSk7XG4tXHRjLVx1MDAzZWNvbGxhcHNlKFwiRG8gbm90IGNvbGxhcHNlIGVtcHR5IFBURSB0YWJsZVwiLCBwLCAxLCBvcHMsIGZhbHNlKTtcbitcdGMtXHUwMDNlY29sbGFwc2UoXCJEbyBub3QgY29sbGFwc2UgZW1wdHkgUFRFIHRhYmxlXCIsIHAsIG5yX2hwYWdlcywgb3BzLCBmYWxzZSk7XG4rXHRvcHMtXHUwMDNlY2xlYW51cF9hcmVhKHAsIGhwYWdlX3BtZF9zaXplKTtcbitcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcIiVzXFxuXCIsIF9fZnVuY19fKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgY29sbGFwc2Vfc2luZ2xlX210aHAoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBocGFnZV9zaXplID0gcGFnZV9zaXplIFx1MDAzY1x1MDAzYyBjb2xsYXBzZV9vcmRlcjtcbitcdHZvaWQgKnA7XG4rXG4rXHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEoMSk7XG4rXHQvKlxuK1x0ICogT25seSBmYXVsdCBjb2xsYXBzZV9vcmRlciBzaXplZCByYW5nZXMsIGFuZCBvbmx5IGNoZWNrIDFcbitcdCAqIGNvbGxhcHNlX29yZGVyIHNpemVkIGh1Z2UgcGFnZS5cbitcdCAqL1xuK1x0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIGhwYWdlX3NpemUpO1xuK1x0Yy1cdTAwM2Vjb2xsYXBzZShcIkNvbGxhcHNlIFBURSB0YWJsZSB3aXRoIGhhbGYgUFRFIGVudHJpZXMgcHJlc2VudFwiLFxuK1x0XHRwLCAxLCBvcHMsIHRydWUpO1xuIFx0b3BzLVx1MDAzZWNsZWFudXBfYXJlYShwLCBocGFnZV9wbWRfc2l6ZSk7XG4gXHRrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgXCIlc1xcblwiLCBfX2Z1bmNfXyk7XG4gfVxuQEAgLTgxNSw3ICs5MDIsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5X2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y1xuIFx0bWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcdGtzZnRfcHJpbnRfbXNnKFwiU3BsaXQgaHVnZSBwYWdlIGxlYXZpbmcgc2luZ2xlIFBURSBtYXBwaW5nIGNvbXBvdW5kIHBhZ2UuLi5cIik7XG4gXHRtYWR2aXNlKHAgKyBwYWdlX3NpemUsIGhwYWdlX3BtZF9zaXplIC0gcGFnZV9zaXplLCBNQURWX0RPTlRORUVEKTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTgzNiw3ICs5MjMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9mdWxsX29mX2NvbXBvdW5kKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0a3NmdF9wcmludF9tc2coXCJTcGxpdCBodWdlIHBhZ2UgbGVhdmluZyBzaW5nbGUgUFRFIHBhZ2UgdGFibGUgZnVsbCBvZiBjb21wb3VuZCBwYWdlcy4uLlwiKTtcbiBcdG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFx0bWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTg1OCw3ICs5NDUsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9jb21wb3VuZF9leHRyZW1lKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHBhZ2VfcG1kX25yOyBpKyspIHtcbiBcdFx0bWFkdmlzZShCQVNFX0FERFIsIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcbiBcdFx0b3BzLVx1MDAzZWZhdWx0KEJBU0VfQUREUiwgMCwgaHBhZ2VfcG1kX3NpemUpO1xuLVx0XHRpZiAoIW9wcy1cdTAwM2VjaGVja19odWdlKEJBU0VfQUREUiwgMSkpXG4rXHRcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byBhbGxvY2F0ZSBodWdlIHBhZ2VcXG5cIik7XG4gXHRcdG1hZHZpc2UoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcbkBAIC04ODEsNyArOTY4LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfY29tcG91bmRfZXh0cmVtZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcbiBcdG9wcy1cdTAwM2VjbGVhbnVwX2FyZWEoQkFTRV9BRERSLCBocGFnZV9wbWRfc2l6ZSk7XG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgaHBhZ2VfcG1kX3NpemUpO1xuLVx0aWYgKCFvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbitcdGlmICghb3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0ZWxzZVxuIFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC05MDMsNyArOTkwLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcbiBcdGtzZnRfcHJpbnRfbXNnKFwiQWxsb2NhdGUgc21hbGwgcGFnZS4uLlwiKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBwYWdlX3NpemUpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAwLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtOTExLDcgKzk5OCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2Zvcmsoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXG4gXHRrc2Z0X3ByaW50X21zZyhcIlNoYXJlIHNtYWxsIHBhZ2Ugb3ZlciBmb3JrKCkuLi5cIik7XG4gXHRpZiAoIWZvcmsoKSkge1xuIFx0XHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMCkpXG4rXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTkyOSw3ICsxMDE2LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9yayhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbiBcdGV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7XG4gXG4gXHRrc2Z0X3ByaW50X21zZyhcIkNoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgc21hbGwgcGFnZS4uLlwiKTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAwKSlcbitcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTk0Nyw3ICsxMDM0LDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfZm9ya19jb21wb3VuZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cbiBcdGtzZnRfcHJpbnRfbXNnKFwiU2hhcmUgaHVnZSBwYWdlIG92ZXIgZm9yaygpLi4uXCIpO1xuIFx0aWYgKCFmb3JrKCkpIHtcbiBcdFx0LyogRG8gbm90IHRvdWNoIHNldHRpbmdzIG9uIGNoaWxkIGV4aXQgKi9cbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuK1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDEsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC05NTUsNyArMTA0Miw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwiU3BsaXQgaHVnZSBwYWdlIFBNRCBpbiBjaGlsZCBwcm9jZXNzLi4uXCIpO1xuIFx0XHRtYWR2aXNlKHAsIHBhZ2Vfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcdFx0bWFkdmlzZShwLCBocGFnZV9wbWRfc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC05NzYsNyArMTA2Myw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2ZvcmtfY29tcG91bmQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvXG4gXHRleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTKHdzdGF0dXMpO1xuIFxuIFx0a3NmdF9wcmludF9tc2coXCJDaGVjayBpZiBwYXJlbnQgc3RpbGwgaGFzIGh1Z2UgcGFnZS4uLlwiKTtcbi1cdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCAxKSlcbitcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRlbHNlXG4gXHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTk5NSw3ICsxMDgyLDcgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wc1xuIFx0a3NmdF9wcmludF9tc2coXCJTaGFyZSBodWdlIHBhZ2Ugb3ZlciBmb3JrKCkuLi5cIik7XG4gXHRpZiAoIWZvcmsoKSkge1xuIFx0XHQvKiBEbyBub3QgdG91Y2ggc2V0dGluZ3Mgb24gY2hpbGQgZXhpdCAqL1xuLVx0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgMSkpXG4rXHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMSwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTEwMDMsNyArMTA5MCw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdFx0a3NmdF9wcmludF9tc2coXCJUcmlnZ2VyIENvVyBvbiBwYWdlICVkIG9mICVkLi4uXCIsXG4gXHRcdFx0XHRocGFnZV9wbWRfbnIgLSBtYXhfcHRlc19zaGFyZWQgLSAxLCBocGFnZV9wbWRfbnIpO1xuIFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCAtIDEpICogcGFnZV9zaXplKTtcbi1cdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRpZiAob3BzLVx1MDAzZWNoZWNrX2h1Z2UocCwgaHBhZ2VfcG1kX3NpemUsIDAsIGhwYWdlX3BtZF9zaXplKSlcbiBcdFx0XHRzdWNjZXNzKFwiT0tcIik7XG4gXHRcdGVsc2VcbiBcdFx0XHRmYWlsKFwiRmFpbFwiKTtcbkBAIC0xMDE2LDcgKzExMDMsNyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzXG4gXHRcdFx0ICAgICAgIGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCwgaHBhZ2VfcG1kX25yKTtcbiBcdFx0XHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgKGhwYWdlX3BtZF9uciAtIG1heF9wdGVzX3NoYXJlZCkgKlxuIFx0XHRcdFx0ICAgIHBhZ2Vfc2l6ZSk7XG4tXHRcdFx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDApKVxuK1x0XHRcdGlmIChvcHMtXHUwMDNlY2hlY2tfaHVnZShwLCBocGFnZV9wbWRfc2l6ZSwgMCwgaHBhZ2VfcG1kX3NpemUpKVxuIFx0XHRcdFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGZhaWwoXCJGYWlsXCIpO1xuQEAgLTEwMzQsNyArMTEyMSw3IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHNcbiBcdGV4aXRfc3RhdHVzID0gV0VYSVRTVEFUVVMod3N0YXR1cyk7XG4gXG4gXHRrc2Z0X3ByaW50X21zZyhcIkNoZWNrIGlmIHBhcmVudCBzdGlsbCBoYXMgaHVnZSBwYWdlLi4uXCIpO1xuLVx0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIDEpKVxuK1x0aWYgKG9wcy1cdTAwM2VjaGVja19odWdlKHAsIGhwYWdlX3BtZF9zaXplLCAxLCBocGFnZV9wbWRfc2l6ZSkpXG4gXHRcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdGVsc2VcbiBcdFx0ZmFpbChcIkZhaWxcIik7XG5AQCAtMTA3NSw4ICsxMTYyLDggQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9yZXRyYWN0ZWRfcGFnZV90YWJsZXMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsXG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgc2l6ZSk7XG4gXG4gXHQvKiBMZXQga2h1Z2VwYWdlZCBjb2xsYXBzZSBhbmQgbGVhdmUgcG1kIGNsZWFyZWQgKi9cbi1cdGlmICh3YWl0X2Zvcl9zY2FuKFwiQ29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkXCIsIHAsIG5yX2hwYWdlcyxcbi1cdFx0XHQgIG9wcykpIHtcbitcdGlmICh3YWl0X2Zvcl9zY2FuKFwiQ29sbGFwc2UgYW5kIGxlYXZlIFBNRCBjbGVhcmVkXCIsIHAsIHNpemUsIG5yX2hwYWdlcyxcbitcdFx0XHQgIGhwYWdlX3BtZF9vcmRlciwgb3BzKSkge1xuIFx0XHRmYWlsKFwiVGltZW91dFwiKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTEwOTIsNyArMTE3OSw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4ge1xuIFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuVXNhZ2U6IC4va2h1Z2VwYWdlZCBbT1BUSU9OU10gXHUwMDNjdGVzdCB0eXBlXHUwMDNlIFtkaXJdXFxuXFxuXCIpO1xuIFx0ZnByaW50ZihzdGRlcnIsIFwiXFx0XHUwMDNjdGVzdCB0eXBlXHUwMDNlXFx0OiBcdTAwM2Njb250ZXh0XHUwMDNlOlx1MDAzY21lbV90eXBlXHUwMDNlXFxuXCIpO1xuLVx0ZnByaW50ZihzdGRlcnIsIFwiXFx0XHUwMDNjY29udGV4dFx1MDAzZVxcdDogW2FsbHxraHVnZXBhZ2VkfG1hZHZpc2VdXFxuXCIpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiXFx0XHUwMDNjY29udGV4dFx1MDAzZVxcdDogW2FsbHxraHVnZXBhZ2VkfG10aHBfa2h1Z2VwYWdlZHxtYWR2aXNlXVxcblwiKTtcbiBcdGZwcmludGYoc3RkZXJyLCBcIlxcdFx1MDAzY21lbV90eXBlXHUwMDNlXFx0OiBbYWxsfGFub258ZmlsZXxzaG1lbV1cXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJcXG5cXHRcXFwiZmlsZSxhbGxcXFwiIG1lbV90eXBlIHJlcXVpcmVzIFtkaXJdIGFyZ3VtZW50XFxuXCIpO1xuIFx0ZnByaW50ZihzdGRlcnIsIFwiXFxuXFx0XFxcImZpbGUsYWxsXFxcIiBtZW1fdHlwZSByZXF1aXJlcyBhIGZpbGUgc3lzdGVtXFxuXCIpO1xuQEAgLTExMDMsNiArMTE5MCw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4gXHRmcHJpbnRmKHN0ZGVycixcdFwiXFx0XFx0LWg6IFRoaXMgaGVscCBtZXNzYWdlLlxcblwiKTtcbiBcdGZwcmludGYoc3RkZXJyLFx0XCJcXHRcXHQtczogbVRIUCBzaXplLCBleHByZXNzZWQgYXMgcGFnZSBvcmRlci5cXG5cIik7XG4gXHRmcHJpbnRmKHN0ZGVycixcdFwiXFx0XFx0ICAgIERlZmF1bHRzIHRvIDAuIFVzZSB0aGlzIHNpemUgZm9yIGFub24gb3Igc2htZW0gYWxsb2NhdGlvbnMuXFxuXCIpO1xuK1x0ZnByaW50ZihzdGRlcnIsXHRcIlxcdFxcdC1jOiBjb2xsYXBzZSBvcmRlciBmb3IgbVRIUCBjb2xsYXBzZSwgZXhwcmVzc2VkIGFzIHBhZ2Ugb3JkZXIuXFxuXCIpO1xuIFx0ZXhpdCgxKTtcbiB9XG4gXG5AQCAtMTExMiwxMSArMTIwMCwxNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0Y2hhciAqYnVmO1xuIFx0Y29uc3QgY2hhciAqdG9rZW47XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcInM6aFwiKSkgIT0gLTEpIHtcbitcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwiczpjOmhcIikpICE9IC0xKSB7XG4gXHRcdHN3aXRjaCAob3B0KSB7XG4gXHRcdGNhc2UgJ3MnOlxuIFx0XHRcdGFub25fb3JkZXIgPSBhdG9pKG9wdGFyZyk7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgJ2MnOlxuK1x0XHRcdGNvbGxhcHNlX29yZGVyID0gYXRvaShvcHRhcmcpO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICdoJzpcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHR1c2FnZSgpO1xuQEAgLTExNDIsNiArMTIzMywxMCBAQCBzdGF0aWMgdm9pZCBwYXJzZV90ZXN0X3R5cGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRtYWR2aXNlX2NvbnRleHQgPSAgXHUwMDI2X19tYWR2aXNlX2NvbnRleHQ7XG4gXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFwia2h1Z2VwYWdlZFwiKSkge1xuIFx0XHRraHVnZXBhZ2VkX2NvbnRleHQgPSAgXHUwMDI2X19raHVnZXBhZ2VkX2NvbnRleHQ7XG4rXHR9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sIFwibXRocF9raHVnZXBhZ2VkXCIpKSB7XG4rXHRcdG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0ID0gIFx1MDAyNl9fbXRocF9raHVnZXBhZ2VkX2NvbnRleHQ7XG4rXHRcdGlmIChjb2xsYXBzZV9vcmRlciBcdTAwM2M9IDAgfHwgY29sbGFwc2Vfb3JkZXIgXHUwMDNlPSBocGFnZV9wbWRfb3JkZXIpXG4rXHRcdFx0dXNhZ2UoKTtcbiBcdH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgXCJtYWR2aXNlXCIpKSB7XG4gXHRcdG1hZHZpc2VfY29udGV4dCA9ICBcdTAwMjZfX21hZHZpc2VfY29udGV4dDtcbiBcdH0gZWxzZSB7XG5AQCAtMTIwNyw3ICsxMzAyLDYgQEAgc3RhdGljIGludCBucl90ZXN0X2Nhc2VzO1xuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiB7XG4tXHRpbnQgaHBhZ2VfcG1kX29yZGVyO1xuIFx0c3RydWN0IHRocF9zZXR0aW5ncyBkZWZhdWx0X3NldHRpbmdzID0ge1xuIFx0XHQudGhwX2VuYWJsZWQgPSBUSFBfTUFEVklTRSxcbiBcdFx0LnRocF9kZWZyYWcgPSBUSFBfREVGUkFHX0FMV0FZUyxcbkBAIC0xMjMzLDEwICsxMzI3LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKVxuIFx0XHRrc2Z0X2V4aXRfc2tpcChcIlRyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxuXCIpO1xuIFxuLVx0cGFyc2VfdGVzdF90eXBlKGFyZ2MsIGFyZ3YpO1xuLVxuLVx0c2V0YnVmKHN0ZG91dCwgTlVMTCk7XG4tXG4gXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xuIFx0aHBhZ2VfcG1kX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuIFx0aWYgKCFocGFnZV9wbWRfc2l6ZSlcbkBAIC0xMjQ0LDYgKzEzMzQsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0aHBhZ2VfcG1kX25yID0gaHBhZ2VfcG1kX3NpemUgLyBwYWdlX3NpemU7XG4gXHRocGFnZV9wbWRfb3JkZXIgPSBfX2J1aWx0aW5fY3R6KGhwYWdlX3BtZF9ucik7XG4gXG4rXHRwYXJzZV90ZXN0X3R5cGUoYXJnYywgYXJndik7XG4rXG4rXHRzZXRidWYoc3Rkb3V0LCBOVUxMKTtcbitcbiBcdGRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19ub25lID0gaHBhZ2VfcG1kX25yIC0gMTtcbiBcdGRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19zd2FwID0gaHBhZ2VfcG1kX25yIC8gODtcbiBcdGRlZmF1bHRfc2V0dGluZ3Mua2h1Z2VwYWdlZC5tYXhfcHRlc19zaGFyZWQgPSBocGFnZV9wbWRfbnIgLyAyO1xuQEAgLTEyNjEsNiArMTM1NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFRFU1QoY29sbGFwc2VfZnVsbCwga2h1Z2VwYWdlZF9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfd3JpdGVfZmlsZV93cml0ZV9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBraHVnZXBhZ2VkX2NvbnRleHQsIHNobWVtX29wcyk7XG4rXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2Z1bGwsIG1hZHZpc2VfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcbkBAIC0xMjY4LDggKzEzNjMsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0VEVTVChjb2xsYXBzZV9mdWxsLCBtYWR2aXNlX2NvbnRleHQsIHNobWVtX29wcyk7XG4gXG4gXHRURVNUKGNvbGxhcHNlX2VtcHR5LCBraHVnZXBhZ2VkX2NvbnRleHQsIGFub25fb3BzKTtcbitcdFRFU1QoY29sbGFwc2VfZW1wdHksIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX2VtcHR5LCBtYWR2aXNlX2NvbnRleHQsIGFub25fb3BzKTtcbiBcbitcdFRFU1QoY29sbGFwc2Vfc2luZ2xlX210aHAsIG10aHBfa2h1Z2VwYWdlZF9jb250ZXh0LCBhbm9uX29wcyk7XG4rXG4gXHRURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgYW5vbl9vcHMpO1xuIFx0VEVTVChjb2xsYXBzZV9zaW5nbGVfcHRlX2VudHJ5LCBraHVnZXBhZ2VkX2NvbnRleHQsIHJlYWRfb25seV9maWxlX29wcyk7XG4gXHRURVNUKGNvbGxhcHNlX3NpbmdsZV9wdGVfZW50cnksIGtodWdlcGFnZWRfY29udGV4dCwgcmVhZF93cml0ZV9maWxlX3JlYWRfb3BzKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbmluZGV4IDFiMmRmZmNjOTk5YjAuLmNmZDE5ODczMzljMTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuQEAgLTEwODUsNyArMTA4NSw3IEBAIHN0YXRpYyB2b2lkIHVucG9wdWxhdGVkX3dyaXR0ZW5fdGVzdChjb25zdCBjaGFyICpuYW1lLCBjaGFyICptZW0sIGxvbmcgc2l6ZSxcbiBcdG1lbXNldChtZW0sIDEsIHNpemUpO1xuIFx0aWYgKHVzZV90aHAgXHUwMDI2XHUwMDI2XG4gXHQgICAgKG1hZHZpc2UobWVtLCBzaXplLCBNQURWX0NPTExBUFNFKSB8fFxuLVx0ICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkge1xuK1x0ICAgICAhY2hlY2tfaHVnZV9hbm9uKG1lbSwgc2l6ZSwgc2l6ZSAvIGhwYWdlX3NpemUsIGhwYWdlX3NpemUpKSkge1xuIFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCIlcyBjb3VsZCBub3QgZm9ybSBhIFRIUFxcblwiLCBuYW1lKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbmluZGV4IGQ4ZDlkMWRlNTdiOGIuLjgyYzZlOTZlYTZlYjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5AQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgaW50IHRlc3RfbW1hcF90aHAoZW51bSB0aHBfY29sbGFwc2VfdHlwZSBtYWR2aXNlX2J1Ziwgc2l6ZV90IHBtZHNpemUpXG4gXHQvKiBIQUNLOiBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNlcGFyYXRlIFZNQSB0aGF0IHdlIGNhbiBjaGVjayByZWxpYWJseS4gKi9cbiBcdG1wcm90ZWN0KG1lbSwgcG1kc2l6ZSwgUFJPVF9SRUFEKTtcbiBcbi1cdHJldCA9IGNoZWNrX2h1Z2VfYW5vbihtZW0sIDEsIHBtZHNpemUpO1xuK1x0cmV0ID0gY2hlY2tfaHVnZV9hbm9uKG1lbSwgcG1kc2l6ZSwgMSwgcG1kc2l6ZSk7XG4gXHRtdW5tYXAobW1hcF9tZW0sIG1tYXBfc2l6ZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCA2ODdkMTE1ZTNiZDgwLi5kMDlmOWY2YTM4NGVlIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtNDEwLDYgKzQxMCw4IEBAIENBVEVHT1JZPVwidGhwXCIgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIGFsbDpzaG1lbVxuIFxuIENBVEVHT1JZPVwidGhwXCIgcnVuX3Rlc3QgLi9raHVnZXBhZ2VkIC1zIDQgYWxsOnNobWVtXG4gXG4rQ0FURUdPUlk9XCJ0aHBcIiBydW5fdGVzdCAuL2todWdlcGFnZWQgLWMgNCBtdGhwX2todWdlcGFnZWQ6YW5vblxuK1xuICMgVHJ5IHRvIGNyZWF0ZSBYRlMgaWYgbm90IHByb3ZpZGVkXG4gaWYgWyAteiBcIiR7U1BMSVRfSFVHRV9QQUdFX1RFU1RfWEZTX1BBVEh9XCIgXTsgdGhlblxuICAgICBpZiB0ZXN0X3NlbGVjdGVkIFwidGhwXCI7IHRoZW5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbmluZGV4IGZiMTg2NGE2OGUxYzYuLmUxOThmYWNmNzhiYjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuQEAgLTEwMyw3ICsxMDMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2h1Z2VwYWdlKGludCBwYWdlbWFwX2ZkLCBpbnQgcGFnZXNpemUpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBocGFnZV9sZW47IGkrKylcbiBcdFx0bWFwW2ldID0gKGNoYXIpaTtcbiBcbi1cdGlmIChjaGVja19odWdlX2Fub24obWFwLCAxLCBocGFnZV9sZW4pKSB7XG4rXHRpZiAoY2hlY2tfaHVnZV9hbm9uKG1hcCwgaHBhZ2VfbGVuLCAxLCBocGFnZV9sZW4pKSB7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcIlRlc3QgJXMgaHVnZSBwYWdlIGFsbG9jYXRpb25cXG5cIiwgX19mdW5jX18pO1xuIFxuIFx0XHRjbGVhcl9zb2Z0ZGlydHkoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuaW5kZXggMzJiOTkxNDcyZjc0NC4uODZhNjAzNjkyODI2MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbkBAIC0xMDQsMTI5ICsxMDQsNiBAQCBzdGF0aWMgYm9vbCBpc19iYWNrZWRfYnlfZm9saW8oY2hhciAqdmFkZHIsIGludCBvcmRlciwgaW50IHBhZ2VtYXBfZmQsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmFkZHJfcGFnZWZsYWdzX2dldChjaGFyICp2YWRkciwgaW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLFxuLVx0XHR1aW50NjRfdCAqZmxhZ3MpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBwZm47XG4tXG4tXHRwZm4gPSBwYWdlbWFwX2dldF9wZm4ocGFnZW1hcF9mZCwgdmFkZHIpO1xuLVxuLVx0Lyogbm9uLXByZXNlbnQgUEZOICovXG4tXHRpZiAocGZuID09IC0xVUwpXG4tXHRcdHJldHVybiAxO1xuLVxuLVx0aWYgKHBhZ2VmbGFnc19nZXQocGZuLCBrcGFnZWZsYWdzX2ZkLCBmbGFncykpXG4tXHRcdHJldHVybiAtMTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi0vKlxuLSAqIGdhdGhlcl9hZnRlcl9zcGxpdF9mb2xpb19vcmRlcnMgLSBzY2FuIHRocm91Z2ggW3ZhZGRyX3N0YXJ0LCBsZW4pIGFuZCByZWNvcmRcbi0gKiBmb2xpbyBvcmRlcnNcbi0gKlxuLSAqIEB2YWRkcl9zdGFydDogc3RhcnQgdmFkZHJcbi0gKiBAbGVuOiByYW5nZSBsZW5ndGhcbi0gKiBAcGFnZW1hcF9mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9wYWdlbWFwXG4tICogQGtwYWdlZmxhZ3NfZmQ6IGZpbGUgZGVzY3JpcHRvciB0byAvcHJvYy9rcGFnZWZsYWdzXG4tICogQG9yZGVyczogb3V0cHV0IGZvbGlvIG9yZGVyIGFycmF5XG4tICogQG5yX29yZGVyczogZm9saW8gb3JkZXIgYXJyYXkgc2l6ZVxuLSAqXG4tICogZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycygpIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIGNoZWNrXG4tICogYWxsIGZvbGlvcyB3aXRoaW4gdGhlIHJhbmdlIGFuZCByZWNvcmQgdGhlaXIgb3JkZXJzLiBBbGwgb3JkZXItMCBwYWdlcyB3aWxsXG4tICogYmUgcmVjb3JkZWQuIE5vbi1wcmVzZW50IHZhZGRyIGlzIHNraXBwZWQuXG4tICpcbi0gKiBOT1RFOiB0aGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBmb2xpbyBvcmRlcnMgYWZ0ZXIgYSBzcGxpdCBpcyBwZXJmb3JtZWQsXG4tICogc28gaXQgYXNzdW1lcyBbdmFkZHJfc3RhcnQsIGxlbikgZnVsbHkgbWFwcyB0byBhZnRlci1zcGxpdCBmb2xpb3Mgd2l0aGluIHRoYXRcbi0gKiByYW5nZS5cbi0gKlxuLSAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xuLSAqL1xuLXN0YXRpYyBpbnQgZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbi1cdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXG4te1xuLVx0dWludDY0X3QgcGFnZV9mbGFncyA9IDA7XG4tXHRpbnQgY3VyX29yZGVyID0gLTE7XG4tXHRjaGFyICp2YWRkcjtcbi1cbi1cdGlmIChwYWdlbWFwX2ZkID09IC0xIHx8IGtwYWdlZmxhZ3NfZmQgPT0gLTEpXG4tXHRcdHJldHVybiAtMTtcbi1cdGlmICghb3JkZXJzKVxuLVx0XHRyZXR1cm4gLTE7XG4tXHRpZiAobnJfb3JkZXJzIFx1MDAzYz0gMClcbi1cdFx0cmV0dXJuIC0xO1xuLVxuLVx0Zm9yICh2YWRkciA9IHZhZGRyX3N0YXJ0OyB2YWRkciBcdTAwM2MgdmFkZHJfc3RhcnQgKyBsZW47KSB7XG4tXHRcdGNoYXIgKm5leHRfZm9saW9fdmFkZHI7XG4tXHRcdGludCBzdGF0dXM7XG4tXG4tXHRcdHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQodmFkZHIsIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXG4tXHRcdFx0XHRcdFx1MDAyNnBhZ2VfZmxhZ3MpO1xuLVx0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiAtMTtcbi1cbi1cdFx0Lyogc2tpcCBub24gcHJlc2VudCB2YWRkciAqL1xuLVx0XHRpZiAoc3RhdHVzID09IDEpIHtcbi1cdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdC8qIGFsbCBvcmRlci0wIHBhZ2VzIHdpdGggcG9zc2libGUgZmFsc2UgcG9zdGl2ZSAobm9uIGZvbGlvKSAqL1xuLVx0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4tXHRcdFx0b3JkZXJzWzBdKys7XG4tXHRcdFx0dmFkZHIgKz0gcHNpemUoKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHQvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi9cbi1cdFx0aWYgKCEocGFnZV9mbGFncyBcdTAwMjYgS1BGX1RIUCkpIHtcbi1cdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdC8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovXG4tXHRcdGlmIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcbi1cdFx0XHRjdXJfb3JkZXIgPSAxO1xuLVx0XHRlbHNlIHtcbi1cdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciArICgxVUwgXHUwMDNjXHUwMDNjIChjdXJfb3JkZXIgKyBwc2hpZnQoKSkpO1xuLVxuLVx0XHRpZiAobmV4dF9mb2xpb192YWRkciBcdTAwM2U9IHZhZGRyX3N0YXJ0ICsgbGVuKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHR3aGlsZSAoKHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQobmV4dF9mb2xpb192YWRkcixcbi1cdFx0XHRcdFx0XHQgICAgIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXG4tXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZwYWdlX2ZsYWdzKSkgXHUwMDNlPSAwKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBub24gcHJlc2VudCB2YWRkciwgbmV4dCBjb21wb3VuZCBoZWFkIHBhZ2UsIG9yXG4tXHRcdFx0ICogb3JkZXItMCBwYWdlXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHN0YXR1cyA9PSAxIHx8XG4tXHRcdFx0ICAgIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRCkgfHxcbi1cdFx0XHQgICAgIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4tXHRcdFx0XHRpZiAoY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpIHtcbi1cdFx0XHRcdFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcbi1cdFx0XHRcdFx0Y3VyX29yZGVyID0gLTE7XG4tXHRcdFx0XHRcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcbi1cdFx0XHRcdH1cbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRjdXJfb3JkZXIrKztcbi1cdFx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcbi1cdFx0fVxuLVxuLVx0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBzdGF0dXM7XG4tXHR9XG4tXHRpZiAoY3VyX29yZGVyIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBjdXJfb3JkZXIgXHUwMDNjIG5yX29yZGVycylcbi1cdFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0aW50IHBhZ2VtYXBfZmQsIGludCBrcGFnZWZsYWdzX2ZkLCBpbnQgb3JkZXJzW10sIGludCBucl9vcmRlcnMpXG4ge1xuQEAgLTI0MCw3ICsxMTcsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyhjaGFyICp2YWRkcl9zdGFydCwgc2l6ZV90IGxlbixcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdmFkZHJfb3JkZXJzXCIpO1xuIFxuIFx0bWVtc2V0KHZhZGRyX29yZGVycywgMCwgc2l6ZW9mKGludCkgKiBucl9vcmRlcnMpO1xuLVx0c3RhdHVzID0gZ2F0aGVyX2FmdGVyX3NwbGl0X2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLFxuK1x0c3RhdHVzID0gZ2F0aGVyX2ZvbGlvX29yZGVycyh2YWRkcl9zdGFydCwgbGVuLCBwYWdlbWFwX2ZkLFxuIFx0XHRcdFx0ICAgICBrcGFnZWZsYWdzX2ZkLCB2YWRkcl9vcmRlcnMsIG5yX29yZGVycyk7XG4gXHRpZiAoc3RhdHVzKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJnYXRoZXIgZm9saW8gaW5mbyBmYWlsZWRcXG5cIik7XG5AQCAtMjk2LDcgKzE3Myw3IEBAIHN0YXRpYyB2b2lkIHZlcmlmeV9yc3NfYW5vbl9zcGxpdF9odWdlX3BhZ2VfYWxsX3plcm9lcyhjaGFyICpvbmVfcGFnZSwgaW50IG5yX2hwXG4gXHR1bnNpZ25lZCBsb25nIHJzc19hbm9uX2JlZm9yZSwgcnNzX2Fub25fYWZ0ZXI7XG4gXHRzaXplX3QgaTtcbiBcbi1cdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCBucl9ocGFnZXMsIHBtZF9wYWdlc2l6ZSkpXG4rXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgbnJfaHBhZ2VzICogcG1kX3BhZ2VzaXplLCBucl9ocGFnZXMsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk5vIFRIUCBpcyBhbGxvY2F0ZWRcXG5cIik7XG4gXG4gXHRyc3NfYW5vbl9iZWZvcmUgPSByc3NfYW5vbigpO1xuQEAgLTMxMSw3ICsxODgsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlfcnNzX2Fub25fc3BsaXRfaHVnZV9wYWdlX2FsbF96ZXJvZXMoY2hhciAqb25lX3BhZ2UsIGludCBucl9ocFxuIFx0XHRpZiAob25lX3BhZ2VbaV0gIT0gKGNoYXIpMClcbiBcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlbGQgYnl0ZSBjb3JydXB0ZWRcXG5cIiwgaSk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgMCwgcG1kX3BhZ2VzaXplKSlcbitcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCBucl9ocGFnZXMgKiBwbWRfcGFnZXNpemUsIDAsIHBtZF9wYWdlc2l6ZSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlN0aWxsIEFub25IdWdlUGFnZXMgbm90IHNwbGl0XFxuXCIpO1xuIFxuIFx0cnNzX2Fub25fYWZ0ZXIgPSByc3NfYW5vbigpO1xuQEAgLTM0Nyw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wbWRfdGhwX3RvX29yZGVyKGludCBvcmRlcilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlbjsgaSsrKVxuIFx0XHRvbmVfcGFnZVtpXSA9IChjaGFyKWk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCwgcG1kX3BhZ2VzaXplKSlcbitcdGlmICghY2hlY2tfaHVnZV9hbm9uKG9uZV9wYWdlLCA0ICogcG1kX3BhZ2VzaXplLCA0LCBwbWRfcGFnZXNpemUpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJObyBUSFAgaXMgYWxsb2NhdGVkXFxuXCIpO1xuIFxuIFx0Lyogc3BsaXQgYWxsIFRIUHMgKi9cbkBAIC0zNjYsNyArMjQzLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfcG1kX3RocF90b19vcmRlcihpbnQgb3JkZXIpXG4gXHRcdFx0XHRcdCAgIChwbWRfb3JkZXIgKyAxKSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIlVuZXhwZWN0ZWQgVEhQIHNwbGl0XFxuXCIpO1xuIFxuLVx0aWYgKCFjaGVja19odWdlX2Fub24ob25lX3BhZ2UsIDAsIHBtZF9wYWdlc2l6ZSkpXG4rXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbihvbmVfcGFnZSwgNCAqIHBtZF9wYWdlc2l6ZSwgMCwgcG1kX3BhZ2VzaXplKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiU3RpbGwgQW5vbkh1Z2VQYWdlcyBub3Qgc3BsaXRcXG5cIik7XG4gXG4gXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCJTcGxpdCBodWdlIHBhZ2VzIHRvIG9yZGVyICVkIHN1Y2Nlc3NmdWxcXG5cIiwgb3JkZXIpO1xuQEAgLTM5Myw3ICsyNzAsNyBAQCBzdGF0aWMgdm9pZCBzcGxpdF9wdGVfbWFwcGVkX3RocCh2b2lkKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGhwX2FyZWFfc2l6ZTsgaSsrKVxuIFx0XHR0aHBfYXJlYVtpXSA9IChjaGFyKWk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfYW5vbih0aHBfYXJlYSwgbnJfdGhwcywgcG1kX3BhZ2VzaXplKSkge1xuK1x0aWYgKCFjaGVja19odWdlX2Fub24odGhwX2FyZWEsIG5yX3RocHMgKiBwbWRfcGFnZXNpemUsIG5yX3RocHMsIHBtZF9wYWdlc2l6ZSkpIHtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiTm90IGFsbCBUSFBzIGFsbG9jYXRlZFxcblwiKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtNjU3LDcgKzUzNCw3IEBAIHN0YXRpYyBpbnQgY3JlYXRlX3BhZ2VjYWNoZV90aHBfYW5kX2ZkKGNvbnN0IGNoYXIgKnRlc3RmaWxlLCBzaXplX3QgZmRfc2l6ZSxcbiBcbiBcdGZvcmNlX3JlYWRfcGFnZXMoKmFkZHIsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSk7XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZSgqYWRkciwgZmRfc2l6ZSAvIHBtZF9wYWdlc2l6ZSwgcG1kX3BhZ2VzaXplKSkge1xuK1x0aWYgKCFjaGVja19odWdlX2ZpbGUoKmFkZHIsIGZkX3NpemUsIGZkX3NpemUgLyBwbWRfcGFnZXNpemUsIHBtZF9wYWdlc2l6ZSkpIHtcbiBcdFx0a3NmdF9wcmludF9tc2coXCJObyBsYXJnZSBwYWdlY2FjaGUgZm9saW8gZ2VuZXJhdGVkLCBwbGVhc2UgcHJvdmlkZSBhIGZpbGVzeXN0ZW0gc3VwcG9ydGluZyBsYXJnZSBmb2xpb1xcblwiKTtcbiBcdFx0bXVubWFwKCphZGRyLCBmZF9zaXplKTtcbiBcdFx0Y2xvc2UoKmZkKTtcbkBAIC03MzUsNyArNjEyLDcgQEAgc3RhdGljIHZvaWQgc3BsaXRfdGhwX2luX3BhZ2VjYWNoZV90b19vcmRlcl9hdChzaXplX3QgZmRfc2l6ZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCAwLCBwbWRfcGFnZXNpemUpKSB7XG4rXHRpZiAoIWNoZWNrX2h1Z2VfZmlsZShhZGRyLCBmZF9zaXplLCAwLCBwbWRfcGFnZXNpemUpKSB7XG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwiU3RpbGwgRmlsZVBtZE1hcHBlZCBub3Qgc3BsaXRcXG5cIik7XG4gXHRcdGVyciA9IEVYSVRfRkFJTFVSRTtcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmNcbmluZGV4IGY0OGY1ZDQ1OTRhYjAuLmZhNDZjOGMzYTQzNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5jXG5AQCAtMTk0LDcgKzE5NCw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX2FsaWFzX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBfX3U2NCAqc3RhcnQsXG4gXG4gc3RhdGljIHZvaWQgc2htZW1fY2hlY2tfcG1kX21hcHBpbmcodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB2b2lkICpwLCBpbnQgZXhwZWN0X25yX2hwYWdlcylcbiB7XG4tXHRpZiAoIWNoZWNrX2h1Z2Vfc2htZW0oZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMsIGV4cGVjdF9ucl9ocGFnZXMsXG4rXHR1bnNpZ25lZCBsb25nIHNpemUgPSBleHBlY3RfbnJfaHBhZ2VzICogcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcbitcdGlmICghY2hlY2tfaHVnZV9zaG1lbShnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcywgc2l6ZSwgZXhwZWN0X25yX2hwYWdlcyxcbiBcdFx0XHQgICAgICByZWFkX3BtZF9wYWdlc2l6ZSgpKSlcbiBcdFx0ZXJyKFwiRGlkIG5vdCBmaW5kIGV4cGVjdGVkICVkIG51bWJlciBvZiBodWdlcGFnZXNcIixcbiBcdFx0ICAgIGV4cGVjdF9ucl9ocGFnZXMpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggZWYxZWExMTk4MWE3NC4uYTRmZmFhMGNhNmZhMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtMTUsNiArMTUsMTAgQEBcbiAjZGVmaW5lIFNNQVBfRklMRV9QQVRIIFwiL3Byb2Mvc2VsZi9zbWFwc1wiXG4gI2RlZmluZSBTVEFUVVNfRklMRV9QQVRIIFwiL3Byb2Mvc2VsZi9zdGF0dXNcIlxuICNkZWZpbmUgTUFYX0xJTkVfTEVOR1RIIDUwMFxuKyNkZWZpbmUgUEFHRU1BUF9QQVRIIFwiL3Byb2Mvc2VsZi9wYWdlbWFwXCJcbisjZGVmaW5lIEtQQUdFRkxBR1NfUEFUSCBcIi9wcm9jL2twYWdlZmxhZ3NcIlxuKyNkZWZpbmUgR0VUX09SREVSKG5yX3BhZ2VzKSAgICAoMzEgLSBfX2J1aWx0aW5fY2x6KG5yX3BhZ2VzKSlcbisjZGVmaW5lIE5SX09SREVSUyAyMFxuIFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0O1xuQEAgLTE5NCw2ICsxOTgsMTI1IEBAIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcbiBcdHJldHVybiByc3NfYW5vbjtcbiB9XG4gXG4rc3RhdGljIGludCB2YWRkcl9wYWdlZmxhZ3NfZ2V0KGNoYXIgKnZhZGRyLCBpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsXG4rXHRcdHVpbnQ2NF90ICpmbGFncylcbit7XG4rXHR1bnNpZ25lZCBsb25nIHBmbjtcbitcbitcdHBmbiA9IHBhZ2VtYXBfZ2V0X3BmbihwYWdlbWFwX2ZkLCB2YWRkcik7XG4rXG4rXHQvKiBub24tcHJlc2VudCBQRk4gKi9cbitcdGlmIChwZm4gPT0gLTFVTClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRpZiAocGFnZWZsYWdzX2dldChwZm4sIGtwYWdlZmxhZ3NfZmQsIGZsYWdzKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogZ2F0aGVyX2ZvbGlvX29yZGVycyAtIHNjYW4gdGhyb3VnaCBbdmFkZHJfc3RhcnQsIGxlbikgYW5kIHJlY29yZFxuKyAqIGZvbGlvIG9yZGVyc1xuKyAqXG4rICogQHZhZGRyX3N0YXJ0OiBzdGFydCB2YWRkclxuKyAqIEBsZW46IHJhbmdlIGxlbmd0aFxuKyAqIEBwYWdlbWFwX2ZkOiBmaWxlIGRlc2NyaXB0b3IgdG8gL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3BhZ2VtYXBcbisgKiBAa3BhZ2VmbGFnc19mZDogZmlsZSBkZXNjcmlwdG9yIHRvIC9wcm9jL2twYWdlZmxhZ3NcbisgKiBAb3JkZXJzOiBvdXRwdXQgZm9saW8gb3JkZXIgYXJyYXlcbisgKiBAbnJfb3JkZXJzOiBmb2xpbyBvcmRlciBhcnJheSBzaXplXG4rICpcbisgKiBnYXRoZXJfZm9saW9fb3JkZXJzKCkgc2NhbiB0aHJvdWdoIFt2YWRkcl9zdGFydCwgbGVuKSBhbmQgY2hlY2tcbisgKiBhbGwgZm9saW9zIHdpdGhpbiB0aGUgcmFuZ2UgYW5kIHJlY29yZCB0aGVpciBvcmRlcnMuIEFsbCBvcmRlci0wIHBhZ2VzIHdpbGxcbisgKiBiZSByZWNvcmRlZC4gTm9uLXByZXNlbnQgdmFkZHIgaXMgc2tpcHBlZC5cbisgKlxuKyAqIFJldHVybjogMCAtIG5vIGVycm9yLCAtMSAtIHVuaGFuZGxlZCBjYXNlc1xuKyAqL1xuK2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxuK1x0XHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycylcbit7XG4rXHR1aW50NjRfdCBwYWdlX2ZsYWdzID0gMDtcbitcdGludCBjdXJfb3JkZXIgPSAtMTtcbitcdGNoYXIgKnZhZGRyO1xuK1xuK1x0aWYgKHBhZ2VtYXBfZmQgPT0gLTEgfHwga3BhZ2VmbGFnc19mZCA9PSAtMSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKCFvcmRlcnMpXG4rXHRcdHJldHVybiAtMTtcbitcdGlmIChucl9vcmRlcnMgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRmb3IgKHZhZGRyID0gdmFkZHJfc3RhcnQ7IHZhZGRyIFx1MDAzYyB2YWRkcl9zdGFydCArIGxlbjspIHtcbitcdFx0Y2hhciAqbmV4dF9mb2xpb192YWRkcjtcbitcdFx0aW50IHN0YXR1cztcbitcbitcdFx0c3RhdHVzID0gdmFkZHJfcGFnZWZsYWdzX2dldCh2YWRkciwgcGFnZW1hcF9mZCwga3BhZ2VmbGFnc19mZCxcbitcdFx0XHRcdFx1MDAyNnBhZ2VfZmxhZ3MpO1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiAtMTtcbitcbitcdFx0Lyogc2tpcCBub24gcHJlc2VudCB2YWRkciAqL1xuK1x0XHRpZiAoc3RhdHVzID09IDEpIHtcbitcdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdC8qIGFsbCBvcmRlci0wIHBhZ2VzIHdpdGggcG9zc2libGUgZmFsc2UgcG9zdGl2ZSAobm9uIGZvbGlvKSAqL1xuK1x0XHRpZiAoIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4rXHRcdFx0b3JkZXJzWzBdKys7XG4rXHRcdFx0dmFkZHIgKz0gcHNpemUoKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHQvKiBza2lwIG5vbiB0aHAgY29tcG91bmQgcGFnZXMgKi9cbitcdFx0aWYgKCEocGFnZV9mbGFncyBcdTAwMjYgS1BGX1RIUCkpIHtcbitcdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdC8qIHZwbiBwb2ludHMgdG8gcGFydCBvZiBhIFRIUCBhdCB0aGlzIHBvaW50ICovXG4rXHRcdGlmIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRClcbitcdFx0XHRjdXJfb3JkZXIgPSAxO1xuK1x0XHRlbHNlIHtcbitcdFx0XHR2YWRkciArPSBwc2l6ZSgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdG5leHRfZm9saW9fdmFkZHIgPSB2YWRkciArICgxVUwgXHUwMDNjXHUwMDNjIChjdXJfb3JkZXIgKyBwc2hpZnQoKSkpO1xuK1xuK1x0XHRpZiAobmV4dF9mb2xpb192YWRkciBcdTAwM2U9IHZhZGRyX3N0YXJ0ICsgbGVuKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHR3aGlsZSAoKHN0YXR1cyA9IHZhZGRyX3BhZ2VmbGFnc19nZXQobmV4dF9mb2xpb192YWRkcixcbitcdFx0XHRcdFx0XHQgICAgIHBhZ2VtYXBfZmQsIGtwYWdlZmxhZ3NfZmQsXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZwYWdlX2ZsYWdzKSkgXHUwMDNlPSAwKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBub24gcHJlc2VudCB2YWRkciwgbmV4dCBjb21wb3VuZCBoZWFkIHBhZ2UsIG9yXG4rXHRcdFx0ICogb3JkZXItMCBwYWdlXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHN0YXR1cyA9PSAxIHx8XG4rXHRcdFx0ICAgIChwYWdlX2ZsYWdzIFx1MDAyNiBLUEZfQ09NUE9VTkRfSEVBRCkgfHxcbitcdFx0XHQgICAgIShwYWdlX2ZsYWdzIFx1MDAyNiAoS1BGX0NPTVBPVU5EX0hFQUQgfCBLUEZfQ09NUE9VTkRfVEFJTCkpKSB7XG4rXHRcdFx0XHRpZiAoY3VyX29yZGVyIFx1MDAzYyBucl9vcmRlcnMpIHtcbitcdFx0XHRcdFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcbitcdFx0XHRcdFx0Y3VyX29yZGVyID0gLTE7XG4rXHRcdFx0XHRcdHZhZGRyID0gbmV4dF9mb2xpb192YWRkcjtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHRjdXJfb3JkZXIrKztcbitcdFx0XHRuZXh0X2ZvbGlvX3ZhZGRyID0gdmFkZHIgKyAoMVVMIFx1MDAzY1x1MDAzYyAoY3VyX29yZGVyICsgcHNoaWZ0KCkpKTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiBzdGF0dXM7XG4rXHR9XG4rXHRpZiAoY3VyX29yZGVyIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBjdXJfb3JkZXIgXHUwMDNjIG5yX29yZGVycylcbitcdFx0b3JkZXJzW2N1cl9vcmRlcl0rKztcbitcdHJldHVybiAwO1xuK31cbitcbiBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTIyOSw3ICszNTIsNyBAQCBjaGFyICpfX2dldF9zbWFwX2VudHJ5KHZvaWQgKmFkZHIsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tYm9vbCBfX2NoZWNrX2h1Z2Uodm9pZCAqYWRkciwgY2hhciAqcGF0dGVybiwgaW50IG5yX2hwYWdlcyxcbitzdGF0aWMgYm9vbCBfX2NoZWNrX3BtZF9odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXG4gXHRcdCAgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbiB7XG4gXHRjaGFyIGJ1ZmZlcltNQVhfTElORV9MRU5HVEhdO1xuQEAgLTI0NywxOSArMzcwLDYyIEBAIGJvb2wgX19jaGVja19odWdlKHZvaWQgKmFkZHIsIGNoYXIgKnBhdHRlcm4sIGludCBucl9ocGFnZXMsXG4gXHRyZXR1cm4gdGhwID09IChucl9ocGFnZXMgKiAoaHBhZ2Vfc2l6ZSBcdTAwM2VcdTAwM2UgMTApKTtcbiB9XG4gXG4tYm9vbCBjaGVja19odWdlX2Fub24odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbitzdGF0aWMgYm9vbCBjaGVja19sYXJnZV9mb2xpb3Modm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXCJBbm9uSHVnZVBhZ2VzOiBcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdGludCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4rXHRpbnQgb3JkZXIgPSBHRVRfT1JERVIoaHBhZ2Vfc2l6ZSAvIHBhZ2VzaXplKTtcbitcdGludCBwYWdlbWFwX2ZkLCBrcGFnZWZsYWdzX2ZkO1xuK1x0aW50IG9yZGVyc1tOUl9PUkRFUlNdLCBzdGF0dXM7XG4rXHRib29sIHJldCA9IGZhbHNlO1xuK1xuK1x0bWVtc2V0KG9yZGVycywgMCwgc2l6ZW9mKGludCkgKiBOUl9PUkRFUlMpO1xuK1xuK1x0cGFnZW1hcF9mZCA9IG9wZW4oUEFHRU1BUF9QQVRILCBPX1JET05MWSk7XG4rXHRpZiAocGFnZW1hcF9mZCA9PSAtMSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZCBwYWdlbWFwIGZhaWxcXG5cIik7XG4rXG4rXHRrcGFnZWZsYWdzX2ZkID0gb3BlbihLUEFHRUZMQUdTX1BBVEgsIE9fUkRPTkxZKTtcbitcdGlmIChrcGFnZWZsYWdzX2ZkID09IC0xKSB7XG4rXHRcdGNsb3NlKHBhZ2VtYXBfZmQpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkIGtwYWdlZmxhZ3MgZmFpbFxcblwiKTtcbitcdH1cbitcbitcdHN0YXR1cyA9IGdhdGhlcl9mb2xpb19vcmRlcnMoYWRkciwgc2l6ZSwgcGFnZW1hcF9mZCxcbitcdFx0XHRrcGFnZWZsYWdzX2ZkLCBvcmRlcnMsIE5SX09SREVSUyk7XG4rXHRpZiAoc3RhdHVzKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmIChvcmRlcnNbb3JkZXJdID09IG5yX2hwYWdlcylcbitcdFx0cmV0ID0gdHJ1ZTtcbitcbitvdXQ6XG4rXHRjbG9zZShwYWdlbWFwX2ZkKTtcbitcdGNsb3NlKGtwYWdlZmxhZ3NfZmQpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4tYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbitib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4ge1xuLVx0cmV0dXJuIF9fY2hlY2tfaHVnZShhZGRyLCBcIkZpbGVQbWRNYXBwZWQ6XCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXHRpZiAoaHBhZ2Vfc2l6ZSA9PSByZWFkX3BtZF9wYWdlc2l6ZSgpKVxuK1x0XHRyZXR1cm4gX19jaGVja19wbWRfaHVnZShhZGRyLCBcIkFub25IdWdlUGFnZXM6IFwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuK1xuK1x0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuK31cbitcbitib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpXG4re1xuK1x0aWYgKGhwYWdlX3NpemUgPT0gcmVhZF9wbWRfcGFnZXNpemUoKSlcbitcdFx0cmV0dXJuIF9fY2hlY2tfcG1kX2h1Z2UoYWRkciwgXCJGaWxlUG1kTWFwcGVkOlwiLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuK1xuK1x0cmV0dXJuIGNoZWNrX2xhcmdlX2ZvbGlvcyhhZGRyLCBzaXplLCBucl9ocGFnZXMsIGhwYWdlX3NpemUpO1xuIH1cbiBcbi1ib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSlcbitib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKVxuIHtcbi1cdHJldHVybiBfX2NoZWNrX2h1Z2UoYWRkciwgXCJTaG1lbVBtZE1hcHBlZDpcIiwgbnJfaHBhZ2VzLCBocGFnZV9zaXplKTtcbitcdGlmIChocGFnZV9zaXplID09IHJlYWRfcG1kX3BhZ2VzaXplKCkpXG4rXHRcdHJldHVybiBfX2NoZWNrX3BtZF9odWdlKGFkZHIsIFwiU2htZW1QbWRNYXBwZWQ6XCIsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4rXG4rXHRyZXR1cm4gY2hlY2tfbGFyZ2VfZm9saW9zKGFkZHIsIHNpemUsIG5yX2hwYWdlcywgaHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA3Nzk5MTU0YjY3ZWVkLi4yMGFmM2U1NzRjZDgwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC05MCwxMSArOTAsMTMgQEAgdm9pZCBjbGVhcl9zb2Z0ZGlydHkodm9pZCk7XG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKTtcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xuLWJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuLWJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuLWJvb2wgY2hlY2tfaHVnZV9zaG1lbSh2b2lkICphZGRyLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbitib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuK2Jvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4rYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZCk7XG4gaW50IHBhZ2VmbGFnc19nZXQodW5zaWduZWQgbG9uZyBwZm4sIGludCBrcGFnZWZsYWdzX2ZkLCB1aW50NjRfdCAqZmxhZ3MpO1xuK2ludCBnYXRoZXJfZm9saW9fb3JkZXJzKGNoYXIgKnZhZGRyX3N0YXJ0LCBzaXplX3QgbGVuLFxuK1x0XHRpbnQgcGFnZW1hcF9mZCwgaW50IGtwYWdlZmxhZ3NfZmQsIGludCBvcmRlcnNbXSwgaW50IG5yX29yZGVycyk7XG4gXG4gaW50IHVmZmRfcmVnaXN0ZXIoaW50IHVmZmQsIHZvaWQgKmFkZHIsIHVpbnQ2NF90IGxlbixcbiBcdFx0ICBib29sIG1pc3MsIGJvb2wgd3AsIGJvb2wgbWlub3IpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDU6MzI6NTYuMzE4Mzk4MjgyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY4MjQ0MDQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRXZhbHVhdGlvbjogQW5hbHlzaXMgb2YgYSBNZW1vcnkgTWFuYWdlbWVudCBTZWxmdGVzdCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBsaXZlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gUmlnaHQgYXdheSwgdGhhdCdzIGEgcmVkIGZsYWcgaW4gdGhlIGNvbnRleHQgb2Yga2VybmVsIGZ1enppbmcuIFRoZSBmaWxlcyBsaXN0ZWQgYXJlIGFsbCByZWxhdGVkIHRvIHVzZXJzcGFjZSB0ZXN0cyBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbTogYGZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jYCwgYGtodWdlcGFnZWQuY2AsIGBwYWdlbWFwX2lvY3RsLmNgLCBhbmQgc28gb24uIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHByaW1hcmlseSBjb25jZXJucyBpdHNlbGYgd2l0aCBhZGRpbmcgbVRIUCAobXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSB0ZXN0aW5nLCB3aXRoIGFkanVzdG1lbnRzIHRvIHJlbGF0ZWQgZnVuY3Rpb25zLlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIHByb21wdC4gSXQncyBhc2tpbmcgaWYgdGhpcyBwYXRjaCBpcyBcIldvcnRoRnV6emluZy5cIiBCYXNlZCBvbiB0aGUgY3JpdGVyaWEgaXQgZ2l2ZXMsIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGUgbW9kaWZpY2F0aW9ucyBhZmZlY3QgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggKm9ubHkqIGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgdG8gdGVzdHMgb3IgZG9jdW1lbnRhdGlvbi5cblxuSSd2ZSBhbHJlYWR5IGFzY2VydGFpbmVkIHRoYXQgdGhpcyBwYXRjaCBpcyBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIHRoZSBzZWxmdGVzdHMgZGlyZWN0b3J5LiBTZWxmdGVzdHMgYXJlICp1c2Vyc3BhY2UqIHByb2dyYW1zIGRlc2lnbmVkIHRvIHRlc3QgdGhlIGtlcm5lbCdzIGJlaGF2aW9yLiBUaGUgbW9kaWZpY2F0aW9ucyBoZXJlIGFyZSB0byAqdGVzdCogdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBub3QgdG8gKmNoYW5nZSogdGhlIGtlcm5lbCBpdHNlbGYuIEZ1enppbmcgc2VsZnRlc3RzIGlzIG5vdCB0aGUgc2FtZSBhcyBmdXp6aW5nIHRoZSBrZXJuZWwsIHNpbmNlIGZ1enppbmcgdGhlIGtlcm5lbCBmb2N1c2VzIG9uIHN5c3RlbSBjYWxscyBhbmQga2VybmVsIGVudHJ5IHBvaW50cy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBteSBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuIEkgaGF2ZSBhIG1lbnRhbCBjaGVja2xpc3QuIExldCBtZSB2ZXJpZnk6XG4tIEkndmUgdmVyaWZpZWQgdGhlIHBhdGggcHJlZml4IGZvciBhbGwgbW9kaWZpZWQgZmlsZXMuXG4tIFRoZSBwYXRoIHByZWZpeCBpcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC5cbi0gTm8ga2VybmVsIGNvZGUgaXMgcHJlc2VudC5cbi0gSXQncyBhbGwgdXNlcnNwYWNlIGNvZGUuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzLCBJIGNvbmNsdWRlIHRoYXQgaXQgZG9lcyAqbm90KiB0b3VjaCByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhlIHByb21wdCdzIGNyaXRlcmlhLCB0aGUgcGF0Y2ggaXMgKipub3QqKiB3b3J0aCBmdXp6aW5nLiBUaGUgcmVzdWx0IGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ3MCwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA1OjMzOjA1LjAwMDg0NDQzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow2j75n[1] Phase: Running StartedAt: 2026-07-29 05:33:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2j75n[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-29 05:33:16 +0000 UTC FinishedAt: 2026-07-29 05:33:51 +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,}