Name: series-workflow7h29c Phase: Succeeded StartedAt: 2026-06-22 19:36:14 +0000 UTC FinishedAt: 2026-06-22 23:54:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[0] Phase: Succeeded StartedAt: 2026-06-22 19:36:14 +0000 UTC FinishedAt: 2026-06-22 19:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[0].run-triage Phase: Succeeded StartedAt: 2026-06-22 19:36:14 +0000 UTC FinishedAt: 2026-06-22 19:50:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "322008f87f917e2217eeac386a9410945092eb2e", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "322008f87f917e2217eeac386a9410945092eb2e", "config_name": "upstream-apparmor-kasan.config", "series_id": "6a0ee473-62c9-4e49-931c-ea503d51710f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gZmlsZW1hcF9mYXVsdCBhbmQgX19maWxlbWFwX2dldF9mb2xpb19tcG9sLCBjaGFuZ2luZyBob3cgdGhlIGZvbGlvIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbW92aW5nIHRoZSBkcm9wcGluZyBvZiB0aGUgbW1hcCBsb2NrIGR1cmluZyBJL08gYW5kIGZvbGlvIGxvY2tpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2E3NmM1OWY4NGY3YWUyNGE1NDFmMDU5M2U2OWU5ZDU5NTk5ZTY3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDIyIDE5OjQ4OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDFmNTA5OTFiNDNlM2IzLi5lNmFjMjIxZWU1NGQ4YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTY5NSw5ICYjNDM7Njk1LDYgQEAgcGdvZmZfdCBwYWdlX2NhY2hlX3ByZXZfbWlzcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiAgKiAqICVGR1BfQ1JFQVQgLSBJZiBubyBmb2xpbyBpcyBwcmVzZW50IHRoZW4gYSBuZXcgZm9saW8gaXMgYWxsb2NhdGVkLFxuICAqICAgYWRkZWQgdG8gdGhlIHBhZ2UgY2FjaGUgYW5kIHRoZSBWTSYjMzk7cyBMUlUgbGlzdC4gIFRoZSBmb2xpbyBpc1xuICAqICAgcmV0dXJuZWQgbG9ja2VkLlxuLSAqICogJUZHUF9GT1JfTU1BUCAtIFRoZSBjYWxsZXIgd2FudHMgdG8gZG8gaXRzIG93biBsb2NraW5nIGRhbmNlIGlmIHRoZVxuLSAqICAgZm9saW8gaXMgYWxyZWFkeSBpbiBjYWNoZS4gIElmIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLCB1bmxvY2sgaXRcbi0gKiAgIGJlZm9yZSByZXR1cm5pbmcgc28gdGhlIGNhbGxlciBjYW4gZG8gdGhlIHNhbWUgZGFuY2UuXG4gICogKiAlRkdQX1dSSVRFIC0gVGhlIGZvbGlvIHdpbGwgYmUgd3JpdHRlbiB0byBieSB0aGUgY2FsbGVyLlxuICAqICogJUZHUF9OT0ZTIC0gX19HRlBfRlMgd2lsbCBnZXQgY2xlYXJlZCBpbiBnZnAuXG4gICogKiAlRkdQX05PV0FJVCAtIERvbiYjMzk7dCBibG9jayBvbiB0aGUgZm9saW8gbG9jay5cbkBAIC03MTQsOSAmIzQzOzcxMSw4IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBmZ2ZfdDtcbiAjZGVmaW5lIEZHUF9XUklURVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwOClcbiAjZGVmaW5lIEZHUF9OT0ZTXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxuICNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbi0jZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcbi0jZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXG4tI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKVxuJiM0MzsjZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApXG4mIzQzOyNkZWZpbmUgRkdQX0RPTlRDQUNIRVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA4MClcbiAjZGVmaW5lIEZHRl9HRVRfT1JERVIoZmdmKVx0KCgoX19mb3JjZSB1bnNpZ25lZClmZ2YpIFx1MDAzZVx1MDAzZSAyNilcdC8qIHRvcCA2IGJpdHMgKi9cbiBcbiAjZGVmaW5lIEZHUF9XUklURUJFR0lOXHRcdChGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCB8IEZHUF9TVEFCTEUpXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA3ZTQ2N2M4MWQyMTM4OS4uMTNhODYxYjM4NjIxZmYgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuY1xuQEAgLTE5OTUsNyAmIzQzOzE5OTUsNyBAQCBzdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRnZnAgXHUwMDI2PSB+R0ZQX0tFUk5FTDtcbiBcdFx0XHRnZnAgfD0gR0ZQX05PV0FJVDtcbiBcdFx0fVxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKCEoZmdwX2ZsYWdzIFx1MDAyNiAoRkdQX0xPQ0sgfCBGR1BfRk9SX01NQVApKSkpXG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKCEoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfTE9DSykpKVxuIFx0XHRcdGZncF9mbGFncyB8PSBGR1BfTE9DSztcbiBcbiBcdFx0aWYgKG9yZGVyIFx1MDAzZSBtYXBwaW5nX21heF9mb2xpb19vcmRlcihtYXBwaW5nKSlcbkBAIC0yMDQyLDEyICYjNDM7MjA0Miw2IEBAIHN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4tXHRcdC8qXG4tXHRcdCAqIGZpbGVtYXBfYWRkX2ZvbGlvIGxvY2tzIHRoZSBwYWdlLCBhbmQgZm9yIG1tYXBcbi1cdFx0ICogd2UgZXhwZWN0IGFuIHVubG9ja2VkIHBhZ2UuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZm9saW8gXHUwMDI2XHUwMDI2IChmZ3BfZmxhZ3MgXHUwMDI2IEZHUF9GT1JfTU1BUCkpXG4tXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdH1cbiBcbiBcdGlmICghZm9saW8pXG5AQCAtMzI1OSw1MiAmIzQzOzMyNTMsNiBAQCBsb2ZmX3QgbWFwcGluZ19zZWVrX2hvbGVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHN0YXJ0LFxuIFxuICNpZmRlZiBDT05GSUdfTU1VXG4gI2RlZmluZSBNTUFQX0xPVFNBTUlTUyAgKDEwMClcbi0vKlxuLSAqIGxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwIC0gbG9jayB0aGUgcGFnZSwgcG9zc2libHkgZHJvcHBpbmcgdGhlIG1tYXBfbG9ja1xuLSAqIEB2bWYgLSB0aGUgdm1fZmF1bHQgZm9yIHRoaXMgZmF1bHQuXG4tICogQGZvbGlvIC0gdGhlIGZvbGlvIHRvIGxvY2suXG4tICogQGZwaW4gLSB0aGUgcG9pbnRlciB0byB0aGUgZmlsZSB3ZSBtYXkgcGluIChvciBpcyBhbHJlYWR5IHBpbm5lZCkuXG4tICpcbi0gKiBUaGlzIHdvcmtzIHNpbWlsYXIgdG8gbG9ja19mb2xpb19vcl9yZXRyeSBpbiB0aGF0IGl0IGNhbiBkcm9wIHRoZVxuLSAqIG1tYXBfbG9jay4gIEl0IGRpZmZlcnMgaW4gdGhhdCBpdCBhY3R1YWxseSByZXR1cm5zIHRoZSBmb2xpbyBsb2NrZWRcbi0gKiBpZiBpdCByZXR1cm5zIDEgYW5kIDAgaWYgaXQgY291bGRuJiMzOTt0IGxvY2sgdGhlIGZvbGlvLiAgSWYgd2UgZGlkIGhhdmVcbi0gKiB0byBkcm9wIHRoZSBtbWFwX2xvY2sgdGhlbiBmcGluIHdpbGwgcG9pbnQgdG8gdGhlIHBpbm5lZCBmaWxlIGFuZFxuLSAqIG5lZWRzIHRvIGJlIGZwdXQoKSYjMzk7ZWQgYXQgYSBsYXRlciBwb2ludC5cbi0gKi9cbi1zdGF0aWMgaW50IGxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZmlsZSAqKmZwaW4pXG4te1xuLVx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKVxuLVx0XHRyZXR1cm4gMTtcbi1cbi1cdC8qXG4tXHQgKiBOT1RFISBUaGlzIHdpbGwgbWFrZSB1cyByZXR1cm4gd2l0aCBWTV9GQVVMVF9SRVRSWSwgYnV0IHdpdGhcbi1cdCAqIHRoZSBmYXVsdCBsb2NrIHN0aWxsIGhlbGQuIFRoYXQmIzM5O3MgaG93IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUXG4tXHQgKiBpcyBzdXBwb3NlZCB0byB3b3JrLiBXZSBoYXZlIHdheSB0b28gbWFueSBzcGVjaWFsIGNhc2VzLi5cbi1cdCAqL1xuLVx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0KmZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCAqZnBpbik7XG4tXHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX0tJTExBQkxFKSB7XG4tXHRcdGlmIChfX2ZvbGlvX2xvY2tfa2lsbGFibGUoZm9saW8pKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBXZSBkaWRuJiMzOTt0IGhhdmUgdGhlIHJpZ2h0IGZsYWdzIHRvIGRyb3AgdGhlXG4tXHRcdFx0ICogZmF1bHQgbG9jaywgYnV0IGFsbCBmYXVsdF9oYW5kbGVycyBvbmx5IGNoZWNrXG4tXHRcdFx0ICogZm9yIGZhdGFsIHNpZ25hbHMgaWYgd2UgcmV0dXJuIFZNX0ZBVUxUX1JFVFJZLFxuLVx0XHRcdCAqIHNvIHdlIG5lZWQgdG8gZHJvcCB0aGUgZmF1bHQgbG9jayBoZXJlIGFuZFxuLVx0XHRcdCAqIHJldHVybiAwIGlmIHdlIGRvbiYjMzk7dCBoYXZlIGEgZnBpbi5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoKmZwaW4gPT0gTlVMTClcbi1cdFx0XHRcdHJlbGVhc2VfZmF1bHRfbG9jayh2bWYpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4tXHR9IGVsc2Vcbi1cdFx0X19mb2xpb19sb2NrKGZvbGlvKTtcbi1cbi1cdHJldHVybiAxO1xuLX1cbi1cbiAvKlxuICAqIFN5bmNocm9ub3VzIHJlYWRhaGVhZCBoYXBwZW5zIHdoZW4gd2UgZG9uJiMzOTt0IGV2ZW4gZmluZCBhIHBhZ2UgaW4gdGhlIHBhZ2VcbiAgKiBjYWNoZSBhdCBhbGwuICBXZSBkb24mIzM5O3Qgd2FudCB0byBwZXJmb3JtIElPIHVuZGVyIHRoZSBtbWFwIHNlbSwgc28gaWYgd2UgaGF2ZVxuQEAgLTMzMTIsMTMgJiM0MzszMjYwLDEyIEBAIHN0YXRpYyBpbnQgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gICogdGhhdC4gIElmIHdlIGRpZG4mIzM5O3QgcGluIGEgZmlsZSB0aGVuIHdlIHJldHVybiBOVUxMLiAgVGhlIGZpbGUgdGhhdCBpc1xuICAqIHJldHVybmVkIG5lZWRzIHRvIGJlIGZwdXQoKSYjMzk7ZWQgd2hlbiB3ZSYjMzk7cmUgZG9uZSB3aXRoIGl0LlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiYjNDM7c3RhdGljIHZvaWQgZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmlsZTtcbiBcdHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSA9IFx1MDAyNmZpbGUtXHUwMDNlZl9yYTtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4gXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCByYSwgbWFwcGluZywgdm1mLVx1MDAzZXBnb2ZmKTtcbi1cdHN0cnVjdCBmaWxlICpmcGluID0gTlVMTDtcbiBcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzO1xuIFx0Ym9vbCBmb3JjZV90aHBfcmVhZGFoZWFkID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBpbnQgdGhwX29yZGVyID0gMDtcbkBAIC0zMzQ4LDE1ICYjNDM7MzI5NSwxNCBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdCAqIFZNX0VYRUMgY2FzZSBiZWxvdyBpcyBhbHJlYWR5IGludGVuZGVkIGZvciByYW5kb20gYWNjZXNzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCh2bV9mbGFncyBcdTAwMjYgKFZNX1JBTkRfUkVBRCB8IFZNX0VYRUMpKSA9PSBWTV9SQU5EX1JFQUQpXG4tXHRcdFx0cmV0dXJuIGZwaW47XG4mIzQzO1x0XHRcdHJldHVybjtcbiBcbiBcdFx0aWYgKCFyYS1cdTAwM2VyYV9wYWdlcylcbi1cdFx0XHRyZXR1cm4gZnBpbjtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuIFxuIFx0XHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX1NFUV9SRUFEKSB7XG4tXHRcdFx0ZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsIGZwaW4pO1xuIFx0XHRcdHBhZ2VfY2FjaGVfc3luY19yYShcdTAwMjZyYWN0bCwgcmEtXHUwMDNlcmFfcGFnZXMpO1xuLVx0XHRcdHJldHVybiBmcGluO1xuJiM0MztcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0zMzcxLDEzICYjNDM7MzMxNywxMiBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdCAqIHN0b3AgYm90aGVyaW5nIHdpdGggcmVhZC1haGVhZC4gSXQgd2lsbCBvbmx5IGh1cnQuXG4gXHRcdCAqL1xuIFx0XHRpZiAobW1hcF9taXNzIFx1MDAzZSBNTUFQX0xPVFNBTUlTUylcbi1cdFx0XHRyZXR1cm4gZnBpbjtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0aWYgKGZvcmNlX3RocF9yZWFkYWhlYWQpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBmb2xpb19ucl9wYWdlcyA9IDFVTCBcdTAwM2NcdTAwM2MgdGhwX29yZGVyO1xuIFxuLVx0XHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7XG4gXHRcdHJhY3RsLl9pbmRleCBcdTAwMjY9IH4oZm9saW9fbnJfcGFnZXMgLSAxKTtcbiBcdFx0cmEtXHUwMDNlc2l6ZSA9IGZvbGlvX25yX3BhZ2VzO1xuIFx0XHQvKlxuQEAgLTMzODksNyAmIzQzOzMzMzQsNyBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdHJhLVx1MDAzZWFzeW5jX3NpemUgPSBmb2xpb19ucl9wYWdlcztcbiBcdFx0cmEtXHUwMDNlb3JkZXIgPSB0aHBfb3JkZXI7XG4gXHRcdHBhZ2VfY2FjaGVfcmFfb3JkZXIoXHUwMDI2cmFjdGwsIHJhKTtcbi1cdFx0cmV0dXJuIGZwaW47XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMpIHtcbkBAIC0zNDI3LDI5ICYjNDM7MzM3MiwyNCBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdHJhLVx1MDAzZW9yZGVyID0gMDtcbiBcdH1cbiBcbi1cdGZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTtcbiBcdHJhY3RsLl9pbmRleCA9IHJhLVx1MDAzZXN0YXJ0O1xuIFx0cGFnZV9jYWNoZV9yYV9vcmRlcihcdTAwMjZyYWN0bCwgcmEpO1xuLVx0cmV0dXJuIGZwaW47XG4gfVxuIFxuIC8qXG4tICogQXN5bmNocm9ub3VzIHJlYWRhaGVhZCBoYXBwZW5zIHdoZW4gd2UgZmluZCB0aGUgcGFnZSBhbmQgUEdfcmVhZGFoZWFkLFxuLSAqIHNvIHdlIHdhbnQgdG8gcG9zc2libHkgZXh0ZW5kIHRoZSByZWFkYWhlYWQgZnVydGhlci4gIFdlIHJldHVybiB0aGUgZmlsZSB0aGF0XG4tICogd2FzIHBpbm5lZCBpZiB3ZSBoYXZlIHRvIGRyb3AgdGhlIG1tYXBfbG9jayBpbiBvcmRlciB0byBkbyBJTy5cbiYjNDM7ICogQXN5bmNocm9ub3VzIHJlYWRhaGVhZCBoYXBwZW5zIHdoZW4gd2UgZmluZCB0aGUgZm9saW8gYW5kIGl0IGhhcyB0aGVcbiYjNDM7ICogcmVhZGFoZWFkIGZsYWcgc2V0IHNvIHdlIHdhbnQgdG8gcG9zc2libHkgZXh0ZW5kIHRoZSByZWFkYWhlYWQgZnVydGhlci5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGZpbGUgKmRvX2FzeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIHZvaWQgZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGZpbGUgKmZpbGUgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX2ZpbGU7XG4gXHRzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEgPSBcdTAwMjZmaWxlLVx1MDAzZWZfcmE7XG4gXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCByYSwgZmlsZS1cdTAwM2VmX21hcHBpbmcsIHZtZi1cdTAwM2VwZ29mZik7XG4tXHRzdHJ1Y3QgZmlsZSAqZnBpbiA9IE5VTEw7XG4gXHR1bnNpZ25lZCBzaG9ydCBtbWFwX21pc3M7XG4gXG4gXHQvKiBJZiB3ZSBkb24mIzM5O3Qgd2FudCBhbnkgcmVhZC1haGVhZCwgZG9uJiMzOTt0IGJvdGhlciAqL1xuIFx0aWYgKHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JBTkRfUkVBRCB8fCAhcmEtXHUwMDNlcmFfcGFnZXMpXG4tXHRcdHJldHVybiBmcGluO1xuJiM0MztcdFx0cmV0dXJuO1xuIFxuIFx0LypcbiBcdCAqIElmIHRoZSBmb2xpbyBpcyBsb2NrZWQsIHdlJiMzOTtyZSBsaWtlbHkgcmFjaW5nIGFnYWluc3QgYW5vdGhlciBmYXVsdC5cbkBAIC0zNDcwLDEwICYjNDM7MzQxMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4gXG4gXHRpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKSB7XG4gXHRcdHJhY3RsLl9tYXhfaW5kZXggPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX3Bnb2ZmICYjNDM7IHZtYV9wYWdlcyh2bWYtXHUwMDNldm1hKSAtIDE7XG4tXHRcdGZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTtcbiBcdFx0cGFnZV9jYWNoZV9hc3luY19yYShcdTAwMjZyYWN0bCwgZm9saW8sIHJhLVx1MDAzZXJhX3BhZ2VzKTtcbiBcdH1cbi1cdHJldHVybiBmcGluO1xuIH1cbiBcbiBzdGF0aWMgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0X3JlY2hlY2tfcHRlX25vbmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5AQCAtMzUzMCwxNSAmIzQzOzM0NjgsOSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0X3JlY2hlY2tfcHRlX25vbmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gICogaXQgaW4gdGhlIHBhZ2UgY2FjaGUsIGFuZCBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2VzIHJlYXNvbmFibHkgd2l0aG91dFxuICAqIGhhdmluZyBhIGxvdCBvZiBkdXBsaWNhdGVkIGNvZGUuXG4gICpcbi0gKiB2bWEtXHUwMDNldm1fbW0tXHUwMDNlbW1hcF9sb2NrIG11c3QgYmUgaGVsZCBvbiBlbnRyeS5cbi0gKlxuLSAqIElmIG91ciByZXR1cm4gdmFsdWUgaGFzIFZNX0ZBVUxUX1JFVFJZIHNldCwgaXQmIzM5O3MgYmVjYXVzZSB0aGUgbW1hcF9sb2NrXG4tICogbWF5IGJlIGRyb3BwZWQgYmVmb3JlIGRvaW5nIEkvTyBvciBieSBsb2NrX2ZvbGlvX21heWJlX2Ryb3BfbW1hcCgpLlxuLSAqXG4tICogSWYgb3VyIHJldHVybiB2YWx1ZSBkb2VzIG5vdCBoYXZlIFZNX0ZBVUxUX1JFVFJZIHNldCwgdGhlIG1tYXBfbG9ja1xuLSAqIGhhcyBub3QgYmVlbiByZWxlYXNlZC5cbi0gKlxuLSAqIFdlIG5ldmVyIHJldHVybiB3aXRoIFZNX0ZBVUxUX1JFVFJZIGFuZCBhIGJpdCBmcm9tIFZNX0ZBVUxUX0VSUk9SIHNldC5cbiYjNDM7ICogQ29udGV4dDogTWF5IHNsZWVwIHdhaXRpbmcgZm9yIEkvTy4gIENhbiBiZSBpbnRlcnJ1cHRlZCBieSBmYXRhbFxuJiM0MzsgKiBzaWduYWxzIGlmIEB2bWYgZmxhZ3MgcGVybWl0LiAgVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIGZhdWx0IGxvY2tcbiYjNDM7ICogKGVpdGhlciBtbWFwX2xvY2sgb3IgVk1BIGxvY2spLlxuICAqXG4gICogUmV0dXJuOiBiaXR3aXNlLU9SIG9mICVWTV9GQVVMVF8gY29kZXMuXG4gICovXG5AQCAtMzU0Niw3ICYjNDM7MzQ3OCw2IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiB7XG4gXHRpbnQgZXJyb3I7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmlsZTtcbi1cdHN0cnVjdCBmaWxlICpmcGluID0gTlVMTDtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0cGdvZmZfdCBtYXhfaWR4LCBpbmRleCA9IHZtZi1cdTAwM2VwZ29mZjtcbkBAIC0zNTY2LDE1ICYjNDM7MzQ5NywzMSBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4KTtcbiBcdGlmIChsaWtlbHkoIUlTX0VSUihmb2xpbykpKSB7XG4gXHRcdC8qXG4tXHRcdCAqIFdlIGZvdW5kIHRoZSBwYWdlLCBzbyB0cnkgYXN5bmMgcmVhZGFoZWFkIGJlZm9yZSB3YWl0aW5nIGZvclxuLVx0XHQgKiB0aGUgbG9jay5cbiYjNDM7XHRcdCAqIFdlIGZvdW5kIHRoZSBmb2xpbywgc28gdHJ5IGFzeW5jIHJlYWRhaGVhZCBiZWZvcmVcbiYjNDM7XHRcdCAqIHdhaXRpbmcgZm9yIHRoZSBsb2NrLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCEodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1RSSUVEKSlcbi1cdFx0XHRmcGluID0gZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQodm1mLCBmb2xpbyk7XG4mIzQzO1x0XHRcdGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkKHZtZiwgZm9saW8pO1xuIFx0XHRpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSkge1xuIFx0XHRcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdFx0XHRtYXBwaW5nX2xvY2tlZCA9IHRydWU7XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4mIzQzO1x0XHRcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfS0lMTEFCTEUpIHtcbiYjNDM7XHRcdFx0XHRpZiAoX19mb2xpb19sb2NrX2tpbGxhYmxlKGZvbGlvKSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0X19mb2xpb19sb2NrKGZvbGlvKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIERpZCBpdCBnZXQgdHJ1bmNhdGVkPyAqL1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KGZvbGlvLVx1MDAzZW1hcHBpbmcgIT0gbWFwcGluZykpIHtcbiYjNDM7XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRcdFx0Z290byByZXRyeV9maW5kO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHZtZik7XG4gXHRcdGlmICh1bmxpa2VseShyZXQpKVxuQEAgLTM1ODQsNyAmIzQzOzM1MzEsNyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGNvdW50X3ZtX2V2ZW50KFBHTUFKRkFVTFQpO1xuIFx0XHRjb3VudF9tZW1jZ19ldmVudF9tbSh2bWYtXHUwMDNldm1hLVx1MDAzZXZtX21tLCBQR01BSkZBVUxUKTtcbiBcdFx0cmV0ID0gVk1fRkFVTFRfTUFKT1I7XG4tXHRcdGZwaW4gPSBkb19zeW5jX21tYXBfcmVhZGFoZWFkKHZtZik7XG4mIzQzO1x0XHRkb19zeW5jX21tYXBfcmVhZGFoZWFkKHZtZik7XG4gcmV0cnlfZmluZDpcbiBcdFx0LypcbiBcdFx0ICogU2VlIGNvbW1lbnQgaW4gZmlsZW1hcF9jcmVhdGVfZm9saW8oKSB3aHkgd2UgbmVlZFxuQEAgLTM1OTUsMjUgJiM0MzszNTQyLDEzIEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0XHRtYXBwaW5nX2xvY2tlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxuLVx0XHRcdFx0XHQgIEZHUF9DUkVBVHxGR1BfRk9SX01NQVAsXG4tXHRcdFx0XHRcdCAgdm1mLVx1MDAzZWdmcF9tYXNrKTtcbiYjNDM7XHRcdFx0XHRcdCAgRkdQX0NSRUFUIHwgRkdQX0xPQ0ssIHZtZi1cdTAwM2VnZnBfbWFzayk7XG4gXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tXHRcdFx0aWYgKGZwaW4pXG4tXHRcdFx0XHRnb3RvIG91dF9yZXRyeTtcbiBcdFx0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdFx0XHRyZXR1cm4gVk1fRkFVTFRfT09NO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoIWxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwKHZtZiwgZm9saW8sIFx1MDAyNmZwaW4pKVxuLVx0XHRnb3RvIG91dF9yZXRyeTtcbi1cbi1cdC8qIERpZCBpdCBnZXQgdHJ1bmNhdGVkPyAqL1xuLVx0aWYgKHVubGlrZWx5KGZvbGlvLVx1MDAzZW1hcHBpbmcgIT0gbWFwcGluZykpIHtcbi1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0Z290byByZXRyeV9maW5kO1xuLVx0fVxuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb19jb250YWlucyhmb2xpbywgaW5kZXgpLCBmb2xpbyk7XG4gXG4gXHQvKlxuQEAgLTM2MjUsNyAmIzQzOzM1NjAsNyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdC8qXG4gXHRcdCAqIElmIHRoZSBpbnZhbGlkYXRlIGxvY2sgaXMgbm90IGhlbGQsIHRoZSBmb2xpbyB3YXMgaW4gY2FjaGVcbiBcdFx0ICogYW5kIHVwdG9kYXRlIGFuZCBub3cgaXQgaXMgbm90LiBTdHJhbmdlIGJ1dCBwb3NzaWJsZSBzaW5jZSB3ZVxuLVx0XHQgKiBkaWRuJiMzOTt0IGhvbGQgdGhlIHBhZ2UgbG9jayBhbGwgdGhlIHRpbWUuIExldCYjMzk7cyBkcm9wXG4mIzQzO1x0XHQgKiBkaWRuJiMzOTt0IGhvbGQgdGhlIGZvbGlvIGxvY2sgYWxsIHRoZSB0aW1lLiBMZXQmIzM5O3MgZHJvcFxuIFx0XHQgKiBldmVyeXRoaW5nLCBnZXQgdGhlIGludmFsaWRhdGUgbG9jayBhbmQgdHJ5IGFnYWluLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFtYXBwaW5nX2xvY2tlZCkge1xuQEAgLTM2NDIsMjEgJiM0MzszNTc3LDEyIEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Z290byBwYWdlX25vdF91cHRvZGF0ZTtcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBXZSYjMzk7dmUgbWFkZSBpdCB0aGlzIGZhciBhbmQgd2UgaGFkIHRvIGRyb3Agb3VyIG1tYXBfbG9jaywgbm93IGlzIHRoZVxuLVx0ICogdGltZSB0byByZXR1cm4gdG8gdGhlIHVwcGVyIGxheWVyIGFuZCBoYXZlIGl0IHJlLWZpbmQgdGhlIHZtYSBhbmRcbi1cdCAqIHJlZG8gdGhlIGZhdWx0LlxuLVx0ICovXG4tXHRpZiAoZnBpbikge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRnb3RvIG91dF9yZXRyeTtcbi1cdH1cbiBcdGlmIChtYXBwaW5nX2xvY2tlZClcbiBcdFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XG4gXG4gXHQvKlxuLVx0ICogRm91bmQgdGhlIHBhZ2UgYW5kIGhhdmUgYSByZWZlcmVuY2Ugb24gaXQuXG4tXHQgKiBXZSBtdXN0IHJlY2hlY2sgaV9zaXplIHVuZGVyIHBhZ2UgbG9jay5cbiYjNDM7XHQgKiBGb3VuZCB0aGUgZm9saW8gYW5kIGhhdmUgYSByZWZlcmVuY2Ugb24gaXQuXG4mIzQzO1x0ICogV2UgbXVzdCByZWNoZWNrIGlfc2l6ZSB1bmRlciBmb2xpbyBsb2NrLlxuIFx0ICovXG4gXHRtYXhfaWR4ID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9TSVpFKTtcbiBcdGlmICh1bmxpa2VseShpbmRleCBcdTAwM2U9IG1heF9pZHgpKSB7XG5AQCAtMzY3NSwxMCAmIzQzOzM2MDEsNyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHQgKiBiZWNhdXNlIHRoZXJlIHJlYWxseSBhcmVuJiMzOTt0IGFueSBwZXJmb3JtYW5jZSBpc3N1ZXMgaGVyZVxuIFx0ICogYW5kIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVycm9ycy5cbiBcdCAqL1xuLVx0ZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsIGZwaW4pO1xuIFx0ZXJyb3IgPSBmaWxlbWFwX3JlYWRfZm9saW8oZmlsZSwgbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VyZWFkX2ZvbGlvLCBmb2xpbyk7XG4tXHRpZiAoZnBpbilcbi1cdFx0Z290byBvdXRfcmV0cnk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0aWYgKCFlcnJvciB8fCBlcnJvciA9PSBBT1BfVFJVTkNBVEVEX1BBR0UpXG5AQCAtMzY4NiwyMCAmIzQzOzM2MDksNiBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcbiBcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4tXG4tb3V0X3JldHJ5OlxuLVx0Lypcbi1cdCAqIFdlIGRyb3BwZWQgdGhlIG1tYXBfbG9jaywgd2UgbmVlZCB0byByZXR1cm4gdG8gdGhlIGZhdWx0IGhhbmRsZXIgdG9cbi1cdCAqIHJlLWZpbmQgdGhlIHZtYSBhbmQgY29tZSBiYWNrIGFuZCBmaW5kIG91ciBob3BlZnVsbHkgc3RpbGwgcG9wdWxhdGVkXG4tXHQgKiBwYWdlLlxuLVx0ICovXG4tXHRpZiAoIUlTX0VSUihmb2xpbykpXG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRpZiAobWFwcGluZ19sb2NrZWQpXG4tXHRcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuLVx0aWYgKGZwaW4pXG4tXHRcdGZwdXQoZnBpbik7XG4tXHRyZXR1cm4gcmV0IHwgVk1fRkFVTFRfUkVUUlk7XG4gfVxuIEVYUE9SVF9TWU1CT0woZmlsZW1hcF9mYXVsdCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBmaWxlbWFwX2ZhdWx0IGFuZCBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wsIGNoYW5naW5nIGhvdyB0aGUgZm9saW8gbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVtb3ZpbmcgdGhlIGRyb3BwaW5nIG9mIHRoZSBtbWFwIGxvY2sgZHVyaW5nIEkvTyBhbmQgZm9saW8gbG9ja2luZy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNhNzZjNTlmODRmN2FlMjRhNTQxZjA1OTNlNjllOWQ1OTU5OWU2N2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyMiAxOTo0ODozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggMWY1MDk5MWI0M2UzYjMuLmU2YWMyMjFlZTU0ZDhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtNjk1LDkgJiM0Mzs2OTUsNiBAQCBwZ29mZl90IHBhZ2VfY2FjaGVfcHJldl9taXNzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogICogKiAlRkdQX0NSRUFUIC0gSWYgbm8gZm9saW8gaXMgcHJlc2VudCB0aGVuIGEgbmV3IGZvbGlvIGlzIGFsbG9jYXRlZCwKICAqICAgYWRkZWQgdG8gdGhlIHBhZ2UgY2FjaGUgYW5kIHRoZSBWTSYjMzk7cyBMUlUgbGlzdC4gIFRoZSBmb2xpbyBpcwogICogICByZXR1cm5lZCBsb2NrZWQuCi0gKiAqICVGR1BfRk9SX01NQVAgLSBUaGUgY2FsbGVyIHdhbnRzIHRvIGRvIGl0cyBvd24gbG9ja2luZyBkYW5jZSBpZiB0aGUKLSAqICAgZm9saW8gaXMgYWxyZWFkeSBpbiBjYWNoZS4gIElmIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLCB1bmxvY2sgaXQKLSAqICAgYmVmb3JlIHJldHVybmluZyBzbyB0aGUgY2FsbGVyIGNhbiBkbyB0aGUgc2FtZSBkYW5jZS4KICAqICogJUZHUF9XUklURSAtIFRoZSBmb2xpbyB3aWxsIGJlIHdyaXR0ZW4gdG8gYnkgdGhlIGNhbGxlci4KICAqICogJUZHUF9OT0ZTIC0gX19HRlBfRlMgd2lsbCBnZXQgY2xlYXJlZCBpbiBnZnAuCiAgKiAqICVGR1BfTk9XQUlUIC0gRG9uJiMzOTt0IGJsb2NrIG9uIHRoZSBmb2xpbyBsb2NrLgpAQCAtNzE0LDkgJiM0Mzs3MTEsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZmdmX3Q7CiAjZGVmaW5lIEZHUF9XUklURQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDgpCiAjZGVmaW5lIEZHUF9OT0ZTCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMCkKICNkZWZpbmUgRkdQX05PV0FJVAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMjApCi0jZGVmaW5lIEZHUF9GT1JfTU1BUAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApCi0jZGVmaW5lIEZHUF9TVEFCTEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKQotI2RlZmluZSBGR1BfRE9OVENBQ0hFCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDEwMCkKJiM0MzsjZGVmaW5lIEZHUF9TVEFCTEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDQwKQomIzQzOyNkZWZpbmUgRkdQX0RPTlRDQUNIRQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApCiAjZGVmaW5lIEZHRl9HRVRfT1JERVIoZmdmKQkoKChfX2ZvcmNlIHVuc2lnbmVkKWZnZikgJmd0OyZndDsgMjYpCS8qIHRvcCA2IGJpdHMgKi8KIAogI2RlZmluZSBGR1BfV1JJVEVCRUdJTgkJKEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUIHwgRkdQX1NUQUJMRSkKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA3ZTQ2N2M4MWQyMTM4OS4uMTNhODYxYjM4NjIxZmYgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTE5OTUsNyAmIzQzOzE5OTUsNyBAQCBzdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCWdmcCAmYW1wOz0gfkdGUF9LRVJORUw7CiAJCQlnZnAgfD0gR0ZQX05PV0FJVDsKIAkJfQotCQlpZiAoV0FSTl9PTl9PTkNFKCEoZmdwX2ZsYWdzICZhbXA7IChGR1BfTE9DSyB8IEZHUF9GT1JfTU1BUCkpKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoIShmZ3BfZmxhZ3MgJmFtcDsgRkdQX0xPQ0spKSkKIAkJCWZncF9mbGFncyB8PSBGR1BfTE9DSzsKIAogCQlpZiAob3JkZXIgJmd0OyBtYXBwaW5nX21heF9mb2xpb19vcmRlcihtYXBwaW5nKSkKQEAgLTIwNDIsMTIgJiM0MzsyMDQyLDYgQEAgc3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJZXJyID0gLUVBR0FJTjsKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KLQkJLyoKLQkJICogZmlsZW1hcF9hZGRfZm9saW8gbG9ja3MgdGhlIHBhZ2UsIGFuZCBmb3IgbW1hcAotCQkgKiB3ZSBleHBlY3QgYW4gdW5sb2NrZWQgcGFnZS4KLQkJICovCi0JCWlmIChmb2xpbyAmYW1wOyZhbXA7IChmZ3BfZmxhZ3MgJmFtcDsgRkdQX0ZPUl9NTUFQKSkKLQkJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJfQogCiAJaWYgKCFmb2xpbykKQEAgLTMyNTksNTIgJiM0MzszMjUzLDYgQEAgbG9mZl90IG1hcHBpbmdfc2Vla19ob2xlX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBzdGFydCwKIAogI2lmZGVmIENPTkZJR19NTVUKICNkZWZpbmUgTU1BUF9MT1RTQU1JU1MgICgxMDApCi0vKgotICogbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAgLSBsb2NrIHRoZSBwYWdlLCBwb3NzaWJseSBkcm9wcGluZyB0aGUgbW1hcF9sb2NrCi0gKiBAdm1mIC0gdGhlIHZtX2ZhdWx0IGZvciB0aGlzIGZhdWx0LgotICogQGZvbGlvIC0gdGhlIGZvbGlvIHRvIGxvY2suCi0gKiBAZnBpbiAtIHRoZSBwb2ludGVyIHRvIHRoZSBmaWxlIHdlIG1heSBwaW4gKG9yIGlzIGFscmVhZHkgcGlubmVkKS4KLSAqCi0gKiBUaGlzIHdvcmtzIHNpbWlsYXIgdG8gbG9ja19mb2xpb19vcl9yZXRyeSBpbiB0aGF0IGl0IGNhbiBkcm9wIHRoZQotICogbW1hcF9sb2NrLiAgSXQgZGlmZmVycyBpbiB0aGF0IGl0IGFjdHVhbGx5IHJldHVybnMgdGhlIGZvbGlvIGxvY2tlZAotICogaWYgaXQgcmV0dXJucyAxIGFuZCAwIGlmIGl0IGNvdWxkbiYjMzk7dCBsb2NrIHRoZSBmb2xpby4gIElmIHdlIGRpZCBoYXZlCi0gKiB0byBkcm9wIHRoZSBtbWFwX2xvY2sgdGhlbiBmcGluIHdpbGwgcG9pbnQgdG8gdGhlIHBpbm5lZCBmaWxlIGFuZAotICogbmVlZHMgdG8gYmUgZnB1dCgpJiMzOTtlZCBhdCBhIGxhdGVyIHBvaW50LgotICovCi1zdGF0aWMgaW50IGxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJCSAgICAgc3RydWN0IGZpbGUgKipmcGluKQotewotCWlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKgotCSAqIE5PVEUhIFRoaXMgd2lsbCBtYWtlIHVzIHJldHVybiB3aXRoIFZNX0ZBVUxUX1JFVFJZLCBidXQgd2l0aAotCSAqIHRoZSBmYXVsdCBsb2NrIHN0aWxsIGhlbGQuIFRoYXQmIzM5O3MgaG93IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUCi0JICogaXMgc3VwcG9zZWQgdG8gd29yay4gV2UgaGF2ZSB3YXkgdG9vIG1hbnkgc3BlY2lhbCBjYXNlcy4uCi0JICovCi0JaWYgKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpCi0JCXJldHVybiAwOwotCi0JKmZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCAqZnBpbik7Ci0JaWYgKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19LSUxMQUJMRSkgewotCQlpZiAoX19mb2xpb19sb2NrX2tpbGxhYmxlKGZvbGlvKSkgewotCQkJLyoKLQkJCSAqIFdlIGRpZG4mIzM5O3QgaGF2ZSB0aGUgcmlnaHQgZmxhZ3MgdG8gZHJvcCB0aGUKLQkJCSAqIGZhdWx0IGxvY2ssIGJ1dCBhbGwgZmF1bHRfaGFuZGxlcnMgb25seSBjaGVjawotCQkJICogZm9yIGZhdGFsIHNpZ25hbHMgaWYgd2UgcmV0dXJuIFZNX0ZBVUxUX1JFVFJZLAotCQkJICogc28gd2UgbmVlZCB0byBkcm9wIHRoZSBmYXVsdCBsb2NrIGhlcmUgYW5kCi0JCQkgKiByZXR1cm4gMCBpZiB3ZSBkb24mIzM5O3QgaGF2ZSBhIGZwaW4uCi0JCQkgKi8KLQkJCWlmICgqZnBpbiA9PSBOVUxMKQotCQkJCXJlbGVhc2VfZmF1bHRfbG9jayh2bWYpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IGVsc2UKLQkJX19mb2xpb19sb2NrKGZvbGlvKTsKLQotCXJldHVybiAxOwotfQotCiAvKgogICogU3luY2hyb25vdXMgcmVhZGFoZWFkIGhhcHBlbnMgd2hlbiB3ZSBkb24mIzM5O3QgZXZlbiBmaW5kIGEgcGFnZSBpbiB0aGUgcGFnZQogICogY2FjaGUgYXQgYWxsLiAgV2UgZG9uJiMzOTt0IHdhbnQgdG8gcGVyZm9ybSBJTyB1bmRlciB0aGUgbW1hcCBzZW0sIHNvIGlmIHdlIGhhdmUKQEAgLTMzMTIsMTMgJiM0MzszMjYwLDEyIEBAIHN0YXRpYyBpbnQgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAgKiB0aGF0LiAgSWYgd2UgZGlkbiYjMzk7dCBwaW4gYSBmaWxlIHRoZW4gd2UgcmV0dXJuIE5VTEwuICBUaGUgZmlsZSB0aGF0IGlzCiAgKiByZXR1cm5lZCBuZWVkcyB0byBiZSBmcHV0KCkmIzM5O2VkIHdoZW4gd2UmIzM5O3JlIGRvbmUgd2l0aCBpdC4KICAqLwotc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQomIzQzO3N0YXRpYyB2b2lkIGRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWYtJmd0O3ZtYS0mZ3Q7dm1fZmlsZTsKIAlzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEgPSAmYW1wO2ZpbGUtJmd0O2ZfcmE7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLSZndDtmX21hcHBpbmc7CiAJREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgcmEsIG1hcHBpbmcsIHZtZi0mZ3Q7cGdvZmYpOwotCXN0cnVjdCBmaWxlICpmcGluID0gTlVMTDsKIAl2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1mLSZndDt2bWEtJmd0O3ZtX2ZsYWdzOwogCWJvb2wgZm9yY2VfdGhwX3JlYWRhaGVhZCA9IGZhbHNlOwogCXVuc2lnbmVkIGludCB0aHBfb3JkZXIgPSAwOwpAQCAtMzM0OCwxNSAmIzQzOzMyOTUsMTQgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQkgKiBWTV9FWEVDIGNhc2UgYmVsb3cgaXMgYWxyZWFkeSBpbnRlbmRlZCBmb3IgcmFuZG9tIGFjY2Vzcy4KIAkJICovCiAJCWlmICgodm1fZmxhZ3MgJmFtcDsgKFZNX1JBTkRfUkVBRCB8IFZNX0VYRUMpKSA9PSBWTV9SQU5EX1JFQUQpCi0JCQlyZXR1cm4gZnBpbjsKJiM0MzsJCQlyZXR1cm47CiAKIAkJaWYgKCFyYS0mZ3Q7cmFfcGFnZXMpCi0JCQlyZXR1cm4gZnBpbjsKJiM0MzsJCQlyZXR1cm47CiAKIAkJaWYgKHZtX2ZsYWdzICZhbXA7IFZNX1NFUV9SRUFEKSB7Ci0JCQlmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7CiAJCQlwYWdlX2NhY2hlX3N5bmNfcmEoJmFtcDtyYWN0bCwgcmEtJmd0O3JhX3BhZ2VzKTsKLQkJCXJldHVybiBmcGluOwomIzQzOwkJCXJldHVybjsKIAkJfQogCX0KIApAQCAtMzM3MSwxMyAmIzQzOzMzMTcsMTIgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQkgKiBzdG9wIGJvdGhlcmluZyB3aXRoIHJlYWQtYWhlYWQuIEl0IHdpbGwgb25seSBodXJ0LgogCQkgKi8KIAkJaWYgKG1tYXBfbWlzcyAmZ3Q7IE1NQVBfTE9UU0FNSVNTKQotCQkJcmV0dXJuIGZwaW47CiYjNDM7CQkJcmV0dXJuOwogCX0KIAogCWlmIChmb3JjZV90aHBfcmVhZGFoZWFkKSB7CiAJCXVuc2lnbmVkIGxvbmcgZm9saW9fbnJfcGFnZXMgPSAxVUwgJmx0OyZsdDsgdGhwX29yZGVyOwogCi0JCWZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTsKIAkJcmFjdGwuX2luZGV4ICZhbXA7PSB+KGZvbGlvX25yX3BhZ2VzIC0gMSk7CiAJCXJhLSZndDtzaXplID0gZm9saW9fbnJfcGFnZXM7CiAJCS8qCkBAIC0zMzg5LDcgJiM0MzszMzM0LDcgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQlyYS0mZ3Q7YXN5bmNfc2l6ZSA9IGZvbGlvX25yX3BhZ2VzOwogCQlyYS0mZ3Q7b3JkZXIgPSB0aHBfb3JkZXI7CiAJCXBhZ2VfY2FjaGVfcmFfb3JkZXIoJmFtcDtyYWN0bCwgcmEpOwotCQlyZXR1cm4gZnBpbjsKJiM0MzsJCXJldHVybjsKIAl9CiAKIAlpZiAodm1fZmxhZ3MgJmFtcDsgVk1fRVhFQykgewpAQCAtMzQyNywyOSAmIzQzOzMzNzIsMjQgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQlyYS0mZ3Q7b3JkZXIgPSAwOwogCX0KIAotCWZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTsKIAlyYWN0bC5faW5kZXggPSByYS0mZ3Q7c3RhcnQ7CiAJcGFnZV9jYWNoZV9yYV9vcmRlcigmYW1wO3JhY3RsLCByYSk7Ci0JcmV0dXJuIGZwaW47CiB9CiAKIC8qCi0gKiBBc3luY2hyb25vdXMgcmVhZGFoZWFkIGhhcHBlbnMgd2hlbiB3ZSBmaW5kIHRoZSBwYWdlIGFuZCBQR19yZWFkYWhlYWQsCi0gKiBzbyB3ZSB3YW50IHRvIHBvc3NpYmx5IGV4dGVuZCB0aGUgcmVhZGFoZWFkIGZ1cnRoZXIuICBXZSByZXR1cm4gdGhlIGZpbGUgdGhhdAotICogd2FzIHBpbm5lZCBpZiB3ZSBoYXZlIHRvIGRyb3AgdGhlIG1tYXBfbG9jayBpbiBvcmRlciB0byBkbyBJTy4KJiM0MzsgKiBBc3luY2hyb25vdXMgcmVhZGFoZWFkIGhhcHBlbnMgd2hlbiB3ZSBmaW5kIHRoZSBmb2xpbyBhbmQgaXQgaGFzIHRoZQomIzQzOyAqIHJlYWRhaGVhZCBmbGFnIHNldCBzbyB3ZSB3YW50IHRvIHBvc3NpYmx5IGV4dGVuZCB0aGUgcmVhZGFoZWFkIGZ1cnRoZXIuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsCi0JCQkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyB2b2lkIGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gdm1mLSZndDt2bWEtJmd0O3ZtX2ZpbGU7CiAJc3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhID0gJmFtcDtmaWxlLSZndDtmX3JhOwogCURFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIHJhLCBmaWxlLSZndDtmX21hcHBpbmcsIHZtZi0mZ3Q7cGdvZmYpOwotCXN0cnVjdCBmaWxlICpmcGluID0gTlVMTDsKIAl1bnNpZ25lZCBzaG9ydCBtbWFwX21pc3M7CiAKIAkvKiBJZiB3ZSBkb24mIzM5O3Qgd2FudCBhbnkgcmVhZC1haGVhZCwgZG9uJiMzOTt0IGJvdGhlciAqLwogCWlmICh2bWYtJmd0O3ZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkFORF9SRUFEIHx8ICFyYS0mZ3Q7cmFfcGFnZXMpCi0JCXJldHVybiBmcGluOwomIzQzOwkJcmV0dXJuOwogCiAJLyoKIAkgKiBJZiB0aGUgZm9saW8gaXMgbG9ja2VkLCB3ZSYjMzk7cmUgbGlrZWx5IHJhY2luZyBhZ2FpbnN0IGFub3RoZXIgZmF1bHQuCkBAIC0zNDcwLDEwICYjNDM7MzQxMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiAKIAlpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKSB7CiAJCXJhY3RsLl9tYXhfaW5kZXggPSB2bWYtJmd0O3ZtYS0mZ3Q7dm1fcGdvZmYgJiM0Mzsgdm1hX3BhZ2VzKHZtZi0mZ3Q7dm1hKSAtIDE7Ci0JCWZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTsKIAkJcGFnZV9jYWNoZV9hc3luY19yYSgmYW1wO3JhY3RsLCBmb2xpbywgcmEtJmd0O3JhX3BhZ2VzKTsKIAl9Ci0JcmV0dXJuIGZwaW47CiB9CiAKIHN0YXRpYyB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHRfcmVjaGVja19wdGVfbm9uZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKQEAgLTM1MzAsMTUgJiM0MzszNDY4LDkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogICogaXQgaW4gdGhlIHBhZ2UgY2FjaGUsIGFuZCBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2VzIHJlYXNvbmFibHkgd2l0aG91dAogICogaGF2aW5nIGEgbG90IG9mIGR1cGxpY2F0ZWQgY29kZS4KICAqCi0gKiB2bWEtJmd0O3ZtX21tLSZndDttbWFwX2xvY2sgbXVzdCBiZSBoZWxkIG9uIGVudHJ5LgotICoKLSAqIElmIG91ciByZXR1cm4gdmFsdWUgaGFzIFZNX0ZBVUxUX1JFVFJZIHNldCwgaXQmIzM5O3MgYmVjYXVzZSB0aGUgbW1hcF9sb2NrCi0gKiBtYXkgYmUgZHJvcHBlZCBiZWZvcmUgZG9pbmcgSS9PIG9yIGJ5IGxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwKCkuCi0gKgotICogSWYgb3VyIHJldHVybiB2YWx1ZSBkb2VzIG5vdCBoYXZlIFZNX0ZBVUxUX1JFVFJZIHNldCwgdGhlIG1tYXBfbG9jawotICogaGFzIG5vdCBiZWVuIHJlbGVhc2VkLgotICoKLSAqIFdlIG5ldmVyIHJldHVybiB3aXRoIFZNX0ZBVUxUX1JFVFJZIGFuZCBhIGJpdCBmcm9tIFZNX0ZBVUxUX0VSUk9SIHNldC4KJiM0MzsgKiBDb250ZXh0OiBNYXkgc2xlZXAgd2FpdGluZyBmb3IgSS9PLiAgQ2FuIGJlIGludGVycnVwdGVkIGJ5IGZhdGFsCiYjNDM7ICogc2lnbmFscyBpZiBAdm1mIGZsYWdzIHBlcm1pdC4gIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBmYXVsdCBsb2NrCiYjNDM7ICogKGVpdGhlciBtbWFwX2xvY2sgb3IgVk1BIGxvY2spLgogICoKICAqIFJldHVybjogYml0d2lzZS1PUiBvZiAlVk1fRkFVTFRfIGNvZGVzLgogICovCkBAIC0zNTQ2LDcgJiM0MzszNDc4LDYgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewogCWludCBlcnJvcjsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtZi0mZ3Q7dm1hLSZndDt2bV9maWxlOwotCXN0cnVjdCBmaWxlICpmcGluID0gTlVMTDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtJmd0O2ZfbWFwcGluZzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKIAlwZ29mZl90IG1heF9pZHgsIGluZGV4ID0gdm1mLSZndDtwZ29mZjsKQEAgLTM1NjYsMTUgJiM0MzszNDk3LDMxIEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlmb2xpbyA9IGZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4KTsKIAlpZiAobGlrZWx5KCFJU19FUlIoZm9saW8pKSkgewogCQkvKgotCQkgKiBXZSBmb3VuZCB0aGUgcGFnZSwgc28gdHJ5IGFzeW5jIHJlYWRhaGVhZCBiZWZvcmUgd2FpdGluZyBmb3IKLQkJICogdGhlIGxvY2suCiYjNDM7CQkgKiBXZSBmb3VuZCB0aGUgZm9saW8sIHNvIHRyeSBhc3luYyByZWFkYWhlYWQgYmVmb3JlCiYjNDM7CQkgKiB3YWl0aW5nIGZvciB0aGUgbG9jay4KIAkJICovCiAJCWlmICghKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19UUklFRCkpCi0JCQlmcGluID0gZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQodm1mLCBmb2xpbyk7CiYjNDM7CQkJZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQodm1mLCBmb2xpbyk7CiAJCWlmICh1bmxpa2VseSghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpKSB7CiAJCQlmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7CiAJCQltYXBwaW5nX2xvY2tlZCA9IHRydWU7CiAJCX0KJiM0MzsKJiM0MzsJCWlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKJiM0MzsJCQlpZiAodm1mLSZndDtmbGFncyAmYW1wOyBGQVVMVF9GTEFHX0tJTExBQkxFKSB7CiYjNDM7CQkJCWlmIChfX2ZvbGlvX2xvY2tfa2lsbGFibGUoZm9saW8pICZsdDsgMCkKJiM0MzsJCQkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJX19mb2xpb19sb2NrKGZvbGlvKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBEaWQgaXQgZ2V0IHRydW5jYXRlZD8gKi8KJiM0MzsJCWlmICh1bmxpa2VseShmb2xpby0mZ3Q7bWFwcGluZyAhPSBtYXBwaW5nKSkgewomIzQzOwkJCWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CQkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJCQlnb3RvIHJldHJ5X2ZpbmQ7CiYjNDM7CQl9CiAJfSBlbHNlIHsKIAkJcmV0ID0gZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHZtZik7CiAJCWlmICh1bmxpa2VseShyZXQpKQpAQCAtMzU4NCw3ICYjNDM7MzUzMSw3IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAkJY291bnRfdm1fZXZlbnQoUEdNQUpGQVVMVCk7CiAJCWNvdW50X21lbWNnX2V2ZW50X21tKHZtZi0mZ3Q7dm1hLSZndDt2bV9tbSwgUEdNQUpGQVVMVCk7CiAJCXJldCA9IFZNX0ZBVUxUX01BSk9SOwotCQlmcGluID0gZG9fc3luY19tbWFwX3JlYWRhaGVhZCh2bWYpOwomIzQzOwkJZG9fc3luY19tbWFwX3JlYWRhaGVhZCh2bWYpOwogcmV0cnlfZmluZDoKIAkJLyoKIAkJICogU2VlIGNvbW1lbnQgaW4gZmlsZW1hcF9jcmVhdGVfZm9saW8oKSB3aHkgd2UgbmVlZApAQCAtMzU5NSwyNSAmIzQzOzM1NDIsMTMgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQkJbWFwcGluZ19sb2NrZWQgPSB0cnVlOwogCQl9CiAJCWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwKLQkJCQkJICBGR1BfQ1JFQVR8RkdQX0ZPUl9NTUFQLAotCQkJCQkgIHZtZi0mZ3Q7Z2ZwX21hc2spOwomIzQzOwkJCQkJICBGR1BfQ1JFQVQgfCBGR1BfTE9DSywgdm1mLSZndDtnZnBfbWFzayk7CiAJCWlmIChJU19FUlIoZm9saW8pKSB7Ci0JCQlpZiAoZnBpbikKLQkJCQlnb3RvIG91dF9yZXRyeTsKIAkJCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpOwogCQkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKIAkJfQogCX0KIAotCWlmICghbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAodm1mLCBmb2xpbywgJmFtcDtmcGluKSkKLQkJZ290byBvdXRfcmV0cnk7Ci0KLQkvKiBEaWQgaXQgZ2V0IHRydW5jYXRlZD8gKi8KLQlpZiAodW5saWtlbHkoZm9saW8tJmd0O21hcHBpbmcgIT0gbWFwcGluZykpIHsKLQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJZ290byByZXRyeV9maW5kOwotCX0KIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2NvbnRhaW5zKGZvbGlvLCBpbmRleCksIGZvbGlvKTsKIAogCS8qCkBAIC0zNjI1LDcgJiM0MzszNTYwLDcgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQkvKgogCQkgKiBJZiB0aGUgaW52YWxpZGF0ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGUgZm9saW8gd2FzIGluIGNhY2hlCiAJCSAqIGFuZCB1cHRvZGF0ZSBhbmQgbm93IGl0IGlzIG5vdC4gU3RyYW5nZSBidXQgcG9zc2libGUgc2luY2Ugd2UKLQkJICogZGlkbiYjMzk7dCBob2xkIHRoZSBwYWdlIGxvY2sgYWxsIHRoZSB0aW1lLiBMZXQmIzM5O3MgZHJvcAomIzQzOwkJICogZGlkbiYjMzk7dCBob2xkIHRoZSBmb2xpbyBsb2NrIGFsbCB0aGUgdGltZS4gTGV0JiMzOTtzIGRyb3AKIAkJICogZXZlcnl0aGluZywgZ2V0IHRoZSBpbnZhbGlkYXRlIGxvY2sgYW5kIHRyeSBhZ2Fpbi4KIAkJICovCiAJCWlmICghbWFwcGluZ19sb2NrZWQpIHsKQEAgLTM2NDIsMjEgJiM0MzszNTc3LDEyIEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAkJZ290byBwYWdlX25vdF91cHRvZGF0ZTsKIAl9CiAKLQkvKgotCSAqIFdlJiMzOTt2ZSBtYWRlIGl0IHRoaXMgZmFyIGFuZCB3ZSBoYWQgdG8gZHJvcCBvdXIgbW1hcF9sb2NrLCBub3cgaXMgdGhlCi0JICogdGltZSB0byByZXR1cm4gdG8gdGhlIHVwcGVyIGxheWVyIGFuZCBoYXZlIGl0IHJlLWZpbmQgdGhlIHZtYSBhbmQKLQkgKiByZWRvIHRoZSBmYXVsdC4KLQkgKi8KLQlpZiAoZnBpbikgewotCQlmb2xpb191bmxvY2soZm9saW8pOwotCQlnb3RvIG91dF9yZXRyeTsKLQl9CiAJaWYgKG1hcHBpbmdfbG9ja2VkKQogCQlmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTsKIAogCS8qCi0JICogRm91bmQgdGhlIHBhZ2UgYW5kIGhhdmUgYSByZWZlcmVuY2Ugb24gaXQuCi0JICogV2UgbXVzdCByZWNoZWNrIGlfc2l6ZSB1bmRlciBwYWdlIGxvY2suCiYjNDM7CSAqIEZvdW5kIHRoZSBmb2xpbyBhbmQgaGF2ZSBhIHJlZmVyZW5jZSBvbiBpdC4KJiM0MzsJICogV2UgbXVzdCByZWNoZWNrIGlfc2l6ZSB1bmRlciBmb2xpbyBsb2NrLgogCSAqLwogCW1heF9pZHggPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX1NJWkUpOwogCWlmICh1bmxpa2VseShpbmRleCAmZ3Q7PSBtYXhfaWR4KSkgewpAQCAtMzY3NSwxMCAmIzQzOzM2MDEsNyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJICogYmVjYXVzZSB0aGVyZSByZWFsbHkgYXJlbiYjMzk7dCBhbnkgcGVyZm9ybWFuY2UgaXNzdWVzIGhlcmUKIAkgKiBhbmQgd2UgbmVlZCB0byBjaGVjayBmb3IgZXJyb3JzLgogCSAqLwotCWZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTsKIAllcnJvciA9IGZpbGVtYXBfcmVhZF9mb2xpbyhmaWxlLCBtYXBwaW5nLSZndDthX29wcy0mZ3Q7cmVhZF9mb2xpbywgZm9saW8pOwotCWlmIChmcGluKQotCQlnb3RvIG91dF9yZXRyeTsKIAlmb2xpb19wdXQoZm9saW8pOwogCiAJaWYgKCFlcnJvciB8fCBlcnJvciA9PSBBT1BfVFJVTkNBVEVEX1BBR0UpCkBAIC0zNjg2LDIwICYjNDM7MzYwOSw2IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTsKIAogCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7Ci0KLW91dF9yZXRyeToKLQkvKgotCSAqIFdlIGRyb3BwZWQgdGhlIG1tYXBfbG9jaywgd2UgbmVlZCB0byByZXR1cm4gdG8gdGhlIGZhdWx0IGhhbmRsZXIgdG8KLQkgKiByZS1maW5kIHRoZSB2bWEgYW5kIGNvbWUgYmFjayBhbmQgZmluZCBvdXIgaG9wZWZ1bGx5IHN0aWxsIHBvcHVsYXRlZAotCSAqIHBhZ2UuCi0JICovCi0JaWYgKCFJU19FUlIoZm9saW8pKQotCQlmb2xpb19wdXQoZm9saW8pOwotCWlmIChtYXBwaW5nX2xvY2tlZCkKLQkJZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7Ci0JaWYgKGZwaW4pCi0JCWZwdXQoZnBpbik7Ci0JcmV0dXJuIHJldCB8IFZNX0ZBVUxUX1JFVFJZOwogfQogRVhQT1JUX1NZTUJPTChmaWxlbWFwX2ZhdWx0KTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzU1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhZ2UgTWFwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgc29tZSBjb3JlIGZpbGUgbWFwcGluZyBsb2dpYy4gTXkgZmlyc3QgaW1wcmVzc2lvbiBpcyBpdCYjMzk7cyBhaW1pbmcgdG8gc2ltcGxpZnkgaG93IHdlIGhhbmRsZSB0aGUgYG1tYXBgIGxvY2sgaW4gY29uanVuY3Rpb24gd2l0aCBmb2xpbyBsb2NraW5nLCB3aGljaCBpcyBpbnRlcmVzdGluZy4KCkZpcnN0IG9mZiwgaXQmIzM5O3MgYXhpbmcgdGhlIGBGR1BfRk9SX01NQVBgIGZsYWcgZnJvbSBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBhcyB0aGF0IGZsYWcgdXN1YWxseSBhY3RzIGFzIGEgbWFya2VyIGZvciBgbW1hcGAtcmVsYXRlZCBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb24gYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAgaXMgYmVpbmcgdHdlYWtlZCBzbyBpdCB3b24mIzM5O3QgdW5sb2NrIHRoZSBmb2xpbyBpZiB0aGlzIHNwZWNpZmljIGZsYWcgaXNuJiMzOTt0IHByZXNlbnQgYW55bW9yZS4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZSBgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXBgIGZ1bmN0aW9uIGlzIGJlaW5nIHJlbW92ZWQgZW50aXJlbHkuIFRoYXQgc2VlbXMgbGlrZSBhIHByZXR0eSBkaXJlY3Qgc2ltcGxpZmljYXRpb24uCgpJdCYjMzk7cyBhbHNvIGFsdGVyaW5nIHRoZSBzaWduYXR1cmVzIG9mIHRoZSByZWFkYWhlYWQgZnVuY3Rpb25zLCBgZG9fc3luY19tbWFwX3JlYWRhaGVhZGAgYW5kIGBkb19hc3luY19tbWFwX3JlYWRhaGVhZGAuIFRoZXkmIzM5O3JlIG5vdyByZXR1cm5pbmcgYHZvaWRgIGluc3RlYWQgb2YgYHN0cnVjdCBmaWxlICpgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0YWtpbmcgb3V0IHRoZSBgbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvYCBjYWxscyBmcm9tIHRoZW0uIFNvLCBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgZmlsZSBzdHJ1Y3R1cmUsIHRoZXkgYXJlIHBlcmZvcm1pbmcgYSBsb2NraW5nIGZ1bmN0aW9uIG9uIHRoZWlyIG93bi4KCk5vdyB0aGUgYGZpbGVtYXBfZmF1bHRgIGZ1bmN0aW9uIGhhcyBhbHNvIGNoYW5nZWQsIHNvIHRoYXQgaXQgZG9lc24mIzM5O3QgdHJ5IHRvIGRyb3AgYG1tYXBfbG9ja2Agd2hlbiBpdCYjMzk7cyBkZWFsaW5nIHdpdGggSS9PIG9yIGxvY2tpbmcgZm9saW9zLiBUaGUgY2FsbHMgdG8gYG1heWJlX3VubG9ja19tbWFwX2Zvcl9pb2AgYXJlIGdvbmUgaGVyZSB0b28sIHBsdXMgYGxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwYCBpcyByZW1vdmVkLgoKV2FpdCwgc28gaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCBkZWZpbml0ZWx5IGxvb2tzIGxpa2UgYSBjaGFuZ2UgaW4gdGhlIGxvY2tpbmcgbW9kZWwgZm9yIHBhZ2UgZmF1bHRzIGFuZCByZWFkYWhlYWQuIEl0JiMzOTtzIG5vIGxvbmdlciByZWxlYXNpbmcgdGhlIGZhdWx0IGxvY2sgZHVyaW5nIEkvTyBvciBmb2xpbyBsb2NraW5nLCB3aGljaCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBvbiBjb25jdXJyZW5jeS4KCk9rYXksIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG1heWJlX3VubG9ja19tbWFwX2Zvcl9pb2AgaXMgc3RpbGwgdXRpbGl6ZWQgaW4gb3RoZXIgYXJlYXMgb2YgdGhlIGNvZGUgYmFzZS4gSSBuZWVkIHRvIGdyZXAgZm9yIGl0LiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhpcyBpc24mIzM5O3QgZ29pbmcgdG8gYnJlYWsgc29tZXRoaW5nIGVsc2UuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXliZV91bmxvY2tfbW1hcF9mb3JfaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD0xMjU4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzc19lbmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuLS1cbm1tL2ludGVybmFsLmgtMTI3NS1cbm1tL2ludGVybmFsLmg6MTI3NjpzdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlICptYXliZV91bmxvY2tfbW1hcF9mb3JfaW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG5tbS9pbnRlcm5hbC5oLTEyNzctXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBmaWxlICpmcGluKVxuLS1cbm1tL21lbW9yeS5jPTM3MDY9c3RhdGljIHZtX2ZhdWx0X3QgZmF1bHRfZGlydHlfc2hhcmVkX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtMzczOS1cbm1tL21lbW9yeS5jOjM3NDA6XHRcdGZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBOVUxMKTtcbm1tL21lbW9yeS5jLTM3NDEtXHRcdGJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWQobWFwcGluZyk7XG4tLVxubW0vc2htZW0uYz0yNjQzPXN0YXRpYyB2bV9mYXVsdF90IHNobWVtX2ZhbGxvY193YWl0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbm1tL3NobWVtLmMtMjY1OC1cdFx0cmV0ID0gVk1fRkFVTFRfTk9QQUdFO1xubW0vc2htZW0uYzoyNjU5Olx0XHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgTlVMTCk7XG5tbS9zaG1lbS5jLTI2NjAtXHRcdHNobWVtX2ZhbGxvY193YWl0cSA9IHNobWVtX2ZhbGxvYy1cdTAwM2V3YWl0cTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTUyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1heWJlX3VubG9ja19tbWFwX2Zvcl9pb2AgUmVtb3ZhbCBpbiBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG5vdGljaW5nIGEgc2lnbmlmaWNhbnQgY2hhbmdlOiB0aGUgcmVtb3ZhbCBvZiBgbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvYCB3aXRoaW4gYGZpbGVtYXBfZmF1bHRgLiAgVGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgaG93IHBhZ2UgZmF1bHRzIGFyZSBoYW5kbGVkLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNoYW5nZS4gSXQmIzM5O3MgZGVmaW5pdGVseSBnb2luZyB0byBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBwaW5wb2ludCBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIGZvY3VzZWQgZnV6emluZy4gSSB3YXMgdGhpbmtpbmcgb2YgaW5jbHVkaW5nIGZ1bmN0aW9ucyBsaWtlIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgLCBgZG9fc3luY19tbWFwX3JlYWRhaGVhZGAsIGBkb19hc3luY19tbWFwX3JlYWRhaGVhZGAsIGFuZCwgb2YgY291cnNlLCBgZmlsZW1hcF9mYXVsdGAgaXRzZWxmLiBCdXQgdGhlbiwgSSBoYWQgdG8gc3RvcCBhbmQgcmUtcmVhZCB0aGUgcHJvbXB0LiBJdCBleHBsaWNpdGx5IHN0YXRlcyB0byAqYXZvaWQqIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCB0ZXN0IGRpc3RyaWJ1dGlvbiBza2V3aW5nLgoKYGZpbGVtYXBfZmF1bHRgIGlzICpkZWZpbml0ZWx5KiBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb247IGl0JiMzOTtzIHByYWN0aWNhbGx5IHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBmaWxlLWJhY2tlZCBwYWdlIGZhdWx0cywgd2hpY2ggYXJlIGluY3JlZGlibHkgY29tbW9uLiBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCwgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgLCBhbmQgYGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkYCBhcmUgYWxzbyBob3QuICBTbywgYmFzZWQgb24gdGhhdCBkaXJlY3RpdmUsIEkgc2hvdWxkIHByb2JhYmx5IGxlYXZlIHRoZSBgRm9jdXNTeW1ib2xzYCBlbnRyeSBlbXB0eS4gSXQmIzM5O3MgYSB0cmlja3kgYmFsYW5jZSBiZXR3ZWVuIGZvY3VzaW5nIG9uIHRoZSBjaGFuZ2UgYW5kIGF2b2lkaW5nIG92ZXJseSBnZW5lcmljIHRhcmdldHMuCgpCdXQgdGhlbiBJIHRvb2sgYSBjbG9zZXIgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBJIHJlYWxpemVkIHRoZSByZWFsIGZ1bmN0aW9uYWwgc2hpZnQgaXMgdGhhdCBpdCByZW1vdmVzIHRoZSBkcm9wcGluZyBvZiB0aGUgYG1tYXBfbG9ja2Agd2l0aGluIGBmaWxlbWFwX2ZhdWx0YC4gVGhpcyBoYXMgYSBzaWduaWZpY2FudCBpbXBhY3Q7IGlmIGBtbWFwX2xvY2tgIGlzbiYjMzk7dCBkcm9wcGVkLCBpdCBtZWFucyBgZmlsZW1hcF9mYXVsdGAgKnByb2JhYmx5KiBkb2VzbiYjMzk7dCByZXR1cm4gYFZNX0ZBVUxUX1JFVFJZYCBhbnltb3JlIChleGNlcHQgZnJvbSBgZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lYCwgYnV0IHRoYXQgZnVuY3Rpb24gcmV0dXJucyBgVk1fRkFVTFRfTk9QQUdFYCBvciBgMGApLiAgSSBzaG91bGQgY2hlY2sgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgYGZpbGVtYXBfZmF1bHRgIHRvIGJlIGNlcnRhaW4uIFRoZSByZW1vdmFsIG9mIHRoaXMgcmV0dXJuIGNvdWxkIGhhdmUgaW1wb3J0YW50IGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Vk1fRkFVTFRfUkVUUlkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9maWxlbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jPTE3NTQ9dm1fZmF1bHRfdCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vZmlsZW1hcC5jLTE3NjAtXHRcdCAqIENBVVRJT04hIEluIHRoaXMgY2FzZSwgbW1hcF9sb2NrL3Blci1WTUEgbG9jayBpcyBub3Rcbm1tL2ZpbGVtYXAuYzoxNzYxOlx0XHQgKiByZWxlYXNlZCBldmVuIHRob3VnaCByZXR1cm5pbmcgVk1fRkFVTFRfUkVUUlkuXG5tbS9maWxlbWFwLmMtMTc2Mi1cdFx0ICovXG5tbS9maWxlbWFwLmMtMTc2My1cdFx0aWYgKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVClcbm1tL2ZpbGVtYXAuYzoxNzY0Olx0XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbm1tL2ZpbGVtYXAuYy0xNzY1LVxuLS1cbm1tL2ZpbGVtYXAuYy0xNzcwLVx0XHRcdGZvbGlvX3dhaXRfbG9ja2VkKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYzoxNzcxOlx0XHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XG5tbS9maWxlbWFwLmMtMTc3Mi1cdH1cbi0tXG5tbS9maWxlbWFwLmMtMTc3OC1cdFx0XHRyZWxlYXNlX2ZhdWx0X2xvY2sodm1mKTtcbm1tL2ZpbGVtYXAuYzoxNzc5Olx0XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbm1tL2ZpbGVtYXAuYy0xNzgwLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCB0aGUgc3lzdGVtIGlzIHN0aWxsIHJldHVybmluZyBgVk1fRkFVTFRfUkVUUllgIGZyb20gYF9fZm9saW9fbG9ja19vcl9yZXRyeWAuIFRoYXQmIzM5O3MuLi4gaW50ZXJlc3RpbmcuIE5vdywgd2hlcmUgaXMgYF9fZm9saW9fbG9ja19vcl9yZXRyeWAgZGVmaW5lZD8gQWgsIHJpZ2h0LCBpdCYjMzk7cyBpbiBgbW0vZmlsZW1hcC5jYC4gSG1tLCBkb2VzIGBmaWxlbWFwX2ZhdWx0YCB1c2UgdGhhdD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIGdyYXBoLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBmYXVsdCBoYW5kbGluZyBwYXRoIGlzIGdvaW5nIHRocm91Z2ggdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19mb2xpb19sb2NrX29yX3JldHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYz0xNzE3PXN0YXRpYyBpbnQgX19mb2xpb19sb2NrX2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB3YWl0X3BhZ2VfcXVldWUgKndhaXQpXG4tLVxubW0vZmlsZW1hcC5jLTE3NTMtICovXG5tbS9maWxlbWFwLmM6MTc1NDp2bV9mYXVsdF90IF9fZm9saW9fbG9ja19vcl9yZXRyeShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL2ZpbGVtYXAuYy0xNzU1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAyNAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgX19mb2xpb19sb2NrX29yX3JldHJ5YCBpbiB0aGUgQ29udGV4dCBvZiBgZmlsZW1hcF9mYXVsdGAqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgX19mb2xpb19sb2NrX29yX3JldHJ5YCBwbGF5ZWQgYSBrZXkgcm9sZSB3aXRoaW4gYGZpbGVtYXBfZmF1bHRgLCBidXQgc29tZXRoaW5nJiMzOTtzIG5vdCBxdWl0ZSBjbGlja2luZy4gTXkgaW50ZXJuYWwgbW9kZWwgaXMgdGVsbGluZyBtZSB0aGF0IHRoaXMgc2hvdWxkIGJlIHVzZWQgdGhlcmUuIFRvIGJlIHN1cmUsIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHVzYWdlLiBMZXQgbWUgcXVpY2tseSB0cmFjZSB3aGVyZSBgX19mb2xpb19sb2NrX29yX3JldHJ5YCBpcyBhY3R1YWxseSBlbXBsb3llZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBteSBtZW50YWwgcGljdHVyZSBvZiB0aGUgc3luY2hyb25pemF0aW9uIGZsb3cgaXMgYWNjdXJhdGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsb2NrIGFjcXVpc2l0aW9uIHN0cmF0ZWd5LiBJcyBpdCB1c2VkPyBJZiBub3QsIHdoZXJlIGlzIHRoYXQgZnVuY3Rpb24gYWN0dWFsbHkgbmVlZGVkPyBJIG5lZWQgdG8gcmVjb25jaWxlIHRoaXMgZGlzY3JlcGFuY3kgaW4gbXkga25vd2xlZGdlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX2xvY2tfb3JfcmV0cnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTA5OT1pbnQgX19mb2xpb19sb2NrX2tpbGxhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTEwMDp2bV9mYXVsdF90IF9fZm9saW9fbG9ja19vcl9yZXRyeShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xMTAxLXZvaWQgdW5sb2NrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTExODk9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbG9ja19raWxsYWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTEyMDEtICogUmV0dXJuIHZhbHVlIGFuZCBtbWFwX2xvY2sgaW1wbGljYXRpb25zIGRlcGVuZCBvbiBmbGFnczsgc2VlXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxMjAyOiAqIF9fZm9saW9fbG9ja19vcl9yZXRyeSgpLlxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTIwMy0gKi9cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTEyMDQ9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IGZvbGlvX2xvY2tfb3JfcmV0cnkoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xMjA4LVx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjEyMDk6XHRcdHJldHVybiBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoZm9saW8sIHZtZik7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xMjEwLVx0cmV0dXJuIDA7XG4tLVxubW0vZmlsZW1hcC5jPTE3MTc9c3RhdGljIGludCBfX2ZvbGlvX2xvY2tfYXN5bmMoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHdhaXRfcGFnZV9xdWV1ZSAqd2FpdClcbi0tXG5tbS9maWxlbWFwLmMtMTc1My0gKi9cbm1tL2ZpbGVtYXAuYzoxNzU0OnZtX2ZhdWx0X3QgX19mb2xpb19sb2NrX29yX3JldHJ5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxubW0vZmlsZW1hcC5jLTE3NTUte1xuLS1cbm1tL21lbW9yeS5jPTUyODc9c3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTM5NS0gKiBmbGFncyBhbmQgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VmYXVsdCgpIHJldHVybiB2YWx1ZS5cbm1tL21lbW9yeS5jOjUzOTY6ICogU2VlIGZpbGVtYXBfZmF1bHQoKSBhbmQgX19mb2xpb19sb2NrX29yX3JldHJ5KCkuXG5tbS9tZW1vcnkuYy01Mzk3LSAqL1xuLS1cbm1tL21lbW9yeS5jPTU5MTQ9c3RhdGljIHZtX2ZhdWx0X3QgZG9fc2hhcmVkX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTU5NTktICogVGhlIGxvY2sgbWF5IGhhdmUgYmVlbiByZWxlYXNlZCBkZXBlbmRpbmcgb24gZmxhZ3MgYW5kIG91clxubW0vbWVtb3J5LmM6NTk2MDogKiByZXR1cm4gdmFsdWUuICBTZWUgZmlsZW1hcF9mYXVsdCgpIGFuZCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoKS5cbm1tL21lbW9yeS5jLTU5NjEtICogSWYgdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHZtYSBtYXkgYmVjb21lIGludmFsaWQgKGZvciBleGFtcGxlXG4tLVxubW0vbWVtb3J5LmM9NjI5OD1zdGF0aWMgdm9pZCBmaXhfc3B1cmlvdXNfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vbWVtb3J5LmMtNjMzMi0gKiBhbmQgb3VyIHJldHVybiB2YWx1ZS5cbm1tL21lbW9yeS5jOjYzMzM6ICogU2VlIGZpbGVtYXBfZmF1bHQoKSBhbmQgX19mb2xpb19sb2NrX29yX3JldHJ5KCkuXG5tbS9tZW1vcnkuYy02MzM0LSAqL1xubW0vbWVtb3J5LmM9NjMzNT1zdGF0aWMgdm1fZmF1bHRfdCBoYW5kbGVfcHRlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTY0MTQtICogdGhlIHJlc3VsdCwgdGhlIGxvY2sgaXMgbm90IGhlbGQgb24gZXhpdC4gIFNlZSBmaWxlbWFwX2ZhdWx0KClcbm1tL21lbW9yeS5jOjY0MTU6ICogYW5kIF9fZm9saW9fbG9ja19vcl9yZXRyeSgpLlxubW0vbWVtb3J5LmMtNjQxNi0gKi9cbi0tXG5tbS9tZW1vcnkuYz02NjA5PXN0YXRpYyB2bV9mYXVsdF90IHNhbml0aXplX2ZhdWx0X2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTY2NDgtICogVGhlIGxvY2sgbWF5IGhhdmUgYmVlbiByZWxlYXNlZCBkZXBlbmRpbmcgb24gZmxhZ3MgYW5kIG91clxubW0vbWVtb3J5LmM6NjY0OTogKiByZXR1cm4gdmFsdWUuICBTZWUgZmlsZW1hcF9mYXVsdCgpIGFuZCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoKS5cbm1tL21lbW9yeS5jLTY2NTAtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9ja2luZyBDaGFuZ2VzIGluIGBmaWxlbWFwX2ZhdWx0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBmb2xpb19sb2NrX29yX3JldHJ5YCBpcyB1c2VkLCBzcGVjaWZpY2FsbHkgaW4gYG1tL21lbW9yeS5jYCwgYW5kIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGF3YXkgZnJvbSBgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXBgIGluIGBmaWxlbWFwX2ZhdWx0YC4gUHJldmlvdXNseSwgdGhhdCBmdW5jdGlvbiBoYWQgdGhlIHRhc2sgb2YgZHJvcHBpbmcgdGhlIG1tYXAgbG9jay4gTm93LCBpbnN0ZWFkLCBgZmlsZW1hcF9mYXVsdGAgZGlyZWN0bHkgY2FsbHMgYGZvbGlvX3RyeWxvY2tgLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2FpdCBhIG1pbnV0ZSEgSWYgYGZpbGVtYXBfZmF1bHRgICpkb2VzbiYjMzk7dCogZHJvcCB0aGUgbW1hcCBsb2NrLCBpdCYjMzk7cyBibG9ja2luZyBvbiB0aGUgZm9saW8gbG9jayB3aGlsZSAqc3RpbGwqIGhvbGRpbmcgdGhlIG1tYXAgbG9jayEgVGhhdCYjMzk7cyBhIG1hc3NpdmUgc2hpZnQgaW4gdGhlIGxvY2tpbmcgc2VtYW50aWNzIG9mIGBmaWxlbWFwX2ZhdWx0YC4mIzM0OyBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0JiMzOTtzIGdvaW5nIHRvIGhhdmUgYWxsIHNvcnRzIG9mIGNvbnNlcXVlbmNlcy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBmdW5kYW1lbnRhbCBkaWZmZXJlbmNlIGluIGhvdyB0aGlzIGZ1bmN0aW9uIGJlaGF2ZXMgdW5kZXIgY29udGVudGlvbi4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgLiBJZiBgZmlsZW1hcF9mYXVsdGAgZG9lc24mIzM5O3QgcmV0dXJuIGBWTV9GQVVMVF9SRVRSWWAgd2hlbiBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgIGlzIHNldCwgaXQgd2lsbCAqYmxvY2sqLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGZvciBhIG1vbWVudC4gSSBrbm93IGBmaWxlbWFwX2ZhdWx0YCBpcyBjYWxsZWQgZnJvbSBgZG9fZmF1bHRgLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgZmlsZW1hcF9mYXVsdGAgbm93IGhhbmRsZXMgYEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUYCBiZWNhdXNlIEkgc3VzcGVjdCBhIHByb2JsZW0gaGVyZS4KCk9rYXksIGxldCBtZSBjaGVjayB0aGUgY29kZSBhZ2Fpbi4uLiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgYSBkZWRpY2F0ZWQgY2hlY2sgZm9yIGBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVGAgYW55bW9yZSEgVGhpcyByZWluZm9yY2VzIG15IGNvbmNlcm5zLgoKV2FpdCwgYGZpbGVtYXBfZ2V0X2ZvbGlvYCB1c2VzIGBGR1BfTk9XQUlUYCBpZiBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgIGlzIHNldC4gT2theSwgbGV0IG1lIGdvIHRocm91Z2ggYGZpbGVtYXBfZmF1bHRgIGFnYWluLCBpbiBsaWdodCBvZiB0aGlzIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkFVTFRfRkxBR19SRVRSWV9OT1dBSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9maWxlbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jPTE3MTc9c3RhdGljIGludCBfX2ZvbGlvX2xvY2tfYXN5bmMoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHdhaXRfcGFnZV9xdWV1ZSAqd2FpdClcbi0tXG5tbS9maWxlbWFwLmMtMTc0OC0gKiAgICAgdm1hX2VuZF9yZWFkKCkpLCB1bmxlc3MgZmxhZ3MgaGFkIGJvdGggRkFVTFRfRkxBR19BTExPV19SRVRSWSBhbmRcbm1tL2ZpbGVtYXAuYzoxNzQ5OiAqICAgICBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVCBzZXQsIGluIHdoaWNoIGNhc2UgdGhlIGxvY2sgaXMgc3RpbGwgaGVsZC5cbm1tL2ZpbGVtYXAuYy0xNzUwLSAqXG4tLVxubW0vZmlsZW1hcC5jPTE3NTQ9dm1fZmF1bHRfdCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vZmlsZW1hcC5jLTE3NjItXHRcdCAqL1xubW0vZmlsZW1hcC5jOjE3NjM6XHRcdGlmIChmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpXG5tbS9maWxlbWFwLmMtMTc2NC1cdFx0XHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzI2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTI2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBgZmlsZW1hcF9mYXVsdGAgTG9ja2luZyBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLiBgZmlsZW1hcF9mYXVsdGAgdXNlZCB0byBoYW5kbGUgYEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUYCB1c2luZyBgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXBgLiBUaGUgbG9naWMgd2FzLCBpZiB0aGUgZm9saW8gY291bGRuJiMzOTt0IGJlIGxvY2tlZCwgaXQgd291bGQgY29uZGl0aW9uYWxseSByZXR1cm4gMCBhbmQgdGhlbiByZXRyeS4gVGhpcyB3YXMgdG8gYWxsb3cgdGhlIGZhdWx0IGhhbmRsZXIgdG8gcmV0cnkgYSBmYXVsdCB3aXRob3V0IGJsb2NraW5nIHdoZW4gYEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUYCB3YXMgc2V0LiBOb3csIGl0IGxvb2tzIGxpa2UgYF9fZmlsZW1hcF9nZXRfZm9saW9gICphbHdheXMqIHRyaWVzIHRvIGxvY2sgdGhlIGZvbGlvIHdpdGggYEZHUF9MT0NLYC4gSG1tLCBhbmQgdGhhdCBtZWFucyBpZiB0aGUgZm9saW8gaXMgdW5hdmFpbGFibGUsIGl0IHdpbGwgZGlyZWN0bHkgYmxvY2sgdGhlIHByb2Nlc3MuCgpUaGUgb2xkIGNvZGUgd291bGQgcmV0cnkgd2l0aCBWTV9GQVVMVF9SRVRSWSB3aGljaCBpcyBkZXNpZ25lZCBmb3IgdGhpcyBjYXNlIQoKTm93LCB0aGUgY29kZSAqZGlyZWN0bHkqIGNhbGxzIGBfX2ZvbGlvX2xvY2tgIG9yIGBfX2ZvbGlvX2xvY2tfa2lsbGFibGVgLiAgSWYgYEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUYCBpcyBzZXQsIHRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhcyBpdCB3aWxsICpibG9jayogaW5zdGVhZCBvZiByZXR1cm5pbmcuIFRoaXMgaXMgYSBwb3RlbnRpYWwgcmVncmVzc2lvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBpbnRlbnRpb25hbCBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSBnb2luZyBvbi4KClNpbmNlIHRoZSBvcmlnaW5hbCBsb2dpYyBoYXMgYmVlbiBtb2RpZmllZCBhbmQgaXQgaXMgY2hhbmdpbmcgdGhlIGJlaGF2aW9yLCB0aGlzIG5lZWRzIGZ1enppbmchCgpJIHNlZSBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCBoYXMgYWxzbyBiZWVuIG1vZGlmaWVkLiBBbmQgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgIGFuZCBgZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWRgIHdoaWNoIGFyZSB1c2VkIHdpdGggTU1VIGNvbmZpZy4KClRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzbyBJIGRvbiYjMzk7dCBzZWUgYW55IHNwZWNpYWwgY29uZmlncyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZC4gYENPTkZJR19NTVVgIGlzIHJlcXVpcmVkLCBidXQgdGhhdCBpcyBiYXNpY2FsbHkgYWx3YXlzIGVuYWJsZWQuIGBDT05GSUdfTlVNQWAgY291bGQgYmUgbmVlZGVkLCBzaW5jZSBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCBpcyBhbHNvIG1vZGlmaWVkLgoKYGZpbGVtYXBfZmF1bHRgIGFuZCBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCwgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgIGFuZCBgZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWRgIGFyZSBkZWZpbml0ZWx5IGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gSSBzaG91bGRuJiMzOTt0IGxpc3QgdGhlbSBpbiBgRm9jdXNTeW1ib2xzYC4gVGhleSBnZXQgY2FsbGVkIG9uIGV2ZXJ5IHBhZ2UgZmF1bHQsIG1lYW5pbmcgdGhleSBhcmUgYSBiYWQgY2hvaWNlIGZvciBiZWluZyBhZGRlZCB0byBgRm9jdXNTeW1ib2xzYC4KClRoZXJlZm9yZSwgbXkgc3VtbWFyeSBpczoKCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlCiogICAqKkZvY3VzU3ltYm9scyoqOiBcWyBdCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogXFsgXQoqICAgKipSZWFzb25pbmcqKjogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBgZmlsZW1hcF9mYXVsdGAsIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgLCBgZG9fc3luY19tbWFwX3JlYWRhaGVhZGAgYW5kIGBkb19hc3luY19tbWFwX3JlYWRhaGVhZGAsIGNoYW5naW5nIGhvdyB0aGUgZm9saW8gbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVtb3ZpbmcgdGhlIGRyb3BwaW5nIG9mIHRoZSBtbWFwIGxvY2sgZHVyaW5nIEkvTyBhbmQgZm9saW8gbG9ja2luZy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19maWxlbWFwX2dldF9mb2xpb19tcG9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYz0xODk0PXZvaWQgKmZpbGVtYXBfZ2V0X2VudHJ5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4KVxuLS1cbm1tL2ZpbGVtYXAuYy0xOTI1LS8qKlxubW0vZmlsZW1hcC5jOjE5MjY6ICogX19maWxlbWFwX2dldF9mb2xpb19tcG9sIC0gRmluZCBhbmQgZ2V0IGEgcmVmZXJlbmNlIHRvIGEgZm9saW8uXG5tbS9maWxlbWFwLmMtMTkyNy0gKiBAbWFwcGluZzogVGhlIGFkZHJlc3Nfc3BhY2UgdG8gc2VhcmNoLlxuLS1cbm1tL2ZpbGVtYXAuYy0xOTQxLSAqL1xubW0vZmlsZW1hcC5jOjE5NDI6c3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5tbS9maWxlbWFwLmMtMTk0My1cdFx0cGdvZmZfdCBpbmRleCwgZmdmX3QgZmdwX2ZsYWdzLCBnZnBfdCBnZnAsIHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcbi0tXG5tbS9maWxlbWFwLmMtMjA2NC19XG5tbS9maWxlbWFwLmM6MjA2NTpFWFBPUlRfU1lNQk9MKF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCk7XG5tbS9maWxlbWFwLmMtMjA2Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTUKCQkJCQkJCW91dHB1dDogOTIKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gaWRlbnRpZnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHNvbWUgbW9kaWZpZWQgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjaGVjayBmb3IgYENPTkZJR19OVU1BYCwgYXMgaXQgb2Z0ZW4gc3VyZmFjZXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dHMuIEhvd2V2ZXIsIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IGlzICpub3QqIGdhdGVkIGJ5IHRoYXQgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGFsd2F5cyBjb21waWxlZCBpbi4gVGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIHF1aWNrbHkuCgpUaGVuLCBJIHJlLXJlYWQgdGhlIGluc3RydWN0aW9uczogSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBjb25maWdzIHRoYXQgYXJlIGFsbW9zdCBhbHdheXMgZW5hYmxlZC4gSXQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIG9ubHkgbGlzdGluZyB0aG9zZSAqZGlyZWN0bHkqIHJlbGF0ZWQgdG8gdGhlIG1vZGlmaWVkIGNvZGUuIFNpbmNlIEkmIzM5O20gbm90IHNlZWluZyBhbnkgc3VjaCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBpbiBwbGF5LCB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGVudW1lcmF0ZSBhbnl0aGluZy4gSXQmIzM5O3MgYSBjYXNlIG9mIGZpbmRpbmcgKm5vdGhpbmcqIHJlbGV2YW50LiBTbywgdGhlIHJpZ2h0IGFjdGlvbiBoZXJlIGlzIHRvIHJldHVybiBhbiBlbXB0eSBsaXN0IG9mIGNvbmZpZ3MuIE1ha2VzIHNlbnNlLgoKSSYjMzk7bGwgbm93IHRyaWdnZXIgdGhlIGBzZXQtcmVzdWx0c2AgYWN0aW9uLCBzaW5jZSB0aGUgYW5hbHlzaXMgaXMgY29tcGxldGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBmaWxlbWFwX2ZhdWx0IGFuZCBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wsIGNoYW5naW5nIGhvdyB0aGUgZm9saW8gbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVtb3ZpbmcgdGhlIGRyb3BwaW5nIG9mIHRoZSBtbWFwIGxvY2sgZHVyaW5nIEkvTyBhbmQgZm9saW8gbG9ja2luZy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gZmlsZW1hcF9mYXVsdCBhbmQgX19maWxlbWFwX2dldF9mb2xpb19tcG9sLCBjaGFuZ2luZyBob3cgdGhlIGZvbGlvIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbW92aW5nIHRoZSBkcm9wcGluZyBvZiB0aGUgbW1hcCBsb2NrIGR1cmluZyBJL08gYW5kIGZvbGlvIGxvY2tpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDg6MzMuOTY0NTE4MTc1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MjA4OTQ4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gZmlsZW1hcF9mYXVsdCBhbmQgX19maWxlbWFwX2dldF9mb2xpb19tcG9sLCBjaGFuZ2luZyBob3cgdGhlIGZvbGlvIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbW92aW5nIHRoZSBkcm9wcGluZyBvZiB0aGUgbW1hcCBsb2NrIGR1cmluZyBJL08gYW5kIGZvbGlvIGxvY2tpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOTo0ODozMy45NjQ1NDAxNDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NDM1NDk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhNzZjNTlmODRmN2FlMjRhNTQxZjA1OTNlNjllOWQ1OTU5OWU2N2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMTk6NDg6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbmluZGV4IDFmNTA5OTFiNDNlM2IzLi5lNmFjMjIxZWU1NGQ4YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuQEAgLTY5NSw5ICs2OTUsNiBAQCBwZ29mZl90IHBhZ2VfY2FjaGVfcHJldl9taXNzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiAgKiAqICVGR1BfQ1JFQVQgLSBJZiBubyBmb2xpbyBpcyBwcmVzZW50IHRoZW4gYSBuZXcgZm9saW8gaXMgYWxsb2NhdGVkLFxcbiAgKiAgIGFkZGVkIHRvIHRoZSBwYWdlIGNhY2hlIGFuZCB0aGUgVk0ncyBMUlUgbGlzdC4gIFRoZSBmb2xpbyBpc1xcbiAgKiAgIHJldHVybmVkIGxvY2tlZC5cXG4tICogKiAlRkdQX0ZPUl9NTUFQIC0gVGhlIGNhbGxlciB3YW50cyB0byBkbyBpdHMgb3duIGxvY2tpbmcgZGFuY2UgaWYgdGhlXFxuLSAqICAgZm9saW8gaXMgYWxyZWFkeSBpbiBjYWNoZS4gIElmIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLCB1bmxvY2sgaXRcXG4tICogICBiZWZvcmUgcmV0dXJuaW5nIHNvIHRoZSBjYWxsZXIgY2FuIGRvIHRoZSBzYW1lIGRhbmNlLlxcbiAgKiAqICVGR1BfV1JJVEUgLSBUaGUgZm9saW8gd2lsbCBiZSB3cml0dGVuIHRvIGJ5IHRoZSBjYWxsZXIuXFxuICAqICogJUZHUF9OT0ZTIC0gX19HRlBfRlMgd2lsbCBnZXQgY2xlYXJlZCBpbiBnZnAuXFxuICAqICogJUZHUF9OT1dBSVQgLSBEb24ndCBibG9jayBvbiB0aGUgZm9saW8gbG9jay5cXG5AQCAtNzE0LDkgKzcxMSw4IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBmZ2ZfdDtcXG4gI2RlZmluZSBGR1BfV1JJVEVcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwOClcXG4gI2RlZmluZSBGR1BfTk9GU1xcdFxcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxcbiAjZGVmaW5lIEZHUF9OT1dBSVRcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcXG4tI2RlZmluZSBGR1BfRk9SX01NQVBcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcXG4tI2RlZmluZSBGR1BfU1RBQkxFXFx0XFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXFxuLSNkZWZpbmUgRkdQX0RPTlRDQUNIRVxcdFxcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKVxcbisjZGVmaW5lIEZHUF9TVEFCTEVcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcXG4rI2RlZmluZSBGR1BfRE9OVENBQ0hFXFx0XFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXFxuICNkZWZpbmUgRkdGX0dFVF9PUkRFUihmZ2YpXFx0KCgoX19mb3JjZSB1bnNpZ25lZClmZ2YpIFxcdTAwM2VcXHUwMDNlIDI2KVxcdC8qIHRvcCA2IGJpdHMgKi9cXG4gXFxuICNkZWZpbmUgRkdQX1dSSVRFQkVHSU5cXHRcXHQoRkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfU1RBQkxFKVxcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcXG5pbmRleCA3ZTQ2N2M4MWQyMTM4OS4uMTNhODYxYjM4NjIxZmYgMTAwNjQ0XFxuLS0tIGEvbW0vZmlsZW1hcC5jXFxuKysrIGIvbW0vZmlsZW1hcC5jXFxuQEAgLTE5OTUsNyArMTk5NSw3IEBAIHN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHRnZnAgXFx1MDAyNj0gfkdGUF9LRVJORUw7XFxuIFxcdFxcdFxcdGdmcCB8PSBHRlBfTk9XQUlUO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UoIShmZ3BfZmxhZ3MgXFx1MDAyNiAoRkdQX0xPQ0sgfCBGR1BfRk9SX01NQVApKSkpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0UoIShmZ3BfZmxhZ3MgXFx1MDAyNiBGR1BfTE9DSykpKVxcbiBcXHRcXHRcXHRmZ3BfZmxhZ3MgfD0gRkdQX0xPQ0s7XFxuIFxcbiBcXHRcXHRpZiAob3JkZXIgXFx1MDAzZSBtYXBwaW5nX21heF9mb2xpb19vcmRlcihtYXBwaW5nKSlcXG5AQCAtMjA0MiwxMiArMjA0Miw2IEBAIHN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIGZpbGVtYXBfYWRkX2ZvbGlvIGxvY2tzIHRoZSBwYWdlLCBhbmQgZm9yIG1tYXBcXG4tXFx0XFx0ICogd2UgZXhwZWN0IGFuIHVubG9ja2VkIHBhZ2UuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZm9saW8gXFx1MDAyNlxcdTAwMjYgKGZncF9mbGFncyBcXHUwMDI2IEZHUF9GT1JfTU1BUCkpXFxuLVxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghZm9saW8pXFxuQEAgLTMyNTksNTIgKzMyNTMsNiBAQCBsb2ZmX3QgbWFwcGluZ19zZWVrX2hvbGVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHN0YXJ0LFxcbiBcXG4gI2lmZGVmIENPTkZJR19NTVVcXG4gI2RlZmluZSBNTUFQX0xPVFNBTUlTUyAgKDEwMClcXG4tLypcXG4tICogbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAgLSBsb2NrIHRoZSBwYWdlLCBwb3NzaWJseSBkcm9wcGluZyB0aGUgbW1hcF9sb2NrXFxuLSAqIEB2bWYgLSB0aGUgdm1fZmF1bHQgZm9yIHRoaXMgZmF1bHQuXFxuLSAqIEBmb2xpbyAtIHRoZSBmb2xpbyB0byBsb2NrLlxcbi0gKiBAZnBpbiAtIHRoZSBwb2ludGVyIHRvIHRoZSBmaWxlIHdlIG1heSBwaW4gKG9yIGlzIGFscmVhZHkgcGlubmVkKS5cXG4tICpcXG4tICogVGhpcyB3b3JrcyBzaW1pbGFyIHRvIGxvY2tfZm9saW9fb3JfcmV0cnkgaW4gdGhhdCBpdCBjYW4gZHJvcCB0aGVcXG4tICogbW1hcF9sb2NrLiAgSXQgZGlmZmVycyBpbiB0aGF0IGl0IGFjdHVhbGx5IHJldHVybnMgdGhlIGZvbGlvIGxvY2tlZFxcbi0gKiBpZiBpdCByZXR1cm5zIDEgYW5kIDAgaWYgaXQgY291bGRuJ3QgbG9jayB0aGUgZm9saW8uICBJZiB3ZSBkaWQgaGF2ZVxcbi0gKiB0byBkcm9wIHRoZSBtbWFwX2xvY2sgdGhlbiBmcGluIHdpbGwgcG9pbnQgdG8gdGhlIHBpbm5lZCBmaWxlIGFuZFxcbi0gKiBuZWVkcyB0byBiZSBmcHV0KCknZWQgYXQgYSBsYXRlciBwb2ludC5cXG4tICovXFxuLXN0YXRpYyBpbnQgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZpbGUgKipmcGluKVxcbi17XFxuLVxcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSlcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBOT1RFISBUaGlzIHdpbGwgbWFrZSB1cyByZXR1cm4gd2l0aCBWTV9GQVVMVF9SRVRSWSwgYnV0IHdpdGhcXG4tXFx0ICogdGhlIGZhdWx0IGxvY2sgc3RpbGwgaGVsZC4gVGhhdCdzIGhvdyBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVFxcbi1cXHQgKiBpcyBzdXBwb3NlZCB0byB3b3JrLiBXZSBoYXZlIHdheSB0b28gbWFueSBzcGVjaWFsIGNhc2VzLi5cXG4tXFx0ICovXFxuLVxcdGlmICh2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0KmZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCAqZnBpbik7XFxuLVxcdGlmICh2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19LSUxMQUJMRSkge1xcbi1cXHRcXHRpZiAoX19mb2xpb19sb2NrX2tpbGxhYmxlKGZvbGlvKSkge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBXZSBkaWRuJ3QgaGF2ZSB0aGUgcmlnaHQgZmxhZ3MgdG8gZHJvcCB0aGVcXG4tXFx0XFx0XFx0ICogZmF1bHQgbG9jaywgYnV0IGFsbCBmYXVsdF9oYW5kbGVycyBvbmx5IGNoZWNrXFxuLVxcdFxcdFxcdCAqIGZvciBmYXRhbCBzaWduYWxzIGlmIHdlIHJldHVybiBWTV9GQVVMVF9SRVRSWSxcXG4tXFx0XFx0XFx0ICogc28gd2UgbmVlZCB0byBkcm9wIHRoZSBmYXVsdCBsb2NrIGhlcmUgYW5kXFxuLVxcdFxcdFxcdCAqIHJldHVybiAwIGlmIHdlIGRvbid0IGhhdmUgYSBmcGluLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKCpmcGluID09IE5VTEwpXFxuLVxcdFxcdFxcdFxcdHJlbGVhc2VfZmF1bHRfbG9jayh2bWYpO1xcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0fVxcbi1cXHR9IGVsc2VcXG4tXFx0XFx0X19mb2xpb19sb2NrKGZvbGlvKTtcXG4tXFxuLVxcdHJldHVybiAxO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBTeW5jaHJvbm91cyByZWFkYWhlYWQgaGFwcGVucyB3aGVuIHdlIGRvbid0IGV2ZW4gZmluZCBhIHBhZ2UgaW4gdGhlIHBhZ2VcXG4gICogY2FjaGUgYXQgYWxsLiAgV2UgZG9uJ3Qgd2FudCB0byBwZXJmb3JtIElPIHVuZGVyIHRoZSBtbWFwIHNlbSwgc28gaWYgd2UgaGF2ZVxcbkBAIC0zMzEyLDEzICszMjYwLDEyIEBAIHN0YXRpYyBpbnQgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuICAqIHRoYXQuICBJZiB3ZSBkaWRuJ3QgcGluIGEgZmlsZSB0aGVuIHdlIHJldHVybiBOVUxMLiAgVGhlIGZpbGUgdGhhdCBpc1xcbiAgKiByZXR1cm5lZCBuZWVkcyB0byBiZSBmcHV0KCknZWQgd2hlbiB3ZSdyZSBkb25lIHdpdGggaXQuXFxuICAqL1xcbi1zdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuK3N0YXRpYyB2b2lkIGRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIHtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbGUgPSB2bWYtXFx1MDAzZXZtYS1cXHUwMDNldm1fZmlsZTtcXG4gXFx0c3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhID0gXFx1MDAyNmZpbGUtXFx1MDAzZWZfcmE7XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nO1xcbiBcXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCByYSwgbWFwcGluZywgdm1mLVxcdTAwM2VwZ29mZik7XFxuLVxcdHN0cnVjdCBmaWxlICpmcGluID0gTlVMTDtcXG4gXFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9mbGFncztcXG4gXFx0Ym9vbCBmb3JjZV90aHBfcmVhZGFoZWFkID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGludCB0aHBfb3JkZXIgPSAwO1xcbkBAIC0zMzQ4LDE1ICszMjk1LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0ICogVk1fRVhFQyBjYXNlIGJlbG93IGlzIGFscmVhZHkgaW50ZW5kZWQgZm9yIHJhbmRvbSBhY2Nlc3MuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoKHZtX2ZsYWdzIFxcdTAwMjYgKFZNX1JBTkRfUkVBRCB8IFZNX0VYRUMpKSA9PSBWTV9SQU5EX1JFQUQpXFxuLVxcdFxcdFxcdHJldHVybiBmcGluO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRcXHRpZiAoIXJhLVxcdTAwM2VyYV9wYWdlcylcXG4tXFx0XFx0XFx0cmV0dXJuIGZwaW47XFxuK1xcdFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdFxcdGlmICh2bV9mbGFncyBcXHUwMDI2IFZNX1NFUV9SRUFEKSB7XFxuLVxcdFxcdFxcdGZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTtcXG4gXFx0XFx0XFx0cGFnZV9jYWNoZV9zeW5jX3JhKFxcdTAwMjZyYWN0bCwgcmEtXFx1MDAzZXJhX3BhZ2VzKTtcXG4tXFx0XFx0XFx0cmV0dXJuIGZwaW47XFxuK1xcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0zMzcxLDEzICszMzE3LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0ICogc3RvcCBib3RoZXJpbmcgd2l0aCByZWFkLWFoZWFkLiBJdCB3aWxsIG9ubHkgaHVydC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChtbWFwX21pc3MgXFx1MDAzZSBNTUFQX0xPVFNBTUlTUylcXG4tXFx0XFx0XFx0cmV0dXJuIGZwaW47XFxuK1xcdFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZvcmNlX3RocF9yZWFkYWhlYWQpIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBmb2xpb19ucl9wYWdlcyA9IDFVTCBcXHUwMDNjXFx1MDAzYyB0aHBfb3JkZXI7XFxuIFxcbi1cXHRcXHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7XFxuIFxcdFxcdHJhY3RsLl9pbmRleCBcXHUwMDI2PSB+KGZvbGlvX25yX3BhZ2VzIC0gMSk7XFxuIFxcdFxcdHJhLVxcdTAwM2VzaXplID0gZm9saW9fbnJfcGFnZXM7XFxuIFxcdFxcdC8qXFxuQEAgLTMzODksNyArMzMzNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0cmEtXFx1MDAzZWFzeW5jX3NpemUgPSBmb2xpb19ucl9wYWdlcztcXG4gXFx0XFx0cmEtXFx1MDAzZW9yZGVyID0gdGhwX29yZGVyO1xcbiBcXHRcXHRwYWdlX2NhY2hlX3JhX29yZGVyKFxcdTAwMjZyYWN0bCwgcmEpO1xcbi1cXHRcXHRyZXR1cm4gZnBpbjtcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9FWEVDKSB7XFxuQEAgLTM0MjcsMjkgKzMzNzIsMjQgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXHRcXHRyYS1cXHUwMDNlb3JkZXIgPSAwO1xcbiBcXHR9XFxuIFxcbi1cXHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7XFxuIFxcdHJhY3RsLl9pbmRleCA9IHJhLVxcdTAwM2VzdGFydDtcXG4gXFx0cGFnZV9jYWNoZV9yYV9vcmRlcihcXHUwMDI2cmFjdGwsIHJhKTtcXG4tXFx0cmV0dXJuIGZwaW47XFxuIH1cXG4gXFxuIC8qXFxuLSAqIEFzeW5jaHJvbm91cyByZWFkYWhlYWQgaGFwcGVucyB3aGVuIHdlIGZpbmQgdGhlIHBhZ2UgYW5kIFBHX3JlYWRhaGVhZCxcXG4tICogc28gd2Ugd2FudCB0byBwb3NzaWJseSBleHRlbmQgdGhlIHJlYWRhaGVhZCBmdXJ0aGVyLiAgV2UgcmV0dXJuIHRoZSBmaWxlIHRoYXRcXG4tICogd2FzIHBpbm5lZCBpZiB3ZSBoYXZlIHRvIGRyb3AgdGhlIG1tYXBfbG9jayBpbiBvcmRlciB0byBkbyBJTy5cXG4rICogQXN5bmNocm9ub3VzIHJlYWRhaGVhZCBoYXBwZW5zIHdoZW4gd2UgZmluZCB0aGUgZm9saW8gYW5kIGl0IGhhcyB0aGVcXG4rICogcmVhZGFoZWFkIGZsYWcgc2V0IHNvIHdlIHdhbnQgdG8gcG9zc2libHkgZXh0ZW5kIHRoZSByZWFkYWhlYWQgZnVydGhlci5cXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgdm9pZCBkb19hc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9maWxlO1xcbiBcXHRzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEgPSBcXHUwMDI2ZmlsZS1cXHUwMDNlZl9yYTtcXG4gXFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgcmEsIGZpbGUtXFx1MDAzZWZfbWFwcGluZywgdm1mLVxcdTAwM2VwZ29mZik7XFxuLVxcdHN0cnVjdCBmaWxlICpmcGluID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgc2hvcnQgbW1hcF9taXNzO1xcbiBcXG4gXFx0LyogSWYgd2UgZG9uJ3Qgd2FudCBhbnkgcmVhZC1haGVhZCwgZG9uJ3QgYm90aGVyICovXFxuIFxcdGlmICh2bWYtXFx1MDAzZXZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SQU5EX1JFQUQgfHwgIXJhLVxcdTAwM2VyYV9wYWdlcylcXG4tXFx0XFx0cmV0dXJuIGZwaW47XFxuK1xcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSBmb2xpbyBpcyBsb2NrZWQsIHdlJ3JlIGxpa2VseSByYWNpbmcgYWdhaW5zdCBhbm90aGVyIGZhdWx0LlxcbkBAIC0zNDcwLDEwICszNDEwLDggQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19hc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4gXFxuIFxcdGlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpIHtcXG4gXFx0XFx0cmFjdGwuX21heF9pbmRleCA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9wZ29mZiArIHZtYV9wYWdlcyh2bWYtXFx1MDAzZXZtYSkgLSAxO1xcbi1cXHRcXHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7XFxuIFxcdFxcdHBhZ2VfY2FjaGVfYXN5bmNfcmEoXFx1MDAyNnJhY3RsLCBmb2xpbywgcmEtXFx1MDAzZXJhX3BhZ2VzKTtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gZnBpbjtcXG4gfVxcbiBcXG4gc3RhdGljIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbkBAIC0zNTMwLDE1ICszNDY4LDkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiAgKiBpdCBpbiB0aGUgcGFnZSBjYWNoZSwgYW5kIGhhbmRsZXMgdGhlIHNwZWNpYWwgY2FzZXMgcmVhc29uYWJseSB3aXRob3V0XFxuICAqIGhhdmluZyBhIGxvdCBvZiBkdXBsaWNhdGVkIGNvZGUuXFxuICAqXFxuLSAqIHZtYS1cXHUwMDNldm1fbW0tXFx1MDAzZW1tYXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkuXFxuLSAqXFxuLSAqIElmIG91ciByZXR1cm4gdmFsdWUgaGFzIFZNX0ZBVUxUX1JFVFJZIHNldCwgaXQncyBiZWNhdXNlIHRoZSBtbWFwX2xvY2tcXG4tICogbWF5IGJlIGRyb3BwZWQgYmVmb3JlIGRvaW5nIEkvTyBvciBieSBsb2NrX2ZvbGlvX21heWJlX2Ryb3BfbW1hcCgpLlxcbi0gKlxcbi0gKiBJZiBvdXIgcmV0dXJuIHZhbHVlIGRvZXMgbm90IGhhdmUgVk1fRkFVTFRfUkVUUlkgc2V0LCB0aGUgbW1hcF9sb2NrXFxuLSAqIGhhcyBub3QgYmVlbiByZWxlYXNlZC5cXG4tICpcXG4tICogV2UgbmV2ZXIgcmV0dXJuIHdpdGggVk1fRkFVTFRfUkVUUlkgYW5kIGEgYml0IGZyb20gVk1fRkFVTFRfRVJST1Igc2V0LlxcbisgKiBDb250ZXh0OiBNYXkgc2xlZXAgd2FpdGluZyBmb3IgSS9PLiAgQ2FuIGJlIGludGVycnVwdGVkIGJ5IGZhdGFsXFxuKyAqIHNpZ25hbHMgaWYgQHZtZiBmbGFncyBwZXJtaXQuICBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgZmF1bHQgbG9ja1xcbisgKiAoZWl0aGVyIG1tYXBfbG9jayBvciBWTUEgbG9jaykuXFxuICAqXFxuICAqIFJldHVybjogYml0d2lzZS1PUiBvZiAlVk1fRkFVTFRfIGNvZGVzLlxcbiAgKi9cXG5AQCAtMzU0Niw3ICszNDc4LDYgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiB7XFxuIFxcdGludCBlcnJvcjtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbGUgPSB2bWYtXFx1MDAzZXZtYS1cXHUwMDNldm1fZmlsZTtcXG4tXFx0c3RydWN0IGZpbGUgKmZwaW4gPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZztcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuIFxcdHBnb2ZmX3QgbWF4X2lkeCwgaW5kZXggPSB2bWYtXFx1MDAzZXBnb2ZmO1xcbkBAIC0zNTY2LDE1ICszNDk3LDMxIEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0Zm9saW8gPSBmaWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCk7XFxuIFxcdGlmIChsaWtlbHkoIUlTX0VSUihmb2xpbykpKSB7XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIFdlIGZvdW5kIHRoZSBwYWdlLCBzbyB0cnkgYXN5bmMgcmVhZGFoZWFkIGJlZm9yZSB3YWl0aW5nIGZvclxcbi1cXHRcXHQgKiB0aGUgbG9jay5cXG4rXFx0XFx0ICogV2UgZm91bmQgdGhlIGZvbGlvLCBzbyB0cnkgYXN5bmMgcmVhZGFoZWFkIGJlZm9yZVxcbitcXHRcXHQgKiB3YWl0aW5nIGZvciB0aGUgbG9jay5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmICghKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1RSSUVEKSlcXG4tXFx0XFx0XFx0ZnBpbiA9IGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkKHZtZiwgZm9saW8pO1xcbitcXHRcXHRcXHRkb19hc3luY19tbWFwX3JlYWRhaGVhZCh2bWYsIGZvbGlvKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkpIHtcXG4gXFx0XFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbiBcXHRcXHRcXHRtYXBwaW5nX2xvY2tlZCA9IHRydWU7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4rXFx0XFx0XFx0aWYgKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX0tJTExBQkxFKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChfX2ZvbGlvX2xvY2tfa2lsbGFibGUoZm9saW8pIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0X19mb2xpb19sb2NrKGZvbGlvKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBEaWQgaXQgZ2V0IHRydW5jYXRlZD8gKi9cXG4rXFx0XFx0aWYgKHVubGlrZWx5KGZvbGlvLVxcdTAwM2VtYXBwaW5nICE9IG1hcHBpbmcpKSB7XFxuK1xcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdFxcdFxcdGdvdG8gcmV0cnlfZmluZDtcXG4rXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyZXQgPSBmaWxlbWFwX2ZhdWx0X3JlY2hlY2tfcHRlX25vbmUodm1mKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuQEAgLTM1ODQsNyArMzUzMSw3IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0Y291bnRfdm1fZXZlbnQoUEdNQUpGQVVMVCk7XFxuIFxcdFxcdGNvdW50X21lbWNnX2V2ZW50X21tKHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9tbSwgUEdNQUpGQVVMVCk7XFxuIFxcdFxcdHJldCA9IFZNX0ZBVUxUX01BSk9SO1xcbi1cXHRcXHRmcGluID0gZG9fc3luY19tbWFwX3JlYWRhaGVhZCh2bWYpO1xcbitcXHRcXHRkb19zeW5jX21tYXBfcmVhZGFoZWFkKHZtZik7XFxuIHJldHJ5X2ZpbmQ6XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFNlZSBjb21tZW50IGluIGZpbGVtYXBfY3JlYXRlX2ZvbGlvKCkgd2h5IHdlIG5lZWRcXG5AQCAtMzU5NSwyNSArMzU0MiwxMyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdFxcdFxcdG1hcHBpbmdfbG9ja2VkID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdFxcdCAgRkdQX0NSRUFUfEZHUF9GT1JfTU1BUCxcXG4tXFx0XFx0XFx0XFx0XFx0ICB2bWYtXFx1MDAzZWdmcF9tYXNrKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICBGR1BfQ1JFQVQgfCBGR1BfTE9DSywgdm1mLVxcdTAwM2VnZnBfbWFzayk7XFxuIFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdGlmIChmcGluKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dF9yZXRyeTtcXG4gXFx0XFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XFxuIFxcdFxcdFxcdHJldHVybiBWTV9GQVVMVF9PT007XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFsb2NrX2ZvbGlvX21heWJlX2Ryb3BfbW1hcCh2bWYsIGZvbGlvLCBcXHUwMDI2ZnBpbikpXFxuLVxcdFxcdGdvdG8gb3V0X3JldHJ5O1xcbi1cXG4tXFx0LyogRGlkIGl0IGdldCB0cnVuY2F0ZWQ/ICovXFxuLVxcdGlmICh1bmxpa2VseShmb2xpby1cXHUwMDNlbWFwcGluZyAhPSBtYXBwaW5nKSkge1xcbi1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXHRcXHRnb3RvIHJldHJ5X2ZpbmQ7XFxuLVxcdH1cXG4gXFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb19jb250YWlucyhmb2xpbywgaW5kZXgpLCBmb2xpbyk7XFxuIFxcbiBcXHQvKlxcbkBAIC0zNjI1LDcgKzM1NjAsNyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHRoZSBpbnZhbGlkYXRlIGxvY2sgaXMgbm90IGhlbGQsIHRoZSBmb2xpbyB3YXMgaW4gY2FjaGVcXG4gXFx0XFx0ICogYW5kIHVwdG9kYXRlIGFuZCBub3cgaXQgaXMgbm90LiBTdHJhbmdlIGJ1dCBwb3NzaWJsZSBzaW5jZSB3ZVxcbi1cXHRcXHQgKiBkaWRuJ3QgaG9sZCB0aGUgcGFnZSBsb2NrIGFsbCB0aGUgdGltZS4gTGV0J3MgZHJvcFxcbitcXHRcXHQgKiBkaWRuJ3QgaG9sZCB0aGUgZm9saW8gbG9jayBhbGwgdGhlIHRpbWUuIExldCdzIGRyb3BcXG4gXFx0XFx0ICogZXZlcnl0aGluZywgZ2V0IHRoZSBpbnZhbGlkYXRlIGxvY2sgYW5kIHRyeSBhZ2Fpbi5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmICghbWFwcGluZ19sb2NrZWQpIHtcXG5AQCAtMzY0MiwyMSArMzU3NywxMiBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdFxcdGdvdG8gcGFnZV9ub3RfdXB0b2RhdGU7XFxuIFxcdH1cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFdlJ3ZlIG1hZGUgaXQgdGhpcyBmYXIgYW5kIHdlIGhhZCB0byBkcm9wIG91ciBtbWFwX2xvY2ssIG5vdyBpcyB0aGVcXG4tXFx0ICogdGltZSB0byByZXR1cm4gdG8gdGhlIHVwcGVyIGxheWVyIGFuZCBoYXZlIGl0IHJlLWZpbmQgdGhlIHZtYSBhbmRcXG4tXFx0ICogcmVkbyB0aGUgZmF1bHQuXFxuLVxcdCAqL1xcbi1cXHRpZiAoZnBpbikge1xcbi1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi1cXHRcXHRnb3RvIG91dF9yZXRyeTtcXG4tXFx0fVxcbiBcXHRpZiAobWFwcGluZ19sb2NrZWQpXFxuIFxcdFxcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogRm91bmQgdGhlIHBhZ2UgYW5kIGhhdmUgYSByZWZlcmVuY2Ugb24gaXQuXFxuLVxcdCAqIFdlIG11c3QgcmVjaGVjayBpX3NpemUgdW5kZXIgcGFnZSBsb2NrLlxcbitcXHQgKiBGb3VuZCB0aGUgZm9saW8gYW5kIGhhdmUgYSByZWZlcmVuY2Ugb24gaXQuXFxuK1xcdCAqIFdlIG11c3QgcmVjaGVjayBpX3NpemUgdW5kZXIgZm9saW8gbG9jay5cXG4gXFx0ICovXFxuIFxcdG1heF9pZHggPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX1NJWkUpO1xcbiBcXHRpZiAodW5saWtlbHkoaW5kZXggXFx1MDAzZT0gbWF4X2lkeCkpIHtcXG5AQCAtMzY3NSwxMCArMzYwMSw3IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0ICogYmVjYXVzZSB0aGVyZSByZWFsbHkgYXJlbid0IGFueSBwZXJmb3JtYW5jZSBpc3N1ZXMgaGVyZVxcbiBcXHQgKiBhbmQgd2UgbmVlZCB0byBjaGVjayBmb3IgZXJyb3JzLlxcbiBcXHQgKi9cXG4tXFx0ZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsIGZwaW4pO1xcbiBcXHRlcnJvciA9IGZpbGVtYXBfcmVhZF9mb2xpbyhmaWxlLCBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlcmVhZF9mb2xpbywgZm9saW8pO1xcbi1cXHRpZiAoZnBpbilcXG4tXFx0XFx0Z290byBvdXRfcmV0cnk7XFxuIFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcbiBcXHRpZiAoIWVycm9yIHx8IGVycm9yID09IEFPUF9UUlVOQ0FURURfUEFHRSlcXG5AQCAtMzY4NiwyMCArMzYwOSw2IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XFxuIFxcbiBcXHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xcbi1cXG4tb3V0X3JldHJ5Olxcbi1cXHQvKlxcbi1cXHQgKiBXZSBkcm9wcGVkIHRoZSBtbWFwX2xvY2ssIHdlIG5lZWQgdG8gcmV0dXJuIHRvIHRoZSBmYXVsdCBoYW5kbGVyIHRvXFxuLVxcdCAqIHJlLWZpbmQgdGhlIHZtYSBhbmQgY29tZSBiYWNrIGFuZCBmaW5kIG91ciBob3BlZnVsbHkgc3RpbGwgcG9wdWxhdGVkXFxuLVxcdCAqIHBhZ2UuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIUlTX0VSUihmb2xpbykpXFxuLVxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdGlmIChtYXBwaW5nX2xvY2tlZClcXG4tXFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XFxuLVxcdGlmIChmcGluKVxcbi1cXHRcXHRmcHV0KGZwaW4pO1xcbi1cXHRyZXR1cm4gcmV0IHwgVk1fRkFVTFRfUkVUUlk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChmaWxlbWFwX2ZhdWx0KTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjQ4OjM0LjY0OTcxOTAwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MzU2ODUxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gZmlsZW1hcF9mYXVsdCBhbmQgX19maWxlbWFwX2dldF9mb2xpb19tcG9sLCBjaGFuZ2luZyBob3cgdGhlIGZvbGlvIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbW92aW5nIHRoZSBkcm9wcGluZyBvZiB0aGUgbW1hcCBsb2NrIGR1cmluZyBJL08gYW5kIGZvbGlvIGxvY2tpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhNzZjNTlmODRmN2FlMjRhNTQxZjA1OTNlNjllOWQ1OTU5OWU2N2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxOTo0ODozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDFmNTA5OTFiNDNlM2IzLi5lNmFjMjIxZWU1NGQ4YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTY5NSw5ICs2OTUsNiBAQCBwZ29mZl90IHBhZ2VfY2FjaGVfcHJldl9taXNzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuICAqICogJUZHUF9DUkVBVCAtIElmIG5vIGZvbGlvIGlzIHByZXNlbnQgdGhlbiBhIG5ldyBmb2xpbyBpcyBhbGxvY2F0ZWQsXG4gICogICBhZGRlZCB0byB0aGUgcGFnZSBjYWNoZSBhbmQgdGhlIFZNJ3MgTFJVIGxpc3QuICBUaGUgZm9saW8gaXNcbiAgKiAgIHJldHVybmVkIGxvY2tlZC5cbi0gKiAqICVGR1BfRk9SX01NQVAgLSBUaGUgY2FsbGVyIHdhbnRzIHRvIGRvIGl0cyBvd24gbG9ja2luZyBkYW5jZSBpZiB0aGVcbi0gKiAgIGZvbGlvIGlzIGFscmVhZHkgaW4gY2FjaGUuICBJZiB0aGUgZm9saW8gd2FzIGFsbG9jYXRlZCwgdW5sb2NrIGl0XG4tICogICBiZWZvcmUgcmV0dXJuaW5nIHNvIHRoZSBjYWxsZXIgY2FuIGRvIHRoZSBzYW1lIGRhbmNlLlxuICAqICogJUZHUF9XUklURSAtIFRoZSBmb2xpbyB3aWxsIGJlIHdyaXR0ZW4gdG8gYnkgdGhlIGNhbGxlci5cbiAgKiAqICVGR1BfTk9GUyAtIF9fR0ZQX0ZTIHdpbGwgZ2V0IGNsZWFyZWQgaW4gZ2ZwLlxuICAqICogJUZHUF9OT1dBSVQgLSBEb24ndCBibG9jayBvbiB0aGUgZm9saW8gbG9jay5cbkBAIC03MTQsOSArNzExLDggQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGZnZl90O1xuICNkZWZpbmUgRkdQX1dSSVRFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDA4KVxuICNkZWZpbmUgRkdQX05PRlNcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMTApXG4gI2RlZmluZSBGR1BfTk9XQUlUXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDIwKVxuLSNkZWZpbmUgRkdQX0ZPUl9NTUFQXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDQwKVxuLSNkZWZpbmUgRkdQX1NUQUJMRVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA4MClcbi0jZGVmaW5lIEZHUF9ET05UQ0FDSEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAxMDApXG4rI2RlZmluZSBGR1BfU1RBQkxFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDQwKVxuKyNkZWZpbmUgRkdQX0RPTlRDQUNIRVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA4MClcbiAjZGVmaW5lIEZHRl9HRVRfT1JERVIoZmdmKVx0KCgoX19mb3JjZSB1bnNpZ25lZClmZ2YpIFx1MDAzZVx1MDAzZSAyNilcdC8qIHRvcCA2IGJpdHMgKi9cbiBcbiAjZGVmaW5lIEZHUF9XUklURUJFR0lOXHRcdChGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCB8IEZHUF9TVEFCTEUpXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA3ZTQ2N2M4MWQyMTM4OS4uMTNhODYxYjM4NjIxZmYgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbisrKyBiL21tL2ZpbGVtYXAuY1xuQEAgLTE5OTUsNyArMTk5NSw3IEBAIHN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdGdmcCBcdTAwMjY9IH5HRlBfS0VSTkVMO1xuIFx0XHRcdGdmcCB8PSBHRlBfTk9XQUlUO1xuIFx0XHR9XG4tXHRcdGlmIChXQVJOX09OX09OQ0UoIShmZ3BfZmxhZ3MgXHUwMDI2IChGR1BfTE9DSyB8IEZHUF9GT1JfTU1BUCkpKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRSghKGZncF9mbGFncyBcdTAwMjYgRkdQX0xPQ0spKSlcbiBcdFx0XHRmZ3BfZmxhZ3MgfD0gRkdQX0xPQ0s7XG4gXG4gXHRcdGlmIChvcmRlciBcdTAwM2UgbWFwcGluZ19tYXhfZm9saW9fb3JkZXIobWFwcGluZykpXG5AQCAtMjA0MiwxMiArMjA0Miw2IEBAIHN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4tXHRcdC8qXG4tXHRcdCAqIGZpbGVtYXBfYWRkX2ZvbGlvIGxvY2tzIHRoZSBwYWdlLCBhbmQgZm9yIG1tYXBcbi1cdFx0ICogd2UgZXhwZWN0IGFuIHVubG9ja2VkIHBhZ2UuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZm9saW8gXHUwMDI2XHUwMDI2IChmZ3BfZmxhZ3MgXHUwMDI2IEZHUF9GT1JfTU1BUCkpXG4tXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdH1cbiBcbiBcdGlmICghZm9saW8pXG5AQCAtMzI1OSw1MiArMzI1Myw2IEBAIGxvZmZfdCBtYXBwaW5nX3NlZWtfaG9sZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsXG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbiAjZGVmaW5lIE1NQVBfTE9UU0FNSVNTICAoMTAwKVxuLS8qXG4tICogbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAgLSBsb2NrIHRoZSBwYWdlLCBwb3NzaWJseSBkcm9wcGluZyB0aGUgbW1hcF9sb2NrXG4tICogQHZtZiAtIHRoZSB2bV9mYXVsdCBmb3IgdGhpcyBmYXVsdC5cbi0gKiBAZm9saW8gLSB0aGUgZm9saW8gdG8gbG9jay5cbi0gKiBAZnBpbiAtIHRoZSBwb2ludGVyIHRvIHRoZSBmaWxlIHdlIG1heSBwaW4gKG9yIGlzIGFscmVhZHkgcGlubmVkKS5cbi0gKlxuLSAqIFRoaXMgd29ya3Mgc2ltaWxhciB0byBsb2NrX2ZvbGlvX29yX3JldHJ5IGluIHRoYXQgaXQgY2FuIGRyb3AgdGhlXG4tICogbW1hcF9sb2NrLiAgSXQgZGlmZmVycyBpbiB0aGF0IGl0IGFjdHVhbGx5IHJldHVybnMgdGhlIGZvbGlvIGxvY2tlZFxuLSAqIGlmIGl0IHJldHVybnMgMSBhbmQgMCBpZiBpdCBjb3VsZG4ndCBsb2NrIHRoZSBmb2xpby4gIElmIHdlIGRpZCBoYXZlXG4tICogdG8gZHJvcCB0aGUgbW1hcF9sb2NrIHRoZW4gZnBpbiB3aWxsIHBvaW50IHRvIHRoZSBwaW5uZWQgZmlsZSBhbmRcbi0gKiBuZWVkcyB0byBiZSBmcHV0KCknZWQgYXQgYSBsYXRlciBwb2ludC5cbi0gKi9cbi1zdGF0aWMgaW50IGxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZmlsZSAqKmZwaW4pXG4te1xuLVx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKVxuLVx0XHRyZXR1cm4gMTtcbi1cbi1cdC8qXG4tXHQgKiBOT1RFISBUaGlzIHdpbGwgbWFrZSB1cyByZXR1cm4gd2l0aCBWTV9GQVVMVF9SRVRSWSwgYnV0IHdpdGhcbi1cdCAqIHRoZSBmYXVsdCBsb2NrIHN0aWxsIGhlbGQuIFRoYXQncyBob3cgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRcbi1cdCAqIGlzIHN1cHBvc2VkIHRvIHdvcmsuIFdlIGhhdmUgd2F5IHRvbyBtYW55IHNwZWNpYWwgY2FzZXMuLlxuLVx0ICovXG4tXHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHQqZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsICpmcGluKTtcbi1cdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfS0lMTEFCTEUpIHtcbi1cdFx0aWYgKF9fZm9saW9fbG9ja19raWxsYWJsZShmb2xpbykpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGRpZG4ndCBoYXZlIHRoZSByaWdodCBmbGFncyB0byBkcm9wIHRoZVxuLVx0XHRcdCAqIGZhdWx0IGxvY2ssIGJ1dCBhbGwgZmF1bHRfaGFuZGxlcnMgb25seSBjaGVja1xuLVx0XHRcdCAqIGZvciBmYXRhbCBzaWduYWxzIGlmIHdlIHJldHVybiBWTV9GQVVMVF9SRVRSWSxcbi1cdFx0XHQgKiBzbyB3ZSBuZWVkIHRvIGRyb3AgdGhlIGZhdWx0IGxvY2sgaGVyZSBhbmRcbi1cdFx0XHQgKiByZXR1cm4gMCBpZiB3ZSBkb24ndCBoYXZlIGEgZnBpbi5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoKmZwaW4gPT0gTlVMTClcbi1cdFx0XHRcdHJlbGVhc2VfZmF1bHRfbG9jayh2bWYpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4tXHR9IGVsc2Vcbi1cdFx0X19mb2xpb19sb2NrKGZvbGlvKTtcbi1cbi1cdHJldHVybiAxO1xuLX1cbi1cbiAvKlxuICAqIFN5bmNocm9ub3VzIHJlYWRhaGVhZCBoYXBwZW5zIHdoZW4gd2UgZG9uJ3QgZXZlbiBmaW5kIGEgcGFnZSBpbiB0aGUgcGFnZVxuICAqIGNhY2hlIGF0IGFsbC4gIFdlIGRvbid0IHdhbnQgdG8gcGVyZm9ybSBJTyB1bmRlciB0aGUgbW1hcCBzZW0sIHNvIGlmIHdlIGhhdmVcbkBAIC0zMzEyLDEzICszMjYwLDEyIEBAIHN0YXRpYyBpbnQgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gICogdGhhdC4gIElmIHdlIGRpZG4ndCBwaW4gYSBmaWxlIHRoZW4gd2UgcmV0dXJuIE5VTEwuICBUaGUgZmlsZSB0aGF0IGlzXG4gICogcmV0dXJuZWQgbmVlZHMgdG8gYmUgZnB1dCgpJ2VkIHdoZW4gd2UncmUgZG9uZSB3aXRoIGl0LlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbitzdGF0aWMgdm9pZCBkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIHtcbiBcdHN0cnVjdCBmaWxlICpmaWxlID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9maWxlO1xuIFx0c3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhID0gXHUwMDI2ZmlsZS1cdTAwM2VmX3JhO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbiBcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIHJhLCBtYXBwaW5nLCB2bWYtXHUwMDNlcGdvZmYpO1xuLVx0c3RydWN0IGZpbGUgKmZwaW4gPSBOVUxMO1xuIFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmxhZ3M7XG4gXHRib29sIGZvcmNlX3RocF9yZWFkYWhlYWQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGludCB0aHBfb3JkZXIgPSAwO1xuQEAgLTMzNDgsMTUgKzMyOTUsMTQgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHQgKiBWTV9FWEVDIGNhc2UgYmVsb3cgaXMgYWxyZWFkeSBpbnRlbmRlZCBmb3IgcmFuZG9tIGFjY2Vzcy5cbiBcdFx0ICovXG4gXHRcdGlmICgodm1fZmxhZ3MgXHUwMDI2IChWTV9SQU5EX1JFQUQgfCBWTV9FWEVDKSkgPT0gVk1fUkFORF9SRUFEKVxuLVx0XHRcdHJldHVybiBmcGluO1xuK1x0XHRcdHJldHVybjtcbiBcbiBcdFx0aWYgKCFyYS1cdTAwM2VyYV9wYWdlcylcbi1cdFx0XHRyZXR1cm4gZnBpbjtcbitcdFx0XHRyZXR1cm47XG4gXG4gXHRcdGlmICh2bV9mbGFncyBcdTAwMjYgVk1fU0VRX1JFQUQpIHtcbi1cdFx0XHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7XG4gXHRcdFx0cGFnZV9jYWNoZV9zeW5jX3JhKFx1MDAyNnJhY3RsLCByYS1cdTAwM2VyYV9wYWdlcyk7XG4tXHRcdFx0cmV0dXJuIGZwaW47XG4rXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMzM3MSwxMyArMzMxNywxMiBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdCAqIHN0b3AgYm90aGVyaW5nIHdpdGggcmVhZC1haGVhZC4gSXQgd2lsbCBvbmx5IGh1cnQuXG4gXHRcdCAqL1xuIFx0XHRpZiAobW1hcF9taXNzIFx1MDAzZSBNTUFQX0xPVFNBTUlTUylcbi1cdFx0XHRyZXR1cm4gZnBpbjtcbitcdFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRpZiAoZm9yY2VfdGhwX3JlYWRhaGVhZCkge1xuIFx0XHR1bnNpZ25lZCBsb25nIGZvbGlvX25yX3BhZ2VzID0gMVVMIFx1MDAzY1x1MDAzYyB0aHBfb3JkZXI7XG4gXG4tXHRcdGZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTtcbiBcdFx0cmFjdGwuX2luZGV4IFx1MDAyNj0gfihmb2xpb19ucl9wYWdlcyAtIDEpO1xuIFx0XHRyYS1cdTAwM2VzaXplID0gZm9saW9fbnJfcGFnZXM7XG4gXHRcdC8qXG5AQCAtMzM4OSw3ICszMzM0LDcgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRyYS1cdTAwM2Vhc3luY19zaXplID0gZm9saW9fbnJfcGFnZXM7XG4gXHRcdHJhLVx1MDAzZW9yZGVyID0gdGhwX29yZGVyO1xuIFx0XHRwYWdlX2NhY2hlX3JhX29yZGVyKFx1MDAyNnJhY3RsLCByYSk7XG4tXHRcdHJldHVybiBmcGluO1xuK1x0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMpIHtcbkBAIC0zNDI3LDI5ICszMzcyLDI0IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0cmEtXHUwMDNlb3JkZXIgPSAwO1xuIFx0fVxuIFxuLVx0ZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsIGZwaW4pO1xuIFx0cmFjdGwuX2luZGV4ID0gcmEtXHUwMDNlc3RhcnQ7XG4gXHRwYWdlX2NhY2hlX3JhX29yZGVyKFx1MDAyNnJhY3RsLCByYSk7XG4tXHRyZXR1cm4gZnBpbjtcbiB9XG4gXG4gLypcbi0gKiBBc3luY2hyb25vdXMgcmVhZGFoZWFkIGhhcHBlbnMgd2hlbiB3ZSBmaW5kIHRoZSBwYWdlIGFuZCBQR19yZWFkYWhlYWQsXG4tICogc28gd2Ugd2FudCB0byBwb3NzaWJseSBleHRlbmQgdGhlIHJlYWRhaGVhZCBmdXJ0aGVyLiAgV2UgcmV0dXJuIHRoZSBmaWxlIHRoYXRcbi0gKiB3YXMgcGlubmVkIGlmIHdlIGhhdmUgdG8gZHJvcCB0aGUgbW1hcF9sb2NrIGluIG9yZGVyIHRvIGRvIElPLlxuKyAqIEFzeW5jaHJvbm91cyByZWFkYWhlYWQgaGFwcGVucyB3aGVuIHdlIGZpbmQgdGhlIGZvbGlvIGFuZCBpdCBoYXMgdGhlXG4rICogcmVhZGFoZWFkIGZsYWcgc2V0IHNvIHdlIHdhbnQgdG8gcG9zc2libHkgZXh0ZW5kIHRoZSByZWFkYWhlYWQgZnVydGhlci5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGZpbGUgKmRvX2FzeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgdm9pZCBkb19hc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmlsZTtcbiBcdHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSA9IFx1MDAyNmZpbGUtXHUwMDNlZl9yYTtcbiBcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIHJhLCBmaWxlLVx1MDAzZWZfbWFwcGluZywgdm1mLVx1MDAzZXBnb2ZmKTtcbi1cdHN0cnVjdCBmaWxlICpmcGluID0gTlVMTDtcbiBcdHVuc2lnbmVkIHNob3J0IG1tYXBfbWlzcztcbiBcbiBcdC8qIElmIHdlIGRvbid0IHdhbnQgYW55IHJlYWQtYWhlYWQsIGRvbid0IGJvdGhlciAqL1xuIFx0aWYgKHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JBTkRfUkVBRCB8fCAhcmEtXHUwMDNlcmFfcGFnZXMpXG4tXHRcdHJldHVybiBmcGluO1xuK1x0XHRyZXR1cm47XG4gXG4gXHQvKlxuIFx0ICogSWYgdGhlIGZvbGlvIGlzIGxvY2tlZCwgd2UncmUgbGlrZWx5IHJhY2luZyBhZ2FpbnN0IGFub3RoZXIgZmF1bHQuXG5AQCAtMzQ3MCwxMCArMzQxMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4gXG4gXHRpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKSB7XG4gXHRcdHJhY3RsLl9tYXhfaW5kZXggPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX3Bnb2ZmICsgdm1hX3BhZ2VzKHZtZi1cdTAwM2V2bWEpIC0gMTtcbi1cdFx0ZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsIGZwaW4pO1xuIFx0XHRwYWdlX2NhY2hlX2FzeW5jX3JhKFx1MDAyNnJhY3RsLCBmb2xpbywgcmEtXHUwMDNlcmFfcGFnZXMpO1xuIFx0fVxuLVx0cmV0dXJuIGZwaW47XG4gfVxuIFxuIHN0YXRpYyB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHRfcmVjaGVja19wdGVfbm9uZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbkBAIC0zNTMwLDE1ICszNDY4LDkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuICAqIGl0IGluIHRoZSBwYWdlIGNhY2hlLCBhbmQgaGFuZGxlcyB0aGUgc3BlY2lhbCBjYXNlcyByZWFzb25hYmx5IHdpdGhvdXRcbiAgKiBoYXZpbmcgYSBsb3Qgb2YgZHVwbGljYXRlZCBjb2RlLlxuICAqXG4tICogdm1hLVx1MDAzZXZtX21tLVx1MDAzZW1tYXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkuXG4tICpcbi0gKiBJZiBvdXIgcmV0dXJuIHZhbHVlIGhhcyBWTV9GQVVMVF9SRVRSWSBzZXQsIGl0J3MgYmVjYXVzZSB0aGUgbW1hcF9sb2NrXG4tICogbWF5IGJlIGRyb3BwZWQgYmVmb3JlIGRvaW5nIEkvTyBvciBieSBsb2NrX2ZvbGlvX21heWJlX2Ryb3BfbW1hcCgpLlxuLSAqXG4tICogSWYgb3VyIHJldHVybiB2YWx1ZSBkb2VzIG5vdCBoYXZlIFZNX0ZBVUxUX1JFVFJZIHNldCwgdGhlIG1tYXBfbG9ja1xuLSAqIGhhcyBub3QgYmVlbiByZWxlYXNlZC5cbi0gKlxuLSAqIFdlIG5ldmVyIHJldHVybiB3aXRoIFZNX0ZBVUxUX1JFVFJZIGFuZCBhIGJpdCBmcm9tIFZNX0ZBVUxUX0VSUk9SIHNldC5cbisgKiBDb250ZXh0OiBNYXkgc2xlZXAgd2FpdGluZyBmb3IgSS9PLiAgQ2FuIGJlIGludGVycnVwdGVkIGJ5IGZhdGFsXG4rICogc2lnbmFscyBpZiBAdm1mIGZsYWdzIHBlcm1pdC4gIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBmYXVsdCBsb2NrXG4rICogKGVpdGhlciBtbWFwX2xvY2sgb3IgVk1BIGxvY2spLlxuICAqXG4gICogUmV0dXJuOiBiaXR3aXNlLU9SIG9mICVWTV9GQVVMVF8gY29kZXMuXG4gICovXG5AQCAtMzU0Niw3ICszNDc4LDYgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIHtcbiBcdGludCBlcnJvcjtcbiBcdHN0cnVjdCBmaWxlICpmaWxlID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9maWxlO1xuLVx0c3RydWN0IGZpbGUgKmZwaW4gPSBOVUxMO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4gXHRwZ29mZl90IG1heF9pZHgsIGluZGV4ID0gdm1mLVx1MDAzZXBnb2ZmO1xuQEAgLTM1NjYsMTUgKzM0OTcsMzEgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0Zm9saW8gPSBmaWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCk7XG4gXHRpZiAobGlrZWx5KCFJU19FUlIoZm9saW8pKSkge1xuIFx0XHQvKlxuLVx0XHQgKiBXZSBmb3VuZCB0aGUgcGFnZSwgc28gdHJ5IGFzeW5jIHJlYWRhaGVhZCBiZWZvcmUgd2FpdGluZyBmb3Jcbi1cdFx0ICogdGhlIGxvY2suXG4rXHRcdCAqIFdlIGZvdW5kIHRoZSBmb2xpbywgc28gdHJ5IGFzeW5jIHJlYWRhaGVhZCBiZWZvcmVcbitcdFx0ICogd2FpdGluZyBmb3IgdGhlIGxvY2suXG4gXHRcdCAqL1xuIFx0XHRpZiAoISh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVFJJRUQpKVxuLVx0XHRcdGZwaW4gPSBkb19hc3luY19tbWFwX3JlYWRhaGVhZCh2bWYsIGZvbGlvKTtcbitcdFx0XHRkb19hc3luY19tbWFwX3JlYWRhaGVhZCh2bWYsIGZvbGlvKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkpIHtcbiBcdFx0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4gXHRcdFx0bWFwcGluZ19sb2NrZWQgPSB0cnVlO1xuIFx0XHR9XG4rXG4rXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbitcdFx0XHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX0tJTExBQkxFKSB7XG4rXHRcdFx0XHRpZiAoX19mb2xpb19sb2NrX2tpbGxhYmxlKGZvbGlvKSBcdTAwM2MgMClcbitcdFx0XHRcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0X19mb2xpb19sb2NrKGZvbGlvKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0LyogRGlkIGl0IGdldCB0cnVuY2F0ZWQ/ICovXG4rXHRcdGlmICh1bmxpa2VseShmb2xpby1cdTAwM2VtYXBwaW5nICE9IG1hcHBpbmcpKSB7XG4rXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRcdGdvdG8gcmV0cnlfZmluZDtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHZtZik7XG4gXHRcdGlmICh1bmxpa2VseShyZXQpKVxuQEAgLTM1ODQsNyArMzUzMSw3IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Y291bnRfdm1fZXZlbnQoUEdNQUpGQVVMVCk7XG4gXHRcdGNvdW50X21lbWNnX2V2ZW50X21tKHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fbW0sIFBHTUFKRkFVTFQpO1xuIFx0XHRyZXQgPSBWTV9GQVVMVF9NQUpPUjtcbi1cdFx0ZnBpbiA9IGRvX3N5bmNfbW1hcF9yZWFkYWhlYWQodm1mKTtcbitcdFx0ZG9fc3luY19tbWFwX3JlYWRhaGVhZCh2bWYpO1xuIHJldHJ5X2ZpbmQ6XG4gXHRcdC8qXG4gXHRcdCAqIFNlZSBjb21tZW50IGluIGZpbGVtYXBfY3JlYXRlX2ZvbGlvKCkgd2h5IHdlIG5lZWRcbkBAIC0zNTk1LDI1ICszNTQyLDEzIEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0XHRtYXBwaW5nX2xvY2tlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxuLVx0XHRcdFx0XHQgIEZHUF9DUkVBVHxGR1BfRk9SX01NQVAsXG4tXHRcdFx0XHRcdCAgdm1mLVx1MDAzZWdmcF9tYXNrKTtcbitcdFx0XHRcdFx0ICBGR1BfQ1JFQVQgfCBGR1BfTE9DSywgdm1mLVx1MDAzZWdmcF9tYXNrKTtcbiBcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi1cdFx0XHRpZiAoZnBpbilcbi1cdFx0XHRcdGdvdG8gb3V0X3JldHJ5O1xuIFx0XHRcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuIFx0XHRcdHJldHVybiBWTV9GQVVMVF9PT007XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmICghbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAodm1mLCBmb2xpbywgXHUwMDI2ZnBpbikpXG4tXHRcdGdvdG8gb3V0X3JldHJ5O1xuLVxuLVx0LyogRGlkIGl0IGdldCB0cnVuY2F0ZWQ/ICovXG4tXHRpZiAodW5saWtlbHkoZm9saW8tXHUwMDNlbWFwcGluZyAhPSBtYXBwaW5nKSkge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRnb3RvIHJldHJ5X2ZpbmQ7XG4tXHR9XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2NvbnRhaW5zKGZvbGlvLCBpbmRleCksIGZvbGlvKTtcbiBcbiBcdC8qXG5AQCAtMzYyNSw3ICszNTYwLDcgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHQvKlxuIFx0XHQgKiBJZiB0aGUgaW52YWxpZGF0ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGUgZm9saW8gd2FzIGluIGNhY2hlXG4gXHRcdCAqIGFuZCB1cHRvZGF0ZSBhbmQgbm93IGl0IGlzIG5vdC4gU3RyYW5nZSBidXQgcG9zc2libGUgc2luY2Ugd2Vcbi1cdFx0ICogZGlkbid0IGhvbGQgdGhlIHBhZ2UgbG9jayBhbGwgdGhlIHRpbWUuIExldCdzIGRyb3BcbitcdFx0ICogZGlkbid0IGhvbGQgdGhlIGZvbGlvIGxvY2sgYWxsIHRoZSB0aW1lLiBMZXQncyBkcm9wXG4gXHRcdCAqIGV2ZXJ5dGhpbmcsIGdldCB0aGUgaW52YWxpZGF0ZSBsb2NrIGFuZCB0cnkgYWdhaW4uXG4gXHRcdCAqL1xuIFx0XHRpZiAoIW1hcHBpbmdfbG9ja2VkKSB7XG5AQCAtMzY0MiwyMSArMzU3NywxMiBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGdvdG8gcGFnZV9ub3RfdXB0b2RhdGU7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogV2UndmUgbWFkZSBpdCB0aGlzIGZhciBhbmQgd2UgaGFkIHRvIGRyb3Agb3VyIG1tYXBfbG9jaywgbm93IGlzIHRoZVxuLVx0ICogdGltZSB0byByZXR1cm4gdG8gdGhlIHVwcGVyIGxheWVyIGFuZCBoYXZlIGl0IHJlLWZpbmQgdGhlIHZtYSBhbmRcbi1cdCAqIHJlZG8gdGhlIGZhdWx0LlxuLVx0ICovXG4tXHRpZiAoZnBpbikge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRnb3RvIG91dF9yZXRyeTtcbi1cdH1cbiBcdGlmIChtYXBwaW5nX2xvY2tlZClcbiBcdFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XG4gXG4gXHQvKlxuLVx0ICogRm91bmQgdGhlIHBhZ2UgYW5kIGhhdmUgYSByZWZlcmVuY2Ugb24gaXQuXG4tXHQgKiBXZSBtdXN0IHJlY2hlY2sgaV9zaXplIHVuZGVyIHBhZ2UgbG9jay5cbitcdCAqIEZvdW5kIHRoZSBmb2xpbyBhbmQgaGF2ZSBhIHJlZmVyZW5jZSBvbiBpdC5cbitcdCAqIFdlIG11c3QgcmVjaGVjayBpX3NpemUgdW5kZXIgZm9saW8gbG9jay5cbiBcdCAqL1xuIFx0bWF4X2lkeCA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSk7XG4gXHRpZiAodW5saWtlbHkoaW5kZXggXHUwMDNlPSBtYXhfaWR4KSkge1xuQEAgLTM2NzUsMTAgKzM2MDEsNyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHQgKiBiZWNhdXNlIHRoZXJlIHJlYWxseSBhcmVuJ3QgYW55IHBlcmZvcm1hbmNlIGlzc3VlcyBoZXJlXG4gXHQgKiBhbmQgd2UgbmVlZCB0byBjaGVjayBmb3IgZXJyb3JzLlxuIFx0ICovXG4tXHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7XG4gXHRlcnJvciA9IGZpbGVtYXBfcmVhZF9mb2xpbyhmaWxlLCBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZXJlYWRfZm9saW8sIGZvbGlvKTtcbi1cdGlmIChmcGluKVxuLVx0XHRnb3RvIG91dF9yZXRyeTtcbiBcdGZvbGlvX3B1dChmb2xpbyk7XG4gXG4gXHRpZiAoIWVycm9yIHx8IGVycm9yID09IEFPUF9UUlVOQ0FURURfUEFHRSlcbkBAIC0zNjg2LDIwICszNjA5LDYgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XG4gXG4gXHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuLVxuLW91dF9yZXRyeTpcbi1cdC8qXG4tXHQgKiBXZSBkcm9wcGVkIHRoZSBtbWFwX2xvY2ssIHdlIG5lZWQgdG8gcmV0dXJuIHRvIHRoZSBmYXVsdCBoYW5kbGVyIHRvXG4tXHQgKiByZS1maW5kIHRoZSB2bWEgYW5kIGNvbWUgYmFjayBhbmQgZmluZCBvdXIgaG9wZWZ1bGx5IHN0aWxsIHBvcHVsYXRlZFxuLVx0ICogcGFnZS5cbi1cdCAqL1xuLVx0aWYgKCFJU19FUlIoZm9saW8pKVxuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0aWYgKG1hcHBpbmdfbG9ja2VkKVxuLVx0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbi1cdGlmIChmcGluKVxuLVx0XHRmcHV0KGZwaW4pO1xuLVx0cmV0dXJuIHJldCB8IFZNX0ZBVUxUX1JFVFJZO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGZpbGVtYXBfZmF1bHQpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDg6MzQuNjQ5NzIwOTU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0NjM2ODQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYWdlIE1hcCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyBzb21lIGNvcmUgZmlsZSBtYXBwaW5nIGxvZ2ljLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIGl0J3MgYWltaW5nIHRvIHNpbXBsaWZ5IGhvdyB3ZSBoYW5kbGUgdGhlIGBtbWFwYCBsb2NrIGluIGNvbmp1bmN0aW9uIHdpdGggZm9saW8gbG9ja2luZywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cbkZpcnN0IG9mZiwgaXQncyBheGluZyB0aGUgYEZHUF9GT1JfTU1BUGAgZmxhZyBmcm9tIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGFzIHRoYXQgZmxhZyB1c3VhbGx5IGFjdHMgYXMgYSBtYXJrZXIgZm9yIGBtbWFwYC1yZWxhdGVkIG9wZXJhdGlvbnMuIFRoZSBmdW5jdGlvbiBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCBpcyBiZWluZyB0d2Vha2VkIHNvIGl0IHdvbid0IHVubG9jayB0aGUgZm9saW8gaWYgdGhpcyBzcGVjaWZpYyBmbGFnIGlzbid0IHByZXNlbnQgYW55bW9yZS4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZSBgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXBgIGZ1bmN0aW9uIGlzIGJlaW5nIHJlbW92ZWQgZW50aXJlbHkuIFRoYXQgc2VlbXMgbGlrZSBhIHByZXR0eSBkaXJlY3Qgc2ltcGxpZmljYXRpb24uXG5cbkl0J3MgYWxzbyBhbHRlcmluZyB0aGUgc2lnbmF0dXJlcyBvZiB0aGUgcmVhZGFoZWFkIGZ1bmN0aW9ucywgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgIGFuZCBgZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWRgLiBUaGV5J3JlIG5vdyByZXR1cm5pbmcgYHZvaWRgIGluc3RlYWQgb2YgYHN0cnVjdCBmaWxlICpgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIHRha2luZyBvdXQgdGhlIGBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW9gIGNhbGxzIGZyb20gdGhlbS4gU28sIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBmaWxlIHN0cnVjdHVyZSwgdGhleSBhcmUgcGVyZm9ybWluZyBhIGxvY2tpbmcgZnVuY3Rpb24gb24gdGhlaXIgb3duLlxuXG5Ob3cgdGhlIGBmaWxlbWFwX2ZhdWx0YCBmdW5jdGlvbiBoYXMgYWxzbyBjaGFuZ2VkLCBzbyB0aGF0IGl0IGRvZXNuJ3QgdHJ5IHRvIGRyb3AgYG1tYXBfbG9ja2Agd2hlbiBpdCdzIGRlYWxpbmcgd2l0aCBJL08gb3IgbG9ja2luZyBmb2xpb3MuIFRoZSBjYWxscyB0byBgbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvYCBhcmUgZ29uZSBoZXJlIHRvbywgcGx1cyBgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXBgIGlzIHJlbW92ZWQuXG5cbldhaXQsIHNvIGlzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZT8gSXQgZGVmaW5pdGVseSBsb29rcyBsaWtlIGEgY2hhbmdlIGluIHRoZSBsb2NraW5nIG1vZGVsIGZvciBwYWdlIGZhdWx0cyBhbmQgcmVhZGFoZWFkLiBJdCdzIG5vIGxvbmdlciByZWxlYXNpbmcgdGhlIGZhdWx0IGxvY2sgZHVyaW5nIEkvTyBvciBmb2xpbyBsb2NraW5nLCB3aGljaCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBvbiBjb25jdXJyZW5jeS5cblxuT2theSwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvYCBpcyBzdGlsbCB1dGlsaXplZCBpbiBvdGhlciBhcmVhcyBvZiB0aGUgY29kZSBiYXNlLiBJIG5lZWQgdG8gZ3JlcCBmb3IgaXQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGlzIGlzbid0IGdvaW5nIHRvIGJyZWFrIHNvbWV0aGluZyBlbHNlLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc1NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjQ4OjQxLjM5NjA5MzAzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTc0NzkzNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1heWJlX3VubG9ja19tbWFwX2Zvcl9pb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTEyNTg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzX2VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTEyNzUtXFxubW0vaW50ZXJuYWwuaDoxMjc2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZpbGUgKm1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG5tbS9pbnRlcm5hbC5oLTEyNzctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmaWxlICpmcGluKVxcbi0tXFxubW0vbWVtb3J5LmM9MzcwNj1zdGF0aWMgdm1fZmF1bHRfdCBmYXVsdF9kaXJ0eV9zaGFyZWRfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTM3MzktXFxubW0vbWVtb3J5LmM6Mzc0MDpcXHRcXHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgTlVMTCk7XFxubW0vbWVtb3J5LmMtMzc0MS1cXHRcXHRiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkKG1hcHBpbmcpO1xcbi0tXFxubW0vc2htZW0uYz0yNjQzPXN0YXRpYyB2bV9mYXVsdF90IHNobWVtX2ZhbGxvY193YWl0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxubW0vc2htZW0uYy0yNjU4LVxcdFxcdHJldCA9IFZNX0ZBVUxUX05PUEFHRTtcXG5tbS9zaG1lbS5jOjI2NTk6XFx0XFx0ZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsIE5VTEwpO1xcbm1tL3NobWVtLmMtMjY2MC1cXHRcXHRzaG1lbV9mYWxsb2Nfd2FpdHEgPSBzaG1lbV9mYWxsb2MtXFx1MDAzZXdhaXRxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOTo0ODo0NC41NzA4OTI3MzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQ2MjYxMDM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW9gIFJlbW92YWwgaW4gS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbm90aWNpbmcgYSBzaWduaWZpY2FudCBjaGFuZ2U6IHRoZSByZW1vdmFsIG9mIGBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW9gIHdpdGhpbiBgZmlsZW1hcF9mYXVsdGAuICBUaGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBob3cgcGFnZSBmYXVsdHMgYXJlIGhhbmRsZWQsIHNvIGl0J3MgYSBjcml0aWNhbCBjaGFuZ2UuIEl0J3MgZGVmaW5pdGVseSBnb2luZyB0byBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHBpbnBvaW50IHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgZm9jdXNlZCBmdXp6aW5nLiBJIHdhcyB0aGlua2luZyBvZiBpbmNsdWRpbmcgZnVuY3Rpb25zIGxpa2UgYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAsIGBkb19zeW5jX21tYXBfcmVhZGFoZWFkYCwgYGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkYCwgYW5kLCBvZiBjb3Vyc2UsIGBmaWxlbWFwX2ZhdWx0YCBpdHNlbGYuIEJ1dCB0aGVuLCBJIGhhZCB0byBzdG9wIGFuZCByZS1yZWFkIHRoZSBwcm9tcHQuIEl0IGV4cGxpY2l0bHkgc3RhdGVzIHRvICphdm9pZCogbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHRlc3QgZGlzdHJpYnV0aW9uIHNrZXdpbmcuXG5cbmBmaWxlbWFwX2ZhdWx0YCBpcyAqZGVmaW5pdGVseSogYSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uOyBpdCdzIHByYWN0aWNhbGx5IHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBmaWxlLWJhY2tlZCBwYWdlIGZhdWx0cywgd2hpY2ggYXJlIGluY3JlZGlibHkgY29tbW9uLiBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCwgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgLCBhbmQgYGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkYCBhcmUgYWxzbyBob3QuICBTbywgYmFzZWQgb24gdGhhdCBkaXJlY3RpdmUsIEkgc2hvdWxkIHByb2JhYmx5IGxlYXZlIHRoZSBgRm9jdXNTeW1ib2xzYCBlbnRyeSBlbXB0eS4gSXQncyBhIHRyaWNreSBiYWxhbmNlIGJldHdlZW4gZm9jdXNpbmcgb24gdGhlIGNoYW5nZSBhbmQgYXZvaWRpbmcgb3Zlcmx5IGdlbmVyaWMgdGFyZ2V0cy5cblxuQnV0IHRoZW4gSSB0b29rIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSSByZWFsaXplZCB0aGUgcmVhbCBmdW5jdGlvbmFsIHNoaWZ0IGlzIHRoYXQgaXQgcmVtb3ZlcyB0aGUgZHJvcHBpbmcgb2YgdGhlIGBtbWFwX2xvY2tgIHdpdGhpbiBgZmlsZW1hcF9mYXVsdGAuIFRoaXMgaGFzIGEgc2lnbmlmaWNhbnQgaW1wYWN0OyBpZiBgbW1hcF9sb2NrYCBpc24ndCBkcm9wcGVkLCBpdCBtZWFucyBgZmlsZW1hcF9mYXVsdGAgKnByb2JhYmx5KiBkb2Vzbid0IHJldHVybiBgVk1fRkFVTFRfUkVUUllgIGFueW1vcmUgKGV4Y2VwdCBmcm9tIGBmaWxlbWFwX2ZhdWx0X3JlY2hlY2tfcHRlX25vbmVgLCBidXQgdGhhdCBmdW5jdGlvbiByZXR1cm5zIGBWTV9GQVVMVF9OT1BBR0VgIG9yIGAwYCkuICBJIHNob3VsZCBjaGVjayBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgZmlsZW1hcF9mYXVsdGAgdG8gYmUgY2VydGFpbi4gVGhlIHJlbW92YWwgb2YgdGhpcyByZXR1cm4gY291bGQgaGF2ZSBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOTo0ODo1Ni4wMzM1MDU4MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMzc4Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZNX0ZBVUxUX1JFVFJZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2ZpbGVtYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9MTc1ND12bV9mYXVsdF90IF9fZm9saW9fbG9ja19vcl9yZXRyeShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNzYwLVxcdFxcdCAqIENBVVRJT04hIEluIHRoaXMgY2FzZSwgbW1hcF9sb2NrL3Blci1WTUEgbG9jayBpcyBub3RcXG5tbS9maWxlbWFwLmM6MTc2MTpcXHRcXHQgKiByZWxlYXNlZCBldmVuIHRob3VnaCByZXR1cm5pbmcgVk1fRkFVTFRfUkVUUlkuXFxubW0vZmlsZW1hcC5jLTE3NjItXFx0XFx0ICovXFxubW0vZmlsZW1hcC5jLTE3NjMtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpXFxubW0vZmlsZW1hcC5jOjE3NjQ6XFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1JFVFJZO1xcbm1tL2ZpbGVtYXAuYy0xNzY1LVxcbi0tXFxubW0vZmlsZW1hcC5jLTE3NzAtXFx0XFx0XFx0Zm9saW9fd2FpdF9sb2NrZWQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYzoxNzcxOlxcdFxcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcXG5tbS9maWxlbWFwLmMtMTc3Mi1cXHR9XFxuLS1cXG5tbS9maWxlbWFwLmMtMTc3OC1cXHRcXHRcXHRyZWxlYXNlX2ZhdWx0X2xvY2sodm1mKTtcXG5tbS9maWxlbWFwLmM6MTc3OTpcXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XFxubW0vZmlsZW1hcC5jLTE3ODAtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOTo0ODo1Ni41MzQ4OTUxMTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg4MzIzNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIHRoZSBzeXN0ZW0gaXMgc3RpbGwgcmV0dXJuaW5nIGBWTV9GQVVMVF9SRVRSWWAgZnJvbSBgX19mb2xpb19sb2NrX29yX3JldHJ5YC4gVGhhdCdzLi4uIGludGVyZXN0aW5nLiBOb3csIHdoZXJlIGlzIGBfX2ZvbGlvX2xvY2tfb3JfcmV0cnlgIGRlZmluZWQ/IEFoLCByaWdodCwgaXQncyBpbiBgbW0vZmlsZW1hcC5jYC4gSG1tLCBkb2VzIGBmaWxlbWFwX2ZhdWx0YCB1c2UgdGhhdD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIGdyYXBoLiBMZXQncyBzZWUgaWYgdGhlIGZhdWx0IGhhbmRsaW5nIHBhdGggaXMgZ29pbmcgdGhyb3VnaCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjQ5OjAwLjAyMzIyMTI0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODUxNTgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZvbGlvX2xvY2tfb3JfcmV0cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZmlsZW1hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZpbGVtYXAuYz0xNzE3PXN0YXRpYyBpbnQgX19mb2xpb19sb2NrX2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB3YWl0X3BhZ2VfcXVldWUgKndhaXQpXFxuLS1cXG5tbS9maWxlbWFwLmMtMTc1My0gKi9cXG5tbS9maWxlbWFwLmM6MTc1NDp2bV9mYXVsdF90IF9fZm9saW9fbG9ja19vcl9yZXRyeShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9maWxlbWFwLmMtMTc1NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjQ5OjAwLjE1MTc0MTcxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NDQxOTc3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgX19mb2xpb19sb2NrX29yX3JldHJ5YCBpbiB0aGUgQ29udGV4dCBvZiBgZmlsZW1hcF9mYXVsdGAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBfX2ZvbGlvX2xvY2tfb3JfcmV0cnlgIHBsYXllZCBhIGtleSByb2xlIHdpdGhpbiBgZmlsZW1hcF9mYXVsdGAsIGJ1dCBzb21ldGhpbmcncyBub3QgcXVpdGUgY2xpY2tpbmcuIE15IGludGVybmFsIG1vZGVsIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGlzIHNob3VsZCBiZSB1c2VkIHRoZXJlLiBUbyBiZSBzdXJlLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyB1c2FnZS4gTGV0IG1lIHF1aWNrbHkgdHJhY2Ugd2hlcmUgYF9fZm9saW9fbG9ja19vcl9yZXRyeWAgaXMgYWN0dWFsbHkgZW1wbG95ZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgbXkgbWVudGFsIHBpY3R1cmUgb2YgdGhlIHN5bmNocm9uaXphdGlvbiBmbG93IGlzIGFjY3VyYXRlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsb2NrIGFjcXVpc2l0aW9uIHN0cmF0ZWd5LiBJcyBpdCB1c2VkPyBJZiBub3QsIHdoZXJlIGlzIHRoYXQgZnVuY3Rpb24gYWN0dWFsbHkgbmVlZGVkPyBJIG5lZWQgdG8gcmVjb25jaWxlIHRoaXMgZGlzY3JlcGFuY3kgaW4gbXkga25vd2xlZGdlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDI0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDk6MDcuOTk1OTQyNTczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM0OTM5NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZm9saW9fbG9ja19vcl9yZXRyeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xMDk5PWludCBfX2ZvbGlvX2xvY2tfa2lsbGFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTEwMDp2bV9mYXVsdF90IF9fZm9saW9fbG9ja19vcl9yZXRyeShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTEwMS12b2lkIHVubG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTExODk9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbG9ja19raWxsYWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTIwMS0gKiBSZXR1cm4gdmFsdWUgYW5kIG1tYXBfbG9jayBpbXBsaWNhdGlvbnMgZGVwZW5kIG9uIGZsYWdzOyBzZWVcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxMjAyOiAqIF9fZm9saW9fbG9ja19vcl9yZXRyeSgpLlxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTEyMDMtICovXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTIwND1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3QgZm9saW9fbG9ja19vcl9yZXRyeShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTIwOC1cXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjEyMDk6XFx0XFx0cmV0dXJuIF9fZm9saW9fbG9ja19vcl9yZXRyeShmb2xpbywgdm1mKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xMjEwLVxcdHJldHVybiAwO1xcbi0tXFxubW0vZmlsZW1hcC5jPTE3MTc9c3RhdGljIGludCBfX2ZvbGlvX2xvY2tfYXN5bmMoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHdhaXRfcGFnZV9xdWV1ZSAqd2FpdClcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNzUzLSAqL1xcbm1tL2ZpbGVtYXAuYzoxNzU0OnZtX2ZhdWx0X3QgX19mb2xpb19sb2NrX29yX3JldHJ5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2ZpbGVtYXAuYy0xNzU1LXtcXG4tLVxcbm1tL21lbW9yeS5jPTUyODc9c3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01Mzk1LSAqIGZsYWdzIGFuZCB2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlZmF1bHQoKSByZXR1cm4gdmFsdWUuXFxubW0vbWVtb3J5LmM6NTM5NjogKiBTZWUgZmlsZW1hcF9mYXVsdCgpIGFuZCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoKS5cXG5tbS9tZW1vcnkuYy01Mzk3LSAqL1xcbi0tXFxubW0vbWVtb3J5LmM9NTkxND1zdGF0aWMgdm1fZmF1bHRfdCBkb19zaGFyZWRfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01OTU5LSAqIFRoZSBsb2NrIG1heSBoYXZlIGJlZW4gcmVsZWFzZWQgZGVwZW5kaW5nIG9uIGZsYWdzIGFuZCBvdXJcXG5tbS9tZW1vcnkuYzo1OTYwOiAqIHJldHVybiB2YWx1ZS4gIFNlZSBmaWxlbWFwX2ZhdWx0KCkgYW5kIF9fZm9saW9fbG9ja19vcl9yZXRyeSgpLlxcbm1tL21lbW9yeS5jLTU5NjEtICogSWYgdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHZtYSBtYXkgYmVjb21lIGludmFsaWQgKGZvciBleGFtcGxlXFxuLS1cXG5tbS9tZW1vcnkuYz02Mjk4PXN0YXRpYyB2b2lkIGZpeF9zcHVyaW91c19mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL21lbW9yeS5jLTYzMzItICogYW5kIG91ciByZXR1cm4gdmFsdWUuXFxubW0vbWVtb3J5LmM6NjMzMzogKiBTZWUgZmlsZW1hcF9mYXVsdCgpIGFuZCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoKS5cXG5tbS9tZW1vcnkuYy02MzM0LSAqL1xcbm1tL21lbW9yeS5jPTYzMzU9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTY0MTQtICogdGhlIHJlc3VsdCwgdGhlIGxvY2sgaXMgbm90IGhlbGQgb24gZXhpdC4gIFNlZSBmaWxlbWFwX2ZhdWx0KClcXG5tbS9tZW1vcnkuYzo2NDE1OiAqIGFuZCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoKS5cXG5tbS9tZW1vcnkuYy02NDE2LSAqL1xcbi0tXFxubW0vbWVtb3J5LmM9NjYwOT1zdGF0aWMgdm1fZmF1bHRfdCBzYW5pdGl6ZV9mYXVsdF9mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbW9yeS5jLTY2NDgtICogVGhlIGxvY2sgbWF5IGhhdmUgYmVlbiByZWxlYXNlZCBkZXBlbmRpbmcgb24gZmxhZ3MgYW5kIG91clxcbm1tL21lbW9yeS5jOjY2NDk6ICogcmV0dXJuIHZhbHVlLiAgU2VlIGZpbGVtYXBfZmF1bHQoKSBhbmQgX19mb2xpb19sb2NrX29yX3JldHJ5KCkuXFxubW0vbWVtb3J5LmMtNjY1MC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDk6MTAuMzMwODg5MDY1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MTc0NTk5MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb2NraW5nIENoYW5nZXMgaW4gYGZpbGVtYXBfZmF1bHRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBmb2xpb19sb2NrX29yX3JldHJ5YCBpcyB1c2VkLCBzcGVjaWZpY2FsbHkgaW4gYG1tL21lbW9yeS5jYCwgYW5kIEknbSBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgYXdheSBmcm9tIGBsb2NrX2ZvbGlvX21heWJlX2Ryb3BfbW1hcGAgaW4gYGZpbGVtYXBfZmF1bHRgLiBQcmV2aW91c2x5LCB0aGF0IGZ1bmN0aW9uIGhhZCB0aGUgdGFzayBvZiBkcm9wcGluZyB0aGUgbW1hcCBsb2NrLiBOb3csIGluc3RlYWQsIGBmaWxlbWFwX2ZhdWx0YCBkaXJlY3RseSBjYWxscyBgZm9saW9fdHJ5bG9ja2AuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldhaXQgYSBtaW51dGUhIElmIGBmaWxlbWFwX2ZhdWx0YCAqZG9lc24ndCogZHJvcCB0aGUgbW1hcCBsb2NrLCBpdCdzIGJsb2NraW5nIG9uIHRoZSBmb2xpbyBsb2NrIHdoaWxlICpzdGlsbCogaG9sZGluZyB0aGUgbW1hcCBsb2NrISBUaGF0J3MgYSBtYXNzaXZlIHNoaWZ0IGluIHRoZSBsb2NraW5nIHNlbWFudGljcyBvZiBgZmlsZW1hcF9mYXVsdGAuXCIgVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCdzIGdvaW5nIHRvIGhhdmUgYWxsIHNvcnRzIG9mIGNvbnNlcXVlbmNlcy4gV2UncmUgdGFsa2luZyBhYm91dCBhIGZ1bmRhbWVudGFsIGRpZmZlcmVuY2UgaW4gaG93IHRoaXMgZnVuY3Rpb24gYmVoYXZlcyB1bmRlciBjb250ZW50aW9uLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgLiBJZiBgZmlsZW1hcF9mYXVsdGAgZG9lc24ndCByZXR1cm4gYFZNX0ZBVUxUX1JFVFJZYCB3aGVuIGBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVGAgaXMgc2V0LCBpdCB3aWxsICpibG9jayouIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC5cblxuQWxyaWdodCwgbGV0J3Mgc3RlcCBiYWNrIGZvciBhIG1vbWVudC4gSSBrbm93IGBmaWxlbWFwX2ZhdWx0YCBpcyBjYWxsZWQgZnJvbSBgZG9fZmF1bHRgLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgZmlsZW1hcF9mYXVsdGAgbm93IGhhbmRsZXMgYEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUYCBiZWNhdXNlIEkgc3VzcGVjdCBhIHByb2JsZW0gaGVyZS5cblxuT2theSwgbGV0IG1lIGNoZWNrIHRoZSBjb2RlIGFnYWluLi4uIEl0IGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgZGVkaWNhdGVkIGNoZWNrIGZvciBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgIGFueW1vcmUhIFRoaXMgcmVpbmZvcmNlcyBteSBjb25jZXJucy5cblxuV2FpdCwgYGZpbGVtYXBfZ2V0X2ZvbGlvYCB1c2VzIGBGR1BfTk9XQUlUYCBpZiBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgIGlzIHNldC4gT2theSwgbGV0IG1lIGdvIHRocm91Z2ggYGZpbGVtYXBfZmF1bHRgIGFnYWluLCBpbiBsaWdodCBvZiB0aGlzIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDk6MTguMDQ4MzUxMjU0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM1OTc0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZmlsZW1hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZpbGVtYXAuYz0xNzE3PXN0YXRpYyBpbnQgX19mb2xpb19sb2NrX2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB3YWl0X3BhZ2VfcXVldWUgKndhaXQpXFxuLS1cXG5tbS9maWxlbWFwLmMtMTc0OC0gKiAgICAgdm1hX2VuZF9yZWFkKCkpLCB1bmxlc3MgZmxhZ3MgaGFkIGJvdGggRkFVTFRfRkxBR19BTExPV19SRVRSWSBhbmRcXG5tbS9maWxlbWFwLmM6MTc0OTogKiAgICAgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQgc2V0LCBpbiB3aGljaCBjYXNlIHRoZSBsb2NrIGlzIHN0aWxsIGhlbGQuXFxubW0vZmlsZW1hcC5jLTE3NTAtICpcXG4tLVxcbm1tL2ZpbGVtYXAuYz0xNzU0PXZtX2ZhdWx0X3QgX19mb2xpb19sb2NrX29yX3JldHJ5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE3NjItXFx0XFx0ICovXFxubW0vZmlsZW1hcC5jOjE3NjM6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpXFxubW0vZmlsZW1hcC5jLTE3NjQtXFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1JFVFJZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOTo0OToxOC4xNTE5NTYwNDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzMjI1NTEwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYGZpbGVtYXBfZmF1bHRgIExvY2tpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIGBmaWxlbWFwX2ZhdWx0YCB1c2VkIHRvIGhhbmRsZSBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgIHVzaW5nIGBsb2NrX2ZvbGlvX21heWJlX2Ryb3BfbW1hcGAuIFRoZSBsb2dpYyB3YXMsIGlmIHRoZSBmb2xpbyBjb3VsZG4ndCBiZSBsb2NrZWQsIGl0IHdvdWxkIGNvbmRpdGlvbmFsbHkgcmV0dXJuIDAgYW5kIHRoZW4gcmV0cnkuIFRoaXMgd2FzIHRvIGFsbG93IHRoZSBmYXVsdCBoYW5kbGVyIHRvIHJldHJ5IGEgZmF1bHQgd2l0aG91dCBibG9ja2luZyB3aGVuIGBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVGAgd2FzIHNldC4gTm93LCBpdCBsb29rcyBsaWtlIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvYCAqYWx3YXlzKiB0cmllcyB0byBsb2NrIHRoZSBmb2xpbyB3aXRoIGBGR1BfTE9DS2AuIEhtbSwgYW5kIHRoYXQgbWVhbnMgaWYgdGhlIGZvbGlvIGlzIHVuYXZhaWxhYmxlLCBpdCB3aWxsIGRpcmVjdGx5IGJsb2NrIHRoZSBwcm9jZXNzLlxuXG5UaGUgb2xkIGNvZGUgd291bGQgcmV0cnkgd2l0aCBWTV9GQVVMVF9SRVRSWSB3aGljaCBpcyBkZXNpZ25lZCBmb3IgdGhpcyBjYXNlIVxuXG5Ob3csIHRoZSBjb2RlICpkaXJlY3RseSogY2FsbHMgYF9fZm9saW9fbG9ja2Agb3IgYF9fZm9saW9fbG9ja19raWxsYWJsZWAuICBJZiBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgIGlzIHNldCwgdGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFzIGl0IHdpbGwgKmJsb2NrKiBpbnN0ZWFkIG9mIHJldHVybmluZy4gVGhpcyBpcyBhIHBvdGVudGlhbCByZWdyZXNzaW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGludGVudGlvbmFsIG9yIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBlbHNlIGdvaW5nIG9uLlxuXG5TaW5jZSB0aGUgb3JpZ2luYWwgbG9naWMgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIGl0IGlzIGNoYW5naW5nIHRoZSBiZWhhdmlvciwgdGhpcyBuZWVkcyBmdXp6aW5nIVxuXG5JIHNlZSBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCBoYXMgYWxzbyBiZWVuIG1vZGlmaWVkLiBBbmQgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgIGFuZCBgZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWRgIHdoaWNoIGFyZSB1c2VkIHdpdGggTU1VIGNvbmZpZy5cblxuVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNvIEkgZG9uJ3Qgc2VlIGFueSBzcGVjaWFsIGNvbmZpZ3MgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQuIGBDT05GSUdfTU1VYCBpcyByZXF1aXJlZCwgYnV0IHRoYXQgaXMgYmFzaWNhbGx5IGFsd2F5cyBlbmFibGVkLiBgQ09ORklHX05VTUFgIGNvdWxkIGJlIG5lZWRlZCwgc2luY2UgYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAgaXMgYWxzbyBtb2RpZmllZC5cblxuYGZpbGVtYXBfZmF1bHRgIGFuZCBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCwgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgIGFuZCBgZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWRgIGFyZSBkZWZpbml0ZWx5IGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gSSBzaG91bGRuJ3QgbGlzdCB0aGVtIGluIGBGb2N1c1N5bWJvbHNgLiBUaGV5IGdldCBjYWxsZWQgb24gZXZlcnkgcGFnZSBmYXVsdCwgbWVhbmluZyB0aGV5IGFyZSBhIGJhZCBjaG9pY2UgZm9yIGJlaW5nIGFkZGVkIHRvIGBGb2N1c1N5bWJvbHNgLlxuXG5UaGVyZWZvcmUsIG15IHN1bW1hcnkgaXM6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlXG4qICAgKipGb2N1c1N5bWJvbHMqKjogXFxbIF1cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogXFxbIF1cbiogICAqKlJlYXNvbmluZyoqOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIGBmaWxlbWFwX2ZhdWx0YCwgYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAsIGBkb19zeW5jX21tYXBfcmVhZGFoZWFkYCBhbmQgYGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkYCwgY2hhbmdpbmcgaG93IHRoZSBmb2xpbyBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZW1vdmluZyB0aGUgZHJvcHBpbmcgb2YgdGhlIG1tYXAgbG9jayBkdXJpbmcgSS9PIGFuZCBmb2xpbyBsb2NraW5nLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDk6MzIuNDc0NTEwMjM3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMzOTk3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19maWxlbWFwX2dldF9mb2xpb19tcG9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2ZpbGVtYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9MTg5ND12b2lkICpmaWxlbWFwX2dldF9lbnRyeShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleClcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xOTI1LS8qKlxcbm1tL2ZpbGVtYXAuYzoxOTI2OiAqIF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCAtIEZpbmQgYW5kIGdldCBhIHJlZmVyZW5jZSB0byBhIGZvbGlvLlxcbm1tL2ZpbGVtYXAuYy0xOTI3LSAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzc19zcGFjZSB0byBzZWFyY2guXFxuLS1cXG5tbS9maWxlbWFwLmMtMTk0MS0gKi9cXG5tbS9maWxlbWFwLmM6MTk0MjpzdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5tbS9maWxlbWFwLmMtMTk0My1cXHRcXHRwZ29mZl90IGluZGV4LCBmZ2ZfdCBmZ3BfZmxhZ3MsIGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vZmlsZW1hcC5jLTIwNjQtfVxcbm1tL2ZpbGVtYXAuYzoyMDY1OkVYUE9SVF9TWU1CT0woX19maWxlbWFwX2dldF9mb2xpb19tcG9sKTtcXG5tbS9maWxlbWFwLmMtMjA2Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDk6MzIuNTg3OTE1NTQ0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5OTc0NDc1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGlkZW50aWZ5IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxldmFudCB0byBzb21lIG1vZGlmaWVkIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gY2hlY2sgZm9yIGBDT05GSUdfTlVNQWAsIGFzIGl0IG9mdGVuIHN1cmZhY2VzIGluIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHRzLiBIb3dldmVyLCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBpcyAqbm90KiBnYXRlZCBieSB0aGF0IGNvbmZpZ3VyYXRpb24uIEl0J3MgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0J3MgYWx3YXlzIGNvbXBpbGVkIGluLiBUaGF0IG5hcnJvd3MgdGhpbmdzIGRvd24gcXVpY2tseS5cblxuVGhlbiwgSSByZS1yZWFkIHRoZSBpbnN0cnVjdGlvbnM6IEkgbmVlZCB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgY29uZmlncyB0aGF0IGFyZSBhbG1vc3QgYWx3YXlzIGVuYWJsZWQuIEl0IHNwZWNpZmljYWxseSBtZW50aW9ucyBvbmx5IGxpc3RpbmcgdGhvc2UgKmRpcmVjdGx5KiByZWxhdGVkIHRvIHRoZSBtb2RpZmllZCBjb2RlLiBTaW5jZSBJJ20gbm90IHNlZWluZyBhbnkgc3VjaCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBpbiBwbGF5LCB0aGVyZSdzIG5vIG5lZWQgdG8gZW51bWVyYXRlIGFueXRoaW5nLiBJdCdzIGEgY2FzZSBvZiBmaW5kaW5nICpub3RoaW5nKiByZWxldmFudC4gU28sIHRoZSByaWdodCBhY3Rpb24gaGVyZSBpcyB0byByZXR1cm4gYW4gZW1wdHkgbGlzdCBvZiBjb25maWdzLiBNYWtlcyBzZW5zZS5cblxuSSdsbCBub3cgdHJpZ2dlciB0aGUgYHNldC1yZXN1bHRzYCBhY3Rpb24sIHNpbmNlIHRoZSBhbmFseXNpcyBpcyBjb21wbGV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MTUsIk91dHB1dFRva2VucyI6OTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOTo0OTozNy41ODUzNjcwM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gZmlsZW1hcF9mYXVsdCBhbmQgX19maWxlbWFwX2dldF9mb2xpb19tcG9sLCBjaGFuZ2luZyBob3cgdGhlIGZvbGlvIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbW92aW5nIHRoZSBkcm9wcGluZyBvZiB0aGUgbW1hcCBsb2NrIGR1cmluZyBJL08gYW5kIGZvbGlvIGxvY2tpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIGZpbGVtYXBfZmF1bHQgYW5kIF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCwgY2hhbmdpbmcgaG93IHRoZSBmb2xpbyBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZW1vdmluZyB0aGUgZHJvcHBpbmcgb2YgdGhlIG1tYXAgbG9jayBkdXJpbmcgSS9PIGFuZCBmb2xpbyBsb2NraW5nLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7h29c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-22 19:36:14 +0000 UTC FinishedAt: 2026-06-22 19:49:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "322008f87f917e2217eeac386a9410945092eb2e", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "322008f87f917e2217eeac386a9410945092eb2e", "config_name": "upstream-apparmor-kasan.config", "series_id": "6a0ee473-62c9-4e49-931c-ea503d51710f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gZmlsZW1hcF9mYXVsdCBhbmQgX19maWxlbWFwX2dldF9mb2xpb19tcG9sLCBjaGFuZ2luZyBob3cgdGhlIGZvbGlvIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbW92aW5nIHRoZSBkcm9wcGluZyBvZiB0aGUgbW1hcCBsb2NrIGR1cmluZyBJL08gYW5kIGZvbGlvIGxvY2tpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2E3NmM1OWY4NGY3YWUyNGE1NDFmMDU5M2U2OWU5ZDU5NTk5ZTY3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDIyIDE5OjQ4OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDFmNTA5OTFiNDNlM2IzLi5lNmFjMjIxZWU1NGQ4YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTY5NSw5ICYjNDM7Njk1LDYgQEAgcGdvZmZfdCBwYWdlX2NhY2hlX3ByZXZfbWlzcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiAgKiAqICVGR1BfQ1JFQVQgLSBJZiBubyBmb2xpbyBpcyBwcmVzZW50IHRoZW4gYSBuZXcgZm9saW8gaXMgYWxsb2NhdGVkLFxuICAqICAgYWRkZWQgdG8gdGhlIHBhZ2UgY2FjaGUgYW5kIHRoZSBWTSYjMzk7cyBMUlUgbGlzdC4gIFRoZSBmb2xpbyBpc1xuICAqICAgcmV0dXJuZWQgbG9ja2VkLlxuLSAqICogJUZHUF9GT1JfTU1BUCAtIFRoZSBjYWxsZXIgd2FudHMgdG8gZG8gaXRzIG93biBsb2NraW5nIGRhbmNlIGlmIHRoZVxuLSAqICAgZm9saW8gaXMgYWxyZWFkeSBpbiBjYWNoZS4gIElmIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLCB1bmxvY2sgaXRcbi0gKiAgIGJlZm9yZSByZXR1cm5pbmcgc28gdGhlIGNhbGxlciBjYW4gZG8gdGhlIHNhbWUgZGFuY2UuXG4gICogKiAlRkdQX1dSSVRFIC0gVGhlIGZvbGlvIHdpbGwgYmUgd3JpdHRlbiB0byBieSB0aGUgY2FsbGVyLlxuICAqICogJUZHUF9OT0ZTIC0gX19HRlBfRlMgd2lsbCBnZXQgY2xlYXJlZCBpbiBnZnAuXG4gICogKiAlRkdQX05PV0FJVCAtIERvbiYjMzk7dCBibG9jayBvbiB0aGUgZm9saW8gbG9jay5cbkBAIC03MTQsOSAmIzQzOzcxMSw4IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBmZ2ZfdDtcbiAjZGVmaW5lIEZHUF9XUklURVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwOClcbiAjZGVmaW5lIEZHUF9OT0ZTXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxuICNkZWZpbmUgRkdQX05PV0FJVFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcbi0jZGVmaW5lIEZHUF9GT1JfTU1BUFx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcbi0jZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXG4tI2RlZmluZSBGR1BfRE9OVENBQ0hFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKVxuJiM0MzsjZGVmaW5lIEZHUF9TVEFCTEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApXG4mIzQzOyNkZWZpbmUgRkdQX0RPTlRDQUNIRVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA4MClcbiAjZGVmaW5lIEZHRl9HRVRfT1JERVIoZmdmKVx0KCgoX19mb3JjZSB1bnNpZ25lZClmZ2YpIFx1MDAzZVx1MDAzZSAyNilcdC8qIHRvcCA2IGJpdHMgKi9cbiBcbiAjZGVmaW5lIEZHUF9XUklURUJFR0lOXHRcdChGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCB8IEZHUF9TVEFCTEUpXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA3ZTQ2N2M4MWQyMTM4OS4uMTNhODYxYjM4NjIxZmYgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuY1xuQEAgLTE5OTUsNyAmIzQzOzE5OTUsNyBAQCBzdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRnZnAgXHUwMDI2PSB+R0ZQX0tFUk5FTDtcbiBcdFx0XHRnZnAgfD0gR0ZQX05PV0FJVDtcbiBcdFx0fVxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKCEoZmdwX2ZsYWdzIFx1MDAyNiAoRkdQX0xPQ0sgfCBGR1BfRk9SX01NQVApKSkpXG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKCEoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfTE9DSykpKVxuIFx0XHRcdGZncF9mbGFncyB8PSBGR1BfTE9DSztcbiBcbiBcdFx0aWYgKG9yZGVyIFx1MDAzZSBtYXBwaW5nX21heF9mb2xpb19vcmRlcihtYXBwaW5nKSlcbkBAIC0yMDQyLDEyICYjNDM7MjA0Miw2IEBAIHN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4tXHRcdC8qXG4tXHRcdCAqIGZpbGVtYXBfYWRkX2ZvbGlvIGxvY2tzIHRoZSBwYWdlLCBhbmQgZm9yIG1tYXBcbi1cdFx0ICogd2UgZXhwZWN0IGFuIHVubG9ja2VkIHBhZ2UuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZm9saW8gXHUwMDI2XHUwMDI2IChmZ3BfZmxhZ3MgXHUwMDI2IEZHUF9GT1JfTU1BUCkpXG4tXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdH1cbiBcbiBcdGlmICghZm9saW8pXG5AQCAtMzI1OSw1MiAmIzQzOzMyNTMsNiBAQCBsb2ZmX3QgbWFwcGluZ19zZWVrX2hvbGVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHN0YXJ0LFxuIFxuICNpZmRlZiBDT05GSUdfTU1VXG4gI2RlZmluZSBNTUFQX0xPVFNBTUlTUyAgKDEwMClcbi0vKlxuLSAqIGxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwIC0gbG9jayB0aGUgcGFnZSwgcG9zc2libHkgZHJvcHBpbmcgdGhlIG1tYXBfbG9ja1xuLSAqIEB2bWYgLSB0aGUgdm1fZmF1bHQgZm9yIHRoaXMgZmF1bHQuXG4tICogQGZvbGlvIC0gdGhlIGZvbGlvIHRvIGxvY2suXG4tICogQGZwaW4gLSB0aGUgcG9pbnRlciB0byB0aGUgZmlsZSB3ZSBtYXkgcGluIChvciBpcyBhbHJlYWR5IHBpbm5lZCkuXG4tICpcbi0gKiBUaGlzIHdvcmtzIHNpbWlsYXIgdG8gbG9ja19mb2xpb19vcl9yZXRyeSBpbiB0aGF0IGl0IGNhbiBkcm9wIHRoZVxuLSAqIG1tYXBfbG9jay4gIEl0IGRpZmZlcnMgaW4gdGhhdCBpdCBhY3R1YWxseSByZXR1cm5zIHRoZSBmb2xpbyBsb2NrZWRcbi0gKiBpZiBpdCByZXR1cm5zIDEgYW5kIDAgaWYgaXQgY291bGRuJiMzOTt0IGxvY2sgdGhlIGZvbGlvLiAgSWYgd2UgZGlkIGhhdmVcbi0gKiB0byBkcm9wIHRoZSBtbWFwX2xvY2sgdGhlbiBmcGluIHdpbGwgcG9pbnQgdG8gdGhlIHBpbm5lZCBmaWxlIGFuZFxuLSAqIG5lZWRzIHRvIGJlIGZwdXQoKSYjMzk7ZWQgYXQgYSBsYXRlciBwb2ludC5cbi0gKi9cbi1zdGF0aWMgaW50IGxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZmlsZSAqKmZwaW4pXG4te1xuLVx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKVxuLVx0XHRyZXR1cm4gMTtcbi1cbi1cdC8qXG4tXHQgKiBOT1RFISBUaGlzIHdpbGwgbWFrZSB1cyByZXR1cm4gd2l0aCBWTV9GQVVMVF9SRVRSWSwgYnV0IHdpdGhcbi1cdCAqIHRoZSBmYXVsdCBsb2NrIHN0aWxsIGhlbGQuIFRoYXQmIzM5O3MgaG93IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUXG4tXHQgKiBpcyBzdXBwb3NlZCB0byB3b3JrLiBXZSBoYXZlIHdheSB0b28gbWFueSBzcGVjaWFsIGNhc2VzLi5cbi1cdCAqL1xuLVx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0KmZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCAqZnBpbik7XG4tXHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX0tJTExBQkxFKSB7XG4tXHRcdGlmIChfX2ZvbGlvX2xvY2tfa2lsbGFibGUoZm9saW8pKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBXZSBkaWRuJiMzOTt0IGhhdmUgdGhlIHJpZ2h0IGZsYWdzIHRvIGRyb3AgdGhlXG4tXHRcdFx0ICogZmF1bHQgbG9jaywgYnV0IGFsbCBmYXVsdF9oYW5kbGVycyBvbmx5IGNoZWNrXG4tXHRcdFx0ICogZm9yIGZhdGFsIHNpZ25hbHMgaWYgd2UgcmV0dXJuIFZNX0ZBVUxUX1JFVFJZLFxuLVx0XHRcdCAqIHNvIHdlIG5lZWQgdG8gZHJvcCB0aGUgZmF1bHQgbG9jayBoZXJlIGFuZFxuLVx0XHRcdCAqIHJldHVybiAwIGlmIHdlIGRvbiYjMzk7dCBoYXZlIGEgZnBpbi5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoKmZwaW4gPT0gTlVMTClcbi1cdFx0XHRcdHJlbGVhc2VfZmF1bHRfbG9jayh2bWYpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4tXHR9IGVsc2Vcbi1cdFx0X19mb2xpb19sb2NrKGZvbGlvKTtcbi1cbi1cdHJldHVybiAxO1xuLX1cbi1cbiAvKlxuICAqIFN5bmNocm9ub3VzIHJlYWRhaGVhZCBoYXBwZW5zIHdoZW4gd2UgZG9uJiMzOTt0IGV2ZW4gZmluZCBhIHBhZ2UgaW4gdGhlIHBhZ2VcbiAgKiBjYWNoZSBhdCBhbGwuICBXZSBkb24mIzM5O3Qgd2FudCB0byBwZXJmb3JtIElPIHVuZGVyIHRoZSBtbWFwIHNlbSwgc28gaWYgd2UgaGF2ZVxuQEAgLTMzMTIsMTMgJiM0MzszMjYwLDEyIEBAIHN0YXRpYyBpbnQgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gICogdGhhdC4gIElmIHdlIGRpZG4mIzM5O3QgcGluIGEgZmlsZSB0aGVuIHdlIHJldHVybiBOVUxMLiAgVGhlIGZpbGUgdGhhdCBpc1xuICAqIHJldHVybmVkIG5lZWRzIHRvIGJlIGZwdXQoKSYjMzk7ZWQgd2hlbiB3ZSYjMzk7cmUgZG9uZSB3aXRoIGl0LlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiYjNDM7c3RhdGljIHZvaWQgZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmlsZTtcbiBcdHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSA9IFx1MDAyNmZpbGUtXHUwMDNlZl9yYTtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4gXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCByYSwgbWFwcGluZywgdm1mLVx1MDAzZXBnb2ZmKTtcbi1cdHN0cnVjdCBmaWxlICpmcGluID0gTlVMTDtcbiBcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX2ZsYWdzO1xuIFx0Ym9vbCBmb3JjZV90aHBfcmVhZGFoZWFkID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBpbnQgdGhwX29yZGVyID0gMDtcbkBAIC0zMzQ4LDE1ICYjNDM7MzI5NSwxNCBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdCAqIFZNX0VYRUMgY2FzZSBiZWxvdyBpcyBhbHJlYWR5IGludGVuZGVkIGZvciByYW5kb20gYWNjZXNzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCh2bV9mbGFncyBcdTAwMjYgKFZNX1JBTkRfUkVBRCB8IFZNX0VYRUMpKSA9PSBWTV9SQU5EX1JFQUQpXG4tXHRcdFx0cmV0dXJuIGZwaW47XG4mIzQzO1x0XHRcdHJldHVybjtcbiBcbiBcdFx0aWYgKCFyYS1cdTAwM2VyYV9wYWdlcylcbi1cdFx0XHRyZXR1cm4gZnBpbjtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuIFxuIFx0XHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX1NFUV9SRUFEKSB7XG4tXHRcdFx0ZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsIGZwaW4pO1xuIFx0XHRcdHBhZ2VfY2FjaGVfc3luY19yYShcdTAwMjZyYWN0bCwgcmEtXHUwMDNlcmFfcGFnZXMpO1xuLVx0XHRcdHJldHVybiBmcGluO1xuJiM0MztcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0zMzcxLDEzICYjNDM7MzMxNywxMiBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdCAqIHN0b3AgYm90aGVyaW5nIHdpdGggcmVhZC1haGVhZC4gSXQgd2lsbCBvbmx5IGh1cnQuXG4gXHRcdCAqL1xuIFx0XHRpZiAobW1hcF9taXNzIFx1MDAzZSBNTUFQX0xPVFNBTUlTUylcbi1cdFx0XHRyZXR1cm4gZnBpbjtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0aWYgKGZvcmNlX3RocF9yZWFkYWhlYWQpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBmb2xpb19ucl9wYWdlcyA9IDFVTCBcdTAwM2NcdTAwM2MgdGhwX29yZGVyO1xuIFxuLVx0XHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7XG4gXHRcdHJhY3RsLl9pbmRleCBcdTAwMjY9IH4oZm9saW9fbnJfcGFnZXMgLSAxKTtcbiBcdFx0cmEtXHUwMDNlc2l6ZSA9IGZvbGlvX25yX3BhZ2VzO1xuIFx0XHQvKlxuQEAgLTMzODksNyAmIzQzOzMzMzQsNyBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdHJhLVx1MDAzZWFzeW5jX3NpemUgPSBmb2xpb19ucl9wYWdlcztcbiBcdFx0cmEtXHUwMDNlb3JkZXIgPSB0aHBfb3JkZXI7XG4gXHRcdHBhZ2VfY2FjaGVfcmFfb3JkZXIoXHUwMDI2cmFjdGwsIHJhKTtcbi1cdFx0cmV0dXJuIGZwaW47XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMpIHtcbkBAIC0zNDI3LDI5ICYjNDM7MzM3MiwyNCBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdHJhLVx1MDAzZW9yZGVyID0gMDtcbiBcdH1cbiBcbi1cdGZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTtcbiBcdHJhY3RsLl9pbmRleCA9IHJhLVx1MDAzZXN0YXJ0O1xuIFx0cGFnZV9jYWNoZV9yYV9vcmRlcihcdTAwMjZyYWN0bCwgcmEpO1xuLVx0cmV0dXJuIGZwaW47XG4gfVxuIFxuIC8qXG4tICogQXN5bmNocm9ub3VzIHJlYWRhaGVhZCBoYXBwZW5zIHdoZW4gd2UgZmluZCB0aGUgcGFnZSBhbmQgUEdfcmVhZGFoZWFkLFxuLSAqIHNvIHdlIHdhbnQgdG8gcG9zc2libHkgZXh0ZW5kIHRoZSByZWFkYWhlYWQgZnVydGhlci4gIFdlIHJldHVybiB0aGUgZmlsZSB0aGF0XG4tICogd2FzIHBpbm5lZCBpZiB3ZSBoYXZlIHRvIGRyb3AgdGhlIG1tYXBfbG9jayBpbiBvcmRlciB0byBkbyBJTy5cbiYjNDM7ICogQXN5bmNocm9ub3VzIHJlYWRhaGVhZCBoYXBwZW5zIHdoZW4gd2UgZmluZCB0aGUgZm9saW8gYW5kIGl0IGhhcyB0aGVcbiYjNDM7ICogcmVhZGFoZWFkIGZsYWcgc2V0IHNvIHdlIHdhbnQgdG8gcG9zc2libHkgZXh0ZW5kIHRoZSByZWFkYWhlYWQgZnVydGhlci5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGZpbGUgKmRvX2FzeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIHZvaWQgZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGZpbGUgKmZpbGUgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX2ZpbGU7XG4gXHRzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEgPSBcdTAwMjZmaWxlLVx1MDAzZWZfcmE7XG4gXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCByYSwgZmlsZS1cdTAwM2VmX21hcHBpbmcsIHZtZi1cdTAwM2VwZ29mZik7XG4tXHRzdHJ1Y3QgZmlsZSAqZnBpbiA9IE5VTEw7XG4gXHR1bnNpZ25lZCBzaG9ydCBtbWFwX21pc3M7XG4gXG4gXHQvKiBJZiB3ZSBkb24mIzM5O3Qgd2FudCBhbnkgcmVhZC1haGVhZCwgZG9uJiMzOTt0IGJvdGhlciAqL1xuIFx0aWYgKHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JBTkRfUkVBRCB8fCAhcmEtXHUwMDNlcmFfcGFnZXMpXG4tXHRcdHJldHVybiBmcGluO1xuJiM0MztcdFx0cmV0dXJuO1xuIFxuIFx0LypcbiBcdCAqIElmIHRoZSBmb2xpbyBpcyBsb2NrZWQsIHdlJiMzOTtyZSBsaWtlbHkgcmFjaW5nIGFnYWluc3QgYW5vdGhlciBmYXVsdC5cbkBAIC0zNDcwLDEwICYjNDM7MzQxMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4gXG4gXHRpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKSB7XG4gXHRcdHJhY3RsLl9tYXhfaW5kZXggPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX3Bnb2ZmICYjNDM7IHZtYV9wYWdlcyh2bWYtXHUwMDNldm1hKSAtIDE7XG4tXHRcdGZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTtcbiBcdFx0cGFnZV9jYWNoZV9hc3luY19yYShcdTAwMjZyYWN0bCwgZm9saW8sIHJhLVx1MDAzZXJhX3BhZ2VzKTtcbiBcdH1cbi1cdHJldHVybiBmcGluO1xuIH1cbiBcbiBzdGF0aWMgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0X3JlY2hlY2tfcHRlX25vbmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5AQCAtMzUzMCwxNSAmIzQzOzM0NjgsOSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0X3JlY2hlY2tfcHRlX25vbmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gICogaXQgaW4gdGhlIHBhZ2UgY2FjaGUsIGFuZCBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2VzIHJlYXNvbmFibHkgd2l0aG91dFxuICAqIGhhdmluZyBhIGxvdCBvZiBkdXBsaWNhdGVkIGNvZGUuXG4gICpcbi0gKiB2bWEtXHUwMDNldm1fbW0tXHUwMDNlbW1hcF9sb2NrIG11c3QgYmUgaGVsZCBvbiBlbnRyeS5cbi0gKlxuLSAqIElmIG91ciByZXR1cm4gdmFsdWUgaGFzIFZNX0ZBVUxUX1JFVFJZIHNldCwgaXQmIzM5O3MgYmVjYXVzZSB0aGUgbW1hcF9sb2NrXG4tICogbWF5IGJlIGRyb3BwZWQgYmVmb3JlIGRvaW5nIEkvTyBvciBieSBsb2NrX2ZvbGlvX21heWJlX2Ryb3BfbW1hcCgpLlxuLSAqXG4tICogSWYgb3VyIHJldHVybiB2YWx1ZSBkb2VzIG5vdCBoYXZlIFZNX0ZBVUxUX1JFVFJZIHNldCwgdGhlIG1tYXBfbG9ja1xuLSAqIGhhcyBub3QgYmVlbiByZWxlYXNlZC5cbi0gKlxuLSAqIFdlIG5ldmVyIHJldHVybiB3aXRoIFZNX0ZBVUxUX1JFVFJZIGFuZCBhIGJpdCBmcm9tIFZNX0ZBVUxUX0VSUk9SIHNldC5cbiYjNDM7ICogQ29udGV4dDogTWF5IHNsZWVwIHdhaXRpbmcgZm9yIEkvTy4gIENhbiBiZSBpbnRlcnJ1cHRlZCBieSBmYXRhbFxuJiM0MzsgKiBzaWduYWxzIGlmIEB2bWYgZmxhZ3MgcGVybWl0LiAgVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIGZhdWx0IGxvY2tcbiYjNDM7ICogKGVpdGhlciBtbWFwX2xvY2sgb3IgVk1BIGxvY2spLlxuICAqXG4gICogUmV0dXJuOiBiaXR3aXNlLU9SIG9mICVWTV9GQVVMVF8gY29kZXMuXG4gICovXG5AQCAtMzU0Niw3ICYjNDM7MzQ3OCw2IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiB7XG4gXHRpbnQgZXJyb3I7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmlsZTtcbi1cdHN0cnVjdCBmaWxlICpmcGluID0gTlVMTDtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0cGdvZmZfdCBtYXhfaWR4LCBpbmRleCA9IHZtZi1cdTAwM2VwZ29mZjtcbkBAIC0zNTY2LDE1ICYjNDM7MzQ5NywzMSBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4KTtcbiBcdGlmIChsaWtlbHkoIUlTX0VSUihmb2xpbykpKSB7XG4gXHRcdC8qXG4tXHRcdCAqIFdlIGZvdW5kIHRoZSBwYWdlLCBzbyB0cnkgYXN5bmMgcmVhZGFoZWFkIGJlZm9yZSB3YWl0aW5nIGZvclxuLVx0XHQgKiB0aGUgbG9jay5cbiYjNDM7XHRcdCAqIFdlIGZvdW5kIHRoZSBmb2xpbywgc28gdHJ5IGFzeW5jIHJlYWRhaGVhZCBiZWZvcmVcbiYjNDM7XHRcdCAqIHdhaXRpbmcgZm9yIHRoZSBsb2NrLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCEodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1RSSUVEKSlcbi1cdFx0XHRmcGluID0gZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQodm1mLCBmb2xpbyk7XG4mIzQzO1x0XHRcdGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkKHZtZiwgZm9saW8pO1xuIFx0XHRpZiAodW5saWtlbHkoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKSkge1xuIFx0XHRcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdFx0XHRtYXBwaW5nX2xvY2tlZCA9IHRydWU7XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4mIzQzO1x0XHRcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfS0lMTEFCTEUpIHtcbiYjNDM7XHRcdFx0XHRpZiAoX19mb2xpb19sb2NrX2tpbGxhYmxlKGZvbGlvKSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0X19mb2xpb19sb2NrKGZvbGlvKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIERpZCBpdCBnZXQgdHJ1bmNhdGVkPyAqL1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KGZvbGlvLVx1MDAzZW1hcHBpbmcgIT0gbWFwcGluZykpIHtcbiYjNDM7XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRcdFx0Z290byByZXRyeV9maW5kO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHZtZik7XG4gXHRcdGlmICh1bmxpa2VseShyZXQpKVxuQEAgLTM1ODQsNyAmIzQzOzM1MzEsNyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGNvdW50X3ZtX2V2ZW50KFBHTUFKRkFVTFQpO1xuIFx0XHRjb3VudF9tZW1jZ19ldmVudF9tbSh2bWYtXHUwMDNldm1hLVx1MDAzZXZtX21tLCBQR01BSkZBVUxUKTtcbiBcdFx0cmV0ID0gVk1fRkFVTFRfTUFKT1I7XG4tXHRcdGZwaW4gPSBkb19zeW5jX21tYXBfcmVhZGFoZWFkKHZtZik7XG4mIzQzO1x0XHRkb19zeW5jX21tYXBfcmVhZGFoZWFkKHZtZik7XG4gcmV0cnlfZmluZDpcbiBcdFx0LypcbiBcdFx0ICogU2VlIGNvbW1lbnQgaW4gZmlsZW1hcF9jcmVhdGVfZm9saW8oKSB3aHkgd2UgbmVlZFxuQEAgLTM1OTUsMjUgJiM0MzszNTQyLDEzIEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0XHRtYXBwaW5nX2xvY2tlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxuLVx0XHRcdFx0XHQgIEZHUF9DUkVBVHxGR1BfRk9SX01NQVAsXG4tXHRcdFx0XHRcdCAgdm1mLVx1MDAzZWdmcF9tYXNrKTtcbiYjNDM7XHRcdFx0XHRcdCAgRkdQX0NSRUFUIHwgRkdQX0xPQ0ssIHZtZi1cdTAwM2VnZnBfbWFzayk7XG4gXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tXHRcdFx0aWYgKGZwaW4pXG4tXHRcdFx0XHRnb3RvIG91dF9yZXRyeTtcbiBcdFx0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcdFx0XHRyZXR1cm4gVk1fRkFVTFRfT09NO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoIWxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwKHZtZiwgZm9saW8sIFx1MDAyNmZwaW4pKVxuLVx0XHRnb3RvIG91dF9yZXRyeTtcbi1cbi1cdC8qIERpZCBpdCBnZXQgdHJ1bmNhdGVkPyAqL1xuLVx0aWYgKHVubGlrZWx5KGZvbGlvLVx1MDAzZW1hcHBpbmcgIT0gbWFwcGluZykpIHtcbi1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0Z290byByZXRyeV9maW5kO1xuLVx0fVxuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb19jb250YWlucyhmb2xpbywgaW5kZXgpLCBmb2xpbyk7XG4gXG4gXHQvKlxuQEAgLTM2MjUsNyAmIzQzOzM1NjAsNyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdC8qXG4gXHRcdCAqIElmIHRoZSBpbnZhbGlkYXRlIGxvY2sgaXMgbm90IGhlbGQsIHRoZSBmb2xpbyB3YXMgaW4gY2FjaGVcbiBcdFx0ICogYW5kIHVwdG9kYXRlIGFuZCBub3cgaXQgaXMgbm90LiBTdHJhbmdlIGJ1dCBwb3NzaWJsZSBzaW5jZSB3ZVxuLVx0XHQgKiBkaWRuJiMzOTt0IGhvbGQgdGhlIHBhZ2UgbG9jayBhbGwgdGhlIHRpbWUuIExldCYjMzk7cyBkcm9wXG4mIzQzO1x0XHQgKiBkaWRuJiMzOTt0IGhvbGQgdGhlIGZvbGlvIGxvY2sgYWxsIHRoZSB0aW1lLiBMZXQmIzM5O3MgZHJvcFxuIFx0XHQgKiBldmVyeXRoaW5nLCBnZXQgdGhlIGludmFsaWRhdGUgbG9jayBhbmQgdHJ5IGFnYWluLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFtYXBwaW5nX2xvY2tlZCkge1xuQEAgLTM2NDIsMjEgJiM0MzszNTc3LDEyIEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Z290byBwYWdlX25vdF91cHRvZGF0ZTtcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBXZSYjMzk7dmUgbWFkZSBpdCB0aGlzIGZhciBhbmQgd2UgaGFkIHRvIGRyb3Agb3VyIG1tYXBfbG9jaywgbm93IGlzIHRoZVxuLVx0ICogdGltZSB0byByZXR1cm4gdG8gdGhlIHVwcGVyIGxheWVyIGFuZCBoYXZlIGl0IHJlLWZpbmQgdGhlIHZtYSBhbmRcbi1cdCAqIHJlZG8gdGhlIGZhdWx0LlxuLVx0ICovXG4tXHRpZiAoZnBpbikge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRnb3RvIG91dF9yZXRyeTtcbi1cdH1cbiBcdGlmIChtYXBwaW5nX2xvY2tlZClcbiBcdFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XG4gXG4gXHQvKlxuLVx0ICogRm91bmQgdGhlIHBhZ2UgYW5kIGhhdmUgYSByZWZlcmVuY2Ugb24gaXQuXG4tXHQgKiBXZSBtdXN0IHJlY2hlY2sgaV9zaXplIHVuZGVyIHBhZ2UgbG9jay5cbiYjNDM7XHQgKiBGb3VuZCB0aGUgZm9saW8gYW5kIGhhdmUgYSByZWZlcmVuY2Ugb24gaXQuXG4mIzQzO1x0ICogV2UgbXVzdCByZWNoZWNrIGlfc2l6ZSB1bmRlciBmb2xpbyBsb2NrLlxuIFx0ICovXG4gXHRtYXhfaWR4ID0gRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9TSVpFKTtcbiBcdGlmICh1bmxpa2VseShpbmRleCBcdTAwM2U9IG1heF9pZHgpKSB7XG5AQCAtMzY3NSwxMCAmIzQzOzM2MDEsNyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHQgKiBiZWNhdXNlIHRoZXJlIHJlYWxseSBhcmVuJiMzOTt0IGFueSBwZXJmb3JtYW5jZSBpc3N1ZXMgaGVyZVxuIFx0ICogYW5kIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVycm9ycy5cbiBcdCAqL1xuLVx0ZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsIGZwaW4pO1xuIFx0ZXJyb3IgPSBmaWxlbWFwX3JlYWRfZm9saW8oZmlsZSwgbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VyZWFkX2ZvbGlvLCBmb2xpbyk7XG4tXHRpZiAoZnBpbilcbi1cdFx0Z290byBvdXRfcmV0cnk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0aWYgKCFlcnJvciB8fCBlcnJvciA9PSBBT1BfVFJVTkNBVEVEX1BBR0UpXG5AQCAtMzY4NiwyMCAmIzQzOzM2MDksNiBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbiBcbiBcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4tXG4tb3V0X3JldHJ5OlxuLVx0Lypcbi1cdCAqIFdlIGRyb3BwZWQgdGhlIG1tYXBfbG9jaywgd2UgbmVlZCB0byByZXR1cm4gdG8gdGhlIGZhdWx0IGhhbmRsZXIgdG9cbi1cdCAqIHJlLWZpbmQgdGhlIHZtYSBhbmQgY29tZSBiYWNrIGFuZCBmaW5kIG91ciBob3BlZnVsbHkgc3RpbGwgcG9wdWxhdGVkXG4tXHQgKiBwYWdlLlxuLVx0ICovXG4tXHRpZiAoIUlTX0VSUihmb2xpbykpXG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRpZiAobWFwcGluZ19sb2NrZWQpXG4tXHRcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuLVx0aWYgKGZwaW4pXG4tXHRcdGZwdXQoZnBpbik7XG4tXHRyZXR1cm4gcmV0IHwgVk1fRkFVTFRfUkVUUlk7XG4gfVxuIEVYUE9SVF9TWU1CT0woZmlsZW1hcF9mYXVsdCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBmaWxlbWFwX2ZhdWx0IGFuZCBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wsIGNoYW5naW5nIGhvdyB0aGUgZm9saW8gbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVtb3ZpbmcgdGhlIGRyb3BwaW5nIG9mIHRoZSBtbWFwIGxvY2sgZHVyaW5nIEkvTyBhbmQgZm9saW8gbG9ja2luZy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNhNzZjNTlmODRmN2FlMjRhNTQxZjA1OTNlNjllOWQ1OTU5OWU2N2QKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyMiAxOTo0ODozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggMWY1MDk5MWI0M2UzYjMuLmU2YWMyMjFlZTU0ZDhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtNjk1LDkgJiM0Mzs2OTUsNiBAQCBwZ29mZl90IHBhZ2VfY2FjaGVfcHJldl9taXNzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogICogKiAlRkdQX0NSRUFUIC0gSWYgbm8gZm9saW8gaXMgcHJlc2VudCB0aGVuIGEgbmV3IGZvbGlvIGlzIGFsbG9jYXRlZCwKICAqICAgYWRkZWQgdG8gdGhlIHBhZ2UgY2FjaGUgYW5kIHRoZSBWTSYjMzk7cyBMUlUgbGlzdC4gIFRoZSBmb2xpbyBpcwogICogICByZXR1cm5lZCBsb2NrZWQuCi0gKiAqICVGR1BfRk9SX01NQVAgLSBUaGUgY2FsbGVyIHdhbnRzIHRvIGRvIGl0cyBvd24gbG9ja2luZyBkYW5jZSBpZiB0aGUKLSAqICAgZm9saW8gaXMgYWxyZWFkeSBpbiBjYWNoZS4gIElmIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLCB1bmxvY2sgaXQKLSAqICAgYmVmb3JlIHJldHVybmluZyBzbyB0aGUgY2FsbGVyIGNhbiBkbyB0aGUgc2FtZSBkYW5jZS4KICAqICogJUZHUF9XUklURSAtIFRoZSBmb2xpbyB3aWxsIGJlIHdyaXR0ZW4gdG8gYnkgdGhlIGNhbGxlci4KICAqICogJUZHUF9OT0ZTIC0gX19HRlBfRlMgd2lsbCBnZXQgY2xlYXJlZCBpbiBnZnAuCiAgKiAqICVGR1BfTk9XQUlUIC0gRG9uJiMzOTt0IGJsb2NrIG9uIHRoZSBmb2xpbyBsb2NrLgpAQCAtNzE0LDkgJiM0Mzs3MTEsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZmdmX3Q7CiAjZGVmaW5lIEZHUF9XUklURQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMDgpCiAjZGVmaW5lIEZHUF9OT0ZTCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAxMCkKICNkZWZpbmUgRkdQX05PV0FJVAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMjApCi0jZGVmaW5lIEZHUF9GT1JfTU1BUAkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwNDApCi0jZGVmaW5lIEZHUF9TVEFCTEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKQotI2RlZmluZSBGR1BfRE9OVENBQ0hFCQkoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDEwMCkKJiM0MzsjZGVmaW5lIEZHUF9TVEFCTEUJCSgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDQwKQomIzQzOyNkZWZpbmUgRkdQX0RPTlRDQUNIRQkJKChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApCiAjZGVmaW5lIEZHRl9HRVRfT1JERVIoZmdmKQkoKChfX2ZvcmNlIHVuc2lnbmVkKWZnZikgJmd0OyZndDsgMjYpCS8qIHRvcCA2IGJpdHMgKi8KIAogI2RlZmluZSBGR1BfV1JJVEVCRUdJTgkJKEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUIHwgRkdQX1NUQUJMRSkKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA3ZTQ2N2M4MWQyMTM4OS4uMTNhODYxYjM4NjIxZmYgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTE5OTUsNyAmIzQzOzE5OTUsNyBAQCBzdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCWdmcCAmYW1wOz0gfkdGUF9LRVJORUw7CiAJCQlnZnAgfD0gR0ZQX05PV0FJVDsKIAkJfQotCQlpZiAoV0FSTl9PTl9PTkNFKCEoZmdwX2ZsYWdzICZhbXA7IChGR1BfTE9DSyB8IEZHUF9GT1JfTU1BUCkpKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoIShmZ3BfZmxhZ3MgJmFtcDsgRkdQX0xPQ0spKSkKIAkJCWZncF9mbGFncyB8PSBGR1BfTE9DSzsKIAogCQlpZiAob3JkZXIgJmd0OyBtYXBwaW5nX21heF9mb2xpb19vcmRlcihtYXBwaW5nKSkKQEAgLTIwNDIsMTIgJiM0MzsyMDQyLDYgQEAgc3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJZXJyID0gLUVBR0FJTjsKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KLQkJLyoKLQkJICogZmlsZW1hcF9hZGRfZm9saW8gbG9ja3MgdGhlIHBhZ2UsIGFuZCBmb3IgbW1hcAotCQkgKiB3ZSBleHBlY3QgYW4gdW5sb2NrZWQgcGFnZS4KLQkJICovCi0JCWlmIChmb2xpbyAmYW1wOyZhbXA7IChmZ3BfZmxhZ3MgJmFtcDsgRkdQX0ZPUl9NTUFQKSkKLQkJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJfQogCiAJaWYgKCFmb2xpbykKQEAgLTMyNTksNTIgJiM0MzszMjUzLDYgQEAgbG9mZl90IG1hcHBpbmdfc2Vla19ob2xlX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBzdGFydCwKIAogI2lmZGVmIENPTkZJR19NTVUKICNkZWZpbmUgTU1BUF9MT1RTQU1JU1MgICgxMDApCi0vKgotICogbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAgLSBsb2NrIHRoZSBwYWdlLCBwb3NzaWJseSBkcm9wcGluZyB0aGUgbW1hcF9sb2NrCi0gKiBAdm1mIC0gdGhlIHZtX2ZhdWx0IGZvciB0aGlzIGZhdWx0LgotICogQGZvbGlvIC0gdGhlIGZvbGlvIHRvIGxvY2suCi0gKiBAZnBpbiAtIHRoZSBwb2ludGVyIHRvIHRoZSBmaWxlIHdlIG1heSBwaW4gKG9yIGlzIGFscmVhZHkgcGlubmVkKS4KLSAqCi0gKiBUaGlzIHdvcmtzIHNpbWlsYXIgdG8gbG9ja19mb2xpb19vcl9yZXRyeSBpbiB0aGF0IGl0IGNhbiBkcm9wIHRoZQotICogbW1hcF9sb2NrLiAgSXQgZGlmZmVycyBpbiB0aGF0IGl0IGFjdHVhbGx5IHJldHVybnMgdGhlIGZvbGlvIGxvY2tlZAotICogaWYgaXQgcmV0dXJucyAxIGFuZCAwIGlmIGl0IGNvdWxkbiYjMzk7dCBsb2NrIHRoZSBmb2xpby4gIElmIHdlIGRpZCBoYXZlCi0gKiB0byBkcm9wIHRoZSBtbWFwX2xvY2sgdGhlbiBmcGluIHdpbGwgcG9pbnQgdG8gdGhlIHBpbm5lZCBmaWxlIGFuZAotICogbmVlZHMgdG8gYmUgZnB1dCgpJiMzOTtlZCBhdCBhIGxhdGVyIHBvaW50LgotICovCi1zdGF0aWMgaW50IGxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJCSAgICAgc3RydWN0IGZpbGUgKipmcGluKQotewotCWlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKgotCSAqIE5PVEUhIFRoaXMgd2lsbCBtYWtlIHVzIHJldHVybiB3aXRoIFZNX0ZBVUxUX1JFVFJZLCBidXQgd2l0aAotCSAqIHRoZSBmYXVsdCBsb2NrIHN0aWxsIGhlbGQuIFRoYXQmIzM5O3MgaG93IEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUCi0JICogaXMgc3VwcG9zZWQgdG8gd29yay4gV2UgaGF2ZSB3YXkgdG9vIG1hbnkgc3BlY2lhbCBjYXNlcy4uCi0JICovCi0JaWYgKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpCi0JCXJldHVybiAwOwotCi0JKmZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCAqZnBpbik7Ci0JaWYgKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19LSUxMQUJMRSkgewotCQlpZiAoX19mb2xpb19sb2NrX2tpbGxhYmxlKGZvbGlvKSkgewotCQkJLyoKLQkJCSAqIFdlIGRpZG4mIzM5O3QgaGF2ZSB0aGUgcmlnaHQgZmxhZ3MgdG8gZHJvcCB0aGUKLQkJCSAqIGZhdWx0IGxvY2ssIGJ1dCBhbGwgZmF1bHRfaGFuZGxlcnMgb25seSBjaGVjawotCQkJICogZm9yIGZhdGFsIHNpZ25hbHMgaWYgd2UgcmV0dXJuIFZNX0ZBVUxUX1JFVFJZLAotCQkJICogc28gd2UgbmVlZCB0byBkcm9wIHRoZSBmYXVsdCBsb2NrIGhlcmUgYW5kCi0JCQkgKiByZXR1cm4gMCBpZiB3ZSBkb24mIzM5O3QgaGF2ZSBhIGZwaW4uCi0JCQkgKi8KLQkJCWlmICgqZnBpbiA9PSBOVUxMKQotCQkJCXJlbGVhc2VfZmF1bHRfbG9jayh2bWYpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IGVsc2UKLQkJX19mb2xpb19sb2NrKGZvbGlvKTsKLQotCXJldHVybiAxOwotfQotCiAvKgogICogU3luY2hyb25vdXMgcmVhZGFoZWFkIGhhcHBlbnMgd2hlbiB3ZSBkb24mIzM5O3QgZXZlbiBmaW5kIGEgcGFnZSBpbiB0aGUgcGFnZQogICogY2FjaGUgYXQgYWxsLiAgV2UgZG9uJiMzOTt0IHdhbnQgdG8gcGVyZm9ybSBJTyB1bmRlciB0aGUgbW1hcCBzZW0sIHNvIGlmIHdlIGhhdmUKQEAgLTMzMTIsMTMgJiM0MzszMjYwLDEyIEBAIHN0YXRpYyBpbnQgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAgKiB0aGF0LiAgSWYgd2UgZGlkbiYjMzk7dCBwaW4gYSBmaWxlIHRoZW4gd2UgcmV0dXJuIE5VTEwuICBUaGUgZmlsZSB0aGF0IGlzCiAgKiByZXR1cm5lZCBuZWVkcyB0byBiZSBmcHV0KCkmIzM5O2VkIHdoZW4gd2UmIzM5O3JlIGRvbmUgd2l0aCBpdC4KICAqLwotc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQomIzQzO3N0YXRpYyB2b2lkIGRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWYtJmd0O3ZtYS0mZ3Q7dm1fZmlsZTsKIAlzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEgPSAmYW1wO2ZpbGUtJmd0O2ZfcmE7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLSZndDtmX21hcHBpbmc7CiAJREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgcmEsIG1hcHBpbmcsIHZtZi0mZ3Q7cGdvZmYpOwotCXN0cnVjdCBmaWxlICpmcGluID0gTlVMTDsKIAl2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1mLSZndDt2bWEtJmd0O3ZtX2ZsYWdzOwogCWJvb2wgZm9yY2VfdGhwX3JlYWRhaGVhZCA9IGZhbHNlOwogCXVuc2lnbmVkIGludCB0aHBfb3JkZXIgPSAwOwpAQCAtMzM0OCwxNSAmIzQzOzMyOTUsMTQgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQkgKiBWTV9FWEVDIGNhc2UgYmVsb3cgaXMgYWxyZWFkeSBpbnRlbmRlZCBmb3IgcmFuZG9tIGFjY2Vzcy4KIAkJICovCiAJCWlmICgodm1fZmxhZ3MgJmFtcDsgKFZNX1JBTkRfUkVBRCB8IFZNX0VYRUMpKSA9PSBWTV9SQU5EX1JFQUQpCi0JCQlyZXR1cm4gZnBpbjsKJiM0MzsJCQlyZXR1cm47CiAKIAkJaWYgKCFyYS0mZ3Q7cmFfcGFnZXMpCi0JCQlyZXR1cm4gZnBpbjsKJiM0MzsJCQlyZXR1cm47CiAKIAkJaWYgKHZtX2ZsYWdzICZhbXA7IFZNX1NFUV9SRUFEKSB7Ci0JCQlmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7CiAJCQlwYWdlX2NhY2hlX3N5bmNfcmEoJmFtcDtyYWN0bCwgcmEtJmd0O3JhX3BhZ2VzKTsKLQkJCXJldHVybiBmcGluOwomIzQzOwkJCXJldHVybjsKIAkJfQogCX0KIApAQCAtMzM3MSwxMyAmIzQzOzMzMTcsMTIgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQkgKiBzdG9wIGJvdGhlcmluZyB3aXRoIHJlYWQtYWhlYWQuIEl0IHdpbGwgb25seSBodXJ0LgogCQkgKi8KIAkJaWYgKG1tYXBfbWlzcyAmZ3Q7IE1NQVBfTE9UU0FNSVNTKQotCQkJcmV0dXJuIGZwaW47CiYjNDM7CQkJcmV0dXJuOwogCX0KIAogCWlmIChmb3JjZV90aHBfcmVhZGFoZWFkKSB7CiAJCXVuc2lnbmVkIGxvbmcgZm9saW9fbnJfcGFnZXMgPSAxVUwgJmx0OyZsdDsgdGhwX29yZGVyOwogCi0JCWZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTsKIAkJcmFjdGwuX2luZGV4ICZhbXA7PSB+KGZvbGlvX25yX3BhZ2VzIC0gMSk7CiAJCXJhLSZndDtzaXplID0gZm9saW9fbnJfcGFnZXM7CiAJCS8qCkBAIC0zMzg5LDcgJiM0MzszMzM0LDcgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQlyYS0mZ3Q7YXN5bmNfc2l6ZSA9IGZvbGlvX25yX3BhZ2VzOwogCQlyYS0mZ3Q7b3JkZXIgPSB0aHBfb3JkZXI7CiAJCXBhZ2VfY2FjaGVfcmFfb3JkZXIoJmFtcDtyYWN0bCwgcmEpOwotCQlyZXR1cm4gZnBpbjsKJiM0MzsJCXJldHVybjsKIAl9CiAKIAlpZiAodm1fZmxhZ3MgJmFtcDsgVk1fRVhFQykgewpAQCAtMzQyNywyOSAmIzQzOzMzNzIsMjQgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQlyYS0mZ3Q7b3JkZXIgPSAwOwogCX0KIAotCWZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTsKIAlyYWN0bC5faW5kZXggPSByYS0mZ3Q7c3RhcnQ7CiAJcGFnZV9jYWNoZV9yYV9vcmRlcigmYW1wO3JhY3RsLCByYSk7Ci0JcmV0dXJuIGZwaW47CiB9CiAKIC8qCi0gKiBBc3luY2hyb25vdXMgcmVhZGFoZWFkIGhhcHBlbnMgd2hlbiB3ZSBmaW5kIHRoZSBwYWdlIGFuZCBQR19yZWFkYWhlYWQsCi0gKiBzbyB3ZSB3YW50IHRvIHBvc3NpYmx5IGV4dGVuZCB0aGUgcmVhZGFoZWFkIGZ1cnRoZXIuICBXZSByZXR1cm4gdGhlIGZpbGUgdGhhdAotICogd2FzIHBpbm5lZCBpZiB3ZSBoYXZlIHRvIGRyb3AgdGhlIG1tYXBfbG9jayBpbiBvcmRlciB0byBkbyBJTy4KJiM0MzsgKiBBc3luY2hyb25vdXMgcmVhZGFoZWFkIGhhcHBlbnMgd2hlbiB3ZSBmaW5kIHRoZSBmb2xpbyBhbmQgaXQgaGFzIHRoZQomIzQzOyAqIHJlYWRhaGVhZCBmbGFnIHNldCBzbyB3ZSB3YW50IHRvIHBvc3NpYmx5IGV4dGVuZCB0aGUgcmVhZGFoZWFkIGZ1cnRoZXIuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsCi0JCQkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyB2b2lkIGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gdm1mLSZndDt2bWEtJmd0O3ZtX2ZpbGU7CiAJc3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhID0gJmFtcDtmaWxlLSZndDtmX3JhOwogCURFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIHJhLCBmaWxlLSZndDtmX21hcHBpbmcsIHZtZi0mZ3Q7cGdvZmYpOwotCXN0cnVjdCBmaWxlICpmcGluID0gTlVMTDsKIAl1bnNpZ25lZCBzaG9ydCBtbWFwX21pc3M7CiAKIAkvKiBJZiB3ZSBkb24mIzM5O3Qgd2FudCBhbnkgcmVhZC1haGVhZCwgZG9uJiMzOTt0IGJvdGhlciAqLwogCWlmICh2bWYtJmd0O3ZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUkFORF9SRUFEIHx8ICFyYS0mZ3Q7cmFfcGFnZXMpCi0JCXJldHVybiBmcGluOwomIzQzOwkJcmV0dXJuOwogCiAJLyoKIAkgKiBJZiB0aGUgZm9saW8gaXMgbG9ja2VkLCB3ZSYjMzk7cmUgbGlrZWx5IHJhY2luZyBhZ2FpbnN0IGFub3RoZXIgZmF1bHQuCkBAIC0zNDcwLDEwICYjNDM7MzQxMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiAKIAlpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKSB7CiAJCXJhY3RsLl9tYXhfaW5kZXggPSB2bWYtJmd0O3ZtYS0mZ3Q7dm1fcGdvZmYgJiM0Mzsgdm1hX3BhZ2VzKHZtZi0mZ3Q7dm1hKSAtIDE7Ci0JCWZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTsKIAkJcGFnZV9jYWNoZV9hc3luY19yYSgmYW1wO3JhY3RsLCBmb2xpbywgcmEtJmd0O3JhX3BhZ2VzKTsKIAl9Ci0JcmV0dXJuIGZwaW47CiB9CiAKIHN0YXRpYyB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHRfcmVjaGVja19wdGVfbm9uZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKQEAgLTM1MzAsMTUgJiM0MzszNDY4LDkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogICogaXQgaW4gdGhlIHBhZ2UgY2FjaGUsIGFuZCBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2VzIHJlYXNvbmFibHkgd2l0aG91dAogICogaGF2aW5nIGEgbG90IG9mIGR1cGxpY2F0ZWQgY29kZS4KICAqCi0gKiB2bWEtJmd0O3ZtX21tLSZndDttbWFwX2xvY2sgbXVzdCBiZSBoZWxkIG9uIGVudHJ5LgotICoKLSAqIElmIG91ciByZXR1cm4gdmFsdWUgaGFzIFZNX0ZBVUxUX1JFVFJZIHNldCwgaXQmIzM5O3MgYmVjYXVzZSB0aGUgbW1hcF9sb2NrCi0gKiBtYXkgYmUgZHJvcHBlZCBiZWZvcmUgZG9pbmcgSS9PIG9yIGJ5IGxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwKCkuCi0gKgotICogSWYgb3VyIHJldHVybiB2YWx1ZSBkb2VzIG5vdCBoYXZlIFZNX0ZBVUxUX1JFVFJZIHNldCwgdGhlIG1tYXBfbG9jawotICogaGFzIG5vdCBiZWVuIHJlbGVhc2VkLgotICoKLSAqIFdlIG5ldmVyIHJldHVybiB3aXRoIFZNX0ZBVUxUX1JFVFJZIGFuZCBhIGJpdCBmcm9tIFZNX0ZBVUxUX0VSUk9SIHNldC4KJiM0MzsgKiBDb250ZXh0OiBNYXkgc2xlZXAgd2FpdGluZyBmb3IgSS9PLiAgQ2FuIGJlIGludGVycnVwdGVkIGJ5IGZhdGFsCiYjNDM7ICogc2lnbmFscyBpZiBAdm1mIGZsYWdzIHBlcm1pdC4gIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBmYXVsdCBsb2NrCiYjNDM7ICogKGVpdGhlciBtbWFwX2xvY2sgb3IgVk1BIGxvY2spLgogICoKICAqIFJldHVybjogYml0d2lzZS1PUiBvZiAlVk1fRkFVTFRfIGNvZGVzLgogICovCkBAIC0zNTQ2LDcgJiM0MzszNDc4LDYgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewogCWludCBlcnJvcjsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtZi0mZ3Q7dm1hLSZndDt2bV9maWxlOwotCXN0cnVjdCBmaWxlICpmcGluID0gTlVMTDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtJmd0O2ZfbWFwcGluZzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKIAlwZ29mZl90IG1heF9pZHgsIGluZGV4ID0gdm1mLSZndDtwZ29mZjsKQEAgLTM1NjYsMTUgJiM0MzszNDk3LDMxIEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlmb2xpbyA9IGZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4KTsKIAlpZiAobGlrZWx5KCFJU19FUlIoZm9saW8pKSkgewogCQkvKgotCQkgKiBXZSBmb3VuZCB0aGUgcGFnZSwgc28gdHJ5IGFzeW5jIHJlYWRhaGVhZCBiZWZvcmUgd2FpdGluZyBmb3IKLQkJICogdGhlIGxvY2suCiYjNDM7CQkgKiBXZSBmb3VuZCB0aGUgZm9saW8sIHNvIHRyeSBhc3luYyByZWFkYWhlYWQgYmVmb3JlCiYjNDM7CQkgKiB3YWl0aW5nIGZvciB0aGUgbG9jay4KIAkJICovCiAJCWlmICghKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19UUklFRCkpCi0JCQlmcGluID0gZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQodm1mLCBmb2xpbyk7CiYjNDM7CQkJZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQodm1mLCBmb2xpbyk7CiAJCWlmICh1bmxpa2VseSghZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpKSB7CiAJCQlmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7CiAJCQltYXBwaW5nX2xvY2tlZCA9IHRydWU7CiAJCX0KJiM0MzsKJiM0MzsJCWlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKJiM0MzsJCQlpZiAodm1mLSZndDtmbGFncyAmYW1wOyBGQVVMVF9GTEFHX0tJTExBQkxFKSB7CiYjNDM7CQkJCWlmIChfX2ZvbGlvX2xvY2tfa2lsbGFibGUoZm9saW8pICZsdDsgMCkKJiM0MzsJCQkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJX19mb2xpb19sb2NrKGZvbGlvKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBEaWQgaXQgZ2V0IHRydW5jYXRlZD8gKi8KJiM0MzsJCWlmICh1bmxpa2VseShmb2xpby0mZ3Q7bWFwcGluZyAhPSBtYXBwaW5nKSkgewomIzQzOwkJCWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CQkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJCQlnb3RvIHJldHJ5X2ZpbmQ7CiYjNDM7CQl9CiAJfSBlbHNlIHsKIAkJcmV0ID0gZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHZtZik7CiAJCWlmICh1bmxpa2VseShyZXQpKQpAQCAtMzU4NCw3ICYjNDM7MzUzMSw3IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAkJY291bnRfdm1fZXZlbnQoUEdNQUpGQVVMVCk7CiAJCWNvdW50X21lbWNnX2V2ZW50X21tKHZtZi0mZ3Q7dm1hLSZndDt2bV9tbSwgUEdNQUpGQVVMVCk7CiAJCXJldCA9IFZNX0ZBVUxUX01BSk9SOwotCQlmcGluID0gZG9fc3luY19tbWFwX3JlYWRhaGVhZCh2bWYpOwomIzQzOwkJZG9fc3luY19tbWFwX3JlYWRhaGVhZCh2bWYpOwogcmV0cnlfZmluZDoKIAkJLyoKIAkJICogU2VlIGNvbW1lbnQgaW4gZmlsZW1hcF9jcmVhdGVfZm9saW8oKSB3aHkgd2UgbmVlZApAQCAtMzU5NSwyNSAmIzQzOzM1NDIsMTMgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQkJbWFwcGluZ19sb2NrZWQgPSB0cnVlOwogCQl9CiAJCWZvbGlvID0gX19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwKLQkJCQkJICBGR1BfQ1JFQVR8RkdQX0ZPUl9NTUFQLAotCQkJCQkgIHZtZi0mZ3Q7Z2ZwX21hc2spOwomIzQzOwkJCQkJICBGR1BfQ1JFQVQgfCBGR1BfTE9DSywgdm1mLSZndDtnZnBfbWFzayk7CiAJCWlmIChJU19FUlIoZm9saW8pKSB7Ci0JCQlpZiAoZnBpbikKLQkJCQlnb3RvIG91dF9yZXRyeTsKIAkJCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpOwogCQkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKIAkJfQogCX0KIAotCWlmICghbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAodm1mLCBmb2xpbywgJmFtcDtmcGluKSkKLQkJZ290byBvdXRfcmV0cnk7Ci0KLQkvKiBEaWQgaXQgZ2V0IHRydW5jYXRlZD8gKi8KLQlpZiAodW5saWtlbHkoZm9saW8tJmd0O21hcHBpbmcgIT0gbWFwcGluZykpIHsKLQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJZ290byByZXRyeV9maW5kOwotCX0KIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2NvbnRhaW5zKGZvbGlvLCBpbmRleCksIGZvbGlvKTsKIAogCS8qCkBAIC0zNjI1LDcgJiM0MzszNTYwLDcgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQkvKgogCQkgKiBJZiB0aGUgaW52YWxpZGF0ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGUgZm9saW8gd2FzIGluIGNhY2hlCiAJCSAqIGFuZCB1cHRvZGF0ZSBhbmQgbm93IGl0IGlzIG5vdC4gU3RyYW5nZSBidXQgcG9zc2libGUgc2luY2Ugd2UKLQkJICogZGlkbiYjMzk7dCBob2xkIHRoZSBwYWdlIGxvY2sgYWxsIHRoZSB0aW1lLiBMZXQmIzM5O3MgZHJvcAomIzQzOwkJICogZGlkbiYjMzk7dCBob2xkIHRoZSBmb2xpbyBsb2NrIGFsbCB0aGUgdGltZS4gTGV0JiMzOTtzIGRyb3AKIAkJICogZXZlcnl0aGluZywgZ2V0IHRoZSBpbnZhbGlkYXRlIGxvY2sgYW5kIHRyeSBhZ2Fpbi4KIAkJICovCiAJCWlmICghbWFwcGluZ19sb2NrZWQpIHsKQEAgLTM2NDIsMjEgJiM0MzszNTc3LDEyIEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAkJZ290byBwYWdlX25vdF91cHRvZGF0ZTsKIAl9CiAKLQkvKgotCSAqIFdlJiMzOTt2ZSBtYWRlIGl0IHRoaXMgZmFyIGFuZCB3ZSBoYWQgdG8gZHJvcCBvdXIgbW1hcF9sb2NrLCBub3cgaXMgdGhlCi0JICogdGltZSB0byByZXR1cm4gdG8gdGhlIHVwcGVyIGxheWVyIGFuZCBoYXZlIGl0IHJlLWZpbmQgdGhlIHZtYSBhbmQKLQkgKiByZWRvIHRoZSBmYXVsdC4KLQkgKi8KLQlpZiAoZnBpbikgewotCQlmb2xpb191bmxvY2soZm9saW8pOwotCQlnb3RvIG91dF9yZXRyeTsKLQl9CiAJaWYgKG1hcHBpbmdfbG9ja2VkKQogCQlmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTsKIAogCS8qCi0JICogRm91bmQgdGhlIHBhZ2UgYW5kIGhhdmUgYSByZWZlcmVuY2Ugb24gaXQuCi0JICogV2UgbXVzdCByZWNoZWNrIGlfc2l6ZSB1bmRlciBwYWdlIGxvY2suCiYjNDM7CSAqIEZvdW5kIHRoZSBmb2xpbyBhbmQgaGF2ZSBhIHJlZmVyZW5jZSBvbiBpdC4KJiM0MzsJICogV2UgbXVzdCByZWNoZWNrIGlfc2l6ZSB1bmRlciBmb2xpbyBsb2NrLgogCSAqLwogCW1heF9pZHggPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX1NJWkUpOwogCWlmICh1bmxpa2VseShpbmRleCAmZ3Q7PSBtYXhfaWR4KSkgewpAQCAtMzY3NSwxMCAmIzQzOzM2MDEsNyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJICogYmVjYXVzZSB0aGVyZSByZWFsbHkgYXJlbiYjMzk7dCBhbnkgcGVyZm9ybWFuY2UgaXNzdWVzIGhlcmUKIAkgKiBhbmQgd2UgbmVlZCB0byBjaGVjayBmb3IgZXJyb3JzLgogCSAqLwotCWZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTsKIAllcnJvciA9IGZpbGVtYXBfcmVhZF9mb2xpbyhmaWxlLCBtYXBwaW5nLSZndDthX29wcy0mZ3Q7cmVhZF9mb2xpbywgZm9saW8pOwotCWlmIChmcGluKQotCQlnb3RvIG91dF9yZXRyeTsKIAlmb2xpb19wdXQoZm9saW8pOwogCiAJaWYgKCFlcnJvciB8fCBlcnJvciA9PSBBT1BfVFJVTkNBVEVEX1BBR0UpCkBAIC0zNjg2LDIwICYjNDM7MzYwOSw2IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTsKIAogCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7Ci0KLW91dF9yZXRyeToKLQkvKgotCSAqIFdlIGRyb3BwZWQgdGhlIG1tYXBfbG9jaywgd2UgbmVlZCB0byByZXR1cm4gdG8gdGhlIGZhdWx0IGhhbmRsZXIgdG8KLQkgKiByZS1maW5kIHRoZSB2bWEgYW5kIGNvbWUgYmFjayBhbmQgZmluZCBvdXIgaG9wZWZ1bGx5IHN0aWxsIHBvcHVsYXRlZAotCSAqIHBhZ2UuCi0JICovCi0JaWYgKCFJU19FUlIoZm9saW8pKQotCQlmb2xpb19wdXQoZm9saW8pOwotCWlmIChtYXBwaW5nX2xvY2tlZCkKLQkJZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7Ci0JaWYgKGZwaW4pCi0JCWZwdXQoZnBpbik7Ci0JcmV0dXJuIHJldCB8IFZNX0ZBVUxUX1JFVFJZOwogfQogRVhQT1JUX1NZTUJPTChmaWxlbWFwX2ZhdWx0KTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzU1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhZ2UgTWFwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgc29tZSBjb3JlIGZpbGUgbWFwcGluZyBsb2dpYy4gTXkgZmlyc3QgaW1wcmVzc2lvbiBpcyBpdCYjMzk7cyBhaW1pbmcgdG8gc2ltcGxpZnkgaG93IHdlIGhhbmRsZSB0aGUgYG1tYXBgIGxvY2sgaW4gY29uanVuY3Rpb24gd2l0aCBmb2xpbyBsb2NraW5nLCB3aGljaCBpcyBpbnRlcmVzdGluZy4KCkZpcnN0IG9mZiwgaXQmIzM5O3MgYXhpbmcgdGhlIGBGR1BfRk9SX01NQVBgIGZsYWcgZnJvbSBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBhcyB0aGF0IGZsYWcgdXN1YWxseSBhY3RzIGFzIGEgbWFya2VyIGZvciBgbW1hcGAtcmVsYXRlZCBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb24gYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAgaXMgYmVpbmcgdHdlYWtlZCBzbyBpdCB3b24mIzM5O3QgdW5sb2NrIHRoZSBmb2xpbyBpZiB0aGlzIHNwZWNpZmljIGZsYWcgaXNuJiMzOTt0IHByZXNlbnQgYW55bW9yZS4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZSBgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXBgIGZ1bmN0aW9uIGlzIGJlaW5nIHJlbW92ZWQgZW50aXJlbHkuIFRoYXQgc2VlbXMgbGlrZSBhIHByZXR0eSBkaXJlY3Qgc2ltcGxpZmljYXRpb24uCgpJdCYjMzk7cyBhbHNvIGFsdGVyaW5nIHRoZSBzaWduYXR1cmVzIG9mIHRoZSByZWFkYWhlYWQgZnVuY3Rpb25zLCBgZG9fc3luY19tbWFwX3JlYWRhaGVhZGAgYW5kIGBkb19hc3luY19tbWFwX3JlYWRhaGVhZGAuIFRoZXkmIzM5O3JlIG5vdyByZXR1cm5pbmcgYHZvaWRgIGluc3RlYWQgb2YgYHN0cnVjdCBmaWxlICpgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0YWtpbmcgb3V0IHRoZSBgbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvYCBjYWxscyBmcm9tIHRoZW0uIFNvLCBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgZmlsZSBzdHJ1Y3R1cmUsIHRoZXkgYXJlIHBlcmZvcm1pbmcgYSBsb2NraW5nIGZ1bmN0aW9uIG9uIHRoZWlyIG93bi4KCk5vdyB0aGUgYGZpbGVtYXBfZmF1bHRgIGZ1bmN0aW9uIGhhcyBhbHNvIGNoYW5nZWQsIHNvIHRoYXQgaXQgZG9lc24mIzM5O3QgdHJ5IHRvIGRyb3AgYG1tYXBfbG9ja2Agd2hlbiBpdCYjMzk7cyBkZWFsaW5nIHdpdGggSS9PIG9yIGxvY2tpbmcgZm9saW9zLiBUaGUgY2FsbHMgdG8gYG1heWJlX3VubG9ja19tbWFwX2Zvcl9pb2AgYXJlIGdvbmUgaGVyZSB0b28sIHBsdXMgYGxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwYCBpcyByZW1vdmVkLgoKV2FpdCwgc28gaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCBkZWZpbml0ZWx5IGxvb2tzIGxpa2UgYSBjaGFuZ2UgaW4gdGhlIGxvY2tpbmcgbW9kZWwgZm9yIHBhZ2UgZmF1bHRzIGFuZCByZWFkYWhlYWQuIEl0JiMzOTtzIG5vIGxvbmdlciByZWxlYXNpbmcgdGhlIGZhdWx0IGxvY2sgZHVyaW5nIEkvTyBvciBmb2xpbyBsb2NraW5nLCB3aGljaCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBvbiBjb25jdXJyZW5jeS4KCk9rYXksIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG1heWJlX3VubG9ja19tbWFwX2Zvcl9pb2AgaXMgc3RpbGwgdXRpbGl6ZWQgaW4gb3RoZXIgYXJlYXMgb2YgdGhlIGNvZGUgYmFzZS4gSSBuZWVkIHRvIGdyZXAgZm9yIGl0LiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhpcyBpc24mIzM5O3QgZ29pbmcgdG8gYnJlYWsgc29tZXRoaW5nIGVsc2UuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXliZV91bmxvY2tfbW1hcF9mb3JfaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD0xMjU4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzc19lbmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuLS1cbm1tL2ludGVybmFsLmgtMTI3NS1cbm1tL2ludGVybmFsLmg6MTI3NjpzdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlICptYXliZV91bmxvY2tfbW1hcF9mb3JfaW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG5tbS9pbnRlcm5hbC5oLTEyNzctXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBmaWxlICpmcGluKVxuLS1cbm1tL21lbW9yeS5jPTM3MDY9c3RhdGljIHZtX2ZhdWx0X3QgZmF1bHRfZGlydHlfc2hhcmVkX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtMzczOS1cbm1tL21lbW9yeS5jOjM3NDA6XHRcdGZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBOVUxMKTtcbm1tL21lbW9yeS5jLTM3NDEtXHRcdGJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWQobWFwcGluZyk7XG4tLVxubW0vc2htZW0uYz0yNjQzPXN0YXRpYyB2bV9mYXVsdF90IHNobWVtX2ZhbGxvY193YWl0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbm1tL3NobWVtLmMtMjY1OC1cdFx0cmV0ID0gVk1fRkFVTFRfTk9QQUdFO1xubW0vc2htZW0uYzoyNjU5Olx0XHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgTlVMTCk7XG5tbS9zaG1lbS5jLTI2NjAtXHRcdHNobWVtX2ZhbGxvY193YWl0cSA9IHNobWVtX2ZhbGxvYy1cdTAwM2V3YWl0cTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTUyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1heWJlX3VubG9ja19tbWFwX2Zvcl9pb2AgUmVtb3ZhbCBpbiBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG5vdGljaW5nIGEgc2lnbmlmaWNhbnQgY2hhbmdlOiB0aGUgcmVtb3ZhbCBvZiBgbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvYCB3aXRoaW4gYGZpbGVtYXBfZmF1bHRgLiAgVGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgaG93IHBhZ2UgZmF1bHRzIGFyZSBoYW5kbGVkLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNoYW5nZS4gSXQmIzM5O3MgZGVmaW5pdGVseSBnb2luZyB0byBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBwaW5wb2ludCBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIGZvY3VzZWQgZnV6emluZy4gSSB3YXMgdGhpbmtpbmcgb2YgaW5jbHVkaW5nIGZ1bmN0aW9ucyBsaWtlIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgLCBgZG9fc3luY19tbWFwX3JlYWRhaGVhZGAsIGBkb19hc3luY19tbWFwX3JlYWRhaGVhZGAsIGFuZCwgb2YgY291cnNlLCBgZmlsZW1hcF9mYXVsdGAgaXRzZWxmLiBCdXQgdGhlbiwgSSBoYWQgdG8gc3RvcCBhbmQgcmUtcmVhZCB0aGUgcHJvbXB0LiBJdCBleHBsaWNpdGx5IHN0YXRlcyB0byAqYXZvaWQqIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCB0ZXN0IGRpc3RyaWJ1dGlvbiBza2V3aW5nLgoKYGZpbGVtYXBfZmF1bHRgIGlzICpkZWZpbml0ZWx5KiBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb247IGl0JiMzOTtzIHByYWN0aWNhbGx5IHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBmaWxlLWJhY2tlZCBwYWdlIGZhdWx0cywgd2hpY2ggYXJlIGluY3JlZGlibHkgY29tbW9uLiBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCwgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgLCBhbmQgYGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkYCBhcmUgYWxzbyBob3QuICBTbywgYmFzZWQgb24gdGhhdCBkaXJlY3RpdmUsIEkgc2hvdWxkIHByb2JhYmx5IGxlYXZlIHRoZSBgRm9jdXNTeW1ib2xzYCBlbnRyeSBlbXB0eS4gSXQmIzM5O3MgYSB0cmlja3kgYmFsYW5jZSBiZXR3ZWVuIGZvY3VzaW5nIG9uIHRoZSBjaGFuZ2UgYW5kIGF2b2lkaW5nIG92ZXJseSBnZW5lcmljIHRhcmdldHMuCgpCdXQgdGhlbiBJIHRvb2sgYSBjbG9zZXIgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBJIHJlYWxpemVkIHRoZSByZWFsIGZ1bmN0aW9uYWwgc2hpZnQgaXMgdGhhdCBpdCByZW1vdmVzIHRoZSBkcm9wcGluZyBvZiB0aGUgYG1tYXBfbG9ja2Agd2l0aGluIGBmaWxlbWFwX2ZhdWx0YC4gVGhpcyBoYXMgYSBzaWduaWZpY2FudCBpbXBhY3Q7IGlmIGBtbWFwX2xvY2tgIGlzbiYjMzk7dCBkcm9wcGVkLCBpdCBtZWFucyBgZmlsZW1hcF9mYXVsdGAgKnByb2JhYmx5KiBkb2VzbiYjMzk7dCByZXR1cm4gYFZNX0ZBVUxUX1JFVFJZYCBhbnltb3JlIChleGNlcHQgZnJvbSBgZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lYCwgYnV0IHRoYXQgZnVuY3Rpb24gcmV0dXJucyBgVk1fRkFVTFRfTk9QQUdFYCBvciBgMGApLiAgSSBzaG91bGQgY2hlY2sgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgYGZpbGVtYXBfZmF1bHRgIHRvIGJlIGNlcnRhaW4uIFRoZSByZW1vdmFsIG9mIHRoaXMgcmV0dXJuIGNvdWxkIGhhdmUgaW1wb3J0YW50IGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Vk1fRkFVTFRfUkVUUlkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9maWxlbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jPTE3NTQ9dm1fZmF1bHRfdCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vZmlsZW1hcC5jLTE3NjAtXHRcdCAqIENBVVRJT04hIEluIHRoaXMgY2FzZSwgbW1hcF9sb2NrL3Blci1WTUEgbG9jayBpcyBub3Rcbm1tL2ZpbGVtYXAuYzoxNzYxOlx0XHQgKiByZWxlYXNlZCBldmVuIHRob3VnaCByZXR1cm5pbmcgVk1fRkFVTFRfUkVUUlkuXG5tbS9maWxlbWFwLmMtMTc2Mi1cdFx0ICovXG5tbS9maWxlbWFwLmMtMTc2My1cdFx0aWYgKGZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVClcbm1tL2ZpbGVtYXAuYzoxNzY0Olx0XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbm1tL2ZpbGVtYXAuYy0xNzY1LVxuLS1cbm1tL2ZpbGVtYXAuYy0xNzcwLVx0XHRcdGZvbGlvX3dhaXRfbG9ja2VkKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYzoxNzcxOlx0XHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XG5tbS9maWxlbWFwLmMtMTc3Mi1cdH1cbi0tXG5tbS9maWxlbWFwLmMtMTc3OC1cdFx0XHRyZWxlYXNlX2ZhdWx0X2xvY2sodm1mKTtcbm1tL2ZpbGVtYXAuYzoxNzc5Olx0XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbm1tL2ZpbGVtYXAuYy0xNzgwLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCB0aGUgc3lzdGVtIGlzIHN0aWxsIHJldHVybmluZyBgVk1fRkFVTFRfUkVUUllgIGZyb20gYF9fZm9saW9fbG9ja19vcl9yZXRyeWAuIFRoYXQmIzM5O3MuLi4gaW50ZXJlc3RpbmcuIE5vdywgd2hlcmUgaXMgYF9fZm9saW9fbG9ja19vcl9yZXRyeWAgZGVmaW5lZD8gQWgsIHJpZ2h0LCBpdCYjMzk7cyBpbiBgbW0vZmlsZW1hcC5jYC4gSG1tLCBkb2VzIGBmaWxlbWFwX2ZhdWx0YCB1c2UgdGhhdD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIGdyYXBoLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBmYXVsdCBoYW5kbGluZyBwYXRoIGlzIGdvaW5nIHRocm91Z2ggdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19mb2xpb19sb2NrX29yX3JldHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYz0xNzE3PXN0YXRpYyBpbnQgX19mb2xpb19sb2NrX2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB3YWl0X3BhZ2VfcXVldWUgKndhaXQpXG4tLVxubW0vZmlsZW1hcC5jLTE3NTMtICovXG5tbS9maWxlbWFwLmM6MTc1NDp2bV9mYXVsdF90IF9fZm9saW9fbG9ja19vcl9yZXRyeShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL2ZpbGVtYXAuYy0xNzU1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAyNAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgX19mb2xpb19sb2NrX29yX3JldHJ5YCBpbiB0aGUgQ29udGV4dCBvZiBgZmlsZW1hcF9mYXVsdGAqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgX19mb2xpb19sb2NrX29yX3JldHJ5YCBwbGF5ZWQgYSBrZXkgcm9sZSB3aXRoaW4gYGZpbGVtYXBfZmF1bHRgLCBidXQgc29tZXRoaW5nJiMzOTtzIG5vdCBxdWl0ZSBjbGlja2luZy4gTXkgaW50ZXJuYWwgbW9kZWwgaXMgdGVsbGluZyBtZSB0aGF0IHRoaXMgc2hvdWxkIGJlIHVzZWQgdGhlcmUuIFRvIGJlIHN1cmUsIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHVzYWdlLiBMZXQgbWUgcXVpY2tseSB0cmFjZSB3aGVyZSBgX19mb2xpb19sb2NrX29yX3JldHJ5YCBpcyBhY3R1YWxseSBlbXBsb3llZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBteSBtZW50YWwgcGljdHVyZSBvZiB0aGUgc3luY2hyb25pemF0aW9uIGZsb3cgaXMgYWNjdXJhdGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsb2NrIGFjcXVpc2l0aW9uIHN0cmF0ZWd5LiBJcyBpdCB1c2VkPyBJZiBub3QsIHdoZXJlIGlzIHRoYXQgZnVuY3Rpb24gYWN0dWFsbHkgbmVlZGVkPyBJIG5lZWQgdG8gcmVjb25jaWxlIHRoaXMgZGlzY3JlcGFuY3kgaW4gbXkga25vd2xlZGdlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX2xvY2tfb3JfcmV0cnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTA5OT1pbnQgX19mb2xpb19sb2NrX2tpbGxhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTEwMDp2bV9mYXVsdF90IF9fZm9saW9fbG9ja19vcl9yZXRyeShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xMTAxLXZvaWQgdW5sb2NrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTExODk9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbG9ja19raWxsYWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTEyMDEtICogUmV0dXJuIHZhbHVlIGFuZCBtbWFwX2xvY2sgaW1wbGljYXRpb25zIGRlcGVuZCBvbiBmbGFnczsgc2VlXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxMjAyOiAqIF9fZm9saW9fbG9ja19vcl9yZXRyeSgpLlxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTIwMy0gKi9cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTEyMDQ9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IGZvbGlvX2xvY2tfb3JfcmV0cnkoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xMjA4LVx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjEyMDk6XHRcdHJldHVybiBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoZm9saW8sIHZtZik7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xMjEwLVx0cmV0dXJuIDA7XG4tLVxubW0vZmlsZW1hcC5jPTE3MTc9c3RhdGljIGludCBfX2ZvbGlvX2xvY2tfYXN5bmMoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHdhaXRfcGFnZV9xdWV1ZSAqd2FpdClcbi0tXG5tbS9maWxlbWFwLmMtMTc1My0gKi9cbm1tL2ZpbGVtYXAuYzoxNzU0OnZtX2ZhdWx0X3QgX19mb2xpb19sb2NrX29yX3JldHJ5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxubW0vZmlsZW1hcC5jLTE3NTUte1xuLS1cbm1tL21lbW9yeS5jPTUyODc9c3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTM5NS0gKiBmbGFncyBhbmQgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VmYXVsdCgpIHJldHVybiB2YWx1ZS5cbm1tL21lbW9yeS5jOjUzOTY6ICogU2VlIGZpbGVtYXBfZmF1bHQoKSBhbmQgX19mb2xpb19sb2NrX29yX3JldHJ5KCkuXG5tbS9tZW1vcnkuYy01Mzk3LSAqL1xuLS1cbm1tL21lbW9yeS5jPTU5MTQ9c3RhdGljIHZtX2ZhdWx0X3QgZG9fc2hhcmVkX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTU5NTktICogVGhlIGxvY2sgbWF5IGhhdmUgYmVlbiByZWxlYXNlZCBkZXBlbmRpbmcgb24gZmxhZ3MgYW5kIG91clxubW0vbWVtb3J5LmM6NTk2MDogKiByZXR1cm4gdmFsdWUuICBTZWUgZmlsZW1hcF9mYXVsdCgpIGFuZCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoKS5cbm1tL21lbW9yeS5jLTU5NjEtICogSWYgdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHZtYSBtYXkgYmVjb21lIGludmFsaWQgKGZvciBleGFtcGxlXG4tLVxubW0vbWVtb3J5LmM9NjI5OD1zdGF0aWMgdm9pZCBmaXhfc3B1cmlvdXNfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vbWVtb3J5LmMtNjMzMi0gKiBhbmQgb3VyIHJldHVybiB2YWx1ZS5cbm1tL21lbW9yeS5jOjYzMzM6ICogU2VlIGZpbGVtYXBfZmF1bHQoKSBhbmQgX19mb2xpb19sb2NrX29yX3JldHJ5KCkuXG5tbS9tZW1vcnkuYy02MzM0LSAqL1xubW0vbWVtb3J5LmM9NjMzNT1zdGF0aWMgdm1fZmF1bHRfdCBoYW5kbGVfcHRlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTY0MTQtICogdGhlIHJlc3VsdCwgdGhlIGxvY2sgaXMgbm90IGhlbGQgb24gZXhpdC4gIFNlZSBmaWxlbWFwX2ZhdWx0KClcbm1tL21lbW9yeS5jOjY0MTU6ICogYW5kIF9fZm9saW9fbG9ja19vcl9yZXRyeSgpLlxubW0vbWVtb3J5LmMtNjQxNi0gKi9cbi0tXG5tbS9tZW1vcnkuYz02NjA5PXN0YXRpYyB2bV9mYXVsdF90IHNhbml0aXplX2ZhdWx0X2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTY2NDgtICogVGhlIGxvY2sgbWF5IGhhdmUgYmVlbiByZWxlYXNlZCBkZXBlbmRpbmcgb24gZmxhZ3MgYW5kIG91clxubW0vbWVtb3J5LmM6NjY0OTogKiByZXR1cm4gdmFsdWUuICBTZWUgZmlsZW1hcF9mYXVsdCgpIGFuZCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoKS5cbm1tL21lbW9yeS5jLTY2NTAtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9ja2luZyBDaGFuZ2VzIGluIGBmaWxlbWFwX2ZhdWx0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBmb2xpb19sb2NrX29yX3JldHJ5YCBpcyB1c2VkLCBzcGVjaWZpY2FsbHkgaW4gYG1tL21lbW9yeS5jYCwgYW5kIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGF3YXkgZnJvbSBgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXBgIGluIGBmaWxlbWFwX2ZhdWx0YC4gUHJldmlvdXNseSwgdGhhdCBmdW5jdGlvbiBoYWQgdGhlIHRhc2sgb2YgZHJvcHBpbmcgdGhlIG1tYXAgbG9jay4gTm93LCBpbnN0ZWFkLCBgZmlsZW1hcF9mYXVsdGAgZGlyZWN0bHkgY2FsbHMgYGZvbGlvX3RyeWxvY2tgLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2FpdCBhIG1pbnV0ZSEgSWYgYGZpbGVtYXBfZmF1bHRgICpkb2VzbiYjMzk7dCogZHJvcCB0aGUgbW1hcCBsb2NrLCBpdCYjMzk7cyBibG9ja2luZyBvbiB0aGUgZm9saW8gbG9jayB3aGlsZSAqc3RpbGwqIGhvbGRpbmcgdGhlIG1tYXAgbG9jayEgVGhhdCYjMzk7cyBhIG1hc3NpdmUgc2hpZnQgaW4gdGhlIGxvY2tpbmcgc2VtYW50aWNzIG9mIGBmaWxlbWFwX2ZhdWx0YC4mIzM0OyBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0JiMzOTtzIGdvaW5nIHRvIGhhdmUgYWxsIHNvcnRzIG9mIGNvbnNlcXVlbmNlcy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBmdW5kYW1lbnRhbCBkaWZmZXJlbmNlIGluIGhvdyB0aGlzIGZ1bmN0aW9uIGJlaGF2ZXMgdW5kZXIgY29udGVudGlvbi4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgLiBJZiBgZmlsZW1hcF9mYXVsdGAgZG9lc24mIzM5O3QgcmV0dXJuIGBWTV9GQVVMVF9SRVRSWWAgd2hlbiBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgIGlzIHNldCwgaXQgd2lsbCAqYmxvY2sqLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGZvciBhIG1vbWVudC4gSSBrbm93IGBmaWxlbWFwX2ZhdWx0YCBpcyBjYWxsZWQgZnJvbSBgZG9fZmF1bHRgLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgZmlsZW1hcF9mYXVsdGAgbm93IGhhbmRsZXMgYEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUYCBiZWNhdXNlIEkgc3VzcGVjdCBhIHByb2JsZW0gaGVyZS4KCk9rYXksIGxldCBtZSBjaGVjayB0aGUgY29kZSBhZ2Fpbi4uLiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgYSBkZWRpY2F0ZWQgY2hlY2sgZm9yIGBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVGAgYW55bW9yZSEgVGhpcyByZWluZm9yY2VzIG15IGNvbmNlcm5zLgoKV2FpdCwgYGZpbGVtYXBfZ2V0X2ZvbGlvYCB1c2VzIGBGR1BfTk9XQUlUYCBpZiBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgIGlzIHNldC4gT2theSwgbGV0IG1lIGdvIHRocm91Z2ggYGZpbGVtYXBfZmF1bHRgIGFnYWluLCBpbiBsaWdodCBvZiB0aGlzIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkFVTFRfRkxBR19SRVRSWV9OT1dBSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9maWxlbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jPTE3MTc9c3RhdGljIGludCBfX2ZvbGlvX2xvY2tfYXN5bmMoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHdhaXRfcGFnZV9xdWV1ZSAqd2FpdClcbi0tXG5tbS9maWxlbWFwLmMtMTc0OC0gKiAgICAgdm1hX2VuZF9yZWFkKCkpLCB1bmxlc3MgZmxhZ3MgaGFkIGJvdGggRkFVTFRfRkxBR19BTExPV19SRVRSWSBhbmRcbm1tL2ZpbGVtYXAuYzoxNzQ5OiAqICAgICBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVCBzZXQsIGluIHdoaWNoIGNhc2UgdGhlIGxvY2sgaXMgc3RpbGwgaGVsZC5cbm1tL2ZpbGVtYXAuYy0xNzUwLSAqXG4tLVxubW0vZmlsZW1hcC5jPTE3NTQ9dm1fZmF1bHRfdCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vZmlsZW1hcC5jLTE3NjItXHRcdCAqL1xubW0vZmlsZW1hcC5jOjE3NjM6XHRcdGlmIChmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpXG5tbS9maWxlbWFwLmMtMTc2NC1cdFx0XHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzI2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTI2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBgZmlsZW1hcF9mYXVsdGAgTG9ja2luZyBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nLiBgZmlsZW1hcF9mYXVsdGAgdXNlZCB0byBoYW5kbGUgYEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUYCB1c2luZyBgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXBgLiBUaGUgbG9naWMgd2FzLCBpZiB0aGUgZm9saW8gY291bGRuJiMzOTt0IGJlIGxvY2tlZCwgaXQgd291bGQgY29uZGl0aW9uYWxseSByZXR1cm4gMCBhbmQgdGhlbiByZXRyeS4gVGhpcyB3YXMgdG8gYWxsb3cgdGhlIGZhdWx0IGhhbmRsZXIgdG8gcmV0cnkgYSBmYXVsdCB3aXRob3V0IGJsb2NraW5nIHdoZW4gYEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUYCB3YXMgc2V0LiBOb3csIGl0IGxvb2tzIGxpa2UgYF9fZmlsZW1hcF9nZXRfZm9saW9gICphbHdheXMqIHRyaWVzIHRvIGxvY2sgdGhlIGZvbGlvIHdpdGggYEZHUF9MT0NLYC4gSG1tLCBhbmQgdGhhdCBtZWFucyBpZiB0aGUgZm9saW8gaXMgdW5hdmFpbGFibGUsIGl0IHdpbGwgZGlyZWN0bHkgYmxvY2sgdGhlIHByb2Nlc3MuCgpUaGUgb2xkIGNvZGUgd291bGQgcmV0cnkgd2l0aCBWTV9GQVVMVF9SRVRSWSB3aGljaCBpcyBkZXNpZ25lZCBmb3IgdGhpcyBjYXNlIQoKTm93LCB0aGUgY29kZSAqZGlyZWN0bHkqIGNhbGxzIGBfX2ZvbGlvX2xvY2tgIG9yIGBfX2ZvbGlvX2xvY2tfa2lsbGFibGVgLiAgSWYgYEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUYCBpcyBzZXQsIHRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhcyBpdCB3aWxsICpibG9jayogaW5zdGVhZCBvZiByZXR1cm5pbmcuIFRoaXMgaXMgYSBwb3RlbnRpYWwgcmVncmVzc2lvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBpbnRlbnRpb25hbCBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSBnb2luZyBvbi4KClNpbmNlIHRoZSBvcmlnaW5hbCBsb2dpYyBoYXMgYmVlbiBtb2RpZmllZCBhbmQgaXQgaXMgY2hhbmdpbmcgdGhlIGJlaGF2aW9yLCB0aGlzIG5lZWRzIGZ1enppbmchCgpJIHNlZSBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCBoYXMgYWxzbyBiZWVuIG1vZGlmaWVkLiBBbmQgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgIGFuZCBgZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWRgIHdoaWNoIGFyZSB1c2VkIHdpdGggTU1VIGNvbmZpZy4KClRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzbyBJIGRvbiYjMzk7dCBzZWUgYW55IHNwZWNpYWwgY29uZmlncyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZC4gYENPTkZJR19NTVVgIGlzIHJlcXVpcmVkLCBidXQgdGhhdCBpcyBiYXNpY2FsbHkgYWx3YXlzIGVuYWJsZWQuIGBDT05GSUdfTlVNQWAgY291bGQgYmUgbmVlZGVkLCBzaW5jZSBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCBpcyBhbHNvIG1vZGlmaWVkLgoKYGZpbGVtYXBfZmF1bHRgIGFuZCBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCwgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgIGFuZCBgZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWRgIGFyZSBkZWZpbml0ZWx5IGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gSSBzaG91bGRuJiMzOTt0IGxpc3QgdGhlbSBpbiBgRm9jdXNTeW1ib2xzYC4gVGhleSBnZXQgY2FsbGVkIG9uIGV2ZXJ5IHBhZ2UgZmF1bHQsIG1lYW5pbmcgdGhleSBhcmUgYSBiYWQgY2hvaWNlIGZvciBiZWluZyBhZGRlZCB0byBgRm9jdXNTeW1ib2xzYC4KClRoZXJlZm9yZSwgbXkgc3VtbWFyeSBpczoKCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlCiogICAqKkZvY3VzU3ltYm9scyoqOiBcWyBdCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogXFsgXQoqICAgKipSZWFzb25pbmcqKjogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBgZmlsZW1hcF9mYXVsdGAsIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgLCBgZG9fc3luY19tbWFwX3JlYWRhaGVhZGAgYW5kIGBkb19hc3luY19tbWFwX3JlYWRhaGVhZGAsIGNoYW5naW5nIGhvdyB0aGUgZm9saW8gbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVtb3ZpbmcgdGhlIGRyb3BwaW5nIG9mIHRoZSBtbWFwIGxvY2sgZHVyaW5nIEkvTyBhbmQgZm9saW8gbG9ja2luZy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19maWxlbWFwX2dldF9mb2xpb19tcG9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYz0xODk0PXZvaWQgKmZpbGVtYXBfZ2V0X2VudHJ5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4KVxuLS1cbm1tL2ZpbGVtYXAuYy0xOTI1LS8qKlxubW0vZmlsZW1hcC5jOjE5MjY6ICogX19maWxlbWFwX2dldF9mb2xpb19tcG9sIC0gRmluZCBhbmQgZ2V0IGEgcmVmZXJlbmNlIHRvIGEgZm9saW8uXG5tbS9maWxlbWFwLmMtMTkyNy0gKiBAbWFwcGluZzogVGhlIGFkZHJlc3Nfc3BhY2UgdG8gc2VhcmNoLlxuLS1cbm1tL2ZpbGVtYXAuYy0xOTQxLSAqL1xubW0vZmlsZW1hcC5jOjE5NDI6c3RydWN0IGZvbGlvICpfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2woc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5tbS9maWxlbWFwLmMtMTk0My1cdFx0cGdvZmZfdCBpbmRleCwgZmdmX3QgZmdwX2ZsYWdzLCBnZnBfdCBnZnAsIHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSlcbi0tXG5tbS9maWxlbWFwLmMtMjA2NC19XG5tbS9maWxlbWFwLmM6MjA2NTpFWFBPUlRfU1lNQk9MKF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCk7XG5tbS9maWxlbWFwLmMtMjA2Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTUKCQkJCQkJCW91dHB1dDogOTIKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gaWRlbnRpZnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHNvbWUgbW9kaWZpZWQgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjaGVjayBmb3IgYENPTkZJR19OVU1BYCwgYXMgaXQgb2Z0ZW4gc3VyZmFjZXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dHMuIEhvd2V2ZXIsIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IGlzICpub3QqIGdhdGVkIGJ5IHRoYXQgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGFsd2F5cyBjb21waWxlZCBpbi4gVGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIHF1aWNrbHkuCgpUaGVuLCBJIHJlLXJlYWQgdGhlIGluc3RydWN0aW9uczogSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBjb25maWdzIHRoYXQgYXJlIGFsbW9zdCBhbHdheXMgZW5hYmxlZC4gSXQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIG9ubHkgbGlzdGluZyB0aG9zZSAqZGlyZWN0bHkqIHJlbGF0ZWQgdG8gdGhlIG1vZGlmaWVkIGNvZGUuIFNpbmNlIEkmIzM5O20gbm90IHNlZWluZyBhbnkgc3VjaCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBpbiBwbGF5LCB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGVudW1lcmF0ZSBhbnl0aGluZy4gSXQmIzM5O3MgYSBjYXNlIG9mIGZpbmRpbmcgKm5vdGhpbmcqIHJlbGV2YW50LiBTbywgdGhlIHJpZ2h0IGFjdGlvbiBoZXJlIGlzIHRvIHJldHVybiBhbiBlbXB0eSBsaXN0IG9mIGNvbmZpZ3MuIE1ha2VzIHNlbnNlLgoKSSYjMzk7bGwgbm93IHRyaWdnZXIgdGhlIGBzZXQtcmVzdWx0c2AgYWN0aW9uLCBzaW5jZSB0aGUgYW5hbHlzaXMgaXMgY29tcGxldGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGluZyBsb2dpYyBpbiBmaWxlbWFwX2ZhdWx0IGFuZCBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wsIGNoYW5naW5nIGhvdyB0aGUgZm9saW8gbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVtb3ZpbmcgdGhlIGRyb3BwaW5nIG9mIHRoZSBtbWFwIGxvY2sgZHVyaW5nIEkvTyBhbmQgZm9saW8gbG9ja2luZy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gZmlsZW1hcF9mYXVsdCBhbmQgX19maWxlbWFwX2dldF9mb2xpb19tcG9sLCBjaGFuZ2luZyBob3cgdGhlIGZvbGlvIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbW92aW5nIHRoZSBkcm9wcGluZyBvZiB0aGUgbW1hcCBsb2NrIGR1cmluZyBJL08gYW5kIGZvbGlvIGxvY2tpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDg6MzMuOTY0NTE4MTc1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MjA4OTQ4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gZmlsZW1hcF9mYXVsdCBhbmQgX19maWxlbWFwX2dldF9mb2xpb19tcG9sLCBjaGFuZ2luZyBob3cgdGhlIGZvbGlvIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbW92aW5nIHRoZSBkcm9wcGluZyBvZiB0aGUgbW1hcCBsb2NrIGR1cmluZyBJL08gYW5kIGZvbGlvIGxvY2tpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOTo0ODozMy45NjQ1NDAxNDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NDM1NDk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhNzZjNTlmODRmN2FlMjRhNTQxZjA1OTNlNjllOWQ1OTU5OWU2N2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMTk6NDg6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbmluZGV4IDFmNTA5OTFiNDNlM2IzLi5lNmFjMjIxZWU1NGQ4YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuQEAgLTY5NSw5ICs2OTUsNiBAQCBwZ29mZl90IHBhZ2VfY2FjaGVfcHJldl9taXNzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiAgKiAqICVGR1BfQ1JFQVQgLSBJZiBubyBmb2xpbyBpcyBwcmVzZW50IHRoZW4gYSBuZXcgZm9saW8gaXMgYWxsb2NhdGVkLFxcbiAgKiAgIGFkZGVkIHRvIHRoZSBwYWdlIGNhY2hlIGFuZCB0aGUgVk0ncyBMUlUgbGlzdC4gIFRoZSBmb2xpbyBpc1xcbiAgKiAgIHJldHVybmVkIGxvY2tlZC5cXG4tICogKiAlRkdQX0ZPUl9NTUFQIC0gVGhlIGNhbGxlciB3YW50cyB0byBkbyBpdHMgb3duIGxvY2tpbmcgZGFuY2UgaWYgdGhlXFxuLSAqICAgZm9saW8gaXMgYWxyZWFkeSBpbiBjYWNoZS4gIElmIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLCB1bmxvY2sgaXRcXG4tICogICBiZWZvcmUgcmV0dXJuaW5nIHNvIHRoZSBjYWxsZXIgY2FuIGRvIHRoZSBzYW1lIGRhbmNlLlxcbiAgKiAqICVGR1BfV1JJVEUgLSBUaGUgZm9saW8gd2lsbCBiZSB3cml0dGVuIHRvIGJ5IHRoZSBjYWxsZXIuXFxuICAqICogJUZHUF9OT0ZTIC0gX19HRlBfRlMgd2lsbCBnZXQgY2xlYXJlZCBpbiBnZnAuXFxuICAqICogJUZHUF9OT1dBSVQgLSBEb24ndCBibG9jayBvbiB0aGUgZm9saW8gbG9jay5cXG5AQCAtNzE0LDkgKzcxMSw4IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBmZ2ZfdDtcXG4gI2RlZmluZSBGR1BfV1JJVEVcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAwOClcXG4gI2RlZmluZSBGR1BfTk9GU1xcdFxcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDEwKVxcbiAjZGVmaW5lIEZHUF9OT1dBSVRcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDAyMClcXG4tI2RlZmluZSBGR1BfRk9SX01NQVBcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcXG4tI2RlZmluZSBGR1BfU1RBQkxFXFx0XFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXFxuLSNkZWZpbmUgRkdQX0RPTlRDQUNIRVxcdFxcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMTAwKVxcbisjZGVmaW5lIEZHUF9TVEFCTEVcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA0MClcXG4rI2RlZmluZSBGR1BfRE9OVENBQ0hFXFx0XFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwODApXFxuICNkZWZpbmUgRkdGX0dFVF9PUkRFUihmZ2YpXFx0KCgoX19mb3JjZSB1bnNpZ25lZClmZ2YpIFxcdTAwM2VcXHUwMDNlIDI2KVxcdC8qIHRvcCA2IGJpdHMgKi9cXG4gXFxuICNkZWZpbmUgRkdQX1dSSVRFQkVHSU5cXHRcXHQoRkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQgfCBGR1BfU1RBQkxFKVxcbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcXG5pbmRleCA3ZTQ2N2M4MWQyMTM4OS4uMTNhODYxYjM4NjIxZmYgMTAwNjQ0XFxuLS0tIGEvbW0vZmlsZW1hcC5jXFxuKysrIGIvbW0vZmlsZW1hcC5jXFxuQEAgLTE5OTUsNyArMTk5NSw3IEBAIHN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHRnZnAgXFx1MDAyNj0gfkdGUF9LRVJORUw7XFxuIFxcdFxcdFxcdGdmcCB8PSBHRlBfTk9XQUlUO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UoIShmZ3BfZmxhZ3MgXFx1MDAyNiAoRkdQX0xPQ0sgfCBGR1BfRk9SX01NQVApKSkpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0UoIShmZ3BfZmxhZ3MgXFx1MDAyNiBGR1BfTE9DSykpKVxcbiBcXHRcXHRcXHRmZ3BfZmxhZ3MgfD0gRkdQX0xPQ0s7XFxuIFxcbiBcXHRcXHRpZiAob3JkZXIgXFx1MDAzZSBtYXBwaW5nX21heF9mb2xpb19vcmRlcihtYXBwaW5nKSlcXG5AQCAtMjA0MiwxMiArMjA0Miw2IEBAIHN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIGZpbGVtYXBfYWRkX2ZvbGlvIGxvY2tzIHRoZSBwYWdlLCBhbmQgZm9yIG1tYXBcXG4tXFx0XFx0ICogd2UgZXhwZWN0IGFuIHVubG9ja2VkIHBhZ2UuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZm9saW8gXFx1MDAyNlxcdTAwMjYgKGZncF9mbGFncyBcXHUwMDI2IEZHUF9GT1JfTU1BUCkpXFxuLVxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghZm9saW8pXFxuQEAgLTMyNTksNTIgKzMyNTMsNiBAQCBsb2ZmX3QgbWFwcGluZ19zZWVrX2hvbGVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHN0YXJ0LFxcbiBcXG4gI2lmZGVmIENPTkZJR19NTVVcXG4gI2RlZmluZSBNTUFQX0xPVFNBTUlTUyAgKDEwMClcXG4tLypcXG4tICogbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAgLSBsb2NrIHRoZSBwYWdlLCBwb3NzaWJseSBkcm9wcGluZyB0aGUgbW1hcF9sb2NrXFxuLSAqIEB2bWYgLSB0aGUgdm1fZmF1bHQgZm9yIHRoaXMgZmF1bHQuXFxuLSAqIEBmb2xpbyAtIHRoZSBmb2xpbyB0byBsb2NrLlxcbi0gKiBAZnBpbiAtIHRoZSBwb2ludGVyIHRvIHRoZSBmaWxlIHdlIG1heSBwaW4gKG9yIGlzIGFscmVhZHkgcGlubmVkKS5cXG4tICpcXG4tICogVGhpcyB3b3JrcyBzaW1pbGFyIHRvIGxvY2tfZm9saW9fb3JfcmV0cnkgaW4gdGhhdCBpdCBjYW4gZHJvcCB0aGVcXG4tICogbW1hcF9sb2NrLiAgSXQgZGlmZmVycyBpbiB0aGF0IGl0IGFjdHVhbGx5IHJldHVybnMgdGhlIGZvbGlvIGxvY2tlZFxcbi0gKiBpZiBpdCByZXR1cm5zIDEgYW5kIDAgaWYgaXQgY291bGRuJ3QgbG9jayB0aGUgZm9saW8uICBJZiB3ZSBkaWQgaGF2ZVxcbi0gKiB0byBkcm9wIHRoZSBtbWFwX2xvY2sgdGhlbiBmcGluIHdpbGwgcG9pbnQgdG8gdGhlIHBpbm5lZCBmaWxlIGFuZFxcbi0gKiBuZWVkcyB0byBiZSBmcHV0KCknZWQgYXQgYSBsYXRlciBwb2ludC5cXG4tICovXFxuLXN0YXRpYyBpbnQgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGZpbGUgKipmcGluKVxcbi17XFxuLVxcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSlcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBOT1RFISBUaGlzIHdpbGwgbWFrZSB1cyByZXR1cm4gd2l0aCBWTV9GQVVMVF9SRVRSWSwgYnV0IHdpdGhcXG4tXFx0ICogdGhlIGZhdWx0IGxvY2sgc3RpbGwgaGVsZC4gVGhhdCdzIGhvdyBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVFxcbi1cXHQgKiBpcyBzdXBwb3NlZCB0byB3b3JrLiBXZSBoYXZlIHdheSB0b28gbWFueSBzcGVjaWFsIGNhc2VzLi5cXG4tXFx0ICovXFxuLVxcdGlmICh2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0KmZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCAqZnBpbik7XFxuLVxcdGlmICh2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19LSUxMQUJMRSkge1xcbi1cXHRcXHRpZiAoX19mb2xpb19sb2NrX2tpbGxhYmxlKGZvbGlvKSkge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBXZSBkaWRuJ3QgaGF2ZSB0aGUgcmlnaHQgZmxhZ3MgdG8gZHJvcCB0aGVcXG4tXFx0XFx0XFx0ICogZmF1bHQgbG9jaywgYnV0IGFsbCBmYXVsdF9oYW5kbGVycyBvbmx5IGNoZWNrXFxuLVxcdFxcdFxcdCAqIGZvciBmYXRhbCBzaWduYWxzIGlmIHdlIHJldHVybiBWTV9GQVVMVF9SRVRSWSxcXG4tXFx0XFx0XFx0ICogc28gd2UgbmVlZCB0byBkcm9wIHRoZSBmYXVsdCBsb2NrIGhlcmUgYW5kXFxuLVxcdFxcdFxcdCAqIHJldHVybiAwIGlmIHdlIGRvbid0IGhhdmUgYSBmcGluLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKCpmcGluID09IE5VTEwpXFxuLVxcdFxcdFxcdFxcdHJlbGVhc2VfZmF1bHRfbG9jayh2bWYpO1xcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0fVxcbi1cXHR9IGVsc2VcXG4tXFx0XFx0X19mb2xpb19sb2NrKGZvbGlvKTtcXG4tXFxuLVxcdHJldHVybiAxO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBTeW5jaHJvbm91cyByZWFkYWhlYWQgaGFwcGVucyB3aGVuIHdlIGRvbid0IGV2ZW4gZmluZCBhIHBhZ2UgaW4gdGhlIHBhZ2VcXG4gICogY2FjaGUgYXQgYWxsLiAgV2UgZG9uJ3Qgd2FudCB0byBwZXJmb3JtIElPIHVuZGVyIHRoZSBtbWFwIHNlbSwgc28gaWYgd2UgaGF2ZVxcbkBAIC0zMzEyLDEzICszMjYwLDEyIEBAIHN0YXRpYyBpbnQgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuICAqIHRoYXQuICBJZiB3ZSBkaWRuJ3QgcGluIGEgZmlsZSB0aGVuIHdlIHJldHVybiBOVUxMLiAgVGhlIGZpbGUgdGhhdCBpc1xcbiAgKiByZXR1cm5lZCBuZWVkcyB0byBiZSBmcHV0KCknZWQgd2hlbiB3ZSdyZSBkb25lIHdpdGggaXQuXFxuICAqL1xcbi1zdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuK3N0YXRpYyB2b2lkIGRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIHtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbGUgPSB2bWYtXFx1MDAzZXZtYS1cXHUwMDNldm1fZmlsZTtcXG4gXFx0c3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhID0gXFx1MDAyNmZpbGUtXFx1MDAzZWZfcmE7XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nO1xcbiBcXHRERUZJTkVfUkVBREFIRUFEKHJhY3RsLCBmaWxlLCByYSwgbWFwcGluZywgdm1mLVxcdTAwM2VwZ29mZik7XFxuLVxcdHN0cnVjdCBmaWxlICpmcGluID0gTlVMTDtcXG4gXFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9mbGFncztcXG4gXFx0Ym9vbCBmb3JjZV90aHBfcmVhZGFoZWFkID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGludCB0aHBfb3JkZXIgPSAwO1xcbkBAIC0zMzQ4LDE1ICszMjk1LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0ICogVk1fRVhFQyBjYXNlIGJlbG93IGlzIGFscmVhZHkgaW50ZW5kZWQgZm9yIHJhbmRvbSBhY2Nlc3MuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoKHZtX2ZsYWdzIFxcdTAwMjYgKFZNX1JBTkRfUkVBRCB8IFZNX0VYRUMpKSA9PSBWTV9SQU5EX1JFQUQpXFxuLVxcdFxcdFxcdHJldHVybiBmcGluO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRcXHRpZiAoIXJhLVxcdTAwM2VyYV9wYWdlcylcXG4tXFx0XFx0XFx0cmV0dXJuIGZwaW47XFxuK1xcdFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdFxcdGlmICh2bV9mbGFncyBcXHUwMDI2IFZNX1NFUV9SRUFEKSB7XFxuLVxcdFxcdFxcdGZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTtcXG4gXFx0XFx0XFx0cGFnZV9jYWNoZV9zeW5jX3JhKFxcdTAwMjZyYWN0bCwgcmEtXFx1MDAzZXJhX3BhZ2VzKTtcXG4tXFx0XFx0XFx0cmV0dXJuIGZwaW47XFxuK1xcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0zMzcxLDEzICszMzE3LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0ICogc3RvcCBib3RoZXJpbmcgd2l0aCByZWFkLWFoZWFkLiBJdCB3aWxsIG9ubHkgaHVydC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChtbWFwX21pc3MgXFx1MDAzZSBNTUFQX0xPVFNBTUlTUylcXG4tXFx0XFx0XFx0cmV0dXJuIGZwaW47XFxuK1xcdFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZvcmNlX3RocF9yZWFkYWhlYWQpIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBmb2xpb19ucl9wYWdlcyA9IDFVTCBcXHUwMDNjXFx1MDAzYyB0aHBfb3JkZXI7XFxuIFxcbi1cXHRcXHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7XFxuIFxcdFxcdHJhY3RsLl9pbmRleCBcXHUwMDI2PSB+KGZvbGlvX25yX3BhZ2VzIC0gMSk7XFxuIFxcdFxcdHJhLVxcdTAwM2VzaXplID0gZm9saW9fbnJfcGFnZXM7XFxuIFxcdFxcdC8qXFxuQEAgLTMzODksNyArMzMzNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0cmEtXFx1MDAzZWFzeW5jX3NpemUgPSBmb2xpb19ucl9wYWdlcztcXG4gXFx0XFx0cmEtXFx1MDAzZW9yZGVyID0gdGhwX29yZGVyO1xcbiBcXHRcXHRwYWdlX2NhY2hlX3JhX29yZGVyKFxcdTAwMjZyYWN0bCwgcmEpO1xcbi1cXHRcXHRyZXR1cm4gZnBpbjtcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9FWEVDKSB7XFxuQEAgLTM0MjcsMjkgKzMzNzIsMjQgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXHRcXHRyYS1cXHUwMDNlb3JkZXIgPSAwO1xcbiBcXHR9XFxuIFxcbi1cXHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7XFxuIFxcdHJhY3RsLl9pbmRleCA9IHJhLVxcdTAwM2VzdGFydDtcXG4gXFx0cGFnZV9jYWNoZV9yYV9vcmRlcihcXHUwMDI2cmFjdGwsIHJhKTtcXG4tXFx0cmV0dXJuIGZwaW47XFxuIH1cXG4gXFxuIC8qXFxuLSAqIEFzeW5jaHJvbm91cyByZWFkYWhlYWQgaGFwcGVucyB3aGVuIHdlIGZpbmQgdGhlIHBhZ2UgYW5kIFBHX3JlYWRhaGVhZCxcXG4tICogc28gd2Ugd2FudCB0byBwb3NzaWJseSBleHRlbmQgdGhlIHJlYWRhaGVhZCBmdXJ0aGVyLiAgV2UgcmV0dXJuIHRoZSBmaWxlIHRoYXRcXG4tICogd2FzIHBpbm5lZCBpZiB3ZSBoYXZlIHRvIGRyb3AgdGhlIG1tYXBfbG9jayBpbiBvcmRlciB0byBkbyBJTy5cXG4rICogQXN5bmNocm9ub3VzIHJlYWRhaGVhZCBoYXBwZW5zIHdoZW4gd2UgZmluZCB0aGUgZm9saW8gYW5kIGl0IGhhcyB0aGVcXG4rICogcmVhZGFoZWFkIGZsYWcgc2V0IHNvIHdlIHdhbnQgdG8gcG9zc2libHkgZXh0ZW5kIHRoZSByZWFkYWhlYWQgZnVydGhlci5cXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgdm9pZCBkb19hc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9maWxlO1xcbiBcXHRzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEgPSBcXHUwMDI2ZmlsZS1cXHUwMDNlZl9yYTtcXG4gXFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlsZSwgcmEsIGZpbGUtXFx1MDAzZWZfbWFwcGluZywgdm1mLVxcdTAwM2VwZ29mZik7XFxuLVxcdHN0cnVjdCBmaWxlICpmcGluID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgc2hvcnQgbW1hcF9taXNzO1xcbiBcXG4gXFx0LyogSWYgd2UgZG9uJ3Qgd2FudCBhbnkgcmVhZC1haGVhZCwgZG9uJ3QgYm90aGVyICovXFxuIFxcdGlmICh2bWYtXFx1MDAzZXZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9SQU5EX1JFQUQgfHwgIXJhLVxcdTAwM2VyYV9wYWdlcylcXG4tXFx0XFx0cmV0dXJuIGZwaW47XFxuK1xcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSBmb2xpbyBpcyBsb2NrZWQsIHdlJ3JlIGxpa2VseSByYWNpbmcgYWdhaW5zdCBhbm90aGVyIGZhdWx0LlxcbkBAIC0zNDcwLDEwICszNDEwLDggQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19hc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4gXFxuIFxcdGlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpIHtcXG4gXFx0XFx0cmFjdGwuX21heF9pbmRleCA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9wZ29mZiArIHZtYV9wYWdlcyh2bWYtXFx1MDAzZXZtYSkgLSAxO1xcbi1cXHRcXHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7XFxuIFxcdFxcdHBhZ2VfY2FjaGVfYXN5bmNfcmEoXFx1MDAyNnJhY3RsLCBmb2xpbywgcmEtXFx1MDAzZXJhX3BhZ2VzKTtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gZnBpbjtcXG4gfVxcbiBcXG4gc3RhdGljIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbkBAIC0zNTMwLDE1ICszNDY4LDkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiAgKiBpdCBpbiB0aGUgcGFnZSBjYWNoZSwgYW5kIGhhbmRsZXMgdGhlIHNwZWNpYWwgY2FzZXMgcmVhc29uYWJseSB3aXRob3V0XFxuICAqIGhhdmluZyBhIGxvdCBvZiBkdXBsaWNhdGVkIGNvZGUuXFxuICAqXFxuLSAqIHZtYS1cXHUwMDNldm1fbW0tXFx1MDAzZW1tYXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkuXFxuLSAqXFxuLSAqIElmIG91ciByZXR1cm4gdmFsdWUgaGFzIFZNX0ZBVUxUX1JFVFJZIHNldCwgaXQncyBiZWNhdXNlIHRoZSBtbWFwX2xvY2tcXG4tICogbWF5IGJlIGRyb3BwZWQgYmVmb3JlIGRvaW5nIEkvTyBvciBieSBsb2NrX2ZvbGlvX21heWJlX2Ryb3BfbW1hcCgpLlxcbi0gKlxcbi0gKiBJZiBvdXIgcmV0dXJuIHZhbHVlIGRvZXMgbm90IGhhdmUgVk1fRkFVTFRfUkVUUlkgc2V0LCB0aGUgbW1hcF9sb2NrXFxuLSAqIGhhcyBub3QgYmVlbiByZWxlYXNlZC5cXG4tICpcXG4tICogV2UgbmV2ZXIgcmV0dXJuIHdpdGggVk1fRkFVTFRfUkVUUlkgYW5kIGEgYml0IGZyb20gVk1fRkFVTFRfRVJST1Igc2V0LlxcbisgKiBDb250ZXh0OiBNYXkgc2xlZXAgd2FpdGluZyBmb3IgSS9PLiAgQ2FuIGJlIGludGVycnVwdGVkIGJ5IGZhdGFsXFxuKyAqIHNpZ25hbHMgaWYgQHZtZiBmbGFncyBwZXJtaXQuICBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgZmF1bHQgbG9ja1xcbisgKiAoZWl0aGVyIG1tYXBfbG9jayBvciBWTUEgbG9jaykuXFxuICAqXFxuICAqIFJldHVybjogYml0d2lzZS1PUiBvZiAlVk1fRkFVTFRfIGNvZGVzLlxcbiAgKi9cXG5AQCAtMzU0Niw3ICszNDc4LDYgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiB7XFxuIFxcdGludCBlcnJvcjtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbGUgPSB2bWYtXFx1MDAzZXZtYS1cXHUwMDNldm1fZmlsZTtcXG4tXFx0c3RydWN0IGZpbGUgKmZwaW4gPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZztcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuIFxcdHBnb2ZmX3QgbWF4X2lkeCwgaW5kZXggPSB2bWYtXFx1MDAzZXBnb2ZmO1xcbkBAIC0zNTY2LDE1ICszNDk3LDMxIEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0Zm9saW8gPSBmaWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCk7XFxuIFxcdGlmIChsaWtlbHkoIUlTX0VSUihmb2xpbykpKSB7XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIFdlIGZvdW5kIHRoZSBwYWdlLCBzbyB0cnkgYXN5bmMgcmVhZGFoZWFkIGJlZm9yZSB3YWl0aW5nIGZvclxcbi1cXHRcXHQgKiB0aGUgbG9jay5cXG4rXFx0XFx0ICogV2UgZm91bmQgdGhlIGZvbGlvLCBzbyB0cnkgYXN5bmMgcmVhZGFoZWFkIGJlZm9yZVxcbitcXHRcXHQgKiB3YWl0aW5nIGZvciB0aGUgbG9jay5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmICghKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1RSSUVEKSlcXG4tXFx0XFx0XFx0ZnBpbiA9IGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkKHZtZiwgZm9saW8pO1xcbitcXHRcXHRcXHRkb19hc3luY19tbWFwX3JlYWRhaGVhZCh2bWYsIGZvbGlvKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkpIHtcXG4gXFx0XFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbiBcXHRcXHRcXHRtYXBwaW5nX2xvY2tlZCA9IHRydWU7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4rXFx0XFx0XFx0aWYgKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX0tJTExBQkxFKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChfX2ZvbGlvX2xvY2tfa2lsbGFibGUoZm9saW8pIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0X19mb2xpb19sb2NrKGZvbGlvKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBEaWQgaXQgZ2V0IHRydW5jYXRlZD8gKi9cXG4rXFx0XFx0aWYgKHVubGlrZWx5KGZvbGlvLVxcdTAwM2VtYXBwaW5nICE9IG1hcHBpbmcpKSB7XFxuK1xcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdFxcdFxcdGdvdG8gcmV0cnlfZmluZDtcXG4rXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyZXQgPSBmaWxlbWFwX2ZhdWx0X3JlY2hlY2tfcHRlX25vbmUodm1mKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuQEAgLTM1ODQsNyArMzUzMSw3IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0Y291bnRfdm1fZXZlbnQoUEdNQUpGQVVMVCk7XFxuIFxcdFxcdGNvdW50X21lbWNnX2V2ZW50X21tKHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9tbSwgUEdNQUpGQVVMVCk7XFxuIFxcdFxcdHJldCA9IFZNX0ZBVUxUX01BSk9SO1xcbi1cXHRcXHRmcGluID0gZG9fc3luY19tbWFwX3JlYWRhaGVhZCh2bWYpO1xcbitcXHRcXHRkb19zeW5jX21tYXBfcmVhZGFoZWFkKHZtZik7XFxuIHJldHJ5X2ZpbmQ6XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFNlZSBjb21tZW50IGluIGZpbGVtYXBfY3JlYXRlX2ZvbGlvKCkgd2h5IHdlIG5lZWRcXG5AQCAtMzU5NSwyNSArMzU0MiwxMyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdFxcdFxcdG1hcHBpbmdfbG9ja2VkID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRmb2xpbyA9IF9fZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdFxcdCAgRkdQX0NSRUFUfEZHUF9GT1JfTU1BUCxcXG4tXFx0XFx0XFx0XFx0XFx0ICB2bWYtXFx1MDAzZWdmcF9tYXNrKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICBGR1BfQ1JFQVQgfCBGR1BfTE9DSywgdm1mLVxcdTAwM2VnZnBfbWFzayk7XFxuIFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdGlmIChmcGluKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dF9yZXRyeTtcXG4gXFx0XFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XFxuIFxcdFxcdFxcdHJldHVybiBWTV9GQVVMVF9PT007XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFsb2NrX2ZvbGlvX21heWJlX2Ryb3BfbW1hcCh2bWYsIGZvbGlvLCBcXHUwMDI2ZnBpbikpXFxuLVxcdFxcdGdvdG8gb3V0X3JldHJ5O1xcbi1cXG4tXFx0LyogRGlkIGl0IGdldCB0cnVuY2F0ZWQ/ICovXFxuLVxcdGlmICh1bmxpa2VseShmb2xpby1cXHUwMDNlbWFwcGluZyAhPSBtYXBwaW5nKSkge1xcbi1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXHRcXHRnb3RvIHJldHJ5X2ZpbmQ7XFxuLVxcdH1cXG4gXFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb19jb250YWlucyhmb2xpbywgaW5kZXgpLCBmb2xpbyk7XFxuIFxcbiBcXHQvKlxcbkBAIC0zNjI1LDcgKzM1NjAsNyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHRoZSBpbnZhbGlkYXRlIGxvY2sgaXMgbm90IGhlbGQsIHRoZSBmb2xpbyB3YXMgaW4gY2FjaGVcXG4gXFx0XFx0ICogYW5kIHVwdG9kYXRlIGFuZCBub3cgaXQgaXMgbm90LiBTdHJhbmdlIGJ1dCBwb3NzaWJsZSBzaW5jZSB3ZVxcbi1cXHRcXHQgKiBkaWRuJ3QgaG9sZCB0aGUgcGFnZSBsb2NrIGFsbCB0aGUgdGltZS4gTGV0J3MgZHJvcFxcbitcXHRcXHQgKiBkaWRuJ3QgaG9sZCB0aGUgZm9saW8gbG9jayBhbGwgdGhlIHRpbWUuIExldCdzIGRyb3BcXG4gXFx0XFx0ICogZXZlcnl0aGluZywgZ2V0IHRoZSBpbnZhbGlkYXRlIGxvY2sgYW5kIHRyeSBhZ2Fpbi5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmICghbWFwcGluZ19sb2NrZWQpIHtcXG5AQCAtMzY0MiwyMSArMzU3NywxMiBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdFxcdGdvdG8gcGFnZV9ub3RfdXB0b2RhdGU7XFxuIFxcdH1cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFdlJ3ZlIG1hZGUgaXQgdGhpcyBmYXIgYW5kIHdlIGhhZCB0byBkcm9wIG91ciBtbWFwX2xvY2ssIG5vdyBpcyB0aGVcXG4tXFx0ICogdGltZSB0byByZXR1cm4gdG8gdGhlIHVwcGVyIGxheWVyIGFuZCBoYXZlIGl0IHJlLWZpbmQgdGhlIHZtYSBhbmRcXG4tXFx0ICogcmVkbyB0aGUgZmF1bHQuXFxuLVxcdCAqL1xcbi1cXHRpZiAoZnBpbikge1xcbi1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi1cXHRcXHRnb3RvIG91dF9yZXRyeTtcXG4tXFx0fVxcbiBcXHRpZiAobWFwcGluZ19sb2NrZWQpXFxuIFxcdFxcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogRm91bmQgdGhlIHBhZ2UgYW5kIGhhdmUgYSByZWZlcmVuY2Ugb24gaXQuXFxuLVxcdCAqIFdlIG11c3QgcmVjaGVjayBpX3NpemUgdW5kZXIgcGFnZSBsb2NrLlxcbitcXHQgKiBGb3VuZCB0aGUgZm9saW8gYW5kIGhhdmUgYSByZWZlcmVuY2Ugb24gaXQuXFxuK1xcdCAqIFdlIG11c3QgcmVjaGVjayBpX3NpemUgdW5kZXIgZm9saW8gbG9jay5cXG4gXFx0ICovXFxuIFxcdG1heF9pZHggPSBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX1NJWkUpO1xcbiBcXHRpZiAodW5saWtlbHkoaW5kZXggXFx1MDAzZT0gbWF4X2lkeCkpIHtcXG5AQCAtMzY3NSwxMCArMzYwMSw3IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0ICogYmVjYXVzZSB0aGVyZSByZWFsbHkgYXJlbid0IGFueSBwZXJmb3JtYW5jZSBpc3N1ZXMgaGVyZVxcbiBcXHQgKiBhbmQgd2UgbmVlZCB0byBjaGVjayBmb3IgZXJyb3JzLlxcbiBcXHQgKi9cXG4tXFx0ZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsIGZwaW4pO1xcbiBcXHRlcnJvciA9IGZpbGVtYXBfcmVhZF9mb2xpbyhmaWxlLCBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlcmVhZF9mb2xpbywgZm9saW8pO1xcbi1cXHRpZiAoZnBpbilcXG4tXFx0XFx0Z290byBvdXRfcmV0cnk7XFxuIFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcbiBcXHRpZiAoIWVycm9yIHx8IGVycm9yID09IEFPUF9UUlVOQ0FURURfUEFHRSlcXG5AQCAtMzY4NiwyMCArMzYwOSw2IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XFxuIFxcbiBcXHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xcbi1cXG4tb3V0X3JldHJ5Olxcbi1cXHQvKlxcbi1cXHQgKiBXZSBkcm9wcGVkIHRoZSBtbWFwX2xvY2ssIHdlIG5lZWQgdG8gcmV0dXJuIHRvIHRoZSBmYXVsdCBoYW5kbGVyIHRvXFxuLVxcdCAqIHJlLWZpbmQgdGhlIHZtYSBhbmQgY29tZSBiYWNrIGFuZCBmaW5kIG91ciBob3BlZnVsbHkgc3RpbGwgcG9wdWxhdGVkXFxuLVxcdCAqIHBhZ2UuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIUlTX0VSUihmb2xpbykpXFxuLVxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdGlmIChtYXBwaW5nX2xvY2tlZClcXG4tXFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XFxuLVxcdGlmIChmcGluKVxcbi1cXHRcXHRmcHV0KGZwaW4pO1xcbi1cXHRyZXR1cm4gcmV0IHwgVk1fRkFVTFRfUkVUUlk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChmaWxlbWFwX2ZhdWx0KTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjQ4OjM0LjY0OTcxOTAwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MzU2ODUxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gZmlsZW1hcF9mYXVsdCBhbmQgX19maWxlbWFwX2dldF9mb2xpb19tcG9sLCBjaGFuZ2luZyBob3cgdGhlIGZvbGlvIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbW92aW5nIHRoZSBkcm9wcGluZyBvZiB0aGUgbW1hcCBsb2NrIGR1cmluZyBJL08gYW5kIGZvbGlvIGxvY2tpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhNzZjNTlmODRmN2FlMjRhNTQxZjA1OTNlNjllOWQ1OTU5OWU2N2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxOTo0ODozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDFmNTA5OTFiNDNlM2IzLi5lNmFjMjIxZWU1NGQ4YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTY5NSw5ICs2OTUsNiBAQCBwZ29mZl90IHBhZ2VfY2FjaGVfcHJldl9taXNzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuICAqICogJUZHUF9DUkVBVCAtIElmIG5vIGZvbGlvIGlzIHByZXNlbnQgdGhlbiBhIG5ldyBmb2xpbyBpcyBhbGxvY2F0ZWQsXG4gICogICBhZGRlZCB0byB0aGUgcGFnZSBjYWNoZSBhbmQgdGhlIFZNJ3MgTFJVIGxpc3QuICBUaGUgZm9saW8gaXNcbiAgKiAgIHJldHVybmVkIGxvY2tlZC5cbi0gKiAqICVGR1BfRk9SX01NQVAgLSBUaGUgY2FsbGVyIHdhbnRzIHRvIGRvIGl0cyBvd24gbG9ja2luZyBkYW5jZSBpZiB0aGVcbi0gKiAgIGZvbGlvIGlzIGFscmVhZHkgaW4gY2FjaGUuICBJZiB0aGUgZm9saW8gd2FzIGFsbG9jYXRlZCwgdW5sb2NrIGl0XG4tICogICBiZWZvcmUgcmV0dXJuaW5nIHNvIHRoZSBjYWxsZXIgY2FuIGRvIHRoZSBzYW1lIGRhbmNlLlxuICAqICogJUZHUF9XUklURSAtIFRoZSBmb2xpbyB3aWxsIGJlIHdyaXR0ZW4gdG8gYnkgdGhlIGNhbGxlci5cbiAgKiAqICVGR1BfTk9GUyAtIF9fR0ZQX0ZTIHdpbGwgZ2V0IGNsZWFyZWQgaW4gZ2ZwLlxuICAqICogJUZHUF9OT1dBSVQgLSBEb24ndCBibG9jayBvbiB0aGUgZm9saW8gbG9jay5cbkBAIC03MTQsOSArNzExLDggQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGZnZl90O1xuICNkZWZpbmUgRkdQX1dSSVRFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDA4KVxuICNkZWZpbmUgRkdQX05PRlNcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAwMTApXG4gI2RlZmluZSBGR1BfTk9XQUlUXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDIwKVxuLSNkZWZpbmUgRkdQX0ZPUl9NTUFQXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDQwKVxuLSNkZWZpbmUgRkdQX1NUQUJMRVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA4MClcbi0jZGVmaW5lIEZHUF9ET05UQ0FDSEVcdFx0KChfX2ZvcmNlIGZnZl90KTB4MDAwMDAxMDApXG4rI2RlZmluZSBGR1BfU1RBQkxFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDQwKVxuKyNkZWZpbmUgRkdQX0RPTlRDQUNIRVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDA4MClcbiAjZGVmaW5lIEZHRl9HRVRfT1JERVIoZmdmKVx0KCgoX19mb3JjZSB1bnNpZ25lZClmZ2YpIFx1MDAzZVx1MDAzZSAyNilcdC8qIHRvcCA2IGJpdHMgKi9cbiBcbiAjZGVmaW5lIEZHUF9XUklURUJFR0lOXHRcdChGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCB8IEZHUF9TVEFCTEUpXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA3ZTQ2N2M4MWQyMTM4OS4uMTNhODYxYjM4NjIxZmYgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbisrKyBiL21tL2ZpbGVtYXAuY1xuQEAgLTE5OTUsNyArMTk5NSw3IEBAIHN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdGdmcCBcdTAwMjY9IH5HRlBfS0VSTkVMO1xuIFx0XHRcdGdmcCB8PSBHRlBfTk9XQUlUO1xuIFx0XHR9XG4tXHRcdGlmIChXQVJOX09OX09OQ0UoIShmZ3BfZmxhZ3MgXHUwMDI2IChGR1BfTE9DSyB8IEZHUF9GT1JfTU1BUCkpKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRSghKGZncF9mbGFncyBcdTAwMjYgRkdQX0xPQ0spKSlcbiBcdFx0XHRmZ3BfZmxhZ3MgfD0gRkdQX0xPQ0s7XG4gXG4gXHRcdGlmIChvcmRlciBcdTAwM2UgbWFwcGluZ19tYXhfZm9saW9fb3JkZXIobWFwcGluZykpXG5AQCAtMjA0MiwxMiArMjA0Miw2IEBAIHN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4tXHRcdC8qXG4tXHRcdCAqIGZpbGVtYXBfYWRkX2ZvbGlvIGxvY2tzIHRoZSBwYWdlLCBhbmQgZm9yIG1tYXBcbi1cdFx0ICogd2UgZXhwZWN0IGFuIHVubG9ja2VkIHBhZ2UuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZm9saW8gXHUwMDI2XHUwMDI2IChmZ3BfZmxhZ3MgXHUwMDI2IEZHUF9GT1JfTU1BUCkpXG4tXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdH1cbiBcbiBcdGlmICghZm9saW8pXG5AQCAtMzI1OSw1MiArMzI1Myw2IEBAIGxvZmZfdCBtYXBwaW5nX3NlZWtfaG9sZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsXG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbiAjZGVmaW5lIE1NQVBfTE9UU0FNSVNTICAoMTAwKVxuLS8qXG4tICogbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAgLSBsb2NrIHRoZSBwYWdlLCBwb3NzaWJseSBkcm9wcGluZyB0aGUgbW1hcF9sb2NrXG4tICogQHZtZiAtIHRoZSB2bV9mYXVsdCBmb3IgdGhpcyBmYXVsdC5cbi0gKiBAZm9saW8gLSB0aGUgZm9saW8gdG8gbG9jay5cbi0gKiBAZnBpbiAtIHRoZSBwb2ludGVyIHRvIHRoZSBmaWxlIHdlIG1heSBwaW4gKG9yIGlzIGFscmVhZHkgcGlubmVkKS5cbi0gKlxuLSAqIFRoaXMgd29ya3Mgc2ltaWxhciB0byBsb2NrX2ZvbGlvX29yX3JldHJ5IGluIHRoYXQgaXQgY2FuIGRyb3AgdGhlXG4tICogbW1hcF9sb2NrLiAgSXQgZGlmZmVycyBpbiB0aGF0IGl0IGFjdHVhbGx5IHJldHVybnMgdGhlIGZvbGlvIGxvY2tlZFxuLSAqIGlmIGl0IHJldHVybnMgMSBhbmQgMCBpZiBpdCBjb3VsZG4ndCBsb2NrIHRoZSBmb2xpby4gIElmIHdlIGRpZCBoYXZlXG4tICogdG8gZHJvcCB0aGUgbW1hcF9sb2NrIHRoZW4gZnBpbiB3aWxsIHBvaW50IHRvIHRoZSBwaW5uZWQgZmlsZSBhbmRcbi0gKiBuZWVkcyB0byBiZSBmcHV0KCknZWQgYXQgYSBsYXRlciBwb2ludC5cbi0gKi9cbi1zdGF0aWMgaW50IGxvY2tfZm9saW9fbWF5YmVfZHJvcF9tbWFwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZmlsZSAqKmZwaW4pXG4te1xuLVx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKVxuLVx0XHRyZXR1cm4gMTtcbi1cbi1cdC8qXG4tXHQgKiBOT1RFISBUaGlzIHdpbGwgbWFrZSB1cyByZXR1cm4gd2l0aCBWTV9GQVVMVF9SRVRSWSwgYnV0IHdpdGhcbi1cdCAqIHRoZSBmYXVsdCBsb2NrIHN0aWxsIGhlbGQuIFRoYXQncyBob3cgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRcbi1cdCAqIGlzIHN1cHBvc2VkIHRvIHdvcmsuIFdlIGhhdmUgd2F5IHRvbyBtYW55IHNwZWNpYWwgY2FzZXMuLlxuLVx0ICovXG4tXHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHQqZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsICpmcGluKTtcbi1cdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfS0lMTEFCTEUpIHtcbi1cdFx0aWYgKF9fZm9saW9fbG9ja19raWxsYWJsZShmb2xpbykpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGRpZG4ndCBoYXZlIHRoZSByaWdodCBmbGFncyB0byBkcm9wIHRoZVxuLVx0XHRcdCAqIGZhdWx0IGxvY2ssIGJ1dCBhbGwgZmF1bHRfaGFuZGxlcnMgb25seSBjaGVja1xuLVx0XHRcdCAqIGZvciBmYXRhbCBzaWduYWxzIGlmIHdlIHJldHVybiBWTV9GQVVMVF9SRVRSWSxcbi1cdFx0XHQgKiBzbyB3ZSBuZWVkIHRvIGRyb3AgdGhlIGZhdWx0IGxvY2sgaGVyZSBhbmRcbi1cdFx0XHQgKiByZXR1cm4gMCBpZiB3ZSBkb24ndCBoYXZlIGEgZnBpbi5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoKmZwaW4gPT0gTlVMTClcbi1cdFx0XHRcdHJlbGVhc2VfZmF1bHRfbG9jayh2bWYpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4tXHR9IGVsc2Vcbi1cdFx0X19mb2xpb19sb2NrKGZvbGlvKTtcbi1cbi1cdHJldHVybiAxO1xuLX1cbi1cbiAvKlxuICAqIFN5bmNocm9ub3VzIHJlYWRhaGVhZCBoYXBwZW5zIHdoZW4gd2UgZG9uJ3QgZXZlbiBmaW5kIGEgcGFnZSBpbiB0aGUgcGFnZVxuICAqIGNhY2hlIGF0IGFsbC4gIFdlIGRvbid0IHdhbnQgdG8gcGVyZm9ybSBJTyB1bmRlciB0aGUgbW1hcCBzZW0sIHNvIGlmIHdlIGhhdmVcbkBAIC0zMzEyLDEzICszMjYwLDEyIEBAIHN0YXRpYyBpbnQgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gICogdGhhdC4gIElmIHdlIGRpZG4ndCBwaW4gYSBmaWxlIHRoZW4gd2UgcmV0dXJuIE5VTEwuICBUaGUgZmlsZSB0aGF0IGlzXG4gICogcmV0dXJuZWQgbmVlZHMgdG8gYmUgZnB1dCgpJ2VkIHdoZW4gd2UncmUgZG9uZSB3aXRoIGl0LlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbitzdGF0aWMgdm9pZCBkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIHtcbiBcdHN0cnVjdCBmaWxlICpmaWxlID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9maWxlO1xuIFx0c3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhID0gXHUwMDI2ZmlsZS1cdTAwM2VmX3JhO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbiBcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIHJhLCBtYXBwaW5nLCB2bWYtXHUwMDNlcGdvZmYpO1xuLVx0c3RydWN0IGZpbGUgKmZwaW4gPSBOVUxMO1xuIFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmxhZ3M7XG4gXHRib29sIGZvcmNlX3RocF9yZWFkYWhlYWQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGludCB0aHBfb3JkZXIgPSAwO1xuQEAgLTMzNDgsMTUgKzMyOTUsMTQgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHQgKiBWTV9FWEVDIGNhc2UgYmVsb3cgaXMgYWxyZWFkeSBpbnRlbmRlZCBmb3IgcmFuZG9tIGFjY2Vzcy5cbiBcdFx0ICovXG4gXHRcdGlmICgodm1fZmxhZ3MgXHUwMDI2IChWTV9SQU5EX1JFQUQgfCBWTV9FWEVDKSkgPT0gVk1fUkFORF9SRUFEKVxuLVx0XHRcdHJldHVybiBmcGluO1xuK1x0XHRcdHJldHVybjtcbiBcbiBcdFx0aWYgKCFyYS1cdTAwM2VyYV9wYWdlcylcbi1cdFx0XHRyZXR1cm4gZnBpbjtcbitcdFx0XHRyZXR1cm47XG4gXG4gXHRcdGlmICh2bV9mbGFncyBcdTAwMjYgVk1fU0VRX1JFQUQpIHtcbi1cdFx0XHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7XG4gXHRcdFx0cGFnZV9jYWNoZV9zeW5jX3JhKFx1MDAyNnJhY3RsLCByYS1cdTAwM2VyYV9wYWdlcyk7XG4tXHRcdFx0cmV0dXJuIGZwaW47XG4rXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMzM3MSwxMyArMzMxNywxMiBAQCBzdGF0aWMgc3RydWN0IGZpbGUgKmRvX3N5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdCAqIHN0b3AgYm90aGVyaW5nIHdpdGggcmVhZC1haGVhZC4gSXQgd2lsbCBvbmx5IGh1cnQuXG4gXHRcdCAqL1xuIFx0XHRpZiAobW1hcF9taXNzIFx1MDAzZSBNTUFQX0xPVFNBTUlTUylcbi1cdFx0XHRyZXR1cm4gZnBpbjtcbitcdFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRpZiAoZm9yY2VfdGhwX3JlYWRhaGVhZCkge1xuIFx0XHR1bnNpZ25lZCBsb25nIGZvbGlvX25yX3BhZ2VzID0gMVVMIFx1MDAzY1x1MDAzYyB0aHBfb3JkZXI7XG4gXG4tXHRcdGZwaW4gPSBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW8odm1mLCBmcGluKTtcbiBcdFx0cmFjdGwuX2luZGV4IFx1MDAyNj0gfihmb2xpb19ucl9wYWdlcyAtIDEpO1xuIFx0XHRyYS1cdTAwM2VzaXplID0gZm9saW9fbnJfcGFnZXM7XG4gXHRcdC8qXG5AQCAtMzM4OSw3ICszMzM0LDcgQEAgc3RhdGljIHN0cnVjdCBmaWxlICpkb19zeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRyYS1cdTAwM2Vhc3luY19zaXplID0gZm9saW9fbnJfcGFnZXM7XG4gXHRcdHJhLVx1MDAzZW9yZGVyID0gdGhwX29yZGVyO1xuIFx0XHRwYWdlX2NhY2hlX3JhX29yZGVyKFx1MDAyNnJhY3RsLCByYSk7XG4tXHRcdHJldHVybiBmcGluO1xuK1x0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMpIHtcbkBAIC0zNDI3LDI5ICszMzcyLDI0IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0cmEtXHUwMDNlb3JkZXIgPSAwO1xuIFx0fVxuIFxuLVx0ZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsIGZwaW4pO1xuIFx0cmFjdGwuX2luZGV4ID0gcmEtXHUwMDNlc3RhcnQ7XG4gXHRwYWdlX2NhY2hlX3JhX29yZGVyKFx1MDAyNnJhY3RsLCByYSk7XG4tXHRyZXR1cm4gZnBpbjtcbiB9XG4gXG4gLypcbi0gKiBBc3luY2hyb25vdXMgcmVhZGFoZWFkIGhhcHBlbnMgd2hlbiB3ZSBmaW5kIHRoZSBwYWdlIGFuZCBQR19yZWFkYWhlYWQsXG4tICogc28gd2Ugd2FudCB0byBwb3NzaWJseSBleHRlbmQgdGhlIHJlYWRhaGVhZCBmdXJ0aGVyLiAgV2UgcmV0dXJuIHRoZSBmaWxlIHRoYXRcbi0gKiB3YXMgcGlubmVkIGlmIHdlIGhhdmUgdG8gZHJvcCB0aGUgbW1hcF9sb2NrIGluIG9yZGVyIHRvIGRvIElPLlxuKyAqIEFzeW5jaHJvbm91cyByZWFkYWhlYWQgaGFwcGVucyB3aGVuIHdlIGZpbmQgdGhlIGZvbGlvIGFuZCBpdCBoYXMgdGhlXG4rICogcmVhZGFoZWFkIGZsYWcgc2V0IHNvIHdlIHdhbnQgdG8gcG9zc2libHkgZXh0ZW5kIHRoZSByZWFkYWhlYWQgZnVydGhlci5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGZpbGUgKmRvX2FzeW5jX21tYXBfcmVhZGFoZWFkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgdm9pZCBkb19hc3luY19tbWFwX3JlYWRhaGVhZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmlsZTtcbiBcdHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSA9IFx1MDAyNmZpbGUtXHUwMDNlZl9yYTtcbiBcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbGUsIHJhLCBmaWxlLVx1MDAzZWZfbWFwcGluZywgdm1mLVx1MDAzZXBnb2ZmKTtcbi1cdHN0cnVjdCBmaWxlICpmcGluID0gTlVMTDtcbiBcdHVuc2lnbmVkIHNob3J0IG1tYXBfbWlzcztcbiBcbiBcdC8qIElmIHdlIGRvbid0IHdhbnQgYW55IHJlYWQtYWhlYWQsIGRvbid0IGJvdGhlciAqL1xuIFx0aWYgKHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JBTkRfUkVBRCB8fCAhcmEtXHUwMDNlcmFfcGFnZXMpXG4tXHRcdHJldHVybiBmcGluO1xuK1x0XHRyZXR1cm47XG4gXG4gXHQvKlxuIFx0ICogSWYgdGhlIGZvbGlvIGlzIGxvY2tlZCwgd2UncmUgbGlrZWx5IHJhY2luZyBhZ2FpbnN0IGFub3RoZXIgZmF1bHQuXG5AQCAtMzQ3MCwxMCArMzQxMCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4gXG4gXHRpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKSB7XG4gXHRcdHJhY3RsLl9tYXhfaW5kZXggPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX3Bnb2ZmICsgdm1hX3BhZ2VzKHZtZi1cdTAwM2V2bWEpIC0gMTtcbi1cdFx0ZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsIGZwaW4pO1xuIFx0XHRwYWdlX2NhY2hlX2FzeW5jX3JhKFx1MDAyNnJhY3RsLCBmb2xpbywgcmEtXHUwMDNlcmFfcGFnZXMpO1xuIFx0fVxuLVx0cmV0dXJuIGZwaW47XG4gfVxuIFxuIHN0YXRpYyB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHRfcmVjaGVja19wdGVfbm9uZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbkBAIC0zNTMwLDE1ICszNDY4LDkgQEAgc3RhdGljIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuICAqIGl0IGluIHRoZSBwYWdlIGNhY2hlLCBhbmQgaGFuZGxlcyB0aGUgc3BlY2lhbCBjYXNlcyByZWFzb25hYmx5IHdpdGhvdXRcbiAgKiBoYXZpbmcgYSBsb3Qgb2YgZHVwbGljYXRlZCBjb2RlLlxuICAqXG4tICogdm1hLVx1MDAzZXZtX21tLVx1MDAzZW1tYXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkuXG4tICpcbi0gKiBJZiBvdXIgcmV0dXJuIHZhbHVlIGhhcyBWTV9GQVVMVF9SRVRSWSBzZXQsIGl0J3MgYmVjYXVzZSB0aGUgbW1hcF9sb2NrXG4tICogbWF5IGJlIGRyb3BwZWQgYmVmb3JlIGRvaW5nIEkvTyBvciBieSBsb2NrX2ZvbGlvX21heWJlX2Ryb3BfbW1hcCgpLlxuLSAqXG4tICogSWYgb3VyIHJldHVybiB2YWx1ZSBkb2VzIG5vdCBoYXZlIFZNX0ZBVUxUX1JFVFJZIHNldCwgdGhlIG1tYXBfbG9ja1xuLSAqIGhhcyBub3QgYmVlbiByZWxlYXNlZC5cbi0gKlxuLSAqIFdlIG5ldmVyIHJldHVybiB3aXRoIFZNX0ZBVUxUX1JFVFJZIGFuZCBhIGJpdCBmcm9tIFZNX0ZBVUxUX0VSUk9SIHNldC5cbisgKiBDb250ZXh0OiBNYXkgc2xlZXAgd2FpdGluZyBmb3IgSS9PLiAgQ2FuIGJlIGludGVycnVwdGVkIGJ5IGZhdGFsXG4rICogc2lnbmFscyBpZiBAdm1mIGZsYWdzIHBlcm1pdC4gIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBmYXVsdCBsb2NrXG4rICogKGVpdGhlciBtbWFwX2xvY2sgb3IgVk1BIGxvY2spLlxuICAqXG4gICogUmV0dXJuOiBiaXR3aXNlLU9SIG9mICVWTV9GQVVMVF8gY29kZXMuXG4gICovXG5AQCAtMzU0Niw3ICszNDc4LDYgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIHtcbiBcdGludCBlcnJvcjtcbiBcdHN0cnVjdCBmaWxlICpmaWxlID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9maWxlO1xuLVx0c3RydWN0IGZpbGUgKmZwaW4gPSBOVUxMO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4gXHRwZ29mZl90IG1heF9pZHgsIGluZGV4ID0gdm1mLVx1MDAzZXBnb2ZmO1xuQEAgLTM1NjYsMTUgKzM0OTcsMzEgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0Zm9saW8gPSBmaWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCk7XG4gXHRpZiAobGlrZWx5KCFJU19FUlIoZm9saW8pKSkge1xuIFx0XHQvKlxuLVx0XHQgKiBXZSBmb3VuZCB0aGUgcGFnZSwgc28gdHJ5IGFzeW5jIHJlYWRhaGVhZCBiZWZvcmUgd2FpdGluZyBmb3Jcbi1cdFx0ICogdGhlIGxvY2suXG4rXHRcdCAqIFdlIGZvdW5kIHRoZSBmb2xpbywgc28gdHJ5IGFzeW5jIHJlYWRhaGVhZCBiZWZvcmVcbitcdFx0ICogd2FpdGluZyBmb3IgdGhlIGxvY2suXG4gXHRcdCAqL1xuIFx0XHRpZiAoISh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVFJJRUQpKVxuLVx0XHRcdGZwaW4gPSBkb19hc3luY19tbWFwX3JlYWRhaGVhZCh2bWYsIGZvbGlvKTtcbitcdFx0XHRkb19hc3luY19tbWFwX3JlYWRhaGVhZCh2bWYsIGZvbGlvKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkpIHtcbiBcdFx0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9ja19zaGFyZWQobWFwcGluZyk7XG4gXHRcdFx0bWFwcGluZ19sb2NrZWQgPSB0cnVlO1xuIFx0XHR9XG4rXG4rXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbitcdFx0XHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX0tJTExBQkxFKSB7XG4rXHRcdFx0XHRpZiAoX19mb2xpb19sb2NrX2tpbGxhYmxlKGZvbGlvKSBcdTAwM2MgMClcbitcdFx0XHRcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0X19mb2xpb19sb2NrKGZvbGlvKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0LyogRGlkIGl0IGdldCB0cnVuY2F0ZWQ/ICovXG4rXHRcdGlmICh1bmxpa2VseShmb2xpby1cdTAwM2VtYXBwaW5nICE9IG1hcHBpbmcpKSB7XG4rXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRcdGdvdG8gcmV0cnlfZmluZDtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gZmlsZW1hcF9mYXVsdF9yZWNoZWNrX3B0ZV9ub25lKHZtZik7XG4gXHRcdGlmICh1bmxpa2VseShyZXQpKVxuQEAgLTM1ODQsNyArMzUzMSw3IEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Y291bnRfdm1fZXZlbnQoUEdNQUpGQVVMVCk7XG4gXHRcdGNvdW50X21lbWNnX2V2ZW50X21tKHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fbW0sIFBHTUFKRkFVTFQpO1xuIFx0XHRyZXQgPSBWTV9GQVVMVF9NQUpPUjtcbi1cdFx0ZnBpbiA9IGRvX3N5bmNfbW1hcF9yZWFkYWhlYWQodm1mKTtcbitcdFx0ZG9fc3luY19tbWFwX3JlYWRhaGVhZCh2bWYpO1xuIHJldHJ5X2ZpbmQ6XG4gXHRcdC8qXG4gXHRcdCAqIFNlZSBjb21tZW50IGluIGZpbGVtYXBfY3JlYXRlX2ZvbGlvKCkgd2h5IHdlIG5lZWRcbkBAIC0zNTk1LDI1ICszNTQyLDEzIEBAIHZtX2ZhdWx0X3QgZmlsZW1hcF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0XHRtYXBwaW5nX2xvY2tlZCA9IHRydWU7XG4gXHRcdH1cbiBcdFx0Zm9saW8gPSBfX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxuLVx0XHRcdFx0XHQgIEZHUF9DUkVBVHxGR1BfRk9SX01NQVAsXG4tXHRcdFx0XHRcdCAgdm1mLVx1MDAzZWdmcF9tYXNrKTtcbitcdFx0XHRcdFx0ICBGR1BfQ1JFQVQgfCBGR1BfTE9DSywgdm1mLVx1MDAzZWdmcF9tYXNrKTtcbiBcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi1cdFx0XHRpZiAoZnBpbilcbi1cdFx0XHRcdGdvdG8gb3V0X3JldHJ5O1xuIFx0XHRcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2tfc2hhcmVkKG1hcHBpbmcpO1xuIFx0XHRcdHJldHVybiBWTV9GQVVMVF9PT007XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmICghbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXAodm1mLCBmb2xpbywgXHUwMDI2ZnBpbikpXG4tXHRcdGdvdG8gb3V0X3JldHJ5O1xuLVxuLVx0LyogRGlkIGl0IGdldCB0cnVuY2F0ZWQ/ICovXG4tXHRpZiAodW5saWtlbHkoZm9saW8tXHUwMDNlbWFwcGluZyAhPSBtYXBwaW5nKSkge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRnb3RvIHJldHJ5X2ZpbmQ7XG4tXHR9XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX2NvbnRhaW5zKGZvbGlvLCBpbmRleCksIGZvbGlvKTtcbiBcbiBcdC8qXG5AQCAtMzYyNSw3ICszNTYwLDcgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHQvKlxuIFx0XHQgKiBJZiB0aGUgaW52YWxpZGF0ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGUgZm9saW8gd2FzIGluIGNhY2hlXG4gXHRcdCAqIGFuZCB1cHRvZGF0ZSBhbmQgbm93IGl0IGlzIG5vdC4gU3RyYW5nZSBidXQgcG9zc2libGUgc2luY2Ugd2Vcbi1cdFx0ICogZGlkbid0IGhvbGQgdGhlIHBhZ2UgbG9jayBhbGwgdGhlIHRpbWUuIExldCdzIGRyb3BcbitcdFx0ICogZGlkbid0IGhvbGQgdGhlIGZvbGlvIGxvY2sgYWxsIHRoZSB0aW1lLiBMZXQncyBkcm9wXG4gXHRcdCAqIGV2ZXJ5dGhpbmcsIGdldCB0aGUgaW52YWxpZGF0ZSBsb2NrIGFuZCB0cnkgYWdhaW4uXG4gXHRcdCAqL1xuIFx0XHRpZiAoIW1hcHBpbmdfbG9ja2VkKSB7XG5AQCAtMzY0MiwyMSArMzU3NywxMiBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGdvdG8gcGFnZV9ub3RfdXB0b2RhdGU7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogV2UndmUgbWFkZSBpdCB0aGlzIGZhciBhbmQgd2UgaGFkIHRvIGRyb3Agb3VyIG1tYXBfbG9jaywgbm93IGlzIHRoZVxuLVx0ICogdGltZSB0byByZXR1cm4gdG8gdGhlIHVwcGVyIGxheWVyIGFuZCBoYXZlIGl0IHJlLWZpbmQgdGhlIHZtYSBhbmRcbi1cdCAqIHJlZG8gdGhlIGZhdWx0LlxuLVx0ICovXG4tXHRpZiAoZnBpbikge1xuLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRnb3RvIG91dF9yZXRyeTtcbi1cdH1cbiBcdGlmIChtYXBwaW5nX2xvY2tlZClcbiBcdFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XG4gXG4gXHQvKlxuLVx0ICogRm91bmQgdGhlIHBhZ2UgYW5kIGhhdmUgYSByZWZlcmVuY2Ugb24gaXQuXG4tXHQgKiBXZSBtdXN0IHJlY2hlY2sgaV9zaXplIHVuZGVyIHBhZ2UgbG9jay5cbitcdCAqIEZvdW5kIHRoZSBmb2xpbyBhbmQgaGF2ZSBhIHJlZmVyZW5jZSBvbiBpdC5cbitcdCAqIFdlIG11c3QgcmVjaGVjayBpX3NpemUgdW5kZXIgZm9saW8gbG9jay5cbiBcdCAqL1xuIFx0bWF4X2lkeCA9IERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSk7XG4gXHRpZiAodW5saWtlbHkoaW5kZXggXHUwMDNlPSBtYXhfaWR4KSkge1xuQEAgLTM2NzUsMTAgKzM2MDEsNyBAQCB2bV9mYXVsdF90IGZpbGVtYXBfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHQgKiBiZWNhdXNlIHRoZXJlIHJlYWxseSBhcmVuJ3QgYW55IHBlcmZvcm1hbmNlIGlzc3VlcyBoZXJlXG4gXHQgKiBhbmQgd2UgbmVlZCB0byBjaGVjayBmb3IgZXJyb3JzLlxuIFx0ICovXG4tXHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgZnBpbik7XG4gXHRlcnJvciA9IGZpbGVtYXBfcmVhZF9mb2xpbyhmaWxlLCBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZXJlYWRfZm9saW8sIGZvbGlvKTtcbi1cdGlmIChmcGluKVxuLVx0XHRnb3RvIG91dF9yZXRyeTtcbiBcdGZvbGlvX3B1dChmb2xpbyk7XG4gXG4gXHRpZiAoIWVycm9yIHx8IGVycm9yID09IEFPUF9UUlVOQ0FURURfUEFHRSlcbkBAIC0zNjg2LDIwICszNjA5LDYgQEAgdm1fZmF1bHRfdCBmaWxlbWFwX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9ja19zaGFyZWQobWFwcGluZyk7XG4gXG4gXHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuLVxuLW91dF9yZXRyeTpcbi1cdC8qXG4tXHQgKiBXZSBkcm9wcGVkIHRoZSBtbWFwX2xvY2ssIHdlIG5lZWQgdG8gcmV0dXJuIHRvIHRoZSBmYXVsdCBoYW5kbGVyIHRvXG4tXHQgKiByZS1maW5kIHRoZSB2bWEgYW5kIGNvbWUgYmFjayBhbmQgZmluZCBvdXIgaG9wZWZ1bGx5IHN0aWxsIHBvcHVsYXRlZFxuLVx0ICogcGFnZS5cbi1cdCAqL1xuLVx0aWYgKCFJU19FUlIoZm9saW8pKVxuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0aWYgKG1hcHBpbmdfbG9ja2VkKVxuLVx0XHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrX3NoYXJlZChtYXBwaW5nKTtcbi1cdGlmIChmcGluKVxuLVx0XHRmcHV0KGZwaW4pO1xuLVx0cmV0dXJuIHJldCB8IFZNX0ZBVUxUX1JFVFJZO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGZpbGVtYXBfZmF1bHQpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDg6MzQuNjQ5NzIwOTU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0NjM2ODQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYWdlIE1hcCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyBzb21lIGNvcmUgZmlsZSBtYXBwaW5nIGxvZ2ljLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIGl0J3MgYWltaW5nIHRvIHNpbXBsaWZ5IGhvdyB3ZSBoYW5kbGUgdGhlIGBtbWFwYCBsb2NrIGluIGNvbmp1bmN0aW9uIHdpdGggZm9saW8gbG9ja2luZywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cbkZpcnN0IG9mZiwgaXQncyBheGluZyB0aGUgYEZHUF9GT1JfTU1BUGAgZmxhZyBmcm9tIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGFzIHRoYXQgZmxhZyB1c3VhbGx5IGFjdHMgYXMgYSBtYXJrZXIgZm9yIGBtbWFwYC1yZWxhdGVkIG9wZXJhdGlvbnMuIFRoZSBmdW5jdGlvbiBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCBpcyBiZWluZyB0d2Vha2VkIHNvIGl0IHdvbid0IHVubG9jayB0aGUgZm9saW8gaWYgdGhpcyBzcGVjaWZpYyBmbGFnIGlzbid0IHByZXNlbnQgYW55bW9yZS4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZSBgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXBgIGZ1bmN0aW9uIGlzIGJlaW5nIHJlbW92ZWQgZW50aXJlbHkuIFRoYXQgc2VlbXMgbGlrZSBhIHByZXR0eSBkaXJlY3Qgc2ltcGxpZmljYXRpb24uXG5cbkl0J3MgYWxzbyBhbHRlcmluZyB0aGUgc2lnbmF0dXJlcyBvZiB0aGUgcmVhZGFoZWFkIGZ1bmN0aW9ucywgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgIGFuZCBgZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWRgLiBUaGV5J3JlIG5vdyByZXR1cm5pbmcgYHZvaWRgIGluc3RlYWQgb2YgYHN0cnVjdCBmaWxlICpgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIHRha2luZyBvdXQgdGhlIGBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW9gIGNhbGxzIGZyb20gdGhlbS4gU28sIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBmaWxlIHN0cnVjdHVyZSwgdGhleSBhcmUgcGVyZm9ybWluZyBhIGxvY2tpbmcgZnVuY3Rpb24gb24gdGhlaXIgb3duLlxuXG5Ob3cgdGhlIGBmaWxlbWFwX2ZhdWx0YCBmdW5jdGlvbiBoYXMgYWxzbyBjaGFuZ2VkLCBzbyB0aGF0IGl0IGRvZXNuJ3QgdHJ5IHRvIGRyb3AgYG1tYXBfbG9ja2Agd2hlbiBpdCdzIGRlYWxpbmcgd2l0aCBJL08gb3IgbG9ja2luZyBmb2xpb3MuIFRoZSBjYWxscyB0byBgbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvYCBhcmUgZ29uZSBoZXJlIHRvbywgcGx1cyBgbG9ja19mb2xpb19tYXliZV9kcm9wX21tYXBgIGlzIHJlbW92ZWQuXG5cbldhaXQsIHNvIGlzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZT8gSXQgZGVmaW5pdGVseSBsb29rcyBsaWtlIGEgY2hhbmdlIGluIHRoZSBsb2NraW5nIG1vZGVsIGZvciBwYWdlIGZhdWx0cyBhbmQgcmVhZGFoZWFkLiBJdCdzIG5vIGxvbmdlciByZWxlYXNpbmcgdGhlIGZhdWx0IGxvY2sgZHVyaW5nIEkvTyBvciBmb2xpbyBsb2NraW5nLCB3aGljaCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBvbiBjb25jdXJyZW5jeS5cblxuT2theSwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvYCBpcyBzdGlsbCB1dGlsaXplZCBpbiBvdGhlciBhcmVhcyBvZiB0aGUgY29kZSBiYXNlLiBJIG5lZWQgdG8gZ3JlcCBmb3IgaXQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGlzIGlzbid0IGdvaW5nIHRvIGJyZWFrIHNvbWV0aGluZyBlbHNlLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc1NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjQ4OjQxLjM5NjA5MzAzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTc0NzkzNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1heWJlX3VubG9ja19tbWFwX2Zvcl9pb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTEyNTg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzX2VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTEyNzUtXFxubW0vaW50ZXJuYWwuaDoxMjc2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZpbGUgKm1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG5tbS9pbnRlcm5hbC5oLTEyNzctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmaWxlICpmcGluKVxcbi0tXFxubW0vbWVtb3J5LmM9MzcwNj1zdGF0aWMgdm1fZmF1bHRfdCBmYXVsdF9kaXJ0eV9zaGFyZWRfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTM3MzktXFxubW0vbWVtb3J5LmM6Mzc0MDpcXHRcXHRmcGluID0gbWF5YmVfdW5sb2NrX21tYXBfZm9yX2lvKHZtZiwgTlVMTCk7XFxubW0vbWVtb3J5LmMtMzc0MS1cXHRcXHRiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkKG1hcHBpbmcpO1xcbi0tXFxubW0vc2htZW0uYz0yNjQzPXN0YXRpYyB2bV9mYXVsdF90IHNobWVtX2ZhbGxvY193YWl0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxubW0vc2htZW0uYy0yNjU4LVxcdFxcdHJldCA9IFZNX0ZBVUxUX05PUEFHRTtcXG5tbS9zaG1lbS5jOjI2NTk6XFx0XFx0ZnBpbiA9IG1heWJlX3VubG9ja19tbWFwX2Zvcl9pbyh2bWYsIE5VTEwpO1xcbm1tL3NobWVtLmMtMjY2MC1cXHRcXHRzaG1lbV9mYWxsb2Nfd2FpdHEgPSBzaG1lbV9mYWxsb2MtXFx1MDAzZXdhaXRxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOTo0ODo0NC41NzA4OTI3MzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQ2MjYxMDM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW9gIFJlbW92YWwgaW4gS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbm90aWNpbmcgYSBzaWduaWZpY2FudCBjaGFuZ2U6IHRoZSByZW1vdmFsIG9mIGBtYXliZV91bmxvY2tfbW1hcF9mb3JfaW9gIHdpdGhpbiBgZmlsZW1hcF9mYXVsdGAuICBUaGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBob3cgcGFnZSBmYXVsdHMgYXJlIGhhbmRsZWQsIHNvIGl0J3MgYSBjcml0aWNhbCBjaGFuZ2UuIEl0J3MgZGVmaW5pdGVseSBnb2luZyB0byBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHBpbnBvaW50IHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgZm9jdXNlZCBmdXp6aW5nLiBJIHdhcyB0aGlua2luZyBvZiBpbmNsdWRpbmcgZnVuY3Rpb25zIGxpa2UgYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAsIGBkb19zeW5jX21tYXBfcmVhZGFoZWFkYCwgYGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkYCwgYW5kLCBvZiBjb3Vyc2UsIGBmaWxlbWFwX2ZhdWx0YCBpdHNlbGYuIEJ1dCB0aGVuLCBJIGhhZCB0byBzdG9wIGFuZCByZS1yZWFkIHRoZSBwcm9tcHQuIEl0IGV4cGxpY2l0bHkgc3RhdGVzIHRvICphdm9pZCogbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHRlc3QgZGlzdHJpYnV0aW9uIHNrZXdpbmcuXG5cbmBmaWxlbWFwX2ZhdWx0YCBpcyAqZGVmaW5pdGVseSogYSBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9uOyBpdCdzIHByYWN0aWNhbGx5IHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBmaWxlLWJhY2tlZCBwYWdlIGZhdWx0cywgd2hpY2ggYXJlIGluY3JlZGlibHkgY29tbW9uLiBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCwgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgLCBhbmQgYGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkYCBhcmUgYWxzbyBob3QuICBTbywgYmFzZWQgb24gdGhhdCBkaXJlY3RpdmUsIEkgc2hvdWxkIHByb2JhYmx5IGxlYXZlIHRoZSBgRm9jdXNTeW1ib2xzYCBlbnRyeSBlbXB0eS4gSXQncyBhIHRyaWNreSBiYWxhbmNlIGJldHdlZW4gZm9jdXNpbmcgb24gdGhlIGNoYW5nZSBhbmQgYXZvaWRpbmcgb3Zlcmx5IGdlbmVyaWMgdGFyZ2V0cy5cblxuQnV0IHRoZW4gSSB0b29rIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSSByZWFsaXplZCB0aGUgcmVhbCBmdW5jdGlvbmFsIHNoaWZ0IGlzIHRoYXQgaXQgcmVtb3ZlcyB0aGUgZHJvcHBpbmcgb2YgdGhlIGBtbWFwX2xvY2tgIHdpdGhpbiBgZmlsZW1hcF9mYXVsdGAuIFRoaXMgaGFzIGEgc2lnbmlmaWNhbnQgaW1wYWN0OyBpZiBgbW1hcF9sb2NrYCBpc24ndCBkcm9wcGVkLCBpdCBtZWFucyBgZmlsZW1hcF9mYXVsdGAgKnByb2JhYmx5KiBkb2Vzbid0IHJldHVybiBgVk1fRkFVTFRfUkVUUllgIGFueW1vcmUgKGV4Y2VwdCBmcm9tIGBmaWxlbWFwX2ZhdWx0X3JlY2hlY2tfcHRlX25vbmVgLCBidXQgdGhhdCBmdW5jdGlvbiByZXR1cm5zIGBWTV9GQVVMVF9OT1BBR0VgIG9yIGAwYCkuICBJIHNob3VsZCBjaGVjayBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiBgZmlsZW1hcF9mYXVsdGAgdG8gYmUgY2VydGFpbi4gVGhlIHJlbW92YWwgb2YgdGhpcyByZXR1cm4gY291bGQgaGF2ZSBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOTo0ODo1Ni4wMzM1MDU4MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMzc4Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZNX0ZBVUxUX1JFVFJZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2ZpbGVtYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9MTc1ND12bV9mYXVsdF90IF9fZm9saW9fbG9ja19vcl9yZXRyeShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNzYwLVxcdFxcdCAqIENBVVRJT04hIEluIHRoaXMgY2FzZSwgbW1hcF9sb2NrL3Blci1WTUEgbG9jayBpcyBub3RcXG5tbS9maWxlbWFwLmM6MTc2MTpcXHRcXHQgKiByZWxlYXNlZCBldmVuIHRob3VnaCByZXR1cm5pbmcgVk1fRkFVTFRfUkVUUlkuXFxubW0vZmlsZW1hcC5jLTE3NjItXFx0XFx0ICovXFxubW0vZmlsZW1hcC5jLTE3NjMtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpXFxubW0vZmlsZW1hcC5jOjE3NjQ6XFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1JFVFJZO1xcbm1tL2ZpbGVtYXAuYy0xNzY1LVxcbi0tXFxubW0vZmlsZW1hcC5jLTE3NzAtXFx0XFx0XFx0Zm9saW9fd2FpdF9sb2NrZWQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYzoxNzcxOlxcdFxcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcXG5tbS9maWxlbWFwLmMtMTc3Mi1cXHR9XFxuLS1cXG5tbS9maWxlbWFwLmMtMTc3OC1cXHRcXHRcXHRyZWxlYXNlX2ZhdWx0X2xvY2sodm1mKTtcXG5tbS9maWxlbWFwLmM6MTc3OTpcXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XFxubW0vZmlsZW1hcC5jLTE3ODAtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOTo0ODo1Ni41MzQ4OTUxMTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg4MzIzNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIHRoZSBzeXN0ZW0gaXMgc3RpbGwgcmV0dXJuaW5nIGBWTV9GQVVMVF9SRVRSWWAgZnJvbSBgX19mb2xpb19sb2NrX29yX3JldHJ5YC4gVGhhdCdzLi4uIGludGVyZXN0aW5nLiBOb3csIHdoZXJlIGlzIGBfX2ZvbGlvX2xvY2tfb3JfcmV0cnlgIGRlZmluZWQ/IEFoLCByaWdodCwgaXQncyBpbiBgbW0vZmlsZW1hcC5jYC4gSG1tLCBkb2VzIGBmaWxlbWFwX2ZhdWx0YCB1c2UgdGhhdD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIGdyYXBoLiBMZXQncyBzZWUgaWYgdGhlIGZhdWx0IGhhbmRsaW5nIHBhdGggaXMgZ29pbmcgdGhyb3VnaCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjQ5OjAwLjAyMzIyMTI0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODUxNTgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZvbGlvX2xvY2tfb3JfcmV0cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZmlsZW1hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZpbGVtYXAuYz0xNzE3PXN0YXRpYyBpbnQgX19mb2xpb19sb2NrX2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB3YWl0X3BhZ2VfcXVldWUgKndhaXQpXFxuLS1cXG5tbS9maWxlbWFwLmMtMTc1My0gKi9cXG5tbS9maWxlbWFwLmM6MTc1NDp2bV9mYXVsdF90IF9fZm9saW9fbG9ja19vcl9yZXRyeShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9maWxlbWFwLmMtMTc1NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDE5OjQ5OjAwLjE1MTc0MTcxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NDQxOTc3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgX19mb2xpb19sb2NrX29yX3JldHJ5YCBpbiB0aGUgQ29udGV4dCBvZiBgZmlsZW1hcF9mYXVsdGAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBfX2ZvbGlvX2xvY2tfb3JfcmV0cnlgIHBsYXllZCBhIGtleSByb2xlIHdpdGhpbiBgZmlsZW1hcF9mYXVsdGAsIGJ1dCBzb21ldGhpbmcncyBub3QgcXVpdGUgY2xpY2tpbmcuIE15IGludGVybmFsIG1vZGVsIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGlzIHNob3VsZCBiZSB1c2VkIHRoZXJlLiBUbyBiZSBzdXJlLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyB1c2FnZS4gTGV0IG1lIHF1aWNrbHkgdHJhY2Ugd2hlcmUgYF9fZm9saW9fbG9ja19vcl9yZXRyeWAgaXMgYWN0dWFsbHkgZW1wbG95ZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgbXkgbWVudGFsIHBpY3R1cmUgb2YgdGhlIHN5bmNocm9uaXphdGlvbiBmbG93IGlzIGFjY3VyYXRlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlcyBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsb2NrIGFjcXVpc2l0aW9uIHN0cmF0ZWd5LiBJcyBpdCB1c2VkPyBJZiBub3QsIHdoZXJlIGlzIHRoYXQgZnVuY3Rpb24gYWN0dWFsbHkgbmVlZGVkPyBJIG5lZWQgdG8gcmVjb25jaWxlIHRoaXMgZGlzY3JlcGFuY3kgaW4gbXkga25vd2xlZGdlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDI0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDk6MDcuOTk1OTQyNTczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM0OTM5NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZm9saW9fbG9ja19vcl9yZXRyeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xMDk5PWludCBfX2ZvbGlvX2xvY2tfa2lsbGFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTEwMDp2bV9mYXVsdF90IF9fZm9saW9fbG9ja19vcl9yZXRyeShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTEwMS12b2lkIHVubG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTExODk9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbG9ja19raWxsYWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTIwMS0gKiBSZXR1cm4gdmFsdWUgYW5kIG1tYXBfbG9jayBpbXBsaWNhdGlvbnMgZGVwZW5kIG9uIGZsYWdzOyBzZWVcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxMjAyOiAqIF9fZm9saW9fbG9ja19vcl9yZXRyeSgpLlxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTEyMDMtICovXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTIwND1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3QgZm9saW9fbG9ja19vcl9yZXRyeShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTIwOC1cXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjEyMDk6XFx0XFx0cmV0dXJuIF9fZm9saW9fbG9ja19vcl9yZXRyeShmb2xpbywgdm1mKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xMjEwLVxcdHJldHVybiAwO1xcbi0tXFxubW0vZmlsZW1hcC5jPTE3MTc9c3RhdGljIGludCBfX2ZvbGlvX2xvY2tfYXN5bmMoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHdhaXRfcGFnZV9xdWV1ZSAqd2FpdClcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNzUzLSAqL1xcbm1tL2ZpbGVtYXAuYzoxNzU0OnZtX2ZhdWx0X3QgX19mb2xpb19sb2NrX29yX3JldHJ5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2ZpbGVtYXAuYy0xNzU1LXtcXG4tLVxcbm1tL21lbW9yeS5jPTUyODc9c3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01Mzk1LSAqIGZsYWdzIGFuZCB2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlZmF1bHQoKSByZXR1cm4gdmFsdWUuXFxubW0vbWVtb3J5LmM6NTM5NjogKiBTZWUgZmlsZW1hcF9mYXVsdCgpIGFuZCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoKS5cXG5tbS9tZW1vcnkuYy01Mzk3LSAqL1xcbi0tXFxubW0vbWVtb3J5LmM9NTkxND1zdGF0aWMgdm1fZmF1bHRfdCBkb19zaGFyZWRfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01OTU5LSAqIFRoZSBsb2NrIG1heSBoYXZlIGJlZW4gcmVsZWFzZWQgZGVwZW5kaW5nIG9uIGZsYWdzIGFuZCBvdXJcXG5tbS9tZW1vcnkuYzo1OTYwOiAqIHJldHVybiB2YWx1ZS4gIFNlZSBmaWxlbWFwX2ZhdWx0KCkgYW5kIF9fZm9saW9fbG9ja19vcl9yZXRyeSgpLlxcbm1tL21lbW9yeS5jLTU5NjEtICogSWYgdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHZtYSBtYXkgYmVjb21lIGludmFsaWQgKGZvciBleGFtcGxlXFxuLS1cXG5tbS9tZW1vcnkuYz02Mjk4PXN0YXRpYyB2b2lkIGZpeF9zcHVyaW91c19mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL21lbW9yeS5jLTYzMzItICogYW5kIG91ciByZXR1cm4gdmFsdWUuXFxubW0vbWVtb3J5LmM6NjMzMzogKiBTZWUgZmlsZW1hcF9mYXVsdCgpIGFuZCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoKS5cXG5tbS9tZW1vcnkuYy02MzM0LSAqL1xcbm1tL21lbW9yeS5jPTYzMzU9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTY0MTQtICogdGhlIHJlc3VsdCwgdGhlIGxvY2sgaXMgbm90IGhlbGQgb24gZXhpdC4gIFNlZSBmaWxlbWFwX2ZhdWx0KClcXG5tbS9tZW1vcnkuYzo2NDE1OiAqIGFuZCBfX2ZvbGlvX2xvY2tfb3JfcmV0cnkoKS5cXG5tbS9tZW1vcnkuYy02NDE2LSAqL1xcbi0tXFxubW0vbWVtb3J5LmM9NjYwOT1zdGF0aWMgdm1fZmF1bHRfdCBzYW5pdGl6ZV9mYXVsdF9mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbW9yeS5jLTY2NDgtICogVGhlIGxvY2sgbWF5IGhhdmUgYmVlbiByZWxlYXNlZCBkZXBlbmRpbmcgb24gZmxhZ3MgYW5kIG91clxcbm1tL21lbW9yeS5jOjY2NDk6ICogcmV0dXJuIHZhbHVlLiAgU2VlIGZpbGVtYXBfZmF1bHQoKSBhbmQgX19mb2xpb19sb2NrX29yX3JldHJ5KCkuXFxubW0vbWVtb3J5LmMtNjY1MC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDk6MTAuMzMwODg5MDY1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MTc0NTk5MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb2NraW5nIENoYW5nZXMgaW4gYGZpbGVtYXBfZmF1bHRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBmb2xpb19sb2NrX29yX3JldHJ5YCBpcyB1c2VkLCBzcGVjaWZpY2FsbHkgaW4gYG1tL21lbW9yeS5jYCwgYW5kIEknbSBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgYXdheSBmcm9tIGBsb2NrX2ZvbGlvX21heWJlX2Ryb3BfbW1hcGAgaW4gYGZpbGVtYXBfZmF1bHRgLiBQcmV2aW91c2x5LCB0aGF0IGZ1bmN0aW9uIGhhZCB0aGUgdGFzayBvZiBkcm9wcGluZyB0aGUgbW1hcCBsb2NrLiBOb3csIGluc3RlYWQsIGBmaWxlbWFwX2ZhdWx0YCBkaXJlY3RseSBjYWxscyBgZm9saW9fdHJ5bG9ja2AuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldhaXQgYSBtaW51dGUhIElmIGBmaWxlbWFwX2ZhdWx0YCAqZG9lc24ndCogZHJvcCB0aGUgbW1hcCBsb2NrLCBpdCdzIGJsb2NraW5nIG9uIHRoZSBmb2xpbyBsb2NrIHdoaWxlICpzdGlsbCogaG9sZGluZyB0aGUgbW1hcCBsb2NrISBUaGF0J3MgYSBtYXNzaXZlIHNoaWZ0IGluIHRoZSBsb2NraW5nIHNlbWFudGljcyBvZiBgZmlsZW1hcF9mYXVsdGAuXCIgVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCdzIGdvaW5nIHRvIGhhdmUgYWxsIHNvcnRzIG9mIGNvbnNlcXVlbmNlcy4gV2UncmUgdGFsa2luZyBhYm91dCBhIGZ1bmRhbWVudGFsIGRpZmZlcmVuY2UgaW4gaG93IHRoaXMgZnVuY3Rpb24gYmVoYXZlcyB1bmRlciBjb250ZW50aW9uLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgLiBJZiBgZmlsZW1hcF9mYXVsdGAgZG9lc24ndCByZXR1cm4gYFZNX0ZBVUxUX1JFVFJZYCB3aGVuIGBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVGAgaXMgc2V0LCBpdCB3aWxsICpibG9jayouIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludC5cblxuQWxyaWdodCwgbGV0J3Mgc3RlcCBiYWNrIGZvciBhIG1vbWVudC4gSSBrbm93IGBmaWxlbWFwX2ZhdWx0YCBpcyBjYWxsZWQgZnJvbSBgZG9fZmF1bHRgLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgZmlsZW1hcF9mYXVsdGAgbm93IGhhbmRsZXMgYEZBVUxUX0ZMQUdfUkVUUllfTk9XQUlUYCBiZWNhdXNlIEkgc3VzcGVjdCBhIHByb2JsZW0gaGVyZS5cblxuT2theSwgbGV0IG1lIGNoZWNrIHRoZSBjb2RlIGFnYWluLi4uIEl0IGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgZGVkaWNhdGVkIGNoZWNrIGZvciBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgIGFueW1vcmUhIFRoaXMgcmVpbmZvcmNlcyBteSBjb25jZXJucy5cblxuV2FpdCwgYGZpbGVtYXBfZ2V0X2ZvbGlvYCB1c2VzIGBGR1BfTk9XQUlUYCBpZiBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgIGlzIHNldC4gT2theSwgbGV0IG1lIGdvIHRocm91Z2ggYGZpbGVtYXBfZmF1bHRgIGFnYWluLCBpbiBsaWdodCBvZiB0aGlzIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDk6MTguMDQ4MzUxMjU0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM1OTc0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZmlsZW1hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZpbGVtYXAuYz0xNzE3PXN0YXRpYyBpbnQgX19mb2xpb19sb2NrX2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB3YWl0X3BhZ2VfcXVldWUgKndhaXQpXFxuLS1cXG5tbS9maWxlbWFwLmMtMTc0OC0gKiAgICAgdm1hX2VuZF9yZWFkKCkpLCB1bmxlc3MgZmxhZ3MgaGFkIGJvdGggRkFVTFRfRkxBR19BTExPV19SRVRSWSBhbmRcXG5tbS9maWxlbWFwLmM6MTc0OTogKiAgICAgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQgc2V0LCBpbiB3aGljaCBjYXNlIHRoZSBsb2NrIGlzIHN0aWxsIGhlbGQuXFxubW0vZmlsZW1hcC5jLTE3NTAtICpcXG4tLVxcbm1tL2ZpbGVtYXAuYz0xNzU0PXZtX2ZhdWx0X3QgX19mb2xpb19sb2NrX29yX3JldHJ5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE3NjItXFx0XFx0ICovXFxubW0vZmlsZW1hcC5jOjE3NjM6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQpXFxubW0vZmlsZW1hcC5jLTE3NjQtXFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1JFVFJZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOTo0OToxOC4xNTE5NTYwNDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzMjI1NTEwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYGZpbGVtYXBfZmF1bHRgIExvY2tpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcuIGBmaWxlbWFwX2ZhdWx0YCB1c2VkIHRvIGhhbmRsZSBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgIHVzaW5nIGBsb2NrX2ZvbGlvX21heWJlX2Ryb3BfbW1hcGAuIFRoZSBsb2dpYyB3YXMsIGlmIHRoZSBmb2xpbyBjb3VsZG4ndCBiZSBsb2NrZWQsIGl0IHdvdWxkIGNvbmRpdGlvbmFsbHkgcmV0dXJuIDAgYW5kIHRoZW4gcmV0cnkuIFRoaXMgd2FzIHRvIGFsbG93IHRoZSBmYXVsdCBoYW5kbGVyIHRvIHJldHJ5IGEgZmF1bHQgd2l0aG91dCBibG9ja2luZyB3aGVuIGBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVGAgd2FzIHNldC4gTm93LCBpdCBsb29rcyBsaWtlIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvYCAqYWx3YXlzKiB0cmllcyB0byBsb2NrIHRoZSBmb2xpbyB3aXRoIGBGR1BfTE9DS2AuIEhtbSwgYW5kIHRoYXQgbWVhbnMgaWYgdGhlIGZvbGlvIGlzIHVuYXZhaWxhYmxlLCBpdCB3aWxsIGRpcmVjdGx5IGJsb2NrIHRoZSBwcm9jZXNzLlxuXG5UaGUgb2xkIGNvZGUgd291bGQgcmV0cnkgd2l0aCBWTV9GQVVMVF9SRVRSWSB3aGljaCBpcyBkZXNpZ25lZCBmb3IgdGhpcyBjYXNlIVxuXG5Ob3csIHRoZSBjb2RlICpkaXJlY3RseSogY2FsbHMgYF9fZm9saW9fbG9ja2Agb3IgYF9fZm9saW9fbG9ja19raWxsYWJsZWAuICBJZiBgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVRgIGlzIHNldCwgdGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFzIGl0IHdpbGwgKmJsb2NrKiBpbnN0ZWFkIG9mIHJldHVybmluZy4gVGhpcyBpcyBhIHBvdGVudGlhbCByZWdyZXNzaW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGludGVudGlvbmFsIG9yIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBlbHNlIGdvaW5nIG9uLlxuXG5TaW5jZSB0aGUgb3JpZ2luYWwgbG9naWMgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIGl0IGlzIGNoYW5naW5nIHRoZSBiZWhhdmlvciwgdGhpcyBuZWVkcyBmdXp6aW5nIVxuXG5JIHNlZSBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCBoYXMgYWxzbyBiZWVuIG1vZGlmaWVkLiBBbmQgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgIGFuZCBgZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWRgIHdoaWNoIGFyZSB1c2VkIHdpdGggTU1VIGNvbmZpZy5cblxuVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNvIEkgZG9uJ3Qgc2VlIGFueSBzcGVjaWFsIGNvbmZpZ3MgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQuIGBDT05GSUdfTU1VYCBpcyByZXF1aXJlZCwgYnV0IHRoYXQgaXMgYmFzaWNhbGx5IGFsd2F5cyBlbmFibGVkLiBgQ09ORklHX05VTUFgIGNvdWxkIGJlIG5lZWRlZCwgc2luY2UgYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAgaXMgYWxzbyBtb2RpZmllZC5cblxuYGZpbGVtYXBfZmF1bHRgIGFuZCBgX19maWxlbWFwX2dldF9mb2xpb19tcG9sYCwgYGRvX3N5bmNfbW1hcF9yZWFkYWhlYWRgIGFuZCBgZG9fYXN5bmNfbW1hcF9yZWFkYWhlYWRgIGFyZSBkZWZpbml0ZWx5IGhvdC1wYXRoIGZ1bmN0aW9ucywgc28gSSBzaG91bGRuJ3QgbGlzdCB0aGVtIGluIGBGb2N1c1N5bWJvbHNgLiBUaGV5IGdldCBjYWxsZWQgb24gZXZlcnkgcGFnZSBmYXVsdCwgbWVhbmluZyB0aGV5IGFyZSBhIGJhZCBjaG9pY2UgZm9yIGJlaW5nIGFkZGVkIHRvIGBGb2N1c1N5bWJvbHNgLlxuXG5UaGVyZWZvcmUsIG15IHN1bW1hcnkgaXM6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlXG4qICAgKipGb2N1c1N5bWJvbHMqKjogXFxbIF1cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogXFxbIF1cbiogICAqKlJlYXNvbmluZyoqOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIGBmaWxlbWFwX2ZhdWx0YCwgYF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbGAsIGBkb19zeW5jX21tYXBfcmVhZGFoZWFkYCBhbmQgYGRvX2FzeW5jX21tYXBfcmVhZGFoZWFkYCwgY2hhbmdpbmcgaG93IHRoZSBmb2xpbyBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZW1vdmluZyB0aGUgZHJvcHBpbmcgb2YgdGhlIG1tYXAgbG9jayBkdXJpbmcgSS9PIGFuZCBmb2xpbyBsb2NraW5nLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMyNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDk6MzIuNDc0NTEwMjM3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMzOTk3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19maWxlbWFwX2dldF9mb2xpb19tcG9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2ZpbGVtYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9MTg5ND12b2lkICpmaWxlbWFwX2dldF9lbnRyeShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleClcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xOTI1LS8qKlxcbm1tL2ZpbGVtYXAuYzoxOTI2OiAqIF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCAtIEZpbmQgYW5kIGdldCBhIHJlZmVyZW5jZSB0byBhIGZvbGlvLlxcbm1tL2ZpbGVtYXAuYy0xOTI3LSAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzc19zcGFjZSB0byBzZWFyY2guXFxuLS1cXG5tbS9maWxlbWFwLmMtMTk0MS0gKi9cXG5tbS9maWxlbWFwLmM6MTk0MjpzdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5tbS9maWxlbWFwLmMtMTk0My1cXHRcXHRwZ29mZl90IGluZGV4LCBmZ2ZfdCBmZ3BfZmxhZ3MsIGdmcF90IGdmcCwgc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KVxcbi0tXFxubW0vZmlsZW1hcC5jLTIwNjQtfVxcbm1tL2ZpbGVtYXAuYzoyMDY1OkVYUE9SVF9TWU1CT0woX19maWxlbWFwX2dldF9mb2xpb19tcG9sKTtcXG5tbS9maWxlbWFwLmMtMjA2Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMTk6NDk6MzIuNTg3OTE1NTQ0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5OTc0NDc1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGlkZW50aWZ5IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxldmFudCB0byBzb21lIG1vZGlmaWVkIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gY2hlY2sgZm9yIGBDT05GSUdfTlVNQWAsIGFzIGl0IG9mdGVuIHN1cmZhY2VzIGluIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHRzLiBIb3dldmVyLCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBpcyAqbm90KiBnYXRlZCBieSB0aGF0IGNvbmZpZ3VyYXRpb24uIEl0J3MgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0J3MgYWx3YXlzIGNvbXBpbGVkIGluLiBUaGF0IG5hcnJvd3MgdGhpbmdzIGRvd24gcXVpY2tseS5cblxuVGhlbiwgSSByZS1yZWFkIHRoZSBpbnN0cnVjdGlvbnM6IEkgbmVlZCB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgY29uZmlncyB0aGF0IGFyZSBhbG1vc3QgYWx3YXlzIGVuYWJsZWQuIEl0IHNwZWNpZmljYWxseSBtZW50aW9ucyBvbmx5IGxpc3RpbmcgdGhvc2UgKmRpcmVjdGx5KiByZWxhdGVkIHRvIHRoZSBtb2RpZmllZCBjb2RlLiBTaW5jZSBJJ20gbm90IHNlZWluZyBhbnkgc3VjaCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBpbiBwbGF5LCB0aGVyZSdzIG5vIG5lZWQgdG8gZW51bWVyYXRlIGFueXRoaW5nLiBJdCdzIGEgY2FzZSBvZiBmaW5kaW5nICpub3RoaW5nKiByZWxldmFudC4gU28sIHRoZSByaWdodCBhY3Rpb24gaGVyZSBpcyB0byByZXR1cm4gYW4gZW1wdHkgbGlzdCBvZiBjb25maWdzLiBNYWtlcyBzZW5zZS5cblxuSSdsbCBub3cgdHJpZ2dlciB0aGUgYHNldC1yZXN1bHRzYCBhY3Rpb24sIHNpbmNlIHRoZSBhbmFseXNpcyBpcyBjb21wbGV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MTUsIk91dHB1dFRva2VucyI6OTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxOTo0OTozNy41ODUzNjcwM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbG9naWMgaW4gZmlsZW1hcF9mYXVsdCBhbmQgX19maWxlbWFwX2dldF9mb2xpb19tcG9sLCBjaGFuZ2luZyBob3cgdGhlIGZvbGlvIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbW92aW5nIHRoZSBkcm9wcGluZyBvZiB0aGUgbW1hcCBsb2NrIGR1cmluZyBJL08gYW5kIGZvbGlvIGxvY2tpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBwYWdlIGZhdWx0IGhhbmRsaW5nIGxvZ2ljIGluIGZpbGVtYXBfZmF1bHQgYW5kIF9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCwgY2hhbmdpbmcgaG93IHRoZSBmb2xpbyBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZW1vdmluZyB0aGUgZHJvcHBpbmcgb2YgdGhlIG1tYXAgbG9jayBkdXJpbmcgSS9PIGFuZCBmb2xpbyBsb2NraW5nLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7h29c[1] Phase: Succeeded StartedAt: 2026-06-22 19:50:13 +0000 UTC FinishedAt: 2026-06-22 19:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-22 19:50:13 +0000 UTC FinishedAt: 2026-06-22 19:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2] Phase: Succeeded StartedAt: 2026-06-22 19:50:13 +0000 UTC FinishedAt: 2026-06-22 23:54:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-22 19:50:13 +0000 UTC FinishedAt: 2026-06-22 23:54:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-22 19:50:13 +0000 UTC FinishedAt: 2026-06-22 19:50:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-22 19:50:13 +0000 UTC FinishedAt: 2026-06-22 19:50:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-convert-artifact-1347792337/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-22 19:50:34 +0000 UTC FinishedAt: 2026-06-22 20:21:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-22 19:50:34 +0000 UTC FinishedAt: 2026-06-22 20:21:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e591fe58-6c21-487f-be11-870d2324f366,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-convert-artifact-1347792337/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a4d2be26-eb61-4443-888d-59a7bba7b2d1", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-build-action-4216735615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-22 19:50:34 +0000 UTC FinishedAt: 2026-06-22 20:20:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e591fe58-6c21-487f-be11-870d2324f366,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-convert-artifact-1347792337/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a4d2be26-eb61-4443-888d-59a7bba7b2d1", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-build-action-4216735615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-22 20:21:07 +0000 UTC FinishedAt: 2026-06-22 20:21:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-22 20:21:07 +0000 UTC FinishedAt: 2026-06-22 20:21:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-22 20:21:07 +0000 UTC FinishedAt: 2026-06-22 20:21:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-22 20:21:07 +0000 UTC FinishedAt: 2026-06-22 20:21:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-convert-artifact-92549284/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-22 20:21:17 +0000 UTC FinishedAt: 2026-06-22 20:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-22 20:21:17 +0000 UTC FinishedAt: 2026-06-22 20:23:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a4d2be26-eb61-4443-888d-59a7bba7b2d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-build-action-4216735615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-22 20:23:34 +0000 UTC FinishedAt: 2026-06-22 20:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-22 20:23:34 +0000 UTC FinishedAt: 2026-06-22 20:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-22 20:23:34 +0000 UTC FinishedAt: 2026-06-22 20:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-22 20:23:34 +0000 UTC FinishedAt: 2026-06-22 20:50:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e591fe58-6c21-487f-be11-870d2324f366,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-convert-artifact-92549284/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8c60590b-6f3e-4897-9897-05a79d10870a", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-build-action-1539483440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-22 20:23:34 +0000 UTC FinishedAt: 2026-06-22 20:50:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e591fe58-6c21-487f-be11-870d2324f366,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-convert-artifact-92549284/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8c60590b-6f3e-4897-9897-05a79d10870a", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-build-action-1539483440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-22 20:50:56 +0000 UTC FinishedAt: 2026-06-22 20:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-22 20:50:56 +0000 UTC FinishedAt: 2026-06-22 20:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-22 20:50:56 +0000 UTC FinishedAt: 2026-06-22 20:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-22 20:50:56 +0000 UTC FinishedAt: 2026-06-22 20:52:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c60590b-6f3e-4897-9897-05a79d10870a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-build-action-1539483440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-22 20:52:35 +0000 UTC FinishedAt: 2026-06-22 23:54:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-22 20:52:35 +0000 UTC FinishedAt: 2026-06-22 23:54:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*a4d2be26-eb61-4443-888d-59a7bba7b2d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c60590b-6f3e-4897-9897-05a79d10870a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-build-action-4216735615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-build-action-1539483440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-22 20:52:35 +0000 UTC FinishedAt: 2026-06-22 20:52:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-22 20:52:35 +0000 UTC FinishedAt: 2026-06-22 20:52:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-convert-artifact-673290541/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-22 20:52:35 +0000 UTC FinishedAt: 2026-06-22 20:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-22 20:52:35 +0000 UTC FinishedAt: 2026-06-22 20:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-22 20:52:35 +0000 UTC FinishedAt: 2026-06-22 20:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-22 20:52:45 +0000 UTC FinishedAt: 2026-06-22 23:54:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7h29c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"322008f87f917e2217eeac386a9410945092eb2e","config_name":"upstream-apparmor-kasan.config","series_id":"6a0ee473-62c9-4e49-931c-ea503d51710f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-22 20:52:45 +0000 UTC FinishedAt: 2026-06-22 23:54:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a4d2be26-eb61-4443-888d-59a7bba7b2d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c60590b-6f3e-4897-9897-05a79d10870a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-build-action-4216735615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-build-action-1539483440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7h29c/series-workflow7h29c-convert-artifact-673290541/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}