Name: series-workflowk7mjp Phase: Failed StartedAt: 2026-07-07 11:54:01 +0000 UTC FinishedAt: 2026-07-07 12:14:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk7mjp[0] Phase: Succeeded StartedAt: 2026-07-07 11:54:01 +0000 UTC FinishedAt: 2026-07-07 12:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk7mjp[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 11:54:01 +0000 UTC FinishedAt: 2026-07-07 12:14:42 +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+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmludGVkIGluIGVycm9yIG1lc3NhZ2VzIChlLmcuLCBwcmludF9iYWRfcGFnZV9tYXApLiBJdCBkb2VzIG5vdCBjaGFuZ2UgYW55IGNvcmUgZnVuY3Rpb25hbCBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgwZDM3ZDE0ODE0MjNjOWZmMDYwMzViNDUxOGUwOWI5ZmZjMmNkOTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDEyOjE0OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGZmMzM4YzJhYmU5MjMxLi5mMGMzNDc4ZjFhNjNhNyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTUxOSw5ICYjNDM7NTE5LDUyIEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7I2RlZmluZSBQVFZBTF9TVFJfTUFYXHQoMzIgJiM0MzsgMSkgLyogTWF4IDEyOC1iaXQgdmFsdWUgaW4gaGV4ICYjNDM7IE5VTCAqL1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShidWZfc2l6ZSBcdTAwM2MgZW50cnlfc2l6ZSAqIDIgJiM0MzsgMSkpIHtcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwmIzM0O292ZXJmbG93XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZW50cnlfc2l6ZSkge1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHUzMik6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDh4XCYjMzQ7LCAqKGNvbnN0IHUzMiAqKWVudHJ5KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHU2NCk6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDE2bGx4XCYjMzQ7LCAqKGNvbnN0IHU2NCAqKWVudHJ5KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MzsjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcbiYjNDM7XHRjYXNlIHNpemVvZih1MTI4KToge1xuJiM0MztcdFx0Y29uc3QgdTY0ICp2YWwgPSBlbnRyeTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX0JJR19FTkRJQU4pKVxuJiM0MztcdFx0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDE2bGx4JTAxNmxseFwmIzM0OywgdmFsWzBdLCB2YWxbMV0pO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDE2bGx4JTAxNmxseFwmIzM0OywgdmFsWzFdLCB2YWxbMF0pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXCYjMzQ7dW5zdXBwb3J0ZWRcJiMzNDspO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHB0dmFsX3RvX3N0cihidWYsIHZhbClcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0X19hdXRvX3R5cGUgX192YWwgPSAodmFsKTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoKGJ1ZiksIHNpemVvZihidWYpLCBcdTAwMjZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7XHRcXFxuJiM0MztcdH0gd2hpbGUgKDApXG4mIzQzO1xuIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjtcbiYjNDM7XHRjaGFyIHBnZF9zdHJbUFRWQUxfU1RSX01BWF07XG4mIzQzO1x0Y2hhciBwNGRfc3RyW1BUVkFMX1NUUl9NQVhdO1xuJiM0MztcdGNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTtcbiYjNDM7XHRjaGFyIHBtZF9zdHJbUFRWQUxfU1RSX01BWF07XG4gXHRwNGRfdCBwNGQsICpwNGRwO1xuIFx0cHVkX3QgcHVkLCAqcHVkcDtcbiBcdHBtZF90IHBtZCwgKnBtZHA7XG5AQCAtNTMyLDM0ICYjNDM7NTc1LDM0IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXG4gXHQgKiBzZWUgbG9ja2luZyByZXF1aXJlbWVudHMgZm9yIHByaW50X2JhZF9wYWdlX21hcCgpLlxuIFx0ICovXG4gXHRwZ2RwID0gcGdkX29mZnNldChtbSwgYWRkcik7XG4tXHRwZ2R2ID0gcGdkX3ZhbCgqcGdkcCk7XG4mIzQzO1x0cHR2YWxfdG9fc3RyKHBnZF9zdHIsIHBnZF92YWwoKnBnZHApKTtcbiBcbiBcdGlmICghcGdkX3ByZXNlbnQoKnBnZHApIHx8IHBnZF9sZWFmKCpwZ2RwKSkge1xuLVx0XHRwcl9hbGVydChcJiMzNDtwZ2Q6JTA4bGx4XFxuXCYjMzQ7LCBwZ2R2KTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BnZDogJXNcXG5cJiMzNDssIHBnZF9zdHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcbiBcdHA0ZCA9IHA0ZHBfZ2V0KHA0ZHApO1xuLVx0cDRkdiA9IHA0ZF92YWwocDRkKTtcbiYjNDM7XHRwdHZhbF90b19zdHIocDRkX3N0ciwgcDRkX3ZhbChwNGQpKTtcbiBcbiBcdGlmICghcDRkX3ByZXNlbnQocDRkKSB8fCBwNGRfbGVhZihwNGQpKSB7XG4tXHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolMDhsbHggcDRkOiUwOGxseFxcblwmIzM0OywgcGdkdiwgcDRkdik7XG4mIzQzO1x0XHRwcl9hbGVydChcJiMzNDtwZ2Q6ICVzIHA0ZDogJXNcXG5cJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRwdWRwID0gcHVkX29mZnNldChwNGRwLCBhZGRyKTtcbiBcdHB1ZCA9IHB1ZHBfZ2V0KHB1ZHApO1xuLVx0cHVkdiA9IHB1ZF92YWwocHVkKTtcbiYjNDM7XHRwdHZhbF90b19zdHIocHVkX3N0ciwgcHVkX3ZhbChwdWQpKTtcbiBcbiBcdGlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSB7XG4tXHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4XFxuXCYjMzQ7LCBwZ2R2LCBwNGR2LCBwdWR2KTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BnZDogJXMgcDRkOiAlcyBwdWQ6ICVzXFxuXCYjMzQ7LCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4gXHRwbWQgPSBwbWRwX2dldChwbWRwKTtcbi1cdHBtZHYgPSBwbWRfdmFsKHBtZCk7XG4mIzQzO1x0cHR2YWxfdG9fc3RyKHBtZF9zdHIsIHBtZF92YWwocG1kKSk7XG4gXG4gXHQvKlxuIFx0ICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCYjMzk7cyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSxcbkBAIC01NjcsOCAmIzQzOzYxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXG4gXHQgKiBkb2luZyBhbm90aGVyIG1hcCB3b3VsZCBiZSBiYWQuIHByaW50X2JhZF9wYWdlX21hcCgpIHNob3VsZFxuIFx0ICogYWxyZWFkeSB0YWtlIGNhcmUgb2YgcHJpbnRpbmcgdGhlIFBURS5cbiBcdCAqL1xuLVx0cHJfYWxlcnQoXCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxcblwmIzM0OywgcGdkdixcbi1cdFx0IHA0ZHYsIHB1ZHYsIHBtZHYpO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3BnZDogJXMgcDRkOiAlcyBwdWQ6ICVzIHBtZDogJXNcXG5cJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIsIHB1ZF9zdHIsIHBtZF9zdHIpO1xuIH1cbiBcbiAvKlxuQEAgLTU4NCwxMCAmIzQzOzYyNiwxMSBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxuICAqIHBhZ2UgdGFibGUgbG9jay5cbiAgKi9cbiBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi1cdFx0ZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsXG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuIHtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuJiM0MztcdGNoYXIgZW50cnlfc3RyW1BUVkFMX1NUUl9NQVhdO1xuIFx0cGdvZmZfdCBpbmRleDtcbiBcbiBcdGlmIChpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQoKSlcbkBAIC01OTYsOCAmIzQzOzYzOSw5IEBAIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdG1hcHBpbmcgPSB2bWEtXHUwMDNldm1fZmlsZSA/IHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyA6IE5VTEw7XG4gXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7XG4gXG4tXHRwcl9hbGVydChcJiMzNDtCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczolMDhsbHhcJiMzNDssIGN1cnJlbnQtXHUwMDNlY29tbSxcbi1cdFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnkpO1xuJiM0MztcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiAlc1wmIzM0OywgY3VycmVudC1cdTAwM2Vjb21tLFxuJiM0MztcdFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnlfc3RyKTtcbiBcdF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUodm1hLVx1MDAzZXZtX21tLCBhZGRyKTtcbiBcdGlmIChwYWdlKVxuIFx0XHRkdW1wX3BhZ2UocGFnZSwgXCYjMzQ7YmFkIHBhZ2UgbWFwXCYjMzQ7KTtcbkBAIC02MjcsOCAmIzQzOzY3MSwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuIFx0fVxuIH1cbiBcbi0jZGVmaW5lIHByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGUsIHBhZ2UpIFxcXG4tXHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBwdGVfdmFsKHB0ZSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKVxuJiM0MztzdGF0aWMgdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHRcdCAgcHRlX3QgcHRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdF9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuJiM0MztcbiYjNDM7XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xuJiM0Mzt9XG4gXG4gLyoqXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcJiMzNDtzdHJ1Y3QgcGFnZVwmIzM0OyBhc3NvY2lhdGVkIHdpdGggYSBwYWdlIHRhYmxlIGVudHJ5LlxuQEAgLTYzNiw4ICYjNDM7Njg1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxuICAqIEBwZm46IFRoZSBQRk4gc3RvcmVkIGluIHRoZSBwYWdlIHRhYmxlIGVudHJ5LlxuICAqIEBzcGVjaWFsOiBXaGV0aGVyIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcmtlZCBcJiMzNDtzcGVjaWFsXCYjMzQ7LlxuLSAqIEBsZXZlbDogVGhlIHBhZ2UgdGFibGUgbGV2ZWwgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuJiM0MzsgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxuJiM0MzsgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbiAgKlxuICAqIFwmIzM0O1NwZWNpYWxcJiMzNDsgbWFwcGluZ3MgZG8gbm90IHdpc2ggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgXCYjMzQ7c3RydWN0IHBhZ2VcJiMzNDsgKGVpdGhlclxuICAqIGl0IGRvZXNuJiMzOTt0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJiMzOTt0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzXG5AQCAtNjk3LDcgJiM0Mzs3NDcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgc3BlY2lhbCxcbi1cdFx0dW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4mIzQzO1x0XHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiB7XG4gXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XG4gXHRcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xuQEAgLTcxMCw3ICYjNDM7NzYwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoaXNfemVyb19wZm4ocGZuKSB8fCBpc19odWdlX3plcm9fcGZuKHBmbikpXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpO1xuJiM0MztcdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgZW50cnlfc2l6ZSwgTlVMTCwgbGV2ZWwpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4gXHRcdC8qXG5AQCAtNzQxLDcgJiM0Mzs3OTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFxuIFx0aWYgKHVubGlrZWx5KHBmbiBcdTAwM2UgaGlnaGVzdF9tZW1tYXBfcGZuKSkge1xuIFx0XHQvKiBDb3JydXB0ZWQgcGFnZSB0YWJsZSBlbnRyeS4gKi9cbi1cdFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIE5VTEwsIGxldmVsKTtcbiYjNDM7XHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFx0LypcbkBAIC03NjcsOCAmIzQzOzgxNywxMCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICBwdGVfdCBwdGUpXG4ge1xuJiM0MztcdF9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuJiM0MztcbiBcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpLCBwdGVfc3BlY2lhbChwdGUpLFxuLVx0XHRcdFx0cHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4mIzQzO1x0XHRcdFx0XHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUFRFKTtcbiB9XG4gXG4gLyoqXG5AQCAtODA5LDggJiM0Mzs4NjEsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRwbWRfdCBwbWQpXG4ge1xuJiM0MztcdF9fYXV0b190eXBlIGVudHJ5ID0gcG1kX3ZhbChwbWQpO1xuJiM0MztcbiBcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcG1kX3BmbihwbWQpLCBwbWRfc3BlY2lhbChwbWQpLFxuLVx0XHRcdFx0cG1kX3ZhbChwbWQpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XG4mIzQzO1x0XHRcdFx0XHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUE1EKTtcbiB9XG4gXG4gLyoqXG5AQCAtODUwLDggJiM0Mzs5MDQsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKVxuIHtcbiYjNDM7XHRfX2F1dG9fdHlwZSBlbnRyeSA9IHB1ZF92YWwocHVkKTtcbiYjNDM7XG4gXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcbi1cdFx0XHRcdHB1ZF92YWwocHVkKSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xuJiM0MztcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XG4gfVxuICNlbmRpZlxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmludGVkIGluIGVycm9yIG1lc3NhZ2VzIChlLmcuLCBwcmludF9iYWRfcGFnZV9tYXApLiBJdCBkb2VzIG5vdCBjaGFuZ2UgYW55IGNvcmUgZnVuY3Rpb25hbCBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODBkMzdkMTQ4MTQyM2M5ZmYwNjAzNWI0NTE4ZTA5YjlmZmMyY2Q5MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMTI6MTQ6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGZmMzM4YzJhYmU5MjMxLi5mMGMzNDc4ZjFhNjNhNyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTUxOSw5ICYjNDM7NTE5LDUyIEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzOyNkZWZpbmUgUFRWQUxfU1RSX01BWAkoMzIgJiM0MzsgMSkgLyogTWF4IDEyOC1iaXQgdmFsdWUgaW4gaGV4ICYjNDM7IE5VTCAqLwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoYnVmX3NpemUgJmx0OyBlbnRyeV9zaXplICogMiAmIzQzOyAxKSkgewomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDtvdmVyZmxvdyYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGVudHJ5X3NpemUpIHsKJiM0MzsJY2FzZSBzaXplb2YodTMyKToKJiM0MzsJCXNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsICYjMzQ7JTA4eCYjMzQ7LCAqKGNvbnN0IHUzMiAqKWVudHJ5KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIHNpemVvZih1NjQpOgomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDslMDE2bGx4JiMzNDssICooY29uc3QgdTY0ICopZW50cnkpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2lmIGRlZmluZWQoX19TSVpFT0ZfSU5UMTI4X18pCiYjNDM7CWNhc2Ugc2l6ZW9mKHUxMjgpOiB7CiYjNDM7CQljb25zdCB1NjQgKnZhbCA9IGVudHJ5OwomIzQzOwomIzQzOwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSkKJiM0MzsJCQlzbnByaW50ZihidWYsIGJ1Zl9zaXplLCAmIzM0OyUwMTZsbHglMDE2bGx4JiMzNDssIHZhbFswXSwgdmFsWzFdKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzbnByaW50ZihidWYsIGJ1Zl9zaXplLCAmIzM0OyUwMTZsbHglMDE2bGx4JiMzNDssIHZhbFsxXSwgdmFsWzBdKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlzbnByaW50ZihidWYsIGJ1Zl9zaXplLCAmIzM0O3Vuc3VwcG9ydGVkJiMzNDspOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBwdHZhbF90b19zdHIoYnVmLCB2YWwpCQkJCQkJCQlcCiYjNDM7CWRvIHsJCQkJCQkJCQkJXAomIzQzOwkJX19hdXRvX3R5cGUgX192YWwgPSAodmFsKTsJCQkJCQlcCiYjNDM7CQkJCQkJCQkJCQlcCiYjNDM7CQlwdHZhbF9ieXRlc190b19oZXhfc3RyKChidWYpLCBzaXplb2YoYnVmKSwgJmFtcDtfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7CVwKJiM0MzsJfSB3aGlsZSAoMCkKJiM0MzsKIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjsKJiM0MzsJY2hhciBwZ2Rfc3RyW1BUVkFMX1NUUl9NQVhdOwomIzQzOwljaGFyIHA0ZF9zdHJbUFRWQUxfU1RSX01BWF07CiYjNDM7CWNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTsKJiM0MzsJY2hhciBwbWRfc3RyW1BUVkFMX1NUUl9NQVhdOwogCXA0ZF90IHA0ZCwgKnA0ZHA7CiAJcHVkX3QgcHVkLCAqcHVkcDsKIAlwbWRfdCBwbWQsICpwbWRwOwpAQCAtNTMyLDM0ICYjNDM7NTc1LDM0IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkCiAJICogc2VlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciBwcmludF9iYWRfcGFnZV9tYXAoKS4KIAkgKi8KIAlwZ2RwID0gcGdkX29mZnNldChtbSwgYWRkcik7Ci0JcGdkdiA9IHBnZF92YWwoKnBnZHApOwomIzQzOwlwdHZhbF90b19zdHIocGdkX3N0ciwgcGdkX3ZhbCgqcGdkcCkpOwogCiAJaWYgKCFwZ2RfcHJlc2VudCgqcGdkcCkgfHwgcGdkX2xlYWYoKnBnZHApKSB7Ci0JCXByX2FsZXJ0KCYjMzQ7cGdkOiUwOGxseFxuJiMzNDssIHBnZHYpOwomIzQzOwkJcHJfYWxlcnQoJiMzNDtwZ2Q6ICVzXG4mIzM0OywgcGdkX3N0cik7CiAJCXJldHVybjsKIAl9CiAKIAlwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTsKIAlwNGQgPSBwNGRwX2dldChwNGRwKTsKLQlwNGR2ID0gcDRkX3ZhbChwNGQpOwomIzQzOwlwdHZhbF90b19zdHIocDRkX3N0ciwgcDRkX3ZhbChwNGQpKTsKIAogCWlmICghcDRkX3ByZXNlbnQocDRkKSB8fCBwNGRfbGVhZihwNGQpKSB7Ci0JCXByX2FsZXJ0KCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4XG4mIzM0OywgcGdkdiwgcDRkdik7CiYjNDM7CQlwcl9hbGVydCgmIzM0O3BnZDogJXMgcDRkOiAlc1xuJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIpOwogCQlyZXR1cm47CiAJfQogCiAJcHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7CiAJcHVkID0gcHVkcF9nZXQocHVkcCk7Ci0JcHVkdiA9IHB1ZF92YWwocHVkKTsKJiM0MzsJcHR2YWxfdG9fc3RyKHB1ZF9zdHIsIHB1ZF92YWwocHVkKSk7CiAKIAlpZiAoIXB1ZF9wcmVzZW50KHB1ZCkgfHwgcHVkX2xlYWYocHVkKSkgewotCQlwcl9hbGVydCgmIzM0O3BnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4XG4mIzM0OywgcGdkdiwgcDRkdiwgcHVkdik7CiYjNDM7CQlwcl9hbGVydCgmIzM0O3BnZDogJXMgcDRkOiAlcyBwdWQ6ICVzXG4mIzM0OywgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0cik7CiAJCXJldHVybjsKIAl9CiAKIAlwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTsKIAlwbWQgPSBwbWRwX2dldChwbWRwKTsKLQlwbWR2ID0gcG1kX3ZhbChwbWQpOwomIzQzOwlwdHZhbF90b19zdHIocG1kX3N0ciwgcG1kX3ZhbChwbWQpKTsKIAogCS8qCiAJICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCYjMzk7cyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSwKQEAgLTU2Nyw4ICYjNDM7NjEwLDcgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGQKIAkgKiBkb2luZyBhbm90aGVyIG1hcCB3b3VsZCBiZSBiYWQuIHByaW50X2JhZF9wYWdlX21hcCgpIHNob3VsZAogCSAqIGFscmVhZHkgdGFrZSBjYXJlIG9mIHByaW50aW5nIHRoZSBQVEUuCiAJICovCi0JcHJfYWxlcnQoJiMzNDtwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseCBwbWQ6JTA4bGx4XG4mIzM0OywgcGdkdiwKLQkJIHA0ZHYsIHB1ZHYsIHBtZHYpOwomIzQzOwlwcl9hbGVydCgmIzM0O3BnZDogJXMgcDRkOiAlcyBwdWQ6ICVzIHBtZDogJXNcbiYjMzQ7LCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyLCBwbWRfc3RyKTsKIH0KIAogLyoKQEAgLTU4NCwxMCAmIzQzOzYyNiwxMSBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZAogICogcGFnZSB0YWJsZSBsb2NrLgogICovCiBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKQomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsCiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwomIzQzOwljaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTsKIAlwZ29mZl90IGluZGV4OwogCiAJaWYgKGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCgpKQpAQCAtNTk2LDggJiM0Mzs2MzksOSBAQCBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJbWFwcGluZyA9IHZtYS0mZ3Q7dm1fZmlsZSA/IHZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nIDogTlVMTDsKIAlpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7CiAKLQlwcl9hbGVydCgmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiUwOGxseCYjMzQ7LCBjdXJyZW50LSZndDtjb21tLAotCQkgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeSk7CiYjNDM7CXB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpOwomIzQzOwlwcl9hbGVydCgmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiAlcyYjMzQ7LCBjdXJyZW50LSZndDtjb21tLAomIzQzOwkJIHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnlfc3RyKTsKIAlfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS0mZ3Q7dm1fbW0sIGFkZHIpOwogCWlmIChwYWdlKQogCQlkdW1wX3BhZ2UocGFnZSwgJiMzNDtiYWQgcGFnZSBtYXAmIzM0Oyk7CkBAIC02MjcsOCAmIzQzOzY3MSwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKQogCX0KIH0KIAotI2RlZmluZSBwcmludF9iYWRfcHRlKHZtYSwgYWRkciwgcHRlLCBwYWdlKSBcCi0JcHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgcHRlX3ZhbChwdGUpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSkKJiM0MztzdGF0aWMgdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICBwdGVfdCBwdGUsIHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJX19hdXRvX3R5cGUgZW50cnkgPSBwdGVfdmFsKHB0ZSk7CiYjNDM7CiYjNDM7CXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsICZhbXA7ZW50cnksIHNpemVvZihlbnRyeSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKTsKJiM0Mzt9CiAKIC8qKgogICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSAmIzM0O3N0cnVjdCBwYWdlJiMzNDsgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZSB0YWJsZSBlbnRyeS4KQEAgLTYzNiw4ICYjNDM7Njg1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKICAqIEBhZGRyOiBUaGUgYWRkcmVzcyB3aGVyZSB0aGUgcGFnZSB0YWJsZSBlbnRyeSBpcyBtYXBwZWQuCiAgKiBAcGZuOiBUaGUgUEZOIHN0b3JlZCBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeS4KICAqIEBzcGVjaWFsOiBXaGV0aGVyIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcmtlZCAmIzM0O3NwZWNpYWwmIzM0Oy4KLSAqIEBsZXZlbDogVGhlIHBhZ2UgdGFibGUgbGV2ZWwgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LgogICogQGVudHJ5OiBUaGUgcGFnZSB0YWJsZSBlbnRyeSB2YWx1ZSBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuCiYjNDM7ICogQGVudHJ5X3NpemU6IFRoZSBzaXplIG9mIEBlbnRyeS4KJiM0MzsgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS4KICAqCiAgKiAmIzM0O1NwZWNpYWwmIzM0OyBtYXBwaW5ncyBkbyBub3Qgd2lzaCB0byBiZSBhc3NvY2lhdGVkIHdpdGggYSAmIzM0O3N0cnVjdCBwYWdlJiMzNDsgKGVpdGhlcgogICogaXQgZG9lc24mIzM5O3QgZXhpc3QsIG9yIGl0IGV4aXN0cyBidXQgdGhleSBkb24mIzM5O3Qgd2FudCB0byB0b3VjaCBpdCkuIEluIHRoaXMKQEAgLTY5Nyw3ICYjNDM7NzQ3LDcgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBzcGVjaWFsLAotCQl1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKJiM0MzsJCWNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKQogewogCWlmIChwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChsZXZlbCkpIHsKIAkJaWYgKHVubGlrZWx5KHNwZWNpYWwpKSB7CkBAIC03MTAsNyAmIzQzOzc2MCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlpZiAoaXNfemVyb19wZm4ocGZuKSB8fCBpc19odWdlX3plcm9fcGZuKHBmbikpCiAJCQkJcmV0dXJuIE5VTEw7CiAKLQkJCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7CiYjNDM7CQkJcHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIGVudHJ5X3NpemUsIE5VTEwsIGxldmVsKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJCS8qCkBAIC03NDEsNyAmIzQzOzc5MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAKIAlpZiAodW5saWtlbHkocGZuICZndDsgaGlnaGVzdF9tZW1tYXBfcGZuKSkgewogCQkvKiBDb3JydXB0ZWQgcGFnZSB0YWJsZSBlbnRyeS4gKi8KLQkJcHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIE5VTEwsIGxldmVsKTsKJiM0MzsJCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAkvKgpAQCAtNzY3LDggJiM0Mzs4MTcsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgIHB0ZV90IHB0ZSkKIHsKJiM0MzsJX19hdXRvX3R5cGUgZW50cnkgPSBwdGVfdmFsKHB0ZSk7CiYjNDM7CiAJcmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSksIHB0ZV9zcGVjaWFsKHB0ZSksCi0JCQkJcHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7CiYjNDM7CQkJCSZhbXA7ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUFRFKTsKIH0KIAogLyoqCkBAIC04MDksOCAmIzQzOzg2MSwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCXBtZF90IHBtZCkKIHsKJiM0MzsJX19hdXRvX3R5cGUgZW50cnkgPSBwbWRfdmFsKHBtZCk7CiYjNDM7CiAJcmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwbWRfcGZuKHBtZCksIHBtZF9zcGVjaWFsKHBtZCksCi0JCQkJcG1kX3ZhbChwbWQpLCBQR1RBQkxFX0xFVkVMX1BNRCk7CiYjNDM7CQkJCSZhbXA7ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUE1EKTsKIH0KIAogLyoqCkBAIC04NTAsOCAmIzQzOzkwNCwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90IHB1ZCkKIHsKJiM0MzsJX19hdXRvX3R5cGUgZW50cnkgPSBwdWRfdmFsKHB1ZCk7CiYjNDM7CiAJcmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdWRfcGZuKHB1ZCksIHB1ZF9zcGVjaWFsKHB1ZCksCi0JCQkJcHVkX3ZhbChwdWQpLCBQR1RBQkxFX0xFVkVMX1BVRCk7CiYjNDM7CQkJCSZhbXA7ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUFVEKTsKIH0KICNlbmRpZgogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NzkKCQkJCQkJCW91dHB1dDogNzQKCQkJCQkJCXRob3VnaHRzOiA0OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGFnZSBUYWJsZSBMb2dnaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgbW9kaWZpZXMgYG1tL21lbW9yeS5jYC4gTXkgaW5pdGlhbCByZWFkIGluZGljYXRlcyBpdCYjMzk7cyBhIHZlcnkgdGFyZ2V0ZWQgY2hhbmdlLCBwdXJlbHkgY29zbWV0aWMsIGF0IGxlYXN0IGZyb20gd2hhdCBJJiMzOTttIHNlZWluZy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgcHJpbnRlZCB3aGVuIGEgJiMzNDtiYWQgcGFnZSBtYXAmIzM0OyBlcnJvciBpcyB0cmlnZ2VyZWQsIHdpdGhpbiBgcHJpbnRfYmFkX3BhZ2VfbWFwYCBhbmQgYF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGVgLgoKVGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIHRoZXNlIG5ldyBmb3JtYXR0aW5nIGZ1bmN0aW9ucywgYHB0dmFsX2J5dGVzX3RvX2hleF9zdHJgIGFuZCBgcHR2YWxfdG9fc3RyYC4gIFRoZXkmIzM5O3JlIGJ1aWx0IHRvIGNvbnZlcnQgYW5kIHByZXNlbnQgcGFnZSB0YWJsZSB2YWx1ZXMgYXMgaGV4IHN0cmluZ3MsIHNwZWNpZmljYWxseSBoYW5kbGluZyBkaWZmZXJlbnQgZGF0YSBzaXplcyBsaWtlIGB1MzJgLCBgdTY0YCwgYW5kIGV2ZW4gYHUxMjhgLiAgVGhpcyBpcyBwdXJlbHkgYWJvdXQgdGhlIGxvZ2dpbmcgYW5kIGZvcm1hdHRpbmcsIHRoYXQmIzM5O3Mgd2hhdCB0aG9zZSBmdW5jdGlvbnMgZG8uIFRoZSBhY3R1YWwgZXJyb3IgaGFuZGxpbmcgYW5kIGtlcm5lbCBiZWhhdmlvciByZW1haW5zIHVudG91Y2hlZCwgaXQgc2VlbXMgdG8gYmUgbGltaXRlZCB0byB0aGUgYHByX2FsZXJ0YCBjYWxscywgbWFraW5nIHRoZSBlcnJvciBtZXNzYWdlcyBlYXNpZXIgdG8gcmVhZCwgb3IgcHJvdmlkZSBtb3JlIGRldGFpbCBhYm91dCB0aGUgc3RhdGUuCgpXYWl0LCBsb29raW5nIGZ1cnRoZXIsIHRoZSBzaWduYXR1cmUgb2YgYF9fdm1fbm9ybWFsX3BhZ2VgIGhhcyBhbHNvIGNoYW5nZWQsIGJ1dCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgbm93IHRha2VzIGBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemVgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeWAsIGJ1dCB0aGlzIGlzIHNpbXBseSB0byBwcm92aWRlIHRoZSBkYXRhIGZvciB0aGUgbG9nZ2luZyBjaGFuZ2UsIHNvIGl0IGNhbiBwYXNzIHRoZSBlbnRyeSB0byBgcHJpbnRfYmFkX3BhZ2VfbWFwYC4gVGhlIGZ1bmN0aW9uJiMzOTtzIHJldHVybiB2YWx1ZSBhbmQgaXRzIGNvcmUgbG9naWMgKmFyZSogdW5jaGFuZ2VkLCB3aGljaCBjb25maXJtcyB0aGUgc2NvcGUgb2YgdGhpcyB1cGRhdGUuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBkaWZmIHRvIGNvbmZpcm0gdGhpcy4gQWgsIHllcywgdGhlcmUgaXQgaXMhICBXZSYjMzk7cmUgZ29pbmcgZnJvbToKYGBgYwotCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCWVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplLAomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKYGBgCmFuZCB0aGVuOgpgYGBjCi0JcHJfYWxlcnQoJiMzNDtCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczolMDhsbHgmIzM0OywgY3VycmVudC0mZ3Q7Y29tbSwKLQkJIHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnkpOwomIzQzOwlwdHZhbF9ieXRlc190b19oZXhfc3RyKGVudHJ5X3N0ciwgc2l6ZW9mKGVudHJ5X3N0ciksIGVudHJ5LCBlbnRyeV9zaXplKTsKJiM0MzsJcHJfYWxlcnQoJiMzNDtCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczogJXMmIzM0OywgY3VycmVudC0mZ3Q7Y29tbSwKJiM0MzsJCSBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5X3N0cik7CmBgYApZZXAsIGl0JiMzOTtzIGp1c3QgYWx0ZXJpbmcgdGhlIGZvcm1hdCBvZiB0aGF0IGVycm9yIG1lc3NhZ2UuIFRoZXJlJiMzOTtzIG5vIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb250cm9sIGZsb3csIG5vdGhpbmcgdGhhdCBhbHRlcnMgdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gcGF0aC4gVGhlcmVmb3JlLCBJIGNhbiBjb25maWRlbnRseSBtYXJrIGBXb3J0aEZ1enppbmdgIGFzIGBmYWxzZWAuCgpPa2F5LCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBmb3JtYXR0ZWQgYW5kIHByaW50ZWQgaW4gZXJyb3IgbWVzc2FnZXMgKGUuZy4sIHByaW50X2JhZF9wYWdlX21hcCkuIEl0IGRvZXMgbm90IGNoYW5nZSBhbnkgY29yZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGhvdyBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGZvcm1hdHRlZCBhbmQgcHJpbnRlZCBpbiBlcnJvciBtZXNzYWdlcyAoZS5nLiwgcHJpbnRfYmFkX3BhZ2VfbWFwKS4gSXQgZG9lcyBub3QgY2hhbmdlIGFueSBjb3JlIGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoxNDowNy4yMTg3OTAxNTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDAwNzY1MjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBmb3JtYXR0ZWQgYW5kIHByaW50ZWQgaW4gZXJyb3IgbWVzc2FnZXMgKGUuZy4sIHByaW50X2JhZF9wYWdlX21hcCkuIEl0IGRvZXMgbm90IGNoYW5nZSBhbnkgY29yZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoxNDowNy4yMTg3OTUxNTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MzExNjk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgwZDM3ZDE0ODE0MjNjOWZmMDYwMzViNDUxOGUwOWI5ZmZjMmNkOTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAxMjoxNDowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggZmYzMzhjMmFiZTkyMzEuLmYwYzM0NzhmMWE2M2E3IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNTE5LDkgKzUxOSw1MiBAQCBzdGF0aWMgYm9vbCBpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQodm9pZClcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbisjZGVmaW5lIFBUVkFMX1NUUl9NQVhcXHQoMzIgKyAxKSAvKiBNYXggMTI4LWJpdCB2YWx1ZSBpbiBoZXggKyBOVUwgKi9cXG4rXFxuK3N0YXRpYyB2b2lkIHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSlcXG4re1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKGJ1Zl9zaXplIFxcdTAwM2MgZW50cnlfc2l6ZSAqIDIgKyAxKSkge1xcbitcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcXFwib3ZlcmZsb3dcXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKGVudHJ5X3NpemUpIHtcXG4rXFx0Y2FzZSBzaXplb2YodTMyKTpcXG4rXFx0XFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXFxcIiUwOHhcXFwiLCAqKGNvbnN0IHUzMiAqKWVudHJ5KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2Ugc2l6ZW9mKHU2NCk6XFxuK1xcdFxcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFxcXCIlMDE2bGx4XFxcIiwgKihjb25zdCB1NjQgKillbnRyeSk7XFxuK1xcdFxcdGJyZWFrO1xcbisjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcXG4rXFx0Y2FzZSBzaXplb2YodTEyOCk6IHtcXG4rXFx0XFx0Y29uc3QgdTY0ICp2YWwgPSBlbnRyeTtcXG4rXFxuK1xcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfQklHX0VORElBTikpXFxuK1xcdFxcdFxcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFxcXCIlMDE2bGx4JTAxNmxseFxcXCIsIHZhbFswXSwgdmFsWzFdKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcXFwiJTAxNmxseCUwMTZsbHhcXFwiLCB2YWxbMV0sIHZhbFswXSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcXFwidW5zdXBwb3J0ZWRcXFwiKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4rI2RlZmluZSBwdHZhbF90b19zdHIoYnVmLCB2YWwpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRfX2F1dG9fdHlwZSBfX3ZhbCA9ICh2YWwpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRwdHZhbF9ieXRlc190b19oZXhfc3RyKChidWYpLCBzaXplb2YoYnVmKSwgXFx1MDAyNl9fdmFsLCBzaXplb2YoX192YWwpKTtcXHRcXFxcXFxuK1xcdH0gd2hpbGUgKDApXFxuK1xcbiBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBsb25nIHBnZHYsIHA0ZHYsIHB1ZHYsIHBtZHY7XFxuK1xcdGNoYXIgcGdkX3N0cltQVFZBTF9TVFJfTUFYXTtcXG4rXFx0Y2hhciBwNGRfc3RyW1BUVkFMX1NUUl9NQVhdO1xcbitcXHRjaGFyIHB1ZF9zdHJbUFRWQUxfU1RSX01BWF07XFxuK1xcdGNoYXIgcG1kX3N0cltQVFZBTF9TVFJfTUFYXTtcXG4gXFx0cDRkX3QgcDRkLCAqcDRkcDtcXG4gXFx0cHVkX3QgcHVkLCAqcHVkcDtcXG4gXFx0cG1kX3QgcG1kLCAqcG1kcDtcXG5AQCAtNTMyLDM0ICs1NzUsMzQgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcXG4gXFx0ICogc2VlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciBwcmludF9iYWRfcGFnZV9tYXAoKS5cXG4gXFx0ICovXFxuIFxcdHBnZHAgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTtcXG4tXFx0cGdkdiA9IHBnZF92YWwoKnBnZHApO1xcbitcXHRwdHZhbF90b19zdHIocGdkX3N0ciwgcGdkX3ZhbCgqcGdkcCkpO1xcbiBcXG4gXFx0aWYgKCFwZ2RfcHJlc2VudCgqcGdkcCkgfHwgcGdkX2xlYWYoKnBnZHApKSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JTA4bGx4XFxcXG5cXFwiLCBwZ2R2KTtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcInBnZDogJXNcXFxcblxcXCIsIHBnZF9zdHIpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdHA0ZHAgPSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpO1xcbiBcXHRwNGQgPSBwNGRwX2dldChwNGRwKTtcXG4tXFx0cDRkdiA9IHA0ZF92YWwocDRkKTtcXG4rXFx0cHR2YWxfdG9fc3RyKHA0ZF9zdHIsIHA0ZF92YWwocDRkKSk7XFxuIFxcbiBcXHRpZiAoIXA0ZF9wcmVzZW50KHA0ZCkgfHwgcDRkX2xlYWYocDRkKSkge1xcbi1cXHRcXHRwcl9hbGVydChcXFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4XFxcXG5cXFwiLCBwZ2R2LCBwNGR2KTtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcInBnZDogJXMgcDRkOiAlc1xcXFxuXFxcIiwgcGdkX3N0ciwgcDRkX3N0cik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XFxuIFxcdHB1ZCA9IHB1ZHBfZ2V0KHB1ZHApO1xcbi1cXHRwdWR2ID0gcHVkX3ZhbChwdWQpO1xcbitcXHRwdHZhbF90b19zdHIocHVkX3N0ciwgcHVkX3ZhbChwdWQpKTtcXG4gXFxuIFxcdGlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseFxcXFxuXFxcIiwgcGdkdiwgcDRkdiwgcHVkdik7XFxuK1xcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6ICVzIHA0ZDogJXMgcHVkOiAlc1xcXFxuXFxcIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0cik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XFxuIFxcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xcbi1cXHRwbWR2ID0gcG1kX3ZhbChwbWQpO1xcbitcXHRwdHZhbF90b19zdHIocG1kX3N0ciwgcG1kX3ZhbChwbWQpKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIER1bXBpbmcgdGhlIFBURSB3b3VsZCBiZSBuaWNlLCBidXQgaXQncyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSxcXG5AQCAtNTY3LDggKzYxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXFxuIFxcdCAqIGRvaW5nIGFub3RoZXIgbWFwIHdvdWxkIGJlIGJhZC4gcHJpbnRfYmFkX3BhZ2VfbWFwKCkgc2hvdWxkXFxuIFxcdCAqIGFscmVhZHkgdGFrZSBjYXJlIG9mIHByaW50aW5nIHRoZSBQVEUuXFxuIFxcdCAqL1xcbi1cXHRwcl9hbGVydChcXFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxcXFxuXFxcIiwgcGdkdixcXG4tXFx0XFx0IHA0ZHYsIHB1ZHYsIHBtZHYpO1xcbitcXHRwcl9hbGVydChcXFwicGdkOiAlcyBwNGQ6ICVzIHB1ZDogJXMgcG1kOiAlc1xcXFxuXFxcIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0ciwgcG1kX3N0cik7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTU4NCwxMCArNjI2LDExIEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXFxuICAqIHBhZ2UgdGFibGUgbG9jay5cXG4gICovXFxuIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlLFxcbi1cXHRcXHRlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplLFxcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiB7XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xcbitcXHRjaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTtcXG4gXFx0cGdvZmZfdCBpbmRleDtcXG4gXFxuIFxcdGlmIChpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQoKSlcXG5AQCAtNTk2LDggKzYzOSw5IEBAIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0bWFwcGluZyA9IHZtYS1cXHUwMDNldm1fZmlsZSA/IHZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nIDogTlVMTDtcXG4gXFx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHIpO1xcbiBcXG4tXFx0cHJfYWxlcnQoXFxcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiUwOGxseFxcXCIsIGN1cnJlbnQtXFx1MDAzZWNvbW0sXFxuLVxcdFxcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5KTtcXG4rXFx0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cihlbnRyeV9zdHIsIHNpemVvZihlbnRyeV9zdHIpLCBlbnRyeSwgZW50cnlfc2l6ZSk7XFxuK1xcdHByX2FsZXJ0KFxcXCJCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczogJXNcXFwiLCBjdXJyZW50LVxcdTAwM2Vjb21tLFxcbitcXHRcXHQgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeV9zdHIpO1xcbiBcXHRfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIpO1xcbiBcXHRpZiAocGFnZSlcXG4gXFx0XFx0ZHVtcF9wYWdlKHBhZ2UsIFxcXCJiYWQgcGFnZSBtYXBcXFwiKTtcXG5AQCAtNjI3LDggKzY3MSwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiBcXHR9XFxuIH1cXG4gXFxuLSNkZWZpbmUgcHJpbnRfYmFkX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcGFnZSkgXFxcXFxcbi1cXHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBwdGVfdmFsKHB0ZSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKVxcbitzdGF0aWMgdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCAgcHRlX3QgcHRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRfX2F1dG9fdHlwZSBlbnRyeSA9IHB0ZV92YWwocHRlKTtcXG4rXFxuK1xcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xcbit9XFxuIFxcbiAvKipcXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcXFwic3RydWN0IHBhZ2VcXFwiIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuXFxuQEAgLTYzNiw4ICs2ODUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxcbiAgKiBAcGZuOiBUaGUgUEZOIHN0b3JlZCBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeS5cXG4gICogQHNwZWNpYWw6IFdoZXRoZXIgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFya2VkIFxcXCJzcGVjaWFsXFxcIi5cXG4tICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXFxuICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxcbisgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxcbisgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cXG4gICpcXG4gICogXFxcIlNwZWNpYWxcXFwiIG1hcHBpbmdzIGRvIG5vdCB3aXNoIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIFxcXCJzdHJ1Y3QgcGFnZVxcXCIgKGVpdGhlclxcbiAgKiBpdCBkb2Vzbid0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJ3Qgd2FudCB0byB0b3VjaCBpdCkuIEluIHRoaXNcXG5AQCAtNjk3LDcgKzc0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIHNwZWNpYWwsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbitcXHRcXHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcXG4ge1xcbiBcXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XFxuIFxcdFxcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xcbkBAIC03MTAsNyArNzYwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0aWYgKGlzX3plcm9fcGZuKHBmbikgfHwgaXNfaHVnZV96ZXJvX3BmbihwZm4pKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdFxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XFxuK1xcdFxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qXFxuQEAgLTc0MSw3ICs3OTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHBmbiBcXHUwMDNlIGhpZ2hlc3RfbWVtbWFwX3BmbikpIHtcXG4gXFx0XFx0LyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovXFxuLVxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XFxuK1xcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcdC8qXFxuQEAgLTc2Nyw4ICs4MTcsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdCAgICBwdGVfdCBwdGUpXFxuIHtcXG4rXFx0X19hdXRvX3R5cGUgZW50cnkgPSBwdGVfdmFsKHB0ZSk7XFxuK1xcbiBcXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB0ZV9wZm4ocHRlKSwgcHRlX3NwZWNpYWwocHRlKSxcXG4tXFx0XFx0XFx0XFx0cHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtODA5LDggKzg2MSwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdHBtZF90IHBtZClcXG4ge1xcbitcXHRfX2F1dG9fdHlwZSBlbnRyeSA9IHBtZF92YWwocG1kKTtcXG4rXFxuIFxcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcG1kX3BmbihwbWQpLCBwbWRfc3BlY2lhbChwbWQpLFxcbi1cXHRcXHRcXHRcXHRwbWRfdmFsKHBtZCksIFBHVEFCTEVfTEVWRUxfUE1EKTtcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC04NTAsOCArOTA0LDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCBwdWQpXFxuIHtcXG4rXFx0X19hdXRvX3R5cGUgZW50cnkgPSBwdWRfdmFsKHB1ZCk7XFxuK1xcbiBcXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcXG4tXFx0XFx0XFx0XFx0cHVkX3ZhbChwdWQpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6MTQ6MDcuNTkyNDIzMTk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzYzNDAxNDQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBmb3JtYXR0ZWQgYW5kIHByaW50ZWQgaW4gZXJyb3IgbWVzc2FnZXMgKGUuZy4sIHByaW50X2JhZF9wYWdlX21hcCkuIEl0IGRvZXMgbm90IGNoYW5nZSBhbnkgY29yZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgwZDM3ZDE0ODE0MjNjOWZmMDYwMzViNDUxOGUwOWI5ZmZjMmNkOTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDEyOjE0OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMzEuLmYwYzM0NzhmMWE2M2E3IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNTE5LDkgKzUxOSw1MiBAQCBzdGF0aWMgYm9vbCBpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQodm9pZClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rI2RlZmluZSBQVFZBTF9TVFJfTUFYXHQoMzIgKyAxKSAvKiBNYXggMTI4LWJpdCB2YWx1ZSBpbiBoZXggKyBOVUwgKi9cbitcbitzdGF0aWMgdm9pZCBwdHZhbF9ieXRlc190b19oZXhfc3RyKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUpXG4re1xuK1x0aWYgKFdBUk5fT05fT05DRShidWZfc2l6ZSBcdTAwM2MgZW50cnlfc2l6ZSAqIDIgKyAxKSkge1xuK1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcIm92ZXJmbG93XCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKGVudHJ5X3NpemUpIHtcbitcdGNhc2Ugc2l6ZW9mKHUzMik6XG4rXHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwiJTA4eFwiLCAqKGNvbnN0IHUzMiAqKWVudHJ5KTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIHNpemVvZih1NjQpOlxuK1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcIiUwMTZsbHhcIiwgKihjb25zdCB1NjQgKillbnRyeSk7XG4rXHRcdGJyZWFrO1xuKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKVxuK1x0Y2FzZSBzaXplb2YodTEyOCk6IHtcbitcdFx0Y29uc3QgdTY0ICp2YWwgPSBlbnRyeTtcbitcbitcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSlcbitcdFx0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcIiUwMTZsbHglMDE2bGx4XCIsIHZhbFswXSwgdmFsWzFdKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwiJTAxNmxseCUwMTZsbHhcIiwgdmFsWzFdLCB2YWxbMF0pO1xuK1x0XHRicmVhaztcbitcdH1cbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwidW5zdXBwb3J0ZWRcIik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitcbisjZGVmaW5lIHB0dmFsX3RvX3N0cihidWYsIHZhbClcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdF9fYXV0b190eXBlIF9fdmFsID0gKHZhbCk7XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cigoYnVmKSwgc2l6ZW9mKGJ1ZiksIFx1MDAyNl9fdmFsLCBzaXplb2YoX192YWwpKTtcdFxcXG4rXHR9IHdoaWxlICgwKVxuK1xuIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjtcbitcdGNoYXIgcGdkX3N0cltQVFZBTF9TVFJfTUFYXTtcbitcdGNoYXIgcDRkX3N0cltQVFZBTF9TVFJfTUFYXTtcbitcdGNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTtcbitcdGNoYXIgcG1kX3N0cltQVFZBTF9TVFJfTUFYXTtcbiBcdHA0ZF90IHA0ZCwgKnA0ZHA7XG4gXHRwdWRfdCBwdWQsICpwdWRwO1xuIFx0cG1kX3QgcG1kLCAqcG1kcDtcbkBAIC01MzIsMzQgKzU3NSwzNCBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxuIFx0ICogc2VlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciBwcmludF9iYWRfcGFnZV9tYXAoKS5cbiBcdCAqL1xuIFx0cGdkcCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpO1xuLVx0cGdkdiA9IHBnZF92YWwoKnBnZHApO1xuK1x0cHR2YWxfdG9fc3RyKHBnZF9zdHIsIHBnZF92YWwoKnBnZHApKTtcbiBcbiBcdGlmICghcGdkX3ByZXNlbnQoKnBnZHApIHx8IHBnZF9sZWFmKCpwZ2RwKSkge1xuLVx0XHRwcl9hbGVydChcInBnZDolMDhsbHhcXG5cIiwgcGdkdik7XG4rXHRcdHByX2FsZXJ0KFwicGdkOiAlc1xcblwiLCBwZ2Rfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4gXHRwNGQgPSBwNGRwX2dldChwNGRwKTtcbi1cdHA0ZHYgPSBwNGRfdmFsKHA0ZCk7XG4rXHRwdHZhbF90b19zdHIocDRkX3N0ciwgcDRkX3ZhbChwNGQpKTtcbiBcbiBcdGlmICghcDRkX3ByZXNlbnQocDRkKSB8fCBwNGRfbGVhZihwNGQpKSB7XG4tXHRcdHByX2FsZXJ0KFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4XFxuXCIsIHBnZHYsIHA0ZHYpO1xuK1x0XHRwcl9hbGVydChcInBnZDogJXMgcDRkOiAlc1xcblwiLCBwZ2Rfc3RyLCBwNGRfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XG4gXHRwdWQgPSBwdWRwX2dldChwdWRwKTtcbi1cdHB1ZHYgPSBwdWRfdmFsKHB1ZCk7XG4rXHRwdHZhbF90b19zdHIocHVkX3N0ciwgcHVkX3ZhbChwdWQpKTtcbiBcbiBcdGlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSB7XG4tXHRcdHByX2FsZXJ0KFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHhcXG5cIiwgcGdkdiwgcDRkdiwgcHVkdik7XG4rXHRcdHByX2FsZXJ0KFwicGdkOiAlcyBwNGQ6ICVzIHB1ZDogJXNcXG5cIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0cik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuIFx0cG1kID0gcG1kcF9nZXQocG1kcCk7XG4tXHRwbWR2ID0gcG1kX3ZhbChwbWQpO1xuK1x0cHR2YWxfdG9fc3RyKHBtZF9zdHIsIHBtZF92YWwocG1kKSk7XG4gXG4gXHQvKlxuIFx0ICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCdzIHRyaWNreSB3aXRoIENPTkZJR19ISUdIUFRFLFxuQEAgLTU2Nyw4ICs2MTAsNyBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxuIFx0ICogZG9pbmcgYW5vdGhlciBtYXAgd291bGQgYmUgYmFkLiBwcmludF9iYWRfcGFnZV9tYXAoKSBzaG91bGRcbiBcdCAqIGFscmVhZHkgdGFrZSBjYXJlIG9mIHByaW50aW5nIHRoZSBQVEUuXG4gXHQgKi9cbi1cdHByX2FsZXJ0KFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxcblwiLCBwZ2R2LFxuLVx0XHQgcDRkdiwgcHVkdiwgcG1kdik7XG4rXHRwcl9hbGVydChcInBnZDogJXMgcDRkOiAlcyBwdWQ6ICVzIHBtZDogJXNcXG5cIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0ciwgcG1kX3N0cik7XG4gfVxuIFxuIC8qXG5AQCAtNTg0LDEwICs2MjYsMTEgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiAgKiBwYWdlIHRhYmxlIGxvY2suXG4gICovXG4gc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsXG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4rXHRjaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTtcbiBcdHBnb2ZmX3QgaW5kZXg7XG4gXG4gXHRpZiAoaXNfYmFkX3BhZ2VfbWFwX3JhdGVsaW1pdGVkKCkpXG5AQCAtNTk2LDggKzYzOSw5IEBAIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdG1hcHBpbmcgPSB2bWEtXHUwMDNldm1fZmlsZSA/IHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyA6IE5VTEw7XG4gXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7XG4gXG4tXHRwcl9hbGVydChcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiUwOGxseFwiLCBjdXJyZW50LVx1MDAzZWNvbW0sXG4tXHRcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5KTtcbitcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpO1xuK1x0cHJfYWxlcnQoXCJCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczogJXNcIiwgY3VycmVudC1cdTAwM2Vjb21tLFxuK1x0XHQgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeV9zdHIpO1xuIFx0X19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZSh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuIFx0aWYgKHBhZ2UpXG4gXHRcdGR1bXBfcGFnZShwYWdlLCBcImJhZCBwYWdlIG1hcFwiKTtcbkBAIC02MjcsOCArNjcxLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gXHR9XG4gfVxuIFxuLSNkZWZpbmUgcHJpbnRfYmFkX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcGFnZSkgXFxcbi1cdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIHB0ZV92YWwocHRlKSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpXG4rc3RhdGljIHZvaWQgcHJpbnRfYmFkX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgcHRlX3QgcHRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRfX2F1dG9fdHlwZSBlbnRyeSA9IHB0ZV92YWwocHRlKTtcbitcbitcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4rfVxuIFxuIC8qKlxuICAqIF9fdm1fbm9ybWFsX3BhZ2UoKSAtIEdldCB0aGUgXCJzdHJ1Y3QgcGFnZVwiIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuXG5AQCAtNjM2LDggKzY4NSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gICogQGFkZHI6IFRoZSBhZGRyZXNzIHdoZXJlIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcHBlZC5cbiAgKiBAcGZuOiBUaGUgUEZOIHN0b3JlZCBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeS5cbiAgKiBAc3BlY2lhbDogV2hldGhlciB0aGUgcGFnZSB0YWJsZSBlbnRyeSBpcyBtYXJrZWQgXCJzcGVjaWFsXCIuXG4tICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXG4gICogQGVudHJ5OiBUaGUgcGFnZSB0YWJsZSBlbnRyeSB2YWx1ZSBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXG4rICogQGVudHJ5X3NpemU6IFRoZSBzaXplIG9mIEBlbnRyeS5cbisgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbiAgKlxuICAqIFwiU3BlY2lhbFwiIG1hcHBpbmdzIGRvIG5vdCB3aXNoIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIFwic3RydWN0IHBhZ2VcIiAoZWl0aGVyXG4gICogaXQgZG9lc24ndCBleGlzdCwgb3IgaXQgZXhpc3RzIGJ1dCB0aGV5IGRvbid0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzXG5AQCAtNjk3LDcgKzc0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gICovXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBzcGVjaWFsLFxuLVx0XHR1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbitcdFx0Y29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4ge1xuIFx0aWYgKHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGxldmVsKSkge1xuIFx0XHRpZiAodW5saWtlbHkoc3BlY2lhbCkpIHtcbkBAIC03MTAsNyArNzYwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoaXNfemVyb19wZm4ocGZuKSB8fCBpc19odWdlX3plcm9fcGZuKHBmbikpXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpO1xuK1x0XHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbiBcdFx0LypcbkBAIC03NDEsNyArNzkxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcbiBcdGlmICh1bmxpa2VseShwZm4gXHUwMDNlIGhpZ2hlc3RfbWVtbWFwX3BmbikpIHtcbiBcdFx0LyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovXG4tXHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XG4rXHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFx0LypcbkBAIC03NjcsOCArODE3LDEwIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgIHB0ZV90IHB0ZSlcbiB7XG4rXHRfX2F1dG9fdHlwZSBlbnRyeSA9IHB0ZV92YWwocHRlKTtcbitcbiBcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpLCBwdGVfc3BlY2lhbChwdGUpLFxuLVx0XHRcdFx0cHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4rXHRcdFx0XHRcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xuIH1cbiBcbiAvKipcbkBAIC04MDksOCArODYxLDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0cG1kX3QgcG1kKVxuIHtcbitcdF9fYXV0b190eXBlIGVudHJ5ID0gcG1kX3ZhbChwbWQpO1xuK1xuIFx0cmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwbWRfcGZuKHBtZCksIHBtZF9zcGVjaWFsKHBtZCksXG4tXHRcdFx0XHRwbWRfdmFsKHBtZCksIFBHVEFCTEVfTEVWRUxfUE1EKTtcbitcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XG4gfVxuIFxuIC8qKlxuQEAgLTg1MCw4ICs5MDQsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKVxuIHtcbitcdF9fYXV0b190eXBlIGVudHJ5ID0gcHVkX3ZhbChwdWQpO1xuK1xuIFx0cmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdWRfcGZuKHB1ZCksIHB1ZF9zcGVjaWFsKHB1ZCksXG4tXHRcdFx0XHRwdWRfdmFsKHB1ZCksIFBHVEFCTEVfTEVWRUxfUFVEKTtcbitcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XG4gfVxuICNlbmRpZlxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6MTQ6MDcuNTkyNDI0NTA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM2MzM5OTI4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGFnZSBUYWJsZSBMb2dnaW5nIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IG1vZGlmaWVzIGBtbS9tZW1vcnkuY2AuIE15IGluaXRpYWwgcmVhZCBpbmRpY2F0ZXMgaXQncyBhIHZlcnkgdGFyZ2V0ZWQgY2hhbmdlLCBwdXJlbHkgY29zbWV0aWMsIGF0IGxlYXN0IGZyb20gd2hhdCBJJ20gc2VlaW5nLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhYm91dCBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBwcmludGVkIHdoZW4gYSBcImJhZCBwYWdlIG1hcFwiIGVycm9yIGlzIHRyaWdnZXJlZCwgd2l0aGluIGBwcmludF9iYWRfcGFnZV9tYXBgIGFuZCBgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZWAuXG5cblRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyB0aGVzZSBuZXcgZm9ybWF0dGluZyBmdW5jdGlvbnMsIGBwdHZhbF9ieXRlc190b19oZXhfc3RyYCBhbmQgYHB0dmFsX3RvX3N0cmAuICBUaGV5J3JlIGJ1aWx0IHRvIGNvbnZlcnQgYW5kIHByZXNlbnQgcGFnZSB0YWJsZSB2YWx1ZXMgYXMgaGV4IHN0cmluZ3MsIHNwZWNpZmljYWxseSBoYW5kbGluZyBkaWZmZXJlbnQgZGF0YSBzaXplcyBsaWtlIGB1MzJgLCBgdTY0YCwgYW5kIGV2ZW4gYHUxMjhgLiAgVGhpcyBpcyBwdXJlbHkgYWJvdXQgdGhlIGxvZ2dpbmcgYW5kIGZvcm1hdHRpbmcsIHRoYXQncyB3aGF0IHRob3NlIGZ1bmN0aW9ucyBkby4gVGhlIGFjdHVhbCBlcnJvciBoYW5kbGluZyBhbmQga2VybmVsIGJlaGF2aW9yIHJlbWFpbnMgdW50b3VjaGVkLCBpdCBzZWVtcyB0byBiZSBsaW1pdGVkIHRvIHRoZSBgcHJfYWxlcnRgIGNhbGxzLCBtYWtpbmcgdGhlIGVycm9yIG1lc3NhZ2VzIGVhc2llciB0byByZWFkLCBvciBwcm92aWRlIG1vcmUgZGV0YWlsIGFib3V0IHRoZSBzdGF0ZS5cblxuV2FpdCwgbG9va2luZyBmdXJ0aGVyLCB0aGUgc2lnbmF0dXJlIG9mIGBfX3ZtX25vcm1hbF9wYWdlYCBoYXMgYWxzbyBjaGFuZ2VkLCBidXQgaXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgbm93IHRha2VzIGBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemVgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeWAsIGJ1dCB0aGlzIGlzIHNpbXBseSB0byBwcm92aWRlIHRoZSBkYXRhIGZvciB0aGUgbG9nZ2luZyBjaGFuZ2UsIHNvIGl0IGNhbiBwYXNzIHRoZSBlbnRyeSB0byBgcHJpbnRfYmFkX3BhZ2VfbWFwYC4gVGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGFuZCBpdHMgY29yZSBsb2dpYyAqYXJlKiB1bmNoYW5nZWQsIHdoaWNoIGNvbmZpcm1zIHRoZSBzY29wZSBvZiB0aGlzIHVwZGF0ZS5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgZGlmZiB0byBjb25maXJtIHRoaXMuIEFoLCB5ZXMsIHRoZXJlIGl0IGlzISAgV2UncmUgZ29pbmcgZnJvbTpcbmBgYGNcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHRlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplLFxuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuYGBgXG5hbmQgdGhlbjpcbmBgYGNcbi1cdHByX2FsZXJ0KFwiQlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JTA4bGx4XCIsIGN1cnJlbnQtXHUwMDNlY29tbSxcbi1cdFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnkpO1xuK1x0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cihlbnRyeV9zdHIsIHNpemVvZihlbnRyeV9zdHIpLCBlbnRyeSwgZW50cnlfc2l6ZSk7XG4rXHRwcl9hbGVydChcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiAlc1wiLCBjdXJyZW50LVx1MDAzZWNvbW0sXG4rXHRcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5X3N0cik7XG5gYGBcblllcCwgaXQncyBqdXN0IGFsdGVyaW5nIHRoZSBmb3JtYXQgb2YgdGhhdCBlcnJvciBtZXNzYWdlLiBUaGVyZSdzIG5vIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb250cm9sIGZsb3csIG5vdGhpbmcgdGhhdCBhbHRlcnMgdGhlIGtlcm5lbCdzIGV4ZWN1dGlvbiBwYXRoLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IG1hcmsgYFdvcnRoRnV6emluZ2AgYXMgYGZhbHNlYC5cblxuT2theSwgSSdsbCBnbyBhaGVhZCBhbmQgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTc5LCJPdXRwdXRUb2tlbnMiOjc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6MTQ6MzEuMjI2NDE4OTYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGhvdyBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGZvcm1hdHRlZCBhbmQgcHJpbnRlZCBpbiBlcnJvciBtZXNzYWdlcyAoZS5nLiwgcHJpbnRfYmFkX3BhZ2VfbWFwKS4gSXQgZG9lcyBub3QgY2hhbmdlIGFueSBjb3JlIGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmludGVkIGluIGVycm9yIG1lc3NhZ2VzIChlLmcuLCBwcmludF9iYWRfcGFnZV9tYXApLiBJdCBkb2VzIG5vdCBjaGFuZ2UgYW55IGNvcmUgZnVuY3Rpb25hbCBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowk7mjp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 11:54:01 +0000 UTC FinishedAt: 2026-07-07 12:14:32 +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+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmludGVkIGluIGVycm9yIG1lc3NhZ2VzIChlLmcuLCBwcmludF9iYWRfcGFnZV9tYXApLiBJdCBkb2VzIG5vdCBjaGFuZ2UgYW55IGNvcmUgZnVuY3Rpb25hbCBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgwZDM3ZDE0ODE0MjNjOWZmMDYwMzViNDUxOGUwOWI5ZmZjMmNkOTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDEyOjE0OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGZmMzM4YzJhYmU5MjMxLi5mMGMzNDc4ZjFhNjNhNyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTUxOSw5ICYjNDM7NTE5LDUyIEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7I2RlZmluZSBQVFZBTF9TVFJfTUFYXHQoMzIgJiM0MzsgMSkgLyogTWF4IDEyOC1iaXQgdmFsdWUgaW4gaGV4ICYjNDM7IE5VTCAqL1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcHR2YWxfYnl0ZXNfdG9faGV4X3N0cihjaGFyICpidWYsIHNpemVfdCBidWZfc2l6ZSwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShidWZfc2l6ZSBcdTAwM2MgZW50cnlfc2l6ZSAqIDIgJiM0MzsgMSkpIHtcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwmIzM0O292ZXJmbG93XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZW50cnlfc2l6ZSkge1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHUzMik6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDh4XCYjMzQ7LCAqKGNvbnN0IHUzMiAqKWVudHJ5KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2Ugc2l6ZW9mKHU2NCk6XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDE2bGx4XCYjMzQ7LCAqKGNvbnN0IHU2NCAqKWVudHJ5KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MzsjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcbiYjNDM7XHRjYXNlIHNpemVvZih1MTI4KToge1xuJiM0MztcdFx0Y29uc3QgdTY0ICp2YWwgPSBlbnRyeTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX0JJR19FTkRJQU4pKVxuJiM0MztcdFx0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDE2bGx4JTAxNmxseFwmIzM0OywgdmFsWzBdLCB2YWxbMV0pO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcJiMzNDslMDE2bGx4JTAxNmxseFwmIzM0OywgdmFsWzFdLCB2YWxbMF0pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXCYjMzQ7dW5zdXBwb3J0ZWRcJiMzNDspO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHB0dmFsX3RvX3N0cihidWYsIHZhbClcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0X19hdXRvX3R5cGUgX192YWwgPSAodmFsKTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoKGJ1ZiksIHNpemVvZihidWYpLCBcdTAwMjZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7XHRcXFxuJiM0MztcdH0gd2hpbGUgKDApXG4mIzQzO1xuIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjtcbiYjNDM7XHRjaGFyIHBnZF9zdHJbUFRWQUxfU1RSX01BWF07XG4mIzQzO1x0Y2hhciBwNGRfc3RyW1BUVkFMX1NUUl9NQVhdO1xuJiM0MztcdGNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTtcbiYjNDM7XHRjaGFyIHBtZF9zdHJbUFRWQUxfU1RSX01BWF07XG4gXHRwNGRfdCBwNGQsICpwNGRwO1xuIFx0cHVkX3QgcHVkLCAqcHVkcDtcbiBcdHBtZF90IHBtZCwgKnBtZHA7XG5AQCAtNTMyLDM0ICYjNDM7NTc1LDM0IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXG4gXHQgKiBzZWUgbG9ja2luZyByZXF1aXJlbWVudHMgZm9yIHByaW50X2JhZF9wYWdlX21hcCgpLlxuIFx0ICovXG4gXHRwZ2RwID0gcGdkX29mZnNldChtbSwgYWRkcik7XG4tXHRwZ2R2ID0gcGdkX3ZhbCgqcGdkcCk7XG4mIzQzO1x0cHR2YWxfdG9fc3RyKHBnZF9zdHIsIHBnZF92YWwoKnBnZHApKTtcbiBcbiBcdGlmICghcGdkX3ByZXNlbnQoKnBnZHApIHx8IHBnZF9sZWFmKCpwZ2RwKSkge1xuLVx0XHRwcl9hbGVydChcJiMzNDtwZ2Q6JTA4bGx4XFxuXCYjMzQ7LCBwZ2R2KTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BnZDogJXNcXG5cJiMzNDssIHBnZF9zdHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcbiBcdHA0ZCA9IHA0ZHBfZ2V0KHA0ZHApO1xuLVx0cDRkdiA9IHA0ZF92YWwocDRkKTtcbiYjNDM7XHRwdHZhbF90b19zdHIocDRkX3N0ciwgcDRkX3ZhbChwNGQpKTtcbiBcbiBcdGlmICghcDRkX3ByZXNlbnQocDRkKSB8fCBwNGRfbGVhZihwNGQpKSB7XG4tXHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolMDhsbHggcDRkOiUwOGxseFxcblwmIzM0OywgcGdkdiwgcDRkdik7XG4mIzQzO1x0XHRwcl9hbGVydChcJiMzNDtwZ2Q6ICVzIHA0ZDogJXNcXG5cJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRwdWRwID0gcHVkX29mZnNldChwNGRwLCBhZGRyKTtcbiBcdHB1ZCA9IHB1ZHBfZ2V0KHB1ZHApO1xuLVx0cHVkdiA9IHB1ZF92YWwocHVkKTtcbiYjNDM7XHRwdHZhbF90b19zdHIocHVkX3N0ciwgcHVkX3ZhbChwdWQpKTtcbiBcbiBcdGlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSB7XG4tXHRcdHByX2FsZXJ0KFwmIzM0O3BnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4XFxuXCYjMzQ7LCBwZ2R2LCBwNGR2LCBwdWR2KTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BnZDogJXMgcDRkOiAlcyBwdWQ6ICVzXFxuXCYjMzQ7LCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4gXHRwbWQgPSBwbWRwX2dldChwbWRwKTtcbi1cdHBtZHYgPSBwbWRfdmFsKHBtZCk7XG4mIzQzO1x0cHR2YWxfdG9fc3RyKHBtZF9zdHIsIHBtZF92YWwocG1kKSk7XG4gXG4gXHQvKlxuIFx0ICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCYjMzk7cyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSxcbkBAIC01NjcsOCAmIzQzOzYxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXG4gXHQgKiBkb2luZyBhbm90aGVyIG1hcCB3b3VsZCBiZSBiYWQuIHByaW50X2JhZF9wYWdlX21hcCgpIHNob3VsZFxuIFx0ICogYWxyZWFkeSB0YWtlIGNhcmUgb2YgcHJpbnRpbmcgdGhlIFBURS5cbiBcdCAqL1xuLVx0cHJfYWxlcnQoXCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxcblwmIzM0OywgcGdkdixcbi1cdFx0IHA0ZHYsIHB1ZHYsIHBtZHYpO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3BnZDogJXMgcDRkOiAlcyBwdWQ6ICVzIHBtZDogJXNcXG5cJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIsIHB1ZF9zdHIsIHBtZF9zdHIpO1xuIH1cbiBcbiAvKlxuQEAgLTU4NCwxMCAmIzQzOzYyNiwxMSBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxuICAqIHBhZ2UgdGFibGUgbG9jay5cbiAgKi9cbiBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi1cdFx0ZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsXG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuIHtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuJiM0MztcdGNoYXIgZW50cnlfc3RyW1BUVkFMX1NUUl9NQVhdO1xuIFx0cGdvZmZfdCBpbmRleDtcbiBcbiBcdGlmIChpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQoKSlcbkBAIC01OTYsOCAmIzQzOzYzOSw5IEBAIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdG1hcHBpbmcgPSB2bWEtXHUwMDNldm1fZmlsZSA/IHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyA6IE5VTEw7XG4gXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7XG4gXG4tXHRwcl9hbGVydChcJiMzNDtCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczolMDhsbHhcJiMzNDssIGN1cnJlbnQtXHUwMDNlY29tbSxcbi1cdFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnkpO1xuJiM0MztcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiAlc1wmIzM0OywgY3VycmVudC1cdTAwM2Vjb21tLFxuJiM0MztcdFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnlfc3RyKTtcbiBcdF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUodm1hLVx1MDAzZXZtX21tLCBhZGRyKTtcbiBcdGlmIChwYWdlKVxuIFx0XHRkdW1wX3BhZ2UocGFnZSwgXCYjMzQ7YmFkIHBhZ2UgbWFwXCYjMzQ7KTtcbkBAIC02MjcsOCAmIzQzOzY3MSwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuIFx0fVxuIH1cbiBcbi0jZGVmaW5lIHByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGUsIHBhZ2UpIFxcXG4tXHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBwdGVfdmFsKHB0ZSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKVxuJiM0MztzdGF0aWMgdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHRcdCAgcHRlX3QgcHRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdF9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuJiM0MztcbiYjNDM7XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xuJiM0Mzt9XG4gXG4gLyoqXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcJiMzNDtzdHJ1Y3QgcGFnZVwmIzM0OyBhc3NvY2lhdGVkIHdpdGggYSBwYWdlIHRhYmxlIGVudHJ5LlxuQEAgLTYzNiw4ICYjNDM7Njg1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxuICAqIEBwZm46IFRoZSBQRk4gc3RvcmVkIGluIHRoZSBwYWdlIHRhYmxlIGVudHJ5LlxuICAqIEBzcGVjaWFsOiBXaGV0aGVyIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcmtlZCBcJiMzNDtzcGVjaWFsXCYjMzQ7LlxuLSAqIEBsZXZlbDogVGhlIHBhZ2UgdGFibGUgbGV2ZWwgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxuJiM0MzsgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxuJiM0MzsgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbiAgKlxuICAqIFwmIzM0O1NwZWNpYWxcJiMzNDsgbWFwcGluZ3MgZG8gbm90IHdpc2ggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgXCYjMzQ7c3RydWN0IHBhZ2VcJiMzNDsgKGVpdGhlclxuICAqIGl0IGRvZXNuJiMzOTt0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJiMzOTt0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzXG5AQCAtNjk3LDcgJiM0Mzs3NDcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgc3BlY2lhbCxcbi1cdFx0dW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4mIzQzO1x0XHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiB7XG4gXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XG4gXHRcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xuQEAgLTcxMCw3ICYjNDM7NzYwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoaXNfemVyb19wZm4ocGZuKSB8fCBpc19odWdlX3plcm9fcGZuKHBmbikpXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpO1xuJiM0MztcdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgZW50cnlfc2l6ZSwgTlVMTCwgbGV2ZWwpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4gXHRcdC8qXG5AQCAtNzQxLDcgJiM0Mzs3OTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFxuIFx0aWYgKHVubGlrZWx5KHBmbiBcdTAwM2UgaGlnaGVzdF9tZW1tYXBfcGZuKSkge1xuIFx0XHQvKiBDb3JydXB0ZWQgcGFnZSB0YWJsZSBlbnRyeS4gKi9cbi1cdFx0cHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIE5VTEwsIGxldmVsKTtcbiYjNDM7XHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFx0LypcbkBAIC03NjcsOCAmIzQzOzgxNywxMCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICBwdGVfdCBwdGUpXG4ge1xuJiM0MztcdF9fYXV0b190eXBlIGVudHJ5ID0gcHRlX3ZhbChwdGUpO1xuJiM0MztcbiBcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpLCBwdGVfc3BlY2lhbChwdGUpLFxuLVx0XHRcdFx0cHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4mIzQzO1x0XHRcdFx0XHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUFRFKTtcbiB9XG4gXG4gLyoqXG5AQCAtODA5LDggJiM0Mzs4NjEsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRwbWRfdCBwbWQpXG4ge1xuJiM0MztcdF9fYXV0b190eXBlIGVudHJ5ID0gcG1kX3ZhbChwbWQpO1xuJiM0MztcbiBcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcG1kX3BmbihwbWQpLCBwbWRfc3BlY2lhbChwbWQpLFxuLVx0XHRcdFx0cG1kX3ZhbChwbWQpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XG4mIzQzO1x0XHRcdFx0XHUwMDI2ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUE1EKTtcbiB9XG4gXG4gLyoqXG5AQCAtODUwLDggJiM0Mzs5MDQsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKVxuIHtcbiYjNDM7XHRfX2F1dG9fdHlwZSBlbnRyeSA9IHB1ZF92YWwocHVkKTtcbiYjNDM7XG4gXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcbi1cdFx0XHRcdHB1ZF92YWwocHVkKSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xuJiM0MztcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XG4gfVxuICNlbmRpZlxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmludGVkIGluIGVycm9yIG1lc3NhZ2VzIChlLmcuLCBwcmludF9iYWRfcGFnZV9tYXApLiBJdCBkb2VzIG5vdCBjaGFuZ2UgYW55IGNvcmUgZnVuY3Rpb25hbCBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODBkMzdkMTQ4MTQyM2M5ZmYwNjAzNWI0NTE4ZTA5YjlmZmMyY2Q5MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMTI6MTQ6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGZmMzM4YzJhYmU5MjMxLi5mMGMzNDc4ZjFhNjNhNyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTUxOSw5ICYjNDM7NTE5LDUyIEBAIHN0YXRpYyBib29sIGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzOyNkZWZpbmUgUFRWQUxfU1RSX01BWAkoMzIgJiM0MzsgMSkgLyogTWF4IDEyOC1iaXQgdmFsdWUgaW4gaGV4ICYjNDM7IE5VTCAqLwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoYnVmX3NpemUgJmx0OyBlbnRyeV9zaXplICogMiAmIzQzOyAxKSkgewomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDtvdmVyZmxvdyYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGVudHJ5X3NpemUpIHsKJiM0MzsJY2FzZSBzaXplb2YodTMyKToKJiM0MzsJCXNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsICYjMzQ7JTA4eCYjMzQ7LCAqKGNvbnN0IHUzMiAqKWVudHJ5KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIHNpemVvZih1NjQpOgomIzQzOwkJc25wcmludGYoYnVmLCBidWZfc2l6ZSwgJiMzNDslMDE2bGx4JiMzNDssICooY29uc3QgdTY0ICopZW50cnkpOwomIzQzOwkJYnJlYWs7CiYjNDM7I2lmIGRlZmluZWQoX19TSVpFT0ZfSU5UMTI4X18pCiYjNDM7CWNhc2Ugc2l6ZW9mKHUxMjgpOiB7CiYjNDM7CQljb25zdCB1NjQgKnZhbCA9IGVudHJ5OwomIzQzOwomIzQzOwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSkKJiM0MzsJCQlzbnByaW50ZihidWYsIGJ1Zl9zaXplLCAmIzM0OyUwMTZsbHglMDE2bGx4JiMzNDssIHZhbFswXSwgdmFsWzFdKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzbnByaW50ZihidWYsIGJ1Zl9zaXplLCAmIzM0OyUwMTZsbHglMDE2bGx4JiMzNDssIHZhbFsxXSwgdmFsWzBdKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlzbnByaW50ZihidWYsIGJ1Zl9zaXplLCAmIzM0O3Vuc3VwcG9ydGVkJiMzNDspOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBwdHZhbF90b19zdHIoYnVmLCB2YWwpCQkJCQkJCQlcCiYjNDM7CWRvIHsJCQkJCQkJCQkJXAomIzQzOwkJX19hdXRvX3R5cGUgX192YWwgPSAodmFsKTsJCQkJCQlcCiYjNDM7CQkJCQkJCQkJCQlcCiYjNDM7CQlwdHZhbF9ieXRlc190b19oZXhfc3RyKChidWYpLCBzaXplb2YoYnVmKSwgJmFtcDtfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7CVwKJiM0MzsJfSB3aGlsZSAoMCkKJiM0MzsKIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjsKJiM0MzsJY2hhciBwZ2Rfc3RyW1BUVkFMX1NUUl9NQVhdOwomIzQzOwljaGFyIHA0ZF9zdHJbUFRWQUxfU1RSX01BWF07CiYjNDM7CWNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTsKJiM0MzsJY2hhciBwbWRfc3RyW1BUVkFMX1NUUl9NQVhdOwogCXA0ZF90IHA0ZCwgKnA0ZHA7CiAJcHVkX3QgcHVkLCAqcHVkcDsKIAlwbWRfdCBwbWQsICpwbWRwOwpAQCAtNTMyLDM0ICYjNDM7NTc1LDM0IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkCiAJICogc2VlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciBwcmludF9iYWRfcGFnZV9tYXAoKS4KIAkgKi8KIAlwZ2RwID0gcGdkX29mZnNldChtbSwgYWRkcik7Ci0JcGdkdiA9IHBnZF92YWwoKnBnZHApOwomIzQzOwlwdHZhbF90b19zdHIocGdkX3N0ciwgcGdkX3ZhbCgqcGdkcCkpOwogCiAJaWYgKCFwZ2RfcHJlc2VudCgqcGdkcCkgfHwgcGdkX2xlYWYoKnBnZHApKSB7Ci0JCXByX2FsZXJ0KCYjMzQ7cGdkOiUwOGxseFxuJiMzNDssIHBnZHYpOwomIzQzOwkJcHJfYWxlcnQoJiMzNDtwZ2Q6ICVzXG4mIzM0OywgcGdkX3N0cik7CiAJCXJldHVybjsKIAl9CiAKIAlwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTsKIAlwNGQgPSBwNGRwX2dldChwNGRwKTsKLQlwNGR2ID0gcDRkX3ZhbChwNGQpOwomIzQzOwlwdHZhbF90b19zdHIocDRkX3N0ciwgcDRkX3ZhbChwNGQpKTsKIAogCWlmICghcDRkX3ByZXNlbnQocDRkKSB8fCBwNGRfbGVhZihwNGQpKSB7Ci0JCXByX2FsZXJ0KCYjMzQ7cGdkOiUwOGxseCBwNGQ6JTA4bGx4XG4mIzM0OywgcGdkdiwgcDRkdik7CiYjNDM7CQlwcl9hbGVydCgmIzM0O3BnZDogJXMgcDRkOiAlc1xuJiMzNDssIHBnZF9zdHIsIHA0ZF9zdHIpOwogCQlyZXR1cm47CiAJfQogCiAJcHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7CiAJcHVkID0gcHVkcF9nZXQocHVkcCk7Ci0JcHVkdiA9IHB1ZF92YWwocHVkKTsKJiM0MzsJcHR2YWxfdG9fc3RyKHB1ZF9zdHIsIHB1ZF92YWwocHVkKSk7CiAKIAlpZiAoIXB1ZF9wcmVzZW50KHB1ZCkgfHwgcHVkX2xlYWYocHVkKSkgewotCQlwcl9hbGVydCgmIzM0O3BnZDolMDhsbHggcDRkOiUwOGxseCBwdWQ6JTA4bGx4XG4mIzM0OywgcGdkdiwgcDRkdiwgcHVkdik7CiYjNDM7CQlwcl9hbGVydCgmIzM0O3BnZDogJXMgcDRkOiAlcyBwdWQ6ICVzXG4mIzM0OywgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0cik7CiAJCXJldHVybjsKIAl9CiAKIAlwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTsKIAlwbWQgPSBwbWRwX2dldChwbWRwKTsKLQlwbWR2ID0gcG1kX3ZhbChwbWQpOwomIzQzOwlwdHZhbF90b19zdHIocG1kX3N0ciwgcG1kX3ZhbChwbWQpKTsKIAogCS8qCiAJICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCYjMzk7cyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSwKQEAgLTU2Nyw4ICYjNDM7NjEwLDcgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGQKIAkgKiBkb2luZyBhbm90aGVyIG1hcCB3b3VsZCBiZSBiYWQuIHByaW50X2JhZF9wYWdlX21hcCgpIHNob3VsZAogCSAqIGFscmVhZHkgdGFrZSBjYXJlIG9mIHByaW50aW5nIHRoZSBQVEUuCiAJICovCi0JcHJfYWxlcnQoJiMzNDtwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseCBwbWQ6JTA4bGx4XG4mIzM0OywgcGdkdiwKLQkJIHA0ZHYsIHB1ZHYsIHBtZHYpOwomIzQzOwlwcl9hbGVydCgmIzM0O3BnZDogJXMgcDRkOiAlcyBwdWQ6ICVzIHBtZDogJXNcbiYjMzQ7LCBwZ2Rfc3RyLCBwNGRfc3RyLCBwdWRfc3RyLCBwbWRfc3RyKTsKIH0KIAogLyoKQEAgLTU4NCwxMCAmIzQzOzYyNiwxMSBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZAogICogcGFnZSB0YWJsZSBsb2NrLgogICovCiBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsb25nIGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKQomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsCiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwomIzQzOwljaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTsKIAlwZ29mZl90IGluZGV4OwogCiAJaWYgKGlzX2JhZF9wYWdlX21hcF9yYXRlbGltaXRlZCgpKQpAQCAtNTk2LDggJiM0Mzs2MzksOSBAQCBzdGF0aWMgdm9pZCBwcmludF9iYWRfcGFnZV9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJbWFwcGluZyA9IHZtYS0mZ3Q7dm1fZmlsZSA/IHZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7Zl9tYXBwaW5nIDogTlVMTDsKIAlpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7CiAKLQlwcl9hbGVydCgmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiUwOGxseCYjMzQ7LCBjdXJyZW50LSZndDtjb21tLAotCQkgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeSk7CiYjNDM7CXB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpOwomIzQzOwlwcl9hbGVydCgmIzM0O0JVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiAlcyYjMzQ7LCBjdXJyZW50LSZndDtjb21tLAomIzQzOwkJIHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnlfc3RyKTsKIAlfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS0mZ3Q7dm1fbW0sIGFkZHIpOwogCWlmIChwYWdlKQogCQlkdW1wX3BhZ2UocGFnZSwgJiMzNDtiYWQgcGFnZSBtYXAmIzM0Oyk7CkBAIC02MjcsOCAmIzQzOzY3MSwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKQogCX0KIH0KIAotI2RlZmluZSBwcmludF9iYWRfcHRlKHZtYSwgYWRkciwgcHRlLCBwYWdlKSBcCi0JcHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgcHRlX3ZhbChwdGUpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSkKJiM0MztzdGF0aWMgdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICBwdGVfdCBwdGUsIHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJX19hdXRvX3R5cGUgZW50cnkgPSBwdGVfdmFsKHB0ZSk7CiYjNDM7CiYjNDM7CXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsICZhbXA7ZW50cnksIHNpemVvZihlbnRyeSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKTsKJiM0Mzt9CiAKIC8qKgogICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSAmIzM0O3N0cnVjdCBwYWdlJiMzNDsgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZSB0YWJsZSBlbnRyeS4KQEAgLTYzNiw4ICYjNDM7Njg1LDkgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKICAqIEBhZGRyOiBUaGUgYWRkcmVzcyB3aGVyZSB0aGUgcGFnZSB0YWJsZSBlbnRyeSBpcyBtYXBwZWQuCiAgKiBAcGZuOiBUaGUgUEZOIHN0b3JlZCBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeS4KICAqIEBzcGVjaWFsOiBXaGV0aGVyIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcmtlZCAmIzM0O3NwZWNpYWwmIzM0Oy4KLSAqIEBsZXZlbDogVGhlIHBhZ2UgdGFibGUgbGV2ZWwgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LgogICogQGVudHJ5OiBUaGUgcGFnZSB0YWJsZSBlbnRyeSB2YWx1ZSBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuCiYjNDM7ICogQGVudHJ5X3NpemU6IFRoZSBzaXplIG9mIEBlbnRyeS4KJiM0MzsgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS4KICAqCiAgKiAmIzM0O1NwZWNpYWwmIzM0OyBtYXBwaW5ncyBkbyBub3Qgd2lzaCB0byBiZSBhc3NvY2lhdGVkIHdpdGggYSAmIzM0O3N0cnVjdCBwYWdlJiMzNDsgKGVpdGhlcgogICogaXQgZG9lc24mIzM5O3QgZXhpc3QsIG9yIGl0IGV4aXN0cyBidXQgdGhleSBkb24mIzM5O3Qgd2FudCB0byB0b3VjaCBpdCkuIEluIHRoaXMKQEAgLTY5Nyw3ICYjNDM7NzQ3LDcgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBzcGVjaWFsLAotCQl1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKJiM0MzsJCWNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKQogewogCWlmIChwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChsZXZlbCkpIHsKIAkJaWYgKHVubGlrZWx5KHNwZWNpYWwpKSB7CkBAIC03MTAsNyAmIzQzOzc2MCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlpZiAoaXNfemVyb19wZm4ocGZuKSB8fCBpc19odWdlX3plcm9fcGZuKHBmbikpCiAJCQkJcmV0dXJuIE5VTEw7CiAKLQkJCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7CiYjNDM7CQkJcHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIGVudHJ5X3NpemUsIE5VTEwsIGxldmVsKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJCS8qCkBAIC03NDEsNyAmIzQzOzc5MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAKIAlpZiAodW5saWtlbHkocGZuICZndDsgaGlnaGVzdF9tZW1tYXBfcGZuKSkgewogCQkvKiBDb3JydXB0ZWQgcGFnZSB0YWJsZSBlbnRyeS4gKi8KLQkJcHJpbnRfYmFkX3BhZ2VfbWFwKHZtYSwgYWRkciwgZW50cnksIE5VTEwsIGxldmVsKTsKJiM0MzsJCXByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAkvKgpAQCAtNzY3LDggJiM0Mzs4MTcsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgIHB0ZV90IHB0ZSkKIHsKJiM0MzsJX19hdXRvX3R5cGUgZW50cnkgPSBwdGVfdmFsKHB0ZSk7CiYjNDM7CiAJcmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSksIHB0ZV9zcGVjaWFsKHB0ZSksCi0JCQkJcHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7CiYjNDM7CQkJCSZhbXA7ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUFRFKTsKIH0KIAogLyoqCkBAIC04MDksOCAmIzQzOzg2MSwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCXBtZF90IHBtZCkKIHsKJiM0MzsJX19hdXRvX3R5cGUgZW50cnkgPSBwbWRfdmFsKHBtZCk7CiYjNDM7CiAJcmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwbWRfcGZuKHBtZCksIHBtZF9zcGVjaWFsKHBtZCksCi0JCQkJcG1kX3ZhbChwbWQpLCBQR1RBQkxFX0xFVkVMX1BNRCk7CiYjNDM7CQkJCSZhbXA7ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUE1EKTsKIH0KIAogLyoqCkBAIC04NTAsOCAmIzQzOzkwNCwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpb19wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90IHB1ZCkKIHsKJiM0MzsJX19hdXRvX3R5cGUgZW50cnkgPSBwdWRfdmFsKHB1ZCk7CiYjNDM7CiAJcmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdWRfcGZuKHB1ZCksIHB1ZF9zcGVjaWFsKHB1ZCksCi0JCQkJcHVkX3ZhbChwdWQpLCBQR1RBQkxFX0xFVkVMX1BVRCk7CiYjNDM7CQkJCSZhbXA7ZW50cnksIHNpemVvZihlbnRyeSksIFBHVEFCTEVfTEVWRUxfUFVEKTsKIH0KICNlbmRpZgogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NzkKCQkJCQkJCW91dHB1dDogNzQKCQkJCQkJCXRob3VnaHRzOiA0OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGFnZSBUYWJsZSBMb2dnaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgbW9kaWZpZXMgYG1tL21lbW9yeS5jYC4gTXkgaW5pdGlhbCByZWFkIGluZGljYXRlcyBpdCYjMzk7cyBhIHZlcnkgdGFyZ2V0ZWQgY2hhbmdlLCBwdXJlbHkgY29zbWV0aWMsIGF0IGxlYXN0IGZyb20gd2hhdCBJJiMzOTttIHNlZWluZy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgcHJpbnRlZCB3aGVuIGEgJiMzNDtiYWQgcGFnZSBtYXAmIzM0OyBlcnJvciBpcyB0cmlnZ2VyZWQsIHdpdGhpbiBgcHJpbnRfYmFkX3BhZ2VfbWFwYCBhbmQgYF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGVgLgoKVGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIHRoZXNlIG5ldyBmb3JtYXR0aW5nIGZ1bmN0aW9ucywgYHB0dmFsX2J5dGVzX3RvX2hleF9zdHJgIGFuZCBgcHR2YWxfdG9fc3RyYC4gIFRoZXkmIzM5O3JlIGJ1aWx0IHRvIGNvbnZlcnQgYW5kIHByZXNlbnQgcGFnZSB0YWJsZSB2YWx1ZXMgYXMgaGV4IHN0cmluZ3MsIHNwZWNpZmljYWxseSBoYW5kbGluZyBkaWZmZXJlbnQgZGF0YSBzaXplcyBsaWtlIGB1MzJgLCBgdTY0YCwgYW5kIGV2ZW4gYHUxMjhgLiAgVGhpcyBpcyBwdXJlbHkgYWJvdXQgdGhlIGxvZ2dpbmcgYW5kIGZvcm1hdHRpbmcsIHRoYXQmIzM5O3Mgd2hhdCB0aG9zZSBmdW5jdGlvbnMgZG8uIFRoZSBhY3R1YWwgZXJyb3IgaGFuZGxpbmcgYW5kIGtlcm5lbCBiZWhhdmlvciByZW1haW5zIHVudG91Y2hlZCwgaXQgc2VlbXMgdG8gYmUgbGltaXRlZCB0byB0aGUgYHByX2FsZXJ0YCBjYWxscywgbWFraW5nIHRoZSBlcnJvciBtZXNzYWdlcyBlYXNpZXIgdG8gcmVhZCwgb3IgcHJvdmlkZSBtb3JlIGRldGFpbCBhYm91dCB0aGUgc3RhdGUuCgpXYWl0LCBsb29raW5nIGZ1cnRoZXIsIHRoZSBzaWduYXR1cmUgb2YgYF9fdm1fbm9ybWFsX3BhZ2VgIGhhcyBhbHNvIGNoYW5nZWQsIGJ1dCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgbm93IHRha2VzIGBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemVgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeWAsIGJ1dCB0aGlzIGlzIHNpbXBseSB0byBwcm92aWRlIHRoZSBkYXRhIGZvciB0aGUgbG9nZ2luZyBjaGFuZ2UsIHNvIGl0IGNhbiBwYXNzIHRoZSBlbnRyeSB0byBgcHJpbnRfYmFkX3BhZ2VfbWFwYC4gVGhlIGZ1bmN0aW9uJiMzOTtzIHJldHVybiB2YWx1ZSBhbmQgaXRzIGNvcmUgbG9naWMgKmFyZSogdW5jaGFuZ2VkLCB3aGljaCBjb25maXJtcyB0aGUgc2NvcGUgb2YgdGhpcyB1cGRhdGUuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBkaWZmIHRvIGNvbmZpcm0gdGhpcy4gQWgsIHllcywgdGhlcmUgaXQgaXMhICBXZSYjMzk7cmUgZ29pbmcgZnJvbToKYGBgYwotCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCWVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplLAomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKYGBgCmFuZCB0aGVuOgpgYGBjCi0JcHJfYWxlcnQoJiMzNDtCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczolMDhsbHgmIzM0OywgY3VycmVudC0mZ3Q7Y29tbSwKLQkJIHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnkpOwomIzQzOwlwdHZhbF9ieXRlc190b19oZXhfc3RyKGVudHJ5X3N0ciwgc2l6ZW9mKGVudHJ5X3N0ciksIGVudHJ5LCBlbnRyeV9zaXplKTsKJiM0MzsJcHJfYWxlcnQoJiMzNDtCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczogJXMmIzM0OywgY3VycmVudC0mZ3Q7Y29tbSwKJiM0MzsJCSBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5X3N0cik7CmBgYApZZXAsIGl0JiMzOTtzIGp1c3QgYWx0ZXJpbmcgdGhlIGZvcm1hdCBvZiB0aGF0IGVycm9yIG1lc3NhZ2UuIFRoZXJlJiMzOTtzIG5vIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb250cm9sIGZsb3csIG5vdGhpbmcgdGhhdCBhbHRlcnMgdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gcGF0aC4gVGhlcmVmb3JlLCBJIGNhbiBjb25maWRlbnRseSBtYXJrIGBXb3J0aEZ1enppbmdgIGFzIGBmYWxzZWAuCgpPa2F5LCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBmb3JtYXR0ZWQgYW5kIHByaW50ZWQgaW4gZXJyb3IgbWVzc2FnZXMgKGUuZy4sIHByaW50X2JhZF9wYWdlX21hcCkuIEl0IGRvZXMgbm90IGNoYW5nZSBhbnkgY29yZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGhvdyBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGZvcm1hdHRlZCBhbmQgcHJpbnRlZCBpbiBlcnJvciBtZXNzYWdlcyAoZS5nLiwgcHJpbnRfYmFkX3BhZ2VfbWFwKS4gSXQgZG9lcyBub3QgY2hhbmdlIGFueSBjb3JlIGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoxNDowNy4yMTg3OTAxNTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDAwNzY1MjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBmb3JtYXR0ZWQgYW5kIHByaW50ZWQgaW4gZXJyb3IgbWVzc2FnZXMgKGUuZy4sIHByaW50X2JhZF9wYWdlX21hcCkuIEl0IGRvZXMgbm90IGNoYW5nZSBhbnkgY29yZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoxNDowNy4yMTg3OTUxNTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MzExNjk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgwZDM3ZDE0ODE0MjNjOWZmMDYwMzViNDUxOGUwOWI5ZmZjMmNkOTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAxMjoxNDowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggZmYzMzhjMmFiZTkyMzEuLmYwYzM0NzhmMWE2M2E3IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNTE5LDkgKzUxOSw1MiBAQCBzdGF0aWMgYm9vbCBpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQodm9pZClcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbisjZGVmaW5lIFBUVkFMX1NUUl9NQVhcXHQoMzIgKyAxKSAvKiBNYXggMTI4LWJpdCB2YWx1ZSBpbiBoZXggKyBOVUwgKi9cXG4rXFxuK3N0YXRpYyB2b2lkIHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUsIGNvbnN0IHZvaWQgKmVudHJ5LCBzaXplX3QgZW50cnlfc2l6ZSlcXG4re1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKGJ1Zl9zaXplIFxcdTAwM2MgZW50cnlfc2l6ZSAqIDIgKyAxKSkge1xcbitcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcXFwib3ZlcmZsb3dcXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKGVudHJ5X3NpemUpIHtcXG4rXFx0Y2FzZSBzaXplb2YodTMyKTpcXG4rXFx0XFx0c25wcmludGYoYnVmLCBidWZfc2l6ZSwgXFxcIiUwOHhcXFwiLCAqKGNvbnN0IHUzMiAqKWVudHJ5KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2Ugc2l6ZW9mKHU2NCk6XFxuK1xcdFxcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFxcXCIlMDE2bGx4XFxcIiwgKihjb25zdCB1NjQgKillbnRyeSk7XFxuK1xcdFxcdGJyZWFrO1xcbisjaWYgZGVmaW5lZChfX1NJWkVPRl9JTlQxMjhfXylcXG4rXFx0Y2FzZSBzaXplb2YodTEyOCk6IHtcXG4rXFx0XFx0Y29uc3QgdTY0ICp2YWwgPSBlbnRyeTtcXG4rXFxuK1xcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfQklHX0VORElBTikpXFxuK1xcdFxcdFxcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFxcXCIlMDE2bGx4JTAxNmxseFxcXCIsIHZhbFswXSwgdmFsWzFdKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcXFwiJTAxNmxseCUwMTZsbHhcXFwiLCB2YWxbMV0sIHZhbFswXSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcXFwidW5zdXBwb3J0ZWRcXFwiKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4rI2RlZmluZSBwdHZhbF90b19zdHIoYnVmLCB2YWwpXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRfX2F1dG9fdHlwZSBfX3ZhbCA9ICh2YWwpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRwdHZhbF9ieXRlc190b19oZXhfc3RyKChidWYpLCBzaXplb2YoYnVmKSwgXFx1MDAyNl9fdmFsLCBzaXplb2YoX192YWwpKTtcXHRcXFxcXFxuK1xcdH0gd2hpbGUgKDApXFxuK1xcbiBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBsb25nIHBnZHYsIHA0ZHYsIHB1ZHYsIHBtZHY7XFxuK1xcdGNoYXIgcGdkX3N0cltQVFZBTF9TVFJfTUFYXTtcXG4rXFx0Y2hhciBwNGRfc3RyW1BUVkFMX1NUUl9NQVhdO1xcbitcXHRjaGFyIHB1ZF9zdHJbUFRWQUxfU1RSX01BWF07XFxuK1xcdGNoYXIgcG1kX3N0cltQVFZBTF9TVFJfTUFYXTtcXG4gXFx0cDRkX3QgcDRkLCAqcDRkcDtcXG4gXFx0cHVkX3QgcHVkLCAqcHVkcDtcXG4gXFx0cG1kX3QgcG1kLCAqcG1kcDtcXG5AQCAtNTMyLDM0ICs1NzUsMzQgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcXG4gXFx0ICogc2VlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciBwcmludF9iYWRfcGFnZV9tYXAoKS5cXG4gXFx0ICovXFxuIFxcdHBnZHAgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTtcXG4tXFx0cGdkdiA9IHBnZF92YWwoKnBnZHApO1xcbitcXHRwdHZhbF90b19zdHIocGdkX3N0ciwgcGdkX3ZhbCgqcGdkcCkpO1xcbiBcXG4gXFx0aWYgKCFwZ2RfcHJlc2VudCgqcGdkcCkgfHwgcGdkX2xlYWYoKnBnZHApKSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JTA4bGx4XFxcXG5cXFwiLCBwZ2R2KTtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcInBnZDogJXNcXFxcblxcXCIsIHBnZF9zdHIpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdHA0ZHAgPSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpO1xcbiBcXHRwNGQgPSBwNGRwX2dldChwNGRwKTtcXG4tXFx0cDRkdiA9IHA0ZF92YWwocDRkKTtcXG4rXFx0cHR2YWxfdG9fc3RyKHA0ZF9zdHIsIHA0ZF92YWwocDRkKSk7XFxuIFxcbiBcXHRpZiAoIXA0ZF9wcmVzZW50KHA0ZCkgfHwgcDRkX2xlYWYocDRkKSkge1xcbi1cXHRcXHRwcl9hbGVydChcXFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4XFxcXG5cXFwiLCBwZ2R2LCBwNGR2KTtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcInBnZDogJXMgcDRkOiAlc1xcXFxuXFxcIiwgcGdkX3N0ciwgcDRkX3N0cik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XFxuIFxcdHB1ZCA9IHB1ZHBfZ2V0KHB1ZHApO1xcbi1cXHRwdWR2ID0gcHVkX3ZhbChwdWQpO1xcbitcXHRwdHZhbF90b19zdHIocHVkX3N0ciwgcHVkX3ZhbChwdWQpKTtcXG4gXFxuIFxcdGlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6JTA4bGx4IHA0ZDolMDhsbHggcHVkOiUwOGxseFxcXFxuXFxcIiwgcGdkdiwgcDRkdiwgcHVkdik7XFxuK1xcdFxcdHByX2FsZXJ0KFxcXCJwZ2Q6ICVzIHA0ZDogJXMgcHVkOiAlc1xcXFxuXFxcIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0cik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XFxuIFxcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xcbi1cXHRwbWR2ID0gcG1kX3ZhbChwbWQpO1xcbitcXHRwdHZhbF90b19zdHIocG1kX3N0ciwgcG1kX3ZhbChwbWQpKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIER1bXBpbmcgdGhlIFBURSB3b3VsZCBiZSBuaWNlLCBidXQgaXQncyB0cmlja3kgd2l0aCBDT05GSUdfSElHSFBURSxcXG5AQCAtNTY3LDggKzYxMCw3IEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXFxuIFxcdCAqIGRvaW5nIGFub3RoZXIgbWFwIHdvdWxkIGJlIGJhZC4gcHJpbnRfYmFkX3BhZ2VfbWFwKCkgc2hvdWxkXFxuIFxcdCAqIGFscmVhZHkgdGFrZSBjYXJlIG9mIHByaW50aW5nIHRoZSBQVEUuXFxuIFxcdCAqL1xcbi1cXHRwcl9hbGVydChcXFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxcXFxuXFxcIiwgcGdkdixcXG4tXFx0XFx0IHA0ZHYsIHB1ZHYsIHBtZHYpO1xcbitcXHRwcl9hbGVydChcXFwicGdkOiAlcyBwNGQ6ICVzIHB1ZDogJXMgcG1kOiAlc1xcXFxuXFxcIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0ciwgcG1kX3N0cik7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTU4NCwxMCArNjI2LDExIEBAIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkXFxuICAqIHBhZ2UgdGFibGUgbG9jay5cXG4gICovXFxuIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlLFxcbi1cXHRcXHRlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplLFxcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiB7XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xcbitcXHRjaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTtcXG4gXFx0cGdvZmZfdCBpbmRleDtcXG4gXFxuIFxcdGlmIChpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQoKSlcXG5AQCAtNTk2LDggKzYzOSw5IEBAIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0bWFwcGluZyA9IHZtYS1cXHUwMDNldm1fZmlsZSA/IHZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nIDogTlVMTDtcXG4gXFx0aW5kZXggPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHIpO1xcbiBcXG4tXFx0cHJfYWxlcnQoXFxcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiUwOGxseFxcXCIsIGN1cnJlbnQtXFx1MDAzZWNvbW0sXFxuLVxcdFxcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5KTtcXG4rXFx0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cihlbnRyeV9zdHIsIHNpemVvZihlbnRyeV9zdHIpLCBlbnRyeSwgZW50cnlfc2l6ZSk7XFxuK1xcdHByX2FsZXJ0KFxcXCJCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczogJXNcXFwiLCBjdXJyZW50LVxcdTAwM2Vjb21tLFxcbitcXHRcXHQgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeV9zdHIpO1xcbiBcXHRfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIpO1xcbiBcXHRpZiAocGFnZSlcXG4gXFx0XFx0ZHVtcF9wYWdlKHBhZ2UsIFxcXCJiYWQgcGFnZSBtYXBcXFwiKTtcXG5AQCAtNjI3LDggKzY3MSwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiBcXHR9XFxuIH1cXG4gXFxuLSNkZWZpbmUgcHJpbnRfYmFkX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcGFnZSkgXFxcXFxcbi1cXHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBwdGVfdmFsKHB0ZSksIHBhZ2UsIFBHVEFCTEVfTEVWRUxfUFRFKVxcbitzdGF0aWMgdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCAgcHRlX3QgcHRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRfX2F1dG9fdHlwZSBlbnRyeSA9IHB0ZV92YWwocHRlKTtcXG4rXFxuK1xcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xcbit9XFxuIFxcbiAvKipcXG4gICogX192bV9ub3JtYWxfcGFnZSgpIC0gR2V0IHRoZSBcXFwic3RydWN0IHBhZ2VcXFwiIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuXFxuQEAgLTYzNiw4ICs2ODUsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiAgKiBAYWRkcjogVGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFwcGVkLlxcbiAgKiBAcGZuOiBUaGUgUEZOIHN0b3JlZCBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeS5cXG4gICogQHNwZWNpYWw6IFdoZXRoZXIgdGhlIHBhZ2UgdGFibGUgZW50cnkgaXMgbWFya2VkIFxcXCJzcGVjaWFsXFxcIi5cXG4tICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXFxuICAqIEBlbnRyeTogVGhlIHBhZ2UgdGFibGUgZW50cnkgdmFsdWUgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcyBvbmx5LlxcbisgKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgQGVudHJ5LlxcbisgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cXG4gICpcXG4gICogXFxcIlNwZWNpYWxcXFwiIG1hcHBpbmdzIGRvIG5vdCB3aXNoIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIFxcXCJzdHJ1Y3QgcGFnZVxcXCIgKGVpdGhlclxcbiAgKiBpdCBkb2Vzbid0IGV4aXN0LCBvciBpdCBleGlzdHMgYnV0IHRoZXkgZG9uJ3Qgd2FudCB0byB0b3VjaCBpdCkuIEluIHRoaXNcXG5AQCAtNjk3LDcgKzc0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIHNwZWNpYWwsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbitcXHRcXHRjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcXG4ge1xcbiBcXHRpZiAocGd0YWJsZV9sZXZlbF9oYXNfcHh4X3NwZWNpYWwobGV2ZWwpKSB7XFxuIFxcdFxcdGlmICh1bmxpa2VseShzcGVjaWFsKSkge1xcbkBAIC03MTAsNyArNzYwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0aWYgKGlzX3plcm9fcGZuKHBmbikgfHwgaXNfaHVnZV96ZXJvX3BmbihwZm4pKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdFxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XFxuK1xcdFxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qXFxuQEAgLTc0MSw3ICs3OTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfX3ZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHBmbiBcXHUwMDNlIGhpZ2hlc3RfbWVtbWFwX3BmbikpIHtcXG4gXFx0XFx0LyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovXFxuLVxcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XFxuK1xcdFxcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcdC8qXFxuQEAgLTc2Nyw4ICs4MTcsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdCAgICBwdGVfdCBwdGUpXFxuIHtcXG4rXFx0X19hdXRvX3R5cGUgZW50cnkgPSBwdGVfdmFsKHB0ZSk7XFxuK1xcbiBcXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB0ZV9wZm4ocHRlKSwgcHRlX3NwZWNpYWwocHRlKSxcXG4tXFx0XFx0XFx0XFx0cHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtODA5LDggKzg2MSwxMCBAQCBzdHJ1Y3QgZm9saW8gKnZtX25vcm1hbF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBzdHJ1Y3QgcGFnZSAqdm1fbm9ybWFsX3BhZ2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdHBtZF90IHBtZClcXG4ge1xcbitcXHRfX2F1dG9fdHlwZSBlbnRyeSA9IHBtZF92YWwocG1kKTtcXG4rXFxuIFxcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcG1kX3BmbihwbWQpLCBwbWRfc3BlY2lhbChwbWQpLFxcbi1cXHRcXHRcXHRcXHRwbWRfdmFsKHBtZCksIFBHVEFCTEVfTEVWRUxfUE1EKTtcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC04NTAsOCArOTA0LDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCBwdWQpXFxuIHtcXG4rXFx0X19hdXRvX3R5cGUgZW50cnkgPSBwdWRfdmFsKHB1ZCk7XFxuK1xcbiBcXHRyZXR1cm4gX192bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB1ZF9wZm4ocHVkKSwgcHVkX3NwZWNpYWwocHVkKSxcXG4tXFx0XFx0XFx0XFx0cHVkX3ZhbChwdWQpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xcbiB9XFxuICNlbmRpZlxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6MTQ6MDcuNTkyNDIzMTk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzYzNDAxNDQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBmb3JtYXR0ZWQgYW5kIHByaW50ZWQgaW4gZXJyb3IgbWVzc2FnZXMgKGUuZy4sIHByaW50X2JhZF9wYWdlX21hcCkuIEl0IGRvZXMgbm90IGNoYW5nZSBhbnkgY29yZSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgwZDM3ZDE0ODE0MjNjOWZmMDYwMzViNDUxOGUwOWI5ZmZjMmNkOTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDEyOjE0OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMzEuLmYwYzM0NzhmMWE2M2E3IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNTE5LDkgKzUxOSw1MiBAQCBzdGF0aWMgYm9vbCBpc19iYWRfcGFnZV9tYXBfcmF0ZWxpbWl0ZWQodm9pZClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rI2RlZmluZSBQVFZBTF9TVFJfTUFYXHQoMzIgKyAxKSAvKiBNYXggMTI4LWJpdCB2YWx1ZSBpbiBoZXggKyBOVUwgKi9cbitcbitzdGF0aWMgdm9pZCBwdHZhbF9ieXRlc190b19oZXhfc3RyKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUpXG4re1xuK1x0aWYgKFdBUk5fT05fT05DRShidWZfc2l6ZSBcdTAwM2MgZW50cnlfc2l6ZSAqIDIgKyAxKSkge1xuK1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcIm92ZXJmbG93XCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKGVudHJ5X3NpemUpIHtcbitcdGNhc2Ugc2l6ZW9mKHUzMik6XG4rXHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwiJTA4eFwiLCAqKGNvbnN0IHUzMiAqKWVudHJ5KTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIHNpemVvZih1NjQpOlxuK1x0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcIiUwMTZsbHhcIiwgKihjb25zdCB1NjQgKillbnRyeSk7XG4rXHRcdGJyZWFrO1xuKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKVxuK1x0Y2FzZSBzaXplb2YodTEyOCk6IHtcbitcdFx0Y29uc3QgdTY0ICp2YWwgPSBlbnRyeTtcbitcbitcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSlcbitcdFx0XHRzbnByaW50ZihidWYsIGJ1Zl9zaXplLCBcIiUwMTZsbHglMDE2bGx4XCIsIHZhbFswXSwgdmFsWzFdKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwiJTAxNmxseCUwMTZsbHhcIiwgdmFsWzFdLCB2YWxbMF0pO1xuK1x0XHRicmVhaztcbitcdH1cbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHNucHJpbnRmKGJ1ZiwgYnVmX3NpemUsIFwidW5zdXBwb3J0ZWRcIik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitcbisjZGVmaW5lIHB0dmFsX3RvX3N0cihidWYsIHZhbClcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdF9fYXV0b190eXBlIF9fdmFsID0gKHZhbCk7XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cigoYnVmKSwgc2l6ZW9mKGJ1ZiksIFx1MDAyNl9fdmFsLCBzaXplb2YoX192YWwpKTtcdFxcXG4rXHR9IHdoaWxlICgwKVxuK1xuIHN0YXRpYyB2b2lkIF9fcHJpbnRfYmFkX3BhZ2VfbWFwX3BndGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGxvbmcgcGdkdiwgcDRkdiwgcHVkdiwgcG1kdjtcbitcdGNoYXIgcGdkX3N0cltQVFZBTF9TVFJfTUFYXTtcbitcdGNoYXIgcDRkX3N0cltQVFZBTF9TVFJfTUFYXTtcbitcdGNoYXIgcHVkX3N0cltQVFZBTF9TVFJfTUFYXTtcbitcdGNoYXIgcG1kX3N0cltQVFZBTF9TVFJfTUFYXTtcbiBcdHA0ZF90IHA0ZCwgKnA0ZHA7XG4gXHRwdWRfdCBwdWQsICpwdWRwO1xuIFx0cG1kX3QgcG1kLCAqcG1kcDtcbkBAIC01MzIsMzQgKzU3NSwzNCBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxuIFx0ICogc2VlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciBwcmludF9iYWRfcGFnZV9tYXAoKS5cbiBcdCAqL1xuIFx0cGdkcCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpO1xuLVx0cGdkdiA9IHBnZF92YWwoKnBnZHApO1xuK1x0cHR2YWxfdG9fc3RyKHBnZF9zdHIsIHBnZF92YWwoKnBnZHApKTtcbiBcbiBcdGlmICghcGdkX3ByZXNlbnQoKnBnZHApIHx8IHBnZF9sZWFmKCpwZ2RwKSkge1xuLVx0XHRwcl9hbGVydChcInBnZDolMDhsbHhcXG5cIiwgcGdkdik7XG4rXHRcdHByX2FsZXJ0KFwicGdkOiAlc1xcblwiLCBwZ2Rfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4gXHRwNGQgPSBwNGRwX2dldChwNGRwKTtcbi1cdHA0ZHYgPSBwNGRfdmFsKHA0ZCk7XG4rXHRwdHZhbF90b19zdHIocDRkX3N0ciwgcDRkX3ZhbChwNGQpKTtcbiBcbiBcdGlmICghcDRkX3ByZXNlbnQocDRkKSB8fCBwNGRfbGVhZihwNGQpKSB7XG4tXHRcdHByX2FsZXJ0KFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4XFxuXCIsIHBnZHYsIHA0ZHYpO1xuK1x0XHRwcl9hbGVydChcInBnZDogJXMgcDRkOiAlc1xcblwiLCBwZ2Rfc3RyLCBwNGRfc3RyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XG4gXHRwdWQgPSBwdWRwX2dldChwdWRwKTtcbi1cdHB1ZHYgPSBwdWRfdmFsKHB1ZCk7XG4rXHRwdHZhbF90b19zdHIocHVkX3N0ciwgcHVkX3ZhbChwdWQpKTtcbiBcbiBcdGlmICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSB7XG4tXHRcdHByX2FsZXJ0KFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHhcXG5cIiwgcGdkdiwgcDRkdiwgcHVkdik7XG4rXHRcdHByX2FsZXJ0KFwicGdkOiAlcyBwNGQ6ICVzIHB1ZDogJXNcXG5cIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0cik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuIFx0cG1kID0gcG1kcF9nZXQocG1kcCk7XG4tXHRwbWR2ID0gcG1kX3ZhbChwbWQpO1xuK1x0cHR2YWxfdG9fc3RyKHBtZF9zdHIsIHBtZF92YWwocG1kKSk7XG4gXG4gXHQvKlxuIFx0ICogRHVtcGluZyB0aGUgUFRFIHdvdWxkIGJlIG5pY2UsIGJ1dCBpdCdzIHRyaWNreSB3aXRoIENPTkZJR19ISUdIUFRFLFxuQEAgLTU2Nyw4ICs2MTAsNyBAQCBzdGF0aWMgdm9pZCBfX3ByaW50X2JhZF9wYWdlX21hcF9wZ3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZFxuIFx0ICogZG9pbmcgYW5vdGhlciBtYXAgd291bGQgYmUgYmFkLiBwcmludF9iYWRfcGFnZV9tYXAoKSBzaG91bGRcbiBcdCAqIGFscmVhZHkgdGFrZSBjYXJlIG9mIHByaW50aW5nIHRoZSBQVEUuXG4gXHQgKi9cbi1cdHByX2FsZXJ0KFwicGdkOiUwOGxseCBwNGQ6JTA4bGx4IHB1ZDolMDhsbHggcG1kOiUwOGxseFxcblwiLCBwZ2R2LFxuLVx0XHQgcDRkdiwgcHVkdiwgcG1kdik7XG4rXHRwcl9hbGVydChcInBnZDogJXMgcDRkOiAlcyBwdWQ6ICVzIHBtZDogJXNcXG5cIiwgcGdkX3N0ciwgcDRkX3N0ciwgcHVkX3N0ciwgcG1kX3N0cik7XG4gfVxuIFxuIC8qXG5AQCAtNTg0LDEwICs2MjYsMTEgQEAgc3RhdGljIHZvaWQgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRcbiAgKiBwYWdlIHRhYmxlIGxvY2suXG4gICovXG4gc3RhdGljIHZvaWQgcHJpbnRfYmFkX3BhZ2VfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tXHRcdGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemUsXG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4rXHRjaGFyIGVudHJ5X3N0cltQVFZBTF9TVFJfTUFYXTtcbiBcdHBnb2ZmX3QgaW5kZXg7XG4gXG4gXHRpZiAoaXNfYmFkX3BhZ2VfbWFwX3JhdGVsaW1pdGVkKCkpXG5AQCAtNTk2LDggKzYzOSw5IEBAIHN0YXRpYyB2b2lkIHByaW50X2JhZF9wYWdlX21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdG1hcHBpbmcgPSB2bWEtXHUwMDNldm1fZmlsZSA/IHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyA6IE5VTEw7XG4gXHRpbmRleCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcik7XG4gXG4tXHRwcl9hbGVydChcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiUwOGxseFwiLCBjdXJyZW50LVx1MDAzZWNvbW0sXG4tXHRcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5KTtcbitcdHB0dmFsX2J5dGVzX3RvX2hleF9zdHIoZW50cnlfc3RyLCBzaXplb2YoZW50cnlfc3RyKSwgZW50cnksIGVudHJ5X3NpemUpO1xuK1x0cHJfYWxlcnQoXCJCVUc6IEJhZCBwYWdlIG1hcCBpbiBwcm9jZXNzICVzICAlczogJXNcIiwgY3VycmVudC1cdTAwM2Vjb21tLFxuK1x0XHQgcGd0YWJsZV9sZXZlbF90b19zdHIobGV2ZWwpLCBlbnRyeV9zdHIpO1xuIFx0X19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZSh2bWEtXHUwMDNldm1fbW0sIGFkZHIpO1xuIFx0aWYgKHBhZ2UpXG4gXHRcdGR1bXBfcGFnZShwYWdlLCBcImJhZCBwYWdlIG1hcFwiKTtcbkBAIC02MjcsOCArNjcxLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gXHR9XG4gfVxuIFxuLSNkZWZpbmUgcHJpbnRfYmFkX3B0ZSh2bWEsIGFkZHIsIHB0ZSwgcGFnZSkgXFxcbi1cdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIHB0ZV92YWwocHRlKSwgcGFnZSwgUEdUQUJMRV9MRVZFTF9QVEUpXG4rc3RhdGljIHZvaWQgcHJpbnRfYmFkX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgcHRlX3QgcHRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRfX2F1dG9fdHlwZSBlbnRyeSA9IHB0ZV92YWwocHRlKTtcbitcbitcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBwYWdlLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4rfVxuIFxuIC8qKlxuICAqIF9fdm1fbm9ybWFsX3BhZ2UoKSAtIEdldCB0aGUgXCJzdHJ1Y3QgcGFnZVwiIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUgZW50cnkuXG5AQCAtNjM2LDggKzY4NSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gICogQGFkZHI6IFRoZSBhZGRyZXNzIHdoZXJlIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGlzIG1hcHBlZC5cbiAgKiBAcGZuOiBUaGUgUEZOIHN0b3JlZCBpbiB0aGUgcGFnZSB0YWJsZSBlbnRyeS5cbiAgKiBAc3BlY2lhbDogV2hldGhlciB0aGUgcGFnZSB0YWJsZSBlbnRyeSBpcyBtYXJrZWQgXCJzcGVjaWFsXCIuXG4tICogQGxldmVsOiBUaGUgcGFnZSB0YWJsZSBsZXZlbCBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXG4gICogQGVudHJ5OiBUaGUgcGFnZSB0YWJsZSBlbnRyeSB2YWx1ZSBmb3IgZXJyb3IgcmVwb3J0aW5nIHB1cnBvc2VzIG9ubHkuXG4rICogQGVudHJ5X3NpemU6IFRoZSBzaXplIG9mIEBlbnRyeS5cbisgKiBAbGV2ZWw6IFRoZSBwYWdlIHRhYmxlIGxldmVsIGZvciBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMgb25seS5cbiAgKlxuICAqIFwiU3BlY2lhbFwiIG1hcHBpbmdzIGRvIG5vdCB3aXNoIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIFwic3RydWN0IHBhZ2VcIiAoZWl0aGVyXG4gICogaXQgZG9lc24ndCBleGlzdCwgb3IgaXQgZXhpc3RzIGJ1dCB0aGV5IGRvbid0IHdhbnQgdG8gdG91Y2ggaXQpLiBJbiB0aGlzXG5AQCAtNjk3LDcgKzc0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2xldmVsX2hhc19weHhfc3BlY2lhbChlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gICovXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBzcGVjaWFsLFxuLVx0XHR1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbitcdFx0Y29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplLCBlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4ge1xuIFx0aWYgKHBndGFibGVfbGV2ZWxfaGFzX3B4eF9zcGVjaWFsKGxldmVsKSkge1xuIFx0XHRpZiAodW5saWtlbHkoc3BlY2lhbCkpIHtcbkBAIC03MTAsNyArNzYwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRpZiAoaXNfemVyb19wZm4ocGZuKSB8fCBpc19odWdlX3plcm9fcGZuKHBmbikpXG4gXHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdFx0XHRwcmludF9iYWRfcGFnZV9tYXAodm1hLCBhZGRyLCBlbnRyeSwgTlVMTCwgbGV2ZWwpO1xuK1x0XHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdH1cbiBcdFx0LypcbkBAIC03NDEsNyArNzkxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqX192bV9ub3JtYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcbiBcdGlmICh1bmxpa2VseShwZm4gXHUwMDNlIGhpZ2hlc3RfbWVtbWFwX3BmbikpIHtcbiBcdFx0LyogQ29ycnVwdGVkIHBhZ2UgdGFibGUgZW50cnkuICovXG4tXHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBOVUxMLCBsZXZlbCk7XG4rXHRcdHByaW50X2JhZF9wYWdlX21hcCh2bWEsIGFkZHIsIGVudHJ5LCBlbnRyeV9zaXplLCBOVUxMLCBsZXZlbCk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFx0LypcbkBAIC03NjcsOCArODE3LDEwIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9fdm1fbm9ybWFsX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgIHB0ZV90IHB0ZSlcbiB7XG4rXHRfX2F1dG9fdHlwZSBlbnRyeSA9IHB0ZV92YWwocHRlKTtcbitcbiBcdHJldHVybiBfX3ZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlX3BmbihwdGUpLCBwdGVfc3BlY2lhbChwdGUpLFxuLVx0XHRcdFx0cHRlX3ZhbChwdGUpLCBQR1RBQkxFX0xFVkVMX1BURSk7XG4rXHRcdFx0XHRcdTAwMjZlbnRyeSwgc2l6ZW9mKGVudHJ5KSwgUEdUQUJMRV9MRVZFTF9QVEUpO1xuIH1cbiBcbiAvKipcbkBAIC04MDksOCArODYxLDEwIEBAIHN0cnVjdCBmb2xpbyAqdm1fbm9ybWFsX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gc3RydWN0IHBhZ2UgKnZtX25vcm1hbF9wYWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0cG1kX3QgcG1kKVxuIHtcbitcdF9fYXV0b190eXBlIGVudHJ5ID0gcG1kX3ZhbChwbWQpO1xuK1xuIFx0cmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwbWRfcGZuKHBtZCksIHBtZF9zcGVjaWFsKHBtZCksXG4tXHRcdFx0XHRwbWRfdmFsKHBtZCksIFBHVEFCTEVfTEVWRUxfUE1EKTtcbitcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BNRCk7XG4gfVxuIFxuIC8qKlxuQEAgLTg1MCw4ICs5MDQsMTAgQEAgc3RydWN0IGZvbGlvICp2bV9ub3JtYWxfZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHN0cnVjdCBwYWdlICp2bV9ub3JtYWxfcGFnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKVxuIHtcbitcdF9fYXV0b190eXBlIGVudHJ5ID0gcHVkX3ZhbChwdWQpO1xuK1xuIFx0cmV0dXJuIF9fdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdWRfcGZuKHB1ZCksIHB1ZF9zcGVjaWFsKHB1ZCksXG4tXHRcdFx0XHRwdWRfdmFsKHB1ZCksIFBHVEFCTEVfTEVWRUxfUFVEKTtcbitcdFx0XHRcdFx1MDAyNmVudHJ5LCBzaXplb2YoZW50cnkpLCBQR1RBQkxFX0xFVkVMX1BVRCk7XG4gfVxuICNlbmRpZlxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6MTQ6MDcuNTkyNDI0NTA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM2MzM5OTI4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGFnZSBUYWJsZSBMb2dnaW5nIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IG1vZGlmaWVzIGBtbS9tZW1vcnkuY2AuIE15IGluaXRpYWwgcmVhZCBpbmRpY2F0ZXMgaXQncyBhIHZlcnkgdGFyZ2V0ZWQgY2hhbmdlLCBwdXJlbHkgY29zbWV0aWMsIGF0IGxlYXN0IGZyb20gd2hhdCBJJ20gc2VlaW5nLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhYm91dCBob3cgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSBwcmludGVkIHdoZW4gYSBcImJhZCBwYWdlIG1hcFwiIGVycm9yIGlzIHRyaWdnZXJlZCwgd2l0aGluIGBwcmludF9iYWRfcGFnZV9tYXBgIGFuZCBgX19wcmludF9iYWRfcGFnZV9tYXBfcGd0YWJsZWAuXG5cblRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyB0aGVzZSBuZXcgZm9ybWF0dGluZyBmdW5jdGlvbnMsIGBwdHZhbF9ieXRlc190b19oZXhfc3RyYCBhbmQgYHB0dmFsX3RvX3N0cmAuICBUaGV5J3JlIGJ1aWx0IHRvIGNvbnZlcnQgYW5kIHByZXNlbnQgcGFnZSB0YWJsZSB2YWx1ZXMgYXMgaGV4IHN0cmluZ3MsIHNwZWNpZmljYWxseSBoYW5kbGluZyBkaWZmZXJlbnQgZGF0YSBzaXplcyBsaWtlIGB1MzJgLCBgdTY0YCwgYW5kIGV2ZW4gYHUxMjhgLiAgVGhpcyBpcyBwdXJlbHkgYWJvdXQgdGhlIGxvZ2dpbmcgYW5kIGZvcm1hdHRpbmcsIHRoYXQncyB3aGF0IHRob3NlIGZ1bmN0aW9ucyBkby4gVGhlIGFjdHVhbCBlcnJvciBoYW5kbGluZyBhbmQga2VybmVsIGJlaGF2aW9yIHJlbWFpbnMgdW50b3VjaGVkLCBpdCBzZWVtcyB0byBiZSBsaW1pdGVkIHRvIHRoZSBgcHJfYWxlcnRgIGNhbGxzLCBtYWtpbmcgdGhlIGVycm9yIG1lc3NhZ2VzIGVhc2llciB0byByZWFkLCBvciBwcm92aWRlIG1vcmUgZGV0YWlsIGFib3V0IHRoZSBzdGF0ZS5cblxuV2FpdCwgbG9va2luZyBmdXJ0aGVyLCB0aGUgc2lnbmF0dXJlIG9mIGBfX3ZtX25vcm1hbF9wYWdlYCBoYXMgYWxzbyBjaGFuZ2VkLCBidXQgaXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgbm93IHRha2VzIGBjb25zdCB2b2lkICplbnRyeSwgc2l6ZV90IGVudHJ5X3NpemVgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeWAsIGJ1dCB0aGlzIGlzIHNpbXBseSB0byBwcm92aWRlIHRoZSBkYXRhIGZvciB0aGUgbG9nZ2luZyBjaGFuZ2UsIHNvIGl0IGNhbiBwYXNzIHRoZSBlbnRyeSB0byBgcHJpbnRfYmFkX3BhZ2VfbWFwYC4gVGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGFuZCBpdHMgY29yZSBsb2dpYyAqYXJlKiB1bmNoYW5nZWQsIHdoaWNoIGNvbmZpcm1zIHRoZSBzY29wZSBvZiB0aGlzIHVwZGF0ZS5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgZGlmZiB0byBjb25maXJtIHRoaXMuIEFoLCB5ZXMsIHRoZXJlIGl0IGlzISAgV2UncmUgZ29pbmcgZnJvbTpcbmBgYGNcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxvbmcgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlLFxuLVx0XHRlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZW50cnksIHNpemVfdCBlbnRyeV9zaXplLFxuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuYGBgXG5hbmQgdGhlbjpcbmBgYGNcbi1cdHByX2FsZXJ0KFwiQlVHOiBCYWQgcGFnZSBtYXAgaW4gcHJvY2VzcyAlcyAgJXM6JTA4bGx4XCIsIGN1cnJlbnQtXHUwMDNlY29tbSxcbi1cdFx0IHBndGFibGVfbGV2ZWxfdG9fc3RyKGxldmVsKSwgZW50cnkpO1xuK1x0cHR2YWxfYnl0ZXNfdG9faGV4X3N0cihlbnRyeV9zdHIsIHNpemVvZihlbnRyeV9zdHIpLCBlbnRyeSwgZW50cnlfc2l6ZSk7XG4rXHRwcl9hbGVydChcIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgICVzOiAlc1wiLCBjdXJyZW50LVx1MDAzZWNvbW0sXG4rXHRcdCBwZ3RhYmxlX2xldmVsX3RvX3N0cihsZXZlbCksIGVudHJ5X3N0cik7XG5gYGBcblllcCwgaXQncyBqdXN0IGFsdGVyaW5nIHRoZSBmb3JtYXQgb2YgdGhhdCBlcnJvciBtZXNzYWdlLiBUaGVyZSdzIG5vIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb250cm9sIGZsb3csIG5vdGhpbmcgdGhhdCBhbHRlcnMgdGhlIGtlcm5lbCdzIGV4ZWN1dGlvbiBwYXRoLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IG1hcmsgYFdvcnRoRnV6emluZ2AgYXMgYGZhbHNlYC5cblxuT2theSwgSSdsbCBnbyBhaGVhZCBhbmQgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTc5LCJPdXRwdXRUb2tlbnMiOjc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6MTQ6MzEuMjI2NDE4OTYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGhvdyBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGZvcm1hdHRlZCBhbmQgcHJpbnRlZCBpbiBlcnJvciBtZXNzYWdlcyAoZS5nLiwgcHJpbnRfYmFkX3BhZ2VfbWFwKS4gSXQgZG9lcyBub3QgY2hhbmdlIGFueSBjb3JlIGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgZm9ybWF0dGVkIGFuZCBwcmludGVkIGluIGVycm9yIG1lc3NhZ2VzIChlLmcuLCBwcmludF9iYWRfcGFnZV9tYXApLiBJdCBkb2VzIG5vdCBjaGFuZ2UgYW55IGNvcmUgZnVuY3Rpb25hbCBsb2dpYyBvciBleGVjdXRpb24gZmxvdyBvZiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowk7mjp[1] Phase: Running StartedAt: 2026-07-07 12:14:42 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk7mjp[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-07 12:14:42 +0000 UTC FinishedAt: 2026-07-07 12:14:49 +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,}