Name: series-workflowd24ct Phase: Failed StartedAt: 2026-06-23 14:40:05 +0000 UTC FinishedAt: 2026-06-23 14:54:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd24ct[0] Phase: Succeeded StartedAt: 2026-06-23 14:40:05 +0000 UTC FinishedAt: 2026-06-23 14:53:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd24ct[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 14:40:05 +0000 UTC FinishedAt: 2026-06-23 14:53:58 +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+CgkJCTx0ZD4yMDI2LzA2LzIzIDE0OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhbmQgYXBwbGllcyBkZWZlcnJlZCB2YXJpYW50cyBvZiBXQVJOX09OIGFuZCBXQVJOX09OX09OQ0UgbWFjcm9zIChXQVJOX09OX0RFRkVSUkVELCBXQVJOX09OX09OQ0VfREVGRVJSRUQpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgd2FybmluZyBwcmludHMgaW4gdGhlIHNjaGVkdWxlci4gVGhpcyBpcyBwdXJlbHkgYSBsb2dnaW5nL2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBub3JtYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTQ6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNGY2N2JjMDkxMGFlZmI5YTUyYTQ1MWRlMjM2Y2YwNWVmMzk4OTRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTQ6NTI6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhcbmluZGV4IDA5ZThlY2NlZThlZDk3Li4xZTNmZjAwZjcwOWI4OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNkZWZpbmUgQlVHRkxBR19ET05FXHRcdCgxIFx1MDAzY1x1MDAzYyAyKVxuICNkZWZpbmUgQlVHRkxBR19OT19DVVRfSEVSRVx0KDEgXHUwMDNjXHUwMDNjIDMpXHQvKiBDVVRfSEVSRSBhbHJlYWR5IHNlbnQgKi9cbiAjZGVmaW5lIEJVR0ZMQUdfQVJHU1x0XHQoMSBcdTAwM2NcdTAwM2MgNClcbiYjNDM7I2RlZmluZSBCVUdGTEFHX0RFRkVSUkVEXHQoMSBcdTAwM2NcdTAwM2MgNSlcbiAjZGVmaW5lIEJVR0ZMQUdfVEFJTlQodGFpbnQpXHQoKHRhaW50KSBcdTAwM2NcdTAwM2MgOClcbiAjZGVmaW5lIEJVR19HRVRfVEFJTlQoYnVnKVx0KChidWcpLVx1MDAzZWZsYWdzIFx1MDAzZVx1MDAzZSA4KVxuICNlbmRpZlxuQEAgLTExNSw2ICYjNDM7MTE2LDE2IEBAIGV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pO1xuIH0pXG4gI2VuZGlmXG4gXG4mIzQzOyNkZWZpbmUgV0FSTl9PTl9ERUZFUlJFRChjb25kaXRpb24pICh7XHRcdFx0XHRcdFxcXG4mIzQzO1x0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1x0XHRcdFx0XFxcbiYjNDM7XHRpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbikpIHtcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdF9fV0FSTl9GTEFHUygjY29uZGl0aW9uLFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0ICAgICBCVUdGTEFHX0RFRkVSUkVEIHxcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdCAgICAgQlVHRkxBR19UQUlOVChUQUlOVF9XQVJOKSk7XHRcdFxcXG4mIzQzO1x0fVx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHVubGlrZWx5KF9fcmV0X3dhcm5fb24pO1x0XHRcdFx0XHRcXFxuJiM0Mzt9KVxuJiM0MztcbiAjaWZuZGVmIFdBUk5fT05fT05DRVxuICNkZWZpbmUgV0FSTl9PTl9PTkNFKGNvbmRpdGlvbikgKHtcdFx0XHRcdFx0XFxcbiBcdGludCBfX3JldF93YXJuX29uID0gISEoY29uZGl0aW9uKTtcdFx0XHRcdFxcXG5AQCAtMTI1LDYgJiM0MzsxMzYsMTYgQEAgZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4gXHR1bmxpa2VseShfX3JldF93YXJuX29uKTtcdFx0XHRcdFx0XFxcbiB9KVxuICNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSBXQVJOX09OX09OQ0VfREVGRVJSRUQoY29uZGl0aW9uKSAoe1x0XHRcdFx0XFxcbiYjNDM7XHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XHRcXFxuJiM0MztcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkge1x0XHRcdFx0XHRcXFxuJiM0MztcdFx0X19XQVJOX0ZMQUdTKCNjb25kaXRpb24sXHRcdFx0XHRcXFxuJiM0MztcdFx0XHQgICAgIEJVR0ZMQUdfT05DRSB8IEJVR0ZMQUdfREVGRVJSRUQgfFx0XHRcXFxuJiM0MztcdFx0XHQgICAgIEJVR0ZMQUdfVEFJTlQoVEFJTlRfV0FSTikpO1x0XHRcXFxuJiM0MztcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR1bmxpa2VseShfX3JldF93YXJuX29uKTtcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiAjZW5kaWYgLyogX19XQVJOX0ZMQUdTICovXG4gXG4gI2lmIGRlZmluZWQoX19XQVJOX0ZMQUdTKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoX19XQVJOX3ByaW50ZilcbkBAIC0xNTksNiAmIzQzOzE4MCwxOSBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcbiB9KVxuICNlbmRpZlxuIFxuJiM0MzsjaWZuZGVmIFdBUk5fT05fREVGRVJSRURcbiYjNDM7I2RlZmluZSBXQVJOX09OX0RFRkVSUkVEKGNvbmRpdGlvbikgKHtcdFx0XHRcdFx0XFxcbiYjNDM7XHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XHRcXFxuJiM0MztcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkge1x0XHRcdFx0XHRcXFxuJiM0MztcdFx0Z3VhcmQocHJlZW1wdCkoKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHByaW50a19kZWZlcnJlZF9lbnRlcigpXHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRfX1dBUk4oKTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0cHJpbnRrX2RlZmVycmVkX2V4aXQoKVx0XHRcdFx0XHRcXFxuJiM0MztcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR1bmxpa2VseShfX3JldF93YXJuX29uKTtcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNpZm5kZWYgV0FSTlxuICNkZWZpbmUgV0FSTihjb25kaXRpb24sIGZvcm1hdC4uLikgKHtcdFx0XHRcdFx0XFxcbiBcdGludCBfX3JldF93YXJuX29uID0gISEoY29uZGl0aW9uKTtcdFx0XHRcdFxcXG5AQCAtMTgwLDYgJiM0MzsyMTQsMTEgQEAgZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4gXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxuICNlbmRpZlxuIFxuJiM0MzsjaWZuZGVmIFdBUk5fT05fT05DRV9ERUZFUlJFRFxuJiM0MzsjZGVmaW5lIFdBUk5fT05fT05DRV9ERUZFUlJFRChjb25kaXRpb24pXHRcdFx0XHRcXFxuJiM0MztcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT05fREVGRVJSRUQsIDEpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjaWZuZGVmIFdBUk5fT05DRVxuICNkZWZpbmUgV0FSTl9PTkNFKGNvbmRpdGlvbiwgZm9ybWF0Li4uKVx0XHRcdFx0XFxcbiBcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk4sIDEsIGZvcm1hdClcbkBAIC0yMTUsNyAmIzQzOzI1NCw5IEBAIGV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pO1xuIH0pXG4gI2VuZGlmXG4gXG4mIzQzOyNkZWZpbmUgV0FSTl9PTl9ERUZFUlJFRChjb25kaXRpb24pIFdBUk5fT04oY29uZGl0aW9uKVxuICNkZWZpbmUgV0FSTl9PTl9PTkNFKGNvbmRpdGlvbikgV0FSTl9PTihjb25kaXRpb24pXG4mIzQzOyNkZWZpbmUgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNvbmRpdGlvbikgV0FSTl9PTihjb25kaXRpb24pXG4gI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpXG4gI2RlZmluZSBXQVJOX1RBSU5UKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLikgV0FSTihjb25kaXRpb24sIGZvcm1hdClcbiAjZGVmaW5lIFdBUk5fVEFJTlRfT05DRShjb25kaXRpb24sIHRhaW50LCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbmluZGV4IGI4ODcxNDQ5ZDNjNjk0Li4wZTI4MjQ1N2FiYjkxNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC04NTMsNyAmIzQzOzg1Myw3IEBAIHZvaWQgdXBkYXRlX3JxX2Nsb2NrKHN0cnVjdCBycSAqcnEpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChzY2hlZF9mZWF0KFdBUk5fRE9VQkxFX0NMT0NLKSlcbi1cdFx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcdTAwMjYgUlFDRl9VUERBVEVEKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDI2IFJRQ0ZfVVBEQVRFRCk7XG4gXHRycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgfD0gUlFDRl9VUERBVEVEO1xuIFxuIFx0Y2xvY2sgPSBzY2hlZF9jbG9ja19jcHUoY3B1X29mKHJxKSk7XG5AQCAtMTgwNyw3ICYjNDM7MTgwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1Y2xhbXBfcnFfZGVjX2lkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcbiBcdGJ1Y2tldCA9IFx1MDAyNnVjX3JxLVx1MDAzZWJ1Y2tldFt1Y19zZS1cdTAwM2VidWNrZXRfaWRdO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCFidWNrZXQtXHUwMDNldGFza3MpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghYnVja2V0LVx1MDAzZXRhc2tzKTtcbiBcdGlmIChsaWtlbHkoYnVja2V0LVx1MDAzZXRhc2tzKSlcbiBcdFx0YnVja2V0LVx1MDAzZXRhc2tzLS07XG4gXG5AQCAtMTgyNyw3ICYjNDM7MTgyNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1Y2xhbXBfcnFfZGVjX2lkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdCAqIERlZmVuc2l2ZSBwcm9ncmFtbWluZzogdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiBJZiBpdCBoYXBwZW5zLFxuIFx0ICogZS5nLiBkdWUgdG8gZnV0dXJlIG1vZGlmaWNhdGlvbiwgd2FybiBhbmQgZml4IHVwIHRoZSBleHBlY3RlZCB2YWx1ZS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKGJ1Y2tldC1cdTAwM2V2YWx1ZSBcdTAwM2UgcnFfY2xhbXApO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChidWNrZXQtXHUwMDNldmFsdWUgXHUwMDNlIHJxX2NsYW1wKTtcbiBcdGlmIChidWNrZXQtXHUwMDNldmFsdWUgXHUwMDNlPSBycV9jbGFtcCkge1xuIFx0XHRia3RfY2xhbXAgPSB1Y2xhbXBfcnFfbWF4X3ZhbHVlKHJxLCBjbGFtcF9pZCwgdWNfc2UtXHUwMDNldmFsdWUpO1xuIFx0XHR1Y2xhbXBfcnFfc2V0KHJxLCBjbGFtcF9pZCwgYmt0X2NsYW1wKTtcbkBAIC0yMjEwLDcgJiM0MzsyMjEwLDcgQEAgdm9pZCBhY3RpdmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxuIFxuIHZvaWQgZGVhY3RpdmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxuIHtcbi1cdFdBUk5fT05fT05DRShmbGFncyBcdTAwMjYgREVRVUVVRV9TTEVFUCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGZsYWdzIFx1MDAyNiBERVFVRVVFX1NMRUVQKTtcbiBcbiBcdFdSSVRFX09OQ0UocC1cdTAwM2Vvbl9ycSwgVEFTS19PTl9SUV9NSUdSQVRJTkcpO1xuIFx0QVNTRVJUX0VYQ0xVU0lWRV9XUklURVIocC1cdTAwM2Vvbl9ycSk7XG5AQCAtMjUxNiw3ICYjNDM7MjUxNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnEgKm1vdmVfcXVldWVkX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHJxX2ZsYWdzICpyZixcbiBcdHJxID0gY3B1X3JxKG5ld19jcHUpO1xuIFxuIFx0cnFfbG9jayhycSwgcmYpO1xuLVx0V0FSTl9PTl9PTkNFKHRhc2tfY3B1KHApICE9IG5ld19jcHUpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX2NwdShwKSAhPSBuZXdfY3B1KTtcbiBcdGFjdGl2YXRlX3Rhc2socnEsIHAsIDApO1xuIFx0d2FrZXVwX3ByZWVtcHQocnEsIHAsIDApO1xuIFxuQEAgLTI2MDIsNyAmIzQzOzI2MDIsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGlvbl9jcHVfc3RvcCh2b2lkICpkYXRhKVxuIFx0ICogSWYgd2Ugd2VyZSBwYXNzZWQgYSBwZW5kaW5nLCB0aGVuIC1cdTAwM2VzdG9wX3BlbmRpbmcgd2FzIHNldCwgdGh1c1xuIFx0ICogcC1cdTAwM2VtaWdyYXRpb25fcGVuZGluZyBtdXN0IGhhdmUgcmVtYWluZWQgc3RhYmxlLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UocGVuZGluZyBcdTAwMjZcdTAwMjYgcGVuZGluZyAhPSBwLVx1MDAzZW1pZ3JhdGlvbl9wZW5kaW5nKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocGVuZGluZyBcdTAwMjZcdTAwMjYgcGVuZGluZyAhPSBwLVx1MDAzZW1pZ3JhdGlvbl9wZW5kaW5nKTtcbiBcbiBcdC8qXG4gXHQgKiBJZiB0YXNrX3JxKHApICE9IHJxLCBpdCBjYW5ub3QgYmUgbWlncmF0ZWQgaGVyZSwgYmVjYXVzZSB3ZSYjMzk7cmVcbkBAIC0yNjYxLDcgJiM0MzsyNjYxLDcgQEAgc3RhdGljIGludCBtaWdyYXRpb25fY3B1X3N0b3Aodm9pZCAqZGF0YSlcbiBcdFx0ICogZGV0ZXJtaW5lIGlzX21pZ3JhdGlvbl9kaXNhYmxlZCgpIGFuZCBzbyBoYXZlIHRvIGNoYXNlIGFmdGVyXG4gXHRcdCAqIGl0LlxuIFx0XHQgKi9cbi1cdFx0V0FSTl9PTl9PTkNFKCFwZW5kaW5nLVx1MDAzZXN0b3BfcGVuZGluZyk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXBlbmRpbmctXHUwMDNlc3RvcF9wZW5kaW5nKTtcbiBcdFx0cHJlZW1wdF9kaXNhYmxlKCk7XG4gXHRcdHJxX3VubG9jayhycSwgXHUwMDI2cmYpO1xuIFx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwLVx1MDAzZXBpX2xvY2ssIHJmLmZsYWdzKTtcbkBAIC0zMDA0LDcgJiM0MzszMDA0LDcgQEAgc3RhdGljIGludCBhZmZpbmVfbW92ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxX2ZsYWdcbiBcdCAqXG4gXHQgKiBFaXRoZXIgd2F5LCB3ZSByZWFsbHkgc2hvdWxkIGhhdmUgYSBAcGVuZGluZyBoZXJlLlxuIFx0ICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFwZW5kaW5nKSkge1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXBlbmRpbmcpKSB7XG4gXHRcdHRhc2tfcnFfdW5sb2NrKHJxLCBwLCByZik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTMxMTYsOSAmIzQzOzMxMTYsOSBAQCBzdGF0aWMgaW50IF9fc2V0X2NwdXNfYWxsb3dlZF9wdHJfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHAgPT0gY3VycmVudCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCBpc19taWdyYXRpb25fZGlzYWJsZWQocCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHQgIWNwdW1hc2tfdGVzdF9jcHUodGFza19jcHUocCksIGN0eC1cdTAwM2VuZXdfbWFzaykpKSB7XG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAgPT0gY3VycmVudCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdCAgaXNfbWlncmF0aW9uX2Rpc2FibGVkKHApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdFx0ICAhY3B1bWFza190ZXN0X2NwdSh0YXNrX2NwdShwKSwgY3R4LVx1MDAzZW5ld19tYXNrKSkpIHtcbiBcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC0zMjY3LDcgJiM0MzszMjY3LDcgQEAgdm9pZCBmb3JjZV9jb21wYXRpYmxlX2NwdXNfYWxsb3dlZF9wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0XHRcdFx0Y3B1bWFza19wcl9hcmdzKG92ZXJyaWRlX21hc2spKTtcbiBcdH1cbiBcbi1cdFdBUk5fT04oc2V0X2NwdXNfYWxsb3dlZF9wdHIocCwgb3ZlcnJpZGVfbWFzaykpO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQoc2V0X2NwdXNfYWxsb3dlZF9wdHIocCwgb3ZlcnJpZGVfbWFzaykpO1xuIG91dF9mcmVlX21hc2s6XG4gXHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4gXHRmcmVlX2NwdW1hc2tfdmFyKG5ld19tYXNrKTtcbkBAIC0zMjkzLDcgJiM0MzszMjkzLDcgQEAgdm9pZCByZWxheF9jb21wYXRpYmxlX2NwdXNfYWxsb3dlZF9wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0ICogQ3B1c2V0IG1hc2tpbmcgd2lsbCBiZSBkb25lIHRoZXJlIHRvby5cbiBcdCAqL1xuIFx0cmV0ID0gX19zY2hlZF9zZXRhZmZpbml0eShwLCBcdTAwMjZhYyk7XG4tXHRXQVJOX09OX09OQ0UocmV0KTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocmV0KTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19TTVBcbkBAIC0zMzA2LDE2ICYjNDM7MzMwNiwxNiBAQCB2b2lkIHNldF90YXNrX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBuZXdfY3B1KVxuIFx0ICogV2Ugc2hvdWxkIG5ldmVyIGNhbGwgc2V0X3Rhc2tfY3B1KCkgb24gYSBibG9ja2VkIHRhc2ssXG4gXHQgKiB0dHd1KCkgd2lsbCBzb3J0IG91dCB0aGUgcGxhY2VtZW50LlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0Uoc3RhdGUgIT0gVEFTS19SVU5OSU5HIFx1MDAyNlx1MDAyNiBzdGF0ZSAhPSBUQVNLX1dBS0lORyBcdTAwMjZcdTAwMjYgIXAtXHUwMDNlb25fcnEpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChzdGF0ZSAhPSBUQVNLX1JVTk5JTkcgXHUwMDI2XHUwMDI2IHN0YXRlICE9IFRBU0tfV0FLSU5HIFx1MDAyNlx1MDAyNiAhcC1cdTAwM2Vvbl9ycSk7XG4gXG4gXHQvKlxuIFx0ICogTWlncmF0aW5nIGZhaXIgY2xhc3MgdGFzayBtdXN0IGhhdmUgcC1cdTAwM2Vvbl9ycSA9IFRBU0tfT05fUlFfTUlHUkFUSU5HLFxuIFx0ICogYmVjYXVzZSBzY2hlZHN0YXRfd2FpdF97c3RhcnQsZW5kfSByZWJhc2UgbWlncmF0aW5nIHRhc2smIzM5O3Mgd2FpdF9zdGFydFxuIFx0ICogdGltZSByZWx5aW5nIG9uIHAtXHUwMDNlb25fcnEuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShzdGF0ZSA9PSBUQVNLX1JVTk5JTkcgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgcC1cdTAwM2VzY2hlZF9jbGFzcyA9PSBcdTAwMjZmYWlyX3NjaGVkX2NsYXNzIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIChwLVx1MDAzZW9uX3JxIFx1MDAyNlx1MDAyNiAhdGFza19vbl9ycV9taWdyYXRpbmcocCkpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc3RhdGUgPT0gVEFTS19SVU5OSU5HIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgICBwLVx1MDAzZXNjaGVkX2NsYXNzID09IFx1MDAyNmZhaXJfc2NoZWRfY2xhc3MgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgIChwLVx1MDAzZW9uX3JxIFx1MDAyNlx1MDAyNiAhdGFza19vbl9ycV9taWdyYXRpbmcocCkpKTtcbiBcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiBcdC8qXG5AQCAtMzMyOCwxNSAmIzQzOzMzMjgsMTUgQEAgdm9pZCBzZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgbmV3X2NwdSlcbiBcdCAqIEZ1cnRoZXJtb3JlLCBhbGwgdGFza19ycSB1c2VycyBzaG91bGQgYWNxdWlyZSBib3RoIGxvY2tzLCBzZWVcbiBcdCAqIHRhc2tfcnFfbG9jaygpLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UoZGVidWdfbG9ja3MgXHUwMDI2XHUwMDI2ICEobG9ja2RlcF9pc19oZWxkKFx1MDAyNnAtXHUwMDNlcGlfbG9jaykgfHxcbi1cdFx0XHRcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChfX3JxX2xvY2twKHRhc2tfcnEocCkpKSkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkZWJ1Z19sb2NrcyBcdTAwMjZcdTAwMjYgIShsb2NrZGVwX2lzX2hlbGQoXHUwMDI2cC1cdTAwM2VwaV9sb2NrKSB8fFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGxvY2tkZXBfaXNfaGVsZChfX3JxX2xvY2twKHRhc2tfcnEocCkpKSkpO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIENsZWFybHksIG1pZ3JhdGluZyB0YXNrcyB0byBvZmZsaW5lIENQVXMgaXMgYSBmYWlybHkgZGFmdCB0aGluZy5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKCFjcHVfb25saW5lKG5ld19jcHUpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNwdV9vbmxpbmUobmV3X2NwdSkpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKGlzX21pZ3JhdGlvbl9kaXNhYmxlZChwKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGlzX21pZ3JhdGlvbl9kaXNhYmxlZChwKSk7XG4gXG4gXHR0cmFjZV9zY2hlZF9taWdyYXRlX3Rhc2socCwgbmV3X2NwdSk7XG4gXG5AQCAtMzgwMywxMCAmIzQzOzM4MDMsMTAgQEAgdm9pZCBzY2hlZF90dHd1X3BlbmRpbmcodm9pZCAqYXJnKVxuIFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbiBcbiBcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdCwgbGxpc3QsIHdha2VfZW50cnkubGxpc3QpIHtcbi1cdFx0aWYgKFdBUk5fT05fT05DRShwLVx1MDAzZW9uX2NwdSkpXG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlb25fY3B1KSlcbiBcdFx0XHRzbXBfY29uZF9sb2FkX2FjcXVpcmUoXHUwMDI2cC1cdTAwM2Vvbl9jcHUsICFWQUwpO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHRhc2tfY3B1KHApICE9IGNwdV9vZihycSkpKVxuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX2NwdShwKSAhPSBjcHVfb2YocnEpKSlcbiBcdFx0XHRzZXRfdGFza19jcHUocCwgY3B1X29mKHJxKSk7XG4gXG4gXHRcdHR0d3VfZG9fYWN0aXZhdGUocnEsIHAsIHAtXHUwMDNlc2NoZWRfcmVtb3RlX3dha2V1cCA/IFdGX01JR1JBVEVEIDogMCwgXHUwMDI2cmYpO1xuQEAgLTQwMDMsOCAmIzQzOzQwMDMsOCBAQCBib29sIHR0d3Vfc3RhdGVfbWF0Y2goc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgc3RhdGUsIGludCAqc3VjY2VzcylcbiBcdGludCBtYXRjaDtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19ERUJVR19QUkVFTVBUKSkge1xuLVx0XHRXQVJOX09OX09OQ0UoKHN0YXRlIFx1MDAyNiBUQVNLX1JUTE9DS19XQUlUKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgIHN0YXRlICE9IFRBU0tfUlRMT0NLX1dBSVQpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKChzdGF0ZSBcdTAwMjYgVEFTS19SVExPQ0tfV0FJVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICAgc3RhdGUgIT0gVEFTS19SVExPQ0tfV0FJVCk7XG4gXHR9XG4gXG4gXHQqc3VjY2VzcyA9ICEhKG1hdGNoID0gX190YXNrX3N0YXRlX21hdGNoKHAsIHN0YXRlKSk7XG5AQCAtNTc0NSw3ICYjNDM7NTc0NSw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkX3RpY2tfcmVtb3RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0XHQgKiB3ZSBhcmUgYWx3YXlzIHN1cmUgdGhhdCB0aGVyZSBpcyBubyBwcm94eSAob25seSBhXG4gXHRcdFx0ICogc2luZ2xlIHRhc2sgaXMgcnVubmluZykuXG4gXHRcdFx0ICovXG4tXHRcdFx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWN1cnIgIT0gcnEtXHUwMDNlZG9ub3IpO1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXHUwMDNlY3VyciAhPSBycS1cdTAwM2Vkb25vcik7XG4gXHRcdFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbiBcbiBcdFx0XHRpZiAoIWlzX2lkbGVfdGFzayhjdXJyKSkge1xuQEAgLTU3NTQsNyAmIzQzOzU3NTQsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdFx0XHQgKiByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHR1NjQgZGVsdGEgPSBycV9jbG9ja190YXNrKHJxKSAtIGN1cnItXHUwMDNlc2UuZXhlY19zdGFydDtcbi1cdFx0XHRcdFdBUk5fT05fT05DRShkZWx0YSBcdTAwM2UgKHU2NClOU0VDX1BFUl9TRUMgKiAzMCk7XG4mIzQzO1x0XHRcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRlbHRhIFx1MDAzZSAodTY0KU5TRUNfUEVSX1NFQyAqIDMwKTtcbiBcdFx0XHR9XG4gXHRcdFx0Y3Vyci1cdTAwM2VzY2hlZF9jbGFzcy1cdTAwM2V0YXNrX3RpY2socnEsIGN1cnIsIDApO1xuIFxuQEAgLTU3NjksNyAmIzQzOzU3NjksNyBAQCBzdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHQgKiBmaXJzdCB1cGRhdGUgc3RhdGUgdG8gcmVmbGVjdCBob3RwbHVnIGFjdGl2aXR5IGlmIHJlcXVpcmVkLlxuIFx0ICovXG4gXHRvcyA9IGF0b21pY19mZXRjaF9hZGRfdW5sZXNzKFx1MDAyNnR3b3JrLVx1MDAzZXN0YXRlLCAtMSwgVElDS19TQ0hFRF9SRU1PVEVfUlVOTklORyk7XG4tXHRXQVJOX09OX09OQ0Uob3MgPT0gVElDS19TQ0hFRF9SRU1PVEVfT0ZGTElORSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKG9zID09IFRJQ0tfU0NIRURfUkVNT1RFX09GRkxJTkUpO1xuIFx0aWYgKG9zID09IFRJQ0tfU0NIRURfUkVNT1RFX1JVTk5JTkcpXG4gXHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBkd29yaywgSFopO1xuIH1cbkBAIC02MTk2LDcgJiM0Mzs2MTk2LDcgQEAgcGlja19uZXh0X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxuIFx0XHRcdCAqIEZvciByb2J1c3RuZXNzLCB1cGRhdGUgdGhlIG1pbl92cnVudGltZV9maSBmb3JcbiBcdFx0XHQgKiB1bmNvbnN0cmFpbmVkIHBpY2tzIGFzIHdlbGwuXG4gXHRcdFx0ICovXG4tXHRcdFx0V0FSTl9PTl9PTkNFKGZpX2JlZm9yZSk7XG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChmaV9iZWZvcmUpO1xuIFx0XHRcdHRhc2tfdnJ1bnRpbWVfdXBkYXRlKHJxLCBuZXh0LCBmYWxzZSk7XG4gXHRcdFx0Z290byBvdXRfc2V0X25leHQ7XG4gXHRcdH1cbkBAIC02Mjc0LDcgJiM0Mzs2Mjc0LDcgQEAgcGlja19uZXh0X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxuIFx0cnEtXHUwMDNlY29yZV9zY2hlZF9zZXEgPSBycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfcGlja19zZXE7XG4gXG4gXHQvKiBTb21ldGhpbmcgc2hvdWxkIGhhdmUgYmVlbiBzZWxlY3RlZCBmb3IgY3VycmVudCBDUFUgKi9cbi1cdFdBUk5fT05fT05DRSghbmV4dCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFuZXh0KTtcbiBcbiBcdC8qXG4gXHQgKiBSZXNjaGVkdWxlIHNpYmxpbmdzXG5AQCAtNjMxNyw3ICYjNDM7NjMxNyw3IEBAIHBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHJxX2ZsYWdzICpyZilcbiBcdFx0fVxuIFxuIFx0XHQvKiBEaWQgd2UgYnJlYWsgTDFURiBtaXRpZ2F0aW9uIHJlcXVpcmVtZW50cz8gKi9cbi1cdFx0V0FSTl9PTl9PTkNFKCFjb29raWVfbWF0Y2gobmV4dCwgcnFfaS1cdTAwM2Vjb3JlX3BpY2spKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghY29va2llX21hdGNoKG5leHQsIHJxX2ktXHUwMDNlY29yZV9waWNrKSk7XG4gXG4gXHRcdGlmIChycV9pLVx1MDAzZWN1cnIgPT0gcnFfaS1cdTAwM2Vjb3JlX3BpY2spIHtcbiBcdFx0XHRycV9pLVx1MDAzZWNvcmVfcGljayA9IE5VTEw7XG5AQCAtNjcxNyw3ICYjNDM7NjcxNyw3IEBAIHN0YXRpYyB2b2lkIHByb3h5X21pZ3JhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLFxuIFx0c3RydWN0IHJxICp0YXJnZXRfcnEgPSBjcHVfcnEodGFyZ2V0X2NwdSk7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcbi1cdFdBUk5fT04ocCA9PSBycS1cdTAwM2VjdXJyKTtcbiYjNDM7XHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gcnEtXHUwMDNlY3Vycik7XG4gXHQvKlxuIFx0ICogU2luY2Ugd2UgYXJlIG1pZ3JhdGluZyBhIGJsb2NrZWQgZG9ub3IsIGl0IGNvdWxkIGJlIHJxLVx1MDAzZWRvbm9yLFxuIFx0ICogYW5kIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHJlZmVyZW5jZXMgZnJvbSB0aGlzXG5AQCAtNjc0OSw3ICYjNDM7Njc0OSw3IEBAIHN0YXRpYyB2b2lkIHByb3h5X2ZvcmNlX3JldHVybihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLFxuIFx0aW50IGNwdSwgd2FrZV9mbGFnID0gV0ZfVFRXVTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xuLVx0V0FSTl9PTihwID09IHJxLVx1MDAzZWN1cnIpO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQocCA9PSBycS1cdTAwM2VjdXJyKTtcbiBcbiBcdGlmIChwID09IHJxLVx1MDAzZWRvbm9yKVxuIFx0XHRwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xuQEAgLTY5NTEsNyAmIzQzOzY5NTEsNyBAQCBmaW5kX3Byb3h5X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpkb25vciwgc3RydWN0IHJxX2ZsYWdzICpyZilcbiBcdFx0ICogZ3VhcmFudGVlIGl0cyBleGlzdGVuY2UsIGFzIHBlciB0dHd1X3JlbW90ZSgpLlxuIFx0XHQgKi9cbiBcdH1cbi1cdFdBUk5fT05fT05DRShvd25lciBcdTAwMjZcdTAwMjYgIW93bmVyLVx1MDAzZW9uX3JxKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQob3duZXIgXHUwMDI2XHUwMDI2ICFvd25lci1cdTAwM2Vvbl9ycSk7XG4gXHRyZXR1cm4gb3duZXI7XG4gXG4gZGVhY3RpdmF0ZTpcbkBAIC03NjMxLDggJiM0Mzs3NjMxLDggQEAgdm9pZCBydF9tdXRleF9zZXRwcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxuIFx0ICogcmVhbCBuZWVkIHRvIGJvb3N0LlxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkocCA9PSBycS1cdTAwM2VpZGxlKSkge1xuLVx0XHRXQVJOX09OKHAgIT0gcnEtXHUwMDNlY3Vycik7XG4tXHRcdFdBUk5fT04ocC1cdTAwM2VwaV9ibG9ja2VkX29uKTtcbiYjNDM7XHRcdFdBUk5fT05fREVGRVJSRUQocCAhPSBycS1cdTAwM2VjdXJyKTtcbiYjNDM7XHRcdFdBUk5fT05fREVGRVJSRUQocC1cdTAwM2VwaV9ibG9ja2VkX29uKTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuQEAgLTg0NjMsNyAmIzQzOzg0NjMsNyBAQCBzdGF0aWMgdm9pZCBiYWxhbmNlX3B1c2hfc2V0KGludCBjcHUsIGJvb2wgb24pXG4gXG4gXHRycV9sb2NrX2lycXNhdmUocnEsIFx1MDAyNnJmKTtcbiBcdGlmIChvbikge1xuLVx0XHRXQVJOX09OX09OQ0UocnEtXHUwMDNlYmFsYW5jZV9jYWxsYmFjayk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXHUwMDNlYmFsYW5jZV9jYWxsYmFjayk7XG4gXHRcdHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPSBcdTAwMjZiYWxhbmNlX3B1c2hfY2FsbGJhY2s7XG4gXHR9IGVsc2UgaWYgKHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPT0gXHUwMDI2YmFsYW5jZV9wdXNoX2NhbGxiYWNrKSB7XG4gXHRcdHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPSBOVUxMO1xuQEAgLTExMTUwLDcgJiM0MzsxMTE1MCw3IEBAIHN0cnVjdCBzY2hlZF9jaGFuZ2VfY3R4ICpzY2hlZF9jaGFuZ2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnRcbiBcdCAqIE11c3QgZXhjbHVzaXZlbHkgdXNlIG1hdGNoZWQgZmxhZ3Mgc2luY2UgdGhpcyBpcyBib3RoIGRlcXVldWUgYW5kXG4gXHQgKiBlbnF1ZXVlLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UoZmxhZ3MgXHUwMDI2IDB4RkZGRjAwMDApO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChmbGFncyBcdTAwMjYgMHhGRkZGMDAwMCk7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcbiBcbkBAIC0xMTE5OCw3ICYjNDM7MTExOTgsNyBAQCB2b2lkIHNjaGVkX2NoYW5nZV9lbmQoc3RydWN0IHNjaGVkX2NoYW5nZV9jdHggKmN0eClcbiBcdC8qXG4gXHQgKiBDaGFuZ2luZyBjbGFzcyB3aXRob3V0ICpRVUVVRV9DTEFTUyBpcyBiYWQuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShwLVx1MDAzZXNjaGVkX2NsYXNzICE9IGN0eC1cdTAwM2VjbGFzcyBcdTAwMjZcdTAwMjYgIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IEVOUVVFVUVfQ0xBU1MpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY2hlZF9jbGFzcyAhPSBjdHgtXHUwMDNlY2xhc3MgXHUwMDI2XHUwMDI2ICEoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBFTlFVRVVFX0NMQVNTKSk7XG4gXG4gXHRpZiAoKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgRU5RVUVVRV9DTEFTUykgXHUwMDI2XHUwMDI2IHAtXHUwMDNlc2NoZWRfY2xhc3MtXHUwMDNlc3dpdGNoaW5nX3RvKVxuIFx0XHRwLVx1MDAzZXNjaGVkX2NsYXNzLVx1MDAzZXN3aXRjaGluZ190byhycSwgcCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC9jb3JlX3NjaGVkLmNcbmluZGV4IDczYjZiMjQyNjkxMTliLi5lYzg4ZWQ3ZDhlZTg3NyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlX3NjaGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlX3NjaGVkLmNcbkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzY2hlZF9jb3JlX3VwZGF0ZV9jb29raWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0ICogYSBjb29raWUgdW50aWwgYWZ0ZXIgd2UmIzM5O3ZlIHJlbW92ZWQgaXQsIHdlIG11c3QgaGF2ZSBjb3JlIHNjaGVkdWxpbmdcbiBcdCAqIGVuYWJsZWQgaGVyZS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKChwLVx1MDAzZWNvcmVfY29va2llIHx8IGNvb2tpZSkgXHUwMDI2XHUwMDI2ICFzY2hlZF9jb3JlX2VuYWJsZWQocnEpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoKHAtXHUwMDNlY29yZV9jb29raWUgfHwgY29va2llKSBcdTAwMjZcdTAwMjYgIXNjaGVkX2NvcmVfZW5hYmxlZChycSkpO1xuIFxuIFx0aWYgKHNjaGVkX2NvcmVfZW5xdWV1ZWQocCkpXG4gXHRcdHNjaGVkX2NvcmVfZGVxdWV1ZShycSwgcCwgREVRVUVVRV9TQVZFKTtcbkBAIC0yNDksNyAmIzQzOzI0OSw3IEBAIHZvaWQgX19zY2hlZF9jb3JlX2FjY291bnRfZm9yY2VpZGxlKHN0cnVjdCBycSAqcnEpXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcbiBcbi1cdFdBUk5fT05fT05DRSghcnEtXHUwMDNlY29yZS1cdTAwM2Vjb3JlX2ZvcmNlaWRsZV9jb3VudCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX2NvdW50KTtcbiBcbiBcdGlmIChycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX3N0YXJ0ID09IDApXG4gXHRcdHJldHVybjtcbkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHZvaWQgX19zY2hlZF9jb3JlX2FjY291bnRfZm9yY2VpZGxlKHN0cnVjdCBycSAqcnEpXG4gXG4gXHRycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX3N0YXJ0ID0gbm93O1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRSghcnEtXHUwMDNlY29yZS1cdTAwM2Vjb3JlX2ZvcmNlaWRsZV9vY2N1cGF0aW9uKSkge1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJxLVx1MDAzZWNvcmUtXHUwMDNlY29yZV9mb3JjZWlkbGVfb2NjdXBhdGlvbikpIHtcbiBcdFx0LyogY2FuJiMzOTt0IGJlIGZvcmNlZCBpZGxlIHdpdGhvdXQgYSBydW5uaW5nIHRhc2sgKi9cbiBcdH0gZWxzZSBpZiAocnEtXHUwMDNlY29yZS1cdTAwM2Vjb3JlX2ZvcmNlaWRsZV9jb3VudCBcdTAwM2UgMSB8fFxuIFx0XHQgICBycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX29jY3VwYXRpb24gXHUwMDNlIDEpIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9jcHVkZWFkbGluZS5jXG5pbmRleCAwYTJiN2UzMGZkMTBjMS4uZTMwNWE4ZTk5M2UyN2MgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmNcbkBAIC0xNDksNyAmIzQzOzE0OSw3IEBAIGludCBjcHVkbF9maW5kKHN0cnVjdCBjcHVkbCAqY3AsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdH0gZWxzZSB7XG4gXHRcdGludCBiZXN0X2NwdSA9IGNwdWRsX21heGltdW0oY3ApO1xuIFxuLVx0XHRXQVJOX09OKGJlc3RfY3B1ICE9IC0xIFx1MDAyNlx1MDAyNiAhY3B1X3ByZXNlbnQoYmVzdF9jcHUpKTtcbiYjNDM7XHRcdFdBUk5fT05fREVGRVJSRUQoYmVzdF9jcHUgIT0gLTEgXHUwMDI2XHUwMDI2ICFjcHVfcHJlc2VudChiZXN0X2NwdSkpO1xuIFxuIFx0XHRpZiAoY3B1bWFza190ZXN0X2NwdShiZXN0X2NwdSwgXHUwMDI2cC1cdTAwM2VjcHVzX21hc2spIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgZGxfdGltZV9iZWZvcmUoZGxfc2UtXHUwMDNlZGVhZGxpbmUsIGNwLVx1MDAzZWVsZW1lbnRzWzBdLmRsKSkge1xuQEAgLTE3Nyw3ICYjNDM7MTc3LDcgQEAgdm9pZCBjcHVkbF9jbGVhcihzdHJ1Y3QgY3B1ZGwgKmNwLCBpbnQgY3B1LCBib29sIG9ubGluZSlcbiBcdGludCBvbGRfaWR4LCBuZXdfY3B1O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFdBUk5fT04oIWNwdV9wcmVzZW50KGNwdSkpO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQoIWNwdV9wcmVzZW50KGNwdSkpO1xuIFxuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbkBAIC0yMjAsNyAmIzQzOzIyMCw3IEBAIHZvaWQgY3B1ZGxfc2V0KHN0cnVjdCBjcHVkbCAqY3AsIGludCBjcHUsIHU2NCBkbClcbiBcdGludCBvbGRfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFdBUk5fT04oIWNwdV9wcmVzZW50KGNwdSkpO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQoIWNwdV9wcmVzZW50KGNwdSkpO1xuIFxuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jXG5pbmRleCA3ZGI0Yzg3ZGY4M2IwYS4uODYzYWM3NTA5MTkyZjcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2RlYWRsaW5lLmNcbkBAIC0yMTcsOCAmIzQzOzIxNyw4IEBAIHZvaWQgX19hZGRfcnVubmluZ19idyh1NjQgZGxfYncsIHN0cnVjdCBkbF9ycSAqZGxfcnEpXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxX29mX2RsX3JxKGRsX3JxKSk7XG4gXHRkbF9ycS1cdTAwM2VydW5uaW5nX2J3ICYjNDM7PSBkbF9idztcbi1cdFdBUk5fT05fT05DRShkbF9ycS1cdTAwM2VydW5uaW5nX2J3IFx1MDAzYyBvbGQpOyAvKiBvdmVyZmxvdyAqL1xuLVx0V0FSTl9PTl9PTkNFKGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgXHUwMDNlIGRsX3JxLVx1MDAzZXRoaXNfYncpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkbF9ycS1cdTAwM2VydW5uaW5nX2J3IFx1MDAzYyBvbGQpOyAvKiBvdmVyZmxvdyAqL1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkbF9ycS1cdTAwM2VydW5uaW5nX2J3IFx1MDAzZSBkbF9ycS1cdTAwM2V0aGlzX2J3KTtcbiBcdC8qIGtpY2sgY3B1ZnJlcSAoc2VlIHRoZSBjb21tZW50IGluIGtlcm5lbC9zY2hlZC9zY2hlZC5oKS4gKi9cbiBcdGNwdWZyZXFfdXBkYXRlX3V0aWwocnFfb2ZfZGxfcnEoZGxfcnEpLCAwKTtcbiB9XG5AQCAtMjMwLDcgJiM0MzsyMzAsNyBAQCB2b2lkIF9fc3ViX3J1bm5pbmdfYncodTY0IGRsX2J3LCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZl9kbF9ycShkbF9ycSkpO1xuIFx0ZGxfcnEtXHUwMDNlcnVubmluZ19idyAtPSBkbF9idztcbi1cdFdBUk5fT05fT05DRShkbF9ycS1cdTAwM2VydW5uaW5nX2J3IFx1MDAzZSBvbGQpOyAvKiB1bmRlcmZsb3cgKi9cbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2Ugb2xkKTsgLyogdW5kZXJmbG93ICovXG4gXHRpZiAoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2Ugb2xkKVxuIFx0XHRkbF9ycS1cdTAwM2VydW5uaW5nX2J3ID0gMDtcbiBcdC8qIGtpY2sgY3B1ZnJlcSAoc2VlIHRoZSBjb21tZW50IGluIGtlcm5lbC9zY2hlZC9zY2hlZC5oKS4gKi9cbkBAIC0yNDQsNyAmIzQzOzI0NCw3IEBAIHZvaWQgX19hZGRfcnFfYncodTY0IGRsX2J3LCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZl9kbF9ycShkbF9ycSkpO1xuIFx0ZGxfcnEtXHUwMDNldGhpc19idyAmIzQzOz0gZGxfYnc7XG4tXHRXQVJOX09OX09OQ0UoZGxfcnEtXHUwMDNldGhpc19idyBcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtXHUwMDNldGhpc19idyBcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cbiB9XG4gXG4gc3RhdGljIGlubGluZVxuQEAgLTI1NCwxMCAmIzQzOzI1NCwxMCBAQCB2b2lkIF9fc3ViX3JxX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSlcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTtcbiBcdGRsX3JxLVx1MDAzZXRoaXNfYncgLT0gZGxfYnc7XG4tXHRXQVJOX09OX09OQ0UoZGxfcnEtXHUwMDNldGhpc19idyBcdTAwM2Ugb2xkKTsgLyogdW5kZXJmbG93ICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVx1MDAzZXRoaXNfYncgXHUwMDNlIG9sZCk7IC8qIHVuZGVyZmxvdyAqL1xuIFx0aWYgKGRsX3JxLVx1MDAzZXRoaXNfYncgXHUwMDNlIG9sZClcbiBcdFx0ZGxfcnEtXHUwMDNldGhpc19idyA9IDA7XG4tXHRXQVJOX09OX09OQ0UoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2UgZGxfcnEtXHUwMDNldGhpc19idyk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgXHUwMDNlIGRsX3JxLVx1MDAzZXRoaXNfYncpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lXG5AQCAtMzM1LDcgJiM0MzszMzUsNyBAQCB2b2lkIGNhbmNlbF9pbmFjdGl2ZV90aW1lcihzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiBcbiBzdGF0aWMgdm9pZCBkbF9jaGFuZ2VfdXRpbGl6YXRpb24oc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgbmV3X2J3KVxuIHtcbi1cdFdBUk5fT05fT05DRShwLVx1MDAzZWRsLmZsYWdzIFx1MDAyNiBTQ0hFRF9GTEFHX1NVR09WKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VkbC5mbGFncyBcdTAwMjYgU0NIRURfRkxBR19TVUdPVik7XG4gXG4gXHRpZiAodGFza19vbl9ycV9xdWV1ZWQocCkpXG4gXHRcdHJldHVybjtcbkBAIC00MTYsNyAmIzQzOzQxNiw3IEBAIHN0YXRpYyB2b2lkIHRhc2tfbm9uX2NvbnRlbmRpbmcoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIGJvb2wgZGxfdGFzaylcbiBcdGlmIChkbF9lbnRpdHlfaXNfc3BlY2lhbChkbF9zZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdFdBUk5fT04oZGxfc2UtXHUwMDNlZGxfbm9uX2NvbnRlbmRpbmcpO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQoZGxfc2UtXHUwMDNlZGxfbm9uX2NvbnRlbmRpbmcpO1xuIFxuIFx0emVyb2xhZ190aW1lID0gZGxfc2UtXHUwMDNlZGVhZGxpbmUgLVxuIFx0XHQgZGl2NjRfbG9uZygoZGxfc2UtXHUwMDNlcnVudGltZSAqIGRsX3NlLVx1MDAzZWRsX3BlcmlvZCksXG5AQCAtNTgyLDcgJiM0Mzs1ODIsNyBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlX3B1c2hhYmxlX2RsX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiBcdHN0cnVjdCByYl9ub2RlICpsZWZ0bW9zdDtcbiBcbi1cdFdBUk5fT05fT05DRSghUkJfRU1QVFlfTk9ERShcdTAwMjZwLVx1MDAzZXB1c2hhYmxlX2RsX3Rhc2tzKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFSQl9FTVBUWV9OT0RFKFx1MDAyNnAtXHUwMDNlcHVzaGFibGVfZGxfdGFza3MpKTtcbiBcbiBcdGxlZnRtb3N0ID0gcmJfYWRkX2NhY2hlZChcdTAwMjZwLVx1MDAzZXB1c2hhYmxlX2RsX3Rhc2tzLFxuIFx0XHRcdFx0IFx1MDAyNnJxLVx1MDAzZWRsLnB1c2hhYmxlX2RsX3Rhc2tzX3Jvb3QsXG5AQCAtNjY0LDcgJiM0Mzs2NjQsNyBAQCBzdGF0aWMgc3RydWN0IHJxICpkbF90YXNrX29mZmxpbmVfbWlncmF0aW9uKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcFxuIFx0XHRcdCAqIEZhaWxlZCB0byBmaW5kIGFueSBzdWl0YWJsZSBDUFUuXG4gXHRcdFx0ICogVGhlIHRhc2sgd2lsbCBuZXZlciBjb21lIGJhY2shXG4gXHRcdFx0ICovXG4tXHRcdFx0V0FSTl9PTl9PTkNFKGRsX2JhbmR3aWR0aF9lbmFibGVkKCkpO1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfYmFuZHdpZHRoX2VuYWJsZWQoKSk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZiBhZG1pc3Npb24gY29udHJvbCBpcyBkaXNhYmxlZCB3ZVxuQEAgLTc1Niw4ICYjNDM7NzU2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25ld19kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXG4gXHRzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpO1xuIFx0c3RydWN0IHJxICpycSA9IHJxX29mX2RsX3JxKGRsX3JxKTtcbiBcbi1cdFdBUk5fT04oaXNfZGxfYm9vc3RlZChkbF9zZSkpO1xuLVx0V0FSTl9PTihkbF90aW1lX2JlZm9yZShycV9jbG9jayhycSksIGRsX3NlLVx1MDAzZWRlYWRsaW5lKSk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRChpc19kbF9ib29zdGVkKGRsX3NlKSk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRChkbF90aW1lX2JlZm9yZShycV9jbG9jayhycSksIGRsX3NlLVx1MDAzZWRlYWRsaW5lKSk7XG4gXG4gXHQvKlxuIFx0ICogV2UgYXJlIHJhY2luZyB3aXRoIHRoZSBkZWFkbGluZSB0aW1lci4gU28sIGRvIG5vdGhpbmcgYmVjYXVzZVxuQEAgLTgwMSw3ICYjNDM7ODAxLDcgQEAgc3RhdGljIHZvaWQgcmVwbGVuaXNoX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiBcdHN0cnVjdCBkbF9ycSAqZGxfcnEgPSBkbF9ycV9vZl9zZShkbF9zZSk7XG4gXHRzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfZGxfcnEoZGxfcnEpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHBpX29mKGRsX3NlKS1cdTAwM2VkbF9ydW50aW1lIFx1MDAzYz0gMCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHBpX29mKGRsX3NlKS1cdTAwM2VkbF9ydW50aW1lIFx1MDAzYz0gMCk7XG4gXG4gXHQvKlxuIFx0ICogVGhpcyBjb3VsZCBiZSB0aGUgY2FzZSBmb3IgYSAhLWRsIHRhc2sgdGhhdCBpcyBib29zdGVkLlxuQEAgLTk3NSw3ICYjNDM7OTc1LDcgQEAgdXBkYXRlX2RsX3JldmlzZWRfd2FrZXVwKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBzdHJ1Y3QgcnEgKnJxKVxuIFx0ICpcbiBcdCAqIFNlZSB1cGRhdGVfZGxfZW50aXR5KCkgY29tbWVudHMgZm9yIGZ1cnRoZXIgZGV0YWlscy5cbiBcdCAqL1xuLVx0V0FSTl9PTihkbF90aW1lX2JlZm9yZShkbF9zZS1cdTAwM2VkZWFkbGluZSwgcnFfY2xvY2socnEpKSk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRChkbF90aW1lX2JlZm9yZShkbF9zZS1cdTAwM2VkZWFkbGluZSwgcnFfY2xvY2socnEpKSk7XG4gXG4gXHRkbF9zZS1cdTAwM2VydW50aW1lID0gKGRsX3NlLVx1MDAzZWRsX2RlbnNpdHkgKiBsYXhpdHkpIFx1MDAzZVx1MDAzZSBCV19TSElGVDtcbiB9XG5AQCAtMTA4MCw3ICYjNDM7MTA4MCw3IEBAIHN0YXRpYyBpbnQgc3RhcnRfZGxfdGltZXIoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXG4gXHQgKiAoY3VycmVudCB1IFx1MDAzZSBVKS5cbiBcdCAqL1xuIFx0aWYgKGRsX3NlLVx1MDAzZWRsX2RlZmVyX2FybWVkKSB7XG4tXHRcdFdBUk5fT05fT05DRSghZGxfc2UtXHUwMDNlZGxfdGhyb3R0bGVkKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfc2UtXHUwMDNlZGxfdGhyb3R0bGVkKTtcbiBcdFx0YWN0ID0gbnNfdG9fa3RpbWUoZGxfc2UtXHUwMDNlZGVhZGxpbmUgLSBkbF9zZS1cdTAwM2VydW50aW1lKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIGFjdCA9IGRlYWRsaW5lIC0gcmVsLWRlYWRsaW5lICYjNDM7IHBlcmlvZCAqL1xuQEAgLTE0NTEsNyAmIzQzOzE0NTEsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9kbF9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgczY0XG4gXHRcdC8qXG4gXHRcdCAqIE5vbi1zZXJ2ZXJzIHdvdWxkIG5ldmVyIGdldCB0aW1lIGFjY291bnRlZCB3aGlsZSB0aHJvdHRsZWQuXG4gXHRcdCAqL1xuLVx0XHRXQVJOX09OX09OQ0UoIWRsX3NlcnZlcihkbF9zZSkpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFkbF9zZXJ2ZXIoZGxfc2UpKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogV2hpbGUgdGhlIHNlcnZlciBpcyBtYXJrZWQgaWRsZSwgZG8gbm90IHB1c2ggb3V0IHRoZVxuQEAgLTE0OTIsNyAmIzQzOzE0OTIsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9kbF9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgczY0XG4gXHRcdCAqIGFuZCBxdWV1ZSByaWdodCBhd2F5LiBPdGhlcndpc2Ugbm90aGluZyBtaWdodCBxdWV1ZSBpdC4gVGhhdCYjMzk7cyBzaW1pbGFyXG4gXHRcdCAqIHRvIHdoYXQgZW5xdWV1ZV9kbF9lbnRpdHkoKSBkb2VzIG9uIHN0YXJ0X2RsX3RpbWVyPT0wLiBGb3Igbm93LCBqdXN0IHdhcm4uXG4gXHRcdCAqL1xuLVx0XHRXQVJOX09OX09OQ0UoIXN0YXJ0X2RsX3RpbWVyKGRsX3NlKSk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXN0YXJ0X2RsX3RpbWVyKGRsX3NlKSk7XG4gXG4gXHRcdHJldHVybjtcbiBcdH1cbkBAIC0xODAxLDcgJiM0MzsxODAxLDcgQEAgdm9pZCBkbF9zZXJ2ZXJfc3RhcnQoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXG4gXHQgKi9cbiBcdHJxLVx1MDAzZWRvbm9yLVx1MDAzZXNjaGVkX2NsYXNzLVx1MDAzZXVwZGF0ZV9jdXJyKHJxKTtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoIWNwdV9vbmxpbmUoY3B1X29mKHJxKSkpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNwdV9vbmxpbmUoY3B1X29mKHJxKSkpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR0cmFjZV9zY2hlZF9kbF9zZXJ2ZXJfc3RhcnRfdHAoZGxfc2UsIGNwdV9vZihycSksIGRsX2dldF90eXBlKGRsX3NlLCBycSkpO1xuQEAgLTIwNzMsNyAmIzQzOzIwNzMsNyBAQCB2b2lkIGluY19kbF90YXNrcyhzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IGRsX3JxICpkbF9ycSlcbiBzdGF0aWMgaW5saW5lXG4gdm9pZCBkZWNfZGxfdGFza3Moc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIHN0cnVjdCBkbF9ycSAqZGxfcnEpXG4ge1xuLVx0V0FSTl9PTighZGxfcnEtXHUwMDNlZGxfbnJfcnVubmluZyk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRCghZGxfcnEtXHUwMDNlZGxfbnJfcnVubmluZyk7XG4gXHRkbF9ycS1cdTAwM2VkbF9ucl9ydW5uaW5nLS07XG4gXG4gXHRpZiAoIWRsX3NlcnZlcihkbF9zZSkpXG5AQCAtMjE2NSw3ICYjNDM7MjE2NSw3IEBAIHN0YXRpYyB2b2lkIF9fZW5xdWV1ZV9kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXG4ge1xuIFx0c3RydWN0IGRsX3JxICpkbF9ycSA9IGRsX3JxX29mX3NlKGRsX3NlKTtcbiBcbi1cdFdBUk5fT05fT05DRSghUkJfRU1QVFlfTk9ERShcdTAwMjZkbF9zZS1cdTAwM2VyYl9ub2RlKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFSQl9FTVBUWV9OT0RFKFx1MDAyNmRsX3NlLVx1MDAzZXJiX25vZGUpKTtcbiBcbiBcdHJiX2FkZF9jYWNoZWQoXHUwMDI2ZGxfc2UtXHUwMDNlcmJfbm9kZSwgXHUwMDI2ZGxfcnEtXHUwMDNlcm9vdCwgX19kbF9sZXNzKTtcbiBcbkBAIC0yMTg5LDcgJiM0MzsyMTg5LDcgQEAgc3RhdGljIHZvaWQgX19kZXF1ZXVlX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiBzdGF0aWMgdm9pZFxuIGVucXVldWVfZGxfZW50aXR5KHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBpbnQgZmxhZ3MpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKG9uX2RsX3JxKGRsX3NlKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKG9uX2RsX3JxKGRsX3NlKSk7XG4gXG4gXHR1cGRhdGVfc3RhdHNfZW5xdWV1ZV9kbChkbF9ycV9vZl9zZShkbF9zZSksIGRsX3NlLCBmbGFncyk7XG4gXG5AQCAtMjYxMSw3ICYjNDM7MjYxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fcGlja190YXNrX2RsKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0ZGxfc2UgPSBwaWNrX25leHRfZGxfZW50aXR5KGRsX3JxKTtcbi1cdFdBUk5fT05fT05DRSghZGxfc2UpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfc2UpO1xuIFxuIFx0aWYgKGRsX3NlcnZlcihkbF9zZSkpIHtcbiBcdFx0cCA9IGRsX3NlLVx1MDAzZXNlcnZlcl9waWNrX3Rhc2soZGxfc2UsIHJmKTtcbkBAIC0yODIzLDEyICYjNDM7MjgyMywxMiBAQCBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfcHVzaGFibGVfZGxfdGFzayhzdHJ1Y3QgcnEgKnJxKVxuIFx0aWYgKCFwKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFdBUk5fT05fT05DRShycS1cdTAwM2VjcHUgIT0gdGFza19jcHUocCkpO1xuLVx0V0FSTl9PTl9PTkNFKHRhc2tfY3VycmVudChycSwgcCkpO1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlbnJfY3B1c19hbGxvd2VkIFx1MDAzYz0gMSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZWNwdSAhPSB0YXNrX2NwdShwKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfY3VycmVudChycSwgcCkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZW5yX2NwdXNfYWxsb3dlZCBcdTAwM2M9IDEpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7XG4tXHRXQVJOX09OX09OQ0UoIWRsX3Rhc2socCkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghdGFza19vbl9ycV9xdWV1ZWQocCkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfdGFzayhwKSk7XG4gXG4gXHRyZXR1cm4gcDtcbiB9XG5AQCAtMjk0NCw3ICYjNDM7Mjk0NCw3IEBAIHN0YXRpYyBpbnQgcHVzaF9kbF90YXNrKHN0cnVjdCBycSAqcnEpXG4gXHRpZiAoaXNfbWlncmF0aW9uX2Rpc2FibGVkKG5leHRfdGFzaykpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKFdBUk5fT04obmV4dF90YXNrID09IHJxLVx1MDAzZWN1cnIpKVxuJiM0MztcdGlmIChXQVJOX09OX0RFRkVSUkVEKG5leHRfdGFzayA9PSBycS1cdTAwM2VjdXJyKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBXZSBtaWdodCByZWxlYXNlIHJxIGxvY2sgKi9cbkBAIC0zMDUwLDggJiM0MzszMDUwLDggQEAgc3RhdGljIHZvaWQgcHVsbF9kbF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSlcbiBcdFx0ICovXG4gXHRcdGlmIChwIFx1MDAyNlx1MDAyNiBkbF90aW1lX2JlZm9yZShwLVx1MDAzZWRsLmRlYWRsaW5lLCBkbWluKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGRsX3Rhc2tfaXNfZWFybGllc3RfZGVhZGxpbmUocCwgdGhpc19ycSkpIHtcbi1cdFx0XHRXQVJOX09OKHAgPT0gc3JjX3JxLVx1MDAzZWN1cnIpO1xuLVx0XHRcdFdBUk5fT04oIXRhc2tfb25fcnFfcXVldWVkKHApKTtcbiYjNDM7XHRcdFx0V0FSTl9PTl9ERUZFUlJFRChwID09IHNyY19ycS1cdTAwM2VjdXJyKTtcbiYjNDM7XHRcdFx0V0FSTl9PTl9ERUZFUlJFRCghdGFza19vbl9ycV9xdWV1ZWQocCkpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogVGhlbiB3ZSBwdWxsIGlmZiBwIGhhcyBhY3R1YWxseSBhbiBlYXJsaWVyXG5AQCAtMzEwOSw3ICYjNDM7MzEwOSw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIHtcbiBcdHN0cnVjdCBycSAqcnE7XG4gXG4tXHRXQVJOX09OX09OQ0UoIWRsX3Rhc2socCkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfdGFzayhwKSk7XG4gXG4gXHRycSA9IHRhc2tfcnEocCk7XG4gXHQvKlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQuY1xuaW5kZXggNWQyZDE5NDczYTgyZTguLjQ3ZDNhNGMxNjQ1NWFjIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0LmNcbkBAIC01MTIsMTIgJiM0Mzs1MTIsMTIgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgKiBTbyBpZiBrZl90YXNrc1tdIGlzIHNldCwgQHAmIzM5O3Mgc2NoZWR1bGVyLXByb3RlY3RlZCBmaWVsZHMgYXJlIHN0YWJsZS5cbiAgKlxuICAqIGtmX3Rhc2tzW10gY2FuIG5vdCBzdGFjaywgc28gdGFzay1iYXNlZCBTQ1ggb3BzIG11c3Qgbm90IG5lc3QuIFRoZVxuLSAqIFdBUk5fT05fT05DRSgpIGluIGVhY2ggbWFjcm8gY2F0Y2hlcyBhIHJlLWVudHJ5IG9mIGFueSBvZiB0aGUgdGhyZWUgdmFyaWFudHNcbi0gKiB3aGlsZSBhIHByZXZpb3VzIG9uZSBpcyBzdGlsbCBpbiBwcm9ncmVzcy5cbiYjNDM7ICogV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCkgaW4gZWFjaCBtYWNybyBjYXRjaGVzIGEgcmUtZW50cnkgb2YgYW55IG9mIHRoZSB0aHJlZVxuJiM0MzsgKiB2YXJpYW50cyB3aGlsZSBhIHByZXZpb3VzIG9uZSBpcyBzdGlsbCBpbiBwcm9ncmVzcy5cbiAgKi9cbiAjZGVmaW5lIFNDWF9DQUxMX09QX1RBU0soc2NoLCBvcCwgbG9ja2VkX3JxLCB0YXNrLCBhcmdzLi4uKVx0XHRcdFxcXG4gZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdFdBUk5fT05fT05DRShjdXJyZW50LVx1MDAzZXNjeC5rZl90YXNrc1swXSk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdKTtcdFx0XHRcXFxuIFx0Y3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrO1x0XHRcdFx0XHRcXFxuIFx0U0NYX0NBTExfT1AoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2ssICMjYXJncyk7XHRcdFx0XFxcbiBcdGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdID0gTlVMTDtcdFx0XHRcdFx0XFxcbkBAIC01MjYsNyAmIzQzOzUyNiw3IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gI2RlZmluZSBTQ1hfQ0FMTF9PUF9UQVNLX1JFVChzY2gsIG9wLCBsb2NrZWRfcnEsIHRhc2ssIGFyZ3MuLi4pXHRcdFx0XFxcbiAoe1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdF9fdHlwZW9mX18oKHNjaCktXHUwMDNlb3BzLm9wKHRhc2ssICMjYXJncykpIF9fcmV0O1x0XHRcdFx0XFxcbi1cdFdBUk5fT05fT05DRShjdXJyZW50LVx1MDAzZXNjeC5rZl90YXNrc1swXSk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdKTtcdFx0XHRcXFxuIFx0Y3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrO1x0XHRcdFx0XHRcXFxuIFx0X19yZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2ssICMjYXJncyk7XHRcdFxcXG4gXHRjdXJyZW50LVx1MDAzZXNjeC5rZl90YXNrc1swXSA9IE5VTEw7XHRcdFx0XHRcdFxcXG5AQCAtNTM2LDcgJiM0Mzs1MzYsNyBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICNkZWZpbmUgU0NYX0NBTExfT1BfMlRBU0tTX1JFVChzY2gsIG9wLCBsb2NrZWRfcnEsIHRhc2swLCB0YXNrMSwgYXJncy4uLilcdFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3R5cGVvZl9fKChzY2gpLVx1MDAzZW9wcy5vcCh0YXNrMCwgdGFzazEsICMjYXJncykpIF9fcmV0O1x0XHRcdFxcXG4tXHRXQVJOX09OX09OQ0UoY3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0pO1x0XHRcdFx0XHRcXFxuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjdXJyZW50LVx1MDAzZXNjeC5rZl90YXNrc1swXSk7XHRcdFx0XFxcbiBcdGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdID0gdGFzazA7XHRcdFx0XHRcdFxcXG4gXHRjdXJyZW50LVx1MDAzZXNjeC5rZl90YXNrc1sxXSA9IHRhc2sxO1x0XHRcdFx0XHRcXFxuIFx0X19yZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2swLCB0YXNrMSwgIyNhcmdzKTtcdFxcXG5AQCAtNjg3LDcgJiM0Mzs2ODcsNyBAQCBzdGF0aWMgYm9vbCBubGRzcV9jdXJzb3JfbG9zdF90YXNrKHN0cnVjdCBzY3hfZHNxX2xpc3Rfbm9kZSAqY3Vyc29yLFxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdC8qIGlmIEBwIGhhcyBzdGF5ZWQgb24gQGRzcSwgaXRzIHJxIGNvdWxkbiYjMzk7dCBoYXZlIGNoYW5nZWQgKi9cbi1cdGlmIChXQVJOX09OX09OQ0UocnEgIT0gdGFza19ycShwKSkpXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChycSAhPSB0YXNrX3JxKHApKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG5AQCAtMTI4Miw3ICYjNDM7MTI4Miw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkdWxlX3JlZW5xX2xvY2FsKHN0cnVjdCBycSAqcnEsIHU2NCByZWVucV9mbGFncylcbiB7XG4gXHRzdHJ1Y3Qgc2N4X3NjaGVkICpyb290ID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKHNjeF9yb290KTtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoIXJvb3QpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJvb3QpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzY2hlZHVsZV9kc3FfcmVlbnEocm9vdCwgXHUwMDI2cnEtXHUwMDNlc2N4LmxvY2FsX2RzcSwgcmVlbnFfZmxhZ3MsIHJxKTtcbkBAIC0xMzc5LDcgJiM0MzsxMzc5LDcgQEAgc3RhdGljIHZvaWQgZHNxX2luY19ucihzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgZW5cbiBcdCAqL1xuIFx0aWYgKGVucV9mbGFncyBcdTAwMjYgU0NYX0VOUV9JTU1FRCkge1xuIFx0XHRpZiAodW5saWtlbHkoZHNxLVx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKSB7XG4tXHRcdFx0V0FSTl9PTl9PTkNFKCEoZW5xX2ZsYWdzIFx1MDAyNiBTQ1hfRU5RX0dEU1FfRkFMTEJBQ0spKTtcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCEoZW5xX2ZsYWdzIFx1MDAyNiBTQ1hfRU5RX0dEU1FfRkFMTEJBQ0spKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdFx0cC1cdTAwM2VzY3guZmxhZ3MgfD0gU0NYX1RBU0tfSU1NRUQ7XG5AQCAtMTM4OCw3ICYjNDM7MTM4OCw3IEBAIHN0YXRpYyB2b2lkIGRzcV9pbmNfbnIoc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVuXG4gXHRpZiAocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0lNTUVEKSB7XG4gXHRcdHN0cnVjdCBycSAqcnEgPSBjb250YWluZXJfb2YoZHNxLCBzdHJ1Y3QgcnEsIHNjeC5sb2NhbF9kc3EpO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKGRzcS1cdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLVx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKVxuIFx0XHRcdHJldHVybjtcbiBcbiBcdFx0cnEtXHUwMDNlc2N4Lm5yX2ltbWVkJiM0MzsmIzQzOztcbkBAIC0xNDEwLDggJiM0MzsxNDEwLDggQEAgc3RhdGljIHZvaWQgZHNxX2RlY19ucihzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0aWYgKHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfVEFTS19JTU1FRCkge1xuIFx0XHRzdHJ1Y3QgcnEgKnJxID0gY29udGFpbmVyX29mKGRzcSwgc3RydWN0IHJxLCBzY3gubG9jYWxfZHNxKTtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRShkc3EtXHUwMDNlaWQgIT0gU0NYX0RTUV9MT0NBTCkgfHxcbi1cdFx0ICAgIFdBUk5fT05fT05DRShycS1cdTAwM2VzY3gubnJfaW1tZWQgXHUwMDNjPSAwKSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLVx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpIHx8XG4mIzQzO1x0XHQgICAgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZXNjeC5ucl9pbW1lZCBcdTAwM2M9IDApKVxuIFx0XHRcdHJldHVybjtcbiBcbiBcdFx0cnEtXHUwMDNlc2N4Lm5yX2ltbWVkLS07XG5AQCAtMTUyMSw5ICYjNDM7MTUyMSw5IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoX2VucXVldWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgcnEgKnJxLFxuIHtcbiBcdGJvb2wgaXNfbG9jYWwgPSBkc3EtXHUwMDNlaWQgPT0gU0NYX0RTUV9MT0NBTDtcbiBcbi1cdFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5kc3EgfHwgIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xuLVx0V0FSTl9PTl9PTkNFKChwLVx1MDAzZXNjeC5kc3FfZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0RTUV9PTl9QUklRKSB8fFxuLVx0XHQgICAgICFSQl9FTVBUWV9OT0RFKFx1MDAyNnAtXHUwMDNlc2N4LmRzcV9wcmlxKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2N4LmRzcSB8fCAhbGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKChwLVx1MDAzZXNjeC5kc3FfZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0RTUV9PTl9QUklRKSB8fFxuJiM0MztcdFx0XHQgICAgICAhUkJfRU1QVFlfTk9ERShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfcHJpcSkpO1xuIFxuIFx0aWYgKCFpc19sb2NhbCkge1xuIFx0XHRyYXdfc3Bpbl9sb2NrX25lc3RlZChcdTAwMjZkc3EtXHUwMDNlbG9jayxcbkBAIC0xNjQ2LDcgJiM0MzsxNjQ2LDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hfZW5xdWV1ZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsXG4gc3RhdGljIHZvaWQgdGFza191bmxpbmtfZnJvbV9kc3Eoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0XHRcdFx0IHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxKVxuIHtcbi1cdFdBUk5fT05fT05DRShsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNlc2N4LmRzcV9saXN0Lm5vZGUpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQobGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4gXG4gXHRpZiAocC1cdTAwM2VzY3guZHNxX2ZsYWdzIFx1MDAyNiBTQ1hfVEFTS19EU1FfT05fUFJJUSkge1xuIFx0XHRyYl9lcmFzZShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfcHJpcSwgXHUwMDI2ZHNxLVx1MDAzZXByaXEpO1xuQEAgLTE3MDksNyAmIzQzOzE3MDksNyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaF9kZXF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdFx0ICogaG9sZGluZ19jcHUgd2hpY2ggdGVsbHMgZGlzcGF0Y2hfdG9fbG9jYWxfZHNxKCkgdGhhdCBpdCBsb3N0XG4gXHRcdCAqIHRoZSByYWNlLlxuIFx0XHQgKi9cbi1cdFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNlc2N4LmRzcV9saXN0Lm5vZGUpKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4gXHRcdHAtXHUwMDNlc2N4LmhvbGRpbmdfY3B1ID0gLTE7XG4gXHR9XG4gXHRwLVx1MDAzZXNjeC5kc3EgPSBOVUxMO1xuQEAgLTE3ODcsOCAmIzQzOzE3ODcsOCBAQCBzdGF0aWMgdm9pZCBtYXJrX2RpcmVjdF9kaXNwYXRjaChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5kZHNwX2RzcV9pZCAhPSBTQ1hfRFNRX0lOVkFMSUQpO1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2N4LmRkc3BfZW5xX2ZsYWdzKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guZGRzcF9kc3FfaWQgIT0gU0NYX0RTUV9JTlZBTElEKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guZGRzcF9lbnFfZmxhZ3MpO1xuIFxuIFx0cC1cdTAwM2VzY3guZGRzcF9kc3FfaWQgPSBkc3FfaWQ7XG4gXHRwLVx1MDAzZXNjeC5kZHNwX2VucV9mbGFncyA9IGVucV9mbGFncztcbkBAIC0xODU1LDcgJiM0MzsxODU1LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0X2Rpc3BhdGNoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5kc3EgfHwgIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2N4LmRzcSB8fCAhbGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4gXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSxcbiBcdFx0XHQgICAgICBcdTAwMjZycS1cdTAwM2VzY3guZGRzcF9kZWZlcnJlZF9sb2NhbHMpO1xuIFx0XHRzY2hlZHVsZV9kZWZlcnJlZF9sb2NrZWQocnEpO1xuQEAgLTE4ODgsNyAmIzQzOzE4ODgsNyBAQCBzdGF0aWMgdm9pZCBkb19lbnF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgZW5xX2ZsYWdzLFxuIFx0c3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3E7XG4gXHR1bnNpZ25lZCBsb25nIHFzZXE7XG4gXG4tXHRXQVJOX09OX09OQ0UoIShwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfUVVFVUVEKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCEocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpO1xuIFxuIFx0LyogaW50ZXJuYWwgbW92ZW1lbnRzIC0gcnEgbWlncmF0aW9uIC8gUkVTVE9SRSAqL1xuIFx0aWYgKHN0aWNreV9jcHUgPT0gY3B1X29mKHJxKSlcbkBAIC0xOTM4LDExICYjNDM7MTkzOCwxMSBAQCBzdGF0aWMgdm9pZCBkb19lbnF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgZW5xX2ZsYWdzLFxuIFx0LyogRFNRIGJ5cGFzcyBkaWRuJiMzOTt0IHRyaWdnZXIsIGVucXVldWUgb24gdGhlIEJQRiBzY2hlZHVsZXIgKi9cbiBcdHFzZXEgPSBycS1cdTAwM2VzY3gub3BzX3FzZXEmIzQzOyYjNDM7IFx1MDAzY1x1MDAzYyBTQ1hfT1BTU19RU0VRX1NISUZUO1xuIFxuLVx0V0FSTl9PTl9PTkNFKGF0b21pY19sb25nX3JlYWQoXHUwMDI2cC1cdTAwM2VzY3gub3BzX3N0YXRlKSAhPSBTQ1hfT1BTU19OT05FKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoYXRvbWljX2xvbmdfcmVhZChcdTAwMjZwLVx1MDAzZXNjeC5vcHNfc3RhdGUpICE9IFNDWF9PUFNTX05PTkUpO1xuIFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNnAtXHUwMDNlc2N4Lm9wc19zdGF0ZSwgU0NYX09QU1NfUVVFVUVJTkcgfCBxc2VxKTtcbiBcbiBcdGRkc3BfdGFza3AgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGlyZWN0X2Rpc3BhdGNoX3Rhc2spO1xuLVx0V0FSTl9PTl9PTkNFKCpkZHNwX3Rhc2twKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoKmRkc3BfdGFza3ApO1xuIFx0KmRkc3BfdGFza3AgPSBwO1xuIFxuIFx0U0NYX0NBTExfT1BfVEFTSyhzY2gsIGVucXVldWUsIHJxLCBwLCBlbnFfZmxhZ3MpO1xuQEAgLTIwMzksNyAmIzQzOzIwMzksNyBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlX3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNvcmVfZW5xX1xuIFx0XHRzdGlja3lfY3B1ID0gY3B1X29mKHJxKTtcbiBcbiBcdGlmIChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfUVVFVUVEKSB7XG4tXHRcdFdBUk5fT05fT05DRSghdGFza19ydW5uYWJsZShwKSk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXRhc2tfcnVubmFibGUocCkpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbkBAIC0yMTU5LDcgJiM0MzsyMTU5LDcgQEAgc3RhdGljIGJvb2wgZGVxdWV1ZV90YXNrX3NjeChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjb3JlX2RlcV9cbiBcdFx0ZGVxX2ZsYWdzIHw9IFNDWF9ERVFfU0NIRURfQ0hBTkdFO1xuIFxuIFx0aWYgKCEocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKHRhc2tfcnVubmFibGUocCkpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnVubmFibGUocCkpO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0yMjU2LDcgJiM0MzsyMjU2LDcgQEAgc3RhdGljIHZvaWQgbW92ZV9sb2NhbF90YXNrX3RvX2xvY2FsX2RzcShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNyY19kc3EtXHUwMDNlbG9jayk7XG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKGRzdF9ycSk7XG4gXG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgXHUwMDNlPSAwKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgXHUwMDNlPSAwKTtcbiBcbiBcdGlmIChlbnFfZmxhZ3MgXHUwMDI2IChTQ1hfRU5RX0hFQUQgfCBTQ1hfRU5RX1BSRUVNUFQpKVxuIFx0XHRsaXN0X2FkZChcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlLCBcdTAwMjZkc3RfZHNxLVx1MDAzZWxpc3QpO1xuQEAgLTIyOTksOCAmIzQzOzIyOTksOCBAQCBzdGF0aWMgdm9pZCBtb3ZlX3JlbW90ZV90YXNrX3RvX2xvY2FsX2RzcShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlbnFfZmxhZ3MsXG4gXHQgKiB0cnVuY2F0ZSB0aGUgdXBwZXIgMzIgYml0LiBBcyB3ZSBvd24gQHJxLCB3ZSBjYW4gcGFzcyB0aGVtIHRocm91Z2hcbiBcdCAqIEBycS1cdTAwM2VzY3guZXh0cmFfZW5xX2ZsYWdzIGluc3RlYWQuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRSghY3B1bWFza190ZXN0X2NwdShjcHVfb2YoZHN0X3JxKSwgcC1cdTAwM2VjcHVzX3B0cikpO1xuLVx0V0FSTl9PTl9PTkNFKGRzdF9ycS1cdTAwM2VzY3guZXh0cmFfZW5xX2ZsYWdzKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNwdW1hc2tfdGVzdF9jcHUoY3B1X29mKGRzdF9ycSksIHAtXHUwMDNlY3B1c19wdHIpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZHN0X3JxLVx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MpO1xuIFx0ZHN0X3JxLVx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MgPSBlbnFfZmxhZ3M7XG4gXHRhY3RpdmF0ZV90YXNrKGRzdF9ycSwgcCwgMCk7XG4gXHRkc3RfcnEtXHUwMDNlc2N4LmV4dHJhX2VucV9mbGFncyA9IDA7XG5AQCAtMjMzMSw3ICYjNDM7MjMzMSw3IEBAIHN0YXRpYyBib29sIHRhc2tfY2FuX3J1bl9vbl9yZW1vdGVfcnEoc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxuIHtcbiBcdHMzMiBjcHUgPSBjcHVfb2YocnEpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHRhc2tfY3B1KHApID09IGNwdSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfY3B1KHApID09IGNwdSk7XG4gXG4gXHQvKlxuIFx0ICogSWYgQHAgaGFzIG1pZ3JhdGlvbiBkaXNhYmxlZCwgQHAtXHUwMDNlY3B1c19wdHIgaXMgdXBkYXRlZCB0byBjb250YWluIG9ubHlcbkBAIC0yNDExLDcgJiM0MzsyNDExLDcgQEAgc3RhdGljIGJvb2wgdW5saW5rX2RzcV9hbmRfbG9ja19zcmNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkc3EtXHUwMDNlbG9jayk7XG4gXG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgXHUwMDNlPSAwKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgXHUwMDNlPSAwKTtcbiBcdHRhc2tfdW5saW5rX2Zyb21fZHNxKHAsIGRzcSk7XG4gXHRwLVx1MDAzZXNjeC5ob2xkaW5nX2NwdSA9IGNwdTtcbiBcbkBAIC0yNDIwLDcgJiM0MzsyNDIwLDcgQEAgc3RhdGljIGJvb2wgdW5saW5rX2RzcV9hbmRfbG9ja19zcmNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFxuIFx0LyogdGFza19ycSBjb3VsZG4mIzM5O3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJiMzOTtyZSBzdGlsbCB0aGUgaG9sZGluZyBjcHUgKi9cbiBcdHJldHVybiBsaWtlbHkocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgPT0gY3B1KSBcdTAwMjZcdTAwMjZcbi1cdFx0IVdBUk5fT05fT05DRShzcmNfcnEgIT0gdGFza19ycShwKSk7XG4mIzQzO1x0XHQhV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNyY19ycSAhPSB0YXNrX3JxKHApKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgY29uc3VtZV9yZW1vdGVfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEsXG5AQCAtMjYzMCw3ICYjNDM7MjYzMCw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoX3RvX2xvY2FsX2RzcShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsXG4gXG4gXHQvKiB0YXNrX3JxIGNvdWxkbiYjMzk7dCBoYXZlIGNoYW5nZWQgaWYgd2UmIzM5O3JlIHN0aWxsIHRoZSBob2xkaW5nIGNwdSAqL1xuIFx0aWYgKGxpa2VseShwLVx1MDAzZXNjeC5ob2xkaW5nX2NwdSA9PSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhV0FSTl9PTl9PTkNFKHNyY19ycSAhPSB0YXNrX3JxKHApKSkge1xuJiM0MztcdCAgICAhV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNyY19ycSAhPSB0YXNrX3JxKHApKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBJZiBAcCBpcyBzdGF5aW5nIG9uIHRoZSBzYW1lIHJxLCB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGdvXG4gXHRcdCAqIHRocm91Z2ggdGhlIGZ1bGwgZGVhY3RpdmF0ZS9hY3RpdmF0ZSBjeWNsZS4gT3B0aW1pemUgYnlcbkBAIC0zMDk5LDcgJiM0MzszMDk5LDcgQEAgc3RhdGljIHZvaWQgcHV0X3ByZXZfdGFza19zY3goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0XHQgKiB3aGljaCBzaG91bGQgdHJpZ2dlciBhbiBleHBsaWNpdCBmb2xsb3ctdXAgc2NoZWR1bGluZyBldmVudC5cbiBcdFx0ICovXG4gXHRcdGlmIChuZXh0IFx1MDAyNlx1MDAyNiBzY2hlZF9jbGFzc19hYm92ZShcdTAwMjZleHRfc2NoZWRfY2xhc3MsIG5leHQtXHUwMDNlc2NoZWRfY2xhc3MpKSB7XG4tXHRcdFx0V0FSTl9PTl9PTkNFKCEoc2NoLVx1MDAzZW9wcy5mbGFncyBcdTAwMjYgU0NYX09QU19FTlFfTEFTVCkpO1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIShzY2gtXHUwMDNlb3BzLmZsYWdzIFx1MDAyNiBTQ1hfT1BTX0VOUV9MQVNUKSk7XG4gXHRcdFx0ZG9fZW5xdWV1ZV90YXNrKHJxLCBwLCBTQ1hfRU5RX0xBU1QsIC0xKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRkb19lbnF1ZXVlX3Rhc2socnEsIHAsIDAsIC0xKTtcbkBAIC0zMjAxLDcgJiM0MzszMjAxLDcgQEAgZG9fcGlja190YXNrX3NjeChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLCBib29sIGZvcmNlX3NjeClcbiBcdGtlZXBfcHJldiA9IHJxLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1JRX0JBTF9LRUVQO1xuIFx0aWYgKHVubGlrZWx5KGtlZXBfcHJldiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICBwcmV2LVx1MDAzZXNjaGVkX2NsYXNzICE9IFx1MDAyNmV4dF9zY2hlZF9jbGFzcykpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKHNjeF9lbmFibGVfc3RhdGUoKSA9PSBTQ1hfRU5BQkxFRCk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2N4X2VuYWJsZV9zdGF0ZSgpID09IFNDWF9FTkFCTEVEKTtcbiBcdFx0a2VlcF9wcmV2ID0gZmFsc2U7XG4gXHR9XG4gXG5AQCAtMzMzMiw3ICYjNDM7MzMzMiw3IEBAIHN0YXRpYyBpbnQgc2VsZWN0X3Rhc2tfcnFfc2N4KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHByZXZfY3B1LCBpbnQgd2FrZV9mbGFnXG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqKmRkc3BfdGFza3A7XG4gXG4gXHRcdGRkc3BfdGFza3AgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGlyZWN0X2Rpc3BhdGNoX3Rhc2spO1xuLVx0XHRXQVJOX09OX09OQ0UoKmRkc3BfdGFza3ApO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCpkZHNwX3Rhc2twKTtcbiBcdFx0KmRkc3BfdGFza3AgPSBwO1xuIFxuIFx0XHR0aGlzX3JxKCktXHUwMDNlc2N4LmluX3NlbGVjdF9jcHUgPSB0cnVlO1xuQEAgLTM2MjAsNyAmIzQzOzM2MjAsNyBAQCBzdGF0aWMgdm9pZCBfX3NjeF9lbmFibGVfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdCAqIHRyYW5zaXRpb25zIGFyZSBjb25zaXN0ZW50LCB0aGUgZmxhZyBzaG91bGQgYWx3YXlzIGJlIGNsZWFyXG4gXHQgKiBoZXJlLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0lOX0NVU1RPRFkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7XG4gXG4gXHQvKlxuIFx0ICogU2V0IHRoZSB3ZWlnaHQgYmVmb3JlIGNhbGxpbmcgb3BzLmVuYWJsZSgpIHNvIHRoYXQgdGhlIHNjaGVkdWxlclxuQEAgLTM2NTEsNyAmIzQzOzM2NTEsNyBAQCBzdGF0aWMgdm9pZCBzY3hfZGlzYWJsZV90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0c3RydWN0IHJxICpycSA9IHRhc2tfcnEocCk7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcbi1cdFdBUk5fT05fT05DRShzY3hfZ2V0X3Rhc2tfc3RhdGUocCkgIT0gU0NYX1RBU0tfRU5BQkxFRCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjeF9nZXRfdGFza19zdGF0ZShwKSAhPSBTQ1hfVEFTS19FTkFCTEVEKTtcbiBcbiBcdGNsZWFyX2RpcmVjdF9kaXNwYXRjaChwKTtcbiBcbkBAIC0zNjY0LDcgJiM0MzszNjY0LDcgQEAgc3RhdGljIHZvaWQgc2N4X2Rpc2FibGVfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdCAqIHRyYW5zaXRpb25zIGFyZSBjb25zaXN0ZW50LCB0aGUgZmxhZyBzaG91bGQgYWx3YXlzIGJlIGNsZWFyXG4gXHQgKiBoZXJlLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0lOX0NVU1RPRFkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fc2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG5AQCAtMzY4OSw3ICYjNDM7MzY4OSw3IEBAIHN0YXRpYyB2b2lkIF9fc2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4gXHRcdHNjeF9kaXNhYmxlX3Rhc2soc2NoLCBwKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OX09OQ0UodHJ1ZSk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQodHJ1ZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC0zNzI2LDcgJiM0MzszNzI2LDcgQEAgc3RhdGljIHZvaWQgc2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4gXHQgKiBwYXRoLCBzbyBpdCYjMzk7cyBhbHdheXMgY2xlYXIgd2hlbiBAcCBhcnJpdmVzIGhlcmUgaW4gJVNDWF9UQVNLX05PTkUuXG4gXHQgKi9cbiBcdGlmIChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfU1VCX0lOSVQpIHtcbi1cdFx0aWYgKCFXQVJOX09OX09OQ0UoIXNjeF9lbmFibGluZ19zdWJfc2NoZWQpKVxuJiM0MztcdFx0aWYgKCFXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNjeF9lbmFibGluZ19zdWJfc2NoZWQpKVxuIFx0XHRcdHNjeF9zdWJfaW5pdF9jYW5jZWxfdGFzayhzY3hfZW5hYmxpbmdfc3ViX3NjaGVkLCBwKTtcbiBcdFx0cC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2PSB+U0NYX1RBU0tfU1VCX0lOSVQ7XG4gXHR9XG5AQCAtMzgxOCw3ICYjNDM7MzgxOCw3IEBAIHZvaWQgc2N4X2NhbmNlbF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdFx0c3RydWN0IHJxX2ZsYWdzIHJmO1xuIFxuIFx0XHRycSA9IHRhc2tfcnFfbG9jayhwLCBcdTAwMjZyZik7XG4tXHRcdFdBUk5fT05fT05DRShzY3hfZ2V0X3Rhc2tfc3RhdGUocCkgXHUwMDNlPSBTQ1hfVEFTS19SRUFEWSk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2N4X2dldF90YXNrX3N0YXRlKHApIFx1MDAzZT0gU0NYX1RBU0tfUkVBRFkpO1xuIFx0XHRzY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHNjeF90YXNrX3NjaGVkKHApLCBwKTtcbiBcdFx0dGFza19ycV91bmxvY2socnEsIHAsIFx1MDAyNnJmKTtcbiBcdH1cbkBAIC0zOTg2LDcgJiM0MzszOTg2LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19kZHNwX2RlZmVycmVkX2xvY2FscyhzdHJ1Y3QgcnEgKnJxKVxuIFx0XHRjbGVhcl9kaXJlY3RfZGlzcGF0Y2gocCk7XG4gXG4gXHRcdGRzcSA9IGZpbmRfZHNxX2Zvcl9kaXNwYXRjaChzY2gsIHJxLCBkc3FfaWQsIHRhc2tfY3B1KHApKTtcbi1cdFx0aWYgKCFXQVJOX09OX09OQ0UoZHNxLVx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKVxuJiM0MztcdFx0aWYgKCFXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLVx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKVxuIFx0XHRcdGRpc3BhdGNoX3RvX2xvY2FsX2RzcShzY2gsIHJxLCBkc3EsIHAsIGVucV9mbGFncyk7XG4gXHR9XG4gfVxuQEAgLTQwNDEsNyAmIzQzOzQwNDEsNyBAQCBzdGF0aWMgdTMyIHJlZW5xX2xvY2FsKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSwgdTY0IHJlZW5xX2ZsYWdzKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKHJlZW5xX2ZsYWdzIFx1MDAyNiBfX1NDWF9SRUVOUV9UU1JfTUFTSykpXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChyZWVucV9mbGFncyBcdTAwMjYgX19TQ1hfUkVFTlFfVFNSX01BU0spKVxuIFx0XHRyZWVucV9mbGFncyBcdTAwMjY9IH5fX1NDWF9SRUVOUV9UU1JfTUFTSztcbiBcdGlmIChycV9pc19vcGVuKHJxLCAwKSlcbiBcdFx0cmVlbnFfZmxhZ3MgfD0gU0NYX1JFRU5RX1RTUl9SUV9PUEVOO1xuQEAgLTQwNzgsNyAmIzQzOzQwNzgsNyBAQCBzdGF0aWMgdTMyIHJlZW5xX2xvY2FsKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSwgdTY0IHJlZW5xX2ZsYWdzKVxuIFxuIFx0XHRkaXNwYXRjaF9kZXF1ZXVlKHJxLCBwKTtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfUkVFTlFfUkVBU09OX01BU0spKVxuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfUkVFTlFfUkVBU09OX01BU0spKVxuIFx0XHRcdHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNj0gflNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLO1xuIFx0XHRwLVx1MDAzZXNjeC5mbGFncyB8PSByZWFzb247XG4gXG5AQCAtNDE5OSw3ICYjNDM7NDE5OSw3IEBAIHN0YXRpYyB2b2lkIHJlZW5xX3VzZXIoc3RydWN0IHJxICpycSwgc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EsIHU2NCByZWVucV9mbGFnXG4gXHRcdGRpc3BhdGNoX2RlcXVldWVfbG9ja2VkKHAsIGRzcSk7XG4gXHRcdHJhd19zcGluX3VubG9jayhcdTAwMjZkc3EtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGlmIChXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLKSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLKSlcbiBcdFx0XHRwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjY9IH5TQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSztcbiBcdFx0cC1cdTAwM2VzY3guZmxhZ3MgfD0gcmVhc29uO1xuIFxuQEAgLTQzNjAsNyAmIzQzOzQzNjAsNyBAQCBpbnQgc2N4X2Nncm91cF9jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcbiBcdFx0c3RydWN0IGNncm91cCAqZnJvbSA9IHRnX2NncnAodGFza19ncm91cChwKSk7XG4gXHRcdHN0cnVjdCBjZ3JvdXAgKnRvID0gdGdfY2dycChjc3NfdGcoY3NzKSk7XG4gXG4tXHRcdFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5jZ3JwX21vdmluZ19mcm9tKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5jZ3JwX21vdmluZ19mcm9tKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogc2NoZWRfbW92ZV90YXNrKCkgb21pdHMgaWRlbnRpdHkgbWlncmF0aW9ucy4gTGV0JiMzOTtzIG1hdGNoIHRoZVxuQEAgLTQ2MTcsNyAmIzQzOzQ2MTcsNyBAQCBzdGF0aWMgdm9pZCBleGl0X2RzcShzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSlcbiBcdFx0ICogVGhlcmUgbXVzdCBoYXZlIGJlZW4gYSBSQ1UgZ3JhY2UgcGVyaW9kIHNpbmNlIHRoZSBsYXN0XG4gXHRcdCAqIGluc2VydGlvbiBhbmQgQGRzcSBzaG91bGQgYmUgb2ZmIHRoZSBkZWZlcnJlZCBsaXN0IGJ5IG5vdy5cbiBcdFx0ICovXG4tXHRcdGlmIChXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZHJ1LVx1MDAzZW5vZGUpKSkge1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZkcnUtXHUwMDNlbm9kZSkpKSB7XG4gXHRcdFx0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKFx1MDAyNnJxLVx1MDAzZXNjeC5kZWZlcnJlZF9yZWVucV9sb2NrKTtcbiBcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRydS1cdTAwM2Vub2RlKTtcbiBcdFx0fVxuQEAgLTQ3NDUsNyAmIzQzOzQ3NDUsNyBAQCBzdGF0aWMgaW50IHNjeF9jZ3JvdXBfaW5pdChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4gXHRcdHRnLVx1MDAzZXNjeC5mbGFncyB8PSBTQ1hfVEdfSU5JVEVEO1xuIFx0fVxuIFxuLVx0V0FSTl9PTl9PTkNFKHNjeF9jZ3JvdXBfZW5hYmxlZCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjeF9jZ3JvdXBfZW5hYmxlZCk7XG4gXHRzY3hfY2dyb3VwX2VuYWJsZWQgPSB0cnVlO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNDg0OCw3ICYjNDM7NDg0OCw3IEBAIHN0YXRpYyB2b2lkIHNjeF9zY2hlZF9mcmVlX3JjdV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0ICogcGVyaW9kLiBBcyB0aGF0IGJsb2NrcyBuZXcgZGVmZXJyYWxzLCBhbGxcbiBcdFx0ICogZGVmZXJyZWRfcmVlbnFfbG9jYWxfbm9kZSYjMzk7cyBtdXN0IGJlIG9mZi1saXN0IGJ5IG5vdy5cbiBcdFx0ICovXG4tXHRcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZwY3B1LVx1MDAzZWRlZmVycmVkX3JlZW5xX2xvY2FsLm5vZGUpKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZwY3B1LVx1MDAzZWRlZmVycmVkX3JlZW5xX2xvY2FsLm5vZGUpKTtcbiBcbiBcdFx0ZXhpdF9kc3EoYnlwYXNzX2RzcShzY2gsIGNwdSkpO1xuIFx0fVxuQEAgLTUzMjQsNyAmIzQzOzUzMjQsNyBAQCBzdGF0aWMgYm9vbCBpbmNfYnlwYXNzX2RlcHRoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNjeF9ieXBhc3NfbG9jayk7XG4gXG4tXHRXQVJOX09OX09OQ0Uoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCBcdTAwM2MgMCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjaC1cdTAwM2VieXBhc3NfZGVwdGggXHUwMDNjIDApO1xuIFx0V1JJVEVfT05DRShzY2gtXHUwMDNlYnlwYXNzX2RlcHRoLCBzY2gtXHUwMDNlYnlwYXNzX2RlcHRoICYjNDM7IDEpO1xuIFx0aWYgKHNjaC1cdTAwM2VieXBhc3NfZGVwdGggIT0gMSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTUzMzksNyAmIzQzOzUzMzksNyBAQCBzdGF0aWMgYm9vbCBkZWNfYnlwYXNzX2RlcHRoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNjeF9ieXBhc3NfbG9jayk7XG4gXG4tXHRXQVJOX09OX09OQ0Uoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCBcdTAwM2MgMSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjaC1cdTAwM2VieXBhc3NfZGVwdGggXHUwMDNjIDEpO1xuIFx0V1JJVEVfT05DRShzY2gtXHUwMDNlYnlwYXNzX2RlcHRoLCBzY2gtXHUwMDNlYnlwYXNzX2RlcHRoIC0gMSk7XG4gXHRpZiAoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCAhPSAwKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtNTM2MCw3ICYjNDM7NTM2MCw3IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9ieXBhc3NfZHNwKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdCAqIEBzY2gtXHUwMDNlYnlwYXNzX2RlcHRoIHRyYW5zaXRpb25pbmcgZnJvbSAwIHRvIDEgdHJpZ2dlcnMgZW5hYmxpbmcuXG4gXHQgKiBTaG91bGRuJiMzOTt0IHN0YWdnZXIuXG4gXHQgKi9cbi1cdGlmIChXQVJOX09OX09OQ0UodGVzdF9hbmRfc2V0X2JpdCgwLCBcdTAwMjZzY2gtXHUwMDNlYnlwYXNzX2RzcF9jbGFpbSkpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQodGVzdF9hbmRfc2V0X2JpdCgwLCBcdTAwMjZzY2gtXHUwMDNlYnlwYXNzX2RzcF9jbGFpbSkpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKlxuQEAgLTUzODAsMTEgJiM0Mzs1MzgwLDExIEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9ieXBhc3NfZHNwKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdCAqIEJ1bXAgZW5hYmxlIGRlcHRoIG9uIGJvdGggQHNjaCBhbmQgYnlwYXNzIGRpc3BhdGNoIGhvc3QuXG4gXHQgKi9cbiBcdHJldCA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnNjaC1cdTAwM2VieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7XG4tXHRXQVJOX09OX09OQ0UocmV0IFx1MDAzYz0gMCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJldCBcdTAwM2M9IDApO1xuIFxuIFx0aWYgKGhvc3QgIT0gc2NoKSB7XG4gXHRcdHJldCA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmhvc3QtXHUwMDNlYnlwYXNzX2RzcF9lbmFibGVfZGVwdGgpO1xuLVx0XHRXQVJOX09OX09OQ0UocmV0IFx1MDAzYz0gMCk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocmV0IFx1MDAzYz0gMCk7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTU0MDUsMTEgJiM0Mzs1NDA1LDExIEBAIHN0YXRpYyB2b2lkIGRpc2FibGVfYnlwYXNzX2RzcChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJldCA9IGF0b21pY19kZWNfcmV0dXJuKFx1MDAyNnNjaC1cdTAwM2VieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7XG4tXHRXQVJOX09OX09OQ0UocmV0IFx1MDAzYyAwKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocmV0IFx1MDAzYyAwKTtcbiBcbiBcdGlmIChzY3hfcGFyZW50KHNjaCkpIHtcbiBcdFx0cmV0ID0gYXRvbWljX2RlY19yZXR1cm4oXHUwMDI2c2N4X3BhcmVudChzY2gpLVx1MDAzZWJ5cGFzc19kc3BfZW5hYmxlX2RlcHRoKTtcbi1cdFx0V0FSTl9PTl9PTkNFKHJldCBcdTAwM2MgMCk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocmV0IFx1MDAzYyAwKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2ZhaXIuYyBiL2tlcm5lbC9zY2hlZC9mYWlyLmNcbmluZGV4IDNlYmVjMTg2Zjk4MjM2Li4xMjEzZTc3NjY1ZmU5MyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9mYWlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9mYWlyLmNcbkBAIC00MDQsNyAmIzQzOzQwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2RlbF9sZWFmX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9saXN0X2xlYWZfY2ZzX3JxKHN0cnVjdCBycSAqcnEpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZXRtcF9hbG9uZV9icmFuY2ggIT0gXHUwMDI2cnEtXHUwMDNlbGVhZl9jZnNfcnFfbGlzdCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZXRtcF9hbG9uZV9icmFuY2ggIT0gXHUwMDI2cnEtXHUwMDNlbGVhZl9jZnNfcnFfbGlzdCk7XG4gfVxuIFxuIC8qIEl0ZXJhdGUgdGhyb3VnaCBhbGwgbGVhZiBjZnNfcnEmIzM5O3Mgb24gYSBydW5xdWV1ZSAqL1xuQEAgLTY4OSw3ICYjNDM7Njg5LDcgQEAgX19zdW1fd192cnVudGltZV9hZGQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcbiBcdHM2NCB3X3ZydW50aW1lLCBrZXkgPSBlbnRpdHlfa2V5KGNmc19ycSwgc2UpO1xuIFxuIFx0d192cnVudGltZSA9IGtleSAqIHdlaWdodDtcbi1cdFdBUk5fT05fT05DRSgod192cnVudGltZSBcdTAwM2VcdTAwM2UgNjMpICE9ICh3X3ZydW50aW1lIFx1MDAzZVx1MDAzZSA2MikpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgod192cnVudGltZSBcdTAwM2VcdTAwM2UgNjMpICE9ICh3X3ZydW50aW1lIFx1MDAzZVx1MDAzZSA2MikpO1xuIFxuIFx0Y2ZzX3JxLVx1MDAzZXN1bV93X3ZydW50aW1lICYjNDM7PSB3X3ZydW50aW1lO1xuIFx0Y2ZzX3JxLVx1MDAzZXN1bV93ZWlnaHQgJiM0Mzs9IHdlaWdodDtcbkBAIC04NjEsNyAmIzQzOzg2MSw3IEBAIGJvb2wgdXBkYXRlX2VudGl0eV9sYWcoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcbiBcdHU2NCBhdnJ1bnRpbWUgPSBhdmdfdnJ1bnRpbWUoY2ZzX3JxKTtcbiBcdHM2NCB2bGFnID0gZW50aXR5X2xhZyhjZnNfcnEsIHNlLCBhdnJ1bnRpbWUpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCFzZS1cdTAwM2Vvbl9ycSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzZS1cdTAwM2Vvbl9ycSk7XG4gXG4gXHRpZiAoc2UtXHUwMDNlc2NoZWRfZGVsYXllZCkge1xuIFx0XHQvKiBwcmV2aW91cyB2bGFnIFx1MDAzYyAwIG90aGVyd2lzZSBzZSB3b3VsZCBub3QgYmUgZGVsYXllZCAqL1xuQEAgLTExNTMsNyAmIzQzOzExNTMsNyBAQCBzdGF0aWMgc3RydWN0IHNjaGVkX2VudGl0eSAqcGlja19lZXZkZihzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIGJvb2wgcHJvdGVjdClcbiBcdGlmIChzY2hlZF9mZWF0KFBJQ0tfQlVERFkpIFx1MDAyNlx1MDAyNiBwcm90ZWN0IFx1MDAyNlx1MDAyNlxuIFx0ICAgIGNmc19ycS1cdTAwM2VuZXh0IFx1MDAyNlx1MDAyNiBlbnRpdHlfZWxpZ2libGUoY2ZzX3JxLCBjZnNfcnEtXHUwMDNlbmV4dCkpIHtcbiBcdFx0LyogLVx1MDAzZW5leHQgd2lsbCBuZXZlciBiZSBkZWxheWVkICovXG4tXHRcdFdBUk5fT05fT05DRShjZnNfcnEtXHUwMDNlbmV4dC1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjZnNfcnEtXHUwMDNlbmV4dC1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiBcdFx0cmV0dXJuIGNmc19ycS1cdTAwM2VuZXh0O1xuIFx0fVxuIFxuQEAgLTQzMDIsOSAmIzQzOzQzMDIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9hZF9hdmdfaXNfZGVjYXllZChzdHJ1Y3Qgc2NoZWRfYXZnICpzYSlcbiBcdCAqIE1ha2Ugc3VyZSB0aGF0IHJvdW5kaW5nIGFuZC9vciBwcm9wYWdhdGlvbiBvZiBQRUxUIHZhbHVlcyBuZXZlclxuIFx0ICogYnJlYWsgdGhpcy5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKHNhLVx1MDAzZWxvYWRfYXZnIHx8XG4tXHRcdCAgICAgIHNhLVx1MDAzZXV0aWxfYXZnIHx8XG4tXHRcdCAgICAgIHNhLVx1MDAzZXJ1bm5hYmxlX2F2Zyk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNhLVx1MDAzZWxvYWRfYXZnIHx8XG4mIzQzO1x0XHRcdCAgICAgIHNhLVx1MDAzZXV0aWxfYXZnIHx8XG4mIzQzO1x0XHRcdCAgICAgIHNhLVx1MDAzZXJ1bm5hYmxlX2F2Zyk7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtNTQ2MCw3ICYjNDM7NTQ2MCw3IEBAIHBsYWNlX2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCBpbnQgZmxhZ3MpXG4gXG4gXHRcdHdlaWdodCA9IGF2Z192cnVudGltZV93ZWlnaHQoY2ZzX3JxLCBzZS1cdTAwM2Vsb2FkLndlaWdodCk7XG4gXHRcdGxhZyAqPSBsb2FkICYjNDM7IHdlaWdodDtcbi1cdFx0aWYgKFdBUk5fT05fT05DRSghbG9hZCkpXG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsb2FkKSlcbiBcdFx0XHRsb2FkID0gMTtcbiBcdFx0bGFnID0gZGl2NjRfbG9uZyhsYWcsIGxvYWQpO1xuIFxuQEAgLTU2NTMsNyAmIzQzOzU2NTMsNyBAQCBkZXF1ZXVlX2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCBpbnQgZmxhZ3MpXG4gXHRjbGVhcl9idWRkaWVzKGNmc19ycSwgc2UpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBERVFVRVVFX0RFTEFZRUQpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKCFzZS1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRib29sIGRlbGF5ID0gc2xlZXA7XG4gXHRcdC8qXG5AQCAtNTY2Myw3ICYjNDM7NTY2Myw3IEBAIGRlcXVldWVfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBmbGFncylcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiAoREVRVUVVRV9TUEVDSUFMIHwgREVRVUVVRV9USFJPVFRMRSkpXG4gXHRcdFx0ZGVsYXkgPSBmYWxzZTtcbiBcbi1cdFx0V0FSTl9PTl9PTkNFKGRlbGF5IFx1MDAyNlx1MDAyNiBzZS1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkZWxheSBcdTAwMjZcdTAwMjYgc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4gXG4gXHRcdGlmIChzY2hlZF9mZWF0KERFTEFZX0RFUVVFVUUpIFx1MDAyNlx1MDAyNiBkZWxheSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFlbnRpdHlfZWxpZ2libGUoY2ZzX3JxLCBzZSkpIHtcbkBAIC01NzQ3LDcgJiM0Mzs1NzQ3LDcgQEAgc2V0X25leHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGJvb2wgZmlyc3QpXG4gXHR9XG4gXG4gXHR1cGRhdGVfc3RhdHNfY3Vycl9zdGFydChjZnNfcnEsIHNlKTtcbi1cdFdBUk5fT05fT05DRShjZnNfcnEtXHUwMDNlY3Vycik7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cdTAwM2VjdXJyKTtcbiBcdGNmc19ycS1cdTAwM2VjdXJyID0gc2U7XG4gXG4gXHQvKlxuQEAgLTU4MTQsNyAmIzQzOzU4MTQsNyBAQCBzdGF0aWMgdm9pZCBwdXRfcHJldl9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpwcmV2KVxuIFx0XHQvKiBpbiAhb25fcnEgY2FzZSwgdXBkYXRlIG9jY3VycmVkIGF0IGRlcXVldWUgKi9cbiBcdFx0dXBkYXRlX2xvYWRfYXZnKGNmc19ycSwgcHJldiwgMCk7XG4gXHR9XG4tXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZWN1cnIgIT0gcHJldik7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cdTAwM2VjdXJyICE9IHByZXYpO1xuIFx0Y2ZzX3JxLVx1MDAzZWN1cnIgPSBOVUxMO1xuIH1cbiBcbkBAIC02MDE1LDcgJiM0Mzs2MDE1LDcgQEAgc3RhdGljIHZvaWQgdGhyb3R0bGVfY2ZzX3JxX3dvcmsoc3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmspXG4gXHRzdHJ1Y3QgY2ZzX3JxICpjZnNfcnE7XG4gXHRzdHJ1Y3QgcnEgKnJxO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHAgIT0gY3VycmVudCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAgIT0gY3VycmVudCk7XG4gXHRwLVx1MDAzZXNjaGVkX3Rocm90dGxlX3dvcmsubmV4dCA9IFx1MDAyNnAtXHUwMDNlc2NoZWRfdGhyb3R0bGVfd29yaztcbiBcbiBcdC8qXG5AQCAtNjA0MSw3ICYjNDM7NjA0MSw3IEBAIHN0YXRpYyB2b2lkIHRocm90dGxlX2Nmc19ycV93b3JrKHN0cnVjdCBjYWxsYmFja19oZWFkICp3b3JrKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0cnEgPSBzY29wZS5ycTtcbiBcdFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbi1cdFx0V0FSTl9PTl9PTkNFKHAtXHUwMDNldGhyb3R0bGVkIHx8ICFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNldGhyb3R0bGVkIHx8ICFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xuIFx0XHRkZXF1ZXVlX3Rhc2tfZmFpcihycSwgcCwgREVRVUVVRV9TTEVFUCB8IERFUVVFVUVfVEhST1RUTEUpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZwLVx1MDAzZXRocm90dGxlX25vZGUsIFx1MDAyNmNmc19ycS1cdTAwM2V0aHJvdHRsZWRfbGltYm9fbGlzdCk7XG4gXHRcdC8qXG5AQCAtNjA3Miw3ICYjNDM7NjA3Miw3IEBAIHZvaWQgaW5pdF9jZnNfdGhyb3R0bGVfd29yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gc3RhdGljIHZvaWQgZGV0YWNoX3Rhc2tfY2ZzX3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4gc3RhdGljIHZvaWQgZGVxdWV1ZV90aHJvdHRsZWRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBmbGFncylcbiB7XG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzZS5vbl9ycSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2Uub25fcnEpO1xuIFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZXRocm90dGxlX25vZGUpO1xuIFxuIFx0LyogdGFzayBibG9ja2VkIGFmdGVyIHRocm90dGxlZCAqL1xuQEAgLTYwOTQsNyAmIzQzOzYwOTQsNyBAQCBzdGF0aWMgYm9vbCBlbnF1ZXVlX3Rocm90dGxlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IGNmc19ycV9vZihcdTAwMjZwLVx1MDAzZXNlKTtcbiBcbiBcdC8qIEBwIHNob3VsZCBoYXZlIGdvbmUgdGhyb3VnaCBkZXF1ZXVlX3Rocm90dGxlZF90YXNrKCkgZmlyc3QgKi9cbi1cdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXRocm90dGxlX25vZGUpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2V0aHJvdHRsZV9ub2RlKSk7XG4gXG4gXHQvKlxuIFx0ICogSWYgdGhlIHRocm90dGxlZCB0YXNrIEBwIGlzIGVucXVldWVkIHRvIGEgdGhyb3R0bGVkIGNmc19ycSxcbkBAIC02MTYyLDcgJiM0Mzs2MTYyLDcgQEAgc3RhdGljIGludCB0Z191bnRocm90dGxlX3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgdm9pZCAqZGF0YSlcbiBcbiBcdFx0Y2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9ja19zZWxmID0gMDtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRSgoczY0KWRlbHRhIFx1MDAzYyAwKSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoKHM2NClkZWx0YSBcdTAwM2MgMCkpXG4gXHRcdFx0ZGVsdGEgPSAwO1xuIFxuIFx0XHRjZnNfcnEtXHUwMDNldGhyb3R0bGVkX2Nsb2NrX3NlbGZfdGltZSAmIzQzOz0gZGVsdGE7XG5AQCAtNjIzMSw4ICYjNDM7NjIzMSw4IEBAIHN0YXRpYyBpbnQgdGdfdGhyb3R0bGVfZG93bihzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpXG4gXHRcdGNmc19ycS1cdTAwM2VwZWx0X2Nsb2NrX3Rocm90dGxlZCA9IDE7XG4gXHR9XG4gXG4tXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9ja19zZWxmKTtcbi1cdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZjZnNfcnEtXHUwMDNldGhyb3R0bGVkX2xpbWJvX2xpc3QpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoY2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9ja19zZWxmKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXHUwMDI2Y2ZzX3JxLVx1MDAzZXRocm90dGxlZF9saW1ib19saXN0KSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjI3Myw3ICYjNDM7NjI3Myw3IEBAIHN0YXRpYyBib29sIHRocm90dGxlX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXG4gXHQgKiB0aHJvdHRsZWQtbGlzdC4gIHJxLVx1MDAzZWxvY2sgcHJvdGVjdHMgY29tcGxldGlvbi5cbiBcdCAqL1xuIFx0Y2ZzX3JxLVx1MDAzZXRocm90dGxlZCA9IDE7XG4tXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9jayk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cdTAwM2V0aHJvdHRsZWRfY2xvY2spO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTYzODAsNyAmIzQzOzYzODAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX191bnRocm90dGxlX2Nmc19ycV9hc3luYyhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXG4gXHR9XG4gXG4gXHQvKiBBbHJlYWR5IGVucXVldWVkICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNmNmc19ycS1cdTAwM2V0aHJvdHRsZWRfY3NkX2xpc3QpKSlcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFx1MDAyNmNmc19ycS1cdTAwM2V0aHJvdHRsZWRfY3NkX2xpc3QpKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Zmlyc3QgPSBsaXN0X2VtcHR5KFx1MDAyNnJxLVx1MDAzZWNmc2JfY3NkX2xpc3QpO1xuQEAgLTYzOTMsNyAmIzQzOzYzOTMsNyBAQCBzdGF0aWMgdm9pZCB1bnRocm90dGxlX2Nmc19ycV9hc3luYyhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZihjZnNfcnEpKTtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoIWNmc19ycV90aHJvdHRsZWQoY2ZzX3JxKSB8fFxuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNmc19ycV90aHJvdHRsZWQoY2ZzX3JxKSB8fFxuIFx0ICAgIGNmc19ycS1cdTAwM2VydW50aW1lX3JlbWFpbmluZyBcdTAwM2M9IDApKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtNjQyOSw3ICYjNDM7NjQyOSw3IEBAIHN0YXRpYyBib29sIGRpc3RyaWJ1dGVfY2ZzX3J1bnRpbWUoc3RydWN0IGNmc19iYW5kd2lkdGggKmNmc19iKVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0LyogQnkgdGhlIGFib3ZlIGNoZWNrcywgdGhpcyBzaG91bGQgbmV2ZXIgYmUgdHJ1ZSAqL1xuLVx0XHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZXJ1bnRpbWVfcmVtYWluaW5nIFx1MDAzZSAwKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjZnNfcnEtXHUwMDNlcnVudGltZV9yZW1haW5pbmcgXHUwMDNlIDApO1xuIFxuIFx0XHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmNmc19iLVx1MDAzZWxvY2spO1xuIFx0XHRydW50aW1lID0gLWNmc19ycS1cdTAwM2VydW50aW1lX3JlbWFpbmluZyAmIzQzOyAxO1xuQEAgLTY0NTAsNyAmIzQzOzY0NTAsNyBAQCBzdGF0aWMgYm9vbCBkaXN0cmlidXRlX2Nmc19ydW50aW1lKHN0cnVjdCBjZnNfYmFuZHdpZHRoICpjZnNfYilcbiBcdFx0XHRcdCAqIFdlIGN1cnJlbnRseSBvbmx5IGV4cGVjdCB0byBiZSB1bnRocm90dGxpbmdcbiBcdFx0XHRcdCAqIGEgc2luZ2xlIGNmc19ycSBsb2NhbGx5LlxuIFx0XHRcdFx0ICovXG4tXHRcdFx0XHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bG9jYWxfdW50aHJvdHRsZSkpO1xuJiM0MztcdFx0XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZsb2NhbF91bnRocm90dGxlKSk7XG4gXHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNmc19ycS1cdTAwM2V0aHJvdHRsZWRfY3NkX2xpc3QsXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNmxvY2FsX3VudGhyb3R0bGUpO1xuIFx0XHRcdH1cbkBAIC02NDc1LDcgJiM0Mzs2NDc1LDcgQEAgc3RhdGljIGJvb2wgZGlzdHJpYnV0ZV9jZnNfcnVudGltZShzdHJ1Y3QgY2ZzX2JhbmR3aWR0aCAqY2ZzX2IpXG4gXG4gXHRcdHJxX3VubG9ja19pcnFyZXN0b3JlKHJxLCBcdTAwMjZyZik7XG4gXHR9XG4tXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bG9jYWxfdW50aHJvdHRsZSkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZsb2NhbF91bnRocm90dGxlKSk7XG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbkBAIC03MDQ4LDcgJiM0Mzs3MDQ4LDcgQEAgc3RhdGljIHZvaWQgaHJ0aWNrX3N0YXJ0X2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0dTY0IHZkZWx0YTtcbiBcdHU2NCBkZWx0YTtcbiBcbi1cdFdBUk5fT05fT05DRSh0YXNrX3JxKHApICE9IHJxKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19ycShwKSAhPSBycSk7XG4gXG4gXHRpZiAocnEtXHUwMDNlY2ZzLmhfbnJfcXVldWVkIFx1MDAzYz0gMSlcbiBcdFx0cmV0dXJuO1xuQEAgLTcxNzEsOCAmIzQzOzcxNzEsOCBAQCByZXF1ZXVlX2RlbGF5ZWRfZW50aXR5KHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKVxuIFx0ICogQmVjYXVzZSBhIGRlbGF5ZWQgZW50aXR5IGlzIG9uZSB0aGF0IGlzIHN0aWxsIG9uXG4gXHQgKiB0aGUgcnVucXVldWUgY29tcGV0aW5nIHVudGlsIGVsZWdpYmlsaXR5LlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UoIXNlLVx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xuLVx0V0FSTl9PTl9PTkNFKCFzZS1cdTAwM2Vvbl9ycSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzZS1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLVx1MDAzZW9uX3JxKTtcbiBcbiBcdGlmICh1cGRhdGVfZW50aXR5X2xhZyhjZnNfcnEsIHNlKSkge1xuIFx0XHRjZnNfcnEtXHUwMDNlbnJfcXVldWVkLS07XG5AQCAtNzQwOSw4ICYjNDM7NzQwOSw4IEBAIHN0YXRpYyBpbnQgZGVxdWV1ZV9lbnRpdGllcyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxuIFx0XHRycS1cdTAwM2VuZXh0X2JhbGFuY2UgPSBqaWZmaWVzO1xuIFxuIFx0aWYgKHAgXHUwMDI2XHUwMDI2IHRhc2tfZGVsYXllZCkge1xuLVx0XHRXQVJOX09OX09OQ0UoIXRhc2tfc2xlZXApO1xuLVx0XHRXQVJOX09OX09OQ0UocC1cdTAwM2Vvbl9ycSAhPSAxKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghdGFza19zbGVlcCk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2Vvbl9ycSAhPSAxKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogRml4LXVwIHdoYXQgYmxvY2tfdGFzaygpIHNraXBwZWQuXG5AQCAtODk3Niw3ICYjNDM7ODk3Niw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZmFpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBhZmZpbml0eV9jb250ZXh0XG4gc3RhdGljIHZvaWQgc2V0X25leHRfYnVkZHkoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpXG4ge1xuIFx0Zm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKSB7XG4tXHRcdGlmIChXQVJOX09OX09OQ0UoIXNlLVx1MDAzZW9uX3JxKSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLVx1MDAzZW9uX3JxKSlcbiBcdFx0XHRyZXR1cm47XG4gXHRcdGlmIChzZV9pc19pZGxlKHNlKSlcbiBcdFx0XHRyZXR1cm47XG5AQCAtOTAyMyw3ICYjNDM7OTAyMyw3IEBAIHByZWVtcHRfc3luYyhzdHJ1Y3QgcnEgKnJxLCBpbnQgd2FrZV9mbGFncyxcbiBcdCAqIFdGX1NZTkMgd2l0aG91dCBXRl9UVFdVIGlzIG5vdCBleHBlY3RlZCBzbyB3YXJuIGlmIGl0IGhhcHBlbnMgZXZlblxuIFx0ICogdGhvdWdoIGl0IGlzIGxpa2VseSBoYXJtbGVzcy5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKCEod2FrZV9mbGFncyBcdTAwMjYgV0ZfVFRXVSkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKHdha2VfZmxhZ3MgXHUwMDI2IFdGX1RUV1UpKTtcbiBcbiBcdHRocmVzaG9sZCA9IHN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdDtcbiBcdGRlbHRhID0gcnFfY2xvY2tfdGFzayhycSkgLSBzZS1cdTAwM2VleGVjX3N0YXJ0O1xuQEAgLTkwOTUsNyAmIzQzOzkwOTUsNyBAQCBzdGF0aWMgdm9pZCB3YWtldXBfcHJlZW1wdF9mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2VfZlxuIFx0XHRyZXR1cm47XG4gXG4gXHRmaW5kX21hdGNoaW5nX3NlKFx1MDAyNnNlLCBcdTAwMjZwc2UpO1xuLVx0V0FSTl9PTl9PTkNFKCFwc2UpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghcHNlKTtcbiBcbiBcdGNzZV9pc19pZGxlID0gc2VfaXNfaWRsZShzZSk7XG4gXHRwc2VfaXNfaWRsZSA9IHNlX2lzX2lkbGUocHNlKTtcbkBAIC05ODU3LDggJiM0Mzs5ODU3LDggQEAgc3RhdGljIHZvaWQgZGV0YWNoX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpXG4gXHRcdHNjaGVkc3RhdF9pbmMocC1cdTAwM2VzdGF0cy5ucl9mb3JjZWRfbWlncmF0aW9ucyk7XG4gXHR9XG4gXG4tXHRXQVJOX09OKHRhc2tfY3VycmVudChlbnYtXHUwMDNlc3JjX3JxLCBwKSk7XG4tXHRXQVJOX09OKHRhc2tfY3VycmVudF9kb25vcihlbnYtXHUwMDNlc3JjX3JxLCBwKSk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRCh0YXNrX2N1cnJlbnQoZW52LVx1MDAzZXNyY19ycSwgcCkpO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQodGFza19jdXJyZW50X2Rvbm9yKGVudi1cdTAwM2VzcmNfcnEsIHApKTtcbiBcbiBcdGRlYWN0aXZhdGVfdGFzayhlbnYtXHUwMDNlc3JjX3JxLCBwLCBERVFVRVVFX05PQ0xPQ0spO1xuIFx0c2V0X3Rhc2tfY3B1KHAsIGVudi1cdTAwM2Vkc3RfY3B1KTtcbkBAIC0xMjE1MSw3ICYjNDM7MTIxNTEsNyBAQCBzdGF0aWMgaW50IHNjaGVkX2JhbGFuY2VfcnEoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEsXG4gXHRcdGdvdG8gb3V0X2JhbGFuY2VkO1xuIFx0fVxuIFxuLVx0V0FSTl9PTl9PTkNFKGJ1c2llc3QgPT0gZW52LmRzdF9ycSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGJ1c2llc3QgPT0gZW52LmRzdF9ycSk7XG4gXG4gXHR1cGRhdGVfbGJfaW1iYWxhbmNlX3N0YXQoXHUwMDI2ZW52LCBzZCwgaWRsZSk7XG4gXG5AQCAtMTI0NjEsNyAmIzQzOzEyNDYxLDcgQEAgc3RhdGljIGludCBhY3RpdmVfbG9hZF9iYWxhbmNlX2NwdV9zdG9wKHZvaWQgKmRhdGEpXG4gXHQgKiB3ZSBuZWVkIHRvIGZpeCBpdC4gT3JpZ2luYWxseSByZXBvcnRlZCBieVxuIFx0ICogQmpvcm4gSGVsZ2FhcyBvbiBhIDEyOC1DUFUgc2V0dXAuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShidXNpZXN0X3JxID09IHRhcmdldF9ycSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGJ1c2llc3RfcnEgPT0gdGFyZ2V0X3JxKTtcbiBcbiBcdC8qIFNlYXJjaCBmb3IgYW4gc2Qgc3Bhbm5pbmcgdXMgYW5kIHRoZSB0YXJnZXQgQ1BVLiAqL1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuQEAgLTEyODgzLDcgJiM0MzsxMjg4Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVfc2Rfc3RhdGVfYnVzeShpbnQgY3B1KVxuIFxuIHZvaWQgbm9oel9iYWxhbmNlX2V4aXRfaWRsZShzdHJ1Y3QgcnEgKnJxKVxuIHtcbi1cdFdBUk5fT05fT05DRShycSAhPSB0aGlzX3JxKCkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycSAhPSB0aGlzX3JxKCkpO1xuIFxuIFx0aWYgKGxpa2VseSghcnEtXHUwMDNlbm9oel90aWNrX3N0b3BwZWQpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTI5MTgsNyAmIzQzOzEyOTE4LDcgQEAgdm9pZCBub2h6X2JhbGFuY2VfZW50ZXJfaWRsZShpbnQgY3B1KVxuIHtcbiBcdHN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTtcbiBcbi1cdFdBUk5fT05fT05DRShjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7XG4gXG4gXHQvKiBJZiB0aGlzIENQVSBpcyBnb2luZyBkb3duLCB0aGVuIG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZTogKi9cbiBcdGlmICghY3B1X2FjdGl2ZShjcHUpKVxuQEAgLTEzMDAwLDcgJiM0MzsxMzAwMCw3IEBAIHN0YXRpYyB2b2lkIF9ub2h6X2lkbGVfYmFsYW5jZShzdHJ1Y3QgcnEgKnRoaXNfcnEsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdGludCBiYWxhbmNlX2NwdTtcbiBcdHN0cnVjdCBycSAqcnE7XG4gXG4tXHRXQVJOX09OX09OQ0UoKGZsYWdzIFx1MDAyNiBOT0haX0tJQ0tfTUFTSykgPT0gTk9IWl9CQUxBTkNFX0tJQ0spO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgoZmxhZ3MgXHUwMDI2IE5PSFpfS0lDS19NQVNLKSA9PSBOT0haX0JBTEFOQ0VfS0lDSyk7XG4gXG4gXHQvKlxuIFx0ICogV2UgYXNzdW1lIHRoZXJlIHdpbGwgYmUgbm8gaWRsZSBsb2FkIGFmdGVyIHRoaXMgdXBkYXRlIGFuZCBjbGVhclxuQEAgLTEzNjIzLDcgJiM0MzsxMzYyMyw3IEBAIGJvb2wgY2ZzX3ByaW9fbGVzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmEsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqYixcbiBcdHN0cnVjdCBjZnNfcnEgKmNmc19ycWI7XG4gXHRzNjQgZGVsdGE7XG4gXG4tXHRXQVJOX09OX09OQ0UodGFza19ycShiKS1cdTAwM2Vjb3JlICE9IHJxLVx1MDAzZWNvcmUpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX3JxKGIpLVx1MDAzZWNvcmUgIT0gcnEtXHUwMDNlY29yZSk7XG4gXG4gI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVEXG4gXHQvKlxuQEAgLTEzODM5LDcgJiM0MzsxMzgzOSw3IEBAIHN0YXRpYyB2b2lkIHN3aXRjaGVkX2Zyb21fZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXG4gc3RhdGljIHZvaWQgc3dpdGNoZWRfdG9fZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2Uuc2NoZWRfZGVsYXllZCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2Uuc2NoZWRfZGVsYXllZCk7XG4gXG4gXHRhdHRhY2hfdGFza19jZnNfcnEocCk7XG4gXG5AQCAtMTM4NzIsNyAmIzQzOzEzODcyLDcgQEAgc3RhdGljIHZvaWQgX19zZXRfbmV4dF90YXNrX2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpcnNcbiBcdGlmICghZmlyc3QpXG4gXHRcdHJldHVybjtcbiBcbi1cdFdBUk5fT05fT05DRShzZS1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4gXG4gXHRpZiAoaHJ0aWNrX2VuYWJsZWRfZmFpcihycSkpXG4gXHRcdGhydGlja19zdGFydF9mYWlyKHJxLCBwKTtcbkBAIC0xNDE0OCw3ICYjNDM7MTQxNDgsNyBAQCBpbnQgc2NoZWRfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBsb25nIGlkbGUpXG4gXHRcdHJxX2xvY2tfaXJxc2F2ZShycSwgXHUwMDI2cmYpO1xuIFxuIFx0XHRncnBfY2ZzX3JxLVx1MDAzZWlkbGUgPSBpZGxlO1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHdhc19pZGxlID09IGNmc19ycV9pc19pZGxlKGdycF9jZnNfcnEpKSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQod2FzX2lkbGUgPT0gY2ZzX3JxX2lzX2lkbGUoZ3JwX2Nmc19ycSkpKVxuIFx0XHRcdGdvdG8gbmV4dF9jcHU7XG4gXG4gXHRcdGlkbGVfdGFza19kZWx0YSA9IGdycF9jZnNfcnEtXHUwMDNlaF9ucl9xdWV1ZWQgLVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9ydC5jIGIva2VybmVsL3NjaGVkL3J0LmNcbmluZGV4IDRlZThmYWYwMTQ0MWEzLi41MDZkMGYxYWZhNThmOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvcnQuY1xuQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9ydF9iYW5kd2lkdGgoc3RydWN0IHJ0X2JhbmR3aWR0aCAqcnRfYilcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSlcbiB7XG4tXHRXQVJOX09OX09OQ0UoIXJ0X2VudGl0eV9pc190YXNrKHJ0X3NlKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFydF9lbnRpdHlfaXNfdGFzayhydF9zZSkpO1xuIFxuIFx0cmV0dXJuIGNvbnRhaW5lcl9vZihydF9zZSwgc3RydWN0IHRhc2tfc3RydWN0LCBydCk7XG4gfVxuQEAgLTE3OCwxMyAmIzQzOzE3OCwxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSlcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSlcbiB7XG4gXHQvKiBDYW5ub3QgZm9sZCB3aXRoIG5vbi1DT05GSUdfUlRfR1JPVVBfU0NIRUQgdmVyc2lvbiwgbGF5b3V0ICovXG4tXHRXQVJOX09OKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHJ0X3JxLVx1MDAzZXRnICE9IFx1MDAyNnJvb3RfdGFza19ncm91cCk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuIFx0cmV0dXJuIHJ0X3JxLVx1MDAzZXJxO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBydF9ycSAqcnRfcnFfb2Zfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpXG4ge1xuLVx0V0FSTl9PTighcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9zZS1cdTAwM2VydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcnRfc2UtXHUwMDNlcnRfcnEtXHUwMDNldGcgIT0gXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcbiBcdHJldHVybiBydF9zZS1cdTAwM2VydF9ycTtcbiB9XG4gXG5AQCAtMTkyLDcgJiM0MzsxOTIsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpXG4ge1xuIFx0c3RydWN0IHJ0X3JxICpydF9ycSA9IHJ0X3NlLVx1MDAzZXJ0X3JxO1xuIFxuLVx0V0FSTl9PTighcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcnRfcnEtXHUwMDNldGcgIT0gXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcbiBcdHJldHVybiBydF9ycS1cdTAwM2VycTtcbiB9XG4gXG5AQCAtNDkzLDcgJiM0Mzs0OTMsNyBAQCB0eXBlZGVmIHN0cnVjdCB0YXNrX2dyb3VwICpydF9ycV9pdGVyX3Q7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19ncm91cCAqbmV4dF90YXNrX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcbiB7XG4gXHRpZiAoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSkge1xuLVx0XHRXQVJOX09OKHRnICE9IFx1MDAyNnJvb3RfdGFza19ncm91cCk7XG4mIzQzO1x0XHRXQVJOX09OX0RFRkVSUkVEKHRnICE9IFx1MDAyNnJvb3RfdGFza19ncm91cCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuQEAgLTcyMyw3ICYjNDM7NzIzLDcgQEAgc3RhdGljIHZvaWQgX19kaXNhYmxlX3J1bnRpbWUoc3RydWN0IHJxICpycSlcbiBcdFx0ICogV2UgY2Fubm90IGJlIGxlZnQgd2FudGluZyAtIHRoYXQgd291bGQgbWVhbiBzb21lIHJ1bnRpbWVcbiBcdFx0ICogbGVha2VkIG91dCBvZiB0aGUgc3lzdGVtLlxuIFx0XHQgKi9cbi1cdFx0V0FSTl9PTl9PTkNFKHdhbnQpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHdhbnQpO1xuIGJhbGFuY2VkOlxuIFx0XHQvKlxuIFx0XHQgKiBEaXNhYmxlIGFsbCB0aGUgYm9ycm93IGxvZ2ljIGJ5IHByZXRlbmRpbmcgd2UgaGF2ZSBpbmZcbkBAIC0xMDk0LDcgJiM0MzsxMDk0LDcgQEAgZGVjX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pXG4gXG4gXHRpZiAocnRfcnEtXHUwMDNlcnRfbnJfcnVubmluZykge1xuIFxuLVx0XHRXQVJOX09OKHByaW8gXHUwMDNjIHByZXZfcHJpbyk7XG4mIzQzO1x0XHRXQVJOX09OX0RFRkVSUkVEKHByaW8gXHUwMDNjIHByZXZfcHJpbyk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgbWF5IGhhdmUgYmVlbiBvdXIgaGlnaGVzdCB0YXNrLCBhbmQgdGhlcmVmb3JlXG5AQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIGRlY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSlcbiBcdGlmIChydF9zZV9ib29zdGVkKHJ0X3NlKSlcbiBcdFx0cnRfcnEtXHUwMDNlcnRfbnJfYm9vc3RlZC0tO1xuIFxuLVx0V0FSTl9PTighcnRfcnEtXHUwMDNlcnRfbnJfcnVubmluZyBcdTAwMjZcdTAwMjYgcnRfcnEtXHUwMDNlcnRfbnJfYm9vc3RlZCk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfcnEtXHUwMDNlcnRfbnJfcnVubmluZyBcdTAwMjZcdTAwMjYgcnRfcnEtXHUwMDNlcnRfbnJfYm9vc3RlZCk7XG4gfVxuIFxuICNlbHNlIC8qICFDT05GSUdfUlRfR1JPVVBfU0NIRUQ6ICovXG5AQCAtMTE3Niw3ICYjNDM7MTE3Niw3IEBAIHZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxuIHtcbiBcdGludCBwcmlvID0gcnRfc2VfcHJpbyhydF9zZSk7XG4gXG4tXHRXQVJOX09OKCFydF9wcmlvKHByaW8pKTtcbiYjNDM7XHRXQVJOX09OX0RFRkVSUkVEKCFydF9wcmlvKHByaW8pKTtcbiBcdHJ0X3JxLVx1MDAzZXJ0X25yX3J1bm5pbmcgJiM0Mzs9IHJ0X3NlX25yX3J1bm5pbmcocnRfc2UpO1xuIFx0cnRfcnEtXHUwMDNlcnJfbnJfcnVubmluZyAmIzQzOz0gcnRfc2VfcnJfbnJfcnVubmluZyhydF9zZSk7XG4gXG5AQCAtMTE4Nyw4ICYjNDM7MTE4Nyw4IEBAIHZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxuIHN0YXRpYyBpbmxpbmVcbiB2b2lkIGRlY19ydF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSlcbiB7XG4tXHRXQVJOX09OKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7XG4tXHRXQVJOX09OKCFydF9ycS1cdTAwM2VydF9ucl9ydW5uaW5nKTtcbiYjNDM7XHRXQVJOX09OX0RFRkVSUkVEKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfcnEtXHUwMDNlcnRfbnJfcnVubmluZyk7XG4gXHRydF9ycS1cdTAwM2VydF9ucl9ydW5uaW5nIC09IHJ0X3NlX25yX3J1bm5pbmcocnRfc2UpO1xuIFx0cnRfcnEtXHUwMDNlcnJfbnJfcnVubmluZyAtPSBydF9zZV9ycl9ucl9ydW5uaW5nKHJ0X3NlKTtcbiBcbkBAIC0xMzQ4LDcgJiM0MzsxMzQ4LDcgQEAgc3RhdGljIHZvaWQgX19lbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgdW5zaWduZWQgaW50IGZsYWdcbiBcdH1cbiBcbiBcdGlmIChtb3ZlX2VudGl0eShmbGFncykpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKHJ0X3NlLVx1MDAzZW9uX2xpc3QpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJ0X3NlLVx1MDAzZW9uX2xpc3QpO1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IEVOUVVFVUVfSEVBRClcbiBcdFx0XHRsaXN0X2FkZChcdTAwMjZydF9zZS1cdTAwM2VydW5fbGlzdCwgcXVldWUpO1xuIFx0XHRlbHNlXG5AQCAtMTM2OCw3ICYjNDM7MTM2OCw3IEBAIHN0YXRpYyB2b2lkIF9fZGVxdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHVuc2lnbmVkIGludCBmbGFnXG4gXHRzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXkgPSBcdTAwMjZydF9ycS1cdTAwM2VhY3RpdmU7XG4gXG4gXHRpZiAobW92ZV9lbnRpdHkoZmxhZ3MpKSB7XG4tXHRcdFdBUk5fT05fT05DRSghcnRfc2UtXHUwMDNlb25fbGlzdCk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJ0X3NlLVx1MDAzZW9uX2xpc3QpO1xuIFx0XHRfX2RlbGlzdF9ydF9lbnRpdHkocnRfc2UsIGFycmF5KTtcbiBcdH1cbiBcdHJ0X3NlLVx1MDAzZW9uX3JxID0gMDtcbkBAIC0xNjg0LDcgJiM0MzsxNjg0LDcgQEAgc3RhdGljIHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnBpY2tfbmV4dF9ydF9lbnRpdHkoc3RydWN0IHJ0X3JxICpydF9ycSlcbiBcdEJVR19PTihpZHggXHUwMDNlPSBNQVhfUlRfUFJJTyk7XG4gXG4gXHRxdWV1ZSA9IGFycmF5LVx1MDAzZXF1ZXVlICYjNDM7IGlkeDtcbi1cdGlmIChXQVJOX09OX09OQ0UobGlzdF9lbXB0eShxdWV1ZSkpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQobGlzdF9lbXB0eShxdWV1ZSkpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdG5leHQgPSBsaXN0X2VudHJ5KHF1ZXVlLVx1MDAzZW5leHQsIHN0cnVjdCBzY2hlZF9ydF9lbnRpdHksIHJ1bl9saXN0KTtcbiBcbkBAIC0yMDE2LDcgJiM0MzsyMDE2LDcgQEAgc3RhdGljIGludCBwdXNoX3J0X3Rhc2soc3RydWN0IHJxICpycSwgYm9vbCBwdWxsKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGlmIChXQVJOX09OKG5leHRfdGFzayA9PSBycS1cdTAwM2VjdXJyKSlcbiYjNDM7XHRpZiAoV0FSTl9PTl9ERUZFUlJFRChuZXh0X3Rhc2sgPT0gcnEtXHUwMDNlY3VycikpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogV2UgbWlnaHQgcmVsZWFzZSBycSBsb2NrICovXG5AQCAtMjMxNiw4ICYjNDM7MjMxNiw4IEBAIHN0YXRpYyB2b2lkIHB1bGxfcnRfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEpXG4gXHRcdCAqIHRoZSB0by1iZS1zY2hlZHVsZWQgdGFzaz9cbiBcdFx0ICovXG4gXHRcdGlmIChwIFx1MDAyNlx1MDAyNiAocC1cdTAwM2VwcmlvIFx1MDAzYyB0aGlzX3JxLVx1MDAzZXJ0LmhpZ2hlc3RfcHJpby5jdXJyKSkge1xuLVx0XHRcdFdBUk5fT04ocCA9PSBzcmNfcnEtXHUwMDNlY3Vycik7XG4tXHRcdFx0V0FSTl9PTighdGFza19vbl9ycV9xdWV1ZWQocCkpO1xuJiM0MztcdFx0XHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gc3JjX3JxLVx1MDAzZWN1cnIpO1xuJiM0MztcdFx0XHRXQVJOX09OX0RFRkVSUkVEKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBUaGVyZSYjMzk7cyBhIGNoYW5jZSB0aGF0IHAgaXMgaGlnaGVyIGluIHByaW9yaXR5XG5AQCAtMjU4Myw3ICYjNDM7MjU4Myw3IEBAIHN0YXRpYyBpbnQgdGFza19pc190aHJvdHRsZWRfcnQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KVxuIFxuICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgLy8gWFhYIG1heWJlIGFkZCB0YXNrX3J0X3JxKCksIHNlZSBhbHNvIHNjaGVkX3J0X3BlcmlvZF9ydF9ycVxuIFx0cnRfcnEgPSB0YXNrX2dyb3VwKHApLVx1MDAzZXJ0X3JxW2NwdV07XG4tXHRXQVJOX09OKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHJ0X3JxLVx1MDAzZXRnICE9IFx1MDAyNnJvb3RfdGFza19ncm91cCk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuICNlbHNlXG4gXHRydF9ycSA9IFx1MDAyNmNwdV9ycShjcHUpLVx1MDAzZXJ0O1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbmluZGV4IDlmNjNiMTVkMzA5ZDExLi5mNzRmOWNkNDRlMDk4NiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuQEAgLTE2ODQsNyAmIzQzOzE2ODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2lkbGVfY29yZShzdHJ1Y3QgcnEgKnJxKSB7IH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19vZihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcbiB7XG4tXHRXQVJOX09OX09OQ0UoIWVudGl0eV9pc190YXNrKHNlKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFlbnRpdHlfaXNfdGFzayhzZSkpO1xuIFx0cmV0dXJuIGNvbnRhaW5lcl9vZihzZSwgc3RydWN0IHRhc2tfc3RydWN0LCBzZSk7XG4gfVxuIFxuQEAgLTE3NjYsNyAmIzQzOzE3NjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X2Nsb2NrX3VwZGF0ZWQoc3RydWN0IHJxICpycSlcbiBcdCAqIFRoZSBvbmx5IHJlYXNvbiBmb3Igbm90IHNlZWluZyBhIGNsb2NrIHVwZGF0ZSBzaW5jZSB0aGVcbiBcdCAqIGxhc3QgcnFfcGluX2xvY2soKSBpcyBpZiB3ZSYjMzk7cmUgY3VycmVudGx5IHNraXBwaW5nIHVwZGF0ZXMuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDNjIFJRQ0ZfQUNUX1NLSVApO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDNjIFJRQ0ZfQUNUX1NLSVApO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHU2NCBycV9jbG9jayhzdHJ1Y3QgcnEgKnJxKVxuQEAgLTE4MTMsNyAmIzQzOzE4MTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnFfY2xvY2tfY2FuY2VsX3NraXB1cGRhdGUoc3RydWN0IHJxICpycSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgcnFfY2xvY2tfc3RhcnRfbG9vcF91cGRhdGUoc3RydWN0IHJxICpycSlcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcbi1cdFdBUk5fT05fT05DRShycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDI2IFJRQ0ZfQUNUX1NLSVApO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDI2IFJRQ0ZfQUNUX1NLSVApO1xuIFx0cnEtXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIHw9IFJRQ0ZfQUNUX1NLSVA7XG4gfVxuIFxuQEAgLTE4NzAsOSAmIzQzOzE4NzAsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2N4X3JxX2Nsb2NrX2ludmFsaWRhdGUoc3RydWN0IHJxICpycSkge31cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X2JhbGFuY2VfY2FsbGJhY2tzX2VtcHR5KHN0cnVjdCBycSAqcnEpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX0xPQ0tJTkcpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgcnEtXHUwMDNlYmFsYW5jZV9jYWxsYmFjayAhPSBcdTAwMjZiYWxhbmNlX3B1c2hfY2FsbGJhY2spO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChJU19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICAgcnEtXHUwMDNlYmFsYW5jZV9jYWxsYmFjayBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICAgcnEtXHUwMDNlYmFsYW5jZV9jYWxsYmFjayAhPSBcdTAwMjZiYWxhbmNlX3B1c2hfY2FsbGJhY2spO1xuIH1cbiBcbiAvKlxuQEAgLTI2ODEsNyAmIzQzOzI2ODEsNyBAQCBzdHJ1Y3Qgc2NoZWRfY2xhc3Mge1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldilcbiB7XG4tXHRXQVJOX09OX09OQ0UocnEtXHUwMDNlZG9ub3IgIT0gcHJldik7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZWRvbm9yICE9IHByZXYpO1xuIFx0cHJldi1cdTAwM2VzY2hlZF9jbGFzcy1cdTAwM2VwdXRfcHJldl90YXNrKHJxLCBwcmV2LCBOVUxMKTtcbiB9XG4gXG5AQCAtMjcwNCw3ICYjNDM7MjcwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl9zZXRfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxuIFx0XHRcdFx0XHQgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dClcbiB7XG4tXHRXQVJOX09OX09OQ0UocnEtXHUwMDNlZG9ub3IgIT0gcHJldik7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZWRvbm9yICE9IHByZXYpO1xuIFxuIFx0X19wdXRfcHJldl9zZXRfbmV4dF9kbF9zZXJ2ZXIocnEsIHByZXYsIG5leHQpO1xuIFxuQEAgLTMwMzAsNyAmIzQzOzMwMzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXR0YWNoX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHRhc2tfcnEocCkgIT0gcnEpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX3JxKHApICE9IHJxKTtcbiBcdGFjdGl2YXRlX3Rhc2socnEsIHAsIEVOUVVFVUVfTk9DTE9DSyk7XG4gXHR3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2xpYi9idWcuYyBiL2xpYi9idWcuY1xuaW5kZXggMjI0ZjRjZmE0YWEzMTIuLmY1NzY4ZjVkMTdiNDc5IDEwMDY0NFxuLS0tIGEvbGliL2J1Zy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvYnVnLmNcbkBAIC0xOTYsNyAmIzQzOzE5Niw3IEBAIHZvaWQgX193YXJuX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFxuIHN0YXRpYyBlbnVtIGJ1Z190cmFwX3R5cGUgX19yZXBvcnRfYnVnKHN0cnVjdCBidWdfZW50cnkgKmJ1ZywgdW5zaWduZWQgbG9uZyBidWdhZGRyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4tXHRib29sIHdhcm5pbmcsIG9uY2UsIGRvbmUsIG5vX2N1dCwgaGFzX2FyZ3M7XG4mIzQzO1x0Ym9vbCB3YXJuaW5nLCBvbmNlLCBkb25lLCBub19jdXQsIGhhc19hcmdzLCBkZWZlcnJlZDtcbiBcdGNvbnN0IGNoYXIgKmZpbGUsICpmbXQ7XG4gXHR1bnNpZ25lZCBsaW5lO1xuIFxuQEAgLTIxOSw2ICYjNDM7MjE5LDcgQEAgc3RhdGljIGVudW0gYnVnX3RyYXBfdHlwZSBfX3JlcG9ydF9idWcoc3RydWN0IGJ1Z19lbnRyeSAqYnVnLCB1bnNpZ25lZCBsb25nIGJ1Z2FcbiBcdGRvbmUgICAgID0gYnVnLVx1MDAzZWZsYWdzIFx1MDAyNiBCVUdGTEFHX0RPTkU7XG4gXHRub19jdXQgICA9IGJ1Zy1cdTAwM2VmbGFncyBcdTAwMjYgQlVHRkxBR19OT19DVVRfSEVSRTtcbiBcdGhhc19hcmdzID0gYnVnLVx1MDAzZWZsYWdzIFx1MDAyNiBCVUdGTEFHX0FSR1M7XG4mIzQzO1x0ZGVmZXJyZWQgPSBidWctXHUwMDNlZmxhZ3MgXHUwMDI2IEJVR0ZMQUdfREVGRVJSRUQ7XG4gXG4gXHRpZiAod2FybmluZyBcdTAwMjZcdTAwMjYgb25jZSkge1xuIFx0XHRpZiAoZG9uZSlcbkBAIC0yMjksNyAmIzQzOzIzMCwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYVxuIFx0XHQgKi9cbiBcdFx0YnVnLVx1MDAzZWZsYWdzIHw9IEJVR0ZMQUdfRE9ORTtcbiBcdH1cbi1cbiYjNDM7XHRpZiAoZGVmZXJyZWQpIHtcbiYjNDM7XHRcdHByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7XG4mIzQzO1x0XHRwcmludGtfZGVmZXJyZWRfZW50ZXIoKTtcbiYjNDM7XHR9XG4gXHQvKlxuIFx0ICogQlVHKCkgYW5kIFdBUk5fT04oKSBmYW1pbGllcyBkb24mIzM5O3QgcHJpbnQgYSBjdXN0b20gZGVidWcgbWVzc2FnZVxuIFx0ICogYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLCBzbyB3ZSBtdXN0IGFkZCB0aGVcbkBAIC0yNDUsNiAmIzQzOzI0OSwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYVxuIFx0XHQvKiB0aGlzIGlzIGEgV0FSTl9PTiByYXRoZXIgdGhhbiBCVUcvQlVHX09OICovXG4gXHRcdF9fd2FybihmaWxlLCBsaW5lLCAodm9pZCAqKWJ1Z2FkZHIsIEJVR19HRVRfVEFJTlQoYnVnKSwgcmVncyxcbiBcdFx0ICAgICAgIE5VTEwpO1xuJiM0MztcdFx0aWYgKGRlZmVycmVkKSB7XG4mIzQzO1x0XHRcdHByaW50a19kZWZlcnJlZF9leGl0KCk7XG4mIzQzO1x0XHRcdHByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTtcbiYjNDM7XHRcdH1cbiBcdFx0cmV0dXJuIEJVR19UUkFQX1RZUEVfV0FSTjtcbiBcdH1cbiBcbkBAIC0yNTQsNiAmIzQzOzI2MiwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYVxuIFx0XHRwcl9jcml0KFwmIzM0O2tlcm5lbCBCVUcgYXQgJXBCIFt2ZXJib3NlIGRlYnVnIGluZm8gdW5hdmFpbGFibGVdXFxuXCYjMzQ7LFxuIFx0XHRcdCh2b2lkICopYnVnYWRkcik7XG4gXG4mIzQzO1x0aWYgKGRlZmVycmVkKSB7XG4mIzQzO1x0XHRwcmludGtfZGVmZXJyZWRfZXhpdCgpO1xuJiM0MztcdFx0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1xuJiM0MztcdH1cbiBcdHJldHVybiBCVUdfVFJBUF9UWVBFX0JVRztcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTQ6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGFuZCBhcHBsaWVzIGRlZmVycmVkIHZhcmlhbnRzIG9mIFdBUk5fT04gYW5kIFdBUk5fT05fT05DRSBtYWNyb3MgKFdBUk5fT05fREVGRVJSRUQsIFdBUk5fT05fT05DRV9ERUZFUlJFRCkgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyB3YXJuaW5nIHByaW50cyBpbiB0aGUgc2NoZWR1bGVyLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2dpbmcvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIG5vcm1hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDRmNjdiYzA5MTBhZWZiOWE1MmE0NTFkZTIzNmNmMDVlZjM5ODk0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDE0OjUyOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKaW5kZXggMDllOGVjY2VlOGVkOTcuLjFlM2ZmMDBmNzA5Yjg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjZGVmaW5lIEJVR0ZMQUdfRE9ORQkJKDEgJmx0OyZsdDsgMikKICNkZWZpbmUgQlVHRkxBR19OT19DVVRfSEVSRQkoMSAmbHQ7Jmx0OyAzKQkvKiBDVVRfSEVSRSBhbHJlYWR5IHNlbnQgKi8KICNkZWZpbmUgQlVHRkxBR19BUkdTCQkoMSAmbHQ7Jmx0OyA0KQomIzQzOyNkZWZpbmUgQlVHRkxBR19ERUZFUlJFRAkoMSAmbHQ7Jmx0OyA1KQogI2RlZmluZSBCVUdGTEFHX1RBSU5UKHRhaW50KQkoKHRhaW50KSAmbHQ7Jmx0OyA4KQogI2RlZmluZSBCVUdfR0VUX1RBSU5UKGJ1ZykJKChidWcpLSZndDtmbGFncyAmZ3Q7Jmd0OyA4KQogI2VuZGlmCkBAIC0xMTUsNiAmIzQzOzExNiwxNiBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIH0pCiAjZW5kaWYKIAomIzQzOyNkZWZpbmUgV0FSTl9PTl9ERUZFUlJFRChjb25kaXRpb24pICh7CQkJCQlcCiYjNDM7CWludCBfX3JldF93YXJuX29uID0gISEoY29uZGl0aW9uKTsJCQkJXAomIzQzOwlpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbikpIHsJCQkJCVwKJiM0MzsJCV9fV0FSTl9GTEFHUygjY29uZGl0aW9uLAkJCQlcCiYjNDM7CQkJICAgICBCVUdGTEFHX0RFRkVSUkVEIHwJCQkJXAomIzQzOwkJCSAgICAgQlVHRkxBR19UQUlOVChUQUlOVF9XQVJOKSk7CQlcCiYjNDM7CX0JCQkJCQkJCVwKJiM0MzsJdW5saWtlbHkoX19yZXRfd2Fybl9vbik7CQkJCQlcCiYjNDM7fSkKJiM0MzsKICNpZm5kZWYgV0FSTl9PTl9PTkNFCiAjZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pICh7CQkJCQlcCiAJaW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pOwkJCQlcCkBAIC0xMjUsNiAmIzQzOzEzNiwxNiBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIAl1bmxpa2VseShfX3JldF93YXJuX29uKTsJCQkJCVwKIH0pCiAjZW5kaWYKJiM0MzsKJiM0MzsjZGVmaW5lIFdBUk5fT05fT05DRV9ERUZFUlJFRChjb25kaXRpb24pICh7CQkJCVwKJiM0MzsJaW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pOwkJCQlcCiYjNDM7CWlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkgewkJCQkJXAomIzQzOwkJX19XQVJOX0ZMQUdTKCNjb25kaXRpb24sCQkJCVwKJiM0MzsJCQkgICAgIEJVR0ZMQUdfT05DRSB8IEJVR0ZMQUdfREVGRVJSRUQgfAkJXAomIzQzOwkJCSAgICAgQlVHRkxBR19UQUlOVChUQUlOVF9XQVJOKSk7CQlcCiYjNDM7CX0JCQkJCQkJCVwKJiM0MzsJdW5saWtlbHkoX19yZXRfd2Fybl9vbik7CQkJCQlcCiYjNDM7fSkKICNlbmRpZiAvKiBfX1dBUk5fRkxBR1MgKi8KIAogI2lmIGRlZmluZWQoX19XQVJOX0ZMQUdTKSAmYW1wOyZhbXA7ICFkZWZpbmVkKF9fV0FSTl9wcmludGYpCkBAIC0xNTksNiAmIzQzOzE4MCwxOSBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIH0pCiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgV0FSTl9PTl9ERUZFUlJFRAomIzQzOyNkZWZpbmUgV0FSTl9PTl9ERUZFUlJFRChjb25kaXRpb24pICh7CQkJCQlcCiYjNDM7CWludCBfX3JldF93YXJuX29uID0gISEoY29uZGl0aW9uKTsJCQkJXAomIzQzOwlpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbikpIHsJCQkJCVwKJiM0MzsJCWd1YXJkKHByZWVtcHQpKCk7CQkJCQlcCiYjNDM7CQlwcmludGtfZGVmZXJyZWRfZW50ZXIoKQkJCQkJXAomIzQzOwkJX19XQVJOKCk7CQkJCQkJXAomIzQzOwkJcHJpbnRrX2RlZmVycmVkX2V4aXQoKQkJCQkJXAomIzQzOwl9CQkJCQkJCQlcCiYjNDM7CXVubGlrZWx5KF9fcmV0X3dhcm5fb24pOwkJCQkJXAomIzQzO30pCiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZuZGVmIFdBUk4KICNkZWZpbmUgV0FSTihjb25kaXRpb24sIGZvcm1hdC4uLikgKHsJCQkJCVwKIAlpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7CQkJCVwKQEAgLTE4MCw2ICYjNDM7MjE0LDExIEBAIGV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOwogCURPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT04sIDEpCiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgV0FSTl9PTl9PTkNFX0RFRkVSUkVECiYjNDM7I2RlZmluZSBXQVJOX09OX09OQ0VfREVGRVJSRUQoY29uZGl0aW9uKQkJCQlcCiYjNDM7CURPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT05fREVGRVJSRUQsIDEpCiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZuZGVmIFdBUk5fT05DRQogI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pCQkJCVwKIAlET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOLCAxLCBmb3JtYXQpCkBAIC0yMTUsNyAmIzQzOzI1NCw5IEBAIGV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOwogfSkKICNlbmRpZgogCiYjNDM7I2RlZmluZSBXQVJOX09OX0RFRkVSUkVEKGNvbmRpdGlvbikgV0FSTl9PTihjb25kaXRpb24pCiAjZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pIFdBUk5fT04oY29uZGl0aW9uKQomIzQzOyNkZWZpbmUgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNvbmRpdGlvbikgV0FSTl9PTihjb25kaXRpb24pCiAjZGVmaW5lIFdBUk5fT05DRShjb25kaXRpb24sIGZvcm1hdC4uLikgV0FSTihjb25kaXRpb24sIGZvcm1hdCkKICNkZWZpbmUgV0FSTl9UQUlOVChjb25kaXRpb24sIHRhaW50LCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpCiAjZGVmaW5lIFdBUk5fVEFJTlRfT05DRShjb25kaXRpb24sIHRhaW50LCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBiODg3MTQ0OWQzYzY5NC4uMGUyODI0NTdhYmI5MTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NvcmUuYwpAQCAtODUzLDcgJiM0Mzs4NTMsNyBAQCB2b2lkIHVwZGF0ZV9ycV9jbG9jayhzdHJ1Y3QgcnEgKnJxKQogCQlyZXR1cm47CiAKIAlpZiAoc2NoZWRfZmVhdChXQVJOX0RPVUJMRV9DTE9DSykpCi0JCVdBUk5fT05fT05DRShycS0mZ3Q7Y2xvY2tfdXBkYXRlX2ZsYWdzICZhbXA7IFJRQ0ZfVVBEQVRFRCk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtJmd0O2Nsb2NrX3VwZGF0ZV9mbGFncyAmYW1wOyBSUUNGX1VQREFURUQpOwogCXJxLSZndDtjbG9ja191cGRhdGVfZmxhZ3MgfD0gUlFDRl9VUERBVEVEOwogCiAJY2xvY2sgPSBzY2hlZF9jbG9ja19jcHUoY3B1X29mKHJxKSk7CkBAIC0xODA3LDcgJiM0MzsxODA3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVjbGFtcF9ycV9kZWNfaWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCiAJYnVja2V0ID0gJmFtcDt1Y19ycS0mZ3Q7YnVja2V0W3VjX3NlLSZndDtidWNrZXRfaWRdOwogCi0JV0FSTl9PTl9PTkNFKCFidWNrZXQtJmd0O3Rhc2tzKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFidWNrZXQtJmd0O3Rhc2tzKTsKIAlpZiAobGlrZWx5KGJ1Y2tldC0mZ3Q7dGFza3MpKQogCQlidWNrZXQtJmd0O3Rhc2tzLS07CiAKQEAgLTE4MjcsNyAmIzQzOzE4MjcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdWNsYW1wX3JxX2RlY19pZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJICogRGVmZW5zaXZlIHByb2dyYW1taW5nOiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4uIElmIGl0IGhhcHBlbnMsCiAJICogZS5nLiBkdWUgdG8gZnV0dXJlIG1vZGlmaWNhdGlvbiwgd2FybiBhbmQgZml4IHVwIHRoZSBleHBlY3RlZCB2YWx1ZS4KIAkgKi8KLQlXQVJOX09OX09OQ0UoYnVja2V0LSZndDt2YWx1ZSAmZ3Q7IHJxX2NsYW1wKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGJ1Y2tldC0mZ3Q7dmFsdWUgJmd0OyBycV9jbGFtcCk7CiAJaWYgKGJ1Y2tldC0mZ3Q7dmFsdWUgJmd0Oz0gcnFfY2xhbXApIHsKIAkJYmt0X2NsYW1wID0gdWNsYW1wX3JxX21heF92YWx1ZShycSwgY2xhbXBfaWQsIHVjX3NlLSZndDt2YWx1ZSk7CiAJCXVjbGFtcF9ycV9zZXQocnEsIGNsYW1wX2lkLCBia3RfY2xhbXApOwpAQCAtMjIxMCw3ICYjNDM7MjIxMCw3IEBAIHZvaWQgYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBmbGFncykKIAogdm9pZCBkZWFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpCiB7Ci0JV0FSTl9PTl9PTkNFKGZsYWdzICZhbXA7IERFUVVFVUVfU0xFRVApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoZmxhZ3MgJmFtcDsgREVRVUVVRV9TTEVFUCk7CiAKIAlXUklURV9PTkNFKHAtJmd0O29uX3JxLCBUQVNLX09OX1JRX01JR1JBVElORyk7CiAJQVNTRVJUX0VYQ0xVU0lWRV9XUklURVIocC0mZ3Q7b25fcnEpOwpAQCAtMjUxNiw3ICYjNDM7MjUxNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnEgKm1vdmVfcXVldWVkX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHJxX2ZsYWdzICpyZiwKIAlycSA9IGNwdV9ycShuZXdfY3B1KTsKIAogCXJxX2xvY2socnEsIHJmKTsKLQlXQVJOX09OX09OQ0UodGFza19jcHUocCkgIT0gbmV3X2NwdSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX2NwdShwKSAhPSBuZXdfY3B1KTsKIAlhY3RpdmF0ZV90YXNrKHJxLCBwLCAwKTsKIAl3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7CiAKQEAgLTI2MDIsNyAmIzQzOzI2MDIsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGlvbl9jcHVfc3RvcCh2b2lkICpkYXRhKQogCSAqIElmIHdlIHdlcmUgcGFzc2VkIGEgcGVuZGluZywgdGhlbiAtJmd0O3N0b3BfcGVuZGluZyB3YXMgc2V0LCB0aHVzCiAJICogcC0mZ3Q7bWlncmF0aW9uX3BlbmRpbmcgbXVzdCBoYXZlIHJlbWFpbmVkIHN0YWJsZS4KIAkgKi8KLQlXQVJOX09OX09OQ0UocGVuZGluZyAmYW1wOyZhbXA7IHBlbmRpbmcgIT0gcC0mZ3Q7bWlncmF0aW9uX3BlbmRpbmcpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocGVuZGluZyAmYW1wOyZhbXA7IHBlbmRpbmcgIT0gcC0mZ3Q7bWlncmF0aW9uX3BlbmRpbmcpOwogCiAJLyoKIAkgKiBJZiB0YXNrX3JxKHApICE9IHJxLCBpdCBjYW5ub3QgYmUgbWlncmF0ZWQgaGVyZSwgYmVjYXVzZSB3ZSYjMzk7cmUKQEAgLTI2NjEsNyAmIzQzOzI2NjEsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGlvbl9jcHVfc3RvcCh2b2lkICpkYXRhKQogCQkgKiBkZXRlcm1pbmUgaXNfbWlncmF0aW9uX2Rpc2FibGVkKCkgYW5kIHNvIGhhdmUgdG8gY2hhc2UgYWZ0ZXIKIAkJICogaXQuCiAJCSAqLwotCQlXQVJOX09OX09OQ0UoIXBlbmRpbmctJmd0O3N0b3BfcGVuZGluZyk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXBlbmRpbmctJmd0O3N0b3BfcGVuZGluZyk7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlycV91bmxvY2socnEsICZhbXA7cmYpOwogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3AtJmd0O3BpX2xvY2ssIHJmLmZsYWdzKTsKQEAgLTMwMDQsNyAmIzQzOzMwMDQsNyBAQCBzdGF0aWMgaW50IGFmZmluZV9tb3ZlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnFfZmxhZwogCSAqCiAJICogRWl0aGVyIHdheSwgd2UgcmVhbGx5IHNob3VsZCBoYXZlIGEgQHBlbmRpbmcgaGVyZS4KIAkgKi8KLQlpZiAoV0FSTl9PTl9PTkNFKCFwZW5kaW5nKSkgewomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFwZW5kaW5nKSkgewogCQl0YXNrX3JxX3VubG9jayhycSwgcCwgcmYpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0zMTE2LDkgJiM0MzszMTE2LDkgQEAgc3RhdGljIGludCBfX3NldF9jcHVzX2FsbG93ZWRfcHRyX2xvY2tlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWlmIChXQVJOX09OX09OQ0UocCA9PSBjdXJyZW50ICZhbXA7JmFtcDsKLQkJCQkgaXNfbWlncmF0aW9uX2Rpc2FibGVkKHApICZhbXA7JmFtcDsKLQkJCQkgIWNwdW1hc2tfdGVzdF9jcHUodGFza19jcHUocCksIGN0eC0mZ3Q7bmV3X21hc2spKSkgewomIzQzOwkJaWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChwID09IGN1cnJlbnQgJmFtcDsmYW1wOwomIzQzOwkJCQkJICBpc19taWdyYXRpb25fZGlzYWJsZWQocCkgJmFtcDsmYW1wOwomIzQzOwkJCQkJICAhY3B1bWFza190ZXN0X2NwdSh0YXNrX2NwdShwKSwgY3R4LSZndDtuZXdfbWFzaykpKSB7CiAJCQlyZXQgPSAtRUJVU1k7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMzI2Nyw3ICYjNDM7MzI2Nyw3IEBAIHZvaWQgZm9yY2VfY29tcGF0aWJsZV9jcHVzX2FsbG93ZWRfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAkJCQljcHVtYXNrX3ByX2FyZ3Mob3ZlcnJpZGVfbWFzaykpOwogCX0KIAotCVdBUk5fT04oc2V0X2NwdXNfYWxsb3dlZF9wdHIocCwgb3ZlcnJpZGVfbWFzaykpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKHNldF9jcHVzX2FsbG93ZWRfcHRyKHAsIG92ZXJyaWRlX21hc2spKTsKIG91dF9mcmVlX21hc2s6CiAJY3B1c19yZWFkX3VubG9jaygpOwogCWZyZWVfY3B1bWFza192YXIobmV3X21hc2spOwpAQCAtMzI5Myw3ICYjNDM7MzI5Myw3IEBAIHZvaWQgcmVsYXhfY29tcGF0aWJsZV9jcHVzX2FsbG93ZWRfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAkgKiBDcHVzZXQgbWFza2luZyB3aWxsIGJlIGRvbmUgdGhlcmUgdG9vLgogCSAqLwogCXJldCA9IF9fc2NoZWRfc2V0YWZmaW5pdHkocCwgJmFtcDthYyk7Ci0JV0FSTl9PTl9PTkNFKHJldCk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQpOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMzMwNiwxNiAmIzQzOzMzMDYsMTYgQEAgdm9pZCBzZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgbmV3X2NwdSkKIAkgKiBXZSBzaG91bGQgbmV2ZXIgY2FsbCBzZXRfdGFza19jcHUoKSBvbiBhIGJsb2NrZWQgdGFzaywKIAkgKiB0dHd1KCkgd2lsbCBzb3J0IG91dCB0aGUgcGxhY2VtZW50LgogCSAqLwotCVdBUk5fT05fT05DRShzdGF0ZSAhPSBUQVNLX1JVTk5JTkcgJmFtcDsmYW1wOyBzdGF0ZSAhPSBUQVNLX1dBS0lORyAmYW1wOyZhbXA7ICFwLSZndDtvbl9ycSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChzdGF0ZSAhPSBUQVNLX1JVTk5JTkcgJmFtcDsmYW1wOyBzdGF0ZSAhPSBUQVNLX1dBS0lORyAmYW1wOyZhbXA7ICFwLSZndDtvbl9ycSk7CiAKIAkvKgogCSAqIE1pZ3JhdGluZyBmYWlyIGNsYXNzIHRhc2sgbXVzdCBoYXZlIHAtJmd0O29uX3JxID0gVEFTS19PTl9SUV9NSUdSQVRJTkcsCiAJICogYmVjYXVzZSBzY2hlZHN0YXRfd2FpdF97c3RhcnQsZW5kfSByZWJhc2UgbWlncmF0aW5nIHRhc2smIzM5O3Mgd2FpdF9zdGFydAogCSAqIHRpbWUgcmVseWluZyBvbiBwLSZndDtvbl9ycS4KIAkgKi8KLQlXQVJOX09OX09OQ0Uoc3RhdGUgPT0gVEFTS19SVU5OSU5HICZhbXA7JmFtcDsKLQkJICAgICBwLSZndDtzY2hlZF9jbGFzcyA9PSAmYW1wO2ZhaXJfc2NoZWRfY2xhc3MgJmFtcDsmYW1wOwotCQkgICAgIChwLSZndDtvbl9ycSAmYW1wOyZhbXA7ICF0YXNrX29uX3JxX21pZ3JhdGluZyhwKSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoc3RhdGUgPT0gVEFTS19SVU5OSU5HICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgICBwLSZndDtzY2hlZF9jbGFzcyA9PSAmYW1wO2ZhaXJfc2NoZWRfY2xhc3MgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgIChwLSZndDtvbl9ycSAmYW1wOyZhbXA7ICF0YXNrX29uX3JxX21pZ3JhdGluZyhwKSkpOwogCiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKIAkvKgpAQCAtMzMyOCwxNSAmIzQzOzMzMjgsMTUgQEAgdm9pZCBzZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgbmV3X2NwdSkKIAkgKiBGdXJ0aGVybW9yZSwgYWxsIHRhc2tfcnEgdXNlcnMgc2hvdWxkIGFjcXVpcmUgYm90aCBsb2Nrcywgc2VlCiAJICogdGFza19ycV9sb2NrKCkuCiAJICovCi0JV0FSTl9PTl9PTkNFKGRlYnVnX2xvY2tzICZhbXA7JmFtcDsgIShsb2NrZGVwX2lzX2hlbGQoJmFtcDtwLSZndDtwaV9sb2NrKSB8fAotCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZChfX3JxX2xvY2twKHRhc2tfcnEocCkpKSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoZGVidWdfbG9ja3MgJmFtcDsmYW1wOyAhKGxvY2tkZXBfaXNfaGVsZCgmYW1wO3AtJmd0O3BpX2xvY2spIHx8CiYjNDM7CQkJCQkgICAgICAgbG9ja2RlcF9pc19oZWxkKF9fcnFfbG9ja3AodGFza19ycShwKSkpKSk7CiAjZW5kaWYKIAkvKgogCSAqIENsZWFybHksIG1pZ3JhdGluZyB0YXNrcyB0byBvZmZsaW5lIENQVXMgaXMgYSBmYWlybHkgZGFmdCB0aGluZy4KIAkgKi8KLQlXQVJOX09OX09OQ0UoIWNwdV9vbmxpbmUobmV3X2NwdSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNwdV9vbmxpbmUobmV3X2NwdSkpOwogCi0JV0FSTl9PTl9PTkNFKGlzX21pZ3JhdGlvbl9kaXNhYmxlZChwKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChpc19taWdyYXRpb25fZGlzYWJsZWQocCkpOwogCiAJdHJhY2Vfc2NoZWRfbWlncmF0ZV90YXNrKHAsIG5ld19jcHUpOwogCkBAIC0zODAzLDEwICYjNDM7MzgwMywxMCBAQCB2b2lkIHNjaGVkX3R0d3VfcGVuZGluZyh2b2lkICphcmcpCiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAogCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdCwgbGxpc3QsIHdha2VfZW50cnkubGxpc3QpIHsKLQkJaWYgKFdBUk5fT05fT05DRShwLSZndDtvbl9jcHUpKQomIzQzOwkJaWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChwLSZndDtvbl9jcHUpKQogCQkJc21wX2NvbmRfbG9hZF9hY3F1aXJlKCZhbXA7cC0mZ3Q7b25fY3B1LCAhVkFMKTsKIAotCQlpZiAoV0FSTl9PTl9PTkNFKHRhc2tfY3B1KHApICE9IGNwdV9vZihycSkpKQomIzQzOwkJaWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX2NwdShwKSAhPSBjcHVfb2YocnEpKSkKIAkJCXNldF90YXNrX2NwdShwLCBjcHVfb2YocnEpKTsKIAogCQl0dHd1X2RvX2FjdGl2YXRlKHJxLCBwLCBwLSZndDtzY2hlZF9yZW1vdGVfd2FrZXVwID8gV0ZfTUlHUkFURUQgOiAwLCAmYW1wO3JmKTsKQEAgLTQwMDMsOCAmIzQzOzQwMDMsOCBAQCBib29sIHR0d3Vfc3RhdGVfbWF0Y2goc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgc3RhdGUsIGludCAqc3VjY2VzcykKIAlpbnQgbWF0Y2g7CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfREVCVUdfUFJFRU1QVCkpIHsKLQkJV0FSTl9PTl9PTkNFKChzdGF0ZSAmYW1wOyBUQVNLX1JUTE9DS19XQUlUKSAmYW1wOyZhbXA7Ci0JCQkgICAgIHN0YXRlICE9IFRBU0tfUlRMT0NLX1dBSVQpOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKChzdGF0ZSAmYW1wOyBUQVNLX1JUTE9DS19XQUlUKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICAgIHN0YXRlICE9IFRBU0tfUlRMT0NLX1dBSVQpOwogCX0KIAogCSpzdWNjZXNzID0gISEobWF0Y2ggPSBfX3Rhc2tfc3RhdGVfbWF0Y2gocCwgc3RhdGUpKTsKQEAgLTU3NDUsNyAmIzQzOzU3NDUsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCQkgKiB3ZSBhcmUgYWx3YXlzIHN1cmUgdGhhdCB0aGVyZSBpcyBubyBwcm94eSAob25seSBhCiAJCQkgKiBzaW5nbGUgdGFzayBpcyBydW5uaW5nKS4KIAkJCSAqLwotCQkJV0FSTl9PTl9PTkNFKHJxLSZndDtjdXJyICE9IHJxLSZndDtkb25vcik7CiYjNDM7CQkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLSZndDtjdXJyICE9IHJxLSZndDtkb25vcik7CiAJCQl1cGRhdGVfcnFfY2xvY2socnEpOwogCiAJCQlpZiAoIWlzX2lkbGVfdGFzayhjdXJyKSkgewpAQCAtNTc1NCw3ICYjNDM7NTc1NCw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkX3RpY2tfcmVtb3RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJCQkgKiByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLgogCQkJCSAqLwogCQkJCXU2NCBkZWx0YSA9IHJxX2Nsb2NrX3Rhc2socnEpIC0gY3Vyci0mZ3Q7c2UuZXhlY19zdGFydDsKLQkJCQlXQVJOX09OX09OQ0UoZGVsdGEgJmd0OyAodTY0KU5TRUNfUEVSX1NFQyAqIDMwKTsKJiM0MzsJCQkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRlbHRhICZndDsgKHU2NClOU0VDX1BFUl9TRUMgKiAzMCk7CiAJCQl9CiAJCQljdXJyLSZndDtzY2hlZF9jbGFzcy0mZ3Q7dGFza190aWNrKHJxLCBjdXJyLCAwKTsKIApAQCAtNTc2OSw3ICYjNDM7NTc2OSw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkX3RpY2tfcmVtb3RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkgKiBmaXJzdCB1cGRhdGUgc3RhdGUgdG8gcmVmbGVjdCBob3RwbHVnIGFjdGl2aXR5IGlmIHJlcXVpcmVkLgogCSAqLwogCW9zID0gYXRvbWljX2ZldGNoX2FkZF91bmxlc3MoJmFtcDt0d29yay0mZ3Q7c3RhdGUsIC0xLCBUSUNLX1NDSEVEX1JFTU9URV9SVU5OSU5HKTsKLQlXQVJOX09OX09OQ0Uob3MgPT0gVElDS19TQ0hFRF9SRU1PVEVfT0ZGTElORSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChvcyA9PSBUSUNLX1NDSEVEX1JFTU9URV9PRkZMSU5FKTsKIAlpZiAob3MgPT0gVElDS19TQ0hFRF9SRU1PVEVfUlVOTklORykKIAkJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9kZmxfd3EsIGR3b3JrLCBIWik7CiB9CkBAIC02MTk2LDcgJiM0Mzs2MTk2LDcgQEAgcGlja19uZXh0X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKQogCQkJICogRm9yIHJvYnVzdG5lc3MsIHVwZGF0ZSB0aGUgbWluX3ZydW50aW1lX2ZpIGZvcgogCQkJICogdW5jb25zdHJhaW5lZCBwaWNrcyBhcyB3ZWxsLgogCQkJICovCi0JCQlXQVJOX09OX09OQ0UoZmlfYmVmb3JlKTsKJiM0MzsJCQlXQVJOX09OX09OQ0VfREVGRVJSRUQoZmlfYmVmb3JlKTsKIAkJCXRhc2tfdnJ1bnRpbWVfdXBkYXRlKHJxLCBuZXh0LCBmYWxzZSk7CiAJCQlnb3RvIG91dF9zZXRfbmV4dDsKIAkJfQpAQCAtNjI3NCw3ICYjNDM7NjI3NCw3IEBAIHBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHJxX2ZsYWdzICpyZikKIAlycS0mZ3Q7Y29yZV9zY2hlZF9zZXEgPSBycS0mZ3Q7Y29yZS0mZ3Q7Y29yZV9waWNrX3NlcTsKIAogCS8qIFNvbWV0aGluZyBzaG91bGQgaGF2ZSBiZWVuIHNlbGVjdGVkIGZvciBjdXJyZW50IENQVSAqLwotCVdBUk5fT05fT05DRSghbmV4dCk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghbmV4dCk7CiAKIAkvKgogCSAqIFJlc2NoZWR1bGUgc2libGluZ3MKQEAgLTYzMTcsNyAmIzQzOzYzMTcsNyBAQCBwaWNrX25leHRfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIHN0cnVjdCBycV9mbGFncyAqcmYpCiAJCX0KIAogCQkvKiBEaWQgd2UgYnJlYWsgTDFURiBtaXRpZ2F0aW9uIHJlcXVpcmVtZW50cz8gKi8KLQkJV0FSTl9PTl9PTkNFKCFjb29raWVfbWF0Y2gobmV4dCwgcnFfaS0mZ3Q7Y29yZV9waWNrKSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNvb2tpZV9tYXRjaChuZXh0LCBycV9pLSZndDtjb3JlX3BpY2spKTsKIAogCQlpZiAocnFfaS0mZ3Q7Y3VyciA9PSBycV9pLSZndDtjb3JlX3BpY2spIHsKIAkJCXJxX2ktJmd0O2NvcmVfcGljayA9IE5VTEw7CkBAIC02NzE3LDcgJiM0Mzs2NzE3LDcgQEAgc3RhdGljIHZvaWQgcHJveHlfbWlncmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYsCiAJc3RydWN0IHJxICp0YXJnZXRfcnEgPSBjcHVfcnEodGFyZ2V0X2NwdSk7CiAKIAlsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTsKLQlXQVJOX09OKHAgPT0gcnEtJmd0O2N1cnIpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKHAgPT0gcnEtJmd0O2N1cnIpOwogCS8qCiAJICogU2luY2Ugd2UgYXJlIG1pZ3JhdGluZyBhIGJsb2NrZWQgZG9ub3IsIGl0IGNvdWxkIGJlIHJxLSZndDtkb25vciwKIAkgKiBhbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcmVmZXJlbmNlcyBmcm9tIHRoaXMKQEAgLTY3NDksNyAmIzQzOzY3NDksNyBAQCBzdGF0aWMgdm9pZCBwcm94eV9mb3JjZV9yZXR1cm4oc3RydWN0IHJxICpycSwgc3RydWN0IHJxX2ZsYWdzICpyZiwKIAlpbnQgY3B1LCB3YWtlX2ZsYWcgPSBXRl9UVFdVOwogCiAJbG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7Ci0JV0FSTl9PTihwID09IHJxLSZndDtjdXJyKTsKJiM0MzsJV0FSTl9PTl9ERUZFUlJFRChwID09IHJxLSZndDtjdXJyKTsKIAogCWlmIChwID09IHJxLSZndDtkb25vcikKIAkJcHJveHlfcmVzY2hlZF9pZGxlKHJxKTsKQEAgLTY5NTEsNyAmIzQzOzY5NTEsNyBAQCBmaW5kX3Byb3h5X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpkb25vciwgc3RydWN0IHJxX2ZsYWdzICpyZikKIAkJICogZ3VhcmFudGVlIGl0cyBleGlzdGVuY2UsIGFzIHBlciB0dHd1X3JlbW90ZSgpLgogCQkgKi8KIAl9Ci0JV0FSTl9PTl9PTkNFKG93bmVyICZhbXA7JmFtcDsgIW93bmVyLSZndDtvbl9ycSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChvd25lciAmYW1wOyZhbXA7ICFvd25lci0mZ3Q7b25fcnEpOwogCXJldHVybiBvd25lcjsKIAogZGVhY3RpdmF0ZToKQEAgLTc2MzEsOCAmIzQzOzc2MzEsOCBAQCB2b2lkIHJ0X211dGV4X3NldHByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spCiAJICogcmVhbCBuZWVkIHRvIGJvb3N0LgogCSAqLwogCWlmICh1bmxpa2VseShwID09IHJxLSZndDtpZGxlKSkgewotCQlXQVJOX09OKHAgIT0gcnEtJmd0O2N1cnIpOwotCQlXQVJOX09OKHAtJmd0O3BpX2Jsb2NrZWRfb24pOwomIzQzOwkJV0FSTl9PTl9ERUZFUlJFRChwICE9IHJxLSZndDtjdXJyKTsKJiM0MzsJCVdBUk5fT05fREVGRVJSRUQocC0mZ3Q7cGlfYmxvY2tlZF9vbik7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKQEAgLTg0NjMsNyAmIzQzOzg0NjMsNyBAQCBzdGF0aWMgdm9pZCBiYWxhbmNlX3B1c2hfc2V0KGludCBjcHUsIGJvb2wgb24pCiAKIAlycV9sb2NrX2lycXNhdmUocnEsICZhbXA7cmYpOwogCWlmIChvbikgewotCQlXQVJOX09OX09OQ0UocnEtJmd0O2JhbGFuY2VfY2FsbGJhY2spOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLSZndDtiYWxhbmNlX2NhbGxiYWNrKTsKIAkJcnEtJmd0O2JhbGFuY2VfY2FsbGJhY2sgPSAmYW1wO2JhbGFuY2VfcHVzaF9jYWxsYmFjazsKIAl9IGVsc2UgaWYgKHJxLSZndDtiYWxhbmNlX2NhbGxiYWNrID09ICZhbXA7YmFsYW5jZV9wdXNoX2NhbGxiYWNrKSB7CiAJCXJxLSZndDtiYWxhbmNlX2NhbGxiYWNrID0gTlVMTDsKQEAgLTExMTUwLDcgJiM0MzsxMTE1MCw3IEBAIHN0cnVjdCBzY2hlZF9jaGFuZ2VfY3R4ICpzY2hlZF9jaGFuZ2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQKIAkgKiBNdXN0IGV4Y2x1c2l2ZWx5IHVzZSBtYXRjaGVkIGZsYWdzIHNpbmNlIHRoaXMgaXMgYm90aCBkZXF1ZXVlIGFuZAogCSAqIGVucXVldWUuCiAJICovCi0JV0FSTl9PTl9PTkNFKGZsYWdzICZhbXA7IDB4RkZGRjAwMDApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoZmxhZ3MgJmFtcDsgMHhGRkZGMDAwMCk7CiAKIAlsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTsKIApAQCAtMTExOTgsNyAmIzQzOzExMTk4LDcgQEAgdm9pZCBzY2hlZF9jaGFuZ2VfZW5kKHN0cnVjdCBzY2hlZF9jaGFuZ2VfY3R4ICpjdHgpCiAJLyoKIAkgKiBDaGFuZ2luZyBjbGFzcyB3aXRob3V0ICpRVUVVRV9DTEFTUyBpcyBiYWQuCiAJICovCi0JV0FSTl9PTl9PTkNFKHAtJmd0O3NjaGVkX2NsYXNzICE9IGN0eC0mZ3Q7Y2xhc3MgJmFtcDsmYW1wOyAhKGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgRU5RVUVVRV9DTEFTUykpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2NoZWRfY2xhc3MgIT0gY3R4LSZndDtjbGFzcyAmYW1wOyZhbXA7ICEoY3R4LSZndDtmbGFncyAmYW1wOyBFTlFVRVVFX0NMQVNTKSk7CiAKIAlpZiAoKGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgRU5RVUVVRV9DTEFTUykgJmFtcDsmYW1wOyBwLSZndDtzY2hlZF9jbGFzcy0mZ3Q7c3dpdGNoaW5nX3RvKQogCQlwLSZndDtzY2hlZF9jbGFzcy0mZ3Q7c3dpdGNoaW5nX3RvKHJxLCBwKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlX3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQvY29yZV9zY2hlZC5jCmluZGV4IDczYjZiMjQyNjkxMTliLi5lYzg4ZWQ3ZDhlZTg3NyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvY29yZV9zY2hlZC5jCkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzY2hlZF9jb3JlX3VwZGF0ZV9jb29raWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCSAqIGEgY29va2llIHVudGlsIGFmdGVyIHdlJiMzOTt2ZSByZW1vdmVkIGl0LCB3ZSBtdXN0IGhhdmUgY29yZSBzY2hlZHVsaW5nCiAJICogZW5hYmxlZCBoZXJlLgogCSAqLwotCVdBUk5fT05fT05DRSgocC0mZ3Q7Y29yZV9jb29raWUgfHwgY29va2llKSAmYW1wOyZhbXA7ICFzY2hlZF9jb3JlX2VuYWJsZWQocnEpKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKChwLSZndDtjb3JlX2Nvb2tpZSB8fCBjb29raWUpICZhbXA7JmFtcDsgIXNjaGVkX2NvcmVfZW5hYmxlZChycSkpOwogCiAJaWYgKHNjaGVkX2NvcmVfZW5xdWV1ZWQocCkpCiAJCXNjaGVkX2NvcmVfZGVxdWV1ZShycSwgcCwgREVRVUVVRV9TQVZFKTsKQEAgLTI0OSw3ICYjNDM7MjQ5LDcgQEAgdm9pZCBfX3NjaGVkX2NvcmVfYWNjb3VudF9mb3JjZWlkbGUoc3RydWN0IHJxICpycSkKIAogCWxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpOwogCi0JV0FSTl9PTl9PTkNFKCFycS0mZ3Q7Y29yZS0mZ3Q7Y29yZV9mb3JjZWlkbGVfY291bnQpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJxLSZndDtjb3JlLSZndDtjb3JlX2ZvcmNlaWRsZV9jb3VudCk7CiAKIAlpZiAocnEtJmd0O2NvcmUtJmd0O2NvcmVfZm9yY2VpZGxlX3N0YXJ0ID09IDApCiAJCXJldHVybjsKQEAgLTI2MCw3ICYjNDM7MjYwLDcgQEAgdm9pZCBfX3NjaGVkX2NvcmVfYWNjb3VudF9mb3JjZWlkbGUoc3RydWN0IHJxICpycSkKIAogCXJxLSZndDtjb3JlLSZndDtjb3JlX2ZvcmNlaWRsZV9zdGFydCA9IG5vdzsKIAotCWlmIChXQVJOX09OX09OQ0UoIXJxLSZndDtjb3JlLSZndDtjb3JlX2ZvcmNlaWRsZV9vY2N1cGF0aW9uKSkgewomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFycS0mZ3Q7Y29yZS0mZ3Q7Y29yZV9mb3JjZWlkbGVfb2NjdXBhdGlvbikpIHsKIAkJLyogY2FuJiMzOTt0IGJlIGZvcmNlZCBpZGxlIHdpdGhvdXQgYSBydW5uaW5nIHRhc2sgKi8KIAl9IGVsc2UgaWYgKHJxLSZndDtjb3JlLSZndDtjb3JlX2ZvcmNlaWRsZV9jb3VudCAmZ3Q7IDEgfHwKIAkJICAgcnEtJmd0O2NvcmUtJmd0O2NvcmVfZm9yY2VpZGxlX29jY3VwYXRpb24gJmd0OyAxKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9jcHVkZWFkbGluZS5jCmluZGV4IDBhMmI3ZTMwZmQxMGMxLi5lMzA1YThlOTkzZTI3YyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmMKQEAgLTE0OSw3ICYjNDM7MTQ5LDcgQEAgaW50IGNwdWRsX2ZpbmQoc3RydWN0IGNwdWRsICpjcCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCX0gZWxzZSB7CiAJCWludCBiZXN0X2NwdSA9IGNwdWRsX21heGltdW0oY3ApOwogCi0JCVdBUk5fT04oYmVzdF9jcHUgIT0gLTEgJmFtcDsmYW1wOyAhY3B1X3ByZXNlbnQoYmVzdF9jcHUpKTsKJiM0MzsJCVdBUk5fT05fREVGRVJSRUQoYmVzdF9jcHUgIT0gLTEgJmFtcDsmYW1wOyAhY3B1X3ByZXNlbnQoYmVzdF9jcHUpKTsKIAogCQlpZiAoY3B1bWFza190ZXN0X2NwdShiZXN0X2NwdSwgJmFtcDtwLSZndDtjcHVzX21hc2spICZhbXA7JmFtcDsKIAkJICAgIGRsX3RpbWVfYmVmb3JlKGRsX3NlLSZndDtkZWFkbGluZSwgY3AtJmd0O2VsZW1lbnRzWzBdLmRsKSkgewpAQCAtMTc3LDcgJiM0MzsxNzcsNyBAQCB2b2lkIGNwdWRsX2NsZWFyKHN0cnVjdCBjcHVkbCAqY3AsIGludCBjcHUsIGJvb2wgb25saW5lKQogCWludCBvbGRfaWR4LCBuZXdfY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlXQVJOX09OKCFjcHVfcHJlc2VudChjcHUpKTsKJiM0MzsJV0FSTl9PTl9ERUZFUlJFRCghY3B1X3ByZXNlbnQoY3B1KSk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjcC0mZ3Q7bG9jaywgZmxhZ3MpOwogCkBAIC0yMjAsNyAmIzQzOzIyMCw3IEBAIHZvaWQgY3B1ZGxfc2V0KHN0cnVjdCBjcHVkbCAqY3AsIGludCBjcHUsIHU2NCBkbCkKIAlpbnQgb2xkX2lkeDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JV0FSTl9PTighY3B1X3ByZXNlbnQoY3B1KSk7CiYjNDM7CVdBUk5fT05fREVGRVJSRUQoIWNwdV9wcmVzZW50KGNwdSkpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3AtJmd0O2xvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2RlYWRsaW5lLmMgYi9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYwppbmRleCA3ZGI0Yzg3ZGY4M2IwYS4uODYzYWM3NTA5MTkyZjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCkBAIC0yMTcsOCAmIzQzOzIxNyw4IEBAIHZvaWQgX19hZGRfcnVubmluZ19idyh1NjQgZGxfYncsIHN0cnVjdCBkbF9ycSAqZGxfcnEpCiAKIAlsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxX29mX2RsX3JxKGRsX3JxKSk7CiAJZGxfcnEtJmd0O3J1bm5pbmdfYncgJiM0Mzs9IGRsX2J3OwotCVdBUk5fT05fT05DRShkbF9ycS0mZ3Q7cnVubmluZ19idyAmbHQ7IG9sZCk7IC8qIG92ZXJmbG93ICovCi0JV0FSTl9PTl9PTkNFKGRsX3JxLSZndDtydW5uaW5nX2J3ICZndDsgZGxfcnEtJmd0O3RoaXNfYncpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtJmd0O3J1bm5pbmdfYncgJmx0OyBvbGQpOyAvKiBvdmVyZmxvdyAqLwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtJmd0O3J1bm5pbmdfYncgJmd0OyBkbF9ycS0mZ3Q7dGhpc19idyk7CiAJLyoga2ljayBjcHVmcmVxIChzZWUgdGhlIGNvbW1lbnQgaW4ga2VybmVsL3NjaGVkL3NjaGVkLmgpLiAqLwogCWNwdWZyZXFfdXBkYXRlX3V0aWwocnFfb2ZfZGxfcnEoZGxfcnEpLCAwKTsKIH0KQEAgLTIzMCw3ICYjNDM7MjMwLDcgQEAgdm9pZCBfX3N1Yl9ydW5uaW5nX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSkKIAogCWxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTsKIAlkbF9ycS0mZ3Q7cnVubmluZ19idyAtPSBkbF9idzsKLQlXQVJOX09OX09OQ0UoZGxfcnEtJmd0O3J1bm5pbmdfYncgJmd0OyBvbGQpOyAvKiB1bmRlcmZsb3cgKi8KJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLSZndDtydW5uaW5nX2J3ICZndDsgb2xkKTsgLyogdW5kZXJmbG93ICovCiAJaWYgKGRsX3JxLSZndDtydW5uaW5nX2J3ICZndDsgb2xkKQogCQlkbF9ycS0mZ3Q7cnVubmluZ19idyA9IDA7CiAJLyoga2ljayBjcHVmcmVxIChzZWUgdGhlIGNvbW1lbnQgaW4ga2VybmVsL3NjaGVkL3NjaGVkLmgpLiAqLwpAQCAtMjQ0LDcgJiM0MzsyNDQsNyBAQCB2b2lkIF9fYWRkX3JxX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSkKIAogCWxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTsKIAlkbF9ycS0mZ3Q7dGhpc19idyAmIzQzOz0gZGxfYnc7Ci0JV0FSTl9PTl9PTkNFKGRsX3JxLSZndDt0aGlzX2J3ICZsdDsgb2xkKTsgLyogb3ZlcmZsb3cgKi8KJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLSZndDt0aGlzX2J3ICZsdDsgb2xkKTsgLyogb3ZlcmZsb3cgKi8KIH0KIAogc3RhdGljIGlubGluZQpAQCAtMjU0LDEwICYjNDM7MjU0LDEwIEBAIHZvaWQgX19zdWJfcnFfYncodTY0IGRsX2J3LCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKQogCiAJbG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZl9kbF9ycShkbF9ycSkpOwogCWRsX3JxLSZndDt0aGlzX2J3IC09IGRsX2J3OwotCVdBUk5fT05fT05DRShkbF9ycS0mZ3Q7dGhpc19idyAmZ3Q7IG9sZCk7IC8qIHVuZGVyZmxvdyAqLwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtJmd0O3RoaXNfYncgJmd0OyBvbGQpOyAvKiB1bmRlcmZsb3cgKi8KIAlpZiAoZGxfcnEtJmd0O3RoaXNfYncgJmd0OyBvbGQpCiAJCWRsX3JxLSZndDt0aGlzX2J3ID0gMDsKLQlXQVJOX09OX09OQ0UoZGxfcnEtJmd0O3J1bm5pbmdfYncgJmd0OyBkbF9ycS0mZ3Q7dGhpc19idyk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChkbF9ycS0mZ3Q7cnVubmluZ19idyAmZ3Q7IGRsX3JxLSZndDt0aGlzX2J3KTsKIH0KIAogc3RhdGljIGlubGluZQpAQCAtMzM1LDcgJiM0MzszMzUsNyBAQCB2b2lkIGNhbmNlbF9pbmFjdGl2ZV90aW1lcihzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSkKIAogc3RhdGljIHZvaWQgZGxfY2hhbmdlX3V0aWxpemF0aW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IG5ld19idykKIHsKLQlXQVJOX09OX09OQ0UocC0mZ3Q7ZGwuZmxhZ3MgJmFtcDsgU0NIRURfRkxBR19TVUdPVik7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChwLSZndDtkbC5mbGFncyAmYW1wOyBTQ0hFRF9GTEFHX1NVR09WKTsKIAogCWlmICh0YXNrX29uX3JxX3F1ZXVlZChwKSkKIAkJcmV0dXJuOwpAQCAtNDE2LDcgJiM0Mzs0MTYsNyBAQCBzdGF0aWMgdm9pZCB0YXNrX25vbl9jb250ZW5kaW5nKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBib29sIGRsX3Rhc2spCiAJaWYgKGRsX2VudGl0eV9pc19zcGVjaWFsKGRsX3NlKSkKIAkJcmV0dXJuOwogCi0JV0FSTl9PTihkbF9zZS0mZ3Q7ZGxfbm9uX2NvbnRlbmRpbmcpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKGRsX3NlLSZndDtkbF9ub25fY29udGVuZGluZyk7CiAKIAl6ZXJvbGFnX3RpbWUgPSBkbF9zZS0mZ3Q7ZGVhZGxpbmUgLQogCQkgZGl2NjRfbG9uZygoZGxfc2UtJmd0O3J1bnRpbWUgKiBkbF9zZS0mZ3Q7ZGxfcGVyaW9kKSwKQEAgLTU4Miw3ICYjNDM7NTgyLDcgQEAgc3RhdGljIHZvaWQgZW5xdWV1ZV9wdXNoYWJsZV9kbF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbGVmdG1vc3Q7CiAKLQlXQVJOX09OX09OQ0UoIVJCX0VNUFRZX05PREUoJmFtcDtwLSZndDtwdXNoYWJsZV9kbF90YXNrcykpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIVJCX0VNUFRZX05PREUoJmFtcDtwLSZndDtwdXNoYWJsZV9kbF90YXNrcykpOwogCiAJbGVmdG1vc3QgPSByYl9hZGRfY2FjaGVkKCZhbXA7cC0mZ3Q7cHVzaGFibGVfZGxfdGFza3MsCiAJCQkJICZhbXA7cnEtJmd0O2RsLnB1c2hhYmxlX2RsX3Rhc2tzX3Jvb3QsCkBAIC02NjQsNyAmIzQzOzY2NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnEgKmRsX3Rhc2tfb2ZmbGluZV9taWdyYXRpb24oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwCiAJCQkgKiBGYWlsZWQgdG8gZmluZCBhbnkgc3VpdGFibGUgQ1BVLgogCQkJICogVGhlIHRhc2sgd2lsbCBuZXZlciBjb21lIGJhY2shCiAJCQkgKi8KLQkJCVdBUk5fT05fT05DRShkbF9iYW5kd2lkdGhfZW5hYmxlZCgpKTsKJiM0MzsJCQlXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfYmFuZHdpZHRoX2VuYWJsZWQoKSk7CiAKIAkJCS8qCiAJCQkgKiBJZiBhZG1pc3Npb24gY29udHJvbCBpcyBkaXNhYmxlZCB3ZQpAQCAtNzU2LDggJiM0Mzs3NTYsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfbmV3X2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSkKIAlzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpOwogCXN0cnVjdCBycSAqcnEgPSBycV9vZl9kbF9ycShkbF9ycSk7CiAKLQlXQVJOX09OKGlzX2RsX2Jvb3N0ZWQoZGxfc2UpKTsKLQlXQVJOX09OKGRsX3RpbWVfYmVmb3JlKHJxX2Nsb2NrKHJxKSwgZGxfc2UtJmd0O2RlYWRsaW5lKSk7CiYjNDM7CVdBUk5fT05fREVGRVJSRUQoaXNfZGxfYm9vc3RlZChkbF9zZSkpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKGRsX3RpbWVfYmVmb3JlKHJxX2Nsb2NrKHJxKSwgZGxfc2UtJmd0O2RlYWRsaW5lKSk7CiAKIAkvKgogCSAqIFdlIGFyZSByYWNpbmcgd2l0aCB0aGUgZGVhZGxpbmUgdGltZXIuIFNvLCBkbyBub3RoaW5nIGJlY2F1c2UKQEAgLTgwMSw3ICYjNDM7ODAxLDcgQEAgc3RhdGljIHZvaWQgcmVwbGVuaXNoX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSkKIAlzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpOwogCXN0cnVjdCBycSAqcnEgPSBycV9vZl9kbF9ycShkbF9ycSk7CiAKLQlXQVJOX09OX09OQ0UocGlfb2YoZGxfc2UpLSZndDtkbF9ydW50aW1lICZsdDs9IDApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocGlfb2YoZGxfc2UpLSZndDtkbF9ydW50aW1lICZsdDs9IDApOwogCiAJLyoKIAkgKiBUaGlzIGNvdWxkIGJlIHRoZSBjYXNlIGZvciBhICEtZGwgdGFzayB0aGF0IGlzIGJvb3N0ZWQuCkBAIC05NzUsNyAmIzQzOzk3NSw3IEBAIHVwZGF0ZV9kbF9yZXZpc2VkX3dha2V1cChzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IHJxICpycSkKIAkgKgogCSAqIFNlZSB1cGRhdGVfZGxfZW50aXR5KCkgY29tbWVudHMgZm9yIGZ1cnRoZXIgZGV0YWlscy4KIAkgKi8KLQlXQVJOX09OKGRsX3RpbWVfYmVmb3JlKGRsX3NlLSZndDtkZWFkbGluZSwgcnFfY2xvY2socnEpKSk7CiYjNDM7CVdBUk5fT05fREVGRVJSRUQoZGxfdGltZV9iZWZvcmUoZGxfc2UtJmd0O2RlYWRsaW5lLCBycV9jbG9jayhycSkpKTsKIAogCWRsX3NlLSZndDtydW50aW1lID0gKGRsX3NlLSZndDtkbF9kZW5zaXR5ICogbGF4aXR5KSAmZ3Q7Jmd0OyBCV19TSElGVDsKIH0KQEAgLTEwODAsNyAmIzQzOzEwODAsNyBAQCBzdGF0aWMgaW50IHN0YXJ0X2RsX3RpbWVyKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlKQogCSAqIChjdXJyZW50IHUgJmd0OyBVKS4KIAkgKi8KIAlpZiAoZGxfc2UtJmd0O2RsX2RlZmVyX2FybWVkKSB7Ci0JCVdBUk5fT05fT05DRSghZGxfc2UtJmd0O2RsX3Rocm90dGxlZCk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWRsX3NlLSZndDtkbF90aHJvdHRsZWQpOwogCQlhY3QgPSBuc190b19rdGltZShkbF9zZS0mZ3Q7ZGVhZGxpbmUgLSBkbF9zZS0mZ3Q7cnVudGltZSk7CiAJfSBlbHNlIHsKIAkJLyogYWN0ID0gZGVhZGxpbmUgLSByZWwtZGVhZGxpbmUgJiM0MzsgcGVyaW9kICovCkBAIC0xNDUxLDcgJiM0MzsxNDUxLDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlX2N1cnJfZGxfc2Uoc3RydWN0IHJxICpycSwgc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIHM2NAogCQkvKgogCQkgKiBOb24tc2VydmVycyB3b3VsZCBuZXZlciBnZXQgdGltZSBhY2NvdW50ZWQgd2hpbGUgdGhyb3R0bGVkLgogCQkgKi8KLQkJV0FSTl9PTl9PTkNFKCFkbF9zZXJ2ZXIoZGxfc2UpKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfc2VydmVyKGRsX3NlKSk7CiAKIAkJLyoKIAkJICogV2hpbGUgdGhlIHNlcnZlciBpcyBtYXJrZWQgaWRsZSwgZG8gbm90IHB1c2ggb3V0IHRoZQpAQCAtMTQ5Miw3ICYjNDM7MTQ5Miw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9jdXJyX2RsX3NlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBzNjQKIAkJICogYW5kIHF1ZXVlIHJpZ2h0IGF3YXkuIE90aGVyd2lzZSBub3RoaW5nIG1pZ2h0IHF1ZXVlIGl0LiBUaGF0JiMzOTtzIHNpbWlsYXIKIAkJICogdG8gd2hhdCBlbnF1ZXVlX2RsX2VudGl0eSgpIGRvZXMgb24gc3RhcnRfZGxfdGltZXI9PTAuIEZvciBub3csIGp1c3Qgd2Fybi4KIAkJICovCi0JCVdBUk5fT05fT05DRSghc3RhcnRfZGxfdGltZXIoZGxfc2UpKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRCghc3RhcnRfZGxfdGltZXIoZGxfc2UpKTsKIAogCQlyZXR1cm47CiAJfQpAQCAtMTgwMSw3ICYjNDM7MTgwMSw3IEBAIHZvaWQgZGxfc2VydmVyX3N0YXJ0KHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlKQogCSAqLwogCXJxLSZndDtkb25vci0mZ3Q7c2NoZWRfY2xhc3MtJmd0O3VwZGF0ZV9jdXJyKHJxKTsKIAotCWlmIChXQVJOX09OX09OQ0UoIWNwdV9vbmxpbmUoY3B1X29mKHJxKSkpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFjcHVfb25saW5lKGNwdV9vZihycSkpKSkKIAkJcmV0dXJuOwogCiAJdHJhY2Vfc2NoZWRfZGxfc2VydmVyX3N0YXJ0X3RwKGRsX3NlLCBjcHVfb2YocnEpLCBkbF9nZXRfdHlwZShkbF9zZSwgcnEpKTsKQEAgLTIwNzMsNyAmIzQzOzIwNzMsNyBAQCB2b2lkIGluY19kbF90YXNrcyhzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IGRsX3JxICpkbF9ycSkKIHN0YXRpYyBpbmxpbmUKIHZvaWQgZGVjX2RsX3Rhc2tzKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKQogewotCVdBUk5fT04oIWRsX3JxLSZndDtkbF9ucl9ydW5uaW5nKTsKJiM0MzsJV0FSTl9PTl9ERUZFUlJFRCghZGxfcnEtJmd0O2RsX25yX3J1bm5pbmcpOwogCWRsX3JxLSZndDtkbF9ucl9ydW5uaW5nLS07CiAKIAlpZiAoIWRsX3NlcnZlcihkbF9zZSkpCkBAIC0yMTY1LDcgJiM0MzsyMTY1LDcgQEAgc3RhdGljIHZvaWQgX19lbnF1ZXVlX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSkKIHsKIAlzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpOwogCi0JV0FSTl9PTl9PTkNFKCFSQl9FTVBUWV9OT0RFKCZhbXA7ZGxfc2UtJmd0O3JiX25vZGUpKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFSQl9FTVBUWV9OT0RFKCZhbXA7ZGxfc2UtJmd0O3JiX25vZGUpKTsKIAogCXJiX2FkZF9jYWNoZWQoJmFtcDtkbF9zZS0mZ3Q7cmJfbm9kZSwgJmFtcDtkbF9ycS0mZ3Q7cm9vdCwgX19kbF9sZXNzKTsKIApAQCAtMjE4OSw3ICYjNDM7MjE4OSw3IEBAIHN0YXRpYyB2b2lkIF9fZGVxdWV1ZV9kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpCiBzdGF0aWMgdm9pZAogZW5xdWV1ZV9kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIGludCBmbGFncykKIHsKLQlXQVJOX09OX09OQ0Uob25fZGxfcnEoZGxfc2UpKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKG9uX2RsX3JxKGRsX3NlKSk7CiAKIAl1cGRhdGVfc3RhdHNfZW5xdWV1ZV9kbChkbF9ycV9vZl9zZShkbF9zZSksIGRsX3NlLCBmbGFncyk7CiAKQEAgLTI2MTEsNyAmIzQzOzI2MTEsNyBAQCBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpfX3BpY2tfdGFza19kbChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKQogCQlyZXR1cm4gTlVMTDsKIAogCWRsX3NlID0gcGlja19uZXh0X2RsX2VudGl0eShkbF9ycSk7Ci0JV0FSTl9PTl9PTkNFKCFkbF9zZSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfc2UpOwogCiAJaWYgKGRsX3NlcnZlcihkbF9zZSkpIHsKIAkJcCA9IGRsX3NlLSZndDtzZXJ2ZXJfcGlja190YXNrKGRsX3NlLCByZik7CkBAIC0yODIzLDEyICYjNDM7MjgyMywxMiBAQCBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfcHVzaGFibGVfZGxfdGFzayhzdHJ1Y3QgcnEgKnJxKQogCWlmICghcCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlXQVJOX09OX09OQ0UocnEtJmd0O2NwdSAhPSB0YXNrX2NwdShwKSk7Ci0JV0FSTl9PTl9PTkNFKHRhc2tfY3VycmVudChycSwgcCkpOwotCVdBUk5fT05fT05DRShwLSZndDtucl9jcHVzX2FsbG93ZWQgJmx0Oz0gMSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChycS0mZ3Q7Y3B1ICE9IHRhc2tfY3B1KHApKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfY3VycmVudChycSwgcCkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7bnJfY3B1c19hbGxvd2VkICZsdDs9IDEpOwogCi0JV0FSTl9PTl9PTkNFKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7Ci0JV0FSTl9PTl9PTkNFKCFkbF90YXNrKHApKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfdGFzayhwKSk7CiAKIAlyZXR1cm4gcDsKIH0KQEAgLTI5NDQsNyAmIzQzOzI5NDQsNyBAQCBzdGF0aWMgaW50IHB1c2hfZGxfdGFzayhzdHJ1Y3QgcnEgKnJxKQogCWlmIChpc19taWdyYXRpb25fZGlzYWJsZWQobmV4dF90YXNrKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoV0FSTl9PTihuZXh0X3Rhc2sgPT0gcnEtJmd0O2N1cnIpKQomIzQzOwlpZiAoV0FSTl9PTl9ERUZFUlJFRChuZXh0X3Rhc2sgPT0gcnEtJmd0O2N1cnIpKQogCQlyZXR1cm4gMDsKIAogCS8qIFdlIG1pZ2h0IHJlbGVhc2UgcnEgbG9jayAqLwpAQCAtMzA1MCw4ICYjNDM7MzA1MCw4IEBAIHN0YXRpYyB2b2lkIHB1bGxfZGxfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEpCiAJCSAqLwogCQlpZiAocCAmYW1wOyZhbXA7IGRsX3RpbWVfYmVmb3JlKHAtJmd0O2RsLmRlYWRsaW5lLCBkbWluKSAmYW1wOyZhbXA7CiAJCSAgICBkbF90YXNrX2lzX2VhcmxpZXN0X2RlYWRsaW5lKHAsIHRoaXNfcnEpKSB7Ci0JCQlXQVJOX09OKHAgPT0gc3JjX3JxLSZndDtjdXJyKTsKLQkJCVdBUk5fT04oIXRhc2tfb25fcnFfcXVldWVkKHApKTsKJiM0MzsJCQlXQVJOX09OX0RFRkVSUkVEKHAgPT0gc3JjX3JxLSZndDtjdXJyKTsKJiM0MzsJCQlXQVJOX09OX0RFRkVSUkVEKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7CiAKIAkJCS8qCiAJCQkgKiBUaGVuIHdlIHB1bGwgaWZmIHAgaGFzIGFjdHVhbGx5IGFuIGVhcmxpZXIKQEAgLTMxMDksNyAmIzQzOzMxMDksNyBAQCBzdGF0aWMgdm9pZCBzZXRfY3B1c19hbGxvd2VkX2RsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIHsKIAlzdHJ1Y3QgcnEgKnJxOwogCi0JV0FSTl9PTl9PTkNFKCFkbF90YXNrKHApKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFkbF90YXNrKHApKTsKIAogCXJxID0gdGFza19ycShwKTsKIAkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC5jCmluZGV4IDVkMmQxOTQ3M2E4MmU4Li40N2QzYTRjMTY0NTVhYyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2V4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9leHQuYwpAQCAtNTEyLDEyICYjNDM7NTEyLDEyIEBAIGRvIHsJCQkJCQkJCQkJXAogICogU28gaWYga2ZfdGFza3NbXSBpcyBzZXQsIEBwJiMzOTtzIHNjaGVkdWxlci1wcm90ZWN0ZWQgZmllbGRzIGFyZSBzdGFibGUuCiAgKgogICoga2ZfdGFza3NbXSBjYW4gbm90IHN0YWNrLCBzbyB0YXNrLWJhc2VkIFNDWCBvcHMgbXVzdCBub3QgbmVzdC4gVGhlCi0gKiBXQVJOX09OX09OQ0UoKSBpbiBlYWNoIG1hY3JvIGNhdGNoZXMgYSByZS1lbnRyeSBvZiBhbnkgb2YgdGhlIHRocmVlIHZhcmlhbnRzCi0gKiB3aGlsZSBhIHByZXZpb3VzIG9uZSBpcyBzdGlsbCBpbiBwcm9ncmVzcy4KJiM0MzsgKiBXQVJOX09OX09OQ0VfREVGRVJSRUQoKSBpbiBlYWNoIG1hY3JvIGNhdGNoZXMgYSByZS1lbnRyeSBvZiBhbnkgb2YgdGhlIHRocmVlCiYjNDM7ICogdmFyaWFudHMgd2hpbGUgYSBwcmV2aW91cyBvbmUgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuCiAgKi8KICNkZWZpbmUgU0NYX0NBTExfT1BfVEFTSyhzY2gsIG9wLCBsb2NrZWRfcnEsIHRhc2ssIGFyZ3MuLi4pCQkJXAogZG8gewkJCQkJCQkJCQlcCi0JV0FSTl9PTl9PTkNFKGN1cnJlbnQtJmd0O3NjeC5rZl90YXNrc1swXSk7CQkJCQlcCiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChjdXJyZW50LSZndDtzY3gua2ZfdGFza3NbMF0pOwkJCVwKIAljdXJyZW50LSZndDtzY3gua2ZfdGFza3NbMF0gPSB0YXNrOwkJCQkJXAogCVNDWF9DQUxMX09QKChzY2gpLCBvcCwgbG9ja2VkX3JxLCB0YXNrLCAjI2FyZ3MpOwkJCVwKIAljdXJyZW50LSZndDtzY3gua2ZfdGFza3NbMF0gPSBOVUxMOwkJCQkJXApAQCAtNTI2LDcgJiM0Mzs1MjYsNyBAQCBkbyB7CQkJCQkJCQkJCVwKICNkZWZpbmUgU0NYX0NBTExfT1BfVEFTS19SRVQoc2NoLCBvcCwgbG9ja2VkX3JxLCB0YXNrLCBhcmdzLi4uKQkJCVwKICh7CQkJCQkJCQkJCVwKIAlfX3R5cGVvZl9fKChzY2gpLSZndDtvcHMub3AodGFzaywgIyNhcmdzKSkgX19yZXQ7CQkJCVwKLQlXQVJOX09OX09OQ0UoY3VycmVudC0mZ3Q7c2N4LmtmX3Rhc2tzWzBdKTsJCQkJCVwKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtJmd0O3NjeC5rZl90YXNrc1swXSk7CQkJXAogCWN1cnJlbnQtJmd0O3NjeC5rZl90YXNrc1swXSA9IHRhc2s7CQkJCQlcCiAJX19yZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2ssICMjYXJncyk7CQlcCiAJY3VycmVudC0mZ3Q7c2N4LmtmX3Rhc2tzWzBdID0gTlVMTDsJCQkJCVwKQEAgLTUzNiw3ICYjNDM7NTM2LDcgQEAgZG8gewkJCQkJCQkJCQlcCiAjZGVmaW5lIFNDWF9DQUxMX09QXzJUQVNLU19SRVQoc2NoLCBvcCwgbG9ja2VkX3JxLCB0YXNrMCwgdGFzazEsIGFyZ3MuLi4pCVwKICh7CQkJCQkJCQkJCVwKIAlfX3R5cGVvZl9fKChzY2gpLSZndDtvcHMub3AodGFzazAsIHRhc2sxLCAjI2FyZ3MpKSBfX3JldDsJCQlcCi0JV0FSTl9PTl9PTkNFKGN1cnJlbnQtJmd0O3NjeC5rZl90YXNrc1swXSk7CQkJCQlcCiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChjdXJyZW50LSZndDtzY3gua2ZfdGFza3NbMF0pOwkJCVwKIAljdXJyZW50LSZndDtzY3gua2ZfdGFza3NbMF0gPSB0YXNrMDsJCQkJCVwKIAljdXJyZW50LSZndDtzY3gua2ZfdGFza3NbMV0gPSB0YXNrMTsJCQkJCVwKIAlfX3JldCA9IFNDWF9DQUxMX09QX1JFVCgoc2NoKSwgb3AsIGxvY2tlZF9ycSwgdGFzazAsIHRhc2sxLCAjI2FyZ3MpOwlcCkBAIC02ODcsNyAmIzQzOzY4Nyw3IEBAIHN0YXRpYyBib29sIG5sZHNxX2N1cnNvcl9sb3N0X3Rhc2soc3RydWN0IHNjeF9kc3FfbGlzdF9ub2RlICpjdXJzb3IsCiAJCXJldHVybiB0cnVlOwogCiAJLyogaWYgQHAgaGFzIHN0YXllZCBvbiBAZHNxLCBpdHMgcnEgY291bGRuJiMzOTt0IGhhdmUgY2hhbmdlZCAqLwotCWlmIChXQVJOX09OX09OQ0UocnEgIT0gdGFza19ycShwKSkpCiYjNDM7CWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocnEgIT0gdGFza19ycShwKSkpCiAJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIGZhbHNlOwpAQCAtMTI4Miw3ICYjNDM7MTI4Miw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkdWxlX3JlZW5xX2xvY2FsKHN0cnVjdCBycSAqcnEsIHU2NCByZWVucV9mbGFncykKIHsKIAlzdHJ1Y3Qgc2N4X3NjaGVkICpyb290ID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKHNjeF9yb290KTsKIAotCWlmIChXQVJOX09OX09OQ0UoIXJvb3QpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFyb290KSkKIAkJcmV0dXJuOwogCiAJc2NoZWR1bGVfZHNxX3JlZW5xKHJvb3QsICZhbXA7cnEtJmd0O3NjeC5sb2NhbF9kc3EsIHJlZW5xX2ZsYWdzLCBycSk7CkBAIC0xMzc5LDcgJiM0MzsxMzc5LDcgQEAgc3RhdGljIHZvaWQgZHNxX2luY19ucihzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgZW4KIAkgKi8KIAlpZiAoZW5xX2ZsYWdzICZhbXA7IFNDWF9FTlFfSU1NRUQpIHsKIAkJaWYgKHVubGlrZWx5KGRzcS0mZ3Q7aWQgIT0gU0NYX0RTUV9MT0NBTCkpIHsKLQkJCVdBUk5fT05fT05DRSghKGVucV9mbGFncyAmYW1wOyBTQ1hfRU5RX0dEU1FfRkFMTEJBQ0spKTsKJiM0MzsJCQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIShlbnFfZmxhZ3MgJmFtcDsgU0NYX0VOUV9HRFNRX0ZBTExCQUNLKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJcC0mZ3Q7c2N4LmZsYWdzIHw9IFNDWF9UQVNLX0lNTUVEOwpAQCAtMTM4OCw3ICYjNDM7MTM4OCw3IEBAIHN0YXRpYyB2b2lkIGRzcV9pbmNfbnIoc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVuCiAJaWYgKHAtJmd0O3NjeC5mbGFncyAmYW1wOyBTQ1hfVEFTS19JTU1FRCkgewogCQlzdHJ1Y3QgcnEgKnJxID0gY29udGFpbmVyX29mKGRzcSwgc3RydWN0IHJxLCBzY3gubG9jYWxfZHNxKTsKIAotCQlpZiAoV0FSTl9PTl9PTkNFKGRzcS0mZ3Q7aWQgIT0gU0NYX0RTUV9MT0NBTCkpCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRzcS0mZ3Q7aWQgIT0gU0NYX0RTUV9MT0NBTCkpCiAJCQlyZXR1cm47CiAKIAkJcnEtJmd0O3NjeC5ucl9pbW1lZCYjNDM7JiM0Mzs7CkBAIC0xNDEwLDggJiM0MzsxNDEwLDggQEAgc3RhdGljIHZvaWQgZHNxX2RlY19ucihzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCWlmIChwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfSU1NRUQpIHsKIAkJc3RydWN0IHJxICpycSA9IGNvbnRhaW5lcl9vZihkc3EsIHN0cnVjdCBycSwgc2N4LmxvY2FsX2RzcSk7CiAKLQkJaWYgKFdBUk5fT05fT05DRShkc3EtJmd0O2lkICE9IFNDWF9EU1FfTE9DQUwpIHx8Ci0JCSAgICBXQVJOX09OX09OQ0UocnEtJmd0O3NjeC5ucl9pbW1lZCAmbHQ7PSAwKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLSZndDtpZCAhPSBTQ1hfRFNRX0xPQ0FMKSB8fAomIzQzOwkJICAgIFdBUk5fT05fT05DRV9ERUZFUlJFRChycS0mZ3Q7c2N4Lm5yX2ltbWVkICZsdDs9IDApKQogCQkJcmV0dXJuOwogCiAJCXJxLSZndDtzY3gubnJfaW1tZWQtLTsKQEAgLTE1MjEsOSAmIzQzOzE1MjEsOSBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaF9lbnF1ZXVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSwKIHsKIAlib29sIGlzX2xvY2FsID0gZHNxLSZndDtpZCA9PSBTQ1hfRFNRX0xPQ0FMOwogCi0JV0FSTl9PTl9PTkNFKHAtJmd0O3NjeC5kc3EgfHwgIWxpc3RfZW1wdHkoJmFtcDtwLSZndDtzY3guZHNxX2xpc3Qubm9kZSkpOwotCVdBUk5fT05fT05DRSgocC0mZ3Q7c2N4LmRzcV9mbGFncyAmYW1wOyBTQ1hfVEFTS19EU1FfT05fUFJJUSkgfHwKLQkJICAgICAhUkJfRU1QVFlfTk9ERSgmYW1wO3AtJmd0O3NjeC5kc3FfcHJpcSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2N4LmRzcSB8fCAhbGlzdF9lbXB0eSgmYW1wO3AtJmd0O3NjeC5kc3FfbGlzdC5ub2RlKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCgocC0mZ3Q7c2N4LmRzcV9mbGFncyAmYW1wOyBTQ1hfVEFTS19EU1FfT05fUFJJUSkgfHwKJiM0MzsJCQkgICAgICAhUkJfRU1QVFlfTk9ERSgmYW1wO3AtJmd0O3NjeC5kc3FfcHJpcSkpOwogCiAJaWYgKCFpc19sb2NhbCkgewogCQlyYXdfc3Bpbl9sb2NrX25lc3RlZCgmYW1wO2RzcS0mZ3Q7bG9jaywKQEAgLTE2NDYsNyAmIzQzOzE2NDYsNyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaF9lbnF1ZXVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSwKIHN0YXRpYyB2b2lkIHRhc2tfdW5saW5rX2Zyb21fZHNxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQkgc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EpCiB7Ci0JV0FSTl9PTl9PTkNFKGxpc3RfZW1wdHkoJmFtcDtwLSZndDtzY3guZHNxX2xpc3Qubm9kZSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQobGlzdF9lbXB0eSgmYW1wO3AtJmd0O3NjeC5kc3FfbGlzdC5ub2RlKSk7CiAKIAlpZiAocC0mZ3Q7c2N4LmRzcV9mbGFncyAmYW1wOyBTQ1hfVEFTS19EU1FfT05fUFJJUSkgewogCQlyYl9lcmFzZSgmYW1wO3AtJmd0O3NjeC5kc3FfcHJpcSwgJmFtcDtkc3EtJmd0O3ByaXEpOwpAQCAtMTcwOSw3ICYjNDM7MTcwOSw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoX2RlcXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCQkgKiBob2xkaW5nX2NwdSB3aGljaCB0ZWxscyBkaXNwYXRjaF90b19sb2NhbF9kc3EoKSB0aGF0IGl0IGxvc3QKIAkJICogdGhlIHJhY2UuCiAJCSAqLwotCQlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJmFtcDtwLSZndDtzY3guZHNxX2xpc3Qubm9kZSkpOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KCZhbXA7cC0mZ3Q7c2N4LmRzcV9saXN0Lm5vZGUpKTsKIAkJcC0mZ3Q7c2N4LmhvbGRpbmdfY3B1ID0gLTE7CiAJfQogCXAtJmd0O3NjeC5kc3EgPSBOVUxMOwpAQCAtMTc4Nyw4ICYjNDM7MTc4Nyw4IEBAIHN0YXRpYyB2b2lkIG1hcmtfZGlyZWN0X2Rpc3BhdGNoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwKIAkJcmV0dXJuOwogCX0KIAotCVdBUk5fT05fT05DRShwLSZndDtzY3guZGRzcF9kc3FfaWQgIT0gU0NYX0RTUV9JTlZBTElEKTsKLQlXQVJOX09OX09OQ0UocC0mZ3Q7c2N4LmRkc3BfZW5xX2ZsYWdzKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtJmd0O3NjeC5kZHNwX2RzcV9pZCAhPSBTQ1hfRFNRX0lOVkFMSUQpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2N4LmRkc3BfZW5xX2ZsYWdzKTsKIAogCXAtJmd0O3NjeC5kZHNwX2RzcV9pZCA9IGRzcV9pZDsKIAlwLSZndDtzY3guZGRzcF9lbnFfZmxhZ3MgPSBlbnFfZmxhZ3M7CkBAIC0xODU1LDcgJiM0MzsxODU1LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0X2Rpc3BhdGNoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkJYnJlYWs7CiAJCX0KIAotCQlXQVJOX09OX09OQ0UocC0mZ3Q7c2N4LmRzcSB8fCAhbGlzdF9lbXB0eSgmYW1wO3AtJmd0O3NjeC5kc3FfbGlzdC5ub2RlKSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2N4LmRzcSB8fCAhbGlzdF9lbXB0eSgmYW1wO3AtJmd0O3NjeC5kc3FfbGlzdC5ub2RlKSk7CiAJCWxpc3RfYWRkX3RhaWwoJmFtcDtwLSZndDtzY3guZHNxX2xpc3Qubm9kZSwKIAkJCSAgICAgICZhbXA7cnEtJmd0O3NjeC5kZHNwX2RlZmVycmVkX2xvY2Fscyk7CiAJCXNjaGVkdWxlX2RlZmVycmVkX2xvY2tlZChycSk7CkBAIC0xODg4LDcgJiM0MzsxODg4LDcgQEAgc3RhdGljIHZvaWQgZG9fZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVucV9mbGFncywKIAlzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcTsKIAl1bnNpZ25lZCBsb25nIHFzZXE7CiAKLQlXQVJOX09OX09OQ0UoIShwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfUVVFVUVEKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghKHAtJmd0O3NjeC5mbGFncyAmYW1wOyBTQ1hfVEFTS19RVUVVRUQpKTsKIAogCS8qIGludGVybmFsIG1vdmVtZW50cyAtIHJxIG1pZ3JhdGlvbiAvIFJFU1RPUkUgKi8KIAlpZiAoc3RpY2t5X2NwdSA9PSBjcHVfb2YocnEpKQpAQCAtMTkzOCwxMSAmIzQzOzE5MzgsMTEgQEAgc3RhdGljIHZvaWQgZG9fZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVucV9mbGFncywKIAkvKiBEU1EgYnlwYXNzIGRpZG4mIzM5O3QgdHJpZ2dlciwgZW5xdWV1ZSBvbiB0aGUgQlBGIHNjaGVkdWxlciAqLwogCXFzZXEgPSBycS0mZ3Q7c2N4Lm9wc19xc2VxJiM0MzsmIzQzOyAmbHQ7Jmx0OyBTQ1hfT1BTU19RU0VRX1NISUZUOwogCi0JV0FSTl9PTl9PTkNFKGF0b21pY19sb25nX3JlYWQoJmFtcDtwLSZndDtzY3gub3BzX3N0YXRlKSAhPSBTQ1hfT1BTU19OT05FKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGF0b21pY19sb25nX3JlYWQoJmFtcDtwLSZndDtzY3gub3BzX3N0YXRlKSAhPSBTQ1hfT1BTU19OT05FKTsKIAlhdG9taWNfbG9uZ19zZXQoJmFtcDtwLSZndDtzY3gub3BzX3N0YXRlLCBTQ1hfT1BTU19RVUVVRUlORyB8IHFzZXEpOwogCiAJZGRzcF90YXNrcCA9IHRoaXNfY3B1X3B0cigmYW1wO2RpcmVjdF9kaXNwYXRjaF90YXNrKTsKLQlXQVJOX09OX09OQ0UoKmRkc3BfdGFza3ApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoKmRkc3BfdGFza3ApOwogCSpkZHNwX3Rhc2twID0gcDsKIAogCVNDWF9DQUxMX09QX1RBU0soc2NoLCBlbnF1ZXVlLCBycSwgcCwgZW5xX2ZsYWdzKTsKQEAgLTIwMzksNyAmIzQzOzIwMzksNyBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlX3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNvcmVfZW5xXwogCQlzdGlja3lfY3B1ID0gY3B1X29mKHJxKTsKIAogCWlmIChwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfUVVFVUVEKSB7Ci0JCVdBUk5fT05fT05DRSghdGFza19ydW5uYWJsZShwKSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXRhc2tfcnVubmFibGUocCkpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIxNTksNyAmIzQzOzIxNTksNyBAQCBzdGF0aWMgYm9vbCBkZXF1ZXVlX3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNvcmVfZGVxXwogCQlkZXFfZmxhZ3MgfD0gU0NYX0RFUV9TQ0hFRF9DSEFOR0U7CiAKIAlpZiAoIShwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfUVVFVUVEKSkgewotCQlXQVJOX09OX09OQ0UodGFza19ydW5uYWJsZShwKSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19ydW5uYWJsZShwKSk7CiAJCXJldHVybiB0cnVlOwogCX0KIApAQCAtMjI1Niw3ICYjNDM7MjI1Niw3IEBAIHN0YXRpYyB2b2lkIG1vdmVfbG9jYWxfdGFza190b19sb2NhbF9kc3Eoc3RydWN0IHNjeF9zY2hlZCAqc2NoLAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtzcmNfZHNxLSZndDtsb2NrKTsKIAlsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKGRzdF9ycSk7CiAKLQlXQVJOX09OX09OQ0UocC0mZ3Q7c2N4LmhvbGRpbmdfY3B1ICZndDs9IDApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2N4LmhvbGRpbmdfY3B1ICZndDs9IDApOwogCiAJaWYgKGVucV9mbGFncyAmYW1wOyAoU0NYX0VOUV9IRUFEIHwgU0NYX0VOUV9QUkVFTVBUKSkKIAkJbGlzdF9hZGQoJmFtcDtwLSZndDtzY3guZHNxX2xpc3Qubm9kZSwgJmFtcDtkc3RfZHNxLSZndDtsaXN0KTsKQEAgLTIyOTksOCAmIzQzOzIyOTksOCBAQCBzdGF0aWMgdm9pZCBtb3ZlX3JlbW90ZV90YXNrX3RvX2xvY2FsX2RzcShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlbnFfZmxhZ3MsCiAJICogdHJ1bmNhdGUgdGhlIHVwcGVyIDMyIGJpdC4gQXMgd2Ugb3duIEBycSwgd2UgY2FuIHBhc3MgdGhlbSB0aHJvdWdoCiAJICogQHJxLSZndDtzY3guZXh0cmFfZW5xX2ZsYWdzIGluc3RlYWQuCiAJICovCi0JV0FSTl9PTl9PTkNFKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdV9vZihkc3RfcnEpLCBwLSZndDtjcHVzX3B0cikpOwotCVdBUk5fT05fT05DRShkc3RfcnEtJmd0O3NjeC5leHRyYV9lbnFfZmxhZ3MpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNwdW1hc2tfdGVzdF9jcHUoY3B1X29mKGRzdF9ycSksIHAtJmd0O2NwdXNfcHRyKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChkc3RfcnEtJmd0O3NjeC5leHRyYV9lbnFfZmxhZ3MpOwogCWRzdF9ycS0mZ3Q7c2N4LmV4dHJhX2VucV9mbGFncyA9IGVucV9mbGFnczsKIAlhY3RpdmF0ZV90YXNrKGRzdF9ycSwgcCwgMCk7CiAJZHN0X3JxLSZndDtzY3guZXh0cmFfZW5xX2ZsYWdzID0gMDsKQEAgLTIzMzEsNyAmIzQzOzIzMzEsNyBAQCBzdGF0aWMgYm9vbCB0YXNrX2Nhbl9ydW5fb25fcmVtb3RlX3JxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwKIHsKIAlzMzIgY3B1ID0gY3B1X29mKHJxKTsKIAotCVdBUk5fT05fT05DRSh0YXNrX2NwdShwKSA9PSBjcHUpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19jcHUocCkgPT0gY3B1KTsKIAogCS8qCiAJICogSWYgQHAgaGFzIG1pZ3JhdGlvbiBkaXNhYmxlZCwgQHAtJmd0O2NwdXNfcHRyIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBvbmx5CkBAIC0yNDExLDcgJiM0MzsyNDExLDcgQEAgc3RhdGljIGJvb2wgdW5saW5rX2RzcV9hbmRfbG9ja19zcmNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2RzcS0mZ3Q7bG9jayk7CiAKLQlXQVJOX09OX09OQ0UocC0mZ3Q7c2N4LmhvbGRpbmdfY3B1ICZndDs9IDApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2N4LmhvbGRpbmdfY3B1ICZndDs9IDApOwogCXRhc2tfdW5saW5rX2Zyb21fZHNxKHAsIGRzcSk7CiAJcC0mZ3Q7c2N4LmhvbGRpbmdfY3B1ID0gY3B1OwogCkBAIC0yNDIwLDcgJiM0MzsyNDIwLDcgQEAgc3RhdGljIGJvb2wgdW5saW5rX2RzcV9hbmRfbG9ja19zcmNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCiAJLyogdGFza19ycSBjb3VsZG4mIzM5O3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJiMzOTtyZSBzdGlsbCB0aGUgaG9sZGluZyBjcHUgKi8KIAlyZXR1cm4gbGlrZWx5KHAtJmd0O3NjeC5ob2xkaW5nX2NwdSA9PSBjcHUpICZhbXA7JmFtcDsKLQkJIVdBUk5fT05fT05DRShzcmNfcnEgIT0gdGFza19ycShwKSk7CiYjNDM7CQkhV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNyY19ycSAhPSB0YXNrX3JxKHApKTsKIH0KIAogc3RhdGljIGJvb2wgY29uc3VtZV9yZW1vdGVfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEsCkBAIC0yNjMwLDcgJiM0MzsyNjMwLDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hfdG9fbG9jYWxfZHNxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSwKIAogCS8qIHRhc2tfcnEgY291bGRuJiMzOTt0IGhhdmUgY2hhbmdlZCBpZiB3ZSYjMzk7cmUgc3RpbGwgdGhlIGhvbGRpbmcgY3B1ICovCiAJaWYgKGxpa2VseShwLSZndDtzY3guaG9sZGluZ19jcHUgPT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkgJmFtcDsmYW1wOwotCSAgICAhV0FSTl9PTl9PTkNFKHNyY19ycSAhPSB0YXNrX3JxKHApKSkgewomIzQzOwkgICAgIVdBUk5fT05fT05DRV9ERUZFUlJFRChzcmNfcnEgIT0gdGFza19ycShwKSkpIHsKIAkJLyoKIAkJICogSWYgQHAgaXMgc3RheWluZyBvbiB0aGUgc2FtZSBycSwgdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBnbwogCQkgKiB0aHJvdWdoIHRoZSBmdWxsIGRlYWN0aXZhdGUvYWN0aXZhdGUgY3ljbGUuIE9wdGltaXplIGJ5CkBAIC0zMDk5LDcgJiM0MzszMDk5LDcgQEAgc3RhdGljIHZvaWQgcHV0X3ByZXZfdGFza19zY3goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkgKiB3aGljaCBzaG91bGQgdHJpZ2dlciBhbiBleHBsaWNpdCBmb2xsb3ctdXAgc2NoZWR1bGluZyBldmVudC4KIAkJICovCiAJCWlmIChuZXh0ICZhbXA7JmFtcDsgc2NoZWRfY2xhc3NfYWJvdmUoJmFtcDtleHRfc2NoZWRfY2xhc3MsIG5leHQtJmd0O3NjaGVkX2NsYXNzKSkgewotCQkJV0FSTl9PTl9PTkNFKCEoc2NoLSZndDtvcHMuZmxhZ3MgJmFtcDsgU0NYX09QU19FTlFfTEFTVCkpOwomIzQzOwkJCVdBUk5fT05fT05DRV9ERUZFUlJFRCghKHNjaC0mZ3Q7b3BzLmZsYWdzICZhbXA7IFNDWF9PUFNfRU5RX0xBU1QpKTsKIAkJCWRvX2VucXVldWVfdGFzayhycSwgcCwgU0NYX0VOUV9MQVNULCAtMSk7CiAJCX0gZWxzZSB7CiAJCQlkb19lbnF1ZXVlX3Rhc2socnEsIHAsIDAsIC0xKTsKQEAgLTMyMDEsNyAmIzQzOzMyMDEsNyBAQCBkb19waWNrX3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYsIGJvb2wgZm9yY2Vfc2N4KQogCWtlZXBfcHJldiA9IHJxLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1JRX0JBTF9LRUVQOwogCWlmICh1bmxpa2VseShrZWVwX3ByZXYgJmFtcDsmYW1wOwogCQkgICAgIHByZXYtJmd0O3NjaGVkX2NsYXNzICE9ICZhbXA7ZXh0X3NjaGVkX2NsYXNzKSkgewotCQlXQVJOX09OX09OQ0Uoc2N4X2VuYWJsZV9zdGF0ZSgpID09IFNDWF9FTkFCTEVEKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRChzY3hfZW5hYmxlX3N0YXRlKCkgPT0gU0NYX0VOQUJMRUQpOwogCQlrZWVwX3ByZXYgPSBmYWxzZTsKIAl9CiAKQEAgLTMzMzIsNyAmIzQzOzMzMzIsNyBAQCBzdGF0aWMgaW50IHNlbGVjdF90YXNrX3JxX3NjeChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwcmV2X2NwdSwgaW50IHdha2VfZmxhZwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKipkZHNwX3Rhc2twOwogCiAJCWRkc3BfdGFza3AgPSB0aGlzX2NwdV9wdHIoJmFtcDtkaXJlY3RfZGlzcGF0Y2hfdGFzayk7Ci0JCVdBUk5fT05fT05DRSgqZGRzcF90YXNrcCk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoKmRkc3BfdGFza3ApOwogCQkqZGRzcF90YXNrcCA9IHA7CiAKIAkJdGhpc19ycSgpLSZndDtzY3guaW5fc2VsZWN0X2NwdSA9IHRydWU7CkBAIC0zNjIwLDcgJiM0MzszNjIwLDcgQEAgc3RhdGljIHZvaWQgX19zY3hfZW5hYmxlX3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJICogdHJhbnNpdGlvbnMgYXJlIGNvbnNpc3RlbnQsIHRoZSBmbGFnIHNob3VsZCBhbHdheXMgYmUgY2xlYXIKIAkgKiBoZXJlLgogCSAqLwotCVdBUk5fT05fT05DRShwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7CiAKIAkvKgogCSAqIFNldCB0aGUgd2VpZ2h0IGJlZm9yZSBjYWxsaW5nIG9wcy5lbmFibGUoKSBzbyB0aGF0IHRoZSBzY2hlZHVsZXIKQEAgLTM2NTEsNyAmIzQzOzM2NTEsNyBAQCBzdGF0aWMgdm9pZCBzY3hfZGlzYWJsZV90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOwogCiAJbG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7Ci0JV0FSTl9PTl9PTkNFKHNjeF9nZXRfdGFza19zdGF0ZShwKSAhPSBTQ1hfVEFTS19FTkFCTEVEKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjeF9nZXRfdGFza19zdGF0ZShwKSAhPSBTQ1hfVEFTS19FTkFCTEVEKTsKIAogCWNsZWFyX2RpcmVjdF9kaXNwYXRjaChwKTsKIApAQCAtMzY2NCw3ICYjNDM7MzY2NCw3IEBAIHN0YXRpYyB2b2lkIHNjeF9kaXNhYmxlX3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJICogdHJhbnNpdGlvbnMgYXJlIGNvbnNpc3RlbnQsIHRoZSBmbGFnIHNob3VsZCBhbHdheXMgYmUgY2xlYXIKIAkgKiBoZXJlLgogCSAqLwotCVdBUk5fT05fT05DRShwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fc2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsCkBAIC0zNjg5LDcgJiM0MzszNjg5LDcgQEAgc3RhdGljIHZvaWQgX19zY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwKIAkJc2N4X2Rpc2FibGVfdGFzayhzY2gsIHApOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlXQVJOX09OX09OQ0UodHJ1ZSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQodHJ1ZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM3MjYsNyAmIzQzOzM3MjYsNyBAQCBzdGF0aWMgdm9pZCBzY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwKIAkgKiBwYXRoLCBzbyBpdCYjMzk7cyBhbHdheXMgY2xlYXIgd2hlbiBAcCBhcnJpdmVzIGhlcmUgaW4gJVNDWF9UQVNLX05PTkUuCiAJICovCiAJaWYgKHAtJmd0O3NjeC5mbGFncyAmYW1wOyBTQ1hfVEFTS19TVUJfSU5JVCkgewotCQlpZiAoIVdBUk5fT05fT05DRSghc2N4X2VuYWJsaW5nX3N1Yl9zY2hlZCkpCiYjNDM7CQlpZiAoIVdBUk5fT05fT05DRV9ERUZFUlJFRCghc2N4X2VuYWJsaW5nX3N1Yl9zY2hlZCkpCiAJCQlzY3hfc3ViX2luaXRfY2FuY2VsX3Rhc2soc2N4X2VuYWJsaW5nX3N1Yl9zY2hlZCwgcCk7CiAJCXAtJmd0O3NjeC5mbGFncyAmYW1wOz0gflNDWF9UQVNLX1NVQl9JTklUOwogCX0KQEAgLTM4MTgsNyAmIzQzOzM4MTgsNyBAQCB2b2lkIHNjeF9jYW5jZWxfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJCXN0cnVjdCBycV9mbGFncyByZjsKIAogCQlycSA9IHRhc2tfcnFfbG9jayhwLCAmYW1wO3JmKTsKLQkJV0FSTl9PTl9PTkNFKHNjeF9nZXRfdGFza19zdGF0ZShwKSAmZ3Q7PSBTQ1hfVEFTS19SRUFEWSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoc2N4X2dldF90YXNrX3N0YXRlKHApICZndDs9IFNDWF9UQVNLX1JFQURZKTsKIAkJc2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzY3hfdGFza19zY2hlZChwKSwgcCk7CiAJCXRhc2tfcnFfdW5sb2NrKHJxLCBwLCAmYW1wO3JmKTsKIAl9CkBAIC0zOTg2LDcgJiM0MzszOTg2LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19kZHNwX2RlZmVycmVkX2xvY2FscyhzdHJ1Y3QgcnEgKnJxKQogCQljbGVhcl9kaXJlY3RfZGlzcGF0Y2gocCk7CiAKIAkJZHNxID0gZmluZF9kc3FfZm9yX2Rpc3BhdGNoKHNjaCwgcnEsIGRzcV9pZCwgdGFza19jcHUocCkpOwotCQlpZiAoIVdBUk5fT05fT05DRShkc3EtJmd0O2lkICE9IFNDWF9EU1FfTE9DQUwpKQomIzQzOwkJaWYgKCFXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLSZndDtpZCAhPSBTQ1hfRFNRX0xPQ0FMKSkKIAkJCWRpc3BhdGNoX3RvX2xvY2FsX2RzcShzY2gsIHJxLCBkc3EsIHAsIGVucV9mbGFncyk7CiAJfQogfQpAQCAtNDA0MSw3ICYjNDM7NDA0MSw3IEBAIHN0YXRpYyB1MzIgcmVlbnFfbG9jYWwoc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgcnEgKnJxLCB1NjQgcmVlbnFfZmxhZ3MpCiAKIAlsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTsKIAotCWlmIChXQVJOX09OX09OQ0UocmVlbnFfZmxhZ3MgJmFtcDsgX19TQ1hfUkVFTlFfVFNSX01BU0spKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJlZW5xX2ZsYWdzICZhbXA7IF9fU0NYX1JFRU5RX1RTUl9NQVNLKSkKIAkJcmVlbnFfZmxhZ3MgJmFtcDs9IH5fX1NDWF9SRUVOUV9UU1JfTUFTSzsKIAlpZiAocnFfaXNfb3BlbihycSwgMCkpCiAJCXJlZW5xX2ZsYWdzIHw9IFNDWF9SRUVOUV9UU1JfUlFfT1BFTjsKQEAgLTQwNzgsNyAmIzQzOzQwNzgsNyBAQCBzdGF0aWMgdTMyIHJlZW5xX2xvY2FsKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSwgdTY0IHJlZW5xX2ZsYWdzKQogCiAJCWRpc3BhdGNoX2RlcXVldWUocnEsIHApOwogCi0JCWlmIChXQVJOX09OX09OQ0UocC0mZ3Q7c2N4LmZsYWdzICZhbXA7IFNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2N4LmZsYWdzICZhbXA7IFNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLKSkKIAkJCXAtJmd0O3NjeC5mbGFncyAmYW1wOz0gflNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLOwogCQlwLSZndDtzY3guZmxhZ3MgfD0gcmVhc29uOwogCkBAIC00MTk5LDcgJiM0Mzs0MTk5LDcgQEAgc3RhdGljIHZvaWQgcmVlbnFfdXNlcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSwgdTY0IHJlZW5xX2ZsYWcKIAkJZGlzcGF0Y2hfZGVxdWV1ZV9sb2NrZWQocCwgZHNxKTsKIAkJcmF3X3NwaW5fdW5sb2NrKCZhbXA7ZHNxLSZndDtsb2NrKTsKIAotCQlpZiAoV0FSTl9PTl9PTkNFKHAtJmd0O3NjeC5mbGFncyAmYW1wOyBTQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSykpCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtJmd0O3NjeC5mbGFncyAmYW1wOyBTQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSykpCiAJCQlwLSZndDtzY3guZmxhZ3MgJmFtcDs9IH5TQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSzsKIAkJcC0mZ3Q7c2N4LmZsYWdzIHw9IHJlYXNvbjsKIApAQCAtNDM2MCw3ICYjNDM7NDM2MCw3IEBAIGludCBzY3hfY2dyb3VwX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQogCQlzdHJ1Y3QgY2dyb3VwICpmcm9tID0gdGdfY2dycCh0YXNrX2dyb3VwKHApKTsKIAkJc3RydWN0IGNncm91cCAqdG8gPSB0Z19jZ3JwKGNzc190Zyhjc3MpKTsKIAotCQlXQVJOX09OX09OQ0UocC0mZ3Q7c2N4LmNncnBfbW92aW5nX2Zyb20pOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtJmd0O3NjeC5jZ3JwX21vdmluZ19mcm9tKTsKIAogCQkvKgogCQkgKiBzY2hlZF9tb3ZlX3Rhc2soKSBvbWl0cyBpZGVudGl0eSBtaWdyYXRpb25zLiBMZXQmIzM5O3MgbWF0Y2ggdGhlCkBAIC00NjE3LDcgJiM0Mzs0NjE3LDcgQEAgc3RhdGljIHZvaWQgZXhpdF9kc3Eoc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EpCiAJCSAqIFRoZXJlIG11c3QgaGF2ZSBiZWVuIGEgUkNVIGdyYWNlIHBlcmlvZCBzaW5jZSB0aGUgbGFzdAogCQkgKiBpbnNlcnRpb24gYW5kIEBkc3Egc2hvdWxkIGJlIG9mZiB0aGUgZGVmZXJyZWQgbGlzdCBieSBub3cuCiAJCSAqLwotCQlpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7ZHJ1LSZndDtub2RlKSkpIHsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoJmFtcDtkcnUtJmd0O25vZGUpKSkgewogCQkJZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKCZhbXA7cnEtJmd0O3NjeC5kZWZlcnJlZF9yZWVucV9sb2NrKTsKIAkJCWxpc3RfZGVsX2luaXQoJmFtcDtkcnUtJmd0O25vZGUpOwogCQl9CkBAIC00NzQ1LDcgJiM0Mzs0NzQ1LDcgQEAgc3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKQogCQl0Zy0mZ3Q7c2N4LmZsYWdzIHw9IFNDWF9UR19JTklURUQ7CiAJfQogCi0JV0FSTl9PTl9PTkNFKHNjeF9jZ3JvdXBfZW5hYmxlZCk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChzY3hfY2dyb3VwX2VuYWJsZWQpOwogCXNjeF9jZ3JvdXBfZW5hYmxlZCA9IHRydWU7CiAKIAlyZXR1cm4gMDsKQEAgLTQ4NDgsNyAmIzQzOzQ4NDgsNyBAQCBzdGF0aWMgdm9pZCBzY3hfc2NoZWRfZnJlZV9yY3Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCSAqIHBlcmlvZC4gQXMgdGhhdCBibG9ja3MgbmV3IGRlZmVycmFscywgYWxsCiAJCSAqIGRlZmVycmVkX3JlZW5xX2xvY2FsX25vZGUmIzM5O3MgbXVzdCBiZSBvZmYtbGlzdCBieSBub3cuCiAJCSAqLwotCQlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJmFtcDtwY3B1LSZndDtkZWZlcnJlZF9yZWVucV9sb2NhbC5ub2RlKSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoJmFtcDtwY3B1LSZndDtkZWZlcnJlZF9yZWVucV9sb2NhbC5ub2RlKSk7CiAKIAkJZXhpdF9kc3EoYnlwYXNzX2RzcShzY2gsIGNwdSkpOwogCX0KQEAgLTUzMjQsNyAmIzQzOzUzMjQsNyBAQCBzdGF0aWMgYm9vbCBpbmNfYnlwYXNzX2RlcHRoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCkKIHsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7c2N4X2J5cGFzc19sb2NrKTsKIAotCVdBUk5fT05fT05DRShzY2gtJmd0O2J5cGFzc19kZXB0aCAmbHQ7IDApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoc2NoLSZndDtieXBhc3NfZGVwdGggJmx0OyAwKTsKIAlXUklURV9PTkNFKHNjaC0mZ3Q7YnlwYXNzX2RlcHRoLCBzY2gtJmd0O2J5cGFzc19kZXB0aCAmIzQzOyAxKTsKIAlpZiAoc2NoLSZndDtieXBhc3NfZGVwdGggIT0gMSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNTMzOSw3ICYjNDM7NTMzOSw3IEBAIHN0YXRpYyBib29sIGRlY19ieXBhc3NfZGVwdGgoc3RydWN0IHNjeF9zY2hlZCAqc2NoKQogewogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtzY3hfYnlwYXNzX2xvY2spOwogCi0JV0FSTl9PTl9PTkNFKHNjaC0mZ3Q7YnlwYXNzX2RlcHRoICZsdDsgMSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChzY2gtJmd0O2J5cGFzc19kZXB0aCAmbHQ7IDEpOwogCVdSSVRFX09OQ0Uoc2NoLSZndDtieXBhc3NfZGVwdGgsIHNjaC0mZ3Q7YnlwYXNzX2RlcHRoIC0gMSk7CiAJaWYgKHNjaC0mZ3Q7YnlwYXNzX2RlcHRoICE9IDApCiAJCXJldHVybiBmYWxzZTsKQEAgLTUzNjAsNyAmIzQzOzUzNjAsNyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfYnlwYXNzX2RzcChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpCiAJICogQHNjaC0mZ3Q7YnlwYXNzX2RlcHRoIHRyYW5zaXRpb25pbmcgZnJvbSAwIHRvIDEgdHJpZ2dlcnMgZW5hYmxpbmcuCiAJICogU2hvdWxkbiYjMzk7dCBzdGFnZ2VyLgogCSAqLwotCWlmIChXQVJOX09OX09OQ0UodGVzdF9hbmRfc2V0X2JpdCgwLCAmYW1wO3NjaC0mZ3Q7YnlwYXNzX2RzcF9jbGFpbSkpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRlc3RfYW5kX3NldF9iaXQoMCwgJmFtcDtzY2gtJmd0O2J5cGFzc19kc3BfY2xhaW0pKSkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTUzODAsMTEgJiM0Mzs1MzgwLDExIEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9ieXBhc3NfZHNwKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCkKIAkgKiBCdW1wIGVuYWJsZSBkZXB0aCBvbiBib3RoIEBzY2ggYW5kIGJ5cGFzcyBkaXNwYXRjaCBob3N0LgogCSAqLwogCXJldCA9IGF0b21pY19pbmNfcmV0dXJuKCZhbXA7c2NoLSZndDtieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7Ci0JV0FSTl9PTl9PTkNFKHJldCAmbHQ7PSAwKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJldCAmbHQ7PSAwKTsKIAogCWlmIChob3N0ICE9IHNjaCkgewogCQlyZXQgPSBhdG9taWNfaW5jX3JldHVybigmYW1wO2hvc3QtJmd0O2J5cGFzc19kc3BfZW5hYmxlX2RlcHRoKTsKLQkJV0FSTl9PTl9PTkNFKHJldCAmbHQ7PSAwKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQgJmx0Oz0gMCk7CiAJfQogCiAJLyoKQEAgLTU0MDUsMTEgJiM0Mzs1NDA1LDExIEBAIHN0YXRpYyB2b2lkIGRpc2FibGVfYnlwYXNzX2RzcChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpCiAJCXJldHVybjsKIAogCXJldCA9IGF0b21pY19kZWNfcmV0dXJuKCZhbXA7c2NoLSZndDtieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7Ci0JV0FSTl9PTl9PTkNFKHJldCAmbHQ7IDApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocmV0ICZsdDsgMCk7CiAKIAlpZiAoc2N4X3BhcmVudChzY2gpKSB7CiAJCXJldCA9IGF0b21pY19kZWNfcmV0dXJuKCZhbXA7c2N4X3BhcmVudChzY2gpLSZndDtieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7Ci0JCVdBUk5fT05fT05DRShyZXQgJmx0OyAwKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQgJmx0OyAwKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jCmluZGV4IDNlYmVjMTg2Zjk4MjM2Li4xMjEzZTc3NjY1ZmU5MyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZmFpci5jCkBAIC00MDQsNyAmIzQzOzQwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2RlbF9sZWFmX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfbGlzdF9sZWFmX2Nmc19ycShzdHJ1Y3QgcnEgKnJxKQogewotCVdBUk5fT05fT05DRShycS0mZ3Q7dG1wX2Fsb25lX2JyYW5jaCAhPSAmYW1wO3JxLSZndDtsZWFmX2Nmc19ycV9saXN0KTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLSZndDt0bXBfYWxvbmVfYnJhbmNoICE9ICZhbXA7cnEtJmd0O2xlYWZfY2ZzX3JxX2xpc3QpOwogfQogCiAvKiBJdGVyYXRlIHRocm91Z2ggYWxsIGxlYWYgY2ZzX3JxJiMzOTtzIG9uIGEgcnVucXVldWUgKi8KQEAgLTY4OSw3ICYjNDM7Njg5LDcgQEAgX19zdW1fd192cnVudGltZV9hZGQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIAlzNjQgd192cnVudGltZSwga2V5ID0gZW50aXR5X2tleShjZnNfcnEsIHNlKTsKIAogCXdfdnJ1bnRpbWUgPSBrZXkgKiB3ZWlnaHQ7Ci0JV0FSTl9PTl9PTkNFKCh3X3ZydW50aW1lICZndDsmZ3Q7IDYzKSAhPSAod192cnVudGltZSAmZ3Q7Jmd0OyA2MikpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoKHdfdnJ1bnRpbWUgJmd0OyZndDsgNjMpICE9ICh3X3ZydW50aW1lICZndDsmZ3Q7IDYyKSk7CiAKIAljZnNfcnEtJmd0O3N1bV93X3ZydW50aW1lICYjNDM7PSB3X3ZydW50aW1lOwogCWNmc19ycS0mZ3Q7c3VtX3dlaWdodCAmIzQzOz0gd2VpZ2h0OwpAQCAtODYxLDcgJiM0Mzs4NjEsNyBAQCBib29sIHVwZGF0ZV9lbnRpdHlfbGFnKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCiAJdTY0IGF2cnVudGltZSA9IGF2Z192cnVudGltZShjZnNfcnEpOwogCXM2NCB2bGFnID0gZW50aXR5X2xhZyhjZnNfcnEsIHNlLCBhdnJ1bnRpbWUpOwogCi0JV0FSTl9PTl9PTkNFKCFzZS0mZ3Q7b25fcnEpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLSZndDtvbl9ycSk7CiAKIAlpZiAoc2UtJmd0O3NjaGVkX2RlbGF5ZWQpIHsKIAkJLyogcHJldmlvdXMgdmxhZyAmbHQ7IDAgb3RoZXJ3aXNlIHNlIHdvdWxkIG5vdCBiZSBkZWxheWVkICovCkBAIC0xMTUzLDcgJiM0MzsxMTUzLDcgQEAgc3RhdGljIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnBpY2tfZWV2ZGYoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBib29sIHByb3RlY3QpCiAJaWYgKHNjaGVkX2ZlYXQoUElDS19CVUREWSkgJmFtcDsmYW1wOyBwcm90ZWN0ICZhbXA7JmFtcDsKIAkgICAgY2ZzX3JxLSZndDtuZXh0ICZhbXA7JmFtcDsgZW50aXR5X2VsaWdpYmxlKGNmc19ycSwgY2ZzX3JxLSZndDtuZXh0KSkgewogCQkvKiAtJmd0O25leHQgd2lsbCBuZXZlciBiZSBkZWxheWVkICovCi0JCVdBUk5fT05fT05DRShjZnNfcnEtJmd0O25leHQtJmd0O3NjaGVkX2RlbGF5ZWQpOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS0mZ3Q7bmV4dC0mZ3Q7c2NoZWRfZGVsYXllZCk7CiAJCXJldHVybiBjZnNfcnEtJmd0O25leHQ7CiAJfQogCkBAIC00MzAyLDkgJiM0Mzs0MzAyLDkgQEAgc3RhdGljIGlubGluZSBib29sIGxvYWRfYXZnX2lzX2RlY2F5ZWQoc3RydWN0IHNjaGVkX2F2ZyAqc2EpCiAJICogTWFrZSBzdXJlIHRoYXQgcm91bmRpbmcgYW5kL29yIHByb3BhZ2F0aW9uIG9mIFBFTFQgdmFsdWVzIG5ldmVyCiAJICogYnJlYWsgdGhpcy4KIAkgKi8KLQlXQVJOX09OX09OQ0Uoc2EtJmd0O2xvYWRfYXZnIHx8Ci0JCSAgICAgIHNhLSZndDt1dGlsX2F2ZyB8fAotCQkgICAgICBzYS0mZ3Q7cnVubmFibGVfYXZnKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNhLSZndDtsb2FkX2F2ZyB8fAomIzQzOwkJCSAgICAgIHNhLSZndDt1dGlsX2F2ZyB8fAomIzQzOwkJCSAgICAgIHNhLSZndDtydW5uYWJsZV9hdmcpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC01NDYwLDcgJiM0Mzs1NDYwLDcgQEAgcGxhY2VfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBmbGFncykKIAogCQl3ZWlnaHQgPSBhdmdfdnJ1bnRpbWVfd2VpZ2h0KGNmc19ycSwgc2UtJmd0O2xvYWQud2VpZ2h0KTsKIAkJbGFnICo9IGxvYWQgJiM0Mzsgd2VpZ2h0OwotCQlpZiAoV0FSTl9PTl9PTkNFKCFsb2FkKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxvYWQpKQogCQkJbG9hZCA9IDE7CiAJCWxhZyA9IGRpdjY0X2xvbmcobGFnLCBsb2FkKTsKIApAQCAtNTY1Myw3ICYjNDM7NTY1Myw3IEBAIGRlcXVldWVfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBmbGFncykKIAljbGVhcl9idWRkaWVzKGNmc19ycSwgc2UpOwogCiAJaWYgKGZsYWdzICZhbXA7IERFUVVFVUVfREVMQVlFRCkgewotCQlXQVJOX09OX09OQ0UoIXNlLSZndDtzY2hlZF9kZWxheWVkKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRCghc2UtJmd0O3NjaGVkX2RlbGF5ZWQpOwogCX0gZWxzZSB7CiAJCWJvb2wgZGVsYXkgPSBzbGVlcDsKIAkJLyoKQEAgLTU2NjMsNyAmIzQzOzU2NjMsNyBAQCBkZXF1ZXVlX2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCBpbnQgZmxhZ3MpCiAJCWlmIChmbGFncyAmYW1wOyAoREVRVUVVRV9TUEVDSUFMIHwgREVRVUVVRV9USFJPVFRMRSkpCiAJCQlkZWxheSA9IGZhbHNlOwogCi0JCVdBUk5fT05fT05DRShkZWxheSAmYW1wOyZhbXA7IHNlLSZndDtzY2hlZF9kZWxheWVkKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRChkZWxheSAmYW1wOyZhbXA7IHNlLSZndDtzY2hlZF9kZWxheWVkKTsKIAogCQlpZiAoc2NoZWRfZmVhdChERUxBWV9ERVFVRVVFKSAmYW1wOyZhbXA7IGRlbGF5ICZhbXA7JmFtcDsKIAkJICAgICFlbnRpdHlfZWxpZ2libGUoY2ZzX3JxLCBzZSkpIHsKQEAgLTU3NDcsNyAmIzQzOzU3NDcsNyBAQCBzZXRfbmV4dF9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgYm9vbCBmaXJzdCkKIAl9CiAKIAl1cGRhdGVfc3RhdHNfY3Vycl9zdGFydChjZnNfcnEsIHNlKTsKLQlXQVJOX09OX09OQ0UoY2ZzX3JxLSZndDtjdXJyKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS0mZ3Q7Y3Vycik7CiAJY2ZzX3JxLSZndDtjdXJyID0gc2U7CiAKIAkvKgpAQCAtNTgxNCw3ICYjNDM7NTgxNCw3IEBAIHN0YXRpYyB2b2lkIHB1dF9wcmV2X2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnByZXYpCiAJCS8qIGluICFvbl9ycSBjYXNlLCB1cGRhdGUgb2NjdXJyZWQgYXQgZGVxdWV1ZSAqLwogCQl1cGRhdGVfbG9hZF9hdmcoY2ZzX3JxLCBwcmV2LCAwKTsKIAl9Ci0JV0FSTl9PTl9PTkNFKGNmc19ycS0mZ3Q7Y3VyciAhPSBwcmV2KTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS0mZ3Q7Y3VyciAhPSBwcmV2KTsKIAljZnNfcnEtJmd0O2N1cnIgPSBOVUxMOwogfQogCkBAIC02MDE1LDcgJiM0Mzs2MDE1LDcgQEAgc3RhdGljIHZvaWQgdGhyb3R0bGVfY2ZzX3JxX3dvcmsoc3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmspCiAJc3RydWN0IGNmc19ycSAqY2ZzX3JxOwogCXN0cnVjdCBycSAqcnE7CiAKLQlXQVJOX09OX09OQ0UocCAhPSBjdXJyZW50KTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAgIT0gY3VycmVudCk7CiAJcC0mZ3Q7c2NoZWRfdGhyb3R0bGVfd29yay5uZXh0ID0gJmFtcDtwLSZndDtzY2hlZF90aHJvdHRsZV93b3JrOwogCiAJLyoKQEAgLTYwNDEsNyAmIzQzOzYwNDEsNyBAQCBzdGF0aWMgdm9pZCB0aHJvdHRsZV9jZnNfcnFfd29yayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqd29yaykKIAkJCXJldHVybjsKIAkJcnEgPSBzY29wZS5ycTsKIAkJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKLQkJV0FSTl9PTl9PTkNFKHAtJmd0O3Rocm90dGxlZCB8fCAhbGlzdF9lbXB0eSgmYW1wO3AtJmd0O3Rocm90dGxlX25vZGUpKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRChwLSZndDt0aHJvdHRsZWQgfHwgIWxpc3RfZW1wdHkoJmFtcDtwLSZndDt0aHJvdHRsZV9ub2RlKSk7CiAJCWRlcXVldWVfdGFza19mYWlyKHJxLCBwLCBERVFVRVVFX1NMRUVQIHwgREVRVUVVRV9USFJPVFRMRSk7CiAJCWxpc3RfYWRkKCZhbXA7cC0mZ3Q7dGhyb3R0bGVfbm9kZSwgJmFtcDtjZnNfcnEtJmd0O3Rocm90dGxlZF9saW1ib19saXN0KTsKIAkJLyoKQEAgLTYwNzIsNyAmIzQzOzYwNzIsNyBAQCB2b2lkIGluaXRfY2ZzX3Rocm90dGxlX3dvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogc3RhdGljIHZvaWQgZGV0YWNoX3Rhc2tfY2ZzX3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiBzdGF0aWMgdm9pZCBkZXF1ZXVlX3Rocm90dGxlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKQogewotCVdBUk5fT05fT05DRShwLSZndDtzZS5vbl9ycSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChwLSZndDtzZS5vbl9ycSk7CiAJbGlzdF9kZWxfaW5pdCgmYW1wO3AtJmd0O3Rocm90dGxlX25vZGUpOwogCiAJLyogdGFzayBibG9ja2VkIGFmdGVyIHRocm90dGxlZCAqLwpAQCAtNjA5NCw3ICYjNDM7NjA5NCw3IEBAIHN0YXRpYyBib29sIGVucXVldWVfdGhyb3R0bGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IGNmc19ycV9vZigmYW1wO3AtJmd0O3NlKTsKIAogCS8qIEBwIHNob3VsZCBoYXZlIGdvbmUgdGhyb3VnaCBkZXF1ZXVlX3Rocm90dGxlZF90YXNrKCkgZmlyc3QgKi8KLQlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJmFtcDtwLSZndDt0aHJvdHRsZV9ub2RlKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eSgmYW1wO3AtJmd0O3Rocm90dGxlX25vZGUpKTsKIAogCS8qCiAJICogSWYgdGhlIHRocm90dGxlZCB0YXNrIEBwIGlzIGVucXVldWVkIHRvIGEgdGhyb3R0bGVkIGNmc19ycSwKQEAgLTYxNjIsNyAmIzQzOzYxNjIsNyBAQCBzdGF0aWMgaW50IHRnX3VudGhyb3R0bGVfdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB2b2lkICpkYXRhKQogCiAJCWNmc19ycS0mZ3Q7dGhyb3R0bGVkX2Nsb2NrX3NlbGYgPSAwOwogCi0JCWlmIChXQVJOX09OX09OQ0UoKHM2NClkZWx0YSAmbHQ7IDApKQomIzQzOwkJaWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCgoczY0KWRlbHRhICZsdDsgMCkpCiAJCQlkZWx0YSA9IDA7CiAKIAkJY2ZzX3JxLSZndDt0aHJvdHRsZWRfY2xvY2tfc2VsZl90aW1lICYjNDM7PSBkZWx0YTsKQEAgLTYyMzEsOCAmIzQzOzYyMzEsOCBAQCBzdGF0aWMgaW50IHRnX3Rocm90dGxlX2Rvd24oc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB2b2lkICpkYXRhKQogCQljZnNfcnEtJmd0O3BlbHRfY2xvY2tfdGhyb3R0bGVkID0gMTsKIAl9CiAKLQlXQVJOX09OX09OQ0UoY2ZzX3JxLSZndDt0aHJvdHRsZWRfY2xvY2tfc2VsZik7Ci0JV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7Y2ZzX3JxLSZndDt0aHJvdHRsZWRfbGltYm9fbGlzdCkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoY2ZzX3JxLSZndDt0aHJvdHRsZWRfY2xvY2tfc2VsZik7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eSgmYW1wO2Nmc19ycS0mZ3Q7dGhyb3R0bGVkX2xpbWJvX2xpc3QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjI3Myw3ICYjNDM7NjI3Myw3IEBAIHN0YXRpYyBib29sIHRocm90dGxlX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCiAJICogdGhyb3R0bGVkLWxpc3QuICBycS0mZ3Q7bG9jayBwcm90ZWN0cyBjb21wbGV0aW9uLgogCSAqLwogCWNmc19ycS0mZ3Q7dGhyb3R0bGVkID0gMTsKLQlXQVJOX09OX09OQ0UoY2ZzX3JxLSZndDt0aHJvdHRsZWRfY2xvY2spOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoY2ZzX3JxLSZndDt0aHJvdHRsZWRfY2xvY2spOwogCXJldHVybiB0cnVlOwogfQogCkBAIC02MzgwLDcgJiM0Mzs2MzgwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW50aHJvdHRsZV9jZnNfcnFfYXN5bmMoc3RydWN0IGNmc19ycSAqY2ZzX3JxKQogCX0KIAogCS8qIEFscmVhZHkgZW5xdWV1ZWQgKi8KLQlpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7Y2ZzX3JxLSZndDt0aHJvdHRsZWRfY3NkX2xpc3QpKSkKJiM0MzsJaWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eSgmYW1wO2Nmc19ycS0mZ3Q7dGhyb3R0bGVkX2NzZF9saXN0KSkpCiAJCXJldHVybjsKIAogCWZpcnN0ID0gbGlzdF9lbXB0eSgmYW1wO3JxLSZndDtjZnNiX2NzZF9saXN0KTsKQEAgLTYzOTMsNyAmIzQzOzYzOTMsNyBAQCBzdGF0aWMgdm9pZCB1bnRocm90dGxlX2Nmc19ycV9hc3luYyhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCiB7CiAJbG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZihjZnNfcnEpKTsKIAotCWlmIChXQVJOX09OX09OQ0UoIWNmc19ycV90aHJvdHRsZWQoY2ZzX3JxKSB8fAomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFjZnNfcnFfdGhyb3R0bGVkKGNmc19ycSkgfHwKIAkgICAgY2ZzX3JxLSZndDtydW50aW1lX3JlbWFpbmluZyAmbHQ7PSAwKSkKIAkJcmV0dXJuOwogCkBAIC02NDI5LDcgJiM0Mzs2NDI5LDcgQEAgc3RhdGljIGJvb2wgZGlzdHJpYnV0ZV9jZnNfcnVudGltZShzdHJ1Y3QgY2ZzX2JhbmR3aWR0aCAqY2ZzX2IpCiAJCQlnb3RvIG5leHQ7CiAKIAkJLyogQnkgdGhlIGFib3ZlIGNoZWNrcywgdGhpcyBzaG91bGQgbmV2ZXIgYmUgdHJ1ZSAqLwotCQlXQVJOX09OX09OQ0UoY2ZzX3JxLSZndDtydW50aW1lX3JlbWFpbmluZyAmZ3Q7IDApOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS0mZ3Q7cnVudGltZV9yZW1haW5pbmcgJmd0OyAwKTsKIAogCQlyYXdfc3Bpbl9sb2NrKCZhbXA7Y2ZzX2ItJmd0O2xvY2spOwogCQlydW50aW1lID0gLWNmc19ycS0mZ3Q7cnVudGltZV9yZW1haW5pbmcgJiM0MzsgMTsKQEAgLTY0NTAsNyAmIzQzOzY0NTAsNyBAQCBzdGF0aWMgYm9vbCBkaXN0cmlidXRlX2Nmc19ydW50aW1lKHN0cnVjdCBjZnNfYmFuZHdpZHRoICpjZnNfYikKIAkJCQkgKiBXZSBjdXJyZW50bHkgb25seSBleHBlY3QgdG8gYmUgdW50aHJvdHRsaW5nCiAJCQkJICogYSBzaW5nbGUgY2ZzX3JxIGxvY2FsbHkuCiAJCQkJICovCi0JCQkJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7bG9jYWxfdW50aHJvdHRsZSkpOwomIzQzOwkJCQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoJmFtcDtsb2NhbF91bnRocm90dGxlKSk7CiAJCQkJbGlzdF9hZGRfdGFpbCgmYW1wO2Nmc19ycS0mZ3Q7dGhyb3R0bGVkX2NzZF9saXN0LAogCQkJCQkgICAgICAmYW1wO2xvY2FsX3VudGhyb3R0bGUpOwogCQkJfQpAQCAtNjQ3NSw3ICYjNDM7NjQ3NSw3IEBAIHN0YXRpYyBib29sIGRpc3RyaWJ1dGVfY2ZzX3J1bnRpbWUoc3RydWN0IGNmc19iYW5kd2lkdGggKmNmc19iKQogCiAJCXJxX3VubG9ja19pcnFyZXN0b3JlKHJxLCAmYW1wO3JmKTsKIAl9Ci0JV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7bG9jYWxfdW50aHJvdHRsZSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoJmFtcDtsb2NhbF91bnRocm90dGxlKSk7CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtNzA0OCw3ICYjNDM7NzA0OCw3IEBAIHN0YXRpYyB2b2lkIGhydGlja19zdGFydF9mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAl1NjQgdmRlbHRhOwogCXU2NCBkZWx0YTsKIAotCVdBUk5fT05fT05DRSh0YXNrX3JxKHApICE9IHJxKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnEocCkgIT0gcnEpOwogCiAJaWYgKHJxLSZndDtjZnMuaF9ucl9xdWV1ZWQgJmx0Oz0gMSkKIAkJcmV0dXJuOwpAQCAtNzE3MSw4ICYjNDM7NzE3MSw4IEBAIHJlcXVldWVfZGVsYXllZF9lbnRpdHkoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCiAJICogQmVjYXVzZSBhIGRlbGF5ZWQgZW50aXR5IGlzIG9uZSB0aGF0IGlzIHN0aWxsIG9uCiAJICogdGhlIHJ1bnF1ZXVlIGNvbXBldGluZyB1bnRpbCBlbGVnaWJpbGl0eS4KIAkgKi8KLQlXQVJOX09OX09OQ0UoIXNlLSZndDtzY2hlZF9kZWxheWVkKTsKLQlXQVJOX09OX09OQ0UoIXNlLSZndDtvbl9ycSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghc2UtJmd0O3NjaGVkX2RlbGF5ZWQpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLSZndDtvbl9ycSk7CiAKIAlpZiAodXBkYXRlX2VudGl0eV9sYWcoY2ZzX3JxLCBzZSkpIHsKIAkJY2ZzX3JxLSZndDtucl9xdWV1ZWQtLTsKQEAgLTc0MDksOCAmIzQzOzc0MDksOCBAQCBzdGF0aWMgaW50IGRlcXVldWVfZW50aXRpZXMoc3RydWN0IHJxICpycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBmbGFncykKIAkJcnEtJmd0O25leHRfYmFsYW5jZSA9IGppZmZpZXM7CiAKIAlpZiAocCAmYW1wOyZhbXA7IHRhc2tfZGVsYXllZCkgewotCQlXQVJOX09OX09OQ0UoIXRhc2tfc2xlZXApOwotCQlXQVJOX09OX09OQ0UocC0mZ3Q7b25fcnEgIT0gMSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXRhc2tfc2xlZXApOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtJmd0O29uX3JxICE9IDEpOwogCiAJCS8qCiAJCSAqIEZpeC11cCB3aGF0IGJsb2NrX3Rhc2soKSBza2lwcGVkLgpAQCAtODk3Niw3ICYjNDM7ODk3Niw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZmFpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBhZmZpbml0eV9jb250ZXh0CiBzdGF0aWMgdm9pZCBzZXRfbmV4dF9idWRkeShzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIHsKIAlmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpIHsKLQkJaWYgKFdBUk5fT05fT05DRSghc2UtJmd0O29uX3JxKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLSZndDtvbl9ycSkpCiAJCQlyZXR1cm47CiAJCWlmIChzZV9pc19pZGxlKHNlKSkKIAkJCXJldHVybjsKQEAgLTkwMjMsNyAmIzQzOzkwMjMsNyBAQCBwcmVlbXB0X3N5bmMoc3RydWN0IHJxICpycSwgaW50IHdha2VfZmxhZ3MsCiAJICogV0ZfU1lOQyB3aXRob3V0IFdGX1RUV1UgaXMgbm90IGV4cGVjdGVkIHNvIHdhcm4gaWYgaXQgaGFwcGVucyBldmVuCiAJICogdGhvdWdoIGl0IGlzIGxpa2VseSBoYXJtbGVzcy4KIAkgKi8KLQlXQVJOX09OX09OQ0UoISh3YWtlX2ZsYWdzICZhbXA7IFdGX1RUV1UpKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCEod2FrZV9mbGFncyAmYW1wOyBXRl9UVFdVKSk7CiAKIAl0aHJlc2hvbGQgPSBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3Q7CiAJZGVsdGEgPSBycV9jbG9ja190YXNrKHJxKSAtIHNlLSZndDtleGVjX3N0YXJ0OwpAQCAtOTA5NSw3ICYjNDM7OTA5NSw3IEBAIHN0YXRpYyB2b2lkIHdha2V1cF9wcmVlbXB0X2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZV9mCiAJCXJldHVybjsKIAogCWZpbmRfbWF0Y2hpbmdfc2UoJmFtcDtzZSwgJmFtcDtwc2UpOwotCVdBUk5fT05fT05DRSghcHNlKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFwc2UpOwogCiAJY3NlX2lzX2lkbGUgPSBzZV9pc19pZGxlKHNlKTsKIAlwc2VfaXNfaWRsZSA9IHNlX2lzX2lkbGUocHNlKTsKQEAgLTk4NTcsOCAmIzQzOzk4NTcsOCBAQCBzdGF0aWMgdm9pZCBkZXRhY2hfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudikKIAkJc2NoZWRzdGF0X2luYyhwLSZndDtzdGF0cy5ucl9mb3JjZWRfbWlncmF0aW9ucyk7CiAJfQogCi0JV0FSTl9PTih0YXNrX2N1cnJlbnQoZW52LSZndDtzcmNfcnEsIHApKTsKLQlXQVJOX09OKHRhc2tfY3VycmVudF9kb25vcihlbnYtJmd0O3NyY19ycSwgcCkpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKHRhc2tfY3VycmVudChlbnYtJmd0O3NyY19ycSwgcCkpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKHRhc2tfY3VycmVudF9kb25vcihlbnYtJmd0O3NyY19ycSwgcCkpOwogCiAJZGVhY3RpdmF0ZV90YXNrKGVudi0mZ3Q7c3JjX3JxLCBwLCBERVFVRVVFX05PQ0xPQ0spOwogCXNldF90YXNrX2NwdShwLCBlbnYtJmd0O2RzdF9jcHUpOwpAQCAtMTIxNTEsNyAmIzQzOzEyMTUxLDcgQEAgc3RhdGljIGludCBzY2hlZF9iYWxhbmNlX3JxKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLAogCQlnb3RvIG91dF9iYWxhbmNlZDsKIAl9CiAKLQlXQVJOX09OX09OQ0UoYnVzaWVzdCA9PSBlbnYuZHN0X3JxKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGJ1c2llc3QgPT0gZW52LmRzdF9ycSk7CiAKIAl1cGRhdGVfbGJfaW1iYWxhbmNlX3N0YXQoJmFtcDtlbnYsIHNkLCBpZGxlKTsKIApAQCAtMTI0NjEsNyAmIzQzOzEyNDYxLDcgQEAgc3RhdGljIGludCBhY3RpdmVfbG9hZF9iYWxhbmNlX2NwdV9zdG9wKHZvaWQgKmRhdGEpCiAJICogd2UgbmVlZCB0byBmaXggaXQuIE9yaWdpbmFsbHkgcmVwb3J0ZWQgYnkKIAkgKiBCam9ybiBIZWxnYWFzIG9uIGEgMTI4LUNQVSBzZXR1cC4KIAkgKi8KLQlXQVJOX09OX09OQ0UoYnVzaWVzdF9ycSA9PSB0YXJnZXRfcnEpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoYnVzaWVzdF9ycSA9PSB0YXJnZXRfcnEpOwogCiAJLyogU2VhcmNoIGZvciBhbiBzZCBzcGFubmluZyB1cyBhbmQgdGhlIHRhcmdldCBDUFUuICovCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTI4ODMsNyAmIzQzOzEyODgzLDcgQEAgc3RhdGljIHZvaWQgc2V0X2NwdV9zZF9zdGF0ZV9idXN5KGludCBjcHUpCiAKIHZvaWQgbm9oel9iYWxhbmNlX2V4aXRfaWRsZShzdHJ1Y3QgcnEgKnJxKQogewotCVdBUk5fT05fT05DRShycSAhPSB0aGlzX3JxKCkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocnEgIT0gdGhpc19ycSgpKTsKIAogCWlmIChsaWtlbHkoIXJxLSZndDtub2h6X3RpY2tfc3RvcHBlZCkpCiAJCXJldHVybjsKQEAgLTEyOTE4LDcgJiM0MzsxMjkxOCw3IEBAIHZvaWQgbm9oel9iYWxhbmNlX2VudGVyX2lkbGUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CiAKLQlXQVJOX09OX09OQ0UoY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCS8qIElmIHRoaXMgQ1BVIGlzIGdvaW5nIGRvd24sIHRoZW4gbm90aGluZyBuZWVkcyB0byBiZSBkb25lOiAqLwogCWlmICghY3B1X2FjdGl2ZShjcHUpKQpAQCAtMTMwMDAsNyAmIzQzOzEzMDAwLDcgQEAgc3RhdGljIHZvaWQgX25vaHpfaWRsZV9iYWxhbmNlKHN0cnVjdCBycSAqdGhpc19ycSwgdW5zaWduZWQgaW50IGZsYWdzKQogCWludCBiYWxhbmNlX2NwdTsKIAlzdHJ1Y3QgcnEgKnJxOwogCi0JV0FSTl9PTl9PTkNFKChmbGFncyAmYW1wOyBOT0haX0tJQ0tfTUFTSykgPT0gTk9IWl9CQUxBTkNFX0tJQ0spOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoKGZsYWdzICZhbXA7IE5PSFpfS0lDS19NQVNLKSA9PSBOT0haX0JBTEFOQ0VfS0lDSyk7CiAKIAkvKgogCSAqIFdlIGFzc3VtZSB0aGVyZSB3aWxsIGJlIG5vIGlkbGUgbG9hZCBhZnRlciB0aGlzIHVwZGF0ZSBhbmQgY2xlYXIKQEAgLTEzNjIzLDcgJiM0MzsxMzYyMyw3IEBAIGJvb2wgY2ZzX3ByaW9fbGVzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmEsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqYiwKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnFiOwogCXM2NCBkZWx0YTsKIAotCVdBUk5fT05fT05DRSh0YXNrX3JxKGIpLSZndDtjb3JlICE9IHJxLSZndDtjb3JlKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnEoYiktJmd0O2NvcmUgIT0gcnEtJmd0O2NvcmUpOwogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIAkvKgpAQCAtMTM4MzksNyAmIzQzOzEzODM5LDcgQEAgc3RhdGljIHZvaWQgc3dpdGNoZWRfZnJvbV9mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAogc3RhdGljIHZvaWQgc3dpdGNoZWRfdG9fZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JV0FSTl9PTl9PTkNFKHAtJmd0O3NlLnNjaGVkX2RlbGF5ZWQpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2Uuc2NoZWRfZGVsYXllZCk7CiAKIAlhdHRhY2hfdGFza19jZnNfcnEocCk7CiAKQEAgLTEzODcyLDcgJiM0MzsxMzg3Miw3IEBAIHN0YXRpYyB2b2lkIF9fc2V0X25leHRfdGFza19mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBmaXJzCiAJaWYgKCFmaXJzdCkKIAkJcmV0dXJuOwogCi0JV0FSTl9PTl9PTkNFKHNlLSZndDtzY2hlZF9kZWxheWVkKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNlLSZndDtzY2hlZF9kZWxheWVkKTsKIAogCWlmIChocnRpY2tfZW5hYmxlZF9mYWlyKHJxKSkKIAkJaHJ0aWNrX3N0YXJ0X2ZhaXIocnEsIHApOwpAQCAtMTQxNDgsNyAmIzQzOzE0MTQ4LDcgQEAgaW50IHNjaGVkX2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgbG9uZyBpZGxlKQogCQlycV9sb2NrX2lycXNhdmUocnEsICZhbXA7cmYpOwogCiAJCWdycF9jZnNfcnEtJmd0O2lkbGUgPSBpZGxlOwotCQlpZiAoV0FSTl9PTl9PTkNFKHdhc19pZGxlID09IGNmc19ycV9pc19pZGxlKGdycF9jZnNfcnEpKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQod2FzX2lkbGUgPT0gY2ZzX3JxX2lzX2lkbGUoZ3JwX2Nmc19ycSkpKQogCQkJZ290byBuZXh0X2NwdTsKIAogCQlpZGxlX3Rhc2tfZGVsdGEgPSBncnBfY2ZzX3JxLSZndDtoX25yX3F1ZXVlZCAtCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvcnQuYyBiL2tlcm5lbC9zY2hlZC9ydC5jCmluZGV4IDRlZThmYWYwMTQ0MWEzLi41MDZkMGYxYWZhNThmOSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL3J0LmMKQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9ydF9iYW5kd2lkdGgoc3RydWN0IHJ0X2JhbmR3aWR0aCAqcnRfYikKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0X3Rhc2tfb2Yoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCiB7Ci0JV0FSTl9PTl9PTkNFKCFydF9lbnRpdHlfaXNfdGFzayhydF9zZSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJ0X2VudGl0eV9pc190YXNrKHJ0X3NlKSk7CiAKIAlyZXR1cm4gY29udGFpbmVyX29mKHJ0X3NlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJ0KTsKIH0KQEAgLTE3OCwxMyAmIzQzOzE3OCwxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogewogCS8qIENhbm5vdCBmb2xkIHdpdGggbm9uLUNPTkZJR19SVF9HUk9VUF9TQ0hFRCB2ZXJzaW9uLCBsYXlvdXQgKi8KLQlXQVJOX09OKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkgJmFtcDsmYW1wOyBydF9ycS0mZ3Q7dGcgIT0gJmFtcDtyb290X3Rhc2tfZ3JvdXApOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkgJmFtcDsmYW1wOyBydF9ycS0mZ3Q7dGcgIT0gJmFtcDtyb290X3Rhc2tfZ3JvdXApOwogCXJldHVybiBydF9ycS0mZ3Q7cnE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKIHsKLQlXQVJOX09OKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkgJmFtcDsmYW1wOyBydF9zZS0mZ3Q7cnRfcnEtJmd0O3RnICE9ICZhbXA7cm9vdF90YXNrX2dyb3VwKTsKJiM0MzsJV0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpICZhbXA7JmFtcDsgcnRfc2UtJmd0O3J0X3JxLSZndDt0ZyAhPSAmYW1wO3Jvb3RfdGFza19ncm91cCk7CiAJcmV0dXJuIHJ0X3NlLSZndDtydF9ycTsKIH0KIApAQCAtMTkyLDcgJiM0MzsxOTIsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCiB7CiAJc3RydWN0IHJ0X3JxICpydF9ycSA9IHJ0X3NlLSZndDtydF9ycTsKIAotCVdBUk5fT04oIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSAmYW1wOyZhbXA7IHJ0X3JxLSZndDt0ZyAhPSAmYW1wO3Jvb3RfdGFza19ncm91cCk7CiYjNDM7CVdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSAmYW1wOyZhbXA7IHJ0X3JxLSZndDt0ZyAhPSAmYW1wO3Jvb3RfdGFza19ncm91cCk7CiAJcmV0dXJuIHJ0X3JxLSZndDtycTsKIH0KIApAQCAtNDkzLDcgJiM0Mzs0OTMsNyBAQCB0eXBlZGVmIHN0cnVjdCB0YXNrX2dyb3VwICpydF9ycV9pdGVyX3Q7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX2dyb3VwICpuZXh0X3Rhc2tfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKQogewogCWlmICghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpKSB7Ci0JCVdBUk5fT04odGcgIT0gJmFtcDtyb290X3Rhc2tfZ3JvdXApOwomIzQzOwkJV0FSTl9PTl9ERUZFUlJFRCh0ZyAhPSAmYW1wO3Jvb3RfdGFza19ncm91cCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNzIzLDcgJiM0Mzs3MjMsNyBAQCBzdGF0aWMgdm9pZCBfX2Rpc2FibGVfcnVudGltZShzdHJ1Y3QgcnEgKnJxKQogCQkgKiBXZSBjYW5ub3QgYmUgbGVmdCB3YW50aW5nIC0gdGhhdCB3b3VsZCBtZWFuIHNvbWUgcnVudGltZQogCQkgKiBsZWFrZWQgb3V0IG9mIHRoZSBzeXN0ZW0uCiAJCSAqLwotCQlXQVJOX09OX09OQ0Uod2FudCk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQod2FudCk7CiBiYWxhbmNlZDoKIAkJLyoKIAkJICogRGlzYWJsZSBhbGwgdGhlIGJvcnJvdyBsb2dpYyBieSBwcmV0ZW5kaW5nIHdlIGhhdmUgaW5mCkBAIC0xMDk0LDcgJiM0MzsxMDk0LDcgQEAgZGVjX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pCiAKIAlpZiAocnRfcnEtJmd0O3J0X25yX3J1bm5pbmcpIHsKIAotCQlXQVJOX09OKHByaW8gJmx0OyBwcmV2X3ByaW8pOwomIzQzOwkJV0FSTl9PTl9ERUZFUlJFRChwcmlvICZsdDsgcHJldl9wcmlvKTsKIAogCQkvKgogCQkgKiBUaGlzIG1heSBoYXZlIGJlZW4gb3VyIGhpZ2hlc3QgdGFzaywgYW5kIHRoZXJlZm9yZQpAQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIGRlY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKIAlpZiAocnRfc2VfYm9vc3RlZChydF9zZSkpCiAJCXJ0X3JxLSZndDtydF9ucl9ib29zdGVkLS07CiAKLQlXQVJOX09OKCFydF9ycS0mZ3Q7cnRfbnJfcnVubmluZyAmYW1wOyZhbXA7IHJ0X3JxLSZndDtydF9ucl9ib29zdGVkKTsKJiM0MzsJV0FSTl9PTl9ERUZFUlJFRCghcnRfcnEtJmd0O3J0X25yX3J1bm5pbmcgJmFtcDsmYW1wOyBydF9ycS0mZ3Q7cnRfbnJfYm9vc3RlZCk7CiB9CiAKICNlbHNlIC8qICFDT05GSUdfUlRfR1JPVVBfU0NIRUQ6ICovCkBAIC0xMTc2LDcgJiM0MzsxMTc2LDcgQEAgdm9pZCBpbmNfcnRfdGFza3Moc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7CiAJaW50IHByaW8gPSBydF9zZV9wcmlvKHJ0X3NlKTsKIAotCVdBUk5fT04oIXJ0X3ByaW8ocHJpbykpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKCFydF9wcmlvKHByaW8pKTsKIAlydF9ycS0mZ3Q7cnRfbnJfcnVubmluZyAmIzQzOz0gcnRfc2VfbnJfcnVubmluZyhydF9zZSk7CiAJcnRfcnEtJmd0O3JyX25yX3J1bm5pbmcgJiM0Mzs9IHJ0X3NlX3JyX25yX3J1bm5pbmcocnRfc2UpOwogCkBAIC0xMTg3LDggJiM0MzsxMTg3LDggQEAgdm9pZCBpbmNfcnRfdGFza3Moc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCiBzdGF0aWMgaW5saW5lCiB2b2lkIGRlY19ydF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKLQlXQVJOX09OKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7Ci0JV0FSTl9PTighcnRfcnEtJmd0O3J0X25yX3J1bm5pbmcpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7CiYjNDM7CVdBUk5fT05fREVGRVJSRUQoIXJ0X3JxLSZndDtydF9ucl9ydW5uaW5nKTsKIAlydF9ycS0mZ3Q7cnRfbnJfcnVubmluZyAtPSBydF9zZV9ucl9ydW5uaW5nKHJ0X3NlKTsKIAlydF9ycS0mZ3Q7cnJfbnJfcnVubmluZyAtPSBydF9zZV9ycl9ucl9ydW5uaW5nKHJ0X3NlKTsKIApAQCAtMTM0OCw3ICYjNDM7MTM0OCw3IEBAIHN0YXRpYyB2b2lkIF9fZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHVuc2lnbmVkIGludCBmbGFnCiAJfQogCiAJaWYgKG1vdmVfZW50aXR5KGZsYWdzKSkgewotCQlXQVJOX09OX09OQ0UocnRfc2UtJmd0O29uX2xpc3QpOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJ0X3NlLSZndDtvbl9saXN0KTsKIAkJaWYgKGZsYWdzICZhbXA7IEVOUVVFVUVfSEVBRCkKIAkJCWxpc3RfYWRkKCZhbXA7cnRfc2UtJmd0O3J1bl9saXN0LCBxdWV1ZSk7CiAJCWVsc2UKQEAgLTEzNjgsNyAmIzQzOzEzNjgsNyBAQCBzdGF0aWMgdm9pZCBfX2RlcXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCB1bnNpZ25lZCBpbnQgZmxhZwogCXN0cnVjdCBydF9wcmlvX2FycmF5ICphcnJheSA9ICZhbXA7cnRfcnEtJmd0O2FjdGl2ZTsKIAogCWlmIChtb3ZlX2VudGl0eShmbGFncykpIHsKLQkJV0FSTl9PTl9PTkNFKCFydF9zZS0mZ3Q7b25fbGlzdCk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJ0X3NlLSZndDtvbl9saXN0KTsKIAkJX19kZWxpc3RfcnRfZW50aXR5KHJ0X3NlLCBhcnJheSk7CiAJfQogCXJ0X3NlLSZndDtvbl9ycSA9IDA7CkBAIC0xNjg0LDcgJiM0MzsxNjg0LDcgQEAgc3RhdGljIHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnBpY2tfbmV4dF9ydF9lbnRpdHkoc3RydWN0IHJ0X3JxICpydF9ycSkKIAlCVUdfT04oaWR4ICZndDs9IE1BWF9SVF9QUklPKTsKIAogCXF1ZXVlID0gYXJyYXktJmd0O3F1ZXVlICYjNDM7IGlkeDsKLQlpZiAoV0FSTl9PTl9PTkNFKGxpc3RfZW1wdHkocXVldWUpKSkKJiM0MzsJaWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChsaXN0X2VtcHR5KHF1ZXVlKSkpCiAJCXJldHVybiBOVUxMOwogCW5leHQgPSBsaXN0X2VudHJ5KHF1ZXVlLSZndDtuZXh0LCBzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5LCBydW5fbGlzdCk7CiAKQEAgLTIwMTYsNyAmIzQzOzIwMTYsNyBAQCBzdGF0aWMgaW50IHB1c2hfcnRfdGFzayhzdHJ1Y3QgcnEgKnJxLCBib29sIHB1bGwpCiAJCXJldHVybiAwOwogCX0KIAotCWlmIChXQVJOX09OKG5leHRfdGFzayA9PSBycS0mZ3Q7Y3VycikpCiYjNDM7CWlmIChXQVJOX09OX0RFRkVSUkVEKG5leHRfdGFzayA9PSBycS0mZ3Q7Y3VycikpCiAJCXJldHVybiAwOwogCiAJLyogV2UgbWlnaHQgcmVsZWFzZSBycSBsb2NrICovCkBAIC0yMzE2LDggJiM0MzsyMzE2LDggQEAgc3RhdGljIHZvaWQgcHVsbF9ydF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSkKIAkJICogdGhlIHRvLWJlLXNjaGVkdWxlZCB0YXNrPwogCQkgKi8KIAkJaWYgKHAgJmFtcDsmYW1wOyAocC0mZ3Q7cHJpbyAmbHQ7IHRoaXNfcnEtJmd0O3J0LmhpZ2hlc3RfcHJpby5jdXJyKSkgewotCQkJV0FSTl9PTihwID09IHNyY19ycS0mZ3Q7Y3Vycik7Ci0JCQlXQVJOX09OKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7CiYjNDM7CQkJV0FSTl9PTl9ERUZFUlJFRChwID09IHNyY19ycS0mZ3Q7Y3Vycik7CiYjNDM7CQkJV0FSTl9PTl9ERUZFUlJFRCghdGFza19vbl9ycV9xdWV1ZWQocCkpOwogCiAJCQkvKgogCQkJICogVGhlcmUmIzM5O3MgYSBjaGFuY2UgdGhhdCBwIGlzIGhpZ2hlciBpbiBwcmlvcml0eQpAQCAtMjU4Myw3ICYjNDM7MjU4Myw3IEBAIHN0YXRpYyBpbnQgdGFza19pc190aHJvdHRsZWRfcnQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KQogCiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVEIC8vIFhYWCBtYXliZSBhZGQgdGFza19ydF9ycSgpLCBzZWUgYWxzbyBzY2hlZF9ydF9wZXJpb2RfcnRfcnEKIAlydF9ycSA9IHRhc2tfZ3JvdXAocCktJmd0O3J0X3JxW2NwdV07Ci0JV0FSTl9PTighcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpICZhbXA7JmFtcDsgcnRfcnEtJmd0O3RnICE9ICZhbXA7cm9vdF90YXNrX2dyb3VwKTsKJiM0MzsJV0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpICZhbXA7JmFtcDsgcnRfcnEtJmd0O3RnICE9ICZhbXA7cm9vdF90YXNrX2dyb3VwKTsKICNlbHNlCiAJcnRfcnEgPSAmYW1wO2NwdV9ycShjcHUpLSZndDtydDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3NjaGVkLmggYi9rZXJuZWwvc2NoZWQvc2NoZWQuaAppbmRleCA5ZjYzYjE1ZDMwOWQxMS4uZjc0ZjljZDQ0ZTA5ODYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oCkBAIC0xNjg0LDcgJiM0MzsxNjg0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9pZGxlX2NvcmUoc3RydWN0IHJxICpycSkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX29mKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQogewotCVdBUk5fT05fT05DRSghZW50aXR5X2lzX3Rhc2soc2UpKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFlbnRpdHlfaXNfdGFzayhzZSkpOwogCXJldHVybiBjb250YWluZXJfb2Yoc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgc2UpOwogfQogCkBAIC0xNzY2LDcgJiM0MzsxNzY2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9jbG9ja191cGRhdGVkKHN0cnVjdCBycSAqcnEpCiAJICogVGhlIG9ubHkgcmVhc29uIGZvciBub3Qgc2VlaW5nIGEgY2xvY2sgdXBkYXRlIHNpbmNlIHRoZQogCSAqIGxhc3QgcnFfcGluX2xvY2soKSBpcyBpZiB3ZSYjMzk7cmUgY3VycmVudGx5IHNraXBwaW5nIHVwZGF0ZXMuCiAJICovCi0JV0FSTl9PTl9PTkNFKHJxLSZndDtjbG9ja191cGRhdGVfZmxhZ3MgJmx0OyBSUUNGX0FDVF9TS0lQKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLSZndDtjbG9ja191cGRhdGVfZmxhZ3MgJmx0OyBSUUNGX0FDVF9TS0lQKTsKIH0KIAogc3RhdGljIGlubGluZSB1NjQgcnFfY2xvY2soc3RydWN0IHJxICpycSkKQEAgLTE4MTMsNyAmIzQzOzE4MTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnFfY2xvY2tfY2FuY2VsX3NraXB1cGRhdGUoc3RydWN0IHJxICpycSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBycV9jbG9ja19zdGFydF9sb29wX3VwZGF0ZShzdHJ1Y3QgcnEgKnJxKQogewogCWxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpOwotCVdBUk5fT05fT05DRShycS0mZ3Q7Y2xvY2tfdXBkYXRlX2ZsYWdzICZhbXA7IFJRQ0ZfQUNUX1NLSVApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtJmd0O2Nsb2NrX3VwZGF0ZV9mbGFncyAmYW1wOyBSUUNGX0FDVF9TS0lQKTsKIAlycS0mZ3Q7Y2xvY2tfdXBkYXRlX2ZsYWdzIHw9IFJRQ0ZfQUNUX1NLSVA7CiB9CiAKQEAgLTE4NzAsOSAmIzQzOzE4NzAsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2N4X3JxX2Nsb2NrX2ludmFsaWRhdGUoc3RydWN0IHJxICpycSkge30KIAogc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9iYWxhbmNlX2NhbGxiYWNrc19lbXB0eShzdHJ1Y3QgcnEgKnJxKQogewotCVdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKSAmYW1wOyZhbXA7Ci0JCSAgICAgcnEtJmd0O2JhbGFuY2VfY2FsbGJhY2sgJmFtcDsmYW1wOwotCQkgICAgIHJxLSZndDtiYWxhbmNlX2NhbGxiYWNrICE9ICZhbXA7YmFsYW5jZV9wdXNoX2NhbGxiYWNrKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX0xPQ0tJTkcpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgICBycS0mZ3Q7YmFsYW5jZV9jYWxsYmFjayAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAgcnEtJmd0O2JhbGFuY2VfY2FsbGJhY2sgIT0gJmFtcDtiYWxhbmNlX3B1c2hfY2FsbGJhY2spOwogfQogCiAvKgpAQCAtMjY4MSw3ICYjNDM7MjY4MSw3IEBAIHN0cnVjdCBzY2hlZF9jbGFzcyB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIHsKLQlXQVJOX09OX09OQ0UocnEtJmd0O2Rvbm9yICE9IHByZXYpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtJmd0O2Rvbm9yICE9IHByZXYpOwogCXByZXYtJmd0O3NjaGVkX2NsYXNzLSZndDtwdXRfcHJldl90YXNrKHJxLCBwcmV2LCBOVUxMKTsKIH0KIApAQCAtMjcwNCw3ICYjNDM7MjcwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl9zZXRfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsCiAJCQkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKIHsKLQlXQVJOX09OX09OQ0UocnEtJmd0O2Rvbm9yICE9IHByZXYpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtJmd0O2Rvbm9yICE9IHByZXYpOwogCiAJX19wdXRfcHJldl9zZXRfbmV4dF9kbF9zZXJ2ZXIocnEsIHByZXYsIG5leHQpOwogCkBAIC0zMDMwLDcgJiM0MzszMDMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGF0dGFjaF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTsKIAotCVdBUk5fT05fT05DRSh0YXNrX3JxKHApICE9IHJxKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnEocCkgIT0gcnEpOwogCWFjdGl2YXRlX3Rhc2socnEsIHAsIEVOUVVFVUVfTk9DTE9DSyk7CiAJd2FrZXVwX3ByZWVtcHQocnEsIHAsIDApOwogfQpkaWZmIC0tZ2l0IGEvbGliL2J1Zy5jIGIvbGliL2J1Zy5jCmluZGV4IDIyNGY0Y2ZhNGFhMzEyLi5mNTc2OGY1ZDE3YjQ3OSAxMDA2NDQKLS0tIGEvbGliL2J1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9idWcuYwpAQCAtMTk2LDcgJiM0MzsxOTYsNyBAQCB2b2lkIF9fd2Fybl9wcmludGYoY29uc3QgY2hhciAqZm10LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAogc3RhdGljIGVudW0gYnVnX3RyYXBfdHlwZSBfX3JlcG9ydF9idWcoc3RydWN0IGJ1Z19lbnRyeSAqYnVnLCB1bnNpZ25lZCBsb25nIGJ1Z2FkZHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWJvb2wgd2FybmluZywgb25jZSwgZG9uZSwgbm9fY3V0LCBoYXNfYXJnczsKJiM0MzsJYm9vbCB3YXJuaW5nLCBvbmNlLCBkb25lLCBub19jdXQsIGhhc19hcmdzLCBkZWZlcnJlZDsKIAljb25zdCBjaGFyICpmaWxlLCAqZm10OwogCXVuc2lnbmVkIGxpbmU7CiAKQEAgLTIxOSw2ICYjNDM7MjE5LDcgQEAgc3RhdGljIGVudW0gYnVnX3RyYXBfdHlwZSBfX3JlcG9ydF9idWcoc3RydWN0IGJ1Z19lbnRyeSAqYnVnLCB1bnNpZ25lZCBsb25nIGJ1Z2EKIAlkb25lICAgICA9IGJ1Zy0mZ3Q7ZmxhZ3MgJmFtcDsgQlVHRkxBR19ET05FOwogCW5vX2N1dCAgID0gYnVnLSZndDtmbGFncyAmYW1wOyBCVUdGTEFHX05PX0NVVF9IRVJFOwogCWhhc19hcmdzID0gYnVnLSZndDtmbGFncyAmYW1wOyBCVUdGTEFHX0FSR1M7CiYjNDM7CWRlZmVycmVkID0gYnVnLSZndDtmbGFncyAmYW1wOyBCVUdGTEFHX0RFRkVSUkVEOwogCiAJaWYgKHdhcm5pbmcgJmFtcDsmYW1wOyBvbmNlKSB7CiAJCWlmIChkb25lKQpAQCAtMjI5LDcgJiM0MzsyMzAsMTAgQEAgc3RhdGljIGVudW0gYnVnX3RyYXBfdHlwZSBfX3JlcG9ydF9idWcoc3RydWN0IGJ1Z19lbnRyeSAqYnVnLCB1bnNpZ25lZCBsb25nIGJ1Z2EKIAkJICovCiAJCWJ1Zy0mZ3Q7ZmxhZ3MgfD0gQlVHRkxBR19ET05FOwogCX0KLQomIzQzOwlpZiAoZGVmZXJyZWQpIHsKJiM0MzsJCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CiYjNDM7CQlwcmludGtfZGVmZXJyZWRfZW50ZXIoKTsKJiM0MzsJfQogCS8qCiAJICogQlVHKCkgYW5kIFdBUk5fT04oKSBmYW1pbGllcyBkb24mIzM5O3QgcHJpbnQgYSBjdXN0b20gZGVidWcgbWVzc2FnZQogCSAqIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSBleGNlcHRpb24gaGFuZGxlciwgc28gd2UgbXVzdCBhZGQgdGhlCkBAIC0yNDUsNiAmIzQzOzI0OSwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYQogCQkvKiB0aGlzIGlzIGEgV0FSTl9PTiByYXRoZXIgdGhhbiBCVUcvQlVHX09OICovCiAJCV9fd2FybihmaWxlLCBsaW5lLCAodm9pZCAqKWJ1Z2FkZHIsIEJVR19HRVRfVEFJTlQoYnVnKSwgcmVncywKIAkJICAgICAgIE5VTEwpOwomIzQzOwkJaWYgKGRlZmVycmVkKSB7CiYjNDM7CQkJcHJpbnRrX2RlZmVycmVkX2V4aXQoKTsKJiM0MzsJCQlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiYjNDM7CQl9CiAJCXJldHVybiBCVUdfVFJBUF9UWVBFX1dBUk47CiAJfQogCkBAIC0yNTQsNiAmIzQzOzI2MiwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYQogCQlwcl9jcml0KCYjMzQ7a2VybmVsIEJVRyBhdCAlcEIgW3ZlcmJvc2UgZGVidWcgaW5mbyB1bmF2YWlsYWJsZV1cbiYjMzQ7LAogCQkJKHZvaWQgKilidWdhZGRyKTsKIAomIzQzOwlpZiAoZGVmZXJyZWQpIHsKJiM0MzsJCXByaW50a19kZWZlcnJlZF9leGl0KCk7CiYjNDM7CQlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiYjNDM7CX0KIAlyZXR1cm4gQlVHX1RSQVBfVFlQRV9CVUc7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNDUKCQkJCQkJCW91dHB1dDogMTA0CgkJCQkJCQl0aG91Z2h0czogMTc3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgJiMzNDtEZWZlcnJlZCBXYXJuaW5nJiMzNDsgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbnRyb2R1Y2luZyBgV0FSTl9PTl9ERUZFUlJFRGAgYW5kIGBXQVJOX09OX09OQ0VfREVGRVJSRURgIGFuZCB1c2luZyB0aGVtIHRvIHJlcGxhY2UgdGhlIGV4aXN0aW5nIGBXQVJOX09OYCBhbmQgYFdBUk5fT05fT05DRWAgY2FsbHMgd2l0aGluIHRoZSBzY2hlZHVsZXIgY29kZSAoYGtlcm5lbC9zY2hlZC9gKS4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIG1vZGlmaWNhdGlvbiBpbiBgbGliL2J1Zy5jYCB0byBoYW5kbGUgYSBgQlVHRkxBR19ERUZFUlJFRGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSAmIzM0O3dvcnRoeSYjMzQ7IHBhdGNoIHRvIHRlc3QuCgpEaWdnaW5nIGludG8gYGxpYi9idWcuY2AsIGl0IGxvb2tzIGxpa2UgdGhlIGBCVUdGTEFHX0RFRkVSUkVEYCBmbGFnLCB3aGVuIHNldCwgd2lsbCBtYWtlIHRoZSB3YXJuaW5nIHVzZSBkZWZlcnJlZCBwcmludGluZyB3aXRoIGBwcmludGtfZGVmZXJyZWRfZW50ZXIoKWAgYW5kIGBwcmludGtfZGVmZXJyZWRfZXhpdCgpYC4gVGhpcyBpcyBlc3NlbnRpYWxseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgdGhlIHdhcm5pbmdzIHdpbGwgbm93IGJlIGRlZmVycmVkLiBJIGRvIG5lZWQgdG8gc2VlLCBkb2VzIHRoaXMgY2hhbmdlIHRoZSBleGVjdXRpb24gZmxvdyBpZiB0aGUgd2FybmluZyAqaXNuJiMzOTt0KiB0cmlnZ2VyZWQ/IExvb2tpbmcgYXQgdGhlIGBXQVJOX09OX0RFRkVSUkVEYCBtYWNybywgaXQgbG9va3MgbGlrZSBpdCBqdXN0IGNoYW5nZXMgdGhlICp3YXkqIHRoZSB3YXJuaW5nIGlzIHByaW50ZWQsIG5vdCB0aGUgY29kZSBsb2dpYyBpdHNlbGYuCgpgYGBjCiNkZWZpbmUgV0FSTl9PTl9ERUZFUlJFRChjb25kaXRpb24pICh7CQkJCQlcCglpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7CQkJCVwKCWlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkgewkJCQkJXAoJCV9fV0FSTl9GTEFHUygjY29uZGl0aW9uLAkJCQlcCgkJCSAgICAgQlVHRkxBR19ERUZFUlJFRCB8CQkJCVwKCQkJICAgICBCVUdGTEFHX1RBSU5UKFRBSU5UX1dBUk4pKTsJCVwKCX0JCQkJCQkJCVwKCXVubGlrZWx5KF9fcmV0X3dhcm5fb24pOwkJCQkJXAp9KQpgYGAKClNvLCBpZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLCBleGVjdXRpb24gcHJvY2VlZHMgYXMgYmVmb3JlLiBJZiB0aGUgY29uZGl0aW9uIGlzIG1ldCwgdGhlIHdhcm5pbmcgaXMgbm93IGRlZmVycmVkLCBidXQgdGhlIGV4ZWN1dGlvbiBsb2dpYyByZW1haW5zIHRoZSBzYW1lIChvdGhlciB0aGFuIHRoZSBhZGRpdGlvbmFsIGxvZyBpbmZvcm1hdGlvbikuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHRoaW5ncyBsaWtlIG1vZGlmaWNhdGlvbnMgdG8gbG9nZ2luZyBjYWxscy4gSXMgY2hhbmdpbmcgYSB3YXJuaW5nIHRvIGEgZGVmZXJyZWQgd2FybmluZyBhIGxvZ2dpbmcgY2hhbmdlPyBZZXMsIHRoaXMgaXMgZXNzZW50aWFsbHkgY2hhbmdpbmcgYHByaW50a2AgdG8gYHByaW50a19kZWZlcnJlZGAgdW5kZXIgdGhlIGhvb2QuIEl0IGNoYW5nZXMgKmhvdyogdGhlIHdhcm5pbmcgaXMgcmVwb3J0ZWQuIEl0IGRvZXNuJiMzOTt0IG1vZGlmeSB0aGUgbG9naWMgb2YgdGhlIGNvZGUgYmVpbmcgd2FybmVkIGFib3V0LiBJdCBzZWVtcyB0aGUgcHVycG9zZSBpcyB0byBwcmV2ZW50IHBvdGVudGlhbCBkZWFkbG9ja3MsIGJ1dCBpbiB0aGUgY29udGV4dCBvZiBmdXp6aW5nLCB0aGUgZ29hbCBpcyBub3QgdG8gZmluZCBidWdzIGluIHRoZSByZXBvcnRpbmcgcGF0aCBidXQgaW4gdGhlIGtlcm5lbCBsb2dpYyBpdHNlbGYuCgpJJiMzOTttIGRvdWJsZS1jaGVja2luZy4gVGhlIGBrZXJuZWwvc2NoZWQvYCBjaGFuZ2VzIGFwcGVhciB0byBiZSAqcHVyZWx5KiByZXBsYWNlbWVudHMgb2YgYFdBUk5fT05gIHdpdGggYFdBUk5fT05fREVGRVJSRURgIGFuZCBzbyBvbiwgc28gaWYgdGhlIHdhcm5pbmcgY29uZGl0aW9uIGlzIG1ldCwgbm93IHVzZSBkZWZlcnJlZCBwcmludGssIGJ1dCB0aGUgZXhlY3V0aW9uIGZsb3cgaXMgdGhlIHNhbWUgaWYgdGhlIHdhcm5pbmcgaXMgbm90IHRyaWdnZXJlZC4KCkxvb2tpbmcgYXQgYGluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhgLCBpdCBqdXN0IGRlZmluZXMgYSBmYWxsYmFjayBgV0FSTl9PTl9ERUZFUlJFRGAuIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBgcHJpbnRrYCB0byB0aGUgYHByaW50a19kZWZlcnJlZF9lbnRlcigpYC4KClNvLCBpdCYjMzk7cyBqdXN0IGEgbG9nZ2luZyBjaGFuZ2UuIFRoZXJlJiMzOTtzIG5vIG90aGVyIGxvZ2ljIGJlaW5nIGNoYW5nZWQgaW4gdGhlIHNjaGVkdWxlci4gSXQgaXMgYWxsIGNvc21ldGljLgoKVGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gYFdBUk5fT05fREVGRVJSRURgLCBgV0FSTl9PTl9PTkNFX0RFRkVSUkVEYC4gVGhpcyBpcyBwdXJlbHkgbG9nZ2luZy4gSSB3aWxsIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYW5kIGFwcGxpZXMgZGVmZXJyZWQgdmFyaWFudHMgb2YgV0FSTl9PTiBhbmQgV0FSTl9PTl9PTkNFIG1hY3JvcyAoV0FSTl9PTl9ERUZFUlJFRCwgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKSB0byBhdm9pZCBkZWFkbG9ja3MgZHVyaW5nIHdhcm5pbmcgcHJpbnRzIGluIHRoZSBzY2hlZHVsZXIuIFRoaXMgaXMgcHVyZWx5IGEgbG9nZ2luZy9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgbm9ybWFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYW5kIGFwcGxpZXMgZGVmZXJyZWQgdmFyaWFudHMgb2YgV0FSTl9PTiBhbmQgV0FSTl9PTl9PTkNFIG1hY3JvcyAoV0FSTl9PTl9ERUZFUlJFRCwgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKSB0byBhdm9pZCBkZWFkbG9ja3MgZHVyaW5nIHdhcm5pbmcgcHJpbnRzIGluIHRoZSBzY2hlZHVsZXIuIFRoaXMgaXMgcHVyZWx5IGEgbG9nZ2luZy9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgbm9ybWFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTQ6NTI6NTguMjU2Mzc1OTYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNzAxMzI3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhbmQgYXBwbGllcyBkZWZlcnJlZCB2YXJpYW50cyBvZiBXQVJOX09OIGFuZCBXQVJOX09OX09OQ0UgbWFjcm9zIChXQVJOX09OX0RFRkVSUkVELCBXQVJOX09OX09OQ0VfREVGRVJSRUQpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgd2FybmluZyBwcmludHMgaW4gdGhlIHNjaGVkdWxlci4gVGhpcyBpcyBwdXJlbHkgYSBsb2dnaW5nL2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBub3JtYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE0OjUyOjU4LjI1NjM4MDc3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NzI4MzE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA0ZjY3YmMwOTEwYWVmYjlhNTJhNDUxZGUyMzZjZjA1ZWYzOTg5NGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTQ6NTI6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhcXG5pbmRleCAwOWU4ZWNjZWU4ZWQ5Ny4uMWUzZmYwMGY3MDliODkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaFxcbisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiAjZGVmaW5lIEJVR0ZMQUdfRE9ORVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDIpXFxuICNkZWZpbmUgQlVHRkxBR19OT19DVVRfSEVSRVxcdCgxIFxcdTAwM2NcXHUwMDNjIDMpXFx0LyogQ1VUX0hFUkUgYWxyZWFkeSBzZW50ICovXFxuICNkZWZpbmUgQlVHRkxBR19BUkdTXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgNClcXG4rI2RlZmluZSBCVUdGTEFHX0RFRkVSUkVEXFx0KDEgXFx1MDAzY1xcdTAwM2MgNSlcXG4gI2RlZmluZSBCVUdGTEFHX1RBSU5UKHRhaW50KVxcdCgodGFpbnQpIFxcdTAwM2NcXHUwMDNjIDgpXFxuICNkZWZpbmUgQlVHX0dFVF9UQUlOVChidWcpXFx0KChidWcpLVxcdTAwM2VmbGFncyBcXHUwMDNlXFx1MDAzZSA4KVxcbiAjZW5kaWZcXG5AQCAtMTE1LDYgKzExNiwxNiBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcXG4gfSlcXG4gI2VuZGlmXFxuIFxcbisjZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSAoe1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb24pKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRfX1dBUk5fRkxBR1MoI2NvbmRpdGlvbixcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAgQlVHRkxBR19ERUZFUlJFRCB8XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIEJVR0ZMQUdfVEFJTlQoVEFJTlRfV0FSTikpO1xcdFxcdFxcXFxcXG4rXFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbik7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4gI2lmbmRlZiBXQVJOX09OX09OQ0VcXG4gI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKSAoe1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1xcdFxcdFxcdFxcdFxcXFxcXG5AQCAtMTI1LDYgKzEzNiwxNiBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcXG4gXFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbik7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiB9KVxcbiAjZW5kaWZcXG4rXFxuKyNkZWZpbmUgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNvbmRpdGlvbikgKHtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGludCBfX3JldF93YXJuX29uID0gISEoY29uZGl0aW9uKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0X19XQVJOX0ZMQUdTKCNjb25kaXRpb24sXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIEJVR0ZMQUdfT05DRSB8IEJVR0ZMQUdfREVGRVJSRUQgfFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0ICAgICBCVUdGTEFHX1RBSU5UKFRBSU5UX1dBUk4pKTtcXHRcXHRcXFxcXFxuK1xcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHVubGlrZWx5KF9fcmV0X3dhcm5fb24pO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSlcXG4gI2VuZGlmIC8qIF9fV0FSTl9GTEFHUyAqL1xcbiBcXG4gI2lmIGRlZmluZWQoX19XQVJOX0ZMQUdTKSBcXHUwMDI2XFx1MDAyNiAhZGVmaW5lZChfX1dBUk5fcHJpbnRmKVxcbkBAIC0xNTksNiArMTgwLDE5IEBAIGV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pO1xcbiB9KVxcbiAjZW5kaWZcXG4gXFxuKyNpZm5kZWYgV0FSTl9PTl9ERUZFUlJFRFxcbisjZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSAoe1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb24pKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRndWFyZChwcmVlbXB0KSgpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cHJpbnRrX2RlZmVycmVkX2VudGVyKClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdF9fV0FSTigpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cHJpbnRrX2RlZmVycmVkX2V4aXQoKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbik7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbisjZW5kaWZcXG4rXFxuICNpZm5kZWYgV0FSTlxcbiAjZGVmaW5lIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQuLi4pICh7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0xODAsNiArMjE0LDExIEBAIGV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pO1xcbiBcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxcbiAjZW5kaWZcXG4gXFxuKyNpZm5kZWYgV0FSTl9PTl9PTkNFX0RFRkVSUkVEXFxuKyNkZWZpbmUgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNvbmRpdGlvbilcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT05fREVGRVJSRUQsIDEpXFxuKyNlbmRpZlxcbitcXG4gI2lmbmRlZiBXQVJOX09OQ0VcXG4gI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOLCAxLCBmb3JtYXQpXFxuQEAgLTIxNSw3ICsyNTQsOSBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcXG4gfSlcXG4gI2VuZGlmXFxuIFxcbisjZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSBXQVJOX09OKGNvbmRpdGlvbilcXG4gI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKSBXQVJOX09OKGNvbmRpdGlvbilcXG4rI2RlZmluZSBXQVJOX09OX09OQ0VfREVGRVJSRUQoY29uZGl0aW9uKSBXQVJOX09OKGNvbmRpdGlvbilcXG4gI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpXFxuICNkZWZpbmUgV0FSTl9UQUlOVChjb25kaXRpb24sIHRhaW50LCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpXFxuICNkZWZpbmUgV0FSTl9UQUlOVF9PTkNFKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLikgV0FSTihjb25kaXRpb24sIGZvcm1hdClcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcXG5pbmRleCBiODg3MTQ0OWQzYzY5NC4uMGUyODI0NTdhYmI5MTcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xcbisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcXG5AQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQgdXBkYXRlX3JxX2Nsb2NrKHN0cnVjdCBycSAqcnEpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChzY2hlZF9mZWF0KFdBUk5fRE9VQkxFX0NMT0NLKSlcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKHJxLVxcdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXFx1MDAyNiBSUUNGX1VQREFURUQpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXFx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcXHUwMDI2IFJRQ0ZfVVBEQVRFRCk7XFxuIFxcdHJxLVxcdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgfD0gUlFDRl9VUERBVEVEO1xcbiBcXG4gXFx0Y2xvY2sgPSBzY2hlZF9jbG9ja19jcHUoY3B1X29mKHJxKSk7XFxuQEAgLTE4MDcsNyArMTgwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1Y2xhbXBfcnFfZGVjX2lkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4gXFxuIFxcdGJ1Y2tldCA9IFxcdTAwMjZ1Y19ycS1cXHUwMDNlYnVja2V0W3VjX3NlLVxcdTAwM2VidWNrZXRfaWRdO1xcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKCFidWNrZXQtXFx1MDAzZXRhc2tzKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFidWNrZXQtXFx1MDAzZXRhc2tzKTtcXG4gXFx0aWYgKGxpa2VseShidWNrZXQtXFx1MDAzZXRhc2tzKSlcXG4gXFx0XFx0YnVja2V0LVxcdTAwM2V0YXNrcy0tO1xcbiBcXG5AQCAtMTgyNyw3ICsxODI3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVjbGFtcF9ycV9kZWNfaWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbiBcXHQgKiBEZWZlbnNpdmUgcHJvZ3JhbW1pbmc6IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gSWYgaXQgaGFwcGVucyxcXG4gXFx0ICogZS5nLiBkdWUgdG8gZnV0dXJlIG1vZGlmaWNhdGlvbiwgd2FybiBhbmQgZml4IHVwIHRoZSBleHBlY3RlZCB2YWx1ZS5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRShidWNrZXQtXFx1MDAzZXZhbHVlIFxcdTAwM2UgcnFfY2xhbXApO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoYnVja2V0LVxcdTAwM2V2YWx1ZSBcXHUwMDNlIHJxX2NsYW1wKTtcXG4gXFx0aWYgKGJ1Y2tldC1cXHUwMDNldmFsdWUgXFx1MDAzZT0gcnFfY2xhbXApIHtcXG4gXFx0XFx0Ymt0X2NsYW1wID0gdWNsYW1wX3JxX21heF92YWx1ZShycSwgY2xhbXBfaWQsIHVjX3NlLVxcdTAwM2V2YWx1ZSk7XFxuIFxcdFxcdHVjbGFtcF9ycV9zZXQocnEsIGNsYW1wX2lkLCBia3RfY2xhbXApO1xcbkBAIC0yMjEwLDcgKzIyMTAsNyBAQCB2b2lkIGFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpXFxuIFxcbiB2b2lkIGRlYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBmbGFncylcXG4ge1xcbi1cXHRXQVJOX09OX09OQ0UoZmxhZ3MgXFx1MDAyNiBERVFVRVVFX1NMRUVQKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGZsYWdzIFxcdTAwMjYgREVRVUVVRV9TTEVFUCk7XFxuIFxcbiBcXHRXUklURV9PTkNFKHAtXFx1MDAzZW9uX3JxLCBUQVNLX09OX1JRX01JR1JBVElORyk7XFxuIFxcdEFTU0VSVF9FWENMVVNJVkVfV1JJVEVSKHAtXFx1MDAzZW9uX3JxKTtcXG5AQCAtMjUxNiw3ICsyNTE2LDcgQEAgc3RhdGljIHN0cnVjdCBycSAqbW92ZV9xdWV1ZWRfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLFxcbiBcXHRycSA9IGNwdV9ycShuZXdfY3B1KTtcXG4gXFxuIFxcdHJxX2xvY2socnEsIHJmKTtcXG4tXFx0V0FSTl9PTl9PTkNFKHRhc2tfY3B1KHApICE9IG5ld19jcHUpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19jcHUocCkgIT0gbmV3X2NwdSk7XFxuIFxcdGFjdGl2YXRlX3Rhc2socnEsIHAsIDApO1xcbiBcXHR3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7XFxuIFxcbkBAIC0yNjAyLDcgKzI2MDIsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGlvbl9jcHVfc3RvcCh2b2lkICpkYXRhKVxcbiBcXHQgKiBJZiB3ZSB3ZXJlIHBhc3NlZCBhIHBlbmRpbmcsIHRoZW4gLVxcdTAwM2VzdG9wX3BlbmRpbmcgd2FzIHNldCwgdGh1c1xcbiBcXHQgKiBwLVxcdTAwM2VtaWdyYXRpb25fcGVuZGluZyBtdXN0IGhhdmUgcmVtYWluZWQgc3RhYmxlLlxcbiBcXHQgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKHBlbmRpbmcgXFx1MDAyNlxcdTAwMjYgcGVuZGluZyAhPSBwLVxcdTAwM2VtaWdyYXRpb25fcGVuZGluZyk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwZW5kaW5nIFxcdTAwMjZcXHUwMDI2IHBlbmRpbmcgIT0gcC1cXHUwMDNlbWlncmF0aW9uX3BlbmRpbmcpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogSWYgdGFza19ycShwKSAhPSBycSwgaXQgY2Fubm90IGJlIG1pZ3JhdGVkIGhlcmUsIGJlY2F1c2Ugd2UncmVcXG5AQCAtMjY2MSw3ICsyNjYxLDcgQEAgc3RhdGljIGludCBtaWdyYXRpb25fY3B1X3N0b3Aodm9pZCAqZGF0YSlcXG4gXFx0XFx0ICogZGV0ZXJtaW5lIGlzX21pZ3JhdGlvbl9kaXNhYmxlZCgpIGFuZCBzbyBoYXZlIHRvIGNoYXNlIGFmdGVyXFxuIFxcdFxcdCAqIGl0LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFwZW5kaW5nLVxcdTAwM2VzdG9wX3BlbmRpbmcpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXBlbmRpbmctXFx1MDAzZXN0b3BfcGVuZGluZyk7XFxuIFxcdFxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbiBcXHRcXHRycV91bmxvY2socnEsIFxcdTAwMjZyZik7XFxuIFxcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwLVxcdTAwM2VwaV9sb2NrLCByZi5mbGFncyk7XFxuQEAgLTMwMDQsNyArMzAwNCw3IEBAIHN0YXRpYyBpbnQgYWZmaW5lX21vdmVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycV9mbGFnXFxuIFxcdCAqXFxuIFxcdCAqIEVpdGhlciB3YXksIHdlIHJlYWxseSBzaG91bGQgaGF2ZSBhIEBwZW5kaW5nIGhlcmUuXFxuIFxcdCAqL1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKCFwZW5kaW5nKSkge1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFwZW5kaW5nKSkge1xcbiBcXHRcXHR0YXNrX3JxX3VubG9jayhycSwgcCwgcmYpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC0zMTE2LDkgKzMxMTYsOSBAQCBzdGF0aWMgaW50IF9fc2V0X2NwdXNfYWxsb3dlZF9wdHJfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UocCA9PSBjdXJyZW50IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdFxcdCBpc19taWdyYXRpb25fZGlzYWJsZWQocCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0ICFjcHVtYXNrX3Rlc3RfY3B1KHRhc2tfY3B1KHApLCBjdHgtXFx1MDAzZW5ld19tYXNrKSkpIHtcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChwID09IGN1cnJlbnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0ICBpc19taWdyYXRpb25fZGlzYWJsZWQocCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0ICAhY3B1bWFza190ZXN0X2NwdSh0YXNrX2NwdShwKSwgY3R4LVxcdTAwM2VuZXdfbWFzaykpKSB7XFxuIFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG5AQCAtMzI2Nyw3ICszMjY3LDcgQEAgdm9pZCBmb3JjZV9jb21wYXRpYmxlX2NwdXNfYWxsb3dlZF9wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiBcXHRcXHRcXHRcXHRjcHVtYXNrX3ByX2FyZ3Mob3ZlcnJpZGVfbWFzaykpO1xcbiBcXHR9XFxuIFxcbi1cXHRXQVJOX09OKHNldF9jcHVzX2FsbG93ZWRfcHRyKHAsIG92ZXJyaWRlX21hc2spKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRChzZXRfY3B1c19hbGxvd2VkX3B0cihwLCBvdmVycmlkZV9tYXNrKSk7XFxuIG91dF9mcmVlX21hc2s6XFxuIFxcdGNwdXNfcmVhZF91bmxvY2soKTtcXG4gXFx0ZnJlZV9jcHVtYXNrX3ZhcihuZXdfbWFzayk7XFxuQEAgLTMyOTMsNyArMzI5Myw3IEBAIHZvaWQgcmVsYXhfY29tcGF0aWJsZV9jcHVzX2FsbG93ZWRfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4gXFx0ICogQ3B1c2V0IG1hc2tpbmcgd2lsbCBiZSBkb25lIHRoZXJlIHRvby5cXG4gXFx0ICovXFxuIFxcdHJldCA9IF9fc2NoZWRfc2V0YWZmaW5pdHkocCwgXFx1MDAyNmFjKTtcXG4tXFx0V0FSTl9PTl9PTkNFKHJldCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQpO1xcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NNUFxcbkBAIC0zMzA2LDE2ICszMzA2LDE2IEBAIHZvaWQgc2V0X3Rhc2tfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IG5ld19jcHUpXFxuIFxcdCAqIFdlIHNob3VsZCBuZXZlciBjYWxsIHNldF90YXNrX2NwdSgpIG9uIGEgYmxvY2tlZCB0YXNrLFxcbiBcXHQgKiB0dHd1KCkgd2lsbCBzb3J0IG91dCB0aGUgcGxhY2VtZW50LlxcbiBcXHQgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKHN0YXRlICE9IFRBU0tfUlVOTklORyBcXHUwMDI2XFx1MDAyNiBzdGF0ZSAhPSBUQVNLX1dBS0lORyBcXHUwMDI2XFx1MDAyNiAhcC1cXHUwMDNlb25fcnEpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc3RhdGUgIT0gVEFTS19SVU5OSU5HIFxcdTAwMjZcXHUwMDI2IHN0YXRlICE9IFRBU0tfV0FLSU5HIFxcdTAwMjZcXHUwMDI2ICFwLVxcdTAwM2Vvbl9ycSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBNaWdyYXRpbmcgZmFpciBjbGFzcyB0YXNrIG11c3QgaGF2ZSBwLVxcdTAwM2Vvbl9ycSA9IFRBU0tfT05fUlFfTUlHUkFUSU5HLFxcbiBcXHQgKiBiZWNhdXNlIHNjaGVkc3RhdF93YWl0X3tzdGFydCxlbmR9IHJlYmFzZSBtaWdyYXRpbmcgdGFzaydzIHdhaXRfc3RhcnRcXG4gXFx0ICogdGltZSByZWx5aW5nIG9uIHAtXFx1MDAzZW9uX3JxLlxcbiBcXHQgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKHN0YXRlID09IFRBU0tfUlVOTklORyBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIHAtXFx1MDAzZXNjaGVkX2NsYXNzID09IFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAgKHAtXFx1MDAzZW9uX3JxIFxcdTAwMjZcXHUwMDI2ICF0YXNrX29uX3JxX21pZ3JhdGluZyhwKSkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc3RhdGUgPT0gVEFTS19SVU5OSU5HIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgIHAtXFx1MDAzZXNjaGVkX2NsYXNzID09IFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgIChwLVxcdTAwM2Vvbl9ycSBcXHUwMDI2XFx1MDAyNiAhdGFza19vbl9ycV9taWdyYXRpbmcocCkpKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbiBcXHQvKlxcbkBAIC0zMzI4LDE1ICszMzI4LDE1IEBAIHZvaWQgc2V0X3Rhc2tfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IG5ld19jcHUpXFxuIFxcdCAqIEZ1cnRoZXJtb3JlLCBhbGwgdGFza19ycSB1c2VycyBzaG91bGQgYWNxdWlyZSBib3RoIGxvY2tzLCBzZWVcXG4gXFx0ICogdGFza19ycV9sb2NrKCkuXFxuIFxcdCAqL1xcbi1cXHRXQVJOX09OX09OQ0UoZGVidWdfbG9ja3MgXFx1MDAyNlxcdTAwMjYgIShsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnAtXFx1MDAzZXBpX2xvY2spIHx8XFxuLVxcdFxcdFxcdFxcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChfX3JxX2xvY2twKHRhc2tfcnEocCkpKSkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGVidWdfbG9ja3MgXFx1MDAyNlxcdTAwMjYgIShsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnAtXFx1MDAzZXBpX2xvY2spIHx8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBsb2NrZGVwX2lzX2hlbGQoX19ycV9sb2NrcCh0YXNrX3JxKHApKSkpKTtcXG4gI2VuZGlmXFxuIFxcdC8qXFxuIFxcdCAqIENsZWFybHksIG1pZ3JhdGluZyB0YXNrcyB0byBvZmZsaW5lIENQVXMgaXMgYSBmYWlybHkgZGFmdCB0aGluZy5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRSghY3B1X29ubGluZShuZXdfY3B1KSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghY3B1X29ubGluZShuZXdfY3B1KSk7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UoaXNfbWlncmF0aW9uX2Rpc2FibGVkKHApKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGlzX21pZ3JhdGlvbl9kaXNhYmxlZChwKSk7XFxuIFxcbiBcXHR0cmFjZV9zY2hlZF9taWdyYXRlX3Rhc2socCwgbmV3X2NwdSk7XFxuIFxcbkBAIC0zODAzLDEwICszODAzLDEwIEBAIHZvaWQgc2NoZWRfdHR3dV9wZW5kaW5nKHZvaWQgKmFyZylcXG4gXFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG4gXFxuIFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdCwgbGxpc3QsIHdha2VfZW50cnkubGxpc3QpIHtcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShwLVxcdTAwM2Vvbl9jcHUpKVxcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZW9uX2NwdSkpXFxuIFxcdFxcdFxcdHNtcF9jb25kX2xvYWRfYWNxdWlyZShcXHUwMDI2cC1cXHUwMDNlb25fY3B1LCAhVkFMKTtcXG4gXFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UodGFza19jcHUocCkgIT0gY3B1X29mKHJxKSkpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19jcHUocCkgIT0gY3B1X29mKHJxKSkpXFxuIFxcdFxcdFxcdHNldF90YXNrX2NwdShwLCBjcHVfb2YocnEpKTtcXG4gXFxuIFxcdFxcdHR0d3VfZG9fYWN0aXZhdGUocnEsIHAsIHAtXFx1MDAzZXNjaGVkX3JlbW90ZV93YWtldXAgPyBXRl9NSUdSQVRFRCA6IDAsIFxcdTAwMjZyZik7XFxuQEAgLTQwMDMsOCArNDAwMyw4IEBAIGJvb2wgdHR3dV9zdGF0ZV9tYXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBzdGF0ZSwgaW50ICpzdWNjZXNzKVxcbiBcXHRpbnQgbWF0Y2g7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVCVUdfUFJFRU1QVCkpIHtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKChzdGF0ZSBcXHUwMDI2IFRBU0tfUlRMT0NLX1dBSVQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAgc3RhdGUgIT0gVEFTS19SVExPQ0tfV0FJVCk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgoc3RhdGUgXFx1MDAyNiBUQVNLX1JUTE9DS19XQUlUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgICBzdGF0ZSAhPSBUQVNLX1JUTE9DS19XQUlUKTtcXG4gXFx0fVxcbiBcXG4gXFx0KnN1Y2Nlc3MgPSAhIShtYXRjaCA9IF9fdGFza19zdGF0ZV9tYXRjaChwLCBzdGF0ZSkpO1xcbkBAIC01NzQ1LDcgKzU3NDUsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdFxcdCAqIHdlIGFyZSBhbHdheXMgc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHByb3h5IChvbmx5IGFcXG4gXFx0XFx0XFx0ICogc2luZ2xlIHRhc2sgaXMgcnVubmluZykuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRXQVJOX09OX09OQ0UocnEtXFx1MDAzZWN1cnIgIT0gcnEtXFx1MDAzZWRvbm9yKTtcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVxcdTAwM2VjdXJyICE9IHJxLVxcdTAwM2Vkb25vcik7XFxuIFxcdFxcdFxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxuIFxcbiBcXHRcXHRcXHRpZiAoIWlzX2lkbGVfdGFzayhjdXJyKSkge1xcbkBAIC01NzU0LDcgKzU3NTQsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdFxcdFxcdCAqIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUuXFxuIFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHR1NjQgZGVsdGEgPSBycV9jbG9ja190YXNrKHJxKSAtIGN1cnItXFx1MDAzZXNlLmV4ZWNfc3RhcnQ7XFxuLVxcdFxcdFxcdFxcdFdBUk5fT05fT05DRShkZWx0YSBcXHUwMDNlICh1NjQpTlNFQ19QRVJfU0VDICogMzApO1xcbitcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGVsdGEgXFx1MDAzZSAodTY0KU5TRUNfUEVSX1NFQyAqIDMwKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRjdXJyLVxcdTAwM2VzY2hlZF9jbGFzcy1cXHUwMDNldGFza190aWNrKHJxLCBjdXJyLCAwKTtcXG4gXFxuQEAgLTU3NjksNyArNTc2OSw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkX3RpY2tfcmVtb3RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0ICogZmlyc3QgdXBkYXRlIHN0YXRlIHRvIHJlZmxlY3QgaG90cGx1ZyBhY3Rpdml0eSBpZiByZXF1aXJlZC5cXG4gXFx0ICovXFxuIFxcdG9zID0gYXRvbWljX2ZldGNoX2FkZF91bmxlc3MoXFx1MDAyNnR3b3JrLVxcdTAwM2VzdGF0ZSwgLTEsIFRJQ0tfU0NIRURfUkVNT1RFX1JVTk5JTkcpO1xcbi1cXHRXQVJOX09OX09OQ0Uob3MgPT0gVElDS19TQ0hFRF9SRU1PVEVfT0ZGTElORSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChvcyA9PSBUSUNLX1NDSEVEX1JFTU9URV9PRkZMSU5FKTtcXG4gXFx0aWYgKG9zID09IFRJQ0tfU0NIRURfUkVNT1RFX1JVTk5JTkcpXFxuIFxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBkd29yaywgSFopO1xcbiB9XFxuQEAgLTYxOTYsNyArNjE5Niw3IEBAIHBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHJxX2ZsYWdzICpyZilcXG4gXFx0XFx0XFx0ICogRm9yIHJvYnVzdG5lc3MsIHVwZGF0ZSB0aGUgbWluX3ZydW50aW1lX2ZpIGZvclxcbiBcXHRcXHRcXHQgKiB1bmNvbnN0cmFpbmVkIHBpY2tzIGFzIHdlbGwuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRXQVJOX09OX09OQ0UoZmlfYmVmb3JlKTtcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGZpX2JlZm9yZSk7XFxuIFxcdFxcdFxcdHRhc2tfdnJ1bnRpbWVfdXBkYXRlKHJxLCBuZXh0LCBmYWxzZSk7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X3NldF9uZXh0O1xcbiBcXHRcXHR9XFxuQEAgLTYyNzQsNyArNjI3NCw3IEBAIHBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHJxX2ZsYWdzICpyZilcXG4gXFx0cnEtXFx1MDAzZWNvcmVfc2NoZWRfc2VxID0gcnEtXFx1MDAzZWNvcmUtXFx1MDAzZWNvcmVfcGlja19zZXE7XFxuIFxcbiBcXHQvKiBTb21ldGhpbmcgc2hvdWxkIGhhdmUgYmVlbiBzZWxlY3RlZCBmb3IgY3VycmVudCBDUFUgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKCFuZXh0KTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFuZXh0KTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFJlc2NoZWR1bGUgc2libGluZ3NcXG5AQCAtNjMxNyw3ICs2MzE3LDcgQEAgcGlja19uZXh0X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBEaWQgd2UgYnJlYWsgTDFURiBtaXRpZ2F0aW9uIHJlcXVpcmVtZW50cz8gKi9cXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFjb29raWVfbWF0Y2gobmV4dCwgcnFfaS1cXHUwMDNlY29yZV9waWNrKSk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghY29va2llX21hdGNoKG5leHQsIHJxX2ktXFx1MDAzZWNvcmVfcGljaykpO1xcbiBcXG4gXFx0XFx0aWYgKHJxX2ktXFx1MDAzZWN1cnIgPT0gcnFfaS1cXHUwMDNlY29yZV9waWNrKSB7XFxuIFxcdFxcdFxcdHJxX2ktXFx1MDAzZWNvcmVfcGljayA9IE5VTEw7XFxuQEAgLTY3MTcsNyArNjcxNyw3IEBAIHN0YXRpYyB2b2lkIHByb3h5X21pZ3JhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLFxcbiBcXHRzdHJ1Y3QgcnEgKnRhcmdldF9ycSA9IGNwdV9ycSh0YXJnZXRfY3B1KTtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xcbi1cXHRXQVJOX09OKHAgPT0gcnEtXFx1MDAzZWN1cnIpO1xcbitcXHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gcnEtXFx1MDAzZWN1cnIpO1xcbiBcXHQvKlxcbiBcXHQgKiBTaW5jZSB3ZSBhcmUgbWlncmF0aW5nIGEgYmxvY2tlZCBkb25vciwgaXQgY291bGQgYmUgcnEtXFx1MDAzZWRvbm9yLFxcbiBcXHQgKiBhbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSByZWZlcmVuY2VzIGZyb20gdGhpc1xcbkBAIC02NzQ5LDcgKzY3NDksNyBAQCBzdGF0aWMgdm9pZCBwcm94eV9mb3JjZV9yZXR1cm4oc3RydWN0IHJxICpycSwgc3RydWN0IHJxX2ZsYWdzICpyZixcXG4gXFx0aW50IGNwdSwgd2FrZV9mbGFnID0gV0ZfVFRXVTtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xcbi1cXHRXQVJOX09OKHAgPT0gcnEtXFx1MDAzZWN1cnIpO1xcbitcXHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gcnEtXFx1MDAzZWN1cnIpO1xcbiBcXG4gXFx0aWYgKHAgPT0gcnEtXFx1MDAzZWRvbm9yKVxcbiBcXHRcXHRwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xcbkBAIC02OTUxLDcgKzY5NTEsNyBAQCBmaW5kX3Byb3h5X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpkb25vciwgc3RydWN0IHJxX2ZsYWdzICpyZilcXG4gXFx0XFx0ICogZ3VhcmFudGVlIGl0cyBleGlzdGVuY2UsIGFzIHBlciB0dHd1X3JlbW90ZSgpLlxcbiBcXHRcXHQgKi9cXG4gXFx0fVxcbi1cXHRXQVJOX09OX09OQ0Uob3duZXIgXFx1MDAyNlxcdTAwMjYgIW93bmVyLVxcdTAwM2Vvbl9ycSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChvd25lciBcXHUwMDI2XFx1MDAyNiAhb3duZXItXFx1MDAzZW9uX3JxKTtcXG4gXFx0cmV0dXJuIG93bmVyO1xcbiBcXG4gZGVhY3RpdmF0ZTpcXG5AQCAtNzYzMSw4ICs3NjMxLDggQEAgdm9pZCBydF9tdXRleF9zZXRwcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxcbiBcXHQgKiByZWFsIG5lZWQgdG8gYm9vc3QuXFxuIFxcdCAqL1xcbiBcXHRpZiAodW5saWtlbHkocCA9PSBycS1cXHUwMDNlaWRsZSkpIHtcXG4tXFx0XFx0V0FSTl9PTihwICE9IHJxLVxcdTAwM2VjdXJyKTtcXG4tXFx0XFx0V0FSTl9PTihwLVxcdTAwM2VwaV9ibG9ja2VkX29uKTtcXG4rXFx0XFx0V0FSTl9PTl9ERUZFUlJFRChwICE9IHJxLVxcdTAwM2VjdXJyKTtcXG4rXFx0XFx0V0FSTl9PTl9ERUZFUlJFRChwLVxcdTAwM2VwaV9ibG9ja2VkX29uKTtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbkBAIC04NDYzLDcgKzg0NjMsNyBAQCBzdGF0aWMgdm9pZCBiYWxhbmNlX3B1c2hfc2V0KGludCBjcHUsIGJvb2wgb24pXFxuIFxcbiBcXHRycV9sb2NrX2lycXNhdmUocnEsIFxcdTAwMjZyZik7XFxuIFxcdGlmIChvbikge1xcbi1cXHRcXHRXQVJOX09OX09OQ0UocnEtXFx1MDAzZWJhbGFuY2VfY2FsbGJhY2spO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXFx1MDAzZWJhbGFuY2VfY2FsbGJhY2spO1xcbiBcXHRcXHRycS1cXHUwMDNlYmFsYW5jZV9jYWxsYmFjayA9IFxcdTAwMjZiYWxhbmNlX3B1c2hfY2FsbGJhY2s7XFxuIFxcdH0gZWxzZSBpZiAocnEtXFx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPT0gXFx1MDAyNmJhbGFuY2VfcHVzaF9jYWxsYmFjaykge1xcbiBcXHRcXHRycS1cXHUwMDNlYmFsYW5jZV9jYWxsYmFjayA9IE5VTEw7XFxuQEAgLTExMTUwLDcgKzExMTUwLDcgQEAgc3RydWN0IHNjaGVkX2NoYW5nZV9jdHggKnNjaGVkX2NoYW5nZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludFxcbiBcXHQgKiBNdXN0IGV4Y2x1c2l2ZWx5IHVzZSBtYXRjaGVkIGZsYWdzIHNpbmNlIHRoaXMgaXMgYm90aCBkZXF1ZXVlIGFuZFxcbiBcXHQgKiBlbnF1ZXVlLlxcbiBcXHQgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKGZsYWdzIFxcdTAwMjYgMHhGRkZGMDAwMCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChmbGFncyBcXHUwMDI2IDB4RkZGRjAwMDApO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XFxuIFxcbkBAIC0xMTE5OCw3ICsxMTE5OCw3IEBAIHZvaWQgc2NoZWRfY2hhbmdlX2VuZChzdHJ1Y3Qgc2NoZWRfY2hhbmdlX2N0eCAqY3R4KVxcbiBcXHQvKlxcbiBcXHQgKiBDaGFuZ2luZyBjbGFzcyB3aXRob3V0ICpRVUVVRV9DTEFTUyBpcyBiYWQuXFxuIFxcdCAqL1xcbi1cXHRXQVJOX09OX09OQ0UocC1cXHUwMDNlc2NoZWRfY2xhc3MgIT0gY3R4LVxcdTAwM2VjbGFzcyBcXHUwMDI2XFx1MDAyNiAhKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBFTlFVRVVFX0NMQVNTKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VzY2hlZF9jbGFzcyAhPSBjdHgtXFx1MDAzZWNsYXNzIFxcdTAwMjZcXHUwMDI2ICEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IEVOUVVFVUVfQ0xBU1MpKTtcXG4gXFxuIFxcdGlmICgoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IEVOUVVFVUVfQ0xBU1MpIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZXNjaGVkX2NsYXNzLVxcdTAwM2Vzd2l0Y2hpbmdfdG8pXFxuIFxcdFxcdHAtXFx1MDAzZXNjaGVkX2NsYXNzLVxcdTAwM2Vzd2l0Y2hpbmdfdG8ocnEsIHApO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZV9zY2hlZC5jIGIva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuY1xcbmluZGV4IDczYjZiMjQyNjkxMTliLi5lYzg4ZWQ3ZDhlZTg3NyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvY29yZV9zY2hlZC5jXFxuKysrIGIva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuY1xcbkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNjaGVkX2NvcmVfdXBkYXRlX2Nvb2tpZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXFxuIFxcdCAqIGEgY29va2llIHVudGlsIGFmdGVyIHdlJ3ZlIHJlbW92ZWQgaXQsIHdlIG11c3QgaGF2ZSBjb3JlIHNjaGVkdWxpbmdcXG4gXFx0ICogZW5hYmxlZCBoZXJlLlxcbiBcXHQgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKChwLVxcdTAwM2Vjb3JlX2Nvb2tpZSB8fCBjb29raWUpIFxcdTAwMjZcXHUwMDI2ICFzY2hlZF9jb3JlX2VuYWJsZWQocnEpKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKChwLVxcdTAwM2Vjb3JlX2Nvb2tpZSB8fCBjb29raWUpIFxcdTAwMjZcXHUwMDI2ICFzY2hlZF9jb3JlX2VuYWJsZWQocnEpKTtcXG4gXFxuIFxcdGlmIChzY2hlZF9jb3JlX2VucXVldWVkKHApKVxcbiBcXHRcXHRzY2hlZF9jb3JlX2RlcXVldWUocnEsIHAsIERFUVVFVUVfU0FWRSk7XFxuQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIF9fc2NoZWRfY29yZV9hY2NvdW50X2ZvcmNlaWRsZShzdHJ1Y3QgcnEgKnJxKVxcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UoIXJxLVxcdTAwM2Vjb3JlLVxcdTAwM2Vjb3JlX2ZvcmNlaWRsZV9jb3VudCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghcnEtXFx1MDAzZWNvcmUtXFx1MDAzZWNvcmVfZm9yY2VpZGxlX2NvdW50KTtcXG4gXFxuIFxcdGlmIChycS1cXHUwMDNlY29yZS1cXHUwMDNlY29yZV9mb3JjZWlkbGVfc3RhcnQgPT0gMClcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBfX3NjaGVkX2NvcmVfYWNjb3VudF9mb3JjZWlkbGUoc3RydWN0IHJxICpycSlcXG4gXFxuIFxcdHJxLVxcdTAwM2Vjb3JlLVxcdTAwM2Vjb3JlX2ZvcmNlaWRsZV9zdGFydCA9IG5vdztcXG4gXFxuLVxcdGlmIChXQVJOX09OX09OQ0UoIXJxLVxcdTAwM2Vjb3JlLVxcdTAwM2Vjb3JlX2ZvcmNlaWRsZV9vY2N1cGF0aW9uKSkge1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFycS1cXHUwMDNlY29yZS1cXHUwMDNlY29yZV9mb3JjZWlkbGVfb2NjdXBhdGlvbikpIHtcXG4gXFx0XFx0LyogY2FuJ3QgYmUgZm9yY2VkIGlkbGUgd2l0aG91dCBhIHJ1bm5pbmcgdGFzayAqL1xcbiBcXHR9IGVsc2UgaWYgKHJxLVxcdTAwM2Vjb3JlLVxcdTAwM2Vjb3JlX2ZvcmNlaWRsZV9jb3VudCBcXHUwMDNlIDEgfHxcXG4gXFx0XFx0ICAgcnEtXFx1MDAzZWNvcmUtXFx1MDAzZWNvcmVfZm9yY2VpZGxlX29jY3VwYXRpb24gXFx1MDAzZSAxKSB7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jcHVkZWFkbGluZS5jIGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmNcXG5pbmRleCAwYTJiN2UzMGZkMTBjMS4uZTMwNWE4ZTk5M2UyN2MgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuY1xcbkBAIC0xNDksNyArMTQ5LDcgQEAgaW50IGNwdWRsX2ZpbmQoc3RydWN0IGNwdWRsICpjcCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRpbnQgYmVzdF9jcHUgPSBjcHVkbF9tYXhpbXVtKGNwKTtcXG4gXFxuLVxcdFxcdFdBUk5fT04oYmVzdF9jcHUgIT0gLTEgXFx1MDAyNlxcdTAwMjYgIWNwdV9wcmVzZW50KGJlc3RfY3B1KSk7XFxuK1xcdFxcdFdBUk5fT05fREVGRVJSRUQoYmVzdF9jcHUgIT0gLTEgXFx1MDAyNlxcdTAwMjYgIWNwdV9wcmVzZW50KGJlc3RfY3B1KSk7XFxuIFxcbiBcXHRcXHRpZiAoY3B1bWFza190ZXN0X2NwdShiZXN0X2NwdSwgXFx1MDAyNnAtXFx1MDAzZWNwdXNfbWFzaykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGRsX3RpbWVfYmVmb3JlKGRsX3NlLVxcdTAwM2VkZWFkbGluZSwgY3AtXFx1MDAzZWVsZW1lbnRzWzBdLmRsKSkge1xcbkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBjcHVkbF9jbGVhcihzdHJ1Y3QgY3B1ZGwgKmNwLCBpbnQgY3B1LCBib29sIG9ubGluZSlcXG4gXFx0aW50IG9sZF9pZHgsIG5ld19jcHU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbi1cXHRXQVJOX09OKCFjcHVfcHJlc2VudChjcHUpKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRCghY3B1X3ByZXNlbnQoY3B1KSk7XFxuIFxcbiBcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBjcHVkbF9zZXQoc3RydWN0IGNwdWRsICpjcCwgaW50IGNwdSwgdTY0IGRsKVxcbiBcXHRpbnQgb2xkX2lkeDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuLVxcdFdBUk5fT04oIWNwdV9wcmVzZW50KGNwdSkpO1xcbitcXHRXQVJOX09OX0RFRkVSUkVEKCFjcHVfcHJlc2VudChjcHUpKTtcXG4gXFxuIFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y3AtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jIGIva2VybmVsL3NjaGVkL2RlYWRsaW5lLmNcXG5pbmRleCA3ZGI0Yzg3ZGY4M2IwYS4uODYzYWM3NTA5MTkyZjcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2RlYWRsaW5lLmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuY1xcbkBAIC0yMTcsOCArMjE3LDggQEAgdm9pZCBfX2FkZF9ydW5uaW5nX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSlcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTtcXG4gXFx0ZGxfcnEtXFx1MDAzZXJ1bm5pbmdfYncgKz0gZGxfYnc7XFxuLVxcdFdBUk5fT05fT05DRShkbF9ycS1cXHUwMDNlcnVubmluZ19idyBcXHUwMDNjIG9sZCk7IC8qIG92ZXJmbG93ICovXFxuLVxcdFdBUk5fT05fT05DRShkbF9ycS1cXHUwMDNlcnVubmluZ19idyBcXHUwMDNlIGRsX3JxLVxcdTAwM2V0aGlzX2J3KTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVxcdTAwM2VydW5uaW5nX2J3IFxcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVxcdTAwM2VydW5uaW5nX2J3IFxcdTAwM2UgZGxfcnEtXFx1MDAzZXRoaXNfYncpO1xcbiBcXHQvKiBraWNrIGNwdWZyZXEgKHNlZSB0aGUgY29tbWVudCBpbiBrZXJuZWwvc2NoZWQvc2NoZWQuaCkuICovXFxuIFxcdGNwdWZyZXFfdXBkYXRlX3V0aWwocnFfb2ZfZGxfcnEoZGxfcnEpLCAwKTtcXG4gfVxcbkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBfX3N1Yl9ydW5uaW5nX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSlcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTtcXG4gXFx0ZGxfcnEtXFx1MDAzZXJ1bm5pbmdfYncgLT0gZGxfYnc7XFxuLVxcdFdBUk5fT05fT05DRShkbF9ycS1cXHUwMDNlcnVubmluZ19idyBcXHUwMDNlIG9sZCk7IC8qIHVuZGVyZmxvdyAqL1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtXFx1MDAzZXJ1bm5pbmdfYncgXFx1MDAzZSBvbGQpOyAvKiB1bmRlcmZsb3cgKi9cXG4gXFx0aWYgKGRsX3JxLVxcdTAwM2VydW5uaW5nX2J3IFxcdTAwM2Ugb2xkKVxcbiBcXHRcXHRkbF9ycS1cXHUwMDNlcnVubmluZ19idyA9IDA7XFxuIFxcdC8qIGtpY2sgY3B1ZnJlcSAoc2VlIHRoZSBjb21tZW50IGluIGtlcm5lbC9zY2hlZC9zY2hlZC5oKS4gKi9cXG5AQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgX19hZGRfcnFfYncodTY0IGRsX2J3LCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKVxcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZl9kbF9ycShkbF9ycSkpO1xcbiBcXHRkbF9ycS1cXHUwMDNldGhpc19idyArPSBkbF9idztcXG4tXFx0V0FSTl9PTl9PTkNFKGRsX3JxLVxcdTAwM2V0aGlzX2J3IFxcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVxcdTAwM2V0aGlzX2J3IFxcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZVxcbkBAIC0yNTQsMTAgKzI1NCwxMCBAQCB2b2lkIF9fc3ViX3JxX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSlcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTtcXG4gXFx0ZGxfcnEtXFx1MDAzZXRoaXNfYncgLT0gZGxfYnc7XFxuLVxcdFdBUk5fT05fT05DRShkbF9ycS1cXHUwMDNldGhpc19idyBcXHUwMDNlIG9sZCk7IC8qIHVuZGVyZmxvdyAqL1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtXFx1MDAzZXRoaXNfYncgXFx1MDAzZSBvbGQpOyAvKiB1bmRlcmZsb3cgKi9cXG4gXFx0aWYgKGRsX3JxLVxcdTAwM2V0aGlzX2J3IFxcdTAwM2Ugb2xkKVxcbiBcXHRcXHRkbF9ycS1cXHUwMDNldGhpc19idyA9IDA7XFxuLVxcdFdBUk5fT05fT05DRShkbF9ycS1cXHUwMDNlcnVubmluZ19idyBcXHUwMDNlIGRsX3JxLVxcdTAwM2V0aGlzX2J3KTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVxcdTAwM2VydW5uaW5nX2J3IFxcdTAwM2UgZGxfcnEtXFx1MDAzZXRoaXNfYncpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuQEAgLTMzNSw3ICszMzUsNyBAQCB2b2lkIGNhbmNlbF9pbmFjdGl2ZV90aW1lcihzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcXG4gXFxuIHN0YXRpYyB2b2lkIGRsX2NoYW5nZV91dGlsaXphdGlvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBuZXdfYncpXFxuIHtcXG4tXFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZWRsLmZsYWdzIFxcdTAwMjYgU0NIRURfRkxBR19TVUdPVik7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VkbC5mbGFncyBcXHUwMDI2IFNDSEVEX0ZMQUdfU1VHT1YpO1xcbiBcXG4gXFx0aWYgKHRhc2tfb25fcnFfcXVldWVkKHApKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTQxNiw3ICs0MTYsNyBAQCBzdGF0aWMgdm9pZCB0YXNrX25vbl9jb250ZW5kaW5nKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBib29sIGRsX3Rhc2spXFxuIFxcdGlmIChkbF9lbnRpdHlfaXNfc3BlY2lhbChkbF9zZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdFdBUk5fT04oZGxfc2UtXFx1MDAzZWRsX25vbl9jb250ZW5kaW5nKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRChkbF9zZS1cXHUwMDNlZGxfbm9uX2NvbnRlbmRpbmcpO1xcbiBcXG4gXFx0emVyb2xhZ190aW1lID0gZGxfc2UtXFx1MDAzZWRlYWRsaW5lIC1cXG4gXFx0XFx0IGRpdjY0X2xvbmcoKGRsX3NlLVxcdTAwM2VydW50aW1lICogZGxfc2UtXFx1MDAzZWRsX3BlcmlvZCksXFxuQEAgLTU4Miw3ICs1ODIsNyBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlX3B1c2hhYmxlX2RsX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiB7XFxuIFxcdHN0cnVjdCByYl9ub2RlICpsZWZ0bW9zdDtcXG4gXFxuLVxcdFdBUk5fT05fT05DRSghUkJfRU1QVFlfTk9ERShcXHUwMDI2cC1cXHUwMDNlcHVzaGFibGVfZGxfdGFza3MpKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFSQl9FTVBUWV9OT0RFKFxcdTAwMjZwLVxcdTAwM2VwdXNoYWJsZV9kbF90YXNrcykpO1xcbiBcXG4gXFx0bGVmdG1vc3QgPSByYl9hZGRfY2FjaGVkKFxcdTAwMjZwLVxcdTAwM2VwdXNoYWJsZV9kbF90YXNrcyxcXG4gXFx0XFx0XFx0XFx0IFxcdTAwMjZycS1cXHUwMDNlZGwucHVzaGFibGVfZGxfdGFza3Nfcm9vdCxcXG5AQCAtNjY0LDcgKzY2NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnEgKmRsX3Rhc2tfb2ZmbGluZV9taWdyYXRpb24oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwXFxuIFxcdFxcdFxcdCAqIEZhaWxlZCB0byBmaW5kIGFueSBzdWl0YWJsZSBDUFUuXFxuIFxcdFxcdFxcdCAqIFRoZSB0YXNrIHdpbGwgbmV2ZXIgY29tZSBiYWNrIVxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0V0FSTl9PTl9PTkNFKGRsX2JhbmR3aWR0aF9lbmFibGVkKCkpO1xcbitcXHRcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfYmFuZHdpZHRoX2VuYWJsZWQoKSk7XFxuIFxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBJZiBhZG1pc3Npb24gY29udHJvbCBpcyBkaXNhYmxlZCB3ZVxcbkBAIC03NTYsOCArNzU2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25ld19kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXFxuIFxcdHN0cnVjdCBkbF9ycSAqZGxfcnEgPSBkbF9ycV9vZl9zZShkbF9zZSk7XFxuIFxcdHN0cnVjdCBycSAqcnEgPSBycV9vZl9kbF9ycShkbF9ycSk7XFxuIFxcbi1cXHRXQVJOX09OKGlzX2RsX2Jvb3N0ZWQoZGxfc2UpKTtcXG4tXFx0V0FSTl9PTihkbF90aW1lX2JlZm9yZShycV9jbG9jayhycSksIGRsX3NlLVxcdTAwM2VkZWFkbGluZSkpO1xcbitcXHRXQVJOX09OX0RFRkVSUkVEKGlzX2RsX2Jvb3N0ZWQoZGxfc2UpKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRChkbF90aW1lX2JlZm9yZShycV9jbG9jayhycSksIGRsX3NlLVxcdTAwM2VkZWFkbGluZSkpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogV2UgYXJlIHJhY2luZyB3aXRoIHRoZSBkZWFkbGluZSB0aW1lci4gU28sIGRvIG5vdGhpbmcgYmVjYXVzZVxcbkBAIC04MDEsNyArODAxLDcgQEAgc3RhdGljIHZvaWQgcmVwbGVuaXNoX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcXG4gXFx0c3RydWN0IGRsX3JxICpkbF9ycSA9IGRsX3JxX29mX3NlKGRsX3NlKTtcXG4gXFx0c3RydWN0IHJxICpycSA9IHJxX29mX2RsX3JxKGRsX3JxKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRShwaV9vZihkbF9zZSktXFx1MDAzZWRsX3J1bnRpbWUgXFx1MDAzYz0gMCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwaV9vZihkbF9zZSktXFx1MDAzZWRsX3J1bnRpbWUgXFx1MDAzYz0gMCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUaGlzIGNvdWxkIGJlIHRoZSBjYXNlIGZvciBhICEtZGwgdGFzayB0aGF0IGlzIGJvb3N0ZWQuXFxuQEAgLTk3NSw3ICs5NzUsNyBAQCB1cGRhdGVfZGxfcmV2aXNlZF93YWtldXAoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIHN0cnVjdCBycSAqcnEpXFxuIFxcdCAqXFxuIFxcdCAqIFNlZSB1cGRhdGVfZGxfZW50aXR5KCkgY29tbWVudHMgZm9yIGZ1cnRoZXIgZGV0YWlscy5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT04oZGxfdGltZV9iZWZvcmUoZGxfc2UtXFx1MDAzZWRlYWRsaW5lLCBycV9jbG9jayhycSkpKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRChkbF90aW1lX2JlZm9yZShkbF9zZS1cXHUwMDNlZGVhZGxpbmUsIHJxX2Nsb2NrKHJxKSkpO1xcbiBcXG4gXFx0ZGxfc2UtXFx1MDAzZXJ1bnRpbWUgPSAoZGxfc2UtXFx1MDAzZWRsX2RlbnNpdHkgKiBsYXhpdHkpIFxcdTAwM2VcXHUwMDNlIEJXX1NISUZUO1xcbiB9XFxuQEAgLTEwODAsNyArMTA4MCw3IEBAIHN0YXRpYyBpbnQgc3RhcnRfZGxfdGltZXIoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXFxuIFxcdCAqIChjdXJyZW50IHUgXFx1MDAzZSBVKS5cXG4gXFx0ICovXFxuIFxcdGlmIChkbF9zZS1cXHUwMDNlZGxfZGVmZXJfYXJtZWQpIHtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFkbF9zZS1cXHUwMDNlZGxfdGhyb3R0bGVkKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFkbF9zZS1cXHUwMDNlZGxfdGhyb3R0bGVkKTtcXG4gXFx0XFx0YWN0ID0gbnNfdG9fa3RpbWUoZGxfc2UtXFx1MDAzZWRlYWRsaW5lIC0gZGxfc2UtXFx1MDAzZXJ1bnRpbWUpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBhY3QgPSBkZWFkbGluZSAtIHJlbC1kZWFkbGluZSArIHBlcmlvZCAqL1xcbkBAIC0xNDUxLDcgKzE0NTEsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9kbF9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgczY0XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIE5vbi1zZXJ2ZXJzIHdvdWxkIG5ldmVyIGdldCB0aW1lIGFjY291bnRlZCB3aGlsZSB0aHJvdHRsZWQuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoIWRsX3NlcnZlcihkbF9zZSkpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWRsX3NlcnZlcihkbF9zZSkpO1xcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2hpbGUgdGhlIHNlcnZlciBpcyBtYXJrZWQgaWRsZSwgZG8gbm90IHB1c2ggb3V0IHRoZVxcbkBAIC0xNDkyLDcgKzE0OTIsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9kbF9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgczY0XFxuIFxcdFxcdCAqIGFuZCBxdWV1ZSByaWdodCBhd2F5LiBPdGhlcndpc2Ugbm90aGluZyBtaWdodCBxdWV1ZSBpdC4gVGhhdCdzIHNpbWlsYXJcXG4gXFx0XFx0ICogdG8gd2hhdCBlbnF1ZXVlX2RsX2VudGl0eSgpIGRvZXMgb24gc3RhcnRfZGxfdGltZXI9PTAuIEZvciBub3csIGp1c3Qgd2Fybi5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdFdBUk5fT05fT05DRSghc3RhcnRfZGxfdGltZXIoZGxfc2UpKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzdGFydF9kbF90aW1lcihkbF9zZSkpO1xcbiBcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuQEAgLTE4MDEsNyArMTgwMSw3IEBAIHZvaWQgZGxfc2VydmVyX3N0YXJ0KHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlKVxcbiBcXHQgKi9cXG4gXFx0cnEtXFx1MDAzZWRvbm9yLVxcdTAwM2VzY2hlZF9jbGFzcy1cXHUwMDNldXBkYXRlX2N1cnIocnEpO1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghY3B1X29ubGluZShjcHVfb2YocnEpKSkpXFxuK1xcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNwdV9vbmxpbmUoY3B1X29mKHJxKSkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHR0cmFjZV9zY2hlZF9kbF9zZXJ2ZXJfc3RhcnRfdHAoZGxfc2UsIGNwdV9vZihycSksIGRsX2dldF90eXBlKGRsX3NlLCBycSkpO1xcbkBAIC0yMDczLDcgKzIwNzMsNyBAQCB2b2lkIGluY19kbF90YXNrcyhzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IGRsX3JxICpkbF9ycSlcXG4gc3RhdGljIGlubGluZVxcbiB2b2lkIGRlY19kbF90YXNrcyhzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IGRsX3JxICpkbF9ycSlcXG4ge1xcbi1cXHRXQVJOX09OKCFkbF9ycS1cXHUwMDNlZGxfbnJfcnVubmluZyk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQoIWRsX3JxLVxcdTAwM2VkbF9ucl9ydW5uaW5nKTtcXG4gXFx0ZGxfcnEtXFx1MDAzZWRsX25yX3J1bm5pbmctLTtcXG4gXFxuIFxcdGlmICghZGxfc2VydmVyKGRsX3NlKSlcXG5AQCAtMjE2NSw3ICsyMTY1LDcgQEAgc3RhdGljIHZvaWQgX19lbnF1ZXVlX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpO1xcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKCFSQl9FTVBUWV9OT0RFKFxcdTAwMjZkbF9zZS1cXHUwMDNlcmJfbm9kZSkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIVJCX0VNUFRZX05PREUoXFx1MDAyNmRsX3NlLVxcdTAwM2VyYl9ub2RlKSk7XFxuIFxcbiBcXHRyYl9hZGRfY2FjaGVkKFxcdTAwMjZkbF9zZS1cXHUwMDNlcmJfbm9kZSwgXFx1MDAyNmRsX3JxLVxcdTAwM2Vyb290LCBfX2RsX2xlc3MpO1xcbiBcXG5AQCAtMjE4OSw3ICsyMTg5LDcgQEAgc3RhdGljIHZvaWQgX19kZXF1ZXVlX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcXG4gc3RhdGljIHZvaWRcXG4gZW5xdWV1ZV9kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIGludCBmbGFncylcXG4ge1xcbi1cXHRXQVJOX09OX09OQ0Uob25fZGxfcnEoZGxfc2UpKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKG9uX2RsX3JxKGRsX3NlKSk7XFxuIFxcbiBcXHR1cGRhdGVfc3RhdHNfZW5xdWV1ZV9kbChkbF9ycV9vZl9zZShkbF9zZSksIGRsX3NlLCBmbGFncyk7XFxuIFxcbkBAIC0yNjExLDcgKzI2MTEsNyBAQCBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpfX3BpY2tfdGFza19kbChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdGRsX3NlID0gcGlja19uZXh0X2RsX2VudGl0eShkbF9ycSk7XFxuLVxcdFdBUk5fT05fT05DRSghZGxfc2UpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWRsX3NlKTtcXG4gXFxuIFxcdGlmIChkbF9zZXJ2ZXIoZGxfc2UpKSB7XFxuIFxcdFxcdHAgPSBkbF9zZS1cXHUwMDNlc2VydmVyX3BpY2tfdGFzayhkbF9zZSwgcmYpO1xcbkBAIC0yODIzLDEyICsyODIzLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF9wdXNoYWJsZV9kbF90YXNrKHN0cnVjdCBycSAqcnEpXFxuIFxcdGlmICghcClcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UocnEtXFx1MDAzZWNwdSAhPSB0YXNrX2NwdShwKSk7XFxuLVxcdFdBUk5fT05fT05DRSh0YXNrX2N1cnJlbnQocnEsIHApKTtcXG4tXFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZW5yX2NwdXNfYWxsb3dlZCBcXHUwMDNjPSAxKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVxcdTAwM2VjcHUgIT0gdGFza19jcHUocCkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19jdXJyZW50KHJxLCBwKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2Vucl9jcHVzX2FsbG93ZWQgXFx1MDAzYz0gMSk7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UoIXRhc2tfb25fcnFfcXVldWVkKHApKTtcXG4tXFx0V0FSTl9PTl9PTkNFKCFkbF90YXNrKHApKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfdGFzayhwKSk7XFxuIFxcbiBcXHRyZXR1cm4gcDtcXG4gfVxcbkBAIC0yOTQ0LDcgKzI5NDQsNyBAQCBzdGF0aWMgaW50IHB1c2hfZGxfdGFzayhzdHJ1Y3QgcnEgKnJxKVxcbiBcXHRpZiAoaXNfbWlncmF0aW9uX2Rpc2FibGVkKG5leHRfdGFzaykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKFdBUk5fT04obmV4dF90YXNrID09IHJxLVxcdTAwM2VjdXJyKSlcXG4rXFx0aWYgKFdBUk5fT05fREVGRVJSRUQobmV4dF90YXNrID09IHJxLVxcdTAwM2VjdXJyKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHQvKiBXZSBtaWdodCByZWxlYXNlIHJxIGxvY2sgKi9cXG5AQCAtMzA1MCw4ICszMDUwLDggQEAgc3RhdGljIHZvaWQgcHVsbF9kbF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChwIFxcdTAwMjZcXHUwMDI2IGRsX3RpbWVfYmVmb3JlKHAtXFx1MDAzZWRsLmRlYWRsaW5lLCBkbWluKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgZGxfdGFza19pc19lYXJsaWVzdF9kZWFkbGluZShwLCB0aGlzX3JxKSkge1xcbi1cXHRcXHRcXHRXQVJOX09OKHAgPT0gc3JjX3JxLVxcdTAwM2VjdXJyKTtcXG4tXFx0XFx0XFx0V0FSTl9PTighdGFza19vbl9ycV9xdWV1ZWQocCkpO1xcbitcXHRcXHRcXHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gc3JjX3JxLVxcdTAwM2VjdXJyKTtcXG4rXFx0XFx0XFx0V0FSTl9PTl9ERUZFUlJFRCghdGFza19vbl9ycV9xdWV1ZWQocCkpO1xcbiBcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogVGhlbiB3ZSBwdWxsIGlmZiBwIGhhcyBhY3R1YWxseSBhbiBlYXJsaWVyXFxuQEAgLTMxMDksNyArMzEwOSw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbiB7XFxuIFxcdHN0cnVjdCBycSAqcnE7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UoIWRsX3Rhc2socCkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWRsX3Rhc2socCkpO1xcbiBcXG4gXFx0cnEgPSB0YXNrX3JxKHApO1xcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0LmMgYi9rZXJuZWwvc2NoZWQvZXh0LmNcXG5pbmRleCA1ZDJkMTk0NzNhODJlOC4uNDdkM2E0YzE2NDU1YWMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC5jXFxuKysrIGIva2VybmVsL3NjaGVkL2V4dC5jXFxuQEAgLTUxMiwxMiArNTEyLDEyIEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAqIFNvIGlmIGtmX3Rhc2tzW10gaXMgc2V0LCBAcCdzIHNjaGVkdWxlci1wcm90ZWN0ZWQgZmllbGRzIGFyZSBzdGFibGUuXFxuICAqXFxuICAqIGtmX3Rhc2tzW10gY2FuIG5vdCBzdGFjaywgc28gdGFzay1iYXNlZCBTQ1ggb3BzIG11c3Qgbm90IG5lc3QuIFRoZVxcbi0gKiBXQVJOX09OX09OQ0UoKSBpbiBlYWNoIG1hY3JvIGNhdGNoZXMgYSByZS1lbnRyeSBvZiBhbnkgb2YgdGhlIHRocmVlIHZhcmlhbnRzXFxuLSAqIHdoaWxlIGEgcHJldmlvdXMgb25lIGlzIHN0aWxsIGluIHByb2dyZXNzLlxcbisgKiBXQVJOX09OX09OQ0VfREVGRVJSRUQoKSBpbiBlYWNoIG1hY3JvIGNhdGNoZXMgYSByZS1lbnRyeSBvZiBhbnkgb2YgdGhlIHRocmVlXFxuKyAqIHZhcmlhbnRzIHdoaWxlIGEgcHJldmlvdXMgb25lIGlzIHN0aWxsIGluIHByb2dyZXNzLlxcbiAgKi9cXG4gI2RlZmluZSBTQ1hfQ0FMTF9PUF9UQVNLKHNjaCwgb3AsIGxvY2tlZF9ycSwgdGFzaywgYXJncy4uLilcXHRcXHRcXHRcXFxcXFxuIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFdBUk5fT05fT05DRShjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0pO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXFx1MDAzZXNjeC5rZl90YXNrc1swXSk7XFx0XFx0XFx0XFxcXFxcbiBcXHRjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0U0NYX0NBTExfT1AoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2ssICMjYXJncyk7XFx0XFx0XFx0XFxcXFxcbiBcXHRjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0gPSBOVUxMO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNTI2LDcgKzUyNiw3IEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICNkZWZpbmUgU0NYX0NBTExfT1BfVEFTS19SRVQoc2NoLCBvcCwgbG9ja2VkX3JxLCB0YXNrLCBhcmdzLi4uKVxcdFxcdFxcdFxcXFxcXG4gKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdF9fdHlwZW9mX18oKHNjaCktXFx1MDAzZW9wcy5vcCh0YXNrLCAjI2FyZ3MpKSBfX3JldDtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFdBUk5fT05fT05DRShjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0pO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXFx1MDAzZXNjeC5rZl90YXNrc1swXSk7XFx0XFx0XFx0XFxcXFxcbiBcXHRjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0X19yZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2ssICMjYXJncyk7XFx0XFx0XFxcXFxcbiBcXHRjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0gPSBOVUxMO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNTM2LDcgKzUzNiw3IEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICNkZWZpbmUgU0NYX0NBTExfT1BfMlRBU0tTX1JFVChzY2gsIG9wLCBsb2NrZWRfcnEsIHRhc2swLCB0YXNrMSwgYXJncy4uLilcXHRcXFxcXFxuICh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRfX3R5cGVvZl9fKChzY2gpLVxcdTAwM2VvcHMub3AodGFzazAsIHRhc2sxLCAjI2FyZ3MpKSBfX3JldDtcXHRcXHRcXHRcXFxcXFxuLVxcdFdBUk5fT05fT05DRShjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0pO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXFx1MDAzZXNjeC5rZl90YXNrc1swXSk7XFx0XFx0XFx0XFxcXFxcbiBcXHRjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGN1cnJlbnQtXFx1MDAzZXNjeC5rZl90YXNrc1sxXSA9IHRhc2sxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0X19yZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2swLCB0YXNrMSwgIyNhcmdzKTtcXHRcXFxcXFxuQEAgLTY4Nyw3ICs2ODcsNyBAQCBzdGF0aWMgYm9vbCBubGRzcV9jdXJzb3JfbG9zdF90YXNrKHN0cnVjdCBzY3hfZHNxX2xpc3Rfbm9kZSAqY3Vyc29yLFxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdC8qIGlmIEBwIGhhcyBzdGF5ZWQgb24gQGRzcSwgaXRzIHJxIGNvdWxkbid0IGhhdmUgY2hhbmdlZCAqL1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKHJxICE9IHRhc2tfcnEocCkpKVxcbitcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxICE9IHRhc2tfcnEocCkpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdHJldHVybiBmYWxzZTtcXG5AQCAtMTI4Miw3ICsxMjgyLDcgQEAgc3RhdGljIHZvaWQgc2NoZWR1bGVfcmVlbnFfbG9jYWwoc3RydWN0IHJxICpycSwgdTY0IHJlZW5xX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBzY3hfc2NoZWQgKnJvb3QgPSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQoc2N4X3Jvb3QpO1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghcm9vdCkpXFxuK1xcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJvb3QpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRzY2hlZHVsZV9kc3FfcmVlbnEocm9vdCwgXFx1MDAyNnJxLVxcdTAwM2VzY3gubG9jYWxfZHNxLCByZWVucV9mbGFncywgcnEpO1xcbkBAIC0xMzc5LDcgKzEzNzksNyBAQCBzdGF0aWMgdm9pZCBkc3FfaW5jX25yKHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlblxcbiBcXHQgKi9cXG4gXFx0aWYgKGVucV9mbGFncyBcXHUwMDI2IFNDWF9FTlFfSU1NRUQpIHtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGRzcS1cXHUwMDNlaWQgIT0gU0NYX0RTUV9MT0NBTCkpIHtcXG4tXFx0XFx0XFx0V0FSTl9PTl9PTkNFKCEoZW5xX2ZsYWdzIFxcdTAwMjYgU0NYX0VOUV9HRFNRX0ZBTExCQUNLKSk7XFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKGVucV9mbGFncyBcXHUwMDI2IFNDWF9FTlFfR0RTUV9GQUxMQkFDSykpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFx0XFx0cC1cXHUwMDNlc2N4LmZsYWdzIHw9IFNDWF9UQVNLX0lNTUVEO1xcbkBAIC0xMzg4LDcgKzEzODgsNyBAQCBzdGF0aWMgdm9pZCBkc3FfaW5jX25yKHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlblxcbiBcXHRpZiAocC1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjYgU0NYX1RBU0tfSU1NRUQpIHtcXG4gXFx0XFx0c3RydWN0IHJxICpycSA9IGNvbnRhaW5lcl9vZihkc3EsIHN0cnVjdCBycSwgc2N4LmxvY2FsX2RzcSk7XFxuIFxcbi1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGRzcS1cXHUwMDNlaWQgIT0gU0NYX0RTUV9MT0NBTCkpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLVxcdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0XFx0cnEtXFx1MDAzZXNjeC5ucl9pbW1lZCsrO1xcbkBAIC0xNDEwLDggKzE0MTAsOCBAQCBzdGF0aWMgdm9pZCBkc3FfZGVjX25yKHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIFxcdGlmIChwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19JTU1FRCkge1xcbiBcXHRcXHRzdHJ1Y3QgcnEgKnJxID0gY29udGFpbmVyX29mKGRzcSwgc3RydWN0IHJxLCBzY3gubG9jYWxfZHNxKTtcXG4gXFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UoZHNxLVxcdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSB8fFxcbi1cXHRcXHQgICAgV0FSTl9PTl9PTkNFKHJxLVxcdTAwM2VzY3gubnJfaW1tZWQgXFx1MDAzYz0gMCkpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLVxcdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSB8fFxcbitcXHRcXHQgICAgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVxcdTAwM2VzY3gubnJfaW1tZWQgXFx1MDAzYz0gMCkpXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdFxcdHJxLVxcdTAwM2VzY3gubnJfaW1tZWQtLTtcXG5AQCAtMTUyMSw5ICsxNTIxLDkgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hfZW5xdWV1ZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsXFxuIHtcXG4gXFx0Ym9vbCBpc19sb2NhbCA9IGRzcS1cXHUwMDNlaWQgPT0gU0NYX0RTUV9MT0NBTDtcXG4gXFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guZHNxIHx8ICFsaXN0X2VtcHR5KFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xcbi1cXHRXQVJOX09OX09OQ0UoKHAtXFx1MDAzZXNjeC5kc3FfZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19EU1FfT05fUFJJUSkgfHxcXG4tXFx0XFx0ICAgICAhUkJfRU1QVFlfTk9ERShcXHUwMDI2cC1cXHUwMDNlc2N4LmRzcV9wcmlxKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VzY3guZHNxIHx8ICFsaXN0X2VtcHR5KFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoKHAtXFx1MDAzZXNjeC5kc3FfZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19EU1FfT05fUFJJUSkgfHxcXG4rXFx0XFx0XFx0ICAgICAgIVJCX0VNUFRZX05PREUoXFx1MDAyNnAtXFx1MDAzZXNjeC5kc3FfcHJpcSkpO1xcbiBcXG4gXFx0aWYgKCFpc19sb2NhbCkge1xcbiBcXHRcXHRyYXdfc3Bpbl9sb2NrX25lc3RlZChcXHUwMDI2ZHNxLVxcdTAwM2Vsb2NrLFxcbkBAIC0xNjQ2LDcgKzE2NDYsNyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaF9lbnF1ZXVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSxcXG4gc3RhdGljIHZvaWQgdGFza191bmxpbmtfZnJvbV9kc3Eoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EpXFxuIHtcXG4tXFx0V0FSTl9PTl9PTkNFKGxpc3RfZW1wdHkoXFx1MDAyNnAtXFx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChsaXN0X2VtcHR5KFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xcbiBcXG4gXFx0aWYgKHAtXFx1MDAzZXNjeC5kc3FfZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19EU1FfT05fUFJJUSkge1xcbiBcXHRcXHRyYl9lcmFzZShcXHUwMDI2cC1cXHUwMDNlc2N4LmRzcV9wcmlxLCBcXHUwMDI2ZHNxLVxcdTAwM2VwcmlxKTtcXG5AQCAtMTcwOSw3ICsxNzA5LDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hfZGVxdWV1ZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIFxcdFxcdCAqIGhvbGRpbmdfY3B1IHdoaWNoIHRlbGxzIGRpc3BhdGNoX3RvX2xvY2FsX2RzcSgpIHRoYXQgaXQgbG9zdFxcbiBcXHRcXHQgKiB0aGUgcmFjZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2cC1cXHUwMDNlc2N4LmRzcV9saXN0Lm5vZGUpKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xcbiBcXHRcXHRwLVxcdTAwM2VzY3guaG9sZGluZ19jcHUgPSAtMTtcXG4gXFx0fVxcbiBcXHRwLVxcdTAwM2VzY3guZHNxID0gTlVMTDtcXG5AQCAtMTc4Nyw4ICsxNzg3LDggQEAgc3RhdGljIHZvaWQgbWFya19kaXJlY3RfZGlzcGF0Y2goc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guZGRzcF9kc3FfaWQgIT0gU0NYX0RTUV9JTlZBTElEKTtcXG4tXFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZXNjeC5kZHNwX2VucV9mbGFncyk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VzY3guZGRzcF9kc3FfaWQgIT0gU0NYX0RTUV9JTlZBTElEKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZXNjeC5kZHNwX2VucV9mbGFncyk7XFxuIFxcbiBcXHRwLVxcdTAwM2VzY3guZGRzcF9kc3FfaWQgPSBkc3FfaWQ7XFxuIFxcdHAtXFx1MDAzZXNjeC5kZHNwX2VucV9mbGFncyA9IGVucV9mbGFncztcXG5AQCAtMTg1NSw3ICsxODU1LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0X2Rpc3BhdGNoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZXNjeC5kc3EgfHwgIWxpc3RfZW1wdHkoXFx1MDAyNnAtXFx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VzY3guZHNxIHx8ICFsaXN0X2VtcHR5KFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xcbiBcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSxcXG4gXFx0XFx0XFx0ICAgICAgXFx1MDAyNnJxLVxcdTAwM2VzY3guZGRzcF9kZWZlcnJlZF9sb2NhbHMpO1xcbiBcXHRcXHRzY2hlZHVsZV9kZWZlcnJlZF9sb2NrZWQocnEpO1xcbkBAIC0xODg4LDcgKzE4ODgsNyBAQCBzdGF0aWMgdm9pZCBkb19lbnF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgZW5xX2ZsYWdzLFxcbiBcXHRzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcTtcXG4gXFx0dW5zaWduZWQgbG9uZyBxc2VxO1xcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKCEocC1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjYgU0NYX1RBU0tfUVVFVUVEKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKHAtXFx1MDAzZXNjeC5mbGFncyBcXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpO1xcbiBcXG4gXFx0LyogaW50ZXJuYWwgbW92ZW1lbnRzIC0gcnEgbWlncmF0aW9uIC8gUkVTVE9SRSAqL1xcbiBcXHRpZiAoc3RpY2t5X2NwdSA9PSBjcHVfb2YocnEpKVxcbkBAIC0xOTM4LDExICsxOTM4LDExIEBAIHN0YXRpYyB2b2lkIGRvX2VucXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlbnFfZmxhZ3MsXFxuIFxcdC8qIERTUSBieXBhc3MgZGlkbid0IHRyaWdnZXIsIGVucXVldWUgb24gdGhlIEJQRiBzY2hlZHVsZXIgKi9cXG4gXFx0cXNlcSA9IHJxLVxcdTAwM2VzY3gub3BzX3FzZXErKyBcXHUwMDNjXFx1MDAzYyBTQ1hfT1BTU19RU0VRX1NISUZUO1xcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnAtXFx1MDAzZXNjeC5vcHNfc3RhdGUpICE9IFNDWF9PUFNTX05PTkUpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2cC1cXHUwMDNlc2N4Lm9wc19zdGF0ZSkgIT0gU0NYX09QU1NfTk9ORSk7XFxuIFxcdGF0b21pY19sb25nX3NldChcXHUwMDI2cC1cXHUwMDNlc2N4Lm9wc19zdGF0ZSwgU0NYX09QU1NfUVVFVUVJTkcgfCBxc2VxKTtcXG4gXFxuIFxcdGRkc3BfdGFza3AgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNmRpcmVjdF9kaXNwYXRjaF90YXNrKTtcXG4tXFx0V0FSTl9PTl9PTkNFKCpkZHNwX3Rhc2twKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCpkZHNwX3Rhc2twKTtcXG4gXFx0KmRkc3BfdGFza3AgPSBwO1xcbiBcXG4gXFx0U0NYX0NBTExfT1BfVEFTSyhzY2gsIGVucXVldWUsIHJxLCBwLCBlbnFfZmxhZ3MpO1xcbkBAIC0yMDM5LDcgKzIwMzksNyBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlX3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNvcmVfZW5xX1xcbiBcXHRcXHRzdGlja3lfY3B1ID0gY3B1X29mKHJxKTtcXG4gXFxuIFxcdGlmIChwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19RVUVVRUQpIHtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCF0YXNrX3J1bm5hYmxlKHApKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCF0YXNrX3J1bm5hYmxlKHApKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuQEAgLTIxNTksNyArMjE1OSw3IEBAIHN0YXRpYyBib29sIGRlcXVldWVfdGFza19zY3goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY29yZV9kZXFfXFxuIFxcdFxcdGRlcV9mbGFncyB8PSBTQ1hfREVRX1NDSEVEX0NIQU5HRTtcXG4gXFxuIFxcdGlmICghKHAtXFx1MDAzZXNjeC5mbGFncyBcXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpIHtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKHRhc2tfcnVubmFibGUocCkpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19ydW5uYWJsZShwKSk7XFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbkBAIC0yMjU2LDcgKzIyNTYsNyBAQCBzdGF0aWMgdm9pZCBtb3ZlX2xvY2FsX3Rhc2tfdG9fbG9jYWxfZHNxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3JjX2RzcS1cXHUwMDNlbG9jayk7XFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQoZHN0X3JxKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guaG9sZGluZ19jcHUgXFx1MDAzZT0gMCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VzY3guaG9sZGluZ19jcHUgXFx1MDAzZT0gMCk7XFxuIFxcbiBcXHRpZiAoZW5xX2ZsYWdzIFxcdTAwMjYgKFNDWF9FTlFfSEVBRCB8IFNDWF9FTlFfUFJFRU1QVCkpXFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSwgXFx1MDAyNmRzdF9kc3EtXFx1MDAzZWxpc3QpO1xcbkBAIC0yMjk5LDggKzIyOTksOCBAQCBzdGF0aWMgdm9pZCBtb3ZlX3JlbW90ZV90YXNrX3RvX2xvY2FsX2RzcShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlbnFfZmxhZ3MsXFxuIFxcdCAqIHRydW5jYXRlIHRoZSB1cHBlciAzMiBiaXQuIEFzIHdlIG93biBAcnEsIHdlIGNhbiBwYXNzIHRoZW0gdGhyb3VnaFxcbiBcXHQgKiBAcnEtXFx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MgaW5zdGVhZC5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRSghY3B1bWFza190ZXN0X2NwdShjcHVfb2YoZHN0X3JxKSwgcC1cXHUwMDNlY3B1c19wdHIpKTtcXG4tXFx0V0FSTl9PTl9PTkNFKGRzdF9ycS1cXHUwMDNlc2N4LmV4dHJhX2VucV9mbGFncyk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghY3B1bWFza190ZXN0X2NwdShjcHVfb2YoZHN0X3JxKSwgcC1cXHUwMDNlY3B1c19wdHIpKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRzdF9ycS1cXHUwMDNlc2N4LmV4dHJhX2VucV9mbGFncyk7XFxuIFxcdGRzdF9ycS1cXHUwMDNlc2N4LmV4dHJhX2VucV9mbGFncyA9IGVucV9mbGFncztcXG4gXFx0YWN0aXZhdGVfdGFzayhkc3RfcnEsIHAsIDApO1xcbiBcXHRkc3RfcnEtXFx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MgPSAwO1xcbkBAIC0yMzMxLDcgKzIzMzEsNyBAQCBzdGF0aWMgYm9vbCB0YXNrX2Nhbl9ydW5fb25fcmVtb3RlX3JxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcXG4ge1xcbiBcXHRzMzIgY3B1ID0gY3B1X29mKHJxKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRSh0YXNrX2NwdShwKSA9PSBjcHUpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19jcHUocCkgPT0gY3B1KTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIEBwIGhhcyBtaWdyYXRpb24gZGlzYWJsZWQsIEBwLVxcdTAwM2VjcHVzX3B0ciBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gb25seVxcbkBAIC0yNDExLDcgKzI0MTEsNyBAQCBzdGF0aWMgYm9vbCB1bmxpbmtfZHNxX2FuZF9sb2NrX3NyY19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZkc3EtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZXNjeC5ob2xkaW5nX2NwdSBcXHUwMDNlPSAwKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZXNjeC5ob2xkaW5nX2NwdSBcXHUwMDNlPSAwKTtcXG4gXFx0dGFza191bmxpbmtfZnJvbV9kc3EocCwgZHNxKTtcXG4gXFx0cC1cXHUwMDNlc2N4LmhvbGRpbmdfY3B1ID0gY3B1O1xcbiBcXG5AQCAtMjQyMCw3ICsyNDIwLDcgQEAgc3RhdGljIGJvb2wgdW5saW5rX2RzcV9hbmRfbG9ja19zcmNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbiBcXG4gXFx0LyogdGFza19ycSBjb3VsZG4ndCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgc3RpbGwgdGhlIGhvbGRpbmcgY3B1ICovXFxuIFxcdHJldHVybiBsaWtlbHkocC1cXHUwMDNlc2N4LmhvbGRpbmdfY3B1ID09IGNwdSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0IVdBUk5fT05fT05DRShzcmNfcnEgIT0gdGFza19ycShwKSk7XFxuK1xcdFxcdCFXQVJOX09OX09OQ0VfREVGRVJSRUQoc3JjX3JxICE9IHRhc2tfcnEocCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBjb25zdW1lX3JlbW90ZV90YXNrKHN0cnVjdCBycSAqdGhpc19ycSxcXG5AQCAtMjYzMCw3ICsyNjMwLDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hfdG9fbG9jYWxfZHNxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSxcXG4gXFxuIFxcdC8qIHRhc2tfcnEgY291bGRuJ3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJ3JlIHN0aWxsIHRoZSBob2xkaW5nIGNwdSAqL1xcbiBcXHRpZiAobGlrZWx5KHAtXFx1MDAzZXNjeC5ob2xkaW5nX2NwdSA9PSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIVdBUk5fT05fT05DRShzcmNfcnEgIT0gdGFza19ycShwKSkpIHtcXG4rXFx0ICAgICFXQVJOX09OX09OQ0VfREVGRVJSRUQoc3JjX3JxICE9IHRhc2tfcnEocCkpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIEBwIGlzIHN0YXlpbmcgb24gdGhlIHNhbWUgcnEsIHRoZXJlJ3Mgbm8gbmVlZCB0byBnb1xcbiBcXHRcXHQgKiB0aHJvdWdoIHRoZSBmdWxsIGRlYWN0aXZhdGUvYWN0aXZhdGUgY3ljbGUuIE9wdGltaXplIGJ5XFxuQEAgLTMwOTksNyArMzA5OSw3IEBAIHN0YXRpYyB2b2lkIHB1dF9wcmV2X3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4gXFx0XFx0ICogd2hpY2ggc2hvdWxkIHRyaWdnZXIgYW4gZXhwbGljaXQgZm9sbG93LXVwIHNjaGVkdWxpbmcgZXZlbnQuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAobmV4dCBcXHUwMDI2XFx1MDAyNiBzY2hlZF9jbGFzc19hYm92ZShcXHUwMDI2ZXh0X3NjaGVkX2NsYXNzLCBuZXh0LVxcdTAwM2VzY2hlZF9jbGFzcykpIHtcXG4tXFx0XFx0XFx0V0FSTl9PTl9PTkNFKCEoc2NoLVxcdTAwM2VvcHMuZmxhZ3MgXFx1MDAyNiBTQ1hfT1BTX0VOUV9MQVNUKSk7XFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKHNjaC1cXHUwMDNlb3BzLmZsYWdzIFxcdTAwMjYgU0NYX09QU19FTlFfTEFTVCkpO1xcbiBcXHRcXHRcXHRkb19lbnF1ZXVlX3Rhc2socnEsIHAsIFNDWF9FTlFfTEFTVCwgLTEpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRkb19lbnF1ZXVlX3Rhc2socnEsIHAsIDAsIC0xKTtcXG5AQCAtMzIwMSw3ICszMjAxLDcgQEAgZG9fcGlja190YXNrX3NjeChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLCBib29sIGZvcmNlX3NjeClcXG4gXFx0a2VlcF9wcmV2ID0gcnEtXFx1MDAzZXNjeC5mbGFncyBcXHUwMDI2IFNDWF9SUV9CQUxfS0VFUDtcXG4gXFx0aWYgKHVubGlrZWx5KGtlZXBfcHJldiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIHByZXYtXFx1MDAzZXNjaGVkX2NsYXNzICE9IFxcdTAwMjZleHRfc2NoZWRfY2xhc3MpKSB7XFxuLVxcdFxcdFdBUk5fT05fT05DRShzY3hfZW5hYmxlX3N0YXRlKCkgPT0gU0NYX0VOQUJMRUQpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2N4X2VuYWJsZV9zdGF0ZSgpID09IFNDWF9FTkFCTEVEKTtcXG4gXFx0XFx0a2VlcF9wcmV2ID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuQEAgLTMzMzIsNyArMzMzMiw3IEBAIHN0YXRpYyBpbnQgc2VsZWN0X3Rhc2tfcnFfc2N4KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHByZXZfY3B1LCBpbnQgd2FrZV9mbGFnXFxuIFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqKmRkc3BfdGFza3A7XFxuIFxcbiBcXHRcXHRkZHNwX3Rhc2twID0gdGhpc19jcHVfcHRyKFxcdTAwMjZkaXJlY3RfZGlzcGF0Y2hfdGFzayk7XFxuLVxcdFxcdFdBUk5fT05fT05DRSgqZGRzcF90YXNrcCk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgqZGRzcF90YXNrcCk7XFxuIFxcdFxcdCpkZHNwX3Rhc2twID0gcDtcXG4gXFxuIFxcdFxcdHRoaXNfcnEoKS1cXHUwMDNlc2N4LmluX3NlbGVjdF9jcHUgPSB0cnVlO1xcbkBAIC0zNjIwLDcgKzM2MjAsNyBAQCBzdGF0aWMgdm9pZCBfX3NjeF9lbmFibGVfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4gXFx0ICogdHJhbnNpdGlvbnMgYXJlIGNvbnNpc3RlbnQsIHRoZSBmbGFnIHNob3VsZCBhbHdheXMgYmUgY2xlYXJcXG4gXFx0ICogaGVyZS5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19JTl9DVVNUT0RZKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZXNjeC5mbGFncyBcXHUwMDI2IFNDWF9UQVNLX0lOX0NVU1RPRFkpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogU2V0IHRoZSB3ZWlnaHQgYmVmb3JlIGNhbGxpbmcgb3BzLmVuYWJsZSgpIHNvIHRoYXQgdGhlIHNjaGVkdWxlclxcbkBAIC0zNjUxLDcgKzM2NTEsNyBAQCBzdGF0aWMgdm9pZCBzY3hfZGlzYWJsZV90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiBcXHRzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xcbi1cXHRXQVJOX09OX09OQ0Uoc2N4X2dldF90YXNrX3N0YXRlKHApICE9IFNDWF9UQVNLX0VOQUJMRUQpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2N4X2dldF90YXNrX3N0YXRlKHApICE9IFNDWF9UQVNLX0VOQUJMRUQpO1xcbiBcXG4gXFx0Y2xlYXJfZGlyZWN0X2Rpc3BhdGNoKHApO1xcbiBcXG5AQCAtMzY2NCw3ICszNjY0LDcgQEAgc3RhdGljIHZvaWQgc2N4X2Rpc2FibGVfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4gXFx0ICogdHJhbnNpdGlvbnMgYXJlIGNvbnNpc3RlbnQsIHRoZSBmbGFnIHNob3VsZCBhbHdheXMgYmUgY2xlYXJcXG4gXFx0ICogaGVyZS5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19JTl9DVVNUT0RZKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZXNjeC5mbGFncyBcXHUwMDI2IFNDWF9UQVNLX0lOX0NVU1RPRFkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX3NjeF9kaXNhYmxlX2FuZF9leGl0X3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxcbkBAIC0zNjg5LDcgKzM2ODksNyBAQCBzdGF0aWMgdm9pZCBfX3NjeF9kaXNhYmxlX2FuZF9leGl0X3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxcbiBcXHRcXHRzY3hfZGlzYWJsZV90YXNrKHNjaCwgcCk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRXQVJOX09OX09OQ0UodHJ1ZSk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh0cnVlKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbkBAIC0zNzI2LDcgKzM3MjYsNyBAQCBzdGF0aWMgdm9pZCBzY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcXG4gXFx0ICogcGF0aCwgc28gaXQncyBhbHdheXMgY2xlYXIgd2hlbiBAcCBhcnJpdmVzIGhlcmUgaW4gJVNDWF9UQVNLX05PTkUuXFxuIFxcdCAqL1xcbiBcXHRpZiAocC1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjYgU0NYX1RBU0tfU1VCX0lOSVQpIHtcXG4tXFx0XFx0aWYgKCFXQVJOX09OX09OQ0UoIXNjeF9lbmFibGluZ19zdWJfc2NoZWQpKVxcbitcXHRcXHRpZiAoIVdBUk5fT05fT05DRV9ERUZFUlJFRCghc2N4X2VuYWJsaW5nX3N1Yl9zY2hlZCkpXFxuIFxcdFxcdFxcdHNjeF9zdWJfaW5pdF9jYW5jZWxfdGFzayhzY3hfZW5hYmxpbmdfc3ViX3NjaGVkLCBwKTtcXG4gXFx0XFx0cC1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjY9IH5TQ1hfVEFTS19TVUJfSU5JVDtcXG4gXFx0fVxcbkBAIC0zODE4LDcgKzM4MTgsNyBAQCB2b2lkIHNjeF9jYW5jZWxfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIFxcdFxcdHN0cnVjdCBycV9mbGFncyByZjtcXG4gXFxuIFxcdFxcdHJxID0gdGFza19ycV9sb2NrKHAsIFxcdTAwMjZyZik7XFxuLVxcdFxcdFdBUk5fT05fT05DRShzY3hfZ2V0X3Rhc2tfc3RhdGUocCkgXFx1MDAzZT0gU0NYX1RBU0tfUkVBRFkpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2N4X2dldF90YXNrX3N0YXRlKHApIFxcdTAwM2U9IFNDWF9UQVNLX1JFQURZKTtcXG4gXFx0XFx0c2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzY3hfdGFza19zY2hlZChwKSwgcCk7XFxuIFxcdFxcdHRhc2tfcnFfdW5sb2NrKHJxLCBwLCBcXHUwMDI2cmYpO1xcbiBcXHR9XFxuQEAgLTM5ODYsNyArMzk4Niw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZGRzcF9kZWZlcnJlZF9sb2NhbHMoc3RydWN0IHJxICpycSlcXG4gXFx0XFx0Y2xlYXJfZGlyZWN0X2Rpc3BhdGNoKHApO1xcbiBcXG4gXFx0XFx0ZHNxID0gZmluZF9kc3FfZm9yX2Rpc3BhdGNoKHNjaCwgcnEsIGRzcV9pZCwgdGFza19jcHUocCkpO1xcbi1cXHRcXHRpZiAoIVdBUk5fT05fT05DRShkc3EtXFx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKVxcbitcXHRcXHRpZiAoIVdBUk5fT05fT05DRV9ERUZFUlJFRChkc3EtXFx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKVxcbiBcXHRcXHRcXHRkaXNwYXRjaF90b19sb2NhbF9kc3Eoc2NoLCBycSwgZHNxLCBwLCBlbnFfZmxhZ3MpO1xcbiBcXHR9XFxuIH1cXG5AQCAtNDA0MSw3ICs0MDQxLDcgQEAgc3RhdGljIHUzMiByZWVucV9sb2NhbChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsIHU2NCByZWVucV9mbGFncylcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRShyZWVucV9mbGFncyBcXHUwMDI2IF9fU0NYX1JFRU5RX1RTUl9NQVNLKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChyZWVucV9mbGFncyBcXHUwMDI2IF9fU0NYX1JFRU5RX1RTUl9NQVNLKSlcXG4gXFx0XFx0cmVlbnFfZmxhZ3MgXFx1MDAyNj0gfl9fU0NYX1JFRU5RX1RTUl9NQVNLO1xcbiBcXHRpZiAocnFfaXNfb3BlbihycSwgMCkpXFxuIFxcdFxcdHJlZW5xX2ZsYWdzIHw9IFNDWF9SRUVOUV9UU1JfUlFfT1BFTjtcXG5AQCAtNDA3OCw3ICs0MDc4LDcgQEAgc3RhdGljIHUzMiByZWVucV9sb2NhbChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsIHU2NCByZWVucV9mbGFncylcXG4gXFxuIFxcdFxcdGRpc3BhdGNoX2RlcXVldWUocnEsIHApO1xcbiBcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSykpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjYgU0NYX1RBU0tfUkVFTlFfUkVBU09OX01BU0spKVxcbiBcXHRcXHRcXHRwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNj0gflNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLO1xcbiBcXHRcXHRwLVxcdTAwM2VzY3guZmxhZ3MgfD0gcmVhc29uO1xcbiBcXG5AQCAtNDE5OSw3ICs0MTk5LDcgQEAgc3RhdGljIHZvaWQgcmVlbnFfdXNlcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSwgdTY0IHJlZW5xX2ZsYWdcXG4gXFx0XFx0ZGlzcGF0Y2hfZGVxdWV1ZV9sb2NrZWQocCwgZHNxKTtcXG4gXFx0XFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZkc3EtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSykpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjYgU0NYX1RBU0tfUkVFTlFfUkVBU09OX01BU0spKVxcbiBcXHRcXHRcXHRwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNj0gflNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLO1xcbiBcXHRcXHRwLVxcdTAwM2VzY3guZmxhZ3MgfD0gcmVhc29uO1xcbiBcXG5AQCAtNDM2MCw3ICs0MzYwLDcgQEAgaW50IHNjeF9jZ3JvdXBfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuIFxcdFxcdHN0cnVjdCBjZ3JvdXAgKmZyb20gPSB0Z19jZ3JwKHRhc2tfZ3JvdXAocCkpO1xcbiBcXHRcXHRzdHJ1Y3QgY2dyb3VwICp0byA9IHRnX2NncnAoY3NzX3RnKGNzcykpO1xcbiBcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZXNjeC5jZ3JwX21vdmluZ19mcm9tKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZXNjeC5jZ3JwX21vdmluZ19mcm9tKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIHNjaGVkX21vdmVfdGFzaygpIG9taXRzIGlkZW50aXR5IG1pZ3JhdGlvbnMuIExldCdzIG1hdGNoIHRoZVxcbkBAIC00NjE3LDcgKzQ2MTcsNyBAQCBzdGF0aWMgdm9pZCBleGl0X2RzcShzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSlcXG4gXFx0XFx0ICogVGhlcmUgbXVzdCBoYXZlIGJlZW4gYSBSQ1UgZ3JhY2UgcGVyaW9kIHNpbmNlIHRoZSBsYXN0XFxuIFxcdFxcdCAqIGluc2VydGlvbiBhbmQgQGRzcSBzaG91bGQgYmUgb2ZmIHRoZSBkZWZlcnJlZCBsaXN0IGJ5IG5vdy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNmRydS1cXHUwMDNlbm9kZSkpKSB7XFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXFx1MDAyNmRydS1cXHUwMDNlbm9kZSkpKSB7XFxuIFxcdFxcdFxcdGd1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlKShcXHUwMDI2cnEtXFx1MDAzZXNjeC5kZWZlcnJlZF9yZWVucV9sb2NrKTtcXG4gXFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2ZHJ1LVxcdTAwM2Vub2RlKTtcXG4gXFx0XFx0fVxcbkBAIC00NzQ1LDcgKzQ3NDUsNyBAQCBzdGF0aWMgaW50IHNjeF9jZ3JvdXBfaW5pdChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXFxuIFxcdFxcdHRnLVxcdTAwM2VzY3guZmxhZ3MgfD0gU0NYX1RHX0lOSVRFRDtcXG4gXFx0fVxcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKHNjeF9jZ3JvdXBfZW5hYmxlZCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChzY3hfY2dyb3VwX2VuYWJsZWQpO1xcbiBcXHRzY3hfY2dyb3VwX2VuYWJsZWQgPSB0cnVlO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQ4NDgsNyArNDg0OCw3IEBAIHN0YXRpYyB2b2lkIHNjeF9zY2hlZF9mcmVlX3JjdV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0XFx0ICogcGVyaW9kLiBBcyB0aGF0IGJsb2NrcyBuZXcgZGVmZXJyYWxzLCBhbGxcXG4gXFx0XFx0ICogZGVmZXJyZWRfcmVlbnFfbG9jYWxfbm9kZSdzIG11c3QgYmUgb2ZmLWxpc3QgYnkgbm93LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZwY3B1LVxcdTAwM2VkZWZlcnJlZF9yZWVucV9sb2NhbC5ub2RlKSk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcXHUwMDI2cGNwdS1cXHUwMDNlZGVmZXJyZWRfcmVlbnFfbG9jYWwubm9kZSkpO1xcbiBcXG4gXFx0XFx0ZXhpdF9kc3EoYnlwYXNzX2RzcShzY2gsIGNwdSkpO1xcbiBcXHR9XFxuQEAgLTUzMjQsNyArNTMyNCw3IEBAIHN0YXRpYyBib29sIGluY19ieXBhc3NfZGVwdGgoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbiB7XFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnNjeF9ieXBhc3NfbG9jayk7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0Uoc2NoLVxcdTAwM2VieXBhc3NfZGVwdGggXFx1MDAzYyAwKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjaC1cXHUwMDNlYnlwYXNzX2RlcHRoIFxcdTAwM2MgMCk7XFxuIFxcdFdSSVRFX09OQ0Uoc2NoLVxcdTAwM2VieXBhc3NfZGVwdGgsIHNjaC1cXHUwMDNlYnlwYXNzX2RlcHRoICsgMSk7XFxuIFxcdGlmIChzY2gtXFx1MDAzZWJ5cGFzc19kZXB0aCAhPSAxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTUzMzksNyArNTMzOSw3IEBAIHN0YXRpYyBib29sIGRlY19ieXBhc3NfZGVwdGgoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbiB7XFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnNjeF9ieXBhc3NfbG9jayk7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0Uoc2NoLVxcdTAwM2VieXBhc3NfZGVwdGggXFx1MDAzYyAxKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjaC1cXHUwMDNlYnlwYXNzX2RlcHRoIFxcdTAwM2MgMSk7XFxuIFxcdFdSSVRFX09OQ0Uoc2NoLVxcdTAwM2VieXBhc3NfZGVwdGgsIHNjaC1cXHUwMDNlYnlwYXNzX2RlcHRoIC0gMSk7XFxuIFxcdGlmIChzY2gtXFx1MDAzZWJ5cGFzc19kZXB0aCAhPSAwKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTUzNjAsNyArNTM2MCw3IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9ieXBhc3NfZHNwKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4gXFx0ICogQHNjaC1cXHUwMDNlYnlwYXNzX2RlcHRoIHRyYW5zaXRpb25pbmcgZnJvbSAwIHRvIDEgdHJpZ2dlcnMgZW5hYmxpbmcuXFxuIFxcdCAqIFNob3VsZG4ndCBzdGFnZ2VyLlxcbiBcXHQgKi9cXG4tXFx0aWYgKFdBUk5fT05fT05DRSh0ZXN0X2FuZF9zZXRfYml0KDAsIFxcdTAwMjZzY2gtXFx1MDAzZWJ5cGFzc19kc3BfY2xhaW0pKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCh0ZXN0X2FuZF9zZXRfYml0KDAsIFxcdTAwMjZzY2gtXFx1MDAzZWJ5cGFzc19kc3BfY2xhaW0pKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0LypcXG5AQCAtNTM4MCwxMSArNTM4MCwxMSBAQCBzdGF0aWMgdm9pZCBlbmFibGVfYnlwYXNzX2RzcChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXFxuIFxcdCAqIEJ1bXAgZW5hYmxlIGRlcHRoIG9uIGJvdGggQHNjaCBhbmQgYnlwYXNzIGRpc3BhdGNoIGhvc3QuXFxuIFxcdCAqL1xcbiBcXHRyZXQgPSBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2c2NoLVxcdTAwM2VieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7XFxuLVxcdFdBUk5fT05fT05DRShyZXQgXFx1MDAzYz0gMCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQgXFx1MDAzYz0gMCk7XFxuIFxcbiBcXHRpZiAoaG9zdCAhPSBzY2gpIHtcXG4gXFx0XFx0cmV0ID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmhvc3QtXFx1MDAzZWJ5cGFzc19kc3BfZW5hYmxlX2RlcHRoKTtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKHJldCBcXHUwMDNjPSAwKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJldCBcXHUwMDNjPSAwKTtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5AQCAtNTQwNSwxMSArNTQwNSwxMSBAQCBzdGF0aWMgdm9pZCBkaXNhYmxlX2J5cGFzc19kc3Aoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRyZXQgPSBhdG9taWNfZGVjX3JldHVybihcXHUwMDI2c2NoLVxcdTAwM2VieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7XFxuLVxcdFdBUk5fT05fT05DRShyZXQgXFx1MDAzYyAwKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJldCBcXHUwMDNjIDApO1xcbiBcXG4gXFx0aWYgKHNjeF9wYXJlbnQoc2NoKSkge1xcbiBcXHRcXHRyZXQgPSBhdG9taWNfZGVjX3JldHVybihcXHUwMDI2c2N4X3BhcmVudChzY2gpLVxcdTAwM2VieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7XFxuLVxcdFxcdFdBUk5fT05fT05DRShyZXQgXFx1MDAzYyAwKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJldCBcXHUwMDNjIDApO1xcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jXFxuaW5kZXggM2ViZWMxODZmOTgyMzYuLjEyMTNlNzc2NjVmZTkzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9mYWlyLmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvZmFpci5jXFxuQEAgLTQwNCw3ICs0MDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWxfbGVhZl9jZnNfcnEoc3RydWN0IGNmc19ycSAqY2ZzX3JxKVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9saXN0X2xlYWZfY2ZzX3JxKHN0cnVjdCBycSAqcnEpXFxuIHtcXG4tXFx0V0FSTl9PTl9PTkNFKHJxLVxcdTAwM2V0bXBfYWxvbmVfYnJhbmNoICE9IFxcdTAwMjZycS1cXHUwMDNlbGVhZl9jZnNfcnFfbGlzdCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycS1cXHUwMDNldG1wX2Fsb25lX2JyYW5jaCAhPSBcXHUwMDI2cnEtXFx1MDAzZWxlYWZfY2ZzX3JxX2xpc3QpO1xcbiB9XFxuIFxcbiAvKiBJdGVyYXRlIHRocm91Z2ggYWxsIGxlYWYgY2ZzX3JxJ3Mgb24gYSBydW5xdWV1ZSAqL1xcbkBAIC02ODksNyArNjg5LDcgQEAgX19zdW1fd192cnVudGltZV9hZGQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcXG4gXFx0czY0IHdfdnJ1bnRpbWUsIGtleSA9IGVudGl0eV9rZXkoY2ZzX3JxLCBzZSk7XFxuIFxcbiBcXHR3X3ZydW50aW1lID0ga2V5ICogd2VpZ2h0O1xcbi1cXHRXQVJOX09OX09OQ0UoKHdfdnJ1bnRpbWUgXFx1MDAzZVxcdTAwM2UgNjMpICE9ICh3X3ZydW50aW1lIFxcdTAwM2VcXHUwMDNlIDYyKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgod192cnVudGltZSBcXHUwMDNlXFx1MDAzZSA2MykgIT0gKHdfdnJ1bnRpbWUgXFx1MDAzZVxcdTAwM2UgNjIpKTtcXG4gXFxuIFxcdGNmc19ycS1cXHUwMDNlc3VtX3dfdnJ1bnRpbWUgKz0gd192cnVudGltZTtcXG4gXFx0Y2ZzX3JxLVxcdTAwM2VzdW1fd2VpZ2h0ICs9IHdlaWdodDtcXG5AQCAtODYxLDcgKzg2MSw3IEBAIGJvb2wgdXBkYXRlX2VudGl0eV9sYWcoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcXG4gXFx0dTY0IGF2cnVudGltZSA9IGF2Z192cnVudGltZShjZnNfcnEpO1xcbiBcXHRzNjQgdmxhZyA9IGVudGl0eV9sYWcoY2ZzX3JxLCBzZSwgYXZydW50aW1lKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRSghc2UtXFx1MDAzZW9uX3JxKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzZS1cXHUwMDNlb25fcnEpO1xcbiBcXG4gXFx0aWYgKHNlLVxcdTAwM2VzY2hlZF9kZWxheWVkKSB7XFxuIFxcdFxcdC8qIHByZXZpb3VzIHZsYWcgXFx1MDAzYyAwIG90aGVyd2lzZSBzZSB3b3VsZCBub3QgYmUgZGVsYXllZCAqL1xcbkBAIC0xMTUzLDcgKzExNTMsNyBAQCBzdGF0aWMgc3RydWN0IHNjaGVkX2VudGl0eSAqcGlja19lZXZkZihzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIGJvb2wgcHJvdGVjdClcXG4gXFx0aWYgKHNjaGVkX2ZlYXQoUElDS19CVUREWSkgXFx1MDAyNlxcdTAwMjYgcHJvdGVjdCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgY2ZzX3JxLVxcdTAwM2VuZXh0IFxcdTAwMjZcXHUwMDI2IGVudGl0eV9lbGlnaWJsZShjZnNfcnEsIGNmc19ycS1cXHUwMDNlbmV4dCkpIHtcXG4gXFx0XFx0LyogLVxcdTAwM2VuZXh0IHdpbGwgbmV2ZXIgYmUgZGVsYXllZCAqL1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVxcdTAwM2VuZXh0LVxcdTAwM2VzY2hlZF9kZWxheWVkKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cXHUwMDNlbmV4dC1cXHUwMDNlc2NoZWRfZGVsYXllZCk7XFxuIFxcdFxcdHJldHVybiBjZnNfcnEtXFx1MDAzZW5leHQ7XFxuIFxcdH1cXG4gXFxuQEAgLTQzMDIsOSArNDMwMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2FkX2F2Z19pc19kZWNheWVkKHN0cnVjdCBzY2hlZF9hdmcgKnNhKVxcbiBcXHQgKiBNYWtlIHN1cmUgdGhhdCByb3VuZGluZyBhbmQvb3IgcHJvcGFnYXRpb24gb2YgUEVMVCB2YWx1ZXMgbmV2ZXJcXG4gXFx0ICogYnJlYWsgdGhpcy5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRShzYS1cXHUwMDNlbG9hZF9hdmcgfHxcXG4tXFx0XFx0ICAgICAgc2EtXFx1MDAzZXV0aWxfYXZnIHx8XFxuLVxcdFxcdCAgICAgIHNhLVxcdTAwM2VydW5uYWJsZV9hdmcpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2EtXFx1MDAzZWxvYWRfYXZnIHx8XFxuK1xcdFxcdFxcdCAgICAgIHNhLVxcdTAwM2V1dGlsX2F2ZyB8fFxcbitcXHRcXHRcXHQgICAgICBzYS1cXHUwMDNlcnVubmFibGVfYXZnKTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuQEAgLTU0NjAsNyArNTQ2MCw3IEBAIHBsYWNlX2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCBpbnQgZmxhZ3MpXFxuIFxcbiBcXHRcXHR3ZWlnaHQgPSBhdmdfdnJ1bnRpbWVfd2VpZ2h0KGNmc19ycSwgc2UtXFx1MDAzZWxvYWQud2VpZ2h0KTtcXG4gXFx0XFx0bGFnICo9IGxvYWQgKyB3ZWlnaHQ7XFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWxvYWQpKVxcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsb2FkKSlcXG4gXFx0XFx0XFx0bG9hZCA9IDE7XFxuIFxcdFxcdGxhZyA9IGRpdjY0X2xvbmcobGFnLCBsb2FkKTtcXG4gXFxuQEAgLTU2NTMsNyArNTY1Myw3IEBAIGRlcXVldWVfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBmbGFncylcXG4gXFx0Y2xlYXJfYnVkZGllcyhjZnNfcnEsIHNlKTtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IERFUVVFVUVfREVMQVlFRCkge1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoIXNlLVxcdTAwM2VzY2hlZF9kZWxheWVkKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzZS1cXHUwMDNlc2NoZWRfZGVsYXllZCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGJvb2wgZGVsYXkgPSBzbGVlcDtcXG4gXFx0XFx0LypcXG5AQCAtNTY2Myw3ICs1NjYzLDcgQEAgZGVxdWV1ZV9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiAoREVRVUVVRV9TUEVDSUFMIHwgREVRVUVVRV9USFJPVFRMRSkpXFxuIFxcdFxcdFxcdGRlbGF5ID0gZmFsc2U7XFxuIFxcbi1cXHRcXHRXQVJOX09OX09OQ0UoZGVsYXkgXFx1MDAyNlxcdTAwMjYgc2UtXFx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGVsYXkgXFx1MDAyNlxcdTAwMjYgc2UtXFx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xcbiBcXG4gXFx0XFx0aWYgKHNjaGVkX2ZlYXQoREVMQVlfREVRVUVVRSkgXFx1MDAyNlxcdTAwMjYgZGVsYXkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFlbnRpdHlfZWxpZ2libGUoY2ZzX3JxLCBzZSkpIHtcXG5AQCAtNTc0Nyw3ICs1NzQ3LDcgQEAgc2V0X25leHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGJvb2wgZmlyc3QpXFxuIFxcdH1cXG4gXFxuIFxcdHVwZGF0ZV9zdGF0c19jdXJyX3N0YXJ0KGNmc19ycSwgc2UpO1xcbi1cXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVxcdTAwM2VjdXJyKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cXHUwMDNlY3Vycik7XFxuIFxcdGNmc19ycS1cXHUwMDNlY3VyciA9IHNlO1xcbiBcXG4gXFx0LypcXG5AQCAtNTgxNCw3ICs1ODE0LDcgQEAgc3RhdGljIHZvaWQgcHV0X3ByZXZfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqcHJldilcXG4gXFx0XFx0LyogaW4gIW9uX3JxIGNhc2UsIHVwZGF0ZSBvY2N1cnJlZCBhdCBkZXF1ZXVlICovXFxuIFxcdFxcdHVwZGF0ZV9sb2FkX2F2ZyhjZnNfcnEsIHByZXYsIDApO1xcbiBcXHR9XFxuLVxcdFdBUk5fT05fT05DRShjZnNfcnEtXFx1MDAzZWN1cnIgIT0gcHJldik7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjZnNfcnEtXFx1MDAzZWN1cnIgIT0gcHJldik7XFxuIFxcdGNmc19ycS1cXHUwMDNlY3VyciA9IE5VTEw7XFxuIH1cXG4gXFxuQEAgLTYwMTUsNyArNjAxNSw3IEBAIHN0YXRpYyB2b2lkIHRocm90dGxlX2Nmc19ycV93b3JrKHN0cnVjdCBjYWxsYmFja19oZWFkICp3b3JrKVxcbiBcXHRzdHJ1Y3QgY2ZzX3JxICpjZnNfcnE7XFxuIFxcdHN0cnVjdCBycSAqcnE7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UocCAhPSBjdXJyZW50KTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAgIT0gY3VycmVudCk7XFxuIFxcdHAtXFx1MDAzZXNjaGVkX3Rocm90dGxlX3dvcmsubmV4dCA9IFxcdTAwMjZwLVxcdTAwM2VzY2hlZF90aHJvdHRsZV93b3JrO1xcbiBcXG4gXFx0LypcXG5AQCAtNjA0MSw3ICs2MDQxLDcgQEAgc3RhdGljIHZvaWQgdGhyb3R0bGVfY2ZzX3JxX3dvcmsoc3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmspXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0cnEgPSBzY29wZS5ycTtcXG4gXFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZXRocm90dGxlZCB8fCAhbGlzdF9lbXB0eShcXHUwMDI2cC1cXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cXHUwMDNldGhyb3R0bGVkIHx8ICFsaXN0X2VtcHR5KFxcdTAwMjZwLVxcdTAwM2V0aHJvdHRsZV9ub2RlKSk7XFxuIFxcdFxcdGRlcXVldWVfdGFza19mYWlyKHJxLCBwLCBERVFVRVVFX1NMRUVQIHwgREVRVUVVRV9USFJPVFRMRSk7XFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZwLVxcdTAwM2V0aHJvdHRsZV9ub2RlLCBcXHUwMDI2Y2ZzX3JxLVxcdTAwM2V0aHJvdHRsZWRfbGltYm9fbGlzdCk7XFxuIFxcdFxcdC8qXFxuQEAgLTYwNzIsNyArNjA3Miw3IEBAIHZvaWQgaW5pdF9jZnNfdGhyb3R0bGVfd29yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIHN0YXRpYyB2b2lkIGRldGFjaF90YXNrX2Nmc19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xcbiBzdGF0aWMgdm9pZCBkZXF1ZXVlX3Rocm90dGxlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxcbiB7XFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzZS5vbl9ycSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VzZS5vbl9ycSk7XFxuIFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnAtXFx1MDAzZXRocm90dGxlX25vZGUpO1xcbiBcXG4gXFx0LyogdGFzayBibG9ja2VkIGFmdGVyIHRocm90dGxlZCAqL1xcbkBAIC02MDk0LDcgKzYwOTQsNyBAQCBzdGF0aWMgYm9vbCBlbnF1ZXVlX3Rocm90dGxlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4gXFx0c3RydWN0IGNmc19ycSAqY2ZzX3JxID0gY2ZzX3JxX29mKFxcdTAwMjZwLVxcdTAwM2VzZSk7XFxuIFxcbiBcXHQvKiBAcCBzaG91bGQgaGF2ZSBnb25lIHRocm91Z2ggZGVxdWV1ZV90aHJvdHRsZWRfdGFzaygpIGZpcnN0ICovXFxuLVxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2cC1cXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXFx1MDAyNnAtXFx1MDAzZXRocm90dGxlX25vZGUpKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSB0aHJvdHRsZWQgdGFzayBAcCBpcyBlbnF1ZXVlZCB0byBhIHRocm90dGxlZCBjZnNfcnEsXFxuQEAgLTYxNjIsNyArNjE2Miw3IEBAIHN0YXRpYyBpbnQgdGdfdW50aHJvdHRsZV91cChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpXFxuIFxcbiBcXHRcXHRjZnNfcnEtXFx1MDAzZXRocm90dGxlZF9jbG9ja19zZWxmID0gMDtcXG4gXFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UoKHM2NClkZWx0YSBcXHUwMDNjIDApKVxcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKChzNjQpZGVsdGEgXFx1MDAzYyAwKSlcXG4gXFx0XFx0XFx0ZGVsdGEgPSAwO1xcbiBcXG4gXFx0XFx0Y2ZzX3JxLVxcdTAwM2V0aHJvdHRsZWRfY2xvY2tfc2VsZl90aW1lICs9IGRlbHRhO1xcbkBAIC02MjMxLDggKzYyMzEsOCBAQCBzdGF0aWMgaW50IHRnX3Rocm90dGxlX2Rvd24oc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB2b2lkICpkYXRhKVxcbiBcXHRcXHRjZnNfcnEtXFx1MDAzZXBlbHRfY2xvY2tfdGhyb3R0bGVkID0gMTtcXG4gXFx0fVxcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKGNmc19ycS1cXHUwMDNldGhyb3R0bGVkX2Nsb2NrX3NlbGYpO1xcbi1cXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNmNmc19ycS1cXHUwMDNldGhyb3R0bGVkX2xpbWJvX2xpc3QpKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cXHUwMDNldGhyb3R0bGVkX2Nsb2NrX3NlbGYpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXFx1MDAyNmNmc19ycS1cXHUwMDNldGhyb3R0bGVkX2xpbWJvX2xpc3QpKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTYyNzMsNyArNjI3Myw3IEBAIHN0YXRpYyBib29sIHRocm90dGxlX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXFxuIFxcdCAqIHRocm90dGxlZC1saXN0LiAgcnEtXFx1MDAzZWxvY2sgcHJvdGVjdHMgY29tcGxldGlvbi5cXG4gXFx0ICovXFxuIFxcdGNmc19ycS1cXHUwMDNldGhyb3R0bGVkID0gMTtcXG4tXFx0V0FSTl9PTl9PTkNFKGNmc19ycS1cXHUwMDNldGhyb3R0bGVkX2Nsb2NrKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cXHUwMDNldGhyb3R0bGVkX2Nsb2NrKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTYzODAsNyArNjM4MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VudGhyb3R0bGVfY2ZzX3JxX2FzeW5jKHN0cnVjdCBjZnNfcnEgKmNmc19ycSlcXG4gXFx0fVxcbiBcXG4gXFx0LyogQWxyZWFkeSBlbnF1ZXVlZCAqL1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZjZnNfcnEtXFx1MDAzZXRocm90dGxlZF9jc2RfbGlzdCkpKVxcbitcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFxcdTAwMjZjZnNfcnEtXFx1MDAzZXRocm90dGxlZF9jc2RfbGlzdCkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRmaXJzdCA9IGxpc3RfZW1wdHkoXFx1MDAyNnJxLVxcdTAwM2VjZnNiX2NzZF9saXN0KTtcXG5AQCAtNjM5Myw3ICs2MzkzLDcgQEAgc3RhdGljIHZvaWQgdW50aHJvdHRsZV9jZnNfcnFfYXN5bmMoc3RydWN0IGNmc19ycSAqY2ZzX3JxKVxcbiB7XFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2YoY2ZzX3JxKSk7XFxuIFxcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKCFjZnNfcnFfdGhyb3R0bGVkKGNmc19ycSkgfHxcXG4rXFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghY2ZzX3JxX3Rocm90dGxlZChjZnNfcnEpIHx8XFxuIFxcdCAgICBjZnNfcnEtXFx1MDAzZXJ1bnRpbWVfcmVtYWluaW5nIFxcdTAwM2M9IDApKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC02NDI5LDcgKzY0MjksNyBAQCBzdGF0aWMgYm9vbCBkaXN0cmlidXRlX2Nmc19ydW50aW1lKHN0cnVjdCBjZnNfYmFuZHdpZHRoICpjZnNfYilcXG4gXFx0XFx0XFx0Z290byBuZXh0O1xcbiBcXG4gXFx0XFx0LyogQnkgdGhlIGFib3ZlIGNoZWNrcywgdGhpcyBzaG91bGQgbmV2ZXIgYmUgdHJ1ZSAqL1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVxcdTAwM2VydW50aW1lX3JlbWFpbmluZyBcXHUwMDNlIDApO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoY2ZzX3JxLVxcdTAwM2VydW50aW1lX3JlbWFpbmluZyBcXHUwMDNlIDApO1xcbiBcXG4gXFx0XFx0cmF3X3NwaW5fbG9jayhcXHUwMDI2Y2ZzX2ItXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRydW50aW1lID0gLWNmc19ycS1cXHUwMDNlcnVudGltZV9yZW1haW5pbmcgKyAxO1xcbkBAIC02NDUwLDcgKzY0NTAsNyBAQCBzdGF0aWMgYm9vbCBkaXN0cmlidXRlX2Nmc19ydW50aW1lKHN0cnVjdCBjZnNfYmFuZHdpZHRoICpjZnNfYilcXG4gXFx0XFx0XFx0XFx0ICogV2UgY3VycmVudGx5IG9ubHkgZXhwZWN0IHRvIGJlIHVudGhyb3R0bGluZ1xcbiBcXHRcXHRcXHRcXHQgKiBhIHNpbmdsZSBjZnNfcnEgbG9jYWxseS5cXG4gXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bG9jYWxfdW50aHJvdHRsZSkpO1xcbitcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXFx1MDAyNmxvY2FsX3VudGhyb3R0bGUpKTtcXG4gXFx0XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Y2ZzX3JxLVxcdTAwM2V0aHJvdHRsZWRfY3NkX2xpc3QsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZsb2NhbF91bnRocm90dGxlKTtcXG4gXFx0XFx0XFx0fVxcbkBAIC02NDc1LDcgKzY0NzUsNyBAQCBzdGF0aWMgYm9vbCBkaXN0cmlidXRlX2Nmc19ydW50aW1lKHN0cnVjdCBjZnNfYmFuZHdpZHRoICpjZnNfYilcXG4gXFxuIFxcdFxcdHJxX3VubG9ja19pcnFyZXN0b3JlKHJxLCBcXHUwMDI2cmYpO1xcbiBcXHR9XFxuLVxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bG9jYWxfdW50aHJvdHRsZSkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXFx1MDAyNmxvY2FsX3VudGhyb3R0bGUpKTtcXG4gXFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG5AQCAtNzA0OCw3ICs3MDQ4LDcgQEAgc3RhdGljIHZvaWQgaHJ0aWNrX3N0YXJ0X2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiBcXHR1NjQgdmRlbHRhO1xcbiBcXHR1NjQgZGVsdGE7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UodGFza19ycShwKSAhPSBycSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX3JxKHApICE9IHJxKTtcXG4gXFxuIFxcdGlmIChycS1cXHUwMDNlY2ZzLmhfbnJfcXVldWVkIFxcdTAwM2M9IDEpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtNzE3MSw4ICs3MTcxLDggQEAgcmVxdWV1ZV9kZWxheWVkX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcXG4gXFx0ICogQmVjYXVzZSBhIGRlbGF5ZWQgZW50aXR5IGlzIG9uZSB0aGF0IGlzIHN0aWxsIG9uXFxuIFxcdCAqIHRoZSBydW5xdWV1ZSBjb21wZXRpbmcgdW50aWwgZWxlZ2liaWxpdHkuXFxuIFxcdCAqL1xcbi1cXHRXQVJOX09OX09OQ0UoIXNlLVxcdTAwM2VzY2hlZF9kZWxheWVkKTtcXG4tXFx0V0FSTl9PTl9PTkNFKCFzZS1cXHUwMDNlb25fcnEpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLVxcdTAwM2VzY2hlZF9kZWxheWVkKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzZS1cXHUwMDNlb25fcnEpO1xcbiBcXG4gXFx0aWYgKHVwZGF0ZV9lbnRpdHlfbGFnKGNmc19ycSwgc2UpKSB7XFxuIFxcdFxcdGNmc19ycS1cXHUwMDNlbnJfcXVldWVkLS07XFxuQEAgLTc0MDksOCArNzQwOSw4IEBAIHN0YXRpYyBpbnQgZGVxdWV1ZV9lbnRpdGllcyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxcbiBcXHRcXHRycS1cXHUwMDNlbmV4dF9iYWxhbmNlID0gamlmZmllcztcXG4gXFxuIFxcdGlmIChwIFxcdTAwMjZcXHUwMDI2IHRhc2tfZGVsYXllZCkge1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoIXRhc2tfc2xlZXApO1xcbi1cXHRcXHRXQVJOX09OX09OQ0UocC1cXHUwMDNlb25fcnEgIT0gMSk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghdGFza19zbGVlcCk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2Vvbl9ycSAhPSAxKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEZpeC11cCB3aGF0IGJsb2NrX3Rhc2soKSBza2lwcGVkLlxcbkBAIC04OTc2LDcgKzg5NzYsNyBAQCBzdGF0aWMgdm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZhaXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgYWZmaW5pdHlfY29udGV4dFxcbiBzdGF0aWMgdm9pZCBzZXRfbmV4dF9idWRkeShzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcXG4ge1xcbiBcXHRmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpIHtcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRSghc2UtXFx1MDAzZW9uX3JxKSlcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghc2UtXFx1MDAzZW9uX3JxKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRpZiAoc2VfaXNfaWRsZShzZSkpXFxuIFxcdFxcdFxcdHJldHVybjtcXG5AQCAtOTAyMyw3ICs5MDIzLDcgQEAgcHJlZW1wdF9zeW5jKHN0cnVjdCBycSAqcnEsIGludCB3YWtlX2ZsYWdzLFxcbiBcXHQgKiBXRl9TWU5DIHdpdGhvdXQgV0ZfVFRXVSBpcyBub3QgZXhwZWN0ZWQgc28gd2FybiBpZiBpdCBoYXBwZW5zIGV2ZW5cXG4gXFx0ICogdGhvdWdoIGl0IGlzIGxpa2VseSBoYXJtbGVzcy5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRSghKHdha2VfZmxhZ3MgXFx1MDAyNiBXRl9UVFdVKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKHdha2VfZmxhZ3MgXFx1MDAyNiBXRl9UVFdVKSk7XFxuIFxcbiBcXHR0aHJlc2hvbGQgPSBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3Q7XFxuIFxcdGRlbHRhID0gcnFfY2xvY2tfdGFzayhycSkgLSBzZS1cXHUwMDNlZXhlY19zdGFydDtcXG5AQCAtOTA5NSw3ICs5MDk1LDcgQEAgc3RhdGljIHZvaWQgd2FrZXVwX3ByZWVtcHRfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtlX2ZcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0ZmluZF9tYXRjaGluZ19zZShcXHUwMDI2c2UsIFxcdTAwMjZwc2UpO1xcbi1cXHRXQVJOX09OX09OQ0UoIXBzZSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghcHNlKTtcXG4gXFxuIFxcdGNzZV9pc19pZGxlID0gc2VfaXNfaWRsZShzZSk7XFxuIFxcdHBzZV9pc19pZGxlID0gc2VfaXNfaWRsZShwc2UpO1xcbkBAIC05ODU3LDggKzk4NTcsOCBAQCBzdGF0aWMgdm9pZCBkZXRhY2hfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudilcXG4gXFx0XFx0c2NoZWRzdGF0X2luYyhwLVxcdTAwM2VzdGF0cy5ucl9mb3JjZWRfbWlncmF0aW9ucyk7XFxuIFxcdH1cXG4gXFxuLVxcdFdBUk5fT04odGFza19jdXJyZW50KGVudi1cXHUwMDNlc3JjX3JxLCBwKSk7XFxuLVxcdFdBUk5fT04odGFza19jdXJyZW50X2Rvbm9yKGVudi1cXHUwMDNlc3JjX3JxLCBwKSk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQodGFza19jdXJyZW50KGVudi1cXHUwMDNlc3JjX3JxLCBwKSk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQodGFza19jdXJyZW50X2Rvbm9yKGVudi1cXHUwMDNlc3JjX3JxLCBwKSk7XFxuIFxcbiBcXHRkZWFjdGl2YXRlX3Rhc2soZW52LVxcdTAwM2VzcmNfcnEsIHAsIERFUVVFVUVfTk9DTE9DSyk7XFxuIFxcdHNldF90YXNrX2NwdShwLCBlbnYtXFx1MDAzZWRzdF9jcHUpO1xcbkBAIC0xMjE1MSw3ICsxMjE1MSw3IEBAIHN0YXRpYyBpbnQgc2NoZWRfYmFsYW5jZV9ycShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSxcXG4gXFx0XFx0Z290byBvdXRfYmFsYW5jZWQ7XFxuIFxcdH1cXG4gXFxuLVxcdFdBUk5fT05fT05DRShidXNpZXN0ID09IGVudi5kc3RfcnEpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoYnVzaWVzdCA9PSBlbnYuZHN0X3JxKTtcXG4gXFxuIFxcdHVwZGF0ZV9sYl9pbWJhbGFuY2Vfc3RhdChcXHUwMDI2ZW52LCBzZCwgaWRsZSk7XFxuIFxcbkBAIC0xMjQ2MSw3ICsxMjQ2MSw3IEBAIHN0YXRpYyBpbnQgYWN0aXZlX2xvYWRfYmFsYW5jZV9jcHVfc3RvcCh2b2lkICpkYXRhKVxcbiBcXHQgKiB3ZSBuZWVkIHRvIGZpeCBpdC4gT3JpZ2luYWxseSByZXBvcnRlZCBieVxcbiBcXHQgKiBCam9ybiBIZWxnYWFzIG9uIGEgMTI4LUNQVSBzZXR1cC5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRShidXNpZXN0X3JxID09IHRhcmdldF9ycSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChidXNpZXN0X3JxID09IHRhcmdldF9ycSk7XFxuIFxcbiBcXHQvKiBTZWFyY2ggZm9yIGFuIHNkIHNwYW5uaW5nIHVzIGFuZCB0aGUgdGFyZ2V0IENQVS4gKi9cXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbkBAIC0xMjg4Myw3ICsxMjg4Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVfc2Rfc3RhdGVfYnVzeShpbnQgY3B1KVxcbiBcXG4gdm9pZCBub2h6X2JhbGFuY2VfZXhpdF9pZGxlKHN0cnVjdCBycSAqcnEpXFxuIHtcXG4tXFx0V0FSTl9PTl9PTkNFKHJxICE9IHRoaXNfcnEoKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycSAhPSB0aGlzX3JxKCkpO1xcbiBcXG4gXFx0aWYgKGxpa2VseSghcnEtXFx1MDAzZW5vaHpfdGlja19zdG9wcGVkKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xMjkxOCw3ICsxMjkxOCw3IEBAIHZvaWQgbm9oel9iYWxhbmNlX2VudGVyX2lkbGUoaW50IGNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UoY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTtcXG4gXFxuIFxcdC8qIElmIHRoaXMgQ1BVIGlzIGdvaW5nIGRvd24sIHRoZW4gbm90aGluZyBuZWVkcyB0byBiZSBkb25lOiAqL1xcbiBcXHRpZiAoIWNwdV9hY3RpdmUoY3B1KSlcXG5AQCAtMTMwMDAsNyArMTMwMDAsNyBAQCBzdGF0aWMgdm9pZCBfbm9oel9pZGxlX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIFxcdGludCBiYWxhbmNlX2NwdTtcXG4gXFx0c3RydWN0IHJxICpycTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRSgoZmxhZ3MgXFx1MDAyNiBOT0haX0tJQ0tfTUFTSykgPT0gTk9IWl9CQUxBTkNFX0tJQ0spO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoKGZsYWdzIFxcdTAwMjYgTk9IWl9LSUNLX01BU0spID09IE5PSFpfQkFMQU5DRV9LSUNLKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdlIGFzc3VtZSB0aGVyZSB3aWxsIGJlIG5vIGlkbGUgbG9hZCBhZnRlciB0aGlzIHVwZGF0ZSBhbmQgY2xlYXJcXG5AQCAtMTM2MjMsNyArMTM2MjMsNyBAQCBib29sIGNmc19wcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmIsXFxuIFxcdHN0cnVjdCBjZnNfcnEgKmNmc19ycWI7XFxuIFxcdHM2NCBkZWx0YTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRSh0YXNrX3JxKGIpLVxcdTAwM2Vjb3JlICE9IHJxLVxcdTAwM2Vjb3JlKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnEoYiktXFx1MDAzZWNvcmUgIT0gcnEtXFx1MDAzZWNvcmUpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVEXFxuIFxcdC8qXFxuQEAgLTEzODM5LDcgKzEzODM5LDcgQEAgc3RhdGljIHZvaWQgc3dpdGNoZWRfZnJvbV9mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4gXFxuIHN0YXRpYyB2b2lkIHN3aXRjaGVkX3RvX2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiB7XFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzZS5zY2hlZF9kZWxheWVkKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZXNlLnNjaGVkX2RlbGF5ZWQpO1xcbiBcXG4gXFx0YXR0YWNoX3Rhc2tfY2ZzX3JxKHApO1xcbiBcXG5AQCAtMTM4NzIsNyArMTM4NzIsNyBAQCBzdGF0aWMgdm9pZCBfX3NldF9uZXh0X3Rhc2tfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmlyc1xcbiBcXHRpZiAoIWZpcnN0KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRXQVJOX09OX09OQ0Uoc2UtXFx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2UtXFx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xcbiBcXG4gXFx0aWYgKGhydGlja19lbmFibGVkX2ZhaXIocnEpKVxcbiBcXHRcXHRocnRpY2tfc3RhcnRfZmFpcihycSwgcCk7XFxuQEAgLTE0MTQ4LDcgKzE0MTQ4LDcgQEAgaW50IHNjaGVkX2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgbG9uZyBpZGxlKVxcbiBcXHRcXHRycV9sb2NrX2lycXNhdmUocnEsIFxcdTAwMjZyZik7XFxuIFxcbiBcXHRcXHRncnBfY2ZzX3JxLVxcdTAwM2VpZGxlID0gaWRsZTtcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRSh3YXNfaWRsZSA9PSBjZnNfcnFfaXNfaWRsZShncnBfY2ZzX3JxKSkpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQod2FzX2lkbGUgPT0gY2ZzX3JxX2lzX2lkbGUoZ3JwX2Nmc19ycSkpKVxcbiBcXHRcXHRcXHRnb3RvIG5leHRfY3B1O1xcbiBcXG4gXFx0XFx0aWRsZV90YXNrX2RlbHRhID0gZ3JwX2Nmc19ycS1cXHUwMDNlaF9ucl9xdWV1ZWQgLVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvcnQuYyBiL2tlcm5lbC9zY2hlZC9ydC5jXFxuaW5kZXggNGVlOGZhZjAxNDQxYTMuLjUwNmQwZjFhZmE1OGY5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9ydC5jXFxuKysrIGIva2VybmVsL3NjaGVkL3J0LmNcXG5AQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfcnRfYmFuZHdpZHRoKHN0cnVjdCBydF9iYW5kd2lkdGggKnJ0X2IpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSlcXG4ge1xcbi1cXHRXQVJOX09OX09OQ0UoIXJ0X2VudGl0eV9pc190YXNrKHJ0X3NlKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghcnRfZW50aXR5X2lzX3Rhc2socnRfc2UpKTtcXG4gXFxuIFxcdHJldHVybiBjb250YWluZXJfb2YocnRfc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcnQpO1xcbiB9XFxuQEAgLTE3OCwxMyArMTc4LDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpydF90YXNrX29mKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSlcXG4ge1xcbiBcXHQvKiBDYW5ub3QgZm9sZCB3aXRoIG5vbi1DT05GSUdfUlRfR1JPVVBfU0NIRUQgdmVyc2lvbiwgbGF5b3V0ICovXFxuLVxcdFdBUk5fT04oIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuIFxcdHJldHVybiBydF9ycS1cXHUwMDNlcnE7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSlcXG4ge1xcbi1cXHRXQVJOX09OKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcnRfc2UtXFx1MDAzZXJ0X3JxLVxcdTAwM2V0ZyAhPSBcXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IHJ0X3NlLVxcdTAwM2VydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuIFxcdHJldHVybiBydF9zZS1cXHUwMDNlcnRfcnE7XFxuIH1cXG4gXFxuQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpXFxuIHtcXG4gXFx0c3RydWN0IHJ0X3JxICpydF9ycSA9IHJ0X3NlLVxcdTAwM2VydF9ycTtcXG4gXFxuLVxcdFdBUk5fT04oIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuIFxcdHJldHVybiBydF9ycS1cXHUwMDNlcnE7XFxuIH1cXG4gXFxuQEAgLTQ5Myw3ICs0OTMsNyBAQCB0eXBlZGVmIHN0cnVjdCB0YXNrX2dyb3VwICpydF9ycV9pdGVyX3Q7XFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfZ3JvdXAgKm5leHRfdGFza19ncm91cChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXFxuIHtcXG4gXFx0aWYgKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkpIHtcXG4tXFx0XFx0V0FSTl9PTih0ZyAhPSBcXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcXG4rXFx0XFx0V0FSTl9PTl9ERUZFUlJFRCh0ZyAhPSBcXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuQEAgLTcyMyw3ICs3MjMsNyBAQCBzdGF0aWMgdm9pZCBfX2Rpc2FibGVfcnVudGltZShzdHJ1Y3QgcnEgKnJxKVxcbiBcXHRcXHQgKiBXZSBjYW5ub3QgYmUgbGVmdCB3YW50aW5nIC0gdGhhdCB3b3VsZCBtZWFuIHNvbWUgcnVudGltZVxcbiBcXHRcXHQgKiBsZWFrZWQgb3V0IG9mIHRoZSBzeXN0ZW0uXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRXQVJOX09OX09OQ0Uod2FudCk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh3YW50KTtcXG4gYmFsYW5jZWQ6XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIERpc2FibGUgYWxsIHRoZSBib3Jyb3cgbG9naWMgYnkgcHJldGVuZGluZyB3ZSBoYXZlIGluZlxcbkBAIC0xMDk0LDcgKzEwOTQsNyBAQCBkZWNfcnRfcHJpbyhzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbylcXG4gXFxuIFxcdGlmIChydF9ycS1cXHUwMDNlcnRfbnJfcnVubmluZykge1xcbiBcXG4tXFx0XFx0V0FSTl9PTihwcmlvIFxcdTAwM2MgcHJldl9wcmlvKTtcXG4rXFx0XFx0V0FSTl9PTl9ERUZFUlJFRChwcmlvIFxcdTAwM2MgcHJldl9wcmlvKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoaXMgbWF5IGhhdmUgYmVlbiBvdXIgaGlnaGVzdCB0YXNrLCBhbmQgdGhlcmVmb3JlXFxuQEAgLTExMzEsNyArMTEzMSw3IEBAIGRlY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSlcXG4gXFx0aWYgKHJ0X3NlX2Jvb3N0ZWQocnRfc2UpKVxcbiBcXHRcXHRydF9ycS1cXHUwMDNlcnRfbnJfYm9vc3RlZC0tO1xcbiBcXG4tXFx0V0FSTl9PTighcnRfcnEtXFx1MDAzZXJ0X25yX3J1bm5pbmcgXFx1MDAyNlxcdTAwMjYgcnRfcnEtXFx1MDAzZXJ0X25yX2Jvb3N0ZWQpO1xcbitcXHRXQVJOX09OX0RFRkVSUkVEKCFydF9ycS1cXHUwMDNlcnRfbnJfcnVubmluZyBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNlcnRfbnJfYm9vc3RlZCk7XFxuIH1cXG4gXFxuICNlbHNlIC8qICFDT05GSUdfUlRfR1JPVVBfU0NIRUQ6ICovXFxuQEAgLTExNzYsNyArMTE3Niw3IEBAIHZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxcbiB7XFxuIFxcdGludCBwcmlvID0gcnRfc2VfcHJpbyhydF9zZSk7XFxuIFxcbi1cXHRXQVJOX09OKCFydF9wcmlvKHByaW8pKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRCghcnRfcHJpbyhwcmlvKSk7XFxuIFxcdHJ0X3JxLVxcdTAwM2VydF9ucl9ydW5uaW5nICs9IHJ0X3NlX25yX3J1bm5pbmcocnRfc2UpO1xcbiBcXHRydF9ycS1cXHUwMDNlcnJfbnJfcnVubmluZyArPSBydF9zZV9ycl9ucl9ydW5uaW5nKHJ0X3NlKTtcXG4gXFxuQEAgLTExODcsOCArMTE4Nyw4IEBAIHZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxcbiBzdGF0aWMgaW5saW5lXFxuIHZvaWQgZGVjX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxcbiB7XFxuLVxcdFdBUk5fT04oIXJ0X3ByaW8ocnRfc2VfcHJpbyhydF9zZSkpKTtcXG4tXFx0V0FSTl9PTighcnRfcnEtXFx1MDAzZXJ0X25yX3J1bm5pbmcpO1xcbitcXHRXQVJOX09OX0RFRkVSUkVEKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQoIXJ0X3JxLVxcdTAwM2VydF9ucl9ydW5uaW5nKTtcXG4gXFx0cnRfcnEtXFx1MDAzZXJ0X25yX3J1bm5pbmcgLT0gcnRfc2VfbnJfcnVubmluZyhydF9zZSk7XFxuIFxcdHJ0X3JxLVxcdTAwM2Vycl9ucl9ydW5uaW5nIC09IHJ0X3NlX3JyX25yX3J1bm5pbmcocnRfc2UpO1xcbiBcXG5AQCAtMTM0OCw3ICsxMzQ4LDcgQEAgc3RhdGljIHZvaWQgX19lbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgdW5zaWduZWQgaW50IGZsYWdcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG1vdmVfZW50aXR5KGZsYWdzKSkge1xcbi1cXHRcXHRXQVJOX09OX09OQ0UocnRfc2UtXFx1MDAzZW9uX2xpc3QpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnRfc2UtXFx1MDAzZW9uX2xpc3QpO1xcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFTlFVRVVFX0hFQUQpXFxuIFxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZydF9zZS1cXHUwMDNlcnVuX2xpc3QsIHF1ZXVlKTtcXG4gXFx0XFx0ZWxzZVxcbkBAIC0xMzY4LDcgKzEzNjgsNyBAQCBzdGF0aWMgdm9pZCBfX2RlcXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCB1bnNpZ25lZCBpbnQgZmxhZ1xcbiBcXHRzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXkgPSBcXHUwMDI2cnRfcnEtXFx1MDAzZWFjdGl2ZTtcXG4gXFxuIFxcdGlmIChtb3ZlX2VudGl0eShmbGFncykpIHtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFydF9zZS1cXHUwMDNlb25fbGlzdCk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghcnRfc2UtXFx1MDAzZW9uX2xpc3QpO1xcbiBcXHRcXHRfX2RlbGlzdF9ydF9lbnRpdHkocnRfc2UsIGFycmF5KTtcXG4gXFx0fVxcbiBcXHRydF9zZS1cXHUwMDNlb25fcnEgPSAwO1xcbkBAIC0xNjg0LDcgKzE2ODQsNyBAQCBzdGF0aWMgc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcGlja19uZXh0X3J0X2VudGl0eShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxcbiBcXHRCVUdfT04oaWR4IFxcdTAwM2U9IE1BWF9SVF9QUklPKTtcXG4gXFxuIFxcdHF1ZXVlID0gYXJyYXktXFx1MDAzZXF1ZXVlICsgaWR4O1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKGxpc3RfZW1wdHkocXVldWUpKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChsaXN0X2VtcHR5KHF1ZXVlKSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRuZXh0ID0gbGlzdF9lbnRyeShxdWV1ZS1cXHUwMDNlbmV4dCwgc3RydWN0IHNjaGVkX3J0X2VudGl0eSwgcnVuX2xpc3QpO1xcbiBcXG5AQCAtMjAxNiw3ICsyMDE2LDcgQEAgc3RhdGljIGludCBwdXNoX3J0X3Rhc2soc3RydWN0IHJxICpycSwgYm9vbCBwdWxsKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKFdBUk5fT04obmV4dF90YXNrID09IHJxLVxcdTAwM2VjdXJyKSlcXG4rXFx0aWYgKFdBUk5fT05fREVGRVJSRUQobmV4dF90YXNrID09IHJxLVxcdTAwM2VjdXJyKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHQvKiBXZSBtaWdodCByZWxlYXNlIHJxIGxvY2sgKi9cXG5AQCAtMjMxNiw4ICsyMzE2LDggQEAgc3RhdGljIHZvaWQgcHVsbF9ydF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSlcXG4gXFx0XFx0ICogdGhlIHRvLWJlLXNjaGVkdWxlZCB0YXNrP1xcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHAgXFx1MDAyNlxcdTAwMjYgKHAtXFx1MDAzZXByaW8gXFx1MDAzYyB0aGlzX3JxLVxcdTAwM2VydC5oaWdoZXN0X3ByaW8uY3VycikpIHtcXG4tXFx0XFx0XFx0V0FSTl9PTihwID09IHNyY19ycS1cXHUwMDNlY3Vycik7XFxuLVxcdFxcdFxcdFdBUk5fT04oIXRhc2tfb25fcnFfcXVldWVkKHApKTtcXG4rXFx0XFx0XFx0V0FSTl9PTl9ERUZFUlJFRChwID09IHNyY19ycS1cXHUwMDNlY3Vycik7XFxuK1xcdFxcdFxcdFdBUk5fT05fREVGRVJSRUQoIXRhc2tfb25fcnFfcXVldWVkKHApKTtcXG4gXFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBwIGlzIGhpZ2hlciBpbiBwcmlvcml0eVxcbkBAIC0yNTgzLDcgKzI1ODMsNyBAQCBzdGF0aWMgaW50IHRhc2tfaXNfdGhyb3R0bGVkX3J0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSlcXG4gXFxuICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgLy8gWFhYIG1heWJlIGFkZCB0YXNrX3J0X3JxKCksIHNlZSBhbHNvIHNjaGVkX3J0X3BlcmlvZF9ydF9ycVxcbiBcXHRydF9ycSA9IHRhc2tfZ3JvdXAocCktXFx1MDAzZXJ0X3JxW2NwdV07XFxuLVxcdFdBUk5fT04oIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuICNlbHNlXFxuIFxcdHJ0X3JxID0gXFx1MDAyNmNwdV9ycShjcHUpLVxcdTAwM2VydDtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcXG5pbmRleCA5ZjYzYjE1ZDMwOWQxMS4uZjc0ZjljZDQ0ZTA5ODYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL3NjaGVkLmhcXG4rKysgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaFxcbkBAIC0xNjg0LDcgKzE2ODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2lkbGVfY29yZShzdHJ1Y3QgcnEgKnJxKSB7IH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX29mKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKVxcbiB7XFxuLVxcdFdBUk5fT05fT05DRSghZW50aXR5X2lzX3Rhc2soc2UpKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFlbnRpdHlfaXNfdGFzayhzZSkpO1xcbiBcXHRyZXR1cm4gY29udGFpbmVyX29mKHNlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHNlKTtcXG4gfVxcbiBcXG5AQCAtMTc2Niw3ICsxNzY2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9jbG9ja191cGRhdGVkKHN0cnVjdCBycSAqcnEpXFxuIFxcdCAqIFRoZSBvbmx5IHJlYXNvbiBmb3Igbm90IHNlZWluZyBhIGNsb2NrIHVwZGF0ZSBzaW5jZSB0aGVcXG4gXFx0ICogbGFzdCBycV9waW5fbG9jaygpIGlzIGlmIHdlJ3JlIGN1cnJlbnRseSBza2lwcGluZyB1cGRhdGVzLlxcbiBcXHQgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKHJxLVxcdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXFx1MDAzYyBSUUNGX0FDVF9TS0lQKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVxcdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXFx1MDAzYyBSUUNGX0FDVF9TS0lQKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB1NjQgcnFfY2xvY2soc3RydWN0IHJxICpycSlcXG5AQCAtMTgxMyw3ICsxODEzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJxX2Nsb2NrX2NhbmNlbF9za2lwdXBkYXRlKHN0cnVjdCBycSAqcnEpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBycV9jbG9ja19zdGFydF9sb29wX3VwZGF0ZShzdHJ1Y3QgcnEgKnJxKVxcbiB7XFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xcbi1cXHRXQVJOX09OX09OQ0UocnEtXFx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcXHUwMDI2IFJRQ0ZfQUNUX1NLSVApO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXFx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcXHUwMDI2IFJRQ0ZfQUNUX1NLSVApO1xcbiBcXHRycS1cXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIHw9IFJRQ0ZfQUNUX1NLSVA7XFxuIH1cXG4gXFxuQEAgLTE4NzAsOSArMTg3MCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfcnFfY2xvY2tfaW52YWxpZGF0ZShzdHJ1Y3QgcnEgKnJxKSB7fVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9iYWxhbmNlX2NhbGxiYWNrc19lbXB0eShzdHJ1Y3QgcnEgKnJxKVxcbiB7XFxuLVxcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIHJxLVxcdTAwM2ViYWxhbmNlX2NhbGxiYWNrIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAgcnEtXFx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgIT0gXFx1MDAyNmJhbGFuY2VfcHVzaF9jYWxsYmFjayk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChJU19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgICBycS1cXHUwMDNlYmFsYW5jZV9jYWxsYmFjayBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgICBycS1cXHUwMDNlYmFsYW5jZV9jYWxsYmFjayAhPSBcXHUwMDI2YmFsYW5jZV9wdXNoX2NhbGxiYWNrKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMjY4MSw3ICsyNjgxLDcgQEAgc3RydWN0IHNjaGVkX2NsYXNzIHtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldilcXG4ge1xcbi1cXHRXQVJOX09OX09OQ0UocnEtXFx1MDAzZWRvbm9yICE9IHByZXYpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXFx1MDAzZWRvbm9yICE9IHByZXYpO1xcbiBcXHRwcmV2LVxcdTAwM2VzY2hlZF9jbGFzcy1cXHUwMDNlcHV0X3ByZXZfdGFzayhycSwgcHJldiwgTlVMTCk7XFxuIH1cXG4gXFxuQEAgLTI3MDQsNyArMjcwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl9zZXRfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dClcXG4ge1xcbi1cXHRXQVJOX09OX09OQ0UocnEtXFx1MDAzZWRvbm9yICE9IHByZXYpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXFx1MDAzZWRvbm9yICE9IHByZXYpO1xcbiBcXG4gXFx0X19wdXRfcHJldl9zZXRfbmV4dF9kbF9zZXJ2ZXIocnEsIHByZXYsIG5leHQpO1xcbiBcXG5AQCAtMzAzMCw3ICszMDMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGF0dGFjaF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4ge1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRSh0YXNrX3JxKHApICE9IHJxKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnEocCkgIT0gcnEpO1xcbiBcXHRhY3RpdmF0ZV90YXNrKHJxLCBwLCBFTlFVRVVFX05PQ0xPQ0spO1xcbiBcXHR3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbGliL2J1Zy5jIGIvbGliL2J1Zy5jXFxuaW5kZXggMjI0ZjRjZmE0YWEzMTIuLmY1NzY4ZjVkMTdiNDc5IDEwMDY0NFxcbi0tLSBhL2xpYi9idWcuY1xcbisrKyBiL2xpYi9idWcuY1xcbkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBfX3dhcm5fcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcbiBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYWRkciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIHtcXG4tXFx0Ym9vbCB3YXJuaW5nLCBvbmNlLCBkb25lLCBub19jdXQsIGhhc19hcmdzO1xcbitcXHRib29sIHdhcm5pbmcsIG9uY2UsIGRvbmUsIG5vX2N1dCwgaGFzX2FyZ3MsIGRlZmVycmVkO1xcbiBcXHRjb25zdCBjaGFyICpmaWxlLCAqZm10O1xcbiBcXHR1bnNpZ25lZCBsaW5lO1xcbiBcXG5AQCAtMjE5LDYgKzIxOSw3IEBAIHN0YXRpYyBlbnVtIGJ1Z190cmFwX3R5cGUgX19yZXBvcnRfYnVnKHN0cnVjdCBidWdfZW50cnkgKmJ1ZywgdW5zaWduZWQgbG9uZyBidWdhXFxuIFxcdGRvbmUgICAgID0gYnVnLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJVR0ZMQUdfRE9ORTtcXG4gXFx0bm9fY3V0ICAgPSBidWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlVHRkxBR19OT19DVVRfSEVSRTtcXG4gXFx0aGFzX2FyZ3MgPSBidWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlVHRkxBR19BUkdTO1xcbitcXHRkZWZlcnJlZCA9IGJ1Zy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCVUdGTEFHX0RFRkVSUkVEO1xcbiBcXG4gXFx0aWYgKHdhcm5pbmcgXFx1MDAyNlxcdTAwMjYgb25jZSkge1xcbiBcXHRcXHRpZiAoZG9uZSlcXG5AQCAtMjI5LDcgKzIzMCwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0YnVnLVxcdTAwM2VmbGFncyB8PSBCVUdGTEFHX0RPTkU7XFxuIFxcdH1cXG4tXFxuK1xcdGlmIChkZWZlcnJlZCkge1xcbitcXHRcXHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1xcbitcXHRcXHRwcmludGtfZGVmZXJyZWRfZW50ZXIoKTtcXG4rXFx0fVxcbiBcXHQvKlxcbiBcXHQgKiBCVUcoKSBhbmQgV0FSTl9PTigpIGZhbWlsaWVzIGRvbid0IHByaW50IGEgY3VzdG9tIGRlYnVnIG1lc3NhZ2VcXG4gXFx0ICogYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLCBzbyB3ZSBtdXN0IGFkZCB0aGVcXG5AQCAtMjQ1LDYgKzI0OSwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYVxcbiBcXHRcXHQvKiB0aGlzIGlzIGEgV0FSTl9PTiByYXRoZXIgdGhhbiBCVUcvQlVHX09OICovXFxuIFxcdFxcdF9fd2FybihmaWxlLCBsaW5lLCAodm9pZCAqKWJ1Z2FkZHIsIEJVR19HRVRfVEFJTlQoYnVnKSwgcmVncyxcXG4gXFx0XFx0ICAgICAgIE5VTEwpO1xcbitcXHRcXHRpZiAoZGVmZXJyZWQpIHtcXG4rXFx0XFx0XFx0cHJpbnRrX2RlZmVycmVkX2V4aXQoKTtcXG4rXFx0XFx0XFx0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1xcbitcXHRcXHR9XFxuIFxcdFxcdHJldHVybiBCVUdfVFJBUF9UWVBFX1dBUk47XFxuIFxcdH1cXG4gXFxuQEAgLTI1NCw2ICsyNjIsMTAgQEAgc3RhdGljIGVudW0gYnVnX3RyYXBfdHlwZSBfX3JlcG9ydF9idWcoc3RydWN0IGJ1Z19lbnRyeSAqYnVnLCB1bnNpZ25lZCBsb25nIGJ1Z2FcXG4gXFx0XFx0cHJfY3JpdChcXFwia2VybmVsIEJVRyBhdCAlcEIgW3ZlcmJvc2UgZGVidWcgaW5mbyB1bmF2YWlsYWJsZV1cXFxcblxcXCIsXFxuIFxcdFxcdFxcdCh2b2lkICopYnVnYWRkcik7XFxuIFxcbitcXHRpZiAoZGVmZXJyZWQpIHtcXG4rXFx0XFx0cHJpbnRrX2RlZmVycmVkX2V4aXQoKTtcXG4rXFx0XFx0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1xcbitcXHR9XFxuIFxcdHJldHVybiBCVUdfVFJBUF9UWVBFX0JVRztcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTQ6NTM6MDEuMTA0NjIxMDEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTIyMTg2NDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGFuZCBhcHBsaWVzIGRlZmVycmVkIHZhcmlhbnRzIG9mIFdBUk5fT04gYW5kIFdBUk5fT05fT05DRSBtYWNyb3MgKFdBUk5fT05fREVGRVJSRUQsIFdBUk5fT05fT05DRV9ERUZFUlJFRCkgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyB3YXJuaW5nIHByaW50cyBpbiB0aGUgc2NoZWR1bGVyLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2dpbmcvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIG5vcm1hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNGY2N2JjMDkxMGFlZmI5YTUyYTQ1MWRlMjM2Y2YwNWVmMzk4OTRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTQ6NTI6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaFxuaW5kZXggMDllOGVjY2VlOGVkOTcuLjFlM2ZmMDBmNzA5Yjg5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaFxuQEAgLTE0LDYgKzE0LDcgQEBcbiAjZGVmaW5lIEJVR0ZMQUdfRE9ORVx0XHQoMSBcdTAwM2NcdTAwM2MgMilcbiAjZGVmaW5lIEJVR0ZMQUdfTk9fQ1VUX0hFUkVcdCgxIFx1MDAzY1x1MDAzYyAzKVx0LyogQ1VUX0hFUkUgYWxyZWFkeSBzZW50ICovXG4gI2RlZmluZSBCVUdGTEFHX0FSR1NcdFx0KDEgXHUwMDNjXHUwMDNjIDQpXG4rI2RlZmluZSBCVUdGTEFHX0RFRkVSUkVEXHQoMSBcdTAwM2NcdTAwM2MgNSlcbiAjZGVmaW5lIEJVR0ZMQUdfVEFJTlQodGFpbnQpXHQoKHRhaW50KSBcdTAwM2NcdTAwM2MgOClcbiAjZGVmaW5lIEJVR19HRVRfVEFJTlQoYnVnKVx0KChidWcpLVx1MDAzZWZsYWdzIFx1MDAzZVx1MDAzZSA4KVxuICNlbmRpZlxuQEAgLTExNSw2ICsxMTYsMTYgQEAgZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4gfSlcbiAjZW5kaWZcbiBcbisjZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSAoe1x0XHRcdFx0XHRcXFxuK1x0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1x0XHRcdFx0XFxcbitcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkge1x0XHRcdFx0XHRcXFxuK1x0XHRfX1dBUk5fRkxBR1MoI2NvbmRpdGlvbixcdFx0XHRcdFxcXG4rXHRcdFx0ICAgICBCVUdGTEFHX0RFRkVSUkVEIHxcdFx0XHRcdFxcXG4rXHRcdFx0ICAgICBCVUdGTEFHX1RBSU5UKFRBSU5UX1dBUk4pKTtcdFx0XFxcbitcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbitcdHVubGlrZWx5KF9fcmV0X3dhcm5fb24pO1x0XHRcdFx0XHRcXFxuK30pXG4rXG4gI2lmbmRlZiBXQVJOX09OX09OQ0VcbiAjZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pICh7XHRcdFx0XHRcdFxcXG4gXHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XHRcXFxuQEAgLTEyNSw2ICsxMzYsMTYgQEAgZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4gXHR1bmxpa2VseShfX3JldF93YXJuX29uKTtcdFx0XHRcdFx0XFxcbiB9KVxuICNlbmRpZlxuK1xuKyNkZWZpbmUgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNvbmRpdGlvbikgKHtcdFx0XHRcdFxcXG4rXHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XHRcXFxuK1x0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb24pKSB7XHRcdFx0XHRcdFxcXG4rXHRcdF9fV0FSTl9GTEFHUygjY29uZGl0aW9uLFx0XHRcdFx0XFxcbitcdFx0XHQgICAgIEJVR0ZMQUdfT05DRSB8IEJVR0ZMQUdfREVGRVJSRUQgfFx0XHRcXFxuK1x0XHRcdCAgICAgQlVHRkxBR19UQUlOVChUQUlOVF9XQVJOKSk7XHRcdFxcXG4rXHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHR1bmxpa2VseShfX3JldF93YXJuX29uKTtcdFx0XHRcdFx0XFxcbit9KVxuICNlbmRpZiAvKiBfX1dBUk5fRkxBR1MgKi9cbiBcbiAjaWYgZGVmaW5lZChfX1dBUk5fRkxBR1MpIFx1MDAyNlx1MDAyNiAhZGVmaW5lZChfX1dBUk5fcHJpbnRmKVxuQEAgLTE1OSw2ICsxODAsMTkgQEAgZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4gfSlcbiAjZW5kaWZcbiBcbisjaWZuZGVmIFdBUk5fT05fREVGRVJSRURcbisjZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSAoe1x0XHRcdFx0XHRcXFxuK1x0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1x0XHRcdFx0XFxcbitcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkge1x0XHRcdFx0XHRcXFxuK1x0XHRndWFyZChwcmVlbXB0KSgpO1x0XHRcdFx0XHRcXFxuK1x0XHRwcmludGtfZGVmZXJyZWRfZW50ZXIoKVx0XHRcdFx0XHRcXFxuK1x0XHRfX1dBUk4oKTtcdFx0XHRcdFx0XHRcXFxuK1x0XHRwcmludGtfZGVmZXJyZWRfZXhpdCgpXHRcdFx0XHRcdFxcXG4rXHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHR1bmxpa2VseShfX3JldF93YXJuX29uKTtcdFx0XHRcdFx0XFxcbit9KVxuKyNlbmRpZlxuK1xuICNpZm5kZWYgV0FSTlxuICNkZWZpbmUgV0FSTihjb25kaXRpb24sIGZvcm1hdC4uLikgKHtcdFx0XHRcdFx0XFxcbiBcdGludCBfX3JldF93YXJuX29uID0gISEoY29uZGl0aW9uKTtcdFx0XHRcdFxcXG5AQCAtMTgwLDYgKzIxNCwxMSBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcbiBcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT04sIDEpXG4gI2VuZGlmXG4gXG4rI2lmbmRlZiBXQVJOX09OX09OQ0VfREVGRVJSRURcbisjZGVmaW5lIFdBUk5fT05fT05DRV9ERUZFUlJFRChjb25kaXRpb24pXHRcdFx0XHRcXFxuK1x0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTl9PTl9ERUZFUlJFRCwgMSlcbisjZW5kaWZcbitcbiAjaWZuZGVmIFdBUk5fT05DRVxuICNkZWZpbmUgV0FSTl9PTkNFKGNvbmRpdGlvbiwgZm9ybWF0Li4uKVx0XHRcdFx0XFxcbiBcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk4sIDEsIGZvcm1hdClcbkBAIC0yMTUsNyArMjU0LDkgQEAgZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4gfSlcbiAjZW5kaWZcbiBcbisjZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSBXQVJOX09OKGNvbmRpdGlvbilcbiAjZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pIFdBUk5fT04oY29uZGl0aW9uKVxuKyNkZWZpbmUgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNvbmRpdGlvbikgV0FSTl9PTihjb25kaXRpb24pXG4gI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpXG4gI2RlZmluZSBXQVJOX1RBSU5UKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLikgV0FSTihjb25kaXRpb24sIGZvcm1hdClcbiAjZGVmaW5lIFdBUk5fVEFJTlRfT05DRShjb25kaXRpb24sIHRhaW50LCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbmluZGV4IGI4ODcxNDQ5ZDNjNjk0Li4wZTI4MjQ1N2FiYjkxNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC04NTMsNyArODUzLDcgQEAgdm9pZCB1cGRhdGVfcnFfY2xvY2soc3RydWN0IHJxICpycSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHNjaGVkX2ZlYXQoV0FSTl9ET1VCTEVfQ0xPQ0spKVxuLVx0XHRXQVJOX09OX09OQ0UocnEtXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIFx1MDAyNiBSUUNGX1VQREFURUQpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIFx1MDAyNiBSUUNGX1VQREFURUQpO1xuIFx0cnEtXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIHw9IFJRQ0ZfVVBEQVRFRDtcbiBcbiBcdGNsb2NrID0gc2NoZWRfY2xvY2tfY3B1KGNwdV9vZihycSkpO1xuQEAgLTE4MDcsNyArMTgwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1Y2xhbXBfcnFfZGVjX2lkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcbiBcdGJ1Y2tldCA9IFx1MDAyNnVjX3JxLVx1MDAzZWJ1Y2tldFt1Y19zZS1cdTAwM2VidWNrZXRfaWRdO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCFidWNrZXQtXHUwMDNldGFza3MpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFidWNrZXQtXHUwMDNldGFza3MpO1xuIFx0aWYgKGxpa2VseShidWNrZXQtXHUwMDNldGFza3MpKVxuIFx0XHRidWNrZXQtXHUwMDNldGFza3MtLTtcbiBcbkBAIC0xODI3LDcgKzE4MjcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdWNsYW1wX3JxX2RlY19pZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXG4gXHQgKiBEZWZlbnNpdmUgcHJvZ3JhbW1pbmc6IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gSWYgaXQgaGFwcGVucyxcbiBcdCAqIGUuZy4gZHVlIHRvIGZ1dHVyZSBtb2RpZmljYXRpb24sIHdhcm4gYW5kIGZpeCB1cCB0aGUgZXhwZWN0ZWQgdmFsdWUuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShidWNrZXQtXHUwMDNldmFsdWUgXHUwMDNlIHJxX2NsYW1wKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChidWNrZXQtXHUwMDNldmFsdWUgXHUwMDNlIHJxX2NsYW1wKTtcbiBcdGlmIChidWNrZXQtXHUwMDNldmFsdWUgXHUwMDNlPSBycV9jbGFtcCkge1xuIFx0XHRia3RfY2xhbXAgPSB1Y2xhbXBfcnFfbWF4X3ZhbHVlKHJxLCBjbGFtcF9pZCwgdWNfc2UtXHUwMDNldmFsdWUpO1xuIFx0XHR1Y2xhbXBfcnFfc2V0KHJxLCBjbGFtcF9pZCwgYmt0X2NsYW1wKTtcbkBAIC0yMjEwLDcgKzIyMTAsNyBAQCB2b2lkIGFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpXG4gXG4gdm9pZCBkZWFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKGZsYWdzIFx1MDAyNiBERVFVRVVFX1NMRUVQKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChmbGFncyBcdTAwMjYgREVRVUVVRV9TTEVFUCk7XG4gXG4gXHRXUklURV9PTkNFKHAtXHUwMDNlb25fcnEsIFRBU0tfT05fUlFfTUlHUkFUSU5HKTtcbiBcdEFTU0VSVF9FWENMVVNJVkVfV1JJVEVSKHAtXHUwMDNlb25fcnEpO1xuQEAgLTI1MTYsNyArMjUxNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnEgKm1vdmVfcXVldWVkX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHJxX2ZsYWdzICpyZixcbiBcdHJxID0gY3B1X3JxKG5ld19jcHUpO1xuIFxuIFx0cnFfbG9jayhycSwgcmYpO1xuLVx0V0FSTl9PTl9PTkNFKHRhc2tfY3B1KHApICE9IG5ld19jcHUpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfY3B1KHApICE9IG5ld19jcHUpO1xuIFx0YWN0aXZhdGVfdGFzayhycSwgcCwgMCk7XG4gXHR3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7XG4gXG5AQCAtMjYwMiw3ICsyNjAyLDcgQEAgc3RhdGljIGludCBtaWdyYXRpb25fY3B1X3N0b3Aodm9pZCAqZGF0YSlcbiBcdCAqIElmIHdlIHdlcmUgcGFzc2VkIGEgcGVuZGluZywgdGhlbiAtXHUwMDNlc3RvcF9wZW5kaW5nIHdhcyBzZXQsIHRodXNcbiBcdCAqIHAtXHUwMDNlbWlncmF0aW9uX3BlbmRpbmcgbXVzdCBoYXZlIHJlbWFpbmVkIHN0YWJsZS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKHBlbmRpbmcgXHUwMDI2XHUwMDI2IHBlbmRpbmcgIT0gcC1cdTAwM2VtaWdyYXRpb25fcGVuZGluZyk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocGVuZGluZyBcdTAwMjZcdTAwMjYgcGVuZGluZyAhPSBwLVx1MDAzZW1pZ3JhdGlvbl9wZW5kaW5nKTtcbiBcbiBcdC8qXG4gXHQgKiBJZiB0YXNrX3JxKHApICE9IHJxLCBpdCBjYW5ub3QgYmUgbWlncmF0ZWQgaGVyZSwgYmVjYXVzZSB3ZSdyZVxuQEAgLTI2NjEsNyArMjY2MSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0aW9uX2NwdV9zdG9wKHZvaWQgKmRhdGEpXG4gXHRcdCAqIGRldGVybWluZSBpc19taWdyYXRpb25fZGlzYWJsZWQoKSBhbmQgc28gaGF2ZSB0byBjaGFzZSBhZnRlclxuIFx0XHQgKiBpdC5cbiBcdFx0ICovXG4tXHRcdFdBUk5fT05fT05DRSghcGVuZGluZy1cdTAwM2VzdG9wX3BlbmRpbmcpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXBlbmRpbmctXHUwMDNlc3RvcF9wZW5kaW5nKTtcbiBcdFx0cHJlZW1wdF9kaXNhYmxlKCk7XG4gXHRcdHJxX3VubG9jayhycSwgXHUwMDI2cmYpO1xuIFx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwLVx1MDAzZXBpX2xvY2ssIHJmLmZsYWdzKTtcbkBAIC0zMDA0LDcgKzMwMDQsNyBAQCBzdGF0aWMgaW50IGFmZmluZV9tb3ZlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnFfZmxhZ1xuIFx0ICpcbiBcdCAqIEVpdGhlciB3YXksIHdlIHJlYWxseSBzaG91bGQgaGF2ZSBhIEBwZW5kaW5nIGhlcmUuXG4gXHQgKi9cbi1cdGlmIChXQVJOX09OX09OQ0UoIXBlbmRpbmcpKSB7XG4rXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFwZW5kaW5nKSkge1xuIFx0XHR0YXNrX3JxX3VubG9jayhycSwgcCwgcmYpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC0zMTE2LDkgKzMxMTYsOSBAQCBzdGF0aWMgaW50IF9fc2V0X2NwdXNfYWxsb3dlZF9wdHJfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHAgPT0gY3VycmVudCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCBpc19taWdyYXRpb25fZGlzYWJsZWQocCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHQgIWNwdW1hc2tfdGVzdF9jcHUodGFza19jcHUocCksIGN0eC1cdTAwM2VuZXdfbWFzaykpKSB7XG4rXHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocCA9PSBjdXJyZW50IFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0XHQgIGlzX21pZ3JhdGlvbl9kaXNhYmxlZChwKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdFx0ICAhY3B1bWFza190ZXN0X2NwdSh0YXNrX2NwdShwKSwgY3R4LVx1MDAzZW5ld19tYXNrKSkpIHtcbiBcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC0zMjY3LDcgKzMyNjcsNyBAQCB2b2lkIGZvcmNlX2NvbXBhdGlibGVfY3B1c19hbGxvd2VkX3B0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHRcdFx0XHRjcHVtYXNrX3ByX2FyZ3Mob3ZlcnJpZGVfbWFzaykpO1xuIFx0fVxuIFxuLVx0V0FSTl9PTihzZXRfY3B1c19hbGxvd2VkX3B0cihwLCBvdmVycmlkZV9tYXNrKSk7XG4rXHRXQVJOX09OX0RFRkVSUkVEKHNldF9jcHVzX2FsbG93ZWRfcHRyKHAsIG92ZXJyaWRlX21hc2spKTtcbiBvdXRfZnJlZV9tYXNrOlxuIFx0Y3B1c19yZWFkX3VubG9jaygpO1xuIFx0ZnJlZV9jcHVtYXNrX3ZhcihuZXdfbWFzayk7XG5AQCAtMzI5Myw3ICszMjkzLDcgQEAgdm9pZCByZWxheF9jb21wYXRpYmxlX2NwdXNfYWxsb3dlZF9wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0ICogQ3B1c2V0IG1hc2tpbmcgd2lsbCBiZSBkb25lIHRoZXJlIHRvby5cbiBcdCAqL1xuIFx0cmV0ID0gX19zY2hlZF9zZXRhZmZpbml0eShwLCBcdTAwMjZhYyk7XG4tXHRXQVJOX09OX09OQ0UocmV0KTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQpO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NNUFxuQEAgLTMzMDYsMTYgKzMzMDYsMTYgQEAgdm9pZCBzZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgbmV3X2NwdSlcbiBcdCAqIFdlIHNob3VsZCBuZXZlciBjYWxsIHNldF90YXNrX2NwdSgpIG9uIGEgYmxvY2tlZCB0YXNrLFxuIFx0ICogdHR3dSgpIHdpbGwgc29ydCBvdXQgdGhlIHBsYWNlbWVudC5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKHN0YXRlICE9IFRBU0tfUlVOTklORyBcdTAwMjZcdTAwMjYgc3RhdGUgIT0gVEFTS19XQUtJTkcgXHUwMDI2XHUwMDI2ICFwLVx1MDAzZW9uX3JxKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChzdGF0ZSAhPSBUQVNLX1JVTk5JTkcgXHUwMDI2XHUwMDI2IHN0YXRlICE9IFRBU0tfV0FLSU5HIFx1MDAyNlx1MDAyNiAhcC1cdTAwM2Vvbl9ycSk7XG4gXG4gXHQvKlxuIFx0ICogTWlncmF0aW5nIGZhaXIgY2xhc3MgdGFzayBtdXN0IGhhdmUgcC1cdTAwM2Vvbl9ycSA9IFRBU0tfT05fUlFfTUlHUkFUSU5HLFxuIFx0ICogYmVjYXVzZSBzY2hlZHN0YXRfd2FpdF97c3RhcnQsZW5kfSByZWJhc2UgbWlncmF0aW5nIHRhc2sncyB3YWl0X3N0YXJ0XG4gXHQgKiB0aW1lIHJlbHlpbmcgb24gcC1cdTAwM2Vvbl9ycS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKHN0YXRlID09IFRBU0tfUlVOTklORyBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICBwLVx1MDAzZXNjaGVkX2NsYXNzID09IFx1MDAyNmZhaXJfc2NoZWRfY2xhc3MgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgKHAtXHUwMDNlb25fcnEgXHUwMDI2XHUwMDI2ICF0YXNrX29uX3JxX21pZ3JhdGluZyhwKSkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHN0YXRlID09IFRBU0tfUlVOTklORyBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgICBwLVx1MDAzZXNjaGVkX2NsYXNzID09IFx1MDAyNmZhaXJfc2NoZWRfY2xhc3MgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICAgKHAtXHUwMDNlb25fcnEgXHUwMDI2XHUwMDI2ICF0YXNrX29uX3JxX21pZ3JhdGluZyhwKSkpO1xuIFxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIFx0LypcbkBAIC0zMzI4LDE1ICszMzI4LDE1IEBAIHZvaWQgc2V0X3Rhc2tfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IG5ld19jcHUpXG4gXHQgKiBGdXJ0aGVybW9yZSwgYWxsIHRhc2tfcnEgdXNlcnMgc2hvdWxkIGFjcXVpcmUgYm90aCBsb2Nrcywgc2VlXG4gXHQgKiB0YXNrX3JxX2xvY2soKS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKGRlYnVnX2xvY2tzIFx1MDAyNlx1MDAyNiAhKGxvY2tkZXBfaXNfaGVsZChcdTAwMjZwLVx1MDAzZXBpX2xvY2spIHx8XG4tXHRcdFx0XHQgICAgICBsb2NrZGVwX2lzX2hlbGQoX19ycV9sb2NrcCh0YXNrX3JxKHApKSkpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkZWJ1Z19sb2NrcyBcdTAwMjZcdTAwMjYgIShsb2NrZGVwX2lzX2hlbGQoXHUwMDI2cC1cdTAwM2VwaV9sb2NrKSB8fFxuK1x0XHRcdFx0XHQgICAgICAgbG9ja2RlcF9pc19oZWxkKF9fcnFfbG9ja3AodGFza19ycShwKSkpKSk7XG4gI2VuZGlmXG4gXHQvKlxuIFx0ICogQ2xlYXJseSwgbWlncmF0aW5nIHRhc2tzIHRvIG9mZmxpbmUgQ1BVcyBpcyBhIGZhaXJseSBkYWZ0IHRoaW5nLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UoIWNwdV9vbmxpbmUobmV3X2NwdSkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFjcHVfb25saW5lKG5ld19jcHUpKTtcbiBcbi1cdFdBUk5fT05fT05DRShpc19taWdyYXRpb25fZGlzYWJsZWQocCkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGlzX21pZ3JhdGlvbl9kaXNhYmxlZChwKSk7XG4gXG4gXHR0cmFjZV9zY2hlZF9taWdyYXRlX3Rhc2socCwgbmV3X2NwdSk7XG4gXG5AQCAtMzgwMywxMCArMzgwMywxMCBAQCB2b2lkIHNjaGVkX3R0d3VfcGVuZGluZyh2b2lkICphcmcpXG4gXHR1cGRhdGVfcnFfY2xvY2socnEpO1xuIFxuIFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0LCBsbGlzdCwgd2FrZV9lbnRyeS5sbGlzdCkge1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHAtXHUwMDNlb25fY3B1KSlcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZW9uX2NwdSkpXG4gXHRcdFx0c21wX2NvbmRfbG9hZF9hY3F1aXJlKFx1MDAyNnAtXHUwMDNlb25fY3B1LCAhVkFMKTtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRSh0YXNrX2NwdShwKSAhPSBjcHVfb2YocnEpKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX2NwdShwKSAhPSBjcHVfb2YocnEpKSlcbiBcdFx0XHRzZXRfdGFza19jcHUocCwgY3B1X29mKHJxKSk7XG4gXG4gXHRcdHR0d3VfZG9fYWN0aXZhdGUocnEsIHAsIHAtXHUwMDNlc2NoZWRfcmVtb3RlX3dha2V1cCA/IFdGX01JR1JBVEVEIDogMCwgXHUwMDI2cmYpO1xuQEAgLTQwMDMsOCArNDAwMyw4IEBAIGJvb2wgdHR3dV9zdGF0ZV9tYXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBzdGF0ZSwgaW50ICpzdWNjZXNzKVxuIFx0aW50IG1hdGNoO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1BSRUVNUFQpKSB7XG4tXHRcdFdBUk5fT05fT05DRSgoc3RhdGUgXHUwMDI2IFRBU0tfUlRMT0NLX1dBSVQpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAgc3RhdGUgIT0gVEFTS19SVExPQ0tfV0FJVCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgoc3RhdGUgXHUwMDI2IFRBU0tfUlRMT0NLX1dBSVQpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgICAgc3RhdGUgIT0gVEFTS19SVExPQ0tfV0FJVCk7XG4gXHR9XG4gXG4gXHQqc3VjY2VzcyA9ICEhKG1hdGNoID0gX190YXNrX3N0YXRlX21hdGNoKHAsIHN0YXRlKSk7XG5AQCAtNTc0NSw3ICs1NzQ1LDcgQEAgc3RhdGljIHZvaWQgc2NoZWRfdGlja19yZW1vdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRcdCAqIHdlIGFyZSBhbHdheXMgc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHByb3h5IChvbmx5IGFcbiBcdFx0XHQgKiBzaW5nbGUgdGFzayBpcyBydW5uaW5nKS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRXQVJOX09OX09OQ0UocnEtXHUwMDNlY3VyciAhPSBycS1cdTAwM2Vkb25vcik7XG4rXHRcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZWN1cnIgIT0gcnEtXHUwMDNlZG9ub3IpO1xuIFx0XHRcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG4gXG4gXHRcdFx0aWYgKCFpc19pZGxlX3Rhc2soY3VycikpIHtcbkBAIC01NzU0LDcgKzU3NTQsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdFx0XHQgKiByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHR1NjQgZGVsdGEgPSBycV9jbG9ja190YXNrKHJxKSAtIGN1cnItXHUwMDNlc2UuZXhlY19zdGFydDtcbi1cdFx0XHRcdFdBUk5fT05fT05DRShkZWx0YSBcdTAwM2UgKHU2NClOU0VDX1BFUl9TRUMgKiAzMCk7XG4rXHRcdFx0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGVsdGEgXHUwMDNlICh1NjQpTlNFQ19QRVJfU0VDICogMzApO1xuIFx0XHRcdH1cbiBcdFx0XHRjdXJyLVx1MDAzZXNjaGVkX2NsYXNzLVx1MDAzZXRhc2tfdGljayhycSwgY3VyciwgMCk7XG4gXG5AQCAtNTc2OSw3ICs1NzY5LDcgQEAgc3RhdGljIHZvaWQgc2NoZWRfdGlja19yZW1vdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0ICogZmlyc3QgdXBkYXRlIHN0YXRlIHRvIHJlZmxlY3QgaG90cGx1ZyBhY3Rpdml0eSBpZiByZXF1aXJlZC5cbiBcdCAqL1xuIFx0b3MgPSBhdG9taWNfZmV0Y2hfYWRkX3VubGVzcyhcdTAwMjZ0d29yay1cdTAwM2VzdGF0ZSwgLTEsIFRJQ0tfU0NIRURfUkVNT1RFX1JVTk5JTkcpO1xuLVx0V0FSTl9PTl9PTkNFKG9zID09IFRJQ0tfU0NIRURfUkVNT1RFX09GRkxJTkUpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKG9zID09IFRJQ0tfU0NIRURfUkVNT1RFX09GRkxJTkUpO1xuIFx0aWYgKG9zID09IFRJQ0tfU0NIRURfUkVNT1RFX1JVTk5JTkcpXG4gXHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBkd29yaywgSFopO1xuIH1cbkBAIC02MTk2LDcgKzYxOTYsNyBAQCBwaWNrX25leHRfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIHN0cnVjdCBycV9mbGFncyAqcmYpXG4gXHRcdFx0ICogRm9yIHJvYnVzdG5lc3MsIHVwZGF0ZSB0aGUgbWluX3ZydW50aW1lX2ZpIGZvclxuIFx0XHRcdCAqIHVuY29uc3RyYWluZWQgcGlja3MgYXMgd2VsbC5cbiBcdFx0XHQgKi9cbi1cdFx0XHRXQVJOX09OX09OQ0UoZmlfYmVmb3JlKTtcbitcdFx0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZmlfYmVmb3JlKTtcbiBcdFx0XHR0YXNrX3ZydW50aW1lX3VwZGF0ZShycSwgbmV4dCwgZmFsc2UpO1xuIFx0XHRcdGdvdG8gb3V0X3NldF9uZXh0O1xuIFx0XHR9XG5AQCAtNjI3NCw3ICs2Mjc0LDcgQEAgcGlja19uZXh0X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxuIFx0cnEtXHUwMDNlY29yZV9zY2hlZF9zZXEgPSBycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfcGlja19zZXE7XG4gXG4gXHQvKiBTb21ldGhpbmcgc2hvdWxkIGhhdmUgYmVlbiBzZWxlY3RlZCBmb3IgY3VycmVudCBDUFUgKi9cbi1cdFdBUk5fT05fT05DRSghbmV4dCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIW5leHQpO1xuIFxuIFx0LypcbiBcdCAqIFJlc2NoZWR1bGUgc2libGluZ3NcbkBAIC02MzE3LDcgKzYzMTcsNyBAQCBwaWNrX25leHRfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIHN0cnVjdCBycV9mbGFncyAqcmYpXG4gXHRcdH1cbiBcbiBcdFx0LyogRGlkIHdlIGJyZWFrIEwxVEYgbWl0aWdhdGlvbiByZXF1aXJlbWVudHM/ICovXG4tXHRcdFdBUk5fT05fT05DRSghY29va2llX21hdGNoKG5leHQsIHJxX2ktXHUwMDNlY29yZV9waWNrKSk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghY29va2llX21hdGNoKG5leHQsIHJxX2ktXHUwMDNlY29yZV9waWNrKSk7XG4gXG4gXHRcdGlmIChycV9pLVx1MDAzZWN1cnIgPT0gcnFfaS1cdTAwM2Vjb3JlX3BpY2spIHtcbiBcdFx0XHRycV9pLVx1MDAzZWNvcmVfcGljayA9IE5VTEw7XG5AQCAtNjcxNyw3ICs2NzE3LDcgQEAgc3RhdGljIHZvaWQgcHJveHlfbWlncmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYsXG4gXHRzdHJ1Y3QgcnEgKnRhcmdldF9ycSA9IGNwdV9ycSh0YXJnZXRfY3B1KTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xuLVx0V0FSTl9PTihwID09IHJxLVx1MDAzZWN1cnIpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRChwID09IHJxLVx1MDAzZWN1cnIpO1xuIFx0LypcbiBcdCAqIFNpbmNlIHdlIGFyZSBtaWdyYXRpbmcgYSBibG9ja2VkIGRvbm9yLCBpdCBjb3VsZCBiZSBycS1cdTAwM2Vkb25vcixcbiBcdCAqIGFuZCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHJlZmVyZW5jZXMgZnJvbSB0aGlzXG5AQCAtNjc0OSw3ICs2NzQ5LDcgQEAgc3RhdGljIHZvaWQgcHJveHlfZm9yY2VfcmV0dXJuKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYsXG4gXHRpbnQgY3B1LCB3YWtlX2ZsYWcgPSBXRl9UVFdVO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XG4tXHRXQVJOX09OKHAgPT0gcnEtXHUwMDNlY3Vycik7XG4rXHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gcnEtXHUwMDNlY3Vycik7XG4gXG4gXHRpZiAocCA9PSBycS1cdTAwM2Vkb25vcilcbiBcdFx0cHJveHlfcmVzY2hlZF9pZGxlKHJxKTtcbkBAIC02OTUxLDcgKzY5NTEsNyBAQCBmaW5kX3Byb3h5X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpkb25vciwgc3RydWN0IHJxX2ZsYWdzICpyZilcbiBcdFx0ICogZ3VhcmFudGVlIGl0cyBleGlzdGVuY2UsIGFzIHBlciB0dHd1X3JlbW90ZSgpLlxuIFx0XHQgKi9cbiBcdH1cbi1cdFdBUk5fT05fT05DRShvd25lciBcdTAwMjZcdTAwMjYgIW93bmVyLVx1MDAzZW9uX3JxKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChvd25lciBcdTAwMjZcdTAwMjYgIW93bmVyLVx1MDAzZW9uX3JxKTtcbiBcdHJldHVybiBvd25lcjtcbiBcbiBkZWFjdGl2YXRlOlxuQEAgLTc2MzEsOCArNzYzMSw4IEBAIHZvaWQgcnRfbXV0ZXhfc2V0cHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaylcbiBcdCAqIHJlYWwgbmVlZCB0byBib29zdC5cbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KHAgPT0gcnEtXHUwMDNlaWRsZSkpIHtcbi1cdFx0V0FSTl9PTihwICE9IHJxLVx1MDAzZWN1cnIpO1xuLVx0XHRXQVJOX09OKHAtXHUwMDNlcGlfYmxvY2tlZF9vbik7XG4rXHRcdFdBUk5fT05fREVGRVJSRUQocCAhPSBycS1cdTAwM2VjdXJyKTtcbitcdFx0V0FSTl9PTl9ERUZFUlJFRChwLVx1MDAzZXBpX2Jsb2NrZWRfb24pO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG5AQCAtODQ2Myw3ICs4NDYzLDcgQEAgc3RhdGljIHZvaWQgYmFsYW5jZV9wdXNoX3NldChpbnQgY3B1LCBib29sIG9uKVxuIFxuIFx0cnFfbG9ja19pcnFzYXZlKHJxLCBcdTAwMjZyZik7XG4gXHRpZiAob24pIHtcbi1cdFx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2spO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXHUwMDNlYmFsYW5jZV9jYWxsYmFjayk7XG4gXHRcdHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPSBcdTAwMjZiYWxhbmNlX3B1c2hfY2FsbGJhY2s7XG4gXHR9IGVsc2UgaWYgKHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPT0gXHUwMDI2YmFsYW5jZV9wdXNoX2NhbGxiYWNrKSB7XG4gXHRcdHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPSBOVUxMO1xuQEAgLTExMTUwLDcgKzExMTUwLDcgQEAgc3RydWN0IHNjaGVkX2NoYW5nZV9jdHggKnNjaGVkX2NoYW5nZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludFxuIFx0ICogTXVzdCBleGNsdXNpdmVseSB1c2UgbWF0Y2hlZCBmbGFncyBzaW5jZSB0aGlzIGlzIGJvdGggZGVxdWV1ZSBhbmRcbiBcdCAqIGVucXVldWUuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShmbGFncyBcdTAwMjYgMHhGRkZGMDAwMCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZmxhZ3MgXHUwMDI2IDB4RkZGRjAwMDApO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XG4gXG5AQCAtMTExOTgsNyArMTExOTgsNyBAQCB2b2lkIHNjaGVkX2NoYW5nZV9lbmQoc3RydWN0IHNjaGVkX2NoYW5nZV9jdHggKmN0eClcbiBcdC8qXG4gXHQgKiBDaGFuZ2luZyBjbGFzcyB3aXRob3V0ICpRVUVVRV9DTEFTUyBpcyBiYWQuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShwLVx1MDAzZXNjaGVkX2NsYXNzICE9IGN0eC1cdTAwM2VjbGFzcyBcdTAwMjZcdTAwMjYgIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IEVOUVVFVUVfQ0xBU1MpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjaGVkX2NsYXNzICE9IGN0eC1cdTAwM2VjbGFzcyBcdTAwMjZcdTAwMjYgIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IEVOUVVFVUVfQ0xBU1MpKTtcbiBcbiBcdGlmICgoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBFTlFVRVVFX0NMQVNTKSBcdTAwMjZcdTAwMjYgcC1cdTAwM2VzY2hlZF9jbGFzcy1cdTAwM2Vzd2l0Y2hpbmdfdG8pXG4gXHRcdHAtXHUwMDNlc2NoZWRfY2xhc3MtXHUwMDNlc3dpdGNoaW5nX3RvKHJxLCBwKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZV9zY2hlZC5jIGIva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuY1xuaW5kZXggNzNiNmIyNDI2OTExOWIuLmVjODhlZDdkOGVlODc3IDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuY1xuKysrIGIva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuY1xuQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2NoZWRfY29yZV91cGRhdGVfY29va2llKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdCAqIGEgY29va2llIHVudGlsIGFmdGVyIHdlJ3ZlIHJlbW92ZWQgaXQsIHdlIG11c3QgaGF2ZSBjb3JlIHNjaGVkdWxpbmdcbiBcdCAqIGVuYWJsZWQgaGVyZS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKChwLVx1MDAzZWNvcmVfY29va2llIHx8IGNvb2tpZSkgXHUwMDI2XHUwMDI2ICFzY2hlZF9jb3JlX2VuYWJsZWQocnEpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgocC1cdTAwM2Vjb3JlX2Nvb2tpZSB8fCBjb29raWUpIFx1MDAyNlx1MDAyNiAhc2NoZWRfY29yZV9lbmFibGVkKHJxKSk7XG4gXG4gXHRpZiAoc2NoZWRfY29yZV9lbnF1ZXVlZChwKSlcbiBcdFx0c2NoZWRfY29yZV9kZXF1ZXVlKHJxLCBwLCBERVFVRVVFX1NBVkUpO1xuQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIF9fc2NoZWRfY29yZV9hY2NvdW50X2ZvcmNlaWRsZShzdHJ1Y3QgcnEgKnJxKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XG4gXG4tXHRXQVJOX09OX09OQ0UoIXJxLVx1MDAzZWNvcmUtXHUwMDNlY29yZV9mb3JjZWlkbGVfY291bnQpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX2NvdW50KTtcbiBcbiBcdGlmIChycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX3N0YXJ0ID09IDApXG4gXHRcdHJldHVybjtcbkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBfX3NjaGVkX2NvcmVfYWNjb3VudF9mb3JjZWlkbGUoc3RydWN0IHJxICpycSlcbiBcbiBcdHJxLVx1MDAzZWNvcmUtXHUwMDNlY29yZV9mb3JjZWlkbGVfc3RhcnQgPSBub3c7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX29jY3VwYXRpb24pKSB7XG4rXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX29jY3VwYXRpb24pKSB7XG4gXHRcdC8qIGNhbid0IGJlIGZvcmNlZCBpZGxlIHdpdGhvdXQgYSBydW5uaW5nIHRhc2sgKi9cbiBcdH0gZWxzZSBpZiAocnEtXHUwMDNlY29yZS1cdTAwM2Vjb3JlX2ZvcmNlaWRsZV9jb3VudCBcdTAwM2UgMSB8fFxuIFx0XHQgICBycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX29jY3VwYXRpb24gXHUwMDNlIDEpIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9jcHVkZWFkbGluZS5jXG5pbmRleCAwYTJiN2UzMGZkMTBjMS4uZTMwNWE4ZTk5M2UyN2MgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmNcbkBAIC0xNDksNyArMTQ5LDcgQEAgaW50IGNwdWRsX2ZpbmQoc3RydWN0IGNwdWRsICpjcCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0fSBlbHNlIHtcbiBcdFx0aW50IGJlc3RfY3B1ID0gY3B1ZGxfbWF4aW11bShjcCk7XG4gXG4tXHRcdFdBUk5fT04oYmVzdF9jcHUgIT0gLTEgXHUwMDI2XHUwMDI2ICFjcHVfcHJlc2VudChiZXN0X2NwdSkpO1xuK1x0XHRXQVJOX09OX0RFRkVSUkVEKGJlc3RfY3B1ICE9IC0xIFx1MDAyNlx1MDAyNiAhY3B1X3ByZXNlbnQoYmVzdF9jcHUpKTtcbiBcbiBcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoYmVzdF9jcHUsIFx1MDAyNnAtXHUwMDNlY3B1c19tYXNrKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGRsX3RpbWVfYmVmb3JlKGRsX3NlLVx1MDAzZWRlYWRsaW5lLCBjcC1cdTAwM2VlbGVtZW50c1swXS5kbCkpIHtcbkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBjcHVkbF9jbGVhcihzdHJ1Y3QgY3B1ZGwgKmNwLCBpbnQgY3B1LCBib29sIG9ubGluZSlcbiBcdGludCBvbGRfaWR4LCBuZXdfY3B1O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFdBUk5fT04oIWNwdV9wcmVzZW50KGNwdSkpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghY3B1X3ByZXNlbnQoY3B1KSk7XG4gXG4gXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3AtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIGNwdWRsX3NldChzdHJ1Y3QgY3B1ZGwgKmNwLCBpbnQgY3B1LCB1NjQgZGwpXG4gXHRpbnQgb2xkX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRXQVJOX09OKCFjcHVfcHJlc2VudChjcHUpKTtcbitcdFdBUk5fT05fREVGRVJSRUQoIWNwdV9wcmVzZW50KGNwdSkpO1xuIFxuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jXG5pbmRleCA3ZGI0Yzg3ZGY4M2IwYS4uODYzYWM3NTA5MTkyZjcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2RlYWRsaW5lLmNcbkBAIC0yMTcsOCArMjE3LDggQEAgdm9pZCBfX2FkZF9ydW5uaW5nX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSlcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTtcbiBcdGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgKz0gZGxfYnc7XG4tXHRXQVJOX09OX09OQ0UoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cbi1cdFdBUk5fT05fT05DRShkbF9ycS1cdTAwM2VydW5uaW5nX2J3IFx1MDAzZSBkbF9ycS1cdTAwM2V0aGlzX2J3KTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkbF9ycS1cdTAwM2VydW5uaW5nX2J3IFx1MDAzYyBvbGQpOyAvKiBvdmVyZmxvdyAqL1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgXHUwMDNlIGRsX3JxLVx1MDAzZXRoaXNfYncpO1xuIFx0Lyoga2ljayBjcHVmcmVxIChzZWUgdGhlIGNvbW1lbnQgaW4ga2VybmVsL3NjaGVkL3NjaGVkLmgpLiAqL1xuIFx0Y3B1ZnJlcV91cGRhdGVfdXRpbChycV9vZl9kbF9ycShkbF9ycSksIDApO1xuIH1cbkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBfX3N1Yl9ydW5uaW5nX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSlcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTtcbiBcdGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgLT0gZGxfYnc7XG4tXHRXQVJOX09OX09OQ0UoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2Ugb2xkKTsgLyogdW5kZXJmbG93ICovXG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2Ugb2xkKTsgLyogdW5kZXJmbG93ICovXG4gXHRpZiAoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2Ugb2xkKVxuIFx0XHRkbF9ycS1cdTAwM2VydW5uaW5nX2J3ID0gMDtcbiBcdC8qIGtpY2sgY3B1ZnJlcSAoc2VlIHRoZSBjb21tZW50IGluIGtlcm5lbC9zY2hlZC9zY2hlZC5oKS4gKi9cbkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBfX2FkZF9ycV9idyh1NjQgZGxfYncsIHN0cnVjdCBkbF9ycSAqZGxfcnEpXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxX29mX2RsX3JxKGRsX3JxKSk7XG4gXHRkbF9ycS1cdTAwM2V0aGlzX2J3ICs9IGRsX2J3O1xuLVx0V0FSTl9PTl9PTkNFKGRsX3JxLVx1MDAzZXRoaXNfYncgXHUwMDNjIG9sZCk7IC8qIG92ZXJmbG93ICovXG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtXHUwMDNldGhpc19idyBcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cbiB9XG4gXG4gc3RhdGljIGlubGluZVxuQEAgLTI1NCwxMCArMjU0LDEwIEBAIHZvaWQgX19zdWJfcnFfYncodTY0IGRsX2J3LCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZl9kbF9ycShkbF9ycSkpO1xuIFx0ZGxfcnEtXHUwMDNldGhpc19idyAtPSBkbF9idztcbi1cdFdBUk5fT05fT05DRShkbF9ycS1cdTAwM2V0aGlzX2J3IFx1MDAzZSBvbGQpOyAvKiB1bmRlcmZsb3cgKi9cbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkbF9ycS1cdTAwM2V0aGlzX2J3IFx1MDAzZSBvbGQpOyAvKiB1bmRlcmZsb3cgKi9cbiBcdGlmIChkbF9ycS1cdTAwM2V0aGlzX2J3IFx1MDAzZSBvbGQpXG4gXHRcdGRsX3JxLVx1MDAzZXRoaXNfYncgPSAwO1xuLVx0V0FSTl9PTl9PTkNFKGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgXHUwMDNlIGRsX3JxLVx1MDAzZXRoaXNfYncpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgXHUwMDNlIGRsX3JxLVx1MDAzZXRoaXNfYncpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lXG5AQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgY2FuY2VsX2luYWN0aXZlX3RpbWVyKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlKVxuIFxuIHN0YXRpYyB2b2lkIGRsX2NoYW5nZV91dGlsaXphdGlvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBuZXdfYncpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlZGwuZmxhZ3MgXHUwMDI2IFNDSEVEX0ZMQUdfU1VHT1YpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlZGwuZmxhZ3MgXHUwMDI2IFNDSEVEX0ZMQUdfU1VHT1YpO1xuIFxuIFx0aWYgKHRhc2tfb25fcnFfcXVldWVkKHApKVxuIFx0XHRyZXR1cm47XG5AQCAtNDE2LDcgKzQxNiw3IEBAIHN0YXRpYyB2b2lkIHRhc2tfbm9uX2NvbnRlbmRpbmcoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIGJvb2wgZGxfdGFzaylcbiBcdGlmIChkbF9lbnRpdHlfaXNfc3BlY2lhbChkbF9zZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdFdBUk5fT04oZGxfc2UtXHUwMDNlZGxfbm9uX2NvbnRlbmRpbmcpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRChkbF9zZS1cdTAwM2VkbF9ub25fY29udGVuZGluZyk7XG4gXG4gXHR6ZXJvbGFnX3RpbWUgPSBkbF9zZS1cdTAwM2VkZWFkbGluZSAtXG4gXHRcdCBkaXY2NF9sb25nKChkbF9zZS1cdTAwM2VydW50aW1lICogZGxfc2UtXHUwMDNlZGxfcGVyaW9kKSxcbkBAIC01ODIsNyArNTgyLDcgQEAgc3RhdGljIHZvaWQgZW5xdWV1ZV9wdXNoYWJsZV9kbF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4gXHRzdHJ1Y3QgcmJfbm9kZSAqbGVmdG1vc3Q7XG4gXG4tXHRXQVJOX09OX09OQ0UoIVJCX0VNUFRZX05PREUoXHUwMDI2cC1cdTAwM2VwdXNoYWJsZV9kbF90YXNrcykpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFSQl9FTVBUWV9OT0RFKFx1MDAyNnAtXHUwMDNlcHVzaGFibGVfZGxfdGFza3MpKTtcbiBcbiBcdGxlZnRtb3N0ID0gcmJfYWRkX2NhY2hlZChcdTAwMjZwLVx1MDAzZXB1c2hhYmxlX2RsX3Rhc2tzLFxuIFx0XHRcdFx0IFx1MDAyNnJxLVx1MDAzZWRsLnB1c2hhYmxlX2RsX3Rhc2tzX3Jvb3QsXG5AQCAtNjY0LDcgKzY2NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnEgKmRsX3Rhc2tfb2ZmbGluZV9taWdyYXRpb24oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwXG4gXHRcdFx0ICogRmFpbGVkIHRvIGZpbmQgYW55IHN1aXRhYmxlIENQVS5cbiBcdFx0XHQgKiBUaGUgdGFzayB3aWxsIG5ldmVyIGNvbWUgYmFjayFcbiBcdFx0XHQgKi9cbi1cdFx0XHRXQVJOX09OX09OQ0UoZGxfYmFuZHdpZHRoX2VuYWJsZWQoKSk7XG4rXHRcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX2JhbmR3aWR0aF9lbmFibGVkKCkpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogSWYgYWRtaXNzaW9uIGNvbnRyb2wgaXMgZGlzYWJsZWQgd2VcbkBAIC03NTYsOCArNzU2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25ld19kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXG4gXHRzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpO1xuIFx0c3RydWN0IHJxICpycSA9IHJxX29mX2RsX3JxKGRsX3JxKTtcbiBcbi1cdFdBUk5fT04oaXNfZGxfYm9vc3RlZChkbF9zZSkpO1xuLVx0V0FSTl9PTihkbF90aW1lX2JlZm9yZShycV9jbG9jayhycSksIGRsX3NlLVx1MDAzZWRlYWRsaW5lKSk7XG4rXHRXQVJOX09OX0RFRkVSUkVEKGlzX2RsX2Jvb3N0ZWQoZGxfc2UpKTtcbitcdFdBUk5fT05fREVGRVJSRUQoZGxfdGltZV9iZWZvcmUocnFfY2xvY2socnEpLCBkbF9zZS1cdTAwM2VkZWFkbGluZSkpO1xuIFxuIFx0LypcbiBcdCAqIFdlIGFyZSByYWNpbmcgd2l0aCB0aGUgZGVhZGxpbmUgdGltZXIuIFNvLCBkbyBub3RoaW5nIGJlY2F1c2VcbkBAIC04MDEsNyArODAxLDcgQEAgc3RhdGljIHZvaWQgcmVwbGVuaXNoX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiBcdHN0cnVjdCBkbF9ycSAqZGxfcnEgPSBkbF9ycV9vZl9zZShkbF9zZSk7XG4gXHRzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfZGxfcnEoZGxfcnEpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHBpX29mKGRsX3NlKS1cdTAwM2VkbF9ydW50aW1lIFx1MDAzYz0gMCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocGlfb2YoZGxfc2UpLVx1MDAzZWRsX3J1bnRpbWUgXHUwMDNjPSAwKTtcbiBcbiBcdC8qXG4gXHQgKiBUaGlzIGNvdWxkIGJlIHRoZSBjYXNlIGZvciBhICEtZGwgdGFzayB0aGF0IGlzIGJvb3N0ZWQuXG5AQCAtOTc1LDcgKzk3NSw3IEBAIHVwZGF0ZV9kbF9yZXZpc2VkX3dha2V1cChzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IHJxICpycSlcbiBcdCAqXG4gXHQgKiBTZWUgdXBkYXRlX2RsX2VudGl0eSgpIGNvbW1lbnRzIGZvciBmdXJ0aGVyIGRldGFpbHMuXG4gXHQgKi9cbi1cdFdBUk5fT04oZGxfdGltZV9iZWZvcmUoZGxfc2UtXHUwMDNlZGVhZGxpbmUsIHJxX2Nsb2NrKHJxKSkpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRChkbF90aW1lX2JlZm9yZShkbF9zZS1cdTAwM2VkZWFkbGluZSwgcnFfY2xvY2socnEpKSk7XG4gXG4gXHRkbF9zZS1cdTAwM2VydW50aW1lID0gKGRsX3NlLVx1MDAzZWRsX2RlbnNpdHkgKiBsYXhpdHkpIFx1MDAzZVx1MDAzZSBCV19TSElGVDtcbiB9XG5AQCAtMTA4MCw3ICsxMDgwLDcgQEAgc3RhdGljIGludCBzdGFydF9kbF90aW1lcihzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiBcdCAqIChjdXJyZW50IHUgXHUwMDNlIFUpLlxuIFx0ICovXG4gXHRpZiAoZGxfc2UtXHUwMDNlZGxfZGVmZXJfYXJtZWQpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKCFkbF9zZS1cdTAwM2VkbF90aHJvdHRsZWQpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWRsX3NlLVx1MDAzZWRsX3Rocm90dGxlZCk7XG4gXHRcdGFjdCA9IG5zX3RvX2t0aW1lKGRsX3NlLVx1MDAzZWRlYWRsaW5lIC0gZGxfc2UtXHUwMDNlcnVudGltZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBhY3QgPSBkZWFkbGluZSAtIHJlbC1kZWFkbGluZSArIHBlcmlvZCAqL1xuQEAgLTE0NTEsNyArMTQ1MSw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9jdXJyX2RsX3NlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBzNjRcbiBcdFx0LypcbiBcdFx0ICogTm9uLXNlcnZlcnMgd291bGQgbmV2ZXIgZ2V0IHRpbWUgYWNjb3VudGVkIHdoaWxlIHRocm90dGxlZC5cbiBcdFx0ICovXG4tXHRcdFdBUk5fT05fT05DRSghZGxfc2VydmVyKGRsX3NlKSk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfc2VydmVyKGRsX3NlKSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFdoaWxlIHRoZSBzZXJ2ZXIgaXMgbWFya2VkIGlkbGUsIGRvIG5vdCBwdXNoIG91dCB0aGVcbkBAIC0xNDkyLDcgKzE0OTIsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9kbF9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgczY0XG4gXHRcdCAqIGFuZCBxdWV1ZSByaWdodCBhd2F5LiBPdGhlcndpc2Ugbm90aGluZyBtaWdodCBxdWV1ZSBpdC4gVGhhdCdzIHNpbWlsYXJcbiBcdFx0ICogdG8gd2hhdCBlbnF1ZXVlX2RsX2VudGl0eSgpIGRvZXMgb24gc3RhcnRfZGxfdGltZXI9PTAuIEZvciBub3csIGp1c3Qgd2Fybi5cbiBcdFx0ICovXG4tXHRcdFdBUk5fT05fT05DRSghc3RhcnRfZGxfdGltZXIoZGxfc2UpKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzdGFydF9kbF90aW1lcihkbF9zZSkpO1xuIFxuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMTgwMSw3ICsxODAxLDcgQEAgdm9pZCBkbF9zZXJ2ZXJfc3RhcnQoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXG4gXHQgKi9cbiBcdHJxLVx1MDAzZWRvbm9yLVx1MDAzZXNjaGVkX2NsYXNzLVx1MDAzZXVwZGF0ZV9jdXJyKHJxKTtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoIWNwdV9vbmxpbmUoY3B1X29mKHJxKSkpKVxuK1x0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghY3B1X29ubGluZShjcHVfb2YocnEpKSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRyYWNlX3NjaGVkX2RsX3NlcnZlcl9zdGFydF90cChkbF9zZSwgY3B1X29mKHJxKSwgZGxfZ2V0X3R5cGUoZGxfc2UsIHJxKSk7XG5AQCAtMjA3Myw3ICsyMDczLDcgQEAgdm9pZCBpbmNfZGxfdGFza3Moc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIHN0cnVjdCBkbF9ycSAqZGxfcnEpXG4gc3RhdGljIGlubGluZVxuIHZvaWQgZGVjX2RsX3Rhc2tzKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKVxuIHtcbi1cdFdBUk5fT04oIWRsX3JxLVx1MDAzZWRsX25yX3J1bm5pbmcpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghZGxfcnEtXHUwMDNlZGxfbnJfcnVubmluZyk7XG4gXHRkbF9ycS1cdTAwM2VkbF9ucl9ydW5uaW5nLS07XG4gXG4gXHRpZiAoIWRsX3NlcnZlcihkbF9zZSkpXG5AQCAtMjE2NSw3ICsyMTY1LDcgQEAgc3RhdGljIHZvaWQgX19lbnF1ZXVlX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiB7XG4gXHRzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCFSQl9FTVBUWV9OT0RFKFx1MDAyNmRsX3NlLVx1MDAzZXJiX25vZGUpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghUkJfRU1QVFlfTk9ERShcdTAwMjZkbF9zZS1cdTAwM2VyYl9ub2RlKSk7XG4gXG4gXHRyYl9hZGRfY2FjaGVkKFx1MDAyNmRsX3NlLVx1MDAzZXJiX25vZGUsIFx1MDAyNmRsX3JxLVx1MDAzZXJvb3QsIF9fZGxfbGVzcyk7XG4gXG5AQCAtMjE4OSw3ICsyMTg5LDcgQEAgc3RhdGljIHZvaWQgX19kZXF1ZXVlX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiBzdGF0aWMgdm9pZFxuIGVucXVldWVfZGxfZW50aXR5KHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBpbnQgZmxhZ3MpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKG9uX2RsX3JxKGRsX3NlKSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQob25fZGxfcnEoZGxfc2UpKTtcbiBcbiBcdHVwZGF0ZV9zdGF0c19lbnF1ZXVlX2RsKGRsX3JxX29mX3NlKGRsX3NlKSwgZGxfc2UsIGZsYWdzKTtcbiBcbkBAIC0yNjExLDcgKzI2MTEsNyBAQCBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpfX3BpY2tfdGFza19kbChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGRsX3NlID0gcGlja19uZXh0X2RsX2VudGl0eShkbF9ycSk7XG4tXHRXQVJOX09OX09OQ0UoIWRsX3NlKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfc2UpO1xuIFxuIFx0aWYgKGRsX3NlcnZlcihkbF9zZSkpIHtcbiBcdFx0cCA9IGRsX3NlLVx1MDAzZXNlcnZlcl9waWNrX3Rhc2soZGxfc2UsIHJmKTtcbkBAIC0yODIzLDEyICsyODIzLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF9wdXNoYWJsZV9kbF90YXNrKHN0cnVjdCBycSAqcnEpXG4gXHRpZiAoIXApXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWNwdSAhPSB0YXNrX2NwdShwKSk7XG4tXHRXQVJOX09OX09OQ0UodGFza19jdXJyZW50KHJxLCBwKSk7XG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2Vucl9jcHVzX2FsbG93ZWQgXHUwMDNjPSAxKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycS1cdTAwM2VjcHUgIT0gdGFza19jcHUocCkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfY3VycmVudChycSwgcCkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlbnJfY3B1c19hbGxvd2VkIFx1MDAzYz0gMSk7XG4gXG4tXHRXQVJOX09OX09OQ0UoIXRhc2tfb25fcnFfcXVldWVkKHApKTtcbi1cdFdBUk5fT05fT05DRSghZGxfdGFzayhwKSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXRhc2tfb25fcnFfcXVldWVkKHApKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfdGFzayhwKSk7XG4gXG4gXHRyZXR1cm4gcDtcbiB9XG5AQCAtMjk0NCw3ICsyOTQ0LDcgQEAgc3RhdGljIGludCBwdXNoX2RsX3Rhc2soc3RydWN0IHJxICpycSlcbiBcdGlmIChpc19taWdyYXRpb25fZGlzYWJsZWQobmV4dF90YXNrKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoV0FSTl9PTihuZXh0X3Rhc2sgPT0gcnEtXHUwMDNlY3VycikpXG4rXHRpZiAoV0FSTl9PTl9ERUZFUlJFRChuZXh0X3Rhc2sgPT0gcnEtXHUwMDNlY3VycikpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogV2UgbWlnaHQgcmVsZWFzZSBycSBsb2NrICovXG5AQCAtMzA1MCw4ICszMDUwLDggQEAgc3RhdGljIHZvaWQgcHVsbF9kbF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSlcbiBcdFx0ICovXG4gXHRcdGlmIChwIFx1MDAyNlx1MDAyNiBkbF90aW1lX2JlZm9yZShwLVx1MDAzZWRsLmRlYWRsaW5lLCBkbWluKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGRsX3Rhc2tfaXNfZWFybGllc3RfZGVhZGxpbmUocCwgdGhpc19ycSkpIHtcbi1cdFx0XHRXQVJOX09OKHAgPT0gc3JjX3JxLVx1MDAzZWN1cnIpO1xuLVx0XHRcdFdBUk5fT04oIXRhc2tfb25fcnFfcXVldWVkKHApKTtcbitcdFx0XHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gc3JjX3JxLVx1MDAzZWN1cnIpO1xuK1x0XHRcdFdBUk5fT05fREVGRVJSRUQoIXRhc2tfb25fcnFfcXVldWVkKHApKTtcbiBcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFRoZW4gd2UgcHVsbCBpZmYgcCBoYXMgYWN0dWFsbHkgYW4gZWFybGllclxuQEAgLTMxMDksNyArMzEwOSw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIHtcbiBcdHN0cnVjdCBycSAqcnE7XG4gXG4tXHRXQVJOX09OX09OQ0UoIWRsX3Rhc2socCkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFkbF90YXNrKHApKTtcbiBcbiBcdHJxID0gdGFza19ycShwKTtcbiBcdC8qXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC5jXG5pbmRleCA1ZDJkMTk0NzNhODJlOC4uNDdkM2E0YzE2NDU1YWMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0LmNcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQuY1xuQEAgLTUxMiwxMiArNTEyLDEyIEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gICogU28gaWYga2ZfdGFza3NbXSBpcyBzZXQsIEBwJ3Mgc2NoZWR1bGVyLXByb3RlY3RlZCBmaWVsZHMgYXJlIHN0YWJsZS5cbiAgKlxuICAqIGtmX3Rhc2tzW10gY2FuIG5vdCBzdGFjaywgc28gdGFzay1iYXNlZCBTQ1ggb3BzIG11c3Qgbm90IG5lc3QuIFRoZVxuLSAqIFdBUk5fT05fT05DRSgpIGluIGVhY2ggbWFjcm8gY2F0Y2hlcyBhIHJlLWVudHJ5IG9mIGFueSBvZiB0aGUgdGhyZWUgdmFyaWFudHNcbi0gKiB3aGlsZSBhIHByZXZpb3VzIG9uZSBpcyBzdGlsbCBpbiBwcm9ncmVzcy5cbisgKiBXQVJOX09OX09OQ0VfREVGRVJSRUQoKSBpbiBlYWNoIG1hY3JvIGNhdGNoZXMgYSByZS1lbnRyeSBvZiBhbnkgb2YgdGhlIHRocmVlXG4rICogdmFyaWFudHMgd2hpbGUgYSBwcmV2aW91cyBvbmUgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuXG4gICovXG4gI2RlZmluZSBTQ1hfQ0FMTF9PUF9UQVNLKHNjaCwgb3AsIGxvY2tlZF9ycSwgdGFzaywgYXJncy4uLilcdFx0XHRcXFxuIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRXQVJOX09OX09OQ0UoY3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0pO1x0XHRcdFx0XHRcXFxuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdKTtcdFx0XHRcXFxuIFx0Y3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrO1x0XHRcdFx0XHRcXFxuIFx0U0NYX0NBTExfT1AoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2ssICMjYXJncyk7XHRcdFx0XFxcbiBcdGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdID0gTlVMTDtcdFx0XHRcdFx0XFxcbkBAIC01MjYsNyArNTI2LDcgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAjZGVmaW5lIFNDWF9DQUxMX09QX1RBU0tfUkVUKHNjaCwgb3AsIGxvY2tlZF9ycSwgdGFzaywgYXJncy4uLilcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0X190eXBlb2ZfXygoc2NoKS1cdTAwM2VvcHMub3AodGFzaywgIyNhcmdzKSkgX19yZXQ7XHRcdFx0XHRcXFxuLVx0V0FSTl9PTl9PTkNFKGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdKTtcdFx0XHRcdFx0XFxcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjdXJyZW50LVx1MDAzZXNjeC5rZl90YXNrc1swXSk7XHRcdFx0XFxcbiBcdGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdID0gdGFzaztcdFx0XHRcdFx0XFxcbiBcdF9fcmV0ID0gU0NYX0NBTExfT1BfUkVUKChzY2gpLCBvcCwgbG9ja2VkX3JxLCB0YXNrLCAjI2FyZ3MpO1x0XHRcXFxuIFx0Y3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0gPSBOVUxMO1x0XHRcdFx0XHRcXFxuQEAgLTUzNiw3ICs1MzYsNyBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICNkZWZpbmUgU0NYX0NBTExfT1BfMlRBU0tTX1JFVChzY2gsIG9wLCBsb2NrZWRfcnEsIHRhc2swLCB0YXNrMSwgYXJncy4uLilcdFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3R5cGVvZl9fKChzY2gpLVx1MDAzZW9wcy5vcCh0YXNrMCwgdGFzazEsICMjYXJncykpIF9fcmV0O1x0XHRcdFxcXG4tXHRXQVJOX09OX09OQ0UoY3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0pO1x0XHRcdFx0XHRcXFxuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdKTtcdFx0XHRcXFxuIFx0Y3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrMDtcdFx0XHRcdFx0XFxcbiBcdGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzFdID0gdGFzazE7XHRcdFx0XHRcdFxcXG4gXHRfX3JldCA9IFNDWF9DQUxMX09QX1JFVCgoc2NoKSwgb3AsIGxvY2tlZF9ycSwgdGFzazAsIHRhc2sxLCAjI2FyZ3MpO1x0XFxcbkBAIC02ODcsNyArNjg3LDcgQEAgc3RhdGljIGJvb2wgbmxkc3FfY3Vyc29yX2xvc3RfdGFzayhzdHJ1Y3Qgc2N4X2RzcV9saXN0X25vZGUgKmN1cnNvcixcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKiBpZiBAcCBoYXMgc3RheWVkIG9uIEBkc3EsIGl0cyBycSBjb3VsZG4ndCBoYXZlIGNoYW5nZWQgKi9cbi1cdGlmIChXQVJOX09OX09OQ0UocnEgIT0gdGFza19ycShwKSkpXG4rXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxICE9IHRhc2tfcnEocCkpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC0xMjgyLDcgKzEyODIsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZHVsZV9yZWVucV9sb2NhbChzdHJ1Y3QgcnEgKnJxLCB1NjQgcmVlbnFfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHNjeF9zY2hlZCAqcm9vdCA9IHJjdV9kZXJlZmVyZW5jZV9zY2hlZChzY3hfcm9vdCk7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFyb290KSlcbitcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJvb3QpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzY2hlZHVsZV9kc3FfcmVlbnEocm9vdCwgXHUwMDI2cnEtXHUwMDNlc2N4LmxvY2FsX2RzcSwgcmVlbnFfZmxhZ3MsIHJxKTtcbkBAIC0xMzc5LDcgKzEzNzksNyBAQCBzdGF0aWMgdm9pZCBkc3FfaW5jX25yKHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlblxuIFx0ICovXG4gXHRpZiAoZW5xX2ZsYWdzIFx1MDAyNiBTQ1hfRU5RX0lNTUVEKSB7XG4gXHRcdGlmICh1bmxpa2VseShkc3EtXHUwMDNlaWQgIT0gU0NYX0RTUV9MT0NBTCkpIHtcbi1cdFx0XHRXQVJOX09OX09OQ0UoIShlbnFfZmxhZ3MgXHUwMDI2IFNDWF9FTlFfR0RTUV9GQUxMQkFDSykpO1xuK1x0XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKGVucV9mbGFncyBcdTAwMjYgU0NYX0VOUV9HRFNRX0ZBTExCQUNLKSk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHRcdHAtXHUwMDNlc2N4LmZsYWdzIHw9IFNDWF9UQVNLX0lNTUVEO1xuQEAgLTEzODgsNyArMTM4OCw3IEBAIHN0YXRpYyB2b2lkIGRzcV9pbmNfbnIoc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVuXG4gXHRpZiAocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0lNTUVEKSB7XG4gXHRcdHN0cnVjdCBycSAqcnEgPSBjb250YWluZXJfb2YoZHNxLCBzdHJ1Y3QgcnEsIHNjeC5sb2NhbF9kc3EpO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKGRzcS1cdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChkc3EtXHUwMDNlaWQgIT0gU0NYX0RTUV9MT0NBTCkpXG4gXHRcdFx0cmV0dXJuO1xuIFxuIFx0XHRycS1cdTAwM2VzY3gubnJfaW1tZWQrKztcbkBAIC0xNDEwLDggKzE0MTAsOCBAQCBzdGF0aWMgdm9pZCBkc3FfZGVjX25yKHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHRpZiAocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0lNTUVEKSB7XG4gXHRcdHN0cnVjdCBycSAqcnEgPSBjb250YWluZXJfb2YoZHNxLCBzdHJ1Y3QgcnEsIHNjeC5sb2NhbF9kc3EpO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKGRzcS1cdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSB8fFxuLVx0XHQgICAgV0FSTl9PTl9PTkNFKHJxLVx1MDAzZXNjeC5ucl9pbW1lZCBcdTAwM2M9IDApKVxuK1x0XHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRzcS1cdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSB8fFxuK1x0XHQgICAgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZXNjeC5ucl9pbW1lZCBcdTAwM2M9IDApKVxuIFx0XHRcdHJldHVybjtcbiBcbiBcdFx0cnEtXHUwMDNlc2N4Lm5yX2ltbWVkLS07XG5AQCAtMTUyMSw5ICsxNTIxLDkgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hfZW5xdWV1ZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsXG4ge1xuIFx0Ym9vbCBpc19sb2NhbCA9IGRzcS1cdTAwM2VpZCA9PSBTQ1hfRFNRX0xPQ0FMO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2N4LmRzcSB8fCAhbGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4tXHRXQVJOX09OX09OQ0UoKHAtXHUwMDNlc2N4LmRzcV9mbGFncyBcdTAwMjYgU0NYX1RBU0tfRFNRX09OX1BSSVEpIHx8XG4tXHRcdCAgICAgIVJCX0VNUFRZX05PREUoXHUwMDI2cC1cdTAwM2VzY3guZHNxX3ByaXEpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5kc3EgfHwgIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKChwLVx1MDAzZXNjeC5kc3FfZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0RTUV9PTl9QUklRKSB8fFxuK1x0XHRcdCAgICAgICFSQl9FTVBUWV9OT0RFKFx1MDAyNnAtXHUwMDNlc2N4LmRzcV9wcmlxKSk7XG4gXG4gXHRpZiAoIWlzX2xvY2FsKSB7XG4gXHRcdHJhd19zcGluX2xvY2tfbmVzdGVkKFx1MDAyNmRzcS1cdTAwM2Vsb2NrLFxuQEAgLTE2NDYsNyArMTY0Niw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoX2VucXVldWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgcnEgKnJxLFxuIHN0YXRpYyB2b2lkIHRhc2tfdW5saW5rX2Zyb21fZHNxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSlcbiB7XG4tXHRXQVJOX09OX09OQ0UobGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQobGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4gXG4gXHRpZiAocC1cdTAwM2VzY3guZHNxX2ZsYWdzIFx1MDAyNiBTQ1hfVEFTS19EU1FfT05fUFJJUSkge1xuIFx0XHRyYl9lcmFzZShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfcHJpcSwgXHUwMDI2ZHNxLVx1MDAzZXByaXEpO1xuQEAgLTE3MDksNyArMTcwOSw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoX2RlcXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0XHQgKiBob2xkaW5nX2NwdSB3aGljaCB0ZWxscyBkaXNwYXRjaF90b19sb2NhbF9kc3EoKSB0aGF0IGl0IGxvc3RcbiBcdFx0ICogdGhlIHJhY2UuXG4gXHRcdCAqL1xuLVx0XHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xuIFx0XHRwLVx1MDAzZXNjeC5ob2xkaW5nX2NwdSA9IC0xO1xuIFx0fVxuIFx0cC1cdTAwM2VzY3guZHNxID0gTlVMTDtcbkBAIC0xNzg3LDggKzE3ODcsOCBAQCBzdGF0aWMgdm9pZCBtYXJrX2RpcmVjdF9kaXNwYXRjaChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5kZHNwX2RzcV9pZCAhPSBTQ1hfRFNRX0lOVkFMSUQpO1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2N4LmRkc3BfZW5xX2ZsYWdzKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5kZHNwX2RzcV9pZCAhPSBTQ1hfRFNRX0lOVkFMSUQpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2N4LmRkc3BfZW5xX2ZsYWdzKTtcbiBcbiBcdHAtXHUwMDNlc2N4LmRkc3BfZHNxX2lkID0gZHNxX2lkO1xuIFx0cC1cdTAwM2VzY3guZGRzcF9lbnFfZmxhZ3MgPSBlbnFfZmxhZ3M7XG5AQCAtMTg1NSw3ICsxODU1LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0X2Rpc3BhdGNoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5kc3EgfHwgIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guZHNxIHx8ICFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNlc2N4LmRzcV9saXN0Lm5vZGUpKTtcbiBcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlLFxuIFx0XHRcdCAgICAgIFx1MDAyNnJxLVx1MDAzZXNjeC5kZHNwX2RlZmVycmVkX2xvY2Fscyk7XG4gXHRcdHNjaGVkdWxlX2RlZmVycmVkX2xvY2tlZChycSk7XG5AQCAtMTg4OCw3ICsxODg4LDcgQEAgc3RhdGljIHZvaWQgZG9fZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVucV9mbGFncyxcbiBcdHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxO1xuIFx0dW5zaWduZWQgbG9uZyBxc2VxO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCEocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCEocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpO1xuIFxuIFx0LyogaW50ZXJuYWwgbW92ZW1lbnRzIC0gcnEgbWlncmF0aW9uIC8gUkVTVE9SRSAqL1xuIFx0aWYgKHN0aWNreV9jcHUgPT0gY3B1X29mKHJxKSlcbkBAIC0xOTM4LDExICsxOTM4LDExIEBAIHN0YXRpYyB2b2lkIGRvX2VucXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlbnFfZmxhZ3MsXG4gXHQvKiBEU1EgYnlwYXNzIGRpZG4ndCB0cmlnZ2VyLCBlbnF1ZXVlIG9uIHRoZSBCUEYgc2NoZWR1bGVyICovXG4gXHRxc2VxID0gcnEtXHUwMDNlc2N4Lm9wc19xc2VxKysgXHUwMDNjXHUwMDNjIFNDWF9PUFNTX1FTRVFfU0hJRlQ7XG4gXG4tXHRXQVJOX09OX09OQ0UoYXRvbWljX2xvbmdfcmVhZChcdTAwMjZwLVx1MDAzZXNjeC5vcHNfc3RhdGUpICE9IFNDWF9PUFNTX05PTkUpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGF0b21pY19sb25nX3JlYWQoXHUwMDI2cC1cdTAwM2VzY3gub3BzX3N0YXRlKSAhPSBTQ1hfT1BTU19OT05FKTtcbiBcdGF0b21pY19sb25nX3NldChcdTAwMjZwLVx1MDAzZXNjeC5vcHNfc3RhdGUsIFNDWF9PUFNTX1FVRVVFSU5HIHwgcXNlcSk7XG4gXG4gXHRkZHNwX3Rhc2twID0gdGhpc19jcHVfcHRyKFx1MDAyNmRpcmVjdF9kaXNwYXRjaF90YXNrKTtcbi1cdFdBUk5fT05fT05DRSgqZGRzcF90YXNrcCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoKmRkc3BfdGFza3ApO1xuIFx0KmRkc3BfdGFza3AgPSBwO1xuIFxuIFx0U0NYX0NBTExfT1BfVEFTSyhzY2gsIGVucXVldWUsIHJxLCBwLCBlbnFfZmxhZ3MpO1xuQEAgLTIwMzksNyArMjAzOSw3IEBAIHN0YXRpYyB2b2lkIGVucXVldWVfdGFza19zY3goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY29yZV9lbnFfXG4gXHRcdHN0aWNreV9jcHUgPSBjcHVfb2YocnEpO1xuIFxuIFx0aWYgKHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfVEFTS19RVUVVRUQpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKCF0YXNrX3J1bm5hYmxlKHApKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCF0YXNrX3J1bm5hYmxlKHApKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtMjE1OSw3ICsyMTU5LDcgQEAgc3RhdGljIGJvb2wgZGVxdWV1ZV90YXNrX3NjeChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjb3JlX2RlcV9cbiBcdFx0ZGVxX2ZsYWdzIHw9IFNDWF9ERVFfU0NIRURfQ0hBTkdFO1xuIFxuIFx0aWYgKCEocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKHRhc2tfcnVubmFibGUocCkpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19ydW5uYWJsZShwKSk7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuQEAgLTIyNTYsNyArMjI1Niw3IEBAIHN0YXRpYyB2b2lkIG1vdmVfbG9jYWxfdGFza190b19sb2NhbF9kc3Eoc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzcmNfZHNxLVx1MDAzZWxvY2spO1xuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChkc3RfcnEpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2N4LmhvbGRpbmdfY3B1IFx1MDAzZT0gMCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgXHUwMDNlPSAwKTtcbiBcbiBcdGlmIChlbnFfZmxhZ3MgXHUwMDI2IChTQ1hfRU5RX0hFQUQgfCBTQ1hfRU5RX1BSRUVNUFQpKVxuIFx0XHRsaXN0X2FkZChcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlLCBcdTAwMjZkc3RfZHNxLVx1MDAzZWxpc3QpO1xuQEAgLTIyOTksOCArMjI5OSw4IEBAIHN0YXRpYyB2b2lkIG1vdmVfcmVtb3RlX3Rhc2tfdG9fbG9jYWxfZHNxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVucV9mbGFncyxcbiBcdCAqIHRydW5jYXRlIHRoZSB1cHBlciAzMiBiaXQuIEFzIHdlIG93biBAcnEsIHdlIGNhbiBwYXNzIHRoZW0gdGhyb3VnaFxuIFx0ICogQHJxLVx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MgaW5zdGVhZC5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdV9vZihkc3RfcnEpLCBwLVx1MDAzZWNwdXNfcHRyKSk7XG4tXHRXQVJOX09OX09OQ0UoZHN0X3JxLVx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdV9vZihkc3RfcnEpLCBwLVx1MDAzZWNwdXNfcHRyKSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZHN0X3JxLVx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MpO1xuIFx0ZHN0X3JxLVx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MgPSBlbnFfZmxhZ3M7XG4gXHRhY3RpdmF0ZV90YXNrKGRzdF9ycSwgcCwgMCk7XG4gXHRkc3RfcnEtXHUwMDNlc2N4LmV4dHJhX2VucV9mbGFncyA9IDA7XG5AQCAtMjMzMSw3ICsyMzMxLDcgQEAgc3RhdGljIGJvb2wgdGFza19jYW5fcnVuX29uX3JlbW90ZV9ycShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4ge1xuIFx0czMyIGNwdSA9IGNwdV9vZihycSk7XG4gXG4tXHRXQVJOX09OX09OQ0UodGFza19jcHUocCkgPT0gY3B1KTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX2NwdShwKSA9PSBjcHUpO1xuIFxuIFx0LypcbiBcdCAqIElmIEBwIGhhcyBtaWdyYXRpb24gZGlzYWJsZWQsIEBwLVx1MDAzZWNwdXNfcHRyIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBvbmx5XG5AQCAtMjQxMSw3ICsyNDExLDcgQEAgc3RhdGljIGJvb2wgdW5saW5rX2RzcV9hbmRfbG9ja19zcmNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkc3EtXHUwMDNlbG9jayk7XG4gXG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgXHUwMDNlPSAwKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5ob2xkaW5nX2NwdSBcdTAwM2U9IDApO1xuIFx0dGFza191bmxpbmtfZnJvbV9kc3EocCwgZHNxKTtcbiBcdHAtXHUwMDNlc2N4LmhvbGRpbmdfY3B1ID0gY3B1O1xuIFxuQEAgLTI0MjAsNyArMjQyMCw3IEBAIHN0YXRpYyBib29sIHVubGlua19kc3FfYW5kX2xvY2tfc3JjX3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcbiBcdC8qIHRhc2tfcnEgY291bGRuJ3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJ3JlIHN0aWxsIHRoZSBob2xkaW5nIGNwdSAqL1xuIFx0cmV0dXJuIGxpa2VseShwLVx1MDAzZXNjeC5ob2xkaW5nX2NwdSA9PSBjcHUpIFx1MDAyNlx1MDAyNlxuLVx0XHQhV0FSTl9PTl9PTkNFKHNyY19ycSAhPSB0YXNrX3JxKHApKTtcbitcdFx0IVdBUk5fT05fT05DRV9ERUZFUlJFRChzcmNfcnEgIT0gdGFza19ycShwKSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGNvbnN1bWVfcmVtb3RlX3Rhc2soc3RydWN0IHJxICp0aGlzX3JxLFxuQEAgLTI2MzAsNyArMjYzMCw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoX3RvX2xvY2FsX2RzcShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsXG4gXG4gXHQvKiB0YXNrX3JxIGNvdWxkbid0IGhhdmUgY2hhbmdlZCBpZiB3ZSdyZSBzdGlsbCB0aGUgaG9sZGluZyBjcHUgKi9cbiBcdGlmIChsaWtlbHkocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgPT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIVdBUk5fT05fT05DRShzcmNfcnEgIT0gdGFza19ycShwKSkpIHtcbitcdCAgICAhV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNyY19ycSAhPSB0YXNrX3JxKHApKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBJZiBAcCBpcyBzdGF5aW5nIG9uIHRoZSBzYW1lIHJxLCB0aGVyZSdzIG5vIG5lZWQgdG8gZ29cbiBcdFx0ICogdGhyb3VnaCB0aGUgZnVsbCBkZWFjdGl2YXRlL2FjdGl2YXRlIGN5Y2xlLiBPcHRpbWl6ZSBieVxuQEAgLTMwOTksNyArMzA5OSw3IEBAIHN0YXRpYyB2b2lkIHB1dF9wcmV2X3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdFx0ICogd2hpY2ggc2hvdWxkIHRyaWdnZXIgYW4gZXhwbGljaXQgZm9sbG93LXVwIHNjaGVkdWxpbmcgZXZlbnQuXG4gXHRcdCAqL1xuIFx0XHRpZiAobmV4dCBcdTAwMjZcdTAwMjYgc2NoZWRfY2xhc3NfYWJvdmUoXHUwMDI2ZXh0X3NjaGVkX2NsYXNzLCBuZXh0LVx1MDAzZXNjaGVkX2NsYXNzKSkge1xuLVx0XHRcdFdBUk5fT05fT05DRSghKHNjaC1cdTAwM2VvcHMuZmxhZ3MgXHUwMDI2IFNDWF9PUFNfRU5RX0xBU1QpKTtcbitcdFx0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIShzY2gtXHUwMDNlb3BzLmZsYWdzIFx1MDAyNiBTQ1hfT1BTX0VOUV9MQVNUKSk7XG4gXHRcdFx0ZG9fZW5xdWV1ZV90YXNrKHJxLCBwLCBTQ1hfRU5RX0xBU1QsIC0xKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRkb19lbnF1ZXVlX3Rhc2socnEsIHAsIDAsIC0xKTtcbkBAIC0zMjAxLDcgKzMyMDEsNyBAQCBkb19waWNrX3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYsIGJvb2wgZm9yY2Vfc2N4KVxuIFx0a2VlcF9wcmV2ID0gcnEtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfUlFfQkFMX0tFRVA7XG4gXHRpZiAodW5saWtlbHkoa2VlcF9wcmV2IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIHByZXYtXHUwMDNlc2NoZWRfY2xhc3MgIT0gXHUwMDI2ZXh0X3NjaGVkX2NsYXNzKSkge1xuLVx0XHRXQVJOX09OX09OQ0Uoc2N4X2VuYWJsZV9zdGF0ZSgpID09IFNDWF9FTkFCTEVEKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjeF9lbmFibGVfc3RhdGUoKSA9PSBTQ1hfRU5BQkxFRCk7XG4gXHRcdGtlZXBfcHJldiA9IGZhbHNlO1xuIFx0fVxuIFxuQEAgLTMzMzIsNyArMzMzMiw3IEBAIHN0YXRpYyBpbnQgc2VsZWN0X3Rhc2tfcnFfc2N4KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHByZXZfY3B1LCBpbnQgd2FrZV9mbGFnXG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqKmRkc3BfdGFza3A7XG4gXG4gXHRcdGRkc3BfdGFza3AgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGlyZWN0X2Rpc3BhdGNoX3Rhc2spO1xuLVx0XHRXQVJOX09OX09OQ0UoKmRkc3BfdGFza3ApO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoKmRkc3BfdGFza3ApO1xuIFx0XHQqZGRzcF90YXNrcCA9IHA7XG4gXG4gXHRcdHRoaXNfcnEoKS1cdTAwM2VzY3guaW5fc2VsZWN0X2NwdSA9IHRydWU7XG5AQCAtMzYyMCw3ICszNjIwLDcgQEAgc3RhdGljIHZvaWQgX19zY3hfZW5hYmxlX3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHQgKiB0cmFuc2l0aW9ucyBhcmUgY29uc2lzdGVudCwgdGhlIGZsYWcgc2hvdWxkIGFsd2F5cyBiZSBjbGVhclxuIFx0ICogaGVyZS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfVEFTS19JTl9DVVNUT0RZKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7XG4gXG4gXHQvKlxuIFx0ICogU2V0IHRoZSB3ZWlnaHQgYmVmb3JlIGNhbGxpbmcgb3BzLmVuYWJsZSgpIHNvIHRoYXQgdGhlIHNjaGVkdWxlclxuQEAgLTM2NTEsNyArMzY1MSw3IEBAIHN0YXRpYyB2b2lkIHNjeF9kaXNhYmxlX3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHRzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xuLVx0V0FSTl9PTl9PTkNFKHNjeF9nZXRfdGFza19zdGF0ZShwKSAhPSBTQ1hfVEFTS19FTkFCTEVEKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChzY3hfZ2V0X3Rhc2tfc3RhdGUocCkgIT0gU0NYX1RBU0tfRU5BQkxFRCk7XG4gXG4gXHRjbGVhcl9kaXJlY3RfZGlzcGF0Y2gocCk7XG4gXG5AQCAtMzY2NCw3ICszNjY0LDcgQEAgc3RhdGljIHZvaWQgc2N4X2Rpc2FibGVfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdCAqIHRyYW5zaXRpb25zIGFyZSBjb25zaXN0ZW50LCB0aGUgZmxhZyBzaG91bGQgYWx3YXlzIGJlIGNsZWFyXG4gXHQgKiBoZXJlLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0lOX0NVU1RPRFkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfVEFTS19JTl9DVVNUT0RZKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19zY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcbkBAIC0zNjg5LDcgKzM2ODksNyBAQCBzdGF0aWMgdm9pZCBfX3NjeF9kaXNhYmxlX2FuZF9leGl0X3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxuIFx0XHRzY3hfZGlzYWJsZV90YXNrKHNjaCwgcCk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0V0FSTl9PTl9PTkNFKHRydWUpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQodHJ1ZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC0zNzI2LDcgKzM3MjYsNyBAQCBzdGF0aWMgdm9pZCBzY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcbiBcdCAqIHBhdGgsIHNvIGl0J3MgYWx3YXlzIGNsZWFyIHdoZW4gQHAgYXJyaXZlcyBoZXJlIGluICVTQ1hfVEFTS19OT05FLlxuIFx0ICovXG4gXHRpZiAocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1NVQl9JTklUKSB7XG4tXHRcdGlmICghV0FSTl9PTl9PTkNFKCFzY3hfZW5hYmxpbmdfc3ViX3NjaGVkKSlcbitcdFx0aWYgKCFXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNjeF9lbmFibGluZ19zdWJfc2NoZWQpKVxuIFx0XHRcdHNjeF9zdWJfaW5pdF9jYW5jZWxfdGFzayhzY3hfZW5hYmxpbmdfc3ViX3NjaGVkLCBwKTtcbiBcdFx0cC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2PSB+U0NYX1RBU0tfU1VCX0lOSVQ7XG4gXHR9XG5AQCAtMzgxOCw3ICszODE4LDcgQEAgdm9pZCBzY3hfY2FuY2VsX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0XHRzdHJ1Y3QgcnFfZmxhZ3MgcmY7XG4gXG4gXHRcdHJxID0gdGFza19ycV9sb2NrKHAsIFx1MDAyNnJmKTtcbi1cdFx0V0FSTl9PTl9PTkNFKHNjeF9nZXRfdGFza19zdGF0ZShwKSBcdTAwM2U9IFNDWF9UQVNLX1JFQURZKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjeF9nZXRfdGFza19zdGF0ZShwKSBcdTAwM2U9IFNDWF9UQVNLX1JFQURZKTtcbiBcdFx0c2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzY3hfdGFza19zY2hlZChwKSwgcCk7XG4gXHRcdHRhc2tfcnFfdW5sb2NrKHJxLCBwLCBcdTAwMjZyZik7XG4gXHR9XG5AQCAtMzk4Niw3ICszOTg2LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19kZHNwX2RlZmVycmVkX2xvY2FscyhzdHJ1Y3QgcnEgKnJxKVxuIFx0XHRjbGVhcl9kaXJlY3RfZGlzcGF0Y2gocCk7XG4gXG4gXHRcdGRzcSA9IGZpbmRfZHNxX2Zvcl9kaXNwYXRjaChzY2gsIHJxLCBkc3FfaWQsIHRhc2tfY3B1KHApKTtcbi1cdFx0aWYgKCFXQVJOX09OX09OQ0UoZHNxLVx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKVxuK1x0XHRpZiAoIVdBUk5fT05fT05DRV9ERUZFUlJFRChkc3EtXHUwMDNlaWQgIT0gU0NYX0RTUV9MT0NBTCkpXG4gXHRcdFx0ZGlzcGF0Y2hfdG9fbG9jYWxfZHNxKHNjaCwgcnEsIGRzcSwgcCwgZW5xX2ZsYWdzKTtcbiBcdH1cbiB9XG5AQCAtNDA0MSw3ICs0MDQxLDcgQEAgc3RhdGljIHUzMiByZWVucV9sb2NhbChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsIHU2NCByZWVucV9mbGFncylcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRShyZWVucV9mbGFncyBcdTAwMjYgX19TQ1hfUkVFTlFfVFNSX01BU0spKVxuK1x0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChyZWVucV9mbGFncyBcdTAwMjYgX19TQ1hfUkVFTlFfVFNSX01BU0spKVxuIFx0XHRyZWVucV9mbGFncyBcdTAwMjY9IH5fX1NDWF9SRUVOUV9UU1JfTUFTSztcbiBcdGlmIChycV9pc19vcGVuKHJxLCAwKSlcbiBcdFx0cmVlbnFfZmxhZ3MgfD0gU0NYX1JFRU5RX1RTUl9SUV9PUEVOO1xuQEAgLTQwNzgsNyArNDA3OCw3IEBAIHN0YXRpYyB1MzIgcmVlbnFfbG9jYWwoc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgcnEgKnJxLCB1NjQgcmVlbnFfZmxhZ3MpXG4gXG4gXHRcdGRpc3BhdGNoX2RlcXVldWUocnEsIHApO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSykpXG4rXHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLKSlcbiBcdFx0XHRwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjY9IH5TQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSztcbiBcdFx0cC1cdTAwM2VzY3guZmxhZ3MgfD0gcmVhc29uO1xuIFxuQEAgLTQxOTksNyArNDE5OSw3IEBAIHN0YXRpYyB2b2lkIHJlZW5xX3VzZXIoc3RydWN0IHJxICpycSwgc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EsIHU2NCByZWVucV9mbGFnXG4gXHRcdGRpc3BhdGNoX2RlcXVldWVfbG9ja2VkKHAsIGRzcSk7XG4gXHRcdHJhd19zcGluX3VubG9jayhcdTAwMjZkc3EtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGlmIChXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfUkVFTlFfUkVBU09OX01BU0spKVxuIFx0XHRcdHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNj0gflNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLO1xuIFx0XHRwLVx1MDAzZXNjeC5mbGFncyB8PSByZWFzb247XG4gXG5AQCAtNDM2MCw3ICs0MzYwLDcgQEAgaW50IHNjeF9jZ3JvdXBfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXG4gXHRcdHN0cnVjdCBjZ3JvdXAgKmZyb20gPSB0Z19jZ3JwKHRhc2tfZ3JvdXAocCkpO1xuIFx0XHRzdHJ1Y3QgY2dyb3VwICp0byA9IHRnX2NncnAoY3NzX3RnKGNzcykpO1xuIFxuLVx0XHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guY2dycF9tb3ZpbmdfZnJvbSk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5jZ3JwX21vdmluZ19mcm9tKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogc2NoZWRfbW92ZV90YXNrKCkgb21pdHMgaWRlbnRpdHkgbWlncmF0aW9ucy4gTGV0J3MgbWF0Y2ggdGhlXG5AQCAtNDYxNyw3ICs0NjE3LDcgQEAgc3RhdGljIHZvaWQgZXhpdF9kc3Eoc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EpXG4gXHRcdCAqIFRoZXJlIG11c3QgaGF2ZSBiZWVuIGEgUkNVIGdyYWNlIHBlcmlvZCBzaW5jZSB0aGUgbGFzdFxuIFx0XHQgKiBpbnNlcnRpb24gYW5kIEBkc3Egc2hvdWxkIGJlIG9mZiB0aGUgZGVmZXJyZWQgbGlzdCBieSBub3cuXG4gXHRcdCAqL1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNmRydS1cdTAwM2Vub2RlKSkpIHtcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZkcnUtXHUwMDNlbm9kZSkpKSB7XG4gXHRcdFx0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKFx1MDAyNnJxLVx1MDAzZXNjeC5kZWZlcnJlZF9yZWVucV9sb2NrKTtcbiBcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRydS1cdTAwM2Vub2RlKTtcbiBcdFx0fVxuQEAgLTQ3NDUsNyArNDc0NSw3IEBAIHN0YXRpYyBpbnQgc2N4X2Nncm91cF9pbml0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0dGctXHUwMDNlc2N4LmZsYWdzIHw9IFNDWF9UR19JTklURUQ7XG4gXHR9XG4gXG4tXHRXQVJOX09OX09OQ0Uoc2N4X2Nncm91cF9lbmFibGVkKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChzY3hfY2dyb3VwX2VuYWJsZWQpO1xuIFx0c2N4X2Nncm91cF9lbmFibGVkID0gdHJ1ZTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTQ4NDgsNyArNDg0OCw3IEBAIHN0YXRpYyB2b2lkIHNjeF9zY2hlZF9mcmVlX3JjdV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0ICogcGVyaW9kLiBBcyB0aGF0IGJsb2NrcyBuZXcgZGVmZXJyYWxzLCBhbGxcbiBcdFx0ICogZGVmZXJyZWRfcmVlbnFfbG9jYWxfbm9kZSdzIG11c3QgYmUgb2ZmLWxpc3QgYnkgbm93LlxuIFx0XHQgKi9cbi1cdFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnBjcHUtXHUwMDNlZGVmZXJyZWRfcmVlbnFfbG9jYWwubm9kZSkpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXHUwMDI2cGNwdS1cdTAwM2VkZWZlcnJlZF9yZWVucV9sb2NhbC5ub2RlKSk7XG4gXG4gXHRcdGV4aXRfZHNxKGJ5cGFzc19kc3Eoc2NoLCBjcHUpKTtcbiBcdH1cbkBAIC01MzI0LDcgKzUzMjQsNyBAQCBzdGF0aWMgYm9vbCBpbmNfYnlwYXNzX2RlcHRoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNjeF9ieXBhc3NfbG9jayk7XG4gXG4tXHRXQVJOX09OX09OQ0Uoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCBcdTAwM2MgMCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCBcdTAwM2MgMCk7XG4gXHRXUklURV9PTkNFKHNjaC1cdTAwM2VieXBhc3NfZGVwdGgsIHNjaC1cdTAwM2VieXBhc3NfZGVwdGggKyAxKTtcbiBcdGlmIChzY2gtXHUwMDNlYnlwYXNzX2RlcHRoICE9IDEpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC01MzM5LDcgKzUzMzksNyBAQCBzdGF0aWMgYm9vbCBkZWNfYnlwYXNzX2RlcHRoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNjeF9ieXBhc3NfbG9jayk7XG4gXG4tXHRXQVJOX09OX09OQ0Uoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCBcdTAwM2MgMSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCBcdTAwM2MgMSk7XG4gXHRXUklURV9PTkNFKHNjaC1cdTAwM2VieXBhc3NfZGVwdGgsIHNjaC1cdTAwM2VieXBhc3NfZGVwdGggLSAxKTtcbiBcdGlmIChzY2gtXHUwMDNlYnlwYXNzX2RlcHRoICE9IDApXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC01MzYwLDcgKzUzNjAsNyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfYnlwYXNzX2RzcChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4gXHQgKiBAc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCB0cmFuc2l0aW9uaW5nIGZyb20gMCB0byAxIHRyaWdnZXJzIGVuYWJsaW5nLlxuIFx0ICogU2hvdWxkbid0IHN0YWdnZXIuXG4gXHQgKi9cbi1cdGlmIChXQVJOX09OX09OQ0UodGVzdF9hbmRfc2V0X2JpdCgwLCBcdTAwMjZzY2gtXHUwMDNlYnlwYXNzX2RzcF9jbGFpbSkpKVxuK1x0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCh0ZXN0X2FuZF9zZXRfYml0KDAsIFx1MDAyNnNjaC1cdTAwM2VieXBhc3NfZHNwX2NsYWltKSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qXG5AQCAtNTM4MCwxMSArNTM4MCwxMSBAQCBzdGF0aWMgdm9pZCBlbmFibGVfYnlwYXNzX2RzcChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4gXHQgKiBCdW1wIGVuYWJsZSBkZXB0aCBvbiBib3RoIEBzY2ggYW5kIGJ5cGFzcyBkaXNwYXRjaCBob3N0LlxuIFx0ICovXG4gXHRyZXQgPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZzY2gtXHUwMDNlYnlwYXNzX2RzcF9lbmFibGVfZGVwdGgpO1xuLVx0V0FSTl9PTl9PTkNFKHJldCBcdTAwM2M9IDApO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJldCBcdTAwM2M9IDApO1xuIFxuIFx0aWYgKGhvc3QgIT0gc2NoKSB7XG4gXHRcdHJldCA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmhvc3QtXHUwMDNlYnlwYXNzX2RzcF9lbmFibGVfZGVwdGgpO1xuLVx0XHRXQVJOX09OX09OQ0UocmV0IFx1MDAzYz0gMCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQgXHUwMDNjPSAwKTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtNTQwNSwxMSArNTQwNSwxMSBAQCBzdGF0aWMgdm9pZCBkaXNhYmxlX2J5cGFzc19kc3Aoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyZXQgPSBhdG9taWNfZGVjX3JldHVybihcdTAwMjZzY2gtXHUwMDNlYnlwYXNzX2RzcF9lbmFibGVfZGVwdGgpO1xuLVx0V0FSTl9PTl9PTkNFKHJldCBcdTAwM2MgMCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocmV0IFx1MDAzYyAwKTtcbiBcbiBcdGlmIChzY3hfcGFyZW50KHNjaCkpIHtcbiBcdFx0cmV0ID0gYXRvbWljX2RlY19yZXR1cm4oXHUwMDI2c2N4X3BhcmVudChzY2gpLVx1MDAzZWJ5cGFzc19kc3BfZW5hYmxlX2RlcHRoKTtcbi1cdFx0V0FSTl9PTl9PTkNFKHJldCBcdTAwM2MgMCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQgXHUwMDNjIDApO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuaW5kZXggM2ViZWMxODZmOTgyMzYuLjEyMTNlNzc2NjVmZTkzIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuY1xuKysrIGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuQEAgLTQwNCw3ICs0MDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWxfbGVhZl9jZnNfcnEoc3RydWN0IGNmc19ycSAqY2ZzX3JxKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfbGlzdF9sZWFmX2Nmc19ycShzdHJ1Y3QgcnEgKnJxKVxuIHtcbi1cdFdBUk5fT05fT05DRShycS1cdTAwM2V0bXBfYWxvbmVfYnJhbmNoICE9IFx1MDAyNnJxLVx1MDAzZWxlYWZfY2ZzX3JxX2xpc3QpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZXRtcF9hbG9uZV9icmFuY2ggIT0gXHUwMDI2cnEtXHUwMDNlbGVhZl9jZnNfcnFfbGlzdCk7XG4gfVxuIFxuIC8qIEl0ZXJhdGUgdGhyb3VnaCBhbGwgbGVhZiBjZnNfcnEncyBvbiBhIHJ1bnF1ZXVlICovXG5AQCAtNjg5LDcgKzY4OSw3IEBAIF9fc3VtX3dfdnJ1bnRpbWVfYWRkKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpXG4gXHRzNjQgd192cnVudGltZSwga2V5ID0gZW50aXR5X2tleShjZnNfcnEsIHNlKTtcbiBcbiBcdHdfdnJ1bnRpbWUgPSBrZXkgKiB3ZWlnaHQ7XG4tXHRXQVJOX09OX09OQ0UoKHdfdnJ1bnRpbWUgXHUwMDNlXHUwMDNlIDYzKSAhPSAod192cnVudGltZSBcdTAwM2VcdTAwM2UgNjIpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgod192cnVudGltZSBcdTAwM2VcdTAwM2UgNjMpICE9ICh3X3ZydW50aW1lIFx1MDAzZVx1MDAzZSA2MikpO1xuIFxuIFx0Y2ZzX3JxLVx1MDAzZXN1bV93X3ZydW50aW1lICs9IHdfdnJ1bnRpbWU7XG4gXHRjZnNfcnEtXHUwMDNlc3VtX3dlaWdodCArPSB3ZWlnaHQ7XG5AQCAtODYxLDcgKzg2MSw3IEBAIGJvb2wgdXBkYXRlX2VudGl0eV9sYWcoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcbiBcdHU2NCBhdnJ1bnRpbWUgPSBhdmdfdnJ1bnRpbWUoY2ZzX3JxKTtcbiBcdHM2NCB2bGFnID0gZW50aXR5X2xhZyhjZnNfcnEsIHNlLCBhdnJ1bnRpbWUpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCFzZS1cdTAwM2Vvbl9ycSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLVx1MDAzZW9uX3JxKTtcbiBcbiBcdGlmIChzZS1cdTAwM2VzY2hlZF9kZWxheWVkKSB7XG4gXHRcdC8qIHByZXZpb3VzIHZsYWcgXHUwMDNjIDAgb3RoZXJ3aXNlIHNlIHdvdWxkIG5vdCBiZSBkZWxheWVkICovXG5AQCAtMTE1Myw3ICsxMTUzLDcgQEAgc3RhdGljIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnBpY2tfZWV2ZGYoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBib29sIHByb3RlY3QpXG4gXHRpZiAoc2NoZWRfZmVhdChQSUNLX0JVRERZKSBcdTAwMjZcdTAwMjYgcHJvdGVjdCBcdTAwMjZcdTAwMjZcbiBcdCAgICBjZnNfcnEtXHUwMDNlbmV4dCBcdTAwMjZcdTAwMjYgZW50aXR5X2VsaWdpYmxlKGNmc19ycSwgY2ZzX3JxLVx1MDAzZW5leHQpKSB7XG4gXHRcdC8qIC1cdTAwM2VuZXh0IHdpbGwgbmV2ZXIgYmUgZGVsYXllZCAqL1xuLVx0XHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZW5leHQtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjZnNfcnEtXHUwMDNlbmV4dC1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiBcdFx0cmV0dXJuIGNmc19ycS1cdTAwM2VuZXh0O1xuIFx0fVxuIFxuQEAgLTQzMDIsOSArNDMwMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2FkX2F2Z19pc19kZWNheWVkKHN0cnVjdCBzY2hlZF9hdmcgKnNhKVxuIFx0ICogTWFrZSBzdXJlIHRoYXQgcm91bmRpbmcgYW5kL29yIHByb3BhZ2F0aW9uIG9mIFBFTFQgdmFsdWVzIG5ldmVyXG4gXHQgKiBicmVhayB0aGlzLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0Uoc2EtXHUwMDNlbG9hZF9hdmcgfHxcbi1cdFx0ICAgICAgc2EtXHUwMDNldXRpbF9hdmcgfHxcbi1cdFx0ICAgICAgc2EtXHUwMDNlcnVubmFibGVfYXZnKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChzYS1cdTAwM2Vsb2FkX2F2ZyB8fFxuK1x0XHRcdCAgICAgIHNhLVx1MDAzZXV0aWxfYXZnIHx8XG4rXHRcdFx0ICAgICAgc2EtXHUwMDNlcnVubmFibGVfYXZnKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC01NDYwLDcgKzU0NjAsNyBAQCBwbGFjZV9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxuIFxuIFx0XHR3ZWlnaHQgPSBhdmdfdnJ1bnRpbWVfd2VpZ2h0KGNmc19ycSwgc2UtXHUwMDNlbG9hZC53ZWlnaHQpO1xuIFx0XHRsYWcgKj0gbG9hZCArIHdlaWdodDtcbi1cdFx0aWYgKFdBUk5fT05fT05DRSghbG9hZCkpXG4rXHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxvYWQpKVxuIFx0XHRcdGxvYWQgPSAxO1xuIFx0XHRsYWcgPSBkaXY2NF9sb25nKGxhZywgbG9hZCk7XG4gXG5AQCAtNTY1Myw3ICs1NjUzLDcgQEAgZGVxdWV1ZV9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxuIFx0Y2xlYXJfYnVkZGllcyhjZnNfcnEsIHNlKTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgREVRVUVVRV9ERUxBWUVEKSB7XG4tXHRcdFdBUk5fT05fT05DRSghc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRib29sIGRlbGF5ID0gc2xlZXA7XG4gXHRcdC8qXG5AQCAtNTY2Myw3ICs1NjYzLDcgQEAgZGVxdWV1ZV9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IChERVFVRVVFX1NQRUNJQUwgfCBERVFVRVVFX1RIUk9UVExFKSlcbiBcdFx0XHRkZWxheSA9IGZhbHNlO1xuIFxuLVx0XHRXQVJOX09OX09OQ0UoZGVsYXkgXHUwMDI2XHUwMDI2IHNlLVx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGVsYXkgXHUwMDI2XHUwMDI2IHNlLVx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xuIFxuIFx0XHRpZiAoc2NoZWRfZmVhdChERUxBWV9ERVFVRVVFKSBcdTAwMjZcdTAwMjYgZGVsYXkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhZW50aXR5X2VsaWdpYmxlKGNmc19ycSwgc2UpKSB7XG5AQCAtNTc0Nyw3ICs1NzQ3LDcgQEAgc2V0X25leHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGJvb2wgZmlyc3QpXG4gXHR9XG4gXG4gXHR1cGRhdGVfc3RhdHNfY3Vycl9zdGFydChjZnNfcnEsIHNlKTtcbi1cdFdBUk5fT05fT05DRShjZnNfcnEtXHUwMDNlY3Vycik7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoY2ZzX3JxLVx1MDAzZWN1cnIpO1xuIFx0Y2ZzX3JxLVx1MDAzZWN1cnIgPSBzZTtcbiBcbiBcdC8qXG5AQCAtNTgxNCw3ICs1ODE0LDcgQEAgc3RhdGljIHZvaWQgcHV0X3ByZXZfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqcHJldilcbiBcdFx0LyogaW4gIW9uX3JxIGNhc2UsIHVwZGF0ZSBvY2N1cnJlZCBhdCBkZXF1ZXVlICovXG4gXHRcdHVwZGF0ZV9sb2FkX2F2ZyhjZnNfcnEsIHByZXYsIDApO1xuIFx0fVxuLVx0V0FSTl9PTl9PTkNFKGNmc19ycS1cdTAwM2VjdXJyICE9IHByZXYpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cdTAwM2VjdXJyICE9IHByZXYpO1xuIFx0Y2ZzX3JxLVx1MDAzZWN1cnIgPSBOVUxMO1xuIH1cbiBcbkBAIC02MDE1LDcgKzYwMTUsNyBAQCBzdGF0aWMgdm9pZCB0aHJvdHRsZV9jZnNfcnFfd29yayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqd29yaylcbiBcdHN0cnVjdCBjZnNfcnEgKmNmc19ycTtcbiBcdHN0cnVjdCBycSAqcnE7XG4gXG4tXHRXQVJOX09OX09OQ0UocCAhPSBjdXJyZW50KTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwICE9IGN1cnJlbnQpO1xuIFx0cC1cdTAwM2VzY2hlZF90aHJvdHRsZV93b3JrLm5leHQgPSBcdTAwMjZwLVx1MDAzZXNjaGVkX3Rocm90dGxlX3dvcms7XG4gXG4gXHQvKlxuQEAgLTYwNDEsNyArNjA0MSw3IEBAIHN0YXRpYyB2b2lkIHRocm90dGxlX2Nmc19ycV93b3JrKHN0cnVjdCBjYWxsYmFja19oZWFkICp3b3JrKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0cnEgPSBzY29wZS5ycTtcbiBcdFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbi1cdFx0V0FSTl9PTl9PTkNFKHAtXHUwMDNldGhyb3R0bGVkIHx8ICFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2V0aHJvdHRsZWQgfHwgIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2V0aHJvdHRsZV9ub2RlKSk7XG4gXHRcdGRlcXVldWVfdGFza19mYWlyKHJxLCBwLCBERVFVRVVFX1NMRUVQIHwgREVRVUVVRV9USFJPVFRMRSk7XG4gXHRcdGxpc3RfYWRkKFx1MDAyNnAtXHUwMDNldGhyb3R0bGVfbm9kZSwgXHUwMDI2Y2ZzX3JxLVx1MDAzZXRocm90dGxlZF9saW1ib19saXN0KTtcbiBcdFx0LypcbkBAIC02MDcyLDcgKzYwNzIsNyBAQCB2b2lkIGluaXRfY2ZzX3Rocm90dGxlX3dvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHN0YXRpYyB2b2lkIGRldGFjaF90YXNrX2Nmc19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xuIHN0YXRpYyB2b2lkIGRlcXVldWVfdGhyb3R0bGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2Uub25fcnEpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2Uub25fcnEpO1xuIFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZXRocm90dGxlX25vZGUpO1xuIFxuIFx0LyogdGFzayBibG9ja2VkIGFmdGVyIHRocm90dGxlZCAqL1xuQEAgLTYwOTQsNyArNjA5NCw3IEBAIHN0YXRpYyBib29sIGVucXVldWVfdGhyb3R0bGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0c3RydWN0IGNmc19ycSAqY2ZzX3JxID0gY2ZzX3JxX29mKFx1MDAyNnAtXHUwMDNlc2UpO1xuIFxuIFx0LyogQHAgc2hvdWxkIGhhdmUgZ29uZSB0aHJvdWdoIGRlcXVldWVfdGhyb3R0bGVkX3Rhc2soKSBmaXJzdCAqL1xuLVx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xuIFxuIFx0LypcbiBcdCAqIElmIHRoZSB0aHJvdHRsZWQgdGFzayBAcCBpcyBlbnF1ZXVlZCB0byBhIHRocm90dGxlZCBjZnNfcnEsXG5AQCAtNjE2Miw3ICs2MTYyLDcgQEAgc3RhdGljIGludCB0Z191bnRocm90dGxlX3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgdm9pZCAqZGF0YSlcbiBcbiBcdFx0Y2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9ja19zZWxmID0gMDtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRSgoczY0KWRlbHRhIFx1MDAzYyAwKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCgoczY0KWRlbHRhIFx1MDAzYyAwKSlcbiBcdFx0XHRkZWx0YSA9IDA7XG4gXG4gXHRcdGNmc19ycS1cdTAwM2V0aHJvdHRsZWRfY2xvY2tfc2VsZl90aW1lICs9IGRlbHRhO1xuQEAgLTYyMzEsOCArNjIzMSw4IEBAIHN0YXRpYyBpbnQgdGdfdGhyb3R0bGVfZG93bihzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpXG4gXHRcdGNmc19ycS1cdTAwM2VwZWx0X2Nsb2NrX3Rocm90dGxlZCA9IDE7XG4gXHR9XG4gXG4tXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9ja19zZWxmKTtcbi1cdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZjZnNfcnEtXHUwMDNldGhyb3R0bGVkX2xpbWJvX2xpc3QpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjZnNfcnEtXHUwMDNldGhyb3R0bGVkX2Nsb2NrX3NlbGYpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFx1MDAyNmNmc19ycS1cdTAwM2V0aHJvdHRsZWRfbGltYm9fbGlzdCkpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTYyNzMsNyArNjI3Myw3IEBAIHN0YXRpYyBib29sIHRocm90dGxlX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXG4gXHQgKiB0aHJvdHRsZWQtbGlzdC4gIHJxLVx1MDAzZWxvY2sgcHJvdGVjdHMgY29tcGxldGlvbi5cbiBcdCAqL1xuIFx0Y2ZzX3JxLVx1MDAzZXRocm90dGxlZCA9IDE7XG4tXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9jayk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoY2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9jayk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtNjM4MCw3ICs2MzgwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW50aHJvdHRsZV9jZnNfcnFfYXN5bmMoc3RydWN0IGNmc19ycSAqY2ZzX3JxKVxuIFx0fVxuIFxuIFx0LyogQWxyZWFkeSBlbnF1ZXVlZCAqL1xuLVx0aWYgKFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZjZnNfcnEtXHUwMDNldGhyb3R0bGVkX2NzZF9saXN0KSkpXG4rXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFx1MDAyNmNmc19ycS1cdTAwM2V0aHJvdHRsZWRfY3NkX2xpc3QpKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Zmlyc3QgPSBsaXN0X2VtcHR5KFx1MDAyNnJxLVx1MDAzZWNmc2JfY3NkX2xpc3QpO1xuQEAgLTYzOTMsNyArNjM5Myw3IEBAIHN0YXRpYyB2b2lkIHVudGhyb3R0bGVfY2ZzX3JxX2FzeW5jKHN0cnVjdCBjZnNfcnEgKmNmc19ycSlcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxX29mKGNmc19ycSkpO1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRSghY2ZzX3JxX3Rocm90dGxlZChjZnNfcnEpIHx8XG4rXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFjZnNfcnFfdGhyb3R0bGVkKGNmc19ycSkgfHxcbiBcdCAgICBjZnNfcnEtXHUwMDNlcnVudGltZV9yZW1haW5pbmcgXHUwMDNjPSAwKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTY0MjksNyArNjQyOSw3IEBAIHN0YXRpYyBib29sIGRpc3RyaWJ1dGVfY2ZzX3J1bnRpbWUoc3RydWN0IGNmc19iYW5kd2lkdGggKmNmc19iKVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0LyogQnkgdGhlIGFib3ZlIGNoZWNrcywgdGhpcyBzaG91bGQgbmV2ZXIgYmUgdHJ1ZSAqL1xuLVx0XHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZXJ1bnRpbWVfcmVtYWluaW5nIFx1MDAzZSAwKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cdTAwM2VydW50aW1lX3JlbWFpbmluZyBcdTAwM2UgMCk7XG4gXG4gXHRcdHJhd19zcGluX2xvY2soXHUwMDI2Y2ZzX2ItXHUwMDNlbG9jayk7XG4gXHRcdHJ1bnRpbWUgPSAtY2ZzX3JxLVx1MDAzZXJ1bnRpbWVfcmVtYWluaW5nICsgMTtcbkBAIC02NDUwLDcgKzY0NTAsNyBAQCBzdGF0aWMgYm9vbCBkaXN0cmlidXRlX2Nmc19ydW50aW1lKHN0cnVjdCBjZnNfYmFuZHdpZHRoICpjZnNfYilcbiBcdFx0XHRcdCAqIFdlIGN1cnJlbnRseSBvbmx5IGV4cGVjdCB0byBiZSB1bnRocm90dGxpbmdcbiBcdFx0XHRcdCAqIGEgc2luZ2xlIGNmc19ycSBsb2NhbGx5LlxuIFx0XHRcdFx0ICovXG4tXHRcdFx0XHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bG9jYWxfdW50aHJvdHRsZSkpO1xuK1x0XHRcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFx1MDAyNmxvY2FsX3VudGhyb3R0bGUpKTtcbiBcdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jc2RfbGlzdCxcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2bG9jYWxfdW50aHJvdHRsZSk7XG4gXHRcdFx0fVxuQEAgLTY0NzUsNyArNjQ3NSw3IEBAIHN0YXRpYyBib29sIGRpc3RyaWJ1dGVfY2ZzX3J1bnRpbWUoc3RydWN0IGNmc19iYW5kd2lkdGggKmNmc19iKVxuIFxuIFx0XHRycV91bmxvY2tfaXJxcmVzdG9yZShycSwgXHUwMDI2cmYpO1xuIFx0fVxuLVx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNmxvY2FsX3VudGhyb3R0bGUpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZsb2NhbF91bnRocm90dGxlKSk7XG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbkBAIC03MDQ4LDcgKzcwNDgsNyBAQCBzdGF0aWMgdm9pZCBocnRpY2tfc3RhcnRfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHR1NjQgdmRlbHRhO1xuIFx0dTY0IGRlbHRhO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHRhc2tfcnEocCkgIT0gcnEpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnEocCkgIT0gcnEpO1xuIFxuIFx0aWYgKHJxLVx1MDAzZWNmcy5oX25yX3F1ZXVlZCBcdTAwM2M9IDEpXG4gXHRcdHJldHVybjtcbkBAIC03MTcxLDggKzcxNzEsOCBAQCByZXF1ZXVlX2RlbGF5ZWRfZW50aXR5KHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKVxuIFx0ICogQmVjYXVzZSBhIGRlbGF5ZWQgZW50aXR5IGlzIG9uZSB0aGF0IGlzIHN0aWxsIG9uXG4gXHQgKiB0aGUgcnVucXVldWUgY29tcGV0aW5nIHVudGlsIGVsZWdpYmlsaXR5LlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UoIXNlLVx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xuLVx0V0FSTl9PTl9PTkNFKCFzZS1cdTAwM2Vvbl9ycSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLVx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzZS1cdTAwM2Vvbl9ycSk7XG4gXG4gXHRpZiAodXBkYXRlX2VudGl0eV9sYWcoY2ZzX3JxLCBzZSkpIHtcbiBcdFx0Y2ZzX3JxLVx1MDAzZW5yX3F1ZXVlZC0tO1xuQEAgLTc0MDksOCArNzQwOSw4IEBAIHN0YXRpYyBpbnQgZGVxdWV1ZV9lbnRpdGllcyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxuIFx0XHRycS1cdTAwM2VuZXh0X2JhbGFuY2UgPSBqaWZmaWVzO1xuIFxuIFx0aWYgKHAgXHUwMDI2XHUwMDI2IHRhc2tfZGVsYXllZCkge1xuLVx0XHRXQVJOX09OX09OQ0UoIXRhc2tfc2xlZXApO1xuLVx0XHRXQVJOX09OX09OQ0UocC1cdTAwM2Vvbl9ycSAhPSAxKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCF0YXNrX3NsZWVwKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlb25fcnEgIT0gMSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEZpeC11cCB3aGF0IGJsb2NrX3Rhc2soKSBza2lwcGVkLlxuQEAgLTg5NzYsNyArODk3Niw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZmFpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBhZmZpbml0eV9jb250ZXh0XG4gc3RhdGljIHZvaWQgc2V0X25leHRfYnVkZHkoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpXG4ge1xuIFx0Zm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKSB7XG4tXHRcdGlmIChXQVJOX09OX09OQ0UoIXNlLVx1MDAzZW9uX3JxKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghc2UtXHUwMDNlb25fcnEpKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0aWYgKHNlX2lzX2lkbGUoc2UpKVxuIFx0XHRcdHJldHVybjtcbkBAIC05MDIzLDcgKzkwMjMsNyBAQCBwcmVlbXB0X3N5bmMoc3RydWN0IHJxICpycSwgaW50IHdha2VfZmxhZ3MsXG4gXHQgKiBXRl9TWU5DIHdpdGhvdXQgV0ZfVFRXVSBpcyBub3QgZXhwZWN0ZWQgc28gd2FybiBpZiBpdCBoYXBwZW5zIGV2ZW5cbiBcdCAqIHRob3VnaCBpdCBpcyBsaWtlbHkgaGFybWxlc3MuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRSghKHdha2VfZmxhZ3MgXHUwMDI2IFdGX1RUV1UpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKHdha2VfZmxhZ3MgXHUwMDI2IFdGX1RUV1UpKTtcbiBcbiBcdHRocmVzaG9sZCA9IHN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdDtcbiBcdGRlbHRhID0gcnFfY2xvY2tfdGFzayhycSkgLSBzZS1cdTAwM2VleGVjX3N0YXJ0O1xuQEAgLTkwOTUsNyArOTA5NSw3IEBAIHN0YXRpYyB2b2lkIHdha2V1cF9wcmVlbXB0X2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZV9mXG4gXHRcdHJldHVybjtcbiBcbiBcdGZpbmRfbWF0Y2hpbmdfc2UoXHUwMDI2c2UsIFx1MDAyNnBzZSk7XG4tXHRXQVJOX09OX09OQ0UoIXBzZSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXBzZSk7XG4gXG4gXHRjc2VfaXNfaWRsZSA9IHNlX2lzX2lkbGUoc2UpO1xuIFx0cHNlX2lzX2lkbGUgPSBzZV9pc19pZGxlKHBzZSk7XG5AQCAtOTg1Nyw4ICs5ODU3LDggQEAgc3RhdGljIHZvaWQgZGV0YWNoX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpXG4gXHRcdHNjaGVkc3RhdF9pbmMocC1cdTAwM2VzdGF0cy5ucl9mb3JjZWRfbWlncmF0aW9ucyk7XG4gXHR9XG4gXG4tXHRXQVJOX09OKHRhc2tfY3VycmVudChlbnYtXHUwMDNlc3JjX3JxLCBwKSk7XG4tXHRXQVJOX09OKHRhc2tfY3VycmVudF9kb25vcihlbnYtXHUwMDNlc3JjX3JxLCBwKSk7XG4rXHRXQVJOX09OX0RFRkVSUkVEKHRhc2tfY3VycmVudChlbnYtXHUwMDNlc3JjX3JxLCBwKSk7XG4rXHRXQVJOX09OX0RFRkVSUkVEKHRhc2tfY3VycmVudF9kb25vcihlbnYtXHUwMDNlc3JjX3JxLCBwKSk7XG4gXG4gXHRkZWFjdGl2YXRlX3Rhc2soZW52LVx1MDAzZXNyY19ycSwgcCwgREVRVUVVRV9OT0NMT0NLKTtcbiBcdHNldF90YXNrX2NwdShwLCBlbnYtXHUwMDNlZHN0X2NwdSk7XG5AQCAtMTIxNTEsNyArMTIxNTEsNyBAQCBzdGF0aWMgaW50IHNjaGVkX2JhbGFuY2VfcnEoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEsXG4gXHRcdGdvdG8gb3V0X2JhbGFuY2VkO1xuIFx0fVxuIFxuLVx0V0FSTl9PTl9PTkNFKGJ1c2llc3QgPT0gZW52LmRzdF9ycSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoYnVzaWVzdCA9PSBlbnYuZHN0X3JxKTtcbiBcbiBcdHVwZGF0ZV9sYl9pbWJhbGFuY2Vfc3RhdChcdTAwMjZlbnYsIHNkLCBpZGxlKTtcbiBcbkBAIC0xMjQ2MSw3ICsxMjQ2MSw3IEBAIHN0YXRpYyBpbnQgYWN0aXZlX2xvYWRfYmFsYW5jZV9jcHVfc3RvcCh2b2lkICpkYXRhKVxuIFx0ICogd2UgbmVlZCB0byBmaXggaXQuIE9yaWdpbmFsbHkgcmVwb3J0ZWQgYnlcbiBcdCAqIEJqb3JuIEhlbGdhYXMgb24gYSAxMjgtQ1BVIHNldHVwLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UoYnVzaWVzdF9ycSA9PSB0YXJnZXRfcnEpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGJ1c2llc3RfcnEgPT0gdGFyZ2V0X3JxKTtcbiBcbiBcdC8qIFNlYXJjaCBmb3IgYW4gc2Qgc3Bhbm5pbmcgdXMgYW5kIHRoZSB0YXJnZXQgQ1BVLiAqL1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuQEAgLTEyODgzLDcgKzEyODgzLDcgQEAgc3RhdGljIHZvaWQgc2V0X2NwdV9zZF9zdGF0ZV9idXN5KGludCBjcHUpXG4gXG4gdm9pZCBub2h6X2JhbGFuY2VfZXhpdF9pZGxlKHN0cnVjdCBycSAqcnEpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHJxICE9IHRoaXNfcnEoKSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEgIT0gdGhpc19ycSgpKTtcbiBcbiBcdGlmIChsaWtlbHkoIXJxLVx1MDAzZW5vaHpfdGlja19zdG9wcGVkKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTEyOTE4LDcgKzEyOTE4LDcgQEAgdm9pZCBub2h6X2JhbGFuY2VfZW50ZXJfaWRsZShpbnQgY3B1KVxuIHtcbiBcdHN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTtcbiBcbi1cdFdBUk5fT05fT05DRShjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiBcbiBcdC8qIElmIHRoaXMgQ1BVIGlzIGdvaW5nIGRvd24sIHRoZW4gbm90aGluZyBuZWVkcyB0byBiZSBkb25lOiAqL1xuIFx0aWYgKCFjcHVfYWN0aXZlKGNwdSkpXG5AQCAtMTMwMDAsNyArMTMwMDAsNyBAQCBzdGF0aWMgdm9pZCBfbm9oel9pZGxlX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gXHRpbnQgYmFsYW5jZV9jcHU7XG4gXHRzdHJ1Y3QgcnEgKnJxO1xuIFxuLVx0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgTk9IWl9LSUNLX01BU0spID09IE5PSFpfQkFMQU5DRV9LSUNLKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgoZmxhZ3MgXHUwMDI2IE5PSFpfS0lDS19NQVNLKSA9PSBOT0haX0JBTEFOQ0VfS0lDSyk7XG4gXG4gXHQvKlxuIFx0ICogV2UgYXNzdW1lIHRoZXJlIHdpbGwgYmUgbm8gaWRsZSBsb2FkIGFmdGVyIHRoaXMgdXBkYXRlIGFuZCBjbGVhclxuQEAgLTEzNjIzLDcgKzEzNjIzLDcgQEAgYm9vbCBjZnNfcHJpb19sZXNzKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqYSwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpiLFxuIFx0c3RydWN0IGNmc19ycSAqY2ZzX3JxYjtcbiBcdHM2NCBkZWx0YTtcbiBcbi1cdFdBUk5fT05fT05DRSh0YXNrX3JxKGIpLVx1MDAzZWNvcmUgIT0gcnEtXHUwMDNlY29yZSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19ycShiKS1cdTAwM2Vjb3JlICE9IHJxLVx1MDAzZWNvcmUpO1xuIFxuICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRFxuIFx0LypcbkBAIC0xMzgzOSw3ICsxMzgzOSw3IEBAIHN0YXRpYyB2b2lkIHN3aXRjaGVkX2Zyb21fZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXG4gc3RhdGljIHZvaWQgc3dpdGNoZWRfdG9fZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2Uuc2NoZWRfZGVsYXllZCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzZS5zY2hlZF9kZWxheWVkKTtcbiBcbiBcdGF0dGFjaF90YXNrX2Nmc19ycShwKTtcbiBcbkBAIC0xMzg3Miw3ICsxMzg3Miw3IEBAIHN0YXRpYyB2b2lkIF9fc2V0X25leHRfdGFza19mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBmaXJzXG4gXHRpZiAoIWZpcnN0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRXQVJOX09OX09OQ0Uoc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4gXG4gXHRpZiAoaHJ0aWNrX2VuYWJsZWRfZmFpcihycSkpXG4gXHRcdGhydGlja19zdGFydF9mYWlyKHJxLCBwKTtcbkBAIC0xNDE0OCw3ICsxNDE0OCw3IEBAIGludCBzY2hlZF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGxvbmcgaWRsZSlcbiBcdFx0cnFfbG9ja19pcnFzYXZlKHJxLCBcdTAwMjZyZik7XG4gXG4gXHRcdGdycF9jZnNfcnEtXHUwMDNlaWRsZSA9IGlkbGU7XG4tXHRcdGlmIChXQVJOX09OX09OQ0Uod2FzX2lkbGUgPT0gY2ZzX3JxX2lzX2lkbGUoZ3JwX2Nmc19ycSkpKVxuK1x0XHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHdhc19pZGxlID09IGNmc19ycV9pc19pZGxlKGdycF9jZnNfcnEpKSlcbiBcdFx0XHRnb3RvIG5leHRfY3B1O1xuIFxuIFx0XHRpZGxlX3Rhc2tfZGVsdGEgPSBncnBfY2ZzX3JxLVx1MDAzZWhfbnJfcXVldWVkIC1cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvcnQuYyBiL2tlcm5lbC9zY2hlZC9ydC5jXG5pbmRleCA0ZWU4ZmFmMDE0NDFhMy4uNTA2ZDBmMWFmYTU4ZjkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvcnQuY1xuKysrIGIva2VybmVsL3NjaGVkL3J0LmNcbkBAIC0xNzAsNyArMTcwLDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9ydF9iYW5kd2lkdGgoc3RydWN0IHJ0X2JhbmR3aWR0aCAqcnRfYilcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSlcbiB7XG4tXHRXQVJOX09OX09OQ0UoIXJ0X2VudGl0eV9pc190YXNrKHJ0X3NlKSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJ0X2VudGl0eV9pc190YXNrKHJ0X3NlKSk7XG4gXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKHJ0X3NlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJ0KTtcbiB9XG5AQCAtMTc4LDEzICsxNzgsMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0X3Rhc2tfb2Yoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpXG4ge1xuIFx0LyogQ2Fubm90IGZvbGQgd2l0aCBub24tQ09ORklHX1JUX0dST1VQX1NDSEVEIHZlcnNpb24sIGxheW91dCAqL1xuLVx0V0FSTl9PTighcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuIFx0cmV0dXJuIHJ0X3JxLVx1MDAzZXJxO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBydF9ycSAqcnRfcnFfb2Zfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpXG4ge1xuLVx0V0FSTl9PTighcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9zZS1cdTAwM2VydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9zZS1cdTAwM2VydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuIFx0cmV0dXJuIHJ0X3NlLVx1MDAzZXJ0X3JxO1xuIH1cbiBcbkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3NlKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKVxuIHtcbiBcdHN0cnVjdCBydF9ycSAqcnRfcnEgPSBydF9zZS1cdTAwM2VydF9ycTtcbiBcbi1cdFdBUk5fT04oIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcnRfcnEtXHUwMDNldGcgIT0gXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcbitcdFdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcnRfcnEtXHUwMDNldGcgIT0gXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcbiBcdHJldHVybiBydF9ycS1cdTAwM2VycTtcbiB9XG4gXG5AQCAtNDkzLDcgKzQ5Myw3IEBAIHR5cGVkZWYgc3RydWN0IHRhc2tfZ3JvdXAgKnJ0X3JxX2l0ZXJfdDtcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX2dyb3VwICpuZXh0X3Rhc2tfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxuIHtcbiBcdGlmICghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpKSB7XG4tXHRcdFdBUk5fT04odGcgIT0gXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcbitcdFx0V0FSTl9PTl9ERUZFUlJFRCh0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbkBAIC03MjMsNyArNzIzLDcgQEAgc3RhdGljIHZvaWQgX19kaXNhYmxlX3J1bnRpbWUoc3RydWN0IHJxICpycSlcbiBcdFx0ICogV2UgY2Fubm90IGJlIGxlZnQgd2FudGluZyAtIHRoYXQgd291bGQgbWVhbiBzb21lIHJ1bnRpbWVcbiBcdFx0ICogbGVha2VkIG91dCBvZiB0aGUgc3lzdGVtLlxuIFx0XHQgKi9cbi1cdFx0V0FSTl9PTl9PTkNFKHdhbnQpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQod2FudCk7XG4gYmFsYW5jZWQ6XG4gXHRcdC8qXG4gXHRcdCAqIERpc2FibGUgYWxsIHRoZSBib3Jyb3cgbG9naWMgYnkgcHJldGVuZGluZyB3ZSBoYXZlIGluZlxuQEAgLTEwOTQsNyArMTA5NCw3IEBAIGRlY19ydF9wcmlvKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvKVxuIFxuIFx0aWYgKHJ0X3JxLVx1MDAzZXJ0X25yX3J1bm5pbmcpIHtcbiBcbi1cdFx0V0FSTl9PTihwcmlvIFx1MDAzYyBwcmV2X3ByaW8pO1xuK1x0XHRXQVJOX09OX0RFRkVSUkVEKHByaW8gXHUwMDNjIHByZXZfcHJpbyk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgbWF5IGhhdmUgYmVlbiBvdXIgaGlnaGVzdCB0YXNrLCBhbmQgdGhlcmVmb3JlXG5AQCAtMTEzMSw3ICsxMTMxLDcgQEAgZGVjX3J0X2dyb3VwKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxuIFx0aWYgKHJ0X3NlX2Jvb3N0ZWQocnRfc2UpKVxuIFx0XHRydF9ycS1cdTAwM2VydF9ucl9ib29zdGVkLS07XG4gXG4tXHRXQVJOX09OKCFydF9ycS1cdTAwM2VydF9ucl9ydW5uaW5nIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2VydF9ucl9ib29zdGVkKTtcbitcdFdBUk5fT05fREVGRVJSRUQoIXJ0X3JxLVx1MDAzZXJ0X25yX3J1bm5pbmcgXHUwMDI2XHUwMDI2IHJ0X3JxLVx1MDAzZXJ0X25yX2Jvb3N0ZWQpO1xuIH1cbiBcbiAjZWxzZSAvKiAhQ09ORklHX1JUX0dST1VQX1NDSEVEOiAqL1xuQEAgLTExNzYsNyArMTE3Niw3IEBAIHZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxuIHtcbiBcdGludCBwcmlvID0gcnRfc2VfcHJpbyhydF9zZSk7XG4gXG4tXHRXQVJOX09OKCFydF9wcmlvKHByaW8pKTtcbitcdFdBUk5fT05fREVGRVJSRUQoIXJ0X3ByaW8ocHJpbykpO1xuIFx0cnRfcnEtXHUwMDNlcnRfbnJfcnVubmluZyArPSBydF9zZV9ucl9ydW5uaW5nKHJ0X3NlKTtcbiBcdHJ0X3JxLVx1MDAzZXJyX25yX3J1bm5pbmcgKz0gcnRfc2VfcnJfbnJfcnVubmluZyhydF9zZSk7XG4gXG5AQCAtMTE4Nyw4ICsxMTg3LDggQEAgdm9pZCBpbmNfcnRfdGFza3Moc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpXG4gc3RhdGljIGlubGluZVxuIHZvaWQgZGVjX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxuIHtcbi1cdFdBUk5fT04oIXJ0X3ByaW8ocnRfc2VfcHJpbyhydF9zZSkpKTtcbi1cdFdBUk5fT04oIXJ0X3JxLVx1MDAzZXJ0X25yX3J1bm5pbmcpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfcHJpbyhydF9zZV9wcmlvKHJ0X3NlKSkpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfcnEtXHUwMDNlcnRfbnJfcnVubmluZyk7XG4gXHRydF9ycS1cdTAwM2VydF9ucl9ydW5uaW5nIC09IHJ0X3NlX25yX3J1bm5pbmcocnRfc2UpO1xuIFx0cnRfcnEtXHUwMDNlcnJfbnJfcnVubmluZyAtPSBydF9zZV9ycl9ucl9ydW5uaW5nKHJ0X3NlKTtcbiBcbkBAIC0xMzQ4LDcgKzEzNDgsNyBAQCBzdGF0aWMgdm9pZCBfX2VucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCB1bnNpZ25lZCBpbnQgZmxhZ1xuIFx0fVxuIFxuIFx0aWYgKG1vdmVfZW50aXR5KGZsYWdzKSkge1xuLVx0XHRXQVJOX09OX09OQ0UocnRfc2UtXHUwMDNlb25fbGlzdCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChydF9zZS1cdTAwM2Vvbl9saXN0KTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBFTlFVRVVFX0hFQUQpXG4gXHRcdFx0bGlzdF9hZGQoXHUwMDI2cnRfc2UtXHUwMDNlcnVuX2xpc3QsIHF1ZXVlKTtcbiBcdFx0ZWxzZVxuQEAgLTEzNjgsNyArMTM2OCw3IEBAIHN0YXRpYyB2b2lkIF9fZGVxdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHVuc2lnbmVkIGludCBmbGFnXG4gXHRzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXkgPSBcdTAwMjZydF9ycS1cdTAwM2VhY3RpdmU7XG4gXG4gXHRpZiAobW92ZV9lbnRpdHkoZmxhZ3MpKSB7XG4tXHRcdFdBUk5fT05fT05DRSghcnRfc2UtXHUwMDNlb25fbGlzdCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghcnRfc2UtXHUwMDNlb25fbGlzdCk7XG4gXHRcdF9fZGVsaXN0X3J0X2VudGl0eShydF9zZSwgYXJyYXkpO1xuIFx0fVxuIFx0cnRfc2UtXHUwMDNlb25fcnEgPSAwO1xuQEAgLTE2ODQsNyArMTY4NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpwaWNrX25leHRfcnRfZW50aXR5KHN0cnVjdCBydF9ycSAqcnRfcnEpXG4gXHRCVUdfT04oaWR4IFx1MDAzZT0gTUFYX1JUX1BSSU8pO1xuIFxuIFx0cXVldWUgPSBhcnJheS1cdTAwM2VxdWV1ZSArIGlkeDtcbi1cdGlmIChXQVJOX09OX09OQ0UobGlzdF9lbXB0eShxdWV1ZSkpKVxuK1x0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChsaXN0X2VtcHR5KHF1ZXVlKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0bmV4dCA9IGxpc3RfZW50cnkocXVldWUtXHUwMDNlbmV4dCwgc3RydWN0IHNjaGVkX3J0X2VudGl0eSwgcnVuX2xpc3QpO1xuIFxuQEAgLTIwMTYsNyArMjAxNiw3IEBAIHN0YXRpYyBpbnQgcHVzaF9ydF90YXNrKHN0cnVjdCBycSAqcnEsIGJvb2wgcHVsbClcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRpZiAoV0FSTl9PTihuZXh0X3Rhc2sgPT0gcnEtXHUwMDNlY3VycikpXG4rXHRpZiAoV0FSTl9PTl9ERUZFUlJFRChuZXh0X3Rhc2sgPT0gcnEtXHUwMDNlY3VycikpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogV2UgbWlnaHQgcmVsZWFzZSBycSBsb2NrICovXG5AQCAtMjMxNiw4ICsyMzE2LDggQEAgc3RhdGljIHZvaWQgcHVsbF9ydF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSlcbiBcdFx0ICogdGhlIHRvLWJlLXNjaGVkdWxlZCB0YXNrP1xuIFx0XHQgKi9cbiBcdFx0aWYgKHAgXHUwMDI2XHUwMDI2IChwLVx1MDAzZXByaW8gXHUwMDNjIHRoaXNfcnEtXHUwMDNlcnQuaGlnaGVzdF9wcmlvLmN1cnIpKSB7XG4tXHRcdFx0V0FSTl9PTihwID09IHNyY19ycS1cdTAwM2VjdXJyKTtcbi1cdFx0XHRXQVJOX09OKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7XG4rXHRcdFx0V0FSTl9PTl9ERUZFUlJFRChwID09IHNyY19ycS1cdTAwM2VjdXJyKTtcbitcdFx0XHRXQVJOX09OX0RFRkVSUkVEKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcCBpcyBoaWdoZXIgaW4gcHJpb3JpdHlcbkBAIC0yNTgzLDcgKzI1ODMsNyBAQCBzdGF0aWMgaW50IHRhc2tfaXNfdGhyb3R0bGVkX3J0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSlcbiBcbiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVEIC8vIFhYWCBtYXliZSBhZGQgdGFza19ydF9ycSgpLCBzZWUgYWxzbyBzY2hlZF9ydF9wZXJpb2RfcnRfcnFcbiBcdHJ0X3JxID0gdGFza19ncm91cChwKS1cdTAwM2VydF9ycVtjcHVdO1xuLVx0V0FSTl9PTighcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuICNlbHNlXG4gXHRydF9ycSA9IFx1MDAyNmNwdV9ycShjcHUpLVx1MDAzZXJ0O1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbmluZGV4IDlmNjNiMTVkMzA5ZDExLi5mNzRmOWNkNDRlMDk4NiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG4rKysgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuQEAgLTE2ODQsNyArMTY4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfaWRsZV9jb3JlKHN0cnVjdCBycSAqcnEpIHsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX29mKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKVxuIHtcbi1cdFdBUk5fT05fT05DRSghZW50aXR5X2lzX3Rhc2soc2UpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZW50aXR5X2lzX3Rhc2soc2UpKTtcbiBcdHJldHVybiBjb250YWluZXJfb2Yoc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgc2UpO1xuIH1cbiBcbkBAIC0xNzY2LDcgKzE3NjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X2Nsb2NrX3VwZGF0ZWQoc3RydWN0IHJxICpycSlcbiBcdCAqIFRoZSBvbmx5IHJlYXNvbiBmb3Igbm90IHNlZWluZyBhIGNsb2NrIHVwZGF0ZSBzaW5jZSB0aGVcbiBcdCAqIGxhc3QgcnFfcGluX2xvY2soKSBpcyBpZiB3ZSdyZSBjdXJyZW50bHkgc2tpcHBpbmcgdXBkYXRlcy5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcdTAwM2MgUlFDRl9BQ1RfU0tJUCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIFx1MDAzYyBSUUNGX0FDVF9TS0lQKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB1NjQgcnFfY2xvY2soc3RydWN0IHJxICpycSlcbkBAIC0xODEzLDcgKzE4MTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnFfY2xvY2tfY2FuY2VsX3NraXB1cGRhdGUoc3RydWN0IHJxICpycSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgcnFfY2xvY2tfc3RhcnRfbG9vcF91cGRhdGUoc3RydWN0IHJxICpycSlcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcbi1cdFdBUk5fT05fT05DRShycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDI2IFJRQ0ZfQUNUX1NLSVApO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcdTAwMjYgUlFDRl9BQ1RfU0tJUCk7XG4gXHRycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgfD0gUlFDRl9BQ1RfU0tJUDtcbiB9XG4gXG5AQCAtMTg3MCw5ICsxODcwLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpIHt9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9iYWxhbmNlX2NhbGxiYWNrc19lbXB0eShzdHJ1Y3QgcnEgKnJxKVxuIHtcbi1cdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICBycS1cdTAwM2ViYWxhbmNlX2NhbGxiYWNrIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgIT0gXHUwMDI2YmFsYW5jZV9wdXNoX2NhbGxiYWNrKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChJU19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgICBycS1cdTAwM2ViYWxhbmNlX2NhbGxiYWNrIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgIHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgIT0gXHUwMDI2YmFsYW5jZV9wdXNoX2NhbGxiYWNrKTtcbiB9XG4gXG4gLypcbkBAIC0yNjgxLDcgKzI2ODEsNyBAQCBzdHJ1Y3Qgc2NoZWRfY2xhc3Mge1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldilcbiB7XG4tXHRXQVJOX09OX09OQ0UocnEtXHUwMDNlZG9ub3IgIT0gcHJldik7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXHUwMDNlZG9ub3IgIT0gcHJldik7XG4gXHRwcmV2LVx1MDAzZXNjaGVkX2NsYXNzLVx1MDAzZXB1dF9wcmV2X3Rhc2socnEsIHByZXYsIE5VTEwpO1xuIH1cbiBcbkBAIC0yNzA0LDcgKzI3MDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3ByZXZfc2V0X25leHRfdGFzayhzdHJ1Y3QgcnEgKnJxLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWRvbm9yICE9IHByZXYpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZWRvbm9yICE9IHByZXYpO1xuIFxuIFx0X19wdXRfcHJldl9zZXRfbmV4dF9kbF9zZXJ2ZXIocnEsIHByZXYsIG5leHQpO1xuIFxuQEAgLTMwMzAsNyArMzAzMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhdHRhY2hfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XG4gXG4tXHRXQVJOX09OX09OQ0UodGFza19ycShwKSAhPSBycSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19ycShwKSAhPSBycSk7XG4gXHRhY3RpdmF0ZV90YXNrKHJxLCBwLCBFTlFVRVVFX05PQ0xPQ0spO1xuIFx0d2FrZXVwX3ByZWVtcHQocnEsIHAsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9saWIvYnVnLmMgYi9saWIvYnVnLmNcbmluZGV4IDIyNGY0Y2ZhNGFhMzEyLi5mNTc2OGY1ZDE3YjQ3OSAxMDA2NDRcbi0tLSBhL2xpYi9idWcuY1xuKysrIGIvbGliL2J1Zy5jXG5AQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgX193YXJuX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFxuIHN0YXRpYyBlbnVtIGJ1Z190cmFwX3R5cGUgX19yZXBvcnRfYnVnKHN0cnVjdCBidWdfZW50cnkgKmJ1ZywgdW5zaWduZWQgbG9uZyBidWdhZGRyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4tXHRib29sIHdhcm5pbmcsIG9uY2UsIGRvbmUsIG5vX2N1dCwgaGFzX2FyZ3M7XG4rXHRib29sIHdhcm5pbmcsIG9uY2UsIGRvbmUsIG5vX2N1dCwgaGFzX2FyZ3MsIGRlZmVycmVkO1xuIFx0Y29uc3QgY2hhciAqZmlsZSwgKmZtdDtcbiBcdHVuc2lnbmVkIGxpbmU7XG4gXG5AQCAtMjE5LDYgKzIxOSw3IEBAIHN0YXRpYyBlbnVtIGJ1Z190cmFwX3R5cGUgX19yZXBvcnRfYnVnKHN0cnVjdCBidWdfZW50cnkgKmJ1ZywgdW5zaWduZWQgbG9uZyBidWdhXG4gXHRkb25lICAgICA9IGJ1Zy1cdTAwM2VmbGFncyBcdTAwMjYgQlVHRkxBR19ET05FO1xuIFx0bm9fY3V0ICAgPSBidWctXHUwMDNlZmxhZ3MgXHUwMDI2IEJVR0ZMQUdfTk9fQ1VUX0hFUkU7XG4gXHRoYXNfYXJncyA9IGJ1Zy1cdTAwM2VmbGFncyBcdTAwMjYgQlVHRkxBR19BUkdTO1xuK1x0ZGVmZXJyZWQgPSBidWctXHUwMDNlZmxhZ3MgXHUwMDI2IEJVR0ZMQUdfREVGRVJSRUQ7XG4gXG4gXHRpZiAod2FybmluZyBcdTAwMjZcdTAwMjYgb25jZSkge1xuIFx0XHRpZiAoZG9uZSlcbkBAIC0yMjksNyArMjMwLDEwIEBAIHN0YXRpYyBlbnVtIGJ1Z190cmFwX3R5cGUgX19yZXBvcnRfYnVnKHN0cnVjdCBidWdfZW50cnkgKmJ1ZywgdW5zaWduZWQgbG9uZyBidWdhXG4gXHRcdCAqL1xuIFx0XHRidWctXHUwMDNlZmxhZ3MgfD0gQlVHRkxBR19ET05FO1xuIFx0fVxuLVxuK1x0aWYgKGRlZmVycmVkKSB7XG4rXHRcdHByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7XG4rXHRcdHByaW50a19kZWZlcnJlZF9lbnRlcigpO1xuK1x0fVxuIFx0LypcbiBcdCAqIEJVRygpIGFuZCBXQVJOX09OKCkgZmFtaWxpZXMgZG9uJ3QgcHJpbnQgYSBjdXN0b20gZGVidWcgbWVzc2FnZVxuIFx0ICogYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLCBzbyB3ZSBtdXN0IGFkZCB0aGVcbkBAIC0yNDUsNiArMjQ5LDEwIEBAIHN0YXRpYyBlbnVtIGJ1Z190cmFwX3R5cGUgX19yZXBvcnRfYnVnKHN0cnVjdCBidWdfZW50cnkgKmJ1ZywgdW5zaWduZWQgbG9uZyBidWdhXG4gXHRcdC8qIHRoaXMgaXMgYSBXQVJOX09OIHJhdGhlciB0aGFuIEJVRy9CVUdfT04gKi9cbiBcdFx0X193YXJuKGZpbGUsIGxpbmUsICh2b2lkICopYnVnYWRkciwgQlVHX0dFVF9UQUlOVChidWcpLCByZWdzLFxuIFx0XHQgICAgICAgTlVMTCk7XG4rXHRcdGlmIChkZWZlcnJlZCkge1xuK1x0XHRcdHByaW50a19kZWZlcnJlZF9leGl0KCk7XG4rXHRcdFx0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1xuK1x0XHR9XG4gXHRcdHJldHVybiBCVUdfVFJBUF9UWVBFX1dBUk47XG4gXHR9XG4gXG5AQCAtMjU0LDYgKzI2MiwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYVxuIFx0XHRwcl9jcml0KFwia2VybmVsIEJVRyBhdCAlcEIgW3ZlcmJvc2UgZGVidWcgaW5mbyB1bmF2YWlsYWJsZV1cXG5cIixcbiBcdFx0XHQodm9pZCAqKWJ1Z2FkZHIpO1xuIFxuK1x0aWYgKGRlZmVycmVkKSB7XG4rXHRcdHByaW50a19kZWZlcnJlZF9leGl0KCk7XG4rXHRcdHByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTtcbitcdH1cbiBcdHJldHVybiBCVUdfVFJBUF9UWVBFX0JVRztcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNDo1MzowMS4xMDQ2MjI4MTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTIyMTgyNjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgXCJEZWZlcnJlZCBXYXJuaW5nXCIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW50cm9kdWNpbmcgYFdBUk5fT05fREVGRVJSRURgIGFuZCBgV0FSTl9PTl9PTkNFX0RFRkVSUkVEYCBhbmQgdXNpbmcgdGhlbSB0byByZXBsYWNlIHRoZSBleGlzdGluZyBgV0FSTl9PTmAgYW5kIGBXQVJOX09OX09OQ0VgIGNhbGxzIHdpdGhpbiB0aGUgc2NoZWR1bGVyIGNvZGUgKGBrZXJuZWwvc2NoZWQvYCkuIFRoZXJlJ3MgYWxzbyBzb21lIG1vZGlmaWNhdGlvbiBpbiBgbGliL2J1Zy5jYCB0byBoYW5kbGUgYSBgQlVHRkxBR19ERUZFUlJFRGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSBcIndvcnRoeVwiIHBhdGNoIHRvIHRlc3QuXG5cbkRpZ2dpbmcgaW50byBgbGliL2J1Zy5jYCwgaXQgbG9va3MgbGlrZSB0aGUgYEJVR0ZMQUdfREVGRVJSRURgIGZsYWcsIHdoZW4gc2V0LCB3aWxsIG1ha2UgdGhlIHdhcm5pbmcgdXNlIGRlZmVycmVkIHByaW50aW5nIHdpdGggYHByaW50a19kZWZlcnJlZF9lbnRlcigpYCBhbmQgYHByaW50a19kZWZlcnJlZF9leGl0KClgLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSB0aGUgd2FybmluZ3Mgd2lsbCBub3cgYmUgZGVmZXJyZWQuIEkgZG8gbmVlZCB0byBzZWUsIGRvZXMgdGhpcyBjaGFuZ2UgdGhlIGV4ZWN1dGlvbiBmbG93IGlmIHRoZSB3YXJuaW5nICppc24ndCogdHJpZ2dlcmVkPyBMb29raW5nIGF0IHRoZSBgV0FSTl9PTl9ERUZFUlJFRGAgbWFjcm8sIGl0IGxvb2tzIGxpa2UgaXQganVzdCBjaGFuZ2VzIHRoZSAqd2F5KiB0aGUgd2FybmluZyBpcyBwcmludGVkLCBub3QgdGhlIGNvZGUgbG9naWMgaXRzZWxmLlxuXG5gYGBjXG4jZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSAoe1x0XHRcdFx0XHRcXFxuXHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XHRcXFxuXHRpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbikpIHtcdFx0XHRcdFx0XFxcblx0XHRfX1dBUk5fRkxBR1MoI2NvbmRpdGlvbixcdFx0XHRcdFxcXG5cdFx0XHQgICAgIEJVR0ZMQUdfREVGRVJSRUQgfFx0XHRcdFx0XFxcblx0XHRcdCAgICAgQlVHRkxBR19UQUlOVChUQUlOVF9XQVJOKSk7XHRcdFxcXG5cdH1cdFx0XHRcdFx0XHRcdFx0XFxcblx0dW5saWtlbHkoX19yZXRfd2Fybl9vbik7XHRcdFx0XHRcdFxcXG59KVxuYGBgXG5cblNvLCBpZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLCBleGVjdXRpb24gcHJvY2VlZHMgYXMgYmVmb3JlLiBJZiB0aGUgY29uZGl0aW9uIGlzIG1ldCwgdGhlIHdhcm5pbmcgaXMgbm93IGRlZmVycmVkLCBidXQgdGhlIGV4ZWN1dGlvbiBsb2dpYyByZW1haW5zIHRoZSBzYW1lIChvdGhlciB0aGFuIHRoZSBhZGRpdGlvbmFsIGxvZyBpbmZvcm1hdGlvbikuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgdGhpbmdzIGxpa2UgbW9kaWZpY2F0aW9ucyB0byBsb2dnaW5nIGNhbGxzLiBJcyBjaGFuZ2luZyBhIHdhcm5pbmcgdG8gYSBkZWZlcnJlZCB3YXJuaW5nIGEgbG9nZ2luZyBjaGFuZ2U/IFllcywgdGhpcyBpcyBlc3NlbnRpYWxseSBjaGFuZ2luZyBgcHJpbnRrYCB0byBgcHJpbnRrX2RlZmVycmVkYCB1bmRlciB0aGUgaG9vZC4gSXQgY2hhbmdlcyAqaG93KiB0aGUgd2FybmluZyBpcyByZXBvcnRlZC4gSXQgZG9lc24ndCBtb2RpZnkgdGhlIGxvZ2ljIG9mIHRoZSBjb2RlIGJlaW5nIHdhcm5lZCBhYm91dC4gSXQgc2VlbXMgdGhlIHB1cnBvc2UgaXMgdG8gcHJldmVudCBwb3RlbnRpYWwgZGVhZGxvY2tzLCBidXQgaW4gdGhlIGNvbnRleHQgb2YgZnV6emluZywgdGhlIGdvYWwgaXMgbm90IHRvIGZpbmQgYnVncyBpbiB0aGUgcmVwb3J0aW5nIHBhdGggYnV0IGluIHRoZSBrZXJuZWwgbG9naWMgaXRzZWxmLlxuXG5JJ20gZG91YmxlLWNoZWNraW5nLiBUaGUgYGtlcm5lbC9zY2hlZC9gIGNoYW5nZXMgYXBwZWFyIHRvIGJlICpwdXJlbHkqIHJlcGxhY2VtZW50cyBvZiBgV0FSTl9PTmAgd2l0aCBgV0FSTl9PTl9ERUZFUlJFRGAgYW5kIHNvIG9uLCBzbyBpZiB0aGUgd2FybmluZyBjb25kaXRpb24gaXMgbWV0LCBub3cgdXNlIGRlZmVycmVkIHByaW50aywgYnV0IHRoZSBleGVjdXRpb24gZmxvdyBpcyB0aGUgc2FtZSBpZiB0aGUgd2FybmluZyBpcyBub3QgdHJpZ2dlcmVkLlxuXG5Mb29raW5nIGF0IGBpbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oYCwgaXQganVzdCBkZWZpbmVzIGEgZmFsbGJhY2sgYFdBUk5fT05fREVGRVJSRURgLiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgYHByaW50a2AgdG8gdGhlIGBwcmludGtfZGVmZXJyZWRfZW50ZXIoKWAuXG5cblNvLCBpdCdzIGp1c3QgYSBsb2dnaW5nIGNoYW5nZS4gVGhlcmUncyBubyBvdGhlciBsb2dpYyBiZWluZyBjaGFuZ2VkIGluIHRoZSBzY2hlZHVsZXIuIEl0IGlzIGFsbCBjb3NtZXRpYy5cblxuVGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gYFdBUk5fT05fREVGRVJSRURgLCBgV0FSTl9PTl9PTkNFX0RFRkVSUkVEYC4gVGhpcyBpcyBwdXJlbHkgbG9nZ2luZy4gSSB3aWxsIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzQ1LCJPdXRwdXRUb2tlbnMiOjEwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNDo1MzoyMC4zMjY0NTIyNTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhbmQgYXBwbGllcyBkZWZlcnJlZCB2YXJpYW50cyBvZiBXQVJOX09OIGFuZCBXQVJOX09OX09OQ0UgbWFjcm9zIChXQVJOX09OX0RFRkVSUkVELCBXQVJOX09OX09OQ0VfREVGRVJSRUQpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgd2FybmluZyBwcmludHMgaW4gdGhlIHNjaGVkdWxlci4gVGhpcyBpcyBwdXJlbHkgYSBsb2dnaW5nL2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBub3JtYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhbmQgYXBwbGllcyBkZWZlcnJlZCB2YXJpYW50cyBvZiBXQVJOX09OIGFuZCBXQVJOX09OX09OQ0UgbWFjcm9zIChXQVJOX09OX0RFRkVSUkVELCBXQVJOX09OX09OQ0VfREVGRVJSRUQpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgd2FybmluZyBwcmludHMgaW4gdGhlIHNjaGVkdWxlci4gVGhpcyBpcyBwdXJlbHkgYSBsb2dnaW5nL2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBub3JtYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowd24ct[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 14:40:05 +0000 UTC FinishedAt: 2026-06-23 14:53:21 +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+CgkJCTx0ZD4yMDI2LzA2LzIzIDE0OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhbmQgYXBwbGllcyBkZWZlcnJlZCB2YXJpYW50cyBvZiBXQVJOX09OIGFuZCBXQVJOX09OX09OQ0UgbWFjcm9zIChXQVJOX09OX0RFRkVSUkVELCBXQVJOX09OX09OQ0VfREVGRVJSRUQpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgd2FybmluZyBwcmludHMgaW4gdGhlIHNjaGVkdWxlci4gVGhpcyBpcyBwdXJlbHkgYSBsb2dnaW5nL2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBub3JtYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTQ6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNGY2N2JjMDkxMGFlZmI5YTUyYTQ1MWRlMjM2Y2YwNWVmMzk4OTRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTQ6NTI6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhcbmluZGV4IDA5ZThlY2NlZThlZDk3Li4xZTNmZjAwZjcwOWI4OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNkZWZpbmUgQlVHRkxBR19ET05FXHRcdCgxIFx1MDAzY1x1MDAzYyAyKVxuICNkZWZpbmUgQlVHRkxBR19OT19DVVRfSEVSRVx0KDEgXHUwMDNjXHUwMDNjIDMpXHQvKiBDVVRfSEVSRSBhbHJlYWR5IHNlbnQgKi9cbiAjZGVmaW5lIEJVR0ZMQUdfQVJHU1x0XHQoMSBcdTAwM2NcdTAwM2MgNClcbiYjNDM7I2RlZmluZSBCVUdGTEFHX0RFRkVSUkVEXHQoMSBcdTAwM2NcdTAwM2MgNSlcbiAjZGVmaW5lIEJVR0ZMQUdfVEFJTlQodGFpbnQpXHQoKHRhaW50KSBcdTAwM2NcdTAwM2MgOClcbiAjZGVmaW5lIEJVR19HRVRfVEFJTlQoYnVnKVx0KChidWcpLVx1MDAzZWZsYWdzIFx1MDAzZVx1MDAzZSA4KVxuICNlbmRpZlxuQEAgLTExNSw2ICYjNDM7MTE2LDE2IEBAIGV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pO1xuIH0pXG4gI2VuZGlmXG4gXG4mIzQzOyNkZWZpbmUgV0FSTl9PTl9ERUZFUlJFRChjb25kaXRpb24pICh7XHRcdFx0XHRcdFxcXG4mIzQzO1x0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1x0XHRcdFx0XFxcbiYjNDM7XHRpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbikpIHtcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdF9fV0FSTl9GTEFHUygjY29uZGl0aW9uLFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0ICAgICBCVUdGTEFHX0RFRkVSUkVEIHxcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdCAgICAgQlVHRkxBR19UQUlOVChUQUlOVF9XQVJOKSk7XHRcdFxcXG4mIzQzO1x0fVx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHVubGlrZWx5KF9fcmV0X3dhcm5fb24pO1x0XHRcdFx0XHRcXFxuJiM0Mzt9KVxuJiM0MztcbiAjaWZuZGVmIFdBUk5fT05fT05DRVxuICNkZWZpbmUgV0FSTl9PTl9PTkNFKGNvbmRpdGlvbikgKHtcdFx0XHRcdFx0XFxcbiBcdGludCBfX3JldF93YXJuX29uID0gISEoY29uZGl0aW9uKTtcdFx0XHRcdFxcXG5AQCAtMTI1LDYgJiM0MzsxMzYsMTYgQEAgZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4gXHR1bmxpa2VseShfX3JldF93YXJuX29uKTtcdFx0XHRcdFx0XFxcbiB9KVxuICNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSBXQVJOX09OX09OQ0VfREVGRVJSRUQoY29uZGl0aW9uKSAoe1x0XHRcdFx0XFxcbiYjNDM7XHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XHRcXFxuJiM0MztcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkge1x0XHRcdFx0XHRcXFxuJiM0MztcdFx0X19XQVJOX0ZMQUdTKCNjb25kaXRpb24sXHRcdFx0XHRcXFxuJiM0MztcdFx0XHQgICAgIEJVR0ZMQUdfT05DRSB8IEJVR0ZMQUdfREVGRVJSRUQgfFx0XHRcXFxuJiM0MztcdFx0XHQgICAgIEJVR0ZMQUdfVEFJTlQoVEFJTlRfV0FSTikpO1x0XHRcXFxuJiM0MztcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR1bmxpa2VseShfX3JldF93YXJuX29uKTtcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiAjZW5kaWYgLyogX19XQVJOX0ZMQUdTICovXG4gXG4gI2lmIGRlZmluZWQoX19XQVJOX0ZMQUdTKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoX19XQVJOX3ByaW50ZilcbkBAIC0xNTksNiAmIzQzOzE4MCwxOSBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcbiB9KVxuICNlbmRpZlxuIFxuJiM0MzsjaWZuZGVmIFdBUk5fT05fREVGRVJSRURcbiYjNDM7I2RlZmluZSBXQVJOX09OX0RFRkVSUkVEKGNvbmRpdGlvbikgKHtcdFx0XHRcdFx0XFxcbiYjNDM7XHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XHRcXFxuJiM0MztcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkge1x0XHRcdFx0XHRcXFxuJiM0MztcdFx0Z3VhcmQocHJlZW1wdCkoKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHByaW50a19kZWZlcnJlZF9lbnRlcigpXHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRfX1dBUk4oKTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0cHJpbnRrX2RlZmVycmVkX2V4aXQoKVx0XHRcdFx0XHRcXFxuJiM0MztcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR1bmxpa2VseShfX3JldF93YXJuX29uKTtcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNpZm5kZWYgV0FSTlxuICNkZWZpbmUgV0FSTihjb25kaXRpb24sIGZvcm1hdC4uLikgKHtcdFx0XHRcdFx0XFxcbiBcdGludCBfX3JldF93YXJuX29uID0gISEoY29uZGl0aW9uKTtcdFx0XHRcdFxcXG5AQCAtMTgwLDYgJiM0MzsyMTQsMTEgQEAgZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4gXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxuICNlbmRpZlxuIFxuJiM0MzsjaWZuZGVmIFdBUk5fT05fT05DRV9ERUZFUlJFRFxuJiM0MzsjZGVmaW5lIFdBUk5fT05fT05DRV9ERUZFUlJFRChjb25kaXRpb24pXHRcdFx0XHRcXFxuJiM0MztcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT05fREVGRVJSRUQsIDEpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjaWZuZGVmIFdBUk5fT05DRVxuICNkZWZpbmUgV0FSTl9PTkNFKGNvbmRpdGlvbiwgZm9ybWF0Li4uKVx0XHRcdFx0XFxcbiBcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk4sIDEsIGZvcm1hdClcbkBAIC0yMTUsNyAmIzQzOzI1NCw5IEBAIGV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pO1xuIH0pXG4gI2VuZGlmXG4gXG4mIzQzOyNkZWZpbmUgV0FSTl9PTl9ERUZFUlJFRChjb25kaXRpb24pIFdBUk5fT04oY29uZGl0aW9uKVxuICNkZWZpbmUgV0FSTl9PTl9PTkNFKGNvbmRpdGlvbikgV0FSTl9PTihjb25kaXRpb24pXG4mIzQzOyNkZWZpbmUgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNvbmRpdGlvbikgV0FSTl9PTihjb25kaXRpb24pXG4gI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpXG4gI2RlZmluZSBXQVJOX1RBSU5UKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLikgV0FSTihjb25kaXRpb24sIGZvcm1hdClcbiAjZGVmaW5lIFdBUk5fVEFJTlRfT05DRShjb25kaXRpb24sIHRhaW50LCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbmluZGV4IGI4ODcxNDQ5ZDNjNjk0Li4wZTI4MjQ1N2FiYjkxNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC04NTMsNyAmIzQzOzg1Myw3IEBAIHZvaWQgdXBkYXRlX3JxX2Nsb2NrKHN0cnVjdCBycSAqcnEpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChzY2hlZF9mZWF0KFdBUk5fRE9VQkxFX0NMT0NLKSlcbi1cdFx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcdTAwMjYgUlFDRl9VUERBVEVEKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDI2IFJRQ0ZfVVBEQVRFRCk7XG4gXHRycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgfD0gUlFDRl9VUERBVEVEO1xuIFxuIFx0Y2xvY2sgPSBzY2hlZF9jbG9ja19jcHUoY3B1X29mKHJxKSk7XG5AQCAtMTgwNyw3ICYjNDM7MTgwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1Y2xhbXBfcnFfZGVjX2lkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcbiBcdGJ1Y2tldCA9IFx1MDAyNnVjX3JxLVx1MDAzZWJ1Y2tldFt1Y19zZS1cdTAwM2VidWNrZXRfaWRdO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCFidWNrZXQtXHUwMDNldGFza3MpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghYnVja2V0LVx1MDAzZXRhc2tzKTtcbiBcdGlmIChsaWtlbHkoYnVja2V0LVx1MDAzZXRhc2tzKSlcbiBcdFx0YnVja2V0LVx1MDAzZXRhc2tzLS07XG4gXG5AQCAtMTgyNyw3ICYjNDM7MTgyNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1Y2xhbXBfcnFfZGVjX2lkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdCAqIERlZmVuc2l2ZSBwcm9ncmFtbWluZzogdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiBJZiBpdCBoYXBwZW5zLFxuIFx0ICogZS5nLiBkdWUgdG8gZnV0dXJlIG1vZGlmaWNhdGlvbiwgd2FybiBhbmQgZml4IHVwIHRoZSBleHBlY3RlZCB2YWx1ZS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKGJ1Y2tldC1cdTAwM2V2YWx1ZSBcdTAwM2UgcnFfY2xhbXApO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChidWNrZXQtXHUwMDNldmFsdWUgXHUwMDNlIHJxX2NsYW1wKTtcbiBcdGlmIChidWNrZXQtXHUwMDNldmFsdWUgXHUwMDNlPSBycV9jbGFtcCkge1xuIFx0XHRia3RfY2xhbXAgPSB1Y2xhbXBfcnFfbWF4X3ZhbHVlKHJxLCBjbGFtcF9pZCwgdWNfc2UtXHUwMDNldmFsdWUpO1xuIFx0XHR1Y2xhbXBfcnFfc2V0KHJxLCBjbGFtcF9pZCwgYmt0X2NsYW1wKTtcbkBAIC0yMjEwLDcgJiM0MzsyMjEwLDcgQEAgdm9pZCBhY3RpdmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxuIFxuIHZvaWQgZGVhY3RpdmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxuIHtcbi1cdFdBUk5fT05fT05DRShmbGFncyBcdTAwMjYgREVRVUVVRV9TTEVFUCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGZsYWdzIFx1MDAyNiBERVFVRVVFX1NMRUVQKTtcbiBcbiBcdFdSSVRFX09OQ0UocC1cdTAwM2Vvbl9ycSwgVEFTS19PTl9SUV9NSUdSQVRJTkcpO1xuIFx0QVNTRVJUX0VYQ0xVU0lWRV9XUklURVIocC1cdTAwM2Vvbl9ycSk7XG5AQCAtMjUxNiw3ICYjNDM7MjUxNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnEgKm1vdmVfcXVldWVkX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHJxX2ZsYWdzICpyZixcbiBcdHJxID0gY3B1X3JxKG5ld19jcHUpO1xuIFxuIFx0cnFfbG9jayhycSwgcmYpO1xuLVx0V0FSTl9PTl9PTkNFKHRhc2tfY3B1KHApICE9IG5ld19jcHUpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX2NwdShwKSAhPSBuZXdfY3B1KTtcbiBcdGFjdGl2YXRlX3Rhc2socnEsIHAsIDApO1xuIFx0d2FrZXVwX3ByZWVtcHQocnEsIHAsIDApO1xuIFxuQEAgLTI2MDIsNyAmIzQzOzI2MDIsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGlvbl9jcHVfc3RvcCh2b2lkICpkYXRhKVxuIFx0ICogSWYgd2Ugd2VyZSBwYXNzZWQgYSBwZW5kaW5nLCB0aGVuIC1cdTAwM2VzdG9wX3BlbmRpbmcgd2FzIHNldCwgdGh1c1xuIFx0ICogcC1cdTAwM2VtaWdyYXRpb25fcGVuZGluZyBtdXN0IGhhdmUgcmVtYWluZWQgc3RhYmxlLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UocGVuZGluZyBcdTAwMjZcdTAwMjYgcGVuZGluZyAhPSBwLVx1MDAzZW1pZ3JhdGlvbl9wZW5kaW5nKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocGVuZGluZyBcdTAwMjZcdTAwMjYgcGVuZGluZyAhPSBwLVx1MDAzZW1pZ3JhdGlvbl9wZW5kaW5nKTtcbiBcbiBcdC8qXG4gXHQgKiBJZiB0YXNrX3JxKHApICE9IHJxLCBpdCBjYW5ub3QgYmUgbWlncmF0ZWQgaGVyZSwgYmVjYXVzZSB3ZSYjMzk7cmVcbkBAIC0yNjYxLDcgJiM0MzsyNjYxLDcgQEAgc3RhdGljIGludCBtaWdyYXRpb25fY3B1X3N0b3Aodm9pZCAqZGF0YSlcbiBcdFx0ICogZGV0ZXJtaW5lIGlzX21pZ3JhdGlvbl9kaXNhYmxlZCgpIGFuZCBzbyBoYXZlIHRvIGNoYXNlIGFmdGVyXG4gXHRcdCAqIGl0LlxuIFx0XHQgKi9cbi1cdFx0V0FSTl9PTl9PTkNFKCFwZW5kaW5nLVx1MDAzZXN0b3BfcGVuZGluZyk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXBlbmRpbmctXHUwMDNlc3RvcF9wZW5kaW5nKTtcbiBcdFx0cHJlZW1wdF9kaXNhYmxlKCk7XG4gXHRcdHJxX3VubG9jayhycSwgXHUwMDI2cmYpO1xuIFx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwLVx1MDAzZXBpX2xvY2ssIHJmLmZsYWdzKTtcbkBAIC0zMDA0LDcgJiM0MzszMDA0LDcgQEAgc3RhdGljIGludCBhZmZpbmVfbW92ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxX2ZsYWdcbiBcdCAqXG4gXHQgKiBFaXRoZXIgd2F5LCB3ZSByZWFsbHkgc2hvdWxkIGhhdmUgYSBAcGVuZGluZyBoZXJlLlxuIFx0ICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFwZW5kaW5nKSkge1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXBlbmRpbmcpKSB7XG4gXHRcdHRhc2tfcnFfdW5sb2NrKHJxLCBwLCByZik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTMxMTYsOSAmIzQzOzMxMTYsOSBAQCBzdGF0aWMgaW50IF9fc2V0X2NwdXNfYWxsb3dlZF9wdHJfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHAgPT0gY3VycmVudCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCBpc19taWdyYXRpb25fZGlzYWJsZWQocCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHQgIWNwdW1hc2tfdGVzdF9jcHUodGFza19jcHUocCksIGN0eC1cdTAwM2VuZXdfbWFzaykpKSB7XG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAgPT0gY3VycmVudCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdCAgaXNfbWlncmF0aW9uX2Rpc2FibGVkKHApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdFx0ICAhY3B1bWFza190ZXN0X2NwdSh0YXNrX2NwdShwKSwgY3R4LVx1MDAzZW5ld19tYXNrKSkpIHtcbiBcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC0zMjY3LDcgJiM0MzszMjY3LDcgQEAgdm9pZCBmb3JjZV9jb21wYXRpYmxlX2NwdXNfYWxsb3dlZF9wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0XHRcdFx0Y3B1bWFza19wcl9hcmdzKG92ZXJyaWRlX21hc2spKTtcbiBcdH1cbiBcbi1cdFdBUk5fT04oc2V0X2NwdXNfYWxsb3dlZF9wdHIocCwgb3ZlcnJpZGVfbWFzaykpO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQoc2V0X2NwdXNfYWxsb3dlZF9wdHIocCwgb3ZlcnJpZGVfbWFzaykpO1xuIG91dF9mcmVlX21hc2s6XG4gXHRjcHVzX3JlYWRfdW5sb2NrKCk7XG4gXHRmcmVlX2NwdW1hc2tfdmFyKG5ld19tYXNrKTtcbkBAIC0zMjkzLDcgJiM0MzszMjkzLDcgQEAgdm9pZCByZWxheF9jb21wYXRpYmxlX2NwdXNfYWxsb3dlZF9wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0ICogQ3B1c2V0IG1hc2tpbmcgd2lsbCBiZSBkb25lIHRoZXJlIHRvby5cbiBcdCAqL1xuIFx0cmV0ID0gX19zY2hlZF9zZXRhZmZpbml0eShwLCBcdTAwMjZhYyk7XG4tXHRXQVJOX09OX09OQ0UocmV0KTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocmV0KTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19TTVBcbkBAIC0zMzA2LDE2ICYjNDM7MzMwNiwxNiBAQCB2b2lkIHNldF90YXNrX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBuZXdfY3B1KVxuIFx0ICogV2Ugc2hvdWxkIG5ldmVyIGNhbGwgc2V0X3Rhc2tfY3B1KCkgb24gYSBibG9ja2VkIHRhc2ssXG4gXHQgKiB0dHd1KCkgd2lsbCBzb3J0IG91dCB0aGUgcGxhY2VtZW50LlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0Uoc3RhdGUgIT0gVEFTS19SVU5OSU5HIFx1MDAyNlx1MDAyNiBzdGF0ZSAhPSBUQVNLX1dBS0lORyBcdTAwMjZcdTAwMjYgIXAtXHUwMDNlb25fcnEpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChzdGF0ZSAhPSBUQVNLX1JVTk5JTkcgXHUwMDI2XHUwMDI2IHN0YXRlICE9IFRBU0tfV0FLSU5HIFx1MDAyNlx1MDAyNiAhcC1cdTAwM2Vvbl9ycSk7XG4gXG4gXHQvKlxuIFx0ICogTWlncmF0aW5nIGZhaXIgY2xhc3MgdGFzayBtdXN0IGhhdmUgcC1cdTAwM2Vvbl9ycSA9IFRBU0tfT05fUlFfTUlHUkFUSU5HLFxuIFx0ICogYmVjYXVzZSBzY2hlZHN0YXRfd2FpdF97c3RhcnQsZW5kfSByZWJhc2UgbWlncmF0aW5nIHRhc2smIzM5O3Mgd2FpdF9zdGFydFxuIFx0ICogdGltZSByZWx5aW5nIG9uIHAtXHUwMDNlb25fcnEuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShzdGF0ZSA9PSBUQVNLX1JVTk5JTkcgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgcC1cdTAwM2VzY2hlZF9jbGFzcyA9PSBcdTAwMjZmYWlyX3NjaGVkX2NsYXNzIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIChwLVx1MDAzZW9uX3JxIFx1MDAyNlx1MDAyNiAhdGFza19vbl9ycV9taWdyYXRpbmcocCkpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc3RhdGUgPT0gVEFTS19SVU5OSU5HIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgICBwLVx1MDAzZXNjaGVkX2NsYXNzID09IFx1MDAyNmZhaXJfc2NoZWRfY2xhc3MgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgIChwLVx1MDAzZW9uX3JxIFx1MDAyNlx1MDAyNiAhdGFza19vbl9ycV9taWdyYXRpbmcocCkpKTtcbiBcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiBcdC8qXG5AQCAtMzMyOCwxNSAmIzQzOzMzMjgsMTUgQEAgdm9pZCBzZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgbmV3X2NwdSlcbiBcdCAqIEZ1cnRoZXJtb3JlLCBhbGwgdGFza19ycSB1c2VycyBzaG91bGQgYWNxdWlyZSBib3RoIGxvY2tzLCBzZWVcbiBcdCAqIHRhc2tfcnFfbG9jaygpLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UoZGVidWdfbG9ja3MgXHUwMDI2XHUwMDI2ICEobG9ja2RlcF9pc19oZWxkKFx1MDAyNnAtXHUwMDNlcGlfbG9jaykgfHxcbi1cdFx0XHRcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChfX3JxX2xvY2twKHRhc2tfcnEocCkpKSkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkZWJ1Z19sb2NrcyBcdTAwMjZcdTAwMjYgIShsb2NrZGVwX2lzX2hlbGQoXHUwMDI2cC1cdTAwM2VwaV9sb2NrKSB8fFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGxvY2tkZXBfaXNfaGVsZChfX3JxX2xvY2twKHRhc2tfcnEocCkpKSkpO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIENsZWFybHksIG1pZ3JhdGluZyB0YXNrcyB0byBvZmZsaW5lIENQVXMgaXMgYSBmYWlybHkgZGFmdCB0aGluZy5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKCFjcHVfb25saW5lKG5ld19jcHUpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNwdV9vbmxpbmUobmV3X2NwdSkpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKGlzX21pZ3JhdGlvbl9kaXNhYmxlZChwKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGlzX21pZ3JhdGlvbl9kaXNhYmxlZChwKSk7XG4gXG4gXHR0cmFjZV9zY2hlZF9taWdyYXRlX3Rhc2socCwgbmV3X2NwdSk7XG4gXG5AQCAtMzgwMywxMCAmIzQzOzM4MDMsMTAgQEAgdm9pZCBzY2hlZF90dHd1X3BlbmRpbmcodm9pZCAqYXJnKVxuIFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbiBcbiBcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdCwgbGxpc3QsIHdha2VfZW50cnkubGxpc3QpIHtcbi1cdFx0aWYgKFdBUk5fT05fT05DRShwLVx1MDAzZW9uX2NwdSkpXG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlb25fY3B1KSlcbiBcdFx0XHRzbXBfY29uZF9sb2FkX2FjcXVpcmUoXHUwMDI2cC1cdTAwM2Vvbl9jcHUsICFWQUwpO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHRhc2tfY3B1KHApICE9IGNwdV9vZihycSkpKVxuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX2NwdShwKSAhPSBjcHVfb2YocnEpKSlcbiBcdFx0XHRzZXRfdGFza19jcHUocCwgY3B1X29mKHJxKSk7XG4gXG4gXHRcdHR0d3VfZG9fYWN0aXZhdGUocnEsIHAsIHAtXHUwMDNlc2NoZWRfcmVtb3RlX3dha2V1cCA/IFdGX01JR1JBVEVEIDogMCwgXHUwMDI2cmYpO1xuQEAgLTQwMDMsOCAmIzQzOzQwMDMsOCBAQCBib29sIHR0d3Vfc3RhdGVfbWF0Y2goc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgc3RhdGUsIGludCAqc3VjY2VzcylcbiBcdGludCBtYXRjaDtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19ERUJVR19QUkVFTVBUKSkge1xuLVx0XHRXQVJOX09OX09OQ0UoKHN0YXRlIFx1MDAyNiBUQVNLX1JUTE9DS19XQUlUKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgIHN0YXRlICE9IFRBU0tfUlRMT0NLX1dBSVQpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKChzdGF0ZSBcdTAwMjYgVEFTS19SVExPQ0tfV0FJVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICAgc3RhdGUgIT0gVEFTS19SVExPQ0tfV0FJVCk7XG4gXHR9XG4gXG4gXHQqc3VjY2VzcyA9ICEhKG1hdGNoID0gX190YXNrX3N0YXRlX21hdGNoKHAsIHN0YXRlKSk7XG5AQCAtNTc0NSw3ICYjNDM7NTc0NSw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkX3RpY2tfcmVtb3RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0XHQgKiB3ZSBhcmUgYWx3YXlzIHN1cmUgdGhhdCB0aGVyZSBpcyBubyBwcm94eSAob25seSBhXG4gXHRcdFx0ICogc2luZ2xlIHRhc2sgaXMgcnVubmluZykuXG4gXHRcdFx0ICovXG4tXHRcdFx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWN1cnIgIT0gcnEtXHUwMDNlZG9ub3IpO1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXHUwMDNlY3VyciAhPSBycS1cdTAwM2Vkb25vcik7XG4gXHRcdFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbiBcbiBcdFx0XHRpZiAoIWlzX2lkbGVfdGFzayhjdXJyKSkge1xuQEAgLTU3NTQsNyAmIzQzOzU3NTQsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdFx0XHQgKiByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHR1NjQgZGVsdGEgPSBycV9jbG9ja190YXNrKHJxKSAtIGN1cnItXHUwMDNlc2UuZXhlY19zdGFydDtcbi1cdFx0XHRcdFdBUk5fT05fT05DRShkZWx0YSBcdTAwM2UgKHU2NClOU0VDX1BFUl9TRUMgKiAzMCk7XG4mIzQzO1x0XHRcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRlbHRhIFx1MDAzZSAodTY0KU5TRUNfUEVSX1NFQyAqIDMwKTtcbiBcdFx0XHR9XG4gXHRcdFx0Y3Vyci1cdTAwM2VzY2hlZF9jbGFzcy1cdTAwM2V0YXNrX3RpY2socnEsIGN1cnIsIDApO1xuIFxuQEAgLTU3NjksNyAmIzQzOzU3NjksNyBAQCBzdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHQgKiBmaXJzdCB1cGRhdGUgc3RhdGUgdG8gcmVmbGVjdCBob3RwbHVnIGFjdGl2aXR5IGlmIHJlcXVpcmVkLlxuIFx0ICovXG4gXHRvcyA9IGF0b21pY19mZXRjaF9hZGRfdW5sZXNzKFx1MDAyNnR3b3JrLVx1MDAzZXN0YXRlLCAtMSwgVElDS19TQ0hFRF9SRU1PVEVfUlVOTklORyk7XG4tXHRXQVJOX09OX09OQ0Uob3MgPT0gVElDS19TQ0hFRF9SRU1PVEVfT0ZGTElORSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKG9zID09IFRJQ0tfU0NIRURfUkVNT1RFX09GRkxJTkUpO1xuIFx0aWYgKG9zID09IFRJQ0tfU0NIRURfUkVNT1RFX1JVTk5JTkcpXG4gXHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBkd29yaywgSFopO1xuIH1cbkBAIC02MTk2LDcgJiM0Mzs2MTk2LDcgQEAgcGlja19uZXh0X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxuIFx0XHRcdCAqIEZvciByb2J1c3RuZXNzLCB1cGRhdGUgdGhlIG1pbl92cnVudGltZV9maSBmb3JcbiBcdFx0XHQgKiB1bmNvbnN0cmFpbmVkIHBpY2tzIGFzIHdlbGwuXG4gXHRcdFx0ICovXG4tXHRcdFx0V0FSTl9PTl9PTkNFKGZpX2JlZm9yZSk7XG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChmaV9iZWZvcmUpO1xuIFx0XHRcdHRhc2tfdnJ1bnRpbWVfdXBkYXRlKHJxLCBuZXh0LCBmYWxzZSk7XG4gXHRcdFx0Z290byBvdXRfc2V0X25leHQ7XG4gXHRcdH1cbkBAIC02Mjc0LDcgJiM0Mzs2Mjc0LDcgQEAgcGlja19uZXh0X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxuIFx0cnEtXHUwMDNlY29yZV9zY2hlZF9zZXEgPSBycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfcGlja19zZXE7XG4gXG4gXHQvKiBTb21ldGhpbmcgc2hvdWxkIGhhdmUgYmVlbiBzZWxlY3RlZCBmb3IgY3VycmVudCBDUFUgKi9cbi1cdFdBUk5fT05fT05DRSghbmV4dCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFuZXh0KTtcbiBcbiBcdC8qXG4gXHQgKiBSZXNjaGVkdWxlIHNpYmxpbmdzXG5AQCAtNjMxNyw3ICYjNDM7NjMxNyw3IEBAIHBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHJxX2ZsYWdzICpyZilcbiBcdFx0fVxuIFxuIFx0XHQvKiBEaWQgd2UgYnJlYWsgTDFURiBtaXRpZ2F0aW9uIHJlcXVpcmVtZW50cz8gKi9cbi1cdFx0V0FSTl9PTl9PTkNFKCFjb29raWVfbWF0Y2gobmV4dCwgcnFfaS1cdTAwM2Vjb3JlX3BpY2spKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghY29va2llX21hdGNoKG5leHQsIHJxX2ktXHUwMDNlY29yZV9waWNrKSk7XG4gXG4gXHRcdGlmIChycV9pLVx1MDAzZWN1cnIgPT0gcnFfaS1cdTAwM2Vjb3JlX3BpY2spIHtcbiBcdFx0XHRycV9pLVx1MDAzZWNvcmVfcGljayA9IE5VTEw7XG5AQCAtNjcxNyw3ICYjNDM7NjcxNyw3IEBAIHN0YXRpYyB2b2lkIHByb3h5X21pZ3JhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLFxuIFx0c3RydWN0IHJxICp0YXJnZXRfcnEgPSBjcHVfcnEodGFyZ2V0X2NwdSk7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcbi1cdFdBUk5fT04ocCA9PSBycS1cdTAwM2VjdXJyKTtcbiYjNDM7XHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gcnEtXHUwMDNlY3Vycik7XG4gXHQvKlxuIFx0ICogU2luY2Ugd2UgYXJlIG1pZ3JhdGluZyBhIGJsb2NrZWQgZG9ub3IsIGl0IGNvdWxkIGJlIHJxLVx1MDAzZWRvbm9yLFxuIFx0ICogYW5kIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHJlZmVyZW5jZXMgZnJvbSB0aGlzXG5AQCAtNjc0OSw3ICYjNDM7Njc0OSw3IEBAIHN0YXRpYyB2b2lkIHByb3h5X2ZvcmNlX3JldHVybihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLFxuIFx0aW50IGNwdSwgd2FrZV9mbGFnID0gV0ZfVFRXVTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xuLVx0V0FSTl9PTihwID09IHJxLVx1MDAzZWN1cnIpO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQocCA9PSBycS1cdTAwM2VjdXJyKTtcbiBcbiBcdGlmIChwID09IHJxLVx1MDAzZWRvbm9yKVxuIFx0XHRwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xuQEAgLTY5NTEsNyAmIzQzOzY5NTEsNyBAQCBmaW5kX3Byb3h5X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpkb25vciwgc3RydWN0IHJxX2ZsYWdzICpyZilcbiBcdFx0ICogZ3VhcmFudGVlIGl0cyBleGlzdGVuY2UsIGFzIHBlciB0dHd1X3JlbW90ZSgpLlxuIFx0XHQgKi9cbiBcdH1cbi1cdFdBUk5fT05fT05DRShvd25lciBcdTAwMjZcdTAwMjYgIW93bmVyLVx1MDAzZW9uX3JxKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQob3duZXIgXHUwMDI2XHUwMDI2ICFvd25lci1cdTAwM2Vvbl9ycSk7XG4gXHRyZXR1cm4gb3duZXI7XG4gXG4gZGVhY3RpdmF0ZTpcbkBAIC03NjMxLDggJiM0Mzs3NjMxLDggQEAgdm9pZCBydF9tdXRleF9zZXRwcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxuIFx0ICogcmVhbCBuZWVkIHRvIGJvb3N0LlxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkocCA9PSBycS1cdTAwM2VpZGxlKSkge1xuLVx0XHRXQVJOX09OKHAgIT0gcnEtXHUwMDNlY3Vycik7XG4tXHRcdFdBUk5fT04ocC1cdTAwM2VwaV9ibG9ja2VkX29uKTtcbiYjNDM7XHRcdFdBUk5fT05fREVGRVJSRUQocCAhPSBycS1cdTAwM2VjdXJyKTtcbiYjNDM7XHRcdFdBUk5fT05fREVGRVJSRUQocC1cdTAwM2VwaV9ibG9ja2VkX29uKTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuQEAgLTg0NjMsNyAmIzQzOzg0NjMsNyBAQCBzdGF0aWMgdm9pZCBiYWxhbmNlX3B1c2hfc2V0KGludCBjcHUsIGJvb2wgb24pXG4gXG4gXHRycV9sb2NrX2lycXNhdmUocnEsIFx1MDAyNnJmKTtcbiBcdGlmIChvbikge1xuLVx0XHRXQVJOX09OX09OQ0UocnEtXHUwMDNlYmFsYW5jZV9jYWxsYmFjayk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXHUwMDNlYmFsYW5jZV9jYWxsYmFjayk7XG4gXHRcdHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPSBcdTAwMjZiYWxhbmNlX3B1c2hfY2FsbGJhY2s7XG4gXHR9IGVsc2UgaWYgKHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPT0gXHUwMDI2YmFsYW5jZV9wdXNoX2NhbGxiYWNrKSB7XG4gXHRcdHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPSBOVUxMO1xuQEAgLTExMTUwLDcgJiM0MzsxMTE1MCw3IEBAIHN0cnVjdCBzY2hlZF9jaGFuZ2VfY3R4ICpzY2hlZF9jaGFuZ2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnRcbiBcdCAqIE11c3QgZXhjbHVzaXZlbHkgdXNlIG1hdGNoZWQgZmxhZ3Mgc2luY2UgdGhpcyBpcyBib3RoIGRlcXVldWUgYW5kXG4gXHQgKiBlbnF1ZXVlLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UoZmxhZ3MgXHUwMDI2IDB4RkZGRjAwMDApO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChmbGFncyBcdTAwMjYgMHhGRkZGMDAwMCk7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcbiBcbkBAIC0xMTE5OCw3ICYjNDM7MTExOTgsNyBAQCB2b2lkIHNjaGVkX2NoYW5nZV9lbmQoc3RydWN0IHNjaGVkX2NoYW5nZV9jdHggKmN0eClcbiBcdC8qXG4gXHQgKiBDaGFuZ2luZyBjbGFzcyB3aXRob3V0ICpRVUVVRV9DTEFTUyBpcyBiYWQuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShwLVx1MDAzZXNjaGVkX2NsYXNzICE9IGN0eC1cdTAwM2VjbGFzcyBcdTAwMjZcdTAwMjYgIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IEVOUVVFVUVfQ0xBU1MpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY2hlZF9jbGFzcyAhPSBjdHgtXHUwMDNlY2xhc3MgXHUwMDI2XHUwMDI2ICEoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBFTlFVRVVFX0NMQVNTKSk7XG4gXG4gXHRpZiAoKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgRU5RVUVVRV9DTEFTUykgXHUwMDI2XHUwMDI2IHAtXHUwMDNlc2NoZWRfY2xhc3MtXHUwMDNlc3dpdGNoaW5nX3RvKVxuIFx0XHRwLVx1MDAzZXNjaGVkX2NsYXNzLVx1MDAzZXN3aXRjaGluZ190byhycSwgcCk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC9jb3JlX3NjaGVkLmNcbmluZGV4IDczYjZiMjQyNjkxMTliLi5lYzg4ZWQ3ZDhlZTg3NyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlX3NjaGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlX3NjaGVkLmNcbkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzY2hlZF9jb3JlX3VwZGF0ZV9jb29raWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0ICogYSBjb29raWUgdW50aWwgYWZ0ZXIgd2UmIzM5O3ZlIHJlbW92ZWQgaXQsIHdlIG11c3QgaGF2ZSBjb3JlIHNjaGVkdWxpbmdcbiBcdCAqIGVuYWJsZWQgaGVyZS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKChwLVx1MDAzZWNvcmVfY29va2llIHx8IGNvb2tpZSkgXHUwMDI2XHUwMDI2ICFzY2hlZF9jb3JlX2VuYWJsZWQocnEpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoKHAtXHUwMDNlY29yZV9jb29raWUgfHwgY29va2llKSBcdTAwMjZcdTAwMjYgIXNjaGVkX2NvcmVfZW5hYmxlZChycSkpO1xuIFxuIFx0aWYgKHNjaGVkX2NvcmVfZW5xdWV1ZWQocCkpXG4gXHRcdHNjaGVkX2NvcmVfZGVxdWV1ZShycSwgcCwgREVRVUVVRV9TQVZFKTtcbkBAIC0yNDksNyAmIzQzOzI0OSw3IEBAIHZvaWQgX19zY2hlZF9jb3JlX2FjY291bnRfZm9yY2VpZGxlKHN0cnVjdCBycSAqcnEpXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcbiBcbi1cdFdBUk5fT05fT05DRSghcnEtXHUwMDNlY29yZS1cdTAwM2Vjb3JlX2ZvcmNlaWRsZV9jb3VudCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX2NvdW50KTtcbiBcbiBcdGlmIChycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX3N0YXJ0ID09IDApXG4gXHRcdHJldHVybjtcbkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHZvaWQgX19zY2hlZF9jb3JlX2FjY291bnRfZm9yY2VpZGxlKHN0cnVjdCBycSAqcnEpXG4gXG4gXHRycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX3N0YXJ0ID0gbm93O1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRSghcnEtXHUwMDNlY29yZS1cdTAwM2Vjb3JlX2ZvcmNlaWRsZV9vY2N1cGF0aW9uKSkge1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJxLVx1MDAzZWNvcmUtXHUwMDNlY29yZV9mb3JjZWlkbGVfb2NjdXBhdGlvbikpIHtcbiBcdFx0LyogY2FuJiMzOTt0IGJlIGZvcmNlZCBpZGxlIHdpdGhvdXQgYSBydW5uaW5nIHRhc2sgKi9cbiBcdH0gZWxzZSBpZiAocnEtXHUwMDNlY29yZS1cdTAwM2Vjb3JlX2ZvcmNlaWRsZV9jb3VudCBcdTAwM2UgMSB8fFxuIFx0XHQgICBycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX29jY3VwYXRpb24gXHUwMDNlIDEpIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9jcHVkZWFkbGluZS5jXG5pbmRleCAwYTJiN2UzMGZkMTBjMS4uZTMwNWE4ZTk5M2UyN2MgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmNcbkBAIC0xNDksNyAmIzQzOzE0OSw3IEBAIGludCBjcHVkbF9maW5kKHN0cnVjdCBjcHVkbCAqY3AsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdH0gZWxzZSB7XG4gXHRcdGludCBiZXN0X2NwdSA9IGNwdWRsX21heGltdW0oY3ApO1xuIFxuLVx0XHRXQVJOX09OKGJlc3RfY3B1ICE9IC0xIFx1MDAyNlx1MDAyNiAhY3B1X3ByZXNlbnQoYmVzdF9jcHUpKTtcbiYjNDM7XHRcdFdBUk5fT05fREVGRVJSRUQoYmVzdF9jcHUgIT0gLTEgXHUwMDI2XHUwMDI2ICFjcHVfcHJlc2VudChiZXN0X2NwdSkpO1xuIFxuIFx0XHRpZiAoY3B1bWFza190ZXN0X2NwdShiZXN0X2NwdSwgXHUwMDI2cC1cdTAwM2VjcHVzX21hc2spIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgZGxfdGltZV9iZWZvcmUoZGxfc2UtXHUwMDNlZGVhZGxpbmUsIGNwLVx1MDAzZWVsZW1lbnRzWzBdLmRsKSkge1xuQEAgLTE3Nyw3ICYjNDM7MTc3LDcgQEAgdm9pZCBjcHVkbF9jbGVhcihzdHJ1Y3QgY3B1ZGwgKmNwLCBpbnQgY3B1LCBib29sIG9ubGluZSlcbiBcdGludCBvbGRfaWR4LCBuZXdfY3B1O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFdBUk5fT04oIWNwdV9wcmVzZW50KGNwdSkpO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQoIWNwdV9wcmVzZW50KGNwdSkpO1xuIFxuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbkBAIC0yMjAsNyAmIzQzOzIyMCw3IEBAIHZvaWQgY3B1ZGxfc2V0KHN0cnVjdCBjcHVkbCAqY3AsIGludCBjcHUsIHU2NCBkbClcbiBcdGludCBvbGRfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFdBUk5fT04oIWNwdV9wcmVzZW50KGNwdSkpO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQoIWNwdV9wcmVzZW50KGNwdSkpO1xuIFxuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jXG5pbmRleCA3ZGI0Yzg3ZGY4M2IwYS4uODYzYWM3NTA5MTkyZjcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2RlYWRsaW5lLmNcbkBAIC0yMTcsOCAmIzQzOzIxNyw4IEBAIHZvaWQgX19hZGRfcnVubmluZ19idyh1NjQgZGxfYncsIHN0cnVjdCBkbF9ycSAqZGxfcnEpXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxX29mX2RsX3JxKGRsX3JxKSk7XG4gXHRkbF9ycS1cdTAwM2VydW5uaW5nX2J3ICYjNDM7PSBkbF9idztcbi1cdFdBUk5fT05fT05DRShkbF9ycS1cdTAwM2VydW5uaW5nX2J3IFx1MDAzYyBvbGQpOyAvKiBvdmVyZmxvdyAqL1xuLVx0V0FSTl9PTl9PTkNFKGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgXHUwMDNlIGRsX3JxLVx1MDAzZXRoaXNfYncpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkbF9ycS1cdTAwM2VydW5uaW5nX2J3IFx1MDAzYyBvbGQpOyAvKiBvdmVyZmxvdyAqL1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkbF9ycS1cdTAwM2VydW5uaW5nX2J3IFx1MDAzZSBkbF9ycS1cdTAwM2V0aGlzX2J3KTtcbiBcdC8qIGtpY2sgY3B1ZnJlcSAoc2VlIHRoZSBjb21tZW50IGluIGtlcm5lbC9zY2hlZC9zY2hlZC5oKS4gKi9cbiBcdGNwdWZyZXFfdXBkYXRlX3V0aWwocnFfb2ZfZGxfcnEoZGxfcnEpLCAwKTtcbiB9XG5AQCAtMjMwLDcgJiM0MzsyMzAsNyBAQCB2b2lkIF9fc3ViX3J1bm5pbmdfYncodTY0IGRsX2J3LCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZl9kbF9ycShkbF9ycSkpO1xuIFx0ZGxfcnEtXHUwMDNlcnVubmluZ19idyAtPSBkbF9idztcbi1cdFdBUk5fT05fT05DRShkbF9ycS1cdTAwM2VydW5uaW5nX2J3IFx1MDAzZSBvbGQpOyAvKiB1bmRlcmZsb3cgKi9cbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2Ugb2xkKTsgLyogdW5kZXJmbG93ICovXG4gXHRpZiAoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2Ugb2xkKVxuIFx0XHRkbF9ycS1cdTAwM2VydW5uaW5nX2J3ID0gMDtcbiBcdC8qIGtpY2sgY3B1ZnJlcSAoc2VlIHRoZSBjb21tZW50IGluIGtlcm5lbC9zY2hlZC9zY2hlZC5oKS4gKi9cbkBAIC0yNDQsNyAmIzQzOzI0NCw3IEBAIHZvaWQgX19hZGRfcnFfYncodTY0IGRsX2J3LCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZl9kbF9ycShkbF9ycSkpO1xuIFx0ZGxfcnEtXHUwMDNldGhpc19idyAmIzQzOz0gZGxfYnc7XG4tXHRXQVJOX09OX09OQ0UoZGxfcnEtXHUwMDNldGhpc19idyBcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtXHUwMDNldGhpc19idyBcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cbiB9XG4gXG4gc3RhdGljIGlubGluZVxuQEAgLTI1NCwxMCAmIzQzOzI1NCwxMCBAQCB2b2lkIF9fc3ViX3JxX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSlcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTtcbiBcdGRsX3JxLVx1MDAzZXRoaXNfYncgLT0gZGxfYnc7XG4tXHRXQVJOX09OX09OQ0UoZGxfcnEtXHUwMDNldGhpc19idyBcdTAwM2Ugb2xkKTsgLyogdW5kZXJmbG93ICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVx1MDAzZXRoaXNfYncgXHUwMDNlIG9sZCk7IC8qIHVuZGVyZmxvdyAqL1xuIFx0aWYgKGRsX3JxLVx1MDAzZXRoaXNfYncgXHUwMDNlIG9sZClcbiBcdFx0ZGxfcnEtXHUwMDNldGhpc19idyA9IDA7XG4tXHRXQVJOX09OX09OQ0UoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2UgZGxfcnEtXHUwMDNldGhpc19idyk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgXHUwMDNlIGRsX3JxLVx1MDAzZXRoaXNfYncpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lXG5AQCAtMzM1LDcgJiM0MzszMzUsNyBAQCB2b2lkIGNhbmNlbF9pbmFjdGl2ZV90aW1lcihzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiBcbiBzdGF0aWMgdm9pZCBkbF9jaGFuZ2VfdXRpbGl6YXRpb24oc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgbmV3X2J3KVxuIHtcbi1cdFdBUk5fT05fT05DRShwLVx1MDAzZWRsLmZsYWdzIFx1MDAyNiBTQ0hFRF9GTEFHX1NVR09WKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VkbC5mbGFncyBcdTAwMjYgU0NIRURfRkxBR19TVUdPVik7XG4gXG4gXHRpZiAodGFza19vbl9ycV9xdWV1ZWQocCkpXG4gXHRcdHJldHVybjtcbkBAIC00MTYsNyAmIzQzOzQxNiw3IEBAIHN0YXRpYyB2b2lkIHRhc2tfbm9uX2NvbnRlbmRpbmcoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIGJvb2wgZGxfdGFzaylcbiBcdGlmIChkbF9lbnRpdHlfaXNfc3BlY2lhbChkbF9zZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdFdBUk5fT04oZGxfc2UtXHUwMDNlZGxfbm9uX2NvbnRlbmRpbmcpO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQoZGxfc2UtXHUwMDNlZGxfbm9uX2NvbnRlbmRpbmcpO1xuIFxuIFx0emVyb2xhZ190aW1lID0gZGxfc2UtXHUwMDNlZGVhZGxpbmUgLVxuIFx0XHQgZGl2NjRfbG9uZygoZGxfc2UtXHUwMDNlcnVudGltZSAqIGRsX3NlLVx1MDAzZWRsX3BlcmlvZCksXG5AQCAtNTgyLDcgJiM0Mzs1ODIsNyBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlX3B1c2hhYmxlX2RsX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiBcdHN0cnVjdCByYl9ub2RlICpsZWZ0bW9zdDtcbiBcbi1cdFdBUk5fT05fT05DRSghUkJfRU1QVFlfTk9ERShcdTAwMjZwLVx1MDAzZXB1c2hhYmxlX2RsX3Rhc2tzKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFSQl9FTVBUWV9OT0RFKFx1MDAyNnAtXHUwMDNlcHVzaGFibGVfZGxfdGFza3MpKTtcbiBcbiBcdGxlZnRtb3N0ID0gcmJfYWRkX2NhY2hlZChcdTAwMjZwLVx1MDAzZXB1c2hhYmxlX2RsX3Rhc2tzLFxuIFx0XHRcdFx0IFx1MDAyNnJxLVx1MDAzZWRsLnB1c2hhYmxlX2RsX3Rhc2tzX3Jvb3QsXG5AQCAtNjY0LDcgJiM0Mzs2NjQsNyBAQCBzdGF0aWMgc3RydWN0IHJxICpkbF90YXNrX29mZmxpbmVfbWlncmF0aW9uKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcFxuIFx0XHRcdCAqIEZhaWxlZCB0byBmaW5kIGFueSBzdWl0YWJsZSBDUFUuXG4gXHRcdFx0ICogVGhlIHRhc2sgd2lsbCBuZXZlciBjb21lIGJhY2shXG4gXHRcdFx0ICovXG4tXHRcdFx0V0FSTl9PTl9PTkNFKGRsX2JhbmR3aWR0aF9lbmFibGVkKCkpO1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfYmFuZHdpZHRoX2VuYWJsZWQoKSk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZiBhZG1pc3Npb24gY29udHJvbCBpcyBkaXNhYmxlZCB3ZVxuQEAgLTc1Niw4ICYjNDM7NzU2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25ld19kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXG4gXHRzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpO1xuIFx0c3RydWN0IHJxICpycSA9IHJxX29mX2RsX3JxKGRsX3JxKTtcbiBcbi1cdFdBUk5fT04oaXNfZGxfYm9vc3RlZChkbF9zZSkpO1xuLVx0V0FSTl9PTihkbF90aW1lX2JlZm9yZShycV9jbG9jayhycSksIGRsX3NlLVx1MDAzZWRlYWRsaW5lKSk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRChpc19kbF9ib29zdGVkKGRsX3NlKSk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRChkbF90aW1lX2JlZm9yZShycV9jbG9jayhycSksIGRsX3NlLVx1MDAzZWRlYWRsaW5lKSk7XG4gXG4gXHQvKlxuIFx0ICogV2UgYXJlIHJhY2luZyB3aXRoIHRoZSBkZWFkbGluZSB0aW1lci4gU28sIGRvIG5vdGhpbmcgYmVjYXVzZVxuQEAgLTgwMSw3ICYjNDM7ODAxLDcgQEAgc3RhdGljIHZvaWQgcmVwbGVuaXNoX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiBcdHN0cnVjdCBkbF9ycSAqZGxfcnEgPSBkbF9ycV9vZl9zZShkbF9zZSk7XG4gXHRzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfZGxfcnEoZGxfcnEpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHBpX29mKGRsX3NlKS1cdTAwM2VkbF9ydW50aW1lIFx1MDAzYz0gMCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHBpX29mKGRsX3NlKS1cdTAwM2VkbF9ydW50aW1lIFx1MDAzYz0gMCk7XG4gXG4gXHQvKlxuIFx0ICogVGhpcyBjb3VsZCBiZSB0aGUgY2FzZSBmb3IgYSAhLWRsIHRhc2sgdGhhdCBpcyBib29zdGVkLlxuQEAgLTk3NSw3ICYjNDM7OTc1LDcgQEAgdXBkYXRlX2RsX3JldmlzZWRfd2FrZXVwKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBzdHJ1Y3QgcnEgKnJxKVxuIFx0ICpcbiBcdCAqIFNlZSB1cGRhdGVfZGxfZW50aXR5KCkgY29tbWVudHMgZm9yIGZ1cnRoZXIgZGV0YWlscy5cbiBcdCAqL1xuLVx0V0FSTl9PTihkbF90aW1lX2JlZm9yZShkbF9zZS1cdTAwM2VkZWFkbGluZSwgcnFfY2xvY2socnEpKSk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRChkbF90aW1lX2JlZm9yZShkbF9zZS1cdTAwM2VkZWFkbGluZSwgcnFfY2xvY2socnEpKSk7XG4gXG4gXHRkbF9zZS1cdTAwM2VydW50aW1lID0gKGRsX3NlLVx1MDAzZWRsX2RlbnNpdHkgKiBsYXhpdHkpIFx1MDAzZVx1MDAzZSBCV19TSElGVDtcbiB9XG5AQCAtMTA4MCw3ICYjNDM7MTA4MCw3IEBAIHN0YXRpYyBpbnQgc3RhcnRfZGxfdGltZXIoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXG4gXHQgKiAoY3VycmVudCB1IFx1MDAzZSBVKS5cbiBcdCAqL1xuIFx0aWYgKGRsX3NlLVx1MDAzZWRsX2RlZmVyX2FybWVkKSB7XG4tXHRcdFdBUk5fT05fT05DRSghZGxfc2UtXHUwMDNlZGxfdGhyb3R0bGVkKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfc2UtXHUwMDNlZGxfdGhyb3R0bGVkKTtcbiBcdFx0YWN0ID0gbnNfdG9fa3RpbWUoZGxfc2UtXHUwMDNlZGVhZGxpbmUgLSBkbF9zZS1cdTAwM2VydW50aW1lKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIGFjdCA9IGRlYWRsaW5lIC0gcmVsLWRlYWRsaW5lICYjNDM7IHBlcmlvZCAqL1xuQEAgLTE0NTEsNyAmIzQzOzE0NTEsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9kbF9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgczY0XG4gXHRcdC8qXG4gXHRcdCAqIE5vbi1zZXJ2ZXJzIHdvdWxkIG5ldmVyIGdldCB0aW1lIGFjY291bnRlZCB3aGlsZSB0aHJvdHRsZWQuXG4gXHRcdCAqL1xuLVx0XHRXQVJOX09OX09OQ0UoIWRsX3NlcnZlcihkbF9zZSkpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFkbF9zZXJ2ZXIoZGxfc2UpKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogV2hpbGUgdGhlIHNlcnZlciBpcyBtYXJrZWQgaWRsZSwgZG8gbm90IHB1c2ggb3V0IHRoZVxuQEAgLTE0OTIsNyAmIzQzOzE0OTIsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9kbF9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgczY0XG4gXHRcdCAqIGFuZCBxdWV1ZSByaWdodCBhd2F5LiBPdGhlcndpc2Ugbm90aGluZyBtaWdodCBxdWV1ZSBpdC4gVGhhdCYjMzk7cyBzaW1pbGFyXG4gXHRcdCAqIHRvIHdoYXQgZW5xdWV1ZV9kbF9lbnRpdHkoKSBkb2VzIG9uIHN0YXJ0X2RsX3RpbWVyPT0wLiBGb3Igbm93LCBqdXN0IHdhcm4uXG4gXHRcdCAqL1xuLVx0XHRXQVJOX09OX09OQ0UoIXN0YXJ0X2RsX3RpbWVyKGRsX3NlKSk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXN0YXJ0X2RsX3RpbWVyKGRsX3NlKSk7XG4gXG4gXHRcdHJldHVybjtcbiBcdH1cbkBAIC0xODAxLDcgJiM0MzsxODAxLDcgQEAgdm9pZCBkbF9zZXJ2ZXJfc3RhcnQoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXG4gXHQgKi9cbiBcdHJxLVx1MDAzZWRvbm9yLVx1MDAzZXNjaGVkX2NsYXNzLVx1MDAzZXVwZGF0ZV9jdXJyKHJxKTtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoIWNwdV9vbmxpbmUoY3B1X29mKHJxKSkpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNwdV9vbmxpbmUoY3B1X29mKHJxKSkpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR0cmFjZV9zY2hlZF9kbF9zZXJ2ZXJfc3RhcnRfdHAoZGxfc2UsIGNwdV9vZihycSksIGRsX2dldF90eXBlKGRsX3NlLCBycSkpO1xuQEAgLTIwNzMsNyAmIzQzOzIwNzMsNyBAQCB2b2lkIGluY19kbF90YXNrcyhzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IGRsX3JxICpkbF9ycSlcbiBzdGF0aWMgaW5saW5lXG4gdm9pZCBkZWNfZGxfdGFza3Moc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIHN0cnVjdCBkbF9ycSAqZGxfcnEpXG4ge1xuLVx0V0FSTl9PTighZGxfcnEtXHUwMDNlZGxfbnJfcnVubmluZyk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRCghZGxfcnEtXHUwMDNlZGxfbnJfcnVubmluZyk7XG4gXHRkbF9ycS1cdTAwM2VkbF9ucl9ydW5uaW5nLS07XG4gXG4gXHRpZiAoIWRsX3NlcnZlcihkbF9zZSkpXG5AQCAtMjE2NSw3ICYjNDM7MjE2NSw3IEBAIHN0YXRpYyB2b2lkIF9fZW5xdWV1ZV9kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXG4ge1xuIFx0c3RydWN0IGRsX3JxICpkbF9ycSA9IGRsX3JxX29mX3NlKGRsX3NlKTtcbiBcbi1cdFdBUk5fT05fT05DRSghUkJfRU1QVFlfTk9ERShcdTAwMjZkbF9zZS1cdTAwM2VyYl9ub2RlKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFSQl9FTVBUWV9OT0RFKFx1MDAyNmRsX3NlLVx1MDAzZXJiX25vZGUpKTtcbiBcbiBcdHJiX2FkZF9jYWNoZWQoXHUwMDI2ZGxfc2UtXHUwMDNlcmJfbm9kZSwgXHUwMDI2ZGxfcnEtXHUwMDNlcm9vdCwgX19kbF9sZXNzKTtcbiBcbkBAIC0yMTg5LDcgJiM0MzsyMTg5LDcgQEAgc3RhdGljIHZvaWQgX19kZXF1ZXVlX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiBzdGF0aWMgdm9pZFxuIGVucXVldWVfZGxfZW50aXR5KHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBpbnQgZmxhZ3MpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKG9uX2RsX3JxKGRsX3NlKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKG9uX2RsX3JxKGRsX3NlKSk7XG4gXG4gXHR1cGRhdGVfc3RhdHNfZW5xdWV1ZV9kbChkbF9ycV9vZl9zZShkbF9zZSksIGRsX3NlLCBmbGFncyk7XG4gXG5AQCAtMjYxMSw3ICYjNDM7MjYxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fcGlja190YXNrX2RsKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0ZGxfc2UgPSBwaWNrX25leHRfZGxfZW50aXR5KGRsX3JxKTtcbi1cdFdBUk5fT05fT05DRSghZGxfc2UpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfc2UpO1xuIFxuIFx0aWYgKGRsX3NlcnZlcihkbF9zZSkpIHtcbiBcdFx0cCA9IGRsX3NlLVx1MDAzZXNlcnZlcl9waWNrX3Rhc2soZGxfc2UsIHJmKTtcbkBAIC0yODIzLDEyICYjNDM7MjgyMywxMiBAQCBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfcHVzaGFibGVfZGxfdGFzayhzdHJ1Y3QgcnEgKnJxKVxuIFx0aWYgKCFwKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFdBUk5fT05fT05DRShycS1cdTAwM2VjcHUgIT0gdGFza19jcHUocCkpO1xuLVx0V0FSTl9PTl9PTkNFKHRhc2tfY3VycmVudChycSwgcCkpO1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlbnJfY3B1c19hbGxvd2VkIFx1MDAzYz0gMSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZWNwdSAhPSB0YXNrX2NwdShwKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfY3VycmVudChycSwgcCkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZW5yX2NwdXNfYWxsb3dlZCBcdTAwM2M9IDEpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7XG4tXHRXQVJOX09OX09OQ0UoIWRsX3Rhc2socCkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghdGFza19vbl9ycV9xdWV1ZWQocCkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfdGFzayhwKSk7XG4gXG4gXHRyZXR1cm4gcDtcbiB9XG5AQCAtMjk0NCw3ICYjNDM7Mjk0NCw3IEBAIHN0YXRpYyBpbnQgcHVzaF9kbF90YXNrKHN0cnVjdCBycSAqcnEpXG4gXHRpZiAoaXNfbWlncmF0aW9uX2Rpc2FibGVkKG5leHRfdGFzaykpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKFdBUk5fT04obmV4dF90YXNrID09IHJxLVx1MDAzZWN1cnIpKVxuJiM0MztcdGlmIChXQVJOX09OX0RFRkVSUkVEKG5leHRfdGFzayA9PSBycS1cdTAwM2VjdXJyKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBXZSBtaWdodCByZWxlYXNlIHJxIGxvY2sgKi9cbkBAIC0zMDUwLDggJiM0MzszMDUwLDggQEAgc3RhdGljIHZvaWQgcHVsbF9kbF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSlcbiBcdFx0ICovXG4gXHRcdGlmIChwIFx1MDAyNlx1MDAyNiBkbF90aW1lX2JlZm9yZShwLVx1MDAzZWRsLmRlYWRsaW5lLCBkbWluKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGRsX3Rhc2tfaXNfZWFybGllc3RfZGVhZGxpbmUocCwgdGhpc19ycSkpIHtcbi1cdFx0XHRXQVJOX09OKHAgPT0gc3JjX3JxLVx1MDAzZWN1cnIpO1xuLVx0XHRcdFdBUk5fT04oIXRhc2tfb25fcnFfcXVldWVkKHApKTtcbiYjNDM7XHRcdFx0V0FSTl9PTl9ERUZFUlJFRChwID09IHNyY19ycS1cdTAwM2VjdXJyKTtcbiYjNDM7XHRcdFx0V0FSTl9PTl9ERUZFUlJFRCghdGFza19vbl9ycV9xdWV1ZWQocCkpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogVGhlbiB3ZSBwdWxsIGlmZiBwIGhhcyBhY3R1YWxseSBhbiBlYXJsaWVyXG5AQCAtMzEwOSw3ICYjNDM7MzEwOSw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIHtcbiBcdHN0cnVjdCBycSAqcnE7XG4gXG4tXHRXQVJOX09OX09OQ0UoIWRsX3Rhc2socCkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfdGFzayhwKSk7XG4gXG4gXHRycSA9IHRhc2tfcnEocCk7XG4gXHQvKlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQuY1xuaW5kZXggNWQyZDE5NDczYTgyZTguLjQ3ZDNhNGMxNjQ1NWFjIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0LmNcbkBAIC01MTIsMTIgJiM0Mzs1MTIsMTIgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAgKiBTbyBpZiBrZl90YXNrc1tdIGlzIHNldCwgQHAmIzM5O3Mgc2NoZWR1bGVyLXByb3RlY3RlZCBmaWVsZHMgYXJlIHN0YWJsZS5cbiAgKlxuICAqIGtmX3Rhc2tzW10gY2FuIG5vdCBzdGFjaywgc28gdGFzay1iYXNlZCBTQ1ggb3BzIG11c3Qgbm90IG5lc3QuIFRoZVxuLSAqIFdBUk5fT05fT05DRSgpIGluIGVhY2ggbWFjcm8gY2F0Y2hlcyBhIHJlLWVudHJ5IG9mIGFueSBvZiB0aGUgdGhyZWUgdmFyaWFudHNcbi0gKiB3aGlsZSBhIHByZXZpb3VzIG9uZSBpcyBzdGlsbCBpbiBwcm9ncmVzcy5cbiYjNDM7ICogV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCkgaW4gZWFjaCBtYWNybyBjYXRjaGVzIGEgcmUtZW50cnkgb2YgYW55IG9mIHRoZSB0aHJlZVxuJiM0MzsgKiB2YXJpYW50cyB3aGlsZSBhIHByZXZpb3VzIG9uZSBpcyBzdGlsbCBpbiBwcm9ncmVzcy5cbiAgKi9cbiAjZGVmaW5lIFNDWF9DQUxMX09QX1RBU0soc2NoLCBvcCwgbG9ja2VkX3JxLCB0YXNrLCBhcmdzLi4uKVx0XHRcdFxcXG4gZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdFdBUk5fT05fT05DRShjdXJyZW50LVx1MDAzZXNjeC5rZl90YXNrc1swXSk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdKTtcdFx0XHRcXFxuIFx0Y3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrO1x0XHRcdFx0XHRcXFxuIFx0U0NYX0NBTExfT1AoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2ssICMjYXJncyk7XHRcdFx0XFxcbiBcdGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdID0gTlVMTDtcdFx0XHRcdFx0XFxcbkBAIC01MjYsNyAmIzQzOzUyNiw3IEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gI2RlZmluZSBTQ1hfQ0FMTF9PUF9UQVNLX1JFVChzY2gsIG9wLCBsb2NrZWRfcnEsIHRhc2ssIGFyZ3MuLi4pXHRcdFx0XFxcbiAoe1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdF9fdHlwZW9mX18oKHNjaCktXHUwMDNlb3BzLm9wKHRhc2ssICMjYXJncykpIF9fcmV0O1x0XHRcdFx0XFxcbi1cdFdBUk5fT05fT05DRShjdXJyZW50LVx1MDAzZXNjeC5rZl90YXNrc1swXSk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdKTtcdFx0XHRcXFxuIFx0Y3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrO1x0XHRcdFx0XHRcXFxuIFx0X19yZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2ssICMjYXJncyk7XHRcdFxcXG4gXHRjdXJyZW50LVx1MDAzZXNjeC5rZl90YXNrc1swXSA9IE5VTEw7XHRcdFx0XHRcdFxcXG5AQCAtNTM2LDcgJiM0Mzs1MzYsNyBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICNkZWZpbmUgU0NYX0NBTExfT1BfMlRBU0tTX1JFVChzY2gsIG9wLCBsb2NrZWRfcnEsIHRhc2swLCB0YXNrMSwgYXJncy4uLilcdFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3R5cGVvZl9fKChzY2gpLVx1MDAzZW9wcy5vcCh0YXNrMCwgdGFzazEsICMjYXJncykpIF9fcmV0O1x0XHRcdFxcXG4tXHRXQVJOX09OX09OQ0UoY3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0pO1x0XHRcdFx0XHRcXFxuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjdXJyZW50LVx1MDAzZXNjeC5rZl90YXNrc1swXSk7XHRcdFx0XFxcbiBcdGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdID0gdGFzazA7XHRcdFx0XHRcdFxcXG4gXHRjdXJyZW50LVx1MDAzZXNjeC5rZl90YXNrc1sxXSA9IHRhc2sxO1x0XHRcdFx0XHRcXFxuIFx0X19yZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2swLCB0YXNrMSwgIyNhcmdzKTtcdFxcXG5AQCAtNjg3LDcgJiM0Mzs2ODcsNyBAQCBzdGF0aWMgYm9vbCBubGRzcV9jdXJzb3JfbG9zdF90YXNrKHN0cnVjdCBzY3hfZHNxX2xpc3Rfbm9kZSAqY3Vyc29yLFxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdC8qIGlmIEBwIGhhcyBzdGF5ZWQgb24gQGRzcSwgaXRzIHJxIGNvdWxkbiYjMzk7dCBoYXZlIGNoYW5nZWQgKi9cbi1cdGlmIChXQVJOX09OX09OQ0UocnEgIT0gdGFza19ycShwKSkpXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChycSAhPSB0YXNrX3JxKHApKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG5AQCAtMTI4Miw3ICYjNDM7MTI4Miw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkdWxlX3JlZW5xX2xvY2FsKHN0cnVjdCBycSAqcnEsIHU2NCByZWVucV9mbGFncylcbiB7XG4gXHRzdHJ1Y3Qgc2N4X3NjaGVkICpyb290ID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKHNjeF9yb290KTtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoIXJvb3QpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJvb3QpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzY2hlZHVsZV9kc3FfcmVlbnEocm9vdCwgXHUwMDI2cnEtXHUwMDNlc2N4LmxvY2FsX2RzcSwgcmVlbnFfZmxhZ3MsIHJxKTtcbkBAIC0xMzc5LDcgJiM0MzsxMzc5LDcgQEAgc3RhdGljIHZvaWQgZHNxX2luY19ucihzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgZW5cbiBcdCAqL1xuIFx0aWYgKGVucV9mbGFncyBcdTAwMjYgU0NYX0VOUV9JTU1FRCkge1xuIFx0XHRpZiAodW5saWtlbHkoZHNxLVx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKSB7XG4tXHRcdFx0V0FSTl9PTl9PTkNFKCEoZW5xX2ZsYWdzIFx1MDAyNiBTQ1hfRU5RX0dEU1FfRkFMTEJBQ0spKTtcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCEoZW5xX2ZsYWdzIFx1MDAyNiBTQ1hfRU5RX0dEU1FfRkFMTEJBQ0spKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdFx0cC1cdTAwM2VzY3guZmxhZ3MgfD0gU0NYX1RBU0tfSU1NRUQ7XG5AQCAtMTM4OCw3ICYjNDM7MTM4OCw3IEBAIHN0YXRpYyB2b2lkIGRzcV9pbmNfbnIoc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVuXG4gXHRpZiAocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0lNTUVEKSB7XG4gXHRcdHN0cnVjdCBycSAqcnEgPSBjb250YWluZXJfb2YoZHNxLCBzdHJ1Y3QgcnEsIHNjeC5sb2NhbF9kc3EpO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKGRzcS1cdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLVx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKVxuIFx0XHRcdHJldHVybjtcbiBcbiBcdFx0cnEtXHUwMDNlc2N4Lm5yX2ltbWVkJiM0MzsmIzQzOztcbkBAIC0xNDEwLDggJiM0MzsxNDEwLDggQEAgc3RhdGljIHZvaWQgZHNxX2RlY19ucihzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0aWYgKHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfVEFTS19JTU1FRCkge1xuIFx0XHRzdHJ1Y3QgcnEgKnJxID0gY29udGFpbmVyX29mKGRzcSwgc3RydWN0IHJxLCBzY3gubG9jYWxfZHNxKTtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRShkc3EtXHUwMDNlaWQgIT0gU0NYX0RTUV9MT0NBTCkgfHxcbi1cdFx0ICAgIFdBUk5fT05fT05DRShycS1cdTAwM2VzY3gubnJfaW1tZWQgXHUwMDNjPSAwKSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLVx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpIHx8XG4mIzQzO1x0XHQgICAgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZXNjeC5ucl9pbW1lZCBcdTAwM2M9IDApKVxuIFx0XHRcdHJldHVybjtcbiBcbiBcdFx0cnEtXHUwMDNlc2N4Lm5yX2ltbWVkLS07XG5AQCAtMTUyMSw5ICYjNDM7MTUyMSw5IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoX2VucXVldWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgcnEgKnJxLFxuIHtcbiBcdGJvb2wgaXNfbG9jYWwgPSBkc3EtXHUwMDNlaWQgPT0gU0NYX0RTUV9MT0NBTDtcbiBcbi1cdFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5kc3EgfHwgIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xuLVx0V0FSTl9PTl9PTkNFKChwLVx1MDAzZXNjeC5kc3FfZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0RTUV9PTl9QUklRKSB8fFxuLVx0XHQgICAgICFSQl9FTVBUWV9OT0RFKFx1MDAyNnAtXHUwMDNlc2N4LmRzcV9wcmlxKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2N4LmRzcSB8fCAhbGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKChwLVx1MDAzZXNjeC5kc3FfZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0RTUV9PTl9QUklRKSB8fFxuJiM0MztcdFx0XHQgICAgICAhUkJfRU1QVFlfTk9ERShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfcHJpcSkpO1xuIFxuIFx0aWYgKCFpc19sb2NhbCkge1xuIFx0XHRyYXdfc3Bpbl9sb2NrX25lc3RlZChcdTAwMjZkc3EtXHUwMDNlbG9jayxcbkBAIC0xNjQ2LDcgJiM0MzsxNjQ2LDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hfZW5xdWV1ZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsXG4gc3RhdGljIHZvaWQgdGFza191bmxpbmtfZnJvbV9kc3Eoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0XHRcdFx0IHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxKVxuIHtcbi1cdFdBUk5fT05fT05DRShsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNlc2N4LmRzcV9saXN0Lm5vZGUpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQobGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4gXG4gXHRpZiAocC1cdTAwM2VzY3guZHNxX2ZsYWdzIFx1MDAyNiBTQ1hfVEFTS19EU1FfT05fUFJJUSkge1xuIFx0XHRyYl9lcmFzZShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfcHJpcSwgXHUwMDI2ZHNxLVx1MDAzZXByaXEpO1xuQEAgLTE3MDksNyAmIzQzOzE3MDksNyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaF9kZXF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdFx0ICogaG9sZGluZ19jcHUgd2hpY2ggdGVsbHMgZGlzcGF0Y2hfdG9fbG9jYWxfZHNxKCkgdGhhdCBpdCBsb3N0XG4gXHRcdCAqIHRoZSByYWNlLlxuIFx0XHQgKi9cbi1cdFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNlc2N4LmRzcV9saXN0Lm5vZGUpKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4gXHRcdHAtXHUwMDNlc2N4LmhvbGRpbmdfY3B1ID0gLTE7XG4gXHR9XG4gXHRwLVx1MDAzZXNjeC5kc3EgPSBOVUxMO1xuQEAgLTE3ODcsOCAmIzQzOzE3ODcsOCBAQCBzdGF0aWMgdm9pZCBtYXJrX2RpcmVjdF9kaXNwYXRjaChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5kZHNwX2RzcV9pZCAhPSBTQ1hfRFNRX0lOVkFMSUQpO1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2N4LmRkc3BfZW5xX2ZsYWdzKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guZGRzcF9kc3FfaWQgIT0gU0NYX0RTUV9JTlZBTElEKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guZGRzcF9lbnFfZmxhZ3MpO1xuIFxuIFx0cC1cdTAwM2VzY3guZGRzcF9kc3FfaWQgPSBkc3FfaWQ7XG4gXHRwLVx1MDAzZXNjeC5kZHNwX2VucV9mbGFncyA9IGVucV9mbGFncztcbkBAIC0xODU1LDcgJiM0MzsxODU1LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0X2Rpc3BhdGNoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5kc3EgfHwgIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2N4LmRzcSB8fCAhbGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4gXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSxcbiBcdFx0XHQgICAgICBcdTAwMjZycS1cdTAwM2VzY3guZGRzcF9kZWZlcnJlZF9sb2NhbHMpO1xuIFx0XHRzY2hlZHVsZV9kZWZlcnJlZF9sb2NrZWQocnEpO1xuQEAgLTE4ODgsNyAmIzQzOzE4ODgsNyBAQCBzdGF0aWMgdm9pZCBkb19lbnF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgZW5xX2ZsYWdzLFxuIFx0c3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3E7XG4gXHR1bnNpZ25lZCBsb25nIHFzZXE7XG4gXG4tXHRXQVJOX09OX09OQ0UoIShwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfUVVFVUVEKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCEocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpO1xuIFxuIFx0LyogaW50ZXJuYWwgbW92ZW1lbnRzIC0gcnEgbWlncmF0aW9uIC8gUkVTVE9SRSAqL1xuIFx0aWYgKHN0aWNreV9jcHUgPT0gY3B1X29mKHJxKSlcbkBAIC0xOTM4LDExICYjNDM7MTkzOCwxMSBAQCBzdGF0aWMgdm9pZCBkb19lbnF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgZW5xX2ZsYWdzLFxuIFx0LyogRFNRIGJ5cGFzcyBkaWRuJiMzOTt0IHRyaWdnZXIsIGVucXVldWUgb24gdGhlIEJQRiBzY2hlZHVsZXIgKi9cbiBcdHFzZXEgPSBycS1cdTAwM2VzY3gub3BzX3FzZXEmIzQzOyYjNDM7IFx1MDAzY1x1MDAzYyBTQ1hfT1BTU19RU0VRX1NISUZUO1xuIFxuLVx0V0FSTl9PTl9PTkNFKGF0b21pY19sb25nX3JlYWQoXHUwMDI2cC1cdTAwM2VzY3gub3BzX3N0YXRlKSAhPSBTQ1hfT1BTU19OT05FKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoYXRvbWljX2xvbmdfcmVhZChcdTAwMjZwLVx1MDAzZXNjeC5vcHNfc3RhdGUpICE9IFNDWF9PUFNTX05PTkUpO1xuIFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNnAtXHUwMDNlc2N4Lm9wc19zdGF0ZSwgU0NYX09QU1NfUVVFVUVJTkcgfCBxc2VxKTtcbiBcbiBcdGRkc3BfdGFza3AgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGlyZWN0X2Rpc3BhdGNoX3Rhc2spO1xuLVx0V0FSTl9PTl9PTkNFKCpkZHNwX3Rhc2twKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoKmRkc3BfdGFza3ApO1xuIFx0KmRkc3BfdGFza3AgPSBwO1xuIFxuIFx0U0NYX0NBTExfT1BfVEFTSyhzY2gsIGVucXVldWUsIHJxLCBwLCBlbnFfZmxhZ3MpO1xuQEAgLTIwMzksNyAmIzQzOzIwMzksNyBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlX3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNvcmVfZW5xX1xuIFx0XHRzdGlja3lfY3B1ID0gY3B1X29mKHJxKTtcbiBcbiBcdGlmIChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfUVVFVUVEKSB7XG4tXHRcdFdBUk5fT05fT05DRSghdGFza19ydW5uYWJsZShwKSk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXRhc2tfcnVubmFibGUocCkpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbkBAIC0yMTU5LDcgJiM0MzsyMTU5LDcgQEAgc3RhdGljIGJvb2wgZGVxdWV1ZV90YXNrX3NjeChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjb3JlX2RlcV9cbiBcdFx0ZGVxX2ZsYWdzIHw9IFNDWF9ERVFfU0NIRURfQ0hBTkdFO1xuIFxuIFx0aWYgKCEocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKHRhc2tfcnVubmFibGUocCkpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnVubmFibGUocCkpO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0yMjU2LDcgJiM0MzsyMjU2LDcgQEAgc3RhdGljIHZvaWQgbW92ZV9sb2NhbF90YXNrX3RvX2xvY2FsX2RzcShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNyY19kc3EtXHUwMDNlbG9jayk7XG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKGRzdF9ycSk7XG4gXG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgXHUwMDNlPSAwKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgXHUwMDNlPSAwKTtcbiBcbiBcdGlmIChlbnFfZmxhZ3MgXHUwMDI2IChTQ1hfRU5RX0hFQUQgfCBTQ1hfRU5RX1BSRUVNUFQpKVxuIFx0XHRsaXN0X2FkZChcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlLCBcdTAwMjZkc3RfZHNxLVx1MDAzZWxpc3QpO1xuQEAgLTIyOTksOCAmIzQzOzIyOTksOCBAQCBzdGF0aWMgdm9pZCBtb3ZlX3JlbW90ZV90YXNrX3RvX2xvY2FsX2RzcShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlbnFfZmxhZ3MsXG4gXHQgKiB0cnVuY2F0ZSB0aGUgdXBwZXIgMzIgYml0LiBBcyB3ZSBvd24gQHJxLCB3ZSBjYW4gcGFzcyB0aGVtIHRocm91Z2hcbiBcdCAqIEBycS1cdTAwM2VzY3guZXh0cmFfZW5xX2ZsYWdzIGluc3RlYWQuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRSghY3B1bWFza190ZXN0X2NwdShjcHVfb2YoZHN0X3JxKSwgcC1cdTAwM2VjcHVzX3B0cikpO1xuLVx0V0FSTl9PTl9PTkNFKGRzdF9ycS1cdTAwM2VzY3guZXh0cmFfZW5xX2ZsYWdzKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNwdW1hc2tfdGVzdF9jcHUoY3B1X29mKGRzdF9ycSksIHAtXHUwMDNlY3B1c19wdHIpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZHN0X3JxLVx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MpO1xuIFx0ZHN0X3JxLVx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MgPSBlbnFfZmxhZ3M7XG4gXHRhY3RpdmF0ZV90YXNrKGRzdF9ycSwgcCwgMCk7XG4gXHRkc3RfcnEtXHUwMDNlc2N4LmV4dHJhX2VucV9mbGFncyA9IDA7XG5AQCAtMjMzMSw3ICYjNDM7MjMzMSw3IEBAIHN0YXRpYyBib29sIHRhc2tfY2FuX3J1bl9vbl9yZW1vdGVfcnEoc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxuIHtcbiBcdHMzMiBjcHUgPSBjcHVfb2YocnEpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHRhc2tfY3B1KHApID09IGNwdSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfY3B1KHApID09IGNwdSk7XG4gXG4gXHQvKlxuIFx0ICogSWYgQHAgaGFzIG1pZ3JhdGlvbiBkaXNhYmxlZCwgQHAtXHUwMDNlY3B1c19wdHIgaXMgdXBkYXRlZCB0byBjb250YWluIG9ubHlcbkBAIC0yNDExLDcgJiM0MzsyNDExLDcgQEAgc3RhdGljIGJvb2wgdW5saW5rX2RzcV9hbmRfbG9ja19zcmNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkc3EtXHUwMDNlbG9jayk7XG4gXG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgXHUwMDNlPSAwKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgXHUwMDNlPSAwKTtcbiBcdHRhc2tfdW5saW5rX2Zyb21fZHNxKHAsIGRzcSk7XG4gXHRwLVx1MDAzZXNjeC5ob2xkaW5nX2NwdSA9IGNwdTtcbiBcbkBAIC0yNDIwLDcgJiM0MzsyNDIwLDcgQEAgc3RhdGljIGJvb2wgdW5saW5rX2RzcV9hbmRfbG9ja19zcmNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFxuIFx0LyogdGFza19ycSBjb3VsZG4mIzM5O3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJiMzOTtyZSBzdGlsbCB0aGUgaG9sZGluZyBjcHUgKi9cbiBcdHJldHVybiBsaWtlbHkocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgPT0gY3B1KSBcdTAwMjZcdTAwMjZcbi1cdFx0IVdBUk5fT05fT05DRShzcmNfcnEgIT0gdGFza19ycShwKSk7XG4mIzQzO1x0XHQhV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNyY19ycSAhPSB0YXNrX3JxKHApKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgY29uc3VtZV9yZW1vdGVfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEsXG5AQCAtMjYzMCw3ICYjNDM7MjYzMCw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoX3RvX2xvY2FsX2RzcShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsXG4gXG4gXHQvKiB0YXNrX3JxIGNvdWxkbiYjMzk7dCBoYXZlIGNoYW5nZWQgaWYgd2UmIzM5O3JlIHN0aWxsIHRoZSBob2xkaW5nIGNwdSAqL1xuIFx0aWYgKGxpa2VseShwLVx1MDAzZXNjeC5ob2xkaW5nX2NwdSA9PSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhV0FSTl9PTl9PTkNFKHNyY19ycSAhPSB0YXNrX3JxKHApKSkge1xuJiM0MztcdCAgICAhV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNyY19ycSAhPSB0YXNrX3JxKHApKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBJZiBAcCBpcyBzdGF5aW5nIG9uIHRoZSBzYW1lIHJxLCB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGdvXG4gXHRcdCAqIHRocm91Z2ggdGhlIGZ1bGwgZGVhY3RpdmF0ZS9hY3RpdmF0ZSBjeWNsZS4gT3B0aW1pemUgYnlcbkBAIC0zMDk5LDcgJiM0MzszMDk5LDcgQEAgc3RhdGljIHZvaWQgcHV0X3ByZXZfdGFza19zY3goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0XHQgKiB3aGljaCBzaG91bGQgdHJpZ2dlciBhbiBleHBsaWNpdCBmb2xsb3ctdXAgc2NoZWR1bGluZyBldmVudC5cbiBcdFx0ICovXG4gXHRcdGlmIChuZXh0IFx1MDAyNlx1MDAyNiBzY2hlZF9jbGFzc19hYm92ZShcdTAwMjZleHRfc2NoZWRfY2xhc3MsIG5leHQtXHUwMDNlc2NoZWRfY2xhc3MpKSB7XG4tXHRcdFx0V0FSTl9PTl9PTkNFKCEoc2NoLVx1MDAzZW9wcy5mbGFncyBcdTAwMjYgU0NYX09QU19FTlFfTEFTVCkpO1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIShzY2gtXHUwMDNlb3BzLmZsYWdzIFx1MDAyNiBTQ1hfT1BTX0VOUV9MQVNUKSk7XG4gXHRcdFx0ZG9fZW5xdWV1ZV90YXNrKHJxLCBwLCBTQ1hfRU5RX0xBU1QsIC0xKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRkb19lbnF1ZXVlX3Rhc2socnEsIHAsIDAsIC0xKTtcbkBAIC0zMjAxLDcgJiM0MzszMjAxLDcgQEAgZG9fcGlja190YXNrX3NjeChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLCBib29sIGZvcmNlX3NjeClcbiBcdGtlZXBfcHJldiA9IHJxLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1JRX0JBTF9LRUVQO1xuIFx0aWYgKHVubGlrZWx5KGtlZXBfcHJldiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICBwcmV2LVx1MDAzZXNjaGVkX2NsYXNzICE9IFx1MDAyNmV4dF9zY2hlZF9jbGFzcykpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKHNjeF9lbmFibGVfc3RhdGUoKSA9PSBTQ1hfRU5BQkxFRCk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2N4X2VuYWJsZV9zdGF0ZSgpID09IFNDWF9FTkFCTEVEKTtcbiBcdFx0a2VlcF9wcmV2ID0gZmFsc2U7XG4gXHR9XG4gXG5AQCAtMzMzMiw3ICYjNDM7MzMzMiw3IEBAIHN0YXRpYyBpbnQgc2VsZWN0X3Rhc2tfcnFfc2N4KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHByZXZfY3B1LCBpbnQgd2FrZV9mbGFnXG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqKmRkc3BfdGFza3A7XG4gXG4gXHRcdGRkc3BfdGFza3AgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGlyZWN0X2Rpc3BhdGNoX3Rhc2spO1xuLVx0XHRXQVJOX09OX09OQ0UoKmRkc3BfdGFza3ApO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCpkZHNwX3Rhc2twKTtcbiBcdFx0KmRkc3BfdGFza3AgPSBwO1xuIFxuIFx0XHR0aGlzX3JxKCktXHUwMDNlc2N4LmluX3NlbGVjdF9jcHUgPSB0cnVlO1xuQEAgLTM2MjAsNyAmIzQzOzM2MjAsNyBAQCBzdGF0aWMgdm9pZCBfX3NjeF9lbmFibGVfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdCAqIHRyYW5zaXRpb25zIGFyZSBjb25zaXN0ZW50LCB0aGUgZmxhZyBzaG91bGQgYWx3YXlzIGJlIGNsZWFyXG4gXHQgKiBoZXJlLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0lOX0NVU1RPRFkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7XG4gXG4gXHQvKlxuIFx0ICogU2V0IHRoZSB3ZWlnaHQgYmVmb3JlIGNhbGxpbmcgb3BzLmVuYWJsZSgpIHNvIHRoYXQgdGhlIHNjaGVkdWxlclxuQEAgLTM2NTEsNyAmIzQzOzM2NTEsNyBAQCBzdGF0aWMgdm9pZCBzY3hfZGlzYWJsZV90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0c3RydWN0IHJxICpycSA9IHRhc2tfcnEocCk7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcbi1cdFdBUk5fT05fT05DRShzY3hfZ2V0X3Rhc2tfc3RhdGUocCkgIT0gU0NYX1RBU0tfRU5BQkxFRCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjeF9nZXRfdGFza19zdGF0ZShwKSAhPSBTQ1hfVEFTS19FTkFCTEVEKTtcbiBcbiBcdGNsZWFyX2RpcmVjdF9kaXNwYXRjaChwKTtcbiBcbkBAIC0zNjY0LDcgJiM0MzszNjY0LDcgQEAgc3RhdGljIHZvaWQgc2N4X2Rpc2FibGVfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdCAqIHRyYW5zaXRpb25zIGFyZSBjb25zaXN0ZW50LCB0aGUgZmxhZyBzaG91bGQgYWx3YXlzIGJlIGNsZWFyXG4gXHQgKiBoZXJlLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0lOX0NVU1RPRFkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fc2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG5AQCAtMzY4OSw3ICYjNDM7MzY4OSw3IEBAIHN0YXRpYyB2b2lkIF9fc2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4gXHRcdHNjeF9kaXNhYmxlX3Rhc2soc2NoLCBwKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OX09OQ0UodHJ1ZSk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQodHJ1ZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC0zNzI2LDcgJiM0MzszNzI2LDcgQEAgc3RhdGljIHZvaWQgc2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4gXHQgKiBwYXRoLCBzbyBpdCYjMzk7cyBhbHdheXMgY2xlYXIgd2hlbiBAcCBhcnJpdmVzIGhlcmUgaW4gJVNDWF9UQVNLX05PTkUuXG4gXHQgKi9cbiBcdGlmIChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfU1VCX0lOSVQpIHtcbi1cdFx0aWYgKCFXQVJOX09OX09OQ0UoIXNjeF9lbmFibGluZ19zdWJfc2NoZWQpKVxuJiM0MztcdFx0aWYgKCFXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNjeF9lbmFibGluZ19zdWJfc2NoZWQpKVxuIFx0XHRcdHNjeF9zdWJfaW5pdF9jYW5jZWxfdGFzayhzY3hfZW5hYmxpbmdfc3ViX3NjaGVkLCBwKTtcbiBcdFx0cC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2PSB+U0NYX1RBU0tfU1VCX0lOSVQ7XG4gXHR9XG5AQCAtMzgxOCw3ICYjNDM7MzgxOCw3IEBAIHZvaWQgc2N4X2NhbmNlbF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdFx0c3RydWN0IHJxX2ZsYWdzIHJmO1xuIFxuIFx0XHRycSA9IHRhc2tfcnFfbG9jayhwLCBcdTAwMjZyZik7XG4tXHRcdFdBUk5fT05fT05DRShzY3hfZ2V0X3Rhc2tfc3RhdGUocCkgXHUwMDNlPSBTQ1hfVEFTS19SRUFEWSk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2N4X2dldF90YXNrX3N0YXRlKHApIFx1MDAzZT0gU0NYX1RBU0tfUkVBRFkpO1xuIFx0XHRzY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHNjeF90YXNrX3NjaGVkKHApLCBwKTtcbiBcdFx0dGFza19ycV91bmxvY2socnEsIHAsIFx1MDAyNnJmKTtcbiBcdH1cbkBAIC0zOTg2LDcgJiM0MzszOTg2LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19kZHNwX2RlZmVycmVkX2xvY2FscyhzdHJ1Y3QgcnEgKnJxKVxuIFx0XHRjbGVhcl9kaXJlY3RfZGlzcGF0Y2gocCk7XG4gXG4gXHRcdGRzcSA9IGZpbmRfZHNxX2Zvcl9kaXNwYXRjaChzY2gsIHJxLCBkc3FfaWQsIHRhc2tfY3B1KHApKTtcbi1cdFx0aWYgKCFXQVJOX09OX09OQ0UoZHNxLVx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKVxuJiM0MztcdFx0aWYgKCFXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLVx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKVxuIFx0XHRcdGRpc3BhdGNoX3RvX2xvY2FsX2RzcShzY2gsIHJxLCBkc3EsIHAsIGVucV9mbGFncyk7XG4gXHR9XG4gfVxuQEAgLTQwNDEsNyAmIzQzOzQwNDEsNyBAQCBzdGF0aWMgdTMyIHJlZW5xX2xvY2FsKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSwgdTY0IHJlZW5xX2ZsYWdzKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKHJlZW5xX2ZsYWdzIFx1MDAyNiBfX1NDWF9SRUVOUV9UU1JfTUFTSykpXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChyZWVucV9mbGFncyBcdTAwMjYgX19TQ1hfUkVFTlFfVFNSX01BU0spKVxuIFx0XHRyZWVucV9mbGFncyBcdTAwMjY9IH5fX1NDWF9SRUVOUV9UU1JfTUFTSztcbiBcdGlmIChycV9pc19vcGVuKHJxLCAwKSlcbiBcdFx0cmVlbnFfZmxhZ3MgfD0gU0NYX1JFRU5RX1RTUl9SUV9PUEVOO1xuQEAgLTQwNzgsNyAmIzQzOzQwNzgsNyBAQCBzdGF0aWMgdTMyIHJlZW5xX2xvY2FsKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSwgdTY0IHJlZW5xX2ZsYWdzKVxuIFxuIFx0XHRkaXNwYXRjaF9kZXF1ZXVlKHJxLCBwKTtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfUkVFTlFfUkVBU09OX01BU0spKVxuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfUkVFTlFfUkVBU09OX01BU0spKVxuIFx0XHRcdHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNj0gflNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLO1xuIFx0XHRwLVx1MDAzZXNjeC5mbGFncyB8PSByZWFzb247XG4gXG5AQCAtNDE5OSw3ICYjNDM7NDE5OSw3IEBAIHN0YXRpYyB2b2lkIHJlZW5xX3VzZXIoc3RydWN0IHJxICpycSwgc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EsIHU2NCByZWVucV9mbGFnXG4gXHRcdGRpc3BhdGNoX2RlcXVldWVfbG9ja2VkKHAsIGRzcSk7XG4gXHRcdHJhd19zcGluX3VubG9jayhcdTAwMjZkc3EtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGlmIChXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLKSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLKSlcbiBcdFx0XHRwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjY9IH5TQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSztcbiBcdFx0cC1cdTAwM2VzY3guZmxhZ3MgfD0gcmVhc29uO1xuIFxuQEAgLTQzNjAsNyAmIzQzOzQzNjAsNyBAQCBpbnQgc2N4X2Nncm91cF9jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcbiBcdFx0c3RydWN0IGNncm91cCAqZnJvbSA9IHRnX2NncnAodGFza19ncm91cChwKSk7XG4gXHRcdHN0cnVjdCBjZ3JvdXAgKnRvID0gdGdfY2dycChjc3NfdGcoY3NzKSk7XG4gXG4tXHRcdFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5jZ3JwX21vdmluZ19mcm9tKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5jZ3JwX21vdmluZ19mcm9tKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogc2NoZWRfbW92ZV90YXNrKCkgb21pdHMgaWRlbnRpdHkgbWlncmF0aW9ucy4gTGV0JiMzOTtzIG1hdGNoIHRoZVxuQEAgLTQ2MTcsNyAmIzQzOzQ2MTcsNyBAQCBzdGF0aWMgdm9pZCBleGl0X2RzcShzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSlcbiBcdFx0ICogVGhlcmUgbXVzdCBoYXZlIGJlZW4gYSBSQ1UgZ3JhY2UgcGVyaW9kIHNpbmNlIHRoZSBsYXN0XG4gXHRcdCAqIGluc2VydGlvbiBhbmQgQGRzcSBzaG91bGQgYmUgb2ZmIHRoZSBkZWZlcnJlZCBsaXN0IGJ5IG5vdy5cbiBcdFx0ICovXG4tXHRcdGlmIChXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZHJ1LVx1MDAzZW5vZGUpKSkge1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZkcnUtXHUwMDNlbm9kZSkpKSB7XG4gXHRcdFx0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKFx1MDAyNnJxLVx1MDAzZXNjeC5kZWZlcnJlZF9yZWVucV9sb2NrKTtcbiBcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRydS1cdTAwM2Vub2RlKTtcbiBcdFx0fVxuQEAgLTQ3NDUsNyAmIzQzOzQ3NDUsNyBAQCBzdGF0aWMgaW50IHNjeF9jZ3JvdXBfaW5pdChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4gXHRcdHRnLVx1MDAzZXNjeC5mbGFncyB8PSBTQ1hfVEdfSU5JVEVEO1xuIFx0fVxuIFxuLVx0V0FSTl9PTl9PTkNFKHNjeF9jZ3JvdXBfZW5hYmxlZCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjeF9jZ3JvdXBfZW5hYmxlZCk7XG4gXHRzY3hfY2dyb3VwX2VuYWJsZWQgPSB0cnVlO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNDg0OCw3ICYjNDM7NDg0OCw3IEBAIHN0YXRpYyB2b2lkIHNjeF9zY2hlZF9mcmVlX3JjdV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0ICogcGVyaW9kLiBBcyB0aGF0IGJsb2NrcyBuZXcgZGVmZXJyYWxzLCBhbGxcbiBcdFx0ICogZGVmZXJyZWRfcmVlbnFfbG9jYWxfbm9kZSYjMzk7cyBtdXN0IGJlIG9mZi1saXN0IGJ5IG5vdy5cbiBcdFx0ICovXG4tXHRcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZwY3B1LVx1MDAzZWRlZmVycmVkX3JlZW5xX2xvY2FsLm5vZGUpKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZwY3B1LVx1MDAzZWRlZmVycmVkX3JlZW5xX2xvY2FsLm5vZGUpKTtcbiBcbiBcdFx0ZXhpdF9kc3EoYnlwYXNzX2RzcShzY2gsIGNwdSkpO1xuIFx0fVxuQEAgLTUzMjQsNyAmIzQzOzUzMjQsNyBAQCBzdGF0aWMgYm9vbCBpbmNfYnlwYXNzX2RlcHRoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNjeF9ieXBhc3NfbG9jayk7XG4gXG4tXHRXQVJOX09OX09OQ0Uoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCBcdTAwM2MgMCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjaC1cdTAwM2VieXBhc3NfZGVwdGggXHUwMDNjIDApO1xuIFx0V1JJVEVfT05DRShzY2gtXHUwMDNlYnlwYXNzX2RlcHRoLCBzY2gtXHUwMDNlYnlwYXNzX2RlcHRoICYjNDM7IDEpO1xuIFx0aWYgKHNjaC1cdTAwM2VieXBhc3NfZGVwdGggIT0gMSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTUzMzksNyAmIzQzOzUzMzksNyBAQCBzdGF0aWMgYm9vbCBkZWNfYnlwYXNzX2RlcHRoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNjeF9ieXBhc3NfbG9jayk7XG4gXG4tXHRXQVJOX09OX09OQ0Uoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCBcdTAwM2MgMSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjaC1cdTAwM2VieXBhc3NfZGVwdGggXHUwMDNjIDEpO1xuIFx0V1JJVEVfT05DRShzY2gtXHUwMDNlYnlwYXNzX2RlcHRoLCBzY2gtXHUwMDNlYnlwYXNzX2RlcHRoIC0gMSk7XG4gXHRpZiAoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCAhPSAwKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtNTM2MCw3ICYjNDM7NTM2MCw3IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9ieXBhc3NfZHNwKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdCAqIEBzY2gtXHUwMDNlYnlwYXNzX2RlcHRoIHRyYW5zaXRpb25pbmcgZnJvbSAwIHRvIDEgdHJpZ2dlcnMgZW5hYmxpbmcuXG4gXHQgKiBTaG91bGRuJiMzOTt0IHN0YWdnZXIuXG4gXHQgKi9cbi1cdGlmIChXQVJOX09OX09OQ0UodGVzdF9hbmRfc2V0X2JpdCgwLCBcdTAwMjZzY2gtXHUwMDNlYnlwYXNzX2RzcF9jbGFpbSkpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQodGVzdF9hbmRfc2V0X2JpdCgwLCBcdTAwMjZzY2gtXHUwMDNlYnlwYXNzX2RzcF9jbGFpbSkpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKlxuQEAgLTUzODAsMTEgJiM0Mzs1MzgwLDExIEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9ieXBhc3NfZHNwKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdCAqIEJ1bXAgZW5hYmxlIGRlcHRoIG9uIGJvdGggQHNjaCBhbmQgYnlwYXNzIGRpc3BhdGNoIGhvc3QuXG4gXHQgKi9cbiBcdHJldCA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnNjaC1cdTAwM2VieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7XG4tXHRXQVJOX09OX09OQ0UocmV0IFx1MDAzYz0gMCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJldCBcdTAwM2M9IDApO1xuIFxuIFx0aWYgKGhvc3QgIT0gc2NoKSB7XG4gXHRcdHJldCA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmhvc3QtXHUwMDNlYnlwYXNzX2RzcF9lbmFibGVfZGVwdGgpO1xuLVx0XHRXQVJOX09OX09OQ0UocmV0IFx1MDAzYz0gMCk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocmV0IFx1MDAzYz0gMCk7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTU0MDUsMTEgJiM0Mzs1NDA1LDExIEBAIHN0YXRpYyB2b2lkIGRpc2FibGVfYnlwYXNzX2RzcChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJldCA9IGF0b21pY19kZWNfcmV0dXJuKFx1MDAyNnNjaC1cdTAwM2VieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7XG4tXHRXQVJOX09OX09OQ0UocmV0IFx1MDAzYyAwKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocmV0IFx1MDAzYyAwKTtcbiBcbiBcdGlmIChzY3hfcGFyZW50KHNjaCkpIHtcbiBcdFx0cmV0ID0gYXRvbWljX2RlY19yZXR1cm4oXHUwMDI2c2N4X3BhcmVudChzY2gpLVx1MDAzZWJ5cGFzc19kc3BfZW5hYmxlX2RlcHRoKTtcbi1cdFx0V0FSTl9PTl9PTkNFKHJldCBcdTAwM2MgMCk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocmV0IFx1MDAzYyAwKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2ZhaXIuYyBiL2tlcm5lbC9zY2hlZC9mYWlyLmNcbmluZGV4IDNlYmVjMTg2Zjk4MjM2Li4xMjEzZTc3NjY1ZmU5MyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9mYWlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9mYWlyLmNcbkBAIC00MDQsNyAmIzQzOzQwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2RlbF9sZWFmX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9saXN0X2xlYWZfY2ZzX3JxKHN0cnVjdCBycSAqcnEpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZXRtcF9hbG9uZV9icmFuY2ggIT0gXHUwMDI2cnEtXHUwMDNlbGVhZl9jZnNfcnFfbGlzdCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZXRtcF9hbG9uZV9icmFuY2ggIT0gXHUwMDI2cnEtXHUwMDNlbGVhZl9jZnNfcnFfbGlzdCk7XG4gfVxuIFxuIC8qIEl0ZXJhdGUgdGhyb3VnaCBhbGwgbGVhZiBjZnNfcnEmIzM5O3Mgb24gYSBydW5xdWV1ZSAqL1xuQEAgLTY4OSw3ICYjNDM7Njg5LDcgQEAgX19zdW1fd192cnVudGltZV9hZGQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcbiBcdHM2NCB3X3ZydW50aW1lLCBrZXkgPSBlbnRpdHlfa2V5KGNmc19ycSwgc2UpO1xuIFxuIFx0d192cnVudGltZSA9IGtleSAqIHdlaWdodDtcbi1cdFdBUk5fT05fT05DRSgod192cnVudGltZSBcdTAwM2VcdTAwM2UgNjMpICE9ICh3X3ZydW50aW1lIFx1MDAzZVx1MDAzZSA2MikpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgod192cnVudGltZSBcdTAwM2VcdTAwM2UgNjMpICE9ICh3X3ZydW50aW1lIFx1MDAzZVx1MDAzZSA2MikpO1xuIFxuIFx0Y2ZzX3JxLVx1MDAzZXN1bV93X3ZydW50aW1lICYjNDM7PSB3X3ZydW50aW1lO1xuIFx0Y2ZzX3JxLVx1MDAzZXN1bV93ZWlnaHQgJiM0Mzs9IHdlaWdodDtcbkBAIC04NjEsNyAmIzQzOzg2MSw3IEBAIGJvb2wgdXBkYXRlX2VudGl0eV9sYWcoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcbiBcdHU2NCBhdnJ1bnRpbWUgPSBhdmdfdnJ1bnRpbWUoY2ZzX3JxKTtcbiBcdHM2NCB2bGFnID0gZW50aXR5X2xhZyhjZnNfcnEsIHNlLCBhdnJ1bnRpbWUpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCFzZS1cdTAwM2Vvbl9ycSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzZS1cdTAwM2Vvbl9ycSk7XG4gXG4gXHRpZiAoc2UtXHUwMDNlc2NoZWRfZGVsYXllZCkge1xuIFx0XHQvKiBwcmV2aW91cyB2bGFnIFx1MDAzYyAwIG90aGVyd2lzZSBzZSB3b3VsZCBub3QgYmUgZGVsYXllZCAqL1xuQEAgLTExNTMsNyAmIzQzOzExNTMsNyBAQCBzdGF0aWMgc3RydWN0IHNjaGVkX2VudGl0eSAqcGlja19lZXZkZihzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIGJvb2wgcHJvdGVjdClcbiBcdGlmIChzY2hlZF9mZWF0KFBJQ0tfQlVERFkpIFx1MDAyNlx1MDAyNiBwcm90ZWN0IFx1MDAyNlx1MDAyNlxuIFx0ICAgIGNmc19ycS1cdTAwM2VuZXh0IFx1MDAyNlx1MDAyNiBlbnRpdHlfZWxpZ2libGUoY2ZzX3JxLCBjZnNfcnEtXHUwMDNlbmV4dCkpIHtcbiBcdFx0LyogLVx1MDAzZW5leHQgd2lsbCBuZXZlciBiZSBkZWxheWVkICovXG4tXHRcdFdBUk5fT05fT05DRShjZnNfcnEtXHUwMDNlbmV4dC1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjZnNfcnEtXHUwMDNlbmV4dC1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiBcdFx0cmV0dXJuIGNmc19ycS1cdTAwM2VuZXh0O1xuIFx0fVxuIFxuQEAgLTQzMDIsOSAmIzQzOzQzMDIsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9hZF9hdmdfaXNfZGVjYXllZChzdHJ1Y3Qgc2NoZWRfYXZnICpzYSlcbiBcdCAqIE1ha2Ugc3VyZSB0aGF0IHJvdW5kaW5nIGFuZC9vciBwcm9wYWdhdGlvbiBvZiBQRUxUIHZhbHVlcyBuZXZlclxuIFx0ICogYnJlYWsgdGhpcy5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKHNhLVx1MDAzZWxvYWRfYXZnIHx8XG4tXHRcdCAgICAgIHNhLVx1MDAzZXV0aWxfYXZnIHx8XG4tXHRcdCAgICAgIHNhLVx1MDAzZXJ1bm5hYmxlX2F2Zyk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNhLVx1MDAzZWxvYWRfYXZnIHx8XG4mIzQzO1x0XHRcdCAgICAgIHNhLVx1MDAzZXV0aWxfYXZnIHx8XG4mIzQzO1x0XHRcdCAgICAgIHNhLVx1MDAzZXJ1bm5hYmxlX2F2Zyk7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtNTQ2MCw3ICYjNDM7NTQ2MCw3IEBAIHBsYWNlX2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCBpbnQgZmxhZ3MpXG4gXG4gXHRcdHdlaWdodCA9IGF2Z192cnVudGltZV93ZWlnaHQoY2ZzX3JxLCBzZS1cdTAwM2Vsb2FkLndlaWdodCk7XG4gXHRcdGxhZyAqPSBsb2FkICYjNDM7IHdlaWdodDtcbi1cdFx0aWYgKFdBUk5fT05fT05DRSghbG9hZCkpXG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsb2FkKSlcbiBcdFx0XHRsb2FkID0gMTtcbiBcdFx0bGFnID0gZGl2NjRfbG9uZyhsYWcsIGxvYWQpO1xuIFxuQEAgLTU2NTMsNyAmIzQzOzU2NTMsNyBAQCBkZXF1ZXVlX2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCBpbnQgZmxhZ3MpXG4gXHRjbGVhcl9idWRkaWVzKGNmc19ycSwgc2UpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBERVFVRVVFX0RFTEFZRUQpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKCFzZS1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRib29sIGRlbGF5ID0gc2xlZXA7XG4gXHRcdC8qXG5AQCAtNTY2Myw3ICYjNDM7NTY2Myw3IEBAIGRlcXVldWVfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBmbGFncylcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiAoREVRVUVVRV9TUEVDSUFMIHwgREVRVUVVRV9USFJPVFRMRSkpXG4gXHRcdFx0ZGVsYXkgPSBmYWxzZTtcbiBcbi1cdFx0V0FSTl9PTl9PTkNFKGRlbGF5IFx1MDAyNlx1MDAyNiBzZS1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkZWxheSBcdTAwMjZcdTAwMjYgc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4gXG4gXHRcdGlmIChzY2hlZF9mZWF0KERFTEFZX0RFUVVFVUUpIFx1MDAyNlx1MDAyNiBkZWxheSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFlbnRpdHlfZWxpZ2libGUoY2ZzX3JxLCBzZSkpIHtcbkBAIC01NzQ3LDcgJiM0Mzs1NzQ3LDcgQEAgc2V0X25leHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGJvb2wgZmlyc3QpXG4gXHR9XG4gXG4gXHR1cGRhdGVfc3RhdHNfY3Vycl9zdGFydChjZnNfcnEsIHNlKTtcbi1cdFdBUk5fT05fT05DRShjZnNfcnEtXHUwMDNlY3Vycik7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cdTAwM2VjdXJyKTtcbiBcdGNmc19ycS1cdTAwM2VjdXJyID0gc2U7XG4gXG4gXHQvKlxuQEAgLTU4MTQsNyAmIzQzOzU4MTQsNyBAQCBzdGF0aWMgdm9pZCBwdXRfcHJldl9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpwcmV2KVxuIFx0XHQvKiBpbiAhb25fcnEgY2FzZSwgdXBkYXRlIG9jY3VycmVkIGF0IGRlcXVldWUgKi9cbiBcdFx0dXBkYXRlX2xvYWRfYXZnKGNmc19ycSwgcHJldiwgMCk7XG4gXHR9XG4tXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZWN1cnIgIT0gcHJldik7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cdTAwM2VjdXJyICE9IHByZXYpO1xuIFx0Y2ZzX3JxLVx1MDAzZWN1cnIgPSBOVUxMO1xuIH1cbiBcbkBAIC02MDE1LDcgJiM0Mzs2MDE1LDcgQEAgc3RhdGljIHZvaWQgdGhyb3R0bGVfY2ZzX3JxX3dvcmsoc3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmspXG4gXHRzdHJ1Y3QgY2ZzX3JxICpjZnNfcnE7XG4gXHRzdHJ1Y3QgcnEgKnJxO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHAgIT0gY3VycmVudCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAgIT0gY3VycmVudCk7XG4gXHRwLVx1MDAzZXNjaGVkX3Rocm90dGxlX3dvcmsubmV4dCA9IFx1MDAyNnAtXHUwMDNlc2NoZWRfdGhyb3R0bGVfd29yaztcbiBcbiBcdC8qXG5AQCAtNjA0MSw3ICYjNDM7NjA0MSw3IEBAIHN0YXRpYyB2b2lkIHRocm90dGxlX2Nmc19ycV93b3JrKHN0cnVjdCBjYWxsYmFja19oZWFkICp3b3JrKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0cnEgPSBzY29wZS5ycTtcbiBcdFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbi1cdFx0V0FSTl9PTl9PTkNFKHAtXHUwMDNldGhyb3R0bGVkIHx8ICFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNldGhyb3R0bGVkIHx8ICFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xuIFx0XHRkZXF1ZXVlX3Rhc2tfZmFpcihycSwgcCwgREVRVUVVRV9TTEVFUCB8IERFUVVFVUVfVEhST1RUTEUpO1xuIFx0XHRsaXN0X2FkZChcdTAwMjZwLVx1MDAzZXRocm90dGxlX25vZGUsIFx1MDAyNmNmc19ycS1cdTAwM2V0aHJvdHRsZWRfbGltYm9fbGlzdCk7XG4gXHRcdC8qXG5AQCAtNjA3Miw3ICYjNDM7NjA3Miw3IEBAIHZvaWQgaW5pdF9jZnNfdGhyb3R0bGVfd29yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gc3RhdGljIHZvaWQgZGV0YWNoX3Rhc2tfY2ZzX3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4gc3RhdGljIHZvaWQgZGVxdWV1ZV90aHJvdHRsZWRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBmbGFncylcbiB7XG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzZS5vbl9ycSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2Uub25fcnEpO1xuIFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZXRocm90dGxlX25vZGUpO1xuIFxuIFx0LyogdGFzayBibG9ja2VkIGFmdGVyIHRocm90dGxlZCAqL1xuQEAgLTYwOTQsNyAmIzQzOzYwOTQsNyBAQCBzdGF0aWMgYm9vbCBlbnF1ZXVlX3Rocm90dGxlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IGNmc19ycV9vZihcdTAwMjZwLVx1MDAzZXNlKTtcbiBcbiBcdC8qIEBwIHNob3VsZCBoYXZlIGdvbmUgdGhyb3VnaCBkZXF1ZXVlX3Rocm90dGxlZF90YXNrKCkgZmlyc3QgKi9cbi1cdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXRocm90dGxlX25vZGUpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2V0aHJvdHRsZV9ub2RlKSk7XG4gXG4gXHQvKlxuIFx0ICogSWYgdGhlIHRocm90dGxlZCB0YXNrIEBwIGlzIGVucXVldWVkIHRvIGEgdGhyb3R0bGVkIGNmc19ycSxcbkBAIC02MTYyLDcgJiM0Mzs2MTYyLDcgQEAgc3RhdGljIGludCB0Z191bnRocm90dGxlX3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgdm9pZCAqZGF0YSlcbiBcbiBcdFx0Y2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9ja19zZWxmID0gMDtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRSgoczY0KWRlbHRhIFx1MDAzYyAwKSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoKHM2NClkZWx0YSBcdTAwM2MgMCkpXG4gXHRcdFx0ZGVsdGEgPSAwO1xuIFxuIFx0XHRjZnNfcnEtXHUwMDNldGhyb3R0bGVkX2Nsb2NrX3NlbGZfdGltZSAmIzQzOz0gZGVsdGE7XG5AQCAtNjIzMSw4ICYjNDM7NjIzMSw4IEBAIHN0YXRpYyBpbnQgdGdfdGhyb3R0bGVfZG93bihzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpXG4gXHRcdGNmc19ycS1cdTAwM2VwZWx0X2Nsb2NrX3Rocm90dGxlZCA9IDE7XG4gXHR9XG4gXG4tXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9ja19zZWxmKTtcbi1cdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZjZnNfcnEtXHUwMDNldGhyb3R0bGVkX2xpbWJvX2xpc3QpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoY2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9ja19zZWxmKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXHUwMDI2Y2ZzX3JxLVx1MDAzZXRocm90dGxlZF9saW1ib19saXN0KSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjI3Myw3ICYjNDM7NjI3Myw3IEBAIHN0YXRpYyBib29sIHRocm90dGxlX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXG4gXHQgKiB0aHJvdHRsZWQtbGlzdC4gIHJxLVx1MDAzZWxvY2sgcHJvdGVjdHMgY29tcGxldGlvbi5cbiBcdCAqL1xuIFx0Y2ZzX3JxLVx1MDAzZXRocm90dGxlZCA9IDE7XG4tXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9jayk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cdTAwM2V0aHJvdHRsZWRfY2xvY2spO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTYzODAsNyAmIzQzOzYzODAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX191bnRocm90dGxlX2Nmc19ycV9hc3luYyhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXG4gXHR9XG4gXG4gXHQvKiBBbHJlYWR5IGVucXVldWVkICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNmNmc19ycS1cdTAwM2V0aHJvdHRsZWRfY3NkX2xpc3QpKSlcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFx1MDAyNmNmc19ycS1cdTAwM2V0aHJvdHRsZWRfY3NkX2xpc3QpKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Zmlyc3QgPSBsaXN0X2VtcHR5KFx1MDAyNnJxLVx1MDAzZWNmc2JfY3NkX2xpc3QpO1xuQEAgLTYzOTMsNyAmIzQzOzYzOTMsNyBAQCBzdGF0aWMgdm9pZCB1bnRocm90dGxlX2Nmc19ycV9hc3luYyhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZihjZnNfcnEpKTtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoIWNmc19ycV90aHJvdHRsZWQoY2ZzX3JxKSB8fFxuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNmc19ycV90aHJvdHRsZWQoY2ZzX3JxKSB8fFxuIFx0ICAgIGNmc19ycS1cdTAwM2VydW50aW1lX3JlbWFpbmluZyBcdTAwM2M9IDApKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtNjQyOSw3ICYjNDM7NjQyOSw3IEBAIHN0YXRpYyBib29sIGRpc3RyaWJ1dGVfY2ZzX3J1bnRpbWUoc3RydWN0IGNmc19iYW5kd2lkdGggKmNmc19iKVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0LyogQnkgdGhlIGFib3ZlIGNoZWNrcywgdGhpcyBzaG91bGQgbmV2ZXIgYmUgdHJ1ZSAqL1xuLVx0XHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZXJ1bnRpbWVfcmVtYWluaW5nIFx1MDAzZSAwKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjZnNfcnEtXHUwMDNlcnVudGltZV9yZW1haW5pbmcgXHUwMDNlIDApO1xuIFxuIFx0XHRyYXdfc3Bpbl9sb2NrKFx1MDAyNmNmc19iLVx1MDAzZWxvY2spO1xuIFx0XHRydW50aW1lID0gLWNmc19ycS1cdTAwM2VydW50aW1lX3JlbWFpbmluZyAmIzQzOyAxO1xuQEAgLTY0NTAsNyAmIzQzOzY0NTAsNyBAQCBzdGF0aWMgYm9vbCBkaXN0cmlidXRlX2Nmc19ydW50aW1lKHN0cnVjdCBjZnNfYmFuZHdpZHRoICpjZnNfYilcbiBcdFx0XHRcdCAqIFdlIGN1cnJlbnRseSBvbmx5IGV4cGVjdCB0byBiZSB1bnRocm90dGxpbmdcbiBcdFx0XHRcdCAqIGEgc2luZ2xlIGNmc19ycSBsb2NhbGx5LlxuIFx0XHRcdFx0ICovXG4tXHRcdFx0XHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bG9jYWxfdW50aHJvdHRsZSkpO1xuJiM0MztcdFx0XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZsb2NhbF91bnRocm90dGxlKSk7XG4gXHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNmc19ycS1cdTAwM2V0aHJvdHRsZWRfY3NkX2xpc3QsXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNmxvY2FsX3VudGhyb3R0bGUpO1xuIFx0XHRcdH1cbkBAIC02NDc1LDcgJiM0Mzs2NDc1LDcgQEAgc3RhdGljIGJvb2wgZGlzdHJpYnV0ZV9jZnNfcnVudGltZShzdHJ1Y3QgY2ZzX2JhbmR3aWR0aCAqY2ZzX2IpXG4gXG4gXHRcdHJxX3VubG9ja19pcnFyZXN0b3JlKHJxLCBcdTAwMjZyZik7XG4gXHR9XG4tXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bG9jYWxfdW50aHJvdHRsZSkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZsb2NhbF91bnRocm90dGxlKSk7XG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbkBAIC03MDQ4LDcgJiM0Mzs3MDQ4LDcgQEAgc3RhdGljIHZvaWQgaHJ0aWNrX3N0YXJ0X2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0dTY0IHZkZWx0YTtcbiBcdHU2NCBkZWx0YTtcbiBcbi1cdFdBUk5fT05fT05DRSh0YXNrX3JxKHApICE9IHJxKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19ycShwKSAhPSBycSk7XG4gXG4gXHRpZiAocnEtXHUwMDNlY2ZzLmhfbnJfcXVldWVkIFx1MDAzYz0gMSlcbiBcdFx0cmV0dXJuO1xuQEAgLTcxNzEsOCAmIzQzOzcxNzEsOCBAQCByZXF1ZXVlX2RlbGF5ZWRfZW50aXR5KHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKVxuIFx0ICogQmVjYXVzZSBhIGRlbGF5ZWQgZW50aXR5IGlzIG9uZSB0aGF0IGlzIHN0aWxsIG9uXG4gXHQgKiB0aGUgcnVucXVldWUgY29tcGV0aW5nIHVudGlsIGVsZWdpYmlsaXR5LlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UoIXNlLVx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xuLVx0V0FSTl9PTl9PTkNFKCFzZS1cdTAwM2Vvbl9ycSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzZS1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLVx1MDAzZW9uX3JxKTtcbiBcbiBcdGlmICh1cGRhdGVfZW50aXR5X2xhZyhjZnNfcnEsIHNlKSkge1xuIFx0XHRjZnNfcnEtXHUwMDNlbnJfcXVldWVkLS07XG5AQCAtNzQwOSw4ICYjNDM7NzQwOSw4IEBAIHN0YXRpYyBpbnQgZGVxdWV1ZV9lbnRpdGllcyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxuIFx0XHRycS1cdTAwM2VuZXh0X2JhbGFuY2UgPSBqaWZmaWVzO1xuIFxuIFx0aWYgKHAgXHUwMDI2XHUwMDI2IHRhc2tfZGVsYXllZCkge1xuLVx0XHRXQVJOX09OX09OQ0UoIXRhc2tfc2xlZXApO1xuLVx0XHRXQVJOX09OX09OQ0UocC1cdTAwM2Vvbl9ycSAhPSAxKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghdGFza19zbGVlcCk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2Vvbl9ycSAhPSAxKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogRml4LXVwIHdoYXQgYmxvY2tfdGFzaygpIHNraXBwZWQuXG5AQCAtODk3Niw3ICYjNDM7ODk3Niw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZmFpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBhZmZpbml0eV9jb250ZXh0XG4gc3RhdGljIHZvaWQgc2V0X25leHRfYnVkZHkoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpXG4ge1xuIFx0Zm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKSB7XG4tXHRcdGlmIChXQVJOX09OX09OQ0UoIXNlLVx1MDAzZW9uX3JxKSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLVx1MDAzZW9uX3JxKSlcbiBcdFx0XHRyZXR1cm47XG4gXHRcdGlmIChzZV9pc19pZGxlKHNlKSlcbiBcdFx0XHRyZXR1cm47XG5AQCAtOTAyMyw3ICYjNDM7OTAyMyw3IEBAIHByZWVtcHRfc3luYyhzdHJ1Y3QgcnEgKnJxLCBpbnQgd2FrZV9mbGFncyxcbiBcdCAqIFdGX1NZTkMgd2l0aG91dCBXRl9UVFdVIGlzIG5vdCBleHBlY3RlZCBzbyB3YXJuIGlmIGl0IGhhcHBlbnMgZXZlblxuIFx0ICogdGhvdWdoIGl0IGlzIGxpa2VseSBoYXJtbGVzcy5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKCEod2FrZV9mbGFncyBcdTAwMjYgV0ZfVFRXVSkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKHdha2VfZmxhZ3MgXHUwMDI2IFdGX1RUV1UpKTtcbiBcbiBcdHRocmVzaG9sZCA9IHN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdDtcbiBcdGRlbHRhID0gcnFfY2xvY2tfdGFzayhycSkgLSBzZS1cdTAwM2VleGVjX3N0YXJ0O1xuQEAgLTkwOTUsNyAmIzQzOzkwOTUsNyBAQCBzdGF0aWMgdm9pZCB3YWtldXBfcHJlZW1wdF9mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2VfZlxuIFx0XHRyZXR1cm47XG4gXG4gXHRmaW5kX21hdGNoaW5nX3NlKFx1MDAyNnNlLCBcdTAwMjZwc2UpO1xuLVx0V0FSTl9PTl9PTkNFKCFwc2UpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghcHNlKTtcbiBcbiBcdGNzZV9pc19pZGxlID0gc2VfaXNfaWRsZShzZSk7XG4gXHRwc2VfaXNfaWRsZSA9IHNlX2lzX2lkbGUocHNlKTtcbkBAIC05ODU3LDggJiM0Mzs5ODU3LDggQEAgc3RhdGljIHZvaWQgZGV0YWNoX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpXG4gXHRcdHNjaGVkc3RhdF9pbmMocC1cdTAwM2VzdGF0cy5ucl9mb3JjZWRfbWlncmF0aW9ucyk7XG4gXHR9XG4gXG4tXHRXQVJOX09OKHRhc2tfY3VycmVudChlbnYtXHUwMDNlc3JjX3JxLCBwKSk7XG4tXHRXQVJOX09OKHRhc2tfY3VycmVudF9kb25vcihlbnYtXHUwMDNlc3JjX3JxLCBwKSk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRCh0YXNrX2N1cnJlbnQoZW52LVx1MDAzZXNyY19ycSwgcCkpO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQodGFza19jdXJyZW50X2Rvbm9yKGVudi1cdTAwM2VzcmNfcnEsIHApKTtcbiBcbiBcdGRlYWN0aXZhdGVfdGFzayhlbnYtXHUwMDNlc3JjX3JxLCBwLCBERVFVRVVFX05PQ0xPQ0spO1xuIFx0c2V0X3Rhc2tfY3B1KHAsIGVudi1cdTAwM2Vkc3RfY3B1KTtcbkBAIC0xMjE1MSw3ICYjNDM7MTIxNTEsNyBAQCBzdGF0aWMgaW50IHNjaGVkX2JhbGFuY2VfcnEoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEsXG4gXHRcdGdvdG8gb3V0X2JhbGFuY2VkO1xuIFx0fVxuIFxuLVx0V0FSTl9PTl9PTkNFKGJ1c2llc3QgPT0gZW52LmRzdF9ycSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGJ1c2llc3QgPT0gZW52LmRzdF9ycSk7XG4gXG4gXHR1cGRhdGVfbGJfaW1iYWxhbmNlX3N0YXQoXHUwMDI2ZW52LCBzZCwgaWRsZSk7XG4gXG5AQCAtMTI0NjEsNyAmIzQzOzEyNDYxLDcgQEAgc3RhdGljIGludCBhY3RpdmVfbG9hZF9iYWxhbmNlX2NwdV9zdG9wKHZvaWQgKmRhdGEpXG4gXHQgKiB3ZSBuZWVkIHRvIGZpeCBpdC4gT3JpZ2luYWxseSByZXBvcnRlZCBieVxuIFx0ICogQmpvcm4gSGVsZ2FhcyBvbiBhIDEyOC1DUFUgc2V0dXAuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShidXNpZXN0X3JxID09IHRhcmdldF9ycSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGJ1c2llc3RfcnEgPT0gdGFyZ2V0X3JxKTtcbiBcbiBcdC8qIFNlYXJjaCBmb3IgYW4gc2Qgc3Bhbm5pbmcgdXMgYW5kIHRoZSB0YXJnZXQgQ1BVLiAqL1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuQEAgLTEyODgzLDcgJiM0MzsxMjg4Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVfc2Rfc3RhdGVfYnVzeShpbnQgY3B1KVxuIFxuIHZvaWQgbm9oel9iYWxhbmNlX2V4aXRfaWRsZShzdHJ1Y3QgcnEgKnJxKVxuIHtcbi1cdFdBUk5fT05fT05DRShycSAhPSB0aGlzX3JxKCkpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycSAhPSB0aGlzX3JxKCkpO1xuIFxuIFx0aWYgKGxpa2VseSghcnEtXHUwMDNlbm9oel90aWNrX3N0b3BwZWQpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTI5MTgsNyAmIzQzOzEyOTE4LDcgQEAgdm9pZCBub2h6X2JhbGFuY2VfZW50ZXJfaWRsZShpbnQgY3B1KVxuIHtcbiBcdHN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTtcbiBcbi1cdFdBUk5fT05fT05DRShjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7XG4gXG4gXHQvKiBJZiB0aGlzIENQVSBpcyBnb2luZyBkb3duLCB0aGVuIG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZTogKi9cbiBcdGlmICghY3B1X2FjdGl2ZShjcHUpKVxuQEAgLTEzMDAwLDcgJiM0MzsxMzAwMCw3IEBAIHN0YXRpYyB2b2lkIF9ub2h6X2lkbGVfYmFsYW5jZShzdHJ1Y3QgcnEgKnRoaXNfcnEsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdGludCBiYWxhbmNlX2NwdTtcbiBcdHN0cnVjdCBycSAqcnE7XG4gXG4tXHRXQVJOX09OX09OQ0UoKGZsYWdzIFx1MDAyNiBOT0haX0tJQ0tfTUFTSykgPT0gTk9IWl9CQUxBTkNFX0tJQ0spO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgoZmxhZ3MgXHUwMDI2IE5PSFpfS0lDS19NQVNLKSA9PSBOT0haX0JBTEFOQ0VfS0lDSyk7XG4gXG4gXHQvKlxuIFx0ICogV2UgYXNzdW1lIHRoZXJlIHdpbGwgYmUgbm8gaWRsZSBsb2FkIGFmdGVyIHRoaXMgdXBkYXRlIGFuZCBjbGVhclxuQEAgLTEzNjIzLDcgJiM0MzsxMzYyMyw3IEBAIGJvb2wgY2ZzX3ByaW9fbGVzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmEsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqYixcbiBcdHN0cnVjdCBjZnNfcnEgKmNmc19ycWI7XG4gXHRzNjQgZGVsdGE7XG4gXG4tXHRXQVJOX09OX09OQ0UodGFza19ycShiKS1cdTAwM2Vjb3JlICE9IHJxLVx1MDAzZWNvcmUpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX3JxKGIpLVx1MDAzZWNvcmUgIT0gcnEtXHUwMDNlY29yZSk7XG4gXG4gI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVEXG4gXHQvKlxuQEAgLTEzODM5LDcgJiM0MzsxMzgzOSw3IEBAIHN0YXRpYyB2b2lkIHN3aXRjaGVkX2Zyb21fZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXG4gc3RhdGljIHZvaWQgc3dpdGNoZWRfdG9fZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2Uuc2NoZWRfZGVsYXllZCk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2Uuc2NoZWRfZGVsYXllZCk7XG4gXG4gXHRhdHRhY2hfdGFza19jZnNfcnEocCk7XG4gXG5AQCAtMTM4NzIsNyAmIzQzOzEzODcyLDcgQEAgc3RhdGljIHZvaWQgX19zZXRfbmV4dF90YXNrX2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpcnNcbiBcdGlmICghZmlyc3QpXG4gXHRcdHJldHVybjtcbiBcbi1cdFdBUk5fT05fT05DRShzZS1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiYjNDM7XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4gXG4gXHRpZiAoaHJ0aWNrX2VuYWJsZWRfZmFpcihycSkpXG4gXHRcdGhydGlja19zdGFydF9mYWlyKHJxLCBwKTtcbkBAIC0xNDE0OCw3ICYjNDM7MTQxNDgsNyBAQCBpbnQgc2NoZWRfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBsb25nIGlkbGUpXG4gXHRcdHJxX2xvY2tfaXJxc2F2ZShycSwgXHUwMDI2cmYpO1xuIFxuIFx0XHRncnBfY2ZzX3JxLVx1MDAzZWlkbGUgPSBpZGxlO1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHdhc19pZGxlID09IGNmc19ycV9pc19pZGxlKGdycF9jZnNfcnEpKSlcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQod2FzX2lkbGUgPT0gY2ZzX3JxX2lzX2lkbGUoZ3JwX2Nmc19ycSkpKVxuIFx0XHRcdGdvdG8gbmV4dF9jcHU7XG4gXG4gXHRcdGlkbGVfdGFza19kZWx0YSA9IGdycF9jZnNfcnEtXHUwMDNlaF9ucl9xdWV1ZWQgLVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9ydC5jIGIva2VybmVsL3NjaGVkL3J0LmNcbmluZGV4IDRlZThmYWYwMTQ0MWEzLi41MDZkMGYxYWZhNThmOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvcnQuY1xuQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9ydF9iYW5kd2lkdGgoc3RydWN0IHJ0X2JhbmR3aWR0aCAqcnRfYilcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSlcbiB7XG4tXHRXQVJOX09OX09OQ0UoIXJ0X2VudGl0eV9pc190YXNrKHJ0X3NlKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFydF9lbnRpdHlfaXNfdGFzayhydF9zZSkpO1xuIFxuIFx0cmV0dXJuIGNvbnRhaW5lcl9vZihydF9zZSwgc3RydWN0IHRhc2tfc3RydWN0LCBydCk7XG4gfVxuQEAgLTE3OCwxMyAmIzQzOzE3OCwxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSlcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSlcbiB7XG4gXHQvKiBDYW5ub3QgZm9sZCB3aXRoIG5vbi1DT05GSUdfUlRfR1JPVVBfU0NIRUQgdmVyc2lvbiwgbGF5b3V0ICovXG4tXHRXQVJOX09OKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHJ0X3JxLVx1MDAzZXRnICE9IFx1MDAyNnJvb3RfdGFza19ncm91cCk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuIFx0cmV0dXJuIHJ0X3JxLVx1MDAzZXJxO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBydF9ycSAqcnRfcnFfb2Zfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpXG4ge1xuLVx0V0FSTl9PTighcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9zZS1cdTAwM2VydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcnRfc2UtXHUwMDNlcnRfcnEtXHUwMDNldGcgIT0gXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcbiBcdHJldHVybiBydF9zZS1cdTAwM2VydF9ycTtcbiB9XG4gXG5AQCAtMTkyLDcgJiM0MzsxOTIsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpXG4ge1xuIFx0c3RydWN0IHJ0X3JxICpydF9ycSA9IHJ0X3NlLVx1MDAzZXJ0X3JxO1xuIFxuLVx0V0FSTl9PTighcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuJiM0MztcdFdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcnRfcnEtXHUwMDNldGcgIT0gXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcbiBcdHJldHVybiBydF9ycS1cdTAwM2VycTtcbiB9XG4gXG5AQCAtNDkzLDcgJiM0Mzs0OTMsNyBAQCB0eXBlZGVmIHN0cnVjdCB0YXNrX2dyb3VwICpydF9ycV9pdGVyX3Q7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19ncm91cCAqbmV4dF90YXNrX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcbiB7XG4gXHRpZiAoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSkge1xuLVx0XHRXQVJOX09OKHRnICE9IFx1MDAyNnJvb3RfdGFza19ncm91cCk7XG4mIzQzO1x0XHRXQVJOX09OX0RFRkVSUkVEKHRnICE9IFx1MDAyNnJvb3RfdGFza19ncm91cCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuQEAgLTcyMyw3ICYjNDM7NzIzLDcgQEAgc3RhdGljIHZvaWQgX19kaXNhYmxlX3J1bnRpbWUoc3RydWN0IHJxICpycSlcbiBcdFx0ICogV2UgY2Fubm90IGJlIGxlZnQgd2FudGluZyAtIHRoYXQgd291bGQgbWVhbiBzb21lIHJ1bnRpbWVcbiBcdFx0ICogbGVha2VkIG91dCBvZiB0aGUgc3lzdGVtLlxuIFx0XHQgKi9cbi1cdFx0V0FSTl9PTl9PTkNFKHdhbnQpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHdhbnQpO1xuIGJhbGFuY2VkOlxuIFx0XHQvKlxuIFx0XHQgKiBEaXNhYmxlIGFsbCB0aGUgYm9ycm93IGxvZ2ljIGJ5IHByZXRlbmRpbmcgd2UgaGF2ZSBpbmZcbkBAIC0xMDk0LDcgJiM0MzsxMDk0LDcgQEAgZGVjX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pXG4gXG4gXHRpZiAocnRfcnEtXHUwMDNlcnRfbnJfcnVubmluZykge1xuIFxuLVx0XHRXQVJOX09OKHByaW8gXHUwMDNjIHByZXZfcHJpbyk7XG4mIzQzO1x0XHRXQVJOX09OX0RFRkVSUkVEKHByaW8gXHUwMDNjIHByZXZfcHJpbyk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgbWF5IGhhdmUgYmVlbiBvdXIgaGlnaGVzdCB0YXNrLCBhbmQgdGhlcmVmb3JlXG5AQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIGRlY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSlcbiBcdGlmIChydF9zZV9ib29zdGVkKHJ0X3NlKSlcbiBcdFx0cnRfcnEtXHUwMDNlcnRfbnJfYm9vc3RlZC0tO1xuIFxuLVx0V0FSTl9PTighcnRfcnEtXHUwMDNlcnRfbnJfcnVubmluZyBcdTAwMjZcdTAwMjYgcnRfcnEtXHUwMDNlcnRfbnJfYm9vc3RlZCk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfcnEtXHUwMDNlcnRfbnJfcnVubmluZyBcdTAwMjZcdTAwMjYgcnRfcnEtXHUwMDNlcnRfbnJfYm9vc3RlZCk7XG4gfVxuIFxuICNlbHNlIC8qICFDT05GSUdfUlRfR1JPVVBfU0NIRUQ6ICovXG5AQCAtMTE3Niw3ICYjNDM7MTE3Niw3IEBAIHZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxuIHtcbiBcdGludCBwcmlvID0gcnRfc2VfcHJpbyhydF9zZSk7XG4gXG4tXHRXQVJOX09OKCFydF9wcmlvKHByaW8pKTtcbiYjNDM7XHRXQVJOX09OX0RFRkVSUkVEKCFydF9wcmlvKHByaW8pKTtcbiBcdHJ0X3JxLVx1MDAzZXJ0X25yX3J1bm5pbmcgJiM0Mzs9IHJ0X3NlX25yX3J1bm5pbmcocnRfc2UpO1xuIFx0cnRfcnEtXHUwMDNlcnJfbnJfcnVubmluZyAmIzQzOz0gcnRfc2VfcnJfbnJfcnVubmluZyhydF9zZSk7XG4gXG5AQCAtMTE4Nyw4ICYjNDM7MTE4Nyw4IEBAIHZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxuIHN0YXRpYyBpbmxpbmVcbiB2b2lkIGRlY19ydF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSlcbiB7XG4tXHRXQVJOX09OKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7XG4tXHRXQVJOX09OKCFydF9ycS1cdTAwM2VydF9ucl9ydW5uaW5nKTtcbiYjNDM7XHRXQVJOX09OX0RFRkVSUkVEKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfcnEtXHUwMDNlcnRfbnJfcnVubmluZyk7XG4gXHRydF9ycS1cdTAwM2VydF9ucl9ydW5uaW5nIC09IHJ0X3NlX25yX3J1bm5pbmcocnRfc2UpO1xuIFx0cnRfcnEtXHUwMDNlcnJfbnJfcnVubmluZyAtPSBydF9zZV9ycl9ucl9ydW5uaW5nKHJ0X3NlKTtcbiBcbkBAIC0xMzQ4LDcgJiM0MzsxMzQ4LDcgQEAgc3RhdGljIHZvaWQgX19lbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgdW5zaWduZWQgaW50IGZsYWdcbiBcdH1cbiBcbiBcdGlmIChtb3ZlX2VudGl0eShmbGFncykpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKHJ0X3NlLVx1MDAzZW9uX2xpc3QpO1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJ0X3NlLVx1MDAzZW9uX2xpc3QpO1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IEVOUVVFVUVfSEVBRClcbiBcdFx0XHRsaXN0X2FkZChcdTAwMjZydF9zZS1cdTAwM2VydW5fbGlzdCwgcXVldWUpO1xuIFx0XHRlbHNlXG5AQCAtMTM2OCw3ICYjNDM7MTM2OCw3IEBAIHN0YXRpYyB2b2lkIF9fZGVxdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHVuc2lnbmVkIGludCBmbGFnXG4gXHRzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXkgPSBcdTAwMjZydF9ycS1cdTAwM2VhY3RpdmU7XG4gXG4gXHRpZiAobW92ZV9lbnRpdHkoZmxhZ3MpKSB7XG4tXHRcdFdBUk5fT05fT05DRSghcnRfc2UtXHUwMDNlb25fbGlzdCk7XG4mIzQzO1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJ0X3NlLVx1MDAzZW9uX2xpc3QpO1xuIFx0XHRfX2RlbGlzdF9ydF9lbnRpdHkocnRfc2UsIGFycmF5KTtcbiBcdH1cbiBcdHJ0X3NlLVx1MDAzZW9uX3JxID0gMDtcbkBAIC0xNjg0LDcgJiM0MzsxNjg0LDcgQEAgc3RhdGljIHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnBpY2tfbmV4dF9ydF9lbnRpdHkoc3RydWN0IHJ0X3JxICpydF9ycSlcbiBcdEJVR19PTihpZHggXHUwMDNlPSBNQVhfUlRfUFJJTyk7XG4gXG4gXHRxdWV1ZSA9IGFycmF5LVx1MDAzZXF1ZXVlICYjNDM7IGlkeDtcbi1cdGlmIChXQVJOX09OX09OQ0UobGlzdF9lbXB0eShxdWV1ZSkpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQobGlzdF9lbXB0eShxdWV1ZSkpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdG5leHQgPSBsaXN0X2VudHJ5KHF1ZXVlLVx1MDAzZW5leHQsIHN0cnVjdCBzY2hlZF9ydF9lbnRpdHksIHJ1bl9saXN0KTtcbiBcbkBAIC0yMDE2LDcgJiM0MzsyMDE2LDcgQEAgc3RhdGljIGludCBwdXNoX3J0X3Rhc2soc3RydWN0IHJxICpycSwgYm9vbCBwdWxsKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGlmIChXQVJOX09OKG5leHRfdGFzayA9PSBycS1cdTAwM2VjdXJyKSlcbiYjNDM7XHRpZiAoV0FSTl9PTl9ERUZFUlJFRChuZXh0X3Rhc2sgPT0gcnEtXHUwMDNlY3VycikpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogV2UgbWlnaHQgcmVsZWFzZSBycSBsb2NrICovXG5AQCAtMjMxNiw4ICYjNDM7MjMxNiw4IEBAIHN0YXRpYyB2b2lkIHB1bGxfcnRfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEpXG4gXHRcdCAqIHRoZSB0by1iZS1zY2hlZHVsZWQgdGFzaz9cbiBcdFx0ICovXG4gXHRcdGlmIChwIFx1MDAyNlx1MDAyNiAocC1cdTAwM2VwcmlvIFx1MDAzYyB0aGlzX3JxLVx1MDAzZXJ0LmhpZ2hlc3RfcHJpby5jdXJyKSkge1xuLVx0XHRcdFdBUk5fT04ocCA9PSBzcmNfcnEtXHUwMDNlY3Vycik7XG4tXHRcdFx0V0FSTl9PTighdGFza19vbl9ycV9xdWV1ZWQocCkpO1xuJiM0MztcdFx0XHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gc3JjX3JxLVx1MDAzZWN1cnIpO1xuJiM0MztcdFx0XHRXQVJOX09OX0RFRkVSUkVEKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBUaGVyZSYjMzk7cyBhIGNoYW5jZSB0aGF0IHAgaXMgaGlnaGVyIGluIHByaW9yaXR5XG5AQCAtMjU4Myw3ICYjNDM7MjU4Myw3IEBAIHN0YXRpYyBpbnQgdGFza19pc190aHJvdHRsZWRfcnQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KVxuIFxuICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgLy8gWFhYIG1heWJlIGFkZCB0YXNrX3J0X3JxKCksIHNlZSBhbHNvIHNjaGVkX3J0X3BlcmlvZF9ydF9ycVxuIFx0cnRfcnEgPSB0YXNrX2dyb3VwKHApLVx1MDAzZXJ0X3JxW2NwdV07XG4tXHRXQVJOX09OKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHJ0X3JxLVx1MDAzZXRnICE9IFx1MDAyNnJvb3RfdGFza19ncm91cCk7XG4mIzQzO1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuICNlbHNlXG4gXHRydF9ycSA9IFx1MDAyNmNwdV9ycShjcHUpLVx1MDAzZXJ0O1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbmluZGV4IDlmNjNiMTVkMzA5ZDExLi5mNzRmOWNkNDRlMDk4NiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuQEAgLTE2ODQsNyAmIzQzOzE2ODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2lkbGVfY29yZShzdHJ1Y3QgcnEgKnJxKSB7IH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19vZihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcbiB7XG4tXHRXQVJOX09OX09OQ0UoIWVudGl0eV9pc190YXNrKHNlKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFlbnRpdHlfaXNfdGFzayhzZSkpO1xuIFx0cmV0dXJuIGNvbnRhaW5lcl9vZihzZSwgc3RydWN0IHRhc2tfc3RydWN0LCBzZSk7XG4gfVxuIFxuQEAgLTE3NjYsNyAmIzQzOzE3NjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X2Nsb2NrX3VwZGF0ZWQoc3RydWN0IHJxICpycSlcbiBcdCAqIFRoZSBvbmx5IHJlYXNvbiBmb3Igbm90IHNlZWluZyBhIGNsb2NrIHVwZGF0ZSBzaW5jZSB0aGVcbiBcdCAqIGxhc3QgcnFfcGluX2xvY2soKSBpcyBpZiB3ZSYjMzk7cmUgY3VycmVudGx5IHNraXBwaW5nIHVwZGF0ZXMuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDNjIFJRQ0ZfQUNUX1NLSVApO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDNjIFJRQ0ZfQUNUX1NLSVApO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHU2NCBycV9jbG9jayhzdHJ1Y3QgcnEgKnJxKVxuQEAgLTE4MTMsNyAmIzQzOzE4MTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnFfY2xvY2tfY2FuY2VsX3NraXB1cGRhdGUoc3RydWN0IHJxICpycSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgcnFfY2xvY2tfc3RhcnRfbG9vcF91cGRhdGUoc3RydWN0IHJxICpycSlcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcbi1cdFdBUk5fT05fT05DRShycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDI2IFJRQ0ZfQUNUX1NLSVApO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDI2IFJRQ0ZfQUNUX1NLSVApO1xuIFx0cnEtXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIHw9IFJRQ0ZfQUNUX1NLSVA7XG4gfVxuIFxuQEAgLTE4NzAsOSAmIzQzOzE4NzAsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2N4X3JxX2Nsb2NrX2ludmFsaWRhdGUoc3RydWN0IHJxICpycSkge31cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X2JhbGFuY2VfY2FsbGJhY2tzX2VtcHR5KHN0cnVjdCBycSAqcnEpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX0xPQ0tJTkcpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgcnEtXHUwMDNlYmFsYW5jZV9jYWxsYmFjayAhPSBcdTAwMjZiYWxhbmNlX3B1c2hfY2FsbGJhY2spO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRChJU19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICAgcnEtXHUwMDNlYmFsYW5jZV9jYWxsYmFjayBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICAgcnEtXHUwMDNlYmFsYW5jZV9jYWxsYmFjayAhPSBcdTAwMjZiYWxhbmNlX3B1c2hfY2FsbGJhY2spO1xuIH1cbiBcbiAvKlxuQEAgLTI2ODEsNyAmIzQzOzI2ODEsNyBAQCBzdHJ1Y3Qgc2NoZWRfY2xhc3Mge1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldilcbiB7XG4tXHRXQVJOX09OX09OQ0UocnEtXHUwMDNlZG9ub3IgIT0gcHJldik7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZWRvbm9yICE9IHByZXYpO1xuIFx0cHJldi1cdTAwM2VzY2hlZF9jbGFzcy1cdTAwM2VwdXRfcHJldl90YXNrKHJxLCBwcmV2LCBOVUxMKTtcbiB9XG4gXG5AQCAtMjcwNCw3ICYjNDM7MjcwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl9zZXRfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxuIFx0XHRcdFx0XHQgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dClcbiB7XG4tXHRXQVJOX09OX09OQ0UocnEtXHUwMDNlZG9ub3IgIT0gcHJldik7XG4mIzQzO1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZWRvbm9yICE9IHByZXYpO1xuIFxuIFx0X19wdXRfcHJldl9zZXRfbmV4dF9kbF9zZXJ2ZXIocnEsIHByZXYsIG5leHQpO1xuIFxuQEAgLTMwMzAsNyAmIzQzOzMwMzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXR0YWNoX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHRhc2tfcnEocCkgIT0gcnEpO1xuJiM0MztcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX3JxKHApICE9IHJxKTtcbiBcdGFjdGl2YXRlX3Rhc2socnEsIHAsIEVOUVVFVUVfTk9DTE9DSyk7XG4gXHR3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2xpYi9idWcuYyBiL2xpYi9idWcuY1xuaW5kZXggMjI0ZjRjZmE0YWEzMTIuLmY1NzY4ZjVkMTdiNDc5IDEwMDY0NFxuLS0tIGEvbGliL2J1Zy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvYnVnLmNcbkBAIC0xOTYsNyAmIzQzOzE5Niw3IEBAIHZvaWQgX193YXJuX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFxuIHN0YXRpYyBlbnVtIGJ1Z190cmFwX3R5cGUgX19yZXBvcnRfYnVnKHN0cnVjdCBidWdfZW50cnkgKmJ1ZywgdW5zaWduZWQgbG9uZyBidWdhZGRyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4tXHRib29sIHdhcm5pbmcsIG9uY2UsIGRvbmUsIG5vX2N1dCwgaGFzX2FyZ3M7XG4mIzQzO1x0Ym9vbCB3YXJuaW5nLCBvbmNlLCBkb25lLCBub19jdXQsIGhhc19hcmdzLCBkZWZlcnJlZDtcbiBcdGNvbnN0IGNoYXIgKmZpbGUsICpmbXQ7XG4gXHR1bnNpZ25lZCBsaW5lO1xuIFxuQEAgLTIxOSw2ICYjNDM7MjE5LDcgQEAgc3RhdGljIGVudW0gYnVnX3RyYXBfdHlwZSBfX3JlcG9ydF9idWcoc3RydWN0IGJ1Z19lbnRyeSAqYnVnLCB1bnNpZ25lZCBsb25nIGJ1Z2FcbiBcdGRvbmUgICAgID0gYnVnLVx1MDAzZWZsYWdzIFx1MDAyNiBCVUdGTEFHX0RPTkU7XG4gXHRub19jdXQgICA9IGJ1Zy1cdTAwM2VmbGFncyBcdTAwMjYgQlVHRkxBR19OT19DVVRfSEVSRTtcbiBcdGhhc19hcmdzID0gYnVnLVx1MDAzZWZsYWdzIFx1MDAyNiBCVUdGTEFHX0FSR1M7XG4mIzQzO1x0ZGVmZXJyZWQgPSBidWctXHUwMDNlZmxhZ3MgXHUwMDI2IEJVR0ZMQUdfREVGRVJSRUQ7XG4gXG4gXHRpZiAod2FybmluZyBcdTAwMjZcdTAwMjYgb25jZSkge1xuIFx0XHRpZiAoZG9uZSlcbkBAIC0yMjksNyAmIzQzOzIzMCwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYVxuIFx0XHQgKi9cbiBcdFx0YnVnLVx1MDAzZWZsYWdzIHw9IEJVR0ZMQUdfRE9ORTtcbiBcdH1cbi1cbiYjNDM7XHRpZiAoZGVmZXJyZWQpIHtcbiYjNDM7XHRcdHByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7XG4mIzQzO1x0XHRwcmludGtfZGVmZXJyZWRfZW50ZXIoKTtcbiYjNDM7XHR9XG4gXHQvKlxuIFx0ICogQlVHKCkgYW5kIFdBUk5fT04oKSBmYW1pbGllcyBkb24mIzM5O3QgcHJpbnQgYSBjdXN0b20gZGVidWcgbWVzc2FnZVxuIFx0ICogYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLCBzbyB3ZSBtdXN0IGFkZCB0aGVcbkBAIC0yNDUsNiAmIzQzOzI0OSwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYVxuIFx0XHQvKiB0aGlzIGlzIGEgV0FSTl9PTiByYXRoZXIgdGhhbiBCVUcvQlVHX09OICovXG4gXHRcdF9fd2FybihmaWxlLCBsaW5lLCAodm9pZCAqKWJ1Z2FkZHIsIEJVR19HRVRfVEFJTlQoYnVnKSwgcmVncyxcbiBcdFx0ICAgICAgIE5VTEwpO1xuJiM0MztcdFx0aWYgKGRlZmVycmVkKSB7XG4mIzQzO1x0XHRcdHByaW50a19kZWZlcnJlZF9leGl0KCk7XG4mIzQzO1x0XHRcdHByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTtcbiYjNDM7XHRcdH1cbiBcdFx0cmV0dXJuIEJVR19UUkFQX1RZUEVfV0FSTjtcbiBcdH1cbiBcbkBAIC0yNTQsNiAmIzQzOzI2MiwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYVxuIFx0XHRwcl9jcml0KFwmIzM0O2tlcm5lbCBCVUcgYXQgJXBCIFt2ZXJib3NlIGRlYnVnIGluZm8gdW5hdmFpbGFibGVdXFxuXCYjMzQ7LFxuIFx0XHRcdCh2b2lkICopYnVnYWRkcik7XG4gXG4mIzQzO1x0aWYgKGRlZmVycmVkKSB7XG4mIzQzO1x0XHRwcmludGtfZGVmZXJyZWRfZXhpdCgpO1xuJiM0MztcdFx0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1xuJiM0MztcdH1cbiBcdHJldHVybiBCVUdfVFJBUF9UWVBFX0JVRztcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTQ6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGFuZCBhcHBsaWVzIGRlZmVycmVkIHZhcmlhbnRzIG9mIFdBUk5fT04gYW5kIFdBUk5fT05fT05DRSBtYWNyb3MgKFdBUk5fT05fREVGRVJSRUQsIFdBUk5fT05fT05DRV9ERUZFUlJFRCkgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyB3YXJuaW5nIHByaW50cyBpbiB0aGUgc2NoZWR1bGVyLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2dpbmcvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIG5vcm1hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDRmNjdiYzA5MTBhZWZiOWE1MmE0NTFkZTIzNmNmMDVlZjM5ODk0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDIzIDE0OjUyOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKaW5kZXggMDllOGVjY2VlOGVkOTcuLjFlM2ZmMDBmNzA5Yjg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjZGVmaW5lIEJVR0ZMQUdfRE9ORQkJKDEgJmx0OyZsdDsgMikKICNkZWZpbmUgQlVHRkxBR19OT19DVVRfSEVSRQkoMSAmbHQ7Jmx0OyAzKQkvKiBDVVRfSEVSRSBhbHJlYWR5IHNlbnQgKi8KICNkZWZpbmUgQlVHRkxBR19BUkdTCQkoMSAmbHQ7Jmx0OyA0KQomIzQzOyNkZWZpbmUgQlVHRkxBR19ERUZFUlJFRAkoMSAmbHQ7Jmx0OyA1KQogI2RlZmluZSBCVUdGTEFHX1RBSU5UKHRhaW50KQkoKHRhaW50KSAmbHQ7Jmx0OyA4KQogI2RlZmluZSBCVUdfR0VUX1RBSU5UKGJ1ZykJKChidWcpLSZndDtmbGFncyAmZ3Q7Jmd0OyA4KQogI2VuZGlmCkBAIC0xMTUsNiAmIzQzOzExNiwxNiBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIH0pCiAjZW5kaWYKIAomIzQzOyNkZWZpbmUgV0FSTl9PTl9ERUZFUlJFRChjb25kaXRpb24pICh7CQkJCQlcCiYjNDM7CWludCBfX3JldF93YXJuX29uID0gISEoY29uZGl0aW9uKTsJCQkJXAomIzQzOwlpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbikpIHsJCQkJCVwKJiM0MzsJCV9fV0FSTl9GTEFHUygjY29uZGl0aW9uLAkJCQlcCiYjNDM7CQkJICAgICBCVUdGTEFHX0RFRkVSUkVEIHwJCQkJXAomIzQzOwkJCSAgICAgQlVHRkxBR19UQUlOVChUQUlOVF9XQVJOKSk7CQlcCiYjNDM7CX0JCQkJCQkJCVwKJiM0MzsJdW5saWtlbHkoX19yZXRfd2Fybl9vbik7CQkJCQlcCiYjNDM7fSkKJiM0MzsKICNpZm5kZWYgV0FSTl9PTl9PTkNFCiAjZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pICh7CQkJCQlcCiAJaW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pOwkJCQlcCkBAIC0xMjUsNiAmIzQzOzEzNiwxNiBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIAl1bmxpa2VseShfX3JldF93YXJuX29uKTsJCQkJCVwKIH0pCiAjZW5kaWYKJiM0MzsKJiM0MzsjZGVmaW5lIFdBUk5fT05fT05DRV9ERUZFUlJFRChjb25kaXRpb24pICh7CQkJCVwKJiM0MzsJaW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pOwkJCQlcCiYjNDM7CWlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkgewkJCQkJXAomIzQzOwkJX19XQVJOX0ZMQUdTKCNjb25kaXRpb24sCQkJCVwKJiM0MzsJCQkgICAgIEJVR0ZMQUdfT05DRSB8IEJVR0ZMQUdfREVGRVJSRUQgfAkJXAomIzQzOwkJCSAgICAgQlVHRkxBR19UQUlOVChUQUlOVF9XQVJOKSk7CQlcCiYjNDM7CX0JCQkJCQkJCVwKJiM0MzsJdW5saWtlbHkoX19yZXRfd2Fybl9vbik7CQkJCQlcCiYjNDM7fSkKICNlbmRpZiAvKiBfX1dBUk5fRkxBR1MgKi8KIAogI2lmIGRlZmluZWQoX19XQVJOX0ZMQUdTKSAmYW1wOyZhbXA7ICFkZWZpbmVkKF9fV0FSTl9wcmludGYpCkBAIC0xNTksNiAmIzQzOzE4MCwxOSBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIH0pCiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgV0FSTl9PTl9ERUZFUlJFRAomIzQzOyNkZWZpbmUgV0FSTl9PTl9ERUZFUlJFRChjb25kaXRpb24pICh7CQkJCQlcCiYjNDM7CWludCBfX3JldF93YXJuX29uID0gISEoY29uZGl0aW9uKTsJCQkJXAomIzQzOwlpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbikpIHsJCQkJCVwKJiM0MzsJCWd1YXJkKHByZWVtcHQpKCk7CQkJCQlcCiYjNDM7CQlwcmludGtfZGVmZXJyZWRfZW50ZXIoKQkJCQkJXAomIzQzOwkJX19XQVJOKCk7CQkJCQkJXAomIzQzOwkJcHJpbnRrX2RlZmVycmVkX2V4aXQoKQkJCQkJXAomIzQzOwl9CQkJCQkJCQlcCiYjNDM7CXVubGlrZWx5KF9fcmV0X3dhcm5fb24pOwkJCQkJXAomIzQzO30pCiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZuZGVmIFdBUk4KICNkZWZpbmUgV0FSTihjb25kaXRpb24sIGZvcm1hdC4uLikgKHsJCQkJCVwKIAlpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7CQkJCVwKQEAgLTE4MCw2ICYjNDM7MjE0LDExIEBAIGV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOwogCURPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT04sIDEpCiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgV0FSTl9PTl9PTkNFX0RFRkVSUkVECiYjNDM7I2RlZmluZSBXQVJOX09OX09OQ0VfREVGRVJSRUQoY29uZGl0aW9uKQkJCQlcCiYjNDM7CURPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT05fREVGRVJSRUQsIDEpCiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZuZGVmIFdBUk5fT05DRQogI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pCQkJCVwKIAlET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOLCAxLCBmb3JtYXQpCkBAIC0yMTUsNyAmIzQzOzI1NCw5IEBAIGV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOwogfSkKICNlbmRpZgogCiYjNDM7I2RlZmluZSBXQVJOX09OX0RFRkVSUkVEKGNvbmRpdGlvbikgV0FSTl9PTihjb25kaXRpb24pCiAjZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pIFdBUk5fT04oY29uZGl0aW9uKQomIzQzOyNkZWZpbmUgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNvbmRpdGlvbikgV0FSTl9PTihjb25kaXRpb24pCiAjZGVmaW5lIFdBUk5fT05DRShjb25kaXRpb24sIGZvcm1hdC4uLikgV0FSTihjb25kaXRpb24sIGZvcm1hdCkKICNkZWZpbmUgV0FSTl9UQUlOVChjb25kaXRpb24sIHRhaW50LCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpCiAjZGVmaW5lIFdBUk5fVEFJTlRfT05DRShjb25kaXRpb24sIHRhaW50LCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBiODg3MTQ0OWQzYzY5NC4uMGUyODI0NTdhYmI5MTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NvcmUuYwpAQCAtODUzLDcgJiM0Mzs4NTMsNyBAQCB2b2lkIHVwZGF0ZV9ycV9jbG9jayhzdHJ1Y3QgcnEgKnJxKQogCQlyZXR1cm47CiAKIAlpZiAoc2NoZWRfZmVhdChXQVJOX0RPVUJMRV9DTE9DSykpCi0JCVdBUk5fT05fT05DRShycS0mZ3Q7Y2xvY2tfdXBkYXRlX2ZsYWdzICZhbXA7IFJRQ0ZfVVBEQVRFRCk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtJmd0O2Nsb2NrX3VwZGF0ZV9mbGFncyAmYW1wOyBSUUNGX1VQREFURUQpOwogCXJxLSZndDtjbG9ja191cGRhdGVfZmxhZ3MgfD0gUlFDRl9VUERBVEVEOwogCiAJY2xvY2sgPSBzY2hlZF9jbG9ja19jcHUoY3B1X29mKHJxKSk7CkBAIC0xODA3LDcgJiM0MzsxODA3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVjbGFtcF9ycV9kZWNfaWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCiAJYnVja2V0ID0gJmFtcDt1Y19ycS0mZ3Q7YnVja2V0W3VjX3NlLSZndDtidWNrZXRfaWRdOwogCi0JV0FSTl9PTl9PTkNFKCFidWNrZXQtJmd0O3Rhc2tzKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFidWNrZXQtJmd0O3Rhc2tzKTsKIAlpZiAobGlrZWx5KGJ1Y2tldC0mZ3Q7dGFza3MpKQogCQlidWNrZXQtJmd0O3Rhc2tzLS07CiAKQEAgLTE4MjcsNyAmIzQzOzE4MjcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdWNsYW1wX3JxX2RlY19pZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJICogRGVmZW5zaXZlIHByb2dyYW1taW5nOiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4uIElmIGl0IGhhcHBlbnMsCiAJICogZS5nLiBkdWUgdG8gZnV0dXJlIG1vZGlmaWNhdGlvbiwgd2FybiBhbmQgZml4IHVwIHRoZSBleHBlY3RlZCB2YWx1ZS4KIAkgKi8KLQlXQVJOX09OX09OQ0UoYnVja2V0LSZndDt2YWx1ZSAmZ3Q7IHJxX2NsYW1wKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGJ1Y2tldC0mZ3Q7dmFsdWUgJmd0OyBycV9jbGFtcCk7CiAJaWYgKGJ1Y2tldC0mZ3Q7dmFsdWUgJmd0Oz0gcnFfY2xhbXApIHsKIAkJYmt0X2NsYW1wID0gdWNsYW1wX3JxX21heF92YWx1ZShycSwgY2xhbXBfaWQsIHVjX3NlLSZndDt2YWx1ZSk7CiAJCXVjbGFtcF9ycV9zZXQocnEsIGNsYW1wX2lkLCBia3RfY2xhbXApOwpAQCAtMjIxMCw3ICYjNDM7MjIxMCw3IEBAIHZvaWQgYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBmbGFncykKIAogdm9pZCBkZWFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpCiB7Ci0JV0FSTl9PTl9PTkNFKGZsYWdzICZhbXA7IERFUVVFVUVfU0xFRVApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoZmxhZ3MgJmFtcDsgREVRVUVVRV9TTEVFUCk7CiAKIAlXUklURV9PTkNFKHAtJmd0O29uX3JxLCBUQVNLX09OX1JRX01JR1JBVElORyk7CiAJQVNTRVJUX0VYQ0xVU0lWRV9XUklURVIocC0mZ3Q7b25fcnEpOwpAQCAtMjUxNiw3ICYjNDM7MjUxNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnEgKm1vdmVfcXVldWVkX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHJxX2ZsYWdzICpyZiwKIAlycSA9IGNwdV9ycShuZXdfY3B1KTsKIAogCXJxX2xvY2socnEsIHJmKTsKLQlXQVJOX09OX09OQ0UodGFza19jcHUocCkgIT0gbmV3X2NwdSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX2NwdShwKSAhPSBuZXdfY3B1KTsKIAlhY3RpdmF0ZV90YXNrKHJxLCBwLCAwKTsKIAl3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7CiAKQEAgLTI2MDIsNyAmIzQzOzI2MDIsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGlvbl9jcHVfc3RvcCh2b2lkICpkYXRhKQogCSAqIElmIHdlIHdlcmUgcGFzc2VkIGEgcGVuZGluZywgdGhlbiAtJmd0O3N0b3BfcGVuZGluZyB3YXMgc2V0LCB0aHVzCiAJICogcC0mZ3Q7bWlncmF0aW9uX3BlbmRpbmcgbXVzdCBoYXZlIHJlbWFpbmVkIHN0YWJsZS4KIAkgKi8KLQlXQVJOX09OX09OQ0UocGVuZGluZyAmYW1wOyZhbXA7IHBlbmRpbmcgIT0gcC0mZ3Q7bWlncmF0aW9uX3BlbmRpbmcpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocGVuZGluZyAmYW1wOyZhbXA7IHBlbmRpbmcgIT0gcC0mZ3Q7bWlncmF0aW9uX3BlbmRpbmcpOwogCiAJLyoKIAkgKiBJZiB0YXNrX3JxKHApICE9IHJxLCBpdCBjYW5ub3QgYmUgbWlncmF0ZWQgaGVyZSwgYmVjYXVzZSB3ZSYjMzk7cmUKQEAgLTI2NjEsNyAmIzQzOzI2NjEsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGlvbl9jcHVfc3RvcCh2b2lkICpkYXRhKQogCQkgKiBkZXRlcm1pbmUgaXNfbWlncmF0aW9uX2Rpc2FibGVkKCkgYW5kIHNvIGhhdmUgdG8gY2hhc2UgYWZ0ZXIKIAkJICogaXQuCiAJCSAqLwotCQlXQVJOX09OX09OQ0UoIXBlbmRpbmctJmd0O3N0b3BfcGVuZGluZyk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXBlbmRpbmctJmd0O3N0b3BfcGVuZGluZyk7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlycV91bmxvY2socnEsICZhbXA7cmYpOwogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3AtJmd0O3BpX2xvY2ssIHJmLmZsYWdzKTsKQEAgLTMwMDQsNyAmIzQzOzMwMDQsNyBAQCBzdGF0aWMgaW50IGFmZmluZV9tb3ZlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnFfZmxhZwogCSAqCiAJICogRWl0aGVyIHdheSwgd2UgcmVhbGx5IHNob3VsZCBoYXZlIGEgQHBlbmRpbmcgaGVyZS4KIAkgKi8KLQlpZiAoV0FSTl9PTl9PTkNFKCFwZW5kaW5nKSkgewomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFwZW5kaW5nKSkgewogCQl0YXNrX3JxX3VubG9jayhycSwgcCwgcmYpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0zMTE2LDkgJiM0MzszMTE2LDkgQEAgc3RhdGljIGludCBfX3NldF9jcHVzX2FsbG93ZWRfcHRyX2xvY2tlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWlmIChXQVJOX09OX09OQ0UocCA9PSBjdXJyZW50ICZhbXA7JmFtcDsKLQkJCQkgaXNfbWlncmF0aW9uX2Rpc2FibGVkKHApICZhbXA7JmFtcDsKLQkJCQkgIWNwdW1hc2tfdGVzdF9jcHUodGFza19jcHUocCksIGN0eC0mZ3Q7bmV3X21hc2spKSkgewomIzQzOwkJaWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChwID09IGN1cnJlbnQgJmFtcDsmYW1wOwomIzQzOwkJCQkJICBpc19taWdyYXRpb25fZGlzYWJsZWQocCkgJmFtcDsmYW1wOwomIzQzOwkJCQkJICAhY3B1bWFza190ZXN0X2NwdSh0YXNrX2NwdShwKSwgY3R4LSZndDtuZXdfbWFzaykpKSB7CiAJCQlyZXQgPSAtRUJVU1k7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMzI2Nyw3ICYjNDM7MzI2Nyw3IEBAIHZvaWQgZm9yY2VfY29tcGF0aWJsZV9jcHVzX2FsbG93ZWRfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAkJCQljcHVtYXNrX3ByX2FyZ3Mob3ZlcnJpZGVfbWFzaykpOwogCX0KIAotCVdBUk5fT04oc2V0X2NwdXNfYWxsb3dlZF9wdHIocCwgb3ZlcnJpZGVfbWFzaykpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKHNldF9jcHVzX2FsbG93ZWRfcHRyKHAsIG92ZXJyaWRlX21hc2spKTsKIG91dF9mcmVlX21hc2s6CiAJY3B1c19yZWFkX3VubG9jaygpOwogCWZyZWVfY3B1bWFza192YXIobmV3X21hc2spOwpAQCAtMzI5Myw3ICYjNDM7MzI5Myw3IEBAIHZvaWQgcmVsYXhfY29tcGF0aWJsZV9jcHVzX2FsbG93ZWRfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAkgKiBDcHVzZXQgbWFza2luZyB3aWxsIGJlIGRvbmUgdGhlcmUgdG9vLgogCSAqLwogCXJldCA9IF9fc2NoZWRfc2V0YWZmaW5pdHkocCwgJmFtcDthYyk7Ci0JV0FSTl9PTl9PTkNFKHJldCk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQpOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMzMwNiwxNiAmIzQzOzMzMDYsMTYgQEAgdm9pZCBzZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgbmV3X2NwdSkKIAkgKiBXZSBzaG91bGQgbmV2ZXIgY2FsbCBzZXRfdGFza19jcHUoKSBvbiBhIGJsb2NrZWQgdGFzaywKIAkgKiB0dHd1KCkgd2lsbCBzb3J0IG91dCB0aGUgcGxhY2VtZW50LgogCSAqLwotCVdBUk5fT05fT05DRShzdGF0ZSAhPSBUQVNLX1JVTk5JTkcgJmFtcDsmYW1wOyBzdGF0ZSAhPSBUQVNLX1dBS0lORyAmYW1wOyZhbXA7ICFwLSZndDtvbl9ycSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChzdGF0ZSAhPSBUQVNLX1JVTk5JTkcgJmFtcDsmYW1wOyBzdGF0ZSAhPSBUQVNLX1dBS0lORyAmYW1wOyZhbXA7ICFwLSZndDtvbl9ycSk7CiAKIAkvKgogCSAqIE1pZ3JhdGluZyBmYWlyIGNsYXNzIHRhc2sgbXVzdCBoYXZlIHAtJmd0O29uX3JxID0gVEFTS19PTl9SUV9NSUdSQVRJTkcsCiAJICogYmVjYXVzZSBzY2hlZHN0YXRfd2FpdF97c3RhcnQsZW5kfSByZWJhc2UgbWlncmF0aW5nIHRhc2smIzM5O3Mgd2FpdF9zdGFydAogCSAqIHRpbWUgcmVseWluZyBvbiBwLSZndDtvbl9ycS4KIAkgKi8KLQlXQVJOX09OX09OQ0Uoc3RhdGUgPT0gVEFTS19SVU5OSU5HICZhbXA7JmFtcDsKLQkJICAgICBwLSZndDtzY2hlZF9jbGFzcyA9PSAmYW1wO2ZhaXJfc2NoZWRfY2xhc3MgJmFtcDsmYW1wOwotCQkgICAgIChwLSZndDtvbl9ycSAmYW1wOyZhbXA7ICF0YXNrX29uX3JxX21pZ3JhdGluZyhwKSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoc3RhdGUgPT0gVEFTS19SVU5OSU5HICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgICBwLSZndDtzY2hlZF9jbGFzcyA9PSAmYW1wO2ZhaXJfc2NoZWRfY2xhc3MgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgIChwLSZndDtvbl9ycSAmYW1wOyZhbXA7ICF0YXNrX29uX3JxX21pZ3JhdGluZyhwKSkpOwogCiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKIAkvKgpAQCAtMzMyOCwxNSAmIzQzOzMzMjgsMTUgQEAgdm9pZCBzZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgbmV3X2NwdSkKIAkgKiBGdXJ0aGVybW9yZSwgYWxsIHRhc2tfcnEgdXNlcnMgc2hvdWxkIGFjcXVpcmUgYm90aCBsb2Nrcywgc2VlCiAJICogdGFza19ycV9sb2NrKCkuCiAJICovCi0JV0FSTl9PTl9PTkNFKGRlYnVnX2xvY2tzICZhbXA7JmFtcDsgIShsb2NrZGVwX2lzX2hlbGQoJmFtcDtwLSZndDtwaV9sb2NrKSB8fAotCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZChfX3JxX2xvY2twKHRhc2tfcnEocCkpKSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoZGVidWdfbG9ja3MgJmFtcDsmYW1wOyAhKGxvY2tkZXBfaXNfaGVsZCgmYW1wO3AtJmd0O3BpX2xvY2spIHx8CiYjNDM7CQkJCQkgICAgICAgbG9ja2RlcF9pc19oZWxkKF9fcnFfbG9ja3AodGFza19ycShwKSkpKSk7CiAjZW5kaWYKIAkvKgogCSAqIENsZWFybHksIG1pZ3JhdGluZyB0YXNrcyB0byBvZmZsaW5lIENQVXMgaXMgYSBmYWlybHkgZGFmdCB0aGluZy4KIAkgKi8KLQlXQVJOX09OX09OQ0UoIWNwdV9vbmxpbmUobmV3X2NwdSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNwdV9vbmxpbmUobmV3X2NwdSkpOwogCi0JV0FSTl9PTl9PTkNFKGlzX21pZ3JhdGlvbl9kaXNhYmxlZChwKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChpc19taWdyYXRpb25fZGlzYWJsZWQocCkpOwogCiAJdHJhY2Vfc2NoZWRfbWlncmF0ZV90YXNrKHAsIG5ld19jcHUpOwogCkBAIC0zODAzLDEwICYjNDM7MzgwMywxMCBAQCB2b2lkIHNjaGVkX3R0d3VfcGVuZGluZyh2b2lkICphcmcpCiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAogCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdCwgbGxpc3QsIHdha2VfZW50cnkubGxpc3QpIHsKLQkJaWYgKFdBUk5fT05fT05DRShwLSZndDtvbl9jcHUpKQomIzQzOwkJaWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChwLSZndDtvbl9jcHUpKQogCQkJc21wX2NvbmRfbG9hZF9hY3F1aXJlKCZhbXA7cC0mZ3Q7b25fY3B1LCAhVkFMKTsKIAotCQlpZiAoV0FSTl9PTl9PTkNFKHRhc2tfY3B1KHApICE9IGNwdV9vZihycSkpKQomIzQzOwkJaWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX2NwdShwKSAhPSBjcHVfb2YocnEpKSkKIAkJCXNldF90YXNrX2NwdShwLCBjcHVfb2YocnEpKTsKIAogCQl0dHd1X2RvX2FjdGl2YXRlKHJxLCBwLCBwLSZndDtzY2hlZF9yZW1vdGVfd2FrZXVwID8gV0ZfTUlHUkFURUQgOiAwLCAmYW1wO3JmKTsKQEAgLTQwMDMsOCAmIzQzOzQwMDMsOCBAQCBib29sIHR0d3Vfc3RhdGVfbWF0Y2goc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgc3RhdGUsIGludCAqc3VjY2VzcykKIAlpbnQgbWF0Y2g7CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfREVCVUdfUFJFRU1QVCkpIHsKLQkJV0FSTl9PTl9PTkNFKChzdGF0ZSAmYW1wOyBUQVNLX1JUTE9DS19XQUlUKSAmYW1wOyZhbXA7Ci0JCQkgICAgIHN0YXRlICE9IFRBU0tfUlRMT0NLX1dBSVQpOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKChzdGF0ZSAmYW1wOyBUQVNLX1JUTE9DS19XQUlUKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICAgIHN0YXRlICE9IFRBU0tfUlRMT0NLX1dBSVQpOwogCX0KIAogCSpzdWNjZXNzID0gISEobWF0Y2ggPSBfX3Rhc2tfc3RhdGVfbWF0Y2gocCwgc3RhdGUpKTsKQEAgLTU3NDUsNyAmIzQzOzU3NDUsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCQkgKiB3ZSBhcmUgYWx3YXlzIHN1cmUgdGhhdCB0aGVyZSBpcyBubyBwcm94eSAob25seSBhCiAJCQkgKiBzaW5nbGUgdGFzayBpcyBydW5uaW5nKS4KIAkJCSAqLwotCQkJV0FSTl9PTl9PTkNFKHJxLSZndDtjdXJyICE9IHJxLSZndDtkb25vcik7CiYjNDM7CQkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLSZndDtjdXJyICE9IHJxLSZndDtkb25vcik7CiAJCQl1cGRhdGVfcnFfY2xvY2socnEpOwogCiAJCQlpZiAoIWlzX2lkbGVfdGFzayhjdXJyKSkgewpAQCAtNTc1NCw3ICYjNDM7NTc1NCw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkX3RpY2tfcmVtb3RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJCQkgKiByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLgogCQkJCSAqLwogCQkJCXU2NCBkZWx0YSA9IHJxX2Nsb2NrX3Rhc2socnEpIC0gY3Vyci0mZ3Q7c2UuZXhlY19zdGFydDsKLQkJCQlXQVJOX09OX09OQ0UoZGVsdGEgJmd0OyAodTY0KU5TRUNfUEVSX1NFQyAqIDMwKTsKJiM0MzsJCQkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRlbHRhICZndDsgKHU2NClOU0VDX1BFUl9TRUMgKiAzMCk7CiAJCQl9CiAJCQljdXJyLSZndDtzY2hlZF9jbGFzcy0mZ3Q7dGFza190aWNrKHJxLCBjdXJyLCAwKTsKIApAQCAtNTc2OSw3ICYjNDM7NTc2OSw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkX3RpY2tfcmVtb3RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkgKiBmaXJzdCB1cGRhdGUgc3RhdGUgdG8gcmVmbGVjdCBob3RwbHVnIGFjdGl2aXR5IGlmIHJlcXVpcmVkLgogCSAqLwogCW9zID0gYXRvbWljX2ZldGNoX2FkZF91bmxlc3MoJmFtcDt0d29yay0mZ3Q7c3RhdGUsIC0xLCBUSUNLX1NDSEVEX1JFTU9URV9SVU5OSU5HKTsKLQlXQVJOX09OX09OQ0Uob3MgPT0gVElDS19TQ0hFRF9SRU1PVEVfT0ZGTElORSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChvcyA9PSBUSUNLX1NDSEVEX1JFTU9URV9PRkZMSU5FKTsKIAlpZiAob3MgPT0gVElDS19TQ0hFRF9SRU1PVEVfUlVOTklORykKIAkJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9kZmxfd3EsIGR3b3JrLCBIWik7CiB9CkBAIC02MTk2LDcgJiM0Mzs2MTk2LDcgQEAgcGlja19uZXh0X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKQogCQkJICogRm9yIHJvYnVzdG5lc3MsIHVwZGF0ZSB0aGUgbWluX3ZydW50aW1lX2ZpIGZvcgogCQkJICogdW5jb25zdHJhaW5lZCBwaWNrcyBhcyB3ZWxsLgogCQkJICovCi0JCQlXQVJOX09OX09OQ0UoZmlfYmVmb3JlKTsKJiM0MzsJCQlXQVJOX09OX09OQ0VfREVGRVJSRUQoZmlfYmVmb3JlKTsKIAkJCXRhc2tfdnJ1bnRpbWVfdXBkYXRlKHJxLCBuZXh0LCBmYWxzZSk7CiAJCQlnb3RvIG91dF9zZXRfbmV4dDsKIAkJfQpAQCAtNjI3NCw3ICYjNDM7NjI3NCw3IEBAIHBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHJxX2ZsYWdzICpyZikKIAlycS0mZ3Q7Y29yZV9zY2hlZF9zZXEgPSBycS0mZ3Q7Y29yZS0mZ3Q7Y29yZV9waWNrX3NlcTsKIAogCS8qIFNvbWV0aGluZyBzaG91bGQgaGF2ZSBiZWVuIHNlbGVjdGVkIGZvciBjdXJyZW50IENQVSAqLwotCVdBUk5fT05fT05DRSghbmV4dCk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghbmV4dCk7CiAKIAkvKgogCSAqIFJlc2NoZWR1bGUgc2libGluZ3MKQEAgLTYzMTcsNyAmIzQzOzYzMTcsNyBAQCBwaWNrX25leHRfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIHN0cnVjdCBycV9mbGFncyAqcmYpCiAJCX0KIAogCQkvKiBEaWQgd2UgYnJlYWsgTDFURiBtaXRpZ2F0aW9uIHJlcXVpcmVtZW50cz8gKi8KLQkJV0FSTl9PTl9PTkNFKCFjb29raWVfbWF0Y2gobmV4dCwgcnFfaS0mZ3Q7Y29yZV9waWNrKSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNvb2tpZV9tYXRjaChuZXh0LCBycV9pLSZndDtjb3JlX3BpY2spKTsKIAogCQlpZiAocnFfaS0mZ3Q7Y3VyciA9PSBycV9pLSZndDtjb3JlX3BpY2spIHsKIAkJCXJxX2ktJmd0O2NvcmVfcGljayA9IE5VTEw7CkBAIC02NzE3LDcgJiM0Mzs2NzE3LDcgQEAgc3RhdGljIHZvaWQgcHJveHlfbWlncmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYsCiAJc3RydWN0IHJxICp0YXJnZXRfcnEgPSBjcHVfcnEodGFyZ2V0X2NwdSk7CiAKIAlsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTsKLQlXQVJOX09OKHAgPT0gcnEtJmd0O2N1cnIpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKHAgPT0gcnEtJmd0O2N1cnIpOwogCS8qCiAJICogU2luY2Ugd2UgYXJlIG1pZ3JhdGluZyBhIGJsb2NrZWQgZG9ub3IsIGl0IGNvdWxkIGJlIHJxLSZndDtkb25vciwKIAkgKiBhbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcmVmZXJlbmNlcyBmcm9tIHRoaXMKQEAgLTY3NDksNyAmIzQzOzY3NDksNyBAQCBzdGF0aWMgdm9pZCBwcm94eV9mb3JjZV9yZXR1cm4oc3RydWN0IHJxICpycSwgc3RydWN0IHJxX2ZsYWdzICpyZiwKIAlpbnQgY3B1LCB3YWtlX2ZsYWcgPSBXRl9UVFdVOwogCiAJbG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7Ci0JV0FSTl9PTihwID09IHJxLSZndDtjdXJyKTsKJiM0MzsJV0FSTl9PTl9ERUZFUlJFRChwID09IHJxLSZndDtjdXJyKTsKIAogCWlmIChwID09IHJxLSZndDtkb25vcikKIAkJcHJveHlfcmVzY2hlZF9pZGxlKHJxKTsKQEAgLTY5NTEsNyAmIzQzOzY5NTEsNyBAQCBmaW5kX3Byb3h5X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpkb25vciwgc3RydWN0IHJxX2ZsYWdzICpyZikKIAkJICogZ3VhcmFudGVlIGl0cyBleGlzdGVuY2UsIGFzIHBlciB0dHd1X3JlbW90ZSgpLgogCQkgKi8KIAl9Ci0JV0FSTl9PTl9PTkNFKG93bmVyICZhbXA7JmFtcDsgIW93bmVyLSZndDtvbl9ycSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChvd25lciAmYW1wOyZhbXA7ICFvd25lci0mZ3Q7b25fcnEpOwogCXJldHVybiBvd25lcjsKIAogZGVhY3RpdmF0ZToKQEAgLTc2MzEsOCAmIzQzOzc2MzEsOCBAQCB2b2lkIHJ0X211dGV4X3NldHByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spCiAJICogcmVhbCBuZWVkIHRvIGJvb3N0LgogCSAqLwogCWlmICh1bmxpa2VseShwID09IHJxLSZndDtpZGxlKSkgewotCQlXQVJOX09OKHAgIT0gcnEtJmd0O2N1cnIpOwotCQlXQVJOX09OKHAtJmd0O3BpX2Jsb2NrZWRfb24pOwomIzQzOwkJV0FSTl9PTl9ERUZFUlJFRChwICE9IHJxLSZndDtjdXJyKTsKJiM0MzsJCVdBUk5fT05fREVGRVJSRUQocC0mZ3Q7cGlfYmxvY2tlZF9vbik7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKQEAgLTg0NjMsNyAmIzQzOzg0NjMsNyBAQCBzdGF0aWMgdm9pZCBiYWxhbmNlX3B1c2hfc2V0KGludCBjcHUsIGJvb2wgb24pCiAKIAlycV9sb2NrX2lycXNhdmUocnEsICZhbXA7cmYpOwogCWlmIChvbikgewotCQlXQVJOX09OX09OQ0UocnEtJmd0O2JhbGFuY2VfY2FsbGJhY2spOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLSZndDtiYWxhbmNlX2NhbGxiYWNrKTsKIAkJcnEtJmd0O2JhbGFuY2VfY2FsbGJhY2sgPSAmYW1wO2JhbGFuY2VfcHVzaF9jYWxsYmFjazsKIAl9IGVsc2UgaWYgKHJxLSZndDtiYWxhbmNlX2NhbGxiYWNrID09ICZhbXA7YmFsYW5jZV9wdXNoX2NhbGxiYWNrKSB7CiAJCXJxLSZndDtiYWxhbmNlX2NhbGxiYWNrID0gTlVMTDsKQEAgLTExMTUwLDcgJiM0MzsxMTE1MCw3IEBAIHN0cnVjdCBzY2hlZF9jaGFuZ2VfY3R4ICpzY2hlZF9jaGFuZ2VfYmVnaW4oc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQKIAkgKiBNdXN0IGV4Y2x1c2l2ZWx5IHVzZSBtYXRjaGVkIGZsYWdzIHNpbmNlIHRoaXMgaXMgYm90aCBkZXF1ZXVlIGFuZAogCSAqIGVucXVldWUuCiAJICovCi0JV0FSTl9PTl9PTkNFKGZsYWdzICZhbXA7IDB4RkZGRjAwMDApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoZmxhZ3MgJmFtcDsgMHhGRkZGMDAwMCk7CiAKIAlsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTsKIApAQCAtMTExOTgsNyAmIzQzOzExMTk4LDcgQEAgdm9pZCBzY2hlZF9jaGFuZ2VfZW5kKHN0cnVjdCBzY2hlZF9jaGFuZ2VfY3R4ICpjdHgpCiAJLyoKIAkgKiBDaGFuZ2luZyBjbGFzcyB3aXRob3V0ICpRVUVVRV9DTEFTUyBpcyBiYWQuCiAJICovCi0JV0FSTl9PTl9PTkNFKHAtJmd0O3NjaGVkX2NsYXNzICE9IGN0eC0mZ3Q7Y2xhc3MgJmFtcDsmYW1wOyAhKGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgRU5RVUVVRV9DTEFTUykpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2NoZWRfY2xhc3MgIT0gY3R4LSZndDtjbGFzcyAmYW1wOyZhbXA7ICEoY3R4LSZndDtmbGFncyAmYW1wOyBFTlFVRVVFX0NMQVNTKSk7CiAKIAlpZiAoKGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgRU5RVUVVRV9DTEFTUykgJmFtcDsmYW1wOyBwLSZndDtzY2hlZF9jbGFzcy0mZ3Q7c3dpdGNoaW5nX3RvKQogCQlwLSZndDtzY2hlZF9jbGFzcy0mZ3Q7c3dpdGNoaW5nX3RvKHJxLCBwKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlX3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQvY29yZV9zY2hlZC5jCmluZGV4IDczYjZiMjQyNjkxMTliLi5lYzg4ZWQ3ZDhlZTg3NyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvY29yZV9zY2hlZC5jCkBAIC02Nyw3ICYjNDM7NjcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzY2hlZF9jb3JlX3VwZGF0ZV9jb29raWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCSAqIGEgY29va2llIHVudGlsIGFmdGVyIHdlJiMzOTt2ZSByZW1vdmVkIGl0LCB3ZSBtdXN0IGhhdmUgY29yZSBzY2hlZHVsaW5nCiAJICogZW5hYmxlZCBoZXJlLgogCSAqLwotCVdBUk5fT05fT05DRSgocC0mZ3Q7Y29yZV9jb29raWUgfHwgY29va2llKSAmYW1wOyZhbXA7ICFzY2hlZF9jb3JlX2VuYWJsZWQocnEpKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKChwLSZndDtjb3JlX2Nvb2tpZSB8fCBjb29raWUpICZhbXA7JmFtcDsgIXNjaGVkX2NvcmVfZW5hYmxlZChycSkpOwogCiAJaWYgKHNjaGVkX2NvcmVfZW5xdWV1ZWQocCkpCiAJCXNjaGVkX2NvcmVfZGVxdWV1ZShycSwgcCwgREVRVUVVRV9TQVZFKTsKQEAgLTI0OSw3ICYjNDM7MjQ5LDcgQEAgdm9pZCBfX3NjaGVkX2NvcmVfYWNjb3VudF9mb3JjZWlkbGUoc3RydWN0IHJxICpycSkKIAogCWxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpOwogCi0JV0FSTl9PTl9PTkNFKCFycS0mZ3Q7Y29yZS0mZ3Q7Y29yZV9mb3JjZWlkbGVfY291bnQpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJxLSZndDtjb3JlLSZndDtjb3JlX2ZvcmNlaWRsZV9jb3VudCk7CiAKIAlpZiAocnEtJmd0O2NvcmUtJmd0O2NvcmVfZm9yY2VpZGxlX3N0YXJ0ID09IDApCiAJCXJldHVybjsKQEAgLTI2MCw3ICYjNDM7MjYwLDcgQEAgdm9pZCBfX3NjaGVkX2NvcmVfYWNjb3VudF9mb3JjZWlkbGUoc3RydWN0IHJxICpycSkKIAogCXJxLSZndDtjb3JlLSZndDtjb3JlX2ZvcmNlaWRsZV9zdGFydCA9IG5vdzsKIAotCWlmIChXQVJOX09OX09OQ0UoIXJxLSZndDtjb3JlLSZndDtjb3JlX2ZvcmNlaWRsZV9vY2N1cGF0aW9uKSkgewomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFycS0mZ3Q7Y29yZS0mZ3Q7Y29yZV9mb3JjZWlkbGVfb2NjdXBhdGlvbikpIHsKIAkJLyogY2FuJiMzOTt0IGJlIGZvcmNlZCBpZGxlIHdpdGhvdXQgYSBydW5uaW5nIHRhc2sgKi8KIAl9IGVsc2UgaWYgKHJxLSZndDtjb3JlLSZndDtjb3JlX2ZvcmNlaWRsZV9jb3VudCAmZ3Q7IDEgfHwKIAkJICAgcnEtJmd0O2NvcmUtJmd0O2NvcmVfZm9yY2VpZGxlX29jY3VwYXRpb24gJmd0OyAxKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9jcHVkZWFkbGluZS5jCmluZGV4IDBhMmI3ZTMwZmQxMGMxLi5lMzA1YThlOTkzZTI3YyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmMKQEAgLTE0OSw3ICYjNDM7MTQ5LDcgQEAgaW50IGNwdWRsX2ZpbmQoc3RydWN0IGNwdWRsICpjcCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCX0gZWxzZSB7CiAJCWludCBiZXN0X2NwdSA9IGNwdWRsX21heGltdW0oY3ApOwogCi0JCVdBUk5fT04oYmVzdF9jcHUgIT0gLTEgJmFtcDsmYW1wOyAhY3B1X3ByZXNlbnQoYmVzdF9jcHUpKTsKJiM0MzsJCVdBUk5fT05fREVGRVJSRUQoYmVzdF9jcHUgIT0gLTEgJmFtcDsmYW1wOyAhY3B1X3ByZXNlbnQoYmVzdF9jcHUpKTsKIAogCQlpZiAoY3B1bWFza190ZXN0X2NwdShiZXN0X2NwdSwgJmFtcDtwLSZndDtjcHVzX21hc2spICZhbXA7JmFtcDsKIAkJICAgIGRsX3RpbWVfYmVmb3JlKGRsX3NlLSZndDtkZWFkbGluZSwgY3AtJmd0O2VsZW1lbnRzWzBdLmRsKSkgewpAQCAtMTc3LDcgJiM0MzsxNzcsNyBAQCB2b2lkIGNwdWRsX2NsZWFyKHN0cnVjdCBjcHVkbCAqY3AsIGludCBjcHUsIGJvb2wgb25saW5lKQogCWludCBvbGRfaWR4LCBuZXdfY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlXQVJOX09OKCFjcHVfcHJlc2VudChjcHUpKTsKJiM0MzsJV0FSTl9PTl9ERUZFUlJFRCghY3B1X3ByZXNlbnQoY3B1KSk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjcC0mZ3Q7bG9jaywgZmxhZ3MpOwogCkBAIC0yMjAsNyAmIzQzOzIyMCw3IEBAIHZvaWQgY3B1ZGxfc2V0KHN0cnVjdCBjcHVkbCAqY3AsIGludCBjcHUsIHU2NCBkbCkKIAlpbnQgb2xkX2lkeDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JV0FSTl9PTighY3B1X3ByZXNlbnQoY3B1KSk7CiYjNDM7CVdBUk5fT05fREVGRVJSRUQoIWNwdV9wcmVzZW50KGNwdSkpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3AtJmd0O2xvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2RlYWRsaW5lLmMgYi9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYwppbmRleCA3ZGI0Yzg3ZGY4M2IwYS4uODYzYWM3NTA5MTkyZjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCkBAIC0yMTcsOCAmIzQzOzIxNyw4IEBAIHZvaWQgX19hZGRfcnVubmluZ19idyh1NjQgZGxfYncsIHN0cnVjdCBkbF9ycSAqZGxfcnEpCiAKIAlsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxX29mX2RsX3JxKGRsX3JxKSk7CiAJZGxfcnEtJmd0O3J1bm5pbmdfYncgJiM0Mzs9IGRsX2J3OwotCVdBUk5fT05fT05DRShkbF9ycS0mZ3Q7cnVubmluZ19idyAmbHQ7IG9sZCk7IC8qIG92ZXJmbG93ICovCi0JV0FSTl9PTl9PTkNFKGRsX3JxLSZndDtydW5uaW5nX2J3ICZndDsgZGxfcnEtJmd0O3RoaXNfYncpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtJmd0O3J1bm5pbmdfYncgJmx0OyBvbGQpOyAvKiBvdmVyZmxvdyAqLwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtJmd0O3J1bm5pbmdfYncgJmd0OyBkbF9ycS0mZ3Q7dGhpc19idyk7CiAJLyoga2ljayBjcHVmcmVxIChzZWUgdGhlIGNvbW1lbnQgaW4ga2VybmVsL3NjaGVkL3NjaGVkLmgpLiAqLwogCWNwdWZyZXFfdXBkYXRlX3V0aWwocnFfb2ZfZGxfcnEoZGxfcnEpLCAwKTsKIH0KQEAgLTIzMCw3ICYjNDM7MjMwLDcgQEAgdm9pZCBfX3N1Yl9ydW5uaW5nX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSkKIAogCWxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTsKIAlkbF9ycS0mZ3Q7cnVubmluZ19idyAtPSBkbF9idzsKLQlXQVJOX09OX09OQ0UoZGxfcnEtJmd0O3J1bm5pbmdfYncgJmd0OyBvbGQpOyAvKiB1bmRlcmZsb3cgKi8KJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLSZndDtydW5uaW5nX2J3ICZndDsgb2xkKTsgLyogdW5kZXJmbG93ICovCiAJaWYgKGRsX3JxLSZndDtydW5uaW5nX2J3ICZndDsgb2xkKQogCQlkbF9ycS0mZ3Q7cnVubmluZ19idyA9IDA7CiAJLyoga2ljayBjcHVmcmVxIChzZWUgdGhlIGNvbW1lbnQgaW4ga2VybmVsL3NjaGVkL3NjaGVkLmgpLiAqLwpAQCAtMjQ0LDcgJiM0MzsyNDQsNyBAQCB2b2lkIF9fYWRkX3JxX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSkKIAogCWxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTsKIAlkbF9ycS0mZ3Q7dGhpc19idyAmIzQzOz0gZGxfYnc7Ci0JV0FSTl9PTl9PTkNFKGRsX3JxLSZndDt0aGlzX2J3ICZsdDsgb2xkKTsgLyogb3ZlcmZsb3cgKi8KJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLSZndDt0aGlzX2J3ICZsdDsgb2xkKTsgLyogb3ZlcmZsb3cgKi8KIH0KIAogc3RhdGljIGlubGluZQpAQCAtMjU0LDEwICYjNDM7MjU0LDEwIEBAIHZvaWQgX19zdWJfcnFfYncodTY0IGRsX2J3LCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKQogCiAJbG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZl9kbF9ycShkbF9ycSkpOwogCWRsX3JxLSZndDt0aGlzX2J3IC09IGRsX2J3OwotCVdBUk5fT05fT05DRShkbF9ycS0mZ3Q7dGhpc19idyAmZ3Q7IG9sZCk7IC8qIHVuZGVyZmxvdyAqLwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtJmd0O3RoaXNfYncgJmd0OyBvbGQpOyAvKiB1bmRlcmZsb3cgKi8KIAlpZiAoZGxfcnEtJmd0O3RoaXNfYncgJmd0OyBvbGQpCiAJCWRsX3JxLSZndDt0aGlzX2J3ID0gMDsKLQlXQVJOX09OX09OQ0UoZGxfcnEtJmd0O3J1bm5pbmdfYncgJmd0OyBkbF9ycS0mZ3Q7dGhpc19idyk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChkbF9ycS0mZ3Q7cnVubmluZ19idyAmZ3Q7IGRsX3JxLSZndDt0aGlzX2J3KTsKIH0KIAogc3RhdGljIGlubGluZQpAQCAtMzM1LDcgJiM0MzszMzUsNyBAQCB2b2lkIGNhbmNlbF9pbmFjdGl2ZV90aW1lcihzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSkKIAogc3RhdGljIHZvaWQgZGxfY2hhbmdlX3V0aWxpemF0aW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IG5ld19idykKIHsKLQlXQVJOX09OX09OQ0UocC0mZ3Q7ZGwuZmxhZ3MgJmFtcDsgU0NIRURfRkxBR19TVUdPVik7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChwLSZndDtkbC5mbGFncyAmYW1wOyBTQ0hFRF9GTEFHX1NVR09WKTsKIAogCWlmICh0YXNrX29uX3JxX3F1ZXVlZChwKSkKIAkJcmV0dXJuOwpAQCAtNDE2LDcgJiM0Mzs0MTYsNyBAQCBzdGF0aWMgdm9pZCB0YXNrX25vbl9jb250ZW5kaW5nKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBib29sIGRsX3Rhc2spCiAJaWYgKGRsX2VudGl0eV9pc19zcGVjaWFsKGRsX3NlKSkKIAkJcmV0dXJuOwogCi0JV0FSTl9PTihkbF9zZS0mZ3Q7ZGxfbm9uX2NvbnRlbmRpbmcpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKGRsX3NlLSZndDtkbF9ub25fY29udGVuZGluZyk7CiAKIAl6ZXJvbGFnX3RpbWUgPSBkbF9zZS0mZ3Q7ZGVhZGxpbmUgLQogCQkgZGl2NjRfbG9uZygoZGxfc2UtJmd0O3J1bnRpbWUgKiBkbF9zZS0mZ3Q7ZGxfcGVyaW9kKSwKQEAgLTU4Miw3ICYjNDM7NTgyLDcgQEAgc3RhdGljIHZvaWQgZW5xdWV1ZV9wdXNoYWJsZV9kbF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbGVmdG1vc3Q7CiAKLQlXQVJOX09OX09OQ0UoIVJCX0VNUFRZX05PREUoJmFtcDtwLSZndDtwdXNoYWJsZV9kbF90YXNrcykpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIVJCX0VNUFRZX05PREUoJmFtcDtwLSZndDtwdXNoYWJsZV9kbF90YXNrcykpOwogCiAJbGVmdG1vc3QgPSByYl9hZGRfY2FjaGVkKCZhbXA7cC0mZ3Q7cHVzaGFibGVfZGxfdGFza3MsCiAJCQkJICZhbXA7cnEtJmd0O2RsLnB1c2hhYmxlX2RsX3Rhc2tzX3Jvb3QsCkBAIC02NjQsNyAmIzQzOzY2NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnEgKmRsX3Rhc2tfb2ZmbGluZV9taWdyYXRpb24oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwCiAJCQkgKiBGYWlsZWQgdG8gZmluZCBhbnkgc3VpdGFibGUgQ1BVLgogCQkJICogVGhlIHRhc2sgd2lsbCBuZXZlciBjb21lIGJhY2shCiAJCQkgKi8KLQkJCVdBUk5fT05fT05DRShkbF9iYW5kd2lkdGhfZW5hYmxlZCgpKTsKJiM0MzsJCQlXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfYmFuZHdpZHRoX2VuYWJsZWQoKSk7CiAKIAkJCS8qCiAJCQkgKiBJZiBhZG1pc3Npb24gY29udHJvbCBpcyBkaXNhYmxlZCB3ZQpAQCAtNzU2LDggJiM0Mzs3NTYsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfbmV3X2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSkKIAlzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpOwogCXN0cnVjdCBycSAqcnEgPSBycV9vZl9kbF9ycShkbF9ycSk7CiAKLQlXQVJOX09OKGlzX2RsX2Jvb3N0ZWQoZGxfc2UpKTsKLQlXQVJOX09OKGRsX3RpbWVfYmVmb3JlKHJxX2Nsb2NrKHJxKSwgZGxfc2UtJmd0O2RlYWRsaW5lKSk7CiYjNDM7CVdBUk5fT05fREVGRVJSRUQoaXNfZGxfYm9vc3RlZChkbF9zZSkpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKGRsX3RpbWVfYmVmb3JlKHJxX2Nsb2NrKHJxKSwgZGxfc2UtJmd0O2RlYWRsaW5lKSk7CiAKIAkvKgogCSAqIFdlIGFyZSByYWNpbmcgd2l0aCB0aGUgZGVhZGxpbmUgdGltZXIuIFNvLCBkbyBub3RoaW5nIGJlY2F1c2UKQEAgLTgwMSw3ICYjNDM7ODAxLDcgQEAgc3RhdGljIHZvaWQgcmVwbGVuaXNoX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSkKIAlzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpOwogCXN0cnVjdCBycSAqcnEgPSBycV9vZl9kbF9ycShkbF9ycSk7CiAKLQlXQVJOX09OX09OQ0UocGlfb2YoZGxfc2UpLSZndDtkbF9ydW50aW1lICZsdDs9IDApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocGlfb2YoZGxfc2UpLSZndDtkbF9ydW50aW1lICZsdDs9IDApOwogCiAJLyoKIAkgKiBUaGlzIGNvdWxkIGJlIHRoZSBjYXNlIGZvciBhICEtZGwgdGFzayB0aGF0IGlzIGJvb3N0ZWQuCkBAIC05NzUsNyAmIzQzOzk3NSw3IEBAIHVwZGF0ZV9kbF9yZXZpc2VkX3dha2V1cChzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IHJxICpycSkKIAkgKgogCSAqIFNlZSB1cGRhdGVfZGxfZW50aXR5KCkgY29tbWVudHMgZm9yIGZ1cnRoZXIgZGV0YWlscy4KIAkgKi8KLQlXQVJOX09OKGRsX3RpbWVfYmVmb3JlKGRsX3NlLSZndDtkZWFkbGluZSwgcnFfY2xvY2socnEpKSk7CiYjNDM7CVdBUk5fT05fREVGRVJSRUQoZGxfdGltZV9iZWZvcmUoZGxfc2UtJmd0O2RlYWRsaW5lLCBycV9jbG9jayhycSkpKTsKIAogCWRsX3NlLSZndDtydW50aW1lID0gKGRsX3NlLSZndDtkbF9kZW5zaXR5ICogbGF4aXR5KSAmZ3Q7Jmd0OyBCV19TSElGVDsKIH0KQEAgLTEwODAsNyAmIzQzOzEwODAsNyBAQCBzdGF0aWMgaW50IHN0YXJ0X2RsX3RpbWVyKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlKQogCSAqIChjdXJyZW50IHUgJmd0OyBVKS4KIAkgKi8KIAlpZiAoZGxfc2UtJmd0O2RsX2RlZmVyX2FybWVkKSB7Ci0JCVdBUk5fT05fT05DRSghZGxfc2UtJmd0O2RsX3Rocm90dGxlZCk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWRsX3NlLSZndDtkbF90aHJvdHRsZWQpOwogCQlhY3QgPSBuc190b19rdGltZShkbF9zZS0mZ3Q7ZGVhZGxpbmUgLSBkbF9zZS0mZ3Q7cnVudGltZSk7CiAJfSBlbHNlIHsKIAkJLyogYWN0ID0gZGVhZGxpbmUgLSByZWwtZGVhZGxpbmUgJiM0MzsgcGVyaW9kICovCkBAIC0xNDUxLDcgJiM0MzsxNDUxLDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlX2N1cnJfZGxfc2Uoc3RydWN0IHJxICpycSwgc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIHM2NAogCQkvKgogCQkgKiBOb24tc2VydmVycyB3b3VsZCBuZXZlciBnZXQgdGltZSBhY2NvdW50ZWQgd2hpbGUgdGhyb3R0bGVkLgogCQkgKi8KLQkJV0FSTl9PTl9PTkNFKCFkbF9zZXJ2ZXIoZGxfc2UpKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfc2VydmVyKGRsX3NlKSk7CiAKIAkJLyoKIAkJICogV2hpbGUgdGhlIHNlcnZlciBpcyBtYXJrZWQgaWRsZSwgZG8gbm90IHB1c2ggb3V0IHRoZQpAQCAtMTQ5Miw3ICYjNDM7MTQ5Miw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9jdXJyX2RsX3NlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBzNjQKIAkJICogYW5kIHF1ZXVlIHJpZ2h0IGF3YXkuIE90aGVyd2lzZSBub3RoaW5nIG1pZ2h0IHF1ZXVlIGl0LiBUaGF0JiMzOTtzIHNpbWlsYXIKIAkJICogdG8gd2hhdCBlbnF1ZXVlX2RsX2VudGl0eSgpIGRvZXMgb24gc3RhcnRfZGxfdGltZXI9PTAuIEZvciBub3csIGp1c3Qgd2Fybi4KIAkJICovCi0JCVdBUk5fT05fT05DRSghc3RhcnRfZGxfdGltZXIoZGxfc2UpKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRCghc3RhcnRfZGxfdGltZXIoZGxfc2UpKTsKIAogCQlyZXR1cm47CiAJfQpAQCAtMTgwMSw3ICYjNDM7MTgwMSw3IEBAIHZvaWQgZGxfc2VydmVyX3N0YXJ0KHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlKQogCSAqLwogCXJxLSZndDtkb25vci0mZ3Q7c2NoZWRfY2xhc3MtJmd0O3VwZGF0ZV9jdXJyKHJxKTsKIAotCWlmIChXQVJOX09OX09OQ0UoIWNwdV9vbmxpbmUoY3B1X29mKHJxKSkpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFjcHVfb25saW5lKGNwdV9vZihycSkpKSkKIAkJcmV0dXJuOwogCiAJdHJhY2Vfc2NoZWRfZGxfc2VydmVyX3N0YXJ0X3RwKGRsX3NlLCBjcHVfb2YocnEpLCBkbF9nZXRfdHlwZShkbF9zZSwgcnEpKTsKQEAgLTIwNzMsNyAmIzQzOzIwNzMsNyBAQCB2b2lkIGluY19kbF90YXNrcyhzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IGRsX3JxICpkbF9ycSkKIHN0YXRpYyBpbmxpbmUKIHZvaWQgZGVjX2RsX3Rhc2tzKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKQogewotCVdBUk5fT04oIWRsX3JxLSZndDtkbF9ucl9ydW5uaW5nKTsKJiM0MzsJV0FSTl9PTl9ERUZFUlJFRCghZGxfcnEtJmd0O2RsX25yX3J1bm5pbmcpOwogCWRsX3JxLSZndDtkbF9ucl9ydW5uaW5nLS07CiAKIAlpZiAoIWRsX3NlcnZlcihkbF9zZSkpCkBAIC0yMTY1LDcgJiM0MzsyMTY1LDcgQEAgc3RhdGljIHZvaWQgX19lbnF1ZXVlX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSkKIHsKIAlzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpOwogCi0JV0FSTl9PTl9PTkNFKCFSQl9FTVBUWV9OT0RFKCZhbXA7ZGxfc2UtJmd0O3JiX25vZGUpKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFSQl9FTVBUWV9OT0RFKCZhbXA7ZGxfc2UtJmd0O3JiX25vZGUpKTsKIAogCXJiX2FkZF9jYWNoZWQoJmFtcDtkbF9zZS0mZ3Q7cmJfbm9kZSwgJmFtcDtkbF9ycS0mZ3Q7cm9vdCwgX19kbF9sZXNzKTsKIApAQCAtMjE4OSw3ICYjNDM7MjE4OSw3IEBAIHN0YXRpYyB2b2lkIF9fZGVxdWV1ZV9kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpCiBzdGF0aWMgdm9pZAogZW5xdWV1ZV9kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIGludCBmbGFncykKIHsKLQlXQVJOX09OX09OQ0Uob25fZGxfcnEoZGxfc2UpKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKG9uX2RsX3JxKGRsX3NlKSk7CiAKIAl1cGRhdGVfc3RhdHNfZW5xdWV1ZV9kbChkbF9ycV9vZl9zZShkbF9zZSksIGRsX3NlLCBmbGFncyk7CiAKQEAgLTI2MTEsNyAmIzQzOzI2MTEsNyBAQCBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpfX3BpY2tfdGFza19kbChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKQogCQlyZXR1cm4gTlVMTDsKIAogCWRsX3NlID0gcGlja19uZXh0X2RsX2VudGl0eShkbF9ycSk7Ci0JV0FSTl9PTl9PTkNFKCFkbF9zZSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfc2UpOwogCiAJaWYgKGRsX3NlcnZlcihkbF9zZSkpIHsKIAkJcCA9IGRsX3NlLSZndDtzZXJ2ZXJfcGlja190YXNrKGRsX3NlLCByZik7CkBAIC0yODIzLDEyICYjNDM7MjgyMywxMiBAQCBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfcHVzaGFibGVfZGxfdGFzayhzdHJ1Y3QgcnEgKnJxKQogCWlmICghcCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlXQVJOX09OX09OQ0UocnEtJmd0O2NwdSAhPSB0YXNrX2NwdShwKSk7Ci0JV0FSTl9PTl9PTkNFKHRhc2tfY3VycmVudChycSwgcCkpOwotCVdBUk5fT05fT05DRShwLSZndDtucl9jcHVzX2FsbG93ZWQgJmx0Oz0gMSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChycS0mZ3Q7Y3B1ICE9IHRhc2tfY3B1KHApKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfY3VycmVudChycSwgcCkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7bnJfY3B1c19hbGxvd2VkICZsdDs9IDEpOwogCi0JV0FSTl9PTl9PTkNFKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7Ci0JV0FSTl9PTl9PTkNFKCFkbF90YXNrKHApKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfdGFzayhwKSk7CiAKIAlyZXR1cm4gcDsKIH0KQEAgLTI5NDQsNyAmIzQzOzI5NDQsNyBAQCBzdGF0aWMgaW50IHB1c2hfZGxfdGFzayhzdHJ1Y3QgcnEgKnJxKQogCWlmIChpc19taWdyYXRpb25fZGlzYWJsZWQobmV4dF90YXNrKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoV0FSTl9PTihuZXh0X3Rhc2sgPT0gcnEtJmd0O2N1cnIpKQomIzQzOwlpZiAoV0FSTl9PTl9ERUZFUlJFRChuZXh0X3Rhc2sgPT0gcnEtJmd0O2N1cnIpKQogCQlyZXR1cm4gMDsKIAogCS8qIFdlIG1pZ2h0IHJlbGVhc2UgcnEgbG9jayAqLwpAQCAtMzA1MCw4ICYjNDM7MzA1MCw4IEBAIHN0YXRpYyB2b2lkIHB1bGxfZGxfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEpCiAJCSAqLwogCQlpZiAocCAmYW1wOyZhbXA7IGRsX3RpbWVfYmVmb3JlKHAtJmd0O2RsLmRlYWRsaW5lLCBkbWluKSAmYW1wOyZhbXA7CiAJCSAgICBkbF90YXNrX2lzX2VhcmxpZXN0X2RlYWRsaW5lKHAsIHRoaXNfcnEpKSB7Ci0JCQlXQVJOX09OKHAgPT0gc3JjX3JxLSZndDtjdXJyKTsKLQkJCVdBUk5fT04oIXRhc2tfb25fcnFfcXVldWVkKHApKTsKJiM0MzsJCQlXQVJOX09OX0RFRkVSUkVEKHAgPT0gc3JjX3JxLSZndDtjdXJyKTsKJiM0MzsJCQlXQVJOX09OX0RFRkVSUkVEKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7CiAKIAkJCS8qCiAJCQkgKiBUaGVuIHdlIHB1bGwgaWZmIHAgaGFzIGFjdHVhbGx5IGFuIGVhcmxpZXIKQEAgLTMxMDksNyAmIzQzOzMxMDksNyBAQCBzdGF0aWMgdm9pZCBzZXRfY3B1c19hbGxvd2VkX2RsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIHsKIAlzdHJ1Y3QgcnEgKnJxOwogCi0JV0FSTl9PTl9PTkNFKCFkbF90YXNrKHApKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFkbF90YXNrKHApKTsKIAogCXJxID0gdGFza19ycShwKTsKIAkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC5jCmluZGV4IDVkMmQxOTQ3M2E4MmU4Li40N2QzYTRjMTY0NTVhYyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2V4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9leHQuYwpAQCAtNTEyLDEyICYjNDM7NTEyLDEyIEBAIGRvIHsJCQkJCQkJCQkJXAogICogU28gaWYga2ZfdGFza3NbXSBpcyBzZXQsIEBwJiMzOTtzIHNjaGVkdWxlci1wcm90ZWN0ZWQgZmllbGRzIGFyZSBzdGFibGUuCiAgKgogICoga2ZfdGFza3NbXSBjYW4gbm90IHN0YWNrLCBzbyB0YXNrLWJhc2VkIFNDWCBvcHMgbXVzdCBub3QgbmVzdC4gVGhlCi0gKiBXQVJOX09OX09OQ0UoKSBpbiBlYWNoIG1hY3JvIGNhdGNoZXMgYSByZS1lbnRyeSBvZiBhbnkgb2YgdGhlIHRocmVlIHZhcmlhbnRzCi0gKiB3aGlsZSBhIHByZXZpb3VzIG9uZSBpcyBzdGlsbCBpbiBwcm9ncmVzcy4KJiM0MzsgKiBXQVJOX09OX09OQ0VfREVGRVJSRUQoKSBpbiBlYWNoIG1hY3JvIGNhdGNoZXMgYSByZS1lbnRyeSBvZiBhbnkgb2YgdGhlIHRocmVlCiYjNDM7ICogdmFyaWFudHMgd2hpbGUgYSBwcmV2aW91cyBvbmUgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuCiAgKi8KICNkZWZpbmUgU0NYX0NBTExfT1BfVEFTSyhzY2gsIG9wLCBsb2NrZWRfcnEsIHRhc2ssIGFyZ3MuLi4pCQkJXAogZG8gewkJCQkJCQkJCQlcCi0JV0FSTl9PTl9PTkNFKGN1cnJlbnQtJmd0O3NjeC5rZl90YXNrc1swXSk7CQkJCQlcCiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChjdXJyZW50LSZndDtzY3gua2ZfdGFza3NbMF0pOwkJCVwKIAljdXJyZW50LSZndDtzY3gua2ZfdGFza3NbMF0gPSB0YXNrOwkJCQkJXAogCVNDWF9DQUxMX09QKChzY2gpLCBvcCwgbG9ja2VkX3JxLCB0YXNrLCAjI2FyZ3MpOwkJCVwKIAljdXJyZW50LSZndDtzY3gua2ZfdGFza3NbMF0gPSBOVUxMOwkJCQkJXApAQCAtNTI2LDcgJiM0Mzs1MjYsNyBAQCBkbyB7CQkJCQkJCQkJCVwKICNkZWZpbmUgU0NYX0NBTExfT1BfVEFTS19SRVQoc2NoLCBvcCwgbG9ja2VkX3JxLCB0YXNrLCBhcmdzLi4uKQkJCVwKICh7CQkJCQkJCQkJCVwKIAlfX3R5cGVvZl9fKChzY2gpLSZndDtvcHMub3AodGFzaywgIyNhcmdzKSkgX19yZXQ7CQkJCVwKLQlXQVJOX09OX09OQ0UoY3VycmVudC0mZ3Q7c2N4LmtmX3Rhc2tzWzBdKTsJCQkJCVwKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtJmd0O3NjeC5rZl90YXNrc1swXSk7CQkJXAogCWN1cnJlbnQtJmd0O3NjeC5rZl90YXNrc1swXSA9IHRhc2s7CQkJCQlcCiAJX19yZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2ssICMjYXJncyk7CQlcCiAJY3VycmVudC0mZ3Q7c2N4LmtmX3Rhc2tzWzBdID0gTlVMTDsJCQkJCVwKQEAgLTUzNiw3ICYjNDM7NTM2LDcgQEAgZG8gewkJCQkJCQkJCQlcCiAjZGVmaW5lIFNDWF9DQUxMX09QXzJUQVNLU19SRVQoc2NoLCBvcCwgbG9ja2VkX3JxLCB0YXNrMCwgdGFzazEsIGFyZ3MuLi4pCVwKICh7CQkJCQkJCQkJCVwKIAlfX3R5cGVvZl9fKChzY2gpLSZndDtvcHMub3AodGFzazAsIHRhc2sxLCAjI2FyZ3MpKSBfX3JldDsJCQlcCi0JV0FSTl9PTl9PTkNFKGN1cnJlbnQtJmd0O3NjeC5rZl90YXNrc1swXSk7CQkJCQlcCiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChjdXJyZW50LSZndDtzY3gua2ZfdGFza3NbMF0pOwkJCVwKIAljdXJyZW50LSZndDtzY3gua2ZfdGFza3NbMF0gPSB0YXNrMDsJCQkJCVwKIAljdXJyZW50LSZndDtzY3gua2ZfdGFza3NbMV0gPSB0YXNrMTsJCQkJCVwKIAlfX3JldCA9IFNDWF9DQUxMX09QX1JFVCgoc2NoKSwgb3AsIGxvY2tlZF9ycSwgdGFzazAsIHRhc2sxLCAjI2FyZ3MpOwlcCkBAIC02ODcsNyAmIzQzOzY4Nyw3IEBAIHN0YXRpYyBib29sIG5sZHNxX2N1cnNvcl9sb3N0X3Rhc2soc3RydWN0IHNjeF9kc3FfbGlzdF9ub2RlICpjdXJzb3IsCiAJCXJldHVybiB0cnVlOwogCiAJLyogaWYgQHAgaGFzIHN0YXllZCBvbiBAZHNxLCBpdHMgcnEgY291bGRuJiMzOTt0IGhhdmUgY2hhbmdlZCAqLwotCWlmIChXQVJOX09OX09OQ0UocnEgIT0gdGFza19ycShwKSkpCiYjNDM7CWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocnEgIT0gdGFza19ycShwKSkpCiAJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIGZhbHNlOwpAQCAtMTI4Miw3ICYjNDM7MTI4Miw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkdWxlX3JlZW5xX2xvY2FsKHN0cnVjdCBycSAqcnEsIHU2NCByZWVucV9mbGFncykKIHsKIAlzdHJ1Y3Qgc2N4X3NjaGVkICpyb290ID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKHNjeF9yb290KTsKIAotCWlmIChXQVJOX09OX09OQ0UoIXJvb3QpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFyb290KSkKIAkJcmV0dXJuOwogCiAJc2NoZWR1bGVfZHNxX3JlZW5xKHJvb3QsICZhbXA7cnEtJmd0O3NjeC5sb2NhbF9kc3EsIHJlZW5xX2ZsYWdzLCBycSk7CkBAIC0xMzc5LDcgJiM0MzsxMzc5LDcgQEAgc3RhdGljIHZvaWQgZHNxX2luY19ucihzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgZW4KIAkgKi8KIAlpZiAoZW5xX2ZsYWdzICZhbXA7IFNDWF9FTlFfSU1NRUQpIHsKIAkJaWYgKHVubGlrZWx5KGRzcS0mZ3Q7aWQgIT0gU0NYX0RTUV9MT0NBTCkpIHsKLQkJCVdBUk5fT05fT05DRSghKGVucV9mbGFncyAmYW1wOyBTQ1hfRU5RX0dEU1FfRkFMTEJBQ0spKTsKJiM0MzsJCQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIShlbnFfZmxhZ3MgJmFtcDsgU0NYX0VOUV9HRFNRX0ZBTExCQUNLKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJcC0mZ3Q7c2N4LmZsYWdzIHw9IFNDWF9UQVNLX0lNTUVEOwpAQCAtMTM4OCw3ICYjNDM7MTM4OCw3IEBAIHN0YXRpYyB2b2lkIGRzcV9pbmNfbnIoc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVuCiAJaWYgKHAtJmd0O3NjeC5mbGFncyAmYW1wOyBTQ1hfVEFTS19JTU1FRCkgewogCQlzdHJ1Y3QgcnEgKnJxID0gY29udGFpbmVyX29mKGRzcSwgc3RydWN0IHJxLCBzY3gubG9jYWxfZHNxKTsKIAotCQlpZiAoV0FSTl9PTl9PTkNFKGRzcS0mZ3Q7aWQgIT0gU0NYX0RTUV9MT0NBTCkpCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRzcS0mZ3Q7aWQgIT0gU0NYX0RTUV9MT0NBTCkpCiAJCQlyZXR1cm47CiAKIAkJcnEtJmd0O3NjeC5ucl9pbW1lZCYjNDM7JiM0Mzs7CkBAIC0xNDEwLDggJiM0MzsxNDEwLDggQEAgc3RhdGljIHZvaWQgZHNxX2RlY19ucihzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCWlmIChwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfSU1NRUQpIHsKIAkJc3RydWN0IHJxICpycSA9IGNvbnRhaW5lcl9vZihkc3EsIHN0cnVjdCBycSwgc2N4LmxvY2FsX2RzcSk7CiAKLQkJaWYgKFdBUk5fT05fT05DRShkc3EtJmd0O2lkICE9IFNDWF9EU1FfTE9DQUwpIHx8Ci0JCSAgICBXQVJOX09OX09OQ0UocnEtJmd0O3NjeC5ucl9pbW1lZCAmbHQ7PSAwKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLSZndDtpZCAhPSBTQ1hfRFNRX0xPQ0FMKSB8fAomIzQzOwkJICAgIFdBUk5fT05fT05DRV9ERUZFUlJFRChycS0mZ3Q7c2N4Lm5yX2ltbWVkICZsdDs9IDApKQogCQkJcmV0dXJuOwogCiAJCXJxLSZndDtzY3gubnJfaW1tZWQtLTsKQEAgLTE1MjEsOSAmIzQzOzE1MjEsOSBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaF9lbnF1ZXVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSwKIHsKIAlib29sIGlzX2xvY2FsID0gZHNxLSZndDtpZCA9PSBTQ1hfRFNRX0xPQ0FMOwogCi0JV0FSTl9PTl9PTkNFKHAtJmd0O3NjeC5kc3EgfHwgIWxpc3RfZW1wdHkoJmFtcDtwLSZndDtzY3guZHNxX2xpc3Qubm9kZSkpOwotCVdBUk5fT05fT05DRSgocC0mZ3Q7c2N4LmRzcV9mbGFncyAmYW1wOyBTQ1hfVEFTS19EU1FfT05fUFJJUSkgfHwKLQkJICAgICAhUkJfRU1QVFlfTk9ERSgmYW1wO3AtJmd0O3NjeC5kc3FfcHJpcSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2N4LmRzcSB8fCAhbGlzdF9lbXB0eSgmYW1wO3AtJmd0O3NjeC5kc3FfbGlzdC5ub2RlKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCgocC0mZ3Q7c2N4LmRzcV9mbGFncyAmYW1wOyBTQ1hfVEFTS19EU1FfT05fUFJJUSkgfHwKJiM0MzsJCQkgICAgICAhUkJfRU1QVFlfTk9ERSgmYW1wO3AtJmd0O3NjeC5kc3FfcHJpcSkpOwogCiAJaWYgKCFpc19sb2NhbCkgewogCQlyYXdfc3Bpbl9sb2NrX25lc3RlZCgmYW1wO2RzcS0mZ3Q7bG9jaywKQEAgLTE2NDYsNyAmIzQzOzE2NDYsNyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaF9lbnF1ZXVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSwKIHN0YXRpYyB2b2lkIHRhc2tfdW5saW5rX2Zyb21fZHNxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQkgc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EpCiB7Ci0JV0FSTl9PTl9PTkNFKGxpc3RfZW1wdHkoJmFtcDtwLSZndDtzY3guZHNxX2xpc3Qubm9kZSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQobGlzdF9lbXB0eSgmYW1wO3AtJmd0O3NjeC5kc3FfbGlzdC5ub2RlKSk7CiAKIAlpZiAocC0mZ3Q7c2N4LmRzcV9mbGFncyAmYW1wOyBTQ1hfVEFTS19EU1FfT05fUFJJUSkgewogCQlyYl9lcmFzZSgmYW1wO3AtJmd0O3NjeC5kc3FfcHJpcSwgJmFtcDtkc3EtJmd0O3ByaXEpOwpAQCAtMTcwOSw3ICYjNDM7MTcwOSw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoX2RlcXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCQkgKiBob2xkaW5nX2NwdSB3aGljaCB0ZWxscyBkaXNwYXRjaF90b19sb2NhbF9kc3EoKSB0aGF0IGl0IGxvc3QKIAkJICogdGhlIHJhY2UuCiAJCSAqLwotCQlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJmFtcDtwLSZndDtzY3guZHNxX2xpc3Qubm9kZSkpOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KCZhbXA7cC0mZ3Q7c2N4LmRzcV9saXN0Lm5vZGUpKTsKIAkJcC0mZ3Q7c2N4LmhvbGRpbmdfY3B1ID0gLTE7CiAJfQogCXAtJmd0O3NjeC5kc3EgPSBOVUxMOwpAQCAtMTc4Nyw4ICYjNDM7MTc4Nyw4IEBAIHN0YXRpYyB2b2lkIG1hcmtfZGlyZWN0X2Rpc3BhdGNoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwKIAkJcmV0dXJuOwogCX0KIAotCVdBUk5fT05fT05DRShwLSZndDtzY3guZGRzcF9kc3FfaWQgIT0gU0NYX0RTUV9JTlZBTElEKTsKLQlXQVJOX09OX09OQ0UocC0mZ3Q7c2N4LmRkc3BfZW5xX2ZsYWdzKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtJmd0O3NjeC5kZHNwX2RzcV9pZCAhPSBTQ1hfRFNRX0lOVkFMSUQpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2N4LmRkc3BfZW5xX2ZsYWdzKTsKIAogCXAtJmd0O3NjeC5kZHNwX2RzcV9pZCA9IGRzcV9pZDsKIAlwLSZndDtzY3guZGRzcF9lbnFfZmxhZ3MgPSBlbnFfZmxhZ3M7CkBAIC0xODU1LDcgJiM0MzsxODU1LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0X2Rpc3BhdGNoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkJYnJlYWs7CiAJCX0KIAotCQlXQVJOX09OX09OQ0UocC0mZ3Q7c2N4LmRzcSB8fCAhbGlzdF9lbXB0eSgmYW1wO3AtJmd0O3NjeC5kc3FfbGlzdC5ub2RlKSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2N4LmRzcSB8fCAhbGlzdF9lbXB0eSgmYW1wO3AtJmd0O3NjeC5kc3FfbGlzdC5ub2RlKSk7CiAJCWxpc3RfYWRkX3RhaWwoJmFtcDtwLSZndDtzY3guZHNxX2xpc3Qubm9kZSwKIAkJCSAgICAgICZhbXA7cnEtJmd0O3NjeC5kZHNwX2RlZmVycmVkX2xvY2Fscyk7CiAJCXNjaGVkdWxlX2RlZmVycmVkX2xvY2tlZChycSk7CkBAIC0xODg4LDcgJiM0MzsxODg4LDcgQEAgc3RhdGljIHZvaWQgZG9fZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVucV9mbGFncywKIAlzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcTsKIAl1bnNpZ25lZCBsb25nIHFzZXE7CiAKLQlXQVJOX09OX09OQ0UoIShwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfUVVFVUVEKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghKHAtJmd0O3NjeC5mbGFncyAmYW1wOyBTQ1hfVEFTS19RVUVVRUQpKTsKIAogCS8qIGludGVybmFsIG1vdmVtZW50cyAtIHJxIG1pZ3JhdGlvbiAvIFJFU1RPUkUgKi8KIAlpZiAoc3RpY2t5X2NwdSA9PSBjcHVfb2YocnEpKQpAQCAtMTkzOCwxMSAmIzQzOzE5MzgsMTEgQEAgc3RhdGljIHZvaWQgZG9fZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVucV9mbGFncywKIAkvKiBEU1EgYnlwYXNzIGRpZG4mIzM5O3QgdHJpZ2dlciwgZW5xdWV1ZSBvbiB0aGUgQlBGIHNjaGVkdWxlciAqLwogCXFzZXEgPSBycS0mZ3Q7c2N4Lm9wc19xc2VxJiM0MzsmIzQzOyAmbHQ7Jmx0OyBTQ1hfT1BTU19RU0VRX1NISUZUOwogCi0JV0FSTl9PTl9PTkNFKGF0b21pY19sb25nX3JlYWQoJmFtcDtwLSZndDtzY3gub3BzX3N0YXRlKSAhPSBTQ1hfT1BTU19OT05FKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGF0b21pY19sb25nX3JlYWQoJmFtcDtwLSZndDtzY3gub3BzX3N0YXRlKSAhPSBTQ1hfT1BTU19OT05FKTsKIAlhdG9taWNfbG9uZ19zZXQoJmFtcDtwLSZndDtzY3gub3BzX3N0YXRlLCBTQ1hfT1BTU19RVUVVRUlORyB8IHFzZXEpOwogCiAJZGRzcF90YXNrcCA9IHRoaXNfY3B1X3B0cigmYW1wO2RpcmVjdF9kaXNwYXRjaF90YXNrKTsKLQlXQVJOX09OX09OQ0UoKmRkc3BfdGFza3ApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoKmRkc3BfdGFza3ApOwogCSpkZHNwX3Rhc2twID0gcDsKIAogCVNDWF9DQUxMX09QX1RBU0soc2NoLCBlbnF1ZXVlLCBycSwgcCwgZW5xX2ZsYWdzKTsKQEAgLTIwMzksNyAmIzQzOzIwMzksNyBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlX3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNvcmVfZW5xXwogCQlzdGlja3lfY3B1ID0gY3B1X29mKHJxKTsKIAogCWlmIChwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfUVVFVUVEKSB7Ci0JCVdBUk5fT05fT05DRSghdGFza19ydW5uYWJsZShwKSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXRhc2tfcnVubmFibGUocCkpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIxNTksNyAmIzQzOzIxNTksNyBAQCBzdGF0aWMgYm9vbCBkZXF1ZXVlX3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNvcmVfZGVxXwogCQlkZXFfZmxhZ3MgfD0gU0NYX0RFUV9TQ0hFRF9DSEFOR0U7CiAKIAlpZiAoIShwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfUVVFVUVEKSkgewotCQlXQVJOX09OX09OQ0UodGFza19ydW5uYWJsZShwKSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19ydW5uYWJsZShwKSk7CiAJCXJldHVybiB0cnVlOwogCX0KIApAQCAtMjI1Niw3ICYjNDM7MjI1Niw3IEBAIHN0YXRpYyB2b2lkIG1vdmVfbG9jYWxfdGFza190b19sb2NhbF9kc3Eoc3RydWN0IHNjeF9zY2hlZCAqc2NoLAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtzcmNfZHNxLSZndDtsb2NrKTsKIAlsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKGRzdF9ycSk7CiAKLQlXQVJOX09OX09OQ0UocC0mZ3Q7c2N4LmhvbGRpbmdfY3B1ICZndDs9IDApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2N4LmhvbGRpbmdfY3B1ICZndDs9IDApOwogCiAJaWYgKGVucV9mbGFncyAmYW1wOyAoU0NYX0VOUV9IRUFEIHwgU0NYX0VOUV9QUkVFTVBUKSkKIAkJbGlzdF9hZGQoJmFtcDtwLSZndDtzY3guZHNxX2xpc3Qubm9kZSwgJmFtcDtkc3RfZHNxLSZndDtsaXN0KTsKQEAgLTIyOTksOCAmIzQzOzIyOTksOCBAQCBzdGF0aWMgdm9pZCBtb3ZlX3JlbW90ZV90YXNrX3RvX2xvY2FsX2RzcShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlbnFfZmxhZ3MsCiAJICogdHJ1bmNhdGUgdGhlIHVwcGVyIDMyIGJpdC4gQXMgd2Ugb3duIEBycSwgd2UgY2FuIHBhc3MgdGhlbSB0aHJvdWdoCiAJICogQHJxLSZndDtzY3guZXh0cmFfZW5xX2ZsYWdzIGluc3RlYWQuCiAJICovCi0JV0FSTl9PTl9PTkNFKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdV9vZihkc3RfcnEpLCBwLSZndDtjcHVzX3B0cikpOwotCVdBUk5fT05fT05DRShkc3RfcnEtJmd0O3NjeC5leHRyYV9lbnFfZmxhZ3MpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNwdW1hc2tfdGVzdF9jcHUoY3B1X29mKGRzdF9ycSksIHAtJmd0O2NwdXNfcHRyKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChkc3RfcnEtJmd0O3NjeC5leHRyYV9lbnFfZmxhZ3MpOwogCWRzdF9ycS0mZ3Q7c2N4LmV4dHJhX2VucV9mbGFncyA9IGVucV9mbGFnczsKIAlhY3RpdmF0ZV90YXNrKGRzdF9ycSwgcCwgMCk7CiAJZHN0X3JxLSZndDtzY3guZXh0cmFfZW5xX2ZsYWdzID0gMDsKQEAgLTIzMzEsNyAmIzQzOzIzMzEsNyBAQCBzdGF0aWMgYm9vbCB0YXNrX2Nhbl9ydW5fb25fcmVtb3RlX3JxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwKIHsKIAlzMzIgY3B1ID0gY3B1X29mKHJxKTsKIAotCVdBUk5fT05fT05DRSh0YXNrX2NwdShwKSA9PSBjcHUpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19jcHUocCkgPT0gY3B1KTsKIAogCS8qCiAJICogSWYgQHAgaGFzIG1pZ3JhdGlvbiBkaXNhYmxlZCwgQHAtJmd0O2NwdXNfcHRyIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBvbmx5CkBAIC0yNDExLDcgJiM0MzsyNDExLDcgQEAgc3RhdGljIGJvb2wgdW5saW5rX2RzcV9hbmRfbG9ja19zcmNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2RzcS0mZ3Q7bG9jayk7CiAKLQlXQVJOX09OX09OQ0UocC0mZ3Q7c2N4LmhvbGRpbmdfY3B1ICZndDs9IDApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2N4LmhvbGRpbmdfY3B1ICZndDs9IDApOwogCXRhc2tfdW5saW5rX2Zyb21fZHNxKHAsIGRzcSk7CiAJcC0mZ3Q7c2N4LmhvbGRpbmdfY3B1ID0gY3B1OwogCkBAIC0yNDIwLDcgJiM0MzsyNDIwLDcgQEAgc3RhdGljIGJvb2wgdW5saW5rX2RzcV9hbmRfbG9ja19zcmNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCiAJLyogdGFza19ycSBjb3VsZG4mIzM5O3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJiMzOTtyZSBzdGlsbCB0aGUgaG9sZGluZyBjcHUgKi8KIAlyZXR1cm4gbGlrZWx5KHAtJmd0O3NjeC5ob2xkaW5nX2NwdSA9PSBjcHUpICZhbXA7JmFtcDsKLQkJIVdBUk5fT05fT05DRShzcmNfcnEgIT0gdGFza19ycShwKSk7CiYjNDM7CQkhV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNyY19ycSAhPSB0YXNrX3JxKHApKTsKIH0KIAogc3RhdGljIGJvb2wgY29uc3VtZV9yZW1vdGVfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEsCkBAIC0yNjMwLDcgJiM0MzsyNjMwLDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hfdG9fbG9jYWxfZHNxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSwKIAogCS8qIHRhc2tfcnEgY291bGRuJiMzOTt0IGhhdmUgY2hhbmdlZCBpZiB3ZSYjMzk7cmUgc3RpbGwgdGhlIGhvbGRpbmcgY3B1ICovCiAJaWYgKGxpa2VseShwLSZndDtzY3guaG9sZGluZ19jcHUgPT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkgJmFtcDsmYW1wOwotCSAgICAhV0FSTl9PTl9PTkNFKHNyY19ycSAhPSB0YXNrX3JxKHApKSkgewomIzQzOwkgICAgIVdBUk5fT05fT05DRV9ERUZFUlJFRChzcmNfcnEgIT0gdGFza19ycShwKSkpIHsKIAkJLyoKIAkJICogSWYgQHAgaXMgc3RheWluZyBvbiB0aGUgc2FtZSBycSwgdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBnbwogCQkgKiB0aHJvdWdoIHRoZSBmdWxsIGRlYWN0aXZhdGUvYWN0aXZhdGUgY3ljbGUuIE9wdGltaXplIGJ5CkBAIC0zMDk5LDcgJiM0MzszMDk5LDcgQEAgc3RhdGljIHZvaWQgcHV0X3ByZXZfdGFza19zY3goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkgKiB3aGljaCBzaG91bGQgdHJpZ2dlciBhbiBleHBsaWNpdCBmb2xsb3ctdXAgc2NoZWR1bGluZyBldmVudC4KIAkJICovCiAJCWlmIChuZXh0ICZhbXA7JmFtcDsgc2NoZWRfY2xhc3NfYWJvdmUoJmFtcDtleHRfc2NoZWRfY2xhc3MsIG5leHQtJmd0O3NjaGVkX2NsYXNzKSkgewotCQkJV0FSTl9PTl9PTkNFKCEoc2NoLSZndDtvcHMuZmxhZ3MgJmFtcDsgU0NYX09QU19FTlFfTEFTVCkpOwomIzQzOwkJCVdBUk5fT05fT05DRV9ERUZFUlJFRCghKHNjaC0mZ3Q7b3BzLmZsYWdzICZhbXA7IFNDWF9PUFNfRU5RX0xBU1QpKTsKIAkJCWRvX2VucXVldWVfdGFzayhycSwgcCwgU0NYX0VOUV9MQVNULCAtMSk7CiAJCX0gZWxzZSB7CiAJCQlkb19lbnF1ZXVlX3Rhc2socnEsIHAsIDAsIC0xKTsKQEAgLTMyMDEsNyAmIzQzOzMyMDEsNyBAQCBkb19waWNrX3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYsIGJvb2wgZm9yY2Vfc2N4KQogCWtlZXBfcHJldiA9IHJxLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1JRX0JBTF9LRUVQOwogCWlmICh1bmxpa2VseShrZWVwX3ByZXYgJmFtcDsmYW1wOwogCQkgICAgIHByZXYtJmd0O3NjaGVkX2NsYXNzICE9ICZhbXA7ZXh0X3NjaGVkX2NsYXNzKSkgewotCQlXQVJOX09OX09OQ0Uoc2N4X2VuYWJsZV9zdGF0ZSgpID09IFNDWF9FTkFCTEVEKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRChzY3hfZW5hYmxlX3N0YXRlKCkgPT0gU0NYX0VOQUJMRUQpOwogCQlrZWVwX3ByZXYgPSBmYWxzZTsKIAl9CiAKQEAgLTMzMzIsNyAmIzQzOzMzMzIsNyBAQCBzdGF0aWMgaW50IHNlbGVjdF90YXNrX3JxX3NjeChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwcmV2X2NwdSwgaW50IHdha2VfZmxhZwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKipkZHNwX3Rhc2twOwogCiAJCWRkc3BfdGFza3AgPSB0aGlzX2NwdV9wdHIoJmFtcDtkaXJlY3RfZGlzcGF0Y2hfdGFzayk7Ci0JCVdBUk5fT05fT05DRSgqZGRzcF90YXNrcCk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoKmRkc3BfdGFza3ApOwogCQkqZGRzcF90YXNrcCA9IHA7CiAKIAkJdGhpc19ycSgpLSZndDtzY3guaW5fc2VsZWN0X2NwdSA9IHRydWU7CkBAIC0zNjIwLDcgJiM0MzszNjIwLDcgQEAgc3RhdGljIHZvaWQgX19zY3hfZW5hYmxlX3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJICogdHJhbnNpdGlvbnMgYXJlIGNvbnNpc3RlbnQsIHRoZSBmbGFnIHNob3VsZCBhbHdheXMgYmUgY2xlYXIKIAkgKiBoZXJlLgogCSAqLwotCVdBUk5fT05fT05DRShwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7CiAKIAkvKgogCSAqIFNldCB0aGUgd2VpZ2h0IGJlZm9yZSBjYWxsaW5nIG9wcy5lbmFibGUoKSBzbyB0aGF0IHRoZSBzY2hlZHVsZXIKQEAgLTM2NTEsNyAmIzQzOzM2NTEsNyBAQCBzdGF0aWMgdm9pZCBzY3hfZGlzYWJsZV90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOwogCiAJbG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7Ci0JV0FSTl9PTl9PTkNFKHNjeF9nZXRfdGFza19zdGF0ZShwKSAhPSBTQ1hfVEFTS19FTkFCTEVEKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjeF9nZXRfdGFza19zdGF0ZShwKSAhPSBTQ1hfVEFTS19FTkFCTEVEKTsKIAogCWNsZWFyX2RpcmVjdF9kaXNwYXRjaChwKTsKIApAQCAtMzY2NCw3ICYjNDM7MzY2NCw3IEBAIHN0YXRpYyB2b2lkIHNjeF9kaXNhYmxlX3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJICogdHJhbnNpdGlvbnMgYXJlIGNvbnNpc3RlbnQsIHRoZSBmbGFnIHNob3VsZCBhbHdheXMgYmUgY2xlYXIKIAkgKiBoZXJlLgogCSAqLwotCVdBUk5fT05fT05DRShwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChwLSZndDtzY3guZmxhZ3MgJmFtcDsgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fc2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsCkBAIC0zNjg5LDcgJiM0MzszNjg5LDcgQEAgc3RhdGljIHZvaWQgX19zY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwKIAkJc2N4X2Rpc2FibGVfdGFzayhzY2gsIHApOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlXQVJOX09OX09OQ0UodHJ1ZSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQodHJ1ZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM3MjYsNyAmIzQzOzM3MjYsNyBAQCBzdGF0aWMgdm9pZCBzY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwKIAkgKiBwYXRoLCBzbyBpdCYjMzk7cyBhbHdheXMgY2xlYXIgd2hlbiBAcCBhcnJpdmVzIGhlcmUgaW4gJVNDWF9UQVNLX05PTkUuCiAJICovCiAJaWYgKHAtJmd0O3NjeC5mbGFncyAmYW1wOyBTQ1hfVEFTS19TVUJfSU5JVCkgewotCQlpZiAoIVdBUk5fT05fT05DRSghc2N4X2VuYWJsaW5nX3N1Yl9zY2hlZCkpCiYjNDM7CQlpZiAoIVdBUk5fT05fT05DRV9ERUZFUlJFRCghc2N4X2VuYWJsaW5nX3N1Yl9zY2hlZCkpCiAJCQlzY3hfc3ViX2luaXRfY2FuY2VsX3Rhc2soc2N4X2VuYWJsaW5nX3N1Yl9zY2hlZCwgcCk7CiAJCXAtJmd0O3NjeC5mbGFncyAmYW1wOz0gflNDWF9UQVNLX1NVQl9JTklUOwogCX0KQEAgLTM4MTgsNyAmIzQzOzM4MTgsNyBAQCB2b2lkIHNjeF9jYW5jZWxfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJCXN0cnVjdCBycV9mbGFncyByZjsKIAogCQlycSA9IHRhc2tfcnFfbG9jayhwLCAmYW1wO3JmKTsKLQkJV0FSTl9PTl9PTkNFKHNjeF9nZXRfdGFza19zdGF0ZShwKSAmZ3Q7PSBTQ1hfVEFTS19SRUFEWSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoc2N4X2dldF90YXNrX3N0YXRlKHApICZndDs9IFNDWF9UQVNLX1JFQURZKTsKIAkJc2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzY3hfdGFza19zY2hlZChwKSwgcCk7CiAJCXRhc2tfcnFfdW5sb2NrKHJxLCBwLCAmYW1wO3JmKTsKIAl9CkBAIC0zOTg2LDcgJiM0MzszOTg2LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19kZHNwX2RlZmVycmVkX2xvY2FscyhzdHJ1Y3QgcnEgKnJxKQogCQljbGVhcl9kaXJlY3RfZGlzcGF0Y2gocCk7CiAKIAkJZHNxID0gZmluZF9kc3FfZm9yX2Rpc3BhdGNoKHNjaCwgcnEsIGRzcV9pZCwgdGFza19jcHUocCkpOwotCQlpZiAoIVdBUk5fT05fT05DRShkc3EtJmd0O2lkICE9IFNDWF9EU1FfTE9DQUwpKQomIzQzOwkJaWYgKCFXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLSZndDtpZCAhPSBTQ1hfRFNRX0xPQ0FMKSkKIAkJCWRpc3BhdGNoX3RvX2xvY2FsX2RzcShzY2gsIHJxLCBkc3EsIHAsIGVucV9mbGFncyk7CiAJfQogfQpAQCAtNDA0MSw3ICYjNDM7NDA0MSw3IEBAIHN0YXRpYyB1MzIgcmVlbnFfbG9jYWwoc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgcnEgKnJxLCB1NjQgcmVlbnFfZmxhZ3MpCiAKIAlsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTsKIAotCWlmIChXQVJOX09OX09OQ0UocmVlbnFfZmxhZ3MgJmFtcDsgX19TQ1hfUkVFTlFfVFNSX01BU0spKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJlZW5xX2ZsYWdzICZhbXA7IF9fU0NYX1JFRU5RX1RTUl9NQVNLKSkKIAkJcmVlbnFfZmxhZ3MgJmFtcDs9IH5fX1NDWF9SRUVOUV9UU1JfTUFTSzsKIAlpZiAocnFfaXNfb3BlbihycSwgMCkpCiAJCXJlZW5xX2ZsYWdzIHw9IFNDWF9SRUVOUV9UU1JfUlFfT1BFTjsKQEAgLTQwNzgsNyAmIzQzOzQwNzgsNyBAQCBzdGF0aWMgdTMyIHJlZW5xX2xvY2FsKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSwgdTY0IHJlZW5xX2ZsYWdzKQogCiAJCWRpc3BhdGNoX2RlcXVldWUocnEsIHApOwogCi0JCWlmIChXQVJOX09OX09OQ0UocC0mZ3Q7c2N4LmZsYWdzICZhbXA7IFNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2N4LmZsYWdzICZhbXA7IFNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLKSkKIAkJCXAtJmd0O3NjeC5mbGFncyAmYW1wOz0gflNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLOwogCQlwLSZndDtzY3guZmxhZ3MgfD0gcmVhc29uOwogCkBAIC00MTk5LDcgJiM0Mzs0MTk5LDcgQEAgc3RhdGljIHZvaWQgcmVlbnFfdXNlcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSwgdTY0IHJlZW5xX2ZsYWcKIAkJZGlzcGF0Y2hfZGVxdWV1ZV9sb2NrZWQocCwgZHNxKTsKIAkJcmF3X3NwaW5fdW5sb2NrKCZhbXA7ZHNxLSZndDtsb2NrKTsKIAotCQlpZiAoV0FSTl9PTl9PTkNFKHAtJmd0O3NjeC5mbGFncyAmYW1wOyBTQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSykpCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtJmd0O3NjeC5mbGFncyAmYW1wOyBTQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSykpCiAJCQlwLSZndDtzY3guZmxhZ3MgJmFtcDs9IH5TQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSzsKIAkJcC0mZ3Q7c2N4LmZsYWdzIHw9IHJlYXNvbjsKIApAQCAtNDM2MCw3ICYjNDM7NDM2MCw3IEBAIGludCBzY3hfY2dyb3VwX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQogCQlzdHJ1Y3QgY2dyb3VwICpmcm9tID0gdGdfY2dycCh0YXNrX2dyb3VwKHApKTsKIAkJc3RydWN0IGNncm91cCAqdG8gPSB0Z19jZ3JwKGNzc190Zyhjc3MpKTsKIAotCQlXQVJOX09OX09OQ0UocC0mZ3Q7c2N4LmNncnBfbW92aW5nX2Zyb20pOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtJmd0O3NjeC5jZ3JwX21vdmluZ19mcm9tKTsKIAogCQkvKgogCQkgKiBzY2hlZF9tb3ZlX3Rhc2soKSBvbWl0cyBpZGVudGl0eSBtaWdyYXRpb25zLiBMZXQmIzM5O3MgbWF0Y2ggdGhlCkBAIC00NjE3LDcgJiM0Mzs0NjE3LDcgQEAgc3RhdGljIHZvaWQgZXhpdF9kc3Eoc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EpCiAJCSAqIFRoZXJlIG11c3QgaGF2ZSBiZWVuIGEgUkNVIGdyYWNlIHBlcmlvZCBzaW5jZSB0aGUgbGFzdAogCQkgKiBpbnNlcnRpb24gYW5kIEBkc3Egc2hvdWxkIGJlIG9mZiB0aGUgZGVmZXJyZWQgbGlzdCBieSBub3cuCiAJCSAqLwotCQlpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7ZHJ1LSZndDtub2RlKSkpIHsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoJmFtcDtkcnUtJmd0O25vZGUpKSkgewogCQkJZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKCZhbXA7cnEtJmd0O3NjeC5kZWZlcnJlZF9yZWVucV9sb2NrKTsKIAkJCWxpc3RfZGVsX2luaXQoJmFtcDtkcnUtJmd0O25vZGUpOwogCQl9CkBAIC00NzQ1LDcgJiM0Mzs0NzQ1LDcgQEAgc3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKQogCQl0Zy0mZ3Q7c2N4LmZsYWdzIHw9IFNDWF9UR19JTklURUQ7CiAJfQogCi0JV0FSTl9PTl9PTkNFKHNjeF9jZ3JvdXBfZW5hYmxlZCk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChzY3hfY2dyb3VwX2VuYWJsZWQpOwogCXNjeF9jZ3JvdXBfZW5hYmxlZCA9IHRydWU7CiAKIAlyZXR1cm4gMDsKQEAgLTQ4NDgsNyAmIzQzOzQ4NDgsNyBAQCBzdGF0aWMgdm9pZCBzY3hfc2NoZWRfZnJlZV9yY3Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCSAqIHBlcmlvZC4gQXMgdGhhdCBibG9ja3MgbmV3IGRlZmVycmFscywgYWxsCiAJCSAqIGRlZmVycmVkX3JlZW5xX2xvY2FsX25vZGUmIzM5O3MgbXVzdCBiZSBvZmYtbGlzdCBieSBub3cuCiAJCSAqLwotCQlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJmFtcDtwY3B1LSZndDtkZWZlcnJlZF9yZWVucV9sb2NhbC5ub2RlKSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoJmFtcDtwY3B1LSZndDtkZWZlcnJlZF9yZWVucV9sb2NhbC5ub2RlKSk7CiAKIAkJZXhpdF9kc3EoYnlwYXNzX2RzcShzY2gsIGNwdSkpOwogCX0KQEAgLTUzMjQsNyAmIzQzOzUzMjQsNyBAQCBzdGF0aWMgYm9vbCBpbmNfYnlwYXNzX2RlcHRoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCkKIHsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7c2N4X2J5cGFzc19sb2NrKTsKIAotCVdBUk5fT05fT05DRShzY2gtJmd0O2J5cGFzc19kZXB0aCAmbHQ7IDApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoc2NoLSZndDtieXBhc3NfZGVwdGggJmx0OyAwKTsKIAlXUklURV9PTkNFKHNjaC0mZ3Q7YnlwYXNzX2RlcHRoLCBzY2gtJmd0O2J5cGFzc19kZXB0aCAmIzQzOyAxKTsKIAlpZiAoc2NoLSZndDtieXBhc3NfZGVwdGggIT0gMSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNTMzOSw3ICYjNDM7NTMzOSw3IEBAIHN0YXRpYyBib29sIGRlY19ieXBhc3NfZGVwdGgoc3RydWN0IHNjeF9zY2hlZCAqc2NoKQogewogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtzY3hfYnlwYXNzX2xvY2spOwogCi0JV0FSTl9PTl9PTkNFKHNjaC0mZ3Q7YnlwYXNzX2RlcHRoICZsdDsgMSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChzY2gtJmd0O2J5cGFzc19kZXB0aCAmbHQ7IDEpOwogCVdSSVRFX09OQ0Uoc2NoLSZndDtieXBhc3NfZGVwdGgsIHNjaC0mZ3Q7YnlwYXNzX2RlcHRoIC0gMSk7CiAJaWYgKHNjaC0mZ3Q7YnlwYXNzX2RlcHRoICE9IDApCiAJCXJldHVybiBmYWxzZTsKQEAgLTUzNjAsNyAmIzQzOzUzNjAsNyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfYnlwYXNzX2RzcChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpCiAJICogQHNjaC0mZ3Q7YnlwYXNzX2RlcHRoIHRyYW5zaXRpb25pbmcgZnJvbSAwIHRvIDEgdHJpZ2dlcnMgZW5hYmxpbmcuCiAJICogU2hvdWxkbiYjMzk7dCBzdGFnZ2VyLgogCSAqLwotCWlmIChXQVJOX09OX09OQ0UodGVzdF9hbmRfc2V0X2JpdCgwLCAmYW1wO3NjaC0mZ3Q7YnlwYXNzX2RzcF9jbGFpbSkpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRlc3RfYW5kX3NldF9iaXQoMCwgJmFtcDtzY2gtJmd0O2J5cGFzc19kc3BfY2xhaW0pKSkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTUzODAsMTEgJiM0Mzs1MzgwLDExIEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9ieXBhc3NfZHNwKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCkKIAkgKiBCdW1wIGVuYWJsZSBkZXB0aCBvbiBib3RoIEBzY2ggYW5kIGJ5cGFzcyBkaXNwYXRjaCBob3N0LgogCSAqLwogCXJldCA9IGF0b21pY19pbmNfcmV0dXJuKCZhbXA7c2NoLSZndDtieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7Ci0JV0FSTl9PTl9PTkNFKHJldCAmbHQ7PSAwKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJldCAmbHQ7PSAwKTsKIAogCWlmIChob3N0ICE9IHNjaCkgewogCQlyZXQgPSBhdG9taWNfaW5jX3JldHVybigmYW1wO2hvc3QtJmd0O2J5cGFzc19kc3BfZW5hYmxlX2RlcHRoKTsKLQkJV0FSTl9PTl9PTkNFKHJldCAmbHQ7PSAwKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQgJmx0Oz0gMCk7CiAJfQogCiAJLyoKQEAgLTU0MDUsMTEgJiM0Mzs1NDA1LDExIEBAIHN0YXRpYyB2b2lkIGRpc2FibGVfYnlwYXNzX2RzcChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpCiAJCXJldHVybjsKIAogCXJldCA9IGF0b21pY19kZWNfcmV0dXJuKCZhbXA7c2NoLSZndDtieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7Ci0JV0FSTl9PTl9PTkNFKHJldCAmbHQ7IDApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocmV0ICZsdDsgMCk7CiAKIAlpZiAoc2N4X3BhcmVudChzY2gpKSB7CiAJCXJldCA9IGF0b21pY19kZWNfcmV0dXJuKCZhbXA7c2N4X3BhcmVudChzY2gpLSZndDtieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7Ci0JCVdBUk5fT05fT05DRShyZXQgJmx0OyAwKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQgJmx0OyAwKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jCmluZGV4IDNlYmVjMTg2Zjk4MjM2Li4xMjEzZTc3NjY1ZmU5MyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZmFpci5jCkBAIC00MDQsNyAmIzQzOzQwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2RlbF9sZWFmX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfbGlzdF9sZWFmX2Nmc19ycShzdHJ1Y3QgcnEgKnJxKQogewotCVdBUk5fT05fT05DRShycS0mZ3Q7dG1wX2Fsb25lX2JyYW5jaCAhPSAmYW1wO3JxLSZndDtsZWFmX2Nmc19ycV9saXN0KTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLSZndDt0bXBfYWxvbmVfYnJhbmNoICE9ICZhbXA7cnEtJmd0O2xlYWZfY2ZzX3JxX2xpc3QpOwogfQogCiAvKiBJdGVyYXRlIHRocm91Z2ggYWxsIGxlYWYgY2ZzX3JxJiMzOTtzIG9uIGEgcnVucXVldWUgKi8KQEAgLTY4OSw3ICYjNDM7Njg5LDcgQEAgX19zdW1fd192cnVudGltZV9hZGQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIAlzNjQgd192cnVudGltZSwga2V5ID0gZW50aXR5X2tleShjZnNfcnEsIHNlKTsKIAogCXdfdnJ1bnRpbWUgPSBrZXkgKiB3ZWlnaHQ7Ci0JV0FSTl9PTl9PTkNFKCh3X3ZydW50aW1lICZndDsmZ3Q7IDYzKSAhPSAod192cnVudGltZSAmZ3Q7Jmd0OyA2MikpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoKHdfdnJ1bnRpbWUgJmd0OyZndDsgNjMpICE9ICh3X3ZydW50aW1lICZndDsmZ3Q7IDYyKSk7CiAKIAljZnNfcnEtJmd0O3N1bV93X3ZydW50aW1lICYjNDM7PSB3X3ZydW50aW1lOwogCWNmc19ycS0mZ3Q7c3VtX3dlaWdodCAmIzQzOz0gd2VpZ2h0OwpAQCAtODYxLDcgJiM0Mzs4NjEsNyBAQCBib29sIHVwZGF0ZV9lbnRpdHlfbGFnKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCiAJdTY0IGF2cnVudGltZSA9IGF2Z192cnVudGltZShjZnNfcnEpOwogCXM2NCB2bGFnID0gZW50aXR5X2xhZyhjZnNfcnEsIHNlLCBhdnJ1bnRpbWUpOwogCi0JV0FSTl9PTl9PTkNFKCFzZS0mZ3Q7b25fcnEpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLSZndDtvbl9ycSk7CiAKIAlpZiAoc2UtJmd0O3NjaGVkX2RlbGF5ZWQpIHsKIAkJLyogcHJldmlvdXMgdmxhZyAmbHQ7IDAgb3RoZXJ3aXNlIHNlIHdvdWxkIG5vdCBiZSBkZWxheWVkICovCkBAIC0xMTUzLDcgJiM0MzsxMTUzLDcgQEAgc3RhdGljIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnBpY2tfZWV2ZGYoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBib29sIHByb3RlY3QpCiAJaWYgKHNjaGVkX2ZlYXQoUElDS19CVUREWSkgJmFtcDsmYW1wOyBwcm90ZWN0ICZhbXA7JmFtcDsKIAkgICAgY2ZzX3JxLSZndDtuZXh0ICZhbXA7JmFtcDsgZW50aXR5X2VsaWdpYmxlKGNmc19ycSwgY2ZzX3JxLSZndDtuZXh0KSkgewogCQkvKiAtJmd0O25leHQgd2lsbCBuZXZlciBiZSBkZWxheWVkICovCi0JCVdBUk5fT05fT05DRShjZnNfcnEtJmd0O25leHQtJmd0O3NjaGVkX2RlbGF5ZWQpOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS0mZ3Q7bmV4dC0mZ3Q7c2NoZWRfZGVsYXllZCk7CiAJCXJldHVybiBjZnNfcnEtJmd0O25leHQ7CiAJfQogCkBAIC00MzAyLDkgJiM0Mzs0MzAyLDkgQEAgc3RhdGljIGlubGluZSBib29sIGxvYWRfYXZnX2lzX2RlY2F5ZWQoc3RydWN0IHNjaGVkX2F2ZyAqc2EpCiAJICogTWFrZSBzdXJlIHRoYXQgcm91bmRpbmcgYW5kL29yIHByb3BhZ2F0aW9uIG9mIFBFTFQgdmFsdWVzIG5ldmVyCiAJICogYnJlYWsgdGhpcy4KIAkgKi8KLQlXQVJOX09OX09OQ0Uoc2EtJmd0O2xvYWRfYXZnIHx8Ci0JCSAgICAgIHNhLSZndDt1dGlsX2F2ZyB8fAotCQkgICAgICBzYS0mZ3Q7cnVubmFibGVfYXZnKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNhLSZndDtsb2FkX2F2ZyB8fAomIzQzOwkJCSAgICAgIHNhLSZndDt1dGlsX2F2ZyB8fAomIzQzOwkJCSAgICAgIHNhLSZndDtydW5uYWJsZV9hdmcpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC01NDYwLDcgJiM0Mzs1NDYwLDcgQEAgcGxhY2VfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBmbGFncykKIAogCQl3ZWlnaHQgPSBhdmdfdnJ1bnRpbWVfd2VpZ2h0KGNmc19ycSwgc2UtJmd0O2xvYWQud2VpZ2h0KTsKIAkJbGFnICo9IGxvYWQgJiM0Mzsgd2VpZ2h0OwotCQlpZiAoV0FSTl9PTl9PTkNFKCFsb2FkKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxvYWQpKQogCQkJbG9hZCA9IDE7CiAJCWxhZyA9IGRpdjY0X2xvbmcobGFnLCBsb2FkKTsKIApAQCAtNTY1Myw3ICYjNDM7NTY1Myw3IEBAIGRlcXVldWVfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBmbGFncykKIAljbGVhcl9idWRkaWVzKGNmc19ycSwgc2UpOwogCiAJaWYgKGZsYWdzICZhbXA7IERFUVVFVUVfREVMQVlFRCkgewotCQlXQVJOX09OX09OQ0UoIXNlLSZndDtzY2hlZF9kZWxheWVkKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRCghc2UtJmd0O3NjaGVkX2RlbGF5ZWQpOwogCX0gZWxzZSB7CiAJCWJvb2wgZGVsYXkgPSBzbGVlcDsKIAkJLyoKQEAgLTU2NjMsNyAmIzQzOzU2NjMsNyBAQCBkZXF1ZXVlX2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCBpbnQgZmxhZ3MpCiAJCWlmIChmbGFncyAmYW1wOyAoREVRVUVVRV9TUEVDSUFMIHwgREVRVUVVRV9USFJPVFRMRSkpCiAJCQlkZWxheSA9IGZhbHNlOwogCi0JCVdBUk5fT05fT05DRShkZWxheSAmYW1wOyZhbXA7IHNlLSZndDtzY2hlZF9kZWxheWVkKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRChkZWxheSAmYW1wOyZhbXA7IHNlLSZndDtzY2hlZF9kZWxheWVkKTsKIAogCQlpZiAoc2NoZWRfZmVhdChERUxBWV9ERVFVRVVFKSAmYW1wOyZhbXA7IGRlbGF5ICZhbXA7JmFtcDsKIAkJICAgICFlbnRpdHlfZWxpZ2libGUoY2ZzX3JxLCBzZSkpIHsKQEAgLTU3NDcsNyAmIzQzOzU3NDcsNyBAQCBzZXRfbmV4dF9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgYm9vbCBmaXJzdCkKIAl9CiAKIAl1cGRhdGVfc3RhdHNfY3Vycl9zdGFydChjZnNfcnEsIHNlKTsKLQlXQVJOX09OX09OQ0UoY2ZzX3JxLSZndDtjdXJyKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS0mZ3Q7Y3Vycik7CiAJY2ZzX3JxLSZndDtjdXJyID0gc2U7CiAKIAkvKgpAQCAtNTgxNCw3ICYjNDM7NTgxNCw3IEBAIHN0YXRpYyB2b2lkIHB1dF9wcmV2X2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnByZXYpCiAJCS8qIGluICFvbl9ycSBjYXNlLCB1cGRhdGUgb2NjdXJyZWQgYXQgZGVxdWV1ZSAqLwogCQl1cGRhdGVfbG9hZF9hdmcoY2ZzX3JxLCBwcmV2LCAwKTsKIAl9Ci0JV0FSTl9PTl9PTkNFKGNmc19ycS0mZ3Q7Y3VyciAhPSBwcmV2KTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS0mZ3Q7Y3VyciAhPSBwcmV2KTsKIAljZnNfcnEtJmd0O2N1cnIgPSBOVUxMOwogfQogCkBAIC02MDE1LDcgJiM0Mzs2MDE1LDcgQEAgc3RhdGljIHZvaWQgdGhyb3R0bGVfY2ZzX3JxX3dvcmsoc3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmspCiAJc3RydWN0IGNmc19ycSAqY2ZzX3JxOwogCXN0cnVjdCBycSAqcnE7CiAKLQlXQVJOX09OX09OQ0UocCAhPSBjdXJyZW50KTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAgIT0gY3VycmVudCk7CiAJcC0mZ3Q7c2NoZWRfdGhyb3R0bGVfd29yay5uZXh0ID0gJmFtcDtwLSZndDtzY2hlZF90aHJvdHRsZV93b3JrOwogCiAJLyoKQEAgLTYwNDEsNyAmIzQzOzYwNDEsNyBAQCBzdGF0aWMgdm9pZCB0aHJvdHRsZV9jZnNfcnFfd29yayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqd29yaykKIAkJCXJldHVybjsKIAkJcnEgPSBzY29wZS5ycTsKIAkJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKLQkJV0FSTl9PTl9PTkNFKHAtJmd0O3Rocm90dGxlZCB8fCAhbGlzdF9lbXB0eSgmYW1wO3AtJmd0O3Rocm90dGxlX25vZGUpKTsKJiM0MzsJCVdBUk5fT05fT05DRV9ERUZFUlJFRChwLSZndDt0aHJvdHRsZWQgfHwgIWxpc3RfZW1wdHkoJmFtcDtwLSZndDt0aHJvdHRsZV9ub2RlKSk7CiAJCWRlcXVldWVfdGFza19mYWlyKHJxLCBwLCBERVFVRVVFX1NMRUVQIHwgREVRVUVVRV9USFJPVFRMRSk7CiAJCWxpc3RfYWRkKCZhbXA7cC0mZ3Q7dGhyb3R0bGVfbm9kZSwgJmFtcDtjZnNfcnEtJmd0O3Rocm90dGxlZF9saW1ib19saXN0KTsKIAkJLyoKQEAgLTYwNzIsNyAmIzQzOzYwNzIsNyBAQCB2b2lkIGluaXRfY2ZzX3Rocm90dGxlX3dvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogc3RhdGljIHZvaWQgZGV0YWNoX3Rhc2tfY2ZzX3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiBzdGF0aWMgdm9pZCBkZXF1ZXVlX3Rocm90dGxlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKQogewotCVdBUk5fT05fT05DRShwLSZndDtzZS5vbl9ycSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChwLSZndDtzZS5vbl9ycSk7CiAJbGlzdF9kZWxfaW5pdCgmYW1wO3AtJmd0O3Rocm90dGxlX25vZGUpOwogCiAJLyogdGFzayBibG9ja2VkIGFmdGVyIHRocm90dGxlZCAqLwpAQCAtNjA5NCw3ICYjNDM7NjA5NCw3IEBAIHN0YXRpYyBib29sIGVucXVldWVfdGhyb3R0bGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IGNmc19ycV9vZigmYW1wO3AtJmd0O3NlKTsKIAogCS8qIEBwIHNob3VsZCBoYXZlIGdvbmUgdGhyb3VnaCBkZXF1ZXVlX3Rocm90dGxlZF90YXNrKCkgZmlyc3QgKi8KLQlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJmFtcDtwLSZndDt0aHJvdHRsZV9ub2RlKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eSgmYW1wO3AtJmd0O3Rocm90dGxlX25vZGUpKTsKIAogCS8qCiAJICogSWYgdGhlIHRocm90dGxlZCB0YXNrIEBwIGlzIGVucXVldWVkIHRvIGEgdGhyb3R0bGVkIGNmc19ycSwKQEAgLTYxNjIsNyAmIzQzOzYxNjIsNyBAQCBzdGF0aWMgaW50IHRnX3VudGhyb3R0bGVfdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB2b2lkICpkYXRhKQogCiAJCWNmc19ycS0mZ3Q7dGhyb3R0bGVkX2Nsb2NrX3NlbGYgPSAwOwogCi0JCWlmIChXQVJOX09OX09OQ0UoKHM2NClkZWx0YSAmbHQ7IDApKQomIzQzOwkJaWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCgoczY0KWRlbHRhICZsdDsgMCkpCiAJCQlkZWx0YSA9IDA7CiAKIAkJY2ZzX3JxLSZndDt0aHJvdHRsZWRfY2xvY2tfc2VsZl90aW1lICYjNDM7PSBkZWx0YTsKQEAgLTYyMzEsOCAmIzQzOzYyMzEsOCBAQCBzdGF0aWMgaW50IHRnX3Rocm90dGxlX2Rvd24oc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB2b2lkICpkYXRhKQogCQljZnNfcnEtJmd0O3BlbHRfY2xvY2tfdGhyb3R0bGVkID0gMTsKIAl9CiAKLQlXQVJOX09OX09OQ0UoY2ZzX3JxLSZndDt0aHJvdHRsZWRfY2xvY2tfc2VsZik7Ci0JV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7Y2ZzX3JxLSZndDt0aHJvdHRsZWRfbGltYm9fbGlzdCkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoY2ZzX3JxLSZndDt0aHJvdHRsZWRfY2xvY2tfc2VsZik7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eSgmYW1wO2Nmc19ycS0mZ3Q7dGhyb3R0bGVkX2xpbWJvX2xpc3QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjI3Myw3ICYjNDM7NjI3Myw3IEBAIHN0YXRpYyBib29sIHRocm90dGxlX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCiAJICogdGhyb3R0bGVkLWxpc3QuICBycS0mZ3Q7bG9jayBwcm90ZWN0cyBjb21wbGV0aW9uLgogCSAqLwogCWNmc19ycS0mZ3Q7dGhyb3R0bGVkID0gMTsKLQlXQVJOX09OX09OQ0UoY2ZzX3JxLSZndDt0aHJvdHRsZWRfY2xvY2spOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoY2ZzX3JxLSZndDt0aHJvdHRsZWRfY2xvY2spOwogCXJldHVybiB0cnVlOwogfQogCkBAIC02MzgwLDcgJiM0Mzs2MzgwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW50aHJvdHRsZV9jZnNfcnFfYXN5bmMoc3RydWN0IGNmc19ycSAqY2ZzX3JxKQogCX0KIAogCS8qIEFscmVhZHkgZW5xdWV1ZWQgKi8KLQlpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7Y2ZzX3JxLSZndDt0aHJvdHRsZWRfY3NkX2xpc3QpKSkKJiM0MzsJaWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eSgmYW1wO2Nmc19ycS0mZ3Q7dGhyb3R0bGVkX2NzZF9saXN0KSkpCiAJCXJldHVybjsKIAogCWZpcnN0ID0gbGlzdF9lbXB0eSgmYW1wO3JxLSZndDtjZnNiX2NzZF9saXN0KTsKQEAgLTYzOTMsNyAmIzQzOzYzOTMsNyBAQCBzdGF0aWMgdm9pZCB1bnRocm90dGxlX2Nmc19ycV9hc3luYyhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCiB7CiAJbG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZihjZnNfcnEpKTsKIAotCWlmIChXQVJOX09OX09OQ0UoIWNmc19ycV90aHJvdHRsZWQoY2ZzX3JxKSB8fAomIzQzOwlpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFjZnNfcnFfdGhyb3R0bGVkKGNmc19ycSkgfHwKIAkgICAgY2ZzX3JxLSZndDtydW50aW1lX3JlbWFpbmluZyAmbHQ7PSAwKSkKIAkJcmV0dXJuOwogCkBAIC02NDI5LDcgJiM0Mzs2NDI5LDcgQEAgc3RhdGljIGJvb2wgZGlzdHJpYnV0ZV9jZnNfcnVudGltZShzdHJ1Y3QgY2ZzX2JhbmR3aWR0aCAqY2ZzX2IpCiAJCQlnb3RvIG5leHQ7CiAKIAkJLyogQnkgdGhlIGFib3ZlIGNoZWNrcywgdGhpcyBzaG91bGQgbmV2ZXIgYmUgdHJ1ZSAqLwotCQlXQVJOX09OX09OQ0UoY2ZzX3JxLSZndDtydW50aW1lX3JlbWFpbmluZyAmZ3Q7IDApOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS0mZ3Q7cnVudGltZV9yZW1haW5pbmcgJmd0OyAwKTsKIAogCQlyYXdfc3Bpbl9sb2NrKCZhbXA7Y2ZzX2ItJmd0O2xvY2spOwogCQlydW50aW1lID0gLWNmc19ycS0mZ3Q7cnVudGltZV9yZW1haW5pbmcgJiM0MzsgMTsKQEAgLTY0NTAsNyAmIzQzOzY0NTAsNyBAQCBzdGF0aWMgYm9vbCBkaXN0cmlidXRlX2Nmc19ydW50aW1lKHN0cnVjdCBjZnNfYmFuZHdpZHRoICpjZnNfYikKIAkJCQkgKiBXZSBjdXJyZW50bHkgb25seSBleHBlY3QgdG8gYmUgdW50aHJvdHRsaW5nCiAJCQkJICogYSBzaW5nbGUgY2ZzX3JxIGxvY2FsbHkuCiAJCQkJICovCi0JCQkJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7bG9jYWxfdW50aHJvdHRsZSkpOwomIzQzOwkJCQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoJmFtcDtsb2NhbF91bnRocm90dGxlKSk7CiAJCQkJbGlzdF9hZGRfdGFpbCgmYW1wO2Nmc19ycS0mZ3Q7dGhyb3R0bGVkX2NzZF9saXN0LAogCQkJCQkgICAgICAmYW1wO2xvY2FsX3VudGhyb3R0bGUpOwogCQkJfQpAQCAtNjQ3NSw3ICYjNDM7NjQ3NSw3IEBAIHN0YXRpYyBib29sIGRpc3RyaWJ1dGVfY2ZzX3J1bnRpbWUoc3RydWN0IGNmc19iYW5kd2lkdGggKmNmc19iKQogCiAJCXJxX3VubG9ja19pcnFyZXN0b3JlKHJxLCAmYW1wO3JmKTsKIAl9Ci0JV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7bG9jYWxfdW50aHJvdHRsZSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoJmFtcDtsb2NhbF91bnRocm90dGxlKSk7CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtNzA0OCw3ICYjNDM7NzA0OCw3IEBAIHN0YXRpYyB2b2lkIGhydGlja19zdGFydF9mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAl1NjQgdmRlbHRhOwogCXU2NCBkZWx0YTsKIAotCVdBUk5fT05fT05DRSh0YXNrX3JxKHApICE9IHJxKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnEocCkgIT0gcnEpOwogCiAJaWYgKHJxLSZndDtjZnMuaF9ucl9xdWV1ZWQgJmx0Oz0gMSkKIAkJcmV0dXJuOwpAQCAtNzE3MSw4ICYjNDM7NzE3MSw4IEBAIHJlcXVldWVfZGVsYXllZF9lbnRpdHkoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCiAJICogQmVjYXVzZSBhIGRlbGF5ZWQgZW50aXR5IGlzIG9uZSB0aGF0IGlzIHN0aWxsIG9uCiAJICogdGhlIHJ1bnF1ZXVlIGNvbXBldGluZyB1bnRpbCBlbGVnaWJpbGl0eS4KIAkgKi8KLQlXQVJOX09OX09OQ0UoIXNlLSZndDtzY2hlZF9kZWxheWVkKTsKLQlXQVJOX09OX09OQ0UoIXNlLSZndDtvbl9ycSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRCghc2UtJmd0O3NjaGVkX2RlbGF5ZWQpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLSZndDtvbl9ycSk7CiAKIAlpZiAodXBkYXRlX2VudGl0eV9sYWcoY2ZzX3JxLCBzZSkpIHsKIAkJY2ZzX3JxLSZndDtucl9xdWV1ZWQtLTsKQEAgLTc0MDksOCAmIzQzOzc0MDksOCBAQCBzdGF0aWMgaW50IGRlcXVldWVfZW50aXRpZXMoc3RydWN0IHJxICpycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBmbGFncykKIAkJcnEtJmd0O25leHRfYmFsYW5jZSA9IGppZmZpZXM7CiAKIAlpZiAocCAmYW1wOyZhbXA7IHRhc2tfZGVsYXllZCkgewotCQlXQVJOX09OX09OQ0UoIXRhc2tfc2xlZXApOwotCQlXQVJOX09OX09OQ0UocC0mZ3Q7b25fcnEgIT0gMSk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXRhc2tfc2xlZXApOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtJmd0O29uX3JxICE9IDEpOwogCiAJCS8qCiAJCSAqIEZpeC11cCB3aGF0IGJsb2NrX3Rhc2soKSBza2lwcGVkLgpAQCAtODk3Niw3ICYjNDM7ODk3Niw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZmFpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBhZmZpbml0eV9jb250ZXh0CiBzdGF0aWMgdm9pZCBzZXRfbmV4dF9idWRkeShzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIHsKIAlmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpIHsKLQkJaWYgKFdBUk5fT05fT05DRSghc2UtJmd0O29uX3JxKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLSZndDtvbl9ycSkpCiAJCQlyZXR1cm47CiAJCWlmIChzZV9pc19pZGxlKHNlKSkKIAkJCXJldHVybjsKQEAgLTkwMjMsNyAmIzQzOzkwMjMsNyBAQCBwcmVlbXB0X3N5bmMoc3RydWN0IHJxICpycSwgaW50IHdha2VfZmxhZ3MsCiAJICogV0ZfU1lOQyB3aXRob3V0IFdGX1RUV1UgaXMgbm90IGV4cGVjdGVkIHNvIHdhcm4gaWYgaXQgaGFwcGVucyBldmVuCiAJICogdGhvdWdoIGl0IGlzIGxpa2VseSBoYXJtbGVzcy4KIAkgKi8KLQlXQVJOX09OX09OQ0UoISh3YWtlX2ZsYWdzICZhbXA7IFdGX1RUV1UpKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCEod2FrZV9mbGFncyAmYW1wOyBXRl9UVFdVKSk7CiAKIAl0aHJlc2hvbGQgPSBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3Q7CiAJZGVsdGEgPSBycV9jbG9ja190YXNrKHJxKSAtIHNlLSZndDtleGVjX3N0YXJ0OwpAQCAtOTA5NSw3ICYjNDM7OTA5NSw3IEBAIHN0YXRpYyB2b2lkIHdha2V1cF9wcmVlbXB0X2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZV9mCiAJCXJldHVybjsKIAogCWZpbmRfbWF0Y2hpbmdfc2UoJmFtcDtzZSwgJmFtcDtwc2UpOwotCVdBUk5fT05fT05DRSghcHNlKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFwc2UpOwogCiAJY3NlX2lzX2lkbGUgPSBzZV9pc19pZGxlKHNlKTsKIAlwc2VfaXNfaWRsZSA9IHNlX2lzX2lkbGUocHNlKTsKQEAgLTk4NTcsOCAmIzQzOzk4NTcsOCBAQCBzdGF0aWMgdm9pZCBkZXRhY2hfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudikKIAkJc2NoZWRzdGF0X2luYyhwLSZndDtzdGF0cy5ucl9mb3JjZWRfbWlncmF0aW9ucyk7CiAJfQogCi0JV0FSTl9PTih0YXNrX2N1cnJlbnQoZW52LSZndDtzcmNfcnEsIHApKTsKLQlXQVJOX09OKHRhc2tfY3VycmVudF9kb25vcihlbnYtJmd0O3NyY19ycSwgcCkpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKHRhc2tfY3VycmVudChlbnYtJmd0O3NyY19ycSwgcCkpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKHRhc2tfY3VycmVudF9kb25vcihlbnYtJmd0O3NyY19ycSwgcCkpOwogCiAJZGVhY3RpdmF0ZV90YXNrKGVudi0mZ3Q7c3JjX3JxLCBwLCBERVFVRVVFX05PQ0xPQ0spOwogCXNldF90YXNrX2NwdShwLCBlbnYtJmd0O2RzdF9jcHUpOwpAQCAtMTIxNTEsNyAmIzQzOzEyMTUxLDcgQEAgc3RhdGljIGludCBzY2hlZF9iYWxhbmNlX3JxKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLAogCQlnb3RvIG91dF9iYWxhbmNlZDsKIAl9CiAKLQlXQVJOX09OX09OQ0UoYnVzaWVzdCA9PSBlbnYuZHN0X3JxKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGJ1c2llc3QgPT0gZW52LmRzdF9ycSk7CiAKIAl1cGRhdGVfbGJfaW1iYWxhbmNlX3N0YXQoJmFtcDtlbnYsIHNkLCBpZGxlKTsKIApAQCAtMTI0NjEsNyAmIzQzOzEyNDYxLDcgQEAgc3RhdGljIGludCBhY3RpdmVfbG9hZF9iYWxhbmNlX2NwdV9zdG9wKHZvaWQgKmRhdGEpCiAJICogd2UgbmVlZCB0byBmaXggaXQuIE9yaWdpbmFsbHkgcmVwb3J0ZWQgYnkKIAkgKiBCam9ybiBIZWxnYWFzIG9uIGEgMTI4LUNQVSBzZXR1cC4KIAkgKi8KLQlXQVJOX09OX09OQ0UoYnVzaWVzdF9ycSA9PSB0YXJnZXRfcnEpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoYnVzaWVzdF9ycSA9PSB0YXJnZXRfcnEpOwogCiAJLyogU2VhcmNoIGZvciBhbiBzZCBzcGFubmluZyB1cyBhbmQgdGhlIHRhcmdldCBDUFUuICovCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTI4ODMsNyAmIzQzOzEyODgzLDcgQEAgc3RhdGljIHZvaWQgc2V0X2NwdV9zZF9zdGF0ZV9idXN5KGludCBjcHUpCiAKIHZvaWQgbm9oel9iYWxhbmNlX2V4aXRfaWRsZShzdHJ1Y3QgcnEgKnJxKQogewotCVdBUk5fT05fT05DRShycSAhPSB0aGlzX3JxKCkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocnEgIT0gdGhpc19ycSgpKTsKIAogCWlmIChsaWtlbHkoIXJxLSZndDtub2h6X3RpY2tfc3RvcHBlZCkpCiAJCXJldHVybjsKQEAgLTEyOTE4LDcgJiM0MzsxMjkxOCw3IEBAIHZvaWQgbm9oel9iYWxhbmNlX2VudGVyX2lkbGUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CiAKLQlXQVJOX09OX09OQ0UoY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7CiYjNDM7CVdBUk5fT05fT05DRV9ERUZFUlJFRChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCS8qIElmIHRoaXMgQ1BVIGlzIGdvaW5nIGRvd24sIHRoZW4gbm90aGluZyBuZWVkcyB0byBiZSBkb25lOiAqLwogCWlmICghY3B1X2FjdGl2ZShjcHUpKQpAQCAtMTMwMDAsNyAmIzQzOzEzMDAwLDcgQEAgc3RhdGljIHZvaWQgX25vaHpfaWRsZV9iYWxhbmNlKHN0cnVjdCBycSAqdGhpc19ycSwgdW5zaWduZWQgaW50IGZsYWdzKQogCWludCBiYWxhbmNlX2NwdTsKIAlzdHJ1Y3QgcnEgKnJxOwogCi0JV0FSTl9PTl9PTkNFKChmbGFncyAmYW1wOyBOT0haX0tJQ0tfTUFTSykgPT0gTk9IWl9CQUxBTkNFX0tJQ0spOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoKGZsYWdzICZhbXA7IE5PSFpfS0lDS19NQVNLKSA9PSBOT0haX0JBTEFOQ0VfS0lDSyk7CiAKIAkvKgogCSAqIFdlIGFzc3VtZSB0aGVyZSB3aWxsIGJlIG5vIGlkbGUgbG9hZCBhZnRlciB0aGlzIHVwZGF0ZSBhbmQgY2xlYXIKQEAgLTEzNjIzLDcgJiM0MzsxMzYyMyw3IEBAIGJvb2wgY2ZzX3ByaW9fbGVzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmEsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqYiwKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnFiOwogCXM2NCBkZWx0YTsKIAotCVdBUk5fT05fT05DRSh0YXNrX3JxKGIpLSZndDtjb3JlICE9IHJxLSZndDtjb3JlKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnEoYiktJmd0O2NvcmUgIT0gcnEtJmd0O2NvcmUpOwogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKIAkvKgpAQCAtMTM4MzksNyAmIzQzOzEzODM5LDcgQEAgc3RhdGljIHZvaWQgc3dpdGNoZWRfZnJvbV9mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAogc3RhdGljIHZvaWQgc3dpdGNoZWRfdG9fZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JV0FSTl9PTl9PTkNFKHAtJmd0O3NlLnNjaGVkX2RlbGF5ZWQpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocC0mZ3Q7c2Uuc2NoZWRfZGVsYXllZCk7CiAKIAlhdHRhY2hfdGFza19jZnNfcnEocCk7CiAKQEAgLTEzODcyLDcgJiM0MzsxMzg3Miw3IEBAIHN0YXRpYyB2b2lkIF9fc2V0X25leHRfdGFza19mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBmaXJzCiAJaWYgKCFmaXJzdCkKIAkJcmV0dXJuOwogCi0JV0FSTl9PTl9PTkNFKHNlLSZndDtzY2hlZF9kZWxheWVkKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNlLSZndDtzY2hlZF9kZWxheWVkKTsKIAogCWlmIChocnRpY2tfZW5hYmxlZF9mYWlyKHJxKSkKIAkJaHJ0aWNrX3N0YXJ0X2ZhaXIocnEsIHApOwpAQCAtMTQxNDgsNyAmIzQzOzE0MTQ4LDcgQEAgaW50IHNjaGVkX2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgbG9uZyBpZGxlKQogCQlycV9sb2NrX2lycXNhdmUocnEsICZhbXA7cmYpOwogCiAJCWdycF9jZnNfcnEtJmd0O2lkbGUgPSBpZGxlOwotCQlpZiAoV0FSTl9PTl9PTkNFKHdhc19pZGxlID09IGNmc19ycV9pc19pZGxlKGdycF9jZnNfcnEpKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQod2FzX2lkbGUgPT0gY2ZzX3JxX2lzX2lkbGUoZ3JwX2Nmc19ycSkpKQogCQkJZ290byBuZXh0X2NwdTsKIAogCQlpZGxlX3Rhc2tfZGVsdGEgPSBncnBfY2ZzX3JxLSZndDtoX25yX3F1ZXVlZCAtCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvcnQuYyBiL2tlcm5lbC9zY2hlZC9ydC5jCmluZGV4IDRlZThmYWYwMTQ0MWEzLi41MDZkMGYxYWZhNThmOSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL3J0LmMKQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9ydF9iYW5kd2lkdGgoc3RydWN0IHJ0X2JhbmR3aWR0aCAqcnRfYikKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0X3Rhc2tfb2Yoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCiB7Ci0JV0FSTl9PTl9PTkNFKCFydF9lbnRpdHlfaXNfdGFzayhydF9zZSkpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJ0X2VudGl0eV9pc190YXNrKHJ0X3NlKSk7CiAKIAlyZXR1cm4gY29udGFpbmVyX29mKHJ0X3NlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJ0KTsKIH0KQEAgLTE3OCwxMyAmIzQzOzE3OCwxMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogewogCS8qIENhbm5vdCBmb2xkIHdpdGggbm9uLUNPTkZJR19SVF9HUk9VUF9TQ0hFRCB2ZXJzaW9uLCBsYXlvdXQgKi8KLQlXQVJOX09OKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkgJmFtcDsmYW1wOyBydF9ycS0mZ3Q7dGcgIT0gJmFtcDtyb290X3Rhc2tfZ3JvdXApOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkgJmFtcDsmYW1wOyBydF9ycS0mZ3Q7dGcgIT0gJmFtcDtyb290X3Rhc2tfZ3JvdXApOwogCXJldHVybiBydF9ycS0mZ3Q7cnE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKIHsKLQlXQVJOX09OKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkgJmFtcDsmYW1wOyBydF9zZS0mZ3Q7cnRfcnEtJmd0O3RnICE9ICZhbXA7cm9vdF90YXNrX2dyb3VwKTsKJiM0MzsJV0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpICZhbXA7JmFtcDsgcnRfc2UtJmd0O3J0X3JxLSZndDt0ZyAhPSAmYW1wO3Jvb3RfdGFza19ncm91cCk7CiAJcmV0dXJuIHJ0X3NlLSZndDtydF9ycTsKIH0KIApAQCAtMTkyLDcgJiM0MzsxOTIsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCiB7CiAJc3RydWN0IHJ0X3JxICpydF9ycSA9IHJ0X3NlLSZndDtydF9ycTsKIAotCVdBUk5fT04oIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSAmYW1wOyZhbXA7IHJ0X3JxLSZndDt0ZyAhPSAmYW1wO3Jvb3RfdGFza19ncm91cCk7CiYjNDM7CVdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSAmYW1wOyZhbXA7IHJ0X3JxLSZndDt0ZyAhPSAmYW1wO3Jvb3RfdGFza19ncm91cCk7CiAJcmV0dXJuIHJ0X3JxLSZndDtycTsKIH0KIApAQCAtNDkzLDcgJiM0Mzs0OTMsNyBAQCB0eXBlZGVmIHN0cnVjdCB0YXNrX2dyb3VwICpydF9ycV9pdGVyX3Q7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX2dyb3VwICpuZXh0X3Rhc2tfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKQogewogCWlmICghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpKSB7Ci0JCVdBUk5fT04odGcgIT0gJmFtcDtyb290X3Rhc2tfZ3JvdXApOwomIzQzOwkJV0FSTl9PTl9ERUZFUlJFRCh0ZyAhPSAmYW1wO3Jvb3RfdGFza19ncm91cCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNzIzLDcgJiM0Mzs3MjMsNyBAQCBzdGF0aWMgdm9pZCBfX2Rpc2FibGVfcnVudGltZShzdHJ1Y3QgcnEgKnJxKQogCQkgKiBXZSBjYW5ub3QgYmUgbGVmdCB3YW50aW5nIC0gdGhhdCB3b3VsZCBtZWFuIHNvbWUgcnVudGltZQogCQkgKiBsZWFrZWQgb3V0IG9mIHRoZSBzeXN0ZW0uCiAJCSAqLwotCQlXQVJOX09OX09OQ0Uod2FudCk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQod2FudCk7CiBiYWxhbmNlZDoKIAkJLyoKIAkJICogRGlzYWJsZSBhbGwgdGhlIGJvcnJvdyBsb2dpYyBieSBwcmV0ZW5kaW5nIHdlIGhhdmUgaW5mCkBAIC0xMDk0LDcgJiM0MzsxMDk0LDcgQEAgZGVjX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pCiAKIAlpZiAocnRfcnEtJmd0O3J0X25yX3J1bm5pbmcpIHsKIAotCQlXQVJOX09OKHByaW8gJmx0OyBwcmV2X3ByaW8pOwomIzQzOwkJV0FSTl9PTl9ERUZFUlJFRChwcmlvICZsdDsgcHJldl9wcmlvKTsKIAogCQkvKgogCQkgKiBUaGlzIG1heSBoYXZlIGJlZW4gb3VyIGhpZ2hlc3QgdGFzaywgYW5kIHRoZXJlZm9yZQpAQCAtMTEzMSw3ICYjNDM7MTEzMSw3IEBAIGRlY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKIAlpZiAocnRfc2VfYm9vc3RlZChydF9zZSkpCiAJCXJ0X3JxLSZndDtydF9ucl9ib29zdGVkLS07CiAKLQlXQVJOX09OKCFydF9ycS0mZ3Q7cnRfbnJfcnVubmluZyAmYW1wOyZhbXA7IHJ0X3JxLSZndDtydF9ucl9ib29zdGVkKTsKJiM0MzsJV0FSTl9PTl9ERUZFUlJFRCghcnRfcnEtJmd0O3J0X25yX3J1bm5pbmcgJmFtcDsmYW1wOyBydF9ycS0mZ3Q7cnRfbnJfYm9vc3RlZCk7CiB9CiAKICNlbHNlIC8qICFDT05GSUdfUlRfR1JPVVBfU0NIRUQ6ICovCkBAIC0xMTc2LDcgJiM0MzsxMTc2LDcgQEAgdm9pZCBpbmNfcnRfdGFza3Moc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7CiAJaW50IHByaW8gPSBydF9zZV9wcmlvKHJ0X3NlKTsKIAotCVdBUk5fT04oIXJ0X3ByaW8ocHJpbykpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKCFydF9wcmlvKHByaW8pKTsKIAlydF9ycS0mZ3Q7cnRfbnJfcnVubmluZyAmIzQzOz0gcnRfc2VfbnJfcnVubmluZyhydF9zZSk7CiAJcnRfcnEtJmd0O3JyX25yX3J1bm5pbmcgJiM0Mzs9IHJ0X3NlX3JyX25yX3J1bm5pbmcocnRfc2UpOwogCkBAIC0xMTg3LDggJiM0MzsxMTg3LDggQEAgdm9pZCBpbmNfcnRfdGFza3Moc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCiBzdGF0aWMgaW5saW5lCiB2b2lkIGRlY19ydF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKLQlXQVJOX09OKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7Ci0JV0FSTl9PTighcnRfcnEtJmd0O3J0X25yX3J1bm5pbmcpOwomIzQzOwlXQVJOX09OX0RFRkVSUkVEKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7CiYjNDM7CVdBUk5fT05fREVGRVJSRUQoIXJ0X3JxLSZndDtydF9ucl9ydW5uaW5nKTsKIAlydF9ycS0mZ3Q7cnRfbnJfcnVubmluZyAtPSBydF9zZV9ucl9ydW5uaW5nKHJ0X3NlKTsKIAlydF9ycS0mZ3Q7cnJfbnJfcnVubmluZyAtPSBydF9zZV9ycl9ucl9ydW5uaW5nKHJ0X3NlKTsKIApAQCAtMTM0OCw3ICYjNDM7MTM0OCw3IEBAIHN0YXRpYyB2b2lkIF9fZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHVuc2lnbmVkIGludCBmbGFnCiAJfQogCiAJaWYgKG1vdmVfZW50aXR5KGZsYWdzKSkgewotCQlXQVJOX09OX09OQ0UocnRfc2UtJmd0O29uX2xpc3QpOwomIzQzOwkJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJ0X3NlLSZndDtvbl9saXN0KTsKIAkJaWYgKGZsYWdzICZhbXA7IEVOUVVFVUVfSEVBRCkKIAkJCWxpc3RfYWRkKCZhbXA7cnRfc2UtJmd0O3J1bl9saXN0LCBxdWV1ZSk7CiAJCWVsc2UKQEAgLTEzNjgsNyAmIzQzOzEzNjgsNyBAQCBzdGF0aWMgdm9pZCBfX2RlcXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCB1bnNpZ25lZCBpbnQgZmxhZwogCXN0cnVjdCBydF9wcmlvX2FycmF5ICphcnJheSA9ICZhbXA7cnRfcnEtJmd0O2FjdGl2ZTsKIAogCWlmIChtb3ZlX2VudGl0eShmbGFncykpIHsKLQkJV0FSTl9PTl9PTkNFKCFydF9zZS0mZ3Q7b25fbGlzdCk7CiYjNDM7CQlXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJ0X3NlLSZndDtvbl9saXN0KTsKIAkJX19kZWxpc3RfcnRfZW50aXR5KHJ0X3NlLCBhcnJheSk7CiAJfQogCXJ0X3NlLSZndDtvbl9ycSA9IDA7CkBAIC0xNjg0LDcgJiM0MzsxNjg0LDcgQEAgc3RhdGljIHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnBpY2tfbmV4dF9ydF9lbnRpdHkoc3RydWN0IHJ0X3JxICpydF9ycSkKIAlCVUdfT04oaWR4ICZndDs9IE1BWF9SVF9QUklPKTsKIAogCXF1ZXVlID0gYXJyYXktJmd0O3F1ZXVlICYjNDM7IGlkeDsKLQlpZiAoV0FSTl9PTl9PTkNFKGxpc3RfZW1wdHkocXVldWUpKSkKJiM0MzsJaWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChsaXN0X2VtcHR5KHF1ZXVlKSkpCiAJCXJldHVybiBOVUxMOwogCW5leHQgPSBsaXN0X2VudHJ5KHF1ZXVlLSZndDtuZXh0LCBzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5LCBydW5fbGlzdCk7CiAKQEAgLTIwMTYsNyAmIzQzOzIwMTYsNyBAQCBzdGF0aWMgaW50IHB1c2hfcnRfdGFzayhzdHJ1Y3QgcnEgKnJxLCBib29sIHB1bGwpCiAJCXJldHVybiAwOwogCX0KIAotCWlmIChXQVJOX09OKG5leHRfdGFzayA9PSBycS0mZ3Q7Y3VycikpCiYjNDM7CWlmIChXQVJOX09OX0RFRkVSUkVEKG5leHRfdGFzayA9PSBycS0mZ3Q7Y3VycikpCiAJCXJldHVybiAwOwogCiAJLyogV2UgbWlnaHQgcmVsZWFzZSBycSBsb2NrICovCkBAIC0yMzE2LDggJiM0MzsyMzE2LDggQEAgc3RhdGljIHZvaWQgcHVsbF9ydF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSkKIAkJICogdGhlIHRvLWJlLXNjaGVkdWxlZCB0YXNrPwogCQkgKi8KIAkJaWYgKHAgJmFtcDsmYW1wOyAocC0mZ3Q7cHJpbyAmbHQ7IHRoaXNfcnEtJmd0O3J0LmhpZ2hlc3RfcHJpby5jdXJyKSkgewotCQkJV0FSTl9PTihwID09IHNyY19ycS0mZ3Q7Y3Vycik7Ci0JCQlXQVJOX09OKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7CiYjNDM7CQkJV0FSTl9PTl9ERUZFUlJFRChwID09IHNyY19ycS0mZ3Q7Y3Vycik7CiYjNDM7CQkJV0FSTl9PTl9ERUZFUlJFRCghdGFza19vbl9ycV9xdWV1ZWQocCkpOwogCiAJCQkvKgogCQkJICogVGhlcmUmIzM5O3MgYSBjaGFuY2UgdGhhdCBwIGlzIGhpZ2hlciBpbiBwcmlvcml0eQpAQCAtMjU4Myw3ICYjNDM7MjU4Myw3IEBAIHN0YXRpYyBpbnQgdGFza19pc190aHJvdHRsZWRfcnQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY3B1KQogCiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVEIC8vIFhYWCBtYXliZSBhZGQgdGFza19ydF9ycSgpLCBzZWUgYWxzbyBzY2hlZF9ydF9wZXJpb2RfcnRfcnEKIAlydF9ycSA9IHRhc2tfZ3JvdXAocCktJmd0O3J0X3JxW2NwdV07Ci0JV0FSTl9PTighcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpICZhbXA7JmFtcDsgcnRfcnEtJmd0O3RnICE9ICZhbXA7cm9vdF90YXNrX2dyb3VwKTsKJiM0MzsJV0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpICZhbXA7JmFtcDsgcnRfcnEtJmd0O3RnICE9ICZhbXA7cm9vdF90YXNrX2dyb3VwKTsKICNlbHNlCiAJcnRfcnEgPSAmYW1wO2NwdV9ycShjcHUpLSZndDtydDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3NjaGVkLmggYi9rZXJuZWwvc2NoZWQvc2NoZWQuaAppbmRleCA5ZjYzYjE1ZDMwOWQxMS4uZjc0ZjljZDQ0ZTA5ODYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9zY2hlZC5oCkBAIC0xNjg0LDcgJiM0MzsxNjg0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9pZGxlX2NvcmUoc3RydWN0IHJxICpycSkgeyB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX29mKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQogewotCVdBUk5fT05fT05DRSghZW50aXR5X2lzX3Rhc2soc2UpKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFlbnRpdHlfaXNfdGFzayhzZSkpOwogCXJldHVybiBjb250YWluZXJfb2Yoc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgc2UpOwogfQogCkBAIC0xNzY2LDcgJiM0MzsxNzY2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9jbG9ja191cGRhdGVkKHN0cnVjdCBycSAqcnEpCiAJICogVGhlIG9ubHkgcmVhc29uIGZvciBub3Qgc2VlaW5nIGEgY2xvY2sgdXBkYXRlIHNpbmNlIHRoZQogCSAqIGxhc3QgcnFfcGluX2xvY2soKSBpcyBpZiB3ZSYjMzk7cmUgY3VycmVudGx5IHNraXBwaW5nIHVwZGF0ZXMuCiAJICovCi0JV0FSTl9PTl9PTkNFKHJxLSZndDtjbG9ja191cGRhdGVfZmxhZ3MgJmx0OyBSUUNGX0FDVF9TS0lQKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLSZndDtjbG9ja191cGRhdGVfZmxhZ3MgJmx0OyBSUUNGX0FDVF9TS0lQKTsKIH0KIAogc3RhdGljIGlubGluZSB1NjQgcnFfY2xvY2soc3RydWN0IHJxICpycSkKQEAgLTE4MTMsNyAmIzQzOzE4MTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnFfY2xvY2tfY2FuY2VsX3NraXB1cGRhdGUoc3RydWN0IHJxICpycSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBycV9jbG9ja19zdGFydF9sb29wX3VwZGF0ZShzdHJ1Y3QgcnEgKnJxKQogewogCWxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpOwotCVdBUk5fT05fT05DRShycS0mZ3Q7Y2xvY2tfdXBkYXRlX2ZsYWdzICZhbXA7IFJRQ0ZfQUNUX1NLSVApOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtJmd0O2Nsb2NrX3VwZGF0ZV9mbGFncyAmYW1wOyBSUUNGX0FDVF9TS0lQKTsKIAlycS0mZ3Q7Y2xvY2tfdXBkYXRlX2ZsYWdzIHw9IFJRQ0ZfQUNUX1NLSVA7CiB9CiAKQEAgLTE4NzAsOSAmIzQzOzE4NzAsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2N4X3JxX2Nsb2NrX2ludmFsaWRhdGUoc3RydWN0IHJxICpycSkge30KIAogc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9iYWxhbmNlX2NhbGxiYWNrc19lbXB0eShzdHJ1Y3QgcnEgKnJxKQogewotCVdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKSAmYW1wOyZhbXA7Ci0JCSAgICAgcnEtJmd0O2JhbGFuY2VfY2FsbGJhY2sgJmFtcDsmYW1wOwotCQkgICAgIHJxLSZndDtiYWxhbmNlX2NhbGxiYWNrICE9ICZhbXA7YmFsYW5jZV9wdXNoX2NhbGxiYWNrKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX0xPQ0tJTkcpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgICBycS0mZ3Q7YmFsYW5jZV9jYWxsYmFjayAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAgcnEtJmd0O2JhbGFuY2VfY2FsbGJhY2sgIT0gJmFtcDtiYWxhbmNlX3B1c2hfY2FsbGJhY2spOwogfQogCiAvKgpAQCAtMjY4MSw3ICYjNDM7MjY4MSw3IEBAIHN0cnVjdCBzY2hlZF9jbGFzcyB7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIHsKLQlXQVJOX09OX09OQ0UocnEtJmd0O2Rvbm9yICE9IHByZXYpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtJmd0O2Rvbm9yICE9IHByZXYpOwogCXByZXYtJmd0O3NjaGVkX2NsYXNzLSZndDtwdXRfcHJldl90YXNrKHJxLCBwcmV2LCBOVUxMKTsKIH0KIApAQCAtMjcwNCw3ICYjNDM7MjcwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl9zZXRfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsCiAJCQkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKIHsKLQlXQVJOX09OX09OQ0UocnEtJmd0O2Rvbm9yICE9IHByZXYpOwomIzQzOwlXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtJmd0O2Rvbm9yICE9IHByZXYpOwogCiAJX19wdXRfcHJldl9zZXRfbmV4dF9kbF9zZXJ2ZXIocnEsIHByZXYsIG5leHQpOwogCkBAIC0zMDMwLDcgJiM0MzszMDMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGF0dGFjaF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTsKIAotCVdBUk5fT05fT05DRSh0YXNrX3JxKHApICE9IHJxKTsKJiM0MzsJV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnEocCkgIT0gcnEpOwogCWFjdGl2YXRlX3Rhc2socnEsIHAsIEVOUVVFVUVfTk9DTE9DSyk7CiAJd2FrZXVwX3ByZWVtcHQocnEsIHAsIDApOwogfQpkaWZmIC0tZ2l0IGEvbGliL2J1Zy5jIGIvbGliL2J1Zy5jCmluZGV4IDIyNGY0Y2ZhNGFhMzEyLi5mNTc2OGY1ZDE3YjQ3OSAxMDA2NDQKLS0tIGEvbGliL2J1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9idWcuYwpAQCAtMTk2LDcgJiM0MzsxOTYsNyBAQCB2b2lkIF9fd2Fybl9wcmludGYoY29uc3QgY2hhciAqZm10LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIAogc3RhdGljIGVudW0gYnVnX3RyYXBfdHlwZSBfX3JlcG9ydF9idWcoc3RydWN0IGJ1Z19lbnRyeSAqYnVnLCB1bnNpZ25lZCBsb25nIGJ1Z2FkZHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWJvb2wgd2FybmluZywgb25jZSwgZG9uZSwgbm9fY3V0LCBoYXNfYXJnczsKJiM0MzsJYm9vbCB3YXJuaW5nLCBvbmNlLCBkb25lLCBub19jdXQsIGhhc19hcmdzLCBkZWZlcnJlZDsKIAljb25zdCBjaGFyICpmaWxlLCAqZm10OwogCXVuc2lnbmVkIGxpbmU7CiAKQEAgLTIxOSw2ICYjNDM7MjE5LDcgQEAgc3RhdGljIGVudW0gYnVnX3RyYXBfdHlwZSBfX3JlcG9ydF9idWcoc3RydWN0IGJ1Z19lbnRyeSAqYnVnLCB1bnNpZ25lZCBsb25nIGJ1Z2EKIAlkb25lICAgICA9IGJ1Zy0mZ3Q7ZmxhZ3MgJmFtcDsgQlVHRkxBR19ET05FOwogCW5vX2N1dCAgID0gYnVnLSZndDtmbGFncyAmYW1wOyBCVUdGTEFHX05PX0NVVF9IRVJFOwogCWhhc19hcmdzID0gYnVnLSZndDtmbGFncyAmYW1wOyBCVUdGTEFHX0FSR1M7CiYjNDM7CWRlZmVycmVkID0gYnVnLSZndDtmbGFncyAmYW1wOyBCVUdGTEFHX0RFRkVSUkVEOwogCiAJaWYgKHdhcm5pbmcgJmFtcDsmYW1wOyBvbmNlKSB7CiAJCWlmIChkb25lKQpAQCAtMjI5LDcgJiM0MzsyMzAsMTAgQEAgc3RhdGljIGVudW0gYnVnX3RyYXBfdHlwZSBfX3JlcG9ydF9idWcoc3RydWN0IGJ1Z19lbnRyeSAqYnVnLCB1bnNpZ25lZCBsb25nIGJ1Z2EKIAkJICovCiAJCWJ1Zy0mZ3Q7ZmxhZ3MgfD0gQlVHRkxBR19ET05FOwogCX0KLQomIzQzOwlpZiAoZGVmZXJyZWQpIHsKJiM0MzsJCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CiYjNDM7CQlwcmludGtfZGVmZXJyZWRfZW50ZXIoKTsKJiM0MzsJfQogCS8qCiAJICogQlVHKCkgYW5kIFdBUk5fT04oKSBmYW1pbGllcyBkb24mIzM5O3QgcHJpbnQgYSBjdXN0b20gZGVidWcgbWVzc2FnZQogCSAqIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSBleGNlcHRpb24gaGFuZGxlciwgc28gd2UgbXVzdCBhZGQgdGhlCkBAIC0yNDUsNiAmIzQzOzI0OSwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYQogCQkvKiB0aGlzIGlzIGEgV0FSTl9PTiByYXRoZXIgdGhhbiBCVUcvQlVHX09OICovCiAJCV9fd2FybihmaWxlLCBsaW5lLCAodm9pZCAqKWJ1Z2FkZHIsIEJVR19HRVRfVEFJTlQoYnVnKSwgcmVncywKIAkJICAgICAgIE5VTEwpOwomIzQzOwkJaWYgKGRlZmVycmVkKSB7CiYjNDM7CQkJcHJpbnRrX2RlZmVycmVkX2V4aXQoKTsKJiM0MzsJCQlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiYjNDM7CQl9CiAJCXJldHVybiBCVUdfVFJBUF9UWVBFX1dBUk47CiAJfQogCkBAIC0yNTQsNiAmIzQzOzI2MiwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYQogCQlwcl9jcml0KCYjMzQ7a2VybmVsIEJVRyBhdCAlcEIgW3ZlcmJvc2UgZGVidWcgaW5mbyB1bmF2YWlsYWJsZV1cbiYjMzQ7LAogCQkJKHZvaWQgKilidWdhZGRyKTsKIAomIzQzOwlpZiAoZGVmZXJyZWQpIHsKJiM0MzsJCXByaW50a19kZWZlcnJlZF9leGl0KCk7CiYjNDM7CQlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiYjNDM7CX0KIAlyZXR1cm4gQlVHX1RSQVBfVFlQRV9CVUc7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNDUKCQkJCQkJCW91dHB1dDogMTA0CgkJCQkJCQl0aG91Z2h0czogMTc3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgJiMzNDtEZWZlcnJlZCBXYXJuaW5nJiMzNDsgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbnRyb2R1Y2luZyBgV0FSTl9PTl9ERUZFUlJFRGAgYW5kIGBXQVJOX09OX09OQ0VfREVGRVJSRURgIGFuZCB1c2luZyB0aGVtIHRvIHJlcGxhY2UgdGhlIGV4aXN0aW5nIGBXQVJOX09OYCBhbmQgYFdBUk5fT05fT05DRWAgY2FsbHMgd2l0aGluIHRoZSBzY2hlZHVsZXIgY29kZSAoYGtlcm5lbC9zY2hlZC9gKS4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIG1vZGlmaWNhdGlvbiBpbiBgbGliL2J1Zy5jYCB0byBoYW5kbGUgYSBgQlVHRkxBR19ERUZFUlJFRGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSAmIzM0O3dvcnRoeSYjMzQ7IHBhdGNoIHRvIHRlc3QuCgpEaWdnaW5nIGludG8gYGxpYi9idWcuY2AsIGl0IGxvb2tzIGxpa2UgdGhlIGBCVUdGTEFHX0RFRkVSUkVEYCBmbGFnLCB3aGVuIHNldCwgd2lsbCBtYWtlIHRoZSB3YXJuaW5nIHVzZSBkZWZlcnJlZCBwcmludGluZyB3aXRoIGBwcmludGtfZGVmZXJyZWRfZW50ZXIoKWAgYW5kIGBwcmludGtfZGVmZXJyZWRfZXhpdCgpYC4gVGhpcyBpcyBlc3NlbnRpYWxseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgdGhlIHdhcm5pbmdzIHdpbGwgbm93IGJlIGRlZmVycmVkLiBJIGRvIG5lZWQgdG8gc2VlLCBkb2VzIHRoaXMgY2hhbmdlIHRoZSBleGVjdXRpb24gZmxvdyBpZiB0aGUgd2FybmluZyAqaXNuJiMzOTt0KiB0cmlnZ2VyZWQ/IExvb2tpbmcgYXQgdGhlIGBXQVJOX09OX0RFRkVSUkVEYCBtYWNybywgaXQgbG9va3MgbGlrZSBpdCBqdXN0IGNoYW5nZXMgdGhlICp3YXkqIHRoZSB3YXJuaW5nIGlzIHByaW50ZWQsIG5vdCB0aGUgY29kZSBsb2dpYyBpdHNlbGYuCgpgYGBjCiNkZWZpbmUgV0FSTl9PTl9ERUZFUlJFRChjb25kaXRpb24pICh7CQkJCQlcCglpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7CQkJCVwKCWlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkgewkJCQkJXAoJCV9fV0FSTl9GTEFHUygjY29uZGl0aW9uLAkJCQlcCgkJCSAgICAgQlVHRkxBR19ERUZFUlJFRCB8CQkJCVwKCQkJICAgICBCVUdGTEFHX1RBSU5UKFRBSU5UX1dBUk4pKTsJCVwKCX0JCQkJCQkJCVwKCXVubGlrZWx5KF9fcmV0X3dhcm5fb24pOwkJCQkJXAp9KQpgYGAKClNvLCBpZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLCBleGVjdXRpb24gcHJvY2VlZHMgYXMgYmVmb3JlLiBJZiB0aGUgY29uZGl0aW9uIGlzIG1ldCwgdGhlIHdhcm5pbmcgaXMgbm93IGRlZmVycmVkLCBidXQgdGhlIGV4ZWN1dGlvbiBsb2dpYyByZW1haW5zIHRoZSBzYW1lIChvdGhlciB0aGFuIHRoZSBhZGRpdGlvbmFsIGxvZyBpbmZvcm1hdGlvbikuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIHRoaW5ncyBsaWtlIG1vZGlmaWNhdGlvbnMgdG8gbG9nZ2luZyBjYWxscy4gSXMgY2hhbmdpbmcgYSB3YXJuaW5nIHRvIGEgZGVmZXJyZWQgd2FybmluZyBhIGxvZ2dpbmcgY2hhbmdlPyBZZXMsIHRoaXMgaXMgZXNzZW50aWFsbHkgY2hhbmdpbmcgYHByaW50a2AgdG8gYHByaW50a19kZWZlcnJlZGAgdW5kZXIgdGhlIGhvb2QuIEl0IGNoYW5nZXMgKmhvdyogdGhlIHdhcm5pbmcgaXMgcmVwb3J0ZWQuIEl0IGRvZXNuJiMzOTt0IG1vZGlmeSB0aGUgbG9naWMgb2YgdGhlIGNvZGUgYmVpbmcgd2FybmVkIGFib3V0LiBJdCBzZWVtcyB0aGUgcHVycG9zZSBpcyB0byBwcmV2ZW50IHBvdGVudGlhbCBkZWFkbG9ja3MsIGJ1dCBpbiB0aGUgY29udGV4dCBvZiBmdXp6aW5nLCB0aGUgZ29hbCBpcyBub3QgdG8gZmluZCBidWdzIGluIHRoZSByZXBvcnRpbmcgcGF0aCBidXQgaW4gdGhlIGtlcm5lbCBsb2dpYyBpdHNlbGYuCgpJJiMzOTttIGRvdWJsZS1jaGVja2luZy4gVGhlIGBrZXJuZWwvc2NoZWQvYCBjaGFuZ2VzIGFwcGVhciB0byBiZSAqcHVyZWx5KiByZXBsYWNlbWVudHMgb2YgYFdBUk5fT05gIHdpdGggYFdBUk5fT05fREVGRVJSRURgIGFuZCBzbyBvbiwgc28gaWYgdGhlIHdhcm5pbmcgY29uZGl0aW9uIGlzIG1ldCwgbm93IHVzZSBkZWZlcnJlZCBwcmludGssIGJ1dCB0aGUgZXhlY3V0aW9uIGZsb3cgaXMgdGhlIHNhbWUgaWYgdGhlIHdhcm5pbmcgaXMgbm90IHRyaWdnZXJlZC4KCkxvb2tpbmcgYXQgYGluY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhgLCBpdCBqdXN0IGRlZmluZXMgYSBmYWxsYmFjayBgV0FSTl9PTl9ERUZFUlJFRGAuIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBgcHJpbnRrYCB0byB0aGUgYHByaW50a19kZWZlcnJlZF9lbnRlcigpYC4KClNvLCBpdCYjMzk7cyBqdXN0IGEgbG9nZ2luZyBjaGFuZ2UuIFRoZXJlJiMzOTtzIG5vIG90aGVyIGxvZ2ljIGJlaW5nIGNoYW5nZWQgaW4gdGhlIHNjaGVkdWxlci4gSXQgaXMgYWxsIGNvc21ldGljLgoKVGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gYFdBUk5fT05fREVGRVJSRURgLCBgV0FSTl9PTl9PTkNFX0RFRkVSUkVEYC4gVGhpcyBpcyBwdXJlbHkgbG9nZ2luZy4gSSB3aWxsIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYW5kIGFwcGxpZXMgZGVmZXJyZWQgdmFyaWFudHMgb2YgV0FSTl9PTiBhbmQgV0FSTl9PTl9PTkNFIG1hY3JvcyAoV0FSTl9PTl9ERUZFUlJFRCwgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKSB0byBhdm9pZCBkZWFkbG9ja3MgZHVyaW5nIHdhcm5pbmcgcHJpbnRzIGluIHRoZSBzY2hlZHVsZXIuIFRoaXMgaXMgcHVyZWx5IGEgbG9nZ2luZy9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgbm9ybWFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYW5kIGFwcGxpZXMgZGVmZXJyZWQgdmFyaWFudHMgb2YgV0FSTl9PTiBhbmQgV0FSTl9PTl9PTkNFIG1hY3JvcyAoV0FSTl9PTl9ERUZFUlJFRCwgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKSB0byBhdm9pZCBkZWFkbG9ja3MgZHVyaW5nIHdhcm5pbmcgcHJpbnRzIGluIHRoZSBzY2hlZHVsZXIuIFRoaXMgaXMgcHVyZWx5IGEgbG9nZ2luZy9kZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgbm9ybWFsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTQ6NTI6NTguMjU2Mzc1OTYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNzAxMzI3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhbmQgYXBwbGllcyBkZWZlcnJlZCB2YXJpYW50cyBvZiBXQVJOX09OIGFuZCBXQVJOX09OX09OQ0UgbWFjcm9zIChXQVJOX09OX0RFRkVSUkVELCBXQVJOX09OX09OQ0VfREVGRVJSRUQpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgd2FybmluZyBwcmludHMgaW4gdGhlIHNjaGVkdWxlci4gVGhpcyBpcyBwdXJlbHkgYSBsb2dnaW5nL2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBub3JtYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE0OjUyOjU4LjI1NjM4MDc3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NzI4MzE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA0ZjY3YmMwOTEwYWVmYjlhNTJhNDUxZGUyMzZjZjA1ZWYzOTg5NGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTQ6NTI6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhcXG5pbmRleCAwOWU4ZWNjZWU4ZWQ5Ny4uMWUzZmYwMGY3MDliODkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaFxcbisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmhcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiAjZGVmaW5lIEJVR0ZMQUdfRE9ORVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDIpXFxuICNkZWZpbmUgQlVHRkxBR19OT19DVVRfSEVSRVxcdCgxIFxcdTAwM2NcXHUwMDNjIDMpXFx0LyogQ1VUX0hFUkUgYWxyZWFkeSBzZW50ICovXFxuICNkZWZpbmUgQlVHRkxBR19BUkdTXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgNClcXG4rI2RlZmluZSBCVUdGTEFHX0RFRkVSUkVEXFx0KDEgXFx1MDAzY1xcdTAwM2MgNSlcXG4gI2RlZmluZSBCVUdGTEFHX1RBSU5UKHRhaW50KVxcdCgodGFpbnQpIFxcdTAwM2NcXHUwMDNjIDgpXFxuICNkZWZpbmUgQlVHX0dFVF9UQUlOVChidWcpXFx0KChidWcpLVxcdTAwM2VmbGFncyBcXHUwMDNlXFx1MDAzZSA4KVxcbiAjZW5kaWZcXG5AQCAtMTE1LDYgKzExNiwxNiBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcXG4gfSlcXG4gI2VuZGlmXFxuIFxcbisjZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSAoe1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb24pKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRfX1dBUk5fRkxBR1MoI2NvbmRpdGlvbixcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAgQlVHRkxBR19ERUZFUlJFRCB8XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIEJVR0ZMQUdfVEFJTlQoVEFJTlRfV0FSTikpO1xcdFxcdFxcXFxcXG4rXFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbik7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4gI2lmbmRlZiBXQVJOX09OX09OQ0VcXG4gI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKSAoe1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1xcdFxcdFxcdFxcdFxcXFxcXG5AQCAtMTI1LDYgKzEzNiwxNiBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcXG4gXFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbik7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiB9KVxcbiAjZW5kaWZcXG4rXFxuKyNkZWZpbmUgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNvbmRpdGlvbikgKHtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGludCBfX3JldF93YXJuX29uID0gISEoY29uZGl0aW9uKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0X19XQVJOX0ZMQUdTKCNjb25kaXRpb24sXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgIEJVR0ZMQUdfT05DRSB8IEJVR0ZMQUdfREVGRVJSRUQgfFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0ICAgICBCVUdGTEFHX1RBSU5UKFRBSU5UX1dBUk4pKTtcXHRcXHRcXFxcXFxuK1xcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHVubGlrZWx5KF9fcmV0X3dhcm5fb24pO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSlcXG4gI2VuZGlmIC8qIF9fV0FSTl9GTEFHUyAqL1xcbiBcXG4gI2lmIGRlZmluZWQoX19XQVJOX0ZMQUdTKSBcXHUwMDI2XFx1MDAyNiAhZGVmaW5lZChfX1dBUk5fcHJpbnRmKVxcbkBAIC0xNTksNiArMTgwLDE5IEBAIGV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pO1xcbiB9KVxcbiAjZW5kaWZcXG4gXFxuKyNpZm5kZWYgV0FSTl9PTl9ERUZFUlJFRFxcbisjZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSAoe1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb24pKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRndWFyZChwcmVlbXB0KSgpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cHJpbnRrX2RlZmVycmVkX2VudGVyKClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdF9fV0FSTigpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cHJpbnRrX2RlZmVycmVkX2V4aXQoKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbik7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbisjZW5kaWZcXG4rXFxuICNpZm5kZWYgV0FSTlxcbiAjZGVmaW5lIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQuLi4pICh7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0xODAsNiArMjE0LDExIEBAIGV4dGVybiBfX3ByaW50ZigxLCAyKSB2b2lkIF9fd2Fybl9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pO1xcbiBcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOX09OLCAxKVxcbiAjZW5kaWZcXG4gXFxuKyNpZm5kZWYgV0FSTl9PTl9PTkNFX0RFRkVSUkVEXFxuKyNkZWZpbmUgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNvbmRpdGlvbilcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT05fREVGRVJSRUQsIDEpXFxuKyNlbmRpZlxcbitcXG4gI2lmbmRlZiBXQVJOX09OQ0VcXG4gI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRET19PTkNFX0xJVEVfSUYoY29uZGl0aW9uLCBXQVJOLCAxLCBmb3JtYXQpXFxuQEAgLTIxNSw3ICsyNTQsOSBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcXG4gfSlcXG4gI2VuZGlmXFxuIFxcbisjZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSBXQVJOX09OKGNvbmRpdGlvbilcXG4gI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKSBXQVJOX09OKGNvbmRpdGlvbilcXG4rI2RlZmluZSBXQVJOX09OX09OQ0VfREVGRVJSRUQoY29uZGl0aW9uKSBXQVJOX09OKGNvbmRpdGlvbilcXG4gI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpXFxuICNkZWZpbmUgV0FSTl9UQUlOVChjb25kaXRpb24sIHRhaW50LCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpXFxuICNkZWZpbmUgV0FSTl9UQUlOVF9PTkNFKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLikgV0FSTihjb25kaXRpb24sIGZvcm1hdClcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcXG5pbmRleCBiODg3MTQ0OWQzYzY5NC4uMGUyODI0NTdhYmI5MTcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xcbisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcXG5AQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQgdXBkYXRlX3JxX2Nsb2NrKHN0cnVjdCBycSAqcnEpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChzY2hlZF9mZWF0KFdBUk5fRE9VQkxFX0NMT0NLKSlcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKHJxLVxcdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXFx1MDAyNiBSUUNGX1VQREFURUQpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXFx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcXHUwMDI2IFJRQ0ZfVVBEQVRFRCk7XFxuIFxcdHJxLVxcdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgfD0gUlFDRl9VUERBVEVEO1xcbiBcXG4gXFx0Y2xvY2sgPSBzY2hlZF9jbG9ja19jcHUoY3B1X29mKHJxKSk7XFxuQEAgLTE4MDcsNyArMTgwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1Y2xhbXBfcnFfZGVjX2lkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4gXFxuIFxcdGJ1Y2tldCA9IFxcdTAwMjZ1Y19ycS1cXHUwMDNlYnVja2V0W3VjX3NlLVxcdTAwM2VidWNrZXRfaWRdO1xcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKCFidWNrZXQtXFx1MDAzZXRhc2tzKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFidWNrZXQtXFx1MDAzZXRhc2tzKTtcXG4gXFx0aWYgKGxpa2VseShidWNrZXQtXFx1MDAzZXRhc2tzKSlcXG4gXFx0XFx0YnVja2V0LVxcdTAwM2V0YXNrcy0tO1xcbiBcXG5AQCAtMTgyNyw3ICsxODI3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVjbGFtcF9ycV9kZWNfaWQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbiBcXHQgKiBEZWZlbnNpdmUgcHJvZ3JhbW1pbmc6IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gSWYgaXQgaGFwcGVucyxcXG4gXFx0ICogZS5nLiBkdWUgdG8gZnV0dXJlIG1vZGlmaWNhdGlvbiwgd2FybiBhbmQgZml4IHVwIHRoZSBleHBlY3RlZCB2YWx1ZS5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRShidWNrZXQtXFx1MDAzZXZhbHVlIFxcdTAwM2UgcnFfY2xhbXApO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoYnVja2V0LVxcdTAwM2V2YWx1ZSBcXHUwMDNlIHJxX2NsYW1wKTtcXG4gXFx0aWYgKGJ1Y2tldC1cXHUwMDNldmFsdWUgXFx1MDAzZT0gcnFfY2xhbXApIHtcXG4gXFx0XFx0Ymt0X2NsYW1wID0gdWNsYW1wX3JxX21heF92YWx1ZShycSwgY2xhbXBfaWQsIHVjX3NlLVxcdTAwM2V2YWx1ZSk7XFxuIFxcdFxcdHVjbGFtcF9ycV9zZXQocnEsIGNsYW1wX2lkLCBia3RfY2xhbXApO1xcbkBAIC0yMjEwLDcgKzIyMTAsNyBAQCB2b2lkIGFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpXFxuIFxcbiB2b2lkIGRlYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBmbGFncylcXG4ge1xcbi1cXHRXQVJOX09OX09OQ0UoZmxhZ3MgXFx1MDAyNiBERVFVRVVFX1NMRUVQKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGZsYWdzIFxcdTAwMjYgREVRVUVVRV9TTEVFUCk7XFxuIFxcbiBcXHRXUklURV9PTkNFKHAtXFx1MDAzZW9uX3JxLCBUQVNLX09OX1JRX01JR1JBVElORyk7XFxuIFxcdEFTU0VSVF9FWENMVVNJVkVfV1JJVEVSKHAtXFx1MDAzZW9uX3JxKTtcXG5AQCAtMjUxNiw3ICsyNTE2LDcgQEAgc3RhdGljIHN0cnVjdCBycSAqbW92ZV9xdWV1ZWRfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLFxcbiBcXHRycSA9IGNwdV9ycShuZXdfY3B1KTtcXG4gXFxuIFxcdHJxX2xvY2socnEsIHJmKTtcXG4tXFx0V0FSTl9PTl9PTkNFKHRhc2tfY3B1KHApICE9IG5ld19jcHUpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19jcHUocCkgIT0gbmV3X2NwdSk7XFxuIFxcdGFjdGl2YXRlX3Rhc2socnEsIHAsIDApO1xcbiBcXHR3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7XFxuIFxcbkBAIC0yNjAyLDcgKzI2MDIsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGlvbl9jcHVfc3RvcCh2b2lkICpkYXRhKVxcbiBcXHQgKiBJZiB3ZSB3ZXJlIHBhc3NlZCBhIHBlbmRpbmcsIHRoZW4gLVxcdTAwM2VzdG9wX3BlbmRpbmcgd2FzIHNldCwgdGh1c1xcbiBcXHQgKiBwLVxcdTAwM2VtaWdyYXRpb25fcGVuZGluZyBtdXN0IGhhdmUgcmVtYWluZWQgc3RhYmxlLlxcbiBcXHQgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKHBlbmRpbmcgXFx1MDAyNlxcdTAwMjYgcGVuZGluZyAhPSBwLVxcdTAwM2VtaWdyYXRpb25fcGVuZGluZyk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwZW5kaW5nIFxcdTAwMjZcXHUwMDI2IHBlbmRpbmcgIT0gcC1cXHUwMDNlbWlncmF0aW9uX3BlbmRpbmcpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogSWYgdGFza19ycShwKSAhPSBycSwgaXQgY2Fubm90IGJlIG1pZ3JhdGVkIGhlcmUsIGJlY2F1c2Ugd2UncmVcXG5AQCAtMjY2MSw3ICsyNjYxLDcgQEAgc3RhdGljIGludCBtaWdyYXRpb25fY3B1X3N0b3Aodm9pZCAqZGF0YSlcXG4gXFx0XFx0ICogZGV0ZXJtaW5lIGlzX21pZ3JhdGlvbl9kaXNhYmxlZCgpIGFuZCBzbyBoYXZlIHRvIGNoYXNlIGFmdGVyXFxuIFxcdFxcdCAqIGl0LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFwZW5kaW5nLVxcdTAwM2VzdG9wX3BlbmRpbmcpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXBlbmRpbmctXFx1MDAzZXN0b3BfcGVuZGluZyk7XFxuIFxcdFxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbiBcXHRcXHRycV91bmxvY2socnEsIFxcdTAwMjZyZik7XFxuIFxcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwLVxcdTAwM2VwaV9sb2NrLCByZi5mbGFncyk7XFxuQEAgLTMwMDQsNyArMzAwNCw3IEBAIHN0YXRpYyBpbnQgYWZmaW5lX21vdmVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycV9mbGFnXFxuIFxcdCAqXFxuIFxcdCAqIEVpdGhlciB3YXksIHdlIHJlYWxseSBzaG91bGQgaGF2ZSBhIEBwZW5kaW5nIGhlcmUuXFxuIFxcdCAqL1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKCFwZW5kaW5nKSkge1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFwZW5kaW5nKSkge1xcbiBcXHRcXHR0YXNrX3JxX3VubG9jayhycSwgcCwgcmYpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC0zMTE2LDkgKzMxMTYsOSBAQCBzdGF0aWMgaW50IF9fc2V0X2NwdXNfYWxsb3dlZF9wdHJfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UocCA9PSBjdXJyZW50IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdFxcdCBpc19taWdyYXRpb25fZGlzYWJsZWQocCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0ICFjcHVtYXNrX3Rlc3RfY3B1KHRhc2tfY3B1KHApLCBjdHgtXFx1MDAzZW5ld19tYXNrKSkpIHtcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChwID09IGN1cnJlbnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0ICBpc19taWdyYXRpb25fZGlzYWJsZWQocCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0ICAhY3B1bWFza190ZXN0X2NwdSh0YXNrX2NwdShwKSwgY3R4LVxcdTAwM2VuZXdfbWFzaykpKSB7XFxuIFxcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG5AQCAtMzI2Nyw3ICszMjY3LDcgQEAgdm9pZCBmb3JjZV9jb21wYXRpYmxlX2NwdXNfYWxsb3dlZF9wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiBcXHRcXHRcXHRcXHRjcHVtYXNrX3ByX2FyZ3Mob3ZlcnJpZGVfbWFzaykpO1xcbiBcXHR9XFxuIFxcbi1cXHRXQVJOX09OKHNldF9jcHVzX2FsbG93ZWRfcHRyKHAsIG92ZXJyaWRlX21hc2spKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRChzZXRfY3B1c19hbGxvd2VkX3B0cihwLCBvdmVycmlkZV9tYXNrKSk7XFxuIG91dF9mcmVlX21hc2s6XFxuIFxcdGNwdXNfcmVhZF91bmxvY2soKTtcXG4gXFx0ZnJlZV9jcHVtYXNrX3ZhcihuZXdfbWFzayk7XFxuQEAgLTMyOTMsNyArMzI5Myw3IEBAIHZvaWQgcmVsYXhfY29tcGF0aWJsZV9jcHVzX2FsbG93ZWRfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4gXFx0ICogQ3B1c2V0IG1hc2tpbmcgd2lsbCBiZSBkb25lIHRoZXJlIHRvby5cXG4gXFx0ICovXFxuIFxcdHJldCA9IF9fc2NoZWRfc2V0YWZmaW5pdHkocCwgXFx1MDAyNmFjKTtcXG4tXFx0V0FSTl9PTl9PTkNFKHJldCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQpO1xcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NNUFxcbkBAIC0zMzA2LDE2ICszMzA2LDE2IEBAIHZvaWQgc2V0X3Rhc2tfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IG5ld19jcHUpXFxuIFxcdCAqIFdlIHNob3VsZCBuZXZlciBjYWxsIHNldF90YXNrX2NwdSgpIG9uIGEgYmxvY2tlZCB0YXNrLFxcbiBcXHQgKiB0dHd1KCkgd2lsbCBzb3J0IG91dCB0aGUgcGxhY2VtZW50LlxcbiBcXHQgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKHN0YXRlICE9IFRBU0tfUlVOTklORyBcXHUwMDI2XFx1MDAyNiBzdGF0ZSAhPSBUQVNLX1dBS0lORyBcXHUwMDI2XFx1MDAyNiAhcC1cXHUwMDNlb25fcnEpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc3RhdGUgIT0gVEFTS19SVU5OSU5HIFxcdTAwMjZcXHUwMDI2IHN0YXRlICE9IFRBU0tfV0FLSU5HIFxcdTAwMjZcXHUwMDI2ICFwLVxcdTAwM2Vvbl9ycSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBNaWdyYXRpbmcgZmFpciBjbGFzcyB0YXNrIG11c3QgaGF2ZSBwLVxcdTAwM2Vvbl9ycSA9IFRBU0tfT05fUlFfTUlHUkFUSU5HLFxcbiBcXHQgKiBiZWNhdXNlIHNjaGVkc3RhdF93YWl0X3tzdGFydCxlbmR9IHJlYmFzZSBtaWdyYXRpbmcgdGFzaydzIHdhaXRfc3RhcnRcXG4gXFx0ICogdGltZSByZWx5aW5nIG9uIHAtXFx1MDAzZW9uX3JxLlxcbiBcXHQgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKHN0YXRlID09IFRBU0tfUlVOTklORyBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIHAtXFx1MDAzZXNjaGVkX2NsYXNzID09IFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAgKHAtXFx1MDAzZW9uX3JxIFxcdTAwMjZcXHUwMDI2ICF0YXNrX29uX3JxX21pZ3JhdGluZyhwKSkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc3RhdGUgPT0gVEFTS19SVU5OSU5HIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgIHAtXFx1MDAzZXNjaGVkX2NsYXNzID09IFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgIChwLVxcdTAwM2Vvbl9ycSBcXHUwMDI2XFx1MDAyNiAhdGFza19vbl9ycV9taWdyYXRpbmcocCkpKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbiBcXHQvKlxcbkBAIC0zMzI4LDE1ICszMzI4LDE1IEBAIHZvaWQgc2V0X3Rhc2tfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IG5ld19jcHUpXFxuIFxcdCAqIEZ1cnRoZXJtb3JlLCBhbGwgdGFza19ycSB1c2VycyBzaG91bGQgYWNxdWlyZSBib3RoIGxvY2tzLCBzZWVcXG4gXFx0ICogdGFza19ycV9sb2NrKCkuXFxuIFxcdCAqL1xcbi1cXHRXQVJOX09OX09OQ0UoZGVidWdfbG9ja3MgXFx1MDAyNlxcdTAwMjYgIShsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnAtXFx1MDAzZXBpX2xvY2spIHx8XFxuLVxcdFxcdFxcdFxcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChfX3JxX2xvY2twKHRhc2tfcnEocCkpKSkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGVidWdfbG9ja3MgXFx1MDAyNlxcdTAwMjYgIShsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnAtXFx1MDAzZXBpX2xvY2spIHx8XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBsb2NrZGVwX2lzX2hlbGQoX19ycV9sb2NrcCh0YXNrX3JxKHApKSkpKTtcXG4gI2VuZGlmXFxuIFxcdC8qXFxuIFxcdCAqIENsZWFybHksIG1pZ3JhdGluZyB0YXNrcyB0byBvZmZsaW5lIENQVXMgaXMgYSBmYWlybHkgZGFmdCB0aGluZy5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRSghY3B1X29ubGluZShuZXdfY3B1KSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghY3B1X29ubGluZShuZXdfY3B1KSk7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UoaXNfbWlncmF0aW9uX2Rpc2FibGVkKHApKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGlzX21pZ3JhdGlvbl9kaXNhYmxlZChwKSk7XFxuIFxcbiBcXHR0cmFjZV9zY2hlZF9taWdyYXRlX3Rhc2socCwgbmV3X2NwdSk7XFxuIFxcbkBAIC0zODAzLDEwICszODAzLDEwIEBAIHZvaWQgc2NoZWRfdHR3dV9wZW5kaW5nKHZvaWQgKmFyZylcXG4gXFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG4gXFxuIFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdCwgbGxpc3QsIHdha2VfZW50cnkubGxpc3QpIHtcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShwLVxcdTAwM2Vvbl9jcHUpKVxcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZW9uX2NwdSkpXFxuIFxcdFxcdFxcdHNtcF9jb25kX2xvYWRfYWNxdWlyZShcXHUwMDI2cC1cXHUwMDNlb25fY3B1LCAhVkFMKTtcXG4gXFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UodGFza19jcHUocCkgIT0gY3B1X29mKHJxKSkpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19jcHUocCkgIT0gY3B1X29mKHJxKSkpXFxuIFxcdFxcdFxcdHNldF90YXNrX2NwdShwLCBjcHVfb2YocnEpKTtcXG4gXFxuIFxcdFxcdHR0d3VfZG9fYWN0aXZhdGUocnEsIHAsIHAtXFx1MDAzZXNjaGVkX3JlbW90ZV93YWtldXAgPyBXRl9NSUdSQVRFRCA6IDAsIFxcdTAwMjZyZik7XFxuQEAgLTQwMDMsOCArNDAwMyw4IEBAIGJvb2wgdHR3dV9zdGF0ZV9tYXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBzdGF0ZSwgaW50ICpzdWNjZXNzKVxcbiBcXHRpbnQgbWF0Y2g7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfREVCVUdfUFJFRU1QVCkpIHtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKChzdGF0ZSBcXHUwMDI2IFRBU0tfUlRMT0NLX1dBSVQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAgc3RhdGUgIT0gVEFTS19SVExPQ0tfV0FJVCk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgoc3RhdGUgXFx1MDAyNiBUQVNLX1JUTE9DS19XQUlUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgICBzdGF0ZSAhPSBUQVNLX1JUTE9DS19XQUlUKTtcXG4gXFx0fVxcbiBcXG4gXFx0KnN1Y2Nlc3MgPSAhIShtYXRjaCA9IF9fdGFza19zdGF0ZV9tYXRjaChwLCBzdGF0ZSkpO1xcbkBAIC01NzQ1LDcgKzU3NDUsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdFxcdCAqIHdlIGFyZSBhbHdheXMgc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHByb3h5IChvbmx5IGFcXG4gXFx0XFx0XFx0ICogc2luZ2xlIHRhc2sgaXMgcnVubmluZykuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRXQVJOX09OX09OQ0UocnEtXFx1MDAzZWN1cnIgIT0gcnEtXFx1MDAzZWRvbm9yKTtcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVxcdTAwM2VjdXJyICE9IHJxLVxcdTAwM2Vkb25vcik7XFxuIFxcdFxcdFxcdHVwZGF0ZV9ycV9jbG9jayhycSk7XFxuIFxcbiBcXHRcXHRcXHRpZiAoIWlzX2lkbGVfdGFzayhjdXJyKSkge1xcbkBAIC01NzU0LDcgKzU3NTQsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdFxcdFxcdCAqIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUuXFxuIFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHR1NjQgZGVsdGEgPSBycV9jbG9ja190YXNrKHJxKSAtIGN1cnItXFx1MDAzZXNlLmV4ZWNfc3RhcnQ7XFxuLVxcdFxcdFxcdFxcdFdBUk5fT05fT05DRShkZWx0YSBcXHUwMDNlICh1NjQpTlNFQ19QRVJfU0VDICogMzApO1xcbitcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGVsdGEgXFx1MDAzZSAodTY0KU5TRUNfUEVSX1NFQyAqIDMwKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRjdXJyLVxcdTAwM2VzY2hlZF9jbGFzcy1cXHUwMDNldGFza190aWNrKHJxLCBjdXJyLCAwKTtcXG4gXFxuQEAgLTU3NjksNyArNTc2OSw3IEBAIHN0YXRpYyB2b2lkIHNjaGVkX3RpY2tfcmVtb3RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0ICogZmlyc3QgdXBkYXRlIHN0YXRlIHRvIHJlZmxlY3QgaG90cGx1ZyBhY3Rpdml0eSBpZiByZXF1aXJlZC5cXG4gXFx0ICovXFxuIFxcdG9zID0gYXRvbWljX2ZldGNoX2FkZF91bmxlc3MoXFx1MDAyNnR3b3JrLVxcdTAwM2VzdGF0ZSwgLTEsIFRJQ0tfU0NIRURfUkVNT1RFX1JVTk5JTkcpO1xcbi1cXHRXQVJOX09OX09OQ0Uob3MgPT0gVElDS19TQ0hFRF9SRU1PVEVfT0ZGTElORSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChvcyA9PSBUSUNLX1NDSEVEX1JFTU9URV9PRkZMSU5FKTtcXG4gXFx0aWYgKG9zID09IFRJQ0tfU0NIRURfUkVNT1RFX1JVTk5JTkcpXFxuIFxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBkd29yaywgSFopO1xcbiB9XFxuQEAgLTYxOTYsNyArNjE5Niw3IEBAIHBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHJxX2ZsYWdzICpyZilcXG4gXFx0XFx0XFx0ICogRm9yIHJvYnVzdG5lc3MsIHVwZGF0ZSB0aGUgbWluX3ZydW50aW1lX2ZpIGZvclxcbiBcXHRcXHRcXHQgKiB1bmNvbnN0cmFpbmVkIHBpY2tzIGFzIHdlbGwuXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRXQVJOX09OX09OQ0UoZmlfYmVmb3JlKTtcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGZpX2JlZm9yZSk7XFxuIFxcdFxcdFxcdHRhc2tfdnJ1bnRpbWVfdXBkYXRlKHJxLCBuZXh0LCBmYWxzZSk7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X3NldF9uZXh0O1xcbiBcXHRcXHR9XFxuQEAgLTYyNzQsNyArNjI3NCw3IEBAIHBpY2tfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHJxX2ZsYWdzICpyZilcXG4gXFx0cnEtXFx1MDAzZWNvcmVfc2NoZWRfc2VxID0gcnEtXFx1MDAzZWNvcmUtXFx1MDAzZWNvcmVfcGlja19zZXE7XFxuIFxcbiBcXHQvKiBTb21ldGhpbmcgc2hvdWxkIGhhdmUgYmVlbiBzZWxlY3RlZCBmb3IgY3VycmVudCBDUFUgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKCFuZXh0KTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFuZXh0KTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFJlc2NoZWR1bGUgc2libGluZ3NcXG5AQCAtNjMxNyw3ICs2MzE3LDcgQEAgcGlja19uZXh0X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBEaWQgd2UgYnJlYWsgTDFURiBtaXRpZ2F0aW9uIHJlcXVpcmVtZW50cz8gKi9cXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFjb29raWVfbWF0Y2gobmV4dCwgcnFfaS1cXHUwMDNlY29yZV9waWNrKSk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghY29va2llX21hdGNoKG5leHQsIHJxX2ktXFx1MDAzZWNvcmVfcGljaykpO1xcbiBcXG4gXFx0XFx0aWYgKHJxX2ktXFx1MDAzZWN1cnIgPT0gcnFfaS1cXHUwMDNlY29yZV9waWNrKSB7XFxuIFxcdFxcdFxcdHJxX2ktXFx1MDAzZWNvcmVfcGljayA9IE5VTEw7XFxuQEAgLTY3MTcsNyArNjcxNyw3IEBAIHN0YXRpYyB2b2lkIHByb3h5X21pZ3JhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLFxcbiBcXHRzdHJ1Y3QgcnEgKnRhcmdldF9ycSA9IGNwdV9ycSh0YXJnZXRfY3B1KTtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xcbi1cXHRXQVJOX09OKHAgPT0gcnEtXFx1MDAzZWN1cnIpO1xcbitcXHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gcnEtXFx1MDAzZWN1cnIpO1xcbiBcXHQvKlxcbiBcXHQgKiBTaW5jZSB3ZSBhcmUgbWlncmF0aW5nIGEgYmxvY2tlZCBkb25vciwgaXQgY291bGQgYmUgcnEtXFx1MDAzZWRvbm9yLFxcbiBcXHQgKiBhbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSByZWZlcmVuY2VzIGZyb20gdGhpc1xcbkBAIC02NzQ5LDcgKzY3NDksNyBAQCBzdGF0aWMgdm9pZCBwcm94eV9mb3JjZV9yZXR1cm4oc3RydWN0IHJxICpycSwgc3RydWN0IHJxX2ZsYWdzICpyZixcXG4gXFx0aW50IGNwdSwgd2FrZV9mbGFnID0gV0ZfVFRXVTtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xcbi1cXHRXQVJOX09OKHAgPT0gcnEtXFx1MDAzZWN1cnIpO1xcbitcXHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gcnEtXFx1MDAzZWN1cnIpO1xcbiBcXG4gXFx0aWYgKHAgPT0gcnEtXFx1MDAzZWRvbm9yKVxcbiBcXHRcXHRwcm94eV9yZXNjaGVkX2lkbGUocnEpO1xcbkBAIC02OTUxLDcgKzY5NTEsNyBAQCBmaW5kX3Byb3h5X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpkb25vciwgc3RydWN0IHJxX2ZsYWdzICpyZilcXG4gXFx0XFx0ICogZ3VhcmFudGVlIGl0cyBleGlzdGVuY2UsIGFzIHBlciB0dHd1X3JlbW90ZSgpLlxcbiBcXHRcXHQgKi9cXG4gXFx0fVxcbi1cXHRXQVJOX09OX09OQ0Uob3duZXIgXFx1MDAyNlxcdTAwMjYgIW93bmVyLVxcdTAwM2Vvbl9ycSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChvd25lciBcXHUwMDI2XFx1MDAyNiAhb3duZXItXFx1MDAzZW9uX3JxKTtcXG4gXFx0cmV0dXJuIG93bmVyO1xcbiBcXG4gZGVhY3RpdmF0ZTpcXG5AQCAtNzYzMSw4ICs3NjMxLDggQEAgdm9pZCBydF9tdXRleF9zZXRwcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxcbiBcXHQgKiByZWFsIG5lZWQgdG8gYm9vc3QuXFxuIFxcdCAqL1xcbiBcXHRpZiAodW5saWtlbHkocCA9PSBycS1cXHUwMDNlaWRsZSkpIHtcXG4tXFx0XFx0V0FSTl9PTihwICE9IHJxLVxcdTAwM2VjdXJyKTtcXG4tXFx0XFx0V0FSTl9PTihwLVxcdTAwM2VwaV9ibG9ja2VkX29uKTtcXG4rXFx0XFx0V0FSTl9PTl9ERUZFUlJFRChwICE9IHJxLVxcdTAwM2VjdXJyKTtcXG4rXFx0XFx0V0FSTl9PTl9ERUZFUlJFRChwLVxcdTAwM2VwaV9ibG9ja2VkX29uKTtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbkBAIC04NDYzLDcgKzg0NjMsNyBAQCBzdGF0aWMgdm9pZCBiYWxhbmNlX3B1c2hfc2V0KGludCBjcHUsIGJvb2wgb24pXFxuIFxcbiBcXHRycV9sb2NrX2lycXNhdmUocnEsIFxcdTAwMjZyZik7XFxuIFxcdGlmIChvbikge1xcbi1cXHRcXHRXQVJOX09OX09OQ0UocnEtXFx1MDAzZWJhbGFuY2VfY2FsbGJhY2spO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXFx1MDAzZWJhbGFuY2VfY2FsbGJhY2spO1xcbiBcXHRcXHRycS1cXHUwMDNlYmFsYW5jZV9jYWxsYmFjayA9IFxcdTAwMjZiYWxhbmNlX3B1c2hfY2FsbGJhY2s7XFxuIFxcdH0gZWxzZSBpZiAocnEtXFx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPT0gXFx1MDAyNmJhbGFuY2VfcHVzaF9jYWxsYmFjaykge1xcbiBcXHRcXHRycS1cXHUwMDNlYmFsYW5jZV9jYWxsYmFjayA9IE5VTEw7XFxuQEAgLTExMTUwLDcgKzExMTUwLDcgQEAgc3RydWN0IHNjaGVkX2NoYW5nZV9jdHggKnNjaGVkX2NoYW5nZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludFxcbiBcXHQgKiBNdXN0IGV4Y2x1c2l2ZWx5IHVzZSBtYXRjaGVkIGZsYWdzIHNpbmNlIHRoaXMgaXMgYm90aCBkZXF1ZXVlIGFuZFxcbiBcXHQgKiBlbnF1ZXVlLlxcbiBcXHQgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKGZsYWdzIFxcdTAwMjYgMHhGRkZGMDAwMCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChmbGFncyBcXHUwMDI2IDB4RkZGRjAwMDApO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XFxuIFxcbkBAIC0xMTE5OCw3ICsxMTE5OCw3IEBAIHZvaWQgc2NoZWRfY2hhbmdlX2VuZChzdHJ1Y3Qgc2NoZWRfY2hhbmdlX2N0eCAqY3R4KVxcbiBcXHQvKlxcbiBcXHQgKiBDaGFuZ2luZyBjbGFzcyB3aXRob3V0ICpRVUVVRV9DTEFTUyBpcyBiYWQuXFxuIFxcdCAqL1xcbi1cXHRXQVJOX09OX09OQ0UocC1cXHUwMDNlc2NoZWRfY2xhc3MgIT0gY3R4LVxcdTAwM2VjbGFzcyBcXHUwMDI2XFx1MDAyNiAhKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBFTlFVRVVFX0NMQVNTKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VzY2hlZF9jbGFzcyAhPSBjdHgtXFx1MDAzZWNsYXNzIFxcdTAwMjZcXHUwMDI2ICEoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IEVOUVVFVUVfQ0xBU1MpKTtcXG4gXFxuIFxcdGlmICgoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IEVOUVVFVUVfQ0xBU1MpIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZXNjaGVkX2NsYXNzLVxcdTAwM2Vzd2l0Y2hpbmdfdG8pXFxuIFxcdFxcdHAtXFx1MDAzZXNjaGVkX2NsYXNzLVxcdTAwM2Vzd2l0Y2hpbmdfdG8ocnEsIHApO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZV9zY2hlZC5jIGIva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuY1xcbmluZGV4IDczYjZiMjQyNjkxMTliLi5lYzg4ZWQ3ZDhlZTg3NyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvY29yZV9zY2hlZC5jXFxuKysrIGIva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuY1xcbkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNjaGVkX2NvcmVfdXBkYXRlX2Nvb2tpZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXFxuIFxcdCAqIGEgY29va2llIHVudGlsIGFmdGVyIHdlJ3ZlIHJlbW92ZWQgaXQsIHdlIG11c3QgaGF2ZSBjb3JlIHNjaGVkdWxpbmdcXG4gXFx0ICogZW5hYmxlZCBoZXJlLlxcbiBcXHQgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKChwLVxcdTAwM2Vjb3JlX2Nvb2tpZSB8fCBjb29raWUpIFxcdTAwMjZcXHUwMDI2ICFzY2hlZF9jb3JlX2VuYWJsZWQocnEpKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKChwLVxcdTAwM2Vjb3JlX2Nvb2tpZSB8fCBjb29raWUpIFxcdTAwMjZcXHUwMDI2ICFzY2hlZF9jb3JlX2VuYWJsZWQocnEpKTtcXG4gXFxuIFxcdGlmIChzY2hlZF9jb3JlX2VucXVldWVkKHApKVxcbiBcXHRcXHRzY2hlZF9jb3JlX2RlcXVldWUocnEsIHAsIERFUVVFVUVfU0FWRSk7XFxuQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIF9fc2NoZWRfY29yZV9hY2NvdW50X2ZvcmNlaWRsZShzdHJ1Y3QgcnEgKnJxKVxcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UoIXJxLVxcdTAwM2Vjb3JlLVxcdTAwM2Vjb3JlX2ZvcmNlaWRsZV9jb3VudCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghcnEtXFx1MDAzZWNvcmUtXFx1MDAzZWNvcmVfZm9yY2VpZGxlX2NvdW50KTtcXG4gXFxuIFxcdGlmIChycS1cXHUwMDNlY29yZS1cXHUwMDNlY29yZV9mb3JjZWlkbGVfc3RhcnQgPT0gMClcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBfX3NjaGVkX2NvcmVfYWNjb3VudF9mb3JjZWlkbGUoc3RydWN0IHJxICpycSlcXG4gXFxuIFxcdHJxLVxcdTAwM2Vjb3JlLVxcdTAwM2Vjb3JlX2ZvcmNlaWRsZV9zdGFydCA9IG5vdztcXG4gXFxuLVxcdGlmIChXQVJOX09OX09OQ0UoIXJxLVxcdTAwM2Vjb3JlLVxcdTAwM2Vjb3JlX2ZvcmNlaWRsZV9vY2N1cGF0aW9uKSkge1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFycS1cXHUwMDNlY29yZS1cXHUwMDNlY29yZV9mb3JjZWlkbGVfb2NjdXBhdGlvbikpIHtcXG4gXFx0XFx0LyogY2FuJ3QgYmUgZm9yY2VkIGlkbGUgd2l0aG91dCBhIHJ1bm5pbmcgdGFzayAqL1xcbiBcXHR9IGVsc2UgaWYgKHJxLVxcdTAwM2Vjb3JlLVxcdTAwM2Vjb3JlX2ZvcmNlaWRsZV9jb3VudCBcXHUwMDNlIDEgfHxcXG4gXFx0XFx0ICAgcnEtXFx1MDAzZWNvcmUtXFx1MDAzZWNvcmVfZm9yY2VpZGxlX29jY3VwYXRpb24gXFx1MDAzZSAxKSB7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jcHVkZWFkbGluZS5jIGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmNcXG5pbmRleCAwYTJiN2UzMGZkMTBjMS4uZTMwNWE4ZTk5M2UyN2MgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuY1xcbkBAIC0xNDksNyArMTQ5LDcgQEAgaW50IGNwdWRsX2ZpbmQoc3RydWN0IGNwdWRsICpjcCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRpbnQgYmVzdF9jcHUgPSBjcHVkbF9tYXhpbXVtKGNwKTtcXG4gXFxuLVxcdFxcdFdBUk5fT04oYmVzdF9jcHUgIT0gLTEgXFx1MDAyNlxcdTAwMjYgIWNwdV9wcmVzZW50KGJlc3RfY3B1KSk7XFxuK1xcdFxcdFdBUk5fT05fREVGRVJSRUQoYmVzdF9jcHUgIT0gLTEgXFx1MDAyNlxcdTAwMjYgIWNwdV9wcmVzZW50KGJlc3RfY3B1KSk7XFxuIFxcbiBcXHRcXHRpZiAoY3B1bWFza190ZXN0X2NwdShiZXN0X2NwdSwgXFx1MDAyNnAtXFx1MDAzZWNwdXNfbWFzaykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGRsX3RpbWVfYmVmb3JlKGRsX3NlLVxcdTAwM2VkZWFkbGluZSwgY3AtXFx1MDAzZWVsZW1lbnRzWzBdLmRsKSkge1xcbkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBjcHVkbF9jbGVhcihzdHJ1Y3QgY3B1ZGwgKmNwLCBpbnQgY3B1LCBib29sIG9ubGluZSlcXG4gXFx0aW50IG9sZF9pZHgsIG5ld19jcHU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbi1cXHRXQVJOX09OKCFjcHVfcHJlc2VudChjcHUpKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRCghY3B1X3ByZXNlbnQoY3B1KSk7XFxuIFxcbiBcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBjcHVkbF9zZXQoc3RydWN0IGNwdWRsICpjcCwgaW50IGNwdSwgdTY0IGRsKVxcbiBcXHRpbnQgb2xkX2lkeDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuLVxcdFdBUk5fT04oIWNwdV9wcmVzZW50KGNwdSkpO1xcbitcXHRXQVJOX09OX0RFRkVSUkVEKCFjcHVfcHJlc2VudChjcHUpKTtcXG4gXFxuIFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y3AtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jIGIva2VybmVsL3NjaGVkL2RlYWRsaW5lLmNcXG5pbmRleCA3ZGI0Yzg3ZGY4M2IwYS4uODYzYWM3NTA5MTkyZjcgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2RlYWRsaW5lLmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuY1xcbkBAIC0yMTcsOCArMjE3LDggQEAgdm9pZCBfX2FkZF9ydW5uaW5nX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSlcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTtcXG4gXFx0ZGxfcnEtXFx1MDAzZXJ1bm5pbmdfYncgKz0gZGxfYnc7XFxuLVxcdFdBUk5fT05fT05DRShkbF9ycS1cXHUwMDNlcnVubmluZ19idyBcXHUwMDNjIG9sZCk7IC8qIG92ZXJmbG93ICovXFxuLVxcdFdBUk5fT05fT05DRShkbF9ycS1cXHUwMDNlcnVubmluZ19idyBcXHUwMDNlIGRsX3JxLVxcdTAwM2V0aGlzX2J3KTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVxcdTAwM2VydW5uaW5nX2J3IFxcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVxcdTAwM2VydW5uaW5nX2J3IFxcdTAwM2UgZGxfcnEtXFx1MDAzZXRoaXNfYncpO1xcbiBcXHQvKiBraWNrIGNwdWZyZXEgKHNlZSB0aGUgY29tbWVudCBpbiBrZXJuZWwvc2NoZWQvc2NoZWQuaCkuICovXFxuIFxcdGNwdWZyZXFfdXBkYXRlX3V0aWwocnFfb2ZfZGxfcnEoZGxfcnEpLCAwKTtcXG4gfVxcbkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBfX3N1Yl9ydW5uaW5nX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSlcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTtcXG4gXFx0ZGxfcnEtXFx1MDAzZXJ1bm5pbmdfYncgLT0gZGxfYnc7XFxuLVxcdFdBUk5fT05fT05DRShkbF9ycS1cXHUwMDNlcnVubmluZ19idyBcXHUwMDNlIG9sZCk7IC8qIHVuZGVyZmxvdyAqL1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtXFx1MDAzZXJ1bm5pbmdfYncgXFx1MDAzZSBvbGQpOyAvKiB1bmRlcmZsb3cgKi9cXG4gXFx0aWYgKGRsX3JxLVxcdTAwM2VydW5uaW5nX2J3IFxcdTAwM2Ugb2xkKVxcbiBcXHRcXHRkbF9ycS1cXHUwMDNlcnVubmluZ19idyA9IDA7XFxuIFxcdC8qIGtpY2sgY3B1ZnJlcSAoc2VlIHRoZSBjb21tZW50IGluIGtlcm5lbC9zY2hlZC9zY2hlZC5oKS4gKi9cXG5AQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgX19hZGRfcnFfYncodTY0IGRsX2J3LCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKVxcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZl9kbF9ycShkbF9ycSkpO1xcbiBcXHRkbF9ycS1cXHUwMDNldGhpc19idyArPSBkbF9idztcXG4tXFx0V0FSTl9PTl9PTkNFKGRsX3JxLVxcdTAwM2V0aGlzX2J3IFxcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVxcdTAwM2V0aGlzX2J3IFxcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZVxcbkBAIC0yNTQsMTAgKzI1NCwxMCBAQCB2b2lkIF9fc3ViX3JxX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSlcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTtcXG4gXFx0ZGxfcnEtXFx1MDAzZXRoaXNfYncgLT0gZGxfYnc7XFxuLVxcdFdBUk5fT05fT05DRShkbF9ycS1cXHUwMDNldGhpc19idyBcXHUwMDNlIG9sZCk7IC8qIHVuZGVyZmxvdyAqL1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtXFx1MDAzZXRoaXNfYncgXFx1MDAzZSBvbGQpOyAvKiB1bmRlcmZsb3cgKi9cXG4gXFx0aWYgKGRsX3JxLVxcdTAwM2V0aGlzX2J3IFxcdTAwM2Ugb2xkKVxcbiBcXHRcXHRkbF9ycS1cXHUwMDNldGhpc19idyA9IDA7XFxuLVxcdFdBUk5fT05fT05DRShkbF9ycS1cXHUwMDNlcnVubmluZ19idyBcXHUwMDNlIGRsX3JxLVxcdTAwM2V0aGlzX2J3KTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVxcdTAwM2VydW5uaW5nX2J3IFxcdTAwM2UgZGxfcnEtXFx1MDAzZXRoaXNfYncpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuQEAgLTMzNSw3ICszMzUsNyBAQCB2b2lkIGNhbmNlbF9pbmFjdGl2ZV90aW1lcihzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcXG4gXFxuIHN0YXRpYyB2b2lkIGRsX2NoYW5nZV91dGlsaXphdGlvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBuZXdfYncpXFxuIHtcXG4tXFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZWRsLmZsYWdzIFxcdTAwMjYgU0NIRURfRkxBR19TVUdPVik7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VkbC5mbGFncyBcXHUwMDI2IFNDSEVEX0ZMQUdfU1VHT1YpO1xcbiBcXG4gXFx0aWYgKHRhc2tfb25fcnFfcXVldWVkKHApKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTQxNiw3ICs0MTYsNyBAQCBzdGF0aWMgdm9pZCB0YXNrX25vbl9jb250ZW5kaW5nKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBib29sIGRsX3Rhc2spXFxuIFxcdGlmIChkbF9lbnRpdHlfaXNfc3BlY2lhbChkbF9zZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdFdBUk5fT04oZGxfc2UtXFx1MDAzZWRsX25vbl9jb250ZW5kaW5nKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRChkbF9zZS1cXHUwMDNlZGxfbm9uX2NvbnRlbmRpbmcpO1xcbiBcXG4gXFx0emVyb2xhZ190aW1lID0gZGxfc2UtXFx1MDAzZWRlYWRsaW5lIC1cXG4gXFx0XFx0IGRpdjY0X2xvbmcoKGRsX3NlLVxcdTAwM2VydW50aW1lICogZGxfc2UtXFx1MDAzZWRsX3BlcmlvZCksXFxuQEAgLTU4Miw3ICs1ODIsNyBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlX3B1c2hhYmxlX2RsX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiB7XFxuIFxcdHN0cnVjdCByYl9ub2RlICpsZWZ0bW9zdDtcXG4gXFxuLVxcdFdBUk5fT05fT05DRSghUkJfRU1QVFlfTk9ERShcXHUwMDI2cC1cXHUwMDNlcHVzaGFibGVfZGxfdGFza3MpKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFSQl9FTVBUWV9OT0RFKFxcdTAwMjZwLVxcdTAwM2VwdXNoYWJsZV9kbF90YXNrcykpO1xcbiBcXG4gXFx0bGVmdG1vc3QgPSByYl9hZGRfY2FjaGVkKFxcdTAwMjZwLVxcdTAwM2VwdXNoYWJsZV9kbF90YXNrcyxcXG4gXFx0XFx0XFx0XFx0IFxcdTAwMjZycS1cXHUwMDNlZGwucHVzaGFibGVfZGxfdGFza3Nfcm9vdCxcXG5AQCAtNjY0LDcgKzY2NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnEgKmRsX3Rhc2tfb2ZmbGluZV9taWdyYXRpb24oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwXFxuIFxcdFxcdFxcdCAqIEZhaWxlZCB0byBmaW5kIGFueSBzdWl0YWJsZSBDUFUuXFxuIFxcdFxcdFxcdCAqIFRoZSB0YXNrIHdpbGwgbmV2ZXIgY29tZSBiYWNrIVxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0V0FSTl9PTl9PTkNFKGRsX2JhbmR3aWR0aF9lbmFibGVkKCkpO1xcbitcXHRcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfYmFuZHdpZHRoX2VuYWJsZWQoKSk7XFxuIFxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBJZiBhZG1pc3Npb24gY29udHJvbCBpcyBkaXNhYmxlZCB3ZVxcbkBAIC03NTYsOCArNzU2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25ld19kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXFxuIFxcdHN0cnVjdCBkbF9ycSAqZGxfcnEgPSBkbF9ycV9vZl9zZShkbF9zZSk7XFxuIFxcdHN0cnVjdCBycSAqcnEgPSBycV9vZl9kbF9ycShkbF9ycSk7XFxuIFxcbi1cXHRXQVJOX09OKGlzX2RsX2Jvb3N0ZWQoZGxfc2UpKTtcXG4tXFx0V0FSTl9PTihkbF90aW1lX2JlZm9yZShycV9jbG9jayhycSksIGRsX3NlLVxcdTAwM2VkZWFkbGluZSkpO1xcbitcXHRXQVJOX09OX0RFRkVSUkVEKGlzX2RsX2Jvb3N0ZWQoZGxfc2UpKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRChkbF90aW1lX2JlZm9yZShycV9jbG9jayhycSksIGRsX3NlLVxcdTAwM2VkZWFkbGluZSkpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogV2UgYXJlIHJhY2luZyB3aXRoIHRoZSBkZWFkbGluZSB0aW1lci4gU28sIGRvIG5vdGhpbmcgYmVjYXVzZVxcbkBAIC04MDEsNyArODAxLDcgQEAgc3RhdGljIHZvaWQgcmVwbGVuaXNoX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcXG4gXFx0c3RydWN0IGRsX3JxICpkbF9ycSA9IGRsX3JxX29mX3NlKGRsX3NlKTtcXG4gXFx0c3RydWN0IHJxICpycSA9IHJxX29mX2RsX3JxKGRsX3JxKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRShwaV9vZihkbF9zZSktXFx1MDAzZWRsX3J1bnRpbWUgXFx1MDAzYz0gMCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwaV9vZihkbF9zZSktXFx1MDAzZWRsX3J1bnRpbWUgXFx1MDAzYz0gMCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUaGlzIGNvdWxkIGJlIHRoZSBjYXNlIGZvciBhICEtZGwgdGFzayB0aGF0IGlzIGJvb3N0ZWQuXFxuQEAgLTk3NSw3ICs5NzUsNyBAQCB1cGRhdGVfZGxfcmV2aXNlZF93YWtldXAoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIHN0cnVjdCBycSAqcnEpXFxuIFxcdCAqXFxuIFxcdCAqIFNlZSB1cGRhdGVfZGxfZW50aXR5KCkgY29tbWVudHMgZm9yIGZ1cnRoZXIgZGV0YWlscy5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT04oZGxfdGltZV9iZWZvcmUoZGxfc2UtXFx1MDAzZWRlYWRsaW5lLCBycV9jbG9jayhycSkpKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRChkbF90aW1lX2JlZm9yZShkbF9zZS1cXHUwMDNlZGVhZGxpbmUsIHJxX2Nsb2NrKHJxKSkpO1xcbiBcXG4gXFx0ZGxfc2UtXFx1MDAzZXJ1bnRpbWUgPSAoZGxfc2UtXFx1MDAzZWRsX2RlbnNpdHkgKiBsYXhpdHkpIFxcdTAwM2VcXHUwMDNlIEJXX1NISUZUO1xcbiB9XFxuQEAgLTEwODAsNyArMTA4MCw3IEBAIHN0YXRpYyBpbnQgc3RhcnRfZGxfdGltZXIoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXFxuIFxcdCAqIChjdXJyZW50IHUgXFx1MDAzZSBVKS5cXG4gXFx0ICovXFxuIFxcdGlmIChkbF9zZS1cXHUwMDNlZGxfZGVmZXJfYXJtZWQpIHtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFkbF9zZS1cXHUwMDNlZGxfdGhyb3R0bGVkKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFkbF9zZS1cXHUwMDNlZGxfdGhyb3R0bGVkKTtcXG4gXFx0XFx0YWN0ID0gbnNfdG9fa3RpbWUoZGxfc2UtXFx1MDAzZWRlYWRsaW5lIC0gZGxfc2UtXFx1MDAzZXJ1bnRpbWUpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiBhY3QgPSBkZWFkbGluZSAtIHJlbC1kZWFkbGluZSArIHBlcmlvZCAqL1xcbkBAIC0xNDUxLDcgKzE0NTEsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9kbF9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgczY0XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIE5vbi1zZXJ2ZXJzIHdvdWxkIG5ldmVyIGdldCB0aW1lIGFjY291bnRlZCB3aGlsZSB0aHJvdHRsZWQuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoIWRsX3NlcnZlcihkbF9zZSkpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWRsX3NlcnZlcihkbF9zZSkpO1xcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2hpbGUgdGhlIHNlcnZlciBpcyBtYXJrZWQgaWRsZSwgZG8gbm90IHB1c2ggb3V0IHRoZVxcbkBAIC0xNDkyLDcgKzE0OTIsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9kbF9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgczY0XFxuIFxcdFxcdCAqIGFuZCBxdWV1ZSByaWdodCBhd2F5LiBPdGhlcndpc2Ugbm90aGluZyBtaWdodCBxdWV1ZSBpdC4gVGhhdCdzIHNpbWlsYXJcXG4gXFx0XFx0ICogdG8gd2hhdCBlbnF1ZXVlX2RsX2VudGl0eSgpIGRvZXMgb24gc3RhcnRfZGxfdGltZXI9PTAuIEZvciBub3csIGp1c3Qgd2Fybi5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdFdBUk5fT05fT05DRSghc3RhcnRfZGxfdGltZXIoZGxfc2UpKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzdGFydF9kbF90aW1lcihkbF9zZSkpO1xcbiBcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuQEAgLTE4MDEsNyArMTgwMSw3IEBAIHZvaWQgZGxfc2VydmVyX3N0YXJ0KHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlKVxcbiBcXHQgKi9cXG4gXFx0cnEtXFx1MDAzZWRvbm9yLVxcdTAwM2VzY2hlZF9jbGFzcy1cXHUwMDNldXBkYXRlX2N1cnIocnEpO1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghY3B1X29ubGluZShjcHVfb2YocnEpKSkpXFxuK1xcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWNwdV9vbmxpbmUoY3B1X29mKHJxKSkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHR0cmFjZV9zY2hlZF9kbF9zZXJ2ZXJfc3RhcnRfdHAoZGxfc2UsIGNwdV9vZihycSksIGRsX2dldF90eXBlKGRsX3NlLCBycSkpO1xcbkBAIC0yMDczLDcgKzIwNzMsNyBAQCB2b2lkIGluY19kbF90YXNrcyhzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IGRsX3JxICpkbF9ycSlcXG4gc3RhdGljIGlubGluZVxcbiB2b2lkIGRlY19kbF90YXNrcyhzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IGRsX3JxICpkbF9ycSlcXG4ge1xcbi1cXHRXQVJOX09OKCFkbF9ycS1cXHUwMDNlZGxfbnJfcnVubmluZyk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQoIWRsX3JxLVxcdTAwM2VkbF9ucl9ydW5uaW5nKTtcXG4gXFx0ZGxfcnEtXFx1MDAzZWRsX25yX3J1bm5pbmctLTtcXG4gXFxuIFxcdGlmICghZGxfc2VydmVyKGRsX3NlKSlcXG5AQCAtMjE2NSw3ICsyMTY1LDcgQEAgc3RhdGljIHZvaWQgX19lbnF1ZXVlX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpO1xcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKCFSQl9FTVBUWV9OT0RFKFxcdTAwMjZkbF9zZS1cXHUwMDNlcmJfbm9kZSkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIVJCX0VNUFRZX05PREUoXFx1MDAyNmRsX3NlLVxcdTAwM2VyYl9ub2RlKSk7XFxuIFxcbiBcXHRyYl9hZGRfY2FjaGVkKFxcdTAwMjZkbF9zZS1cXHUwMDNlcmJfbm9kZSwgXFx1MDAyNmRsX3JxLVxcdTAwM2Vyb290LCBfX2RsX2xlc3MpO1xcbiBcXG5AQCAtMjE4OSw3ICsyMTg5LDcgQEAgc3RhdGljIHZvaWQgX19kZXF1ZXVlX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcXG4gc3RhdGljIHZvaWRcXG4gZW5xdWV1ZV9kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIGludCBmbGFncylcXG4ge1xcbi1cXHRXQVJOX09OX09OQ0Uob25fZGxfcnEoZGxfc2UpKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKG9uX2RsX3JxKGRsX3NlKSk7XFxuIFxcbiBcXHR1cGRhdGVfc3RhdHNfZW5xdWV1ZV9kbChkbF9ycV9vZl9zZShkbF9zZSksIGRsX3NlLCBmbGFncyk7XFxuIFxcbkBAIC0yNjExLDcgKzI2MTEsNyBAQCBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpfX3BpY2tfdGFza19kbChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdGRsX3NlID0gcGlja19uZXh0X2RsX2VudGl0eShkbF9ycSk7XFxuLVxcdFdBUk5fT05fT05DRSghZGxfc2UpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWRsX3NlKTtcXG4gXFxuIFxcdGlmIChkbF9zZXJ2ZXIoZGxfc2UpKSB7XFxuIFxcdFxcdHAgPSBkbF9zZS1cXHUwMDNlc2VydmVyX3BpY2tfdGFzayhkbF9zZSwgcmYpO1xcbkBAIC0yODIzLDEyICsyODIzLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF9wdXNoYWJsZV9kbF90YXNrKHN0cnVjdCBycSAqcnEpXFxuIFxcdGlmICghcClcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UocnEtXFx1MDAzZWNwdSAhPSB0YXNrX2NwdShwKSk7XFxuLVxcdFdBUk5fT05fT05DRSh0YXNrX2N1cnJlbnQocnEsIHApKTtcXG4tXFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZW5yX2NwdXNfYWxsb3dlZCBcXHUwMDNjPSAxKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVxcdTAwM2VjcHUgIT0gdGFza19jcHUocCkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19jdXJyZW50KHJxLCBwKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2Vucl9jcHVzX2FsbG93ZWQgXFx1MDAzYz0gMSk7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UoIXRhc2tfb25fcnFfcXVldWVkKHApKTtcXG4tXFx0V0FSTl9PTl9PTkNFKCFkbF90YXNrKHApKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfdGFzayhwKSk7XFxuIFxcbiBcXHRyZXR1cm4gcDtcXG4gfVxcbkBAIC0yOTQ0LDcgKzI5NDQsNyBAQCBzdGF0aWMgaW50IHB1c2hfZGxfdGFzayhzdHJ1Y3QgcnEgKnJxKVxcbiBcXHRpZiAoaXNfbWlncmF0aW9uX2Rpc2FibGVkKG5leHRfdGFzaykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKFdBUk5fT04obmV4dF90YXNrID09IHJxLVxcdTAwM2VjdXJyKSlcXG4rXFx0aWYgKFdBUk5fT05fREVGRVJSRUQobmV4dF90YXNrID09IHJxLVxcdTAwM2VjdXJyKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHQvKiBXZSBtaWdodCByZWxlYXNlIHJxIGxvY2sgKi9cXG5AQCAtMzA1MCw4ICszMDUwLDggQEAgc3RhdGljIHZvaWQgcHVsbF9kbF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChwIFxcdTAwMjZcXHUwMDI2IGRsX3RpbWVfYmVmb3JlKHAtXFx1MDAzZWRsLmRlYWRsaW5lLCBkbWluKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgZGxfdGFza19pc19lYXJsaWVzdF9kZWFkbGluZShwLCB0aGlzX3JxKSkge1xcbi1cXHRcXHRcXHRXQVJOX09OKHAgPT0gc3JjX3JxLVxcdTAwM2VjdXJyKTtcXG4tXFx0XFx0XFx0V0FSTl9PTighdGFza19vbl9ycV9xdWV1ZWQocCkpO1xcbitcXHRcXHRcXHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gc3JjX3JxLVxcdTAwM2VjdXJyKTtcXG4rXFx0XFx0XFx0V0FSTl9PTl9ERUZFUlJFRCghdGFza19vbl9ycV9xdWV1ZWQocCkpO1xcbiBcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogVGhlbiB3ZSBwdWxsIGlmZiBwIGhhcyBhY3R1YWxseSBhbiBlYXJsaWVyXFxuQEAgLTMxMDksNyArMzEwOSw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbiB7XFxuIFxcdHN0cnVjdCBycSAqcnE7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UoIWRsX3Rhc2socCkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWRsX3Rhc2socCkpO1xcbiBcXG4gXFx0cnEgPSB0YXNrX3JxKHApO1xcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0LmMgYi9rZXJuZWwvc2NoZWQvZXh0LmNcXG5pbmRleCA1ZDJkMTk0NzNhODJlOC4uNDdkM2E0YzE2NDU1YWMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC5jXFxuKysrIGIva2VybmVsL3NjaGVkL2V4dC5jXFxuQEAgLTUxMiwxMiArNTEyLDEyIEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAqIFNvIGlmIGtmX3Rhc2tzW10gaXMgc2V0LCBAcCdzIHNjaGVkdWxlci1wcm90ZWN0ZWQgZmllbGRzIGFyZSBzdGFibGUuXFxuICAqXFxuICAqIGtmX3Rhc2tzW10gY2FuIG5vdCBzdGFjaywgc28gdGFzay1iYXNlZCBTQ1ggb3BzIG11c3Qgbm90IG5lc3QuIFRoZVxcbi0gKiBXQVJOX09OX09OQ0UoKSBpbiBlYWNoIG1hY3JvIGNhdGNoZXMgYSByZS1lbnRyeSBvZiBhbnkgb2YgdGhlIHRocmVlIHZhcmlhbnRzXFxuLSAqIHdoaWxlIGEgcHJldmlvdXMgb25lIGlzIHN0aWxsIGluIHByb2dyZXNzLlxcbisgKiBXQVJOX09OX09OQ0VfREVGRVJSRUQoKSBpbiBlYWNoIG1hY3JvIGNhdGNoZXMgYSByZS1lbnRyeSBvZiBhbnkgb2YgdGhlIHRocmVlXFxuKyAqIHZhcmlhbnRzIHdoaWxlIGEgcHJldmlvdXMgb25lIGlzIHN0aWxsIGluIHByb2dyZXNzLlxcbiAgKi9cXG4gI2RlZmluZSBTQ1hfQ0FMTF9PUF9UQVNLKHNjaCwgb3AsIGxvY2tlZF9ycSwgdGFzaywgYXJncy4uLilcXHRcXHRcXHRcXFxcXFxuIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFdBUk5fT05fT05DRShjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0pO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXFx1MDAzZXNjeC5rZl90YXNrc1swXSk7XFx0XFx0XFx0XFxcXFxcbiBcXHRjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0U0NYX0NBTExfT1AoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2ssICMjYXJncyk7XFx0XFx0XFx0XFxcXFxcbiBcXHRjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0gPSBOVUxMO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNTI2LDcgKzUyNiw3IEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICNkZWZpbmUgU0NYX0NBTExfT1BfVEFTS19SRVQoc2NoLCBvcCwgbG9ja2VkX3JxLCB0YXNrLCBhcmdzLi4uKVxcdFxcdFxcdFxcXFxcXG4gKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdF9fdHlwZW9mX18oKHNjaCktXFx1MDAzZW9wcy5vcCh0YXNrLCAjI2FyZ3MpKSBfX3JldDtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFdBUk5fT05fT05DRShjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0pO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXFx1MDAzZXNjeC5rZl90YXNrc1swXSk7XFx0XFx0XFx0XFxcXFxcbiBcXHRjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0X19yZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2ssICMjYXJncyk7XFx0XFx0XFxcXFxcbiBcXHRjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0gPSBOVUxMO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNTM2LDcgKzUzNiw3IEBAIGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICNkZWZpbmUgU0NYX0NBTExfT1BfMlRBU0tTX1JFVChzY2gsIG9wLCBsb2NrZWRfcnEsIHRhc2swLCB0YXNrMSwgYXJncy4uLilcXHRcXFxcXFxuICh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRfX3R5cGVvZl9fKChzY2gpLVxcdTAwM2VvcHMub3AodGFzazAsIHRhc2sxLCAjI2FyZ3MpKSBfX3JldDtcXHRcXHRcXHRcXFxcXFxuLVxcdFdBUk5fT05fT05DRShjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0pO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXFx1MDAzZXNjeC5rZl90YXNrc1swXSk7XFx0XFx0XFx0XFxcXFxcbiBcXHRjdXJyZW50LVxcdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGN1cnJlbnQtXFx1MDAzZXNjeC5rZl90YXNrc1sxXSA9IHRhc2sxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0X19yZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2swLCB0YXNrMSwgIyNhcmdzKTtcXHRcXFxcXFxuQEAgLTY4Nyw3ICs2ODcsNyBAQCBzdGF0aWMgYm9vbCBubGRzcV9jdXJzb3JfbG9zdF90YXNrKHN0cnVjdCBzY3hfZHNxX2xpc3Rfbm9kZSAqY3Vyc29yLFxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdC8qIGlmIEBwIGhhcyBzdGF5ZWQgb24gQGRzcSwgaXRzIHJxIGNvdWxkbid0IGhhdmUgY2hhbmdlZCAqL1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKHJxICE9IHRhc2tfcnEocCkpKVxcbitcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxICE9IHRhc2tfcnEocCkpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdHJldHVybiBmYWxzZTtcXG5AQCAtMTI4Miw3ICsxMjgyLDcgQEAgc3RhdGljIHZvaWQgc2NoZWR1bGVfcmVlbnFfbG9jYWwoc3RydWN0IHJxICpycSwgdTY0IHJlZW5xX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBzY3hfc2NoZWQgKnJvb3QgPSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQoc2N4X3Jvb3QpO1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghcm9vdCkpXFxuK1xcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJvb3QpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRzY2hlZHVsZV9kc3FfcmVlbnEocm9vdCwgXFx1MDAyNnJxLVxcdTAwM2VzY3gubG9jYWxfZHNxLCByZWVucV9mbGFncywgcnEpO1xcbkBAIC0xMzc5LDcgKzEzNzksNyBAQCBzdGF0aWMgdm9pZCBkc3FfaW5jX25yKHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlblxcbiBcXHQgKi9cXG4gXFx0aWYgKGVucV9mbGFncyBcXHUwMDI2IFNDWF9FTlFfSU1NRUQpIHtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGRzcS1cXHUwMDNlaWQgIT0gU0NYX0RTUV9MT0NBTCkpIHtcXG4tXFx0XFx0XFx0V0FSTl9PTl9PTkNFKCEoZW5xX2ZsYWdzIFxcdTAwMjYgU0NYX0VOUV9HRFNRX0ZBTExCQUNLKSk7XFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKGVucV9mbGFncyBcXHUwMDI2IFNDWF9FTlFfR0RTUV9GQUxMQkFDSykpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFx0XFx0cC1cXHUwMDNlc2N4LmZsYWdzIHw9IFNDWF9UQVNLX0lNTUVEO1xcbkBAIC0xMzg4LDcgKzEzODgsNyBAQCBzdGF0aWMgdm9pZCBkc3FfaW5jX25yKHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlblxcbiBcXHRpZiAocC1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjYgU0NYX1RBU0tfSU1NRUQpIHtcXG4gXFx0XFx0c3RydWN0IHJxICpycSA9IGNvbnRhaW5lcl9vZihkc3EsIHN0cnVjdCBycSwgc2N4LmxvY2FsX2RzcSk7XFxuIFxcbi1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGRzcS1cXHUwMDNlaWQgIT0gU0NYX0RTUV9MT0NBTCkpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLVxcdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0XFx0cnEtXFx1MDAzZXNjeC5ucl9pbW1lZCsrO1xcbkBAIC0xNDEwLDggKzE0MTAsOCBAQCBzdGF0aWMgdm9pZCBkc3FfZGVjX25yKHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIFxcdGlmIChwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19JTU1FRCkge1xcbiBcXHRcXHRzdHJ1Y3QgcnEgKnJxID0gY29udGFpbmVyX29mKGRzcSwgc3RydWN0IHJxLCBzY3gubG9jYWxfZHNxKTtcXG4gXFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UoZHNxLVxcdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSB8fFxcbi1cXHRcXHQgICAgV0FSTl9PTl9PTkNFKHJxLVxcdTAwM2VzY3gubnJfaW1tZWQgXFx1MDAzYz0gMCkpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoZHNxLVxcdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSB8fFxcbitcXHRcXHQgICAgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVxcdTAwM2VzY3gubnJfaW1tZWQgXFx1MDAzYz0gMCkpXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdFxcdHJxLVxcdTAwM2VzY3gubnJfaW1tZWQtLTtcXG5AQCAtMTUyMSw5ICsxNTIxLDkgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hfZW5xdWV1ZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsXFxuIHtcXG4gXFx0Ym9vbCBpc19sb2NhbCA9IGRzcS1cXHUwMDNlaWQgPT0gU0NYX0RTUV9MT0NBTDtcXG4gXFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guZHNxIHx8ICFsaXN0X2VtcHR5KFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xcbi1cXHRXQVJOX09OX09OQ0UoKHAtXFx1MDAzZXNjeC5kc3FfZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19EU1FfT05fUFJJUSkgfHxcXG4tXFx0XFx0ICAgICAhUkJfRU1QVFlfTk9ERShcXHUwMDI2cC1cXHUwMDNlc2N4LmRzcV9wcmlxKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VzY3guZHNxIHx8ICFsaXN0X2VtcHR5KFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoKHAtXFx1MDAzZXNjeC5kc3FfZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19EU1FfT05fUFJJUSkgfHxcXG4rXFx0XFx0XFx0ICAgICAgIVJCX0VNUFRZX05PREUoXFx1MDAyNnAtXFx1MDAzZXNjeC5kc3FfcHJpcSkpO1xcbiBcXG4gXFx0aWYgKCFpc19sb2NhbCkge1xcbiBcXHRcXHRyYXdfc3Bpbl9sb2NrX25lc3RlZChcXHUwMDI2ZHNxLVxcdTAwM2Vsb2NrLFxcbkBAIC0xNjQ2LDcgKzE2NDYsNyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaF9lbnF1ZXVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSxcXG4gc3RhdGljIHZvaWQgdGFza191bmxpbmtfZnJvbV9kc3Eoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EpXFxuIHtcXG4tXFx0V0FSTl9PTl9PTkNFKGxpc3RfZW1wdHkoXFx1MDAyNnAtXFx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChsaXN0X2VtcHR5KFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xcbiBcXG4gXFx0aWYgKHAtXFx1MDAzZXNjeC5kc3FfZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19EU1FfT05fUFJJUSkge1xcbiBcXHRcXHRyYl9lcmFzZShcXHUwMDI2cC1cXHUwMDNlc2N4LmRzcV9wcmlxLCBcXHUwMDI2ZHNxLVxcdTAwM2VwcmlxKTtcXG5AQCAtMTcwOSw3ICsxNzA5LDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hfZGVxdWV1ZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIFxcdFxcdCAqIGhvbGRpbmdfY3B1IHdoaWNoIHRlbGxzIGRpc3BhdGNoX3RvX2xvY2FsX2RzcSgpIHRoYXQgaXQgbG9zdFxcbiBcXHRcXHQgKiB0aGUgcmFjZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2cC1cXHUwMDNlc2N4LmRzcV9saXN0Lm5vZGUpKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xcbiBcXHRcXHRwLVxcdTAwM2VzY3guaG9sZGluZ19jcHUgPSAtMTtcXG4gXFx0fVxcbiBcXHRwLVxcdTAwM2VzY3guZHNxID0gTlVMTDtcXG5AQCAtMTc4Nyw4ICsxNzg3LDggQEAgc3RhdGljIHZvaWQgbWFya19kaXJlY3RfZGlzcGF0Y2goc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guZGRzcF9kc3FfaWQgIT0gU0NYX0RTUV9JTlZBTElEKTtcXG4tXFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZXNjeC5kZHNwX2VucV9mbGFncyk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VzY3guZGRzcF9kc3FfaWQgIT0gU0NYX0RTUV9JTlZBTElEKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZXNjeC5kZHNwX2VucV9mbGFncyk7XFxuIFxcbiBcXHRwLVxcdTAwM2VzY3guZGRzcF9kc3FfaWQgPSBkc3FfaWQ7XFxuIFxcdHAtXFx1MDAzZXNjeC5kZHNwX2VucV9mbGFncyA9IGVucV9mbGFncztcXG5AQCAtMTg1NSw3ICsxODU1LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0X2Rpc3BhdGNoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZXNjeC5kc3EgfHwgIWxpc3RfZW1wdHkoXFx1MDAyNnAtXFx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VzY3guZHNxIHx8ICFsaXN0X2VtcHR5KFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xcbiBcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSxcXG4gXFx0XFx0XFx0ICAgICAgXFx1MDAyNnJxLVxcdTAwM2VzY3guZGRzcF9kZWZlcnJlZF9sb2NhbHMpO1xcbiBcXHRcXHRzY2hlZHVsZV9kZWZlcnJlZF9sb2NrZWQocnEpO1xcbkBAIC0xODg4LDcgKzE4ODgsNyBAQCBzdGF0aWMgdm9pZCBkb19lbnF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgZW5xX2ZsYWdzLFxcbiBcXHRzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcTtcXG4gXFx0dW5zaWduZWQgbG9uZyBxc2VxO1xcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKCEocC1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjYgU0NYX1RBU0tfUVVFVUVEKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKHAtXFx1MDAzZXNjeC5mbGFncyBcXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpO1xcbiBcXG4gXFx0LyogaW50ZXJuYWwgbW92ZW1lbnRzIC0gcnEgbWlncmF0aW9uIC8gUkVTVE9SRSAqL1xcbiBcXHRpZiAoc3RpY2t5X2NwdSA9PSBjcHVfb2YocnEpKVxcbkBAIC0xOTM4LDExICsxOTM4LDExIEBAIHN0YXRpYyB2b2lkIGRvX2VucXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlbnFfZmxhZ3MsXFxuIFxcdC8qIERTUSBieXBhc3MgZGlkbid0IHRyaWdnZXIsIGVucXVldWUgb24gdGhlIEJQRiBzY2hlZHVsZXIgKi9cXG4gXFx0cXNlcSA9IHJxLVxcdTAwM2VzY3gub3BzX3FzZXErKyBcXHUwMDNjXFx1MDAzYyBTQ1hfT1BTU19RU0VRX1NISUZUO1xcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnAtXFx1MDAzZXNjeC5vcHNfc3RhdGUpICE9IFNDWF9PUFNTX05PTkUpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2cC1cXHUwMDNlc2N4Lm9wc19zdGF0ZSkgIT0gU0NYX09QU1NfTk9ORSk7XFxuIFxcdGF0b21pY19sb25nX3NldChcXHUwMDI2cC1cXHUwMDNlc2N4Lm9wc19zdGF0ZSwgU0NYX09QU1NfUVVFVUVJTkcgfCBxc2VxKTtcXG4gXFxuIFxcdGRkc3BfdGFza3AgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNmRpcmVjdF9kaXNwYXRjaF90YXNrKTtcXG4tXFx0V0FSTl9PTl9PTkNFKCpkZHNwX3Rhc2twKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCpkZHNwX3Rhc2twKTtcXG4gXFx0KmRkc3BfdGFza3AgPSBwO1xcbiBcXG4gXFx0U0NYX0NBTExfT1BfVEFTSyhzY2gsIGVucXVldWUsIHJxLCBwLCBlbnFfZmxhZ3MpO1xcbkBAIC0yMDM5LDcgKzIwMzksNyBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlX3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNvcmVfZW5xX1xcbiBcXHRcXHRzdGlja3lfY3B1ID0gY3B1X29mKHJxKTtcXG4gXFxuIFxcdGlmIChwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19RVUVVRUQpIHtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCF0YXNrX3J1bm5hYmxlKHApKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCF0YXNrX3J1bm5hYmxlKHApKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuQEAgLTIxNTksNyArMjE1OSw3IEBAIHN0YXRpYyBib29sIGRlcXVldWVfdGFza19zY3goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY29yZV9kZXFfXFxuIFxcdFxcdGRlcV9mbGFncyB8PSBTQ1hfREVRX1NDSEVEX0NIQU5HRTtcXG4gXFxuIFxcdGlmICghKHAtXFx1MDAzZXNjeC5mbGFncyBcXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpIHtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKHRhc2tfcnVubmFibGUocCkpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19ydW5uYWJsZShwKSk7XFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbkBAIC0yMjU2LDcgKzIyNTYsNyBAQCBzdGF0aWMgdm9pZCBtb3ZlX2xvY2FsX3Rhc2tfdG9fbG9jYWxfZHNxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2c3JjX2RzcS1cXHUwMDNlbG9jayk7XFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQoZHN0X3JxKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guaG9sZGluZ19jcHUgXFx1MDAzZT0gMCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VzY3guaG9sZGluZ19jcHUgXFx1MDAzZT0gMCk7XFxuIFxcbiBcXHRpZiAoZW5xX2ZsYWdzIFxcdTAwMjYgKFNDWF9FTlFfSEVBRCB8IFNDWF9FTlFfUFJFRU1QVCkpXFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZwLVxcdTAwM2VzY3guZHNxX2xpc3Qubm9kZSwgXFx1MDAyNmRzdF9kc3EtXFx1MDAzZWxpc3QpO1xcbkBAIC0yMjk5LDggKzIyOTksOCBAQCBzdGF0aWMgdm9pZCBtb3ZlX3JlbW90ZV90YXNrX3RvX2xvY2FsX2RzcShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlbnFfZmxhZ3MsXFxuIFxcdCAqIHRydW5jYXRlIHRoZSB1cHBlciAzMiBiaXQuIEFzIHdlIG93biBAcnEsIHdlIGNhbiBwYXNzIHRoZW0gdGhyb3VnaFxcbiBcXHQgKiBAcnEtXFx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MgaW5zdGVhZC5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRSghY3B1bWFza190ZXN0X2NwdShjcHVfb2YoZHN0X3JxKSwgcC1cXHUwMDNlY3B1c19wdHIpKTtcXG4tXFx0V0FSTl9PTl9PTkNFKGRzdF9ycS1cXHUwMDNlc2N4LmV4dHJhX2VucV9mbGFncyk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghY3B1bWFza190ZXN0X2NwdShjcHVfb2YoZHN0X3JxKSwgcC1cXHUwMDNlY3B1c19wdHIpKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRzdF9ycS1cXHUwMDNlc2N4LmV4dHJhX2VucV9mbGFncyk7XFxuIFxcdGRzdF9ycS1cXHUwMDNlc2N4LmV4dHJhX2VucV9mbGFncyA9IGVucV9mbGFncztcXG4gXFx0YWN0aXZhdGVfdGFzayhkc3RfcnEsIHAsIDApO1xcbiBcXHRkc3RfcnEtXFx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MgPSAwO1xcbkBAIC0yMzMxLDcgKzIzMzEsNyBAQCBzdGF0aWMgYm9vbCB0YXNrX2Nhbl9ydW5fb25fcmVtb3RlX3JxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcXG4ge1xcbiBcXHRzMzIgY3B1ID0gY3B1X29mKHJxKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRSh0YXNrX2NwdShwKSA9PSBjcHUpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19jcHUocCkgPT0gY3B1KTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIEBwIGhhcyBtaWdyYXRpb24gZGlzYWJsZWQsIEBwLVxcdTAwM2VjcHVzX3B0ciBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gb25seVxcbkBAIC0yNDExLDcgKzI0MTEsNyBAQCBzdGF0aWMgYm9vbCB1bmxpbmtfZHNxX2FuZF9sb2NrX3NyY19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZkc3EtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZXNjeC5ob2xkaW5nX2NwdSBcXHUwMDNlPSAwKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZXNjeC5ob2xkaW5nX2NwdSBcXHUwMDNlPSAwKTtcXG4gXFx0dGFza191bmxpbmtfZnJvbV9kc3EocCwgZHNxKTtcXG4gXFx0cC1cXHUwMDNlc2N4LmhvbGRpbmdfY3B1ID0gY3B1O1xcbiBcXG5AQCAtMjQyMCw3ICsyNDIwLDcgQEAgc3RhdGljIGJvb2wgdW5saW5rX2RzcV9hbmRfbG9ja19zcmNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbiBcXG4gXFx0LyogdGFza19ycSBjb3VsZG4ndCBoYXZlIGNoYW5nZWQgaWYgd2UncmUgc3RpbGwgdGhlIGhvbGRpbmcgY3B1ICovXFxuIFxcdHJldHVybiBsaWtlbHkocC1cXHUwMDNlc2N4LmhvbGRpbmdfY3B1ID09IGNwdSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0IVdBUk5fT05fT05DRShzcmNfcnEgIT0gdGFza19ycShwKSk7XFxuK1xcdFxcdCFXQVJOX09OX09OQ0VfREVGRVJSRUQoc3JjX3JxICE9IHRhc2tfcnEocCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBjb25zdW1lX3JlbW90ZV90YXNrKHN0cnVjdCBycSAqdGhpc19ycSxcXG5AQCAtMjYzMCw3ICsyNjMwLDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hfdG9fbG9jYWxfZHNxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSxcXG4gXFxuIFxcdC8qIHRhc2tfcnEgY291bGRuJ3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJ3JlIHN0aWxsIHRoZSBob2xkaW5nIGNwdSAqL1xcbiBcXHRpZiAobGlrZWx5KHAtXFx1MDAzZXNjeC5ob2xkaW5nX2NwdSA9PSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIVdBUk5fT05fT05DRShzcmNfcnEgIT0gdGFza19ycShwKSkpIHtcXG4rXFx0ICAgICFXQVJOX09OX09OQ0VfREVGRVJSRUQoc3JjX3JxICE9IHRhc2tfcnEocCkpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIEBwIGlzIHN0YXlpbmcgb24gdGhlIHNhbWUgcnEsIHRoZXJlJ3Mgbm8gbmVlZCB0byBnb1xcbiBcXHRcXHQgKiB0aHJvdWdoIHRoZSBmdWxsIGRlYWN0aXZhdGUvYWN0aXZhdGUgY3ljbGUuIE9wdGltaXplIGJ5XFxuQEAgLTMwOTksNyArMzA5OSw3IEBAIHN0YXRpYyB2b2lkIHB1dF9wcmV2X3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4gXFx0XFx0ICogd2hpY2ggc2hvdWxkIHRyaWdnZXIgYW4gZXhwbGljaXQgZm9sbG93LXVwIHNjaGVkdWxpbmcgZXZlbnQuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAobmV4dCBcXHUwMDI2XFx1MDAyNiBzY2hlZF9jbGFzc19hYm92ZShcXHUwMDI2ZXh0X3NjaGVkX2NsYXNzLCBuZXh0LVxcdTAwM2VzY2hlZF9jbGFzcykpIHtcXG4tXFx0XFx0XFx0V0FSTl9PTl9PTkNFKCEoc2NoLVxcdTAwM2VvcHMuZmxhZ3MgXFx1MDAyNiBTQ1hfT1BTX0VOUV9MQVNUKSk7XFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKHNjaC1cXHUwMDNlb3BzLmZsYWdzIFxcdTAwMjYgU0NYX09QU19FTlFfTEFTVCkpO1xcbiBcXHRcXHRcXHRkb19lbnF1ZXVlX3Rhc2socnEsIHAsIFNDWF9FTlFfTEFTVCwgLTEpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRkb19lbnF1ZXVlX3Rhc2socnEsIHAsIDAsIC0xKTtcXG5AQCAtMzIwMSw3ICszMjAxLDcgQEAgZG9fcGlja190YXNrX3NjeChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmLCBib29sIGZvcmNlX3NjeClcXG4gXFx0a2VlcF9wcmV2ID0gcnEtXFx1MDAzZXNjeC5mbGFncyBcXHUwMDI2IFNDWF9SUV9CQUxfS0VFUDtcXG4gXFx0aWYgKHVubGlrZWx5KGtlZXBfcHJldiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIHByZXYtXFx1MDAzZXNjaGVkX2NsYXNzICE9IFxcdTAwMjZleHRfc2NoZWRfY2xhc3MpKSB7XFxuLVxcdFxcdFdBUk5fT05fT05DRShzY3hfZW5hYmxlX3N0YXRlKCkgPT0gU0NYX0VOQUJMRUQpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2N4X2VuYWJsZV9zdGF0ZSgpID09IFNDWF9FTkFCTEVEKTtcXG4gXFx0XFx0a2VlcF9wcmV2ID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuQEAgLTMzMzIsNyArMzMzMiw3IEBAIHN0YXRpYyBpbnQgc2VsZWN0X3Rhc2tfcnFfc2N4KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHByZXZfY3B1LCBpbnQgd2FrZV9mbGFnXFxuIFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqKmRkc3BfdGFza3A7XFxuIFxcbiBcXHRcXHRkZHNwX3Rhc2twID0gdGhpc19jcHVfcHRyKFxcdTAwMjZkaXJlY3RfZGlzcGF0Y2hfdGFzayk7XFxuLVxcdFxcdFdBUk5fT05fT05DRSgqZGRzcF90YXNrcCk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgqZGRzcF90YXNrcCk7XFxuIFxcdFxcdCpkZHNwX3Rhc2twID0gcDtcXG4gXFxuIFxcdFxcdHRoaXNfcnEoKS1cXHUwMDNlc2N4LmluX3NlbGVjdF9jcHUgPSB0cnVlO1xcbkBAIC0zNjIwLDcgKzM2MjAsNyBAQCBzdGF0aWMgdm9pZCBfX3NjeF9lbmFibGVfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4gXFx0ICogdHJhbnNpdGlvbnMgYXJlIGNvbnNpc3RlbnQsIHRoZSBmbGFnIHNob3VsZCBhbHdheXMgYmUgY2xlYXJcXG4gXFx0ICogaGVyZS5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19JTl9DVVNUT0RZKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZXNjeC5mbGFncyBcXHUwMDI2IFNDWF9UQVNLX0lOX0NVU1RPRFkpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogU2V0IHRoZSB3ZWlnaHQgYmVmb3JlIGNhbGxpbmcgb3BzLmVuYWJsZSgpIHNvIHRoYXQgdGhlIHNjaGVkdWxlclxcbkBAIC0zNjUxLDcgKzM2NTEsNyBAQCBzdGF0aWMgdm9pZCBzY3hfZGlzYWJsZV90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiBcXHRzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xcbi1cXHRXQVJOX09OX09OQ0Uoc2N4X2dldF90YXNrX3N0YXRlKHApICE9IFNDWF9UQVNLX0VOQUJMRUQpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2N4X2dldF90YXNrX3N0YXRlKHApICE9IFNDWF9UQVNLX0VOQUJMRUQpO1xcbiBcXG4gXFx0Y2xlYXJfZGlyZWN0X2Rpc3BhdGNoKHApO1xcbiBcXG5AQCAtMzY2NCw3ICszNjY0LDcgQEAgc3RhdGljIHZvaWQgc2N4X2Rpc2FibGVfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4gXFx0ICogdHJhbnNpdGlvbnMgYXJlIGNvbnNpc3RlbnQsIHRoZSBmbGFnIHNob3VsZCBhbHdheXMgYmUgY2xlYXJcXG4gXFx0ICogaGVyZS5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19JTl9DVVNUT0RZKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZXNjeC5mbGFncyBcXHUwMDI2IFNDWF9UQVNLX0lOX0NVU1RPRFkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX3NjeF9kaXNhYmxlX2FuZF9leGl0X3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxcbkBAIC0zNjg5LDcgKzM2ODksNyBAQCBzdGF0aWMgdm9pZCBfX3NjeF9kaXNhYmxlX2FuZF9leGl0X3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxcbiBcXHRcXHRzY3hfZGlzYWJsZV90YXNrKHNjaCwgcCk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRXQVJOX09OX09OQ0UodHJ1ZSk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh0cnVlKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbkBAIC0zNzI2LDcgKzM3MjYsNyBAQCBzdGF0aWMgdm9pZCBzY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcXG4gXFx0ICogcGF0aCwgc28gaXQncyBhbHdheXMgY2xlYXIgd2hlbiBAcCBhcnJpdmVzIGhlcmUgaW4gJVNDWF9UQVNLX05PTkUuXFxuIFxcdCAqL1xcbiBcXHRpZiAocC1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjYgU0NYX1RBU0tfU1VCX0lOSVQpIHtcXG4tXFx0XFx0aWYgKCFXQVJOX09OX09OQ0UoIXNjeF9lbmFibGluZ19zdWJfc2NoZWQpKVxcbitcXHRcXHRpZiAoIVdBUk5fT05fT05DRV9ERUZFUlJFRCghc2N4X2VuYWJsaW5nX3N1Yl9zY2hlZCkpXFxuIFxcdFxcdFxcdHNjeF9zdWJfaW5pdF9jYW5jZWxfdGFzayhzY3hfZW5hYmxpbmdfc3ViX3NjaGVkLCBwKTtcXG4gXFx0XFx0cC1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjY9IH5TQ1hfVEFTS19TVUJfSU5JVDtcXG4gXFx0fVxcbkBAIC0zODE4LDcgKzM4MTgsNyBAQCB2b2lkIHNjeF9jYW5jZWxfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIFxcdFxcdHN0cnVjdCBycV9mbGFncyByZjtcXG4gXFxuIFxcdFxcdHJxID0gdGFza19ycV9sb2NrKHAsIFxcdTAwMjZyZik7XFxuLVxcdFxcdFdBUk5fT05fT05DRShzY3hfZ2V0X3Rhc2tfc3RhdGUocCkgXFx1MDAzZT0gU0NYX1RBU0tfUkVBRFkpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2N4X2dldF90YXNrX3N0YXRlKHApIFxcdTAwM2U9IFNDWF9UQVNLX1JFQURZKTtcXG4gXFx0XFx0c2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzY3hfdGFza19zY2hlZChwKSwgcCk7XFxuIFxcdFxcdHRhc2tfcnFfdW5sb2NrKHJxLCBwLCBcXHUwMDI2cmYpO1xcbiBcXHR9XFxuQEAgLTM5ODYsNyArMzk4Niw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZGRzcF9kZWZlcnJlZF9sb2NhbHMoc3RydWN0IHJxICpycSlcXG4gXFx0XFx0Y2xlYXJfZGlyZWN0X2Rpc3BhdGNoKHApO1xcbiBcXG4gXFx0XFx0ZHNxID0gZmluZF9kc3FfZm9yX2Rpc3BhdGNoKHNjaCwgcnEsIGRzcV9pZCwgdGFza19jcHUocCkpO1xcbi1cXHRcXHRpZiAoIVdBUk5fT05fT05DRShkc3EtXFx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKVxcbitcXHRcXHRpZiAoIVdBUk5fT05fT05DRV9ERUZFUlJFRChkc3EtXFx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKVxcbiBcXHRcXHRcXHRkaXNwYXRjaF90b19sb2NhbF9kc3Eoc2NoLCBycSwgZHNxLCBwLCBlbnFfZmxhZ3MpO1xcbiBcXHR9XFxuIH1cXG5AQCAtNDA0MSw3ICs0MDQxLDcgQEAgc3RhdGljIHUzMiByZWVucV9sb2NhbChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsIHU2NCByZWVucV9mbGFncylcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRShyZWVucV9mbGFncyBcXHUwMDI2IF9fU0NYX1JFRU5RX1RTUl9NQVNLKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChyZWVucV9mbGFncyBcXHUwMDI2IF9fU0NYX1JFRU5RX1RTUl9NQVNLKSlcXG4gXFx0XFx0cmVlbnFfZmxhZ3MgXFx1MDAyNj0gfl9fU0NYX1JFRU5RX1RTUl9NQVNLO1xcbiBcXHRpZiAocnFfaXNfb3BlbihycSwgMCkpXFxuIFxcdFxcdHJlZW5xX2ZsYWdzIHw9IFNDWF9SRUVOUV9UU1JfUlFfT1BFTjtcXG5AQCAtNDA3OCw3ICs0MDc4LDcgQEAgc3RhdGljIHUzMiByZWVucV9sb2NhbChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsIHU2NCByZWVucV9mbGFncylcXG4gXFxuIFxcdFxcdGRpc3BhdGNoX2RlcXVldWUocnEsIHApO1xcbiBcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSykpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjYgU0NYX1RBU0tfUkVFTlFfUkVBU09OX01BU0spKVxcbiBcXHRcXHRcXHRwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNj0gflNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLO1xcbiBcXHRcXHRwLVxcdTAwM2VzY3guZmxhZ3MgfD0gcmVhc29uO1xcbiBcXG5AQCAtNDE5OSw3ICs0MTk5LDcgQEAgc3RhdGljIHZvaWQgcmVlbnFfdXNlcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSwgdTY0IHJlZW5xX2ZsYWdcXG4gXFx0XFx0ZGlzcGF0Y2hfZGVxdWV1ZV9sb2NrZWQocCwgZHNxKTtcXG4gXFx0XFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZkc3EtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSykpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjYgU0NYX1RBU0tfUkVFTlFfUkVBU09OX01BU0spKVxcbiBcXHRcXHRcXHRwLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNj0gflNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLO1xcbiBcXHRcXHRwLVxcdTAwM2VzY3guZmxhZ3MgfD0gcmVhc29uO1xcbiBcXG5AQCAtNDM2MCw3ICs0MzYwLDcgQEAgaW50IHNjeF9jZ3JvdXBfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuIFxcdFxcdHN0cnVjdCBjZ3JvdXAgKmZyb20gPSB0Z19jZ3JwKHRhc2tfZ3JvdXAocCkpO1xcbiBcXHRcXHRzdHJ1Y3QgY2dyb3VwICp0byA9IHRnX2NncnAoY3NzX3RnKGNzcykpO1xcbiBcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZXNjeC5jZ3JwX21vdmluZ19mcm9tKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZXNjeC5jZ3JwX21vdmluZ19mcm9tKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIHNjaGVkX21vdmVfdGFzaygpIG9taXRzIGlkZW50aXR5IG1pZ3JhdGlvbnMuIExldCdzIG1hdGNoIHRoZVxcbkBAIC00NjE3LDcgKzQ2MTcsNyBAQCBzdGF0aWMgdm9pZCBleGl0X2RzcShzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSlcXG4gXFx0XFx0ICogVGhlcmUgbXVzdCBoYXZlIGJlZW4gYSBSQ1UgZ3JhY2UgcGVyaW9kIHNpbmNlIHRoZSBsYXN0XFxuIFxcdFxcdCAqIGluc2VydGlvbiBhbmQgQGRzcSBzaG91bGQgYmUgb2ZmIHRoZSBkZWZlcnJlZCBsaXN0IGJ5IG5vdy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNmRydS1cXHUwMDNlbm9kZSkpKSB7XFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXFx1MDAyNmRydS1cXHUwMDNlbm9kZSkpKSB7XFxuIFxcdFxcdFxcdGd1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlKShcXHUwMDI2cnEtXFx1MDAzZXNjeC5kZWZlcnJlZF9yZWVucV9sb2NrKTtcXG4gXFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2ZHJ1LVxcdTAwM2Vub2RlKTtcXG4gXFx0XFx0fVxcbkBAIC00NzQ1LDcgKzQ3NDUsNyBAQCBzdGF0aWMgaW50IHNjeF9jZ3JvdXBfaW5pdChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXFxuIFxcdFxcdHRnLVxcdTAwM2VzY3guZmxhZ3MgfD0gU0NYX1RHX0lOSVRFRDtcXG4gXFx0fVxcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKHNjeF9jZ3JvdXBfZW5hYmxlZCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChzY3hfY2dyb3VwX2VuYWJsZWQpO1xcbiBcXHRzY3hfY2dyb3VwX2VuYWJsZWQgPSB0cnVlO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQ4NDgsNyArNDg0OCw3IEBAIHN0YXRpYyB2b2lkIHNjeF9zY2hlZF9mcmVlX3JjdV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0XFx0ICogcGVyaW9kLiBBcyB0aGF0IGJsb2NrcyBuZXcgZGVmZXJyYWxzLCBhbGxcXG4gXFx0XFx0ICogZGVmZXJyZWRfcmVlbnFfbG9jYWxfbm9kZSdzIG11c3QgYmUgb2ZmLWxpc3QgYnkgbm93LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZwY3B1LVxcdTAwM2VkZWZlcnJlZF9yZWVucV9sb2NhbC5ub2RlKSk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcXHUwMDI2cGNwdS1cXHUwMDNlZGVmZXJyZWRfcmVlbnFfbG9jYWwubm9kZSkpO1xcbiBcXG4gXFx0XFx0ZXhpdF9kc3EoYnlwYXNzX2RzcShzY2gsIGNwdSkpO1xcbiBcXHR9XFxuQEAgLTUzMjQsNyArNTMyNCw3IEBAIHN0YXRpYyBib29sIGluY19ieXBhc3NfZGVwdGgoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbiB7XFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnNjeF9ieXBhc3NfbG9jayk7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0Uoc2NoLVxcdTAwM2VieXBhc3NfZGVwdGggXFx1MDAzYyAwKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjaC1cXHUwMDNlYnlwYXNzX2RlcHRoIFxcdTAwM2MgMCk7XFxuIFxcdFdSSVRFX09OQ0Uoc2NoLVxcdTAwM2VieXBhc3NfZGVwdGgsIHNjaC1cXHUwMDNlYnlwYXNzX2RlcHRoICsgMSk7XFxuIFxcdGlmIChzY2gtXFx1MDAzZWJ5cGFzc19kZXB0aCAhPSAxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTUzMzksNyArNTMzOSw3IEBAIHN0YXRpYyBib29sIGRlY19ieXBhc3NfZGVwdGgoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbiB7XFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnNjeF9ieXBhc3NfbG9jayk7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0Uoc2NoLVxcdTAwM2VieXBhc3NfZGVwdGggXFx1MDAzYyAxKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjaC1cXHUwMDNlYnlwYXNzX2RlcHRoIFxcdTAwM2MgMSk7XFxuIFxcdFdSSVRFX09OQ0Uoc2NoLVxcdTAwM2VieXBhc3NfZGVwdGgsIHNjaC1cXHUwMDNlYnlwYXNzX2RlcHRoIC0gMSk7XFxuIFxcdGlmIChzY2gtXFx1MDAzZWJ5cGFzc19kZXB0aCAhPSAwKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTUzNjAsNyArNTM2MCw3IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9ieXBhc3NfZHNwKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4gXFx0ICogQHNjaC1cXHUwMDNlYnlwYXNzX2RlcHRoIHRyYW5zaXRpb25pbmcgZnJvbSAwIHRvIDEgdHJpZ2dlcnMgZW5hYmxpbmcuXFxuIFxcdCAqIFNob3VsZG4ndCBzdGFnZ2VyLlxcbiBcXHQgKi9cXG4tXFx0aWYgKFdBUk5fT05fT05DRSh0ZXN0X2FuZF9zZXRfYml0KDAsIFxcdTAwMjZzY2gtXFx1MDAzZWJ5cGFzc19kc3BfY2xhaW0pKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCh0ZXN0X2FuZF9zZXRfYml0KDAsIFxcdTAwMjZzY2gtXFx1MDAzZWJ5cGFzc19kc3BfY2xhaW0pKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0LypcXG5AQCAtNTM4MCwxMSArNTM4MCwxMSBAQCBzdGF0aWMgdm9pZCBlbmFibGVfYnlwYXNzX2RzcChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXFxuIFxcdCAqIEJ1bXAgZW5hYmxlIGRlcHRoIG9uIGJvdGggQHNjaCBhbmQgYnlwYXNzIGRpc3BhdGNoIGhvc3QuXFxuIFxcdCAqL1xcbiBcXHRyZXQgPSBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2c2NoLVxcdTAwM2VieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7XFxuLVxcdFdBUk5fT05fT05DRShyZXQgXFx1MDAzYz0gMCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQgXFx1MDAzYz0gMCk7XFxuIFxcbiBcXHRpZiAoaG9zdCAhPSBzY2gpIHtcXG4gXFx0XFx0cmV0ID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmhvc3QtXFx1MDAzZWJ5cGFzc19kc3BfZW5hYmxlX2RlcHRoKTtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKHJldCBcXHUwMDNjPSAwKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJldCBcXHUwMDNjPSAwKTtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5AQCAtNTQwNSwxMSArNTQwNSwxMSBAQCBzdGF0aWMgdm9pZCBkaXNhYmxlX2J5cGFzc19kc3Aoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRyZXQgPSBhdG9taWNfZGVjX3JldHVybihcXHUwMDI2c2NoLVxcdTAwM2VieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7XFxuLVxcdFdBUk5fT05fT05DRShyZXQgXFx1MDAzYyAwKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJldCBcXHUwMDNjIDApO1xcbiBcXG4gXFx0aWYgKHNjeF9wYXJlbnQoc2NoKSkge1xcbiBcXHRcXHRyZXQgPSBhdG9taWNfZGVjX3JldHVybihcXHUwMDI2c2N4X3BhcmVudChzY2gpLVxcdTAwM2VieXBhc3NfZHNwX2VuYWJsZV9kZXB0aCk7XFxuLVxcdFxcdFdBUk5fT05fT05DRShyZXQgXFx1MDAzYyAwKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJldCBcXHUwMDNjIDApO1xcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jXFxuaW5kZXggM2ViZWMxODZmOTgyMzYuLjEyMTNlNzc2NjVmZTkzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9mYWlyLmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvZmFpci5jXFxuQEAgLTQwNCw3ICs0MDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWxfbGVhZl9jZnNfcnEoc3RydWN0IGNmc19ycSAqY2ZzX3JxKVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9saXN0X2xlYWZfY2ZzX3JxKHN0cnVjdCBycSAqcnEpXFxuIHtcXG4tXFx0V0FSTl9PTl9PTkNFKHJxLVxcdTAwM2V0bXBfYWxvbmVfYnJhbmNoICE9IFxcdTAwMjZycS1cXHUwMDNlbGVhZl9jZnNfcnFfbGlzdCk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycS1cXHUwMDNldG1wX2Fsb25lX2JyYW5jaCAhPSBcXHUwMDI2cnEtXFx1MDAzZWxlYWZfY2ZzX3JxX2xpc3QpO1xcbiB9XFxuIFxcbiAvKiBJdGVyYXRlIHRocm91Z2ggYWxsIGxlYWYgY2ZzX3JxJ3Mgb24gYSBydW5xdWV1ZSAqL1xcbkBAIC02ODksNyArNjg5LDcgQEAgX19zdW1fd192cnVudGltZV9hZGQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcXG4gXFx0czY0IHdfdnJ1bnRpbWUsIGtleSA9IGVudGl0eV9rZXkoY2ZzX3JxLCBzZSk7XFxuIFxcbiBcXHR3X3ZydW50aW1lID0ga2V5ICogd2VpZ2h0O1xcbi1cXHRXQVJOX09OX09OQ0UoKHdfdnJ1bnRpbWUgXFx1MDAzZVxcdTAwM2UgNjMpICE9ICh3X3ZydW50aW1lIFxcdTAwM2VcXHUwMDNlIDYyKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgod192cnVudGltZSBcXHUwMDNlXFx1MDAzZSA2MykgIT0gKHdfdnJ1bnRpbWUgXFx1MDAzZVxcdTAwM2UgNjIpKTtcXG4gXFxuIFxcdGNmc19ycS1cXHUwMDNlc3VtX3dfdnJ1bnRpbWUgKz0gd192cnVudGltZTtcXG4gXFx0Y2ZzX3JxLVxcdTAwM2VzdW1fd2VpZ2h0ICs9IHdlaWdodDtcXG5AQCAtODYxLDcgKzg2MSw3IEBAIGJvb2wgdXBkYXRlX2VudGl0eV9sYWcoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcXG4gXFx0dTY0IGF2cnVudGltZSA9IGF2Z192cnVudGltZShjZnNfcnEpO1xcbiBcXHRzNjQgdmxhZyA9IGVudGl0eV9sYWcoY2ZzX3JxLCBzZSwgYXZydW50aW1lKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRSghc2UtXFx1MDAzZW9uX3JxKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzZS1cXHUwMDNlb25fcnEpO1xcbiBcXG4gXFx0aWYgKHNlLVxcdTAwM2VzY2hlZF9kZWxheWVkKSB7XFxuIFxcdFxcdC8qIHByZXZpb3VzIHZsYWcgXFx1MDAzYyAwIG90aGVyd2lzZSBzZSB3b3VsZCBub3QgYmUgZGVsYXllZCAqL1xcbkBAIC0xMTUzLDcgKzExNTMsNyBAQCBzdGF0aWMgc3RydWN0IHNjaGVkX2VudGl0eSAqcGlja19lZXZkZihzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIGJvb2wgcHJvdGVjdClcXG4gXFx0aWYgKHNjaGVkX2ZlYXQoUElDS19CVUREWSkgXFx1MDAyNlxcdTAwMjYgcHJvdGVjdCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgY2ZzX3JxLVxcdTAwM2VuZXh0IFxcdTAwMjZcXHUwMDI2IGVudGl0eV9lbGlnaWJsZShjZnNfcnEsIGNmc19ycS1cXHUwMDNlbmV4dCkpIHtcXG4gXFx0XFx0LyogLVxcdTAwM2VuZXh0IHdpbGwgbmV2ZXIgYmUgZGVsYXllZCAqL1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVxcdTAwM2VuZXh0LVxcdTAwM2VzY2hlZF9kZWxheWVkKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cXHUwMDNlbmV4dC1cXHUwMDNlc2NoZWRfZGVsYXllZCk7XFxuIFxcdFxcdHJldHVybiBjZnNfcnEtXFx1MDAzZW5leHQ7XFxuIFxcdH1cXG4gXFxuQEAgLTQzMDIsOSArNDMwMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2FkX2F2Z19pc19kZWNheWVkKHN0cnVjdCBzY2hlZF9hdmcgKnNhKVxcbiBcXHQgKiBNYWtlIHN1cmUgdGhhdCByb3VuZGluZyBhbmQvb3IgcHJvcGFnYXRpb24gb2YgUEVMVCB2YWx1ZXMgbmV2ZXJcXG4gXFx0ICogYnJlYWsgdGhpcy5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRShzYS1cXHUwMDNlbG9hZF9hdmcgfHxcXG4tXFx0XFx0ICAgICAgc2EtXFx1MDAzZXV0aWxfYXZnIHx8XFxuLVxcdFxcdCAgICAgIHNhLVxcdTAwM2VydW5uYWJsZV9hdmcpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2EtXFx1MDAzZWxvYWRfYXZnIHx8XFxuK1xcdFxcdFxcdCAgICAgIHNhLVxcdTAwM2V1dGlsX2F2ZyB8fFxcbitcXHRcXHRcXHQgICAgICBzYS1cXHUwMDNlcnVubmFibGVfYXZnKTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuQEAgLTU0NjAsNyArNTQ2MCw3IEBAIHBsYWNlX2VudGl0eShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCBpbnQgZmxhZ3MpXFxuIFxcbiBcXHRcXHR3ZWlnaHQgPSBhdmdfdnJ1bnRpbWVfd2VpZ2h0KGNmc19ycSwgc2UtXFx1MDAzZWxvYWQud2VpZ2h0KTtcXG4gXFx0XFx0bGFnICo9IGxvYWQgKyB3ZWlnaHQ7XFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWxvYWQpKVxcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsb2FkKSlcXG4gXFx0XFx0XFx0bG9hZCA9IDE7XFxuIFxcdFxcdGxhZyA9IGRpdjY0X2xvbmcobGFnLCBsb2FkKTtcXG4gXFxuQEAgLTU2NTMsNyArNTY1Myw3IEBAIGRlcXVldWVfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBmbGFncylcXG4gXFx0Y2xlYXJfYnVkZGllcyhjZnNfcnEsIHNlKTtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IERFUVVFVUVfREVMQVlFRCkge1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoIXNlLVxcdTAwM2VzY2hlZF9kZWxheWVkKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzZS1cXHUwMDNlc2NoZWRfZGVsYXllZCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGJvb2wgZGVsYXkgPSBzbGVlcDtcXG4gXFx0XFx0LypcXG5AQCAtNTY2Myw3ICs1NjYzLDcgQEAgZGVxdWV1ZV9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiAoREVRVUVVRV9TUEVDSUFMIHwgREVRVUVVRV9USFJPVFRMRSkpXFxuIFxcdFxcdFxcdGRlbGF5ID0gZmFsc2U7XFxuIFxcbi1cXHRcXHRXQVJOX09OX09OQ0UoZGVsYXkgXFx1MDAyNlxcdTAwMjYgc2UtXFx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGVsYXkgXFx1MDAyNlxcdTAwMjYgc2UtXFx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xcbiBcXG4gXFx0XFx0aWYgKHNjaGVkX2ZlYXQoREVMQVlfREVRVUVVRSkgXFx1MDAyNlxcdTAwMjYgZGVsYXkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFlbnRpdHlfZWxpZ2libGUoY2ZzX3JxLCBzZSkpIHtcXG5AQCAtNTc0Nyw3ICs1NzQ3LDcgQEAgc2V0X25leHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGJvb2wgZmlyc3QpXFxuIFxcdH1cXG4gXFxuIFxcdHVwZGF0ZV9zdGF0c19jdXJyX3N0YXJ0KGNmc19ycSwgc2UpO1xcbi1cXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVxcdTAwM2VjdXJyKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cXHUwMDNlY3Vycik7XFxuIFxcdGNmc19ycS1cXHUwMDNlY3VyciA9IHNlO1xcbiBcXG4gXFx0LypcXG5AQCAtNTgxNCw3ICs1ODE0LDcgQEAgc3RhdGljIHZvaWQgcHV0X3ByZXZfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqcHJldilcXG4gXFx0XFx0LyogaW4gIW9uX3JxIGNhc2UsIHVwZGF0ZSBvY2N1cnJlZCBhdCBkZXF1ZXVlICovXFxuIFxcdFxcdHVwZGF0ZV9sb2FkX2F2ZyhjZnNfcnEsIHByZXYsIDApO1xcbiBcXHR9XFxuLVxcdFdBUk5fT05fT05DRShjZnNfcnEtXFx1MDAzZWN1cnIgIT0gcHJldik7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjZnNfcnEtXFx1MDAzZWN1cnIgIT0gcHJldik7XFxuIFxcdGNmc19ycS1cXHUwMDNlY3VyciA9IE5VTEw7XFxuIH1cXG4gXFxuQEAgLTYwMTUsNyArNjAxNSw3IEBAIHN0YXRpYyB2b2lkIHRocm90dGxlX2Nmc19ycV93b3JrKHN0cnVjdCBjYWxsYmFja19oZWFkICp3b3JrKVxcbiBcXHRzdHJ1Y3QgY2ZzX3JxICpjZnNfcnE7XFxuIFxcdHN0cnVjdCBycSAqcnE7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UocCAhPSBjdXJyZW50KTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAgIT0gY3VycmVudCk7XFxuIFxcdHAtXFx1MDAzZXNjaGVkX3Rocm90dGxlX3dvcmsubmV4dCA9IFxcdTAwMjZwLVxcdTAwM2VzY2hlZF90aHJvdHRsZV93b3JrO1xcbiBcXG4gXFx0LypcXG5AQCAtNjA0MSw3ICs2MDQxLDcgQEAgc3RhdGljIHZvaWQgdGhyb3R0bGVfY2ZzX3JxX3dvcmsoc3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmspXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0cnEgPSBzY29wZS5ycTtcXG4gXFx0XFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKHAtXFx1MDAzZXRocm90dGxlZCB8fCAhbGlzdF9lbXB0eShcXHUwMDI2cC1cXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cXHUwMDNldGhyb3R0bGVkIHx8ICFsaXN0X2VtcHR5KFxcdTAwMjZwLVxcdTAwM2V0aHJvdHRsZV9ub2RlKSk7XFxuIFxcdFxcdGRlcXVldWVfdGFza19mYWlyKHJxLCBwLCBERVFVRVVFX1NMRUVQIHwgREVRVUVVRV9USFJPVFRMRSk7XFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZwLVxcdTAwM2V0aHJvdHRsZV9ub2RlLCBcXHUwMDI2Y2ZzX3JxLVxcdTAwM2V0aHJvdHRsZWRfbGltYm9fbGlzdCk7XFxuIFxcdFxcdC8qXFxuQEAgLTYwNzIsNyArNjA3Miw3IEBAIHZvaWQgaW5pdF9jZnNfdGhyb3R0bGVfd29yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIHN0YXRpYyB2b2lkIGRldGFjaF90YXNrX2Nmc19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xcbiBzdGF0aWMgdm9pZCBkZXF1ZXVlX3Rocm90dGxlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxcbiB7XFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzZS5vbl9ycSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2VzZS5vbl9ycSk7XFxuIFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnAtXFx1MDAzZXRocm90dGxlX25vZGUpO1xcbiBcXG4gXFx0LyogdGFzayBibG9ja2VkIGFmdGVyIHRocm90dGxlZCAqL1xcbkBAIC02MDk0LDcgKzYwOTQsNyBAQCBzdGF0aWMgYm9vbCBlbnF1ZXVlX3Rocm90dGxlZF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4gXFx0c3RydWN0IGNmc19ycSAqY2ZzX3JxID0gY2ZzX3JxX29mKFxcdTAwMjZwLVxcdTAwM2VzZSk7XFxuIFxcbiBcXHQvKiBAcCBzaG91bGQgaGF2ZSBnb25lIHRocm91Z2ggZGVxdWV1ZV90aHJvdHRsZWRfdGFzaygpIGZpcnN0ICovXFxuLVxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2cC1cXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXFx1MDAyNnAtXFx1MDAzZXRocm90dGxlX25vZGUpKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSB0aHJvdHRsZWQgdGFzayBAcCBpcyBlbnF1ZXVlZCB0byBhIHRocm90dGxlZCBjZnNfcnEsXFxuQEAgLTYxNjIsNyArNjE2Miw3IEBAIHN0YXRpYyBpbnQgdGdfdW50aHJvdHRsZV91cChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpXFxuIFxcbiBcXHRcXHRjZnNfcnEtXFx1MDAzZXRocm90dGxlZF9jbG9ja19zZWxmID0gMDtcXG4gXFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UoKHM2NClkZWx0YSBcXHUwMDNjIDApKVxcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKChzNjQpZGVsdGEgXFx1MDAzYyAwKSlcXG4gXFx0XFx0XFx0ZGVsdGEgPSAwO1xcbiBcXG4gXFx0XFx0Y2ZzX3JxLVxcdTAwM2V0aHJvdHRsZWRfY2xvY2tfc2VsZl90aW1lICs9IGRlbHRhO1xcbkBAIC02MjMxLDggKzYyMzEsOCBAQCBzdGF0aWMgaW50IHRnX3Rocm90dGxlX2Rvd24oc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB2b2lkICpkYXRhKVxcbiBcXHRcXHRjZnNfcnEtXFx1MDAzZXBlbHRfY2xvY2tfdGhyb3R0bGVkID0gMTtcXG4gXFx0fVxcbiBcXG4tXFx0V0FSTl9PTl9PTkNFKGNmc19ycS1cXHUwMDNldGhyb3R0bGVkX2Nsb2NrX3NlbGYpO1xcbi1cXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNmNmc19ycS1cXHUwMDNldGhyb3R0bGVkX2xpbWJvX2xpc3QpKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cXHUwMDNldGhyb3R0bGVkX2Nsb2NrX3NlbGYpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXFx1MDAyNmNmc19ycS1cXHUwMDNldGhyb3R0bGVkX2xpbWJvX2xpc3QpKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTYyNzMsNyArNjI3Myw3IEBAIHN0YXRpYyBib29sIHRocm90dGxlX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXFxuIFxcdCAqIHRocm90dGxlZC1saXN0LiAgcnEtXFx1MDAzZWxvY2sgcHJvdGVjdHMgY29tcGxldGlvbi5cXG4gXFx0ICovXFxuIFxcdGNmc19ycS1cXHUwMDNldGhyb3R0bGVkID0gMTtcXG4tXFx0V0FSTl9PTl9PTkNFKGNmc19ycS1cXHUwMDNldGhyb3R0bGVkX2Nsb2NrKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cXHUwMDNldGhyb3R0bGVkX2Nsb2NrKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTYzODAsNyArNjM4MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VudGhyb3R0bGVfY2ZzX3JxX2FzeW5jKHN0cnVjdCBjZnNfcnEgKmNmc19ycSlcXG4gXFx0fVxcbiBcXG4gXFx0LyogQWxyZWFkeSBlbnF1ZXVlZCAqL1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZjZnNfcnEtXFx1MDAzZXRocm90dGxlZF9jc2RfbGlzdCkpKVxcbitcXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFxcdTAwMjZjZnNfcnEtXFx1MDAzZXRocm90dGxlZF9jc2RfbGlzdCkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRmaXJzdCA9IGxpc3RfZW1wdHkoXFx1MDAyNnJxLVxcdTAwM2VjZnNiX2NzZF9saXN0KTtcXG5AQCAtNjM5Myw3ICs2MzkzLDcgQEAgc3RhdGljIHZvaWQgdW50aHJvdHRsZV9jZnNfcnFfYXN5bmMoc3RydWN0IGNmc19ycSAqY2ZzX3JxKVxcbiB7XFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2YoY2ZzX3JxKSk7XFxuIFxcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKCFjZnNfcnFfdGhyb3R0bGVkKGNmc19ycSkgfHxcXG4rXFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghY2ZzX3JxX3Rocm90dGxlZChjZnNfcnEpIHx8XFxuIFxcdCAgICBjZnNfcnEtXFx1MDAzZXJ1bnRpbWVfcmVtYWluaW5nIFxcdTAwM2M9IDApKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC02NDI5LDcgKzY0MjksNyBAQCBzdGF0aWMgYm9vbCBkaXN0cmlidXRlX2Nmc19ydW50aW1lKHN0cnVjdCBjZnNfYmFuZHdpZHRoICpjZnNfYilcXG4gXFx0XFx0XFx0Z290byBuZXh0O1xcbiBcXG4gXFx0XFx0LyogQnkgdGhlIGFib3ZlIGNoZWNrcywgdGhpcyBzaG91bGQgbmV2ZXIgYmUgdHJ1ZSAqL1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVxcdTAwM2VydW50aW1lX3JlbWFpbmluZyBcXHUwMDNlIDApO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoY2ZzX3JxLVxcdTAwM2VydW50aW1lX3JlbWFpbmluZyBcXHUwMDNlIDApO1xcbiBcXG4gXFx0XFx0cmF3X3NwaW5fbG9jayhcXHUwMDI2Y2ZzX2ItXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRydW50aW1lID0gLWNmc19ycS1cXHUwMDNlcnVudGltZV9yZW1haW5pbmcgKyAxO1xcbkBAIC02NDUwLDcgKzY0NTAsNyBAQCBzdGF0aWMgYm9vbCBkaXN0cmlidXRlX2Nmc19ydW50aW1lKHN0cnVjdCBjZnNfYmFuZHdpZHRoICpjZnNfYilcXG4gXFx0XFx0XFx0XFx0ICogV2UgY3VycmVudGx5IG9ubHkgZXhwZWN0IHRvIGJlIHVudGhyb3R0bGluZ1xcbiBcXHRcXHRcXHRcXHQgKiBhIHNpbmdsZSBjZnNfcnEgbG9jYWxseS5cXG4gXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bG9jYWxfdW50aHJvdHRsZSkpO1xcbitcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXFx1MDAyNmxvY2FsX3VudGhyb3R0bGUpKTtcXG4gXFx0XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Y2ZzX3JxLVxcdTAwM2V0aHJvdHRsZWRfY3NkX2xpc3QsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZsb2NhbF91bnRocm90dGxlKTtcXG4gXFx0XFx0XFx0fVxcbkBAIC02NDc1LDcgKzY0NzUsNyBAQCBzdGF0aWMgYm9vbCBkaXN0cmlidXRlX2Nmc19ydW50aW1lKHN0cnVjdCBjZnNfYmFuZHdpZHRoICpjZnNfYilcXG4gXFxuIFxcdFxcdHJxX3VubG9ja19pcnFyZXN0b3JlKHJxLCBcXHUwMDI2cmYpO1xcbiBcXHR9XFxuLVxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bG9jYWxfdW50aHJvdHRsZSkpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXFx1MDAyNmxvY2FsX3VudGhyb3R0bGUpKTtcXG4gXFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG5AQCAtNzA0OCw3ICs3MDQ4LDcgQEAgc3RhdGljIHZvaWQgaHJ0aWNrX3N0YXJ0X2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiBcXHR1NjQgdmRlbHRhO1xcbiBcXHR1NjQgZGVsdGE7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UodGFza19ycShwKSAhPSBycSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX3JxKHApICE9IHJxKTtcXG4gXFxuIFxcdGlmIChycS1cXHUwMDNlY2ZzLmhfbnJfcXVldWVkIFxcdTAwM2M9IDEpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtNzE3MSw4ICs3MTcxLDggQEAgcmVxdWV1ZV9kZWxheWVkX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcXG4gXFx0ICogQmVjYXVzZSBhIGRlbGF5ZWQgZW50aXR5IGlzIG9uZSB0aGF0IGlzIHN0aWxsIG9uXFxuIFxcdCAqIHRoZSBydW5xdWV1ZSBjb21wZXRpbmcgdW50aWwgZWxlZ2liaWxpdHkuXFxuIFxcdCAqL1xcbi1cXHRXQVJOX09OX09OQ0UoIXNlLVxcdTAwM2VzY2hlZF9kZWxheWVkKTtcXG4tXFx0V0FSTl9PTl9PTkNFKCFzZS1cXHUwMDNlb25fcnEpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLVxcdTAwM2VzY2hlZF9kZWxheWVkKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzZS1cXHUwMDNlb25fcnEpO1xcbiBcXG4gXFx0aWYgKHVwZGF0ZV9lbnRpdHlfbGFnKGNmc19ycSwgc2UpKSB7XFxuIFxcdFxcdGNmc19ycS1cXHUwMDNlbnJfcXVldWVkLS07XFxuQEAgLTc0MDksOCArNzQwOSw4IEBAIHN0YXRpYyBpbnQgZGVxdWV1ZV9lbnRpdGllcyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxcbiBcXHRcXHRycS1cXHUwMDNlbmV4dF9iYWxhbmNlID0gamlmZmllcztcXG4gXFxuIFxcdGlmIChwIFxcdTAwMjZcXHUwMDI2IHRhc2tfZGVsYXllZCkge1xcbi1cXHRcXHRXQVJOX09OX09OQ0UoIXRhc2tfc2xlZXApO1xcbi1cXHRcXHRXQVJOX09OX09OQ0UocC1cXHUwMDNlb25fcnEgIT0gMSk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghdGFza19zbGVlcCk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVxcdTAwM2Vvbl9ycSAhPSAxKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEZpeC11cCB3aGF0IGJsb2NrX3Rhc2soKSBza2lwcGVkLlxcbkBAIC04OTc2LDcgKzg5NzYsNyBAQCBzdGF0aWMgdm9pZCBzZXRfY3B1c19hbGxvd2VkX2ZhaXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgYWZmaW5pdHlfY29udGV4dFxcbiBzdGF0aWMgdm9pZCBzZXRfbmV4dF9idWRkeShzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcXG4ge1xcbiBcXHRmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpIHtcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRSghc2UtXFx1MDAzZW9uX3JxKSlcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghc2UtXFx1MDAzZW9uX3JxKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRpZiAoc2VfaXNfaWRsZShzZSkpXFxuIFxcdFxcdFxcdHJldHVybjtcXG5AQCAtOTAyMyw3ICs5MDIzLDcgQEAgcHJlZW1wdF9zeW5jKHN0cnVjdCBycSAqcnEsIGludCB3YWtlX2ZsYWdzLFxcbiBcXHQgKiBXRl9TWU5DIHdpdGhvdXQgV0ZfVFRXVSBpcyBub3QgZXhwZWN0ZWQgc28gd2FybiBpZiBpdCBoYXBwZW5zIGV2ZW5cXG4gXFx0ICogdGhvdWdoIGl0IGlzIGxpa2VseSBoYXJtbGVzcy5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRSghKHdha2VfZmxhZ3MgXFx1MDAyNiBXRl9UVFdVKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKHdha2VfZmxhZ3MgXFx1MDAyNiBXRl9UVFdVKSk7XFxuIFxcbiBcXHR0aHJlc2hvbGQgPSBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3Q7XFxuIFxcdGRlbHRhID0gcnFfY2xvY2tfdGFzayhycSkgLSBzZS1cXHUwMDNlZXhlY19zdGFydDtcXG5AQCAtOTA5NSw3ICs5MDk1LDcgQEAgc3RhdGljIHZvaWQgd2FrZXVwX3ByZWVtcHRfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtlX2ZcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0ZmluZF9tYXRjaGluZ19zZShcXHUwMDI2c2UsIFxcdTAwMjZwc2UpO1xcbi1cXHRXQVJOX09OX09OQ0UoIXBzZSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghcHNlKTtcXG4gXFxuIFxcdGNzZV9pc19pZGxlID0gc2VfaXNfaWRsZShzZSk7XFxuIFxcdHBzZV9pc19pZGxlID0gc2VfaXNfaWRsZShwc2UpO1xcbkBAIC05ODU3LDggKzk4NTcsOCBAQCBzdGF0aWMgdm9pZCBkZXRhY2hfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudilcXG4gXFx0XFx0c2NoZWRzdGF0X2luYyhwLVxcdTAwM2VzdGF0cy5ucl9mb3JjZWRfbWlncmF0aW9ucyk7XFxuIFxcdH1cXG4gXFxuLVxcdFdBUk5fT04odGFza19jdXJyZW50KGVudi1cXHUwMDNlc3JjX3JxLCBwKSk7XFxuLVxcdFdBUk5fT04odGFza19jdXJyZW50X2Rvbm9yKGVudi1cXHUwMDNlc3JjX3JxLCBwKSk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQodGFza19jdXJyZW50KGVudi1cXHUwMDNlc3JjX3JxLCBwKSk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQodGFza19jdXJyZW50X2Rvbm9yKGVudi1cXHUwMDNlc3JjX3JxLCBwKSk7XFxuIFxcbiBcXHRkZWFjdGl2YXRlX3Rhc2soZW52LVxcdTAwM2VzcmNfcnEsIHAsIERFUVVFVUVfTk9DTE9DSyk7XFxuIFxcdHNldF90YXNrX2NwdShwLCBlbnYtXFx1MDAzZWRzdF9jcHUpO1xcbkBAIC0xMjE1MSw3ICsxMjE1MSw3IEBAIHN0YXRpYyBpbnQgc2NoZWRfYmFsYW5jZV9ycShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSxcXG4gXFx0XFx0Z290byBvdXRfYmFsYW5jZWQ7XFxuIFxcdH1cXG4gXFxuLVxcdFdBUk5fT05fT05DRShidXNpZXN0ID09IGVudi5kc3RfcnEpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoYnVzaWVzdCA9PSBlbnYuZHN0X3JxKTtcXG4gXFxuIFxcdHVwZGF0ZV9sYl9pbWJhbGFuY2Vfc3RhdChcXHUwMDI2ZW52LCBzZCwgaWRsZSk7XFxuIFxcbkBAIC0xMjQ2MSw3ICsxMjQ2MSw3IEBAIHN0YXRpYyBpbnQgYWN0aXZlX2xvYWRfYmFsYW5jZV9jcHVfc3RvcCh2b2lkICpkYXRhKVxcbiBcXHQgKiB3ZSBuZWVkIHRvIGZpeCBpdC4gT3JpZ2luYWxseSByZXBvcnRlZCBieVxcbiBcXHQgKiBCam9ybiBIZWxnYWFzIG9uIGEgMTI4LUNQVSBzZXR1cC5cXG4gXFx0ICovXFxuLVxcdFdBUk5fT05fT05DRShidXNpZXN0X3JxID09IHRhcmdldF9ycSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChidXNpZXN0X3JxID09IHRhcmdldF9ycSk7XFxuIFxcbiBcXHQvKiBTZWFyY2ggZm9yIGFuIHNkIHNwYW5uaW5nIHVzIGFuZCB0aGUgdGFyZ2V0IENQVS4gKi9cXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbkBAIC0xMjg4Myw3ICsxMjg4Myw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVfc2Rfc3RhdGVfYnVzeShpbnQgY3B1KVxcbiBcXG4gdm9pZCBub2h6X2JhbGFuY2VfZXhpdF9pZGxlKHN0cnVjdCBycSAqcnEpXFxuIHtcXG4tXFx0V0FSTl9PTl9PTkNFKHJxICE9IHRoaXNfcnEoKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycSAhPSB0aGlzX3JxKCkpO1xcbiBcXG4gXFx0aWYgKGxpa2VseSghcnEtXFx1MDAzZW5vaHpfdGlja19zdG9wcGVkKSlcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xMjkxOCw3ICsxMjkxOCw3IEBAIHZvaWQgbm9oel9iYWxhbmNlX2VudGVyX2lkbGUoaW50IGNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7XFxuIFxcbi1cXHRXQVJOX09OX09OQ0UoY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTtcXG4gXFxuIFxcdC8qIElmIHRoaXMgQ1BVIGlzIGdvaW5nIGRvd24sIHRoZW4gbm90aGluZyBuZWVkcyB0byBiZSBkb25lOiAqL1xcbiBcXHRpZiAoIWNwdV9hY3RpdmUoY3B1KSlcXG5AQCAtMTMwMDAsNyArMTMwMDAsNyBAQCBzdGF0aWMgdm9pZCBfbm9oel9pZGxlX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIFxcdGludCBiYWxhbmNlX2NwdTtcXG4gXFx0c3RydWN0IHJxICpycTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRSgoZmxhZ3MgXFx1MDAyNiBOT0haX0tJQ0tfTUFTSykgPT0gTk9IWl9CQUxBTkNFX0tJQ0spO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoKGZsYWdzIFxcdTAwMjYgTk9IWl9LSUNLX01BU0spID09IE5PSFpfQkFMQU5DRV9LSUNLKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdlIGFzc3VtZSB0aGVyZSB3aWxsIGJlIG5vIGlkbGUgbG9hZCBhZnRlciB0aGlzIHVwZGF0ZSBhbmQgY2xlYXJcXG5AQCAtMTM2MjMsNyArMTM2MjMsNyBAQCBib29sIGNmc19wcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmIsXFxuIFxcdHN0cnVjdCBjZnNfcnEgKmNmc19ycWI7XFxuIFxcdHM2NCBkZWx0YTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRSh0YXNrX3JxKGIpLVxcdTAwM2Vjb3JlICE9IHJxLVxcdTAwM2Vjb3JlKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnEoYiktXFx1MDAzZWNvcmUgIT0gcnEtXFx1MDAzZWNvcmUpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVEXFxuIFxcdC8qXFxuQEAgLTEzODM5LDcgKzEzODM5LDcgQEAgc3RhdGljIHZvaWQgc3dpdGNoZWRfZnJvbV9mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4gXFxuIHN0YXRpYyB2b2lkIHN3aXRjaGVkX3RvX2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiB7XFxuLVxcdFdBUk5fT05fT05DRShwLVxcdTAwM2VzZS5zY2hlZF9kZWxheWVkKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXFx1MDAzZXNlLnNjaGVkX2RlbGF5ZWQpO1xcbiBcXG4gXFx0YXR0YWNoX3Rhc2tfY2ZzX3JxKHApO1xcbiBcXG5AQCAtMTM4NzIsNyArMTM4NzIsNyBAQCBzdGF0aWMgdm9pZCBfX3NldF9uZXh0X3Rhc2tfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmlyc1xcbiBcXHRpZiAoIWZpcnN0KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRXQVJOX09OX09OQ0Uoc2UtXFx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2UtXFx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xcbiBcXG4gXFx0aWYgKGhydGlja19lbmFibGVkX2ZhaXIocnEpKVxcbiBcXHRcXHRocnRpY2tfc3RhcnRfZmFpcihycSwgcCk7XFxuQEAgLTE0MTQ4LDcgKzE0MTQ4LDcgQEAgaW50IHNjaGVkX2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgbG9uZyBpZGxlKVxcbiBcXHRcXHRycV9sb2NrX2lycXNhdmUocnEsIFxcdTAwMjZyZik7XFxuIFxcbiBcXHRcXHRncnBfY2ZzX3JxLVxcdTAwM2VpZGxlID0gaWRsZTtcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRSh3YXNfaWRsZSA9PSBjZnNfcnFfaXNfaWRsZShncnBfY2ZzX3JxKSkpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQod2FzX2lkbGUgPT0gY2ZzX3JxX2lzX2lkbGUoZ3JwX2Nmc19ycSkpKVxcbiBcXHRcXHRcXHRnb3RvIG5leHRfY3B1O1xcbiBcXG4gXFx0XFx0aWRsZV90YXNrX2RlbHRhID0gZ3JwX2Nmc19ycS1cXHUwMDNlaF9ucl9xdWV1ZWQgLVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvcnQuYyBiL2tlcm5lbC9zY2hlZC9ydC5jXFxuaW5kZXggNGVlOGZhZjAxNDQxYTMuLjUwNmQwZjFhZmE1OGY5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9ydC5jXFxuKysrIGIva2VybmVsL3NjaGVkL3J0LmNcXG5AQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfcnRfYmFuZHdpZHRoKHN0cnVjdCBydF9iYW5kd2lkdGggKnJ0X2IpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSlcXG4ge1xcbi1cXHRXQVJOX09OX09OQ0UoIXJ0X2VudGl0eV9pc190YXNrKHJ0X3NlKSk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghcnRfZW50aXR5X2lzX3Rhc2socnRfc2UpKTtcXG4gXFxuIFxcdHJldHVybiBjb250YWluZXJfb2YocnRfc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcnQpO1xcbiB9XFxuQEAgLTE3OCwxMyArMTc4LDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpydF90YXNrX29mKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSlcXG4ge1xcbiBcXHQvKiBDYW5ub3QgZm9sZCB3aXRoIG5vbi1DT05GSUdfUlRfR1JPVVBfU0NIRUQgdmVyc2lvbiwgbGF5b3V0ICovXFxuLVxcdFdBUk5fT04oIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuIFxcdHJldHVybiBydF9ycS1cXHUwMDNlcnE7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSlcXG4ge1xcbi1cXHRXQVJOX09OKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcnRfc2UtXFx1MDAzZXJ0X3JxLVxcdTAwM2V0ZyAhPSBcXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IHJ0X3NlLVxcdTAwM2VydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuIFxcdHJldHVybiBydF9zZS1cXHUwMDNlcnRfcnE7XFxuIH1cXG4gXFxuQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpXFxuIHtcXG4gXFx0c3RydWN0IHJ0X3JxICpydF9ycSA9IHJ0X3NlLVxcdTAwM2VydF9ycTtcXG4gXFxuLVxcdFdBUk5fT04oIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuIFxcdHJldHVybiBydF9ycS1cXHUwMDNlcnE7XFxuIH1cXG4gXFxuQEAgLTQ5Myw3ICs0OTMsNyBAQCB0eXBlZGVmIHN0cnVjdCB0YXNrX2dyb3VwICpydF9ycV9pdGVyX3Q7XFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfZ3JvdXAgKm5leHRfdGFza19ncm91cChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXFxuIHtcXG4gXFx0aWYgKCFydF9ncm91cF9zY2hlZF9lbmFibGVkKCkpIHtcXG4tXFx0XFx0V0FSTl9PTih0ZyAhPSBcXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcXG4rXFx0XFx0V0FSTl9PTl9ERUZFUlJFRCh0ZyAhPSBcXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuQEAgLTcyMyw3ICs3MjMsNyBAQCBzdGF0aWMgdm9pZCBfX2Rpc2FibGVfcnVudGltZShzdHJ1Y3QgcnEgKnJxKVxcbiBcXHRcXHQgKiBXZSBjYW5ub3QgYmUgbGVmdCB3YW50aW5nIC0gdGhhdCB3b3VsZCBtZWFuIHNvbWUgcnVudGltZVxcbiBcXHRcXHQgKiBsZWFrZWQgb3V0IG9mIHRoZSBzeXN0ZW0uXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRXQVJOX09OX09OQ0Uod2FudCk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh3YW50KTtcXG4gYmFsYW5jZWQ6XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIERpc2FibGUgYWxsIHRoZSBib3Jyb3cgbG9naWMgYnkgcHJldGVuZGluZyB3ZSBoYXZlIGluZlxcbkBAIC0xMDk0LDcgKzEwOTQsNyBAQCBkZWNfcnRfcHJpbyhzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbylcXG4gXFxuIFxcdGlmIChydF9ycS1cXHUwMDNlcnRfbnJfcnVubmluZykge1xcbiBcXG4tXFx0XFx0V0FSTl9PTihwcmlvIFxcdTAwM2MgcHJldl9wcmlvKTtcXG4rXFx0XFx0V0FSTl9PTl9ERUZFUlJFRChwcmlvIFxcdTAwM2MgcHJldl9wcmlvKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoaXMgbWF5IGhhdmUgYmVlbiBvdXIgaGlnaGVzdCB0YXNrLCBhbmQgdGhlcmVmb3JlXFxuQEAgLTExMzEsNyArMTEzMSw3IEBAIGRlY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSlcXG4gXFx0aWYgKHJ0X3NlX2Jvb3N0ZWQocnRfc2UpKVxcbiBcXHRcXHRydF9ycS1cXHUwMDNlcnRfbnJfYm9vc3RlZC0tO1xcbiBcXG4tXFx0V0FSTl9PTighcnRfcnEtXFx1MDAzZXJ0X25yX3J1bm5pbmcgXFx1MDAyNlxcdTAwMjYgcnRfcnEtXFx1MDAzZXJ0X25yX2Jvb3N0ZWQpO1xcbitcXHRXQVJOX09OX0RFRkVSUkVEKCFydF9ycS1cXHUwMDNlcnRfbnJfcnVubmluZyBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNlcnRfbnJfYm9vc3RlZCk7XFxuIH1cXG4gXFxuICNlbHNlIC8qICFDT05GSUdfUlRfR1JPVVBfU0NIRUQ6ICovXFxuQEAgLTExNzYsNyArMTE3Niw3IEBAIHZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxcbiB7XFxuIFxcdGludCBwcmlvID0gcnRfc2VfcHJpbyhydF9zZSk7XFxuIFxcbi1cXHRXQVJOX09OKCFydF9wcmlvKHByaW8pKTtcXG4rXFx0V0FSTl9PTl9ERUZFUlJFRCghcnRfcHJpbyhwcmlvKSk7XFxuIFxcdHJ0X3JxLVxcdTAwM2VydF9ucl9ydW5uaW5nICs9IHJ0X3NlX25yX3J1bm5pbmcocnRfc2UpO1xcbiBcXHRydF9ycS1cXHUwMDNlcnJfbnJfcnVubmluZyArPSBydF9zZV9ycl9ucl9ydW5uaW5nKHJ0X3NlKTtcXG4gXFxuQEAgLTExODcsOCArMTE4Nyw4IEBAIHZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxcbiBzdGF0aWMgaW5saW5lXFxuIHZvaWQgZGVjX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxcbiB7XFxuLVxcdFdBUk5fT04oIXJ0X3ByaW8ocnRfc2VfcHJpbyhydF9zZSkpKTtcXG4tXFx0V0FSTl9PTighcnRfcnEtXFx1MDAzZXJ0X25yX3J1bm5pbmcpO1xcbitcXHRXQVJOX09OX0RFRkVSUkVEKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQoIXJ0X3JxLVxcdTAwM2VydF9ucl9ydW5uaW5nKTtcXG4gXFx0cnRfcnEtXFx1MDAzZXJ0X25yX3J1bm5pbmcgLT0gcnRfc2VfbnJfcnVubmluZyhydF9zZSk7XFxuIFxcdHJ0X3JxLVxcdTAwM2Vycl9ucl9ydW5uaW5nIC09IHJ0X3NlX3JyX25yX3J1bm5pbmcocnRfc2UpO1xcbiBcXG5AQCAtMTM0OCw3ICsxMzQ4LDcgQEAgc3RhdGljIHZvaWQgX19lbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgdW5zaWduZWQgaW50IGZsYWdcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG1vdmVfZW50aXR5KGZsYWdzKSkge1xcbi1cXHRcXHRXQVJOX09OX09OQ0UocnRfc2UtXFx1MDAzZW9uX2xpc3QpO1xcbitcXHRcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnRfc2UtXFx1MDAzZW9uX2xpc3QpO1xcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFTlFVRVVFX0hFQUQpXFxuIFxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZydF9zZS1cXHUwMDNlcnVuX2xpc3QsIHF1ZXVlKTtcXG4gXFx0XFx0ZWxzZVxcbkBAIC0xMzY4LDcgKzEzNjgsNyBAQCBzdGF0aWMgdm9pZCBfX2RlcXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCB1bnNpZ25lZCBpbnQgZmxhZ1xcbiBcXHRzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXkgPSBcXHUwMDI2cnRfcnEtXFx1MDAzZWFjdGl2ZTtcXG4gXFxuIFxcdGlmIChtb3ZlX2VudGl0eShmbGFncykpIHtcXG4tXFx0XFx0V0FSTl9PTl9PTkNFKCFydF9zZS1cXHUwMDNlb25fbGlzdCk7XFxuK1xcdFxcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghcnRfc2UtXFx1MDAzZW9uX2xpc3QpO1xcbiBcXHRcXHRfX2RlbGlzdF9ydF9lbnRpdHkocnRfc2UsIGFycmF5KTtcXG4gXFx0fVxcbiBcXHRydF9zZS1cXHUwMDNlb25fcnEgPSAwO1xcbkBAIC0xNjg0LDcgKzE2ODQsNyBAQCBzdGF0aWMgc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcGlja19uZXh0X3J0X2VudGl0eShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxcbiBcXHRCVUdfT04oaWR4IFxcdTAwM2U9IE1BWF9SVF9QUklPKTtcXG4gXFxuIFxcdHF1ZXVlID0gYXJyYXktXFx1MDAzZXF1ZXVlICsgaWR4O1xcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKGxpc3RfZW1wdHkocXVldWUpKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChsaXN0X2VtcHR5KHF1ZXVlKSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRuZXh0ID0gbGlzdF9lbnRyeShxdWV1ZS1cXHUwMDNlbmV4dCwgc3RydWN0IHNjaGVkX3J0X2VudGl0eSwgcnVuX2xpc3QpO1xcbiBcXG5AQCAtMjAxNiw3ICsyMDE2LDcgQEAgc3RhdGljIGludCBwdXNoX3J0X3Rhc2soc3RydWN0IHJxICpycSwgYm9vbCBwdWxsKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKFdBUk5fT04obmV4dF90YXNrID09IHJxLVxcdTAwM2VjdXJyKSlcXG4rXFx0aWYgKFdBUk5fT05fREVGRVJSRUQobmV4dF90YXNrID09IHJxLVxcdTAwM2VjdXJyKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHQvKiBXZSBtaWdodCByZWxlYXNlIHJxIGxvY2sgKi9cXG5AQCAtMjMxNiw4ICsyMzE2LDggQEAgc3RhdGljIHZvaWQgcHVsbF9ydF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSlcXG4gXFx0XFx0ICogdGhlIHRvLWJlLXNjaGVkdWxlZCB0YXNrP1xcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHAgXFx1MDAyNlxcdTAwMjYgKHAtXFx1MDAzZXByaW8gXFx1MDAzYyB0aGlzX3JxLVxcdTAwM2VydC5oaWdoZXN0X3ByaW8uY3VycikpIHtcXG4tXFx0XFx0XFx0V0FSTl9PTihwID09IHNyY19ycS1cXHUwMDNlY3Vycik7XFxuLVxcdFxcdFxcdFdBUk5fT04oIXRhc2tfb25fcnFfcXVldWVkKHApKTtcXG4rXFx0XFx0XFx0V0FSTl9PTl9ERUZFUlJFRChwID09IHNyY19ycS1cXHUwMDNlY3Vycik7XFxuK1xcdFxcdFxcdFdBUk5fT05fREVGRVJSRUQoIXRhc2tfb25fcnFfcXVldWVkKHApKTtcXG4gXFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBwIGlzIGhpZ2hlciBpbiBwcmlvcml0eVxcbkBAIC0yNTgzLDcgKzI1ODMsNyBAQCBzdGF0aWMgaW50IHRhc2tfaXNfdGhyb3R0bGVkX3J0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSlcXG4gXFxuICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgLy8gWFhYIG1heWJlIGFkZCB0YXNrX3J0X3JxKCksIHNlZSBhbHNvIHNjaGVkX3J0X3BlcmlvZF9ydF9ycVxcbiBcXHRydF9ycSA9IHRhc2tfZ3JvdXAocCktXFx1MDAzZXJ0X3JxW2NwdV07XFxuLVxcdFdBUk5fT04oIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuK1xcdFdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiBydF9ycS1cXHUwMDNldGcgIT0gXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxuICNlbHNlXFxuIFxcdHJ0X3JxID0gXFx1MDAyNmNwdV9ycShjcHUpLVxcdTAwM2VydDtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcXG5pbmRleCA5ZjYzYjE1ZDMwOWQxMS4uZjc0ZjljZDQ0ZTA5ODYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL3NjaGVkLmhcXG4rKysgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaFxcbkBAIC0xNjg0LDcgKzE2ODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2lkbGVfY29yZShzdHJ1Y3QgcnEgKnJxKSB7IH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX29mKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKVxcbiB7XFxuLVxcdFdBUk5fT05fT05DRSghZW50aXR5X2lzX3Rhc2soc2UpKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFlbnRpdHlfaXNfdGFzayhzZSkpO1xcbiBcXHRyZXR1cm4gY29udGFpbmVyX29mKHNlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHNlKTtcXG4gfVxcbiBcXG5AQCAtMTc2Niw3ICsxNzY2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9jbG9ja191cGRhdGVkKHN0cnVjdCBycSAqcnEpXFxuIFxcdCAqIFRoZSBvbmx5IHJlYXNvbiBmb3Igbm90IHNlZWluZyBhIGNsb2NrIHVwZGF0ZSBzaW5jZSB0aGVcXG4gXFx0ICogbGFzdCBycV9waW5fbG9jaygpIGlzIGlmIHdlJ3JlIGN1cnJlbnRseSBza2lwcGluZyB1cGRhdGVzLlxcbiBcXHQgKi9cXG4tXFx0V0FSTl9PTl9PTkNFKHJxLVxcdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXFx1MDAzYyBSUUNGX0FDVF9TS0lQKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVxcdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXFx1MDAzYyBSUUNGX0FDVF9TS0lQKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB1NjQgcnFfY2xvY2soc3RydWN0IHJxICpycSlcXG5AQCAtMTgxMyw3ICsxODEzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJxX2Nsb2NrX2NhbmNlbF9za2lwdXBkYXRlKHN0cnVjdCBycSAqcnEpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBycV9jbG9ja19zdGFydF9sb29wX3VwZGF0ZShzdHJ1Y3QgcnEgKnJxKVxcbiB7XFxuIFxcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xcbi1cXHRXQVJOX09OX09OQ0UocnEtXFx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcXHUwMDI2IFJRQ0ZfQUNUX1NLSVApO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXFx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcXHUwMDI2IFJRQ0ZfQUNUX1NLSVApO1xcbiBcXHRycS1cXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIHw9IFJRQ0ZfQUNUX1NLSVA7XFxuIH1cXG4gXFxuQEAgLTE4NzAsOSArMTg3MCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfcnFfY2xvY2tfaW52YWxpZGF0ZShzdHJ1Y3QgcnEgKnJxKSB7fVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9iYWxhbmNlX2NhbGxiYWNrc19lbXB0eShzdHJ1Y3QgcnEgKnJxKVxcbiB7XFxuLVxcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIHJxLVxcdTAwM2ViYWxhbmNlX2NhbGxiYWNrIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAgcnEtXFx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgIT0gXFx1MDAyNmJhbGFuY2VfcHVzaF9jYWxsYmFjayk7XFxuK1xcdFdBUk5fT05fT05DRV9ERUZFUlJFRChJU19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgICBycS1cXHUwMDNlYmFsYW5jZV9jYWxsYmFjayBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgICBycS1cXHUwMDNlYmFsYW5jZV9jYWxsYmFjayAhPSBcXHUwMDI2YmFsYW5jZV9wdXNoX2NhbGxiYWNrKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMjY4MSw3ICsyNjgxLDcgQEAgc3RydWN0IHNjaGVkX2NsYXNzIHtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldilcXG4ge1xcbi1cXHRXQVJOX09OX09OQ0UocnEtXFx1MDAzZWRvbm9yICE9IHByZXYpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXFx1MDAzZWRvbm9yICE9IHByZXYpO1xcbiBcXHRwcmV2LVxcdTAwM2VzY2hlZF9jbGFzcy1cXHUwMDNlcHV0X3ByZXZfdGFzayhycSwgcHJldiwgTlVMTCk7XFxuIH1cXG4gXFxuQEAgLTI3MDQsNyArMjcwNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl9zZXRfbmV4dF90YXNrKHN0cnVjdCBycSAqcnEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dClcXG4ge1xcbi1cXHRXQVJOX09OX09OQ0UocnEtXFx1MDAzZWRvbm9yICE9IHByZXYpO1xcbitcXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXFx1MDAzZWRvbm9yICE9IHByZXYpO1xcbiBcXG4gXFx0X19wdXRfcHJldl9zZXRfbmV4dF9kbF9zZXJ2ZXIocnEsIHByZXYsIG5leHQpO1xcbiBcXG5AQCAtMzAzMCw3ICszMDMwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGF0dGFjaF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4ge1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRSh0YXNrX3JxKHApICE9IHJxKTtcXG4rXFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnEocCkgIT0gcnEpO1xcbiBcXHRhY3RpdmF0ZV90YXNrKHJxLCBwLCBFTlFVRVVFX05PQ0xPQ0spO1xcbiBcXHR3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbGliL2J1Zy5jIGIvbGliL2J1Zy5jXFxuaW5kZXggMjI0ZjRjZmE0YWEzMTIuLmY1NzY4ZjVkMTdiNDc5IDEwMDY0NFxcbi0tLSBhL2xpYi9idWcuY1xcbisrKyBiL2xpYi9idWcuY1xcbkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBfX3dhcm5fcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIFxcbiBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYWRkciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuIHtcXG4tXFx0Ym9vbCB3YXJuaW5nLCBvbmNlLCBkb25lLCBub19jdXQsIGhhc19hcmdzO1xcbitcXHRib29sIHdhcm5pbmcsIG9uY2UsIGRvbmUsIG5vX2N1dCwgaGFzX2FyZ3MsIGRlZmVycmVkO1xcbiBcXHRjb25zdCBjaGFyICpmaWxlLCAqZm10O1xcbiBcXHR1bnNpZ25lZCBsaW5lO1xcbiBcXG5AQCAtMjE5LDYgKzIxOSw3IEBAIHN0YXRpYyBlbnVtIGJ1Z190cmFwX3R5cGUgX19yZXBvcnRfYnVnKHN0cnVjdCBidWdfZW50cnkgKmJ1ZywgdW5zaWduZWQgbG9uZyBidWdhXFxuIFxcdGRvbmUgICAgID0gYnVnLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJVR0ZMQUdfRE9ORTtcXG4gXFx0bm9fY3V0ICAgPSBidWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlVHRkxBR19OT19DVVRfSEVSRTtcXG4gXFx0aGFzX2FyZ3MgPSBidWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlVHRkxBR19BUkdTO1xcbitcXHRkZWZlcnJlZCA9IGJ1Zy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCVUdGTEFHX0RFRkVSUkVEO1xcbiBcXG4gXFx0aWYgKHdhcm5pbmcgXFx1MDAyNlxcdTAwMjYgb25jZSkge1xcbiBcXHRcXHRpZiAoZG9uZSlcXG5AQCAtMjI5LDcgKzIzMCwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0YnVnLVxcdTAwM2VmbGFncyB8PSBCVUdGTEFHX0RPTkU7XFxuIFxcdH1cXG4tXFxuK1xcdGlmIChkZWZlcnJlZCkge1xcbitcXHRcXHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1xcbitcXHRcXHRwcmludGtfZGVmZXJyZWRfZW50ZXIoKTtcXG4rXFx0fVxcbiBcXHQvKlxcbiBcXHQgKiBCVUcoKSBhbmQgV0FSTl9PTigpIGZhbWlsaWVzIGRvbid0IHByaW50IGEgY3VzdG9tIGRlYnVnIG1lc3NhZ2VcXG4gXFx0ICogYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLCBzbyB3ZSBtdXN0IGFkZCB0aGVcXG5AQCAtMjQ1LDYgKzI0OSwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYVxcbiBcXHRcXHQvKiB0aGlzIGlzIGEgV0FSTl9PTiByYXRoZXIgdGhhbiBCVUcvQlVHX09OICovXFxuIFxcdFxcdF9fd2FybihmaWxlLCBsaW5lLCAodm9pZCAqKWJ1Z2FkZHIsIEJVR19HRVRfVEFJTlQoYnVnKSwgcmVncyxcXG4gXFx0XFx0ICAgICAgIE5VTEwpO1xcbitcXHRcXHRpZiAoZGVmZXJyZWQpIHtcXG4rXFx0XFx0XFx0cHJpbnRrX2RlZmVycmVkX2V4aXQoKTtcXG4rXFx0XFx0XFx0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1xcbitcXHRcXHR9XFxuIFxcdFxcdHJldHVybiBCVUdfVFJBUF9UWVBFX1dBUk47XFxuIFxcdH1cXG4gXFxuQEAgLTI1NCw2ICsyNjIsMTAgQEAgc3RhdGljIGVudW0gYnVnX3RyYXBfdHlwZSBfX3JlcG9ydF9idWcoc3RydWN0IGJ1Z19lbnRyeSAqYnVnLCB1bnNpZ25lZCBsb25nIGJ1Z2FcXG4gXFx0XFx0cHJfY3JpdChcXFwia2VybmVsIEJVRyBhdCAlcEIgW3ZlcmJvc2UgZGVidWcgaW5mbyB1bmF2YWlsYWJsZV1cXFxcblxcXCIsXFxuIFxcdFxcdFxcdCh2b2lkICopYnVnYWRkcik7XFxuIFxcbitcXHRpZiAoZGVmZXJyZWQpIHtcXG4rXFx0XFx0cHJpbnRrX2RlZmVycmVkX2V4aXQoKTtcXG4rXFx0XFx0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1xcbitcXHR9XFxuIFxcdHJldHVybiBCVUdfVFJBUF9UWVBFX0JVRztcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTQ6NTM6MDEuMTA0NjIxMDEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTIyMTg2NDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGFuZCBhcHBsaWVzIGRlZmVycmVkIHZhcmlhbnRzIG9mIFdBUk5fT04gYW5kIFdBUk5fT05fT05DRSBtYWNyb3MgKFdBUk5fT05fREVGRVJSRUQsIFdBUk5fT05fT05DRV9ERUZFUlJFRCkgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyB3YXJuaW5nIHByaW50cyBpbiB0aGUgc2NoZWR1bGVyLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2dpbmcvZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIG5vcm1hbCBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNGY2N2JjMDkxMGFlZmI5YTUyYTQ1MWRlMjM2Y2YwNWVmMzk4OTRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTQ6NTI6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaFxuaW5kZXggMDllOGVjY2VlOGVkOTcuLjFlM2ZmMDBmNzA5Yjg5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaFxuQEAgLTE0LDYgKzE0LDcgQEBcbiAjZGVmaW5lIEJVR0ZMQUdfRE9ORVx0XHQoMSBcdTAwM2NcdTAwM2MgMilcbiAjZGVmaW5lIEJVR0ZMQUdfTk9fQ1VUX0hFUkVcdCgxIFx1MDAzY1x1MDAzYyAzKVx0LyogQ1VUX0hFUkUgYWxyZWFkeSBzZW50ICovXG4gI2RlZmluZSBCVUdGTEFHX0FSR1NcdFx0KDEgXHUwMDNjXHUwMDNjIDQpXG4rI2RlZmluZSBCVUdGTEFHX0RFRkVSUkVEXHQoMSBcdTAwM2NcdTAwM2MgNSlcbiAjZGVmaW5lIEJVR0ZMQUdfVEFJTlQodGFpbnQpXHQoKHRhaW50KSBcdTAwM2NcdTAwM2MgOClcbiAjZGVmaW5lIEJVR19HRVRfVEFJTlQoYnVnKVx0KChidWcpLVx1MDAzZWZsYWdzIFx1MDAzZVx1MDAzZSA4KVxuICNlbmRpZlxuQEAgLTExNSw2ICsxMTYsMTYgQEAgZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4gfSlcbiAjZW5kaWZcbiBcbisjZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSAoe1x0XHRcdFx0XHRcXFxuK1x0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1x0XHRcdFx0XFxcbitcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkge1x0XHRcdFx0XHRcXFxuK1x0XHRfX1dBUk5fRkxBR1MoI2NvbmRpdGlvbixcdFx0XHRcdFxcXG4rXHRcdFx0ICAgICBCVUdGTEFHX0RFRkVSUkVEIHxcdFx0XHRcdFxcXG4rXHRcdFx0ICAgICBCVUdGTEFHX1RBSU5UKFRBSU5UX1dBUk4pKTtcdFx0XFxcbitcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbitcdHVubGlrZWx5KF9fcmV0X3dhcm5fb24pO1x0XHRcdFx0XHRcXFxuK30pXG4rXG4gI2lmbmRlZiBXQVJOX09OX09OQ0VcbiAjZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pICh7XHRcdFx0XHRcdFxcXG4gXHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XHRcXFxuQEAgLTEyNSw2ICsxMzYsMTYgQEAgZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4gXHR1bmxpa2VseShfX3JldF93YXJuX29uKTtcdFx0XHRcdFx0XFxcbiB9KVxuICNlbmRpZlxuK1xuKyNkZWZpbmUgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNvbmRpdGlvbikgKHtcdFx0XHRcdFxcXG4rXHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XHRcXFxuK1x0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm5fb24pKSB7XHRcdFx0XHRcdFxcXG4rXHRcdF9fV0FSTl9GTEFHUygjY29uZGl0aW9uLFx0XHRcdFx0XFxcbitcdFx0XHQgICAgIEJVR0ZMQUdfT05DRSB8IEJVR0ZMQUdfREVGRVJSRUQgfFx0XHRcXFxuK1x0XHRcdCAgICAgQlVHRkxBR19UQUlOVChUQUlOVF9XQVJOKSk7XHRcdFxcXG4rXHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHR1bmxpa2VseShfX3JldF93YXJuX29uKTtcdFx0XHRcdFx0XFxcbit9KVxuICNlbmRpZiAvKiBfX1dBUk5fRkxBR1MgKi9cbiBcbiAjaWYgZGVmaW5lZChfX1dBUk5fRkxBR1MpIFx1MDAyNlx1MDAyNiAhZGVmaW5lZChfX1dBUk5fcHJpbnRmKVxuQEAgLTE1OSw2ICsxODAsMTkgQEAgZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4gfSlcbiAjZW5kaWZcbiBcbisjaWZuZGVmIFdBUk5fT05fREVGRVJSRURcbisjZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSAoe1x0XHRcdFx0XHRcXFxuK1x0aW50IF9fcmV0X3dhcm5fb24gPSAhIShjb25kaXRpb24pO1x0XHRcdFx0XFxcbitcdGlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkge1x0XHRcdFx0XHRcXFxuK1x0XHRndWFyZChwcmVlbXB0KSgpO1x0XHRcdFx0XHRcXFxuK1x0XHRwcmludGtfZGVmZXJyZWRfZW50ZXIoKVx0XHRcdFx0XHRcXFxuK1x0XHRfX1dBUk4oKTtcdFx0XHRcdFx0XHRcXFxuK1x0XHRwcmludGtfZGVmZXJyZWRfZXhpdCgpXHRcdFx0XHRcdFxcXG4rXHR9XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHR1bmxpa2VseShfX3JldF93YXJuX29uKTtcdFx0XHRcdFx0XFxcbit9KVxuKyNlbmRpZlxuK1xuICNpZm5kZWYgV0FSTlxuICNkZWZpbmUgV0FSTihjb25kaXRpb24sIGZvcm1hdC4uLikgKHtcdFx0XHRcdFx0XFxcbiBcdGludCBfX3JldF93YXJuX29uID0gISEoY29uZGl0aW9uKTtcdFx0XHRcdFxcXG5AQCAtMTgwLDYgKzIxNCwxMSBAQCBleHRlcm4gX19wcmludGYoMSwgMikgdm9pZCBfX3dhcm5fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTtcbiBcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk5fT04sIDEpXG4gI2VuZGlmXG4gXG4rI2lmbmRlZiBXQVJOX09OX09OQ0VfREVGRVJSRURcbisjZGVmaW5lIFdBUk5fT05fT05DRV9ERUZFUlJFRChjb25kaXRpb24pXHRcdFx0XHRcXFxuK1x0RE9fT05DRV9MSVRFX0lGKGNvbmRpdGlvbiwgV0FSTl9PTl9ERUZFUlJFRCwgMSlcbisjZW5kaWZcbitcbiAjaWZuZGVmIFdBUk5fT05DRVxuICNkZWZpbmUgV0FSTl9PTkNFKGNvbmRpdGlvbiwgZm9ybWF0Li4uKVx0XHRcdFx0XFxcbiBcdERPX09OQ0VfTElURV9JRihjb25kaXRpb24sIFdBUk4sIDEsIGZvcm1hdClcbkBAIC0yMTUsNyArMjU0LDkgQEAgZXh0ZXJuIF9fcHJpbnRmKDEsIDIpIHZvaWQgX193YXJuX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7XG4gfSlcbiAjZW5kaWZcbiBcbisjZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSBXQVJOX09OKGNvbmRpdGlvbilcbiAjZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pIFdBUk5fT04oY29uZGl0aW9uKVxuKyNkZWZpbmUgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNvbmRpdGlvbikgV0FSTl9PTihjb25kaXRpb24pXG4gI2RlZmluZSBXQVJOX09OQ0UoY29uZGl0aW9uLCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpXG4gI2RlZmluZSBXQVJOX1RBSU5UKGNvbmRpdGlvbiwgdGFpbnQsIGZvcm1hdC4uLikgV0FSTihjb25kaXRpb24sIGZvcm1hdClcbiAjZGVmaW5lIFdBUk5fVEFJTlRfT05DRShjb25kaXRpb24sIHRhaW50LCBmb3JtYXQuLi4pIFdBUk4oY29uZGl0aW9uLCBmb3JtYXQpXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbmluZGV4IGI4ODcxNDQ5ZDNjNjk0Li4wZTI4MjQ1N2FiYjkxNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC04NTMsNyArODUzLDcgQEAgdm9pZCB1cGRhdGVfcnFfY2xvY2soc3RydWN0IHJxICpycSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKHNjaGVkX2ZlYXQoV0FSTl9ET1VCTEVfQ0xPQ0spKVxuLVx0XHRXQVJOX09OX09OQ0UocnEtXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIFx1MDAyNiBSUUNGX1VQREFURUQpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIFx1MDAyNiBSUUNGX1VQREFURUQpO1xuIFx0cnEtXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIHw9IFJRQ0ZfVVBEQVRFRDtcbiBcbiBcdGNsb2NrID0gc2NoZWRfY2xvY2tfY3B1KGNwdV9vZihycSkpO1xuQEAgLTE4MDcsNyArMTgwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1Y2xhbXBfcnFfZGVjX2lkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcbiBcdGJ1Y2tldCA9IFx1MDAyNnVjX3JxLVx1MDAzZWJ1Y2tldFt1Y19zZS1cdTAwM2VidWNrZXRfaWRdO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCFidWNrZXQtXHUwMDNldGFza3MpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFidWNrZXQtXHUwMDNldGFza3MpO1xuIFx0aWYgKGxpa2VseShidWNrZXQtXHUwMDNldGFza3MpKVxuIFx0XHRidWNrZXQtXHUwMDNldGFza3MtLTtcbiBcbkBAIC0xODI3LDcgKzE4MjcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdWNsYW1wX3JxX2RlY19pZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXG4gXHQgKiBEZWZlbnNpdmUgcHJvZ3JhbW1pbmc6IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gSWYgaXQgaGFwcGVucyxcbiBcdCAqIGUuZy4gZHVlIHRvIGZ1dHVyZSBtb2RpZmljYXRpb24sIHdhcm4gYW5kIGZpeCB1cCB0aGUgZXhwZWN0ZWQgdmFsdWUuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShidWNrZXQtXHUwMDNldmFsdWUgXHUwMDNlIHJxX2NsYW1wKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChidWNrZXQtXHUwMDNldmFsdWUgXHUwMDNlIHJxX2NsYW1wKTtcbiBcdGlmIChidWNrZXQtXHUwMDNldmFsdWUgXHUwMDNlPSBycV9jbGFtcCkge1xuIFx0XHRia3RfY2xhbXAgPSB1Y2xhbXBfcnFfbWF4X3ZhbHVlKHJxLCBjbGFtcF9pZCwgdWNfc2UtXHUwMDNldmFsdWUpO1xuIFx0XHR1Y2xhbXBfcnFfc2V0KHJxLCBjbGFtcF9pZCwgYmt0X2NsYW1wKTtcbkBAIC0yMjEwLDcgKzIyMTAsNyBAQCB2b2lkIGFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpXG4gXG4gdm9pZCBkZWFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKGZsYWdzIFx1MDAyNiBERVFVRVVFX1NMRUVQKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChmbGFncyBcdTAwMjYgREVRVUVVRV9TTEVFUCk7XG4gXG4gXHRXUklURV9PTkNFKHAtXHUwMDNlb25fcnEsIFRBU0tfT05fUlFfTUlHUkFUSU5HKTtcbiBcdEFTU0VSVF9FWENMVVNJVkVfV1JJVEVSKHAtXHUwMDNlb25fcnEpO1xuQEAgLTI1MTYsNyArMjUxNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnEgKm1vdmVfcXVldWVkX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHJxX2ZsYWdzICpyZixcbiBcdHJxID0gY3B1X3JxKG5ld19jcHUpO1xuIFxuIFx0cnFfbG9jayhycSwgcmYpO1xuLVx0V0FSTl9PTl9PTkNFKHRhc2tfY3B1KHApICE9IG5ld19jcHUpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfY3B1KHApICE9IG5ld19jcHUpO1xuIFx0YWN0aXZhdGVfdGFzayhycSwgcCwgMCk7XG4gXHR3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7XG4gXG5AQCAtMjYwMiw3ICsyNjAyLDcgQEAgc3RhdGljIGludCBtaWdyYXRpb25fY3B1X3N0b3Aodm9pZCAqZGF0YSlcbiBcdCAqIElmIHdlIHdlcmUgcGFzc2VkIGEgcGVuZGluZywgdGhlbiAtXHUwMDNlc3RvcF9wZW5kaW5nIHdhcyBzZXQsIHRodXNcbiBcdCAqIHAtXHUwMDNlbWlncmF0aW9uX3BlbmRpbmcgbXVzdCBoYXZlIHJlbWFpbmVkIHN0YWJsZS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKHBlbmRpbmcgXHUwMDI2XHUwMDI2IHBlbmRpbmcgIT0gcC1cdTAwM2VtaWdyYXRpb25fcGVuZGluZyk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocGVuZGluZyBcdTAwMjZcdTAwMjYgcGVuZGluZyAhPSBwLVx1MDAzZW1pZ3JhdGlvbl9wZW5kaW5nKTtcbiBcbiBcdC8qXG4gXHQgKiBJZiB0YXNrX3JxKHApICE9IHJxLCBpdCBjYW5ub3QgYmUgbWlncmF0ZWQgaGVyZSwgYmVjYXVzZSB3ZSdyZVxuQEAgLTI2NjEsNyArMjY2MSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0aW9uX2NwdV9zdG9wKHZvaWQgKmRhdGEpXG4gXHRcdCAqIGRldGVybWluZSBpc19taWdyYXRpb25fZGlzYWJsZWQoKSBhbmQgc28gaGF2ZSB0byBjaGFzZSBhZnRlclxuIFx0XHQgKiBpdC5cbiBcdFx0ICovXG4tXHRcdFdBUk5fT05fT05DRSghcGVuZGluZy1cdTAwM2VzdG9wX3BlbmRpbmcpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXBlbmRpbmctXHUwMDNlc3RvcF9wZW5kaW5nKTtcbiBcdFx0cHJlZW1wdF9kaXNhYmxlKCk7XG4gXHRcdHJxX3VubG9jayhycSwgXHUwMDI2cmYpO1xuIFx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwLVx1MDAzZXBpX2xvY2ssIHJmLmZsYWdzKTtcbkBAIC0zMDA0LDcgKzMwMDQsNyBAQCBzdGF0aWMgaW50IGFmZmluZV9tb3ZlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnFfZmxhZ1xuIFx0ICpcbiBcdCAqIEVpdGhlciB3YXksIHdlIHJlYWxseSBzaG91bGQgaGF2ZSBhIEBwZW5kaW5nIGhlcmUuXG4gXHQgKi9cbi1cdGlmIChXQVJOX09OX09OQ0UoIXBlbmRpbmcpKSB7XG4rXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFwZW5kaW5nKSkge1xuIFx0XHR0YXNrX3JxX3VubG9jayhycSwgcCwgcmYpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC0zMTE2LDkgKzMxMTYsOSBAQCBzdGF0aWMgaW50IF9fc2V0X2NwdXNfYWxsb3dlZF9wdHJfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHAgPT0gY3VycmVudCBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdCBpc19taWdyYXRpb25fZGlzYWJsZWQocCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHQgIWNwdW1hc2tfdGVzdF9jcHUodGFza19jcHUocCksIGN0eC1cdTAwM2VuZXdfbWFzaykpKSB7XG4rXHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocCA9PSBjdXJyZW50IFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0XHQgIGlzX21pZ3JhdGlvbl9kaXNhYmxlZChwKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdFx0ICAhY3B1bWFza190ZXN0X2NwdSh0YXNrX2NwdShwKSwgY3R4LVx1MDAzZW5ld19tYXNrKSkpIHtcbiBcdFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC0zMjY3LDcgKzMyNjcsNyBAQCB2b2lkIGZvcmNlX2NvbXBhdGlibGVfY3B1c19hbGxvd2VkX3B0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHRcdFx0XHRjcHVtYXNrX3ByX2FyZ3Mob3ZlcnJpZGVfbWFzaykpO1xuIFx0fVxuIFxuLVx0V0FSTl9PTihzZXRfY3B1c19hbGxvd2VkX3B0cihwLCBvdmVycmlkZV9tYXNrKSk7XG4rXHRXQVJOX09OX0RFRkVSUkVEKHNldF9jcHVzX2FsbG93ZWRfcHRyKHAsIG92ZXJyaWRlX21hc2spKTtcbiBvdXRfZnJlZV9tYXNrOlxuIFx0Y3B1c19yZWFkX3VubG9jaygpO1xuIFx0ZnJlZV9jcHVtYXNrX3ZhcihuZXdfbWFzayk7XG5AQCAtMzI5Myw3ICszMjkzLDcgQEAgdm9pZCByZWxheF9jb21wYXRpYmxlX2NwdXNfYWxsb3dlZF9wdHIoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0ICogQ3B1c2V0IG1hc2tpbmcgd2lsbCBiZSBkb25lIHRoZXJlIHRvby5cbiBcdCAqL1xuIFx0cmV0ID0gX19zY2hlZF9zZXRhZmZpbml0eShwLCBcdTAwMjZhYyk7XG4tXHRXQVJOX09OX09OQ0UocmV0KTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQpO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NNUFxuQEAgLTMzMDYsMTYgKzMzMDYsMTYgQEAgdm9pZCBzZXRfdGFza19jcHUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgbmV3X2NwdSlcbiBcdCAqIFdlIHNob3VsZCBuZXZlciBjYWxsIHNldF90YXNrX2NwdSgpIG9uIGEgYmxvY2tlZCB0YXNrLFxuIFx0ICogdHR3dSgpIHdpbGwgc29ydCBvdXQgdGhlIHBsYWNlbWVudC5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKHN0YXRlICE9IFRBU0tfUlVOTklORyBcdTAwMjZcdTAwMjYgc3RhdGUgIT0gVEFTS19XQUtJTkcgXHUwMDI2XHUwMDI2ICFwLVx1MDAzZW9uX3JxKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChzdGF0ZSAhPSBUQVNLX1JVTk5JTkcgXHUwMDI2XHUwMDI2IHN0YXRlICE9IFRBU0tfV0FLSU5HIFx1MDAyNlx1MDAyNiAhcC1cdTAwM2Vvbl9ycSk7XG4gXG4gXHQvKlxuIFx0ICogTWlncmF0aW5nIGZhaXIgY2xhc3MgdGFzayBtdXN0IGhhdmUgcC1cdTAwM2Vvbl9ycSA9IFRBU0tfT05fUlFfTUlHUkFUSU5HLFxuIFx0ICogYmVjYXVzZSBzY2hlZHN0YXRfd2FpdF97c3RhcnQsZW5kfSByZWJhc2UgbWlncmF0aW5nIHRhc2sncyB3YWl0X3N0YXJ0XG4gXHQgKiB0aW1lIHJlbHlpbmcgb24gcC1cdTAwM2Vvbl9ycS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKHN0YXRlID09IFRBU0tfUlVOTklORyBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICBwLVx1MDAzZXNjaGVkX2NsYXNzID09IFx1MDAyNmZhaXJfc2NoZWRfY2xhc3MgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgKHAtXHUwMDNlb25fcnEgXHUwMDI2XHUwMDI2ICF0YXNrX29uX3JxX21pZ3JhdGluZyhwKSkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHN0YXRlID09IFRBU0tfUlVOTklORyBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgICBwLVx1MDAzZXNjaGVkX2NsYXNzID09IFx1MDAyNmZhaXJfc2NoZWRfY2xhc3MgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICAgKHAtXHUwMDNlb25fcnEgXHUwMDI2XHUwMDI2ICF0YXNrX29uX3JxX21pZ3JhdGluZyhwKSkpO1xuIFxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIFx0LypcbkBAIC0zMzI4LDE1ICszMzI4LDE1IEBAIHZvaWQgc2V0X3Rhc2tfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IG5ld19jcHUpXG4gXHQgKiBGdXJ0aGVybW9yZSwgYWxsIHRhc2tfcnEgdXNlcnMgc2hvdWxkIGFjcXVpcmUgYm90aCBsb2Nrcywgc2VlXG4gXHQgKiB0YXNrX3JxX2xvY2soKS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKGRlYnVnX2xvY2tzIFx1MDAyNlx1MDAyNiAhKGxvY2tkZXBfaXNfaGVsZChcdTAwMjZwLVx1MDAzZXBpX2xvY2spIHx8XG4tXHRcdFx0XHQgICAgICBsb2NrZGVwX2lzX2hlbGQoX19ycV9sb2NrcCh0YXNrX3JxKHApKSkpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkZWJ1Z19sb2NrcyBcdTAwMjZcdTAwMjYgIShsb2NrZGVwX2lzX2hlbGQoXHUwMDI2cC1cdTAwM2VwaV9sb2NrKSB8fFxuK1x0XHRcdFx0XHQgICAgICAgbG9ja2RlcF9pc19oZWxkKF9fcnFfbG9ja3AodGFza19ycShwKSkpKSk7XG4gI2VuZGlmXG4gXHQvKlxuIFx0ICogQ2xlYXJseSwgbWlncmF0aW5nIHRhc2tzIHRvIG9mZmxpbmUgQ1BVcyBpcyBhIGZhaXJseSBkYWZ0IHRoaW5nLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UoIWNwdV9vbmxpbmUobmV3X2NwdSkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFjcHVfb25saW5lKG5ld19jcHUpKTtcbiBcbi1cdFdBUk5fT05fT05DRShpc19taWdyYXRpb25fZGlzYWJsZWQocCkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGlzX21pZ3JhdGlvbl9kaXNhYmxlZChwKSk7XG4gXG4gXHR0cmFjZV9zY2hlZF9taWdyYXRlX3Rhc2socCwgbmV3X2NwdSk7XG4gXG5AQCAtMzgwMywxMCArMzgwMywxMCBAQCB2b2lkIHNjaGVkX3R0d3VfcGVuZGluZyh2b2lkICphcmcpXG4gXHR1cGRhdGVfcnFfY2xvY2socnEpO1xuIFxuIFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0LCBsbGlzdCwgd2FrZV9lbnRyeS5sbGlzdCkge1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHAtXHUwMDNlb25fY3B1KSlcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZW9uX2NwdSkpXG4gXHRcdFx0c21wX2NvbmRfbG9hZF9hY3F1aXJlKFx1MDAyNnAtXHUwMDNlb25fY3B1LCAhVkFMKTtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRSh0YXNrX2NwdShwKSAhPSBjcHVfb2YocnEpKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX2NwdShwKSAhPSBjcHVfb2YocnEpKSlcbiBcdFx0XHRzZXRfdGFza19jcHUocCwgY3B1X29mKHJxKSk7XG4gXG4gXHRcdHR0d3VfZG9fYWN0aXZhdGUocnEsIHAsIHAtXHUwMDNlc2NoZWRfcmVtb3RlX3dha2V1cCA/IFdGX01JR1JBVEVEIDogMCwgXHUwMDI2cmYpO1xuQEAgLTQwMDMsOCArNDAwMyw4IEBAIGJvb2wgdHR3dV9zdGF0ZV9tYXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBzdGF0ZSwgaW50ICpzdWNjZXNzKVxuIFx0aW50IG1hdGNoO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1BSRUVNUFQpKSB7XG4tXHRcdFdBUk5fT05fT05DRSgoc3RhdGUgXHUwMDI2IFRBU0tfUlRMT0NLX1dBSVQpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAgc3RhdGUgIT0gVEFTS19SVExPQ0tfV0FJVCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgoc3RhdGUgXHUwMDI2IFRBU0tfUlRMT0NLX1dBSVQpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgICAgc3RhdGUgIT0gVEFTS19SVExPQ0tfV0FJVCk7XG4gXHR9XG4gXG4gXHQqc3VjY2VzcyA9ICEhKG1hdGNoID0gX190YXNrX3N0YXRlX21hdGNoKHAsIHN0YXRlKSk7XG5AQCAtNTc0NSw3ICs1NzQ1LDcgQEAgc3RhdGljIHZvaWQgc2NoZWRfdGlja19yZW1vdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRcdCAqIHdlIGFyZSBhbHdheXMgc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHByb3h5IChvbmx5IGFcbiBcdFx0XHQgKiBzaW5nbGUgdGFzayBpcyBydW5uaW5nKS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRXQVJOX09OX09OQ0UocnEtXHUwMDNlY3VyciAhPSBycS1cdTAwM2Vkb25vcik7XG4rXHRcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZWN1cnIgIT0gcnEtXHUwMDNlZG9ub3IpO1xuIFx0XHRcdHVwZGF0ZV9ycV9jbG9jayhycSk7XG4gXG4gXHRcdFx0aWYgKCFpc19pZGxlX3Rhc2soY3VycikpIHtcbkBAIC01NzU0LDcgKzU3NTQsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZF90aWNrX3JlbW90ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdFx0XHQgKiByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHR1NjQgZGVsdGEgPSBycV9jbG9ja190YXNrKHJxKSAtIGN1cnItXHUwMDNlc2UuZXhlY19zdGFydDtcbi1cdFx0XHRcdFdBUk5fT05fT05DRShkZWx0YSBcdTAwM2UgKHU2NClOU0VDX1BFUl9TRUMgKiAzMCk7XG4rXHRcdFx0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGVsdGEgXHUwMDNlICh1NjQpTlNFQ19QRVJfU0VDICogMzApO1xuIFx0XHRcdH1cbiBcdFx0XHRjdXJyLVx1MDAzZXNjaGVkX2NsYXNzLVx1MDAzZXRhc2tfdGljayhycSwgY3VyciwgMCk7XG4gXG5AQCAtNTc2OSw3ICs1NzY5LDcgQEAgc3RhdGljIHZvaWQgc2NoZWRfdGlja19yZW1vdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0ICogZmlyc3QgdXBkYXRlIHN0YXRlIHRvIHJlZmxlY3QgaG90cGx1ZyBhY3Rpdml0eSBpZiByZXF1aXJlZC5cbiBcdCAqL1xuIFx0b3MgPSBhdG9taWNfZmV0Y2hfYWRkX3VubGVzcyhcdTAwMjZ0d29yay1cdTAwM2VzdGF0ZSwgLTEsIFRJQ0tfU0NIRURfUkVNT1RFX1JVTk5JTkcpO1xuLVx0V0FSTl9PTl9PTkNFKG9zID09IFRJQ0tfU0NIRURfUkVNT1RFX09GRkxJTkUpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKG9zID09IFRJQ0tfU0NIRURfUkVNT1RFX09GRkxJTkUpO1xuIFx0aWYgKG9zID09IFRJQ0tfU0NIRURfUkVNT1RFX1JVTk5JTkcpXG4gXHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBkd29yaywgSFopO1xuIH1cbkBAIC02MTk2LDcgKzYxOTYsNyBAQCBwaWNrX25leHRfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIHN0cnVjdCBycV9mbGFncyAqcmYpXG4gXHRcdFx0ICogRm9yIHJvYnVzdG5lc3MsIHVwZGF0ZSB0aGUgbWluX3ZydW50aW1lX2ZpIGZvclxuIFx0XHRcdCAqIHVuY29uc3RyYWluZWQgcGlja3MgYXMgd2VsbC5cbiBcdFx0XHQgKi9cbi1cdFx0XHRXQVJOX09OX09OQ0UoZmlfYmVmb3JlKTtcbitcdFx0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZmlfYmVmb3JlKTtcbiBcdFx0XHR0YXNrX3ZydW50aW1lX3VwZGF0ZShycSwgbmV4dCwgZmFsc2UpO1xuIFx0XHRcdGdvdG8gb3V0X3NldF9uZXh0O1xuIFx0XHR9XG5AQCAtNjI3NCw3ICs2Mjc0LDcgQEAgcGlja19uZXh0X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxuIFx0cnEtXHUwMDNlY29yZV9zY2hlZF9zZXEgPSBycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfcGlja19zZXE7XG4gXG4gXHQvKiBTb21ldGhpbmcgc2hvdWxkIGhhdmUgYmVlbiBzZWxlY3RlZCBmb3IgY3VycmVudCBDUFUgKi9cbi1cdFdBUk5fT05fT05DRSghbmV4dCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIW5leHQpO1xuIFxuIFx0LypcbiBcdCAqIFJlc2NoZWR1bGUgc2libGluZ3NcbkBAIC02MzE3LDcgKzYzMTcsNyBAQCBwaWNrX25leHRfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIHN0cnVjdCBycV9mbGFncyAqcmYpXG4gXHRcdH1cbiBcbiBcdFx0LyogRGlkIHdlIGJyZWFrIEwxVEYgbWl0aWdhdGlvbiByZXF1aXJlbWVudHM/ICovXG4tXHRcdFdBUk5fT05fT05DRSghY29va2llX21hdGNoKG5leHQsIHJxX2ktXHUwMDNlY29yZV9waWNrKSk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghY29va2llX21hdGNoKG5leHQsIHJxX2ktXHUwMDNlY29yZV9waWNrKSk7XG4gXG4gXHRcdGlmIChycV9pLVx1MDAzZWN1cnIgPT0gcnFfaS1cdTAwM2Vjb3JlX3BpY2spIHtcbiBcdFx0XHRycV9pLVx1MDAzZWNvcmVfcGljayA9IE5VTEw7XG5AQCAtNjcxNyw3ICs2NzE3LDcgQEAgc3RhdGljIHZvaWQgcHJveHlfbWlncmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYsXG4gXHRzdHJ1Y3QgcnEgKnRhcmdldF9ycSA9IGNwdV9ycSh0YXJnZXRfY3B1KTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xuLVx0V0FSTl9PTihwID09IHJxLVx1MDAzZWN1cnIpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRChwID09IHJxLVx1MDAzZWN1cnIpO1xuIFx0LypcbiBcdCAqIFNpbmNlIHdlIGFyZSBtaWdyYXRpbmcgYSBibG9ja2VkIGRvbm9yLCBpdCBjb3VsZCBiZSBycS1cdTAwM2Vkb25vcixcbiBcdCAqIGFuZCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHJlZmVyZW5jZXMgZnJvbSB0aGlzXG5AQCAtNjc0OSw3ICs2NzQ5LDcgQEAgc3RhdGljIHZvaWQgcHJveHlfZm9yY2VfcmV0dXJuKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYsXG4gXHRpbnQgY3B1LCB3YWtlX2ZsYWcgPSBXRl9UVFdVO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XG4tXHRXQVJOX09OKHAgPT0gcnEtXHUwMDNlY3Vycik7XG4rXHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gcnEtXHUwMDNlY3Vycik7XG4gXG4gXHRpZiAocCA9PSBycS1cdTAwM2Vkb25vcilcbiBcdFx0cHJveHlfcmVzY2hlZF9pZGxlKHJxKTtcbkBAIC02OTUxLDcgKzY5NTEsNyBAQCBmaW5kX3Byb3h5X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpkb25vciwgc3RydWN0IHJxX2ZsYWdzICpyZilcbiBcdFx0ICogZ3VhcmFudGVlIGl0cyBleGlzdGVuY2UsIGFzIHBlciB0dHd1X3JlbW90ZSgpLlxuIFx0XHQgKi9cbiBcdH1cbi1cdFdBUk5fT05fT05DRShvd25lciBcdTAwMjZcdTAwMjYgIW93bmVyLVx1MDAzZW9uX3JxKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChvd25lciBcdTAwMjZcdTAwMjYgIW93bmVyLVx1MDAzZW9uX3JxKTtcbiBcdHJldHVybiBvd25lcjtcbiBcbiBkZWFjdGl2YXRlOlxuQEAgLTc2MzEsOCArNzYzMSw4IEBAIHZvaWQgcnRfbXV0ZXhfc2V0cHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaylcbiBcdCAqIHJlYWwgbmVlZCB0byBib29zdC5cbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KHAgPT0gcnEtXHUwMDNlaWRsZSkpIHtcbi1cdFx0V0FSTl9PTihwICE9IHJxLVx1MDAzZWN1cnIpO1xuLVx0XHRXQVJOX09OKHAtXHUwMDNlcGlfYmxvY2tlZF9vbik7XG4rXHRcdFdBUk5fT05fREVGRVJSRUQocCAhPSBycS1cdTAwM2VjdXJyKTtcbitcdFx0V0FSTl9PTl9ERUZFUlJFRChwLVx1MDAzZXBpX2Jsb2NrZWRfb24pO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG5AQCAtODQ2Myw3ICs4NDYzLDcgQEAgc3RhdGljIHZvaWQgYmFsYW5jZV9wdXNoX3NldChpbnQgY3B1LCBib29sIG9uKVxuIFxuIFx0cnFfbG9ja19pcnFzYXZlKHJxLCBcdTAwMjZyZik7XG4gXHRpZiAob24pIHtcbi1cdFx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2spO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXHUwMDNlYmFsYW5jZV9jYWxsYmFjayk7XG4gXHRcdHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPSBcdTAwMjZiYWxhbmNlX3B1c2hfY2FsbGJhY2s7XG4gXHR9IGVsc2UgaWYgKHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPT0gXHUwMDI2YmFsYW5jZV9wdXNoX2NhbGxiYWNrKSB7XG4gXHRcdHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgPSBOVUxMO1xuQEAgLTExMTUwLDcgKzExMTUwLDcgQEAgc3RydWN0IHNjaGVkX2NoYW5nZV9jdHggKnNjaGVkX2NoYW5nZV9iZWdpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludFxuIFx0ICogTXVzdCBleGNsdXNpdmVseSB1c2UgbWF0Y2hlZCBmbGFncyBzaW5jZSB0aGlzIGlzIGJvdGggZGVxdWV1ZSBhbmRcbiBcdCAqIGVucXVldWUuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShmbGFncyBcdTAwMjYgMHhGRkZGMDAwMCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZmxhZ3MgXHUwMDI2IDB4RkZGRjAwMDApO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XG4gXG5AQCAtMTExOTgsNyArMTExOTgsNyBAQCB2b2lkIHNjaGVkX2NoYW5nZV9lbmQoc3RydWN0IHNjaGVkX2NoYW5nZV9jdHggKmN0eClcbiBcdC8qXG4gXHQgKiBDaGFuZ2luZyBjbGFzcyB3aXRob3V0ICpRVUVVRV9DTEFTUyBpcyBiYWQuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRShwLVx1MDAzZXNjaGVkX2NsYXNzICE9IGN0eC1cdTAwM2VjbGFzcyBcdTAwMjZcdTAwMjYgIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IEVOUVVFVUVfQ0xBU1MpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjaGVkX2NsYXNzICE9IGN0eC1cdTAwM2VjbGFzcyBcdTAwMjZcdTAwMjYgIShjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IEVOUVVFVUVfQ0xBU1MpKTtcbiBcbiBcdGlmICgoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBFTlFVRVVFX0NMQVNTKSBcdTAwMjZcdTAwMjYgcC1cdTAwM2VzY2hlZF9jbGFzcy1cdTAwM2Vzd2l0Y2hpbmdfdG8pXG4gXHRcdHAtXHUwMDNlc2NoZWRfY2xhc3MtXHUwMDNlc3dpdGNoaW5nX3RvKHJxLCBwKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZV9zY2hlZC5jIGIva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuY1xuaW5kZXggNzNiNmIyNDI2OTExOWIuLmVjODhlZDdkOGVlODc3IDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuY1xuKysrIGIva2VybmVsL3NjaGVkL2NvcmVfc2NoZWQuY1xuQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2NoZWRfY29yZV91cGRhdGVfY29va2llKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdCAqIGEgY29va2llIHVudGlsIGFmdGVyIHdlJ3ZlIHJlbW92ZWQgaXQsIHdlIG11c3QgaGF2ZSBjb3JlIHNjaGVkdWxpbmdcbiBcdCAqIGVuYWJsZWQgaGVyZS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKChwLVx1MDAzZWNvcmVfY29va2llIHx8IGNvb2tpZSkgXHUwMDI2XHUwMDI2ICFzY2hlZF9jb3JlX2VuYWJsZWQocnEpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgocC1cdTAwM2Vjb3JlX2Nvb2tpZSB8fCBjb29raWUpIFx1MDAyNlx1MDAyNiAhc2NoZWRfY29yZV9lbmFibGVkKHJxKSk7XG4gXG4gXHRpZiAoc2NoZWRfY29yZV9lbnF1ZXVlZChwKSlcbiBcdFx0c2NoZWRfY29yZV9kZXF1ZXVlKHJxLCBwLCBERVFVRVVFX1NBVkUpO1xuQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIF9fc2NoZWRfY29yZV9hY2NvdW50X2ZvcmNlaWRsZShzdHJ1Y3QgcnEgKnJxKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XG4gXG4tXHRXQVJOX09OX09OQ0UoIXJxLVx1MDAzZWNvcmUtXHUwMDNlY29yZV9mb3JjZWlkbGVfY291bnQpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX2NvdW50KTtcbiBcbiBcdGlmIChycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX3N0YXJ0ID09IDApXG4gXHRcdHJldHVybjtcbkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBfX3NjaGVkX2NvcmVfYWNjb3VudF9mb3JjZWlkbGUoc3RydWN0IHJxICpycSlcbiBcbiBcdHJxLVx1MDAzZWNvcmUtXHUwMDNlY29yZV9mb3JjZWlkbGVfc3RhcnQgPSBub3c7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX29jY3VwYXRpb24pKSB7XG4rXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX29jY3VwYXRpb24pKSB7XG4gXHRcdC8qIGNhbid0IGJlIGZvcmNlZCBpZGxlIHdpdGhvdXQgYSBydW5uaW5nIHRhc2sgKi9cbiBcdH0gZWxzZSBpZiAocnEtXHUwMDNlY29yZS1cdTAwM2Vjb3JlX2ZvcmNlaWRsZV9jb3VudCBcdTAwM2UgMSB8fFxuIFx0XHQgICBycS1cdTAwM2Vjb3JlLVx1MDAzZWNvcmVfZm9yY2VpZGxlX29jY3VwYXRpb24gXHUwMDNlIDEpIHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9jcHVkZWFkbGluZS5jXG5pbmRleCAwYTJiN2UzMGZkMTBjMS4uZTMwNWE4ZTk5M2UyN2MgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmNcbkBAIC0xNDksNyArMTQ5LDcgQEAgaW50IGNwdWRsX2ZpbmQoc3RydWN0IGNwdWRsICpjcCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0fSBlbHNlIHtcbiBcdFx0aW50IGJlc3RfY3B1ID0gY3B1ZGxfbWF4aW11bShjcCk7XG4gXG4tXHRcdFdBUk5fT04oYmVzdF9jcHUgIT0gLTEgXHUwMDI2XHUwMDI2ICFjcHVfcHJlc2VudChiZXN0X2NwdSkpO1xuK1x0XHRXQVJOX09OX0RFRkVSUkVEKGJlc3RfY3B1ICE9IC0xIFx1MDAyNlx1MDAyNiAhY3B1X3ByZXNlbnQoYmVzdF9jcHUpKTtcbiBcbiBcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoYmVzdF9jcHUsIFx1MDAyNnAtXHUwMDNlY3B1c19tYXNrKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGRsX3RpbWVfYmVmb3JlKGRsX3NlLVx1MDAzZWRlYWRsaW5lLCBjcC1cdTAwM2VlbGVtZW50c1swXS5kbCkpIHtcbkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBjcHVkbF9jbGVhcihzdHJ1Y3QgY3B1ZGwgKmNwLCBpbnQgY3B1LCBib29sIG9ubGluZSlcbiBcdGludCBvbGRfaWR4LCBuZXdfY3B1O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdFdBUk5fT04oIWNwdV9wcmVzZW50KGNwdSkpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghY3B1X3ByZXNlbnQoY3B1KSk7XG4gXG4gXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3AtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIGNwdWRsX3NldChzdHJ1Y3QgY3B1ZGwgKmNwLCBpbnQgY3B1LCB1NjQgZGwpXG4gXHRpbnQgb2xkX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRXQVJOX09OKCFjcHVfcHJlc2VudChjcHUpKTtcbitcdFdBUk5fT05fREVGRVJSRUQoIWNwdV9wcmVzZW50KGNwdSkpO1xuIFxuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jXG5pbmRleCA3ZGI0Yzg3ZGY4M2IwYS4uODYzYWM3NTA5MTkyZjcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2RlYWRsaW5lLmNcbkBAIC0yMTcsOCArMjE3LDggQEAgdm9pZCBfX2FkZF9ydW5uaW5nX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSlcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTtcbiBcdGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgKz0gZGxfYnc7XG4tXHRXQVJOX09OX09OQ0UoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cbi1cdFdBUk5fT05fT05DRShkbF9ycS1cdTAwM2VydW5uaW5nX2J3IFx1MDAzZSBkbF9ycS1cdTAwM2V0aGlzX2J3KTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkbF9ycS1cdTAwM2VydW5uaW5nX2J3IFx1MDAzYyBvbGQpOyAvKiBvdmVyZmxvdyAqL1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgXHUwMDNlIGRsX3JxLVx1MDAzZXRoaXNfYncpO1xuIFx0Lyoga2ljayBjcHVmcmVxIChzZWUgdGhlIGNvbW1lbnQgaW4ga2VybmVsL3NjaGVkL3NjaGVkLmgpLiAqL1xuIFx0Y3B1ZnJlcV91cGRhdGVfdXRpbChycV9vZl9kbF9ycShkbF9ycSksIDApO1xuIH1cbkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBfX3N1Yl9ydW5uaW5nX2J3KHU2NCBkbF9idywgc3RydWN0IGRsX3JxICpkbF9ycSlcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnFfb2ZfZGxfcnEoZGxfcnEpKTtcbiBcdGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgLT0gZGxfYnc7XG4tXHRXQVJOX09OX09OQ0UoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2Ugb2xkKTsgLyogdW5kZXJmbG93ICovXG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2Ugb2xkKTsgLyogdW5kZXJmbG93ICovXG4gXHRpZiAoZGxfcnEtXHUwMDNlcnVubmluZ19idyBcdTAwM2Ugb2xkKVxuIFx0XHRkbF9ycS1cdTAwM2VydW5uaW5nX2J3ID0gMDtcbiBcdC8qIGtpY2sgY3B1ZnJlcSAoc2VlIHRoZSBjb21tZW50IGluIGtlcm5lbC9zY2hlZC9zY2hlZC5oKS4gKi9cbkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBfX2FkZF9ycV9idyh1NjQgZGxfYncsIHN0cnVjdCBkbF9ycSAqZGxfcnEpXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxX29mX2RsX3JxKGRsX3JxKSk7XG4gXHRkbF9ycS1cdTAwM2V0aGlzX2J3ICs9IGRsX2J3O1xuLVx0V0FSTl9PTl9PTkNFKGRsX3JxLVx1MDAzZXRoaXNfYncgXHUwMDNjIG9sZCk7IC8qIG92ZXJmbG93ICovXG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGxfcnEtXHUwMDNldGhpc19idyBcdTAwM2Mgb2xkKTsgLyogb3ZlcmZsb3cgKi9cbiB9XG4gXG4gc3RhdGljIGlubGluZVxuQEAgLTI1NCwxMCArMjU0LDEwIEBAIHZvaWQgX19zdWJfcnFfYncodTY0IGRsX2J3LCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKVxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycV9vZl9kbF9ycShkbF9ycSkpO1xuIFx0ZGxfcnEtXHUwMDNldGhpc19idyAtPSBkbF9idztcbi1cdFdBUk5fT05fT05DRShkbF9ycS1cdTAwM2V0aGlzX2J3IFx1MDAzZSBvbGQpOyAvKiB1bmRlcmZsb3cgKi9cbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChkbF9ycS1cdTAwM2V0aGlzX2J3IFx1MDAzZSBvbGQpOyAvKiB1bmRlcmZsb3cgKi9cbiBcdGlmIChkbF9ycS1cdTAwM2V0aGlzX2J3IFx1MDAzZSBvbGQpXG4gXHRcdGRsX3JxLVx1MDAzZXRoaXNfYncgPSAwO1xuLVx0V0FSTl9PTl9PTkNFKGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgXHUwMDNlIGRsX3JxLVx1MDAzZXRoaXNfYncpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX3JxLVx1MDAzZXJ1bm5pbmdfYncgXHUwMDNlIGRsX3JxLVx1MDAzZXRoaXNfYncpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lXG5AQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgY2FuY2VsX2luYWN0aXZlX3RpbWVyKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlKVxuIFxuIHN0YXRpYyB2b2lkIGRsX2NoYW5nZV91dGlsaXphdGlvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBuZXdfYncpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlZGwuZmxhZ3MgXHUwMDI2IFNDSEVEX0ZMQUdfU1VHT1YpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlZGwuZmxhZ3MgXHUwMDI2IFNDSEVEX0ZMQUdfU1VHT1YpO1xuIFxuIFx0aWYgKHRhc2tfb25fcnFfcXVldWVkKHApKVxuIFx0XHRyZXR1cm47XG5AQCAtNDE2LDcgKzQxNiw3IEBAIHN0YXRpYyB2b2lkIHRhc2tfbm9uX2NvbnRlbmRpbmcoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIGJvb2wgZGxfdGFzaylcbiBcdGlmIChkbF9lbnRpdHlfaXNfc3BlY2lhbChkbF9zZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdFdBUk5fT04oZGxfc2UtXHUwMDNlZGxfbm9uX2NvbnRlbmRpbmcpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRChkbF9zZS1cdTAwM2VkbF9ub25fY29udGVuZGluZyk7XG4gXG4gXHR6ZXJvbGFnX3RpbWUgPSBkbF9zZS1cdTAwM2VkZWFkbGluZSAtXG4gXHRcdCBkaXY2NF9sb25nKChkbF9zZS1cdTAwM2VydW50aW1lICogZGxfc2UtXHUwMDNlZGxfcGVyaW9kKSxcbkBAIC01ODIsNyArNTgyLDcgQEAgc3RhdGljIHZvaWQgZW5xdWV1ZV9wdXNoYWJsZV9kbF90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4gXHRzdHJ1Y3QgcmJfbm9kZSAqbGVmdG1vc3Q7XG4gXG4tXHRXQVJOX09OX09OQ0UoIVJCX0VNUFRZX05PREUoXHUwMDI2cC1cdTAwM2VwdXNoYWJsZV9kbF90YXNrcykpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFSQl9FTVBUWV9OT0RFKFx1MDAyNnAtXHUwMDNlcHVzaGFibGVfZGxfdGFza3MpKTtcbiBcbiBcdGxlZnRtb3N0ID0gcmJfYWRkX2NhY2hlZChcdTAwMjZwLVx1MDAzZXB1c2hhYmxlX2RsX3Rhc2tzLFxuIFx0XHRcdFx0IFx1MDAyNnJxLVx1MDAzZWRsLnB1c2hhYmxlX2RsX3Rhc2tzX3Jvb3QsXG5AQCAtNjY0LDcgKzY2NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnEgKmRsX3Rhc2tfb2ZmbGluZV9taWdyYXRpb24oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwXG4gXHRcdFx0ICogRmFpbGVkIHRvIGZpbmQgYW55IHN1aXRhYmxlIENQVS5cbiBcdFx0XHQgKiBUaGUgdGFzayB3aWxsIG5ldmVyIGNvbWUgYmFjayFcbiBcdFx0XHQgKi9cbi1cdFx0XHRXQVJOX09OX09OQ0UoZGxfYmFuZHdpZHRoX2VuYWJsZWQoKSk7XG4rXHRcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRsX2JhbmR3aWR0aF9lbmFibGVkKCkpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogSWYgYWRtaXNzaW9uIGNvbnRyb2wgaXMgZGlzYWJsZWQgd2VcbkBAIC03NTYsOCArNzU2LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25ld19kbF9lbnRpdHkoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXG4gXHRzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpO1xuIFx0c3RydWN0IHJxICpycSA9IHJxX29mX2RsX3JxKGRsX3JxKTtcbiBcbi1cdFdBUk5fT04oaXNfZGxfYm9vc3RlZChkbF9zZSkpO1xuLVx0V0FSTl9PTihkbF90aW1lX2JlZm9yZShycV9jbG9jayhycSksIGRsX3NlLVx1MDAzZWRlYWRsaW5lKSk7XG4rXHRXQVJOX09OX0RFRkVSUkVEKGlzX2RsX2Jvb3N0ZWQoZGxfc2UpKTtcbitcdFdBUk5fT05fREVGRVJSRUQoZGxfdGltZV9iZWZvcmUocnFfY2xvY2socnEpLCBkbF9zZS1cdTAwM2VkZWFkbGluZSkpO1xuIFxuIFx0LypcbiBcdCAqIFdlIGFyZSByYWNpbmcgd2l0aCB0aGUgZGVhZGxpbmUgdGltZXIuIFNvLCBkbyBub3RoaW5nIGJlY2F1c2VcbkBAIC04MDEsNyArODAxLDcgQEAgc3RhdGljIHZvaWQgcmVwbGVuaXNoX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiBcdHN0cnVjdCBkbF9ycSAqZGxfcnEgPSBkbF9ycV9vZl9zZShkbF9zZSk7XG4gXHRzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfZGxfcnEoZGxfcnEpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHBpX29mKGRsX3NlKS1cdTAwM2VkbF9ydW50aW1lIFx1MDAzYz0gMCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocGlfb2YoZGxfc2UpLVx1MDAzZWRsX3J1bnRpbWUgXHUwMDNjPSAwKTtcbiBcbiBcdC8qXG4gXHQgKiBUaGlzIGNvdWxkIGJlIHRoZSBjYXNlIGZvciBhICEtZGwgdGFzayB0aGF0IGlzIGJvb3N0ZWQuXG5AQCAtOTc1LDcgKzk3NSw3IEBAIHVwZGF0ZV9kbF9yZXZpc2VkX3dha2V1cChzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IHJxICpycSlcbiBcdCAqXG4gXHQgKiBTZWUgdXBkYXRlX2RsX2VudGl0eSgpIGNvbW1lbnRzIGZvciBmdXJ0aGVyIGRldGFpbHMuXG4gXHQgKi9cbi1cdFdBUk5fT04oZGxfdGltZV9iZWZvcmUoZGxfc2UtXHUwMDNlZGVhZGxpbmUsIHJxX2Nsb2NrKHJxKSkpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRChkbF90aW1lX2JlZm9yZShkbF9zZS1cdTAwM2VkZWFkbGluZSwgcnFfY2xvY2socnEpKSk7XG4gXG4gXHRkbF9zZS1cdTAwM2VydW50aW1lID0gKGRsX3NlLVx1MDAzZWRsX2RlbnNpdHkgKiBsYXhpdHkpIFx1MDAzZVx1MDAzZSBCV19TSElGVDtcbiB9XG5AQCAtMTA4MCw3ICsxMDgwLDcgQEAgc3RhdGljIGludCBzdGFydF9kbF90aW1lcihzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiBcdCAqIChjdXJyZW50IHUgXHUwMDNlIFUpLlxuIFx0ICovXG4gXHRpZiAoZGxfc2UtXHUwMDNlZGxfZGVmZXJfYXJtZWQpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKCFkbF9zZS1cdTAwM2VkbF90aHJvdHRsZWQpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWRsX3NlLVx1MDAzZWRsX3Rocm90dGxlZCk7XG4gXHRcdGFjdCA9IG5zX3RvX2t0aW1lKGRsX3NlLVx1MDAzZWRlYWRsaW5lIC0gZGxfc2UtXHUwMDNlcnVudGltZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBhY3QgPSBkZWFkbGluZSAtIHJlbC1kZWFkbGluZSArIHBlcmlvZCAqL1xuQEAgLTE0NTEsNyArMTQ1MSw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9jdXJyX2RsX3NlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBzNjRcbiBcdFx0LypcbiBcdFx0ICogTm9uLXNlcnZlcnMgd291bGQgbmV2ZXIgZ2V0IHRpbWUgYWNjb3VudGVkIHdoaWxlIHRocm90dGxlZC5cbiBcdFx0ICovXG4tXHRcdFdBUk5fT05fT05DRSghZGxfc2VydmVyKGRsX3NlKSk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfc2VydmVyKGRsX3NlKSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFdoaWxlIHRoZSBzZXJ2ZXIgaXMgbWFya2VkIGlkbGUsIGRvIG5vdCBwdXNoIG91dCB0aGVcbkBAIC0xNDkyLDcgKzE0OTIsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9kbF9zZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgczY0XG4gXHRcdCAqIGFuZCBxdWV1ZSByaWdodCBhd2F5LiBPdGhlcndpc2Ugbm90aGluZyBtaWdodCBxdWV1ZSBpdC4gVGhhdCdzIHNpbWlsYXJcbiBcdFx0ICogdG8gd2hhdCBlbnF1ZXVlX2RsX2VudGl0eSgpIGRvZXMgb24gc3RhcnRfZGxfdGltZXI9PTAuIEZvciBub3csIGp1c3Qgd2Fybi5cbiBcdFx0ICovXG4tXHRcdFdBUk5fT05fT05DRSghc3RhcnRfZGxfdGltZXIoZGxfc2UpKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzdGFydF9kbF90aW1lcihkbF9zZSkpO1xuIFxuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMTgwMSw3ICsxODAxLDcgQEAgdm9pZCBkbF9zZXJ2ZXJfc3RhcnQoc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXG4gXHQgKi9cbiBcdHJxLVx1MDAzZWRvbm9yLVx1MDAzZXNjaGVkX2NsYXNzLVx1MDAzZXVwZGF0ZV9jdXJyKHJxKTtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoIWNwdV9vbmxpbmUoY3B1X29mKHJxKSkpKVxuK1x0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghY3B1X29ubGluZShjcHVfb2YocnEpKSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRyYWNlX3NjaGVkX2RsX3NlcnZlcl9zdGFydF90cChkbF9zZSwgY3B1X29mKHJxKSwgZGxfZ2V0X3R5cGUoZGxfc2UsIHJxKSk7XG5AQCAtMjA3Myw3ICsyMDczLDcgQEAgdm9pZCBpbmNfZGxfdGFza3Moc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UsIHN0cnVjdCBkbF9ycSAqZGxfcnEpXG4gc3RhdGljIGlubGluZVxuIHZvaWQgZGVjX2RsX3Rhc2tzKHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBzdHJ1Y3QgZGxfcnEgKmRsX3JxKVxuIHtcbi1cdFdBUk5fT04oIWRsX3JxLVx1MDAzZWRsX25yX3J1bm5pbmcpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghZGxfcnEtXHUwMDNlZGxfbnJfcnVubmluZyk7XG4gXHRkbF9ycS1cdTAwM2VkbF9ucl9ydW5uaW5nLS07XG4gXG4gXHRpZiAoIWRsX3NlcnZlcihkbF9zZSkpXG5AQCAtMjE2NSw3ICsyMTY1LDcgQEAgc3RhdGljIHZvaWQgX19lbnF1ZXVlX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiB7XG4gXHRzdHJ1Y3QgZGxfcnEgKmRsX3JxID0gZGxfcnFfb2Zfc2UoZGxfc2UpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCFSQl9FTVBUWV9OT0RFKFx1MDAyNmRsX3NlLVx1MDAzZXJiX25vZGUpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghUkJfRU1QVFlfTk9ERShcdTAwMjZkbF9zZS1cdTAwM2VyYl9ub2RlKSk7XG4gXG4gXHRyYl9hZGRfY2FjaGVkKFx1MDAyNmRsX3NlLVx1MDAzZXJiX25vZGUsIFx1MDAyNmRsX3JxLVx1MDAzZXJvb3QsIF9fZGxfbGVzcyk7XG4gXG5AQCAtMjE4OSw3ICsyMTg5LDcgQEAgc3RhdGljIHZvaWQgX19kZXF1ZXVlX2RsX2VudGl0eShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSlcbiBzdGF0aWMgdm9pZFxuIGVucXVldWVfZGxfZW50aXR5KHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlLCBpbnQgZmxhZ3MpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKG9uX2RsX3JxKGRsX3NlKSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQob25fZGxfcnEoZGxfc2UpKTtcbiBcbiBcdHVwZGF0ZV9zdGF0c19lbnF1ZXVlX2RsKGRsX3JxX29mX3NlKGRsX3NlKSwgZGxfc2UsIGZsYWdzKTtcbiBcbkBAIC0yNjExLDcgKzI2MTEsNyBAQCBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpfX3BpY2tfdGFza19kbChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgcnFfZmxhZ3MgKnJmKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGRsX3NlID0gcGlja19uZXh0X2RsX2VudGl0eShkbF9ycSk7XG4tXHRXQVJOX09OX09OQ0UoIWRsX3NlKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfc2UpO1xuIFxuIFx0aWYgKGRsX3NlcnZlcihkbF9zZSkpIHtcbiBcdFx0cCA9IGRsX3NlLVx1MDAzZXNlcnZlcl9waWNrX3Rhc2soZGxfc2UsIHJmKTtcbkBAIC0yODIzLDEyICsyODIzLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF9wdXNoYWJsZV9kbF90YXNrKHN0cnVjdCBycSAqcnEpXG4gXHRpZiAoIXApXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWNwdSAhPSB0YXNrX2NwdShwKSk7XG4tXHRXQVJOX09OX09OQ0UodGFza19jdXJyZW50KHJxLCBwKSk7XG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2Vucl9jcHVzX2FsbG93ZWQgXHUwMDNjPSAxKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChycS1cdTAwM2VjcHUgIT0gdGFza19jcHUocCkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfY3VycmVudChycSwgcCkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlbnJfY3B1c19hbGxvd2VkIFx1MDAzYz0gMSk7XG4gXG4tXHRXQVJOX09OX09OQ0UoIXRhc2tfb25fcnFfcXVldWVkKHApKTtcbi1cdFdBUk5fT05fT05DRSghZGxfdGFzayhwKSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXRhc2tfb25fcnFfcXVldWVkKHApKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZGxfdGFzayhwKSk7XG4gXG4gXHRyZXR1cm4gcDtcbiB9XG5AQCAtMjk0NCw3ICsyOTQ0LDcgQEAgc3RhdGljIGludCBwdXNoX2RsX3Rhc2soc3RydWN0IHJxICpycSlcbiBcdGlmIChpc19taWdyYXRpb25fZGlzYWJsZWQobmV4dF90YXNrKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoV0FSTl9PTihuZXh0X3Rhc2sgPT0gcnEtXHUwMDNlY3VycikpXG4rXHRpZiAoV0FSTl9PTl9ERUZFUlJFRChuZXh0X3Rhc2sgPT0gcnEtXHUwMDNlY3VycikpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogV2UgbWlnaHQgcmVsZWFzZSBycSBsb2NrICovXG5AQCAtMzA1MCw4ICszMDUwLDggQEAgc3RhdGljIHZvaWQgcHVsbF9kbF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSlcbiBcdFx0ICovXG4gXHRcdGlmIChwIFx1MDAyNlx1MDAyNiBkbF90aW1lX2JlZm9yZShwLVx1MDAzZWRsLmRlYWRsaW5lLCBkbWluKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGRsX3Rhc2tfaXNfZWFybGllc3RfZGVhZGxpbmUocCwgdGhpc19ycSkpIHtcbi1cdFx0XHRXQVJOX09OKHAgPT0gc3JjX3JxLVx1MDAzZWN1cnIpO1xuLVx0XHRcdFdBUk5fT04oIXRhc2tfb25fcnFfcXVldWVkKHApKTtcbitcdFx0XHRXQVJOX09OX0RFRkVSUkVEKHAgPT0gc3JjX3JxLVx1MDAzZWN1cnIpO1xuK1x0XHRcdFdBUk5fT05fREVGRVJSRUQoIXRhc2tfb25fcnFfcXVldWVkKHApKTtcbiBcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFRoZW4gd2UgcHVsbCBpZmYgcCBoYXMgYWN0dWFsbHkgYW4gZWFybGllclxuQEAgLTMxMDksNyArMzEwOSw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIHtcbiBcdHN0cnVjdCBycSAqcnE7XG4gXG4tXHRXQVJOX09OX09OQ0UoIWRsX3Rhc2socCkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFkbF90YXNrKHApKTtcbiBcbiBcdHJxID0gdGFza19ycShwKTtcbiBcdC8qXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC5jXG5pbmRleCA1ZDJkMTk0NzNhODJlOC4uNDdkM2E0YzE2NDU1YWMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0LmNcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQuY1xuQEAgLTUxMiwxMiArNTEyLDEyIEBAIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gICogU28gaWYga2ZfdGFza3NbXSBpcyBzZXQsIEBwJ3Mgc2NoZWR1bGVyLXByb3RlY3RlZCBmaWVsZHMgYXJlIHN0YWJsZS5cbiAgKlxuICAqIGtmX3Rhc2tzW10gY2FuIG5vdCBzdGFjaywgc28gdGFzay1iYXNlZCBTQ1ggb3BzIG11c3Qgbm90IG5lc3QuIFRoZVxuLSAqIFdBUk5fT05fT05DRSgpIGluIGVhY2ggbWFjcm8gY2F0Y2hlcyBhIHJlLWVudHJ5IG9mIGFueSBvZiB0aGUgdGhyZWUgdmFyaWFudHNcbi0gKiB3aGlsZSBhIHByZXZpb3VzIG9uZSBpcyBzdGlsbCBpbiBwcm9ncmVzcy5cbisgKiBXQVJOX09OX09OQ0VfREVGRVJSRUQoKSBpbiBlYWNoIG1hY3JvIGNhdGNoZXMgYSByZS1lbnRyeSBvZiBhbnkgb2YgdGhlIHRocmVlXG4rICogdmFyaWFudHMgd2hpbGUgYSBwcmV2aW91cyBvbmUgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuXG4gICovXG4gI2RlZmluZSBTQ1hfQ0FMTF9PUF9UQVNLKHNjaCwgb3AsIGxvY2tlZF9ycSwgdGFzaywgYXJncy4uLilcdFx0XHRcXFxuIGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRXQVJOX09OX09OQ0UoY3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0pO1x0XHRcdFx0XHRcXFxuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdKTtcdFx0XHRcXFxuIFx0Y3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrO1x0XHRcdFx0XHRcXFxuIFx0U0NYX0NBTExfT1AoKHNjaCksIG9wLCBsb2NrZWRfcnEsIHRhc2ssICMjYXJncyk7XHRcdFx0XFxcbiBcdGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdID0gTlVMTDtcdFx0XHRcdFx0XFxcbkBAIC01MjYsNyArNTI2LDcgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAjZGVmaW5lIFNDWF9DQUxMX09QX1RBU0tfUkVUKHNjaCwgb3AsIGxvY2tlZF9ycSwgdGFzaywgYXJncy4uLilcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0X190eXBlb2ZfXygoc2NoKS1cdTAwM2VvcHMub3AodGFzaywgIyNhcmdzKSkgX19yZXQ7XHRcdFx0XHRcXFxuLVx0V0FSTl9PTl9PTkNFKGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdKTtcdFx0XHRcdFx0XFxcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjdXJyZW50LVx1MDAzZXNjeC5rZl90YXNrc1swXSk7XHRcdFx0XFxcbiBcdGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdID0gdGFzaztcdFx0XHRcdFx0XFxcbiBcdF9fcmV0ID0gU0NYX0NBTExfT1BfUkVUKChzY2gpLCBvcCwgbG9ja2VkX3JxLCB0YXNrLCAjI2FyZ3MpO1x0XHRcXFxuIFx0Y3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0gPSBOVUxMO1x0XHRcdFx0XHRcXFxuQEAgLTUzNiw3ICs1MzYsNyBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICNkZWZpbmUgU0NYX0NBTExfT1BfMlRBU0tTX1JFVChzY2gsIG9wLCBsb2NrZWRfcnEsIHRhc2swLCB0YXNrMSwgYXJncy4uLilcdFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRfX3R5cGVvZl9fKChzY2gpLVx1MDAzZW9wcy5vcCh0YXNrMCwgdGFzazEsICMjYXJncykpIF9fcmV0O1x0XHRcdFxcXG4tXHRXQVJOX09OX09OQ0UoY3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0pO1x0XHRcdFx0XHRcXFxuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzBdKTtcdFx0XHRcXFxuIFx0Y3VycmVudC1cdTAwM2VzY3gua2ZfdGFza3NbMF0gPSB0YXNrMDtcdFx0XHRcdFx0XFxcbiBcdGN1cnJlbnQtXHUwMDNlc2N4LmtmX3Rhc2tzWzFdID0gdGFzazE7XHRcdFx0XHRcdFxcXG4gXHRfX3JldCA9IFNDWF9DQUxMX09QX1JFVCgoc2NoKSwgb3AsIGxvY2tlZF9ycSwgdGFzazAsIHRhc2sxLCAjI2FyZ3MpO1x0XFxcbkBAIC02ODcsNyArNjg3LDcgQEAgc3RhdGljIGJvb2wgbmxkc3FfY3Vyc29yX2xvc3RfdGFzayhzdHJ1Y3Qgc2N4X2RzcV9saXN0X25vZGUgKmN1cnNvcixcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHQvKiBpZiBAcCBoYXMgc3RheWVkIG9uIEBkc3EsIGl0cyBycSBjb3VsZG4ndCBoYXZlIGNoYW5nZWQgKi9cbi1cdGlmIChXQVJOX09OX09OQ0UocnEgIT0gdGFza19ycShwKSkpXG4rXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxICE9IHRhc2tfcnEocCkpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC0xMjgyLDcgKzEyODIsNyBAQCBzdGF0aWMgdm9pZCBzY2hlZHVsZV9yZWVucV9sb2NhbChzdHJ1Y3QgcnEgKnJxLCB1NjQgcmVlbnFfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHNjeF9zY2hlZCAqcm9vdCA9IHJjdV9kZXJlZmVyZW5jZV9zY2hlZChzY3hfcm9vdCk7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFyb290KSlcbitcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJvb3QpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzY2hlZHVsZV9kc3FfcmVlbnEocm9vdCwgXHUwMDI2cnEtXHUwMDNlc2N4LmxvY2FsX2RzcSwgcmVlbnFfZmxhZ3MsIHJxKTtcbkBAIC0xMzc5LDcgKzEzNzksNyBAQCBzdGF0aWMgdm9pZCBkc3FfaW5jX25yKHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlblxuIFx0ICovXG4gXHRpZiAoZW5xX2ZsYWdzIFx1MDAyNiBTQ1hfRU5RX0lNTUVEKSB7XG4gXHRcdGlmICh1bmxpa2VseShkc3EtXHUwMDNlaWQgIT0gU0NYX0RTUV9MT0NBTCkpIHtcbi1cdFx0XHRXQVJOX09OX09OQ0UoIShlbnFfZmxhZ3MgXHUwMDI2IFNDWF9FTlFfR0RTUV9GQUxMQkFDSykpO1xuK1x0XHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKGVucV9mbGFncyBcdTAwMjYgU0NYX0VOUV9HRFNRX0ZBTExCQUNLKSk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHRcdHAtXHUwMDNlc2N4LmZsYWdzIHw9IFNDWF9UQVNLX0lNTUVEO1xuQEAgLTEzODgsNyArMTM4OCw3IEBAIHN0YXRpYyB2b2lkIGRzcV9pbmNfbnIoc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVuXG4gXHRpZiAocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0lNTUVEKSB7XG4gXHRcdHN0cnVjdCBycSAqcnEgPSBjb250YWluZXJfb2YoZHNxLCBzdHJ1Y3QgcnEsIHNjeC5sb2NhbF9kc3EpO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKGRzcS1cdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChkc3EtXHUwMDNlaWQgIT0gU0NYX0RTUV9MT0NBTCkpXG4gXHRcdFx0cmV0dXJuO1xuIFxuIFx0XHRycS1cdTAwM2VzY3gubnJfaW1tZWQrKztcbkBAIC0xNDEwLDggKzE0MTAsOCBAQCBzdGF0aWMgdm9pZCBkc3FfZGVjX25yKHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHRpZiAocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0lNTUVEKSB7XG4gXHRcdHN0cnVjdCBycSAqcnEgPSBjb250YWluZXJfb2YoZHNxLCBzdHJ1Y3QgcnEsIHNjeC5sb2NhbF9kc3EpO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKGRzcS1cdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSB8fFxuLVx0XHQgICAgV0FSTl9PTl9PTkNFKHJxLVx1MDAzZXNjeC5ucl9pbW1lZCBcdTAwM2M9IDApKVxuK1x0XHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKGRzcS1cdTAwM2VpZCAhPSBTQ1hfRFNRX0xPQ0FMKSB8fFxuK1x0XHQgICAgV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZXNjeC5ucl9pbW1lZCBcdTAwM2M9IDApKVxuIFx0XHRcdHJldHVybjtcbiBcbiBcdFx0cnEtXHUwMDNlc2N4Lm5yX2ltbWVkLS07XG5AQCAtMTUyMSw5ICsxNTIxLDkgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hfZW5xdWV1ZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsXG4ge1xuIFx0Ym9vbCBpc19sb2NhbCA9IGRzcS1cdTAwM2VpZCA9PSBTQ1hfRFNRX0xPQ0FMO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2N4LmRzcSB8fCAhbGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4tXHRXQVJOX09OX09OQ0UoKHAtXHUwMDNlc2N4LmRzcV9mbGFncyBcdTAwMjYgU0NYX1RBU0tfRFNRX09OX1BSSVEpIHx8XG4tXHRcdCAgICAgIVJCX0VNUFRZX05PREUoXHUwMDI2cC1cdTAwM2VzY3guZHNxX3ByaXEpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5kc3EgfHwgIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKChwLVx1MDAzZXNjeC5kc3FfZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0RTUV9PTl9QUklRKSB8fFxuK1x0XHRcdCAgICAgICFSQl9FTVBUWV9OT0RFKFx1MDAyNnAtXHUwMDNlc2N4LmRzcV9wcmlxKSk7XG4gXG4gXHRpZiAoIWlzX2xvY2FsKSB7XG4gXHRcdHJhd19zcGluX2xvY2tfbmVzdGVkKFx1MDAyNmRzcS1cdTAwM2Vsb2NrLFxuQEAgLTE2NDYsNyArMTY0Niw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoX2VucXVldWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgcnEgKnJxLFxuIHN0YXRpYyB2b2lkIHRhc2tfdW5saW5rX2Zyb21fZHNxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2N4X2Rpc3BhdGNoX3EgKmRzcSlcbiB7XG4tXHRXQVJOX09OX09OQ0UobGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQobGlzdF9lbXB0eShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlKSk7XG4gXG4gXHRpZiAocC1cdTAwM2VzY3guZHNxX2ZsYWdzIFx1MDAyNiBTQ1hfVEFTS19EU1FfT05fUFJJUSkge1xuIFx0XHRyYl9lcmFzZShcdTAwMjZwLVx1MDAzZXNjeC5kc3FfcHJpcSwgXHUwMDI2ZHNxLVx1MDAzZXByaXEpO1xuQEAgLTE3MDksNyArMTcwOSw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoX2RlcXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0XHQgKiBob2xkaW5nX2NwdSB3aGljaCB0ZWxscyBkaXNwYXRjaF90b19sb2NhbF9kc3EoKSB0aGF0IGl0IGxvc3RcbiBcdFx0ICogdGhlIHJhY2UuXG4gXHRcdCAqL1xuLVx0XHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xuIFx0XHRwLVx1MDAzZXNjeC5ob2xkaW5nX2NwdSA9IC0xO1xuIFx0fVxuIFx0cC1cdTAwM2VzY3guZHNxID0gTlVMTDtcbkBAIC0xNzg3LDggKzE3ODcsOCBAQCBzdGF0aWMgdm9pZCBtYXJrX2RpcmVjdF9kaXNwYXRjaChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5kZHNwX2RzcV9pZCAhPSBTQ1hfRFNRX0lOVkFMSUQpO1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2N4LmRkc3BfZW5xX2ZsYWdzKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5kZHNwX2RzcV9pZCAhPSBTQ1hfRFNRX0lOVkFMSUQpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2N4LmRkc3BfZW5xX2ZsYWdzKTtcbiBcbiBcdHAtXHUwMDNlc2N4LmRkc3BfZHNxX2lkID0gZHNxX2lkO1xuIFx0cC1cdTAwM2VzY3guZGRzcF9lbnFfZmxhZ3MgPSBlbnFfZmxhZ3M7XG5AQCAtMTg1NSw3ICsxODU1LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0X2Rpc3BhdGNoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdFdBUk5fT05fT05DRShwLVx1MDAzZXNjeC5kc3EgfHwgIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2VzY3guZHNxX2xpc3Qubm9kZSkpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guZHNxIHx8ICFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNlc2N4LmRzcV9saXN0Lm5vZGUpKTtcbiBcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlLFxuIFx0XHRcdCAgICAgIFx1MDAyNnJxLVx1MDAzZXNjeC5kZHNwX2RlZmVycmVkX2xvY2Fscyk7XG4gXHRcdHNjaGVkdWxlX2RlZmVycmVkX2xvY2tlZChycSk7XG5AQCAtMTg4OCw3ICsxODg4LDcgQEAgc3RhdGljIHZvaWQgZG9fZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVucV9mbGFncyxcbiBcdHN0cnVjdCBzY3hfZGlzcGF0Y2hfcSAqZHNxO1xuIFx0dW5zaWduZWQgbG9uZyBxc2VxO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCEocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCEocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpO1xuIFxuIFx0LyogaW50ZXJuYWwgbW92ZW1lbnRzIC0gcnEgbWlncmF0aW9uIC8gUkVTVE9SRSAqL1xuIFx0aWYgKHN0aWNreV9jcHUgPT0gY3B1X29mKHJxKSlcbkBAIC0xOTM4LDExICsxOTM4LDExIEBAIHN0YXRpYyB2b2lkIGRvX2VucXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBlbnFfZmxhZ3MsXG4gXHQvKiBEU1EgYnlwYXNzIGRpZG4ndCB0cmlnZ2VyLCBlbnF1ZXVlIG9uIHRoZSBCUEYgc2NoZWR1bGVyICovXG4gXHRxc2VxID0gcnEtXHUwMDNlc2N4Lm9wc19xc2VxKysgXHUwMDNjXHUwMDNjIFNDWF9PUFNTX1FTRVFfU0hJRlQ7XG4gXG4tXHRXQVJOX09OX09OQ0UoYXRvbWljX2xvbmdfcmVhZChcdTAwMjZwLVx1MDAzZXNjeC5vcHNfc3RhdGUpICE9IFNDWF9PUFNTX05PTkUpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGF0b21pY19sb25nX3JlYWQoXHUwMDI2cC1cdTAwM2VzY3gub3BzX3N0YXRlKSAhPSBTQ1hfT1BTU19OT05FKTtcbiBcdGF0b21pY19sb25nX3NldChcdTAwMjZwLVx1MDAzZXNjeC5vcHNfc3RhdGUsIFNDWF9PUFNTX1FVRVVFSU5HIHwgcXNlcSk7XG4gXG4gXHRkZHNwX3Rhc2twID0gdGhpc19jcHVfcHRyKFx1MDAyNmRpcmVjdF9kaXNwYXRjaF90YXNrKTtcbi1cdFdBUk5fT05fT05DRSgqZGRzcF90YXNrcCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoKmRkc3BfdGFza3ApO1xuIFx0KmRkc3BfdGFza3AgPSBwO1xuIFxuIFx0U0NYX0NBTExfT1BfVEFTSyhzY2gsIGVucXVldWUsIHJxLCBwLCBlbnFfZmxhZ3MpO1xuQEAgLTIwMzksNyArMjAzOSw3IEBAIHN0YXRpYyB2b2lkIGVucXVldWVfdGFza19zY3goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY29yZV9lbnFfXG4gXHRcdHN0aWNreV9jcHUgPSBjcHVfb2YocnEpO1xuIFxuIFx0aWYgKHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfVEFTS19RVUVVRUQpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKCF0YXNrX3J1bm5hYmxlKHApKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCF0YXNrX3J1bm5hYmxlKHApKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtMjE1OSw3ICsyMTU5LDcgQEAgc3RhdGljIGJvb2wgZGVxdWV1ZV90YXNrX3NjeChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjb3JlX2RlcV9cbiBcdFx0ZGVxX2ZsYWdzIHw9IFNDWF9ERVFfU0NIRURfQ0hBTkdFO1xuIFxuIFx0aWYgKCEocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1FVRVVFRCkpIHtcbi1cdFx0V0FSTl9PTl9PTkNFKHRhc2tfcnVubmFibGUocCkpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19ydW5uYWJsZShwKSk7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuQEAgLTIyNTYsNyArMjI1Niw3IEBAIHN0YXRpYyB2b2lkIG1vdmVfbG9jYWxfdGFza190b19sb2NhbF9kc3Eoc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZzcmNfZHNxLVx1MDAzZWxvY2spO1xuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChkc3RfcnEpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2N4LmhvbGRpbmdfY3B1IFx1MDAzZT0gMCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgXHUwMDNlPSAwKTtcbiBcbiBcdGlmIChlbnFfZmxhZ3MgXHUwMDI2IChTQ1hfRU5RX0hFQUQgfCBTQ1hfRU5RX1BSRUVNUFQpKVxuIFx0XHRsaXN0X2FkZChcdTAwMjZwLVx1MDAzZXNjeC5kc3FfbGlzdC5ub2RlLCBcdTAwMjZkc3RfZHNxLVx1MDAzZWxpc3QpO1xuQEAgLTIyOTksOCArMjI5OSw4IEBAIHN0YXRpYyB2b2lkIG1vdmVfcmVtb3RlX3Rhc2tfdG9fbG9jYWxfZHNxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdTY0IGVucV9mbGFncyxcbiBcdCAqIHRydW5jYXRlIHRoZSB1cHBlciAzMiBiaXQuIEFzIHdlIG93biBAcnEsIHdlIGNhbiBwYXNzIHRoZW0gdGhyb3VnaFxuIFx0ICogQHJxLVx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MgaW5zdGVhZC5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdV9vZihkc3RfcnEpLCBwLVx1MDAzZWNwdXNfcHRyKSk7XG4tXHRXQVJOX09OX09OQ0UoZHN0X3JxLVx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdV9vZihkc3RfcnEpLCBwLVx1MDAzZWNwdXNfcHRyKSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZHN0X3JxLVx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MpO1xuIFx0ZHN0X3JxLVx1MDAzZXNjeC5leHRyYV9lbnFfZmxhZ3MgPSBlbnFfZmxhZ3M7XG4gXHRhY3RpdmF0ZV90YXNrKGRzdF9ycSwgcCwgMCk7XG4gXHRkc3RfcnEtXHUwMDNlc2N4LmV4dHJhX2VucV9mbGFncyA9IDA7XG5AQCAtMjMzMSw3ICsyMzMxLDcgQEAgc3RhdGljIGJvb2wgdGFza19jYW5fcnVuX29uX3JlbW90ZV9ycShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4ge1xuIFx0czMyIGNwdSA9IGNwdV9vZihycSk7XG4gXG4tXHRXQVJOX09OX09OQ0UodGFza19jcHUocCkgPT0gY3B1KTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCh0YXNrX2NwdShwKSA9PSBjcHUpO1xuIFxuIFx0LypcbiBcdCAqIElmIEBwIGhhcyBtaWdyYXRpb24gZGlzYWJsZWQsIEBwLVx1MDAzZWNwdXNfcHRyIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBvbmx5XG5AQCAtMjQxMSw3ICsyNDExLDcgQEAgc3RhdGljIGJvb2wgdW5saW5rX2RzcV9hbmRfbG9ja19zcmNfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkc3EtXHUwMDNlbG9jayk7XG4gXG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgXHUwMDNlPSAwKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5ob2xkaW5nX2NwdSBcdTAwM2U9IDApO1xuIFx0dGFza191bmxpbmtfZnJvbV9kc3EocCwgZHNxKTtcbiBcdHAtXHUwMDNlc2N4LmhvbGRpbmdfY3B1ID0gY3B1O1xuIFxuQEAgLTI0MjAsNyArMjQyMCw3IEBAIHN0YXRpYyBib29sIHVubGlua19kc3FfYW5kX2xvY2tfc3JjX3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcbiBcdC8qIHRhc2tfcnEgY291bGRuJ3QgaGF2ZSBjaGFuZ2VkIGlmIHdlJ3JlIHN0aWxsIHRoZSBob2xkaW5nIGNwdSAqL1xuIFx0cmV0dXJuIGxpa2VseShwLVx1MDAzZXNjeC5ob2xkaW5nX2NwdSA9PSBjcHUpIFx1MDAyNlx1MDAyNlxuLVx0XHQhV0FSTl9PTl9PTkNFKHNyY19ycSAhPSB0YXNrX3JxKHApKTtcbitcdFx0IVdBUk5fT05fT05DRV9ERUZFUlJFRChzcmNfcnEgIT0gdGFza19ycShwKSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGNvbnN1bWVfcmVtb3RlX3Rhc2soc3RydWN0IHJxICp0aGlzX3JxLFxuQEAgLTI2MzAsNyArMjYzMCw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoX3RvX2xvY2FsX2RzcShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsXG4gXG4gXHQvKiB0YXNrX3JxIGNvdWxkbid0IGhhdmUgY2hhbmdlZCBpZiB3ZSdyZSBzdGlsbCB0aGUgaG9sZGluZyBjcHUgKi9cbiBcdGlmIChsaWtlbHkocC1cdTAwM2VzY3guaG9sZGluZ19jcHUgPT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIVdBUk5fT05fT05DRShzcmNfcnEgIT0gdGFza19ycShwKSkpIHtcbitcdCAgICAhV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNyY19ycSAhPSB0YXNrX3JxKHApKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBJZiBAcCBpcyBzdGF5aW5nIG9uIHRoZSBzYW1lIHJxLCB0aGVyZSdzIG5vIG5lZWQgdG8gZ29cbiBcdFx0ICogdGhyb3VnaCB0aGUgZnVsbCBkZWFjdGl2YXRlL2FjdGl2YXRlIGN5Y2xlLiBPcHRpbWl6ZSBieVxuQEAgLTMwOTksNyArMzA5OSw3IEBAIHN0YXRpYyB2b2lkIHB1dF9wcmV2X3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdFx0ICogd2hpY2ggc2hvdWxkIHRyaWdnZXIgYW4gZXhwbGljaXQgZm9sbG93LXVwIHNjaGVkdWxpbmcgZXZlbnQuXG4gXHRcdCAqL1xuIFx0XHRpZiAobmV4dCBcdTAwMjZcdTAwMjYgc2NoZWRfY2xhc3NfYWJvdmUoXHUwMDI2ZXh0X3NjaGVkX2NsYXNzLCBuZXh0LVx1MDAzZXNjaGVkX2NsYXNzKSkge1xuLVx0XHRcdFdBUk5fT05fT05DRSghKHNjaC1cdTAwM2VvcHMuZmxhZ3MgXHUwMDI2IFNDWF9PUFNfRU5RX0xBU1QpKTtcbitcdFx0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIShzY2gtXHUwMDNlb3BzLmZsYWdzIFx1MDAyNiBTQ1hfT1BTX0VOUV9MQVNUKSk7XG4gXHRcdFx0ZG9fZW5xdWV1ZV90YXNrKHJxLCBwLCBTQ1hfRU5RX0xBU1QsIC0xKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRkb19lbnF1ZXVlX3Rhc2socnEsIHAsIDAsIC0xKTtcbkBAIC0zMjAxLDcgKzMyMDEsNyBAQCBkb19waWNrX3Rhc2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCBycV9mbGFncyAqcmYsIGJvb2wgZm9yY2Vfc2N4KVxuIFx0a2VlcF9wcmV2ID0gcnEtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfUlFfQkFMX0tFRVA7XG4gXHRpZiAodW5saWtlbHkoa2VlcF9wcmV2IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIHByZXYtXHUwMDNlc2NoZWRfY2xhc3MgIT0gXHUwMDI2ZXh0X3NjaGVkX2NsYXNzKSkge1xuLVx0XHRXQVJOX09OX09OQ0Uoc2N4X2VuYWJsZV9zdGF0ZSgpID09IFNDWF9FTkFCTEVEKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjeF9lbmFibGVfc3RhdGUoKSA9PSBTQ1hfRU5BQkxFRCk7XG4gXHRcdGtlZXBfcHJldiA9IGZhbHNlO1xuIFx0fVxuIFxuQEAgLTMzMzIsNyArMzMzMiw3IEBAIHN0YXRpYyBpbnQgc2VsZWN0X3Rhc2tfcnFfc2N4KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHByZXZfY3B1LCBpbnQgd2FrZV9mbGFnXG4gXHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqKmRkc3BfdGFza3A7XG4gXG4gXHRcdGRkc3BfdGFza3AgPSB0aGlzX2NwdV9wdHIoXHUwMDI2ZGlyZWN0X2Rpc3BhdGNoX3Rhc2spO1xuLVx0XHRXQVJOX09OX09OQ0UoKmRkc3BfdGFza3ApO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoKmRkc3BfdGFza3ApO1xuIFx0XHQqZGRzcF90YXNrcCA9IHA7XG4gXG4gXHRcdHRoaXNfcnEoKS1cdTAwM2VzY3guaW5fc2VsZWN0X2NwdSA9IHRydWU7XG5AQCAtMzYyMCw3ICszNjIwLDcgQEAgc3RhdGljIHZvaWQgX19zY3hfZW5hYmxlX3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHQgKiB0cmFuc2l0aW9ucyBhcmUgY29uc2lzdGVudCwgdGhlIGZsYWcgc2hvdWxkIGFsd2F5cyBiZSBjbGVhclxuIFx0ICogaGVyZS5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfVEFTS19JTl9DVVNUT0RZKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfSU5fQ1VTVE9EWSk7XG4gXG4gXHQvKlxuIFx0ICogU2V0IHRoZSB3ZWlnaHQgYmVmb3JlIGNhbGxpbmcgb3BzLmVuYWJsZSgpIHNvIHRoYXQgdGhlIHNjaGVkdWxlclxuQEAgLTM2NTEsNyArMzY1MSw3IEBAIHN0YXRpYyB2b2lkIHNjeF9kaXNhYmxlX3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHRzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xuLVx0V0FSTl9PTl9PTkNFKHNjeF9nZXRfdGFza19zdGF0ZShwKSAhPSBTQ1hfVEFTS19FTkFCTEVEKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChzY3hfZ2V0X3Rhc2tfc3RhdGUocCkgIT0gU0NYX1RBU0tfRU5BQkxFRCk7XG4gXG4gXHRjbGVhcl9kaXJlY3RfZGlzcGF0Y2gocCk7XG4gXG5AQCAtMzY2NCw3ICszNjY0LDcgQEAgc3RhdGljIHZvaWQgc2N4X2Rpc2FibGVfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdCAqIHRyYW5zaXRpb25zIGFyZSBjb25zaXN0ZW50LCB0aGUgZmxhZyBzaG91bGQgYWx3YXlzIGJlIGNsZWFyXG4gXHQgKiBoZXJlLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX0lOX0NVU1RPRFkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfVEFTS19JTl9DVVNUT0RZKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19zY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcbkBAIC0zNjg5LDcgKzM2ODksNyBAQCBzdGF0aWMgdm9pZCBfX3NjeF9kaXNhYmxlX2FuZF9leGl0X3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxuIFx0XHRzY3hfZGlzYWJsZV90YXNrKHNjaCwgcCk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0V0FSTl9PTl9PTkNFKHRydWUpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQodHJ1ZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC0zNzI2LDcgKzM3MjYsNyBAQCBzdGF0aWMgdm9pZCBzY3hfZGlzYWJsZV9hbmRfZXhpdF90YXNrKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCxcbiBcdCAqIHBhdGgsIHNvIGl0J3MgYWx3YXlzIGNsZWFyIHdoZW4gQHAgYXJyaXZlcyBoZXJlIGluICVTQ1hfVEFTS19OT05FLlxuIFx0ICovXG4gXHRpZiAocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1NVQl9JTklUKSB7XG4tXHRcdGlmICghV0FSTl9PTl9PTkNFKCFzY3hfZW5hYmxpbmdfc3ViX3NjaGVkKSlcbitcdFx0aWYgKCFXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNjeF9lbmFibGluZ19zdWJfc2NoZWQpKVxuIFx0XHRcdHNjeF9zdWJfaW5pdF9jYW5jZWxfdGFzayhzY3hfZW5hYmxpbmdfc3ViX3NjaGVkLCBwKTtcbiBcdFx0cC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2PSB+U0NYX1RBU0tfU1VCX0lOSVQ7XG4gXHR9XG5AQCAtMzgxOCw3ICszODE4LDcgQEAgdm9pZCBzY3hfY2FuY2VsX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0XHRzdHJ1Y3QgcnFfZmxhZ3MgcmY7XG4gXG4gXHRcdHJxID0gdGFza19ycV9sb2NrKHAsIFx1MDAyNnJmKTtcbi1cdFx0V0FSTl9PTl9PTkNFKHNjeF9nZXRfdGFza19zdGF0ZShwKSBcdTAwM2U9IFNDWF9UQVNLX1JFQURZKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHNjeF9nZXRfdGFza19zdGF0ZShwKSBcdTAwM2U9IFNDWF9UQVNLX1JFQURZKTtcbiBcdFx0c2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzY3hfdGFza19zY2hlZChwKSwgcCk7XG4gXHRcdHRhc2tfcnFfdW5sb2NrKHJxLCBwLCBcdTAwMjZyZik7XG4gXHR9XG5AQCAtMzk4Niw3ICszOTg2LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19kZHNwX2RlZmVycmVkX2xvY2FscyhzdHJ1Y3QgcnEgKnJxKVxuIFx0XHRjbGVhcl9kaXJlY3RfZGlzcGF0Y2gocCk7XG4gXG4gXHRcdGRzcSA9IGZpbmRfZHNxX2Zvcl9kaXNwYXRjaChzY2gsIHJxLCBkc3FfaWQsIHRhc2tfY3B1KHApKTtcbi1cdFx0aWYgKCFXQVJOX09OX09OQ0UoZHNxLVx1MDAzZWlkICE9IFNDWF9EU1FfTE9DQUwpKVxuK1x0XHRpZiAoIVdBUk5fT05fT05DRV9ERUZFUlJFRChkc3EtXHUwMDNlaWQgIT0gU0NYX0RTUV9MT0NBTCkpXG4gXHRcdFx0ZGlzcGF0Y2hfdG9fbG9jYWxfZHNxKHNjaCwgcnEsIGRzcSwgcCwgZW5xX2ZsYWdzKTtcbiBcdH1cbiB9XG5AQCAtNDA0MSw3ICs0MDQxLDcgQEAgc3RhdGljIHUzMiByZWVucV9sb2NhbChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsIHU2NCByZWVucV9mbGFncylcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X3JxX2hlbGQocnEpO1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRShyZWVucV9mbGFncyBcdTAwMjYgX19TQ1hfUkVFTlFfVFNSX01BU0spKVxuK1x0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChyZWVucV9mbGFncyBcdTAwMjYgX19TQ1hfUkVFTlFfVFNSX01BU0spKVxuIFx0XHRyZWVucV9mbGFncyBcdTAwMjY9IH5fX1NDWF9SRUVOUV9UU1JfTUFTSztcbiBcdGlmIChycV9pc19vcGVuKHJxLCAwKSlcbiBcdFx0cmVlbnFfZmxhZ3MgfD0gU0NYX1JFRU5RX1RTUl9SUV9PUEVOO1xuQEAgLTQwNzgsNyArNDA3OCw3IEBAIHN0YXRpYyB1MzIgcmVlbnFfbG9jYWwoc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgcnEgKnJxLCB1NjQgcmVlbnFfZmxhZ3MpXG4gXG4gXHRcdGRpc3BhdGNoX2RlcXVldWUocnEsIHApO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSykpXG4rXHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLKSlcbiBcdFx0XHRwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjY9IH5TQ1hfVEFTS19SRUVOUV9SRUFTT05fTUFTSztcbiBcdFx0cC1cdTAwM2VzY3guZmxhZ3MgfD0gcmVhc29uO1xuIFxuQEAgLTQxOTksNyArNDE5OSw3IEBAIHN0YXRpYyB2b2lkIHJlZW5xX3VzZXIoc3RydWN0IHJxICpycSwgc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EsIHU2NCByZWVucV9mbGFnXG4gXHRcdGRpc3BhdGNoX2RlcXVldWVfbG9ja2VkKHAsIGRzcSk7XG4gXHRcdHJhd19zcGluX3VubG9jayhcdTAwMjZkc3EtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGlmIChXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RBU0tfUkVFTlFfUkVBU09OX01BU0spKVxuIFx0XHRcdHAtXHUwMDNlc2N4LmZsYWdzIFx1MDAyNj0gflNDWF9UQVNLX1JFRU5RX1JFQVNPTl9NQVNLO1xuIFx0XHRwLVx1MDAzZXNjeC5mbGFncyB8PSByZWFzb247XG4gXG5AQCAtNDM2MCw3ICs0MzYwLDcgQEAgaW50IHNjeF9jZ3JvdXBfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXG4gXHRcdHN0cnVjdCBjZ3JvdXAgKmZyb20gPSB0Z19jZ3JwKHRhc2tfZ3JvdXAocCkpO1xuIFx0XHRzdHJ1Y3QgY2dyb3VwICp0byA9IHRnX2NncnAoY3NzX3RnKGNzcykpO1xuIFxuLVx0XHRXQVJOX09OX09OQ0UocC1cdTAwM2VzY3guY2dycF9tb3ZpbmdfZnJvbSk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwLVx1MDAzZXNjeC5jZ3JwX21vdmluZ19mcm9tKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogc2NoZWRfbW92ZV90YXNrKCkgb21pdHMgaWRlbnRpdHkgbWlncmF0aW9ucy4gTGV0J3MgbWF0Y2ggdGhlXG5AQCAtNDYxNyw3ICs0NjE3LDcgQEAgc3RhdGljIHZvaWQgZXhpdF9kc3Eoc3RydWN0IHNjeF9kaXNwYXRjaF9xICpkc3EpXG4gXHRcdCAqIFRoZXJlIG11c3QgaGF2ZSBiZWVuIGEgUkNVIGdyYWNlIHBlcmlvZCBzaW5jZSB0aGUgbGFzdFxuIFx0XHQgKiBpbnNlcnRpb24gYW5kIEBkc3Egc2hvdWxkIGJlIG9mZiB0aGUgZGVmZXJyZWQgbGlzdCBieSBub3cuXG4gXHRcdCAqL1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNmRydS1cdTAwM2Vub2RlKSkpIHtcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZkcnUtXHUwMDNlbm9kZSkpKSB7XG4gXHRcdFx0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKFx1MDAyNnJxLVx1MDAzZXNjeC5kZWZlcnJlZF9yZWVucV9sb2NrKTtcbiBcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRydS1cdTAwM2Vub2RlKTtcbiBcdFx0fVxuQEAgLTQ3NDUsNyArNDc0NSw3IEBAIHN0YXRpYyBpbnQgc2N4X2Nncm91cF9pbml0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0dGctXHUwMDNlc2N4LmZsYWdzIHw9IFNDWF9UR19JTklURUQ7XG4gXHR9XG4gXG4tXHRXQVJOX09OX09OQ0Uoc2N4X2Nncm91cF9lbmFibGVkKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChzY3hfY2dyb3VwX2VuYWJsZWQpO1xuIFx0c2N4X2Nncm91cF9lbmFibGVkID0gdHJ1ZTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTQ4NDgsNyArNDg0OCw3IEBAIHN0YXRpYyB2b2lkIHNjeF9zY2hlZF9mcmVlX3JjdV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0ICogcGVyaW9kLiBBcyB0aGF0IGJsb2NrcyBuZXcgZGVmZXJyYWxzLCBhbGxcbiBcdFx0ICogZGVmZXJyZWRfcmVlbnFfbG9jYWxfbm9kZSdzIG11c3QgYmUgb2ZmLWxpc3QgYnkgbm93LlxuIFx0XHQgKi9cbi1cdFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnBjcHUtXHUwMDNlZGVmZXJyZWRfcmVlbnFfbG9jYWwubm9kZSkpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxpc3RfZW1wdHkoXHUwMDI2cGNwdS1cdTAwM2VkZWZlcnJlZF9yZWVucV9sb2NhbC5ub2RlKSk7XG4gXG4gXHRcdGV4aXRfZHNxKGJ5cGFzc19kc3Eoc2NoLCBjcHUpKTtcbiBcdH1cbkBAIC01MzI0LDcgKzUzMjQsNyBAQCBzdGF0aWMgYm9vbCBpbmNfYnlwYXNzX2RlcHRoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNjeF9ieXBhc3NfbG9jayk7XG4gXG4tXHRXQVJOX09OX09OQ0Uoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCBcdTAwM2MgMCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCBcdTAwM2MgMCk7XG4gXHRXUklURV9PTkNFKHNjaC1cdTAwM2VieXBhc3NfZGVwdGgsIHNjaC1cdTAwM2VieXBhc3NfZGVwdGggKyAxKTtcbiBcdGlmIChzY2gtXHUwMDNlYnlwYXNzX2RlcHRoICE9IDEpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC01MzM5LDcgKzUzMzksNyBAQCBzdGF0aWMgYm9vbCBkZWNfYnlwYXNzX2RlcHRoKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnNjeF9ieXBhc3NfbG9jayk7XG4gXG4tXHRXQVJOX09OX09OQ0Uoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCBcdTAwM2MgMSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCBcdTAwM2MgMSk7XG4gXHRXUklURV9PTkNFKHNjaC1cdTAwM2VieXBhc3NfZGVwdGgsIHNjaC1cdTAwM2VieXBhc3NfZGVwdGggLSAxKTtcbiBcdGlmIChzY2gtXHUwMDNlYnlwYXNzX2RlcHRoICE9IDApXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC01MzYwLDcgKzUzNjAsNyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfYnlwYXNzX2RzcChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4gXHQgKiBAc2NoLVx1MDAzZWJ5cGFzc19kZXB0aCB0cmFuc2l0aW9uaW5nIGZyb20gMCB0byAxIHRyaWdnZXJzIGVuYWJsaW5nLlxuIFx0ICogU2hvdWxkbid0IHN0YWdnZXIuXG4gXHQgKi9cbi1cdGlmIChXQVJOX09OX09OQ0UodGVzdF9hbmRfc2V0X2JpdCgwLCBcdTAwMjZzY2gtXHUwMDNlYnlwYXNzX2RzcF9jbGFpbSkpKVxuK1x0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCh0ZXN0X2FuZF9zZXRfYml0KDAsIFx1MDAyNnNjaC1cdTAwM2VieXBhc3NfZHNwX2NsYWltKSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qXG5AQCAtNTM4MCwxMSArNTM4MCwxMSBAQCBzdGF0aWMgdm9pZCBlbmFibGVfYnlwYXNzX2RzcChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4gXHQgKiBCdW1wIGVuYWJsZSBkZXB0aCBvbiBib3RoIEBzY2ggYW5kIGJ5cGFzcyBkaXNwYXRjaCBob3N0LlxuIFx0ICovXG4gXHRyZXQgPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZzY2gtXHUwMDNlYnlwYXNzX2RzcF9lbmFibGVfZGVwdGgpO1xuLVx0V0FSTl9PTl9PTkNFKHJldCBcdTAwM2M9IDApO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJldCBcdTAwM2M9IDApO1xuIFxuIFx0aWYgKGhvc3QgIT0gc2NoKSB7XG4gXHRcdHJldCA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmhvc3QtXHUwMDNlYnlwYXNzX2RzcF9lbmFibGVfZGVwdGgpO1xuLVx0XHRXQVJOX09OX09OQ0UocmV0IFx1MDAzYz0gMCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQgXHUwMDNjPSAwKTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtNTQwNSwxMSArNTQwNSwxMSBAQCBzdGF0aWMgdm9pZCBkaXNhYmxlX2J5cGFzc19kc3Aoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyZXQgPSBhdG9taWNfZGVjX3JldHVybihcdTAwMjZzY2gtXHUwMDNlYnlwYXNzX2RzcF9lbmFibGVfZGVwdGgpO1xuLVx0V0FSTl9PTl9PTkNFKHJldCBcdTAwM2MgMCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocmV0IFx1MDAzYyAwKTtcbiBcbiBcdGlmIChzY3hfcGFyZW50KHNjaCkpIHtcbiBcdFx0cmV0ID0gYXRvbWljX2RlY19yZXR1cm4oXHUwMDI2c2N4X3BhcmVudChzY2gpLVx1MDAzZWJ5cGFzc19kc3BfZW5hYmxlX2RlcHRoKTtcbi1cdFx0V0FSTl9PTl9PTkNFKHJldCBcdTAwM2MgMCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChyZXQgXHUwMDNjIDApO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuaW5kZXggM2ViZWMxODZmOTgyMzYuLjEyMTNlNzc2NjVmZTkzIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuY1xuKysrIGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuQEAgLTQwNCw3ICs0MDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWxfbGVhZl9jZnNfcnEoc3RydWN0IGNmc19ycSAqY2ZzX3JxKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfbGlzdF9sZWFmX2Nmc19ycShzdHJ1Y3QgcnEgKnJxKVxuIHtcbi1cdFdBUk5fT05fT05DRShycS1cdTAwM2V0bXBfYWxvbmVfYnJhbmNoICE9IFx1MDAyNnJxLVx1MDAzZWxlYWZfY2ZzX3JxX2xpc3QpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZXRtcF9hbG9uZV9icmFuY2ggIT0gXHUwMDI2cnEtXHUwMDNlbGVhZl9jZnNfcnFfbGlzdCk7XG4gfVxuIFxuIC8qIEl0ZXJhdGUgdGhyb3VnaCBhbGwgbGVhZiBjZnNfcnEncyBvbiBhIHJ1bnF1ZXVlICovXG5AQCAtNjg5LDcgKzY4OSw3IEBAIF9fc3VtX3dfdnJ1bnRpbWVfYWRkKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpXG4gXHRzNjQgd192cnVudGltZSwga2V5ID0gZW50aXR5X2tleShjZnNfcnEsIHNlKTtcbiBcbiBcdHdfdnJ1bnRpbWUgPSBrZXkgKiB3ZWlnaHQ7XG4tXHRXQVJOX09OX09OQ0UoKHdfdnJ1bnRpbWUgXHUwMDNlXHUwMDNlIDYzKSAhPSAod192cnVudGltZSBcdTAwM2VcdTAwM2UgNjIpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgod192cnVudGltZSBcdTAwM2VcdTAwM2UgNjMpICE9ICh3X3ZydW50aW1lIFx1MDAzZVx1MDAzZSA2MikpO1xuIFxuIFx0Y2ZzX3JxLVx1MDAzZXN1bV93X3ZydW50aW1lICs9IHdfdnJ1bnRpbWU7XG4gXHRjZnNfcnEtXHUwMDNlc3VtX3dlaWdodCArPSB3ZWlnaHQ7XG5AQCAtODYxLDcgKzg2MSw3IEBAIGJvb2wgdXBkYXRlX2VudGl0eV9sYWcoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSlcbiBcdHU2NCBhdnJ1bnRpbWUgPSBhdmdfdnJ1bnRpbWUoY2ZzX3JxKTtcbiBcdHM2NCB2bGFnID0gZW50aXR5X2xhZyhjZnNfcnEsIHNlLCBhdnJ1bnRpbWUpO1xuIFxuLVx0V0FSTl9PTl9PTkNFKCFzZS1cdTAwM2Vvbl9ycSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLVx1MDAzZW9uX3JxKTtcbiBcbiBcdGlmIChzZS1cdTAwM2VzY2hlZF9kZWxheWVkKSB7XG4gXHRcdC8qIHByZXZpb3VzIHZsYWcgXHUwMDNjIDAgb3RoZXJ3aXNlIHNlIHdvdWxkIG5vdCBiZSBkZWxheWVkICovXG5AQCAtMTE1Myw3ICsxMTUzLDcgQEAgc3RhdGljIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnBpY2tfZWV2ZGYoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBib29sIHByb3RlY3QpXG4gXHRpZiAoc2NoZWRfZmVhdChQSUNLX0JVRERZKSBcdTAwMjZcdTAwMjYgcHJvdGVjdCBcdTAwMjZcdTAwMjZcbiBcdCAgICBjZnNfcnEtXHUwMDNlbmV4dCBcdTAwMjZcdTAwMjYgZW50aXR5X2VsaWdpYmxlKGNmc19ycSwgY2ZzX3JxLVx1MDAzZW5leHQpKSB7XG4gXHRcdC8qIC1cdTAwM2VuZXh0IHdpbGwgbmV2ZXIgYmUgZGVsYXllZCAqL1xuLVx0XHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZW5leHQtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjZnNfcnEtXHUwMDNlbmV4dC1cdTAwM2VzY2hlZF9kZWxheWVkKTtcbiBcdFx0cmV0dXJuIGNmc19ycS1cdTAwM2VuZXh0O1xuIFx0fVxuIFxuQEAgLTQzMDIsOSArNDMwMiw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2FkX2F2Z19pc19kZWNheWVkKHN0cnVjdCBzY2hlZF9hdmcgKnNhKVxuIFx0ICogTWFrZSBzdXJlIHRoYXQgcm91bmRpbmcgYW5kL29yIHByb3BhZ2F0aW9uIG9mIFBFTFQgdmFsdWVzIG5ldmVyXG4gXHQgKiBicmVhayB0aGlzLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0Uoc2EtXHUwMDNlbG9hZF9hdmcgfHxcbi1cdFx0ICAgICAgc2EtXHUwMDNldXRpbF9hdmcgfHxcbi1cdFx0ICAgICAgc2EtXHUwMDNlcnVubmFibGVfYXZnKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChzYS1cdTAwM2Vsb2FkX2F2ZyB8fFxuK1x0XHRcdCAgICAgIHNhLVx1MDAzZXV0aWxfYXZnIHx8XG4rXHRcdFx0ICAgICAgc2EtXHUwMDNlcnVubmFibGVfYXZnKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC01NDYwLDcgKzU0NjAsNyBAQCBwbGFjZV9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxuIFxuIFx0XHR3ZWlnaHQgPSBhdmdfdnJ1bnRpbWVfd2VpZ2h0KGNmc19ycSwgc2UtXHUwMDNlbG9hZC53ZWlnaHQpO1xuIFx0XHRsYWcgKj0gbG9hZCArIHdlaWdodDtcbi1cdFx0aWYgKFdBUk5fT05fT05DRSghbG9hZCkpXG4rXHRcdGlmIChXQVJOX09OX09OQ0VfREVGRVJSRUQoIWxvYWQpKVxuIFx0XHRcdGxvYWQgPSAxO1xuIFx0XHRsYWcgPSBkaXY2NF9sb25nKGxhZywgbG9hZCk7XG4gXG5AQCAtNTY1Myw3ICs1NjUzLDcgQEAgZGVxdWV1ZV9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxuIFx0Y2xlYXJfYnVkZGllcyhjZnNfcnEsIHNlKTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgREVRVUVVRV9ERUxBWUVEKSB7XG4tXHRcdFdBUk5fT05fT05DRSghc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRib29sIGRlbGF5ID0gc2xlZXA7XG4gXHRcdC8qXG5AQCAtNTY2Myw3ICs1NjYzLDcgQEAgZGVxdWV1ZV9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IChERVFVRVVFX1NQRUNJQUwgfCBERVFVRVVFX1RIUk9UVExFKSlcbiBcdFx0XHRkZWxheSA9IGZhbHNlO1xuIFxuLVx0XHRXQVJOX09OX09OQ0UoZGVsYXkgXHUwMDI2XHUwMDI2IHNlLVx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQoZGVsYXkgXHUwMDI2XHUwMDI2IHNlLVx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xuIFxuIFx0XHRpZiAoc2NoZWRfZmVhdChERUxBWV9ERVFVRVVFKSBcdTAwMjZcdTAwMjYgZGVsYXkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhZW50aXR5X2VsaWdpYmxlKGNmc19ycSwgc2UpKSB7XG5AQCAtNTc0Nyw3ICs1NzQ3LDcgQEAgc2V0X25leHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGJvb2wgZmlyc3QpXG4gXHR9XG4gXG4gXHR1cGRhdGVfc3RhdHNfY3Vycl9zdGFydChjZnNfcnEsIHNlKTtcbi1cdFdBUk5fT05fT05DRShjZnNfcnEtXHUwMDNlY3Vycik7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoY2ZzX3JxLVx1MDAzZWN1cnIpO1xuIFx0Y2ZzX3JxLVx1MDAzZWN1cnIgPSBzZTtcbiBcbiBcdC8qXG5AQCAtNTgxNCw3ICs1ODE0LDcgQEAgc3RhdGljIHZvaWQgcHV0X3ByZXZfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqcHJldilcbiBcdFx0LyogaW4gIW9uX3JxIGNhc2UsIHVwZGF0ZSBvY2N1cnJlZCBhdCBkZXF1ZXVlICovXG4gXHRcdHVwZGF0ZV9sb2FkX2F2ZyhjZnNfcnEsIHByZXYsIDApO1xuIFx0fVxuLVx0V0FSTl9PTl9PTkNFKGNmc19ycS1cdTAwM2VjdXJyICE9IHByZXYpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cdTAwM2VjdXJyICE9IHByZXYpO1xuIFx0Y2ZzX3JxLVx1MDAzZWN1cnIgPSBOVUxMO1xuIH1cbiBcbkBAIC02MDE1LDcgKzYwMTUsNyBAQCBzdGF0aWMgdm9pZCB0aHJvdHRsZV9jZnNfcnFfd29yayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqd29yaylcbiBcdHN0cnVjdCBjZnNfcnEgKmNmc19ycTtcbiBcdHN0cnVjdCBycSAqcnE7XG4gXG4tXHRXQVJOX09OX09OQ0UocCAhPSBjdXJyZW50KTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChwICE9IGN1cnJlbnQpO1xuIFx0cC1cdTAwM2VzY2hlZF90aHJvdHRsZV93b3JrLm5leHQgPSBcdTAwMjZwLVx1MDAzZXNjaGVkX3Rocm90dGxlX3dvcms7XG4gXG4gXHQvKlxuQEAgLTYwNDEsNyArNjA0MSw3IEBAIHN0YXRpYyB2b2lkIHRocm90dGxlX2Nmc19ycV93b3JrKHN0cnVjdCBjYWxsYmFja19oZWFkICp3b3JrKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0cnEgPSBzY29wZS5ycTtcbiBcdFx0dXBkYXRlX3JxX2Nsb2NrKHJxKTtcbi1cdFx0V0FSTl9PTl9PTkNFKHAtXHUwMDNldGhyb3R0bGVkIHx8ICFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2V0aHJvdHRsZWQgfHwgIWxpc3RfZW1wdHkoXHUwMDI2cC1cdTAwM2V0aHJvdHRsZV9ub2RlKSk7XG4gXHRcdGRlcXVldWVfdGFza19mYWlyKHJxLCBwLCBERVFVRVVFX1NMRUVQIHwgREVRVUVVRV9USFJPVFRMRSk7XG4gXHRcdGxpc3RfYWRkKFx1MDAyNnAtXHUwMDNldGhyb3R0bGVfbm9kZSwgXHUwMDI2Y2ZzX3JxLVx1MDAzZXRocm90dGxlZF9saW1ib19saXN0KTtcbiBcdFx0LypcbkBAIC02MDcyLDcgKzYwNzIsNyBAQCB2b2lkIGluaXRfY2ZzX3Rocm90dGxlX3dvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHN0YXRpYyB2b2lkIGRldGFjaF90YXNrX2Nmc19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xuIHN0YXRpYyB2b2lkIGRlcXVldWVfdGhyb3R0bGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZmxhZ3MpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2Uub25fcnEpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlc2Uub25fcnEpO1xuIFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZXRocm90dGxlX25vZGUpO1xuIFxuIFx0LyogdGFzayBibG9ja2VkIGFmdGVyIHRocm90dGxlZCAqL1xuQEAgLTYwOTQsNyArNjA5NCw3IEBAIHN0YXRpYyBib29sIGVucXVldWVfdGhyb3R0bGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0c3RydWN0IGNmc19ycSAqY2ZzX3JxID0gY2ZzX3JxX29mKFx1MDAyNnAtXHUwMDNlc2UpO1xuIFxuIFx0LyogQHAgc2hvdWxkIGhhdmUgZ29uZSB0aHJvdWdoIGRlcXVldWVfdGhyb3R0bGVkX3Rhc2soKSBmaXJzdCAqL1xuLVx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFx1MDAyNnAtXHUwMDNldGhyb3R0bGVfbm9kZSkpO1xuIFxuIFx0LypcbiBcdCAqIElmIHRoZSB0aHJvdHRsZWQgdGFzayBAcCBpcyBlbnF1ZXVlZCB0byBhIHRocm90dGxlZCBjZnNfcnEsXG5AQCAtNjE2Miw3ICs2MTYyLDcgQEAgc3RhdGljIGludCB0Z191bnRocm90dGxlX3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgdm9pZCAqZGF0YSlcbiBcbiBcdFx0Y2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9ja19zZWxmID0gMDtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRSgoczY0KWRlbHRhIFx1MDAzYyAwKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCgoczY0KWRlbHRhIFx1MDAzYyAwKSlcbiBcdFx0XHRkZWx0YSA9IDA7XG4gXG4gXHRcdGNmc19ycS1cdTAwM2V0aHJvdHRsZWRfY2xvY2tfc2VsZl90aW1lICs9IGRlbHRhO1xuQEAgLTYyMzEsOCArNjIzMSw4IEBAIHN0YXRpYyBpbnQgdGdfdGhyb3R0bGVfZG93bihzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpXG4gXHRcdGNmc19ycS1cdTAwM2VwZWx0X2Nsb2NrX3Rocm90dGxlZCA9IDE7XG4gXHR9XG4gXG4tXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9ja19zZWxmKTtcbi1cdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZjZnNfcnEtXHUwMDNldGhyb3R0bGVkX2xpbWJvX2xpc3QpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjZnNfcnEtXHUwMDNldGhyb3R0bGVkX2Nsb2NrX3NlbGYpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFx1MDAyNmNmc19ycS1cdTAwM2V0aHJvdHRsZWRfbGltYm9fbGlzdCkpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTYyNzMsNyArNjI3Myw3IEBAIHN0YXRpYyBib29sIHRocm90dGxlX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXG4gXHQgKiB0aHJvdHRsZWQtbGlzdC4gIHJxLVx1MDAzZWxvY2sgcHJvdGVjdHMgY29tcGxldGlvbi5cbiBcdCAqL1xuIFx0Y2ZzX3JxLVx1MDAzZXRocm90dGxlZCA9IDE7XG4tXHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9jayk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoY2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jbG9jayk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtNjM4MCw3ICs2MzgwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdW50aHJvdHRsZV9jZnNfcnFfYXN5bmMoc3RydWN0IGNmc19ycSAqY2ZzX3JxKVxuIFx0fVxuIFxuIFx0LyogQWxyZWFkeSBlbnF1ZXVlZCAqL1xuLVx0aWYgKFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZjZnNfcnEtXHUwMDNldGhyb3R0bGVkX2NzZF9saXN0KSkpXG4rXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFx1MDAyNmNmc19ycS1cdTAwM2V0aHJvdHRsZWRfY3NkX2xpc3QpKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Zmlyc3QgPSBsaXN0X2VtcHR5KFx1MDAyNnJxLVx1MDAzZWNmc2JfY3NkX2xpc3QpO1xuQEAgLTYzOTMsNyArNjM5Myw3IEBAIHN0YXRpYyB2b2lkIHVudGhyb3R0bGVfY2ZzX3JxX2FzeW5jKHN0cnVjdCBjZnNfcnEgKmNmc19ycSlcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxX29mKGNmc19ycSkpO1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRSghY2ZzX3JxX3Rocm90dGxlZChjZnNfcnEpIHx8XG4rXHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFjZnNfcnFfdGhyb3R0bGVkKGNmc19ycSkgfHxcbiBcdCAgICBjZnNfcnEtXHUwMDNlcnVudGltZV9yZW1haW5pbmcgXHUwMDNjPSAwKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTY0MjksNyArNjQyOSw3IEBAIHN0YXRpYyBib29sIGRpc3RyaWJ1dGVfY2ZzX3J1bnRpbWUoc3RydWN0IGNmc19iYW5kd2lkdGggKmNmc19iKVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0LyogQnkgdGhlIGFib3ZlIGNoZWNrcywgdGhpcyBzaG91bGQgbmV2ZXIgYmUgdHJ1ZSAqL1xuLVx0XHRXQVJOX09OX09OQ0UoY2ZzX3JxLVx1MDAzZXJ1bnRpbWVfcmVtYWluaW5nIFx1MDAzZSAwKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGNmc19ycS1cdTAwM2VydW50aW1lX3JlbWFpbmluZyBcdTAwM2UgMCk7XG4gXG4gXHRcdHJhd19zcGluX2xvY2soXHUwMDI2Y2ZzX2ItXHUwMDNlbG9jayk7XG4gXHRcdHJ1bnRpbWUgPSAtY2ZzX3JxLVx1MDAzZXJ1bnRpbWVfcmVtYWluaW5nICsgMTtcbkBAIC02NDUwLDcgKzY0NTAsNyBAQCBzdGF0aWMgYm9vbCBkaXN0cmlidXRlX2Nmc19ydW50aW1lKHN0cnVjdCBjZnNfYmFuZHdpZHRoICpjZnNfYilcbiBcdFx0XHRcdCAqIFdlIGN1cnJlbnRseSBvbmx5IGV4cGVjdCB0byBiZSB1bnRocm90dGxpbmdcbiBcdFx0XHRcdCAqIGEgc2luZ2xlIGNmc19ycSBsb2NhbGx5LlxuIFx0XHRcdFx0ICovXG4tXHRcdFx0XHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bG9jYWxfdW50aHJvdHRsZSkpO1xuK1x0XHRcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFsaXN0X2VtcHR5KFx1MDAyNmxvY2FsX3VudGhyb3R0bGUpKTtcbiBcdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2ZzX3JxLVx1MDAzZXRocm90dGxlZF9jc2RfbGlzdCxcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2bG9jYWxfdW50aHJvdHRsZSk7XG4gXHRcdFx0fVxuQEAgLTY0NzUsNyArNjQ3NSw3IEBAIHN0YXRpYyBib29sIGRpc3RyaWJ1dGVfY2ZzX3J1bnRpbWUoc3RydWN0IGNmc19iYW5kd2lkdGggKmNmc19iKVxuIFxuIFx0XHRycV91bmxvY2tfaXJxcmVzdG9yZShycSwgXHUwMDI2cmYpO1xuIFx0fVxuLVx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNmxvY2FsX3VudGhyb3R0bGUpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghbGlzdF9lbXB0eShcdTAwMjZsb2NhbF91bnRocm90dGxlKSk7XG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbkBAIC03MDQ4LDcgKzcwNDgsNyBAQCBzdGF0aWMgdm9pZCBocnRpY2tfc3RhcnRfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHR1NjQgdmRlbHRhO1xuIFx0dTY0IGRlbHRhO1xuIFxuLVx0V0FSTl9PTl9PTkNFKHRhc2tfcnEocCkgIT0gcnEpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHRhc2tfcnEocCkgIT0gcnEpO1xuIFxuIFx0aWYgKHJxLVx1MDAzZWNmcy5oX25yX3F1ZXVlZCBcdTAwM2M9IDEpXG4gXHRcdHJldHVybjtcbkBAIC03MTcxLDggKzcxNzEsOCBAQCByZXF1ZXVlX2RlbGF5ZWRfZW50aXR5KHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKVxuIFx0ICogQmVjYXVzZSBhIGRlbGF5ZWQgZW50aXR5IGlzIG9uZSB0aGF0IGlzIHN0aWxsIG9uXG4gXHQgKiB0aGUgcnVucXVldWUgY29tcGV0aW5nIHVudGlsIGVsZWdpYmlsaXR5LlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UoIXNlLVx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xuLVx0V0FSTl9PTl9PTkNFKCFzZS1cdTAwM2Vvbl9ycSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXNlLVx1MDAzZXNjaGVkX2RlbGF5ZWQpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCFzZS1cdTAwM2Vvbl9ycSk7XG4gXG4gXHRpZiAodXBkYXRlX2VudGl0eV9sYWcoY2ZzX3JxLCBzZSkpIHtcbiBcdFx0Y2ZzX3JxLVx1MDAzZW5yX3F1ZXVlZC0tO1xuQEAgLTc0MDksOCArNzQwOSw4IEBAIHN0YXRpYyBpbnQgZGVxdWV1ZV9lbnRpdGllcyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IGZsYWdzKVxuIFx0XHRycS1cdTAwM2VuZXh0X2JhbGFuY2UgPSBqaWZmaWVzO1xuIFxuIFx0aWYgKHAgXHUwMDI2XHUwMDI2IHRhc2tfZGVsYXllZCkge1xuLVx0XHRXQVJOX09OX09OQ0UoIXRhc2tfc2xlZXApO1xuLVx0XHRXQVJOX09OX09OQ0UocC1cdTAwM2Vvbl9ycSAhPSAxKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKCF0YXNrX3NsZWVwKTtcbitcdFx0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHAtXHUwMDNlb25fcnEgIT0gMSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEZpeC11cCB3aGF0IGJsb2NrX3Rhc2soKSBza2lwcGVkLlxuQEAgLTg5NzYsNyArODk3Niw3IEBAIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfZmFpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBhZmZpbml0eV9jb250ZXh0XG4gc3RhdGljIHZvaWQgc2V0X25leHRfYnVkZHkoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpXG4ge1xuIFx0Zm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKSB7XG4tXHRcdGlmIChXQVJOX09OX09OQ0UoIXNlLVx1MDAzZW9uX3JxKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRCghc2UtXHUwMDNlb25fcnEpKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0aWYgKHNlX2lzX2lkbGUoc2UpKVxuIFx0XHRcdHJldHVybjtcbkBAIC05MDIzLDcgKzkwMjMsNyBAQCBwcmVlbXB0X3N5bmMoc3RydWN0IHJxICpycSwgaW50IHdha2VfZmxhZ3MsXG4gXHQgKiBXRl9TWU5DIHdpdGhvdXQgV0ZfVFRXVSBpcyBub3QgZXhwZWN0ZWQgc28gd2FybiBpZiBpdCBoYXBwZW5zIGV2ZW5cbiBcdCAqIHRob3VnaCBpdCBpcyBsaWtlbHkgaGFybWxlc3MuXG4gXHQgKi9cbi1cdFdBUk5fT05fT05DRSghKHdha2VfZmxhZ3MgXHUwMDI2IFdGX1RUV1UpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghKHdha2VfZmxhZ3MgXHUwMDI2IFdGX1RUV1UpKTtcbiBcbiBcdHRocmVzaG9sZCA9IHN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdDtcbiBcdGRlbHRhID0gcnFfY2xvY2tfdGFzayhycSkgLSBzZS1cdTAwM2VleGVjX3N0YXJ0O1xuQEAgLTkwOTUsNyArOTA5NSw3IEBAIHN0YXRpYyB2b2lkIHdha2V1cF9wcmVlbXB0X2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZV9mXG4gXHRcdHJldHVybjtcbiBcbiBcdGZpbmRfbWF0Y2hpbmdfc2UoXHUwMDI2c2UsIFx1MDAyNnBzZSk7XG4tXHRXQVJOX09OX09OQ0UoIXBzZSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXBzZSk7XG4gXG4gXHRjc2VfaXNfaWRsZSA9IHNlX2lzX2lkbGUoc2UpO1xuIFx0cHNlX2lzX2lkbGUgPSBzZV9pc19pZGxlKHBzZSk7XG5AQCAtOTg1Nyw4ICs5ODU3LDggQEAgc3RhdGljIHZvaWQgZGV0YWNoX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpXG4gXHRcdHNjaGVkc3RhdF9pbmMocC1cdTAwM2VzdGF0cy5ucl9mb3JjZWRfbWlncmF0aW9ucyk7XG4gXHR9XG4gXG4tXHRXQVJOX09OKHRhc2tfY3VycmVudChlbnYtXHUwMDNlc3JjX3JxLCBwKSk7XG4tXHRXQVJOX09OKHRhc2tfY3VycmVudF9kb25vcihlbnYtXHUwMDNlc3JjX3JxLCBwKSk7XG4rXHRXQVJOX09OX0RFRkVSUkVEKHRhc2tfY3VycmVudChlbnYtXHUwMDNlc3JjX3JxLCBwKSk7XG4rXHRXQVJOX09OX0RFRkVSUkVEKHRhc2tfY3VycmVudF9kb25vcihlbnYtXHUwMDNlc3JjX3JxLCBwKSk7XG4gXG4gXHRkZWFjdGl2YXRlX3Rhc2soZW52LVx1MDAzZXNyY19ycSwgcCwgREVRVUVVRV9OT0NMT0NLKTtcbiBcdHNldF90YXNrX2NwdShwLCBlbnYtXHUwMDNlZHN0X2NwdSk7XG5AQCAtMTIxNTEsNyArMTIxNTEsNyBAQCBzdGF0aWMgaW50IHNjaGVkX2JhbGFuY2VfcnEoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEsXG4gXHRcdGdvdG8gb3V0X2JhbGFuY2VkO1xuIFx0fVxuIFxuLVx0V0FSTl9PTl9PTkNFKGJ1c2llc3QgPT0gZW52LmRzdF9ycSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoYnVzaWVzdCA9PSBlbnYuZHN0X3JxKTtcbiBcbiBcdHVwZGF0ZV9sYl9pbWJhbGFuY2Vfc3RhdChcdTAwMjZlbnYsIHNkLCBpZGxlKTtcbiBcbkBAIC0xMjQ2MSw3ICsxMjQ2MSw3IEBAIHN0YXRpYyBpbnQgYWN0aXZlX2xvYWRfYmFsYW5jZV9jcHVfc3RvcCh2b2lkICpkYXRhKVxuIFx0ICogd2UgbmVlZCB0byBmaXggaXQuIE9yaWdpbmFsbHkgcmVwb3J0ZWQgYnlcbiBcdCAqIEJqb3JuIEhlbGdhYXMgb24gYSAxMjgtQ1BVIHNldHVwLlxuIFx0ICovXG4tXHRXQVJOX09OX09OQ0UoYnVzaWVzdF9ycSA9PSB0YXJnZXRfcnEpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKGJ1c2llc3RfcnEgPT0gdGFyZ2V0X3JxKTtcbiBcbiBcdC8qIFNlYXJjaCBmb3IgYW4gc2Qgc3Bhbm5pbmcgdXMgYW5kIHRoZSB0YXJnZXQgQ1BVLiAqL1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuQEAgLTEyODgzLDcgKzEyODgzLDcgQEAgc3RhdGljIHZvaWQgc2V0X2NwdV9zZF9zdGF0ZV9idXN5KGludCBjcHUpXG4gXG4gdm9pZCBub2h6X2JhbGFuY2VfZXhpdF9pZGxlKHN0cnVjdCBycSAqcnEpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHJxICE9IHRoaXNfcnEoKSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEgIT0gdGhpc19ycSgpKTtcbiBcbiBcdGlmIChsaWtlbHkoIXJxLVx1MDAzZW5vaHpfdGlja19zdG9wcGVkKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTEyOTE4LDcgKzEyOTE4LDcgQEAgdm9pZCBub2h6X2JhbGFuY2VfZW50ZXJfaWRsZShpbnQgY3B1KVxuIHtcbiBcdHN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTtcbiBcbi1cdFdBUk5fT05fT05DRShjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiBcbiBcdC8qIElmIHRoaXMgQ1BVIGlzIGdvaW5nIGRvd24sIHRoZW4gbm90aGluZyBuZWVkcyB0byBiZSBkb25lOiAqL1xuIFx0aWYgKCFjcHVfYWN0aXZlKGNwdSkpXG5AQCAtMTMwMDAsNyArMTMwMDAsNyBAQCBzdGF0aWMgdm9pZCBfbm9oel9pZGxlX2JhbGFuY2Uoc3RydWN0IHJxICp0aGlzX3JxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gXHRpbnQgYmFsYW5jZV9jcHU7XG4gXHRzdHJ1Y3QgcnEgKnJxO1xuIFxuLVx0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgTk9IWl9LSUNLX01BU0spID09IE5PSFpfQkFMQU5DRV9LSUNLKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCgoZmxhZ3MgXHUwMDI2IE5PSFpfS0lDS19NQVNLKSA9PSBOT0haX0JBTEFOQ0VfS0lDSyk7XG4gXG4gXHQvKlxuIFx0ICogV2UgYXNzdW1lIHRoZXJlIHdpbGwgYmUgbm8gaWRsZSBsb2FkIGFmdGVyIHRoaXMgdXBkYXRlIGFuZCBjbGVhclxuQEAgLTEzNjIzLDcgKzEzNjIzLDcgQEAgYm9vbCBjZnNfcHJpb19sZXNzKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqYSwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpiLFxuIFx0c3RydWN0IGNmc19ycSAqY2ZzX3JxYjtcbiBcdHM2NCBkZWx0YTtcbiBcbi1cdFdBUk5fT05fT05DRSh0YXNrX3JxKGIpLVx1MDAzZWNvcmUgIT0gcnEtXHUwMDNlY29yZSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19ycShiKS1cdTAwM2Vjb3JlICE9IHJxLVx1MDAzZWNvcmUpO1xuIFxuICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRFxuIFx0LypcbkBAIC0xMzgzOSw3ICsxMzgzOSw3IEBAIHN0YXRpYyB2b2lkIHN3aXRjaGVkX2Zyb21fZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXG4gc3RhdGljIHZvaWQgc3dpdGNoZWRfdG9fZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHAtXHUwMDNlc2Uuc2NoZWRfZGVsYXllZCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocC1cdTAwM2VzZS5zY2hlZF9kZWxheWVkKTtcbiBcbiBcdGF0dGFjaF90YXNrX2Nmc19ycShwKTtcbiBcbkBAIC0xMzg3Miw3ICsxMzg3Miw3IEBAIHN0YXRpYyB2b2lkIF9fc2V0X25leHRfdGFza19mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBmaXJzXG4gXHRpZiAoIWZpcnN0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRXQVJOX09OX09OQ0Uoc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoc2UtXHUwMDNlc2NoZWRfZGVsYXllZCk7XG4gXG4gXHRpZiAoaHJ0aWNrX2VuYWJsZWRfZmFpcihycSkpXG4gXHRcdGhydGlja19zdGFydF9mYWlyKHJxLCBwKTtcbkBAIC0xNDE0OCw3ICsxNDE0OCw3IEBAIGludCBzY2hlZF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGxvbmcgaWRsZSlcbiBcdFx0cnFfbG9ja19pcnFzYXZlKHJxLCBcdTAwMjZyZik7XG4gXG4gXHRcdGdycF9jZnNfcnEtXHUwMDNlaWRsZSA9IGlkbGU7XG4tXHRcdGlmIChXQVJOX09OX09OQ0Uod2FzX2lkbGUgPT0gY2ZzX3JxX2lzX2lkbGUoZ3JwX2Nmc19ycSkpKVxuK1x0XHRpZiAoV0FSTl9PTl9PTkNFX0RFRkVSUkVEKHdhc19pZGxlID09IGNmc19ycV9pc19pZGxlKGdycF9jZnNfcnEpKSlcbiBcdFx0XHRnb3RvIG5leHRfY3B1O1xuIFxuIFx0XHRpZGxlX3Rhc2tfZGVsdGEgPSBncnBfY2ZzX3JxLVx1MDAzZWhfbnJfcXVldWVkIC1cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvcnQuYyBiL2tlcm5lbC9zY2hlZC9ydC5jXG5pbmRleCA0ZWU4ZmFmMDE0NDFhMy4uNTA2ZDBmMWFmYTU4ZjkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvcnQuY1xuKysrIGIva2VybmVsL3NjaGVkL3J0LmNcbkBAIC0xNzAsNyArMTcwLDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9ydF9iYW5kd2lkdGgoc3RydWN0IHJ0X2JhbmR3aWR0aCAqcnRfYilcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSlcbiB7XG4tXHRXQVJOX09OX09OQ0UoIXJ0X2VudGl0eV9pc190YXNrKHJ0X3NlKSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQoIXJ0X2VudGl0eV9pc190YXNrKHJ0X3NlKSk7XG4gXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKHJ0X3NlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJ0KTtcbiB9XG5AQCAtMTc4LDEzICsxNzgsMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0X3Rhc2tfb2Yoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpXG4ge1xuIFx0LyogQ2Fubm90IGZvbGQgd2l0aCBub24tQ09ORklHX1JUX0dST1VQX1NDSEVEIHZlcnNpb24sIGxheW91dCAqL1xuLVx0V0FSTl9PTighcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuIFx0cmV0dXJuIHJ0X3JxLVx1MDAzZXJxO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBydF9ycSAqcnRfcnFfb2Zfc2Uoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpXG4ge1xuLVx0V0FSTl9PTighcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9zZS1cdTAwM2VydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9zZS1cdTAwM2VydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuIFx0cmV0dXJuIHJ0X3NlLVx1MDAzZXJ0X3JxO1xuIH1cbiBcbkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3NlKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKVxuIHtcbiBcdHN0cnVjdCBydF9ycSAqcnRfcnEgPSBydF9zZS1cdTAwM2VydF9ycTtcbiBcbi1cdFdBUk5fT04oIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcnRfcnEtXHUwMDNldGcgIT0gXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcbitcdFdBUk5fT05fREVGRVJSRUQoIXJ0X2dyb3VwX3NjaGVkX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcnRfcnEtXHUwMDNldGcgIT0gXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcbiBcdHJldHVybiBydF9ycS1cdTAwM2VycTtcbiB9XG4gXG5AQCAtNDkzLDcgKzQ5Myw3IEBAIHR5cGVkZWYgc3RydWN0IHRhc2tfZ3JvdXAgKnJ0X3JxX2l0ZXJfdDtcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX2dyb3VwICpuZXh0X3Rhc2tfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxuIHtcbiBcdGlmICghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpKSB7XG4tXHRcdFdBUk5fT04odGcgIT0gXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcbitcdFx0V0FSTl9PTl9ERUZFUlJFRCh0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbkBAIC03MjMsNyArNzIzLDcgQEAgc3RhdGljIHZvaWQgX19kaXNhYmxlX3J1bnRpbWUoc3RydWN0IHJxICpycSlcbiBcdFx0ICogV2UgY2Fubm90IGJlIGxlZnQgd2FudGluZyAtIHRoYXQgd291bGQgbWVhbiBzb21lIHJ1bnRpbWVcbiBcdFx0ICogbGVha2VkIG91dCBvZiB0aGUgc3lzdGVtLlxuIFx0XHQgKi9cbi1cdFx0V0FSTl9PTl9PTkNFKHdhbnQpO1xuK1x0XHRXQVJOX09OX09OQ0VfREVGRVJSRUQod2FudCk7XG4gYmFsYW5jZWQ6XG4gXHRcdC8qXG4gXHRcdCAqIERpc2FibGUgYWxsIHRoZSBib3Jyb3cgbG9naWMgYnkgcHJldGVuZGluZyB3ZSBoYXZlIGluZlxuQEAgLTEwOTQsNyArMTA5NCw3IEBAIGRlY19ydF9wcmlvKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvKVxuIFxuIFx0aWYgKHJ0X3JxLVx1MDAzZXJ0X25yX3J1bm5pbmcpIHtcbiBcbi1cdFx0V0FSTl9PTihwcmlvIFx1MDAzYyBwcmV2X3ByaW8pO1xuK1x0XHRXQVJOX09OX0RFRkVSUkVEKHByaW8gXHUwMDNjIHByZXZfcHJpbyk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgbWF5IGhhdmUgYmVlbiBvdXIgaGlnaGVzdCB0YXNrLCBhbmQgdGhlcmVmb3JlXG5AQCAtMTEzMSw3ICsxMTMxLDcgQEAgZGVjX3J0X2dyb3VwKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxuIFx0aWYgKHJ0X3NlX2Jvb3N0ZWQocnRfc2UpKVxuIFx0XHRydF9ycS1cdTAwM2VydF9ucl9ib29zdGVkLS07XG4gXG4tXHRXQVJOX09OKCFydF9ycS1cdTAwM2VydF9ucl9ydW5uaW5nIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2VydF9ucl9ib29zdGVkKTtcbitcdFdBUk5fT05fREVGRVJSRUQoIXJ0X3JxLVx1MDAzZXJ0X25yX3J1bm5pbmcgXHUwMDI2XHUwMDI2IHJ0X3JxLVx1MDAzZXJ0X25yX2Jvb3N0ZWQpO1xuIH1cbiBcbiAjZWxzZSAvKiAhQ09ORklHX1JUX0dST1VQX1NDSEVEOiAqL1xuQEAgLTExNzYsNyArMTE3Niw3IEBAIHZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxuIHtcbiBcdGludCBwcmlvID0gcnRfc2VfcHJpbyhydF9zZSk7XG4gXG4tXHRXQVJOX09OKCFydF9wcmlvKHByaW8pKTtcbitcdFdBUk5fT05fREVGRVJSRUQoIXJ0X3ByaW8ocHJpbykpO1xuIFx0cnRfcnEtXHUwMDNlcnRfbnJfcnVubmluZyArPSBydF9zZV9ucl9ydW5uaW5nKHJ0X3NlKTtcbiBcdHJ0X3JxLVx1MDAzZXJyX25yX3J1bm5pbmcgKz0gcnRfc2VfcnJfbnJfcnVubmluZyhydF9zZSk7XG4gXG5AQCAtMTE4Nyw4ICsxMTg3LDggQEAgdm9pZCBpbmNfcnRfdGFza3Moc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpXG4gc3RhdGljIGlubGluZVxuIHZvaWQgZGVjX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKVxuIHtcbi1cdFdBUk5fT04oIXJ0X3ByaW8ocnRfc2VfcHJpbyhydF9zZSkpKTtcbi1cdFdBUk5fT04oIXJ0X3JxLVx1MDAzZXJ0X25yX3J1bm5pbmcpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfcHJpbyhydF9zZV9wcmlvKHJ0X3NlKSkpO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfcnEtXHUwMDNlcnRfbnJfcnVubmluZyk7XG4gXHRydF9ycS1cdTAwM2VydF9ucl9ydW5uaW5nIC09IHJ0X3NlX25yX3J1bm5pbmcocnRfc2UpO1xuIFx0cnRfcnEtXHUwMDNlcnJfbnJfcnVubmluZyAtPSBydF9zZV9ycl9ucl9ydW5uaW5nKHJ0X3NlKTtcbiBcbkBAIC0xMzQ4LDcgKzEzNDgsNyBAQCBzdGF0aWMgdm9pZCBfX2VucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCB1bnNpZ25lZCBpbnQgZmxhZ1xuIFx0fVxuIFxuIFx0aWYgKG1vdmVfZW50aXR5KGZsYWdzKSkge1xuLVx0XHRXQVJOX09OX09OQ0UocnRfc2UtXHUwMDNlb25fbGlzdCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRChydF9zZS1cdTAwM2Vvbl9saXN0KTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBFTlFVRVVFX0hFQUQpXG4gXHRcdFx0bGlzdF9hZGQoXHUwMDI2cnRfc2UtXHUwMDNlcnVuX2xpc3QsIHF1ZXVlKTtcbiBcdFx0ZWxzZVxuQEAgLTEzNjgsNyArMTM2OCw3IEBAIHN0YXRpYyB2b2lkIF9fZGVxdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHVuc2lnbmVkIGludCBmbGFnXG4gXHRzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXkgPSBcdTAwMjZydF9ycS1cdTAwM2VhY3RpdmU7XG4gXG4gXHRpZiAobW92ZV9lbnRpdHkoZmxhZ3MpKSB7XG4tXHRcdFdBUk5fT05fT05DRSghcnRfc2UtXHUwMDNlb25fbGlzdCk7XG4rXHRcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghcnRfc2UtXHUwMDNlb25fbGlzdCk7XG4gXHRcdF9fZGVsaXN0X3J0X2VudGl0eShydF9zZSwgYXJyYXkpO1xuIFx0fVxuIFx0cnRfc2UtXHUwMDNlb25fcnEgPSAwO1xuQEAgLTE2ODQsNyArMTY4NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpwaWNrX25leHRfcnRfZW50aXR5KHN0cnVjdCBydF9ycSAqcnRfcnEpXG4gXHRCVUdfT04oaWR4IFx1MDAzZT0gTUFYX1JUX1BSSU8pO1xuIFxuIFx0cXVldWUgPSBhcnJheS1cdTAwM2VxdWV1ZSArIGlkeDtcbi1cdGlmIChXQVJOX09OX09OQ0UobGlzdF9lbXB0eShxdWV1ZSkpKVxuK1x0aWYgKFdBUk5fT05fT05DRV9ERUZFUlJFRChsaXN0X2VtcHR5KHF1ZXVlKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0bmV4dCA9IGxpc3RfZW50cnkocXVldWUtXHUwMDNlbmV4dCwgc3RydWN0IHNjaGVkX3J0X2VudGl0eSwgcnVuX2xpc3QpO1xuIFxuQEAgLTIwMTYsNyArMjAxNiw3IEBAIHN0YXRpYyBpbnQgcHVzaF9ydF90YXNrKHN0cnVjdCBycSAqcnEsIGJvb2wgcHVsbClcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRpZiAoV0FSTl9PTihuZXh0X3Rhc2sgPT0gcnEtXHUwMDNlY3VycikpXG4rXHRpZiAoV0FSTl9PTl9ERUZFUlJFRChuZXh0X3Rhc2sgPT0gcnEtXHUwMDNlY3VycikpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogV2UgbWlnaHQgcmVsZWFzZSBycSBsb2NrICovXG5AQCAtMjMxNiw4ICsyMzE2LDggQEAgc3RhdGljIHZvaWQgcHVsbF9ydF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSlcbiBcdFx0ICogdGhlIHRvLWJlLXNjaGVkdWxlZCB0YXNrP1xuIFx0XHQgKi9cbiBcdFx0aWYgKHAgXHUwMDI2XHUwMDI2IChwLVx1MDAzZXByaW8gXHUwMDNjIHRoaXNfcnEtXHUwMDNlcnQuaGlnaGVzdF9wcmlvLmN1cnIpKSB7XG4tXHRcdFx0V0FSTl9PTihwID09IHNyY19ycS1cdTAwM2VjdXJyKTtcbi1cdFx0XHRXQVJOX09OKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7XG4rXHRcdFx0V0FSTl9PTl9ERUZFUlJFRChwID09IHNyY19ycS1cdTAwM2VjdXJyKTtcbitcdFx0XHRXQVJOX09OX0RFRkVSUkVEKCF0YXNrX29uX3JxX3F1ZXVlZChwKSk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcCBpcyBoaWdoZXIgaW4gcHJpb3JpdHlcbkBAIC0yNTgzLDcgKzI1ODMsNyBAQCBzdGF0aWMgaW50IHRhc2tfaXNfdGhyb3R0bGVkX3J0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSlcbiBcbiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVEIC8vIFhYWCBtYXliZSBhZGQgdGFza19ydF9ycSgpLCBzZWUgYWxzbyBzY2hlZF9ydF9wZXJpb2RfcnRfcnFcbiBcdHJ0X3JxID0gdGFza19ncm91cChwKS1cdTAwM2VydF9ycVtjcHVdO1xuLVx0V0FSTl9PTighcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuK1x0V0FSTl9PTl9ERUZFUlJFRCghcnRfZ3JvdXBfc2NoZWRfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBydF9ycS1cdTAwM2V0ZyAhPSBcdTAwMjZyb290X3Rhc2tfZ3JvdXApO1xuICNlbHNlXG4gXHRydF9ycSA9IFx1MDAyNmNwdV9ycShjcHUpLVx1MDAzZXJ0O1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmhcbmluZGV4IDlmNjNiMTVkMzA5ZDExLi5mNzRmOWNkNDRlMDk4NiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oXG4rKysgYi9rZXJuZWwvc2NoZWQvc2NoZWQuaFxuQEAgLTE2ODQsNyArMTY4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfaWRsZV9jb3JlKHN0cnVjdCBycSAqcnEpIHsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX29mKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKVxuIHtcbi1cdFdBUk5fT05fT05DRSghZW50aXR5X2lzX3Rhc2soc2UpKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRCghZW50aXR5X2lzX3Rhc2soc2UpKTtcbiBcdHJldHVybiBjb250YWluZXJfb2Yoc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgc2UpO1xuIH1cbiBcbkBAIC0xNzY2LDcgKzE3NjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X2Nsb2NrX3VwZGF0ZWQoc3RydWN0IHJxICpycSlcbiBcdCAqIFRoZSBvbmx5IHJlYXNvbiBmb3Igbm90IHNlZWluZyBhIGNsb2NrIHVwZGF0ZSBzaW5jZSB0aGVcbiBcdCAqIGxhc3QgcnFfcGluX2xvY2soKSBpcyBpZiB3ZSdyZSBjdXJyZW50bHkgc2tpcHBpbmcgdXBkYXRlcy5cbiBcdCAqL1xuLVx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcdTAwM2MgUlFDRl9BQ1RfU0tJUCk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXHUwMDNlY2xvY2tfdXBkYXRlX2ZsYWdzIFx1MDAzYyBSUUNGX0FDVF9TS0lQKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB1NjQgcnFfY2xvY2soc3RydWN0IHJxICpycSlcbkBAIC0xODEzLDcgKzE4MTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcnFfY2xvY2tfY2FuY2VsX3NraXB1cGRhdGUoc3RydWN0IHJxICpycSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgcnFfY2xvY2tfc3RhcnRfbG9vcF91cGRhdGUoc3RydWN0IHJxICpycSlcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9ycV9oZWxkKHJxKTtcbi1cdFdBUk5fT05fT05DRShycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgXHUwMDI2IFJRQ0ZfQUNUX1NLSVApO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZWNsb2NrX3VwZGF0ZV9mbGFncyBcdTAwMjYgUlFDRl9BQ1RfU0tJUCk7XG4gXHRycS1cdTAwM2VjbG9ja191cGRhdGVfZmxhZ3MgfD0gUlFDRl9BQ1RfU0tJUDtcbiB9XG4gXG5AQCAtMTg3MCw5ICsxODcwLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpIHt9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9iYWxhbmNlX2NhbGxiYWNrc19lbXB0eShzdHJ1Y3QgcnEgKnJxKVxuIHtcbi1cdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICBycS1cdTAwM2ViYWxhbmNlX2NhbGxiYWNrIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgIT0gXHUwMDI2YmFsYW5jZV9wdXNoX2NhbGxiYWNrKTtcbitcdFdBUk5fT05fT05DRV9ERUZFUlJFRChJU19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgICBycS1cdTAwM2ViYWxhbmNlX2NhbGxiYWNrIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgIHJxLVx1MDAzZWJhbGFuY2VfY2FsbGJhY2sgIT0gXHUwMDI2YmFsYW5jZV9wdXNoX2NhbGxiYWNrKTtcbiB9XG4gXG4gLypcbkBAIC0yNjgxLDcgKzI2ODEsNyBAQCBzdHJ1Y3Qgc2NoZWRfY2xhc3Mge1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldilcbiB7XG4tXHRXQVJOX09OX09OQ0UocnEtXHUwMDNlZG9ub3IgIT0gcHJldik7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQocnEtXHUwMDNlZG9ub3IgIT0gcHJldik7XG4gXHRwcmV2LVx1MDAzZXNjaGVkX2NsYXNzLVx1MDAzZXB1dF9wcmV2X3Rhc2socnEsIHByZXYsIE5VTEwpO1xuIH1cbiBcbkBAIC0yNzA0LDcgKzI3MDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3ByZXZfc2V0X25leHRfdGFzayhzdHJ1Y3QgcnEgKnJxLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpXG4ge1xuLVx0V0FSTl9PTl9PTkNFKHJxLVx1MDAzZWRvbm9yICE9IHByZXYpO1xuK1x0V0FSTl9PTl9PTkNFX0RFRkVSUkVEKHJxLVx1MDAzZWRvbm9yICE9IHByZXYpO1xuIFxuIFx0X19wdXRfcHJldl9zZXRfbmV4dF9kbF9zZXJ2ZXIocnEsIHByZXYsIG5leHQpO1xuIFxuQEAgLTMwMzAsNyArMzAzMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhdHRhY2hfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfcnFfaGVsZChycSk7XG4gXG4tXHRXQVJOX09OX09OQ0UodGFza19ycShwKSAhPSBycSk7XG4rXHRXQVJOX09OX09OQ0VfREVGRVJSRUQodGFza19ycShwKSAhPSBycSk7XG4gXHRhY3RpdmF0ZV90YXNrKHJxLCBwLCBFTlFVRVVFX05PQ0xPQ0spO1xuIFx0d2FrZXVwX3ByZWVtcHQocnEsIHAsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9saWIvYnVnLmMgYi9saWIvYnVnLmNcbmluZGV4IDIyNGY0Y2ZhNGFhMzEyLi5mNTc2OGY1ZDE3YjQ3OSAxMDA2NDRcbi0tLSBhL2xpYi9idWcuY1xuKysrIGIvbGliL2J1Zy5jXG5AQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgX193YXJuX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFxuIHN0YXRpYyBlbnVtIGJ1Z190cmFwX3R5cGUgX19yZXBvcnRfYnVnKHN0cnVjdCBidWdfZW50cnkgKmJ1ZywgdW5zaWduZWQgbG9uZyBidWdhZGRyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4tXHRib29sIHdhcm5pbmcsIG9uY2UsIGRvbmUsIG5vX2N1dCwgaGFzX2FyZ3M7XG4rXHRib29sIHdhcm5pbmcsIG9uY2UsIGRvbmUsIG5vX2N1dCwgaGFzX2FyZ3MsIGRlZmVycmVkO1xuIFx0Y29uc3QgY2hhciAqZmlsZSwgKmZtdDtcbiBcdHVuc2lnbmVkIGxpbmU7XG4gXG5AQCAtMjE5LDYgKzIxOSw3IEBAIHN0YXRpYyBlbnVtIGJ1Z190cmFwX3R5cGUgX19yZXBvcnRfYnVnKHN0cnVjdCBidWdfZW50cnkgKmJ1ZywgdW5zaWduZWQgbG9uZyBidWdhXG4gXHRkb25lICAgICA9IGJ1Zy1cdTAwM2VmbGFncyBcdTAwMjYgQlVHRkxBR19ET05FO1xuIFx0bm9fY3V0ICAgPSBidWctXHUwMDNlZmxhZ3MgXHUwMDI2IEJVR0ZMQUdfTk9fQ1VUX0hFUkU7XG4gXHRoYXNfYXJncyA9IGJ1Zy1cdTAwM2VmbGFncyBcdTAwMjYgQlVHRkxBR19BUkdTO1xuK1x0ZGVmZXJyZWQgPSBidWctXHUwMDNlZmxhZ3MgXHUwMDI2IEJVR0ZMQUdfREVGRVJSRUQ7XG4gXG4gXHRpZiAod2FybmluZyBcdTAwMjZcdTAwMjYgb25jZSkge1xuIFx0XHRpZiAoZG9uZSlcbkBAIC0yMjksNyArMjMwLDEwIEBAIHN0YXRpYyBlbnVtIGJ1Z190cmFwX3R5cGUgX19yZXBvcnRfYnVnKHN0cnVjdCBidWdfZW50cnkgKmJ1ZywgdW5zaWduZWQgbG9uZyBidWdhXG4gXHRcdCAqL1xuIFx0XHRidWctXHUwMDNlZmxhZ3MgfD0gQlVHRkxBR19ET05FO1xuIFx0fVxuLVxuK1x0aWYgKGRlZmVycmVkKSB7XG4rXHRcdHByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7XG4rXHRcdHByaW50a19kZWZlcnJlZF9lbnRlcigpO1xuK1x0fVxuIFx0LypcbiBcdCAqIEJVRygpIGFuZCBXQVJOX09OKCkgZmFtaWxpZXMgZG9uJ3QgcHJpbnQgYSBjdXN0b20gZGVidWcgbWVzc2FnZVxuIFx0ICogYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLCBzbyB3ZSBtdXN0IGFkZCB0aGVcbkBAIC0yNDUsNiArMjQ5LDEwIEBAIHN0YXRpYyBlbnVtIGJ1Z190cmFwX3R5cGUgX19yZXBvcnRfYnVnKHN0cnVjdCBidWdfZW50cnkgKmJ1ZywgdW5zaWduZWQgbG9uZyBidWdhXG4gXHRcdC8qIHRoaXMgaXMgYSBXQVJOX09OIHJhdGhlciB0aGFuIEJVRy9CVUdfT04gKi9cbiBcdFx0X193YXJuKGZpbGUsIGxpbmUsICh2b2lkICopYnVnYWRkciwgQlVHX0dFVF9UQUlOVChidWcpLCByZWdzLFxuIFx0XHQgICAgICAgTlVMTCk7XG4rXHRcdGlmIChkZWZlcnJlZCkge1xuK1x0XHRcdHByaW50a19kZWZlcnJlZF9leGl0KCk7XG4rXHRcdFx0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1xuK1x0XHR9XG4gXHRcdHJldHVybiBCVUdfVFJBUF9UWVBFX1dBUk47XG4gXHR9XG4gXG5AQCAtMjU0LDYgKzI2MiwxMCBAQCBzdGF0aWMgZW51bSBidWdfdHJhcF90eXBlIF9fcmVwb3J0X2J1ZyhzdHJ1Y3QgYnVnX2VudHJ5ICpidWcsIHVuc2lnbmVkIGxvbmcgYnVnYVxuIFx0XHRwcl9jcml0KFwia2VybmVsIEJVRyBhdCAlcEIgW3ZlcmJvc2UgZGVidWcgaW5mbyB1bmF2YWlsYWJsZV1cXG5cIixcbiBcdFx0XHQodm9pZCAqKWJ1Z2FkZHIpO1xuIFxuK1x0aWYgKGRlZmVycmVkKSB7XG4rXHRcdHByaW50a19kZWZlcnJlZF9leGl0KCk7XG4rXHRcdHByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTtcbitcdH1cbiBcdHJldHVybiBCVUdfVFJBUF9UWVBFX0JVRztcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNDo1MzowMS4xMDQ2MjI4MTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTIyMTgyNjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgXCJEZWZlcnJlZCBXYXJuaW5nXCIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW50cm9kdWNpbmcgYFdBUk5fT05fREVGRVJSRURgIGFuZCBgV0FSTl9PTl9PTkNFX0RFRkVSUkVEYCBhbmQgdXNpbmcgdGhlbSB0byByZXBsYWNlIHRoZSBleGlzdGluZyBgV0FSTl9PTmAgYW5kIGBXQVJOX09OX09OQ0VgIGNhbGxzIHdpdGhpbiB0aGUgc2NoZWR1bGVyIGNvZGUgKGBrZXJuZWwvc2NoZWQvYCkuIFRoZXJlJ3MgYWxzbyBzb21lIG1vZGlmaWNhdGlvbiBpbiBgbGliL2J1Zy5jYCB0byBoYW5kbGUgYSBgQlVHRkxBR19ERUZFUlJFRGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSBcIndvcnRoeVwiIHBhdGNoIHRvIHRlc3QuXG5cbkRpZ2dpbmcgaW50byBgbGliL2J1Zy5jYCwgaXQgbG9va3MgbGlrZSB0aGUgYEJVR0ZMQUdfREVGRVJSRURgIGZsYWcsIHdoZW4gc2V0LCB3aWxsIG1ha2UgdGhlIHdhcm5pbmcgdXNlIGRlZmVycmVkIHByaW50aW5nIHdpdGggYHByaW50a19kZWZlcnJlZF9lbnRlcigpYCBhbmQgYHByaW50a19kZWZlcnJlZF9leGl0KClgLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSB0aGUgd2FybmluZ3Mgd2lsbCBub3cgYmUgZGVmZXJyZWQuIEkgZG8gbmVlZCB0byBzZWUsIGRvZXMgdGhpcyBjaGFuZ2UgdGhlIGV4ZWN1dGlvbiBmbG93IGlmIHRoZSB3YXJuaW5nICppc24ndCogdHJpZ2dlcmVkPyBMb29raW5nIGF0IHRoZSBgV0FSTl9PTl9ERUZFUlJFRGAgbWFjcm8sIGl0IGxvb2tzIGxpa2UgaXQganVzdCBjaGFuZ2VzIHRoZSAqd2F5KiB0aGUgd2FybmluZyBpcyBwcmludGVkLCBub3QgdGhlIGNvZGUgbG9naWMgaXRzZWxmLlxuXG5gYGBjXG4jZGVmaW5lIFdBUk5fT05fREVGRVJSRUQoY29uZGl0aW9uKSAoe1x0XHRcdFx0XHRcXFxuXHRpbnQgX19yZXRfd2Fybl9vbiA9ICEhKGNvbmRpdGlvbik7XHRcdFx0XHRcXFxuXHRpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbikpIHtcdFx0XHRcdFx0XFxcblx0XHRfX1dBUk5fRkxBR1MoI2NvbmRpdGlvbixcdFx0XHRcdFxcXG5cdFx0XHQgICAgIEJVR0ZMQUdfREVGRVJSRUQgfFx0XHRcdFx0XFxcblx0XHRcdCAgICAgQlVHRkxBR19UQUlOVChUQUlOVF9XQVJOKSk7XHRcdFxcXG5cdH1cdFx0XHRcdFx0XHRcdFx0XFxcblx0dW5saWtlbHkoX19yZXRfd2Fybl9vbik7XHRcdFx0XHRcdFxcXG59KVxuYGBgXG5cblNvLCBpZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLCBleGVjdXRpb24gcHJvY2VlZHMgYXMgYmVmb3JlLiBJZiB0aGUgY29uZGl0aW9uIGlzIG1ldCwgdGhlIHdhcm5pbmcgaXMgbm93IGRlZmVycmVkLCBidXQgdGhlIGV4ZWN1dGlvbiBsb2dpYyByZW1haW5zIHRoZSBzYW1lIChvdGhlciB0aGFuIHRoZSBhZGRpdGlvbmFsIGxvZyBpbmZvcm1hdGlvbikuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgdGhpbmdzIGxpa2UgbW9kaWZpY2F0aW9ucyB0byBsb2dnaW5nIGNhbGxzLiBJcyBjaGFuZ2luZyBhIHdhcm5pbmcgdG8gYSBkZWZlcnJlZCB3YXJuaW5nIGEgbG9nZ2luZyBjaGFuZ2U/IFllcywgdGhpcyBpcyBlc3NlbnRpYWxseSBjaGFuZ2luZyBgcHJpbnRrYCB0byBgcHJpbnRrX2RlZmVycmVkYCB1bmRlciB0aGUgaG9vZC4gSXQgY2hhbmdlcyAqaG93KiB0aGUgd2FybmluZyBpcyByZXBvcnRlZC4gSXQgZG9lc24ndCBtb2RpZnkgdGhlIGxvZ2ljIG9mIHRoZSBjb2RlIGJlaW5nIHdhcm5lZCBhYm91dC4gSXQgc2VlbXMgdGhlIHB1cnBvc2UgaXMgdG8gcHJldmVudCBwb3RlbnRpYWwgZGVhZGxvY2tzLCBidXQgaW4gdGhlIGNvbnRleHQgb2YgZnV6emluZywgdGhlIGdvYWwgaXMgbm90IHRvIGZpbmQgYnVncyBpbiB0aGUgcmVwb3J0aW5nIHBhdGggYnV0IGluIHRoZSBrZXJuZWwgbG9naWMgaXRzZWxmLlxuXG5JJ20gZG91YmxlLWNoZWNraW5nLiBUaGUgYGtlcm5lbC9zY2hlZC9gIGNoYW5nZXMgYXBwZWFyIHRvIGJlICpwdXJlbHkqIHJlcGxhY2VtZW50cyBvZiBgV0FSTl9PTmAgd2l0aCBgV0FSTl9PTl9ERUZFUlJFRGAgYW5kIHNvIG9uLCBzbyBpZiB0aGUgd2FybmluZyBjb25kaXRpb24gaXMgbWV0LCBub3cgdXNlIGRlZmVycmVkIHByaW50aywgYnV0IHRoZSBleGVjdXRpb24gZmxvdyBpcyB0aGUgc2FtZSBpZiB0aGUgd2FybmluZyBpcyBub3QgdHJpZ2dlcmVkLlxuXG5Mb29raW5nIGF0IGBpbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oYCwgaXQganVzdCBkZWZpbmVzIGEgZmFsbGJhY2sgYFdBUk5fT05fREVGRVJSRURgLiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgYHByaW50a2AgdG8gdGhlIGBwcmludGtfZGVmZXJyZWRfZW50ZXIoKWAuXG5cblNvLCBpdCdzIGp1c3QgYSBsb2dnaW5nIGNoYW5nZS4gVGhlcmUncyBubyBvdGhlciBsb2dpYyBiZWluZyBjaGFuZ2VkIGluIHRoZSBzY2hlZHVsZXIuIEl0IGlzIGFsbCBjb3NtZXRpYy5cblxuVGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gYFdBUk5fT05fREVGRVJSRURgLCBgV0FSTl9PTl9PTkNFX0RFRkVSUkVEYC4gVGhpcyBpcyBwdXJlbHkgbG9nZ2luZy4gSSB3aWxsIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzQ1LCJPdXRwdXRUb2tlbnMiOjEwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNDo1MzoyMC4zMjY0NTIyNTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhbmQgYXBwbGllcyBkZWZlcnJlZCB2YXJpYW50cyBvZiBXQVJOX09OIGFuZCBXQVJOX09OX09OQ0UgbWFjcm9zIChXQVJOX09OX0RFRkVSUkVELCBXQVJOX09OX09OQ0VfREVGRVJSRUQpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgd2FybmluZyBwcmludHMgaW4gdGhlIHNjaGVkdWxlci4gVGhpcyBpcyBwdXJlbHkgYSBsb2dnaW5nL2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBub3JtYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhbmQgYXBwbGllcyBkZWZlcnJlZCB2YXJpYW50cyBvZiBXQVJOX09OIGFuZCBXQVJOX09OX09OQ0UgbWFjcm9zIChXQVJOX09OX0RFRkVSUkVELCBXQVJOX09OX09OQ0VfREVGRVJSRUQpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgd2FybmluZyBwcmludHMgaW4gdGhlIHNjaGVkdWxlci4gVGhpcyBpcyBwdXJlbHkgYSBsb2dnaW5nL2RlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBub3JtYWwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowd24ct[1] Phase: Running StartedAt: 2026-06-23 14:53:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd24ct[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-23 14:53:58 +0000 UTC FinishedAt: 2026-06-23 14:54:05 +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,}