Name: series-workflow4hgcv Phase: Succeeded StartedAt: 2026-09-05 15:11:06 +0000 UTC FinishedAt: 2026-09-05 19:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[0] Phase: Succeeded StartedAt: 2026-09-05 15:11:06 +0000 UTC FinishedAt: 2026-09-05 15:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 15:11:06 +0000 UTC FinishedAt: 2026-09-05 15:57:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_TCP", "RDS_RDMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_TCP", "RDS_RDMA" ], "series_id": "a3207a3a-be9d-4cd9-856e-5a24d0cebfd8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__rds_conn_create", "rds_conn_destroy", "rds_conn_destroy_fini", "rds_conn_get", "rds_conn_put", "rds_conn_lookup", "rds_sendmsg", "rds_recv_incoming", "rds_inc_put", "rds_message_free", "rds_tcp_accept_one" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19yZHNfY29ubl9jcmVhdGUmIzM0OywKICAgICYjMzQ7cmRzX2Nvbm5fZGVzdHJveSYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9kZXN0cm95X2ZpbmkmIzM0OywKICAgICYjMzQ7cmRzX2Nvbm5fZ2V0JiMzNDssCiAgICAmIzM0O3Jkc19jb25uX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9sb29rdXAmIzM0OywKICAgICYjMzQ7cmRzX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cmRzX3JlY3ZfaW5jb21pbmcmIzM0OywKICAgICYjMzQ7cmRzX2luY19wdXQmIzM0OywKICAgICYjMzQ7cmRzX21lc3NhZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX2FjY2VwdF9vbmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKGBrcmVmYCkgb2YgYHN0cnVjdCByZHNfY29ubmVjdGlvbmAgYWNyb3NzIHRoZSBSRFMgc3Vic3lzdGVtIChpbmNsdWRpbmcgVENQLCBJQiwgYW5kIGxvb3BiYWNrIHRyYW5zcG9ydHMpIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIG1vZHVsZS11bmxvYWQgcmFjZXMuXG5cbi0gS0FTQU4gLyBMT0NLREVQIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmVmY291bnQgaW1iYWxhbmNlLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGRlYWRsb2NrIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duKSBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4sIFNMVUIgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC5cbi0gS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBtb2RpZnkgYW55IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGluZm8tbGVhayByaXNrKSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIHNpemluZyBvciBib3VuZHMgY2hlY2tpbmcsIGFuZCBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBvYmplY3RzIGNvbnRpbnVlIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvY2AgKGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQpLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgcmVmZXJlbmNlIGNvdW50aW5nIChrcmVmKSB0byBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKGNfcmVmY291bnQpIHRvIHByb3Blcmx5IG1hbmFnZSBjb25uZWN0aW9uIGxpZmV0aW1lcyBhbmQgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zLiBJdCByZWZhY3RvcnMgY29ubmVjdGlvbiB0ZWFyZG93biBpbnRvIHN5bmNocm9ub3VzIHF1aWVzY2UgKHJkc19jb25uX3BhdGhfcXVpZXNjZSwgcmRzX2Nvbm5fZGVzdHJveSkgYW5kIGFzeW5jaHJvbm91cyBkZXN0cnVjdGlvbiAocmRzX2Nvbm5fZGVzdHJveV9maW5pKSwgYW5kIHVwZGF0ZXMgcmVmZXJlbmNlIHRyYWNraW5nIGFjcm9zcyBzb2NrZXQgcmVsZWFzZSwgbWVzc2FnZSBxdWV1ZXMsIHJlY3Yvc2VuZCBwYXRocywgYW5kIHRyYW5zcG9ydHMgKFRDUCwgbG9vcCwgSUIpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBsb2dpYywgc3luY2hyb25pemF0aW9uLCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaW4gbmV0L3JkcywgbWFraW5nIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwMDE1ZTE4NmU1NGUzNTkzZGY2ZmZhMDA3MzFhZWEwOWE5MThhZDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNTo1NjoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuY1xuaW5kZXggZDVkZWZlOTE3MmUzNi4uMGVhYTViOTc2NTcyNCAxMDA2NDRcbi0tLSBhL25ldC9yZHMvYWZfcmRzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvYWZfcmRzLmNcbkBAIC04MCw2ICYjNDM7ODAsMTQgQEAgc3RhdGljIGludCByZHNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0cmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIE5VTEwpO1xuIFx0cmRzX25vdGlmeV9tc2dfemNvcHlfcHVyZ2UoXHUwMDI2cnMtXHUwMDNlcnNfemNvb2tpZV9xdWV1ZSk7XG4gXG4mIzQzO1x0LyogZHJvcCB0aGUgY2FjaGVkIGNvbm5lY3Rpb24gcmVmZXJlbmNlOyBubyBzZW5kbXNnIGNhbiByYWNlXG4mIzQzO1x0ICogd2l0aCB1cyBoZXJlLCB0aGUgc29ja2V0IGlzIGdvaW5nIGF3YXlcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocnMtXHUwMDNlcnNfY29ubikge1xuJiM0MztcdFx0cmRzX2Nvbm5fcHV0KHJzLVx1MDAzZXJzX2Nvbm4pO1xuJiM0MztcdFx0cnMtXHUwMDNlcnNfY29ubiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZyZHNfc29ja19sb2NrKTtcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnMtXHUwMDNlcnNfaXRlbSk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZyZHNfc29ja19sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5pbmRleCBiNmM0YmViNTBlYWYwLi4yYzhjYTU0YTkxY2E4IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5AQCAtNDcsNyAmIzQzOzQ3LDggQEBcbiBcbiAvKiBjb252ZXJ0aW5nIHRoaXMgdG8gUkNVIGlzIGEgY2hvcmUgZm9yIGFub3RoZXIgZGF5Li4gKi9cbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25uX2xvY2spO1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19jb25uX2NvdW50O1xuJiM0MzsvKiB3b2tlbiB3aGVuZXZlciBhIHRyYW5zcG9ydCYjMzk7cyB0X2Nvbm5fY291bnQgZHJvcHMgdG8gemVybyAqL1xuJiM0MztzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2Nvbm5fZnJlZWRfd2FpdHEpO1xuIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCByZHNfY29ubl9oYXNoW1JEU19DT05ORUNUSU9OX0hBU0hfRU5UUklFU107XG4gc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfY29ubl9zbGFiO1xuIFxuQEAgLTc5LDcgJiM0Mzs4MCwxMCBAQCBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKnJkc19jb25uX2J1Y2tldChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxhZGRyLFxuIFx0XHR2YXIgfD0gUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHXyMjc3VmZml4O1x0XFxcbiB9IHdoaWxlICgwKVxuIFxuLS8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrICovXG4mIzQzOy8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrLlxuJiM0MzsgKiBPbiBzdWNjZXNzIGEgcmVmZXJlbmNlIGlzIHRha2VuIG9uIHRoZSByZXR1cm5lZCBjb25uZWN0aW9uOyB0aGVcbiYjNDM7ICogY2FsbGVyIG11c3QgZHJvcCBpdCB3aXRoIHJkc19jb25uX3B1dCgpLlxuJiM0MzsgKi9cbiBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCxcbiBcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYWRkcixcbkBAIC05Niw2ICYjNDM7MTAwLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdCAgICBjb25uLVx1MDAzZWNfdG9zID09IHRvcyBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIG5ldCA9PSByZHNfY29ubl9uZXQoY29ubikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBjb25uLVx1MDAzZWNfZGV2X2lmID09IGRldl9pZikge1xuJiM0MztcdFx0XHQvKiBBbiBlbnRyeSB3aG9zZSByZWZjb3VudCBhbHJlYWR5IGRyb3BwZWQgdG9cbiYjNDM7XHRcdFx0ICogemVybyBoYXMgYmVlbiB1bmhhc2hlZCBhbmQgaXMgYWJvdXQgdG8gYmVcbiYjNDM7XHRcdFx0ICogZnJlZWQ7IGFuIFJDVSB0cmF2ZXJzYWwgbWF5IHN0aWxsIGNvbWVcbiYjNDM7XHRcdFx0ICogYWNyb3NzIGl0LiAgVHJlYXQgaXQgYXMgYWJzZW50LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZjb25uLVx1MDAzZWNfcmVmY291bnQpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdHJldCA9IGNvbm47XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0xOTcsNyAmIzQzOzIwOCwxNCBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdCAqIFdlIG5lZWQgYSBzZWNvbmQgY29ubmVjdGlvbiBvYmplY3QgaW50byB3aGljaCB3ZVxuIFx0XHQgKiBjYW4gc3RpY2sgdGhlIG90aGVyIFFQLiAqL1xuIFx0XHRwYXJlbnQgPSBjb25uO1xuJiM0MztcdFx0LyogVGhlIGNfcGFzc2l2ZSBwb2ludGVyIGhvbGRzIGEgcmVmZXJlbmNlIHdoaWNoIGlzIG9ubHlcbiYjNDM7XHRcdCAqIGRyb3BwZWQgb25lIHN5bmNocm9uaXplX3JjdSgpIGFmdGVyIHRoZSBwb2ludGVyIGlzXG4mIzQzO1x0XHQgKiBjbGVhcmVkLCBzbyB3aXRoaW4gdGhpcyBSQ1Ugc2VjdGlvbiBhIGZldGNoZWQgcG9pbnRlclxuJiM0MztcdFx0ICogaXMgYWx3YXlzIHNhZmUgdG8gdGFrZSBhIHJlZmVyZW5jZSBvbi5cbiYjNDM7XHRcdCAqL1xuIFx0XHRjb25uID0gcGFyZW50LVx1MDAzZWNfcGFzc2l2ZTtcbiYjNDM7XHRcdGlmIChjb25uKVxuJiM0MztcdFx0XHRyZHNfY29ubl9nZXQoY29ubik7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChjb25uKVxuQEAgLTIxNSw2ICYjNDM7MjMzLDcgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqX19yZHNfY29ubl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjNDM7XHRrcmVmX2luaXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50KTtcbiBcdElOSVRfSExJU1RfTk9ERShcdTAwMjZjb25uLVx1MDAzZWNfaGFzaF9ub2RlKTtcbiBcdGNvbm4tXHUwMDNlY19sYWRkciA9ICpsYWRkcjtcbiBcdGNvbm4tXHUwMDNlY19pc3Y2ID0gIWlwdjZfYWRkcl92NG1hcHBlZChsYWRkcik7XG5AQCAtMjgyLDggJiM0MzszMDEsOSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgIGlzX291dGdvaW5nKTtcbiBcdFx0Y29ubi1cdTAwM2VjX3BhdGhbaV0uY3BfaW5kZXggPSBpO1xuIFx0XHRjb25uLVx1MDAzZWNfcGF0aFtpXS5jcF93cSA9XG4tXHRcdFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCYjMzQ7a3Jkc19jcF93cSMlbHUvJWRcJiMzNDssIDAsXG4tXHRcdFx0XHRcdFx0cmRzX2Nvbm5fY291bnQsIGkpO1xuJiM0MztcdFx0XHRhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDtrcmRzX2NwX3dxIyVkLyVkXCYjMzQ7LCAwLFxuJiM0MztcdFx0XHRcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZ0cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpLFxuJiM0MztcdFx0XHRcdFx0XHRpKTtcbiBcdFx0aWYgKCFjb25uLVx1MDAzZWNfcGF0aFtpXS5jcF93cSlcbiBcdFx0XHRjb25uLVx1MDAzZWNfcGF0aFtpXS5jcF93cSA9IHJkc193cTtcbiBcdH1cbkBAIC0zMTUsMTUgJiM0MzszMzUsMzUgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqX19yZHNfY29ubl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuIFx0aWYgKHBhcmVudCkge1xuIFx0XHQvKiBDcmVhdGluZyBwYXNzaXZlIGNvbm4gKi9cbi1cdFx0aWYgKHBhcmVudC1cdTAwM2VjX3Bhc3NpdmUpIHtcbiYjNDM7XHRcdGlmIChSRUFEX09OQ0UocGFyZW50LVx1MDAzZWNfZGVzdHJveV9pbl9wcm9nKSkge1xuJiM0MztcdFx0XHQvKiBUaGUgcGFyZW50JiMzOTtzIGRlc3Ryb3kgaGFzIGJlZ3VuIChpdCBzZXRzIHRoZVxuJiM0MztcdFx0XHQgKiBmbGFnIGFuZCBzbmF0Y2hlcyBjX3Bhc3NpdmUgdW5kZXIgdGhpc1xuJiM0MztcdFx0XHQgKiBsb2NrKTsgZG8gbm90IGluc3RhbGwgYSBuZXcgcGFzc2l2ZSBjb25uXG4mIzQzO1x0XHRcdCAqIHRoYXQgbm90aGluZyB3b3VsZCBldmVyIGRlc3Ryb3kuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR0cmFucy1cdTAwM2Vjb25uX2ZyZWUoY29ubi1cdTAwM2VjX3BhdGhbMF0uY3BfdHJhbnNwb3J0X2RhdGEpO1xuJiM0MztcdFx0XHRmcmVlX2NwID0gY29ubi1cdTAwM2VjX3BhdGg7XG4mIzQzO1x0XHRcdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcbiYjNDM7XHRcdFx0Y29ubiA9IEVSUl9QVFIoLUVORVRET1dOKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAocGFyZW50LVx1MDAzZWNfcGFzc2l2ZSkge1xuJiM0MztcdFx0XHRyZHNfY29ubl9nZXQocGFyZW50LVx1MDAzZWNfcGFzc2l2ZSk7XG4gXHRcdFx0dHJhbnMtXHUwMDNlY29ubl9mcmVlKGNvbm4tXHUwMDNlY19wYXRoWzBdLmNwX3RyYW5zcG9ydF9kYXRhKTtcbiBcdFx0XHRmcmVlX2NwID0gY29ubi1cdTAwM2VjX3BhdGg7XG4gXHRcdFx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xuIFx0XHRcdGNvbm4gPSBwYXJlbnQtXHUwMDNlY19wYXNzaXZlO1xuIFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKiBUaGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyXG4mIzQzO1x0XHRcdCAqIGRlc3Ryb3lzIHRoZSBjb25uICh0aGUgdHJhbnNwb3J0JiMzOTtzIGNvbm5cbiYjNDM7XHRcdFx0ICogbGlzdHMsIGFzIGZvciBhbnkgb3RoZXIgY29ubikuICBUYWtlIG9uZVxuJiM0MztcdFx0XHQgKiBmb3IgdGhlIGNfcGFzc2l2ZSBwb2ludGVyIC0gZHJvcHBlZCB3aGVuXG4mIzQzO1x0XHRcdCAqIHRoZSBwYXJlbnQgaXMgZGVzdHJveWVkIC0gYW5kIG9uZSBmb3Igb3VyXG4mIzQzO1x0XHRcdCAqIGNhbGxlci5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHJkc19jb25uX2dldChjb25uKTtcdC8qIGNfcGFzc2l2ZSAqL1xuJiM0MztcdFx0XHRyZHNfY29ubl9nZXQoY29ubik7XHQvKiBjYWxsZXIgKi9cbiBcdFx0XHRwYXJlbnQtXHUwMDNlY19wYXNzaXZlID0gY29ubjtcbiBcdFx0XHRyZHNfY29uZ19hZGRfY29ubihjb25uKTtcbi1cdFx0XHRyZHNfY29ubl9jb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGF0b21pY19pbmMoXHUwMDI2Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfY29ubl9jb3VudCk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdC8qIENyZWF0aW5nIG5vcm1hbCBjb25uICovXG5AQCAtMzUwLDE1ICYjNDM7MzkwLDIxIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRjb25uLVx1MDAzZWNfbXlfZ2VuX251bSA9IHJkc19nZW5fbnVtO1xuIFx0XHRcdGNvbm4tXHUwMDNlY19wZWVyX2dlbl9udW0gPSAwO1xuJiM0MztcdFx0XHQvKiB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyXG4mIzQzO1x0XHRcdCAqIGRlc3Ryb3lzIHRoZSBjb25uOyB0YWtlIG9uZSBmb3Igb3VyIGNhbGxlclxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xuIFx0XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZjb25uLVx1MDAzZWNfaGFzaF9ub2RlLCBoZWFkKTtcbiBcdFx0XHRyZHNfY29uZ19hZGRfY29ubihjb25uKTtcbi1cdFx0XHRyZHNfY29ubl9jb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGF0b21pY19pbmMoXHUwMDI2Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfY29ubl9jb3VudCk7XG4gXHRcdH1cbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gb3V0OlxuJiM0MztcdGlmIChwYXJlbnQpXG4mIzQzO1x0XHRyZHNfY29ubl9wdXQocGFyZW50KTtcbiBcdGlmIChmcmVlX2NwKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYXRoczsgaSYjNDM7JiM0MzspXG4gXHRcdFx0aWYgKGZyZWVfY3BbaV0uY3Bfd3EgIT0gcmRzX3dxKVxuQEAgLTUxNSwxMCAmIzQzOzU2MSwxMiBAQCB2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fc2xvdHNfYXZhaWxhYmxlKGNvbm4sIGZhbHNlKTtcbiB9XG4gXG4tLyogZGVzdHJveSBhIHNpbmdsZSByZHNfY29ubl9wYXRoLiByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlclxuLSAqIGFsbCBwYXRocyB1c2luZyByZHNfY29ubl9wYXRoX2Rlc3Ryb3koKVxuJiM0MzsvKiBxdWllc2NlIGEgc2luZ2xlIHJkc19jb25uX3BhdGg6IHNodXQgaXQgZG93biBhbmQgdGVhciBkb3duIGFueVxuJiM0MzsgKiBxdWV1ZWQgbWVzc2FnZXMuICByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlciBhbGwgcGF0aHMgdXNpbmdcbiYjNDM7ICogcmRzX2Nvbm5fcGF0aF9xdWllc2NlKCk7IHRoZSB0cmFuc3BvcnQgc3RhdGUgYW5kIHRoZSB3b3JrcXVldWUgYXJlXG4mIzQzOyAqIGZyZWVkIGxhdGVyLCBmcm9tIHJkc19jb25uX3BhdGhfZnJlZSgpLlxuICAqL1xuLXN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4mIzQzO3N0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfcXVpZXNjZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4ge1xuIFx0c3RydWN0IHJkc19tZXNzYWdlICpybSwgKnJ0bXA7XG4gXG5AQCAtNTQ3LDYgJiM0Mzs1OTUsMTYgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFdBUk5fT04oZGVsYXllZF93b3JrX3BlbmRpbmcoXHUwMDI2Y3AtXHUwMDNlY3BfcmVjdl93KSk7XG4gXHRXQVJOX09OKGRlbGF5ZWRfd29ya19wZW5kaW5nKFx1MDAyNmNwLVx1MDAzZWNwX2Nvbm5fdykpO1xuIFx0V0FSTl9PTih3b3JrX3BlbmRpbmcoXHUwMDI2Y3AtXHUwMDNlY3BfZG93bl93KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGZyZWUgYSBxdWllc2NlZCByZHNfY29ubl9wYXRoJiMzOTtzIHRyYW5zcG9ydCBzdGF0ZSBhbmQgd29ya3F1ZXVlOyBydW5zXG4mIzQzOyAqIGZyb20gcmRzX2Nvbm5fZGVzdHJveV9maW5pKCkgb25jZSB0aGUgbGFzdCBjb25uZWN0aW9uIHJlZmVyZW5jZSBpc1xuJiM0MzsgKiBkcm9wcGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9mcmVlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiYjNDM7e1xuJiM0MztcdGlmICghY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGEpXG4mIzQzO1x0XHRyZXR1cm47XG4gXG4gXHRpZiAoY3AtXHUwMDNlY3Bfd3EgIT0gcmRzX3dxKSB7XG4gXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGNwLVx1MDAzZWNwX3dxKTtcbkBAIC01NTYsMTcgJiM0Mzs2MTQsNzQgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdGNwLVx1MDAzZWNwX2Nvbm4tXHUwMDNlY190cmFucy1cdTAwM2Vjb25uX2ZyZWUoY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGEpO1xuIH1cbiBcbiYjNDM7LyogRnJlZSBhIGNvbm5lY3Rpb24uICBUaGlzIHJ1bnMgZnJvbSByZHNfY29ubl9wdXQoKSB3aGVuIHRoZSBsYXN0XG4mIzQzOyAqIHJlZmVyZW5jZSBpcyBkcm9wcGVkLCBhZnRlciByZHNfY29ubl9kZXN0cm95KCkgaGFzIHF1aWVzY2VkIHRoZVxuJiM0MzsgKiBjb25uZWN0aW9uIGFuZCBkcm9wcGVkIHRoZSBpbml0aWFsIHJlZmVyZW5jZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJkc19jb25uX2Rlc3Ryb3lfZmluaShzdHJ1Y3Qga3JlZiAqa3JlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGNfcmVmY291bnQpO1xuJiM0MztcdGludCBucGF0aHMgPSAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7XG4mIzQzO1x0c3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zID0gY29ubi1cdTAwM2VjX3RyYW5zO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGF0aHM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0cmRzX2Nvbm5fcGF0aF9mcmVlKFx1MDAyNmNvbm4tXHUwMDNlY19wYXRoW2ldKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUoY29ubi1cdTAwM2VjX3BhdGgpO1xuJiM0MztcdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcbiYjNDM7XG4mIzQzO1x0Lyogb25seSBhZnRlciBldmVyeXRoaW5nIHRoZSB0cmFuc3BvcnQgbW9kdWxlIG93bnMgaGFzIGJlZW5cbiYjNDM7XHQgKiBmcmVlZCBhYm92ZSBtYXkgaXRzIHVubG9hZCBwcm9jZWVkXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFhdG9taWNfZGVjX3JldHVybihcdTAwMjZ0cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpKVxuJiM0MztcdFx0d2FrZV91cF9hbGwoXHUwMDI2cmRzX2Nvbm5fZnJlZWRfd2FpdHEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBXYWl0IGZvciBhbGwgb2YgQHRyYW5zJiMzOTtzIGNvbm5lY3Rpb25zIHRvIGJlIGZyZWVkOyB0aGUgZnJlZSBydW5zXG4mIzQzOyAqIGFzeW5jaHJvbm91c2x5IG9uY2UgcmRzX2Nvbm5fZGVzdHJveSgpIGhhcyBxdWllc2NlZCBhIGNvbm5lY3Rpb24uXG4mIzQzOyAqIENhbGxlZCBvbiB0cmFuc3BvcnQgbW9kdWxlIHVubG9hZCwgYWZ0ZXIgdGhlIHRyYW5zcG9ydCBkZXN0cm95ZWRcbiYjNDM7ICogYWxsIG9mIGl0cyBjb25uZWN0aW9uczogYW55dGhpbmcgc3RpbGwgaG9sZGluZyBhIGNvbm5lY3Rpb25cbiYjNDM7ICogcmVmZXJlbmNlIGF0IHRoYXQgcG9pbnQgaXMgYSBzaG9ydC1saXZlZCBsb29rdXAtc3R5bGUgaG9sZGVyLCBzb1xuJiM0MzsgKiBhIGJvdW5kZWQgd2FpdCBzdWZmaWNlcyAtIGJ1dCB3YXJuIGlmIGl0IGV4cGlyZXMsIHNpbmNlIHRoZSBmcmVlc1xuJiM0MzsgKiB0aGF0IGZvbGxvdyB0aGUgdW5sb2FkIHdpbGwgdGhlbiB0b3VjaCBmcmVlZCBtb2R1bGUgdGV4dC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChyZHNfY29ubl9mcmVlZF93YWl0cSxcbiYjNDM7XHRcdFx0XHQhYXRvbWljX3JlYWQoXHUwMDI2dHJhbnMtXHUwMDNldF9jb25uX2NvdW50KSxcbiYjNDM7XHRcdFx0XHRtc2Vjc190b19qaWZmaWVzKFJEU19DT05OX0ZSRUVfVElNRU9VVF9NUykpKVxuJiM0MztcdFx0V0FSTigxLCBcJiMzNDtSRFMvJXM6ICVkIGNvbm5lY3Rpb24ocykgbm90IGZyZWVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICB0cmFucy1cdTAwM2V0X25hbWUsIGF0b21pY19yZWFkKFx1MDAyNnRyYW5zLVx1MDAzZXRfY29ubl9jb3VudCkpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQpO1xuJiM0MztcbiYjNDM7dm9pZCByZHNfY29ubl9nZXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuJiM0Mzt7XG4mIzQzO1x0a3JlZl9nZXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9nZXQpO1xuJiM0MztcbiYjNDM7dm9pZCByZHNfY29ubl9wdXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuJiM0Mzt7XG4mIzQzO1x0a3JlZl9wdXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50LCByZHNfY29ubl9kZXN0cm95X2ZpbmkpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX3B1dCk7XG4mIzQzO1xuIC8qXG4gICogU3RvcCBhbmQgZnJlZSBhIGNvbm5lY3Rpb24uXG4gICpcbi0gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gdmVyeSBsaW1pdGVkIGNpcmN1bXN0YW5jZXMuICBJdCBhc3N1bWVzIHRoYXQgb25jZVxuLSAqIHRoZSBjb25uIGhhcyBiZWVuIHNodXRkb3duIHRoYXQgbm8gb25lIGVsc2UgaXMgcmVmZXJlbmNpbmcgdGhlIGNvbm5lY3Rpb24uXG4tICogV2UgY2FuIG9ubHkgZW5zdXJlIHRoaXMgaW4gdGhlIHJtbW9kIHBhdGggaW4gdGhlIGN1cnJlbnQgY29kZS5cbiYjNDM7ICogUXVpZXNjZXMgdGhlIGNvbm5lY3Rpb24gc3luY2hyb25vdXNseSAod29ya2VycyBjYW5jZWxsZWQsIHRyYW5zcG9ydFxuJiM0MzsgKiBjb25uZWN0aW9ucyBzaHV0IGRvd24sIHF1ZXVlZCBtZXNzYWdlcyBkcm9wcGVkKSBhbmQgZHJvcHMgdGhlXG4mIzQzOyAqIGluaXRpYWwgcmVmZXJlbmNlLiAgVGhlIG1lbW9yeSAtIGluY2x1ZGluZyB0aGUgdHJhbnNwb3J0JiMzOTtzXG4mIzQzOyAqIHBlci1jb25uZWN0aW9uIHN0YXRlIGFuZCB0aGUgcGF0aCB3b3JrcXVldWVzIC0gaXMgZnJlZWQgb25jZSB0aGVcbiYjNDM7ICogbGFzdCByZHNfY29ubl9wdXQoKSBydW5zLCB3aGljaCBtYXkgYmUgYWZ0ZXIgdGhpcyByZXR1cm5zLlxuICAqL1xuIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBpO1xuJiM0MztcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcGFzc2l2ZTtcbiBcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcDtcbiBcdGludCBucGF0aHMgPSAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7XG4gXG5AQCAtNTc0LDE2ICYjNDM7Njg5LDQ2IEBAIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4gXHRcdCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBjb25uLCBcdTAwMjZjb25uLVx1MDAzZWNfbGFkZHIsXG4gXHRcdCBcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIpO1xuIFxuLVx0LyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi9cbiYjNDM7XHQvKiBNYWtlIHJkc19kZXN0cm95X3BlbmRpbmcoKSB0cnVlIGZvciB0aGlzIGNvbm4uICBUb2dldGhlciB3aXRoXG4mIzQzO1x0ICogdGhlIHN5bmNocm9uaXplX3JjdSgpIGJlbG93IHRoaXMgc3RvcHMgdGhlIHdvcmstcmVxdWV1ZWluZ1xuJiM0MztcdCAqIHNpdGVzICh3aGljaCBhbGwgdGVzdCByZHNfZGVzdHJveV9wZW5kaW5nKCkgdW5kZXJcbiYjNDM7XHQgKiByY3VfcmVhZF9sb2NrKCkpIGZyb20gcXVldWVpbmcgbmV3IHdvcmsgb24gdGhlIHBhdGhcbiYjNDM7XHQgKiB3b3JrcXVldWVzIG9uY2Ugd2Ugc3RhcnQgY2FuY2VsbGluZyBhbmQgZGVzdHJveWluZyB0aGVtLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm93IHRoYXQgdGhlIHRyYW5zcG9ydCBzdGF0ZSBzdGF5cyBkaXNjb3ZlcmFibGUgKGUuZy4gb24gdGhlXG4mIzQzO1x0ICogdHJhbnNwb3J0cyYjMzk7IGNvbm5lY3Rpb24gbGlzdHMpIHVudGlsIHRoZSBmaW5hbCByZHNfY29ubl9wdXQoKSxcbiYjNDM7XHQgKiBhIGNvbm4gY2FuIGJlIGhhbmRlZCB0byByZHNfY29ubl9kZXN0cm95KCkgbW9yZSB0aGFuIG9uY2UgLVxuJiM0MztcdCAqIGUuZy4gZHJvcHBlZCBmb3IgYSBwcm90b2NvbCB2ZXJzaW9uIG1pc21hdGNoIGFuZCB0aGVuIGZvdW5kXG4mIzQzO1x0ICogYWdhaW4gYXQgbW9kdWxlIHVubG9hZC4gIE9ubHkgdGhlIGZpcnN0IGNhbGxlciBwcm9jZWVkczsgdGhlXG4mIzQzO1x0ICogdW5oYXNoIGFsc28gaGFwcGVucyB1bmRlciByZHNfY29ubl9sb2NrLCBzbyBhIGxvb2tlZC11cCBjb25uXG4mIzQzO1x0ICogY2FuIG5ldmVyIGJlIHF1aWVzY2VkIHR3aWNlLlxuJiM0MztcdCAqL1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZyZHNfY29ubl9sb2NrKTtcbiYjNDM7XHRpZiAoY29ubi1cdTAwM2VjX2Rlc3Ryb3lfaW5fcHJvZykge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJkc19jb25uX2xvY2spO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRXUklURV9PTkNFKGNvbm4tXHUwMDNlY19kZXN0cm95X2luX3Byb2csIHRydWUpO1xuJiM0MztcbiYjNDM7XHQvKiBFbnN1cmUgY29ubiB3aWxsIG5vdCBiZSBzY2hlZHVsZWQgZm9yIHJlY29ubmVjdCAqL1xuIFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNmNvbm4tXHUwMDNlY19oYXNoX25vZGUpO1xuJiM0MztcbiYjNDM7XHQvKiBTbmF0Y2ggY19wYXNzaXZlIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2s6XG4mIzQzO1x0ICogX19yZHNfY29ubl9jcmVhdGUoKSBkZXJlZmVyZW5jZXMgaXQgdW5kZXIgcmN1X3JlYWRfbG9jaygpXG4mIzQzO1x0ICogKGFuZCByZWZ1c2VzIHRvIGluc3RhbGwgYSBuZXcgb25lIG9uY2UgY19kZXN0cm95X2luX3Byb2cgaXNcbiYjNDM7XHQgKiBzZXQsIHdoaWNoIGl0IGNoZWNrcyB1bmRlciB0aGlzIGxvY2spLiAgQWZ0ZXIgdGhlXG4mIzQzO1x0ICogc3luY2hyb25pemVfcmN1KCkgYmVsb3cgbm8gb25lIGNhbiBwaWNrIHRoZSBwb2ludGVyIHVwIGFueVxuJiM0MztcdCAqIG1vcmUgYW5kIGl0cyByZWZlcmVuY2UgY2FuIGJlIGRyb3BwZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGFzc2l2ZSA9IGNvbm4tXHUwMDNlY19wYXNzaXZlO1xuJiM0MztcdGNvbm4tXHUwMDNlY19wYXNzaXZlID0gTlVMTDtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyZHNfY29ubl9sb2NrKTtcbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0Lyogc2h1dCB0aGUgY29ubmVjdGlvbiBkb3duICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGF0aHM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGNwID0gXHUwMDI2Y29ubi1cdTAwM2VjX3BhdGhbaV07XG4tXHRcdHJkc19jb25uX3BhdGhfZGVzdHJveShjcCk7XG4mIzQzO1x0XHRyZHNfY29ubl9wYXRoX3F1aWVzY2UoY3ApO1xuIFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2Y3AtXHUwMDNlY3BfcmV0cmFucykpO1xuIFx0fVxuIFxuQEAgLTU5NCwxMiAmIzQzOzczOSwxNCBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIFx0ICovXG4gXHRyZHNfY29uZ19yZW1vdmVfY29ubihjb25uKTtcbiBcbi1cdGtmcmVlKGNvbm4tXHUwMDNlY19wYXRoKTtcbi1cdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcbiYjNDM7XHQvKiBkcm9wIHRoZSByZWZlcmVuY2Ugb3VyIGNfcGFzc2l2ZSBwb2ludGVyIGhlbGQsIGlmIGFueSAqL1xuJiM0MztcdGlmIChwYXNzaXZlKVxuJiM0MztcdFx0cmRzX2Nvbm5fcHV0KHBhc3NpdmUpO1xuIFxuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuLVx0cmRzX2Nvbm5fY291bnQtLTtcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuJiM0MztcdC8qIGRyb3AgdGhlIGluaXRpYWwgcmVmZXJlbmNlOyB0aGUgY29ubmVjdGlvbiBpcyBmcmVlZCBmcm9tXG4mIzQzO1x0ICogcmRzX2Nvbm5fZGVzdHJveV9maW5pKCkgb25jZSBldmVyeSBob2xkZXIgaGFzIGRyb3BwZWQgdGhlaXJzXG4mIzQzO1x0ICovXG4mIzQzO1x0cmRzX2Nvbm5fcHV0KGNvbm4pO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9kZXN0cm95KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmMgYi9uZXQvcmRzL2liLmNcbmluZGV4IDc4NmYzOTE2OWJjMTQuLjc1NTY5MDU4MzMyNTkgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2liLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWIuY1xuQEAgLTUyNSwxMCAmIzQzOzUyNSw3IEBAIHN0YXRpYyB2b2lkIHJkc19pYl9zZXRfdW5sb2FkaW5nKHZvaWQpXG4gXG4gc3RhdGljIGJvb2wgcmRzX2liX2lzX3VubG9hZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwID0gXHUwMDI2Y29ubi1cdTAwM2VjX3BhdGhbMF07XG4tXG4tXHRyZXR1cm4gKHRlc3RfYml0KFJEU19ERVNUUk9ZX1BFTkRJTkcsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSB8fFxuLVx0XHRhdG9taWNfcmVhZChcdTAwMjZyZHNfaWJfdW5sb2FkaW5nKSAhPSAwKTtcbiYjNDM7XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cmRzX2liX3VubG9hZGluZykgIT0gMDtcbiB9XG4gXG4gdm9pZCByZHNfaWJfZXhpdCh2b2lkKVxuQEAgLTU0MSw2ICYjNDM7NTM4LDE1IEBAIHZvaWQgcmRzX2liX2V4aXQodm9pZClcbiAjZW5kaWZcbiBcdHJkc19pYl91bnJlZ2lzdGVyX2NsaWVudCgpO1xuIFx0cmRzX2liX2Rlc3Ryb3lfbm9kZXZfY29ubnMoKTtcbiYjNDM7XHRyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKFx1MDAyNnJkc19pYl90cmFuc3BvcnQpO1xuJiM0MztcbiYjNDM7XHQvKiBUZWFyaW5nIGRvd24gdGhlIGxhc3QgY29ubmVjdGlvbiBtYXkgaGF2ZSBkcm9wcGVkIHRoZSBmaW5hbFxuJiM0MztcdCAqIHJlZmVyZW5jZSBvbiBhIGRldmljZSwgZGVmZXJyaW5nIHJkc19pYl9kZXZfZnJlZSgpIHRvIHJkc193cS5cbiYjNDM7XHQgKiBEcmFpbiBpdCBiZWZvcmUgdGhlIG1vZHVsZSBnb2VzIGF3YXk7IGl0IHF1ZXVlcyBub3RoaW5nXG4mIzQzO1x0ICogZnVydGhlciBvbiByZHNfd3EuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zmx1c2hfd29ya3F1ZXVlKHJkc193cSk7XG4mIzQzO1xuIFx0cmRzX2liX3N5c2N0bF9leGl0KCk7XG4gXHRyZHNfaWJfcmVjdl9leGl0KCk7XG4gXHRyZHNfdHJhbnNfdW5yZWdpc3RlcihcdTAwMjZyZHNfaWJfdHJhbnNwb3J0KTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmNcbmluZGV4IDRmZWIwZWRjMzYwYzguLjI0ZTUzOGMyNTNhN2EgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2liX2NtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWJfY20uY1xuQEAgLTkyNCw4ICYjNDM7OTI0LDE0IEBAIGludCByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLFxuIFx0XHRyZHNfaWJfY29ubl9lcnJvcihjb25uLCBcJiMzNDtyZG1hX2FjY2VwdCBmYWlsZWRcXG5cJiMzNDspO1xuIFxuIG91dDpcbi1cdGlmIChjb25uKVxuJiM0MztcdGlmIChjb25uKSB7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZjb25uLVx1MDAzZWNfY21fbG9jayk7XG4mIzQzO1x0XHQvKiBUaGUgY29ubiBzdGF5cyByZWFjaGFibGUgdGhyb3VnaCBjbV9pZC1cdTAwM2Vjb250ZXh0XG4mIzQzO1x0XHQgKiB3aXRob3V0IGEgcmVmZXJlbmNlIG9mIGl0cyBvd246IGNvbm5lY3Rpb24gZGVzdHJveVxuJiM0MztcdFx0ICogc2h1dHMgdGhlIGNtX2lkIGRvd24gYmVmb3JlIHRoZSBjb25uIGlzIGZyZWVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZHNfY29ubl9wdXQoY29ubik7XG4mIzQzO1x0fVxuIFx0aWYgKGVycilcbiBcdFx0cmRtYV9yZWplY3QoY21faWQsIFx1MDAyNmVyciwgc2l6ZW9mKGludCksXG4gXHRcdFx0ICAgIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVEKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2xvb3AuYyBiL25ldC9yZHMvbG9vcC5jXG5pbmRleCBlNmIwNzUwYmJlZGFiLi43ZGFmOGVkMjVkNjlhIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9sb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvbG9vcC5jXG5AQCAtMTk1LDYgJiM0MzsxOTUsOCBAQCB2b2lkIHJkc19sb29wX2V4aXQodm9pZClcbiBcdFx0V0FSTl9PTihsYy1cdTAwM2Vjb25uLVx1MDAzZWNfcGFzc2l2ZSk7XG4gXHRcdHJkc19jb25uX2Rlc3Ryb3kobGMtXHUwMDNlY29ubik7XG4gXHR9XG4mIzQzO1xuJiM0MztcdHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoXHUwMDI2cmRzX2xvb3BfdHJhbnNwb3J0KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmRzX2xvb3Bfa2lsbF9jb25ucyhzdHJ1Y3QgbmV0ICpuZXQpXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuY1xuaW5kZXggZjI1ZjI1OTI1ODZmNy4uMjllOTUwMjhlNjFlNCAxMDA2NDRcbi0tLSBhL25ldC9yZHMvbWVzc2FnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL21lc3NhZ2UuY1xuQEAgLTE4Miw2ICYjNDM7MTgyLDE4IEBAIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4gXHRcdGtyZWZfcHV0KFx1MDAyNnJtLVx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX2ZyZWUoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiYjNDM7e1xuJiM0MztcdC8qIGdldCBpbiByZHNfc2VuZF9xdWV1ZV9ybSgpLCByZHNfc2VuZF9wcm9iZSgpIG9yIHRoZSBjb25nZXN0aW9uXG4mIzQzO1x0ICogbWFwIHBhdGggb2YgcmRzX3NlbmRfeG1pdCgpLiAgTWVzc2FnZXMgdGhhdCB3ZXJlIG5ldmVyIHF1ZXVlZCBvblxuJiM0MztcdCAqIGEgY29ubmVjdGlvbiBoYXZlIG5vIHJlZmVyZW5jZSB0byBkcm9wLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChybS1cdTAwM2VtX2luYy5pX2Nvbm4pXG4mIzQzO1x0XHRyZHNfY29ubl9wdXQocm0tXHUwMDNlbV9pbmMuaV9jb25uKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUocm0pO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXG5AQCAtMTkyLDcgJiM0MzsyMDQsNyBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV91bnBpbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0aWYgKHJtLVx1MDAzZWF0b21pYy5vcF91bnBpbl9kZWZlcnJlZClcbiBcdFx0cmRzX2F0b21pY19vcF91bnBpbl9wYWdlKFx1MDAyNnJtLVx1MDAzZWF0b21pYyk7XG4gXG4tXHRrZnJlZShybSk7XG4mIzQzO1x0cmRzX21lc3NhZ2VfZnJlZShybSk7XG4gfVxuIFxuIHZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG5AQCAtMjE3LDcgJiM0MzsyMjksNyBAQCB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHRrZnJlZShybSk7XG4mIzQzO1x0XHRyZHNfbWVzc2FnZV9mcmVlKHJtKTtcbiBcdH1cbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocmRzX21lc3NhZ2VfcHV0KTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaFxuaW5kZXggMmRiNDk1NzNkYWNkNS4uMzU3NjBkZDZiMDc3ZiAxMDA2NDRcbi0tLSBhL25ldC9yZHMvcmRzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRzLmhcbkBAIC04OSw3ICYjNDM7ODksNiBAQCBlbnVtIHtcbiAjZGVmaW5lIFJEU19SRUNPTk5FQ1RfUEVORElOR1x0MVxuICNkZWZpbmUgUkRTX0lOX1hNSVRcdFx0MlxuICNkZWZpbmUgUkRTX1JFQ1ZfUkVGSUxMXHRcdDNcbi0jZGVmaW5lXHRSRFNfREVTVFJPWV9QRU5ESU5HXHQ0XG4gXG4gLyogTWF4IG51bWJlciBvZiBtdWx0aXBhdGhzIHBlciBSRFMgY29ubmVjdGlvbi4gTXVzdCBiZSBhIHBvd2VyIG9mIDIgKi9cbiAjZGVmaW5lXHRSRFNfTVBBVEhfV09SS0VSU1x0OFxuQEAgLTEzOCw2ICYjNDM7MTM3LDEyIEBAIHN0cnVjdCByZHNfY29ubl9wYXRoIHtcbiAvKiBPbmUgcmRzX2Nvbm5lY3Rpb24gcGVyIFJEUyBhZGRyZXNzIHBhaXIgKi9cbiBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24ge1xuIFx0c3RydWN0IGhsaXN0X25vZGVcdGNfaGFzaF9ub2RlO1xuJiM0MztcdC8qIEZyZWUgb2YgdGhlIGNvbm5lY3Rpb24gbWVtb3J5IChub3QgdGhlIHRlYXJkb3duIG9mIGl0c1xuJiM0MztcdCAqIHRyYW5zcG9ydCBzdGF0ZSAtIHRoYXQgc3RheXMgc3luY2hyb25vdXMgaW5cbiYjNDM7XHQgKiByZHNfY29ubl9kZXN0cm95KCkpIGlzIGRlZmVycmVkIHVudGlsIHRoZSBsYXN0IHJlZmVyZW5jZSBpc1xuJiM0MztcdCAqIGRyb3BwZWQgdmlhIHJkc19jb25uX3B1dCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBrcmVmXHRcdGNfcmVmY291bnQ7XG4gXHRzdHJ1Y3QgaW42X2FkZHJcdFx0Y19sYWRkcjtcbiBcdHN0cnVjdCBpbjZfYWRkclx0XHRjX2ZhZGRyO1xuIFx0aW50XHRcdFx0Y19kZXZfaWY7IC8qIGlmaW5kZXggdXNlZCBmb3IgdGhpcyBjb25uICovXG5AQCAtMTQ4LDYgJiM0MzsxNTMsMTAgQEAgc3RydWN0IHJkc19jb25uZWN0aW9uIHtcbiBcdFx0XHRcdGNfcGFkX3RvXzMyOjI5O1xuIFx0aW50XHRcdFx0Y19ucGF0aHM7XG4gXHRib29sXHRcdFx0Y193aXRoX3Nwb3J0X2lkeDtcbiYjNDM7XHQvKiBTZXQgKHVuZGVyIFJDVSkgd2hlbiByZHNfY29ubl9kZXN0cm95KCkgc3RhcnRzIG9uIHRoaXMgY29ubjtcbiYjNDM7XHQgKiByZWFkIHRocm91Z2ggcmRzX2Rlc3Ryb3lfcGVuZGluZygpLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2xcdFx0XHRjX2Rlc3Ryb3lfaW5fcHJvZztcbiBcdHN0cnVjdCByZHNfY29ubmVjdGlvblx0KmNfcGFzc2l2ZTtcbiBcdHN0cnVjdCByZHNfdHJhbnNwb3J0XHQqY190cmFucztcbiBcbkBAIC01NDQsNiAmIzQzOzU1MywxMiBAQCBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCB7XG4gXHR1bnNpZ25lZCBpbnRcdFx0dF9wcmVmZXJfbG9vcGJhY2s6MSxcbiBcdFx0XHRcdHRfbXBfY2FwYWJsZToxO1xuIFx0dW5zaWduZWQgaW50XHRcdHRfdHlwZTtcbiYjNDM7XHQvKiBDb25uZWN0aW9ucyBvZiB0aGlzIHRyYW5zcG9ydCBub3QgeWV0IGZyZWVkOyBmcmVlaW5nIHJ1bnNcbiYjNDM7XHQgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYVxuJiM0MztcdCAqIGNvbm5lY3Rpb24sIHNvIHRyYW5zcG9ydCBtb2R1bGUgdW5sb2FkIGhhcyB0byB3YWl0IGZvciB0aGlzXG4mIzQzO1x0ICogdG8gcmVhY2ggemVybyAocmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZCgpKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhdG9taWNfdFx0XHR0X2Nvbm5fY291bnQ7XG4gXG4gXHRpbnQgKCpsYWRkcl9jaGVjaykoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsXG4gXHRcdFx0ICAgX191MzIgc2NvcGVfaWQpO1xuQEAgLTgxOSw2ICYjNDM7ODM0LDExIEBAIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHR1OCB0b3MsIGdmcF90IGdmcCwgaW50IGRldl9pZik7XG4gdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3BhdGgpO1xuIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuJiM0Mzt2b2lkIHJkc19jb25uX2dldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuJiM0Mzt2b2lkIHJkc19jb25uX3B1dChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuJiM0MzsvKiBob3cgbG9uZyB0cmFuc3BvcnQgdW5sb2FkIHdhaXRzIGZvciBpdHMgY29ubmVjdGlvbnMgdG8gYmUgZnJlZWQgKi9cbiYjNDM7I2RlZmluZSBSRFNfQ09OTl9GUkVFX1RJTUVPVVRfTVNcdDEwMDAwXG4mIzQzO3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpO1xuIHZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIHZvaWQgcmRzX2Nvbm5fcGF0aF9kcm9wKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCwgYm9vbCBkZXN0cm95KTtcbiB2b2lkIHJkc19jb25uX2Nvbm5lY3RfaWZfZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuQEAgLTk5NCw3ICYjNDM7MTAxNCw4IEBAIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgcmRzX2Rlc3Ryb3lfcGVuZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0cmV0dXJuICFjaGVja19uZXQocmRzX2Nvbm5fbmV0KGNvbm4pKSB8fFxuJiM0MztcdHJldHVybiBSRUFEX09OQ0UoY29ubi1cdTAwM2VjX2Rlc3Ryb3lfaW5fcHJvZykgfHxcbiYjNDM7XHQgICAgICAgIWNoZWNrX25ldChyZHNfY29ubl9uZXQoY29ubikpIHx8XG4gXHQgICAgICAgKGNvbm4tXHUwMDNlY190cmFucy1cdTAwM2V0X3VubG9hZGluZyBcdTAwMjZcdTAwMjYgY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfdW5sb2FkaW5nKGNvbm4pKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZWN2LmMgYi9uZXQvcmRzL3JlY3YuY1xuaW5kZXggNjIwNGU1NzdhOTBhZS4uYjAzMWMwYjQzYWY4MyAxMDA2NDRcbi0tLSBhL25ldC9yZHMvcmVjdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3JlY3YuY1xuQEAgLTQ2LDYgJiM0Mzs0Niw3IEBAIHZvaWQgcmRzX2luY19pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLFxuIHtcbiBcdHJlZmNvdW50X3NldChcdTAwMjZpbmMtXHUwMDNlaV9yZWZjb3VudCwgMSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbmMtXHUwMDNlaV9pdGVtKTtcbiYjNDM7XHRyZHNfY29ubl9nZXQoY29ubik7XHQvKiBwdXQgaW4gcmRzX2luY19wdXQoKSAqL1xuIFx0aW5jLVx1MDAzZWlfY29ubiA9IGNvbm47XG4gXHRpbmMtXHUwMDNlaV9jb25uX3BhdGggPSBOVUxMO1xuIFx0aW5jLVx1MDAzZWlfc2FkZHIgPSAqc2FkZHI7XG5AQCAtNjEsNiAmIzQzOzYyLDcgQEAgdm9pZCByZHNfaW5jX3BhdGhfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCxcbiB7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2aW5jLVx1MDAzZWlfcmVmY291bnQsIDEpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5jLVx1MDAzZWlfaXRlbSk7XG4mIzQzO1x0cmRzX2Nvbm5fZ2V0KGNwLVx1MDAzZWNwX2Nvbm4pO1x0LyogcHV0IGluIHJkc19pbmNfcHV0KCkgKi9cbiBcdGluYy1cdTAwM2VpX2Nvbm4gPSBjcC1cdTAwM2VjcF9jb25uO1xuIFx0aW5jLVx1MDAzZWlfY29ubl9wYXRoID0gY3A7XG4gXHRpbmMtXHUwMDNlaV9zYWRkciA9ICpzYWRkcjtcbkBAIC04MSw5ICYjNDM7ODMsMTkgQEAgdm9pZCByZHNfaW5jX3B1dChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpXG4ge1xuIFx0cmRzZGVidWcoXCYjMzQ7cHV0IGluYyAlcCByZWYgJWRcXG5cJiMzNDssIGluYywgcmVmY291bnRfcmVhZChcdTAwMjZpbmMtXHUwMDNlaV9yZWZjb3VudCkpO1xuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZpbmMtXHUwMDNlaV9yZWZjb3VudCkpIHtcbiYjNDM7XHRcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGluYy1cdTAwM2VpX2Nvbm47XG4mIzQzO1xuIFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2aW5jLVx1MDAzZWlfaXRlbSkpO1xuIFxuLVx0XHRpbmMtXHUwMDNlaV9jb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNlaW5jX2ZyZWUoaW5jKTtcbiYjNDM7XHRcdC8qIGluY19mcmVlKCkgY2FuIGZyZWUgdGhlIG1lbW9yeSBAaW5jIGxpdmVzIGluLCBzbyB0aGVcbiYjNDM7XHRcdCAqIGNvbm5lY3Rpb24gcmVmZXJlbmNlIGhhcyB0byBiZSBkcm9wcGVkIHRocm91Z2ggdGhlXG4mIzQzO1x0XHQgKiBjb3B5IHRha2VuIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNlaW5jX2ZyZWUoaW5jKTtcbiYjNDM7XHRcdC8qIGdldCBpbiByZHNfaW5jX2luaXQoKSwgcmRzX2luY19wYXRoX2luaXQoKSBvclxuJiM0MztcdFx0ICogcmRzX3JlY3ZfaW5jb21pbmcoKVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZHNfY29ubl9wdXQoY29ubik7XG4gXHR9XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19pbmNfcHV0KTtcbkBAIC0zMjUsNiAmIzQzOzMzNywxMyBAQCB2b2lkIHJkc19yZWN2X2luY29taW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IGluNl9hZGRyICpzYWRkcixcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7XG4gXG4mIzQzO1x0LyogZXZlcnkgY2FsbGVyIGluaXRpYWxpemVkIEBpbmMgd2l0aCByZHNfaW5jX2luaXQoKSBvclxuJiM0MztcdCAqIHJkc19pbmNfcGF0aF9pbml0KCkgZmlyc3QsIHNvIGlfY29ubiBhbHJlYWR5IGhvbGRzIGEgcmVmZXJlbmNlLlxuJiM0MztcdCAqIFRha2UgdGhlIG5ldyBvbmUgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQsIHNvIHRoYXQgcmUtcG9pbnRpbmcgYW5cbiYjNDM7XHQgKiBpbmMgYXQgdGhlIGNvbm5lY3Rpb24gaXQgYWxyZWFkeSByZWZlcnMgdG8gY2Fubm90IGZyZWUgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xuJiM0MztcdHJkc19jb25uX3B1dChpbmMtXHUwMDNlaV9jb25uKTtcbiBcdGluYy1cdTAwM2VpX2Nvbm4gPSBjb25uO1xuIFx0aW5jLVx1MDAzZWlfcnhfamlmZmllcyA9IGppZmZpZXM7XG4gXHRpZiAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSlcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxYWZhOTgxZTVjMDZkLi4wNDVlYjNjM2Y5NzcyIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMjkwLDYgJiM0MzsyOTAsNyBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRcdFx0fVxuIFx0XHRcdHJtLVx1MDAzZWRhdGEub3BfYWN0aXZlID0gMTtcbiBcdFx0XHRybS1cdTAwM2VtX2luYy5pX2Nvbm5fcGF0aCA9IGNwO1xuJiM0MztcdFx0XHRyZHNfY29ubl9nZXQoY3AtXHUwMDNlY3BfY29ubik7XHQvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi9cbiBcdFx0XHRybS1cdTAwM2VtX2luYy5pX2Nvbm4gPSBjcC1cdTAwM2VjcF9jb25uO1xuIFxuIFx0XHRcdGNwLVx1MDAzZWNwX3htaXRfcm0gPSBybTtcbkBAIC05NDcsNiAmIzQzOzk0OCw3IEBAIHN0YXRpYyBpbnQgcmRzX3NlbmRfcXVldWVfcm0oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLFxuIFx0XHQvKiBUaGUgY29kZSBvcmRlcmluZyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IHdlJiMzOTtyZVxuIFx0XHQgICB0cnlpbmcgdG8gbWluaW1pemUgdGhlIHRpbWUgd2UgaG9sZCBjX2xvY2sgKi9cbiBcdFx0cmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKFx1MDAyNnJtLVx1MDAzZW1faW5jLmlfaGRyLCBzcG9ydCwgZHBvcnQsIDApO1xuJiM0MztcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1x0LyogcHV0IGluIHJkc19tZXNzYWdlX3B1dCgpICovXG4gXHRcdHJtLVx1MDAzZW1faW5jLmlfY29ubiA9IGNvbm47XG4gXHRcdHJtLVx1MDAzZW1faW5jLmlfY29ubl9wYXRoID0gY3A7XG4gXHRcdHJkc19tZXNzYWdlX2FkZHJlZihybSk7XG5AQCAtMTE1OSwxMyAmIzQzOzExNjEsMTQgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuIFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgdXNpbiwgbXNnLVx1MDAzZW1zZ19uYW1lKTtcbiBcdF9fYmUxNiBkcG9ydDtcbiBcdHN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBOVUxMO1xuLVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uO1xuJiM0MztcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdGludCBxdWV1ZWQgPSAwLCBhbGxvY2F0ZWRfbXIgPSAwO1xuIFx0aW50IG5vbmJsb2NrID0gbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUO1xuIFx0bG9uZyB0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG5vbmJsb2NrKTtcbiBcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aDtcbiBcdHN0cnVjdCBpbjZfYWRkciBkYWRkcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0X191MzIgc2NvcGVfaWQgPSAwO1xuIFx0c2l6ZV90IHJkbWFfcGF5bG9hZF9sZW4gPSAwO1xuIFx0Ym9vbCB6Y29weSA9ICgobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1pFUk9DT1BZKSBcdTAwMjZcdTAwMjZcbkBAIC0xMzQwLDExICYjNDM7MTM0MywyOSBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXG4gXHRybS1cdTAwM2VtX2RhZGRyID0gZGFkZHI7XG4gXG4gXHQvKiByZHNfY29ubl9jcmVhdGUgaGFzIGEgc3BpbmxvY2sgdGhhdCBydW5zIHdpdGggSVJRIG9mZi5cbi1cdCAqIENhY2hpbmcgdGhlIGNvbm4gaW4gdGhlIHNvY2tldCBoZWxwcyBhIGxvdC4gKi9cbi1cdGlmIChycy1cdTAwM2Vyc19jb25uIFx1MDAyNlx1MDAyNiBpcHY2X2FkZHJfZXF1YWwoXHUwMDI2cnMtXHUwMDNlcnNfY29ubi1cdTAwM2VjX2ZhZGRyLCBcdTAwMjZkYWRkcikgXHUwMDI2XHUwMDI2XG4tXHQgICAgcnMtXHUwMDNlcnNfdG9zID09IHJzLVx1MDAzZXJzX2Nvbm4tXHUwMDNlY190b3MpIHtcbi1cdFx0Y29ubiA9IHJzLVx1MDAzZXJzX2Nvbm47XG4mIzQzO1x0ICogQ2FjaGluZyB0aGUgY29ubiBpbiB0aGUgc29ja2V0IGhlbHBzIGEgbG90LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIGNhY2hlZCByc19jb25uIGhvbGRzIGEgY29ubmVjdGlvbiByZWZlcmVuY2U7IHRha2Ugb25lIG9mXG4mIzQzO1x0ICogb3VyIG93biBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgY2FsbCAoZHJvcHBlZCBvbiBib3RoIGV4aXRcbiYjNDM7XHQgKiBwYXRocyksIHNvIHRoYXQgbmVpdGhlciBhIGNvbmN1cnJlbnQgc2VuZGVyIHJlcGxhY2luZyB0aGVcbiYjNDM7XHQgKiBjYWNoZSBub3IgcmRzX2Nvbm5fZGVzdHJveSgpIGNhbiBmcmVlIHRoZSBjb25uZWN0aW9uIHVuZGVyXG4mIzQzO1x0ICogdXMuICBBIGNhY2hlZCBjb25uZWN0aW9uIHdob3NlIGRlc3RydWN0aW9uIGhhcyBiZWd1biBpcyBub3RcbiYjNDM7XHQgKiByZXVzZWQ6IGRyb3BwaW5nIGl0IGhlcmUgbGV0cyB0aGUgbmV4dCBzZW5kbXNnIGxvb2sgdXAgb3JcbiYjNDM7XHQgKiBjcmVhdGUgYSBsaXZlIG9uZSBpbnN0ZWFkIG9mIHJldHVybmluZyAtRUFHQUlOIGZvcmV2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cnMtXHUwMDNlcnNfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGNvbm4gPSBycy1cdTAwM2Vyc19jb25uO1xuJiM0MztcdGlmIChjb25uIFx1MDAyNlx1MDAyNiBpcHY2X2FkZHJfZXF1YWwoXHUwMDI2Y29ubi1cdTAwM2VjX2ZhZGRyLCBcdTAwMjZkYWRkcikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHJzLVx1MDAzZXJzX3RvcyA9PSBjb25uLVx1MDAzZWNfdG9zIFx1MDAyNlx1MDAyNiAhcmRzX2Rlc3Ryb3lfcGVuZGluZyhjb25uKSkge1xuJiM0MztcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdGNvbm4gPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnJzLVx1MDAzZXJzX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjb25uKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKm9sZDtcbiYjNDM7XG4gXHRcdGNvbm4gPSByZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoc29ja19uZXQoc29jay1cdTAwM2VzayksXG4gXHRcdFx0XHRcdFx0XHUwMDI2cnMtXHUwMDNlcnNfYm91bmRfYWRkciwgXHUwMDI2ZGFkZHIsXG4gXHRcdFx0XHRcdFx0cnMtXHUwMDNlcnNfdHJhbnNwb3J0LCBycy1cdTAwM2Vyc190b3MsXG5AQCAtMTM1Miw5ICYjNDM7MTM3MywxNyBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXG4gXHRcdFx0XHRcdFx0c2NvcGVfaWQpO1xuIFx0XHRpZiAoSVNfRVJSKGNvbm4pKSB7XG4gXHRcdFx0cmV0ID0gUFRSX0VSUihjb25uKTtcbiYjNDM7XHRcdFx0Y29ubiA9IE5VTEw7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiYjNDM7XHRcdC8qIGhhbmQgdGhlIGNhY2hlIGl0cyBvd24gcmVmZXJlbmNlICovXG4mIzQzO1x0XHRyZHNfY29ubl9nZXQoY29ubik7XG4mIzQzO1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZycy1cdTAwM2Vyc19sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRvbGQgPSBycy1cdTAwM2Vyc19jb25uO1xuIFx0XHRycy1cdTAwM2Vyc19jb25uID0gY29ubjtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cnMtXHUwMDNlcnNfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKG9sZClcbiYjNDM7XHRcdFx0cmRzX2Nvbm5fcHV0KG9sZCk7XG4gXHR9XG4gXG4gXHRpZiAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSkge1xuQEAgLTE0NjksNiAmIzQzOzE0OTgsOCBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXG4gXHRcdGtmcmVlKHZjdC52ZWNbaW5kXS5pb3YpO1xuIFx0a2ZyZWUodmN0LnZlYyk7XG4gXG4mIzQzO1x0cmRzX2Nvbm5fcHV0KGNvbm4pO1xuJiM0MztcbiBcdHJldHVybiBwYXlsb2FkX2xlbjtcbiBcbiBvdXQ6XG5AQCAtMTQ3Niw2ICYjNDM7MTUwNyw5IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbiBcdFx0a2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7XG4gXHRrZnJlZSh2Y3QudmVjKTtcbiBcbiYjNDM7XHRpZiAoY29ubilcbiYjNDM7XHRcdHJkc19jb25uX3B1dChjb25uKTtcbiYjNDM7XG4gXHQvKiBJZiB0aGUgdXNlciBpbmNsdWRlZCBhIFJETUFfTUFQIGNtc2csIHdlIGFsbG9jYXRlZCBhIE1SIG9uIHRoZSBmbHkuXG4gXHQgKiBJZiB0aGUgc2VuZG1zZyBnb2VzIHRocm91Z2gsIHdlIGtlZXAgdGhlIE1SLiBJZiBpdCBmYWlscyB3aXRoIEVBR0FJTlxuIFx0ICogb3IgaW4gYW55IG90aGVyIHdheSwgd2UgbmVlZCB0byBkZXN0cm95IHRoZSBNUiBhZ2FpbiAqL1xuQEAgLTE1MjIsNiAmIzQzOzE1NTYsNyBAQCByZHNfc2VuZF9wcm9iZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AsIF9fYmUxNiBzcG9ydCxcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cm0tXHUwMDNlbV9jb25uX2l0ZW0sIFx1MDAyNmNwLVx1MDAzZWNwX3NlbmRfcXVldWUpO1xuIFx0c2V0X2JpdChSRFNfTVNHX09OX0NPTk4sIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpO1xuIFx0cmRzX21lc3NhZ2VfYWRkcmVmKHJtKTtcbiYjNDM7XHRyZHNfY29ubl9nZXQoY3AtXHUwMDNlY3BfY29ubik7XHQvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi9cbiBcdHJtLVx1MDAzZW1faW5jLmlfY29ubiA9IGNwLVx1MDAzZWNwX2Nvbm47XG4gXHRybS1cdTAwM2VtX2luYy5pX2Nvbm5fcGF0aCA9IGNwO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jXG5pbmRleCA3NzRhNzFmODhkMzc1Li4yNjg1ZWUyMWEyMmQxIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy90Y3AuY1xuQEAgLTgwNSw2ICYjNDM7ODA1LDcgQEAgc3RhdGljIHZvaWQgcmRzX3RjcF9leGl0KHZvaWQpXG4gI2VuZGlmXG4gXHR1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoXHUwMDI2cmRzX3RjcF9uZXRfb3BzKTtcbiBcdHJkc190Y3BfZGVzdHJveV9jb25ucygpO1xuJiM0MztcdHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoXHUwMDI2cmRzX3RjcF90cmFuc3BvcnQpO1xuIFx0cmRzX3RyYW5zX3VucmVnaXN0ZXIoXHUwMDI2cmRzX3RjcF90cmFuc3BvcnQpO1xuIFx0cmRzX3RjcF9yZWN2X2V4aXQoKTtcbiBcdGttZW1fY2FjaGVfZGVzdHJveShyZHNfdGNwX2Nvbm5fc2xhYik7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuaW5kZXggMTNmYTYwYzE5ODViYi4uMGQyY2VkODkyYThhZSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvdGNwX2xpc3Rlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuQEAgLTE1Myw3ICYjNDM7MTUzLDcgQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bilcbiB7XG4gXHRzdHJ1Y3Qgc29ja2V0ICpsaXN0ZW5fc29jayA9IHJ0bi1cdTAwM2VyZHNfdGNwX2xpc3Rlbl9zb2NrO1xuIFx0c3RydWN0IHNvY2tldCAqbmV3X3NvY2sgPSBOVUxMO1xuLVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uO1xuJiM0MztcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7XG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcbiBcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnJzX3RjcCA9IE5VTEw7XG5AQCAtMjI5LDYgJiM0MzsyMjksNyBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuIFxuIFx0aWYgKElTX0VSUihjb25uKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKGNvbm4pO1xuJiM0MztcdFx0Y29ubiA9IE5VTEw7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0LyogQW4gaW5jb21pbmcgU1lOIHJlcXVlc3QgY2FtZSBpbiwgYW5kIFRDUCBqdXN0IGFjY2VwdGVkIGl0LlxuQEAgLTM0Myw2ICYjNDM7MzQ0LDggQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bilcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJzX3RjcC1cdTAwM2V0X2Nvbm5fcGF0aF9sb2NrKTtcbiBcdGlmIChuZXdfc29jaylcbiBcdFx0c29ja19yZWxlYXNlKG5ld19zb2NrKTtcbiYjNDM7XHRpZiAoY29ubilcbiYjNDM7XHRcdHJkc19jb25uX3B1dChjb25uKTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZydG4tXHUwMDNlcmRzX3RjcF9hY2NlcHRfbG9jayk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkRTJiMzNDssCiAgICAmIzM0O1JEU19UQ1AmIzM0OywKICAgICYjMzQ7UkRTX1JETUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3Jkc19jb25uX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9kZXN0cm95JiMzNDssCiAgICAmIzM0O3Jkc19jb25uX2Rlc3Ryb3lfZmluaSYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9nZXQmIzM0OywKICAgICYjMzQ7cmRzX2Nvbm5fcHV0JiMzNDssCiAgICAmIzM0O3Jkc19jb25uX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyZHNfcmVjdl9pbmNvbWluZyYjMzQ7LAogICAgJiMzNDtyZHNfaW5jX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfbWVzc2FnZV9mcmVlJiMzNDssCiAgICAmIzM0O3Jkc190Y3BfYWNjZXB0X29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyAoa3JlZikgdG8gc3RydWN0IHJkc19jb25uZWN0aW9uIChjX3JlZmNvdW50KSB0byBwcm9wZXJseSBtYW5hZ2UgY29ubmVjdGlvbiBsaWZldGltZXMgYW5kIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucy4gSXQgcmVmYWN0b3JzIGNvbm5lY3Rpb24gdGVhcmRvd24gaW50byBzeW5jaHJvbm91cyBxdWllc2NlIChyZHNfY29ubl9wYXRoX3F1aWVzY2UsIHJkc19jb25uX2Rlc3Ryb3kpIGFuZCBhc3luY2hyb25vdXMgZGVzdHJ1Y3Rpb24gKHJkc19jb25uX2Rlc3Ryb3lfZmluaSksIGFuZCB1cGRhdGVzIHJlZmVyZW5jZSB0cmFja2luZyBhY3Jvc3Mgc29ja2V0IHJlbGVhc2UsIG1lc3NhZ2UgcXVldWVzLCByZWN2L3NlbmQgcGF0aHMsIGFuZCB0cmFuc3BvcnRzIChUQ1AsIGxvb3AsIElCKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgbG9naWMsIHN5bmNocm9uaXphdGlvbiwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGluIG5ldC9yZHMsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDAxNWUxODZlNTRlMzU5M2RmNmZmYTAwNzMxYWVhMDlhOTE4YWQyMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTU6NTY6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuYwppbmRleCBkNWRlZmU5MTcyZTM2Li4wZWFhNWI5NzY1NzI0IDEwMDY0NAotLS0gYS9uZXQvcmRzL2FmX3Jkcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvYWZfcmRzLmMKQEAgLTgwLDYgJiM0Mzs4MCwxNCBAQCBzdGF0aWMgaW50IHJkc19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAJcmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIE5VTEwpOwogCXJkc19ub3RpZnlfbXNnX3pjb3B5X3B1cmdlKCZhbXA7cnMtJmd0O3JzX3pjb29raWVfcXVldWUpOwogCiYjNDM7CS8qIGRyb3AgdGhlIGNhY2hlZCBjb25uZWN0aW9uIHJlZmVyZW5jZTsgbm8gc2VuZG1zZyBjYW4gcmFjZQomIzQzOwkgKiB3aXRoIHVzIGhlcmUsIHRoZSBzb2NrZXQgaXMgZ29pbmcgYXdheQomIzQzOwkgKi8KJiM0MzsJaWYgKHJzLSZndDtyc19jb25uKSB7CiYjNDM7CQlyZHNfY29ubl9wdXQocnMtJmd0O3JzX2Nvbm4pOwomIzQzOwkJcnMtJmd0O3JzX2Nvbm4gPSBOVUxMOwomIzQzOwl9CiYjNDM7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7cmRzX3NvY2tfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmYW1wO3JzLSZndDtyc19pdGVtKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3Jkc19zb2NrX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwppbmRleCBiNmM0YmViNTBlYWYwLi4yYzhjYTU0YTkxY2E4IDEwMDY0NAotLS0gYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwpAQCAtNDcsNyAmIzQzOzQ3LDggQEAKIAogLyogY29udmVydGluZyB0aGlzIHRvIFJDVSBpcyBhIGNob3JlIGZvciBhbm90aGVyIGRheS4uICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25uX2xvY2spOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2Nvbm5fY291bnQ7CiYjNDM7Lyogd29rZW4gd2hlbmV2ZXIgYSB0cmFuc3BvcnQmIzM5O3MgdF9jb25uX2NvdW50IGRyb3BzIHRvIHplcm8gKi8KJiM0MztzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2Nvbm5fZnJlZWRfd2FpdHEpOwogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIHJkc19jb25uX2hhc2hbUkRTX0NPTk5FQ1RJT05fSEFTSF9FTlRSSUVTXTsKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2Nvbm5fc2xhYjsKIApAQCAtNzksNyAmIzQzOzgwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqcmRzX2Nvbm5fYnVja2V0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsCiAJCXZhciB8PSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfIyNzdWZmaXg7CVwKIH0gd2hpbGUgKDApCiAKLS8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrICovCiYjNDM7LyogcmN1IHJlYWQgbG9jayBtdXN0IGJlIGhlbGQgb3IgdGhlIGNvbm5lY3Rpb24gc3BpbmxvY2suCiYjNDM7ICogT24gc3VjY2VzcyBhIHJlZmVyZW5jZSBpcyB0YWtlbiBvbiB0aGUgcmV0dXJuZWQgY29ubmVjdGlvbjsgdGhlCiYjNDM7ICogY2FsbGVyIG11c3QgZHJvcCBpdCB3aXRoIHJkc19jb25uX3B1dCgpLgomIzQzOyAqLwogc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsCiAJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsCkBAIC05Niw2ICYjNDM7MTAwLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCiAJCSAgICBjb25uLSZndDtjX3RvcyA9PSB0b3MgJmFtcDsmYW1wOwogCQkgICAgbmV0ID09IHJkc19jb25uX25ldChjb25uKSAmYW1wOyZhbXA7CiAJCSAgICBjb25uLSZndDtjX2Rldl9pZiA9PSBkZXZfaWYpIHsKJiM0MzsJCQkvKiBBbiBlbnRyeSB3aG9zZSByZWZjb3VudCBhbHJlYWR5IGRyb3BwZWQgdG8KJiM0MzsJCQkgKiB6ZXJvIGhhcyBiZWVuIHVuaGFzaGVkIGFuZCBpcyBhYm91dCB0byBiZQomIzQzOwkJCSAqIGZyZWVkOyBhbiBSQ1UgdHJhdmVyc2FsIG1heSBzdGlsbCBjb21lCiYjNDM7CQkJICogYWNyb3NzIGl0LiAgVHJlYXQgaXQgYXMgYWJzZW50LgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtjb25uLSZndDtjX3JlZmNvdW50KSkKJiM0MzsJCQkJY29udGludWU7CiAJCQlyZXQgPSBjb25uOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE5Nyw3ICYjNDM7MjA4LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJICogV2UgbmVlZCBhIHNlY29uZCBjb25uZWN0aW9uIG9iamVjdCBpbnRvIHdoaWNoIHdlCiAJCSAqIGNhbiBzdGljayB0aGUgb3RoZXIgUVAuICovCiAJCXBhcmVudCA9IGNvbm47CiYjNDM7CQkvKiBUaGUgY19wYXNzaXZlIHBvaW50ZXIgaG9sZHMgYSByZWZlcmVuY2Ugd2hpY2ggaXMgb25seQomIzQzOwkJICogZHJvcHBlZCBvbmUgc3luY2hyb25pemVfcmN1KCkgYWZ0ZXIgdGhlIHBvaW50ZXIgaXMKJiM0MzsJCSAqIGNsZWFyZWQsIHNvIHdpdGhpbiB0aGlzIFJDVSBzZWN0aW9uIGEgZmV0Y2hlZCBwb2ludGVyCiYjNDM7CQkgKiBpcyBhbHdheXMgc2FmZSB0byB0YWtlIGEgcmVmZXJlbmNlIG9uLgomIzQzOwkJICovCiAJCWNvbm4gPSBwYXJlbnQtJmd0O2NfcGFzc2l2ZTsKJiM0MzsJCWlmIChjb25uKQomIzQzOwkJCXJkc19jb25uX2dldChjb25uKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKGNvbm4pCkBAIC0yMTUsNiAmIzQzOzIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJZ290byBvdXQ7CiAJfQogCiYjNDM7CWtyZWZfaW5pdCgmYW1wO2Nvbm4tJmd0O2NfcmVmY291bnQpOwogCUlOSVRfSExJU1RfTk9ERSgmYW1wO2Nvbm4tJmd0O2NfaGFzaF9ub2RlKTsKIAljb25uLSZndDtjX2xhZGRyID0gKmxhZGRyOwogCWNvbm4tJmd0O2NfaXN2NiA9ICFpcHY2X2FkZHJfdjRtYXBwZWQobGFkZHIpOwpAQCAtMjgyLDggJiM0MzszMDEsOSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICBpc19vdXRnb2luZyk7CiAJCWNvbm4tJmd0O2NfcGF0aFtpXS5jcF9pbmRleCA9IGk7CiAJCWNvbm4tJmd0O2NfcGF0aFtpXS5jcF93cSA9Ci0JCQlhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgmIzM0O2tyZHNfY3Bfd3EjJWx1LyVkJiMzNDssIDAsCi0JCQkJCQlyZHNfY29ubl9jb3VudCwgaSk7CiYjNDM7CQkJYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoJiMzNDtrcmRzX2NwX3dxIyVkLyVkJiMzNDssIDAsCiYjNDM7CQkJCQkJYXRvbWljX3JlYWQoJmFtcDt0cmFucy0mZ3Q7dF9jb25uX2NvdW50KSwKJiM0MzsJCQkJCQlpKTsKIAkJaWYgKCFjb25uLSZndDtjX3BhdGhbaV0uY3Bfd3EpCiAJCQljb25uLSZndDtjX3BhdGhbaV0uY3Bfd3EgPSByZHNfd3E7CiAJfQpAQCAtMzE1LDE1ICYjNDM7MzM1LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Jkc19jb25uX2xvY2ssIGZsYWdzKTsKIAlpZiAocGFyZW50KSB7CiAJCS8qIENyZWF0aW5nIHBhc3NpdmUgY29ubiAqLwotCQlpZiAocGFyZW50LSZndDtjX3Bhc3NpdmUpIHsKJiM0MzsJCWlmIChSRUFEX09OQ0UocGFyZW50LSZndDtjX2Rlc3Ryb3lfaW5fcHJvZykpIHsKJiM0MzsJCQkvKiBUaGUgcGFyZW50JiMzOTtzIGRlc3Ryb3kgaGFzIGJlZ3VuIChpdCBzZXRzIHRoZQomIzQzOwkJCSAqIGZsYWcgYW5kIHNuYXRjaGVzIGNfcGFzc2l2ZSB1bmRlciB0aGlzCiYjNDM7CQkJICogbG9jayk7IGRvIG5vdCBpbnN0YWxsIGEgbmV3IHBhc3NpdmUgY29ubgomIzQzOwkJCSAqIHRoYXQgbm90aGluZyB3b3VsZCBldmVyIGRlc3Ryb3kuCiYjNDM7CQkJICovCiYjNDM7CQkJdHJhbnMtJmd0O2Nvbm5fZnJlZShjb25uLSZndDtjX3BhdGhbMF0uY3BfdHJhbnNwb3J0X2RhdGEpOwomIzQzOwkJCWZyZWVfY3AgPSBjb25uLSZndDtjX3BhdGg7CiYjNDM7CQkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOwomIzQzOwkJCWNvbm4gPSBFUlJfUFRSKC1FTkVURE9XTik7CiYjNDM7CQl9IGVsc2UgaWYgKHBhcmVudC0mZ3Q7Y19wYXNzaXZlKSB7CiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KHBhcmVudC0mZ3Q7Y19wYXNzaXZlKTsKIAkJCXRyYW5zLSZndDtjb25uX2ZyZWUoY29ubi0mZ3Q7Y19wYXRoWzBdLmNwX3RyYW5zcG9ydF9kYXRhKTsKIAkJCWZyZWVfY3AgPSBjb25uLSZndDtjX3BhdGg7CiAJCQlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CiAJCQljb25uID0gcGFyZW50LSZndDtjX3Bhc3NpdmU7CiAJCX0gZWxzZSB7CiYjNDM7CQkJLyogVGhlIGluaXRpYWwgcmVmZXJlbmNlIGJlbG9uZ3MgdG8gd2hvZXZlcgomIzQzOwkJCSAqIGRlc3Ryb3lzIHRoZSBjb25uICh0aGUgdHJhbnNwb3J0JiMzOTtzIGNvbm4KJiM0MzsJCQkgKiBsaXN0cywgYXMgZm9yIGFueSBvdGhlciBjb25uKS4gIFRha2Ugb25lCiYjNDM7CQkJICogZm9yIHRoZSBjX3Bhc3NpdmUgcG9pbnRlciAtIGRyb3BwZWQgd2hlbgomIzQzOwkJCSAqIHRoZSBwYXJlbnQgaXMgZGVzdHJveWVkIC0gYW5kIG9uZSBmb3Igb3VyCiYjNDM7CQkJICogY2FsbGVyLgomIzQzOwkJCSAqLwomIzQzOwkJCXJkc19jb25uX2dldChjb25uKTsJLyogY19wYXNzaXZlICovCiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KGNvbm4pOwkvKiBjYWxsZXIgKi8KIAkJCXBhcmVudC0mZ3Q7Y19wYXNzaXZlID0gY29ubjsKIAkJCXJkc19jb25nX2FkZF9jb25uKGNvbm4pOwotCQkJcmRzX2Nvbm5fY291bnQmIzQzOyYjNDM7OwomIzQzOwkJCWF0b21pY19pbmMoJmFtcDtjb25uLSZndDtjX3RyYW5zLSZndDt0X2Nvbm5fY291bnQpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogQ3JlYXRpbmcgbm9ybWFsIGNvbm4gKi8KQEAgLTM1MCwxNSAmIzQzOzM5MCwyMSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCX0gZWxzZSB7CiAJCQljb25uLSZndDtjX215X2dlbl9udW0gPSByZHNfZ2VuX251bTsKIAkJCWNvbm4tJmd0O2NfcGVlcl9nZW5fbnVtID0gMDsKJiM0MzsJCQkvKiB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyCiYjNDM7CQkJICogZGVzdHJveXMgdGhlIGNvbm47IHRha2Ugb25lIGZvciBvdXIgY2FsbGVyCiYjNDM7CQkJICovCiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KGNvbm4pOwogCQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7Y29ubi0mZ3Q7Y19oYXNoX25vZGUsIGhlYWQpOwogCQkJcmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7Ci0JCQlyZHNfY29ubl9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CQkJYXRvbWljX2luYygmYW1wO2Nvbm4tJmd0O2NfdHJhbnMtJmd0O3RfY29ubl9jb3VudCk7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3Jkc19jb25uX2xvY2ssIGZsYWdzKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogb3V0OgomIzQzOwlpZiAocGFyZW50KQomIzQzOwkJcmRzX2Nvbm5fcHV0KHBhcmVudCk7CiAJaWYgKGZyZWVfY3ApIHsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IG5wYXRoczsgaSYjNDM7JiM0MzspCiAJCQlpZiAoZnJlZV9jcFtpXS5jcF93cSAhPSByZHNfd3EpCkBAIC01MTUsMTAgJiM0Mzs1NjEsMTIgQEAgdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCWNvbm4tJmd0O2NfdHJhbnMtJmd0O2Nvbm5fc2xvdHNfYXZhaWxhYmxlKGNvbm4sIGZhbHNlKTsKIH0KIAotLyogZGVzdHJveSBhIHNpbmdsZSByZHNfY29ubl9wYXRoLiByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlcgotICogYWxsIHBhdGhzIHVzaW5nIHJkc19jb25uX3BhdGhfZGVzdHJveSgpCiYjNDM7LyogcXVpZXNjZSBhIHNpbmdsZSByZHNfY29ubl9wYXRoOiBzaHV0IGl0IGRvd24gYW5kIHRlYXIgZG93biBhbnkKJiM0MzsgKiBxdWV1ZWQgbWVzc2FnZXMuICByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlciBhbGwgcGF0aHMgdXNpbmcKJiM0MzsgKiByZHNfY29ubl9wYXRoX3F1aWVzY2UoKTsgdGhlIHRyYW5zcG9ydCBzdGF0ZSBhbmQgdGhlIHdvcmtxdWV1ZSBhcmUKJiM0MzsgKiBmcmVlZCBsYXRlciwgZnJvbSByZHNfY29ubl9wYXRoX2ZyZWUoKS4KICAqLwotc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKJiM0MztzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3F1aWVzY2Uoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogewogCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICpydG1wOwogCkBAIC01NDcsNiAmIzQzOzU5NSwxNiBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCVdBUk5fT04oZGVsYXllZF93b3JrX3BlbmRpbmcoJmFtcDtjcC0mZ3Q7Y3BfcmVjdl93KSk7CiAJV0FSTl9PTihkZWxheWVkX3dvcmtfcGVuZGluZygmYW1wO2NwLSZndDtjcF9jb25uX3cpKTsKIAlXQVJOX09OKHdvcmtfcGVuZGluZygmYW1wO2NwLSZndDtjcF9kb3duX3cpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZnJlZSBhIHF1aWVzY2VkIHJkc19jb25uX3BhdGgmIzM5O3MgdHJhbnNwb3J0IHN0YXRlIGFuZCB3b3JrcXVldWU7IHJ1bnMKJiM0MzsgKiBmcm9tIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgdGhlIGxhc3QgY29ubmVjdGlvbiByZWZlcmVuY2UgaXMKJiM0MzsgKiBkcm9wcGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZnJlZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiYjNDM7ewomIzQzOwlpZiAoIWNwLSZndDtjcF90cmFuc3BvcnRfZGF0YSkKJiM0MzsJCXJldHVybjsKIAogCWlmIChjcC0mZ3Q7Y3Bfd3EgIT0gcmRzX3dxKSB7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGNwLSZndDtjcF93cSk7CkBAIC01NTYsMTcgJiM0Mzs2MTQsNzQgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIAljcC0mZ3Q7Y3BfY29ubi0mZ3Q7Y190cmFucy0mZ3Q7Y29ubl9mcmVlKGNwLSZndDtjcF90cmFuc3BvcnRfZGF0YSk7CiB9CiAKJiM0MzsvKiBGcmVlIGEgY29ubmVjdGlvbi4gIFRoaXMgcnVucyBmcm9tIHJkc19jb25uX3B1dCgpIHdoZW4gdGhlIGxhc3QKJiM0MzsgKiByZWZlcmVuY2UgaXMgZHJvcHBlZCwgYWZ0ZXIgcmRzX2Nvbm5fZGVzdHJveSgpIGhhcyBxdWllc2NlZCB0aGUKJiM0MzsgKiBjb25uZWN0aW9uIGFuZCBkcm9wcGVkIHRoZSBpbml0aWFsIHJlZmVyZW5jZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByZHNfY29ubl9kZXN0cm95X2Zpbmkoc3RydWN0IGtyZWYgKmtyZWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJkc19jb25uZWN0aW9uLAomIzQzOwkJCQkJCSAgIGNfcmVmY291bnQpOwomIzQzOwlpbnQgbnBhdGhzID0gKGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7CiYjNDM7CXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucyA9IGNvbm4tJmd0O2NfdHJhbnM7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnBhdGhzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJkc19jb25uX3BhdGhfZnJlZSgmYW1wO2Nvbm4tJmd0O2NfcGF0aFtpXSk7CiYjNDM7CiYjNDM7CWtmcmVlKGNvbm4tJmd0O2NfcGF0aCk7CiYjNDM7CWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKJiM0MzsKJiM0MzsJLyogb25seSBhZnRlciBldmVyeXRoaW5nIHRoZSB0cmFuc3BvcnQgbW9kdWxlIG93bnMgaGFzIGJlZW4KJiM0MzsJICogZnJlZWQgYWJvdmUgbWF5IGl0cyB1bmxvYWQgcHJvY2VlZAomIzQzOwkgKi8KJiM0MzsJaWYgKCFhdG9taWNfZGVjX3JldHVybigmYW1wO3RyYW5zLSZndDt0X2Nvbm5fY291bnQpKQomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtyZHNfY29ubl9mcmVlZF93YWl0cSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFdhaXQgZm9yIGFsbCBvZiBAdHJhbnMmIzM5O3MgY29ubmVjdGlvbnMgdG8gYmUgZnJlZWQ7IHRoZSBmcmVlIHJ1bnMKJiM0MzsgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYSBjb25uZWN0aW9uLgomIzQzOyAqIENhbGxlZCBvbiB0cmFuc3BvcnQgbW9kdWxlIHVubG9hZCwgYWZ0ZXIgdGhlIHRyYW5zcG9ydCBkZXN0cm95ZWQKJiM0MzsgKiBhbGwgb2YgaXRzIGNvbm5lY3Rpb25zOiBhbnl0aGluZyBzdGlsbCBob2xkaW5nIGEgY29ubmVjdGlvbgomIzQzOyAqIHJlZmVyZW5jZSBhdCB0aGF0IHBvaW50IGlzIGEgc2hvcnQtbGl2ZWQgbG9va3VwLXN0eWxlIGhvbGRlciwgc28KJiM0MzsgKiBhIGJvdW5kZWQgd2FpdCBzdWZmaWNlcyAtIGJ1dCB3YXJuIGlmIGl0IGV4cGlyZXMsIHNpbmNlIHRoZSBmcmVlcwomIzQzOyAqIHRoYXQgZm9sbG93IHRoZSB1bmxvYWQgd2lsbCB0aGVuIHRvdWNoIGZyZWVkIG1vZHVsZSB0ZXh0LgomIzQzOyAqLwomIzQzO3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpCiYjNDM7ewomIzQzOwlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChyZHNfY29ubl9mcmVlZF93YWl0cSwKJiM0MzsJCQkJIWF0b21pY19yZWFkKCZhbXA7dHJhbnMtJmd0O3RfY29ubl9jb3VudCksCiYjNDM7CQkJCW1zZWNzX3RvX2ppZmZpZXMoUkRTX0NPTk5fRlJFRV9USU1FT1VUX01TKSkpCiYjNDM7CQlXQVJOKDEsICYjMzQ7UkRTLyVzOiAlZCBjb25uZWN0aW9uKHMpIG5vdCBmcmVlZFxuJiMzNDssCiYjNDM7CQkgICAgIHRyYW5zLSZndDt0X25hbWUsIGF0b21pY19yZWFkKCZhbXA7dHJhbnMtJmd0O3RfY29ubl9jb3VudCkpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKTsKJiM0MzsKJiM0Mzt2b2lkIHJkc19jb25uX2dldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiYjNDM7ewomIzQzOwlrcmVmX2dldCgmYW1wO2Nvbm4tJmd0O2NfcmVmY291bnQpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9nZXQpOwomIzQzOwomIzQzO3ZvaWQgcmRzX2Nvbm5fcHV0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKJiM0Mzt7CiYjNDM7CWtyZWZfcHV0KCZhbXA7Y29ubi0mZ3Q7Y19yZWZjb3VudCwgcmRzX2Nvbm5fZGVzdHJveV9maW5pKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcHV0KTsKJiM0MzsKIC8qCiAgKiBTdG9wIGFuZCBmcmVlIGEgY29ubmVjdGlvbi4KICAqCi0gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gdmVyeSBsaW1pdGVkIGNpcmN1bXN0YW5jZXMuICBJdCBhc3N1bWVzIHRoYXQgb25jZQotICogdGhlIGNvbm4gaGFzIGJlZW4gc2h1dGRvd24gdGhhdCBubyBvbmUgZWxzZSBpcyByZWZlcmVuY2luZyB0aGUgY29ubmVjdGlvbi4KLSAqIFdlIGNhbiBvbmx5IGVuc3VyZSB0aGlzIGluIHRoZSBybW1vZCBwYXRoIGluIHRoZSBjdXJyZW50IGNvZGUuCiYjNDM7ICogUXVpZXNjZXMgdGhlIGNvbm5lY3Rpb24gc3luY2hyb25vdXNseSAod29ya2VycyBjYW5jZWxsZWQsIHRyYW5zcG9ydAomIzQzOyAqIGNvbm5lY3Rpb25zIHNodXQgZG93biwgcXVldWVkIG1lc3NhZ2VzIGRyb3BwZWQpIGFuZCBkcm9wcyB0aGUKJiM0MzsgKiBpbml0aWFsIHJlZmVyZW5jZS4gIFRoZSBtZW1vcnkgLSBpbmNsdWRpbmcgdGhlIHRyYW5zcG9ydCYjMzk7cwomIzQzOyAqIHBlci1jb25uZWN0aW9uIHN0YXRlIGFuZCB0aGUgcGF0aCB3b3JrcXVldWVzIC0gaXMgZnJlZWQgb25jZSB0aGUKJiM0MzsgKiBsYXN0IHJkc19jb25uX3B1dCgpIHJ1bnMsIHdoaWNoIG1heSBiZSBhZnRlciB0aGlzIHJldHVybnMuCiAgKi8KIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKJiM0MzsJc3RydWN0IHJkc19jb25uZWN0aW9uICpwYXNzaXZlOwogCXN0cnVjdCByZHNfY29ubl9wYXRoICpjcDsKIAlpbnQgbnBhdGhzID0gKGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7CiAKQEAgLTU3NCwxNiAmIzQzOzY4OSw0NiBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQogCQkgJiMzNDslcEk0XG4mIzM0OywgY29ubiwgJmFtcDtjb25uLSZndDtjX2xhZGRyLAogCQkgJmFtcDtjb25uLSZndDtjX2ZhZGRyKTsKIAotCS8qIEVuc3VyZSBjb25uIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBmb3IgcmVjb25uZWN0ICovCiYjNDM7CS8qIE1ha2UgcmRzX2Rlc3Ryb3lfcGVuZGluZygpIHRydWUgZm9yIHRoaXMgY29ubi4gIFRvZ2V0aGVyIHdpdGgKJiM0MzsJICogdGhlIHN5bmNocm9uaXplX3JjdSgpIGJlbG93IHRoaXMgc3RvcHMgdGhlIHdvcmstcmVxdWV1ZWluZwomIzQzOwkgKiBzaXRlcyAod2hpY2ggYWxsIHRlc3QgcmRzX2Rlc3Ryb3lfcGVuZGluZygpIHVuZGVyCiYjNDM7CSAqIHJjdV9yZWFkX2xvY2soKSkgZnJvbSBxdWV1ZWluZyBuZXcgd29yayBvbiB0aGUgcGF0aAomIzQzOwkgKiB3b3JrcXVldWVzIG9uY2Ugd2Ugc3RhcnQgY2FuY2VsbGluZyBhbmQgZGVzdHJveWluZyB0aGVtLgomIzQzOwkgKgomIzQzOwkgKiBOb3cgdGhhdCB0aGUgdHJhbnNwb3J0IHN0YXRlIHN0YXlzIGRpc2NvdmVyYWJsZSAoZS5nLiBvbiB0aGUKJiM0MzsJICogdHJhbnNwb3J0cyYjMzk7IGNvbm5lY3Rpb24gbGlzdHMpIHVudGlsIHRoZSBmaW5hbCByZHNfY29ubl9wdXQoKSwKJiM0MzsJICogYSBjb25uIGNhbiBiZSBoYW5kZWQgdG8gcmRzX2Nvbm5fZGVzdHJveSgpIG1vcmUgdGhhbiBvbmNlIC0KJiM0MzsJICogZS5nLiBkcm9wcGVkIGZvciBhIHByb3RvY29sIHZlcnNpb24gbWlzbWF0Y2ggYW5kIHRoZW4gZm91bmQKJiM0MzsJICogYWdhaW4gYXQgbW9kdWxlIHVubG9hZC4gIE9ubHkgdGhlIGZpcnN0IGNhbGxlciBwcm9jZWVkczsgdGhlCiYjNDM7CSAqIHVuaGFzaCBhbHNvIGhhcHBlbnMgdW5kZXIgcmRzX2Nvbm5fbG9jaywgc28gYSBsb29rZWQtdXAgY29ubgomIzQzOwkgKiBjYW4gbmV2ZXIgYmUgcXVpZXNjZWQgdHdpY2UuCiYjNDM7CSAqLwogCXNwaW5fbG9ja19pcnEoJmFtcDtyZHNfY29ubl9sb2NrKTsKJiM0MzsJaWYgKGNvbm4tJmd0O2NfZGVzdHJveV9pbl9wcm9nKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnEoJmFtcDtyZHNfY29ubl9sb2NrKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlXUklURV9PTkNFKGNvbm4tJmd0O2NfZGVzdHJveV9pbl9wcm9nLCB0cnVlKTsKJiM0MzsKJiM0MzsJLyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi8KIAlobGlzdF9kZWxfaW5pdF9yY3UoJmFtcDtjb25uLSZndDtjX2hhc2hfbm9kZSk7CiYjNDM7CiYjNDM7CS8qIFNuYXRjaCBjX3Bhc3NpdmUgd2hpbGUgaG9sZGluZyB0aGUgbG9jazoKJiM0MzsJICogX19yZHNfY29ubl9jcmVhdGUoKSBkZXJlZmVyZW5jZXMgaXQgdW5kZXIgcmN1X3JlYWRfbG9jaygpCiYjNDM7CSAqIChhbmQgcmVmdXNlcyB0byBpbnN0YWxsIGEgbmV3IG9uZSBvbmNlIGNfZGVzdHJveV9pbl9wcm9nIGlzCiYjNDM7CSAqIHNldCwgd2hpY2ggaXQgY2hlY2tzIHVuZGVyIHRoaXMgbG9jaykuICBBZnRlciB0aGUKJiM0MzsJICogc3luY2hyb25pemVfcmN1KCkgYmVsb3cgbm8gb25lIGNhbiBwaWNrIHRoZSBwb2ludGVyIHVwIGFueQomIzQzOwkgKiBtb3JlIGFuZCBpdHMgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJcGFzc2l2ZSA9IGNvbm4tJmd0O2NfcGFzc2l2ZTsKJiM0MzsJY29ubi0mZ3Q7Y19wYXNzaXZlID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnEoJmFtcDtyZHNfY29ubl9sb2NrKTsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCS8qIHNodXQgdGhlIGNvbm5lY3Rpb24gZG93biAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBucGF0aHM7IGkmIzQzOyYjNDM7KSB7CiAJCWNwID0gJmFtcDtjb25uLSZndDtjX3BhdGhbaV07Ci0JCXJkc19jb25uX3BhdGhfZGVzdHJveShjcCk7CiYjNDM7CQlyZHNfY29ubl9wYXRoX3F1aWVzY2UoY3ApOwogCQlCVUdfT04oIWxpc3RfZW1wdHkoJmFtcDtjcC0mZ3Q7Y3BfcmV0cmFucykpOwogCX0KIApAQCAtNTk0LDEyICYjNDM7NzM5LDE0IEBAIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiAJICovCiAJcmRzX2NvbmdfcmVtb3ZlX2Nvbm4oY29ubik7CiAKLQlrZnJlZShjb25uLSZndDtjX3BhdGgpOwotCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKJiM0MzsJLyogZHJvcCB0aGUgcmVmZXJlbmNlIG91ciBjX3Bhc3NpdmUgcG9pbnRlciBoZWxkLCBpZiBhbnkgKi8KJiM0MzsJaWYgKHBhc3NpdmUpCiYjNDM7CQlyZHNfY29ubl9wdXQocGFzc2l2ZSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Jkc19jb25uX2xvY2ssIGZsYWdzKTsKLQlyZHNfY29ubl9jb3VudC0tOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyZHNfY29ubl9sb2NrLCBmbGFncyk7CiYjNDM7CS8qIGRyb3AgdGhlIGluaXRpYWwgcmVmZXJlbmNlOyB0aGUgY29ubmVjdGlvbiBpcyBmcmVlZCBmcm9tCiYjNDM7CSAqIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgZXZlcnkgaG9sZGVyIGhhcyBkcm9wcGVkIHRoZWlycwomIzQzOwkgKi8KJiM0MzsJcmRzX2Nvbm5fcHV0KGNvbm4pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZGVzdHJveSk7CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuYyBiL25ldC9yZHMvaWIuYwppbmRleCA3ODZmMzkxNjliYzE0Li43NTU2OTA1ODMzMjU5IDEwMDY0NAotLS0gYS9uZXQvcmRzL2liLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9pYi5jCkBAIC01MjUsMTAgJiM0Mzs1MjUsNyBAQCBzdGF0aWMgdm9pZCByZHNfaWJfc2V0X3VubG9hZGluZyh2b2lkKQogCiBzdGF0aWMgYm9vbCByZHNfaWJfaXNfdW5sb2FkaW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKIHsKLQlzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AgPSAmYW1wO2Nvbm4tJmd0O2NfcGF0aFswXTsKLQotCXJldHVybiAodGVzdF9iaXQoUkRTX0RFU1RST1lfUEVORElORywgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpIHx8Ci0JCWF0b21pY19yZWFkKCZhbXA7cmRzX2liX3VubG9hZGluZykgIT0gMCk7CiYjNDM7CXJldHVybiBhdG9taWNfcmVhZCgmYW1wO3Jkc19pYl91bmxvYWRpbmcpICE9IDA7CiB9CiAKIHZvaWQgcmRzX2liX2V4aXQodm9pZCkKQEAgLTU0MSw2ICYjNDM7NTM4LDE1IEBAIHZvaWQgcmRzX2liX2V4aXQodm9pZCkKICNlbmRpZgogCXJkc19pYl91bnJlZ2lzdGVyX2NsaWVudCgpOwogCXJkc19pYl9kZXN0cm95X25vZGV2X2Nvbm5zKCk7CiYjNDM7CXJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoJmFtcDtyZHNfaWJfdHJhbnNwb3J0KTsKJiM0MzsKJiM0MzsJLyogVGVhcmluZyBkb3duIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWF5IGhhdmUgZHJvcHBlZCB0aGUgZmluYWwKJiM0MzsJICogcmVmZXJlbmNlIG9uIGEgZGV2aWNlLCBkZWZlcnJpbmcgcmRzX2liX2Rldl9mcmVlKCkgdG8gcmRzX3dxLgomIzQzOwkgKiBEcmFpbiBpdCBiZWZvcmUgdGhlIG1vZHVsZSBnb2VzIGF3YXk7IGl0IHF1ZXVlcyBub3RoaW5nCiYjNDM7CSAqIGZ1cnRoZXIgb24gcmRzX3dxLgomIzQzOwkgKi8KJiM0MzsJZmx1c2hfd29ya3F1ZXVlKHJkc193cSk7CiYjNDM7CiAJcmRzX2liX3N5c2N0bF9leGl0KCk7CiAJcmRzX2liX3JlY3ZfZXhpdCgpOwogCXJkc190cmFuc191bnJlZ2lzdGVyKCZhbXA7cmRzX2liX3RyYW5zcG9ydCk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmMKaW5kZXggNGZlYjBlZGMzNjBjOC4uMjRlNTM4YzI1M2E3YSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9jbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWJfY20uYwpAQCAtOTI0LDggJiM0Mzs5MjQsMTQgQEAgaW50IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCiAJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICYjMzQ7cmRtYV9hY2NlcHQgZmFpbGVkXG4mIzM0Oyk7CiAKIG91dDoKLQlpZiAoY29ubikKJiM0MzsJaWYgKGNvbm4pIHsKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7Y29ubi0mZ3Q7Y19jbV9sb2NrKTsKJiM0MzsJCS8qIFRoZSBjb25uIHN0YXlzIHJlYWNoYWJsZSB0aHJvdWdoIGNtX2lkLSZndDtjb250ZXh0CiYjNDM7CQkgKiB3aXRob3V0IGEgcmVmZXJlbmNlIG9mIGl0cyBvd246IGNvbm5lY3Rpb24gZGVzdHJveQomIzQzOwkJICogc2h1dHMgdGhlIGNtX2lkIGRvd24gYmVmb3JlIHRoZSBjb25uIGlzIGZyZWVkLgomIzQzOwkJICovCiYjNDM7CQlyZHNfY29ubl9wdXQoY29ubik7CiYjNDM7CX0KIAlpZiAoZXJyKQogCQlyZG1hX3JlamVjdChjbV9pZCwgJmFtcDtlcnIsIHNpemVvZihpbnQpLAogCQkJICAgIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVEKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvbG9vcC5jIGIvbmV0L3Jkcy9sb29wLmMKaW5kZXggZTZiMDc1MGJiZWRhYi4uN2RhZjhlZDI1ZDY5YSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9sb29wLmMKQEAgLTE5NSw2ICYjNDM7MTk1LDggQEAgdm9pZCByZHNfbG9vcF9leGl0KHZvaWQpCiAJCVdBUk5fT04obGMtJmd0O2Nvbm4tJmd0O2NfcGFzc2l2ZSk7CiAJCXJkc19jb25uX2Rlc3Ryb3kobGMtJmd0O2Nvbm4pOwogCX0KJiM0MzsKJiM0MzsJcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZCgmYW1wO3Jkc19sb29wX3RyYW5zcG9ydCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJkc19sb29wX2tpbGxfY29ubnMoc3RydWN0IG5ldCAqbmV0KQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuYwppbmRleCBmMjVmMjU5MjU4NmY3Li4yOWU5NTAyOGU2MWU0IDEwMDY0NAotLS0gYS9uZXQvcmRzL21lc3NhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL21lc3NhZ2UuYwpAQCAtMTgyLDYgJiM0MzsxODIsMTggQEAgc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSkKIAkJa3JlZl9wdXQoJmFtcDtybS0mZ3Q7YXRvbWljLm9wX3JkbWFfbXItJmd0O3Jfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX2ZyZWUoc3RydWN0IHJkc19tZXNzYWdlICpybSkKJiM0Mzt7CiYjNDM7CS8qIGdldCBpbiByZHNfc2VuZF9xdWV1ZV9ybSgpLCByZHNfc2VuZF9wcm9iZSgpIG9yIHRoZSBjb25nZXN0aW9uCiYjNDM7CSAqIG1hcCBwYXRoIG9mIHJkc19zZW5kX3htaXQoKS4gIE1lc3NhZ2VzIHRoYXQgd2VyZSBuZXZlciBxdWV1ZWQgb24KJiM0MzsJICogYSBjb25uZWN0aW9uIGhhdmUgbm8gcmVmZXJlbmNlIHRvIGRyb3AuCiYjNDM7CSAqLwomIzQzOwlpZiAocm0tJmd0O21faW5jLmlfY29ubikKJiM0MzsJCXJkc19jb25uX3B1dChybS0mZ3Q7bV9pbmMuaV9jb25uKTsKJiM0MzsKJiM0MzsJa2ZyZWUocm0pOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsCkBAIC0xOTIsNyAmIzQzOzIwNCw3IEBAIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJaWYgKHJtLSZndDthdG9taWMub3BfdW5waW5fZGVmZXJyZWQpCiAJCXJkc19hdG9taWNfb3BfdW5waW5fcGFnZSgmYW1wO3JtLSZndDthdG9taWMpOwogCi0Ja2ZyZWUocm0pOwomIzQzOwlyZHNfbWVzc2FnZV9mcmVlKHJtKTsKIH0KIAogdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSkKQEAgLTIxNyw3ICYjNDM7MjI5LDcgQEAgdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSkKIAkJCXJldHVybjsKIAkJfQogCi0JCWtmcmVlKHJtKTsKJiM0MzsJCXJkc19tZXNzYWdlX2ZyZWUocm0pOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19tZXNzYWdlX3B1dCk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaAppbmRleCAyZGI0OTU3M2RhY2Q1Li4zNTc2MGRkNmIwNzdmIDEwMDY0NAotLS0gYS9uZXQvcmRzL3Jkcy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRzLmgKQEAgLTg5LDcgJiM0Mzs4OSw2IEBAIGVudW0gewogI2RlZmluZSBSRFNfUkVDT05ORUNUX1BFTkRJTkcJMQogI2RlZmluZSBSRFNfSU5fWE1JVAkJMgogI2RlZmluZSBSRFNfUkVDVl9SRUZJTEwJCTMKLSNkZWZpbmUJUkRTX0RFU1RST1lfUEVORElORwk0CiAKIC8qIE1heCBudW1iZXIgb2YgbXVsdGlwYXRocyBwZXIgUkRTIGNvbm5lY3Rpb24uIE11c3QgYmUgYSBwb3dlciBvZiAyICovCiAjZGVmaW5lCVJEU19NUEFUSF9XT1JLRVJTCTgKQEAgLTEzOCw2ICYjNDM7MTM3LDEyIEBAIHN0cnVjdCByZHNfY29ubl9wYXRoIHsKIC8qIE9uZSByZHNfY29ubmVjdGlvbiBwZXIgUkRTIGFkZHJlc3MgcGFpciAqLwogc3RydWN0IHJkc19jb25uZWN0aW9uIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQljX2hhc2hfbm9kZTsKJiM0MzsJLyogRnJlZSBvZiB0aGUgY29ubmVjdGlvbiBtZW1vcnkgKG5vdCB0aGUgdGVhcmRvd24gb2YgaXRzCiYjNDM7CSAqIHRyYW5zcG9ydCBzdGF0ZSAtIHRoYXQgc3RheXMgc3luY2hyb25vdXMgaW4KJiM0MzsJICogcmRzX2Nvbm5fZGVzdHJveSgpKSBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgbGFzdCByZWZlcmVuY2UgaXMKJiM0MzsJICogZHJvcHBlZCB2aWEgcmRzX2Nvbm5fcHV0KCkuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3Qga3JlZgkJY19yZWZjb3VudDsKIAlzdHJ1Y3QgaW42X2FkZHIJCWNfbGFkZHI7CiAJc3RydWN0IGluNl9hZGRyCQljX2ZhZGRyOwogCWludAkJCWNfZGV2X2lmOyAvKiBpZmluZGV4IHVzZWQgZm9yIHRoaXMgY29ubiAqLwpAQCAtMTQ4LDYgJiM0MzsxNTMsMTAgQEAgc3RydWN0IHJkc19jb25uZWN0aW9uIHsKIAkJCQljX3BhZF90b18zMjoyOTsKIAlpbnQJCQljX25wYXRoczsKIAlib29sCQkJY193aXRoX3Nwb3J0X2lkeDsKJiM0MzsJLyogU2V0ICh1bmRlciBSQ1UpIHdoZW4gcmRzX2Nvbm5fZGVzdHJveSgpIHN0YXJ0cyBvbiB0aGlzIGNvbm47CiYjNDM7CSAqIHJlYWQgdGhyb3VnaCByZHNfZGVzdHJveV9wZW5kaW5nKCkuCiYjNDM7CSAqLwomIzQzOwlib29sCQkJY19kZXN0cm95X2luX3Byb2c7CiAJc3RydWN0IHJkc19jb25uZWN0aW9uCSpjX3Bhc3NpdmU7CiAJc3RydWN0IHJkc190cmFuc3BvcnQJKmNfdHJhbnM7CiAKQEAgLTU0NCw2ICYjNDM7NTUzLDEyIEBAIHN0cnVjdCByZHNfdHJhbnNwb3J0IHsKIAl1bnNpZ25lZCBpbnQJCXRfcHJlZmVyX2xvb3BiYWNrOjEsCiAJCQkJdF9tcF9jYXBhYmxlOjE7CiAJdW5zaWduZWQgaW50CQl0X3R5cGU7CiYjNDM7CS8qIENvbm5lY3Rpb25zIG9mIHRoaXMgdHJhbnNwb3J0IG5vdCB5ZXQgZnJlZWQ7IGZyZWVpbmcgcnVucwomIzQzOwkgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYQomIzQzOwkgKiBjb25uZWN0aW9uLCBzbyB0cmFuc3BvcnQgbW9kdWxlIHVubG9hZCBoYXMgdG8gd2FpdCBmb3IgdGhpcwomIzQzOwkgKiB0byByZWFjaCB6ZXJvIChyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKCkpLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX3QJCXRfY29ubl9jb3VudDsKIAogCWludCAoKmxhZGRyX2NoZWNrKShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJCSAgIF9fdTMyIHNjb3BlX2lkKTsKQEAgLTgxOSw2ICYjNDM7ODM0LDExIEBAIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJCXU4IHRvcywgZ2ZwX3QgZ2ZwLCBpbnQgZGV2X2lmKTsKIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoKTsKIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwomIzQzO3ZvaWQgcmRzX2Nvbm5fZ2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CiYjNDM7dm9pZCByZHNfY29ubl9wdXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKJiM0MzsvKiBob3cgbG9uZyB0cmFuc3BvcnQgdW5sb2FkIHdhaXRzIGZvciBpdHMgY29ubmVjdGlvbnMgdG8gYmUgZnJlZWQgKi8KJiM0MzsjZGVmaW5lIFJEU19DT05OX0ZSRUVfVElNRU9VVF9NUwkxMDAwMAomIzQzO3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpOwogdm9pZCByZHNfY29ubl9kcm9wKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CiB2b2lkIHJkc19jb25uX3BhdGhfZHJvcChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3BhdGgsIGJvb2wgZGVzdHJveSk7CiB2b2lkIHJkc19jb25uX2Nvbm5lY3RfaWZfZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwpAQCAtOTk0LDcgJiM0MzsxMDE0LDggQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgcmRzX2Rlc3Ryb3lfcGVuZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JcmV0dXJuICFjaGVja19uZXQocmRzX2Nvbm5fbmV0KGNvbm4pKSB8fAomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKGNvbm4tJmd0O2NfZGVzdHJveV9pbl9wcm9nKSB8fAomIzQzOwkgICAgICAgIWNoZWNrX25ldChyZHNfY29ubl9uZXQoY29ubikpIHx8CiAJICAgICAgIChjb25uLSZndDtjX3RyYW5zLSZndDt0X3VubG9hZGluZyAmYW1wOyZhbXA7IGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfdW5sb2FkaW5nKGNvbm4pKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZWN2LmMgYi9uZXQvcmRzL3JlY3YuYwppbmRleCA2MjA0ZTU3N2E5MGFlLi5iMDMxYzBiNDNhZjgzIDEwMDY0NAotLS0gYS9uZXQvcmRzL3JlY3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3JlY3YuYwpAQCAtNDYsNiAmIzQzOzQ2LDcgQEAgdm9pZCByZHNfaW5jX2luaXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCiB7CiAJcmVmY291bnRfc2V0KCZhbXA7aW5jLSZndDtpX3JlZmNvdW50LCAxKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2luYy0mZ3Q7aV9pdGVtKTsKJiM0MzsJcmRzX2Nvbm5fZ2V0KGNvbm4pOwkvKiBwdXQgaW4gcmRzX2luY19wdXQoKSAqLwogCWluYy0mZ3Q7aV9jb25uID0gY29ubjsKIAlpbmMtJmd0O2lfY29ubl9wYXRoID0gTlVMTDsKIAlpbmMtJmd0O2lfc2FkZHIgPSAqc2FkZHI7CkBAIC02MSw2ICYjNDM7NjIsNyBAQCB2b2lkIHJkc19pbmNfcGF0aF9pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uX3BhdGggKmNwLAogewogCXJlZmNvdW50X3NldCgmYW1wO2luYy0mZ3Q7aV9yZWZjb3VudCwgMSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtpbmMtJmd0O2lfaXRlbSk7CiYjNDM7CXJkc19jb25uX2dldChjcC0mZ3Q7Y3BfY29ubik7CS8qIHB1dCBpbiByZHNfaW5jX3B1dCgpICovCiAJaW5jLSZndDtpX2Nvbm4gPSBjcC0mZ3Q7Y3BfY29ubjsKIAlpbmMtJmd0O2lfY29ubl9wYXRoID0gY3A7CiAJaW5jLSZndDtpX3NhZGRyID0gKnNhZGRyOwpAQCAtODEsOSAmIzQzOzgzLDE5IEBAIHZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQogewogCXJkc2RlYnVnKCYjMzQ7cHV0IGluYyAlcCByZWYgJWRcbiYjMzQ7LCBpbmMsIHJlZmNvdW50X3JlYWQoJmFtcDtpbmMtJmd0O2lfcmVmY291bnQpKTsKIAlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7aW5jLSZndDtpX3JlZmNvdW50KSkgewomIzQzOwkJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaW5jLSZndDtpX2Nvbm47CiYjNDM7CiAJCUJVR19PTighbGlzdF9lbXB0eSgmYW1wO2luYy0mZ3Q7aV9pdGVtKSk7CiAKLQkJaW5jLSZndDtpX2Nvbm4tJmd0O2NfdHJhbnMtJmd0O2luY19mcmVlKGluYyk7CiYjNDM7CQkvKiBpbmNfZnJlZSgpIGNhbiBmcmVlIHRoZSBtZW1vcnkgQGluYyBsaXZlcyBpbiwgc28gdGhlCiYjNDM7CQkgKiBjb25uZWN0aW9uIHJlZmVyZW5jZSBoYXMgdG8gYmUgZHJvcHBlZCB0aHJvdWdoIHRoZQomIzQzOwkJICogY29weSB0YWtlbiBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJY29ubi0mZ3Q7Y190cmFucy0mZ3Q7aW5jX2ZyZWUoaW5jKTsKJiM0MzsJCS8qIGdldCBpbiByZHNfaW5jX2luaXQoKSwgcmRzX2luY19wYXRoX2luaXQoKSBvcgomIzQzOwkJICogcmRzX3JlY3ZfaW5jb21pbmcoKQomIzQzOwkJICovCiYjNDM7CQlyZHNfY29ubl9wdXQoY29ubik7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwocmRzX2luY19wdXQpOwpAQCAtMzI1LDYgJiM0MzszMzcsMTMgQEAgdm9pZCByZHNfcmVjdl9pbmNvbWluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7CiAKJiM0MzsJLyogZXZlcnkgY2FsbGVyIGluaXRpYWxpemVkIEBpbmMgd2l0aCByZHNfaW5jX2luaXQoKSBvcgomIzQzOwkgKiByZHNfaW5jX3BhdGhfaW5pdCgpIGZpcnN0LCBzbyBpX2Nvbm4gYWxyZWFkeSBob2xkcyBhIHJlZmVyZW5jZS4KJiM0MzsJICogVGFrZSB0aGUgbmV3IG9uZSBiZWZvcmUgZHJvcHBpbmcgdGhlIG9sZCwgc28gdGhhdCByZS1wb2ludGluZyBhbgomIzQzOwkgKiBpbmMgYXQgdGhlIGNvbm5lY3Rpb24gaXQgYWxyZWFkeSByZWZlcnMgdG8gY2Fubm90IGZyZWUgaXQuCiYjNDM7CSAqLwomIzQzOwlyZHNfY29ubl9nZXQoY29ubik7CiYjNDM7CXJkc19jb25uX3B1dChpbmMtJmd0O2lfY29ubik7CiAJaW5jLSZndDtpX2Nvbm4gPSBjb25uOwogCWluYy0mZ3Q7aV9yeF9qaWZmaWVzID0gamlmZmllczsKIAlpZiAoY29ubi0mZ3Q7Y190cmFucy0mZ3Q7dF9tcF9jYXBhYmxlKQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuYwppbmRleCAxYWZhOTgxZTVjMDZkLi4wNDVlYjNjM2Y5NzcyIDEwMDY0NAotLS0gYS9uZXQvcmRzL3NlbmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3NlbmQuYwpAQCAtMjkwLDYgJiM0MzsyOTAsNyBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCQl9CiAJCQlybS0mZ3Q7ZGF0YS5vcF9hY3RpdmUgPSAxOwogCQkJcm0tJmd0O21faW5jLmlfY29ubl9wYXRoID0gY3A7CiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KGNwLSZndDtjcF9jb25uKTsJLyogcHV0IGluIHJkc19tZXNzYWdlX3B1dCgpICovCiAJCQlybS0mZ3Q7bV9pbmMuaV9jb25uID0gY3AtJmd0O2NwX2Nvbm47CiAKIAkJCWNwLSZndDtjcF94bWl0X3JtID0gcm07CkBAIC05NDcsNiAmIzQzOzk0OCw3IEBAIHN0YXRpYyBpbnQgcmRzX3NlbmRfcXVldWVfcm0oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAogCQkvKiBUaGUgY29kZSBvcmRlcmluZyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IHdlJiMzOTtyZQogCQkgICB0cnlpbmcgdG8gbWluaW1pemUgdGhlIHRpbWUgd2UgaG9sZCBjX2xvY2sgKi8KIAkJcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKCZhbXA7cm0tJmd0O21faW5jLmlfaGRyLCBzcG9ydCwgZHBvcnQsIDApOwomIzQzOwkJcmRzX2Nvbm5fZ2V0KGNvbm4pOwkvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi8KIAkJcm0tJmd0O21faW5jLmlfY29ubiA9IGNvbm47CiAJCXJtLSZndDttX2luYy5pX2Nvbm5fcGF0aCA9IGNwOwogCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOwpAQCAtMTE1OSwxMyAmIzQzOzExNjEsMTQgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKQogCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2luICosIHVzaW4sIG1zZy0mZ3Q7bXNnX25hbWUpOwogCV9fYmUxNiBkcG9ydDsKIAlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gTlVMTDsKLQlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CiYjNDM7CXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAJaW50IHF1ZXVlZCA9IDAsIGFsbG9jYXRlZF9tciA9IDA7CiAJaW50IG5vbmJsb2NrID0gbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUOwogCWxvbmcgdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBub25ibG9jayk7CiAJc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoOwogCXN0cnVjdCBpbjZfYWRkciBkYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlfX3UzMiBzY29wZV9pZCA9IDA7CiAJc2l6ZV90IHJkbWFfcGF5bG9hZF9sZW4gPSAwOwogCWJvb2wgemNvcHkgPSAoKG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19aRVJPQ09QWSkgJmFtcDsmYW1wOwpAQCAtMTM0MCwxMSAmIzQzOzEzNDMsMjkgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKQogCXJtLSZndDttX2RhZGRyID0gZGFkZHI7CiAKIAkvKiByZHNfY29ubl9jcmVhdGUgaGFzIGEgc3BpbmxvY2sgdGhhdCBydW5zIHdpdGggSVJRIG9mZi4KLQkgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuICovCi0JaWYgKHJzLSZndDtyc19jb25uICZhbXA7JmFtcDsgaXB2Nl9hZGRyX2VxdWFsKCZhbXA7cnMtJmd0O3JzX2Nvbm4tJmd0O2NfZmFkZHIsICZhbXA7ZGFkZHIpICZhbXA7JmFtcDsKLQkgICAgcnMtJmd0O3JzX3RvcyA9PSBycy0mZ3Q7cnNfY29ubi0mZ3Q7Y190b3MpIHsKLQkJY29ubiA9IHJzLSZndDtyc19jb25uOwomIzQzOwkgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBjYWNoZWQgcnNfY29ubiBob2xkcyBhIGNvbm5lY3Rpb24gcmVmZXJlbmNlOyB0YWtlIG9uZSBvZgomIzQzOwkgKiBvdXIgb3duIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBjYWxsIChkcm9wcGVkIG9uIGJvdGggZXhpdAomIzQzOwkgKiBwYXRocyksIHNvIHRoYXQgbmVpdGhlciBhIGNvbmN1cnJlbnQgc2VuZGVyIHJlcGxhY2luZyB0aGUKJiM0MzsJICogY2FjaGUgbm9yIHJkc19jb25uX2Rlc3Ryb3koKSBjYW4gZnJlZSB0aGUgY29ubmVjdGlvbiB1bmRlcgomIzQzOwkgKiB1cy4gIEEgY2FjaGVkIGNvbm5lY3Rpb24gd2hvc2UgZGVzdHJ1Y3Rpb24gaGFzIGJlZ3VuIGlzIG5vdAomIzQzOwkgKiByZXVzZWQ6IGRyb3BwaW5nIGl0IGhlcmUgbGV0cyB0aGUgbmV4dCBzZW5kbXNnIGxvb2sgdXAgb3IKJiM0MzsJICogY3JlYXRlIGEgbGl2ZSBvbmUgaW5zdGVhZCBvZiByZXR1cm5pbmcgLUVBR0FJTiBmb3JldmVyLgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtycy0mZ3Q7cnNfbG9jaywgZmxhZ3MpOwomIzQzOwljb25uID0gcnMtJmd0O3JzX2Nvbm47CiYjNDM7CWlmIChjb25uICZhbXA7JmFtcDsgaXB2Nl9hZGRyX2VxdWFsKCZhbXA7Y29ubi0mZ3Q7Y19mYWRkciwgJmFtcDtkYWRkcikgJmFtcDsmYW1wOwomIzQzOwkgICAgcnMtJmd0O3JzX3RvcyA9PSBjb25uLSZndDtjX3RvcyAmYW1wOyZhbXA7ICFyZHNfZGVzdHJveV9wZW5kaW5nKGNvbm4pKSB7CiYjNDM7CQlyZHNfY29ubl9nZXQoY29ubik7CiAJfSBlbHNlIHsKJiM0MzsJCWNvbm4gPSBOVUxMOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtycy0mZ3Q7cnNfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoIWNvbm4pIHsKJiM0MzsJCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqb2xkOwomIzQzOwogCQljb25uID0gcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHNvY2tfbmV0KHNvY2stJmd0O3NrKSwKIAkJCQkJCSZhbXA7cnMtJmd0O3JzX2JvdW5kX2FkZHIsICZhbXA7ZGFkZHIsCiAJCQkJCQlycy0mZ3Q7cnNfdHJhbnNwb3J0LCBycy0mZ3Q7cnNfdG9zLApAQCAtMTM1Miw5ICYjNDM7MTM3MywxNyBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pCiAJCQkJCQlzY29wZV9pZCk7CiAJCWlmIChJU19FUlIoY29ubikpIHsKIAkJCXJldCA9IFBUUl9FUlIoY29ubik7CiYjNDM7CQkJY29ubiA9IE5VTEw7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJLyogaGFuZCB0aGUgY2FjaGUgaXRzIG93biByZWZlcmVuY2UgKi8KJiM0MzsJCXJkc19jb25uX2dldChjb25uKTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cnMtJmd0O3JzX2xvY2ssIGZsYWdzKTsKJiM0MzsJCW9sZCA9IHJzLSZndDtyc19jb25uOwogCQlycy0mZ3Q7cnNfY29ubiA9IGNvbm47CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cnMtJmd0O3JzX2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmIChvbGQpCiYjNDM7CQkJcmRzX2Nvbm5fcHV0KG9sZCk7CiAJfQogCiAJaWYgKGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfbXBfY2FwYWJsZSkgewpAQCAtMTQ2OSw2ICYjNDM7MTQ5OCw4IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbikKIAkJa2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7CiAJa2ZyZWUodmN0LnZlYyk7CiAKJiM0MzsJcmRzX2Nvbm5fcHV0KGNvbm4pOwomIzQzOwogCXJldHVybiBwYXlsb2FkX2xlbjsKIAogb3V0OgpAQCAtMTQ3Niw2ICYjNDM7MTUwNyw5IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbikKIAkJa2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7CiAJa2ZyZWUodmN0LnZlYyk7CiAKJiM0MzsJaWYgKGNvbm4pCiYjNDM7CQlyZHNfY29ubl9wdXQoY29ubik7CiYjNDM7CiAJLyogSWYgdGhlIHVzZXIgaW5jbHVkZWQgYSBSRE1BX01BUCBjbXNnLCB3ZSBhbGxvY2F0ZWQgYSBNUiBvbiB0aGUgZmx5LgogCSAqIElmIHRoZSBzZW5kbXNnIGdvZXMgdGhyb3VnaCwgd2Uga2VlcCB0aGUgTVIuIElmIGl0IGZhaWxzIHdpdGggRUFHQUlOCiAJICogb3IgaW4gYW55IG90aGVyIHdheSwgd2UgbmVlZCB0byBkZXN0cm95IHRoZSBNUiBhZ2FpbiAqLwpAQCAtMTUyMiw2ICYjNDM7MTU1Niw3IEBAIHJkc19zZW5kX3Byb2JlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCwgX19iZTE2IHNwb3J0LAogCWxpc3RfYWRkX3RhaWwoJmFtcDtybS0mZ3Q7bV9jb25uX2l0ZW0sICZhbXA7Y3AtJmd0O2NwX3NlbmRfcXVldWUpOwogCXNldF9iaXQoUkRTX01TR19PTl9DT05OLCAmYW1wO3JtLSZndDttX2ZsYWdzKTsKIAlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOwomIzQzOwlyZHNfY29ubl9nZXQoY3AtJmd0O2NwX2Nvbm4pOwkvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi8KIAlybS0mZ3Q7bV9pbmMuaV9jb25uID0gY3AtJmd0O2NwX2Nvbm47CiAJcm0tJmd0O21faW5jLmlfY29ubl9wYXRoID0gY3A7CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jCmluZGV4IDc3NGE3MWY4OGQzNzUuLjI2ODVlZTIxYTIyZDEgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy90Y3AuYwpAQCAtODA1LDYgJiM0Mzs4MDUsNyBAQCBzdGF0aWMgdm9pZCByZHNfdGNwX2V4aXQodm9pZCkKICNlbmRpZgogCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmYW1wO3Jkc190Y3BfbmV0X29wcyk7CiAJcmRzX3RjcF9kZXN0cm95X2Nvbm5zKCk7CiYjNDM7CXJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoJmFtcDtyZHNfdGNwX3RyYW5zcG9ydCk7CiAJcmRzX3RyYW5zX3VucmVnaXN0ZXIoJmFtcDtyZHNfdGNwX3RyYW5zcG9ydCk7CiAJcmRzX3RjcF9yZWN2X2V4aXQoKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX3RjcF9jb25uX3NsYWIpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwppbmRleCAxM2ZhNjBjMTk4NWJiLi4wZDJjZWQ4OTJhOGFlIDEwMDY0NAotLS0gYS9uZXQvcmRzL3RjcF9saXN0ZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwpAQCAtMTUzLDcgJiM0MzsxNTMsNyBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKQogewogCXN0cnVjdCBzb2NrZXQgKmxpc3Rlbl9zb2NrID0gcnRuLSZndDtyZHNfdGNwX2xpc3Rlbl9zb2NrOwogCXN0cnVjdCBzb2NrZXQgKm5ld19zb2NrID0gTlVMTDsKLQlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CiYjNDM7CXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwogCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnJzX3RjcCA9IE5VTEw7CkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIGludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pCiAKIAlpZiAoSVNfRVJSKGNvbm4pKSB7CiAJCXJldCA9IFBUUl9FUlIoY29ubik7CiYjNDM7CQljb25uID0gTlVMTDsKIAkJZ290byBvdXQ7CiAJfQogCS8qIEFuIGluY29taW5nIFNZTiByZXF1ZXN0IGNhbWUgaW4sIGFuZCBUQ1AganVzdCBhY2NlcHRlZCBpdC4KQEAgLTM0Myw2ICYjNDM7MzQ0LDggQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bikKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7cnNfdGNwLSZndDt0X2Nvbm5fcGF0aF9sb2NrKTsKIAlpZiAobmV3X3NvY2spCiAJCXNvY2tfcmVsZWFzZShuZXdfc29jayk7CiYjNDM7CWlmIChjb25uKQomIzQzOwkJcmRzX2Nvbm5fcHV0KGNvbm4pOwogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7cnRuLSZndDtyZHNfdGNwX2FjY2VwdF9sb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg2MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJEUyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBrZXJuZWwgcGF0Y2ggc2VyaWVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgc3Vic3lzdGVtLiBMZXQmIzM5O3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGZpbGVzIHdpdGhpbiBgbmV0L3Jkcy9gOiBgYWZfcmRzLmNgLCBgY29ubmVjdGlvbi5jYCwgYGliLmNgLCBgaWJfY20uY2AsIGBsb29wLmNgLCBgbWVzc2FnZS5jYCwgYHJkcy5oYCwgYHJlY3YuY2AsIGBzZW5kLmNgLCBgdGNwLmNgLCBhbmQgYHRjcF9saXN0ZW4uY2AuIFRoaXMgc3VnZ2VzdHMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIGFjcm9zcyB0aGUgY29yZSBSRFMgaW1wbGVtZW50YXRpb24uCgpUaGUga2V5IGNoYW5nZSBhcHBlYXJzIHRvIGJlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgcmVmZXJlbmNlIGNvdW50aW5nIOKAkyBga3JlZmAg4oCTIHRvIHRoZSBgc3RydWN0IHJkc19jb25uZWN0aW9uYC4gVGhleSYjMzk7cmUgcmVwbGFjaW5nIHRoZSBvbGQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdoaWNoLCBmcmFua2x5LCB3YXMgYWx3YXlzIGEgYml0IHN1c3BlY3Qgd2l0aCBpdHMgYXNzdW1wdGlvbnMgYWJvdXQgbm8gY29uY3VycmVudCByZWZlcmVuY2VzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFyb3VuZCBjb25uZWN0aW9uIGRlc3RydWN0aW9uLiBUaGlzIGlzIGEgY3JpdGljYWwgaW1wcm92ZW1lbnQsIGlmIGRvbmUgY29ycmVjdGx5LCBhcyBpdCBzb2x2ZXMgYSBmdW5kYW1lbnRhbCBjb25jdXJyZW5jeSBpc3N1ZS4KCkkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhleeKAmXZlIGltcGxlbWVudGVkIHRoaXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgcmRzX2Nvbm5fZGVzdHJveWAsIGBfX3Jkc19jb25uX2NyZWF0ZWAsIGByZHNfY29ubl9sb29rdXBgLCBgcmRzX3NlbmRtc2dgLCBgcmRzX3RjcF9hY2NlcHRfb25lYCwgYHJkc19yZWN2X2luY29taW5nYCwgYHJkc19tZXNzYWdlX2ZyZWVgLCBgcmRzX3JlbGVhc2VgLCBhbmQgc2V2ZXJhbCBvdGhlcnMuIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgbGlrZWx5IHdlcmUgbm90IHJlZmVyZW5jZSBjb3VudGVkIGJlZm9yZSB0aGUgcGF0Y2ggYW5kIHdpbGwgZ2l2ZSBhd2F5IGhvdyB3ZWxsIHRoZSByZWZlcmVuY2UgY291bnRpbmcgaGFzIGJlZW4gaW5jb3Jwb3JhdGVkLgoKSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGluY3JlbWVudGVkIGFuZCBkZWNyZW1lbnRlZCBpbiBlYWNoIG9mIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gQXJlIHRoZXkgdXNpbmcgdGhlIGNvcnJlY3QgYGtyZWZgIGZ1bmN0aW9ucz8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aCBvdGhlciBjb2RlPyBJIG5lZWQgdG8gbG9vayBmb3IgbWlzc2VkIGBrcmVmX3B1dGAgY2FsbHMsIGRvdWJsZSBkZWNyZW1lbnRzLCBhbmQgaW1wcm9wZXIgbG9ja2luZyBhcm91bmQgdGhlIHJlZmNvdW50LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUkRTIHRyYW5zcG9ydHMgdGhlbXNlbHZlcyAoVENQLCBSRE1BLCBldGMuKSB0byBlbnN1cmUgdGhlIHJlZmNvdW50aW5nIGlzIHByb3Blcmx5IGludGVncmF0ZWQgYXQgdGhhdCBsZXZlbC4KClRvIHN0YXJ0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgYG5ldC9yZHMvS2NvbmZpZ2AgZmlsZSB3aXRoIGdyZXBwZXIgdG8gcmV2aWV3IHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBhbmQgdGhlIHNwZWNpZmljIHRyYW5zcG9ydCBjb25maWd1cmF0aW9ucy4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBjb250ZXh0IG9uIHdoaWNoIHRyYW5zcG9ydHMgYXJlIGVuYWJsZWQgYW5kIHdoaWNoIG9uZXMgYXJlIGJlaW5nIGFmZmVjdGVkLiBUaGUgaW1wb3J0YW50IGNvbnNpZGVyYXRpb24gd2lsbCBiZSB0byB2ZXJpZnkgdGhlIGNvbXBhdGliaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJEUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnLTItXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXG5uZXQvcmRzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTktXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXG5uZXQvcmRzL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBJbmZpbmliYW5kXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTE2LVxubmV0L3Jkcy9LY29uZmlnOjE3OmNvbmZpZyBSRFNfVENQXG5uZXQvcmRzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBUQ1BcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctMjQtXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xubmV0L3Jkcy9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4OTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBSRFMgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYG5ldC9yZHMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXZlcnl0aGluZyBpbiBpdCwgZnJvbSB0aGUgdG9wIHRvIHRoZSBib3R0b20uIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgaXRzIHN0cnVjdHVyZSwgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXQgcHJlc2VudHMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBwcm92aWRlIGEgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyBvdmVyIFRDUCAoUkRTKSBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZC4gVGhpcyBLY29uZmlnIGZpbGUgZGljdGF0ZXMgaG93IFJEUyBpcyBwcmVzZW50ZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGFuZCwgdWx0aW1hdGVseSwgaG93IGl0JiMzOTtzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEl0JiMzOTtzIGNydWNpYWwgZm9yIGNvbnRyb2xsaW5nIHdoaWNoIHBhcnRzIG9mIFJEUyBhcmUgY29tcGlsZWQuIEkmIzM5O2xsIHBheSBzcGVjaWZpYyBhdHRlbnRpb24gdG8gYW55IGRlZmF1bHQgdmFsdWVzLCBpZiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBpbnZvbHZlZCwgYW5kIGFueSByZWxhdGlvbiB0byBvdGhlciBLY29uZmlnIGZpbGVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIG9wdGlvbnMuIEkgYWxzbyBuZWVkIHRvIGFzY2VydGFpbiB3aGF0IHRoaXMgdGVsbHMgbWUgYWJvdXQgaXRzIGludGVncmF0aW9uIHdpdGggb3RoZXIgbmV0d29ya2luZyBzdGFja3MgYW5kIHJlbGF0ZWQgY29tcG9uZW50cy4gVGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIGNyb3NzLXJlZmVyZW5jaW5nIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IHRoZSBmdWxsIHN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIFJEU1xuICAgNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBUaGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBwcm90b2NvbCBwcm92aWRlcyByZWxpYWJsZSxcbiAgIDg6XHRcdCAgc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIGRhdGFncmFtcyBvdmVyIEluZmluaWJhbmQgb3IgVENQLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBSRFNfUkRNQVxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7UkRTIG92ZXIgSW5maW5pYmFuZFwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBSRFMgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBBbGxvdyBSRFMgdG8gdXNlIEluZmluaWJhbmQgYXMgYSB0cmFuc3BvcnQuXG4gIDE1Olx0XHQgIFRoaXMgdHJhbnNwb3J0IHN1cHBvcnRzIFJETUEgb3BlcmF0aW9ucy5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgUkRTX1RDUFxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7UkRTIG92ZXIgVENQXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFJEU1xuICAyMDpcdFx0ZGVwZW5kcyBvbiBJUFY2IHx8ICFJUFY2XG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIEFsbG93IFJEUyB0byB1c2UgVENQIGFzIGEgdHJhbnNwb3J0LlxuICAyMzpcdFx0ICBUaGlzIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IFJETUEgb3BlcmF0aW9ucy5cbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgUkRTX0RFQlVHXG4gIDI2Olx0XHRib29sIFwmIzM0O1JEUyBkZWJ1Z2dpbmcgbWVzc2FnZXNcJiMzNDtcbiAgMjc6XHRcdGRlcGVuZHMgb24gUkRTXG4gIDI4Olx0XHRkZWZhdWx0IG5cbiAgMjk6XHRcbiAgMzA6XHRjb25maWcgR0NPVl9QUk9GSUxFX1JEU1xuICAzMTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgb24gUkRTXCYjMzQ7XG4gIDMyOlx0XHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXG4gIDMzOlx0XHRoZWxwXG4gIDM0Olx0XHQgIEVuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiBSRFMgZm9yIGNoZWNraW5nIHdoaWNoIGZ1bmN0aW9ucy9saW5lc1xuICAzNTpcdFx0ICBhcmUgZXhlY3V0ZWQuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBSRFM6IEEgQ2xlYXIgVGFyZ2V0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFJEUywgUmVkdW5kYW50IERhdGEgUHJvdG9jb2wsIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgY2FsbHMg4oCTIGBBRl9SRFNgLCBgUEZfUkRTYCwgdGhlIHdvcmtzLiBTeXprYWxsZXImIzM5O3MgZ290IHRoZSBmdWxsIHRvb2xib3ggcmVhZHkgdG8gZ28sIGhhbmRsaW5nIHRoZSBSRFMgc29ja2V0IHByaW1pdGl2ZXMgd2l0aCBlYXNlLiAgQW5kIHNpbmNlIGl0IHJ1bnMgZmluZSB3aXRoaW4gb3VyIHN0YW5kYXJkIFFFTVUgc2V0dXAsIGluY2x1ZGluZyBsb29wYmFjaywgVENQLCBhbmQgZXZlbiBSRE1BIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgcHJvcGVybHksIHdlJiMzOTt2ZSBnb3QgYSByZWFkaWx5IGV4ZWN1dGFibGUgdGFyZ2V0LgoKVGhlIGp1aWN5IHBhcnQsIGFuZCB0aGUga2V5IGZvciBmdXp6aW5nLCBpcyB0aGUgY29yZSBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uOiBzZW5kaW5nLCByZWNlaXZpbmcsIGFjY2VwdGluZywgY29ubmVjdGluZywgcmVsZWFzaW5nIHRoZSBzb2NrZXRzLi4uIGFsbCB0aGF0IGdvb2Qgc3R1ZmYuICBUaGlzIGNvZGUgbWFuaXB1bGF0ZXMgdGhlIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIHdpdGggYGtyZWZgIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZGVmZXJyZWQgZnJlZWluZywgaW50cm9kdWNlcyB0aG9zZSBgY19kZXN0cm95X2luX3Byb2dgIGNoZWNrcywgYW5kIGFkZHMgcmVmY291bnRpbmcgdG8gYHJzLSZndDtyc19jb25uYCBhbmQgdGhlIG1lc3NhZ2VzIHRoZW1zZWx2ZXMgKGByZHNfbWVzc2FnZV9mcmVlYCwgYHJkc19pbmNfcHV0YCwgYHJkc19yZWN2X2luY29taW5nYCksIGNoYW5naW5nIHJlZmNvdW50aW5nLCBsb2NraW5nLCBzeW5jaHJvbml6YXRpb24sIGFuZCB0aGUgb3ZlcmFsbCBtZW1vcnkgbGlmZWN5Y2xlIHdpdGhpbiB0aGUgbmV0d29yayBwcm90b2NvbC4gVGhhdCBzY3JlYW1zIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvbmZpcm1lZDogYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuICBObyBxdWVzdGlvbiB0aGVyZS4KCk5leHQgdXAsIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1JEU2AgYW5kIGBDT05GSUdfUkRTX1RDUGAgYXJlIHRoZSBvYnZpb3VzIG9uZXMuIFRoZW4gd2UgaGF2ZSBgUkRTX1JETUFgLCB3aGljaCBkZXBlbmRzIG9uIGBJTkZJTklCQU5EYCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AuIFNvLCBSRFMgYW5kIFJEU19UQ1AgYXJlIHByaW1hcnksIGFuZCBSRFNfUkRNQSBkZXBlbmRzIG9uIG90aGVyIGNvbmZpZ3MuIFNob3VsZCB3ZSBpbmNsdWRlIGFsbCB0aHJlZSB3aGVuIGJ1aWxkaW5nIHRoZSBmdXp6IHRhcmdldHM/CgpPa2F5LCBsZXQmIzM5O3MgZXhwbG9yZSB0aG9zZSBjb25maWd1cmF0aW9ucyBkaXJlY3RseTogYFJEU2AsIGBSRFNfVENQYCwgYW5kIGBSRFNfUkRNQWAuIEFuZCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmaWxlcyBvciBjb25maWdzIHdlIHNob3VsZCBiZSBhd2FyZSBvZi4KCkxldCYjMzk7cyBzdGFydCB3aXRoIGBuZXQvcmRzL01ha2VmaWxlYC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Jkcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfUkRTKSAmIzQzOz0gcmRzLm9cbiAgIDM6XHRyZHMteSA6PVx0YWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFxcXG4gICA0Olx0XHRcdFx0cmVjdi5vIHNlbmQubyBzdGF0cy5vIHN5c2N0bC5vIHRocmVhZHMubyB0cmFuc3BvcnQubyBcXFxuICAgNTpcdFx0XHRcdGxvb3AubyBwYWdlLm8gcmRtYS5vXG4gICA2Olx0XG4gICA3Olx0b2JqLSQoQ09ORklHX1JEU19SRE1BKSAmIzQzOz0gcmRzX3JkbWEub1xuICAgODpcdHJkc19yZG1hLXkgOj1cdHJkbWFfdHJhbnNwb3J0Lm8gXFxcbiAgIDk6XHRcdFx0XHRpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcXFxuICAxMDpcdFx0XHRcdGliX3N5c2N0bC5vIGliX3JkbWEubyBpYl9mcm1yLm9cbiAgMTE6XHRcbiAgMTI6XHRcbiAgMTM6XHRvYmotJChDT05GSUdfUkRTX1RDUCkgJiM0Mzs9IHJkc190Y3Aub1xuICAxNDpcdHJkc190Y3AteSA6PVx0XHR0Y3AubyB0Y3BfY29ubmVjdC5vIHRjcF9saXN0ZW4ubyB0Y3BfcmVjdi5vIFxcXG4gIDE1Olx0XHRcdFx0dGNwX3NlbmQubyB0Y3Bfc3RhdHMub1xuICAxNjpcdFxuICAxNzpcdGNjZmxhZ3MtJChDT05GSUdfUkRTX0RFQlVHKVx0Oj1cdC1EUkRTX0RFQlVHXG4gIDE4Olx0XG4gIDE5Olx0IyBmb3IgR0NPViBjb3ZlcmFnZSBwcm9maWxpbmdcbiAgMjA6XHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX1JEU1xuICAyMTpcdEdDT1ZfUFJPRklMRSA6PSB5XG4gIDIyOlx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc5OAoJCQkJCQkJb3V0cHV0OiAyNjcKCQkJCQkJCXRob3VnaHRzOiA5MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFJEUyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEkgc2VlIGEgcHJldHR5IGV4dGVuc2l2ZSBsaXN0IG9mIG1vZGlmaWVkIHN5bWJvbHM6IGByZHNfcmVsZWFzZWAsIGEgd2hvbGUgYnVuY2ggb2YgYHJkc19jb25uXypgIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gbWFuYWdlbWVudCwgYW5kIHRoZW4gZnVuY3Rpb25zIHNjYXR0ZXJlZCBhY3Jvc3MgSUIsIGxvb3AsIG1lc3NhZ2UgaGFuZGxpbmcsIHJlY2VpdmUsIHNlbmQsIGFuZCBUQ1AuCgpNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIG5hcnJvdyBkb3duIHRoZSBmb2N1cy4gSSB3YW50IHRvIGlkZW50aWZ5IHRoZSAqbW9zdCogaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgdG8gZXhwb3NlIG5ldyB2dWxuZXJhYmlsaXRpZXMuIEJhc2VkIG9uIHRoZSBtb2RpZmljYXRpb25zLCB0aGUgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSBkZWFsaW5nIHdpdGggY3JlYXRpb24sIGRlc3RydWN0aW9uLCBnZXR0aW5nLCBwdXR0aW5nIGFuZCBsb29rdXAgc2VlbSBsaWtlIHRoZSBtb3N0IGNyaXRpY2FsIG9uZXMuIGByZHNfc2VuZG1zZ2AsIGByZHNfcmVjdl9pbmNvbWluZ2AsIGByZHNfaW5jX3B1dGAsIGByZHNfbWVzc2FnZV9mcmVlYCwgYW5kIGByZHNfdGNwX2FjY2VwdF9vbmVgIGFsc28gc3RhbmQgb3V0LCBhcyB0aGV5IGFyZSBhbGwgYXQgdGhlIGludGVyZmFjZSBib3VuZGFyeSBvZiB0aGUgdXNlciBhbmQga2VybmVsIHNwYWNlLiBTbywgSSBzZWxlY3QgYF9fcmRzX2Nvbm5fY3JlYXRlYCwgYHJkc19jb25uX2Rlc3Ryb3lgLCBgcmRzX2Nvbm5fZGVzdHJveV9maW5pYCwgYHJkc19jb25uX3B1dGAsIGByZHNfY29ubl9nZXRgLCBgcmRzX2Nvbm5fbG9va3VwYCwgYHJkc19zZW5kbXNnYCwgYHJkc19yZWN2X2luY29taW5nYCwgYHJkc19pbmNfcHV0YCwgYHJkc19tZXNzYWdlX2ZyZWVgLCBhbmQgYHJkc190Y3BfYWNjZXB0X29uZWAuCgpJIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byB0aGUgUkRTIHN1YnN5c3RlbSBhbmQgYXJlIGRpcmVjdGx5IHRvdWNoZWQgYnkgdGhlIHBhdGNoLiBUaGV5IGFsbCBzZWVtIHRvIGZpdCB0aGUgYmlsbC4KCk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoaXMgcGF0Y2ggbGlrZWx5IGludHJvZHVjZXMgY2hhbmdlcyByZWxhdGVkIHRvIGNvcmUgUkRTIGZ1bmN0aW9uYWxpdHksIGFsb25nIHdpdGggaXRzIFRDUCBhbmQgUkRNQSBpbXBsZW1lbnRhdGlvbnMuIFNvIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkIHdpdGggYFJEU2AsIGBSRFNfVENQYCwgYW5kIGBSRFNfUkRNQWAuIEdpdmVuIHRoYXQgYFJEU2AgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBSRFNfUkRNQWAgZGVwZW5kcyBvbiBgSU5GSU5JQkFORGAsIEkmIzM5O2xsIGFsc28gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKT2theSwgbGV0JiMzOTtzIGZvcm11bGF0ZSB0aGUgcmVhc29uaW5nIGNsZWFybHkuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCByZWZlcmVuY2UgY291bnRpbmcgb2YgYHN0cnVjdCByZHNfY29ubmVjdGlvbmAgd2l0aCBga3JlZmAsIGFuZCBpdCByZW9yZ2FuaXplcyBjb25uZWN0aW9uIGRlc3RydWN0aW9uIGludG8gYSBxdWllc2NpbmcgYW5kIGZyZWVpbmcgcGhhc2UuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhIGRlZXAgZGl2ZSBpbnRvIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGluY2x1ZGluZyBjb3JlIHN5bmNocm9uaXphdGlvbiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBSRFMgcHJvdG9jb2wuIFNpbmNlIFJEUyBpcyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgc29ja2V0IG9wZXJhdGlvbnMsIGZsYXdzIGhlcmUgY291bGQgaGF2ZSBzZXJpb3VzIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gVGhlIGNoYW5nZXMgdG91Y2ggY3JpdGljYWwgYXJlYXMgbGlrZSBzZW5kLCByZWNlaXZlLCBhbmQgbWVzc2FnZSBoYW5kbGluZywgYXMgd2VsbCBhcyB0cmFuc3BvcnQtc3BlY2lmaWMgaGFuZGxlcnMgaW4gbG9vcCwgVENQLCBhbmQgSUIuIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgYWxsIGFyZWFzIG9mIG5ldHdvcmtpbmcgYXJlIGNvbXBsZXggYW5kIHByb25lIHRvIGVycm9ycy4KClRoZXJlZm9yZSwgV29ydGhGdXp6aW5nPXRydWUuIE5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19yZHNfY29ubl9jcmVhdGUmIzM0OywKICAgICYjMzQ7cmRzX2Nvbm5fZGVzdHJveSYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9kZXN0cm95X2ZpbmkmIzM0OywKICAgICYjMzQ7cmRzX2Nvbm5fZ2V0JiMzNDssCiAgICAmIzM0O3Jkc19jb25uX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9sb29rdXAmIzM0OywKICAgICYjMzQ7cmRzX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cmRzX3JlY3ZfaW5jb21pbmcmIzM0OywKICAgICYjMzQ7cmRzX2luY19wdXQmIzM0OywKICAgICYjMzQ7cmRzX21lc3NhZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX2FjY2VwdF9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZWZlcmVuY2UgY291bnRpbmcgKGtyZWYpIHRvIHN0cnVjdCByZHNfY29ubmVjdGlvbiAoY19yZWZjb3VudCkgdG8gcHJvcGVybHkgbWFuYWdlIGNvbm5lY3Rpb24gbGlmZXRpbWVzIGFuZCBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGFuZCByYWNlIGNvbmRpdGlvbnMuIEl0IHJlZmFjdG9ycyBjb25uZWN0aW9uIHRlYXJkb3duIGludG8gc3luY2hyb25vdXMgcXVpZXNjZSAocmRzX2Nvbm5fcGF0aF9xdWllc2NlLCByZHNfY29ubl9kZXN0cm95KSBhbmQgYXN5bmNocm9ub3VzIGRlc3RydWN0aW9uIChyZHNfY29ubl9kZXN0cm95X2ZpbmkpLCBhbmQgdXBkYXRlcyByZWZlcmVuY2UgdHJhY2tpbmcgYWNyb3NzIHNvY2tldCByZWxlYXNlLCBtZXNzYWdlIHF1ZXVlcywgcmVjdi9zZW5kIHBhdGhzLCBhbmQgdHJhbnNwb3J0cyAoVENQLCBsb29wLCBJQikuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIGxvZ2ljLCBzeW5jaHJvbml6YXRpb24sIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpbiBuZXQvcmRzLCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkRTJiMzNDssCiAgICAmIzM0O1JEU19UQ1AmIzM0OywKICAgICYjMzQ7UkRTX1JETUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3Jkc19jb25uX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9kZXN0cm95JiMzNDssCiAgICAmIzM0O3Jkc19jb25uX2Rlc3Ryb3lfZmluaSYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9nZXQmIzM0OywKICAgICYjMzQ7cmRzX2Nvbm5fcHV0JiMzNDssCiAgICAmIzM0O3Jkc19jb25uX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyZHNfcmVjdl9pbmNvbWluZyYjMzQ7LAogICAgJiMzNDtyZHNfaW5jX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfbWVzc2FnZV9mcmVlJiMzNDssCiAgICAmIzM0O3Jkc190Y3BfYWNjZXB0X29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyAoa3JlZikgdG8gc3RydWN0IHJkc19jb25uZWN0aW9uIChjX3JlZmNvdW50KSB0byBwcm9wZXJseSBtYW5hZ2UgY29ubmVjdGlvbiBsaWZldGltZXMgYW5kIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucy4gSXQgcmVmYWN0b3JzIGNvbm5lY3Rpb24gdGVhcmRvd24gaW50byBzeW5jaHJvbm91cyBxdWllc2NlIChyZHNfY29ubl9wYXRoX3F1aWVzY2UsIHJkc19jb25uX2Rlc3Ryb3kpIGFuZCBhc3luY2hyb25vdXMgZGVzdHJ1Y3Rpb24gKHJkc19jb25uX2Rlc3Ryb3lfZmluaSksIGFuZCB1cGRhdGVzIHJlZmVyZW5jZSB0cmFja2luZyBhY3Jvc3Mgc29ja2V0IHJlbGVhc2UsIG1lc3NhZ2UgcXVldWVzLCByZWN2L3NlbmQgcGF0aHMsIGFuZCB0cmFuc3BvcnRzIChUQ1AsIGxvb3AsIElCKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgbG9naWMsIHN5bmNocm9uaXphdGlvbiwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGluIG5ldC9yZHMsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChga3JlZmApIG9mIGBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb25gIGFjcm9zcyB0aGUgUkRTIHN1YnN5c3RlbSAoaW5jbHVkaW5nIFRDUCwgSUIsIGFuZCBsb29wYmFjayB0cmFuc3BvcnRzKSB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGFuZCBtb2R1bGUtdW5sb2FkIHJhY2VzLlxuXG4tIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHJlZmNvdW50IGltYmFsYW5jZSwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBkZWFkbG9jayBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLCBTTFVCIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuXG4tIEtNU0FOIEFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgbW9kaWZ5IGFueSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBpbmZvLWxlYWsgcmlzayksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBzaXppbmcgb3IgYm91bmRzIGNoZWNraW5nLCBhbmQgYHN0cnVjdCByZHNfY29ubmVjdGlvbmAgb2JqZWN0cyBjb250aW51ZSB0byBiZSBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2NgIChmdWxseSB6ZXJvLWluaXRpYWxpemVkKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDAxNWUxODZlNTRlMzU5M2RmNmZmYTAwNzMxYWVhMDlhOTE4YWQyMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTU6NTY6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuYwppbmRleCBkNWRlZmU5MTcyZTM2Li4wZWFhNWI5NzY1NzI0IDEwMDY0NAotLS0gYS9uZXQvcmRzL2FmX3Jkcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvYWZfcmRzLmMKQEAgLTgwLDYgJiM0Mzs4MCwxNCBAQCBzdGF0aWMgaW50IHJkc19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAJcmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIE5VTEwpOwogCXJkc19ub3RpZnlfbXNnX3pjb3B5X3B1cmdlKCZhbXA7cnMtJmd0O3JzX3pjb29raWVfcXVldWUpOwogCiYjNDM7CS8qIGRyb3AgdGhlIGNhY2hlZCBjb25uZWN0aW9uIHJlZmVyZW5jZTsgbm8gc2VuZG1zZyBjYW4gcmFjZQomIzQzOwkgKiB3aXRoIHVzIGhlcmUsIHRoZSBzb2NrZXQgaXMgZ29pbmcgYXdheQomIzQzOwkgKi8KJiM0MzsJaWYgKHJzLSZndDtyc19jb25uKSB7CiYjNDM7CQlyZHNfY29ubl9wdXQocnMtJmd0O3JzX2Nvbm4pOwomIzQzOwkJcnMtJmd0O3JzX2Nvbm4gPSBOVUxMOwomIzQzOwl9CiYjNDM7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7cmRzX3NvY2tfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmYW1wO3JzLSZndDtyc19pdGVtKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3Jkc19zb2NrX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwppbmRleCBiNmM0YmViNTBlYWYwLi4yYzhjYTU0YTkxY2E4IDEwMDY0NAotLS0gYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwpAQCAtNDcsNyAmIzQzOzQ3LDggQEAKIAogLyogY29udmVydGluZyB0aGlzIHRvIFJDVSBpcyBhIGNob3JlIGZvciBhbm90aGVyIGRheS4uICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25uX2xvY2spOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2Nvbm5fY291bnQ7CiYjNDM7Lyogd29rZW4gd2hlbmV2ZXIgYSB0cmFuc3BvcnQmIzM5O3MgdF9jb25uX2NvdW50IGRyb3BzIHRvIHplcm8gKi8KJiM0MztzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2Nvbm5fZnJlZWRfd2FpdHEpOwogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIHJkc19jb25uX2hhc2hbUkRTX0NPTk5FQ1RJT05fSEFTSF9FTlRSSUVTXTsKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2Nvbm5fc2xhYjsKIApAQCAtNzksNyAmIzQzOzgwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqcmRzX2Nvbm5fYnVja2V0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsCiAJCXZhciB8PSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfIyNzdWZmaXg7CVwKIH0gd2hpbGUgKDApCiAKLS8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrICovCiYjNDM7LyogcmN1IHJlYWQgbG9jayBtdXN0IGJlIGhlbGQgb3IgdGhlIGNvbm5lY3Rpb24gc3BpbmxvY2suCiYjNDM7ICogT24gc3VjY2VzcyBhIHJlZmVyZW5jZSBpcyB0YWtlbiBvbiB0aGUgcmV0dXJuZWQgY29ubmVjdGlvbjsgdGhlCiYjNDM7ICogY2FsbGVyIG11c3QgZHJvcCBpdCB3aXRoIHJkc19jb25uX3B1dCgpLgomIzQzOyAqLwogc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsCiAJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsCkBAIC05Niw2ICYjNDM7MTAwLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCiAJCSAgICBjb25uLSZndDtjX3RvcyA9PSB0b3MgJmFtcDsmYW1wOwogCQkgICAgbmV0ID09IHJkc19jb25uX25ldChjb25uKSAmYW1wOyZhbXA7CiAJCSAgICBjb25uLSZndDtjX2Rldl9pZiA9PSBkZXZfaWYpIHsKJiM0MzsJCQkvKiBBbiBlbnRyeSB3aG9zZSByZWZjb3VudCBhbHJlYWR5IGRyb3BwZWQgdG8KJiM0MzsJCQkgKiB6ZXJvIGhhcyBiZWVuIHVuaGFzaGVkIGFuZCBpcyBhYm91dCB0byBiZQomIzQzOwkJCSAqIGZyZWVkOyBhbiBSQ1UgdHJhdmVyc2FsIG1heSBzdGlsbCBjb21lCiYjNDM7CQkJICogYWNyb3NzIGl0LiAgVHJlYXQgaXQgYXMgYWJzZW50LgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtjb25uLSZndDtjX3JlZmNvdW50KSkKJiM0MzsJCQkJY29udGludWU7CiAJCQlyZXQgPSBjb25uOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE5Nyw3ICYjNDM7MjA4LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJICogV2UgbmVlZCBhIHNlY29uZCBjb25uZWN0aW9uIG9iamVjdCBpbnRvIHdoaWNoIHdlCiAJCSAqIGNhbiBzdGljayB0aGUgb3RoZXIgUVAuICovCiAJCXBhcmVudCA9IGNvbm47CiYjNDM7CQkvKiBUaGUgY19wYXNzaXZlIHBvaW50ZXIgaG9sZHMgYSByZWZlcmVuY2Ugd2hpY2ggaXMgb25seQomIzQzOwkJICogZHJvcHBlZCBvbmUgc3luY2hyb25pemVfcmN1KCkgYWZ0ZXIgdGhlIHBvaW50ZXIgaXMKJiM0MzsJCSAqIGNsZWFyZWQsIHNvIHdpdGhpbiB0aGlzIFJDVSBzZWN0aW9uIGEgZmV0Y2hlZCBwb2ludGVyCiYjNDM7CQkgKiBpcyBhbHdheXMgc2FmZSB0byB0YWtlIGEgcmVmZXJlbmNlIG9uLgomIzQzOwkJICovCiAJCWNvbm4gPSBwYXJlbnQtJmd0O2NfcGFzc2l2ZTsKJiM0MzsJCWlmIChjb25uKQomIzQzOwkJCXJkc19jb25uX2dldChjb25uKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKGNvbm4pCkBAIC0yMTUsNiAmIzQzOzIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJZ290byBvdXQ7CiAJfQogCiYjNDM7CWtyZWZfaW5pdCgmYW1wO2Nvbm4tJmd0O2NfcmVmY291bnQpOwogCUlOSVRfSExJU1RfTk9ERSgmYW1wO2Nvbm4tJmd0O2NfaGFzaF9ub2RlKTsKIAljb25uLSZndDtjX2xhZGRyID0gKmxhZGRyOwogCWNvbm4tJmd0O2NfaXN2NiA9ICFpcHY2X2FkZHJfdjRtYXBwZWQobGFkZHIpOwpAQCAtMjgyLDggJiM0MzszMDEsOSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICBpc19vdXRnb2luZyk7CiAJCWNvbm4tJmd0O2NfcGF0aFtpXS5jcF9pbmRleCA9IGk7CiAJCWNvbm4tJmd0O2NfcGF0aFtpXS5jcF93cSA9Ci0JCQlhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgmIzM0O2tyZHNfY3Bfd3EjJWx1LyVkJiMzNDssIDAsCi0JCQkJCQlyZHNfY29ubl9jb3VudCwgaSk7CiYjNDM7CQkJYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoJiMzNDtrcmRzX2NwX3dxIyVkLyVkJiMzNDssIDAsCiYjNDM7CQkJCQkJYXRvbWljX3JlYWQoJmFtcDt0cmFucy0mZ3Q7dF9jb25uX2NvdW50KSwKJiM0MzsJCQkJCQlpKTsKIAkJaWYgKCFjb25uLSZndDtjX3BhdGhbaV0uY3Bfd3EpCiAJCQljb25uLSZndDtjX3BhdGhbaV0uY3Bfd3EgPSByZHNfd3E7CiAJfQpAQCAtMzE1LDE1ICYjNDM7MzM1LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Jkc19jb25uX2xvY2ssIGZsYWdzKTsKIAlpZiAocGFyZW50KSB7CiAJCS8qIENyZWF0aW5nIHBhc3NpdmUgY29ubiAqLwotCQlpZiAocGFyZW50LSZndDtjX3Bhc3NpdmUpIHsKJiM0MzsJCWlmIChSRUFEX09OQ0UocGFyZW50LSZndDtjX2Rlc3Ryb3lfaW5fcHJvZykpIHsKJiM0MzsJCQkvKiBUaGUgcGFyZW50JiMzOTtzIGRlc3Ryb3kgaGFzIGJlZ3VuIChpdCBzZXRzIHRoZQomIzQzOwkJCSAqIGZsYWcgYW5kIHNuYXRjaGVzIGNfcGFzc2l2ZSB1bmRlciB0aGlzCiYjNDM7CQkJICogbG9jayk7IGRvIG5vdCBpbnN0YWxsIGEgbmV3IHBhc3NpdmUgY29ubgomIzQzOwkJCSAqIHRoYXQgbm90aGluZyB3b3VsZCBldmVyIGRlc3Ryb3kuCiYjNDM7CQkJICovCiYjNDM7CQkJdHJhbnMtJmd0O2Nvbm5fZnJlZShjb25uLSZndDtjX3BhdGhbMF0uY3BfdHJhbnNwb3J0X2RhdGEpOwomIzQzOwkJCWZyZWVfY3AgPSBjb25uLSZndDtjX3BhdGg7CiYjNDM7CQkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOwomIzQzOwkJCWNvbm4gPSBFUlJfUFRSKC1FTkVURE9XTik7CiYjNDM7CQl9IGVsc2UgaWYgKHBhcmVudC0mZ3Q7Y19wYXNzaXZlKSB7CiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KHBhcmVudC0mZ3Q7Y19wYXNzaXZlKTsKIAkJCXRyYW5zLSZndDtjb25uX2ZyZWUoY29ubi0mZ3Q7Y19wYXRoWzBdLmNwX3RyYW5zcG9ydF9kYXRhKTsKIAkJCWZyZWVfY3AgPSBjb25uLSZndDtjX3BhdGg7CiAJCQlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CiAJCQljb25uID0gcGFyZW50LSZndDtjX3Bhc3NpdmU7CiAJCX0gZWxzZSB7CiYjNDM7CQkJLyogVGhlIGluaXRpYWwgcmVmZXJlbmNlIGJlbG9uZ3MgdG8gd2hvZXZlcgomIzQzOwkJCSAqIGRlc3Ryb3lzIHRoZSBjb25uICh0aGUgdHJhbnNwb3J0JiMzOTtzIGNvbm4KJiM0MzsJCQkgKiBsaXN0cywgYXMgZm9yIGFueSBvdGhlciBjb25uKS4gIFRha2Ugb25lCiYjNDM7CQkJICogZm9yIHRoZSBjX3Bhc3NpdmUgcG9pbnRlciAtIGRyb3BwZWQgd2hlbgomIzQzOwkJCSAqIHRoZSBwYXJlbnQgaXMgZGVzdHJveWVkIC0gYW5kIG9uZSBmb3Igb3VyCiYjNDM7CQkJICogY2FsbGVyLgomIzQzOwkJCSAqLwomIzQzOwkJCXJkc19jb25uX2dldChjb25uKTsJLyogY19wYXNzaXZlICovCiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KGNvbm4pOwkvKiBjYWxsZXIgKi8KIAkJCXBhcmVudC0mZ3Q7Y19wYXNzaXZlID0gY29ubjsKIAkJCXJkc19jb25nX2FkZF9jb25uKGNvbm4pOwotCQkJcmRzX2Nvbm5fY291bnQmIzQzOyYjNDM7OwomIzQzOwkJCWF0b21pY19pbmMoJmFtcDtjb25uLSZndDtjX3RyYW5zLSZndDt0X2Nvbm5fY291bnQpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogQ3JlYXRpbmcgbm9ybWFsIGNvbm4gKi8KQEAgLTM1MCwxNSAmIzQzOzM5MCwyMSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCX0gZWxzZSB7CiAJCQljb25uLSZndDtjX215X2dlbl9udW0gPSByZHNfZ2VuX251bTsKIAkJCWNvbm4tJmd0O2NfcGVlcl9nZW5fbnVtID0gMDsKJiM0MzsJCQkvKiB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyCiYjNDM7CQkJICogZGVzdHJveXMgdGhlIGNvbm47IHRha2Ugb25lIGZvciBvdXIgY2FsbGVyCiYjNDM7CQkJICovCiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KGNvbm4pOwogCQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7Y29ubi0mZ3Q7Y19oYXNoX25vZGUsIGhlYWQpOwogCQkJcmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7Ci0JCQlyZHNfY29ubl9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CQkJYXRvbWljX2luYygmYW1wO2Nvbm4tJmd0O2NfdHJhbnMtJmd0O3RfY29ubl9jb3VudCk7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3Jkc19jb25uX2xvY2ssIGZsYWdzKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogb3V0OgomIzQzOwlpZiAocGFyZW50KQomIzQzOwkJcmRzX2Nvbm5fcHV0KHBhcmVudCk7CiAJaWYgKGZyZWVfY3ApIHsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IG5wYXRoczsgaSYjNDM7JiM0MzspCiAJCQlpZiAoZnJlZV9jcFtpXS5jcF93cSAhPSByZHNfd3EpCkBAIC01MTUsMTAgJiM0Mzs1NjEsMTIgQEAgdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCWNvbm4tJmd0O2NfdHJhbnMtJmd0O2Nvbm5fc2xvdHNfYXZhaWxhYmxlKGNvbm4sIGZhbHNlKTsKIH0KIAotLyogZGVzdHJveSBhIHNpbmdsZSByZHNfY29ubl9wYXRoLiByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlcgotICogYWxsIHBhdGhzIHVzaW5nIHJkc19jb25uX3BhdGhfZGVzdHJveSgpCiYjNDM7LyogcXVpZXNjZSBhIHNpbmdsZSByZHNfY29ubl9wYXRoOiBzaHV0IGl0IGRvd24gYW5kIHRlYXIgZG93biBhbnkKJiM0MzsgKiBxdWV1ZWQgbWVzc2FnZXMuICByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlciBhbGwgcGF0aHMgdXNpbmcKJiM0MzsgKiByZHNfY29ubl9wYXRoX3F1aWVzY2UoKTsgdGhlIHRyYW5zcG9ydCBzdGF0ZSBhbmQgdGhlIHdvcmtxdWV1ZSBhcmUKJiM0MzsgKiBmcmVlZCBsYXRlciwgZnJvbSByZHNfY29ubl9wYXRoX2ZyZWUoKS4KICAqLwotc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKJiM0MztzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3F1aWVzY2Uoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogewogCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICpydG1wOwogCkBAIC01NDcsNiAmIzQzOzU5NSwxNiBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCVdBUk5fT04oZGVsYXllZF93b3JrX3BlbmRpbmcoJmFtcDtjcC0mZ3Q7Y3BfcmVjdl93KSk7CiAJV0FSTl9PTihkZWxheWVkX3dvcmtfcGVuZGluZygmYW1wO2NwLSZndDtjcF9jb25uX3cpKTsKIAlXQVJOX09OKHdvcmtfcGVuZGluZygmYW1wO2NwLSZndDtjcF9kb3duX3cpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZnJlZSBhIHF1aWVzY2VkIHJkc19jb25uX3BhdGgmIzM5O3MgdHJhbnNwb3J0IHN0YXRlIGFuZCB3b3JrcXVldWU7IHJ1bnMKJiM0MzsgKiBmcm9tIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgdGhlIGxhc3QgY29ubmVjdGlvbiByZWZlcmVuY2UgaXMKJiM0MzsgKiBkcm9wcGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZnJlZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiYjNDM7ewomIzQzOwlpZiAoIWNwLSZndDtjcF90cmFuc3BvcnRfZGF0YSkKJiM0MzsJCXJldHVybjsKIAogCWlmIChjcC0mZ3Q7Y3Bfd3EgIT0gcmRzX3dxKSB7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGNwLSZndDtjcF93cSk7CkBAIC01NTYsMTcgJiM0Mzs2MTQsNzQgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIAljcC0mZ3Q7Y3BfY29ubi0mZ3Q7Y190cmFucy0mZ3Q7Y29ubl9mcmVlKGNwLSZndDtjcF90cmFuc3BvcnRfZGF0YSk7CiB9CiAKJiM0MzsvKiBGcmVlIGEgY29ubmVjdGlvbi4gIFRoaXMgcnVucyBmcm9tIHJkc19jb25uX3B1dCgpIHdoZW4gdGhlIGxhc3QKJiM0MzsgKiByZWZlcmVuY2UgaXMgZHJvcHBlZCwgYWZ0ZXIgcmRzX2Nvbm5fZGVzdHJveSgpIGhhcyBxdWllc2NlZCB0aGUKJiM0MzsgKiBjb25uZWN0aW9uIGFuZCBkcm9wcGVkIHRoZSBpbml0aWFsIHJlZmVyZW5jZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByZHNfY29ubl9kZXN0cm95X2Zpbmkoc3RydWN0IGtyZWYgKmtyZWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJkc19jb25uZWN0aW9uLAomIzQzOwkJCQkJCSAgIGNfcmVmY291bnQpOwomIzQzOwlpbnQgbnBhdGhzID0gKGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7CiYjNDM7CXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucyA9IGNvbm4tJmd0O2NfdHJhbnM7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnBhdGhzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJkc19jb25uX3BhdGhfZnJlZSgmYW1wO2Nvbm4tJmd0O2NfcGF0aFtpXSk7CiYjNDM7CiYjNDM7CWtmcmVlKGNvbm4tJmd0O2NfcGF0aCk7CiYjNDM7CWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKJiM0MzsKJiM0MzsJLyogb25seSBhZnRlciBldmVyeXRoaW5nIHRoZSB0cmFuc3BvcnQgbW9kdWxlIG93bnMgaGFzIGJlZW4KJiM0MzsJICogZnJlZWQgYWJvdmUgbWF5IGl0cyB1bmxvYWQgcHJvY2VlZAomIzQzOwkgKi8KJiM0MzsJaWYgKCFhdG9taWNfZGVjX3JldHVybigmYW1wO3RyYW5zLSZndDt0X2Nvbm5fY291bnQpKQomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtyZHNfY29ubl9mcmVlZF93YWl0cSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFdhaXQgZm9yIGFsbCBvZiBAdHJhbnMmIzM5O3MgY29ubmVjdGlvbnMgdG8gYmUgZnJlZWQ7IHRoZSBmcmVlIHJ1bnMKJiM0MzsgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYSBjb25uZWN0aW9uLgomIzQzOyAqIENhbGxlZCBvbiB0cmFuc3BvcnQgbW9kdWxlIHVubG9hZCwgYWZ0ZXIgdGhlIHRyYW5zcG9ydCBkZXN0cm95ZWQKJiM0MzsgKiBhbGwgb2YgaXRzIGNvbm5lY3Rpb25zOiBhbnl0aGluZyBzdGlsbCBob2xkaW5nIGEgY29ubmVjdGlvbgomIzQzOyAqIHJlZmVyZW5jZSBhdCB0aGF0IHBvaW50IGlzIGEgc2hvcnQtbGl2ZWQgbG9va3VwLXN0eWxlIGhvbGRlciwgc28KJiM0MzsgKiBhIGJvdW5kZWQgd2FpdCBzdWZmaWNlcyAtIGJ1dCB3YXJuIGlmIGl0IGV4cGlyZXMsIHNpbmNlIHRoZSBmcmVlcwomIzQzOyAqIHRoYXQgZm9sbG93IHRoZSB1bmxvYWQgd2lsbCB0aGVuIHRvdWNoIGZyZWVkIG1vZHVsZSB0ZXh0LgomIzQzOyAqLwomIzQzO3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpCiYjNDM7ewomIzQzOwlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChyZHNfY29ubl9mcmVlZF93YWl0cSwKJiM0MzsJCQkJIWF0b21pY19yZWFkKCZhbXA7dHJhbnMtJmd0O3RfY29ubl9jb3VudCksCiYjNDM7CQkJCW1zZWNzX3RvX2ppZmZpZXMoUkRTX0NPTk5fRlJFRV9USU1FT1VUX01TKSkpCiYjNDM7CQlXQVJOKDEsICYjMzQ7UkRTLyVzOiAlZCBjb25uZWN0aW9uKHMpIG5vdCBmcmVlZFxuJiMzNDssCiYjNDM7CQkgICAgIHRyYW5zLSZndDt0X25hbWUsIGF0b21pY19yZWFkKCZhbXA7dHJhbnMtJmd0O3RfY29ubl9jb3VudCkpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKTsKJiM0MzsKJiM0Mzt2b2lkIHJkc19jb25uX2dldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiYjNDM7ewomIzQzOwlrcmVmX2dldCgmYW1wO2Nvbm4tJmd0O2NfcmVmY291bnQpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9nZXQpOwomIzQzOwomIzQzO3ZvaWQgcmRzX2Nvbm5fcHV0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKJiM0Mzt7CiYjNDM7CWtyZWZfcHV0KCZhbXA7Y29ubi0mZ3Q7Y19yZWZjb3VudCwgcmRzX2Nvbm5fZGVzdHJveV9maW5pKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcHV0KTsKJiM0MzsKIC8qCiAgKiBTdG9wIGFuZCBmcmVlIGEgY29ubmVjdGlvbi4KICAqCi0gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gdmVyeSBsaW1pdGVkIGNpcmN1bXN0YW5jZXMuICBJdCBhc3N1bWVzIHRoYXQgb25jZQotICogdGhlIGNvbm4gaGFzIGJlZW4gc2h1dGRvd24gdGhhdCBubyBvbmUgZWxzZSBpcyByZWZlcmVuY2luZyB0aGUgY29ubmVjdGlvbi4KLSAqIFdlIGNhbiBvbmx5IGVuc3VyZSB0aGlzIGluIHRoZSBybW1vZCBwYXRoIGluIHRoZSBjdXJyZW50IGNvZGUuCiYjNDM7ICogUXVpZXNjZXMgdGhlIGNvbm5lY3Rpb24gc3luY2hyb25vdXNseSAod29ya2VycyBjYW5jZWxsZWQsIHRyYW5zcG9ydAomIzQzOyAqIGNvbm5lY3Rpb25zIHNodXQgZG93biwgcXVldWVkIG1lc3NhZ2VzIGRyb3BwZWQpIGFuZCBkcm9wcyB0aGUKJiM0MzsgKiBpbml0aWFsIHJlZmVyZW5jZS4gIFRoZSBtZW1vcnkgLSBpbmNsdWRpbmcgdGhlIHRyYW5zcG9ydCYjMzk7cwomIzQzOyAqIHBlci1jb25uZWN0aW9uIHN0YXRlIGFuZCB0aGUgcGF0aCB3b3JrcXVldWVzIC0gaXMgZnJlZWQgb25jZSB0aGUKJiM0MzsgKiBsYXN0IHJkc19jb25uX3B1dCgpIHJ1bnMsIHdoaWNoIG1heSBiZSBhZnRlciB0aGlzIHJldHVybnMuCiAgKi8KIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKJiM0MzsJc3RydWN0IHJkc19jb25uZWN0aW9uICpwYXNzaXZlOwogCXN0cnVjdCByZHNfY29ubl9wYXRoICpjcDsKIAlpbnQgbnBhdGhzID0gKGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7CiAKQEAgLTU3NCwxNiAmIzQzOzY4OSw0NiBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQogCQkgJiMzNDslcEk0XG4mIzM0OywgY29ubiwgJmFtcDtjb25uLSZndDtjX2xhZGRyLAogCQkgJmFtcDtjb25uLSZndDtjX2ZhZGRyKTsKIAotCS8qIEVuc3VyZSBjb25uIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBmb3IgcmVjb25uZWN0ICovCiYjNDM7CS8qIE1ha2UgcmRzX2Rlc3Ryb3lfcGVuZGluZygpIHRydWUgZm9yIHRoaXMgY29ubi4gIFRvZ2V0aGVyIHdpdGgKJiM0MzsJICogdGhlIHN5bmNocm9uaXplX3JjdSgpIGJlbG93IHRoaXMgc3RvcHMgdGhlIHdvcmstcmVxdWV1ZWluZwomIzQzOwkgKiBzaXRlcyAod2hpY2ggYWxsIHRlc3QgcmRzX2Rlc3Ryb3lfcGVuZGluZygpIHVuZGVyCiYjNDM7CSAqIHJjdV9yZWFkX2xvY2soKSkgZnJvbSBxdWV1ZWluZyBuZXcgd29yayBvbiB0aGUgcGF0aAomIzQzOwkgKiB3b3JrcXVldWVzIG9uY2Ugd2Ugc3RhcnQgY2FuY2VsbGluZyBhbmQgZGVzdHJveWluZyB0aGVtLgomIzQzOwkgKgomIzQzOwkgKiBOb3cgdGhhdCB0aGUgdHJhbnNwb3J0IHN0YXRlIHN0YXlzIGRpc2NvdmVyYWJsZSAoZS5nLiBvbiB0aGUKJiM0MzsJICogdHJhbnNwb3J0cyYjMzk7IGNvbm5lY3Rpb24gbGlzdHMpIHVudGlsIHRoZSBmaW5hbCByZHNfY29ubl9wdXQoKSwKJiM0MzsJICogYSBjb25uIGNhbiBiZSBoYW5kZWQgdG8gcmRzX2Nvbm5fZGVzdHJveSgpIG1vcmUgdGhhbiBvbmNlIC0KJiM0MzsJICogZS5nLiBkcm9wcGVkIGZvciBhIHByb3RvY29sIHZlcnNpb24gbWlzbWF0Y2ggYW5kIHRoZW4gZm91bmQKJiM0MzsJICogYWdhaW4gYXQgbW9kdWxlIHVubG9hZC4gIE9ubHkgdGhlIGZpcnN0IGNhbGxlciBwcm9jZWVkczsgdGhlCiYjNDM7CSAqIHVuaGFzaCBhbHNvIGhhcHBlbnMgdW5kZXIgcmRzX2Nvbm5fbG9jaywgc28gYSBsb29rZWQtdXAgY29ubgomIzQzOwkgKiBjYW4gbmV2ZXIgYmUgcXVpZXNjZWQgdHdpY2UuCiYjNDM7CSAqLwogCXNwaW5fbG9ja19pcnEoJmFtcDtyZHNfY29ubl9sb2NrKTsKJiM0MzsJaWYgKGNvbm4tJmd0O2NfZGVzdHJveV9pbl9wcm9nKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnEoJmFtcDtyZHNfY29ubl9sb2NrKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlXUklURV9PTkNFKGNvbm4tJmd0O2NfZGVzdHJveV9pbl9wcm9nLCB0cnVlKTsKJiM0MzsKJiM0MzsJLyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi8KIAlobGlzdF9kZWxfaW5pdF9yY3UoJmFtcDtjb25uLSZndDtjX2hhc2hfbm9kZSk7CiYjNDM7CiYjNDM7CS8qIFNuYXRjaCBjX3Bhc3NpdmUgd2hpbGUgaG9sZGluZyB0aGUgbG9jazoKJiM0MzsJICogX19yZHNfY29ubl9jcmVhdGUoKSBkZXJlZmVyZW5jZXMgaXQgdW5kZXIgcmN1X3JlYWRfbG9jaygpCiYjNDM7CSAqIChhbmQgcmVmdXNlcyB0byBpbnN0YWxsIGEgbmV3IG9uZSBvbmNlIGNfZGVzdHJveV9pbl9wcm9nIGlzCiYjNDM7CSAqIHNldCwgd2hpY2ggaXQgY2hlY2tzIHVuZGVyIHRoaXMgbG9jaykuICBBZnRlciB0aGUKJiM0MzsJICogc3luY2hyb25pemVfcmN1KCkgYmVsb3cgbm8gb25lIGNhbiBwaWNrIHRoZSBwb2ludGVyIHVwIGFueQomIzQzOwkgKiBtb3JlIGFuZCBpdHMgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJcGFzc2l2ZSA9IGNvbm4tJmd0O2NfcGFzc2l2ZTsKJiM0MzsJY29ubi0mZ3Q7Y19wYXNzaXZlID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnEoJmFtcDtyZHNfY29ubl9sb2NrKTsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCS8qIHNodXQgdGhlIGNvbm5lY3Rpb24gZG93biAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBucGF0aHM7IGkmIzQzOyYjNDM7KSB7CiAJCWNwID0gJmFtcDtjb25uLSZndDtjX3BhdGhbaV07Ci0JCXJkc19jb25uX3BhdGhfZGVzdHJveShjcCk7CiYjNDM7CQlyZHNfY29ubl9wYXRoX3F1aWVzY2UoY3ApOwogCQlCVUdfT04oIWxpc3RfZW1wdHkoJmFtcDtjcC0mZ3Q7Y3BfcmV0cmFucykpOwogCX0KIApAQCAtNTk0LDEyICYjNDM7NzM5LDE0IEBAIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiAJICovCiAJcmRzX2NvbmdfcmVtb3ZlX2Nvbm4oY29ubik7CiAKLQlrZnJlZShjb25uLSZndDtjX3BhdGgpOwotCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKJiM0MzsJLyogZHJvcCB0aGUgcmVmZXJlbmNlIG91ciBjX3Bhc3NpdmUgcG9pbnRlciBoZWxkLCBpZiBhbnkgKi8KJiM0MzsJaWYgKHBhc3NpdmUpCiYjNDM7CQlyZHNfY29ubl9wdXQocGFzc2l2ZSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Jkc19jb25uX2xvY2ssIGZsYWdzKTsKLQlyZHNfY29ubl9jb3VudC0tOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyZHNfY29ubl9sb2NrLCBmbGFncyk7CiYjNDM7CS8qIGRyb3AgdGhlIGluaXRpYWwgcmVmZXJlbmNlOyB0aGUgY29ubmVjdGlvbiBpcyBmcmVlZCBmcm9tCiYjNDM7CSAqIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgZXZlcnkgaG9sZGVyIGhhcyBkcm9wcGVkIHRoZWlycwomIzQzOwkgKi8KJiM0MzsJcmRzX2Nvbm5fcHV0KGNvbm4pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZGVzdHJveSk7CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuYyBiL25ldC9yZHMvaWIuYwppbmRleCA3ODZmMzkxNjliYzE0Li43NTU2OTA1ODMzMjU5IDEwMDY0NAotLS0gYS9uZXQvcmRzL2liLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9pYi5jCkBAIC01MjUsMTAgJiM0Mzs1MjUsNyBAQCBzdGF0aWMgdm9pZCByZHNfaWJfc2V0X3VubG9hZGluZyh2b2lkKQogCiBzdGF0aWMgYm9vbCByZHNfaWJfaXNfdW5sb2FkaW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKIHsKLQlzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AgPSAmYW1wO2Nvbm4tJmd0O2NfcGF0aFswXTsKLQotCXJldHVybiAodGVzdF9iaXQoUkRTX0RFU1RST1lfUEVORElORywgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpIHx8Ci0JCWF0b21pY19yZWFkKCZhbXA7cmRzX2liX3VubG9hZGluZykgIT0gMCk7CiYjNDM7CXJldHVybiBhdG9taWNfcmVhZCgmYW1wO3Jkc19pYl91bmxvYWRpbmcpICE9IDA7CiB9CiAKIHZvaWQgcmRzX2liX2V4aXQodm9pZCkKQEAgLTU0MSw2ICYjNDM7NTM4LDE1IEBAIHZvaWQgcmRzX2liX2V4aXQodm9pZCkKICNlbmRpZgogCXJkc19pYl91bnJlZ2lzdGVyX2NsaWVudCgpOwogCXJkc19pYl9kZXN0cm95X25vZGV2X2Nvbm5zKCk7CiYjNDM7CXJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoJmFtcDtyZHNfaWJfdHJhbnNwb3J0KTsKJiM0MzsKJiM0MzsJLyogVGVhcmluZyBkb3duIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWF5IGhhdmUgZHJvcHBlZCB0aGUgZmluYWwKJiM0MzsJICogcmVmZXJlbmNlIG9uIGEgZGV2aWNlLCBkZWZlcnJpbmcgcmRzX2liX2Rldl9mcmVlKCkgdG8gcmRzX3dxLgomIzQzOwkgKiBEcmFpbiBpdCBiZWZvcmUgdGhlIG1vZHVsZSBnb2VzIGF3YXk7IGl0IHF1ZXVlcyBub3RoaW5nCiYjNDM7CSAqIGZ1cnRoZXIgb24gcmRzX3dxLgomIzQzOwkgKi8KJiM0MzsJZmx1c2hfd29ya3F1ZXVlKHJkc193cSk7CiYjNDM7CiAJcmRzX2liX3N5c2N0bF9leGl0KCk7CiAJcmRzX2liX3JlY3ZfZXhpdCgpOwogCXJkc190cmFuc191bnJlZ2lzdGVyKCZhbXA7cmRzX2liX3RyYW5zcG9ydCk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmMKaW5kZXggNGZlYjBlZGMzNjBjOC4uMjRlNTM4YzI1M2E3YSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9jbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWJfY20uYwpAQCAtOTI0LDggJiM0Mzs5MjQsMTQgQEAgaW50IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCiAJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICYjMzQ7cmRtYV9hY2NlcHQgZmFpbGVkXG4mIzM0Oyk7CiAKIG91dDoKLQlpZiAoY29ubikKJiM0MzsJaWYgKGNvbm4pIHsKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7Y29ubi0mZ3Q7Y19jbV9sb2NrKTsKJiM0MzsJCS8qIFRoZSBjb25uIHN0YXlzIHJlYWNoYWJsZSB0aHJvdWdoIGNtX2lkLSZndDtjb250ZXh0CiYjNDM7CQkgKiB3aXRob3V0IGEgcmVmZXJlbmNlIG9mIGl0cyBvd246IGNvbm5lY3Rpb24gZGVzdHJveQomIzQzOwkJICogc2h1dHMgdGhlIGNtX2lkIGRvd24gYmVmb3JlIHRoZSBjb25uIGlzIGZyZWVkLgomIzQzOwkJICovCiYjNDM7CQlyZHNfY29ubl9wdXQoY29ubik7CiYjNDM7CX0KIAlpZiAoZXJyKQogCQlyZG1hX3JlamVjdChjbV9pZCwgJmFtcDtlcnIsIHNpemVvZihpbnQpLAogCQkJICAgIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVEKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvbG9vcC5jIGIvbmV0L3Jkcy9sb29wLmMKaW5kZXggZTZiMDc1MGJiZWRhYi4uN2RhZjhlZDI1ZDY5YSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9sb29wLmMKQEAgLTE5NSw2ICYjNDM7MTk1LDggQEAgdm9pZCByZHNfbG9vcF9leGl0KHZvaWQpCiAJCVdBUk5fT04obGMtJmd0O2Nvbm4tJmd0O2NfcGFzc2l2ZSk7CiAJCXJkc19jb25uX2Rlc3Ryb3kobGMtJmd0O2Nvbm4pOwogCX0KJiM0MzsKJiM0MzsJcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZCgmYW1wO3Jkc19sb29wX3RyYW5zcG9ydCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJkc19sb29wX2tpbGxfY29ubnMoc3RydWN0IG5ldCAqbmV0KQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuYwppbmRleCBmMjVmMjU5MjU4NmY3Li4yOWU5NTAyOGU2MWU0IDEwMDY0NAotLS0gYS9uZXQvcmRzL21lc3NhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL21lc3NhZ2UuYwpAQCAtMTgyLDYgJiM0MzsxODIsMTggQEAgc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSkKIAkJa3JlZl9wdXQoJmFtcDtybS0mZ3Q7YXRvbWljLm9wX3JkbWFfbXItJmd0O3Jfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX2ZyZWUoc3RydWN0IHJkc19tZXNzYWdlICpybSkKJiM0Mzt7CiYjNDM7CS8qIGdldCBpbiByZHNfc2VuZF9xdWV1ZV9ybSgpLCByZHNfc2VuZF9wcm9iZSgpIG9yIHRoZSBjb25nZXN0aW9uCiYjNDM7CSAqIG1hcCBwYXRoIG9mIHJkc19zZW5kX3htaXQoKS4gIE1lc3NhZ2VzIHRoYXQgd2VyZSBuZXZlciBxdWV1ZWQgb24KJiM0MzsJICogYSBjb25uZWN0aW9uIGhhdmUgbm8gcmVmZXJlbmNlIHRvIGRyb3AuCiYjNDM7CSAqLwomIzQzOwlpZiAocm0tJmd0O21faW5jLmlfY29ubikKJiM0MzsJCXJkc19jb25uX3B1dChybS0mZ3Q7bV9pbmMuaV9jb25uKTsKJiM0MzsKJiM0MzsJa2ZyZWUocm0pOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsCkBAIC0xOTIsNyAmIzQzOzIwNCw3IEBAIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJaWYgKHJtLSZndDthdG9taWMub3BfdW5waW5fZGVmZXJyZWQpCiAJCXJkc19hdG9taWNfb3BfdW5waW5fcGFnZSgmYW1wO3JtLSZndDthdG9taWMpOwogCi0Ja2ZyZWUocm0pOwomIzQzOwlyZHNfbWVzc2FnZV9mcmVlKHJtKTsKIH0KIAogdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSkKQEAgLTIxNyw3ICYjNDM7MjI5LDcgQEAgdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSkKIAkJCXJldHVybjsKIAkJfQogCi0JCWtmcmVlKHJtKTsKJiM0MzsJCXJkc19tZXNzYWdlX2ZyZWUocm0pOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19tZXNzYWdlX3B1dCk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaAppbmRleCAyZGI0OTU3M2RhY2Q1Li4zNTc2MGRkNmIwNzdmIDEwMDY0NAotLS0gYS9uZXQvcmRzL3Jkcy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRzLmgKQEAgLTg5LDcgJiM0Mzs4OSw2IEBAIGVudW0gewogI2RlZmluZSBSRFNfUkVDT05ORUNUX1BFTkRJTkcJMQogI2RlZmluZSBSRFNfSU5fWE1JVAkJMgogI2RlZmluZSBSRFNfUkVDVl9SRUZJTEwJCTMKLSNkZWZpbmUJUkRTX0RFU1RST1lfUEVORElORwk0CiAKIC8qIE1heCBudW1iZXIgb2YgbXVsdGlwYXRocyBwZXIgUkRTIGNvbm5lY3Rpb24uIE11c3QgYmUgYSBwb3dlciBvZiAyICovCiAjZGVmaW5lCVJEU19NUEFUSF9XT1JLRVJTCTgKQEAgLTEzOCw2ICYjNDM7MTM3LDEyIEBAIHN0cnVjdCByZHNfY29ubl9wYXRoIHsKIC8qIE9uZSByZHNfY29ubmVjdGlvbiBwZXIgUkRTIGFkZHJlc3MgcGFpciAqLwogc3RydWN0IHJkc19jb25uZWN0aW9uIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQljX2hhc2hfbm9kZTsKJiM0MzsJLyogRnJlZSBvZiB0aGUgY29ubmVjdGlvbiBtZW1vcnkgKG5vdCB0aGUgdGVhcmRvd24gb2YgaXRzCiYjNDM7CSAqIHRyYW5zcG9ydCBzdGF0ZSAtIHRoYXQgc3RheXMgc3luY2hyb25vdXMgaW4KJiM0MzsJICogcmRzX2Nvbm5fZGVzdHJveSgpKSBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgbGFzdCByZWZlcmVuY2UgaXMKJiM0MzsJICogZHJvcHBlZCB2aWEgcmRzX2Nvbm5fcHV0KCkuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3Qga3JlZgkJY19yZWZjb3VudDsKIAlzdHJ1Y3QgaW42X2FkZHIJCWNfbGFkZHI7CiAJc3RydWN0IGluNl9hZGRyCQljX2ZhZGRyOwogCWludAkJCWNfZGV2X2lmOyAvKiBpZmluZGV4IHVzZWQgZm9yIHRoaXMgY29ubiAqLwpAQCAtMTQ4LDYgJiM0MzsxNTMsMTAgQEAgc3RydWN0IHJkc19jb25uZWN0aW9uIHsKIAkJCQljX3BhZF90b18zMjoyOTsKIAlpbnQJCQljX25wYXRoczsKIAlib29sCQkJY193aXRoX3Nwb3J0X2lkeDsKJiM0MzsJLyogU2V0ICh1bmRlciBSQ1UpIHdoZW4gcmRzX2Nvbm5fZGVzdHJveSgpIHN0YXJ0cyBvbiB0aGlzIGNvbm47CiYjNDM7CSAqIHJlYWQgdGhyb3VnaCByZHNfZGVzdHJveV9wZW5kaW5nKCkuCiYjNDM7CSAqLwomIzQzOwlib29sCQkJY19kZXN0cm95X2luX3Byb2c7CiAJc3RydWN0IHJkc19jb25uZWN0aW9uCSpjX3Bhc3NpdmU7CiAJc3RydWN0IHJkc190cmFuc3BvcnQJKmNfdHJhbnM7CiAKQEAgLTU0NCw2ICYjNDM7NTUzLDEyIEBAIHN0cnVjdCByZHNfdHJhbnNwb3J0IHsKIAl1bnNpZ25lZCBpbnQJCXRfcHJlZmVyX2xvb3BiYWNrOjEsCiAJCQkJdF9tcF9jYXBhYmxlOjE7CiAJdW5zaWduZWQgaW50CQl0X3R5cGU7CiYjNDM7CS8qIENvbm5lY3Rpb25zIG9mIHRoaXMgdHJhbnNwb3J0IG5vdCB5ZXQgZnJlZWQ7IGZyZWVpbmcgcnVucwomIzQzOwkgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYQomIzQzOwkgKiBjb25uZWN0aW9uLCBzbyB0cmFuc3BvcnQgbW9kdWxlIHVubG9hZCBoYXMgdG8gd2FpdCBmb3IgdGhpcwomIzQzOwkgKiB0byByZWFjaCB6ZXJvIChyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKCkpLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX3QJCXRfY29ubl9jb3VudDsKIAogCWludCAoKmxhZGRyX2NoZWNrKShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJCSAgIF9fdTMyIHNjb3BlX2lkKTsKQEAgLTgxOSw2ICYjNDM7ODM0LDExIEBAIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJCXU4IHRvcywgZ2ZwX3QgZ2ZwLCBpbnQgZGV2X2lmKTsKIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoKTsKIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwomIzQzO3ZvaWQgcmRzX2Nvbm5fZ2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CiYjNDM7dm9pZCByZHNfY29ubl9wdXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKJiM0MzsvKiBob3cgbG9uZyB0cmFuc3BvcnQgdW5sb2FkIHdhaXRzIGZvciBpdHMgY29ubmVjdGlvbnMgdG8gYmUgZnJlZWQgKi8KJiM0MzsjZGVmaW5lIFJEU19DT05OX0ZSRUVfVElNRU9VVF9NUwkxMDAwMAomIzQzO3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpOwogdm9pZCByZHNfY29ubl9kcm9wKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CiB2b2lkIHJkc19jb25uX3BhdGhfZHJvcChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3BhdGgsIGJvb2wgZGVzdHJveSk7CiB2b2lkIHJkc19jb25uX2Nvbm5lY3RfaWZfZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwpAQCAtOTk0LDcgJiM0MzsxMDE0LDggQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgcmRzX2Rlc3Ryb3lfcGVuZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JcmV0dXJuICFjaGVja19uZXQocmRzX2Nvbm5fbmV0KGNvbm4pKSB8fAomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKGNvbm4tJmd0O2NfZGVzdHJveV9pbl9wcm9nKSB8fAomIzQzOwkgICAgICAgIWNoZWNrX25ldChyZHNfY29ubl9uZXQoY29ubikpIHx8CiAJICAgICAgIChjb25uLSZndDtjX3RyYW5zLSZndDt0X3VubG9hZGluZyAmYW1wOyZhbXA7IGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfdW5sb2FkaW5nKGNvbm4pKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZWN2LmMgYi9uZXQvcmRzL3JlY3YuYwppbmRleCA2MjA0ZTU3N2E5MGFlLi5iMDMxYzBiNDNhZjgzIDEwMDY0NAotLS0gYS9uZXQvcmRzL3JlY3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3JlY3YuYwpAQCAtNDYsNiAmIzQzOzQ2LDcgQEAgdm9pZCByZHNfaW5jX2luaXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCiB7CiAJcmVmY291bnRfc2V0KCZhbXA7aW5jLSZndDtpX3JlZmNvdW50LCAxKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2luYy0mZ3Q7aV9pdGVtKTsKJiM0MzsJcmRzX2Nvbm5fZ2V0KGNvbm4pOwkvKiBwdXQgaW4gcmRzX2luY19wdXQoKSAqLwogCWluYy0mZ3Q7aV9jb25uID0gY29ubjsKIAlpbmMtJmd0O2lfY29ubl9wYXRoID0gTlVMTDsKIAlpbmMtJmd0O2lfc2FkZHIgPSAqc2FkZHI7CkBAIC02MSw2ICYjNDM7NjIsNyBAQCB2b2lkIHJkc19pbmNfcGF0aF9pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uX3BhdGggKmNwLAogewogCXJlZmNvdW50X3NldCgmYW1wO2luYy0mZ3Q7aV9yZWZjb3VudCwgMSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtpbmMtJmd0O2lfaXRlbSk7CiYjNDM7CXJkc19jb25uX2dldChjcC0mZ3Q7Y3BfY29ubik7CS8qIHB1dCBpbiByZHNfaW5jX3B1dCgpICovCiAJaW5jLSZndDtpX2Nvbm4gPSBjcC0mZ3Q7Y3BfY29ubjsKIAlpbmMtJmd0O2lfY29ubl9wYXRoID0gY3A7CiAJaW5jLSZndDtpX3NhZGRyID0gKnNhZGRyOwpAQCAtODEsOSAmIzQzOzgzLDE5IEBAIHZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQogewogCXJkc2RlYnVnKCYjMzQ7cHV0IGluYyAlcCByZWYgJWRcbiYjMzQ7LCBpbmMsIHJlZmNvdW50X3JlYWQoJmFtcDtpbmMtJmd0O2lfcmVmY291bnQpKTsKIAlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7aW5jLSZndDtpX3JlZmNvdW50KSkgewomIzQzOwkJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaW5jLSZndDtpX2Nvbm47CiYjNDM7CiAJCUJVR19PTighbGlzdF9lbXB0eSgmYW1wO2luYy0mZ3Q7aV9pdGVtKSk7CiAKLQkJaW5jLSZndDtpX2Nvbm4tJmd0O2NfdHJhbnMtJmd0O2luY19mcmVlKGluYyk7CiYjNDM7CQkvKiBpbmNfZnJlZSgpIGNhbiBmcmVlIHRoZSBtZW1vcnkgQGluYyBsaXZlcyBpbiwgc28gdGhlCiYjNDM7CQkgKiBjb25uZWN0aW9uIHJlZmVyZW5jZSBoYXMgdG8gYmUgZHJvcHBlZCB0aHJvdWdoIHRoZQomIzQzOwkJICogY29weSB0YWtlbiBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJY29ubi0mZ3Q7Y190cmFucy0mZ3Q7aW5jX2ZyZWUoaW5jKTsKJiM0MzsJCS8qIGdldCBpbiByZHNfaW5jX2luaXQoKSwgcmRzX2luY19wYXRoX2luaXQoKSBvcgomIzQzOwkJICogcmRzX3JlY3ZfaW5jb21pbmcoKQomIzQzOwkJICovCiYjNDM7CQlyZHNfY29ubl9wdXQoY29ubik7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwocmRzX2luY19wdXQpOwpAQCAtMzI1LDYgJiM0MzszMzcsMTMgQEAgdm9pZCByZHNfcmVjdl9pbmNvbWluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7CiAKJiM0MzsJLyogZXZlcnkgY2FsbGVyIGluaXRpYWxpemVkIEBpbmMgd2l0aCByZHNfaW5jX2luaXQoKSBvcgomIzQzOwkgKiByZHNfaW5jX3BhdGhfaW5pdCgpIGZpcnN0LCBzbyBpX2Nvbm4gYWxyZWFkeSBob2xkcyBhIHJlZmVyZW5jZS4KJiM0MzsJICogVGFrZSB0aGUgbmV3IG9uZSBiZWZvcmUgZHJvcHBpbmcgdGhlIG9sZCwgc28gdGhhdCByZS1wb2ludGluZyBhbgomIzQzOwkgKiBpbmMgYXQgdGhlIGNvbm5lY3Rpb24gaXQgYWxyZWFkeSByZWZlcnMgdG8gY2Fubm90IGZyZWUgaXQuCiYjNDM7CSAqLwomIzQzOwlyZHNfY29ubl9nZXQoY29ubik7CiYjNDM7CXJkc19jb25uX3B1dChpbmMtJmd0O2lfY29ubik7CiAJaW5jLSZndDtpX2Nvbm4gPSBjb25uOwogCWluYy0mZ3Q7aV9yeF9qaWZmaWVzID0gamlmZmllczsKIAlpZiAoY29ubi0mZ3Q7Y190cmFucy0mZ3Q7dF9tcF9jYXBhYmxlKQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuYwppbmRleCAxYWZhOTgxZTVjMDZkLi4wNDVlYjNjM2Y5NzcyIDEwMDY0NAotLS0gYS9uZXQvcmRzL3NlbmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3NlbmQuYwpAQCAtMjkwLDYgJiM0MzsyOTAsNyBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCQl9CiAJCQlybS0mZ3Q7ZGF0YS5vcF9hY3RpdmUgPSAxOwogCQkJcm0tJmd0O21faW5jLmlfY29ubl9wYXRoID0gY3A7CiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KGNwLSZndDtjcF9jb25uKTsJLyogcHV0IGluIHJkc19tZXNzYWdlX3B1dCgpICovCiAJCQlybS0mZ3Q7bV9pbmMuaV9jb25uID0gY3AtJmd0O2NwX2Nvbm47CiAKIAkJCWNwLSZndDtjcF94bWl0X3JtID0gcm07CkBAIC05NDcsNiAmIzQzOzk0OCw3IEBAIHN0YXRpYyBpbnQgcmRzX3NlbmRfcXVldWVfcm0oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAogCQkvKiBUaGUgY29kZSBvcmRlcmluZyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IHdlJiMzOTtyZQogCQkgICB0cnlpbmcgdG8gbWluaW1pemUgdGhlIHRpbWUgd2UgaG9sZCBjX2xvY2sgKi8KIAkJcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKCZhbXA7cm0tJmd0O21faW5jLmlfaGRyLCBzcG9ydCwgZHBvcnQsIDApOwomIzQzOwkJcmRzX2Nvbm5fZ2V0KGNvbm4pOwkvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi8KIAkJcm0tJmd0O21faW5jLmlfY29ubiA9IGNvbm47CiAJCXJtLSZndDttX2luYy5pX2Nvbm5fcGF0aCA9IGNwOwogCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOwpAQCAtMTE1OSwxMyAmIzQzOzExNjEsMTQgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKQogCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2luICosIHVzaW4sIG1zZy0mZ3Q7bXNnX25hbWUpOwogCV9fYmUxNiBkcG9ydDsKIAlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gTlVMTDsKLQlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CiYjNDM7CXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAJaW50IHF1ZXVlZCA9IDAsIGFsbG9jYXRlZF9tciA9IDA7CiAJaW50IG5vbmJsb2NrID0gbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUOwogCWxvbmcgdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBub25ibG9jayk7CiAJc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoOwogCXN0cnVjdCBpbjZfYWRkciBkYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlfX3UzMiBzY29wZV9pZCA9IDA7CiAJc2l6ZV90IHJkbWFfcGF5bG9hZF9sZW4gPSAwOwogCWJvb2wgemNvcHkgPSAoKG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19aRVJPQ09QWSkgJmFtcDsmYW1wOwpAQCAtMTM0MCwxMSAmIzQzOzEzNDMsMjkgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKQogCXJtLSZndDttX2RhZGRyID0gZGFkZHI7CiAKIAkvKiByZHNfY29ubl9jcmVhdGUgaGFzIGEgc3BpbmxvY2sgdGhhdCBydW5zIHdpdGggSVJRIG9mZi4KLQkgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuICovCi0JaWYgKHJzLSZndDtyc19jb25uICZhbXA7JmFtcDsgaXB2Nl9hZGRyX2VxdWFsKCZhbXA7cnMtJmd0O3JzX2Nvbm4tJmd0O2NfZmFkZHIsICZhbXA7ZGFkZHIpICZhbXA7JmFtcDsKLQkgICAgcnMtJmd0O3JzX3RvcyA9PSBycy0mZ3Q7cnNfY29ubi0mZ3Q7Y190b3MpIHsKLQkJY29ubiA9IHJzLSZndDtyc19jb25uOwomIzQzOwkgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBjYWNoZWQgcnNfY29ubiBob2xkcyBhIGNvbm5lY3Rpb24gcmVmZXJlbmNlOyB0YWtlIG9uZSBvZgomIzQzOwkgKiBvdXIgb3duIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBjYWxsIChkcm9wcGVkIG9uIGJvdGggZXhpdAomIzQzOwkgKiBwYXRocyksIHNvIHRoYXQgbmVpdGhlciBhIGNvbmN1cnJlbnQgc2VuZGVyIHJlcGxhY2luZyB0aGUKJiM0MzsJICogY2FjaGUgbm9yIHJkc19jb25uX2Rlc3Ryb3koKSBjYW4gZnJlZSB0aGUgY29ubmVjdGlvbiB1bmRlcgomIzQzOwkgKiB1cy4gIEEgY2FjaGVkIGNvbm5lY3Rpb24gd2hvc2UgZGVzdHJ1Y3Rpb24gaGFzIGJlZ3VuIGlzIG5vdAomIzQzOwkgKiByZXVzZWQ6IGRyb3BwaW5nIGl0IGhlcmUgbGV0cyB0aGUgbmV4dCBzZW5kbXNnIGxvb2sgdXAgb3IKJiM0MzsJICogY3JlYXRlIGEgbGl2ZSBvbmUgaW5zdGVhZCBvZiByZXR1cm5pbmcgLUVBR0FJTiBmb3JldmVyLgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtycy0mZ3Q7cnNfbG9jaywgZmxhZ3MpOwomIzQzOwljb25uID0gcnMtJmd0O3JzX2Nvbm47CiYjNDM7CWlmIChjb25uICZhbXA7JmFtcDsgaXB2Nl9hZGRyX2VxdWFsKCZhbXA7Y29ubi0mZ3Q7Y19mYWRkciwgJmFtcDtkYWRkcikgJmFtcDsmYW1wOwomIzQzOwkgICAgcnMtJmd0O3JzX3RvcyA9PSBjb25uLSZndDtjX3RvcyAmYW1wOyZhbXA7ICFyZHNfZGVzdHJveV9wZW5kaW5nKGNvbm4pKSB7CiYjNDM7CQlyZHNfY29ubl9nZXQoY29ubik7CiAJfSBlbHNlIHsKJiM0MzsJCWNvbm4gPSBOVUxMOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtycy0mZ3Q7cnNfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoIWNvbm4pIHsKJiM0MzsJCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqb2xkOwomIzQzOwogCQljb25uID0gcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHNvY2tfbmV0KHNvY2stJmd0O3NrKSwKIAkJCQkJCSZhbXA7cnMtJmd0O3JzX2JvdW5kX2FkZHIsICZhbXA7ZGFkZHIsCiAJCQkJCQlycy0mZ3Q7cnNfdHJhbnNwb3J0LCBycy0mZ3Q7cnNfdG9zLApAQCAtMTM1Miw5ICYjNDM7MTM3MywxNyBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pCiAJCQkJCQlzY29wZV9pZCk7CiAJCWlmIChJU19FUlIoY29ubikpIHsKIAkJCXJldCA9IFBUUl9FUlIoY29ubik7CiYjNDM7CQkJY29ubiA9IE5VTEw7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJLyogaGFuZCB0aGUgY2FjaGUgaXRzIG93biByZWZlcmVuY2UgKi8KJiM0MzsJCXJkc19jb25uX2dldChjb25uKTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cnMtJmd0O3JzX2xvY2ssIGZsYWdzKTsKJiM0MzsJCW9sZCA9IHJzLSZndDtyc19jb25uOwogCQlycy0mZ3Q7cnNfY29ubiA9IGNvbm47CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cnMtJmd0O3JzX2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmIChvbGQpCiYjNDM7CQkJcmRzX2Nvbm5fcHV0KG9sZCk7CiAJfQogCiAJaWYgKGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfbXBfY2FwYWJsZSkgewpAQCAtMTQ2OSw2ICYjNDM7MTQ5OCw4IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbikKIAkJa2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7CiAJa2ZyZWUodmN0LnZlYyk7CiAKJiM0MzsJcmRzX2Nvbm5fcHV0KGNvbm4pOwomIzQzOwogCXJldHVybiBwYXlsb2FkX2xlbjsKIAogb3V0OgpAQCAtMTQ3Niw2ICYjNDM7MTUwNyw5IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbikKIAkJa2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7CiAJa2ZyZWUodmN0LnZlYyk7CiAKJiM0MzsJaWYgKGNvbm4pCiYjNDM7CQlyZHNfY29ubl9wdXQoY29ubik7CiYjNDM7CiAJLyogSWYgdGhlIHVzZXIgaW5jbHVkZWQgYSBSRE1BX01BUCBjbXNnLCB3ZSBhbGxvY2F0ZWQgYSBNUiBvbiB0aGUgZmx5LgogCSAqIElmIHRoZSBzZW5kbXNnIGdvZXMgdGhyb3VnaCwgd2Uga2VlcCB0aGUgTVIuIElmIGl0IGZhaWxzIHdpdGggRUFHQUlOCiAJICogb3IgaW4gYW55IG90aGVyIHdheSwgd2UgbmVlZCB0byBkZXN0cm95IHRoZSBNUiBhZ2FpbiAqLwpAQCAtMTUyMiw2ICYjNDM7MTU1Niw3IEBAIHJkc19zZW5kX3Byb2JlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCwgX19iZTE2IHNwb3J0LAogCWxpc3RfYWRkX3RhaWwoJmFtcDtybS0mZ3Q7bV9jb25uX2l0ZW0sICZhbXA7Y3AtJmd0O2NwX3NlbmRfcXVldWUpOwogCXNldF9iaXQoUkRTX01TR19PTl9DT05OLCAmYW1wO3JtLSZndDttX2ZsYWdzKTsKIAlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOwomIzQzOwlyZHNfY29ubl9nZXQoY3AtJmd0O2NwX2Nvbm4pOwkvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi8KIAlybS0mZ3Q7bV9pbmMuaV9jb25uID0gY3AtJmd0O2NwX2Nvbm47CiAJcm0tJmd0O21faW5jLmlfY29ubl9wYXRoID0gY3A7CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jCmluZGV4IDc3NGE3MWY4OGQzNzUuLjI2ODVlZTIxYTIyZDEgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy90Y3AuYwpAQCAtODA1LDYgJiM0Mzs4MDUsNyBAQCBzdGF0aWMgdm9pZCByZHNfdGNwX2V4aXQodm9pZCkKICNlbmRpZgogCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmYW1wO3Jkc190Y3BfbmV0X29wcyk7CiAJcmRzX3RjcF9kZXN0cm95X2Nvbm5zKCk7CiYjNDM7CXJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoJmFtcDtyZHNfdGNwX3RyYW5zcG9ydCk7CiAJcmRzX3RyYW5zX3VucmVnaXN0ZXIoJmFtcDtyZHNfdGNwX3RyYW5zcG9ydCk7CiAJcmRzX3RjcF9yZWN2X2V4aXQoKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX3RjcF9jb25uX3NsYWIpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwppbmRleCAxM2ZhNjBjMTk4NWJiLi4wZDJjZWQ4OTJhOGFlIDEwMDY0NAotLS0gYS9uZXQvcmRzL3RjcF9saXN0ZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwpAQCAtMTUzLDcgJiM0MzsxNTMsNyBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKQogewogCXN0cnVjdCBzb2NrZXQgKmxpc3Rlbl9zb2NrID0gcnRuLSZndDtyZHNfdGNwX2xpc3Rlbl9zb2NrOwogCXN0cnVjdCBzb2NrZXQgKm5ld19zb2NrID0gTlVMTDsKLQlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CiYjNDM7CXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwogCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnJzX3RjcCA9IE5VTEw7CkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIGludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pCiAKIAlpZiAoSVNfRVJSKGNvbm4pKSB7CiAJCXJldCA9IFBUUl9FUlIoY29ubik7CiYjNDM7CQljb25uID0gTlVMTDsKIAkJZ290byBvdXQ7CiAJfQogCS8qIEFuIGluY29taW5nIFNZTiByZXF1ZXN0IGNhbWUgaW4sIGFuZCBUQ1AganVzdCBhY2NlcHRlZCBpdC4KQEAgLTM0Myw2ICYjNDM7MzQ0LDggQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bikKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7cnNfdGNwLSZndDt0X2Nvbm5fcGF0aF9sb2NrKTsKIAlpZiAobmV3X3NvY2spCiAJCXNvY2tfcmVsZWFzZShuZXdfc29jayk7CiYjNDM7CWlmIChjb25uKQomIzQzOwkJcmRzX2Nvbm5fcHV0KGNvbm4pOwogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7cnRuLSZndDtyZHNfdGNwX2FjY2VwdF9sb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA5NDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBSRFMgQ29ubmVjdGlvbiBSZWZhY3RvcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHJlZmFjdG9yaW5nIG9mIFJEUyBjb25uZWN0aW9uIG1hbmFnZW1lbnQgd2FycmFudHMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50LiBJIGtub3cgS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHdoZXJlYXMgS0FTQU4gdGFja2xlcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBldGMuLCBhbmQgTE9DS0RFUCBkZWFscyB3aXRoIGxvY2tpbmcgaXNzdWVzLgoKVGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgcmVmYWN0b3JpbmcgaG93IFJEUyBjb25uZWN0aW9ucyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZWlyIHJlZmVyZW5jZSBjb3VudGluZy4gVGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYHN0cnVjdCBrcmVmIGNfcmVmY291bnRgIGFuZCBjaGFuZ2luZyBob3cgcmVmcyBhcmUgdGFrZW4gYW5kIHB1dC4gVGhlIGdvYWwgaXMgdG8gZWxpbWluYXRlIFVBRnMsIGRvdWJsZSBmcmVlcywgcmVmY291bnRpbmcgbGVha3MsIGFuZCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRlYXJkb3duIGFuZCBtb2R1bGUgdW5sb2FkaW5nLiBTbywgaXQmIzM5O3MgYSBsaWZldGltZSBtYW5hZ2VtZW50IG92ZXJoYXVsLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIHRvdWNoIGFueXRoaW5nIHRoYXQgS01TQU4gd291bGQgY2FyZSBhYm91dD8gSSBuZWVkIHRvIGNoZWNrIGZvciB0d28gcHJpbWFyeSBLTVNBTiBjb25jZXJuczoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlOioqIERvZXMgdGhpcyBwYXRjaCAqZXhwb3NlKiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gSSBzZWUgbm8gY2hhbmdlcyB0byBgY29weV90b191c2VyYCwgYGdldC9zZXRzb2Nrb3B0YCwgYHJlY3Ztc2dgLCBldGMuLCBzbyBJJiMzOTttIG5vdCBpbW1lZGlhdGVseSB3b3JyaWVkIGFib3V0IGxlYWtpbmcgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhpcyB3YXkuIEl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYWZmZWN0IGFueSBkYXRhIGNvcGllZCB0byBvciBmcm9tIHVzZXJzcGFjZSBkaXJlY3RseS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogVGhlIGNvZGUgdXNlcyBga3JlZl9pbml0YCwgd2hpY2ggaXMgZ29vZC4gVGhlcmUgZG9uJiMzOTt0IHNlZW0gdG8gYmUgYW55IG9idmlvdXMgYnJhbmNoaW5nIHBvaW50cyB3aGVyZSBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlICpjb3VsZCogbGVhZCB0byBhIHNlY3VyaXR5IGlzc3VlLiBFdmVyeXRoaW5nIEkmIzM5O20gc2VlaW5nIGlzIGluaXRpYWxpemVkLgoKU28gZmFyLCBpdCBsb29rcyBjbGVhbi4gQnV0IG5vdyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkLiBgX19yZHNfY29ubl9jcmVhdGVgIGluaXRpYWxpemVzIGBrcmVmX2luaXQoJmFtcDtjb25uLSZndDtjX3JlZmNvdW50KWAgd2hpY2ggaXMgZ29vZCBidXQgdGhlIGBjb25uYCBpcyBhbGxvY2F0ZWQgZnJvbSBgcmRzX2Nvbm5fc2xhYmAuIEkgbmVlZCB0byB2ZXJpZnkgaG93IGByZHNfY29ubl9zbGFiYCBpcyBhbGxvY2F0ZWQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhbiBpc3N1ZSBpZiB0aGUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiB0aGUgYGNvbm5gIHN0cnVjdHVyZSBpcyBpbmNvbXBsZXRlLiBJcyBpdCBga21lbV9jYWNoZV96YWxsb2NgPyBUaGF0JiMzOTtzIHdoYXQgSSB3YW50IHRvIGtub3cuIElmIGl0JiMzOTtzIGEgYCpfemFsbG9jYCB2YXJpYW50LCBvciBpcyBwcm9wZXJseSB6ZXJvZWQsIHRoZSByaXNrIGlzIGV4dHJlbWVseSBsb3cuIElmIGl0JiMzOTtzIG5vdCwgdGhlbiBJJiMzOTtsbCBuZWVkIHRvIGRvIG1vcmUgYW5hbHlzaXMuCgpJbiBzdW1tYXJ5LCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBsaWtlbHkgKm5vdCogbmVjZXNzYXJ5IGhlcmUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBzZWVtIHRvIGludHJvZHVjZSBhbnkgZGlyZWN0IGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcyBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIHRoYXQgYXJlIG9idmlvdXMuIEhvd2V2ZXIsIGJlZm9yZSBJIG1ha2UgYSBmaW5hbCBjYWxsLCBJJiMzOTtsbCBjb25maXJtIHRoYXQgYHJkc19jb25uX3NsYWJgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggYSBxdWljayBncmVwIG9yIGZpbGUgaW5zcGVjdGlvbiB0byBzZWUgaG93IGl0JiMzOTtzIGFsbG9jYXRlZC4gSWYgdGhhdCBhbGxvY2F0aW9uIGlzIGNsZWFuLCBJJiMzOTtsbCBzdGljayB3aXRoIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGZvciB0aGlzIG9uZS4gSWYgbm90LCBJJiMzOTtsbCBuZWVkIGEgY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttZW1fY2FjaGVfemFsbG9jLipyZHNfY29ubl9zbGFiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvY29ubmVjdGlvbi5jPTE4Mz1zdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtMjIzLVxubmV0L3Jkcy9jb25uZWN0aW9uLmM6MjI0Olx0Y29ubiA9IGttZW1fY2FjaGVfemFsbG9jKHJkc19jb25uX3NsYWIsIGdmcCk7XG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0yMjUtXHRpZiAoIWNvbm4pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3OTUKCQkJCQkJCW91dHB1dDogMjM2CgkJCQkJCQl0aG91Z2h0czogODcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFwcGxpY2FiaWxpdHkgQW5hbHlzaXMgZm9yIFJEUyBDb25uZWN0aW9uIFRlYXJkb3duIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaXNzZWN0aW5nIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgUkRTIG5ldHdvcmsgcHJvdG9jb2wuIEl0JiMzOTtzIGZvY3VzZWQgb24gbWFuYWdpbmcgdGhlIGxpZmV0aW1lIG9mIGByZHNfY29ubmVjdGlvbmAgb2JqZWN0cyBtb3JlIHJvYnVzdGx5LCBzcGVjaWZpY2FsbHkgd2l0aCByZWZlcmVuY2UgY291bnRpbmcgKGBrcmVmYCkgYW5kIGFzeW5jaHJvbm91cyBjbGVhbnVwLiBUaGlzIGlzIHRvIGFkZHJlc3Mgc29tZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBpc3N1ZXMgZHVyaW5nIGNvbm5lY3Rpb24gdGVhcmRvd24gYW5kIG1vZHVsZSB1bmxvYWRpbmcuIE15IG1haW4gY29uY2VybiBpcywgb2YgY291cnNlLCB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcywgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgS01TQU4gd291bGQgYmUgZ29vZCBhdCBmaW5kaW5nLgoKVGhlIGZpcnN0IHRoaW5nIHRvIHVuZGVyc3RhbmQgaXMgaG93IGBjb25uYCBpcyBhbGxvY2F0ZWQ7IGl0JiMzOTtzIGRvbmUgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIG1lYW5pbmcgYWxsIG9mIHRoZSBmaWVsZHMgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGxvb2tlZCBjbG9zZWx5IGF0IGFsbCBvZiB0aGUgY2hhbmdlZCBmdW5jdGlvbnM6IGByZHNfcmVsZWFzZWAsIGByZHNfY29ubl9sb29rdXBgLCBgX19yZHNfY29ubl9jcmVhdGVgLCB0aGUgYHJkc19jb25uXypgIGZ1bmN0aW9ucyBpbiBgY29ubmVjdGlvbi5jYCwgYW5kIHZhcmlvdXMgZnVuY3Rpb25zIGluIGBpYi5jYCwgYGliX2NtLmNgLCBgbG9vcC5jYCwgYHRjcC5jYCwgYHRjcF9saXN0ZW4uY2AsIGBtZXNzYWdlLmNgLCBgcmVjdi5jYCwgYW5kIGBzZW5kLmNgIHRoYXQgaW52b2x2ZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGNvbmN1cnJlbmN5IHByaW1pdGl2ZXMsIG9iamVjdCBsaWZlY3ljbGUsIGFuZCB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gZm9yIGByZHNfY29ubmVjdGlvbmAuCgpNeSBhbmFseXNpcyByZWFsbHkgY2VudGVycyBhcm91bmQgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBhbnkgcmlza3MgdGhhdCBLTVNBTiBpcyBwYXJ0aWN1bGFybHkgYWRlcHQgYXQgZmluZGluZy4gSSBsb29rZWQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBidWZmZXIgb3ZlcnJ1bnMgdGhhdCBtaWdodCByZWFkIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgYW55IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3VsZCBsZWFrIHRvIHVzZXJzcGFjZS4KCkl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBhYm91dCByZWZlcmVuY2UgY291bnRpbmcsIG9iamVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgYW5kIGVuc3VyaW5nIGNvcnJlY3QgdGVhcmRvd24gc2VxdWVuY2UuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidWZmZXIgYm91bmRhcmllcywgc3RydWN0IHNlcmlhbGl6YXRpb24gdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIG5ldyBjb2RlIGlzIGFsbCByZWZjb3VudGluZywgY29uY3VycmVuY3ksIGFuZCBzaHV0ZG93bi4gVGhlcmVmb3JlLCBhbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhczoKCiogICBVc2UtQWZ0ZXItRnJlZSAoVUFGKSwgd2hpY2ggS0FTQU4gd291bGQgY2F0Y2guCiogICBNZW1vcnkgbGVha3MsIGRldGVjdGVkIGJ5IEtNRU1MRUFLLgoqICAgRGVhZGxvY2tzIG9yIGxvY2tpbmcgaW1iYWxhbmNlcywgd2hpY2ggTE9DS0RFUCBzaG91bGQgaWRlbnRpZnkuCiogICBEb3VibGUgZnJlZXMgb3IgaW52YWxpZCBmcmVlcywgY2F1Z2h0IGJ5IEtBU0FOIG9yIFNMVUIgZGVidWcuCgpLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHNwZWNpZmljYWxseSB0YXJnZXRlZCBhdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoZWl0aGVyIHN0YWNrL2hlYXAgKmJlZm9yZSogaW5pdGlhbGl6YXRpb24pIGFuZCBwb3RlbnRpYWxseSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgYWx0ZXIgYW55IGRhdGEgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgdXNlZC4gVGhlcmVmb3JlLCBnaXZlbiB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBwYXRjaCwgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGZpbmFsIGNoZWNrIG9mIHRoZSByZWFzb25pbmcgcmVxdWlyZW1lbnRzOgomIzM0O1VzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuIEl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LiBJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuJiMzNDsKClBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2A6Ci0gYEtNU0FOUmVhc29uaW5nYDogQSB0aG9yb3VnaCBleHBsYW5hdGlvbiBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5LgotIGBOZWVkc0tNU0FOYDogYGZhbHNlYC4KCk9rYXksIEkmIzM5O20gc2F0aXNmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKGBrcmVmYCkgb2YgYHN0cnVjdCByZHNfY29ubmVjdGlvbmAgYWNyb3NzIHRoZSBSRFMgc3Vic3lzdGVtIChpbmNsdWRpbmcgVENQLCBJQiwgYW5kIGxvb3BiYWNrIHRyYW5zcG9ydHMpIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIG1vZHVsZS11bmxvYWQgcmFjZXMuXG5cbi0gS0FTQU4gLyBMT0NLREVQIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmVmY291bnQgaW1iYWxhbmNlLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGRlYWRsb2NrIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duKSBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4sIFNMVUIgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC5cbi0gS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBtb2RpZnkgYW55IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGluZm8tbGVhayByaXNrKSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIHNpemluZyBvciBib3VuZHMgY2hlY2tpbmcsIGFuZCBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBvYmplY3RzIGNvbnRpbnVlIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvY2AgKGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQpLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKGBrcmVmYCkgb2YgYHN0cnVjdCByZHNfY29ubmVjdGlvbmAgYWNyb3NzIHRoZSBSRFMgc3Vic3lzdGVtIChpbmNsdWRpbmcgVENQLCBJQiwgYW5kIGxvb3BiYWNrIHRyYW5zcG9ydHMpIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIG1vZHVsZS11bmxvYWQgcmFjZXMuXG5cbi0gS0FTQU4gLyBMT0NLREVQIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmVmY291bnQgaW1iYWxhbmNlLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGRlYWRsb2NrIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duKSBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4sIFNMVUIgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC5cbi0gS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBtb2RpZnkgYW55IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGluZm8tbGVhayByaXNrKSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIHNpemluZyBvciBib3VuZHMgY2hlY2tpbmcsIGFuZCBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBvYmplY3RzIGNvbnRpbnVlIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvY2AgKGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQpLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMxLjk3Mzc1MDczMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODI1NjQ0MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1RDUFwiLFxuICAgIFwiUkRTX1JETUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3Jkc19jb25uX2NyZWF0ZVwiLFxuICAgIFwicmRzX2Nvbm5fZGVzdHJveVwiLFxuICAgIFwicmRzX2Nvbm5fZGVzdHJveV9maW5pXCIsXG4gICAgXCJyZHNfY29ubl9nZXRcIixcbiAgICBcInJkc19jb25uX3B1dFwiLFxuICAgIFwicmRzX2Nvbm5fbG9va3VwXCIsXG4gICAgXCJyZHNfc2VuZG1zZ1wiLFxuICAgIFwicmRzX3JlY3ZfaW5jb21pbmdcIixcbiAgICBcInJkc19pbmNfcHV0XCIsXG4gICAgXCJyZHNfbWVzc2FnZV9mcmVlXCIsXG4gICAgXCJyZHNfdGNwX2FjY2VwdF9vbmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSBvZiBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBhY3Jvc3MgdGhlIFJEUyBzdWJzeXN0ZW0gKGluY2x1ZGluZyBUQ1AsIElCLCBhbmQgbG9vcGJhY2sgdHJhbnNwb3J0cykgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgbW9kdWxlLXVubG9hZCByYWNlcy5cXG5cXG4tIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHJlZmNvdW50IGltYmFsYW5jZSwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBkZWFkbG9jayBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLCBTTFVCIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuXFxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gaW5mby1sZWFrIHJpc2spLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgc2l6aW5nIG9yIGJvdW5kcyBjaGVja2luZywgYW5kIGBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb25gIG9iamVjdHMgY29udGludWUgdG8gYmUgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoZnVsbHkgemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmVmZXJlbmNlIGNvdW50aW5nIChrcmVmKSB0byBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKGNfcmVmY291bnQpIHRvIHByb3Blcmx5IG1hbmFnZSBjb25uZWN0aW9uIGxpZmV0aW1lcyBhbmQgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zLiBJdCByZWZhY3RvcnMgY29ubmVjdGlvbiB0ZWFyZG93biBpbnRvIHN5bmNocm9ub3VzIHF1aWVzY2UgKHJkc19jb25uX3BhdGhfcXVpZXNjZSwgcmRzX2Nvbm5fZGVzdHJveSkgYW5kIGFzeW5jaHJvbm91cyBkZXN0cnVjdGlvbiAocmRzX2Nvbm5fZGVzdHJveV9maW5pKSwgYW5kIHVwZGF0ZXMgcmVmZXJlbmNlIHRyYWNraW5nIGFjcm9zcyBzb2NrZXQgcmVsZWFzZSwgbWVzc2FnZSBxdWV1ZXMsIHJlY3Yvc2VuZCBwYXRocywgYW5kIHRyYW5zcG9ydHMgKFRDUCwgbG9vcCwgSUIpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBsb2dpYywgc3luY2hyb25pemF0aW9uLCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaW4gbmV0L3JkcywgbWFraW5nIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMxLjk3Mzc1NTA4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNjczMjc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAwMTVlMTg2ZTU0ZTM1OTNkZjZmZmEwMDczMWFlYTA5YTkxOGFkMjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxNTo1NjoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuY1xcbmluZGV4IGQ1ZGVmZTkxNzJlMzYuLjBlYWE1Yjk3NjU3MjQgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9hZl9yZHMuY1xcbisrKyBiL25ldC9yZHMvYWZfcmRzLmNcXG5AQCAtODAsNiArODAsMTQgQEAgc3RhdGljIGludCByZHNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbiBcXHRyZHNfbm90aWZ5X3F1ZXVlX2dldChycywgTlVMTCk7XFxuIFxcdHJkc19ub3RpZnlfbXNnX3pjb3B5X3B1cmdlKFxcdTAwMjZycy1cXHUwMDNlcnNfemNvb2tpZV9xdWV1ZSk7XFxuIFxcbitcXHQvKiBkcm9wIHRoZSBjYWNoZWQgY29ubmVjdGlvbiByZWZlcmVuY2U7IG5vIHNlbmRtc2cgY2FuIHJhY2VcXG4rXFx0ICogd2l0aCB1cyBoZXJlLCB0aGUgc29ja2V0IGlzIGdvaW5nIGF3YXlcXG4rXFx0ICovXFxuK1xcdGlmIChycy1cXHUwMDNlcnNfY29ubikge1xcbitcXHRcXHRyZHNfY29ubl9wdXQocnMtXFx1MDAzZXJzX2Nvbm4pO1xcbitcXHRcXHRycy1cXHUwMDNlcnNfY29ubiA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cmRzX3NvY2tfbG9jayk7XFxuIFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJzLVxcdTAwM2Vyc19pdGVtKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnJkc19zb2NrX2xvY2spO1xcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXFxuaW5kZXggYjZjNGJlYjUwZWFmMC4uMmM4Y2E1NGE5MWNhOCAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xcbisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXFxuQEAgLTQ3LDcgKzQ3LDggQEBcXG4gXFxuIC8qIGNvbnZlcnRpbmcgdGhpcyB0byBSQ1UgaXMgYSBjaG9yZSBmb3IgYW5vdGhlciBkYXkuLiAqL1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25uX2xvY2spO1xcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfY29ubl9jb3VudDtcXG4rLyogd29rZW4gd2hlbmV2ZXIgYSB0cmFuc3BvcnQncyB0X2Nvbm5fY291bnQgZHJvcHMgdG8gemVybyAqL1xcbitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2Nvbm5fZnJlZWRfd2FpdHEpO1xcbiBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgcmRzX2Nvbm5faGFzaFtSRFNfQ09OTkVDVElPTl9IQVNIX0VOVFJJRVNdO1xcbiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19jb25uX3NsYWI7XFxuIFxcbkBAIC03OSw3ICs4MCwxMCBAQCBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKnJkc19jb25uX2J1Y2tldChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxhZGRyLFxcbiBcXHRcXHR2YXIgfD0gUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHXyMjc3VmZml4O1xcdFxcXFxcXG4gfSB3aGlsZSAoMClcXG4gXFxuLS8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrICovXFxuKy8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrLlxcbisgKiBPbiBzdWNjZXNzIGEgcmVmZXJlbmNlIGlzIHRha2VuIG9uIHRoZSByZXR1cm5lZCBjb25uZWN0aW9uOyB0aGVcXG4rICogY2FsbGVyIG11c3QgZHJvcCBpdCB3aXRoIHJkc19jb25uX3B1dCgpLlxcbisgKi9cXG4gc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsXFxuQEAgLTk2LDYgKzEwMCwxMyBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHQgICAgY29ubi1cXHUwMDNlY190b3MgPT0gdG9zIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBuZXQgPT0gcmRzX2Nvbm5fbmV0KGNvbm4pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBjb25uLVxcdTAwM2VjX2Rldl9pZiA9PSBkZXZfaWYpIHtcXG4rXFx0XFx0XFx0LyogQW4gZW50cnkgd2hvc2UgcmVmY291bnQgYWxyZWFkeSBkcm9wcGVkIHRvXFxuK1xcdFxcdFxcdCAqIHplcm8gaGFzIGJlZW4gdW5oYXNoZWQgYW5kIGlzIGFib3V0IHRvIGJlXFxuK1xcdFxcdFxcdCAqIGZyZWVkOyBhbiBSQ1UgdHJhdmVyc2FsIG1heSBzdGlsbCBjb21lXFxuK1xcdFxcdFxcdCAqIGFjcm9zcyBpdC4gIFRyZWF0IGl0IGFzIGFic2VudC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNmNvbm4tXFx1MDAzZWNfcmVmY291bnQpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0cmV0ID0gY29ubjtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5AQCAtMTk3LDcgKzIwOCwxNCBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdCAqIFdlIG5lZWQgYSBzZWNvbmQgY29ubmVjdGlvbiBvYmplY3QgaW50byB3aGljaCB3ZVxcbiBcXHRcXHQgKiBjYW4gc3RpY2sgdGhlIG90aGVyIFFQLiAqL1xcbiBcXHRcXHRwYXJlbnQgPSBjb25uO1xcbitcXHRcXHQvKiBUaGUgY19wYXNzaXZlIHBvaW50ZXIgaG9sZHMgYSByZWZlcmVuY2Ugd2hpY2ggaXMgb25seVxcbitcXHRcXHQgKiBkcm9wcGVkIG9uZSBzeW5jaHJvbml6ZV9yY3UoKSBhZnRlciB0aGUgcG9pbnRlciBpc1xcbitcXHRcXHQgKiBjbGVhcmVkLCBzbyB3aXRoaW4gdGhpcyBSQ1Ugc2VjdGlvbiBhIGZldGNoZWQgcG9pbnRlclxcbitcXHRcXHQgKiBpcyBhbHdheXMgc2FmZSB0byB0YWtlIGEgcmVmZXJlbmNlIG9uLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0Y29ubiA9IHBhcmVudC1cXHUwMDNlY19wYXNzaXZlO1xcbitcXHRcXHRpZiAoY29ubilcXG4rXFx0XFx0XFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xcbiBcXHR9XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRpZiAoY29ubilcXG5AQCAtMjE1LDYgKzIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGtyZWZfaW5pdChcXHUwMDI2Y29ubi1cXHUwMDNlY19yZWZjb3VudCk7XFxuIFxcdElOSVRfSExJU1RfTk9ERShcXHUwMDI2Y29ubi1cXHUwMDNlY19oYXNoX25vZGUpO1xcbiBcXHRjb25uLVxcdTAwM2VjX2xhZGRyID0gKmxhZGRyO1xcbiBcXHRjb25uLVxcdTAwM2VjX2lzdjYgPSAhaXB2Nl9hZGRyX3Y0bWFwcGVkKGxhZGRyKTtcXG5AQCAtMjgyLDggKzMwMSw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0ICAgICBpc19vdXRnb2luZyk7XFxuIFxcdFxcdGNvbm4tXFx1MDAzZWNfcGF0aFtpXS5jcF9pbmRleCA9IGk7XFxuIFxcdFxcdGNvbm4tXFx1MDAzZWNfcGF0aFtpXS5jcF93cSA9XFxuLVxcdFxcdFxcdGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJrcmRzX2NwX3dxIyVsdS8lZFxcXCIsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHJkc19jb25uX2NvdW50LCBpKTtcXG4rXFx0XFx0XFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXFxcImtyZHNfY3Bfd3EjJWQvJWRcXFwiLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRhdG9taWNfcmVhZChcXHUwMDI2dHJhbnMtXFx1MDAzZXRfY29ubl9jb3VudCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGkpO1xcbiBcXHRcXHRpZiAoIWNvbm4tXFx1MDAzZWNfcGF0aFtpXS5jcF93cSlcXG4gXFx0XFx0XFx0Y29ubi1cXHUwMDNlY19wYXRoW2ldLmNwX3dxID0gcmRzX3dxO1xcbiBcXHR9XFxuQEAgLTMxNSwxNSArMzM1LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJkc19jb25uX2xvY2ssIGZsYWdzKTtcXG4gXFx0aWYgKHBhcmVudCkge1xcbiBcXHRcXHQvKiBDcmVhdGluZyBwYXNzaXZlIGNvbm4gKi9cXG4tXFx0XFx0aWYgKHBhcmVudC1cXHUwMDNlY19wYXNzaXZlKSB7XFxuK1xcdFxcdGlmIChSRUFEX09OQ0UocGFyZW50LVxcdTAwM2VjX2Rlc3Ryb3lfaW5fcHJvZykpIHtcXG4rXFx0XFx0XFx0LyogVGhlIHBhcmVudCdzIGRlc3Ryb3kgaGFzIGJlZ3VuIChpdCBzZXRzIHRoZVxcbitcXHRcXHRcXHQgKiBmbGFnIGFuZCBzbmF0Y2hlcyBjX3Bhc3NpdmUgdW5kZXIgdGhpc1xcbitcXHRcXHRcXHQgKiBsb2NrKTsgZG8gbm90IGluc3RhbGwgYSBuZXcgcGFzc2l2ZSBjb25uXFxuK1xcdFxcdFxcdCAqIHRoYXQgbm90aGluZyB3b3VsZCBldmVyIGRlc3Ryb3kuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR0cmFucy1cXHUwMDNlY29ubl9mcmVlKGNvbm4tXFx1MDAzZWNfcGF0aFswXS5jcF90cmFuc3BvcnRfZGF0YSk7XFxuK1xcdFxcdFxcdGZyZWVfY3AgPSBjb25uLVxcdTAwM2VjX3BhdGg7XFxuK1xcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcXG4rXFx0XFx0XFx0Y29ubiA9IEVSUl9QVFIoLUVORVRET1dOKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChwYXJlbnQtXFx1MDAzZWNfcGFzc2l2ZSkge1xcbitcXHRcXHRcXHRyZHNfY29ubl9nZXQocGFyZW50LVxcdTAwM2VjX3Bhc3NpdmUpO1xcbiBcXHRcXHRcXHR0cmFucy1cXHUwMDNlY29ubl9mcmVlKGNvbm4tXFx1MDAzZWNfcGF0aFswXS5jcF90cmFuc3BvcnRfZGF0YSk7XFxuIFxcdFxcdFxcdGZyZWVfY3AgPSBjb25uLVxcdTAwM2VjX3BhdGg7XFxuIFxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcXG4gXFx0XFx0XFx0Y29ubiA9IHBhcmVudC1cXHUwMDNlY19wYXNzaXZlO1xcbiBcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHQvKiBUaGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyXFxuK1xcdFxcdFxcdCAqIGRlc3Ryb3lzIHRoZSBjb25uICh0aGUgdHJhbnNwb3J0J3MgY29ublxcbitcXHRcXHRcXHQgKiBsaXN0cywgYXMgZm9yIGFueSBvdGhlciBjb25uKS4gIFRha2Ugb25lXFxuK1xcdFxcdFxcdCAqIGZvciB0aGUgY19wYXNzaXZlIHBvaW50ZXIgLSBkcm9wcGVkIHdoZW5cXG4rXFx0XFx0XFx0ICogdGhlIHBhcmVudCBpcyBkZXN0cm95ZWQgLSBhbmQgb25lIGZvciBvdXJcXG4rXFx0XFx0XFx0ICogY2FsbGVyLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xcdC8qIGNfcGFzc2l2ZSAqL1xcbitcXHRcXHRcXHRyZHNfY29ubl9nZXQoY29ubik7XFx0LyogY2FsbGVyICovXFxuIFxcdFxcdFxcdHBhcmVudC1cXHUwMDNlY19wYXNzaXZlID0gY29ubjtcXG4gXFx0XFx0XFx0cmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7XFxuLVxcdFxcdFxcdHJkc19jb25uX2NvdW50Kys7XFxuK1xcdFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmNvbm4tXFx1MDAzZWNfdHJhbnMtXFx1MDAzZXRfY29ubl9jb3VudCk7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LyogQ3JlYXRpbmcgbm9ybWFsIGNvbm4gKi9cXG5AQCAtMzUwLDE1ICszOTAsMjEgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqX19yZHNfY29ubl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRjb25uLVxcdTAwM2VjX215X2dlbl9udW0gPSByZHNfZ2VuX251bTtcXG4gXFx0XFx0XFx0Y29ubi1cXHUwMDNlY19wZWVyX2dlbl9udW0gPSAwO1xcbitcXHRcXHRcXHQvKiB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyXFxuK1xcdFxcdFxcdCAqIGRlc3Ryb3lzIHRoZSBjb25uOyB0YWtlIG9uZSBmb3Igb3VyIGNhbGxlclxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xcbiBcXHRcXHRcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNmNvbm4tXFx1MDAzZWNfaGFzaF9ub2RlLCBoZWFkKTtcXG4gXFx0XFx0XFx0cmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7XFxuLVxcdFxcdFxcdHJkc19jb25uX2NvdW50Kys7XFxuK1xcdFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmNvbm4tXFx1MDAzZWNfdHJhbnMtXFx1MDAzZXRfY29ubl9jb3VudCk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZyZHNfY29ubl9sb2NrLCBmbGFncyk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gb3V0OlxcbitcXHRpZiAocGFyZW50KVxcbitcXHRcXHRyZHNfY29ubl9wdXQocGFyZW50KTtcXG4gXFx0aWYgKGZyZWVfY3ApIHtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wYXRoczsgaSsrKVxcbiBcXHRcXHRcXHRpZiAoZnJlZV9jcFtpXS5jcF93cSAhPSByZHNfd3EpXFxuQEAgLTUxNSwxMCArNTYxLDEyIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiBcXHRcXHRjb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2Vjb25uX3Nsb3RzX2F2YWlsYWJsZShjb25uLCBmYWxzZSk7XFxuIH1cXG4gXFxuLS8qIGRlc3Ryb3kgYSBzaW5nbGUgcmRzX2Nvbm5fcGF0aC4gcmRzX2Nvbm5fZGVzdHJveSgpIGl0ZXJhdGVzIG92ZXJcXG4tICogYWxsIHBhdGhzIHVzaW5nIHJkc19jb25uX3BhdGhfZGVzdHJveSgpXFxuKy8qIHF1aWVzY2UgYSBzaW5nbGUgcmRzX2Nvbm5fcGF0aDogc2h1dCBpdCBkb3duIGFuZCB0ZWFyIGRvd24gYW55XFxuKyAqIHF1ZXVlZCBtZXNzYWdlcy4gIHJkc19jb25uX2Rlc3Ryb3koKSBpdGVyYXRlcyBvdmVyIGFsbCBwYXRocyB1c2luZ1xcbisgKiByZHNfY29ubl9wYXRoX3F1aWVzY2UoKTsgdGhlIHRyYW5zcG9ydCBzdGF0ZSBhbmQgdGhlIHdvcmtxdWV1ZSBhcmVcXG4rICogZnJlZWQgbGF0ZXIsIGZyb20gcmRzX2Nvbm5fcGF0aF9mcmVlKCkuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbitzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3F1aWVzY2Uoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiB7XFxuIFxcdHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICpydG1wO1xcbiBcXG5AQCAtNTQ3LDYgKzU5NSwxNiBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiBcXHRXQVJOX09OKGRlbGF5ZWRfd29ya19wZW5kaW5nKFxcdTAwMjZjcC1cXHUwMDNlY3BfcmVjdl93KSk7XFxuIFxcdFdBUk5fT04oZGVsYXllZF93b3JrX3BlbmRpbmcoXFx1MDAyNmNwLVxcdTAwM2VjcF9jb25uX3cpKTtcXG4gXFx0V0FSTl9PTih3b3JrX3BlbmRpbmcoXFx1MDAyNmNwLVxcdTAwM2VjcF9kb3duX3cpKTtcXG4rfVxcbitcXG4rLyogZnJlZSBhIHF1aWVzY2VkIHJkc19jb25uX3BhdGgncyB0cmFuc3BvcnQgc3RhdGUgYW5kIHdvcmtxdWV1ZTsgcnVuc1xcbisgKiBmcm9tIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgdGhlIGxhc3QgY29ubmVjdGlvbiByZWZlcmVuY2UgaXNcXG4rICogZHJvcHBlZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZnJlZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuK3tcXG4rXFx0aWYgKCFjcC1cXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGEpXFxuK1xcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChjcC1cXHUwMDNlY3Bfd3EgIT0gcmRzX3dxKSB7XFxuIFxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGNwLVxcdTAwM2VjcF93cSk7XFxuQEAgLTU1NiwxNyArNjE0LDc0IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuIFxcdGNwLVxcdTAwM2VjcF9jb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2Vjb25uX2ZyZWUoY3AtXFx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhKTtcXG4gfVxcbiBcXG4rLyogRnJlZSBhIGNvbm5lY3Rpb24uICBUaGlzIHJ1bnMgZnJvbSByZHNfY29ubl9wdXQoKSB3aGVuIHRoZSBsYXN0XFxuKyAqIHJlZmVyZW5jZSBpcyBkcm9wcGVkLCBhZnRlciByZHNfY29ubl9kZXN0cm95KCkgaGFzIHF1aWVzY2VkIHRoZVxcbisgKiBjb25uZWN0aW9uIGFuZCBkcm9wcGVkIHRoZSBpbml0aWFsIHJlZmVyZW5jZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJkc19jb25uX2Rlc3Ryb3lfZmluaShzdHJ1Y3Qga3JlZiAqa3JlZilcXG4re1xcbitcXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJkc19jb25uZWN0aW9uLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBjX3JlZmNvdW50KTtcXG4rXFx0aW50IG5wYXRocyA9IChjb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2V0X21wX2NhcGFibGUgPyBSRFNfTVBBVEhfV09SS0VSUyA6IDEpO1xcbitcXHRzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMgPSBjb25uLVxcdTAwM2VjX3RyYW5zO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGF0aHM7IGkrKylcXG4rXFx0XFx0cmRzX2Nvbm5fcGF0aF9mcmVlKFxcdTAwMjZjb25uLVxcdTAwM2VjX3BhdGhbaV0pO1xcbitcXG4rXFx0a2ZyZWUoY29ubi1cXHUwMDNlY19wYXRoKTtcXG4rXFx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xcbitcXG4rXFx0Lyogb25seSBhZnRlciBldmVyeXRoaW5nIHRoZSB0cmFuc3BvcnQgbW9kdWxlIG93bnMgaGFzIGJlZW5cXG4rXFx0ICogZnJlZWQgYWJvdmUgbWF5IGl0cyB1bmxvYWQgcHJvY2VlZFxcbitcXHQgKi9cXG4rXFx0aWYgKCFhdG9taWNfZGVjX3JldHVybihcXHUwMDI2dHJhbnMtXFx1MDAzZXRfY29ubl9jb3VudCkpXFxuK1xcdFxcdHdha2VfdXBfYWxsKFxcdTAwMjZyZHNfY29ubl9mcmVlZF93YWl0cSk7XFxuK31cXG4rXFxuKy8qIFdhaXQgZm9yIGFsbCBvZiBAdHJhbnMncyBjb25uZWN0aW9ucyB0byBiZSBmcmVlZDsgdGhlIGZyZWUgcnVuc1xcbisgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYSBjb25uZWN0aW9uLlxcbisgKiBDYWxsZWQgb24gdHJhbnNwb3J0IG1vZHVsZSB1bmxvYWQsIGFmdGVyIHRoZSB0cmFuc3BvcnQgZGVzdHJveWVkXFxuKyAqIGFsbCBvZiBpdHMgY29ubmVjdGlvbnM6IGFueXRoaW5nIHN0aWxsIGhvbGRpbmcgYSBjb25uZWN0aW9uXFxuKyAqIHJlZmVyZW5jZSBhdCB0aGF0IHBvaW50IGlzIGEgc2hvcnQtbGl2ZWQgbG9va3VwLXN0eWxlIGhvbGRlciwgc29cXG4rICogYSBib3VuZGVkIHdhaXQgc3VmZmljZXMgLSBidXQgd2FybiBpZiBpdCBleHBpcmVzLCBzaW5jZSB0aGUgZnJlZXNcXG4rICogdGhhdCBmb2xsb3cgdGhlIHVubG9hZCB3aWxsIHRoZW4gdG91Y2ggZnJlZWQgbW9kdWxlIHRleHQuXFxuKyAqL1xcbit2b2lkIHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKVxcbit7XFxuK1xcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KHJkc19jb25uX2ZyZWVkX3dhaXRxLFxcbitcXHRcXHRcXHRcXHQhYXRvbWljX3JlYWQoXFx1MDAyNnRyYW5zLVxcdTAwM2V0X2Nvbm5fY291bnQpLFxcbitcXHRcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKFJEU19DT05OX0ZSRUVfVElNRU9VVF9NUykpKVxcbitcXHRcXHRXQVJOKDEsIFxcXCJSRFMvJXM6ICVkIGNvbm5lY3Rpb24ocykgbm90IGZyZWVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgIHRyYW5zLVxcdTAwM2V0X25hbWUsIGF0b21pY19yZWFkKFxcdTAwMjZ0cmFucy1cXHUwMDNldF9jb25uX2NvdW50KSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZCk7XFxuK1xcbit2b2lkIHJkc19jb25uX2dldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXFxuK3tcXG4rXFx0a3JlZl9nZXQoXFx1MDAyNmNvbm4tXFx1MDAzZWNfcmVmY291bnQpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2dldCk7XFxuK1xcbit2b2lkIHJkc19jb25uX3B1dChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXFxuK3tcXG4rXFx0a3JlZl9wdXQoXFx1MDAyNmNvbm4tXFx1MDAzZWNfcmVmY291bnQsIHJkc19jb25uX2Rlc3Ryb3lfZmluaSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcHV0KTtcXG4rXFxuIC8qXFxuICAqIFN0b3AgYW5kIGZyZWUgYSBjb25uZWN0aW9uLlxcbiAgKlxcbi0gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gdmVyeSBsaW1pdGVkIGNpcmN1bXN0YW5jZXMuICBJdCBhc3N1bWVzIHRoYXQgb25jZVxcbi0gKiB0aGUgY29ubiBoYXMgYmVlbiBzaHV0ZG93biB0aGF0IG5vIG9uZSBlbHNlIGlzIHJlZmVyZW5jaW5nIHRoZSBjb25uZWN0aW9uLlxcbi0gKiBXZSBjYW4gb25seSBlbnN1cmUgdGhpcyBpbiB0aGUgcm1tb2QgcGF0aCBpbiB0aGUgY3VycmVudCBjb2RlLlxcbisgKiBRdWllc2NlcyB0aGUgY29ubmVjdGlvbiBzeW5jaHJvbm91c2x5ICh3b3JrZXJzIGNhbmNlbGxlZCwgdHJhbnNwb3J0XFxuKyAqIGNvbm5lY3Rpb25zIHNodXQgZG93biwgcXVldWVkIG1lc3NhZ2VzIGRyb3BwZWQpIGFuZCBkcm9wcyB0aGVcXG4rICogaW5pdGlhbCByZWZlcmVuY2UuICBUaGUgbWVtb3J5IC0gaW5jbHVkaW5nIHRoZSB0cmFuc3BvcnQnc1xcbisgKiBwZXItY29ubmVjdGlvbiBzdGF0ZSBhbmQgdGhlIHBhdGggd29ya3F1ZXVlcyAtIGlzIGZyZWVkIG9uY2UgdGhlXFxuKyAqIGxhc3QgcmRzX2Nvbm5fcHV0KCkgcnVucywgd2hpY2ggbWF5IGJlIGFmdGVyIHRoaXMgcmV0dXJucy5cXG4gICovXFxuIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IGk7XFxuK1xcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcGFzc2l2ZTtcXG4gXFx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwO1xcbiBcXHRpbnQgbnBhdGhzID0gKGNvbm4tXFx1MDAzZWNfdHJhbnMtXFx1MDAzZXRfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7XFxuIFxcbkBAIC01NzQsMTYgKzY4OSw0NiBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbiBcXHRcXHQgXFxcIiVwSTRcXFxcblxcXCIsIGNvbm4sIFxcdTAwMjZjb25uLVxcdTAwM2VjX2xhZGRyLFxcbiBcXHRcXHQgXFx1MDAyNmNvbm4tXFx1MDAzZWNfZmFkZHIpO1xcbiBcXG4tXFx0LyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi9cXG4rXFx0LyogTWFrZSByZHNfZGVzdHJveV9wZW5kaW5nKCkgdHJ1ZSBmb3IgdGhpcyBjb25uLiAgVG9nZXRoZXIgd2l0aFxcbitcXHQgKiB0aGUgc3luY2hyb25pemVfcmN1KCkgYmVsb3cgdGhpcyBzdG9wcyB0aGUgd29yay1yZXF1ZXVlaW5nXFxuK1xcdCAqIHNpdGVzICh3aGljaCBhbGwgdGVzdCByZHNfZGVzdHJveV9wZW5kaW5nKCkgdW5kZXJcXG4rXFx0ICogcmN1X3JlYWRfbG9jaygpKSBmcm9tIHF1ZXVlaW5nIG5ldyB3b3JrIG9uIHRoZSBwYXRoXFxuK1xcdCAqIHdvcmtxdWV1ZXMgb25jZSB3ZSBzdGFydCBjYW5jZWxsaW5nIGFuZCBkZXN0cm95aW5nIHRoZW0uXFxuK1xcdCAqXFxuK1xcdCAqIE5vdyB0aGF0IHRoZSB0cmFuc3BvcnQgc3RhdGUgc3RheXMgZGlzY292ZXJhYmxlIChlLmcuIG9uIHRoZVxcbitcXHQgKiB0cmFuc3BvcnRzJyBjb25uZWN0aW9uIGxpc3RzKSB1bnRpbCB0aGUgZmluYWwgcmRzX2Nvbm5fcHV0KCksXFxuK1xcdCAqIGEgY29ubiBjYW4gYmUgaGFuZGVkIHRvIHJkc19jb25uX2Rlc3Ryb3koKSBtb3JlIHRoYW4gb25jZSAtXFxuK1xcdCAqIGUuZy4gZHJvcHBlZCBmb3IgYSBwcm90b2NvbCB2ZXJzaW9uIG1pc21hdGNoIGFuZCB0aGVuIGZvdW5kXFxuK1xcdCAqIGFnYWluIGF0IG1vZHVsZSB1bmxvYWQuICBPbmx5IHRoZSBmaXJzdCBjYWxsZXIgcHJvY2VlZHM7IHRoZVxcbitcXHQgKiB1bmhhc2ggYWxzbyBoYXBwZW5zIHVuZGVyIHJkc19jb25uX2xvY2ssIHNvIGEgbG9va2VkLXVwIGNvbm5cXG4rXFx0ICogY2FuIG5ldmVyIGJlIHF1aWVzY2VkIHR3aWNlLlxcbitcXHQgKi9cXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cmRzX2Nvbm5fbG9jayk7XFxuK1xcdGlmIChjb25uLVxcdTAwM2VjX2Rlc3Ryb3lfaW5fcHJvZykge1xcbitcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnJkc19jb25uX2xvY2spO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0V1JJVEVfT05DRShjb25uLVxcdTAwM2VjX2Rlc3Ryb3lfaW5fcHJvZywgdHJ1ZSk7XFxuK1xcbitcXHQvKiBFbnN1cmUgY29ubiB3aWxsIG5vdCBiZSBzY2hlZHVsZWQgZm9yIHJlY29ubmVjdCAqL1xcbiBcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNmNvbm4tXFx1MDAzZWNfaGFzaF9ub2RlKTtcXG4rXFxuK1xcdC8qIFNuYXRjaCBjX3Bhc3NpdmUgd2hpbGUgaG9sZGluZyB0aGUgbG9jazpcXG4rXFx0ICogX19yZHNfY29ubl9jcmVhdGUoKSBkZXJlZmVyZW5jZXMgaXQgdW5kZXIgcmN1X3JlYWRfbG9jaygpXFxuK1xcdCAqIChhbmQgcmVmdXNlcyB0byBpbnN0YWxsIGEgbmV3IG9uZSBvbmNlIGNfZGVzdHJveV9pbl9wcm9nIGlzXFxuK1xcdCAqIHNldCwgd2hpY2ggaXQgY2hlY2tzIHVuZGVyIHRoaXMgbG9jaykuICBBZnRlciB0aGVcXG4rXFx0ICogc3luY2hyb25pemVfcmN1KCkgYmVsb3cgbm8gb25lIGNhbiBwaWNrIHRoZSBwb2ludGVyIHVwIGFueVxcbitcXHQgKiBtb3JlIGFuZCBpdHMgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkLlxcbitcXHQgKi9cXG4rXFx0cGFzc2l2ZSA9IGNvbm4tXFx1MDAzZWNfcGFzc2l2ZTtcXG4rXFx0Y29ubi1cXHUwMDNlY19wYXNzaXZlID0gTlVMTDtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZyZHNfY29ubl9sb2NrKTtcXG4gXFx0c3luY2hyb25pemVfcmN1KCk7XFxuIFxcbiBcXHQvKiBzaHV0IHRoZSBjb25uZWN0aW9uIGRvd24gKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wYXRoczsgaSsrKSB7XFxuIFxcdFxcdGNwID0gXFx1MDAyNmNvbm4tXFx1MDAzZWNfcGF0aFtpXTtcXG4tXFx0XFx0cmRzX2Nvbm5fcGF0aF9kZXN0cm95KGNwKTtcXG4rXFx0XFx0cmRzX2Nvbm5fcGF0aF9xdWllc2NlKGNwKTtcXG4gXFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZjcC1cXHUwMDNlY3BfcmV0cmFucykpO1xcbiBcXHR9XFxuIFxcbkBAIC01OTQsMTIgKzczOSwxNCBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbiBcXHQgKi9cXG4gXFx0cmRzX2NvbmdfcmVtb3ZlX2Nvbm4oY29ubik7XFxuIFxcbi1cXHRrZnJlZShjb25uLVxcdTAwM2VjX3BhdGgpO1xcbi1cXHRrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7XFxuK1xcdC8qIGRyb3AgdGhlIHJlZmVyZW5jZSBvdXIgY19wYXNzaXZlIHBvaW50ZXIgaGVsZCwgaWYgYW55ICovXFxuK1xcdGlmIChwYXNzaXZlKVxcbitcXHRcXHRyZHNfY29ubl9wdXQocGFzc2l2ZSk7XFxuIFxcbi1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xcbi1cXHRyZHNfY29ubl9jb3VudC0tO1xcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZyZHNfY29ubl9sb2NrLCBmbGFncyk7XFxuK1xcdC8qIGRyb3AgdGhlIGluaXRpYWwgcmVmZXJlbmNlOyB0aGUgY29ubmVjdGlvbiBpcyBmcmVlZCBmcm9tXFxuK1xcdCAqIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgZXZlcnkgaG9sZGVyIGhhcyBkcm9wcGVkIHRoZWlyc1xcbitcXHQgKi9cXG4rXFx0cmRzX2Nvbm5fcHV0KGNvbm4pO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2Rlc3Ryb3kpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jXFxuaW5kZXggNzg2ZjM5MTY5YmMxNC4uNzU1NjkwNTgzMzI1OSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL2liLmNcXG4rKysgYi9uZXQvcmRzL2liLmNcXG5AQCAtNTI1LDEwICs1MjUsNyBAQCBzdGF0aWMgdm9pZCByZHNfaWJfc2V0X3VubG9hZGluZyh2b2lkKVxcbiBcXG4gc3RhdGljIGJvb2wgcmRzX2liX2lzX3VubG9hZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXFxuIHtcXG4tXFx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwID0gXFx1MDAyNmNvbm4tXFx1MDAzZWNfcGF0aFswXTtcXG4tXFxuLVxcdHJldHVybiAodGVzdF9iaXQoUkRTX0RFU1RST1lfUEVORElORywgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykgfHxcXG4tXFx0XFx0YXRvbWljX3JlYWQoXFx1MDAyNnJkc19pYl91bmxvYWRpbmcpICE9IDApO1xcbitcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnJkc19pYl91bmxvYWRpbmcpICE9IDA7XFxuIH1cXG4gXFxuIHZvaWQgcmRzX2liX2V4aXQodm9pZClcXG5AQCAtNTQxLDYgKzUzOCwxNSBAQCB2b2lkIHJkc19pYl9leGl0KHZvaWQpXFxuICNlbmRpZlxcbiBcXHRyZHNfaWJfdW5yZWdpc3Rlcl9jbGllbnQoKTtcXG4gXFx0cmRzX2liX2Rlc3Ryb3lfbm9kZXZfY29ubnMoKTtcXG4rXFx0cmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChcXHUwMDI2cmRzX2liX3RyYW5zcG9ydCk7XFxuK1xcbitcXHQvKiBUZWFyaW5nIGRvd24gdGhlIGxhc3QgY29ubmVjdGlvbiBtYXkgaGF2ZSBkcm9wcGVkIHRoZSBmaW5hbFxcbitcXHQgKiByZWZlcmVuY2Ugb24gYSBkZXZpY2UsIGRlZmVycmluZyByZHNfaWJfZGV2X2ZyZWUoKSB0byByZHNfd3EuXFxuK1xcdCAqIERyYWluIGl0IGJlZm9yZSB0aGUgbW9kdWxlIGdvZXMgYXdheTsgaXQgcXVldWVzIG5vdGhpbmdcXG4rXFx0ICogZnVydGhlciBvbiByZHNfd3EuXFxuK1xcdCAqL1xcbitcXHRmbHVzaF93b3JrcXVldWUocmRzX3dxKTtcXG4rXFxuIFxcdHJkc19pYl9zeXNjdGxfZXhpdCgpO1xcbiBcXHRyZHNfaWJfcmVjdl9leGl0KCk7XFxuIFxcdHJkc190cmFuc191bnJlZ2lzdGVyKFxcdTAwMjZyZHNfaWJfdHJhbnNwb3J0KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9jbS5jIGIvbmV0L3Jkcy9pYl9jbS5jXFxuaW5kZXggNGZlYjBlZGMzNjBjOC4uMjRlNTM4YzI1M2E3YSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL2liX2NtLmNcXG4rKysgYi9uZXQvcmRzL2liX2NtLmNcXG5AQCAtOTI0LDggKzkyNCwxNCBAQCBpbnQgcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCxcXG4gXFx0XFx0cmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgXFxcInJkbWFfYWNjZXB0IGZhaWxlZFxcXFxuXFxcIik7XFxuIFxcbiBvdXQ6XFxuLVxcdGlmIChjb25uKVxcbitcXHRpZiAoY29ubikge1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbm4tXFx1MDAzZWNfY21fbG9jayk7XFxuK1xcdFxcdC8qIFRoZSBjb25uIHN0YXlzIHJlYWNoYWJsZSB0aHJvdWdoIGNtX2lkLVxcdTAwM2Vjb250ZXh0XFxuK1xcdFxcdCAqIHdpdGhvdXQgYSByZWZlcmVuY2Ugb2YgaXRzIG93bjogY29ubmVjdGlvbiBkZXN0cm95XFxuK1xcdFxcdCAqIHNodXRzIHRoZSBjbV9pZCBkb3duIGJlZm9yZSB0aGUgY29ubiBpcyBmcmVlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJkc19jb25uX3B1dChjb25uKTtcXG4rXFx0fVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZG1hX3JlamVjdChjbV9pZCwgXFx1MDAyNmVyciwgc2l6ZW9mKGludCksXFxuIFxcdFxcdFxcdCAgICBJQl9DTV9SRUpfQ09OU1VNRVJfREVGSU5FRCk7XFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvbG9vcC5jIGIvbmV0L3Jkcy9sb29wLmNcXG5pbmRleCBlNmIwNzUwYmJlZGFiLi43ZGFmOGVkMjVkNjlhIDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvbG9vcC5jXFxuKysrIGIvbmV0L3Jkcy9sb29wLmNcXG5AQCAtMTk1LDYgKzE5NSw4IEBAIHZvaWQgcmRzX2xvb3BfZXhpdCh2b2lkKVxcbiBcXHRcXHRXQVJOX09OKGxjLVxcdTAwM2Vjb25uLVxcdTAwM2VjX3Bhc3NpdmUpO1xcbiBcXHRcXHRyZHNfY29ubl9kZXN0cm95KGxjLVxcdTAwM2Vjb25uKTtcXG4gXFx0fVxcbitcXG4rXFx0cmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChcXHUwMDI2cmRzX2xvb3BfdHJhbnNwb3J0KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcmRzX2xvb3Bfa2lsbF9jb25ucyhzdHJ1Y3QgbmV0ICpuZXQpXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvbWVzc2FnZS5jIGIvbmV0L3Jkcy9tZXNzYWdlLmNcXG5pbmRleCBmMjVmMjU5MjU4NmY3Li4yOWU5NTAyOGU2MWU0IDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvbWVzc2FnZS5jXFxuKysrIGIvbmV0L3Jkcy9tZXNzYWdlLmNcXG5AQCAtMTgyLDYgKzE4MiwxOCBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiBcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX2ZyZWUoc3RydWN0IHJkc19tZXNzYWdlICpybSlcXG4re1xcbitcXHQvKiBnZXQgaW4gcmRzX3NlbmRfcXVldWVfcm0oKSwgcmRzX3NlbmRfcHJvYmUoKSBvciB0aGUgY29uZ2VzdGlvblxcbitcXHQgKiBtYXAgcGF0aCBvZiByZHNfc2VuZF94bWl0KCkuICBNZXNzYWdlcyB0aGF0IHdlcmUgbmV2ZXIgcXVldWVkIG9uXFxuK1xcdCAqIGEgY29ubmVjdGlvbiBoYXZlIG5vIHJlZmVyZW5jZSB0byBkcm9wLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJtLVxcdTAwM2VtX2luYy5pX2Nvbm4pXFxuK1xcdFxcdHJkc19jb25uX3B1dChybS1cXHUwMDNlbV9pbmMuaV9jb25uKTtcXG4rXFxuK1xcdGtmcmVlKHJtKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbiBcXHRzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfbWVzc2FnZSxcXG5AQCAtMTkyLDcgKzIwNCw3IEBAIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdGlmIChybS1cXHUwMDNlYXRvbWljLm9wX3VucGluX2RlZmVycmVkKVxcbiBcXHRcXHRyZHNfYXRvbWljX29wX3VucGluX3BhZ2UoXFx1MDAyNnJtLVxcdTAwM2VhdG9taWMpO1xcbiBcXG4tXFx0a2ZyZWUocm0pO1xcbitcXHRyZHNfbWVzc2FnZV9mcmVlKHJtKTtcXG4gfVxcbiBcXG4gdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcXG5AQCAtMjE3LDcgKzIyOSw3IEBAIHZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0a2ZyZWUocm0pO1xcbitcXHRcXHRyZHNfbWVzc2FnZV9mcmVlKHJtKTtcXG4gXFx0fVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19tZXNzYWdlX3B1dCk7XFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRzLmggYi9uZXQvcmRzL3Jkcy5oXFxuaW5kZXggMmRiNDk1NzNkYWNkNS4uMzU3NjBkZDZiMDc3ZiAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL3Jkcy5oXFxuKysrIGIvbmV0L3Jkcy9yZHMuaFxcbkBAIC04OSw3ICs4OSw2IEBAIGVudW0ge1xcbiAjZGVmaW5lIFJEU19SRUNPTk5FQ1RfUEVORElOR1xcdDFcXG4gI2RlZmluZSBSRFNfSU5fWE1JVFxcdFxcdDJcXG4gI2RlZmluZSBSRFNfUkVDVl9SRUZJTExcXHRcXHQzXFxuLSNkZWZpbmVcXHRSRFNfREVTVFJPWV9QRU5ESU5HXFx0NFxcbiBcXG4gLyogTWF4IG51bWJlciBvZiBtdWx0aXBhdGhzIHBlciBSRFMgY29ubmVjdGlvbi4gTXVzdCBiZSBhIHBvd2VyIG9mIDIgKi9cXG4gI2RlZmluZVxcdFJEU19NUEFUSF9XT1JLRVJTXFx0OFxcbkBAIC0xMzgsNiArMTM3LDEyIEBAIHN0cnVjdCByZHNfY29ubl9wYXRoIHtcXG4gLyogT25lIHJkc19jb25uZWN0aW9uIHBlciBSRFMgYWRkcmVzcyBwYWlyICovXFxuIHN0cnVjdCByZHNfY29ubmVjdGlvbiB7XFxuIFxcdHN0cnVjdCBobGlzdF9ub2RlXFx0Y19oYXNoX25vZGU7XFxuK1xcdC8qIEZyZWUgb2YgdGhlIGNvbm5lY3Rpb24gbWVtb3J5IChub3QgdGhlIHRlYXJkb3duIG9mIGl0c1xcbitcXHQgKiB0cmFuc3BvcnQgc3RhdGUgLSB0aGF0IHN0YXlzIHN5bmNocm9ub3VzIGluXFxuK1xcdCAqIHJkc19jb25uX2Rlc3Ryb3koKSkgaXMgZGVmZXJyZWQgdW50aWwgdGhlIGxhc3QgcmVmZXJlbmNlIGlzXFxuK1xcdCAqIGRyb3BwZWQgdmlhIHJkc19jb25uX3B1dCgpLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGtyZWZcXHRcXHRjX3JlZmNvdW50O1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHJcXHRcXHRjX2xhZGRyO1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHJcXHRcXHRjX2ZhZGRyO1xcbiBcXHRpbnRcXHRcXHRcXHRjX2Rldl9pZjsgLyogaWZpbmRleCB1c2VkIGZvciB0aGlzIGNvbm4gKi9cXG5AQCAtMTQ4LDYgKzE1MywxMCBAQCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24ge1xcbiBcXHRcXHRcXHRcXHRjX3BhZF90b18zMjoyOTtcXG4gXFx0aW50XFx0XFx0XFx0Y19ucGF0aHM7XFxuIFxcdGJvb2xcXHRcXHRcXHRjX3dpdGhfc3BvcnRfaWR4O1xcbitcXHQvKiBTZXQgKHVuZGVyIFJDVSkgd2hlbiByZHNfY29ubl9kZXN0cm95KCkgc3RhcnRzIG9uIHRoaXMgY29ubjtcXG4rXFx0ICogcmVhZCB0aHJvdWdoIHJkc19kZXN0cm95X3BlbmRpbmcoKS5cXG4rXFx0ICovXFxuK1xcdGJvb2xcXHRcXHRcXHRjX2Rlc3Ryb3lfaW5fcHJvZztcXG4gXFx0c3RydWN0IHJkc19jb25uZWN0aW9uXFx0KmNfcGFzc2l2ZTtcXG4gXFx0c3RydWN0IHJkc190cmFuc3BvcnRcXHQqY190cmFucztcXG4gXFxuQEAgLTU0NCw2ICs1NTMsMTIgQEAgc3RydWN0IHJkc190cmFuc3BvcnQge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHR0X3ByZWZlcl9sb29wYmFjazoxLFxcbiBcXHRcXHRcXHRcXHR0X21wX2NhcGFibGU6MTtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0dF90eXBlO1xcbitcXHQvKiBDb25uZWN0aW9ucyBvZiB0aGlzIHRyYW5zcG9ydCBub3QgeWV0IGZyZWVkOyBmcmVlaW5nIHJ1bnNcXG4rXFx0ICogYXN5bmNocm9ub3VzbHkgb25jZSByZHNfY29ubl9kZXN0cm95KCkgaGFzIHF1aWVzY2VkIGFcXG4rXFx0ICogY29ubmVjdGlvbiwgc28gdHJhbnNwb3J0IG1vZHVsZSB1bmxvYWQgaGFzIHRvIHdhaXQgZm9yIHRoaXNcXG4rXFx0ICogdG8gcmVhY2ggemVybyAocmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZCgpKS5cXG4rXFx0ICovXFxuK1xcdGF0b21pY190XFx0XFx0dF9jb25uX2NvdW50O1xcbiBcXG4gXFx0aW50ICgqbGFkZHJfY2hlY2spKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLFxcbiBcXHRcXHRcXHQgICBfX3UzMiBzY29wZV9pZCk7XFxuQEAgLTgxOSw2ICs4MzQsMTEgQEAgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR1OCB0b3MsIGdmcF90IGdmcCwgaW50IGRldl9pZik7XFxuIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoKTtcXG4gdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XFxuK3ZvaWQgcmRzX2Nvbm5fZ2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XFxuK3ZvaWQgcmRzX2Nvbm5fcHV0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XFxuKy8qIGhvdyBsb25nIHRyYW5zcG9ydCB1bmxvYWQgd2FpdHMgZm9yIGl0cyBjb25uZWN0aW9ucyB0byBiZSBmcmVlZCAqL1xcbisjZGVmaW5lIFJEU19DT05OX0ZSRUVfVElNRU9VVF9NU1xcdDEwMDAwXFxuK3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpO1xcbiB2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcXG4gdm9pZCByZHNfY29ubl9wYXRoX2Ryb3Aoc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoLCBib29sIGRlc3Ryb3kpO1xcbiB2b2lkIHJkc19jb25uX2Nvbm5lY3RfaWZfZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbkBAIC05OTQsNyArMTAxNCw4IEBAIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCByZHNfZGVzdHJveV9wZW5kaW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG4ge1xcbi1cXHRyZXR1cm4gIWNoZWNrX25ldChyZHNfY29ubl9uZXQoY29ubikpIHx8XFxuK1xcdHJldHVybiBSRUFEX09OQ0UoY29ubi1cXHUwMDNlY19kZXN0cm95X2luX3Byb2cpIHx8XFxuK1xcdCAgICAgICAhY2hlY2tfbmV0KHJkc19jb25uX25ldChjb25uKSkgfHxcXG4gXFx0ICAgICAgIChjb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2V0X3VubG9hZGluZyBcXHUwMDI2XFx1MDAyNiBjb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2V0X3VubG9hZGluZyhjb25uKSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmVjdi5jIGIvbmV0L3Jkcy9yZWN2LmNcXG5pbmRleCA2MjA0ZTU3N2E5MGFlLi5iMDMxYzBiNDNhZjgzIDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvcmVjdi5jXFxuKysrIGIvbmV0L3Jkcy9yZWN2LmNcXG5AQCAtNDYsNiArNDYsNyBAQCB2b2lkIHJkc19pbmNfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcXG4ge1xcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmluYy1cXHUwMDNlaV9yZWZjb3VudCwgMSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZpbmMtXFx1MDAzZWlfaXRlbSk7XFxuK1xcdHJkc19jb25uX2dldChjb25uKTtcXHQvKiBwdXQgaW4gcmRzX2luY19wdXQoKSAqL1xcbiBcXHRpbmMtXFx1MDAzZWlfY29ubiA9IGNvbm47XFxuIFxcdGluYy1cXHUwMDNlaV9jb25uX3BhdGggPSBOVUxMO1xcbiBcXHRpbmMtXFx1MDAzZWlfc2FkZHIgPSAqc2FkZHI7XFxuQEAgLTYxLDYgKzYyLDcgQEAgdm9pZCByZHNfaW5jX3BhdGhfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCxcXG4ge1xcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmluYy1cXHUwMDNlaV9yZWZjb3VudCwgMSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZpbmMtXFx1MDAzZWlfaXRlbSk7XFxuK1xcdHJkc19jb25uX2dldChjcC1cXHUwMDNlY3BfY29ubik7XFx0LyogcHV0IGluIHJkc19pbmNfcHV0KCkgKi9cXG4gXFx0aW5jLVxcdTAwM2VpX2Nvbm4gPSBjcC1cXHUwMDNlY3BfY29ubjtcXG4gXFx0aW5jLVxcdTAwM2VpX2Nvbm5fcGF0aCA9IGNwO1xcbiBcXHRpbmMtXFx1MDAzZWlfc2FkZHIgPSAqc2FkZHI7XFxuQEAgLTgxLDkgKzgzLDE5IEBAIHZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKVxcbiB7XFxuIFxcdHJkc2RlYnVnKFxcXCJwdXQgaW5jICVwIHJlZiAlZFxcXFxuXFxcIiwgaW5jLCByZWZjb3VudF9yZWFkKFxcdTAwMjZpbmMtXFx1MDAzZWlfcmVmY291bnQpKTtcXG4gXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2aW5jLVxcdTAwM2VpX3JlZmNvdW50KSkge1xcbitcXHRcXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBpbmMtXFx1MDAzZWlfY29ubjtcXG4rXFxuIFxcdFxcdEJVR19PTighbGlzdF9lbXB0eShcXHUwMDI2aW5jLVxcdTAwM2VpX2l0ZW0pKTtcXG4gXFxuLVxcdFxcdGluYy1cXHUwMDNlaV9jb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2VpbmNfZnJlZShpbmMpO1xcbitcXHRcXHQvKiBpbmNfZnJlZSgpIGNhbiBmcmVlIHRoZSBtZW1vcnkgQGluYyBsaXZlcyBpbiwgc28gdGhlXFxuK1xcdFxcdCAqIGNvbm5lY3Rpb24gcmVmZXJlbmNlIGhhcyB0byBiZSBkcm9wcGVkIHRocm91Z2ggdGhlXFxuK1xcdFxcdCAqIGNvcHkgdGFrZW4gYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2VpbmNfZnJlZShpbmMpO1xcbitcXHRcXHQvKiBnZXQgaW4gcmRzX2luY19pbml0KCksIHJkc19pbmNfcGF0aF9pbml0KCkgb3JcXG4rXFx0XFx0ICogcmRzX3JlY3ZfaW5jb21pbmcoKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmRzX2Nvbm5fcHV0KGNvbm4pO1xcbiBcXHR9XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocmRzX2luY19wdXQpO1xcbkBAIC0zMjUsNiArMzM3LDEzIEBAIHZvaWQgcmRzX3JlY3ZfaW5jb21pbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLFxcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7XFxuIFxcbitcXHQvKiBldmVyeSBjYWxsZXIgaW5pdGlhbGl6ZWQgQGluYyB3aXRoIHJkc19pbmNfaW5pdCgpIG9yXFxuK1xcdCAqIHJkc19pbmNfcGF0aF9pbml0KCkgZmlyc3QsIHNvIGlfY29ubiBhbHJlYWR5IGhvbGRzIGEgcmVmZXJlbmNlLlxcbitcXHQgKiBUYWtlIHRoZSBuZXcgb25lIGJlZm9yZSBkcm9wcGluZyB0aGUgb2xkLCBzbyB0aGF0IHJlLXBvaW50aW5nIGFuXFxuK1xcdCAqIGluYyBhdCB0aGUgY29ubmVjdGlvbiBpdCBhbHJlYWR5IHJlZmVycyB0byBjYW5ub3QgZnJlZSBpdC5cXG4rXFx0ICovXFxuK1xcdHJkc19jb25uX2dldChjb25uKTtcXG4rXFx0cmRzX2Nvbm5fcHV0KGluYy1cXHUwMDNlaV9jb25uKTtcXG4gXFx0aW5jLVxcdTAwM2VpX2Nvbm4gPSBjb25uO1xcbiBcXHRpbmMtXFx1MDAzZWlfcnhfamlmZmllcyA9IGppZmZpZXM7XFxuIFxcdGlmIChjb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2V0X21wX2NhcGFibGUpXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcXG5pbmRleCAxYWZhOTgxZTVjMDZkLi4wNDVlYjNjM2Y5NzcyIDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvc2VuZC5jXFxuKysrIGIvbmV0L3Jkcy9zZW5kLmNcXG5AQCAtMjkwLDYgKzI5MCw3IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRybS1cXHUwMDNlZGF0YS5vcF9hY3RpdmUgPSAxO1xcbiBcXHRcXHRcXHRybS1cXHUwMDNlbV9pbmMuaV9jb25uX3BhdGggPSBjcDtcXG4rXFx0XFx0XFx0cmRzX2Nvbm5fZ2V0KGNwLVxcdTAwM2VjcF9jb25uKTtcXHQvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi9cXG4gXFx0XFx0XFx0cm0tXFx1MDAzZW1faW5jLmlfY29ubiA9IGNwLVxcdTAwM2VjcF9jb25uO1xcbiBcXG4gXFx0XFx0XFx0Y3AtXFx1MDAzZWNwX3htaXRfcm0gPSBybTtcXG5AQCAtOTQ3LDYgKzk0OCw3IEBAIHN0YXRpYyBpbnQgcmRzX3NlbmRfcXVldWVfcm0oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRcXHQvKiBUaGUgY29kZSBvcmRlcmluZyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IHdlJ3JlXFxuIFxcdFxcdCAgIHRyeWluZyB0byBtaW5pbWl6ZSB0aGUgdGltZSB3ZSBob2xkIGNfbG9jayAqL1xcbiBcXHRcXHRyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoXFx1MDAyNnJtLVxcdTAwM2VtX2luYy5pX2hkciwgc3BvcnQsIGRwb3J0LCAwKTtcXG4rXFx0XFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xcdC8qIHB1dCBpbiByZHNfbWVzc2FnZV9wdXQoKSAqL1xcbiBcXHRcXHRybS1cXHUwMDNlbV9pbmMuaV9jb25uID0gY29ubjtcXG4gXFx0XFx0cm0tXFx1MDAzZW1faW5jLmlfY29ubl9wYXRoID0gY3A7XFxuIFxcdFxcdHJkc19tZXNzYWdlX2FkZHJlZihybSk7XFxuQEAgLTExNTksMTMgKzExNjEsMTQgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxcbiBcXHRERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9pbiAqLCB1c2luLCBtc2ctXFx1MDAzZW1zZ19uYW1lKTtcXG4gXFx0X19iZTE2IGRwb3J0O1xcbiBcXHRzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gTlVMTDtcXG4tXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uO1xcbitcXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBOVUxMO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFx0aW50IHF1ZXVlZCA9IDAsIGFsbG9jYXRlZF9tciA9IDA7XFxuIFxcdGludCBub25ibG9jayA9IG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUO1xcbiBcXHRsb25nIHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbm9uYmxvY2spO1xcbiBcXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3BhdGg7XFxuIFxcdHN0cnVjdCBpbjZfYWRkciBkYWRkcjtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0X191MzIgc2NvcGVfaWQgPSAwO1xcbiBcXHRzaXplX3QgcmRtYV9wYXlsb2FkX2xlbiA9IDA7XFxuIFxcdGJvb2wgemNvcHkgPSAoKG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX1pFUk9DT1BZKSBcXHUwMDI2XFx1MDAyNlxcbkBAIC0xMzQwLDExICsxMzQzLDI5IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcXG4gXFx0cm0tXFx1MDAzZW1fZGFkZHIgPSBkYWRkcjtcXG4gXFxuIFxcdC8qIHJkc19jb25uX2NyZWF0ZSBoYXMgYSBzcGlubG9jayB0aGF0IHJ1bnMgd2l0aCBJUlEgb2ZmLlxcbi1cXHQgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuICovXFxuLVxcdGlmIChycy1cXHUwMDNlcnNfY29ubiBcXHUwMDI2XFx1MDAyNiBpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNnJzLVxcdTAwM2Vyc19jb25uLVxcdTAwM2VjX2ZhZGRyLCBcXHUwMDI2ZGFkZHIpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBycy1cXHUwMDNlcnNfdG9zID09IHJzLVxcdTAwM2Vyc19jb25uLVxcdTAwM2VjX3Rvcykge1xcbi1cXHRcXHRjb25uID0gcnMtXFx1MDAzZXJzX2Nvbm47XFxuK1xcdCAqIENhY2hpbmcgdGhlIGNvbm4gaW4gdGhlIHNvY2tldCBoZWxwcyBhIGxvdC5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGNhY2hlZCByc19jb25uIGhvbGRzIGEgY29ubmVjdGlvbiByZWZlcmVuY2U7IHRha2Ugb25lIG9mXFxuK1xcdCAqIG91ciBvd24gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGlzIGNhbGwgKGRyb3BwZWQgb24gYm90aCBleGl0XFxuK1xcdCAqIHBhdGhzKSwgc28gdGhhdCBuZWl0aGVyIGEgY29uY3VycmVudCBzZW5kZXIgcmVwbGFjaW5nIHRoZVxcbitcXHQgKiBjYWNoZSBub3IgcmRzX2Nvbm5fZGVzdHJveSgpIGNhbiBmcmVlIHRoZSBjb25uZWN0aW9uIHVuZGVyXFxuK1xcdCAqIHVzLiAgQSBjYWNoZWQgY29ubmVjdGlvbiB3aG9zZSBkZXN0cnVjdGlvbiBoYXMgYmVndW4gaXMgbm90XFxuK1xcdCAqIHJldXNlZDogZHJvcHBpbmcgaXQgaGVyZSBsZXRzIHRoZSBuZXh0IHNlbmRtc2cgbG9vayB1cCBvclxcbitcXHQgKiBjcmVhdGUgYSBsaXZlIG9uZSBpbnN0ZWFkIG9mIHJldHVybmluZyAtRUFHQUlOIGZvcmV2ZXIuXFxuK1xcdCAqL1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cnMtXFx1MDAzZXJzX2xvY2ssIGZsYWdzKTtcXG4rXFx0Y29ubiA9IHJzLVxcdTAwM2Vyc19jb25uO1xcbitcXHRpZiAoY29ubiBcXHUwMDI2XFx1MDAyNiBpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmNvbm4tXFx1MDAzZWNfZmFkZHIsIFxcdTAwMjZkYWRkcikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJzLVxcdTAwM2Vyc190b3MgPT0gY29ubi1cXHUwMDNlY190b3MgXFx1MDAyNlxcdTAwMjYgIXJkc19kZXN0cm95X3BlbmRpbmcoY29ubikpIHtcXG4rXFx0XFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHRjb25uID0gTlVMTDtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZycy1cXHUwMDNlcnNfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0aWYgKCFjb25uKSB7XFxuK1xcdFxcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqb2xkO1xcbitcXG4gXFx0XFx0Y29ubiA9IHJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhzb2NrX25ldChzb2NrLVxcdTAwM2VzayksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZycy1cXHUwMDNlcnNfYm91bmRfYWRkciwgXFx1MDAyNmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRycy1cXHUwMDNlcnNfdHJhbnNwb3J0LCBycy1cXHUwMDNlcnNfdG9zLFxcbkBAIC0xMzUyLDkgKzEzNzMsMTcgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzY29wZV9pZCk7XFxuIFxcdFxcdGlmIChJU19FUlIoY29ubikpIHtcXG4gXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihjb25uKTtcXG4rXFx0XFx0XFx0Y29ubiA9IE5VTEw7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuK1xcdFxcdC8qIGhhbmQgdGhlIGNhY2hlIGl0cyBvd24gcmVmZXJlbmNlICovXFxuK1xcdFxcdHJkc19jb25uX2dldChjb25uKTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19sb2NrLCBmbGFncyk7XFxuK1xcdFxcdG9sZCA9IHJzLVxcdTAwM2Vyc19jb25uO1xcbiBcXHRcXHRycy1cXHUwMDNlcnNfY29ubiA9IGNvbm47XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19sb2NrLCBmbGFncyk7XFxuK1xcdFxcdGlmIChvbGQpXFxuK1xcdFxcdFxcdHJkc19jb25uX3B1dChvbGQpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoY29ubi1cXHUwMDNlY190cmFucy1cXHUwMDNldF9tcF9jYXBhYmxlKSB7XFxuQEAgLTE0NjksNiArMTQ5OCw4IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcXG4gXFx0XFx0a2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7XFxuIFxcdGtmcmVlKHZjdC52ZWMpO1xcbiBcXG4rXFx0cmRzX2Nvbm5fcHV0KGNvbm4pO1xcbitcXG4gXFx0cmV0dXJuIHBheWxvYWRfbGVuO1xcbiBcXG4gb3V0OlxcbkBAIC0xNDc2LDYgKzE1MDcsOSBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXFxuIFxcdFxcdGtmcmVlKHZjdC52ZWNbaW5kXS5pb3YpO1xcbiBcXHRrZnJlZSh2Y3QudmVjKTtcXG4gXFxuK1xcdGlmIChjb25uKVxcbitcXHRcXHRyZHNfY29ubl9wdXQoY29ubik7XFxuK1xcbiBcXHQvKiBJZiB0aGUgdXNlciBpbmNsdWRlZCBhIFJETUFfTUFQIGNtc2csIHdlIGFsbG9jYXRlZCBhIE1SIG9uIHRoZSBmbHkuXFxuIFxcdCAqIElmIHRoZSBzZW5kbXNnIGdvZXMgdGhyb3VnaCwgd2Uga2VlcCB0aGUgTVIuIElmIGl0IGZhaWxzIHdpdGggRUFHQUlOXFxuIFxcdCAqIG9yIGluIGFueSBvdGhlciB3YXksIHdlIG5lZWQgdG8gZGVzdHJveSB0aGUgTVIgYWdhaW4gKi9cXG5AQCAtMTUyMiw2ICsxNTU2LDcgQEAgcmRzX3NlbmRfcHJvYmUoc3RydWN0IHJkc19jb25uX3BhdGggKmNwLCBfX2JlMTYgc3BvcnQsXFxuIFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnJtLVxcdTAwM2VtX2Nvbm5faXRlbSwgXFx1MDAyNmNwLVxcdTAwM2VjcF9zZW5kX3F1ZXVlKTtcXG4gXFx0c2V0X2JpdChSRFNfTVNHX09OX0NPTk4sIFxcdTAwMjZybS1cXHUwMDNlbV9mbGFncyk7XFxuIFxcdHJkc19tZXNzYWdlX2FkZHJlZihybSk7XFxuK1xcdHJkc19jb25uX2dldChjcC1cXHUwMDNlY3BfY29ubik7XFx0LyogcHV0IGluIHJkc19tZXNzYWdlX3B1dCgpICovXFxuIFxcdHJtLVxcdTAwM2VtX2luYy5pX2Nvbm4gPSBjcC1cXHUwMDNlY3BfY29ubjtcXG4gXFx0cm0tXFx1MDAzZW1faW5jLmlfY29ubl9wYXRoID0gY3A7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcC5jIGIvbmV0L3Jkcy90Y3AuY1xcbmluZGV4IDc3NGE3MWY4OGQzNzUuLjI2ODVlZTIxYTIyZDEgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy90Y3AuY1xcbisrKyBiL25ldC9yZHMvdGNwLmNcXG5AQCAtODA1LDYgKzgwNSw3IEBAIHN0YXRpYyB2b2lkIHJkc190Y3BfZXhpdCh2b2lkKVxcbiAjZW5kaWZcXG4gXFx0dW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKFxcdTAwMjZyZHNfdGNwX25ldF9vcHMpO1xcbiBcXHRyZHNfdGNwX2Rlc3Ryb3lfY29ubnMoKTtcXG4rXFx0cmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChcXHUwMDI2cmRzX3RjcF90cmFuc3BvcnQpO1xcbiBcXHRyZHNfdHJhbnNfdW5yZWdpc3RlcihcXHUwMDI2cmRzX3RjcF90cmFuc3BvcnQpO1xcbiBcXHRyZHNfdGNwX3JlY3ZfZXhpdCgpO1xcbiBcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX3RjcF9jb25uX3NsYWIpO1xcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcF9saXN0ZW4uYyBiL25ldC9yZHMvdGNwX2xpc3Rlbi5jXFxuaW5kZXggMTNmYTYwYzE5ODViYi4uMGQyY2VkODkyYThhZSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL3RjcF9saXN0ZW4uY1xcbisrKyBiL25ldC9yZHMvdGNwX2xpc3Rlbi5jXFxuQEAgLTE1Myw3ICsxNTMsNyBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxcbiB7XFxuIFxcdHN0cnVjdCBzb2NrZXQgKmxpc3Rlbl9zb2NrID0gcnRuLVxcdTAwM2VyZHNfdGNwX2xpc3Rlbl9zb2NrO1xcbiBcXHRzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jayA9IE5VTEw7XFxuLVxcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjtcXG4rXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gTlVMTDtcXG4gXFx0aW50IHJldDtcXG4gXFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcXG4gXFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqcnNfdGNwID0gTlVMTDtcXG5AQCAtMjI5LDYgKzIyOSw3IEBAIGludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXFxuIFxcbiBcXHRpZiAoSVNfRVJSKGNvbm4pKSB7XFxuIFxcdFxcdHJldCA9IFBUUl9FUlIoY29ubik7XFxuK1xcdFxcdGNvbm4gPSBOVUxMO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXHQvKiBBbiBpbmNvbWluZyBTWU4gcmVxdWVzdCBjYW1lIGluLCBhbmQgVENQIGp1c3QgYWNjZXB0ZWQgaXQuXFxuQEAgLTM0Myw2ICszNDQsOCBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnJzX3RjcC1cXHUwMDNldF9jb25uX3BhdGhfbG9jayk7XFxuIFxcdGlmIChuZXdfc29jaylcXG4gXFx0XFx0c29ja19yZWxlYXNlKG5ld19zb2NrKTtcXG4rXFx0aWYgKGNvbm4pXFxuK1xcdFxcdHJkc19jb25uX3B1dChjb25uKTtcXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cnRuLVxcdTAwM2VyZHNfdGNwX2FjY2VwdF9sb2NrKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMzLjQ4MTIwMjEzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTgwMjAyMzM5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfVENQXCIsXG4gICAgXCJSRFNfUkRNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcmRzX2Nvbm5fY3JlYXRlXCIsXG4gICAgXCJyZHNfY29ubl9kZXN0cm95XCIsXG4gICAgXCJyZHNfY29ubl9kZXN0cm95X2ZpbmlcIixcbiAgICBcInJkc19jb25uX2dldFwiLFxuICAgIFwicmRzX2Nvbm5fcHV0XCIsXG4gICAgXCJyZHNfY29ubl9sb29rdXBcIixcbiAgICBcInJkc19zZW5kbXNnXCIsXG4gICAgXCJyZHNfcmVjdl9pbmNvbWluZ1wiLFxuICAgIFwicmRzX2luY19wdXRcIixcbiAgICBcInJkc19tZXNzYWdlX2ZyZWVcIixcbiAgICBcInJkc190Y3BfYWNjZXB0X29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmVmZXJlbmNlIGNvdW50aW5nIChrcmVmKSB0byBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKGNfcmVmY291bnQpIHRvIHByb3Blcmx5IG1hbmFnZSBjb25uZWN0aW9uIGxpZmV0aW1lcyBhbmQgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zLiBJdCByZWZhY3RvcnMgY29ubmVjdGlvbiB0ZWFyZG93biBpbnRvIHN5bmNocm9ub3VzIHF1aWVzY2UgKHJkc19jb25uX3BhdGhfcXVpZXNjZSwgcmRzX2Nvbm5fZGVzdHJveSkgYW5kIGFzeW5jaHJvbm91cyBkZXN0cnVjdGlvbiAocmRzX2Nvbm5fZGVzdHJveV9maW5pKSwgYW5kIHVwZGF0ZXMgcmVmZXJlbmNlIHRyYWNraW5nIGFjcm9zcyBzb2NrZXQgcmVsZWFzZSwgbWVzc2FnZSBxdWV1ZXMsIHJlY3Yvc2VuZCBwYXRocywgYW5kIHRyYW5zcG9ydHMgKFRDUCwgbG9vcCwgSUIpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBsb2dpYywgc3luY2hyb25pemF0aW9uLCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaW4gbmV0L3JkcywgbWFraW5nIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDAxNWUxODZlNTRlMzU5M2RmNmZmYTAwNzMxYWVhMDlhOTE4YWQyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTU6NTY6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuY1xuaW5kZXggZDVkZWZlOTE3MmUzNi4uMGVhYTViOTc2NTcyNCAxMDA2NDRcbi0tLSBhL25ldC9yZHMvYWZfcmRzLmNcbisrKyBiL25ldC9yZHMvYWZfcmRzLmNcbkBAIC04MCw2ICs4MCwxNCBAQCBzdGF0aWMgaW50IHJkc19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4gXHRyZHNfbm90aWZ5X3F1ZXVlX2dldChycywgTlVMTCk7XG4gXHRyZHNfbm90aWZ5X21zZ196Y29weV9wdXJnZShcdTAwMjZycy1cdTAwM2Vyc196Y29va2llX3F1ZXVlKTtcbiBcbitcdC8qIGRyb3AgdGhlIGNhY2hlZCBjb25uZWN0aW9uIHJlZmVyZW5jZTsgbm8gc2VuZG1zZyBjYW4gcmFjZVxuK1x0ICogd2l0aCB1cyBoZXJlLCB0aGUgc29ja2V0IGlzIGdvaW5nIGF3YXlcbitcdCAqL1xuK1x0aWYgKHJzLVx1MDAzZXJzX2Nvbm4pIHtcbitcdFx0cmRzX2Nvbm5fcHV0KHJzLVx1MDAzZXJzX2Nvbm4pO1xuK1x0XHRycy1cdTAwM2Vyc19jb25uID0gTlVMTDtcbitcdH1cbitcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZyZHNfc29ja19sb2NrKTtcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnMtXHUwMDNlcnNfaXRlbSk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZyZHNfc29ja19sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5pbmRleCBiNmM0YmViNTBlYWYwLi4yYzhjYTU0YTkxY2E4IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5AQCAtNDcsNyArNDcsOCBAQFxuIFxuIC8qIGNvbnZlcnRpbmcgdGhpcyB0byBSQ1UgaXMgYSBjaG9yZSBmb3IgYW5vdGhlciBkYXkuLiAqL1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX2Nvbm5fbG9jayk7XG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2Nvbm5fY291bnQ7XG4rLyogd29rZW4gd2hlbmV2ZXIgYSB0cmFuc3BvcnQncyB0X2Nvbm5fY291bnQgZHJvcHMgdG8gemVybyAqL1xuK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZHNfY29ubl9mcmVlZF93YWl0cSk7XG4gc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIHJkc19jb25uX2hhc2hbUkRTX0NPTk5FQ1RJT05fSEFTSF9FTlRSSUVTXTtcbiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19jb25uX3NsYWI7XG4gXG5AQCAtNzksNyArODAsMTAgQEAgc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpyZHNfY29ubl9idWNrZXQoY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYWRkcixcbiBcdFx0dmFyIHw9IFJEU19JTkZPX0NPTk5FQ1RJT05fRkxBR18jI3N1ZmZpeDtcdFxcXG4gfSB3aGlsZSAoMClcbiBcbi0vKiByY3UgcmVhZCBsb2NrIG11c3QgYmUgaGVsZCBvciB0aGUgY29ubmVjdGlvbiBzcGlubG9jayAqL1xuKy8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrLlxuKyAqIE9uIHN1Y2Nlc3MgYSByZWZlcmVuY2UgaXMgdGFrZW4gb24gdGhlIHJldHVybmVkIGNvbm5lY3Rpb247IHRoZVxuKyAqIGNhbGxlciBtdXN0IGRyb3AgaXQgd2l0aCByZHNfY29ubl9wdXQoKS5cbisgKi9cbiBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCxcbiBcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYWRkcixcbkBAIC05Niw2ICsxMDAsMTMgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0ICAgIGNvbm4tXHUwMDNlY190b3MgPT0gdG9zIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgbmV0ID09IHJkc19jb25uX25ldChjb25uKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGNvbm4tXHUwMDNlY19kZXZfaWYgPT0gZGV2X2lmKSB7XG4rXHRcdFx0LyogQW4gZW50cnkgd2hvc2UgcmVmY291bnQgYWxyZWFkeSBkcm9wcGVkIHRvXG4rXHRcdFx0ICogemVybyBoYXMgYmVlbiB1bmhhc2hlZCBhbmQgaXMgYWJvdXQgdG8gYmVcbitcdFx0XHQgKiBmcmVlZDsgYW4gUkNVIHRyYXZlcnNhbCBtYXkgc3RpbGwgY29tZVxuK1x0XHRcdCAqIGFjcm9zcyBpdC4gIFRyZWF0IGl0IGFzIGFic2VudC5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNmNvbm4tXHUwMDNlY19yZWZjb3VudCkpXG4rXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRyZXQgPSBjb25uO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMTk3LDcgKzIwOCwxNCBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdCAqIFdlIG5lZWQgYSBzZWNvbmQgY29ubmVjdGlvbiBvYmplY3QgaW50byB3aGljaCB3ZVxuIFx0XHQgKiBjYW4gc3RpY2sgdGhlIG90aGVyIFFQLiAqL1xuIFx0XHRwYXJlbnQgPSBjb25uO1xuK1x0XHQvKiBUaGUgY19wYXNzaXZlIHBvaW50ZXIgaG9sZHMgYSByZWZlcmVuY2Ugd2hpY2ggaXMgb25seVxuK1x0XHQgKiBkcm9wcGVkIG9uZSBzeW5jaHJvbml6ZV9yY3UoKSBhZnRlciB0aGUgcG9pbnRlciBpc1xuK1x0XHQgKiBjbGVhcmVkLCBzbyB3aXRoaW4gdGhpcyBSQ1Ugc2VjdGlvbiBhIGZldGNoZWQgcG9pbnRlclxuK1x0XHQgKiBpcyBhbHdheXMgc2FmZSB0byB0YWtlIGEgcmVmZXJlbmNlIG9uLlxuK1x0XHQgKi9cbiBcdFx0Y29ubiA9IHBhcmVudC1cdTAwM2VjX3Bhc3NpdmU7XG4rXHRcdGlmIChjb25uKVxuK1x0XHRcdHJkc19jb25uX2dldChjb25uKTtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aWYgKGNvbm4pXG5AQCAtMjE1LDYgKzIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4rXHRrcmVmX2luaXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50KTtcbiBcdElOSVRfSExJU1RfTk9ERShcdTAwMjZjb25uLVx1MDAzZWNfaGFzaF9ub2RlKTtcbiBcdGNvbm4tXHUwMDNlY19sYWRkciA9ICpsYWRkcjtcbiBcdGNvbm4tXHUwMDNlY19pc3Y2ID0gIWlwdjZfYWRkcl92NG1hcHBlZChsYWRkcik7XG5AQCAtMjgyLDggKzMwMSw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgaXNfb3V0Z29pbmcpO1xuIFx0XHRjb25uLVx1MDAzZWNfcGF0aFtpXS5jcF9pbmRleCA9IGk7XG4gXHRcdGNvbm4tXHUwMDNlY19wYXRoW2ldLmNwX3dxID1cbi1cdFx0XHRhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcImtyZHNfY3Bfd3EjJWx1LyVkXCIsIDAsXG4tXHRcdFx0XHRcdFx0cmRzX2Nvbm5fY291bnQsIGkpO1xuK1x0XHRcdGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFwia3Jkc19jcF93cSMlZC8lZFwiLCAwLFxuK1x0XHRcdFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNnRyYW5zLVx1MDAzZXRfY29ubl9jb3VudCksXG4rXHRcdFx0XHRcdFx0aSk7XG4gXHRcdGlmICghY29ubi1cdTAwM2VjX3BhdGhbaV0uY3Bfd3EpXG4gXHRcdFx0Y29ubi1cdTAwM2VjX3BhdGhbaV0uY3Bfd3EgPSByZHNfd3E7XG4gXHR9XG5AQCAtMzE1LDE1ICszMzUsMzUgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqX19yZHNfY29ubl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuIFx0aWYgKHBhcmVudCkge1xuIFx0XHQvKiBDcmVhdGluZyBwYXNzaXZlIGNvbm4gKi9cbi1cdFx0aWYgKHBhcmVudC1cdTAwM2VjX3Bhc3NpdmUpIHtcbitcdFx0aWYgKFJFQURfT05DRShwYXJlbnQtXHUwMDNlY19kZXN0cm95X2luX3Byb2cpKSB7XG4rXHRcdFx0LyogVGhlIHBhcmVudCdzIGRlc3Ryb3kgaGFzIGJlZ3VuIChpdCBzZXRzIHRoZVxuK1x0XHRcdCAqIGZsYWcgYW5kIHNuYXRjaGVzIGNfcGFzc2l2ZSB1bmRlciB0aGlzXG4rXHRcdFx0ICogbG9jayk7IGRvIG5vdCBpbnN0YWxsIGEgbmV3IHBhc3NpdmUgY29ublxuK1x0XHRcdCAqIHRoYXQgbm90aGluZyB3b3VsZCBldmVyIGRlc3Ryb3kuXG4rXHRcdFx0ICovXG4rXHRcdFx0dHJhbnMtXHUwMDNlY29ubl9mcmVlKGNvbm4tXHUwMDNlY19wYXRoWzBdLmNwX3RyYW5zcG9ydF9kYXRhKTtcbitcdFx0XHRmcmVlX2NwID0gY29ubi1cdTAwM2VjX3BhdGg7XG4rXHRcdFx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xuK1x0XHRcdGNvbm4gPSBFUlJfUFRSKC1FTkVURE9XTik7XG4rXHRcdH0gZWxzZSBpZiAocGFyZW50LVx1MDAzZWNfcGFzc2l2ZSkge1xuK1x0XHRcdHJkc19jb25uX2dldChwYXJlbnQtXHUwMDNlY19wYXNzaXZlKTtcbiBcdFx0XHR0cmFucy1cdTAwM2Vjb25uX2ZyZWUoY29ubi1cdTAwM2VjX3BhdGhbMF0uY3BfdHJhbnNwb3J0X2RhdGEpO1xuIFx0XHRcdGZyZWVfY3AgPSBjb25uLVx1MDAzZWNfcGF0aDtcbiBcdFx0XHRrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7XG4gXHRcdFx0Y29ubiA9IHBhcmVudC1cdTAwM2VjX3Bhc3NpdmU7XG4gXHRcdH0gZWxzZSB7XG4rXHRcdFx0LyogVGhlIGluaXRpYWwgcmVmZXJlbmNlIGJlbG9uZ3MgdG8gd2hvZXZlclxuK1x0XHRcdCAqIGRlc3Ryb3lzIHRoZSBjb25uICh0aGUgdHJhbnNwb3J0J3MgY29ublxuK1x0XHRcdCAqIGxpc3RzLCBhcyBmb3IgYW55IG90aGVyIGNvbm4pLiAgVGFrZSBvbmVcbitcdFx0XHQgKiBmb3IgdGhlIGNfcGFzc2l2ZSBwb2ludGVyIC0gZHJvcHBlZCB3aGVuXG4rXHRcdFx0ICogdGhlIHBhcmVudCBpcyBkZXN0cm95ZWQgLSBhbmQgb25lIGZvciBvdXJcbitcdFx0XHQgKiBjYWxsZXIuXG4rXHRcdFx0ICovXG4rXHRcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1x0LyogY19wYXNzaXZlICovXG4rXHRcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1x0LyogY2FsbGVyICovXG4gXHRcdFx0cGFyZW50LVx1MDAzZWNfcGFzc2l2ZSA9IGNvbm47XG4gXHRcdFx0cmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7XG4tXHRcdFx0cmRzX2Nvbm5fY291bnQrKztcbitcdFx0XHRhdG9taWNfaW5jKFx1MDAyNmNvbm4tXHUwMDNlY190cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBDcmVhdGluZyBub3JtYWwgY29ubiAqL1xuQEAgLTM1MCwxNSArMzkwLDIxIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRjb25uLVx1MDAzZWNfbXlfZ2VuX251bSA9IHJkc19nZW5fbnVtO1xuIFx0XHRcdGNvbm4tXHUwMDNlY19wZWVyX2dlbl9udW0gPSAwO1xuK1x0XHRcdC8qIHRoZSBpbml0aWFsIHJlZmVyZW5jZSBiZWxvbmdzIHRvIHdob2V2ZXJcbitcdFx0XHQgKiBkZXN0cm95cyB0aGUgY29ubjsgdGFrZSBvbmUgZm9yIG91ciBjYWxsZXJcbitcdFx0XHQgKi9cbitcdFx0XHRyZHNfY29ubl9nZXQoY29ubik7XG4gXHRcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNmNvbm4tXHUwMDNlY19oYXNoX25vZGUsIGhlYWQpO1xuIFx0XHRcdHJkc19jb25nX2FkZF9jb25uKGNvbm4pO1xuLVx0XHRcdHJkc19jb25uX2NvdW50Kys7XG4rXHRcdFx0YXRvbWljX2luYyhcdTAwMjZjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNldF9jb25uX2NvdW50KTtcbiBcdFx0fVxuIFx0fVxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyZHNfY29ubl9sb2NrLCBmbGFncyk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBvdXQ6XG4rXHRpZiAocGFyZW50KVxuK1x0XHRyZHNfY29ubl9wdXQocGFyZW50KTtcbiBcdGlmIChmcmVlX2NwKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYXRoczsgaSsrKVxuIFx0XHRcdGlmIChmcmVlX2NwW2ldLmNwX3dxICE9IHJkc193cSlcbkBAIC01MTUsMTAgKzU2MSwxMiBAQCB2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fc2xvdHNfYXZhaWxhYmxlKGNvbm4sIGZhbHNlKTtcbiB9XG4gXG4tLyogZGVzdHJveSBhIHNpbmdsZSByZHNfY29ubl9wYXRoLiByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlclxuLSAqIGFsbCBwYXRocyB1c2luZyByZHNfY29ubl9wYXRoX2Rlc3Ryb3koKVxuKy8qIHF1aWVzY2UgYSBzaW5nbGUgcmRzX2Nvbm5fcGF0aDogc2h1dCBpdCBkb3duIGFuZCB0ZWFyIGRvd24gYW55XG4rICogcXVldWVkIG1lc3NhZ2VzLiAgcmRzX2Nvbm5fZGVzdHJveSgpIGl0ZXJhdGVzIG92ZXIgYWxsIHBhdGhzIHVzaW5nXG4rICogcmRzX2Nvbm5fcGF0aF9xdWllc2NlKCk7IHRoZSB0cmFuc3BvcnQgc3RhdGUgYW5kIHRoZSB3b3JrcXVldWUgYXJlXG4rICogZnJlZWQgbGF0ZXIsIGZyb20gcmRzX2Nvbm5fcGF0aF9mcmVlKCkuXG4gICovXG4tc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbitzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3F1aWVzY2Uoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIHtcbiBcdHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICpydG1wO1xuIFxuQEAgLTU0Nyw2ICs1OTUsMTYgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFdBUk5fT04oZGVsYXllZF93b3JrX3BlbmRpbmcoXHUwMDI2Y3AtXHUwMDNlY3BfcmVjdl93KSk7XG4gXHRXQVJOX09OKGRlbGF5ZWRfd29ya19wZW5kaW5nKFx1MDAyNmNwLVx1MDAzZWNwX2Nvbm5fdykpO1xuIFx0V0FSTl9PTih3b3JrX3BlbmRpbmcoXHUwMDI2Y3AtXHUwMDNlY3BfZG93bl93KSk7XG4rfVxuK1xuKy8qIGZyZWUgYSBxdWllc2NlZCByZHNfY29ubl9wYXRoJ3MgdHJhbnNwb3J0IHN0YXRlIGFuZCB3b3JrcXVldWU7IHJ1bnNcbisgKiBmcm9tIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgdGhlIGxhc3QgY29ubmVjdGlvbiByZWZlcmVuY2UgaXNcbisgKiBkcm9wcGVkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZnJlZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4re1xuK1x0aWYgKCFjcC1cdTAwM2VjcF90cmFuc3BvcnRfZGF0YSlcbitcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKGNwLVx1MDAzZWNwX3dxICE9IHJkc193cSkge1xuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShjcC1cdTAwM2VjcF93cSk7XG5AQCAtNTU2LDE3ICs2MTQsNzQgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdGNwLVx1MDAzZWNwX2Nvbm4tXHUwMDNlY190cmFucy1cdTAwM2Vjb25uX2ZyZWUoY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGEpO1xuIH1cbiBcbisvKiBGcmVlIGEgY29ubmVjdGlvbi4gIFRoaXMgcnVucyBmcm9tIHJkc19jb25uX3B1dCgpIHdoZW4gdGhlIGxhc3RcbisgKiByZWZlcmVuY2UgaXMgZHJvcHBlZCwgYWZ0ZXIgcmRzX2Nvbm5fZGVzdHJveSgpIGhhcyBxdWllc2NlZCB0aGVcbisgKiBjb25uZWN0aW9uIGFuZCBkcm9wcGVkIHRoZSBpbml0aWFsIHJlZmVyZW5jZS5cbisgKi9cbitzdGF0aWMgdm9pZCByZHNfY29ubl9kZXN0cm95X2Zpbmkoc3RydWN0IGtyZWYgKmtyZWYpXG4re1xuK1x0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfY29ubmVjdGlvbixcbitcdFx0XHRcdFx0XHQgICBjX3JlZmNvdW50KTtcbitcdGludCBucGF0aHMgPSAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7XG4rXHRzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMgPSBjb25uLVx1MDAzZWNfdHJhbnM7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYXRoczsgaSsrKVxuK1x0XHRyZHNfY29ubl9wYXRoX2ZyZWUoXHUwMDI2Y29ubi1cdTAwM2VjX3BhdGhbaV0pO1xuK1xuK1x0a2ZyZWUoY29ubi1cdTAwM2VjX3BhdGgpO1xuK1x0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xuK1xuK1x0Lyogb25seSBhZnRlciBldmVyeXRoaW5nIHRoZSB0cmFuc3BvcnQgbW9kdWxlIG93bnMgaGFzIGJlZW5cbitcdCAqIGZyZWVkIGFib3ZlIG1heSBpdHMgdW5sb2FkIHByb2NlZWRcbitcdCAqL1xuK1x0aWYgKCFhdG9taWNfZGVjX3JldHVybihcdTAwMjZ0cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpKVxuK1x0XHR3YWtlX3VwX2FsbChcdTAwMjZyZHNfY29ubl9mcmVlZF93YWl0cSk7XG4rfVxuK1xuKy8qIFdhaXQgZm9yIGFsbCBvZiBAdHJhbnMncyBjb25uZWN0aW9ucyB0byBiZSBmcmVlZDsgdGhlIGZyZWUgcnVuc1xuKyAqIGFzeW5jaHJvbm91c2x5IG9uY2UgcmRzX2Nvbm5fZGVzdHJveSgpIGhhcyBxdWllc2NlZCBhIGNvbm5lY3Rpb24uXG4rICogQ2FsbGVkIG9uIHRyYW5zcG9ydCBtb2R1bGUgdW5sb2FkLCBhZnRlciB0aGUgdHJhbnNwb3J0IGRlc3Ryb3llZFxuKyAqIGFsbCBvZiBpdHMgY29ubmVjdGlvbnM6IGFueXRoaW5nIHN0aWxsIGhvbGRpbmcgYSBjb25uZWN0aW9uXG4rICogcmVmZXJlbmNlIGF0IHRoYXQgcG9pbnQgaXMgYSBzaG9ydC1saXZlZCBsb29rdXAtc3R5bGUgaG9sZGVyLCBzb1xuKyAqIGEgYm91bmRlZCB3YWl0IHN1ZmZpY2VzIC0gYnV0IHdhcm4gaWYgaXQgZXhwaXJlcywgc2luY2UgdGhlIGZyZWVzXG4rICogdGhhdCBmb2xsb3cgdGhlIHVubG9hZCB3aWxsIHRoZW4gdG91Y2ggZnJlZWQgbW9kdWxlIHRleHQuXG4rICovXG4rdm9pZCByZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucylcbit7XG4rXHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChyZHNfY29ubl9mcmVlZF93YWl0cSxcbitcdFx0XHRcdCFhdG9taWNfcmVhZChcdTAwMjZ0cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpLFxuK1x0XHRcdFx0bXNlY3NfdG9famlmZmllcyhSRFNfQ09OTl9GUkVFX1RJTUVPVVRfTVMpKSlcbitcdFx0V0FSTigxLCBcIlJEUy8lczogJWQgY29ubmVjdGlvbihzKSBub3QgZnJlZWRcXG5cIixcbitcdFx0ICAgICB0cmFucy1cdTAwM2V0X25hbWUsIGF0b21pY19yZWFkKFx1MDAyNnRyYW5zLVx1MDAzZXRfY29ubl9jb3VudCkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKTtcbitcbit2b2lkIHJkc19jb25uX2dldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4re1xuK1x0a3JlZl9nZXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50KTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZ2V0KTtcbitcbit2b2lkIHJkc19jb25uX3B1dChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4re1xuK1x0a3JlZl9wdXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50LCByZHNfY29ubl9kZXN0cm95X2ZpbmkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9wdXQpO1xuK1xuIC8qXG4gICogU3RvcCBhbmQgZnJlZSBhIGNvbm5lY3Rpb24uXG4gICpcbi0gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gdmVyeSBsaW1pdGVkIGNpcmN1bXN0YW5jZXMuICBJdCBhc3N1bWVzIHRoYXQgb25jZVxuLSAqIHRoZSBjb25uIGhhcyBiZWVuIHNodXRkb3duIHRoYXQgbm8gb25lIGVsc2UgaXMgcmVmZXJlbmNpbmcgdGhlIGNvbm5lY3Rpb24uXG4tICogV2UgY2FuIG9ubHkgZW5zdXJlIHRoaXMgaW4gdGhlIHJtbW9kIHBhdGggaW4gdGhlIGN1cnJlbnQgY29kZS5cbisgKiBRdWllc2NlcyB0aGUgY29ubmVjdGlvbiBzeW5jaHJvbm91c2x5ICh3b3JrZXJzIGNhbmNlbGxlZCwgdHJhbnNwb3J0XG4rICogY29ubmVjdGlvbnMgc2h1dCBkb3duLCBxdWV1ZWQgbWVzc2FnZXMgZHJvcHBlZCkgYW5kIGRyb3BzIHRoZVxuKyAqIGluaXRpYWwgcmVmZXJlbmNlLiAgVGhlIG1lbW9yeSAtIGluY2x1ZGluZyB0aGUgdHJhbnNwb3J0J3NcbisgKiBwZXItY29ubmVjdGlvbiBzdGF0ZSBhbmQgdGhlIHBhdGggd29ya3F1ZXVlcyAtIGlzIGZyZWVkIG9uY2UgdGhlXG4rICogbGFzdCByZHNfY29ubl9wdXQoKSBydW5zLCB3aGljaCBtYXkgYmUgYWZ0ZXIgdGhpcyByZXR1cm5zLlxuICAqL1xuIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBpO1xuK1x0c3RydWN0IHJkc19jb25uZWN0aW9uICpwYXNzaXZlO1xuIFx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwO1xuIFx0aW50IG5wYXRocyA9IChjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNldF9tcF9jYXBhYmxlID8gUkRTX01QQVRIX1dPUktFUlMgOiAxKTtcbiBcbkBAIC01NzQsMTYgKzY4OSw0NiBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIFx0XHQgXCIlcEk0XFxuXCIsIGNvbm4sIFx1MDAyNmNvbm4tXHUwMDNlY19sYWRkcixcbiBcdFx0IFx1MDAyNmNvbm4tXHUwMDNlY19mYWRkcik7XG4gXG4tXHQvKiBFbnN1cmUgY29ubiB3aWxsIG5vdCBiZSBzY2hlZHVsZWQgZm9yIHJlY29ubmVjdCAqL1xuK1x0LyogTWFrZSByZHNfZGVzdHJveV9wZW5kaW5nKCkgdHJ1ZSBmb3IgdGhpcyBjb25uLiAgVG9nZXRoZXIgd2l0aFxuK1x0ICogdGhlIHN5bmNocm9uaXplX3JjdSgpIGJlbG93IHRoaXMgc3RvcHMgdGhlIHdvcmstcmVxdWV1ZWluZ1xuK1x0ICogc2l0ZXMgKHdoaWNoIGFsbCB0ZXN0IHJkc19kZXN0cm95X3BlbmRpbmcoKSB1bmRlclxuK1x0ICogcmN1X3JlYWRfbG9jaygpKSBmcm9tIHF1ZXVlaW5nIG5ldyB3b3JrIG9uIHRoZSBwYXRoXG4rXHQgKiB3b3JrcXVldWVzIG9uY2Ugd2Ugc3RhcnQgY2FuY2VsbGluZyBhbmQgZGVzdHJveWluZyB0aGVtLlxuK1x0ICpcbitcdCAqIE5vdyB0aGF0IHRoZSB0cmFuc3BvcnQgc3RhdGUgc3RheXMgZGlzY292ZXJhYmxlIChlLmcuIG9uIHRoZVxuK1x0ICogdHJhbnNwb3J0cycgY29ubmVjdGlvbiBsaXN0cykgdW50aWwgdGhlIGZpbmFsIHJkc19jb25uX3B1dCgpLFxuK1x0ICogYSBjb25uIGNhbiBiZSBoYW5kZWQgdG8gcmRzX2Nvbm5fZGVzdHJveSgpIG1vcmUgdGhhbiBvbmNlIC1cbitcdCAqIGUuZy4gZHJvcHBlZCBmb3IgYSBwcm90b2NvbCB2ZXJzaW9uIG1pc21hdGNoIGFuZCB0aGVuIGZvdW5kXG4rXHQgKiBhZ2FpbiBhdCBtb2R1bGUgdW5sb2FkLiAgT25seSB0aGUgZmlyc3QgY2FsbGVyIHByb2NlZWRzOyB0aGVcbitcdCAqIHVuaGFzaCBhbHNvIGhhcHBlbnMgdW5kZXIgcmRzX2Nvbm5fbG9jaywgc28gYSBsb29rZWQtdXAgY29ublxuK1x0ICogY2FuIG5ldmVyIGJlIHF1aWVzY2VkIHR3aWNlLlxuK1x0ICovXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnJkc19jb25uX2xvY2spO1xuK1x0aWYgKGNvbm4tXHUwMDNlY19kZXN0cm95X2luX3Byb2cpIHtcbitcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJkc19jb25uX2xvY2spO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRXUklURV9PTkNFKGNvbm4tXHUwMDNlY19kZXN0cm95X2luX3Byb2csIHRydWUpO1xuK1xuK1x0LyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi9cbiBcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZjb25uLVx1MDAzZWNfaGFzaF9ub2RlKTtcbitcbitcdC8qIFNuYXRjaCBjX3Bhc3NpdmUgd2hpbGUgaG9sZGluZyB0aGUgbG9jazpcbitcdCAqIF9fcmRzX2Nvbm5fY3JlYXRlKCkgZGVyZWZlcmVuY2VzIGl0IHVuZGVyIHJjdV9yZWFkX2xvY2soKVxuK1x0ICogKGFuZCByZWZ1c2VzIHRvIGluc3RhbGwgYSBuZXcgb25lIG9uY2UgY19kZXN0cm95X2luX3Byb2cgaXNcbitcdCAqIHNldCwgd2hpY2ggaXQgY2hlY2tzIHVuZGVyIHRoaXMgbG9jaykuICBBZnRlciB0aGVcbitcdCAqIHN5bmNocm9uaXplX3JjdSgpIGJlbG93IG5vIG9uZSBjYW4gcGljayB0aGUgcG9pbnRlciB1cCBhbnlcbitcdCAqIG1vcmUgYW5kIGl0cyByZWZlcmVuY2UgY2FuIGJlIGRyb3BwZWQuXG4rXHQgKi9cbitcdHBhc3NpdmUgPSBjb25uLVx1MDAzZWNfcGFzc2l2ZTtcbitcdGNvbm4tXHUwMDNlY19wYXNzaXZlID0gTlVMTDtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyZHNfY29ubl9sb2NrKTtcbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0Lyogc2h1dCB0aGUgY29ubmVjdGlvbiBkb3duICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGF0aHM7IGkrKykge1xuIFx0XHRjcCA9IFx1MDAyNmNvbm4tXHUwMDNlY19wYXRoW2ldO1xuLVx0XHRyZHNfY29ubl9wYXRoX2Rlc3Ryb3koY3ApO1xuK1x0XHRyZHNfY29ubl9wYXRoX3F1aWVzY2UoY3ApO1xuIFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2Y3AtXHUwMDNlY3BfcmV0cmFucykpO1xuIFx0fVxuIFxuQEAgLTU5NCwxMiArNzM5LDE0IEBAIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4gXHQgKi9cbiBcdHJkc19jb25nX3JlbW92ZV9jb25uKGNvbm4pO1xuIFxuLVx0a2ZyZWUoY29ubi1cdTAwM2VjX3BhdGgpO1xuLVx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xuK1x0LyogZHJvcCB0aGUgcmVmZXJlbmNlIG91ciBjX3Bhc3NpdmUgcG9pbnRlciBoZWxkLCBpZiBhbnkgKi9cbitcdGlmIChwYXNzaXZlKVxuK1x0XHRyZHNfY29ubl9wdXQocGFzc2l2ZSk7XG4gXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyZHNfY29ubl9sb2NrLCBmbGFncyk7XG4tXHRyZHNfY29ubl9jb3VudC0tO1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyZHNfY29ubl9sb2NrLCBmbGFncyk7XG4rXHQvKiBkcm9wIHRoZSBpbml0aWFsIHJlZmVyZW5jZTsgdGhlIGNvbm5lY3Rpb24gaXMgZnJlZWQgZnJvbVxuK1x0ICogcmRzX2Nvbm5fZGVzdHJveV9maW5pKCkgb25jZSBldmVyeSBob2xkZXIgaGFzIGRyb3BwZWQgdGhlaXJzXG4rXHQgKi9cbitcdHJkc19jb25uX3B1dChjb25uKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZGVzdHJveSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jXG5pbmRleCA3ODZmMzkxNjliYzE0Li43NTU2OTA1ODMzMjU5IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9pYi5jXG4rKysgYi9uZXQvcmRzL2liLmNcbkBAIC01MjUsMTAgKzUyNSw3IEBAIHN0YXRpYyB2b2lkIHJkc19pYl9zZXRfdW5sb2FkaW5nKHZvaWQpXG4gXG4gc3RhdGljIGJvb2wgcmRzX2liX2lzX3VubG9hZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwID0gXHUwMDI2Y29ubi1cdTAwM2VjX3BhdGhbMF07XG4tXG4tXHRyZXR1cm4gKHRlc3RfYml0KFJEU19ERVNUUk9ZX1BFTkRJTkcsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSB8fFxuLVx0XHRhdG9taWNfcmVhZChcdTAwMjZyZHNfaWJfdW5sb2FkaW5nKSAhPSAwKTtcbitcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZyZHNfaWJfdW5sb2FkaW5nKSAhPSAwO1xuIH1cbiBcbiB2b2lkIHJkc19pYl9leGl0KHZvaWQpXG5AQCAtNTQxLDYgKzUzOCwxNSBAQCB2b2lkIHJkc19pYl9leGl0KHZvaWQpXG4gI2VuZGlmXG4gXHRyZHNfaWJfdW5yZWdpc3Rlcl9jbGllbnQoKTtcbiBcdHJkc19pYl9kZXN0cm95X25vZGV2X2Nvbm5zKCk7XG4rXHRyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKFx1MDAyNnJkc19pYl90cmFuc3BvcnQpO1xuK1xuK1x0LyogVGVhcmluZyBkb3duIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWF5IGhhdmUgZHJvcHBlZCB0aGUgZmluYWxcbitcdCAqIHJlZmVyZW5jZSBvbiBhIGRldmljZSwgZGVmZXJyaW5nIHJkc19pYl9kZXZfZnJlZSgpIHRvIHJkc193cS5cbitcdCAqIERyYWluIGl0IGJlZm9yZSB0aGUgbW9kdWxlIGdvZXMgYXdheTsgaXQgcXVldWVzIG5vdGhpbmdcbitcdCAqIGZ1cnRoZXIgb24gcmRzX3dxLlxuK1x0ICovXG4rXHRmbHVzaF93b3JrcXVldWUocmRzX3dxKTtcbitcbiBcdHJkc19pYl9zeXNjdGxfZXhpdCgpO1xuIFx0cmRzX2liX3JlY3ZfZXhpdCgpO1xuIFx0cmRzX3RyYW5zX3VucmVnaXN0ZXIoXHUwMDI2cmRzX2liX3RyYW5zcG9ydCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9jbS5jIGIvbmV0L3Jkcy9pYl9jbS5jXG5pbmRleCA0ZmViMGVkYzM2MGM4Li4yNGU1MzhjMjUzYTdhIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9pYl9jbS5jXG4rKysgYi9uZXQvcmRzL2liX2NtLmNcbkBAIC05MjQsOCArOTI0LDE0IEBAIGludCByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLFxuIFx0XHRyZHNfaWJfY29ubl9lcnJvcihjb25uLCBcInJkbWFfYWNjZXB0IGZhaWxlZFxcblwiKTtcbiBcbiBvdXQ6XG4tXHRpZiAoY29ubilcbitcdGlmIChjb25uKSB7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZjb25uLVx1MDAzZWNfY21fbG9jayk7XG4rXHRcdC8qIFRoZSBjb25uIHN0YXlzIHJlYWNoYWJsZSB0aHJvdWdoIGNtX2lkLVx1MDAzZWNvbnRleHRcbitcdFx0ICogd2l0aG91dCBhIHJlZmVyZW5jZSBvZiBpdHMgb3duOiBjb25uZWN0aW9uIGRlc3Ryb3lcbitcdFx0ICogc2h1dHMgdGhlIGNtX2lkIGRvd24gYmVmb3JlIHRoZSBjb25uIGlzIGZyZWVkLlxuK1x0XHQgKi9cbitcdFx0cmRzX2Nvbm5fcHV0KGNvbm4pO1xuK1x0fVxuIFx0aWYgKGVycilcbiBcdFx0cmRtYV9yZWplY3QoY21faWQsIFx1MDAyNmVyciwgc2l6ZW9mKGludCksXG4gXHRcdFx0ICAgIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVEKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2xvb3AuYyBiL25ldC9yZHMvbG9vcC5jXG5pbmRleCBlNmIwNzUwYmJlZGFiLi43ZGFmOGVkMjVkNjlhIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9sb29wLmNcbisrKyBiL25ldC9yZHMvbG9vcC5jXG5AQCAtMTk1LDYgKzE5NSw4IEBAIHZvaWQgcmRzX2xvb3BfZXhpdCh2b2lkKVxuIFx0XHRXQVJOX09OKGxjLVx1MDAzZWNvbm4tXHUwMDNlY19wYXNzaXZlKTtcbiBcdFx0cmRzX2Nvbm5fZGVzdHJveShsYy1cdTAwM2Vjb25uKTtcbiBcdH1cbitcbitcdHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoXHUwMDI2cmRzX2xvb3BfdHJhbnNwb3J0KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmRzX2xvb3Bfa2lsbF9jb25ucyhzdHJ1Y3QgbmV0ICpuZXQpXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuY1xuaW5kZXggZjI1ZjI1OTI1ODZmNy4uMjllOTUwMjhlNjFlNCAxMDA2NDRcbi0tLSBhL25ldC9yZHMvbWVzc2FnZS5jXG4rKysgYi9uZXQvcmRzL21lc3NhZ2UuY1xuQEAgLTE4Miw2ICsxODIsMTggQEAgc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiBcdFx0a3JlZl9wdXQoXHUwMDI2cm0tXHUwMDNlYXRvbWljLm9wX3JkbWFfbXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9mcmVlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4re1xuK1x0LyogZ2V0IGluIHJkc19zZW5kX3F1ZXVlX3JtKCksIHJkc19zZW5kX3Byb2JlKCkgb3IgdGhlIGNvbmdlc3Rpb25cbitcdCAqIG1hcCBwYXRoIG9mIHJkc19zZW5kX3htaXQoKS4gIE1lc3NhZ2VzIHRoYXQgd2VyZSBuZXZlciBxdWV1ZWQgb25cbitcdCAqIGEgY29ubmVjdGlvbiBoYXZlIG5vIHJlZmVyZW5jZSB0byBkcm9wLlxuK1x0ICovXG4rXHRpZiAocm0tXHUwMDNlbV9pbmMuaV9jb25uKVxuK1x0XHRyZHNfY29ubl9wdXQocm0tXHUwMDNlbV9pbmMuaV9jb25uKTtcbitcbitcdGtmcmVlKHJtKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfbWVzc2FnZSxcbkBAIC0xOTIsNyArMjA0LDcgQEAgc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdGlmIChybS1cdTAwM2VhdG9taWMub3BfdW5waW5fZGVmZXJyZWQpXG4gXHRcdHJkc19hdG9taWNfb3BfdW5waW5fcGFnZShcdTAwMjZybS1cdTAwM2VhdG9taWMpO1xuIFxuLVx0a2ZyZWUocm0pO1xuK1x0cmRzX21lc3NhZ2VfZnJlZShybSk7XG4gfVxuIFxuIHZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG5AQCAtMjE3LDcgKzIyOSw3IEBAIHZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXG4tXHRcdGtmcmVlKHJtKTtcbitcdFx0cmRzX21lc3NhZ2VfZnJlZShybSk7XG4gXHR9XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19tZXNzYWdlX3B1dCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZHMuaCBiL25ldC9yZHMvcmRzLmhcbmluZGV4IDJkYjQ5NTczZGFjZDUuLjM1NzYwZGQ2YjA3N2YgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3Jkcy5oXG4rKysgYi9uZXQvcmRzL3Jkcy5oXG5AQCAtODksNyArODksNiBAQCBlbnVtIHtcbiAjZGVmaW5lIFJEU19SRUNPTk5FQ1RfUEVORElOR1x0MVxuICNkZWZpbmUgUkRTX0lOX1hNSVRcdFx0MlxuICNkZWZpbmUgUkRTX1JFQ1ZfUkVGSUxMXHRcdDNcbi0jZGVmaW5lXHRSRFNfREVTVFJPWV9QRU5ESU5HXHQ0XG4gXG4gLyogTWF4IG51bWJlciBvZiBtdWx0aXBhdGhzIHBlciBSRFMgY29ubmVjdGlvbi4gTXVzdCBiZSBhIHBvd2VyIG9mIDIgKi9cbiAjZGVmaW5lXHRSRFNfTVBBVEhfV09SS0VSU1x0OFxuQEAgLTEzOCw2ICsxMzcsMTIgQEAgc3RydWN0IHJkc19jb25uX3BhdGgge1xuIC8qIE9uZSByZHNfY29ubmVjdGlvbiBwZXIgUkRTIGFkZHJlc3MgcGFpciAqL1xuIHN0cnVjdCByZHNfY29ubmVjdGlvbiB7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0Y19oYXNoX25vZGU7XG4rXHQvKiBGcmVlIG9mIHRoZSBjb25uZWN0aW9uIG1lbW9yeSAobm90IHRoZSB0ZWFyZG93biBvZiBpdHNcbitcdCAqIHRyYW5zcG9ydCBzdGF0ZSAtIHRoYXQgc3RheXMgc3luY2hyb25vdXMgaW5cbitcdCAqIHJkc19jb25uX2Rlc3Ryb3koKSkgaXMgZGVmZXJyZWQgdW50aWwgdGhlIGxhc3QgcmVmZXJlbmNlIGlzXG4rXHQgKiBkcm9wcGVkIHZpYSByZHNfY29ubl9wdXQoKS5cbitcdCAqL1xuK1x0c3RydWN0IGtyZWZcdFx0Y19yZWZjb3VudDtcbiBcdHN0cnVjdCBpbjZfYWRkclx0XHRjX2xhZGRyO1xuIFx0c3RydWN0IGluNl9hZGRyXHRcdGNfZmFkZHI7XG4gXHRpbnRcdFx0XHRjX2Rldl9pZjsgLyogaWZpbmRleCB1c2VkIGZvciB0aGlzIGNvbm4gKi9cbkBAIC0xNDgsNiArMTUzLDEwIEBAIHN0cnVjdCByZHNfY29ubmVjdGlvbiB7XG4gXHRcdFx0XHRjX3BhZF90b18zMjoyOTtcbiBcdGludFx0XHRcdGNfbnBhdGhzO1xuIFx0Ym9vbFx0XHRcdGNfd2l0aF9zcG9ydF9pZHg7XG4rXHQvKiBTZXQgKHVuZGVyIFJDVSkgd2hlbiByZHNfY29ubl9kZXN0cm95KCkgc3RhcnRzIG9uIHRoaXMgY29ubjtcbitcdCAqIHJlYWQgdGhyb3VnaCByZHNfZGVzdHJveV9wZW5kaW5nKCkuXG4rXHQgKi9cbitcdGJvb2xcdFx0XHRjX2Rlc3Ryb3lfaW5fcHJvZztcbiBcdHN0cnVjdCByZHNfY29ubmVjdGlvblx0KmNfcGFzc2l2ZTtcbiBcdHN0cnVjdCByZHNfdHJhbnNwb3J0XHQqY190cmFucztcbiBcbkBAIC01NDQsNiArNTUzLDEyIEBAIHN0cnVjdCByZHNfdHJhbnNwb3J0IHtcbiBcdHVuc2lnbmVkIGludFx0XHR0X3ByZWZlcl9sb29wYmFjazoxLFxuIFx0XHRcdFx0dF9tcF9jYXBhYmxlOjE7XG4gXHR1bnNpZ25lZCBpbnRcdFx0dF90eXBlO1xuK1x0LyogQ29ubmVjdGlvbnMgb2YgdGhpcyB0cmFuc3BvcnQgbm90IHlldCBmcmVlZDsgZnJlZWluZyBydW5zXG4rXHQgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYVxuK1x0ICogY29ubmVjdGlvbiwgc28gdHJhbnNwb3J0IG1vZHVsZSB1bmxvYWQgaGFzIHRvIHdhaXQgZm9yIHRoaXNcbitcdCAqIHRvIHJlYWNoIHplcm8gKHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoKSkuXG4rXHQgKi9cbitcdGF0b21pY190XHRcdHRfY29ubl9jb3VudDtcbiBcbiBcdGludCAoKmxhZGRyX2NoZWNrKShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcixcbiBcdFx0XHQgICBfX3UzMiBzY29wZV9pZCk7XG5AQCAtODE5LDYgKzgzNCwxMSBAQCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdFx0dTggdG9zLCBnZnBfdCBnZnAsIGludCBkZXZfaWYpO1xuIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoKTtcbiB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcbit2b2lkIHJkc19jb25uX2dldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuK3ZvaWQgcmRzX2Nvbm5fcHV0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XG4rLyogaG93IGxvbmcgdHJhbnNwb3J0IHVubG9hZCB3YWl0cyBmb3IgaXRzIGNvbm5lY3Rpb25zIHRvIGJlIGZyZWVkICovXG4rI2RlZmluZSBSRFNfQ09OTl9GUkVFX1RJTUVPVVRfTVNcdDEwMDAwXG4rdm9pZCByZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucyk7XG4gdm9pZCByZHNfY29ubl9kcm9wKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XG4gdm9pZCByZHNfY29ubl9wYXRoX2Ryb3Aoc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoLCBib29sIGRlc3Ryb3kpO1xuIHZvaWQgcmRzX2Nvbm5fY29ubmVjdF9pZl9kb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XG5AQCAtOTk0LDcgKzEwMTQsOCBAQCB2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZik7XG4gXG4gc3RhdGljIGlubGluZSBib29sIHJkc19kZXN0cm95X3BlbmRpbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIHtcbi1cdHJldHVybiAhY2hlY2tfbmV0KHJkc19jb25uX25ldChjb25uKSkgfHxcbitcdHJldHVybiBSRUFEX09OQ0UoY29ubi1cdTAwM2VjX2Rlc3Ryb3lfaW5fcHJvZykgfHxcbitcdCAgICAgICAhY2hlY2tfbmV0KHJkc19jb25uX25ldChjb25uKSkgfHxcbiBcdCAgICAgICAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfdW5sb2FkaW5nIFx1MDAyNlx1MDAyNiBjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNldF91bmxvYWRpbmcoY29ubikpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3JlY3YuYyBiL25ldC9yZHMvcmVjdi5jXG5pbmRleCA2MjA0ZTU3N2E5MGFlLi5iMDMxYzBiNDNhZjgzIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZWN2LmNcbisrKyBiL25ldC9yZHMvcmVjdi5jXG5AQCAtNDYsNiArNDYsNyBAQCB2b2lkIHJkc19pbmNfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcbiB7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2aW5jLVx1MDAzZWlfcmVmY291bnQsIDEpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5jLVx1MDAzZWlfaXRlbSk7XG4rXHRyZHNfY29ubl9nZXQoY29ubik7XHQvKiBwdXQgaW4gcmRzX2luY19wdXQoKSAqL1xuIFx0aW5jLVx1MDAzZWlfY29ubiA9IGNvbm47XG4gXHRpbmMtXHUwMDNlaV9jb25uX3BhdGggPSBOVUxMO1xuIFx0aW5jLVx1MDAzZWlfc2FkZHIgPSAqc2FkZHI7XG5AQCAtNjEsNiArNjIsNyBAQCB2b2lkIHJkc19pbmNfcGF0aF9pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uX3BhdGggKmNwLFxuIHtcbiBcdHJlZmNvdW50X3NldChcdTAwMjZpbmMtXHUwMDNlaV9yZWZjb3VudCwgMSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbmMtXHUwMDNlaV9pdGVtKTtcbitcdHJkc19jb25uX2dldChjcC1cdTAwM2VjcF9jb25uKTtcdC8qIHB1dCBpbiByZHNfaW5jX3B1dCgpICovXG4gXHRpbmMtXHUwMDNlaV9jb25uID0gY3AtXHUwMDNlY3BfY29ubjtcbiBcdGluYy1cdTAwM2VpX2Nvbm5fcGF0aCA9IGNwO1xuIFx0aW5jLVx1MDAzZWlfc2FkZHIgPSAqc2FkZHI7XG5AQCAtODEsOSArODMsMTkgQEAgdm9pZCByZHNfaW5jX3B1dChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpXG4ge1xuIFx0cmRzZGVidWcoXCJwdXQgaW5jICVwIHJlZiAlZFxcblwiLCBpbmMsIHJlZmNvdW50X3JlYWQoXHUwMDI2aW5jLVx1MDAzZWlfcmVmY291bnQpKTtcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2aW5jLVx1MDAzZWlfcmVmY291bnQpKSB7XG4rXHRcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGluYy1cdTAwM2VpX2Nvbm47XG4rXG4gXHRcdEJVR19PTighbGlzdF9lbXB0eShcdTAwMjZpbmMtXHUwMDNlaV9pdGVtKSk7XG4gXG4tXHRcdGluYy1cdTAwM2VpX2Nvbm4tXHUwMDNlY190cmFucy1cdTAwM2VpbmNfZnJlZShpbmMpO1xuK1x0XHQvKiBpbmNfZnJlZSgpIGNhbiBmcmVlIHRoZSBtZW1vcnkgQGluYyBsaXZlcyBpbiwgc28gdGhlXG4rXHRcdCAqIGNvbm5lY3Rpb24gcmVmZXJlbmNlIGhhcyB0byBiZSBkcm9wcGVkIHRocm91Z2ggdGhlXG4rXHRcdCAqIGNvcHkgdGFrZW4gYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNlaW5jX2ZyZWUoaW5jKTtcbitcdFx0LyogZ2V0IGluIHJkc19pbmNfaW5pdCgpLCByZHNfaW5jX3BhdGhfaW5pdCgpIG9yXG4rXHRcdCAqIHJkc19yZWN2X2luY29taW5nKClcbitcdFx0ICovXG4rXHRcdHJkc19jb25uX3B1dChjb25uKTtcbiBcdH1cbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocmRzX2luY19wdXQpO1xuQEAgLTMyNSw2ICszMzcsMTMgQEAgdm9pZCByZHNfcmVjdl9pbmNvbWluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwO1xuIFxuK1x0LyogZXZlcnkgY2FsbGVyIGluaXRpYWxpemVkIEBpbmMgd2l0aCByZHNfaW5jX2luaXQoKSBvclxuK1x0ICogcmRzX2luY19wYXRoX2luaXQoKSBmaXJzdCwgc28gaV9jb25uIGFscmVhZHkgaG9sZHMgYSByZWZlcmVuY2UuXG4rXHQgKiBUYWtlIHRoZSBuZXcgb25lIGJlZm9yZSBkcm9wcGluZyB0aGUgb2xkLCBzbyB0aGF0IHJlLXBvaW50aW5nIGFuXG4rXHQgKiBpbmMgYXQgdGhlIGNvbm5lY3Rpb24gaXQgYWxyZWFkeSByZWZlcnMgdG8gY2Fubm90IGZyZWUgaXQuXG4rXHQgKi9cbitcdHJkc19jb25uX2dldChjb25uKTtcbitcdHJkc19jb25uX3B1dChpbmMtXHUwMDNlaV9jb25uKTtcbiBcdGluYy1cdTAwM2VpX2Nvbm4gPSBjb25uO1xuIFx0aW5jLVx1MDAzZWlfcnhfamlmZmllcyA9IGppZmZpZXM7XG4gXHRpZiAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSlcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxYWZhOTgxZTVjMDZkLi4wNDVlYjNjM2Y5NzcyIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbisrKyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMjkwLDYgKzI5MCw3IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0XHR9XG4gXHRcdFx0cm0tXHUwMDNlZGF0YS5vcF9hY3RpdmUgPSAxO1xuIFx0XHRcdHJtLVx1MDAzZW1faW5jLmlfY29ubl9wYXRoID0gY3A7XG4rXHRcdFx0cmRzX2Nvbm5fZ2V0KGNwLVx1MDAzZWNwX2Nvbm4pO1x0LyogcHV0IGluIHJkc19tZXNzYWdlX3B1dCgpICovXG4gXHRcdFx0cm0tXHUwMDNlbV9pbmMuaV9jb25uID0gY3AtXHUwMDNlY3BfY29ubjtcbiBcbiBcdFx0XHRjcC1cdTAwM2VjcF94bWl0X3JtID0gcm07XG5AQCAtOTQ3LDYgKzk0OCw3IEBAIHN0YXRpYyBpbnQgcmRzX3NlbmRfcXVldWVfcm0oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLFxuIFx0XHQvKiBUaGUgY29kZSBvcmRlcmluZyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IHdlJ3JlXG4gXHRcdCAgIHRyeWluZyB0byBtaW5pbWl6ZSB0aGUgdGltZSB3ZSBob2xkIGNfbG9jayAqL1xuIFx0XHRyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoXHUwMDI2cm0tXHUwMDNlbV9pbmMuaV9oZHIsIHNwb3J0LCBkcG9ydCwgMCk7XG4rXHRcdHJkc19jb25uX2dldChjb25uKTtcdC8qIHB1dCBpbiByZHNfbWVzc2FnZV9wdXQoKSAqL1xuIFx0XHRybS1cdTAwM2VtX2luYy5pX2Nvbm4gPSBjb25uO1xuIFx0XHRybS1cdTAwM2VtX2luYy5pX2Nvbm5fcGF0aCA9IGNwO1xuIFx0XHRyZHNfbWVzc2FnZV9hZGRyZWYocm0pO1xuQEAgLTExNTksMTMgKzExNjEsMTQgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuIFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgdXNpbiwgbXNnLVx1MDAzZW1zZ19uYW1lKTtcbiBcdF9fYmUxNiBkcG9ydDtcbiBcdHN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBOVUxMO1xuLVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uO1xuK1x0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gTlVMTDtcbiBcdGludCByZXQgPSAwO1xuIFx0aW50IHF1ZXVlZCA9IDAsIGFsbG9jYXRlZF9tciA9IDA7XG4gXHRpbnQgbm9uYmxvY2sgPSBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQ7XG4gXHRsb25nIHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbm9uYmxvY2spO1xuIFx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoO1xuIFx0c3RydWN0IGluNl9hZGRyIGRhZGRyO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdF9fdTMyIHNjb3BlX2lkID0gMDtcbiBcdHNpemVfdCByZG1hX3BheWxvYWRfbGVuID0gMDtcbiBcdGJvb2wgemNvcHkgPSAoKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19aRVJPQ09QWSkgXHUwMDI2XHUwMDI2XG5AQCAtMTM0MCwxMSArMTM0MywyOSBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXG4gXHRybS1cdTAwM2VtX2RhZGRyID0gZGFkZHI7XG4gXG4gXHQvKiByZHNfY29ubl9jcmVhdGUgaGFzIGEgc3BpbmxvY2sgdGhhdCBydW5zIHdpdGggSVJRIG9mZi5cbi1cdCAqIENhY2hpbmcgdGhlIGNvbm4gaW4gdGhlIHNvY2tldCBoZWxwcyBhIGxvdC4gKi9cbi1cdGlmIChycy1cdTAwM2Vyc19jb25uIFx1MDAyNlx1MDAyNiBpcHY2X2FkZHJfZXF1YWwoXHUwMDI2cnMtXHUwMDNlcnNfY29ubi1cdTAwM2VjX2ZhZGRyLCBcdTAwMjZkYWRkcikgXHUwMDI2XHUwMDI2XG4tXHQgICAgcnMtXHUwMDNlcnNfdG9zID09IHJzLVx1MDAzZXJzX2Nvbm4tXHUwMDNlY190b3MpIHtcbi1cdFx0Y29ubiA9IHJzLVx1MDAzZXJzX2Nvbm47XG4rXHQgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuXG4rXHQgKlxuK1x0ICogVGhlIGNhY2hlZCByc19jb25uIGhvbGRzIGEgY29ubmVjdGlvbiByZWZlcmVuY2U7IHRha2Ugb25lIG9mXG4rXHQgKiBvdXIgb3duIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBjYWxsIChkcm9wcGVkIG9uIGJvdGggZXhpdFxuK1x0ICogcGF0aHMpLCBzbyB0aGF0IG5laXRoZXIgYSBjb25jdXJyZW50IHNlbmRlciByZXBsYWNpbmcgdGhlXG4rXHQgKiBjYWNoZSBub3IgcmRzX2Nvbm5fZGVzdHJveSgpIGNhbiBmcmVlIHRoZSBjb25uZWN0aW9uIHVuZGVyXG4rXHQgKiB1cy4gIEEgY2FjaGVkIGNvbm5lY3Rpb24gd2hvc2UgZGVzdHJ1Y3Rpb24gaGFzIGJlZ3VuIGlzIG5vdFxuK1x0ICogcmV1c2VkOiBkcm9wcGluZyBpdCBoZXJlIGxldHMgdGhlIG5leHQgc2VuZG1zZyBsb29rIHVwIG9yXG4rXHQgKiBjcmVhdGUgYSBsaXZlIG9uZSBpbnN0ZWFkIG9mIHJldHVybmluZyAtRUFHQUlOIGZvcmV2ZXIuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJzLVx1MDAzZXJzX2xvY2ssIGZsYWdzKTtcbitcdGNvbm4gPSBycy1cdTAwM2Vyc19jb25uO1xuK1x0aWYgKGNvbm4gXHUwMDI2XHUwMDI2IGlwdjZfYWRkcl9lcXVhbChcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIsIFx1MDAyNmRhZGRyKSBcdTAwMjZcdTAwMjZcbitcdCAgICBycy1cdTAwM2Vyc190b3MgPT0gY29ubi1cdTAwM2VjX3RvcyBcdTAwMjZcdTAwMjYgIXJkc19kZXN0cm95X3BlbmRpbmcoY29ubikpIHtcbitcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xuIFx0fSBlbHNlIHtcbitcdFx0Y29ubiA9IE5VTEw7XG4rXHR9XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnJzLVx1MDAzZXJzX2xvY2ssIGZsYWdzKTtcbitcbitcdGlmICghY29ubikge1xuK1x0XHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKm9sZDtcbitcbiBcdFx0Y29ubiA9IHJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhzb2NrX25ldChzb2NrLVx1MDAzZXNrKSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZycy1cdTAwM2Vyc19ib3VuZF9hZGRyLCBcdTAwMjZkYWRkcixcbiBcdFx0XHRcdFx0XHRycy1cdTAwM2Vyc190cmFuc3BvcnQsIHJzLVx1MDAzZXJzX3RvcyxcbkBAIC0xMzUyLDkgKzEzNzMsMTcgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuIFx0XHRcdFx0XHRcdHNjb3BlX2lkKTtcbiBcdFx0aWYgKElTX0VSUihjb25uKSkge1xuIFx0XHRcdHJldCA9IFBUUl9FUlIoY29ubik7XG4rXHRcdFx0Y29ubiA9IE5VTEw7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbitcdFx0LyogaGFuZCB0aGUgY2FjaGUgaXRzIG93biByZWZlcmVuY2UgKi9cbitcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZycy1cdTAwM2Vyc19sb2NrLCBmbGFncyk7XG4rXHRcdG9sZCA9IHJzLVx1MDAzZXJzX2Nvbm47XG4gXHRcdHJzLVx1MDAzZXJzX2Nvbm4gPSBjb25uO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnJzLVx1MDAzZXJzX2xvY2ssIGZsYWdzKTtcbitcdFx0aWYgKG9sZClcbitcdFx0XHRyZHNfY29ubl9wdXQob2xkKTtcbiBcdH1cbiBcbiBcdGlmIChjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNldF9tcF9jYXBhYmxlKSB7XG5AQCAtMTQ2OSw2ICsxNDk4LDggQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuIFx0XHRrZnJlZSh2Y3QudmVjW2luZF0uaW92KTtcbiBcdGtmcmVlKHZjdC52ZWMpO1xuIFxuK1x0cmRzX2Nvbm5fcHV0KGNvbm4pO1xuK1xuIFx0cmV0dXJuIHBheWxvYWRfbGVuO1xuIFxuIG91dDpcbkBAIC0xNDc2LDYgKzE1MDcsOSBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXG4gXHRcdGtmcmVlKHZjdC52ZWNbaW5kXS5pb3YpO1xuIFx0a2ZyZWUodmN0LnZlYyk7XG4gXG4rXHRpZiAoY29ubilcbitcdFx0cmRzX2Nvbm5fcHV0KGNvbm4pO1xuK1xuIFx0LyogSWYgdGhlIHVzZXIgaW5jbHVkZWQgYSBSRE1BX01BUCBjbXNnLCB3ZSBhbGxvY2F0ZWQgYSBNUiBvbiB0aGUgZmx5LlxuIFx0ICogSWYgdGhlIHNlbmRtc2cgZ29lcyB0aHJvdWdoLCB3ZSBrZWVwIHRoZSBNUi4gSWYgaXQgZmFpbHMgd2l0aCBFQUdBSU5cbiBcdCAqIG9yIGluIGFueSBvdGhlciB3YXksIHdlIG5lZWQgdG8gZGVzdHJveSB0aGUgTVIgYWdhaW4gKi9cbkBAIC0xNTIyLDYgKzE1NTYsNyBAQCByZHNfc2VuZF9wcm9iZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AsIF9fYmUxNiBzcG9ydCxcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cm0tXHUwMDNlbV9jb25uX2l0ZW0sIFx1MDAyNmNwLVx1MDAzZWNwX3NlbmRfcXVldWUpO1xuIFx0c2V0X2JpdChSRFNfTVNHX09OX0NPTk4sIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpO1xuIFx0cmRzX21lc3NhZ2VfYWRkcmVmKHJtKTtcbitcdHJkc19jb25uX2dldChjcC1cdTAwM2VjcF9jb25uKTtcdC8qIHB1dCBpbiByZHNfbWVzc2FnZV9wdXQoKSAqL1xuIFx0cm0tXHUwMDNlbV9pbmMuaV9jb25uID0gY3AtXHUwMDNlY3BfY29ubjtcbiBcdHJtLVx1MDAzZW1faW5jLmlfY29ubl9wYXRoID0gY3A7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3AuYyBiL25ldC9yZHMvdGNwLmNcbmluZGV4IDc3NGE3MWY4OGQzNzUuLjI2ODVlZTIxYTIyZDEgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3RjcC5jXG4rKysgYi9uZXQvcmRzL3RjcC5jXG5AQCAtODA1LDYgKzgwNSw3IEBAIHN0YXRpYyB2b2lkIHJkc190Y3BfZXhpdCh2b2lkKVxuICNlbmRpZlxuIFx0dW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKFx1MDAyNnJkc190Y3BfbmV0X29wcyk7XG4gXHRyZHNfdGNwX2Rlc3Ryb3lfY29ubnMoKTtcbitcdHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoXHUwMDI2cmRzX3RjcF90cmFuc3BvcnQpO1xuIFx0cmRzX3RyYW5zX3VucmVnaXN0ZXIoXHUwMDI2cmRzX3RjcF90cmFuc3BvcnQpO1xuIFx0cmRzX3RjcF9yZWN2X2V4aXQoKTtcbiBcdGttZW1fY2FjaGVfZGVzdHJveShyZHNfdGNwX2Nvbm5fc2xhYik7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuaW5kZXggMTNmYTYwYzE5ODViYi4uMGQyY2VkODkyYThhZSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvdGNwX2xpc3Rlbi5jXG4rKysgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuQEAgLTE1Myw3ICsxNTMsNyBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKmxpc3Rlbl9zb2NrID0gcnRuLVx1MDAzZXJkc190Y3BfbGlzdGVuX3NvY2s7XG4gXHRzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jayA9IE5VTEw7XG4tXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47XG4rXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBOVUxMO1xuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4gXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICpyc190Y3AgPSBOVUxMO1xuQEAgLTIyOSw2ICsyMjksNyBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuIFxuIFx0aWYgKElTX0VSUihjb25uKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKGNvbm4pO1xuK1x0XHRjb25uID0gTlVMTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHQvKiBBbiBpbmNvbWluZyBTWU4gcmVxdWVzdCBjYW1lIGluLCBhbmQgVENQIGp1c3QgYWNjZXB0ZWQgaXQuXG5AQCAtMzQzLDYgKzM0NCw4IEBAIGludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZyc190Y3AtXHUwMDNldF9jb25uX3BhdGhfbG9jayk7XG4gXHRpZiAobmV3X3NvY2spXG4gXHRcdHNvY2tfcmVsZWFzZShuZXdfc29jayk7XG4rXHRpZiAoY29ubilcbitcdFx0cmRzX2Nvbm5fcHV0KGNvbm4pO1xuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ0bi1cdTAwM2VyZHNfdGNwX2FjY2VwdF9sb2NrKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMzLjQ4MTIwMzc4OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxOTY1ODA0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSRFMgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBrZXJuZWwgcGF0Y2ggc2VyaWVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgc3Vic3lzdGVtLiBMZXQncyBkaWcgaW4uIEl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBxdWl0ZSBhIGZldyBmaWxlcyB3aXRoaW4gYG5ldC9yZHMvYDogYGFmX3Jkcy5jYCwgYGNvbm5lY3Rpb24uY2AsIGBpYi5jYCwgYGliX2NtLmNgLCBgbG9vcC5jYCwgYG1lc3NhZ2UuY2AsIGByZHMuaGAsIGByZWN2LmNgLCBgc2VuZC5jYCwgYHRjcC5jYCwgYW5kIGB0Y3BfbGlzdGVuLmNgLiBUaGlzIHN1Z2dlc3RzIGEgcHJldHR5IHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbiBhY3Jvc3MgdGhlIGNvcmUgUkRTIGltcGxlbWVudGF0aW9uLlxuXG5UaGUga2V5IGNoYW5nZSBhcHBlYXJzIHRvIGJlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgcmVmZXJlbmNlIGNvdW50aW5nIOKAkyBga3JlZmAg4oCTIHRvIHRoZSBgc3RydWN0IHJkc19jb25uZWN0aW9uYC4gVGhleSdyZSByZXBsYWNpbmcgdGhlIG9sZCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgd2hpY2gsIGZyYW5rbHksIHdhcyBhbHdheXMgYSBiaXQgc3VzcGVjdCB3aXRoIGl0cyBhc3N1bXB0aW9ucyBhYm91dCBubyBjb25jdXJyZW50IHJlZmVyZW5jZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYXJvdW5kIGNvbm5lY3Rpb24gZGVzdHJ1Y3Rpb24uIFRoaXMgaXMgYSBjcml0aWNhbCBpbXByb3ZlbWVudCwgaWYgZG9uZSBjb3JyZWN0bHksIGFzIGl0IHNvbHZlcyBhIGZ1bmRhbWVudGFsIGNvbmN1cnJlbmN5IGlzc3VlLlxuXG5JIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXnigJl2ZSBpbXBsZW1lbnRlZCB0aGlzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHJkc19jb25uX2Rlc3Ryb3lgLCBgX19yZHNfY29ubl9jcmVhdGVgLCBgcmRzX2Nvbm5fbG9va3VwYCwgYHJkc19zZW5kbXNnYCwgYHJkc190Y3BfYWNjZXB0X29uZWAsIGByZHNfcmVjdl9pbmNvbWluZ2AsIGByZHNfbWVzc2FnZV9mcmVlYCwgYHJkc19yZWxlYXNlYCwgYW5kIHNldmVyYWwgb3RoZXJzLiBUaGlzIGlzIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGxpa2VseSB3ZXJlIG5vdCByZWZlcmVuY2UgY291bnRlZCBiZWZvcmUgdGhlIHBhdGNoIGFuZCB3aWxsIGdpdmUgYXdheSBob3cgd2VsbCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGhhcyBiZWVuIGluY29ycG9yYXRlZC5cblxuSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IHRoZSByZWZlcmVuY2UgY291bnQgaXMgaW5jcmVtZW50ZWQgYW5kIGRlY3JlbWVudGVkIGluIGVhY2ggb2YgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zLiBBcmUgdGhleSB1c2luZyB0aGUgY29ycmVjdCBga3JlZmAgZnVuY3Rpb25zPyBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIGNvZGU/IEkgbmVlZCB0byBsb29rIGZvciBtaXNzZWQgYGtyZWZfcHV0YCBjYWxscywgZG91YmxlIGRlY3JlbWVudHMsIGFuZCBpbXByb3BlciBsb2NraW5nIGFyb3VuZCB0aGUgcmVmY291bnQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFJEUyB0cmFuc3BvcnRzIHRoZW1zZWx2ZXMgKFRDUCwgUkRNQSwgZXRjLikgdG8gZW5zdXJlIHRoZSByZWZjb3VudGluZyBpcyBwcm9wZXJseSBpbnRlZ3JhdGVkIGF0IHRoYXQgbGV2ZWwuXG5cblRvIHN0YXJ0LCBsZXQncyBwdWxsIHVwIHRoZSBgbmV0L3Jkcy9LY29uZmlnYCBmaWxlIHdpdGggZ3JlcHBlciB0byByZXZpZXcgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGFuZCB0aGUgc3BlY2lmaWMgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb25zLiBUaGF0J2xsIGdpdmUgbWUgY29udGV4dCBvbiB3aGljaCB0cmFuc3BvcnRzIGFyZSBlbmFibGVkIGFuZCB3aGljaCBvbmVzIGFyZSBiZWluZyBhZmZlY3RlZC4gVGhlIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIHdpbGwgYmUgdG8gdmVyaWZ5IHRoZSBjb21wYXRpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg2MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjM3LjY3Nzc4NzU2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIxMzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9LY29uZmlnLTItXFxubmV0L3Jkcy9LY29uZmlnOjM6Y29uZmlnIFJEU1xcbm5ldC9yZHMvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJUaGUgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyBQcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy05LVxcbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcXG5uZXQvcmRzL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIEluZmluaWJhbmRcXFwiXFxuLS1cXG5uZXQvcmRzL0tjb25maWctMTYtXFxubmV0L3Jkcy9LY29uZmlnOjE3OmNvbmZpZyBSRFNfVENQXFxubmV0L3Jkcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBUQ1BcXFwiXFxuLS1cXG5uZXQvcmRzL0tjb25maWctMjQtXFxubmV0L3Jkcy9LY29uZmlnOjI1OmNvbmZpZyBSRFNfREVCVUdcXG5uZXQvcmRzL0tjb25maWctMjYtXFx0Ym9vbCBcXFwiUkRTIGRlYnVnZ2luZyBtZXNzYWdlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6MzcuNzI1MDEwMDIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2ODQzMDc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byB0aGUgUkRTIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYG5ldC9yZHMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXZlcnl0aGluZyBpbiBpdCwgZnJvbSB0aGUgdG9wIHRvIHRoZSBib3R0b20uIEknbSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBpdHMgc3RydWN0dXJlLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpdCBwcmVzZW50cy4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgcHJvdmlkZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3Mgb3ZlciBUQ1AgKFJEUykgc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQuIFRoaXMgS2NvbmZpZyBmaWxlIGRpY3RhdGVzIGhvdyBSRFMgaXMgcHJlc2VudGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhbmQsIHVsdGltYXRlbHksIGhvdyBpdCdzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEl0J3MgY3J1Y2lhbCBmb3IgY29udHJvbGxpbmcgd2hpY2ggcGFydHMgb2YgUkRTIGFyZSBjb21waWxlZC4gSSdsbCBwYXkgc3BlY2lmaWMgYXR0ZW50aW9uIHRvIGFueSBkZWZhdWx0IHZhbHVlcywgaWYgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgaW52b2x2ZWQsIGFuZCBhbnkgcmVsYXRpb24gdG8gb3RoZXIgS2NvbmZpZyBmaWxlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBvcHRpb25zLiBJIGFsc28gbmVlZCB0byBhc2NlcnRhaW4gd2hhdCB0aGlzIHRlbGxzIG1lIGFib3V0IGl0cyBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3RhY2tzIGFuZCByZWxhdGVkIGNvbXBvbmVudHMuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBjcm9zcy1yZWZlcmVuY2luZyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgc291cmNlIHRvIGdldCB0aGUgZnVsbCBzdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4OTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1NjozOS44OTM0NDM5NzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcmRzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0Y29uZmlnIFJEU1xcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXFxcIlxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHByb3RvY29sIHByb3ZpZGVzIHJlbGlhYmxlLFxcbiAgIDg6XFx0XFx0ICBzZXF1ZW5jZWQgZGVsaXZlcnkgb2YgZGF0YWdyYW1zIG92ZXIgSW5maW5pYmFuZCBvciBUQ1AuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBSRFNfUkRNQVxcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIEluZmluaWJhbmRcXFwiXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFJEUyBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xcbiAgMTM6XFx0XFx0aGVscFxcbiAgMTQ6XFx0XFx0ICBBbGxvdyBSRFMgdG8gdXNlIEluZmluaWJhbmQgYXMgYSB0cmFuc3BvcnQuXFxuICAxNTpcXHRcXHQgIFRoaXMgdHJhbnNwb3J0IHN1cHBvcnRzIFJETUEgb3BlcmF0aW9ucy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIFJEU19UQ1BcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBUQ1BcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFJEU1xcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2IHx8ICFJUFY2XFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIEFsbG93IFJEUyB0byB1c2UgVENQIGFzIGEgdHJhbnNwb3J0LlxcbiAgMjM6XFx0XFx0ICBUaGlzIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IFJETUEgb3BlcmF0aW9ucy5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIFJEU19ERUJVR1xcbiAgMjY6XFx0XFx0Ym9vbCBcXFwiUkRTIGRlYnVnZ2luZyBtZXNzYWdlc1xcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gUkRTXFxuICAyODpcXHRcXHRkZWZhdWx0IG5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0Y29uZmlnIEdDT1ZfUFJPRklMRV9SRFNcXG4gIDMxOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiBSRFNcXFwiXFxuICAzMjpcXHRcXHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIEVuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiBSRFMgZm9yIGNoZWNraW5nIHdoaWNoIGZ1bmN0aW9ucy9saW5lc1xcbiAgMzU6XFx0XFx0ICBhcmUgZXhlY3V0ZWQuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6MzkuODkzNTA0MTU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk5OTMyMjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFJEUzogQSBDbGVhciBUYXJnZXQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFJEUywgUmVkdW5kYW50IERhdGEgUHJvdG9jb2wsIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgY2FsbHMg4oCTIGBBRl9SRFNgLCBgUEZfUkRTYCwgdGhlIHdvcmtzLiBTeXprYWxsZXIncyBnb3QgdGhlIGZ1bGwgdG9vbGJveCByZWFkeSB0byBnbywgaGFuZGxpbmcgdGhlIFJEUyBzb2NrZXQgcHJpbWl0aXZlcyB3aXRoIGVhc2UuICBBbmQgc2luY2UgaXQgcnVucyBmaW5lIHdpdGhpbiBvdXIgc3RhbmRhcmQgUUVNVSBzZXR1cCwgaW5jbHVkaW5nIGxvb3BiYWNrLCBUQ1AsIGFuZCBldmVuIFJETUEgaWYgdGhlIGVudmlyb25tZW50IGlzIHNldCB1cCBwcm9wZXJseSwgd2UndmUgZ290IGEgcmVhZGlseSBleGVjdXRhYmxlIHRhcmdldC5cblxuVGhlIGp1aWN5IHBhcnQsIGFuZCB0aGUga2V5IGZvciBmdXp6aW5nLCBpcyB0aGUgY29yZSBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uOiBzZW5kaW5nLCByZWNlaXZpbmcsIGFjY2VwdGluZywgY29ubmVjdGluZywgcmVsZWFzaW5nIHRoZSBzb2NrZXRzLi4uIGFsbCB0aGF0IGdvb2Qgc3R1ZmYuICBUaGlzIGNvZGUgbWFuaXB1bGF0ZXMgdGhlIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIHdpdGggYGtyZWZgIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZGVmZXJyZWQgZnJlZWluZywgaW50cm9kdWNlcyB0aG9zZSBgY19kZXN0cm95X2luX3Byb2dgIGNoZWNrcywgYW5kIGFkZHMgcmVmY291bnRpbmcgdG8gYHJzLVx1MDAzZXJzX2Nvbm5gIGFuZCB0aGUgbWVzc2FnZXMgdGhlbXNlbHZlcyAoYHJkc19tZXNzYWdlX2ZyZWVgLCBgcmRzX2luY19wdXRgLCBgcmRzX3JlY3ZfaW5jb21pbmdgKSwgY2hhbmdpbmcgcmVmY291bnRpbmcsIGxvY2tpbmcsIHN5bmNocm9uaXphdGlvbiwgYW5kIHRoZSBvdmVyYWxsIG1lbW9yeSBsaWZlY3ljbGUgd2l0aGluIHRoZSBuZXR3b3JrIHByb3RvY29sLiBUaGF0IHNjcmVhbXMgZm9yIGZ1enppbmcuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb25maXJtZWQ6IGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYHRydWVgLiAgTm8gcXVlc3Rpb24gdGhlcmUuXG5cbk5leHQgdXAsIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1JEU2AgYW5kIGBDT05GSUdfUkRTX1RDUGAgYXJlIHRoZSBvYnZpb3VzIG9uZXMuIFRoZW4gd2UgaGF2ZSBgUkRTX1JETUFgLCB3aGljaCBkZXBlbmRzIG9uIGBJTkZJTklCQU5EYCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AuIFNvLCBSRFMgYW5kIFJEU19UQ1AgYXJlIHByaW1hcnksIGFuZCBSRFNfUkRNQSBkZXBlbmRzIG9uIG90aGVyIGNvbmZpZ3MuIFNob3VsZCB3ZSBpbmNsdWRlIGFsbCB0aHJlZSB3aGVuIGJ1aWxkaW5nIHRoZSBmdXp6IHRhcmdldHM/XG5cbk9rYXksIGxldCdzIGV4cGxvcmUgdGhvc2UgY29uZmlndXJhdGlvbnMgZGlyZWN0bHk6IGBSRFNgLCBgUkRTX1RDUGAsIGFuZCBgUkRTX1JETUFgLiBBbmQgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmaWxlcyBvciBjb25maWdzIHdlIHNob3VsZCBiZSBhd2FyZSBvZi5cblxuTGV0J3Mgc3RhcnQgd2l0aCBgbmV0L3Jkcy9NYWtlZmlsZWAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo0My44OTI4MjkyNjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcmRzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX1JEUykgKz0gcmRzLm9cXG4gICAzOlxcdHJkcy15IDo9XFx0YWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFxcXFxcXG4gICA0OlxcdFxcdFxcdFxcdHJlY3YubyBzZW5kLm8gc3RhdHMubyBzeXNjdGwubyB0aHJlYWRzLm8gdHJhbnNwb3J0Lm8gXFxcXFxcbiAgIDU6XFx0XFx0XFx0XFx0bG9vcC5vIHBhZ2UubyByZG1hLm9cXG4gICA2OlxcdFxcbiAgIDc6XFx0b2JqLSQoQ09ORklHX1JEU19SRE1BKSArPSByZHNfcmRtYS5vXFxuICAgODpcXHRyZHNfcmRtYS15IDo9XFx0cmRtYV90cmFuc3BvcnQubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRcXHRpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRcXHRpYl9zeXNjdGwubyBpYl9yZG1hLm8gaWJfZnJtci5vXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcbiAgMTM6XFx0b2JqLSQoQ09ORklHX1JEU19UQ1ApICs9IHJkc190Y3Aub1xcbiAgMTQ6XFx0cmRzX3RjcC15IDo9XFx0XFx0dGNwLm8gdGNwX2Nvbm5lY3QubyB0Y3BfbGlzdGVuLm8gdGNwX3JlY3YubyBcXFxcXFxuICAxNTpcXHRcXHRcXHRcXHR0Y3Bfc2VuZC5vIHRjcF9zdGF0cy5vXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNjZmxhZ3MtJChDT05GSUdfUkRTX0RFQlVHKVxcdDo9XFx0LURSRFNfREVCVUdcXG4gIDE4OlxcdFxcbiAgMTk6XFx0IyBmb3IgR0NPViBjb3ZlcmFnZSBwcm9maWxpbmdcXG4gIDIwOlxcdGlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfUkRTXFxuICAyMTpcXHRHQ09WX1BST0ZJTEUgOj0geVxcbiAgMjI6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6NDMuODkyODg5ODA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUzMTIyMzc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUkRTIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEkgc2VlIGEgcHJldHR5IGV4dGVuc2l2ZSBsaXN0IG9mIG1vZGlmaWVkIHN5bWJvbHM6IGByZHNfcmVsZWFzZWAsIGEgd2hvbGUgYnVuY2ggb2YgYHJkc19jb25uXypgIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gbWFuYWdlbWVudCwgYW5kIHRoZW4gZnVuY3Rpb25zIHNjYXR0ZXJlZCBhY3Jvc3MgSUIsIGxvb3AsIG1lc3NhZ2UgaGFuZGxpbmcsIHJlY2VpdmUsIHNlbmQsIGFuZCBUQ1AuXG5cbk15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gbmFycm93IGRvd24gdGhlIGZvY3VzLiBJIHdhbnQgdG8gaWRlbnRpZnkgdGhlICptb3N0KiBpbnRlcmVzdGluZyBmdW5jdGlvbnMgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBleHBvc2UgbmV3IHZ1bG5lcmFiaWxpdGllcy4gQmFzZWQgb24gdGhlIG1vZGlmaWNhdGlvbnMsIHRoZSBjb25uZWN0aW9uIG1hbmFnZW1lbnQgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHRob3NlIGRlYWxpbmcgd2l0aCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGdldHRpbmcsIHB1dHRpbmcgYW5kIGxvb2t1cCBzZWVtIGxpa2UgdGhlIG1vc3QgY3JpdGljYWwgb25lcy4gYHJkc19zZW5kbXNnYCwgYHJkc19yZWN2X2luY29taW5nYCwgYHJkc19pbmNfcHV0YCwgYHJkc19tZXNzYWdlX2ZyZWVgLCBhbmQgYHJkc190Y3BfYWNjZXB0X29uZWAgYWxzbyBzdGFuZCBvdXQsIGFzIHRoZXkgYXJlIGFsbCBhdCB0aGUgaW50ZXJmYWNlIGJvdW5kYXJ5IG9mIHRoZSB1c2VyIGFuZCBrZXJuZWwgc3BhY2UuIFNvLCBJIHNlbGVjdCBgX19yZHNfY29ubl9jcmVhdGVgLCBgcmRzX2Nvbm5fZGVzdHJveWAsIGByZHNfY29ubl9kZXN0cm95X2ZpbmlgLCBgcmRzX2Nvbm5fcHV0YCwgYHJkc19jb25uX2dldGAsIGByZHNfY29ubl9sb29rdXBgLCBgcmRzX3NlbmRtc2dgLCBgcmRzX3JlY3ZfaW5jb21pbmdgLCBgcmRzX2luY19wdXRgLCBgcmRzX21lc3NhZ2VfZnJlZWAsIGFuZCBgcmRzX3RjcF9hY2NlcHRfb25lYC5cblxuSSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgdG8gdGhlIFJEUyBzdWJzeXN0ZW0gYW5kIGFyZSBkaXJlY3RseSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gVGhleSBhbGwgc2VlbSB0byBmaXQgdGhlIGJpbGwuXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoaXMgcGF0Y2ggbGlrZWx5IGludHJvZHVjZXMgY2hhbmdlcyByZWxhdGVkIHRvIGNvcmUgUkRTIGZ1bmN0aW9uYWxpdHksIGFsb25nIHdpdGggaXRzIFRDUCBhbmQgUkRNQSBpbXBsZW1lbnRhdGlvbnMuIFNvIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkIHdpdGggYFJEU2AsIGBSRFNfVENQYCwgYW5kIGBSRFNfUkRNQWAuIEdpdmVuIHRoYXQgYFJEU2AgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBSRFNfUkRNQWAgZGVwZW5kcyBvbiBgSU5GSU5JQkFORGAsIEknbGwgYWxzbyBlbnN1cmUgdGhlc2UgYXJlIGVuYWJsZWQsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cbk9rYXksIGxldCdzIGZvcm11bGF0ZSB0aGUgcmVhc29uaW5nIGNsZWFybHkuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCByZWZlcmVuY2UgY291bnRpbmcgb2YgYHN0cnVjdCByZHNfY29ubmVjdGlvbmAgd2l0aCBga3JlZmAsIGFuZCBpdCByZW9yZ2FuaXplcyBjb25uZWN0aW9uIGRlc3RydWN0aW9uIGludG8gYSBxdWllc2NpbmcgYW5kIGZyZWVpbmcgcGhhc2UuIEVzc2VudGlhbGx5LCBpdCdzIGEgZGVlcCBkaXZlIGludG8gY29ubmVjdGlvbiBsaWZlY3ljbGUgbWFuYWdlbWVudCwgaW5jbHVkaW5nIGNvcmUgc3luY2hyb25pemF0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIFJEUyBwcm90b2NvbC4gU2luY2UgUkRTIGlzIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBzb2NrZXQgb3BlcmF0aW9ucywgZmxhd3MgaGVyZSBjb3VsZCBoYXZlIHNlcmlvdXMgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBUaGUgY2hhbmdlcyB0b3VjaCBjcml0aWNhbCBhcmVhcyBsaWtlIHNlbmQsIHJlY2VpdmUsIGFuZCBtZXNzYWdlIGhhbmRsaW5nLCBhcyB3ZWxsIGFzIHRyYW5zcG9ydC1zcGVjaWZpYyBoYW5kbGVycyBpbiBsb29wLCBUQ1AsIGFuZCBJQi4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBhbGwgYXJlYXMgb2YgbmV0d29ya2luZyBhcmUgY29tcGxleCBhbmQgcHJvbmUgdG8gZXJyb3JzLlxuXG5UaGVyZWZvcmUsIFdvcnRoRnV6emluZz10cnVlLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3OTgsIk91dHB1dFRva2VucyI6MjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6NTEuNDI0MTE1ODY5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzczMTY2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1RDUFwiLFxuICAgIFwiUkRTX1JETUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3Jkc19jb25uX2NyZWF0ZVwiLFxuICAgIFwicmRzX2Nvbm5fZGVzdHJveVwiLFxuICAgIFwicmRzX2Nvbm5fZGVzdHJveV9maW5pXCIsXG4gICAgXCJyZHNfY29ubl9nZXRcIixcbiAgICBcInJkc19jb25uX3B1dFwiLFxuICAgIFwicmRzX2Nvbm5fbG9va3VwXCIsXG4gICAgXCJyZHNfc2VuZG1zZ1wiLFxuICAgIFwicmRzX3JlY3ZfaW5jb21pbmdcIixcbiAgICBcInJkc19pbmNfcHV0XCIsXG4gICAgXCJyZHNfbWVzc2FnZV9mcmVlXCIsXG4gICAgXCJyZHNfdGNwX2FjY2VwdF9vbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyAoa3JlZikgdG8gc3RydWN0IHJkc19jb25uZWN0aW9uIChjX3JlZmNvdW50KSB0byBwcm9wZXJseSBtYW5hZ2UgY29ubmVjdGlvbiBsaWZldGltZXMgYW5kIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucy4gSXQgcmVmYWN0b3JzIGNvbm5lY3Rpb24gdGVhcmRvd24gaW50byBzeW5jaHJvbm91cyBxdWllc2NlIChyZHNfY29ubl9wYXRoX3F1aWVzY2UsIHJkc19jb25uX2Rlc3Ryb3kpIGFuZCBhc3luY2hyb25vdXMgZGVzdHJ1Y3Rpb24gKHJkc19jb25uX2Rlc3Ryb3lfZmluaSksIGFuZCB1cGRhdGVzIHJlZmVyZW5jZSB0cmFja2luZyBhY3Jvc3Mgc29ja2V0IHJlbGVhc2UsIG1lc3NhZ2UgcXVldWVzLCByZWN2L3NlbmQgcGF0aHMsIGFuZCB0cmFuc3BvcnRzIChUQ1AsIGxvb3AsIElCKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgbG9naWMsIHN5bmNocm9uaXphdGlvbiwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGluIG5ldC9yZHMsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1RDUFwiLFxuICAgIFwiUkRTX1JETUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3Jkc19jb25uX2NyZWF0ZVwiLFxuICAgIFwicmRzX2Nvbm5fZGVzdHJveVwiLFxuICAgIFwicmRzX2Nvbm5fZGVzdHJveV9maW5pXCIsXG4gICAgXCJyZHNfY29ubl9nZXRcIixcbiAgICBcInJkc19jb25uX3B1dFwiLFxuICAgIFwicmRzX2Nvbm5fbG9va3VwXCIsXG4gICAgXCJyZHNfc2VuZG1zZ1wiLFxuICAgIFwicmRzX3JlY3ZfaW5jb21pbmdcIixcbiAgICBcInJkc19pbmNfcHV0XCIsXG4gICAgXCJyZHNfbWVzc2FnZV9mcmVlXCIsXG4gICAgXCJyZHNfdGNwX2FjY2VwdF9vbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyAoa3JlZikgdG8gc3RydWN0IHJkc19jb25uZWN0aW9uIChjX3JlZmNvdW50KSB0byBwcm9wZXJseSBtYW5hZ2UgY29ubmVjdGlvbiBsaWZldGltZXMgYW5kIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucy4gSXQgcmVmYWN0b3JzIGNvbm5lY3Rpb24gdGVhcmRvd24gaW50byBzeW5jaHJvbm91cyBxdWllc2NlIChyZHNfY29ubl9wYXRoX3F1aWVzY2UsIHJkc19jb25uX2Rlc3Ryb3kpIGFuZCBhc3luY2hyb25vdXMgZGVzdHJ1Y3Rpb24gKHJkc19jb25uX2Rlc3Ryb3lfZmluaSksIGFuZCB1cGRhdGVzIHJlZmVyZW5jZSB0cmFja2luZyBhY3Jvc3Mgc29ja2V0IHJlbGVhc2UsIG1lc3NhZ2UgcXVldWVzLCByZWN2L3NlbmQgcGF0aHMsIGFuZCB0cmFuc3BvcnRzIChUQ1AsIGxvb3AsIElCKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgbG9naWMsIHN5bmNocm9uaXphdGlvbiwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGluIG5ldC9yZHMsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo1MS41MDE0NDAxMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjk3OTQ2MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6NTEuNTAxOTczMTI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUyOTc0MDg3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSBvZiBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBhY3Jvc3MgdGhlIFJEUyBzdWJzeXN0ZW0gKGluY2x1ZGluZyBUQ1AsIElCLCBhbmQgbG9vcGJhY2sgdHJhbnNwb3J0cykgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgbW9kdWxlLXVubG9hZCByYWNlcy5cXG5cXG4tIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHJlZmNvdW50IGltYmFsYW5jZSwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBkZWFkbG9jayBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLCBTTFVCIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuXFxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gaW5mby1sZWFrIHJpc2spLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgc2l6aW5nIG9yIGJvdW5kcyBjaGVja2luZywgYW5kIGBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb25gIG9iamVjdHMgY29udGludWUgdG8gYmUgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoZnVsbHkgemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAwMTVlMTg2ZTU0ZTM1OTNkZjZmZmEwMDczMWFlYTA5YTkxOGFkMjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE1OjU2OjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9hZl9yZHMuYyBiL25ldC9yZHMvYWZfcmRzLmNcbmluZGV4IGQ1ZGVmZTkxNzJlMzYuLjBlYWE1Yjk3NjU3MjQgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2FmX3Jkcy5jXG4rKysgYi9uZXQvcmRzL2FmX3Jkcy5jXG5AQCAtODAsNiArODAsMTQgQEAgc3RhdGljIGludCByZHNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0cmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIE5VTEwpO1xuIFx0cmRzX25vdGlmeV9tc2dfemNvcHlfcHVyZ2UoXHUwMDI2cnMtXHUwMDNlcnNfemNvb2tpZV9xdWV1ZSk7XG4gXG4rXHQvKiBkcm9wIHRoZSBjYWNoZWQgY29ubmVjdGlvbiByZWZlcmVuY2U7IG5vIHNlbmRtc2cgY2FuIHJhY2VcbitcdCAqIHdpdGggdXMgaGVyZSwgdGhlIHNvY2tldCBpcyBnb2luZyBhd2F5XG4rXHQgKi9cbitcdGlmIChycy1cdTAwM2Vyc19jb25uKSB7XG4rXHRcdHJkc19jb25uX3B1dChycy1cdTAwM2Vyc19jb25uKTtcbitcdFx0cnMtXHUwMDNlcnNfY29ubiA9IE5VTEw7XG4rXHR9XG4rXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2cmRzX3NvY2tfbG9jayk7XG4gXHRsaXN0X2RlbF9pbml0KFx1MDAyNnJzLVx1MDAzZXJzX2l0ZW0pO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cmRzX3NvY2tfbG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xuaW5kZXggYjZjNGJlYjUwZWFmMC4uMmM4Y2E1NGE5MWNhOCAxMDA2NDRcbi0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jXG4rKysgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xuQEAgLTQ3LDcgKzQ3LDggQEBcbiBcbiAvKiBjb252ZXJ0aW5nIHRoaXMgdG8gUkNVIGlzIGEgY2hvcmUgZm9yIGFub3RoZXIgZGF5Li4gKi9cbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25uX2xvY2spO1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19jb25uX2NvdW50O1xuKy8qIHdva2VuIHdoZW5ldmVyIGEgdHJhbnNwb3J0J3MgdF9jb25uX2NvdW50IGRyb3BzIHRvIHplcm8gKi9cbitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2Nvbm5fZnJlZWRfd2FpdHEpO1xuIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCByZHNfY29ubl9oYXNoW1JEU19DT05ORUNUSU9OX0hBU0hfRU5UUklFU107XG4gc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfY29ubl9zbGFiO1xuIFxuQEAgLTc5LDcgKzgwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqcmRzX2Nvbm5fYnVja2V0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsXG4gXHRcdHZhciB8PSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfIyNzdWZmaXg7XHRcXFxuIH0gd2hpbGUgKDApXG4gXG4tLyogcmN1IHJlYWQgbG9jayBtdXN0IGJlIGhlbGQgb3IgdGhlIGNvbm5lY3Rpb24gc3BpbmxvY2sgKi9cbisvKiByY3UgcmVhZCBsb2NrIG11c3QgYmUgaGVsZCBvciB0aGUgY29ubmVjdGlvbiBzcGlubG9jay5cbisgKiBPbiBzdWNjZXNzIGEgcmVmZXJlbmNlIGlzIHRha2VuIG9uIHRoZSByZXR1cm5lZCBjb25uZWN0aW9uOyB0aGVcbisgKiBjYWxsZXIgbXVzdCBkcm9wIGl0IHdpdGggcmRzX2Nvbm5fcHV0KCkuXG4rICovXG4gc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsXG4gXHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsXG5AQCAtOTYsNiArMTAwLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdCAgICBjb25uLVx1MDAzZWNfdG9zID09IHRvcyBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIG5ldCA9PSByZHNfY29ubl9uZXQoY29ubikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBjb25uLVx1MDAzZWNfZGV2X2lmID09IGRldl9pZikge1xuK1x0XHRcdC8qIEFuIGVudHJ5IHdob3NlIHJlZmNvdW50IGFscmVhZHkgZHJvcHBlZCB0b1xuK1x0XHRcdCAqIHplcm8gaGFzIGJlZW4gdW5oYXNoZWQgYW5kIGlzIGFib3V0IHRvIGJlXG4rXHRcdFx0ICogZnJlZWQ7IGFuIFJDVSB0cmF2ZXJzYWwgbWF5IHN0aWxsIGNvbWVcbitcdFx0XHQgKiBhY3Jvc3MgaXQuICBUcmVhdCBpdCBhcyBhYnNlbnQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZjb25uLVx1MDAzZWNfcmVmY291bnQpKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmV0ID0gY29ubjtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTE5Nyw3ICsyMDgsMTQgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqX19yZHNfY29ubl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHQgKiBXZSBuZWVkIGEgc2Vjb25kIGNvbm5lY3Rpb24gb2JqZWN0IGludG8gd2hpY2ggd2VcbiBcdFx0ICogY2FuIHN0aWNrIHRoZSBvdGhlciBRUC4gKi9cbiBcdFx0cGFyZW50ID0gY29ubjtcbitcdFx0LyogVGhlIGNfcGFzc2l2ZSBwb2ludGVyIGhvbGRzIGEgcmVmZXJlbmNlIHdoaWNoIGlzIG9ubHlcbitcdFx0ICogZHJvcHBlZCBvbmUgc3luY2hyb25pemVfcmN1KCkgYWZ0ZXIgdGhlIHBvaW50ZXIgaXNcbitcdFx0ICogY2xlYXJlZCwgc28gd2l0aGluIHRoaXMgUkNVIHNlY3Rpb24gYSBmZXRjaGVkIHBvaW50ZXJcbitcdFx0ICogaXMgYWx3YXlzIHNhZmUgdG8gdGFrZSBhIHJlZmVyZW5jZSBvbi5cbitcdFx0ICovXG4gXHRcdGNvbm4gPSBwYXJlbnQtXHUwMDNlY19wYXNzaXZlO1xuK1x0XHRpZiAoY29ubilcbitcdFx0XHRyZHNfY29ubl9nZXQoY29ubik7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChjb25uKVxuQEAgLTIxNSw2ICsyMzMsNyBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0a3JlZl9pbml0KFx1MDAyNmNvbm4tXHUwMDNlY19yZWZjb3VudCk7XG4gXHRJTklUX0hMSVNUX05PREUoXHUwMDI2Y29ubi1cdTAwM2VjX2hhc2hfbm9kZSk7XG4gXHRjb25uLVx1MDAzZWNfbGFkZHIgPSAqbGFkZHI7XG4gXHRjb25uLVx1MDAzZWNfaXN2NiA9ICFpcHY2X2FkZHJfdjRtYXBwZWQobGFkZHIpO1xuQEAgLTI4Miw4ICszMDEsOSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgIGlzX291dGdvaW5nKTtcbiBcdFx0Y29ubi1cdTAwM2VjX3BhdGhbaV0uY3BfaW5kZXggPSBpO1xuIFx0XHRjb25uLVx1MDAzZWNfcGF0aFtpXS5jcF93cSA9XG4tXHRcdFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCJrcmRzX2NwX3dxIyVsdS8lZFwiLCAwLFxuLVx0XHRcdFx0XHRcdHJkc19jb25uX2NvdW50LCBpKTtcbitcdFx0XHRhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcImtyZHNfY3Bfd3EjJWQvJWRcIiwgMCxcbitcdFx0XHRcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZ0cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpLFxuK1x0XHRcdFx0XHRcdGkpO1xuIFx0XHRpZiAoIWNvbm4tXHUwMDNlY19wYXRoW2ldLmNwX3dxKVxuIFx0XHRcdGNvbm4tXHUwMDNlY19wYXRoW2ldLmNwX3dxID0gcmRzX3dxO1xuIFx0fVxuQEAgLTMxNSwxNSArMzM1LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJkc19jb25uX2xvY2ssIGZsYWdzKTtcbiBcdGlmIChwYXJlbnQpIHtcbiBcdFx0LyogQ3JlYXRpbmcgcGFzc2l2ZSBjb25uICovXG4tXHRcdGlmIChwYXJlbnQtXHUwMDNlY19wYXNzaXZlKSB7XG4rXHRcdGlmIChSRUFEX09OQ0UocGFyZW50LVx1MDAzZWNfZGVzdHJveV9pbl9wcm9nKSkge1xuK1x0XHRcdC8qIFRoZSBwYXJlbnQncyBkZXN0cm95IGhhcyBiZWd1biAoaXQgc2V0cyB0aGVcbitcdFx0XHQgKiBmbGFnIGFuZCBzbmF0Y2hlcyBjX3Bhc3NpdmUgdW5kZXIgdGhpc1xuK1x0XHRcdCAqIGxvY2spOyBkbyBub3QgaW5zdGFsbCBhIG5ldyBwYXNzaXZlIGNvbm5cbitcdFx0XHQgKiB0aGF0IG5vdGhpbmcgd291bGQgZXZlciBkZXN0cm95LlxuK1x0XHRcdCAqL1xuK1x0XHRcdHRyYW5zLVx1MDAzZWNvbm5fZnJlZShjb25uLVx1MDAzZWNfcGF0aFswXS5jcF90cmFuc3BvcnRfZGF0YSk7XG4rXHRcdFx0ZnJlZV9jcCA9IGNvbm4tXHUwMDNlY19wYXRoO1xuK1x0XHRcdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcbitcdFx0XHRjb25uID0gRVJSX1BUUigtRU5FVERPV04pO1xuK1x0XHR9IGVsc2UgaWYgKHBhcmVudC1cdTAwM2VjX3Bhc3NpdmUpIHtcbitcdFx0XHRyZHNfY29ubl9nZXQocGFyZW50LVx1MDAzZWNfcGFzc2l2ZSk7XG4gXHRcdFx0dHJhbnMtXHUwMDNlY29ubl9mcmVlKGNvbm4tXHUwMDNlY19wYXRoWzBdLmNwX3RyYW5zcG9ydF9kYXRhKTtcbiBcdFx0XHRmcmVlX2NwID0gY29ubi1cdTAwM2VjX3BhdGg7XG4gXHRcdFx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xuIFx0XHRcdGNvbm4gPSBwYXJlbnQtXHUwMDNlY19wYXNzaXZlO1xuIFx0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIFRoZSBpbml0aWFsIHJlZmVyZW5jZSBiZWxvbmdzIHRvIHdob2V2ZXJcbitcdFx0XHQgKiBkZXN0cm95cyB0aGUgY29ubiAodGhlIHRyYW5zcG9ydCdzIGNvbm5cbitcdFx0XHQgKiBsaXN0cywgYXMgZm9yIGFueSBvdGhlciBjb25uKS4gIFRha2Ugb25lXG4rXHRcdFx0ICogZm9yIHRoZSBjX3Bhc3NpdmUgcG9pbnRlciAtIGRyb3BwZWQgd2hlblxuK1x0XHRcdCAqIHRoZSBwYXJlbnQgaXMgZGVzdHJveWVkIC0gYW5kIG9uZSBmb3Igb3VyXG4rXHRcdFx0ICogY2FsbGVyLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJkc19jb25uX2dldChjb25uKTtcdC8qIGNfcGFzc2l2ZSAqL1xuK1x0XHRcdHJkc19jb25uX2dldChjb25uKTtcdC8qIGNhbGxlciAqL1xuIFx0XHRcdHBhcmVudC1cdTAwM2VjX3Bhc3NpdmUgPSBjb25uO1xuIFx0XHRcdHJkc19jb25nX2FkZF9jb25uKGNvbm4pO1xuLVx0XHRcdHJkc19jb25uX2NvdW50Kys7XG4rXHRcdFx0YXRvbWljX2luYyhcdTAwMjZjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNldF9jb25uX2NvdW50KTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LyogQ3JlYXRpbmcgbm9ybWFsIGNvbm4gKi9cbkBAIC0zNTAsMTUgKzM5MCwyMSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0Y29ubi1cdTAwM2VjX215X2dlbl9udW0gPSByZHNfZ2VuX251bTtcbiBcdFx0XHRjb25uLVx1MDAzZWNfcGVlcl9nZW5fbnVtID0gMDtcbitcdFx0XHQvKiB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyXG4rXHRcdFx0ICogZGVzdHJveXMgdGhlIGNvbm47IHRha2Ugb25lIGZvciBvdXIgY2FsbGVyXG4rXHRcdFx0ICovXG4rXHRcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xuIFx0XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZjb25uLVx1MDAzZWNfaGFzaF9ub2RlLCBoZWFkKTtcbiBcdFx0XHRyZHNfY29uZ19hZGRfY29ubihjb25uKTtcbi1cdFx0XHRyZHNfY29ubl9jb3VudCsrO1xuK1x0XHRcdGF0b21pY19pbmMoXHUwMDI2Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfY29ubl9jb3VudCk7XG4gXHRcdH1cbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gb3V0OlxuK1x0aWYgKHBhcmVudClcbitcdFx0cmRzX2Nvbm5fcHV0KHBhcmVudCk7XG4gXHRpZiAoZnJlZV9jcCkge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGF0aHM7IGkrKylcbiBcdFx0XHRpZiAoZnJlZV9jcFtpXS5jcF93cSAhPSByZHNfd3EpXG5AQCAtNTE1LDEwICs1NjEsMTIgQEAgdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRcdGNvbm4tXHUwMDNlY190cmFucy1cdTAwM2Vjb25uX3Nsb3RzX2F2YWlsYWJsZShjb25uLCBmYWxzZSk7XG4gfVxuIFxuLS8qIGRlc3Ryb3kgYSBzaW5nbGUgcmRzX2Nvbm5fcGF0aC4gcmRzX2Nvbm5fZGVzdHJveSgpIGl0ZXJhdGVzIG92ZXJcbi0gKiBhbGwgcGF0aHMgdXNpbmcgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KClcbisvKiBxdWllc2NlIGEgc2luZ2xlIHJkc19jb25uX3BhdGg6IHNodXQgaXQgZG93biBhbmQgdGVhciBkb3duIGFueVxuKyAqIHF1ZXVlZCBtZXNzYWdlcy4gIHJkc19jb25uX2Rlc3Ryb3koKSBpdGVyYXRlcyBvdmVyIGFsbCBwYXRocyB1c2luZ1xuKyAqIHJkc19jb25uX3BhdGhfcXVpZXNjZSgpOyB0aGUgdHJhbnNwb3J0IHN0YXRlIGFuZCB0aGUgd29ya3F1ZXVlIGFyZVxuKyAqIGZyZWVkIGxhdGVyLCBmcm9tIHJkc19jb25uX3BhdGhfZnJlZSgpLlxuICAqL1xuLXN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4rc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9xdWllc2NlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiB7XG4gXHRzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqcnRtcDtcbiBcbkBAIC01NDcsNiArNTk1LDE2IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRXQVJOX09OKGRlbGF5ZWRfd29ya19wZW5kaW5nKFx1MDAyNmNwLVx1MDAzZWNwX3JlY3ZfdykpO1xuIFx0V0FSTl9PTihkZWxheWVkX3dvcmtfcGVuZGluZyhcdTAwMjZjcC1cdTAwM2VjcF9jb25uX3cpKTtcbiBcdFdBUk5fT04od29ya19wZW5kaW5nKFx1MDAyNmNwLVx1MDAzZWNwX2Rvd25fdykpO1xuK31cbitcbisvKiBmcmVlIGEgcXVpZXNjZWQgcmRzX2Nvbm5fcGF0aCdzIHRyYW5zcG9ydCBzdGF0ZSBhbmQgd29ya3F1ZXVlOyBydW5zXG4rICogZnJvbSByZHNfY29ubl9kZXN0cm95X2ZpbmkoKSBvbmNlIHRoZSBsYXN0IGNvbm5lY3Rpb24gcmVmZXJlbmNlIGlzXG4rICogZHJvcHBlZC5cbisgKi9cbitzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2ZyZWUoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuK3tcbitcdGlmICghY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGEpXG4rXHRcdHJldHVybjtcbiBcbiBcdGlmIChjcC1cdTAwM2VjcF93cSAhPSByZHNfd3EpIHtcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoY3AtXHUwMDNlY3Bfd3EpO1xuQEAgLTU1NiwxNyArNjE0LDc0IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRjcC1cdTAwM2VjcF9jb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNlY29ubl9mcmVlKGNwLVx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhKTtcbiB9XG4gXG4rLyogRnJlZSBhIGNvbm5lY3Rpb24uICBUaGlzIHJ1bnMgZnJvbSByZHNfY29ubl9wdXQoKSB3aGVuIHRoZSBsYXN0XG4rICogcmVmZXJlbmNlIGlzIGRyb3BwZWQsIGFmdGVyIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgdGhlXG4rICogY29ubmVjdGlvbiBhbmQgZHJvcHBlZCB0aGUgaW5pdGlhbCByZWZlcmVuY2UuXG4rICovXG4rc3RhdGljIHZvaWQgcmRzX2Nvbm5fZGVzdHJveV9maW5pKHN0cnVjdCBrcmVmICprcmVmKVxuK3tcbitcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sXG4rXHRcdFx0XHRcdFx0ICAgY19yZWZjb3VudCk7XG4rXHRpbnQgbnBhdGhzID0gKGNvbm4tXHUwMDNlY190cmFucy1cdTAwM2V0X21wX2NhcGFibGUgPyBSRFNfTVBBVEhfV09SS0VSUyA6IDEpO1xuK1x0c3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zID0gY29ubi1cdTAwM2VjX3RyYW5zO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGF0aHM7IGkrKylcbitcdFx0cmRzX2Nvbm5fcGF0aF9mcmVlKFx1MDAyNmNvbm4tXHUwMDNlY19wYXRoW2ldKTtcbitcbitcdGtmcmVlKGNvbm4tXHUwMDNlY19wYXRoKTtcbitcdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcbitcbitcdC8qIG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyB0aGUgdHJhbnNwb3J0IG1vZHVsZSBvd25zIGhhcyBiZWVuXG4rXHQgKiBmcmVlZCBhYm92ZSBtYXkgaXRzIHVubG9hZCBwcm9jZWVkXG4rXHQgKi9cbitcdGlmICghYXRvbWljX2RlY19yZXR1cm4oXHUwMDI2dHJhbnMtXHUwMDNldF9jb25uX2NvdW50KSlcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2cmRzX2Nvbm5fZnJlZWRfd2FpdHEpO1xuK31cbitcbisvKiBXYWl0IGZvciBhbGwgb2YgQHRyYW5zJ3MgY29ubmVjdGlvbnMgdG8gYmUgZnJlZWQ7IHRoZSBmcmVlIHJ1bnNcbisgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYSBjb25uZWN0aW9uLlxuKyAqIENhbGxlZCBvbiB0cmFuc3BvcnQgbW9kdWxlIHVubG9hZCwgYWZ0ZXIgdGhlIHRyYW5zcG9ydCBkZXN0cm95ZWRcbisgKiBhbGwgb2YgaXRzIGNvbm5lY3Rpb25zOiBhbnl0aGluZyBzdGlsbCBob2xkaW5nIGEgY29ubmVjdGlvblxuKyAqIHJlZmVyZW5jZSBhdCB0aGF0IHBvaW50IGlzIGEgc2hvcnQtbGl2ZWQgbG9va3VwLXN0eWxlIGhvbGRlciwgc29cbisgKiBhIGJvdW5kZWQgd2FpdCBzdWZmaWNlcyAtIGJ1dCB3YXJuIGlmIGl0IGV4cGlyZXMsIHNpbmNlIHRoZSBmcmVlc1xuKyAqIHRoYXQgZm9sbG93IHRoZSB1bmxvYWQgd2lsbCB0aGVuIHRvdWNoIGZyZWVkIG1vZHVsZSB0ZXh0LlxuKyAqL1xuK3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpXG4re1xuK1x0aWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQocmRzX2Nvbm5fZnJlZWRfd2FpdHEsXG4rXHRcdFx0XHQhYXRvbWljX3JlYWQoXHUwMDI2dHJhbnMtXHUwMDNldF9jb25uX2NvdW50KSxcbitcdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoUkRTX0NPTk5fRlJFRV9USU1FT1VUX01TKSkpXG4rXHRcdFdBUk4oMSwgXCJSRFMvJXM6ICVkIGNvbm5lY3Rpb24ocykgbm90IGZyZWVkXFxuXCIsXG4rXHRcdCAgICAgdHJhbnMtXHUwMDNldF9uYW1lLCBhdG9taWNfcmVhZChcdTAwMjZ0cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZCk7XG4rXG4rdm9pZCByZHNfY29ubl9nZXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuK3tcbitcdGtyZWZfZ2V0KFx1MDAyNmNvbm4tXHUwMDNlY19yZWZjb3VudCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2dldCk7XG4rXG4rdm9pZCByZHNfY29ubl9wdXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuK3tcbitcdGtyZWZfcHV0KFx1MDAyNmNvbm4tXHUwMDNlY19yZWZjb3VudCwgcmRzX2Nvbm5fZGVzdHJveV9maW5pKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcHV0KTtcbitcbiAvKlxuICAqIFN0b3AgYW5kIGZyZWUgYSBjb25uZWN0aW9uLlxuICAqXG4tICogVGhpcyBjYW4gb25seSBiZSB1c2VkIGluIHZlcnkgbGltaXRlZCBjaXJjdW1zdGFuY2VzLiAgSXQgYXNzdW1lcyB0aGF0IG9uY2Vcbi0gKiB0aGUgY29ubiBoYXMgYmVlbiBzaHV0ZG93biB0aGF0IG5vIG9uZSBlbHNlIGlzIHJlZmVyZW5jaW5nIHRoZSBjb25uZWN0aW9uLlxuLSAqIFdlIGNhbiBvbmx5IGVuc3VyZSB0aGlzIGluIHRoZSBybW1vZCBwYXRoIGluIHRoZSBjdXJyZW50IGNvZGUuXG4rICogUXVpZXNjZXMgdGhlIGNvbm5lY3Rpb24gc3luY2hyb25vdXNseSAod29ya2VycyBjYW5jZWxsZWQsIHRyYW5zcG9ydFxuKyAqIGNvbm5lY3Rpb25zIHNodXQgZG93biwgcXVldWVkIG1lc3NhZ2VzIGRyb3BwZWQpIGFuZCBkcm9wcyB0aGVcbisgKiBpbml0aWFsIHJlZmVyZW5jZS4gIFRoZSBtZW1vcnkgLSBpbmNsdWRpbmcgdGhlIHRyYW5zcG9ydCdzXG4rICogcGVyLWNvbm5lY3Rpb24gc3RhdGUgYW5kIHRoZSBwYXRoIHdvcmtxdWV1ZXMgLSBpcyBmcmVlZCBvbmNlIHRoZVxuKyAqIGxhc3QgcmRzX2Nvbm5fcHV0KCkgcnVucywgd2hpY2ggbWF5IGJlIGFmdGVyIHRoaXMgcmV0dXJucy5cbiAgKi9cbiB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgaTtcbitcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcGFzc2l2ZTtcbiBcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcDtcbiBcdGludCBucGF0aHMgPSAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7XG4gXG5AQCAtNTc0LDE2ICs2ODksNDYgQEAgdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbiBcdFx0IFwiJXBJNFxcblwiLCBjb25uLCBcdTAwMjZjb25uLVx1MDAzZWNfbGFkZHIsXG4gXHRcdCBcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIpO1xuIFxuLVx0LyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi9cbitcdC8qIE1ha2UgcmRzX2Rlc3Ryb3lfcGVuZGluZygpIHRydWUgZm9yIHRoaXMgY29ubi4gIFRvZ2V0aGVyIHdpdGhcbitcdCAqIHRoZSBzeW5jaHJvbml6ZV9yY3UoKSBiZWxvdyB0aGlzIHN0b3BzIHRoZSB3b3JrLXJlcXVldWVpbmdcbitcdCAqIHNpdGVzICh3aGljaCBhbGwgdGVzdCByZHNfZGVzdHJveV9wZW5kaW5nKCkgdW5kZXJcbitcdCAqIHJjdV9yZWFkX2xvY2soKSkgZnJvbSBxdWV1ZWluZyBuZXcgd29yayBvbiB0aGUgcGF0aFxuK1x0ICogd29ya3F1ZXVlcyBvbmNlIHdlIHN0YXJ0IGNhbmNlbGxpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlbS5cbitcdCAqXG4rXHQgKiBOb3cgdGhhdCB0aGUgdHJhbnNwb3J0IHN0YXRlIHN0YXlzIGRpc2NvdmVyYWJsZSAoZS5nLiBvbiB0aGVcbitcdCAqIHRyYW5zcG9ydHMnIGNvbm5lY3Rpb24gbGlzdHMpIHVudGlsIHRoZSBmaW5hbCByZHNfY29ubl9wdXQoKSxcbitcdCAqIGEgY29ubiBjYW4gYmUgaGFuZGVkIHRvIHJkc19jb25uX2Rlc3Ryb3koKSBtb3JlIHRoYW4gb25jZSAtXG4rXHQgKiBlLmcuIGRyb3BwZWQgZm9yIGEgcHJvdG9jb2wgdmVyc2lvbiBtaXNtYXRjaCBhbmQgdGhlbiBmb3VuZFxuK1x0ICogYWdhaW4gYXQgbW9kdWxlIHVubG9hZC4gIE9ubHkgdGhlIGZpcnN0IGNhbGxlciBwcm9jZWVkczsgdGhlXG4rXHQgKiB1bmhhc2ggYWxzbyBoYXBwZW5zIHVuZGVyIHJkc19jb25uX2xvY2ssIHNvIGEgbG9va2VkLXVwIGNvbm5cbitcdCAqIGNhbiBuZXZlciBiZSBxdWllc2NlZCB0d2ljZS5cbitcdCAqL1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZyZHNfY29ubl9sb2NrKTtcbitcdGlmIChjb25uLVx1MDAzZWNfZGVzdHJveV9pbl9wcm9nKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyZHNfY29ubl9sb2NrKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0V1JJVEVfT05DRShjb25uLVx1MDAzZWNfZGVzdHJveV9pbl9wcm9nLCB0cnVlKTtcbitcbitcdC8qIEVuc3VyZSBjb25uIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBmb3IgcmVjb25uZWN0ICovXG4gXHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2Y29ubi1cdTAwM2VjX2hhc2hfbm9kZSk7XG4rXG4rXHQvKiBTbmF0Y2ggY19wYXNzaXZlIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2s6XG4rXHQgKiBfX3Jkc19jb25uX2NyZWF0ZSgpIGRlcmVmZXJlbmNlcyBpdCB1bmRlciByY3VfcmVhZF9sb2NrKClcbitcdCAqIChhbmQgcmVmdXNlcyB0byBpbnN0YWxsIGEgbmV3IG9uZSBvbmNlIGNfZGVzdHJveV9pbl9wcm9nIGlzXG4rXHQgKiBzZXQsIHdoaWNoIGl0IGNoZWNrcyB1bmRlciB0aGlzIGxvY2spLiAgQWZ0ZXIgdGhlXG4rXHQgKiBzeW5jaHJvbml6ZV9yY3UoKSBiZWxvdyBubyBvbmUgY2FuIHBpY2sgdGhlIHBvaW50ZXIgdXAgYW55XG4rXHQgKiBtb3JlIGFuZCBpdHMgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkLlxuK1x0ICovXG4rXHRwYXNzaXZlID0gY29ubi1cdTAwM2VjX3Bhc3NpdmU7XG4rXHRjb25uLVx1MDAzZWNfcGFzc2l2ZSA9IE5VTEw7XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2cmRzX2Nvbm5fbG9jayk7XG4gXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiBcbiBcdC8qIHNodXQgdGhlIGNvbm5lY3Rpb24gZG93biAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhdGhzOyBpKyspIHtcbiBcdFx0Y3AgPSBcdTAwMjZjb25uLVx1MDAzZWNfcGF0aFtpXTtcbi1cdFx0cmRzX2Nvbm5fcGF0aF9kZXN0cm95KGNwKTtcbitcdFx0cmRzX2Nvbm5fcGF0aF9xdWllc2NlKGNwKTtcbiBcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNmNwLVx1MDAzZWNwX3JldHJhbnMpKTtcbiBcdH1cbiBcbkBAIC01OTQsMTIgKzczOSwxNCBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIFx0ICovXG4gXHRyZHNfY29uZ19yZW1vdmVfY29ubihjb25uKTtcbiBcbi1cdGtmcmVlKGNvbm4tXHUwMDNlY19wYXRoKTtcbi1cdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcbitcdC8qIGRyb3AgdGhlIHJlZmVyZW5jZSBvdXIgY19wYXNzaXZlIHBvaW50ZXIgaGVsZCwgaWYgYW55ICovXG4rXHRpZiAocGFzc2l2ZSlcbitcdFx0cmRzX2Nvbm5fcHV0KHBhc3NpdmUpO1xuIFxuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuLVx0cmRzX2Nvbm5fY291bnQtLTtcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuK1x0LyogZHJvcCB0aGUgaW5pdGlhbCByZWZlcmVuY2U7IHRoZSBjb25uZWN0aW9uIGlzIGZyZWVkIGZyb21cbitcdCAqIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgZXZlcnkgaG9sZGVyIGhhcyBkcm9wcGVkIHRoZWlyc1xuK1x0ICovXG4rXHRyZHNfY29ubl9wdXQoY29ubik7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2Rlc3Ryb3kpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuYyBiL25ldC9yZHMvaWIuY1xuaW5kZXggNzg2ZjM5MTY5YmMxNC4uNzU1NjkwNTgzMzI1OSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWIuY1xuKysrIGIvbmV0L3Jkcy9pYi5jXG5AQCAtNTI1LDEwICs1MjUsNyBAQCBzdGF0aWMgdm9pZCByZHNfaWJfc2V0X3VubG9hZGluZyh2b2lkKVxuIFxuIHN0YXRpYyBib29sIHJkc19pYl9pc191bmxvYWRpbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIHtcbi1cdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCA9IFx1MDAyNmNvbm4tXHUwMDNlY19wYXRoWzBdO1xuLVxuLVx0cmV0dXJuICh0ZXN0X2JpdChSRFNfREVTVFJPWV9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykgfHxcbi1cdFx0YXRvbWljX3JlYWQoXHUwMDI2cmRzX2liX3VubG9hZGluZykgIT0gMCk7XG4rXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cmRzX2liX3VubG9hZGluZykgIT0gMDtcbiB9XG4gXG4gdm9pZCByZHNfaWJfZXhpdCh2b2lkKVxuQEAgLTU0MSw2ICs1MzgsMTUgQEAgdm9pZCByZHNfaWJfZXhpdCh2b2lkKVxuICNlbmRpZlxuIFx0cmRzX2liX3VucmVnaXN0ZXJfY2xpZW50KCk7XG4gXHRyZHNfaWJfZGVzdHJveV9ub2Rldl9jb25ucygpO1xuK1x0cmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChcdTAwMjZyZHNfaWJfdHJhbnNwb3J0KTtcbitcbitcdC8qIFRlYXJpbmcgZG93biB0aGUgbGFzdCBjb25uZWN0aW9uIG1heSBoYXZlIGRyb3BwZWQgdGhlIGZpbmFsXG4rXHQgKiByZWZlcmVuY2Ugb24gYSBkZXZpY2UsIGRlZmVycmluZyByZHNfaWJfZGV2X2ZyZWUoKSB0byByZHNfd3EuXG4rXHQgKiBEcmFpbiBpdCBiZWZvcmUgdGhlIG1vZHVsZSBnb2VzIGF3YXk7IGl0IHF1ZXVlcyBub3RoaW5nXG4rXHQgKiBmdXJ0aGVyIG9uIHJkc193cS5cbitcdCAqL1xuK1x0Zmx1c2hfd29ya3F1ZXVlKHJkc193cSk7XG4rXG4gXHRyZHNfaWJfc3lzY3RsX2V4aXQoKTtcbiBcdHJkc19pYl9yZWN2X2V4aXQoKTtcbiBcdHJkc190cmFuc191bnJlZ2lzdGVyKFx1MDAyNnJkc19pYl90cmFuc3BvcnQpO1xuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfY20uYyBiL25ldC9yZHMvaWJfY20uY1xuaW5kZXggNGZlYjBlZGMzNjBjOC4uMjRlNTM4YzI1M2E3YSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWJfY20uY1xuKysrIGIvbmV0L3Jkcy9pYl9jbS5jXG5AQCAtOTI0LDggKzkyNCwxNCBAQCBpbnQgcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCxcbiBcdFx0cmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgXCJyZG1hX2FjY2VwdCBmYWlsZWRcXG5cIik7XG4gXG4gb3V0OlxuLVx0aWYgKGNvbm4pXG4rXHRpZiAoY29ubikge1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29ubi1cdTAwM2VjX2NtX2xvY2spO1xuK1x0XHQvKiBUaGUgY29ubiBzdGF5cyByZWFjaGFibGUgdGhyb3VnaCBjbV9pZC1cdTAwM2Vjb250ZXh0XG4rXHRcdCAqIHdpdGhvdXQgYSByZWZlcmVuY2Ugb2YgaXRzIG93bjogY29ubmVjdGlvbiBkZXN0cm95XG4rXHRcdCAqIHNodXRzIHRoZSBjbV9pZCBkb3duIGJlZm9yZSB0aGUgY29ubiBpcyBmcmVlZC5cbitcdFx0ICovXG4rXHRcdHJkc19jb25uX3B1dChjb25uKTtcbitcdH1cbiBcdGlmIChlcnIpXG4gXHRcdHJkbWFfcmVqZWN0KGNtX2lkLCBcdTAwMjZlcnIsIHNpemVvZihpbnQpLFxuIFx0XHRcdCAgICBJQl9DTV9SRUpfQ09OU1VNRVJfREVGSU5FRCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9sb29wLmMgYi9uZXQvcmRzL2xvb3AuY1xuaW5kZXggZTZiMDc1MGJiZWRhYi4uN2RhZjhlZDI1ZDY5YSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvbG9vcC5jXG4rKysgYi9uZXQvcmRzL2xvb3AuY1xuQEAgLTE5NSw2ICsxOTUsOCBAQCB2b2lkIHJkc19sb29wX2V4aXQodm9pZClcbiBcdFx0V0FSTl9PTihsYy1cdTAwM2Vjb25uLVx1MDAzZWNfcGFzc2l2ZSk7XG4gXHRcdHJkc19jb25uX2Rlc3Ryb3kobGMtXHUwMDNlY29ubik7XG4gXHR9XG4rXG4rXHRyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKFx1MDAyNnJkc19sb29wX3RyYW5zcG9ydCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJkc19sb29wX2tpbGxfY29ubnMoc3RydWN0IG5ldCAqbmV0KVxuZGlmZiAtLWdpdCBhL25ldC9yZHMvbWVzc2FnZS5jIGIvbmV0L3Jkcy9tZXNzYWdlLmNcbmluZGV4IGYyNWYyNTkyNTg2ZjcuLjI5ZTk1MDI4ZTYxZTQgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL21lc3NhZ2UuY1xuKysrIGIvbmV0L3Jkcy9tZXNzYWdlLmNcbkBAIC0xODIsNiArMTgyLDE4IEBAIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4gXHRcdGtyZWZfcHV0KFx1MDAyNnJtLVx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfZnJlZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuK3tcbitcdC8qIGdldCBpbiByZHNfc2VuZF9xdWV1ZV9ybSgpLCByZHNfc2VuZF9wcm9iZSgpIG9yIHRoZSBjb25nZXN0aW9uXG4rXHQgKiBtYXAgcGF0aCBvZiByZHNfc2VuZF94bWl0KCkuICBNZXNzYWdlcyB0aGF0IHdlcmUgbmV2ZXIgcXVldWVkIG9uXG4rXHQgKiBhIGNvbm5lY3Rpb24gaGF2ZSBubyByZWZlcmVuY2UgdG8gZHJvcC5cbitcdCAqL1xuK1x0aWYgKHJtLVx1MDAzZW1faW5jLmlfY29ubilcbitcdFx0cmRzX2Nvbm5fcHV0KHJtLVx1MDAzZW1faW5jLmlfY29ubik7XG4rXG4rXHRrZnJlZShybSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXG5AQCAtMTkyLDcgKzIwNCw3IEBAIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX3VucGluX2RlZmVycmVkKVxuIFx0XHRyZHNfYXRvbWljX29wX3VucGluX3BhZ2UoXHUwMDI2cm0tXHUwMDNlYXRvbWljKTtcbiBcbi1cdGtmcmVlKHJtKTtcbitcdHJkc19tZXNzYWdlX2ZyZWUocm0pO1xuIH1cbiBcbiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuQEAgLTIxNyw3ICsyMjksNyBAQCB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHRrZnJlZShybSk7XG4rXHRcdHJkc19tZXNzYWdlX2ZyZWUocm0pO1xuIFx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChyZHNfbWVzc2FnZV9wdXQpO1xuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRzLmggYi9uZXQvcmRzL3Jkcy5oXG5pbmRleCAyZGI0OTU3M2RhY2Q1Li4zNTc2MGRkNmIwNzdmIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZHMuaFxuKysrIGIvbmV0L3Jkcy9yZHMuaFxuQEAgLTg5LDcgKzg5LDYgQEAgZW51bSB7XG4gI2RlZmluZSBSRFNfUkVDT05ORUNUX1BFTkRJTkdcdDFcbiAjZGVmaW5lIFJEU19JTl9YTUlUXHRcdDJcbiAjZGVmaW5lIFJEU19SRUNWX1JFRklMTFx0XHQzXG4tI2RlZmluZVx0UkRTX0RFU1RST1lfUEVORElOR1x0NFxuIFxuIC8qIE1heCBudW1iZXIgb2YgbXVsdGlwYXRocyBwZXIgUkRTIGNvbm5lY3Rpb24uIE11c3QgYmUgYSBwb3dlciBvZiAyICovXG4gI2RlZmluZVx0UkRTX01QQVRIX1dPUktFUlNcdDhcbkBAIC0xMzgsNiArMTM3LDEyIEBAIHN0cnVjdCByZHNfY29ubl9wYXRoIHtcbiAvKiBPbmUgcmRzX2Nvbm5lY3Rpb24gcGVyIFJEUyBhZGRyZXNzIHBhaXIgKi9cbiBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24ge1xuIFx0c3RydWN0IGhsaXN0X25vZGVcdGNfaGFzaF9ub2RlO1xuK1x0LyogRnJlZSBvZiB0aGUgY29ubmVjdGlvbiBtZW1vcnkgKG5vdCB0aGUgdGVhcmRvd24gb2YgaXRzXG4rXHQgKiB0cmFuc3BvcnQgc3RhdGUgLSB0aGF0IHN0YXlzIHN5bmNocm9ub3VzIGluXG4rXHQgKiByZHNfY29ubl9kZXN0cm95KCkpIGlzIGRlZmVycmVkIHVudGlsIHRoZSBsYXN0IHJlZmVyZW5jZSBpc1xuK1x0ICogZHJvcHBlZCB2aWEgcmRzX2Nvbm5fcHV0KCkuXG4rXHQgKi9cbitcdHN0cnVjdCBrcmVmXHRcdGNfcmVmY291bnQ7XG4gXHRzdHJ1Y3QgaW42X2FkZHJcdFx0Y19sYWRkcjtcbiBcdHN0cnVjdCBpbjZfYWRkclx0XHRjX2ZhZGRyO1xuIFx0aW50XHRcdFx0Y19kZXZfaWY7IC8qIGlmaW5kZXggdXNlZCBmb3IgdGhpcyBjb25uICovXG5AQCAtMTQ4LDYgKzE1MywxMCBAQCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24ge1xuIFx0XHRcdFx0Y19wYWRfdG9fMzI6Mjk7XG4gXHRpbnRcdFx0XHRjX25wYXRocztcbiBcdGJvb2xcdFx0XHRjX3dpdGhfc3BvcnRfaWR4O1xuK1x0LyogU2V0ICh1bmRlciBSQ1UpIHdoZW4gcmRzX2Nvbm5fZGVzdHJveSgpIHN0YXJ0cyBvbiB0aGlzIGNvbm47XG4rXHQgKiByZWFkIHRocm91Z2ggcmRzX2Rlc3Ryb3lfcGVuZGluZygpLlxuK1x0ICovXG4rXHRib29sXHRcdFx0Y19kZXN0cm95X2luX3Byb2c7XG4gXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb25cdCpjX3Bhc3NpdmU7XG4gXHRzdHJ1Y3QgcmRzX3RyYW5zcG9ydFx0KmNfdHJhbnM7XG4gXG5AQCAtNTQ0LDYgKzU1MywxMiBAQCBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCB7XG4gXHR1bnNpZ25lZCBpbnRcdFx0dF9wcmVmZXJfbG9vcGJhY2s6MSxcbiBcdFx0XHRcdHRfbXBfY2FwYWJsZToxO1xuIFx0dW5zaWduZWQgaW50XHRcdHRfdHlwZTtcbitcdC8qIENvbm5lY3Rpb25zIG9mIHRoaXMgdHJhbnNwb3J0IG5vdCB5ZXQgZnJlZWQ7IGZyZWVpbmcgcnVuc1xuK1x0ICogYXN5bmNocm9ub3VzbHkgb25jZSByZHNfY29ubl9kZXN0cm95KCkgaGFzIHF1aWVzY2VkIGFcbitcdCAqIGNvbm5lY3Rpb24sIHNvIHRyYW5zcG9ydCBtb2R1bGUgdW5sb2FkIGhhcyB0byB3YWl0IGZvciB0aGlzXG4rXHQgKiB0byByZWFjaCB6ZXJvIChyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKCkpLlxuK1x0ICovXG4rXHRhdG9taWNfdFx0XHR0X2Nvbm5fY291bnQ7XG4gXG4gXHRpbnQgKCpsYWRkcl9jaGVjaykoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsXG4gXHRcdFx0ICAgX191MzIgc2NvcGVfaWQpO1xuQEAgLTgxOSw2ICs4MzQsMTEgQEAgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHRcdHU4IHRvcywgZ2ZwX3QgZ2ZwLCBpbnQgZGV2X2lmKTtcbiB2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XG4gdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XG4rdm9pZCByZHNfY29ubl9nZXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcbit2b2lkIHJkc19jb25uX3B1dChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuKy8qIGhvdyBsb25nIHRyYW5zcG9ydCB1bmxvYWQgd2FpdHMgZm9yIGl0cyBjb25uZWN0aW9ucyB0byBiZSBmcmVlZCAqL1xuKyNkZWZpbmUgUkRTX0NPTk5fRlJFRV9USU1FT1VUX01TXHQxMDAwMFxuK3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpO1xuIHZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIHZvaWQgcmRzX2Nvbm5fcGF0aF9kcm9wKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCwgYm9vbCBkZXN0cm95KTtcbiB2b2lkIHJkc19jb25uX2Nvbm5lY3RfaWZfZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuQEAgLTk5NCw3ICsxMDE0LDggQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCByZHNfZGVzdHJveV9wZW5kaW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbiB7XG4tXHRyZXR1cm4gIWNoZWNrX25ldChyZHNfY29ubl9uZXQoY29ubikpIHx8XG4rXHRyZXR1cm4gUkVBRF9PTkNFKGNvbm4tXHUwMDNlY19kZXN0cm95X2luX3Byb2cpIHx8XG4rXHQgICAgICAgIWNoZWNrX25ldChyZHNfY29ubl9uZXQoY29ubikpIHx8XG4gXHQgICAgICAgKGNvbm4tXHUwMDNlY190cmFucy1cdTAwM2V0X3VubG9hZGluZyBcdTAwMjZcdTAwMjYgY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfdW5sb2FkaW5nKGNvbm4pKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZWN2LmMgYi9uZXQvcmRzL3JlY3YuY1xuaW5kZXggNjIwNGU1NzdhOTBhZS4uYjAzMWMwYjQzYWY4MyAxMDA2NDRcbi0tLSBhL25ldC9yZHMvcmVjdi5jXG4rKysgYi9uZXQvcmRzL3JlY3YuY1xuQEAgLTQ2LDYgKzQ2LDcgQEAgdm9pZCByZHNfaW5jX2luaXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sXG4ge1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNmluYy1cdTAwM2VpX3JlZmNvdW50LCAxKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluYy1cdTAwM2VpX2l0ZW0pO1xuK1x0cmRzX2Nvbm5fZ2V0KGNvbm4pO1x0LyogcHV0IGluIHJkc19pbmNfcHV0KCkgKi9cbiBcdGluYy1cdTAwM2VpX2Nvbm4gPSBjb25uO1xuIFx0aW5jLVx1MDAzZWlfY29ubl9wYXRoID0gTlVMTDtcbiBcdGluYy1cdTAwM2VpX3NhZGRyID0gKnNhZGRyO1xuQEAgLTYxLDYgKzYyLDcgQEAgdm9pZCByZHNfaW5jX3BhdGhfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCxcbiB7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2aW5jLVx1MDAzZWlfcmVmY291bnQsIDEpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5jLVx1MDAzZWlfaXRlbSk7XG4rXHRyZHNfY29ubl9nZXQoY3AtXHUwMDNlY3BfY29ubik7XHQvKiBwdXQgaW4gcmRzX2luY19wdXQoKSAqL1xuIFx0aW5jLVx1MDAzZWlfY29ubiA9IGNwLVx1MDAzZWNwX2Nvbm47XG4gXHRpbmMtXHUwMDNlaV9jb25uX3BhdGggPSBjcDtcbiBcdGluYy1cdTAwM2VpX3NhZGRyID0gKnNhZGRyO1xuQEAgLTgxLDkgKzgzLDE5IEBAIHZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKVxuIHtcbiBcdHJkc2RlYnVnKFwicHV0IGluYyAlcCByZWYgJWRcXG5cIiwgaW5jLCByZWZjb3VudF9yZWFkKFx1MDAyNmluYy1cdTAwM2VpX3JlZmNvdW50KSk7XG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmluYy1cdTAwM2VpX3JlZmNvdW50KSkge1xuK1x0XHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBpbmMtXHUwMDNlaV9jb25uO1xuK1xuIFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2aW5jLVx1MDAzZWlfaXRlbSkpO1xuIFxuLVx0XHRpbmMtXHUwMDNlaV9jb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNlaW5jX2ZyZWUoaW5jKTtcbitcdFx0LyogaW5jX2ZyZWUoKSBjYW4gZnJlZSB0aGUgbWVtb3J5IEBpbmMgbGl2ZXMgaW4sIHNvIHRoZVxuK1x0XHQgKiBjb25uZWN0aW9uIHJlZmVyZW5jZSBoYXMgdG8gYmUgZHJvcHBlZCB0aHJvdWdoIHRoZVxuK1x0XHQgKiBjb3B5IHRha2VuIGFib3ZlLlxuK1x0XHQgKi9cbitcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWluY19mcmVlKGluYyk7XG4rXHRcdC8qIGdldCBpbiByZHNfaW5jX2luaXQoKSwgcmRzX2luY19wYXRoX2luaXQoKSBvclxuK1x0XHQgKiByZHNfcmVjdl9pbmNvbWluZygpXG4rXHRcdCAqL1xuK1x0XHRyZHNfY29ubl9wdXQoY29ubik7XG4gXHR9XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19pbmNfcHV0KTtcbkBAIC0zMjUsNiArMzM3LDEzIEBAIHZvaWQgcmRzX3JlY3ZfaW5jb21pbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLFxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcDtcbiBcbitcdC8qIGV2ZXJ5IGNhbGxlciBpbml0aWFsaXplZCBAaW5jIHdpdGggcmRzX2luY19pbml0KCkgb3JcbitcdCAqIHJkc19pbmNfcGF0aF9pbml0KCkgZmlyc3QsIHNvIGlfY29ubiBhbHJlYWR5IGhvbGRzIGEgcmVmZXJlbmNlLlxuK1x0ICogVGFrZSB0aGUgbmV3IG9uZSBiZWZvcmUgZHJvcHBpbmcgdGhlIG9sZCwgc28gdGhhdCByZS1wb2ludGluZyBhblxuK1x0ICogaW5jIGF0IHRoZSBjb25uZWN0aW9uIGl0IGFscmVhZHkgcmVmZXJzIHRvIGNhbm5vdCBmcmVlIGl0LlxuK1x0ICovXG4rXHRyZHNfY29ubl9nZXQoY29ubik7XG4rXHRyZHNfY29ubl9wdXQoaW5jLVx1MDAzZWlfY29ubik7XG4gXHRpbmMtXHUwMDNlaV9jb25uID0gY29ubjtcbiBcdGluYy1cdTAwM2VpX3J4X2ppZmZpZXMgPSBqaWZmaWVzO1xuIFx0aWYgKGNvbm4tXHUwMDNlY190cmFucy1cdTAwM2V0X21wX2NhcGFibGUpXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xuaW5kZXggMWFmYTk4MWU1YzA2ZC4uMDQ1ZWIzYzNmOTc3MiAxMDA2NDRcbi0tLSBhL25ldC9yZHMvc2VuZC5jXG4rKysgYi9uZXQvcmRzL3NlbmQuY1xuQEAgLTI5MCw2ICsyOTAsNyBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRcdFx0fVxuIFx0XHRcdHJtLVx1MDAzZWRhdGEub3BfYWN0aXZlID0gMTtcbiBcdFx0XHRybS1cdTAwM2VtX2luYy5pX2Nvbm5fcGF0aCA9IGNwO1xuK1x0XHRcdHJkc19jb25uX2dldChjcC1cdTAwM2VjcF9jb25uKTtcdC8qIHB1dCBpbiByZHNfbWVzc2FnZV9wdXQoKSAqL1xuIFx0XHRcdHJtLVx1MDAzZW1faW5jLmlfY29ubiA9IGNwLVx1MDAzZWNwX2Nvbm47XG4gXG4gXHRcdFx0Y3AtXHUwMDNlY3BfeG1pdF9ybSA9IHJtO1xuQEAgLTk0Nyw2ICs5NDgsNyBAQCBzdGF0aWMgaW50IHJkc19zZW5kX3F1ZXVlX3JtKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0LyogVGhlIGNvZGUgb3JkZXJpbmcgaXMgYSBsaXR0bGUgd2VpcmQsIGJ1dCB3ZSdyZVxuIFx0XHQgICB0cnlpbmcgdG8gbWluaW1pemUgdGhlIHRpbWUgd2UgaG9sZCBjX2xvY2sgKi9cbiBcdFx0cmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKFx1MDAyNnJtLVx1MDAzZW1faW5jLmlfaGRyLCBzcG9ydCwgZHBvcnQsIDApO1xuK1x0XHRyZHNfY29ubl9nZXQoY29ubik7XHQvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi9cbiBcdFx0cm0tXHUwMDNlbV9pbmMuaV9jb25uID0gY29ubjtcbiBcdFx0cm0tXHUwMDNlbV9pbmMuaV9jb25uX3BhdGggPSBjcDtcbiBcdFx0cmRzX21lc3NhZ2VfYWRkcmVmKHJtKTtcbkBAIC0xMTU5LDEzICsxMTYxLDE0IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbiBcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2luICosIHVzaW4sIG1zZy1cdTAwM2Vtc2dfbmFtZSk7XG4gXHRfX2JlMTYgZHBvcnQ7XG4gXHRzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gTlVMTDtcbi1cdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjtcbitcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdGludCBxdWV1ZWQgPSAwLCBhbGxvY2F0ZWRfbXIgPSAwO1xuIFx0aW50IG5vbmJsb2NrID0gbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUO1xuIFx0bG9uZyB0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG5vbmJsb2NrKTtcbiBcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aDtcbiBcdHN0cnVjdCBpbjZfYWRkciBkYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRfX3UzMiBzY29wZV9pZCA9IDA7XG4gXHRzaXplX3QgcmRtYV9wYXlsb2FkX2xlbiA9IDA7XG4gXHRib29sIHpjb3B5ID0gKChtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIFx1MDAyNlx1MDAyNlxuQEAgLTEzNDAsMTEgKzEzNDMsMjkgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuIFx0cm0tXHUwMDNlbV9kYWRkciA9IGRhZGRyO1xuIFxuIFx0LyogcmRzX2Nvbm5fY3JlYXRlIGhhcyBhIHNwaW5sb2NrIHRoYXQgcnVucyB3aXRoIElSUSBvZmYuXG4tXHQgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuICovXG4tXHRpZiAocnMtXHUwMDNlcnNfY29ubiBcdTAwMjZcdTAwMjYgaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNnJzLVx1MDAzZXJzX2Nvbm4tXHUwMDNlY19mYWRkciwgXHUwMDI2ZGFkZHIpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHJzLVx1MDAzZXJzX3RvcyA9PSBycy1cdTAwM2Vyc19jb25uLVx1MDAzZWNfdG9zKSB7XG4tXHRcdGNvbm4gPSBycy1cdTAwM2Vyc19jb25uO1xuK1x0ICogQ2FjaGluZyB0aGUgY29ubiBpbiB0aGUgc29ja2V0IGhlbHBzIGEgbG90LlxuK1x0ICpcbitcdCAqIFRoZSBjYWNoZWQgcnNfY29ubiBob2xkcyBhIGNvbm5lY3Rpb24gcmVmZXJlbmNlOyB0YWtlIG9uZSBvZlxuK1x0ICogb3VyIG93biBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgY2FsbCAoZHJvcHBlZCBvbiBib3RoIGV4aXRcbitcdCAqIHBhdGhzKSwgc28gdGhhdCBuZWl0aGVyIGEgY29uY3VycmVudCBzZW5kZXIgcmVwbGFjaW5nIHRoZVxuK1x0ICogY2FjaGUgbm9yIHJkc19jb25uX2Rlc3Ryb3koKSBjYW4gZnJlZSB0aGUgY29ubmVjdGlvbiB1bmRlclxuK1x0ICogdXMuICBBIGNhY2hlZCBjb25uZWN0aW9uIHdob3NlIGRlc3RydWN0aW9uIGhhcyBiZWd1biBpcyBub3RcbitcdCAqIHJldXNlZDogZHJvcHBpbmcgaXQgaGVyZSBsZXRzIHRoZSBuZXh0IHNlbmRtc2cgbG9vayB1cCBvclxuK1x0ICogY3JlYXRlIGEgbGl2ZSBvbmUgaW5zdGVhZCBvZiByZXR1cm5pbmcgLUVBR0FJTiBmb3JldmVyLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZycy1cdTAwM2Vyc19sb2NrLCBmbGFncyk7XG4rXHRjb25uID0gcnMtXHUwMDNlcnNfY29ubjtcbitcdGlmIChjb25uIFx1MDAyNlx1MDAyNiBpcHY2X2FkZHJfZXF1YWwoXHUwMDI2Y29ubi1cdTAwM2VjX2ZhZGRyLCBcdTAwMjZkYWRkcikgXHUwMDI2XHUwMDI2XG4rXHQgICAgcnMtXHUwMDNlcnNfdG9zID09IGNvbm4tXHUwMDNlY190b3MgXHUwMDI2XHUwMDI2ICFyZHNfZGVzdHJveV9wZW5kaW5nKGNvbm4pKSB7XG4rXHRcdHJkc19jb25uX2dldChjb25uKTtcbiBcdH0gZWxzZSB7XG4rXHRcdGNvbm4gPSBOVUxMO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZycy1cdTAwM2Vyc19sb2NrLCBmbGFncyk7XG4rXG4rXHRpZiAoIWNvbm4pIHtcbitcdFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpvbGQ7XG4rXG4gXHRcdGNvbm4gPSByZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoc29ja19uZXQoc29jay1cdTAwM2VzayksXG4gXHRcdFx0XHRcdFx0XHUwMDI2cnMtXHUwMDNlcnNfYm91bmRfYWRkciwgXHUwMDI2ZGFkZHIsXG4gXHRcdFx0XHRcdFx0cnMtXHUwMDNlcnNfdHJhbnNwb3J0LCBycy1cdTAwM2Vyc190b3MsXG5AQCAtMTM1Miw5ICsxMzczLDE3IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbiBcdFx0XHRcdFx0XHRzY29wZV9pZCk7XG4gXHRcdGlmIChJU19FUlIoY29ubikpIHtcbiBcdFx0XHRyZXQgPSBQVFJfRVJSKGNvbm4pO1xuK1x0XHRcdGNvbm4gPSBOVUxMO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXHRcdC8qIGhhbmQgdGhlIGNhY2hlIGl0cyBvd24gcmVmZXJlbmNlICovXG4rXHRcdHJkc19jb25uX2dldChjb25uKTtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cnMtXHUwMDNlcnNfbG9jaywgZmxhZ3MpO1xuK1x0XHRvbGQgPSBycy1cdTAwM2Vyc19jb25uO1xuIFx0XHRycy1cdTAwM2Vyc19jb25uID0gY29ubjtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZycy1cdTAwM2Vyc19sb2NrLCBmbGFncyk7XG4rXHRcdGlmIChvbGQpXG4rXHRcdFx0cmRzX2Nvbm5fcHV0KG9sZCk7XG4gXHR9XG4gXG4gXHRpZiAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSkge1xuQEAgLTE0NjksNiArMTQ5OCw4IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbiBcdFx0a2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7XG4gXHRrZnJlZSh2Y3QudmVjKTtcbiBcbitcdHJkc19jb25uX3B1dChjb25uKTtcbitcbiBcdHJldHVybiBwYXlsb2FkX2xlbjtcbiBcbiBvdXQ6XG5AQCAtMTQ3Niw2ICsxNTA3LDkgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuIFx0XHRrZnJlZSh2Y3QudmVjW2luZF0uaW92KTtcbiBcdGtmcmVlKHZjdC52ZWMpO1xuIFxuK1x0aWYgKGNvbm4pXG4rXHRcdHJkc19jb25uX3B1dChjb25uKTtcbitcbiBcdC8qIElmIHRoZSB1c2VyIGluY2x1ZGVkIGEgUkRNQV9NQVAgY21zZywgd2UgYWxsb2NhdGVkIGEgTVIgb24gdGhlIGZseS5cbiBcdCAqIElmIHRoZSBzZW5kbXNnIGdvZXMgdGhyb3VnaCwgd2Uga2VlcCB0aGUgTVIuIElmIGl0IGZhaWxzIHdpdGggRUFHQUlOXG4gXHQgKiBvciBpbiBhbnkgb3RoZXIgd2F5LCB3ZSBuZWVkIHRvIGRlc3Ryb3kgdGhlIE1SIGFnYWluICovXG5AQCAtMTUyMiw2ICsxNTU2LDcgQEAgcmRzX3NlbmRfcHJvYmUoc3RydWN0IHJkc19jb25uX3BhdGggKmNwLCBfX2JlMTYgc3BvcnQsXG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNnJtLVx1MDAzZW1fY29ubl9pdGVtLCBcdTAwMjZjcC1cdTAwM2VjcF9zZW5kX3F1ZXVlKTtcbiBcdHNldF9iaXQoUkRTX01TR19PTl9DT05OLCBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKTtcbiBcdHJkc19tZXNzYWdlX2FkZHJlZihybSk7XG4rXHRyZHNfY29ubl9nZXQoY3AtXHUwMDNlY3BfY29ubik7XHQvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi9cbiBcdHJtLVx1MDAzZW1faW5jLmlfY29ubiA9IGNwLVx1MDAzZWNwX2Nvbm47XG4gXHRybS1cdTAwM2VtX2luYy5pX2Nvbm5fcGF0aCA9IGNwO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jXG5pbmRleCA3NzRhNzFmODhkMzc1Li4yNjg1ZWUyMWEyMmQxIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy90Y3AuY1xuKysrIGIvbmV0L3Jkcy90Y3AuY1xuQEAgLTgwNSw2ICs4MDUsNyBAQCBzdGF0aWMgdm9pZCByZHNfdGNwX2V4aXQodm9pZClcbiAjZW5kaWZcbiBcdHVucmVnaXN0ZXJfcGVybmV0X2RldmljZShcdTAwMjZyZHNfdGNwX25ldF9vcHMpO1xuIFx0cmRzX3RjcF9kZXN0cm95X2Nvbm5zKCk7XG4rXHRyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKFx1MDAyNnJkc190Y3BfdHJhbnNwb3J0KTtcbiBcdHJkc190cmFuc191bnJlZ2lzdGVyKFx1MDAyNnJkc190Y3BfdHJhbnNwb3J0KTtcbiBcdHJkc190Y3BfcmVjdl9leGl0KCk7XG4gXHRrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX3RjcF9jb25uX3NsYWIpO1xuZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwX2xpc3Rlbi5jIGIvbmV0L3Jkcy90Y3BfbGlzdGVuLmNcbmluZGV4IDEzZmE2MGMxOTg1YmIuLjBkMmNlZDg5MmE4YWUgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuKysrIGIvbmV0L3Jkcy90Y3BfbGlzdGVuLmNcbkBAIC0xNTMsNyArMTUzLDcgQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bilcbiB7XG4gXHRzdHJ1Y3Qgc29ja2V0ICpsaXN0ZW5fc29jayA9IHJ0bi1cdTAwM2VyZHNfdGNwX2xpc3Rlbl9zb2NrO1xuIFx0c3RydWN0IHNvY2tldCAqbmV3X3NvY2sgPSBOVUxMO1xuLVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uO1xuK1x0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gTlVMTDtcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0O1xuIFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqcnNfdGNwID0gTlVMTDtcbkBAIC0yMjksNiArMjI5LDcgQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bilcbiBcbiBcdGlmIChJU19FUlIoY29ubikpIHtcbiBcdFx0cmV0ID0gUFRSX0VSUihjb25uKTtcbitcdFx0Y29ubiA9IE5VTEw7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0LyogQW4gaW5jb21pbmcgU1lOIHJlcXVlc3QgY2FtZSBpbiwgYW5kIFRDUCBqdXN0IGFjY2VwdGVkIGl0LlxuQEAgLTM0Myw2ICszNDQsOCBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2cnNfdGNwLVx1MDAzZXRfY29ubl9wYXRoX2xvY2spO1xuIFx0aWYgKG5ld19zb2NrKVxuIFx0XHRzb2NrX3JlbGVhc2UobmV3X3NvY2spO1xuK1x0aWYgKGNvbm4pXG4rXHRcdHJkc19jb25uX3B1dChjb25uKTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZydG4tXHUwMDNlcmRzX3RjcF9hY2NlcHRfbG9jayk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo1MS41MDE5NzM5MDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM1ODM4OTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIFJEUyBDb25uZWN0aW9uIFJlZmFjdG9yaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHJlZmFjdG9yaW5nIG9mIFJEUyBjb25uZWN0aW9uIG1hbmFnZW1lbnQgd2FycmFudHMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50LiBJIGtub3cgS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHdoZXJlYXMgS0FTQU4gdGFja2xlcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBldGMuLCBhbmQgTE9DS0RFUCBkZWFscyB3aXRoIGxvY2tpbmcgaXNzdWVzLlxuXG5UaGlzIHBhdGNoIGlzIGFsbCBhYm91dCByZWZhY3RvcmluZyBob3cgUkRTIGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgdGhlaXIgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGV5J3JlIGludHJvZHVjaW5nIGBzdHJ1Y3Qga3JlZiBjX3JlZmNvdW50YCBhbmQgY2hhbmdpbmcgaG93IHJlZnMgYXJlIHRha2VuIGFuZCBwdXQuIFRoZSBnb2FsIGlzIHRvIGVsaW1pbmF0ZSBVQUZzLCBkb3VibGUgZnJlZXMsIHJlZmNvdW50aW5nIGxlYWtzLCBhbmQgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0ZWFyZG93biBhbmQgbW9kdWxlIHVubG9hZGluZy4gU28sIGl0J3MgYSBsaWZldGltZSBtYW5hZ2VtZW50IG92ZXJoYXVsLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgdG91Y2ggYW55dGhpbmcgdGhhdCBLTVNBTiB3b3VsZCBjYXJlIGFib3V0PyBJIG5lZWQgdG8gY2hlY2sgZm9yIHR3byBwcmltYXJ5IEtNU0FOIGNvbmNlcm5zOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZToqKiBEb2VzIHRoaXMgcGF0Y2ggKmV4cG9zZSogbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IEkgc2VlIG5vIGNoYW5nZXMgdG8gYGNvcHlfdG9fdXNlcmAsIGBnZXQvc2V0c29ja29wdGAsIGByZWN2bXNnYCwgZXRjLiwgc28gSSdtIG5vdCBpbW1lZGlhdGVseSB3b3JyaWVkIGFib3V0IGxlYWtpbmcgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhpcyB3YXkuIEl0IGRvZXNuJ3Qgc2VlbSB0byBhZmZlY3QgYW55IGRhdGEgY29waWVkIHRvIG9yIGZyb20gdXNlcnNwYWNlIGRpcmVjdGx5LlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogVGhlIGNvZGUgdXNlcyBga3JlZl9pbml0YCwgd2hpY2ggaXMgZ29vZC4gVGhlcmUgZG9uJ3Qgc2VlbSB0byBiZSBhbnkgb2J2aW91cyBicmFuY2hpbmcgcG9pbnRzIHdoZXJlIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgKmNvdWxkKiBsZWFkIHRvIGEgc2VjdXJpdHkgaXNzdWUuIEV2ZXJ5dGhpbmcgSSdtIHNlZWluZyBpcyBpbml0aWFsaXplZC5cblxuU28gZmFyLCBpdCBsb29rcyBjbGVhbi4gQnV0IG5vdyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkLiBgX19yZHNfY29ubl9jcmVhdGVgIGluaXRpYWxpemVzIGBrcmVmX2luaXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50KWAgd2hpY2ggaXMgZ29vZCBidXQgdGhlIGBjb25uYCBpcyBhbGxvY2F0ZWQgZnJvbSBgcmRzX2Nvbm5fc2xhYmAuIEkgbmVlZCB0byB2ZXJpZnkgaG93IGByZHNfY29ubl9zbGFiYCBpcyBhbGxvY2F0ZWQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhbiBpc3N1ZSBpZiB0aGUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiB0aGUgYGNvbm5gIHN0cnVjdHVyZSBpcyBpbmNvbXBsZXRlLiBJcyBpdCBga21lbV9jYWNoZV96YWxsb2NgPyBUaGF0J3Mgd2hhdCBJIHdhbnQgdG8ga25vdy4gSWYgaXQncyBhIGAqX3phbGxvY2AgdmFyaWFudCwgb3IgaXMgcHJvcGVybHkgemVyb2VkLCB0aGUgcmlzayBpcyBleHRyZW1lbHkgbG93LiBJZiBpdCdzIG5vdCwgdGhlbiBJJ2xsIG5lZWQgdG8gZG8gbW9yZSBhbmFseXNpcy5cblxuSW4gc3VtbWFyeSwgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbGlrZWx5ICpub3QqIG5lY2Vzc2FyeSBoZXJlLiBUaGUgcGF0Y2ggZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgZGlyZWN0IGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcyBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIHRoYXQgYXJlIG9idmlvdXMuIEhvd2V2ZXIsIGJlZm9yZSBJIG1ha2UgYSBmaW5hbCBjYWxsLCBJJ2xsIGNvbmZpcm0gdGhhdCBgcmRzX2Nvbm5fc2xhYmAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHF1aWNrIGdyZXAgb3IgZmlsZSBpbnNwZWN0aW9uIHRvIHNlZSBob3cgaXQncyBhbGxvY2F0ZWQuIElmIHRoYXQgYWxsb2NhdGlvbiBpcyBjbGVhbiwgSSdsbCBzdGljayB3aXRoIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGZvciB0aGlzIG9uZS4gSWYgbm90LCBJJ2xsIG5lZWQgYSBjbG9zZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo1Ny44NjAzNjYzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQxMzkyNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fY2FjaGVfemFsbG9jLipyZHNfY29ubl9zbGFiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvY29ubmVjdGlvbi5jPTE4Mz1zdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0yMjMtXFxubmV0L3Jkcy9jb25uZWN0aW9uLmM6MjI0OlxcdGNvbm4gPSBrbWVtX2NhY2hlX3phbGxvYyhyZHNfY29ubl9zbGFiLCBnZnApO1xcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTIyNS1cXHRpZiAoIWNvbm4pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6NTkuODAxNzY0ODQ5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5OTc1OTU2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXBwbGljYWJpbGl0eSBBbmFseXNpcyBmb3IgUkRTIENvbm5lY3Rpb24gVGVhcmRvd24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaXNzZWN0aW5nIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgUkRTIG5ldHdvcmsgcHJvdG9jb2wuIEl0J3MgZm9jdXNlZCBvbiBtYW5hZ2luZyB0aGUgbGlmZXRpbWUgb2YgYHJkc19jb25uZWN0aW9uYCBvYmplY3RzIG1vcmUgcm9idXN0bHksIHNwZWNpZmljYWxseSB3aXRoIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSBhbmQgYXN5bmNocm9ub3VzIGNsZWFudXAuIFRoaXMgaXMgdG8gYWRkcmVzcyBzb21lIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGlzc3VlcyBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93biBhbmQgbW9kdWxlIHVubG9hZGluZy4gTXkgbWFpbiBjb25jZXJuIGlzLCBvZiBjb3Vyc2UsIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBLTVNBTiB3b3VsZCBiZSBnb29kIGF0IGZpbmRpbmcuXG5cblRoZSBmaXJzdCB0aGluZyB0byB1bmRlcnN0YW5kIGlzIGhvdyBgY29ubmAgaXMgYWxsb2NhdGVkOyBpdCdzIGRvbmUgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIG1lYW5pbmcgYWxsIG9mIHRoZSBmaWVsZHMgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbG9va2VkIGNsb3NlbHkgYXQgYWxsIG9mIHRoZSBjaGFuZ2VkIGZ1bmN0aW9uczogYHJkc19yZWxlYXNlYCwgYHJkc19jb25uX2xvb2t1cGAsIGBfX3Jkc19jb25uX2NyZWF0ZWAsIHRoZSBgcmRzX2Nvbm5fKmAgZnVuY3Rpb25zIGluIGBjb25uZWN0aW9uLmNgLCBhbmQgdmFyaW91cyBmdW5jdGlvbnMgaW4gYGliLmNgLCBgaWJfY20uY2AsIGBsb29wLmNgLCBgdGNwLmNgLCBgdGNwX2xpc3Rlbi5jYCwgYG1lc3NhZ2UuY2AsIGByZWN2LmNgLCBhbmQgYHNlbmQuY2AgdGhhdCBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY29uY3VycmVuY3kgcHJpbWl0aXZlcywgb2JqZWN0IGxpZmVjeWNsZSwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbiBmb3IgYHJkc19jb25uZWN0aW9uYC5cblxuTXkgYW5hbHlzaXMgcmVhbGx5IGNlbnRlcnMgYXJvdW5kIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IHJpc2tzIHRoYXQgS01TQU4gaXMgcGFydGljdWxhcmx5IGFkZXB0IGF0IGZpbmRpbmcuIEkgbG9va2VkIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgYnVmZmVyIG92ZXJydW5zIHRoYXQgbWlnaHQgcmVhZCB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGFueSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIGRhdGEgY291bGQgbGVhayB0byB1c2Vyc3BhY2UuXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGFib3V0IHJlZmVyZW5jZSBjb3VudGluZywgb2JqZWN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBhbmQgZW5zdXJpbmcgY29ycmVjdCB0ZWFyZG93biBzZXF1ZW5jZS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1ZmZlciBib3VuZGFyaWVzLCBzdHJ1Y3Qgc2VyaWFsaXphdGlvbiB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgbmV3IGNvZGUgaXMgYWxsIHJlZmNvdW50aW5nLCBjb25jdXJyZW5jeSwgYW5kIHNodXRkb3duLiBUaGVyZWZvcmUsIGFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZXMgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzOlxuXG4qICAgVXNlLUFmdGVyLUZyZWUgKFVBRiksIHdoaWNoIEtBU0FOIHdvdWxkIGNhdGNoLlxuKiAgIE1lbW9yeSBsZWFrcywgZGV0ZWN0ZWQgYnkgS01FTUxFQUsuXG4qICAgRGVhZGxvY2tzIG9yIGxvY2tpbmcgaW1iYWxhbmNlcywgd2hpY2ggTE9DS0RFUCBzaG91bGQgaWRlbnRpZnkuXG4qICAgRG91YmxlIGZyZWVzIG9yIGludmFsaWQgZnJlZXMsIGNhdWdodCBieSBLQVNBTiBvciBTTFVCIGRlYnVnLlxuXG5LTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHNwZWNpZmljYWxseSB0YXJnZXRlZCBhdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoZWl0aGVyIHN0YWNrL2hlYXAgKmJlZm9yZSogaW5pdGlhbGl6YXRpb24pIGFuZCBwb3RlbnRpYWxseSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lc24ndCBhbHRlciBhbnkgZGF0YSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSB1c2VkLiBUaGVyZWZvcmUsIGdpdmVuIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHBhdGNoLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLlxuXG5MZXQncyBkbyBhIHF1aWNrIGZpbmFsIGNoZWNrIG9mIHRoZSByZWFzb25pbmcgcmVxdWlyZW1lbnRzOlxuXCJVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLiBJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4gSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlwiXG5cblBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2A6XG4tIGBLTVNBTlJlYXNvbmluZ2A6IEEgdGhvcm91Z2ggZXhwbGFuYXRpb24gY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eS5cbi0gYE5lZWRzS01TQU5gOiBgZmFsc2VgLlxuXG5Pa2F5LCBJJ20gc2F0aXNmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc5NSwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTc6MDYuNzk5MzY0MTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSBvZiBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBhY3Jvc3MgdGhlIFJEUyBzdWJzeXN0ZW0gKGluY2x1ZGluZyBUQ1AsIElCLCBhbmQgbG9vcGJhY2sgdHJhbnNwb3J0cykgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgbW9kdWxlLXVubG9hZCByYWNlcy5cXG5cXG4tIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHJlZmNvdW50IGltYmFsYW5jZSwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBkZWFkbG9jayBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLCBTTFVCIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuXFxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gaW5mby1sZWFrIHJpc2spLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgc2l6aW5nIG9yIGJvdW5kcyBjaGVja2luZywgYW5kIGBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb25gIG9iamVjdHMgY29udGludWUgdG8gYmUgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoZnVsbHkgemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSBvZiBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBhY3Jvc3MgdGhlIFJEUyBzdWJzeXN0ZW0gKGluY2x1ZGluZyBUQ1AsIElCLCBhbmQgbG9vcGJhY2sgdHJhbnNwb3J0cykgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgbW9kdWxlLXVubG9hZCByYWNlcy5cXG5cXG4tIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHJlZmNvdW50IGltYmFsYW5jZSwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBkZWFkbG9jayBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLCBTTFVCIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuXFxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gaW5mby1sZWFrIHJpc2spLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgc2l6aW5nIG9yIGJvdW5kcyBjaGVja2luZywgYW5kIGBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb25gIG9iamVjdHMgY29udGludWUgdG8gYmUgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoZnVsbHkgemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hgcv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 15:11:06 +0000 UTC FinishedAt: 2026-09-05 15:57:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_TCP", "RDS_RDMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "9eab111e765729e93087ff86a2ec9b2ae42d0fa5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_TCP", "RDS_RDMA" ], "series_id": "a3207a3a-be9d-4cd9-856e-5a24d0cebfd8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__rds_conn_create", "rds_conn_destroy", "rds_conn_destroy_fini", "rds_conn_get", "rds_conn_put", "rds_conn_lookup", "rds_sendmsg", "rds_recv_incoming", "rds_inc_put", "rds_message_free", "rds_tcp_accept_one" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19yZHNfY29ubl9jcmVhdGUmIzM0OywKICAgICYjMzQ7cmRzX2Nvbm5fZGVzdHJveSYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9kZXN0cm95X2ZpbmkmIzM0OywKICAgICYjMzQ7cmRzX2Nvbm5fZ2V0JiMzNDssCiAgICAmIzM0O3Jkc19jb25uX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9sb29rdXAmIzM0OywKICAgICYjMzQ7cmRzX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cmRzX3JlY3ZfaW5jb21pbmcmIzM0OywKICAgICYjMzQ7cmRzX2luY19wdXQmIzM0OywKICAgICYjMzQ7cmRzX21lc3NhZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX2FjY2VwdF9vbmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKGBrcmVmYCkgb2YgYHN0cnVjdCByZHNfY29ubmVjdGlvbmAgYWNyb3NzIHRoZSBSRFMgc3Vic3lzdGVtIChpbmNsdWRpbmcgVENQLCBJQiwgYW5kIGxvb3BiYWNrIHRyYW5zcG9ydHMpIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIG1vZHVsZS11bmxvYWQgcmFjZXMuXG5cbi0gS0FTQU4gLyBMT0NLREVQIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmVmY291bnQgaW1iYWxhbmNlLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGRlYWRsb2NrIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duKSBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4sIFNMVUIgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC5cbi0gS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBtb2RpZnkgYW55IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGluZm8tbGVhayByaXNrKSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIHNpemluZyBvciBib3VuZHMgY2hlY2tpbmcsIGFuZCBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBvYmplY3RzIGNvbnRpbnVlIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvY2AgKGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQpLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgcmVmZXJlbmNlIGNvdW50aW5nIChrcmVmKSB0byBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKGNfcmVmY291bnQpIHRvIHByb3Blcmx5IG1hbmFnZSBjb25uZWN0aW9uIGxpZmV0aW1lcyBhbmQgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zLiBJdCByZWZhY3RvcnMgY29ubmVjdGlvbiB0ZWFyZG93biBpbnRvIHN5bmNocm9ub3VzIHF1aWVzY2UgKHJkc19jb25uX3BhdGhfcXVpZXNjZSwgcmRzX2Nvbm5fZGVzdHJveSkgYW5kIGFzeW5jaHJvbm91cyBkZXN0cnVjdGlvbiAocmRzX2Nvbm5fZGVzdHJveV9maW5pKSwgYW5kIHVwZGF0ZXMgcmVmZXJlbmNlIHRyYWNraW5nIGFjcm9zcyBzb2NrZXQgcmVsZWFzZSwgbWVzc2FnZSBxdWV1ZXMsIHJlY3Yvc2VuZCBwYXRocywgYW5kIHRyYW5zcG9ydHMgKFRDUCwgbG9vcCwgSUIpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBsb2dpYywgc3luY2hyb25pemF0aW9uLCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaW4gbmV0L3JkcywgbWFraW5nIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwMDE1ZTE4NmU1NGUzNTkzZGY2ZmZhMDA3MzFhZWEwOWE5MThhZDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxNTo1NjoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuY1xuaW5kZXggZDVkZWZlOTE3MmUzNi4uMGVhYTViOTc2NTcyNCAxMDA2NDRcbi0tLSBhL25ldC9yZHMvYWZfcmRzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvYWZfcmRzLmNcbkBAIC04MCw2ICYjNDM7ODAsMTQgQEAgc3RhdGljIGludCByZHNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0cmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIE5VTEwpO1xuIFx0cmRzX25vdGlmeV9tc2dfemNvcHlfcHVyZ2UoXHUwMDI2cnMtXHUwMDNlcnNfemNvb2tpZV9xdWV1ZSk7XG4gXG4mIzQzO1x0LyogZHJvcCB0aGUgY2FjaGVkIGNvbm5lY3Rpb24gcmVmZXJlbmNlOyBubyBzZW5kbXNnIGNhbiByYWNlXG4mIzQzO1x0ICogd2l0aCB1cyBoZXJlLCB0aGUgc29ja2V0IGlzIGdvaW5nIGF3YXlcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocnMtXHUwMDNlcnNfY29ubikge1xuJiM0MztcdFx0cmRzX2Nvbm5fcHV0KHJzLVx1MDAzZXJzX2Nvbm4pO1xuJiM0MztcdFx0cnMtXHUwMDNlcnNfY29ubiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZyZHNfc29ja19sb2NrKTtcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnMtXHUwMDNlcnNfaXRlbSk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZyZHNfc29ja19sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5pbmRleCBiNmM0YmViNTBlYWYwLi4yYzhjYTU0YTkxY2E4IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5AQCAtNDcsNyAmIzQzOzQ3LDggQEBcbiBcbiAvKiBjb252ZXJ0aW5nIHRoaXMgdG8gUkNVIGlzIGEgY2hvcmUgZm9yIGFub3RoZXIgZGF5Li4gKi9cbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25uX2xvY2spO1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19jb25uX2NvdW50O1xuJiM0MzsvKiB3b2tlbiB3aGVuZXZlciBhIHRyYW5zcG9ydCYjMzk7cyB0X2Nvbm5fY291bnQgZHJvcHMgdG8gemVybyAqL1xuJiM0MztzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2Nvbm5fZnJlZWRfd2FpdHEpO1xuIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCByZHNfY29ubl9oYXNoW1JEU19DT05ORUNUSU9OX0hBU0hfRU5UUklFU107XG4gc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfY29ubl9zbGFiO1xuIFxuQEAgLTc5LDcgJiM0Mzs4MCwxMCBAQCBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKnJkc19jb25uX2J1Y2tldChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxhZGRyLFxuIFx0XHR2YXIgfD0gUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHXyMjc3VmZml4O1x0XFxcbiB9IHdoaWxlICgwKVxuIFxuLS8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrICovXG4mIzQzOy8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrLlxuJiM0MzsgKiBPbiBzdWNjZXNzIGEgcmVmZXJlbmNlIGlzIHRha2VuIG9uIHRoZSByZXR1cm5lZCBjb25uZWN0aW9uOyB0aGVcbiYjNDM7ICogY2FsbGVyIG11c3QgZHJvcCBpdCB3aXRoIHJkc19jb25uX3B1dCgpLlxuJiM0MzsgKi9cbiBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCxcbiBcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYWRkcixcbkBAIC05Niw2ICYjNDM7MTAwLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdCAgICBjb25uLVx1MDAzZWNfdG9zID09IHRvcyBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIG5ldCA9PSByZHNfY29ubl9uZXQoY29ubikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBjb25uLVx1MDAzZWNfZGV2X2lmID09IGRldl9pZikge1xuJiM0MztcdFx0XHQvKiBBbiBlbnRyeSB3aG9zZSByZWZjb3VudCBhbHJlYWR5IGRyb3BwZWQgdG9cbiYjNDM7XHRcdFx0ICogemVybyBoYXMgYmVlbiB1bmhhc2hlZCBhbmQgaXMgYWJvdXQgdG8gYmVcbiYjNDM7XHRcdFx0ICogZnJlZWQ7IGFuIFJDVSB0cmF2ZXJzYWwgbWF5IHN0aWxsIGNvbWVcbiYjNDM7XHRcdFx0ICogYWNyb3NzIGl0LiAgVHJlYXQgaXQgYXMgYWJzZW50LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZjb25uLVx1MDAzZWNfcmVmY291bnQpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdHJldCA9IGNvbm47XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0xOTcsNyAmIzQzOzIwOCwxNCBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdCAqIFdlIG5lZWQgYSBzZWNvbmQgY29ubmVjdGlvbiBvYmplY3QgaW50byB3aGljaCB3ZVxuIFx0XHQgKiBjYW4gc3RpY2sgdGhlIG90aGVyIFFQLiAqL1xuIFx0XHRwYXJlbnQgPSBjb25uO1xuJiM0MztcdFx0LyogVGhlIGNfcGFzc2l2ZSBwb2ludGVyIGhvbGRzIGEgcmVmZXJlbmNlIHdoaWNoIGlzIG9ubHlcbiYjNDM7XHRcdCAqIGRyb3BwZWQgb25lIHN5bmNocm9uaXplX3JjdSgpIGFmdGVyIHRoZSBwb2ludGVyIGlzXG4mIzQzO1x0XHQgKiBjbGVhcmVkLCBzbyB3aXRoaW4gdGhpcyBSQ1Ugc2VjdGlvbiBhIGZldGNoZWQgcG9pbnRlclxuJiM0MztcdFx0ICogaXMgYWx3YXlzIHNhZmUgdG8gdGFrZSBhIHJlZmVyZW5jZSBvbi5cbiYjNDM7XHRcdCAqL1xuIFx0XHRjb25uID0gcGFyZW50LVx1MDAzZWNfcGFzc2l2ZTtcbiYjNDM7XHRcdGlmIChjb25uKVxuJiM0MztcdFx0XHRyZHNfY29ubl9nZXQoY29ubik7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChjb25uKVxuQEAgLTIxNSw2ICYjNDM7MjMzLDcgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqX19yZHNfY29ubl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjNDM7XHRrcmVmX2luaXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50KTtcbiBcdElOSVRfSExJU1RfTk9ERShcdTAwMjZjb25uLVx1MDAzZWNfaGFzaF9ub2RlKTtcbiBcdGNvbm4tXHUwMDNlY19sYWRkciA9ICpsYWRkcjtcbiBcdGNvbm4tXHUwMDNlY19pc3Y2ID0gIWlwdjZfYWRkcl92NG1hcHBlZChsYWRkcik7XG5AQCAtMjgyLDggJiM0MzszMDEsOSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgIGlzX291dGdvaW5nKTtcbiBcdFx0Y29ubi1cdTAwM2VjX3BhdGhbaV0uY3BfaW5kZXggPSBpO1xuIFx0XHRjb25uLVx1MDAzZWNfcGF0aFtpXS5jcF93cSA9XG4tXHRcdFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCYjMzQ7a3Jkc19jcF93cSMlbHUvJWRcJiMzNDssIDAsXG4tXHRcdFx0XHRcdFx0cmRzX2Nvbm5fY291bnQsIGkpO1xuJiM0MztcdFx0XHRhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDtrcmRzX2NwX3dxIyVkLyVkXCYjMzQ7LCAwLFxuJiM0MztcdFx0XHRcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZ0cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpLFxuJiM0MztcdFx0XHRcdFx0XHRpKTtcbiBcdFx0aWYgKCFjb25uLVx1MDAzZWNfcGF0aFtpXS5jcF93cSlcbiBcdFx0XHRjb25uLVx1MDAzZWNfcGF0aFtpXS5jcF93cSA9IHJkc193cTtcbiBcdH1cbkBAIC0zMTUsMTUgJiM0MzszMzUsMzUgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqX19yZHNfY29ubl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuIFx0aWYgKHBhcmVudCkge1xuIFx0XHQvKiBDcmVhdGluZyBwYXNzaXZlIGNvbm4gKi9cbi1cdFx0aWYgKHBhcmVudC1cdTAwM2VjX3Bhc3NpdmUpIHtcbiYjNDM7XHRcdGlmIChSRUFEX09OQ0UocGFyZW50LVx1MDAzZWNfZGVzdHJveV9pbl9wcm9nKSkge1xuJiM0MztcdFx0XHQvKiBUaGUgcGFyZW50JiMzOTtzIGRlc3Ryb3kgaGFzIGJlZ3VuIChpdCBzZXRzIHRoZVxuJiM0MztcdFx0XHQgKiBmbGFnIGFuZCBzbmF0Y2hlcyBjX3Bhc3NpdmUgdW5kZXIgdGhpc1xuJiM0MztcdFx0XHQgKiBsb2NrKTsgZG8gbm90IGluc3RhbGwgYSBuZXcgcGFzc2l2ZSBjb25uXG4mIzQzO1x0XHRcdCAqIHRoYXQgbm90aGluZyB3b3VsZCBldmVyIGRlc3Ryb3kuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR0cmFucy1cdTAwM2Vjb25uX2ZyZWUoY29ubi1cdTAwM2VjX3BhdGhbMF0uY3BfdHJhbnNwb3J0X2RhdGEpO1xuJiM0MztcdFx0XHRmcmVlX2NwID0gY29ubi1cdTAwM2VjX3BhdGg7XG4mIzQzO1x0XHRcdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcbiYjNDM7XHRcdFx0Y29ubiA9IEVSUl9QVFIoLUVORVRET1dOKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAocGFyZW50LVx1MDAzZWNfcGFzc2l2ZSkge1xuJiM0MztcdFx0XHRyZHNfY29ubl9nZXQocGFyZW50LVx1MDAzZWNfcGFzc2l2ZSk7XG4gXHRcdFx0dHJhbnMtXHUwMDNlY29ubl9mcmVlKGNvbm4tXHUwMDNlY19wYXRoWzBdLmNwX3RyYW5zcG9ydF9kYXRhKTtcbiBcdFx0XHRmcmVlX2NwID0gY29ubi1cdTAwM2VjX3BhdGg7XG4gXHRcdFx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xuIFx0XHRcdGNvbm4gPSBwYXJlbnQtXHUwMDNlY19wYXNzaXZlO1xuIFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKiBUaGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyXG4mIzQzO1x0XHRcdCAqIGRlc3Ryb3lzIHRoZSBjb25uICh0aGUgdHJhbnNwb3J0JiMzOTtzIGNvbm5cbiYjNDM7XHRcdFx0ICogbGlzdHMsIGFzIGZvciBhbnkgb3RoZXIgY29ubikuICBUYWtlIG9uZVxuJiM0MztcdFx0XHQgKiBmb3IgdGhlIGNfcGFzc2l2ZSBwb2ludGVyIC0gZHJvcHBlZCB3aGVuXG4mIzQzO1x0XHRcdCAqIHRoZSBwYXJlbnQgaXMgZGVzdHJveWVkIC0gYW5kIG9uZSBmb3Igb3VyXG4mIzQzO1x0XHRcdCAqIGNhbGxlci5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHJkc19jb25uX2dldChjb25uKTtcdC8qIGNfcGFzc2l2ZSAqL1xuJiM0MztcdFx0XHRyZHNfY29ubl9nZXQoY29ubik7XHQvKiBjYWxsZXIgKi9cbiBcdFx0XHRwYXJlbnQtXHUwMDNlY19wYXNzaXZlID0gY29ubjtcbiBcdFx0XHRyZHNfY29uZ19hZGRfY29ubihjb25uKTtcbi1cdFx0XHRyZHNfY29ubl9jb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGF0b21pY19pbmMoXHUwMDI2Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfY29ubl9jb3VudCk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdC8qIENyZWF0aW5nIG5vcm1hbCBjb25uICovXG5AQCAtMzUwLDE1ICYjNDM7MzkwLDIxIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRjb25uLVx1MDAzZWNfbXlfZ2VuX251bSA9IHJkc19nZW5fbnVtO1xuIFx0XHRcdGNvbm4tXHUwMDNlY19wZWVyX2dlbl9udW0gPSAwO1xuJiM0MztcdFx0XHQvKiB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyXG4mIzQzO1x0XHRcdCAqIGRlc3Ryb3lzIHRoZSBjb25uOyB0YWtlIG9uZSBmb3Igb3VyIGNhbGxlclxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xuIFx0XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZjb25uLVx1MDAzZWNfaGFzaF9ub2RlLCBoZWFkKTtcbiBcdFx0XHRyZHNfY29uZ19hZGRfY29ubihjb25uKTtcbi1cdFx0XHRyZHNfY29ubl9jb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGF0b21pY19pbmMoXHUwMDI2Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfY29ubl9jb3VudCk7XG4gXHRcdH1cbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gb3V0OlxuJiM0MztcdGlmIChwYXJlbnQpXG4mIzQzO1x0XHRyZHNfY29ubl9wdXQocGFyZW50KTtcbiBcdGlmIChmcmVlX2NwKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYXRoczsgaSYjNDM7JiM0MzspXG4gXHRcdFx0aWYgKGZyZWVfY3BbaV0uY3Bfd3EgIT0gcmRzX3dxKVxuQEAgLTUxNSwxMCAmIzQzOzU2MSwxMiBAQCB2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fc2xvdHNfYXZhaWxhYmxlKGNvbm4sIGZhbHNlKTtcbiB9XG4gXG4tLyogZGVzdHJveSBhIHNpbmdsZSByZHNfY29ubl9wYXRoLiByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlclxuLSAqIGFsbCBwYXRocyB1c2luZyByZHNfY29ubl9wYXRoX2Rlc3Ryb3koKVxuJiM0MzsvKiBxdWllc2NlIGEgc2luZ2xlIHJkc19jb25uX3BhdGg6IHNodXQgaXQgZG93biBhbmQgdGVhciBkb3duIGFueVxuJiM0MzsgKiBxdWV1ZWQgbWVzc2FnZXMuICByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlciBhbGwgcGF0aHMgdXNpbmdcbiYjNDM7ICogcmRzX2Nvbm5fcGF0aF9xdWllc2NlKCk7IHRoZSB0cmFuc3BvcnQgc3RhdGUgYW5kIHRoZSB3b3JrcXVldWUgYXJlXG4mIzQzOyAqIGZyZWVkIGxhdGVyLCBmcm9tIHJkc19jb25uX3BhdGhfZnJlZSgpLlxuICAqL1xuLXN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4mIzQzO3N0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfcXVpZXNjZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4ge1xuIFx0c3RydWN0IHJkc19tZXNzYWdlICpybSwgKnJ0bXA7XG4gXG5AQCAtNTQ3LDYgJiM0Mzs1OTUsMTYgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFdBUk5fT04oZGVsYXllZF93b3JrX3BlbmRpbmcoXHUwMDI2Y3AtXHUwMDNlY3BfcmVjdl93KSk7XG4gXHRXQVJOX09OKGRlbGF5ZWRfd29ya19wZW5kaW5nKFx1MDAyNmNwLVx1MDAzZWNwX2Nvbm5fdykpO1xuIFx0V0FSTl9PTih3b3JrX3BlbmRpbmcoXHUwMDI2Y3AtXHUwMDNlY3BfZG93bl93KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGZyZWUgYSBxdWllc2NlZCByZHNfY29ubl9wYXRoJiMzOTtzIHRyYW5zcG9ydCBzdGF0ZSBhbmQgd29ya3F1ZXVlOyBydW5zXG4mIzQzOyAqIGZyb20gcmRzX2Nvbm5fZGVzdHJveV9maW5pKCkgb25jZSB0aGUgbGFzdCBjb25uZWN0aW9uIHJlZmVyZW5jZSBpc1xuJiM0MzsgKiBkcm9wcGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9mcmVlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiYjNDM7e1xuJiM0MztcdGlmICghY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGEpXG4mIzQzO1x0XHRyZXR1cm47XG4gXG4gXHRpZiAoY3AtXHUwMDNlY3Bfd3EgIT0gcmRzX3dxKSB7XG4gXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGNwLVx1MDAzZWNwX3dxKTtcbkBAIC01NTYsMTcgJiM0Mzs2MTQsNzQgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdGNwLVx1MDAzZWNwX2Nvbm4tXHUwMDNlY190cmFucy1cdTAwM2Vjb25uX2ZyZWUoY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGEpO1xuIH1cbiBcbiYjNDM7LyogRnJlZSBhIGNvbm5lY3Rpb24uICBUaGlzIHJ1bnMgZnJvbSByZHNfY29ubl9wdXQoKSB3aGVuIHRoZSBsYXN0XG4mIzQzOyAqIHJlZmVyZW5jZSBpcyBkcm9wcGVkLCBhZnRlciByZHNfY29ubl9kZXN0cm95KCkgaGFzIHF1aWVzY2VkIHRoZVxuJiM0MzsgKiBjb25uZWN0aW9uIGFuZCBkcm9wcGVkIHRoZSBpbml0aWFsIHJlZmVyZW5jZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJkc19jb25uX2Rlc3Ryb3lfZmluaShzdHJ1Y3Qga3JlZiAqa3JlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGNfcmVmY291bnQpO1xuJiM0MztcdGludCBucGF0aHMgPSAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7XG4mIzQzO1x0c3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zID0gY29ubi1cdTAwM2VjX3RyYW5zO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGF0aHM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0cmRzX2Nvbm5fcGF0aF9mcmVlKFx1MDAyNmNvbm4tXHUwMDNlY19wYXRoW2ldKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUoY29ubi1cdTAwM2VjX3BhdGgpO1xuJiM0MztcdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcbiYjNDM7XG4mIzQzO1x0Lyogb25seSBhZnRlciBldmVyeXRoaW5nIHRoZSB0cmFuc3BvcnQgbW9kdWxlIG93bnMgaGFzIGJlZW5cbiYjNDM7XHQgKiBmcmVlZCBhYm92ZSBtYXkgaXRzIHVubG9hZCBwcm9jZWVkXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFhdG9taWNfZGVjX3JldHVybihcdTAwMjZ0cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpKVxuJiM0MztcdFx0d2FrZV91cF9hbGwoXHUwMDI2cmRzX2Nvbm5fZnJlZWRfd2FpdHEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBXYWl0IGZvciBhbGwgb2YgQHRyYW5zJiMzOTtzIGNvbm5lY3Rpb25zIHRvIGJlIGZyZWVkOyB0aGUgZnJlZSBydW5zXG4mIzQzOyAqIGFzeW5jaHJvbm91c2x5IG9uY2UgcmRzX2Nvbm5fZGVzdHJveSgpIGhhcyBxdWllc2NlZCBhIGNvbm5lY3Rpb24uXG4mIzQzOyAqIENhbGxlZCBvbiB0cmFuc3BvcnQgbW9kdWxlIHVubG9hZCwgYWZ0ZXIgdGhlIHRyYW5zcG9ydCBkZXN0cm95ZWRcbiYjNDM7ICogYWxsIG9mIGl0cyBjb25uZWN0aW9uczogYW55dGhpbmcgc3RpbGwgaG9sZGluZyBhIGNvbm5lY3Rpb25cbiYjNDM7ICogcmVmZXJlbmNlIGF0IHRoYXQgcG9pbnQgaXMgYSBzaG9ydC1saXZlZCBsb29rdXAtc3R5bGUgaG9sZGVyLCBzb1xuJiM0MzsgKiBhIGJvdW5kZWQgd2FpdCBzdWZmaWNlcyAtIGJ1dCB3YXJuIGlmIGl0IGV4cGlyZXMsIHNpbmNlIHRoZSBmcmVlc1xuJiM0MzsgKiB0aGF0IGZvbGxvdyB0aGUgdW5sb2FkIHdpbGwgdGhlbiB0b3VjaCBmcmVlZCBtb2R1bGUgdGV4dC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChyZHNfY29ubl9mcmVlZF93YWl0cSxcbiYjNDM7XHRcdFx0XHQhYXRvbWljX3JlYWQoXHUwMDI2dHJhbnMtXHUwMDNldF9jb25uX2NvdW50KSxcbiYjNDM7XHRcdFx0XHRtc2Vjc190b19qaWZmaWVzKFJEU19DT05OX0ZSRUVfVElNRU9VVF9NUykpKVxuJiM0MztcdFx0V0FSTigxLCBcJiMzNDtSRFMvJXM6ICVkIGNvbm5lY3Rpb24ocykgbm90IGZyZWVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICB0cmFucy1cdTAwM2V0X25hbWUsIGF0b21pY19yZWFkKFx1MDAyNnRyYW5zLVx1MDAzZXRfY29ubl9jb3VudCkpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQpO1xuJiM0MztcbiYjNDM7dm9pZCByZHNfY29ubl9nZXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuJiM0Mzt7XG4mIzQzO1x0a3JlZl9nZXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9nZXQpO1xuJiM0MztcbiYjNDM7dm9pZCByZHNfY29ubl9wdXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuJiM0Mzt7XG4mIzQzO1x0a3JlZl9wdXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50LCByZHNfY29ubl9kZXN0cm95X2ZpbmkpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX3B1dCk7XG4mIzQzO1xuIC8qXG4gICogU3RvcCBhbmQgZnJlZSBhIGNvbm5lY3Rpb24uXG4gICpcbi0gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gdmVyeSBsaW1pdGVkIGNpcmN1bXN0YW5jZXMuICBJdCBhc3N1bWVzIHRoYXQgb25jZVxuLSAqIHRoZSBjb25uIGhhcyBiZWVuIHNodXRkb3duIHRoYXQgbm8gb25lIGVsc2UgaXMgcmVmZXJlbmNpbmcgdGhlIGNvbm5lY3Rpb24uXG4tICogV2UgY2FuIG9ubHkgZW5zdXJlIHRoaXMgaW4gdGhlIHJtbW9kIHBhdGggaW4gdGhlIGN1cnJlbnQgY29kZS5cbiYjNDM7ICogUXVpZXNjZXMgdGhlIGNvbm5lY3Rpb24gc3luY2hyb25vdXNseSAod29ya2VycyBjYW5jZWxsZWQsIHRyYW5zcG9ydFxuJiM0MzsgKiBjb25uZWN0aW9ucyBzaHV0IGRvd24sIHF1ZXVlZCBtZXNzYWdlcyBkcm9wcGVkKSBhbmQgZHJvcHMgdGhlXG4mIzQzOyAqIGluaXRpYWwgcmVmZXJlbmNlLiAgVGhlIG1lbW9yeSAtIGluY2x1ZGluZyB0aGUgdHJhbnNwb3J0JiMzOTtzXG4mIzQzOyAqIHBlci1jb25uZWN0aW9uIHN0YXRlIGFuZCB0aGUgcGF0aCB3b3JrcXVldWVzIC0gaXMgZnJlZWQgb25jZSB0aGVcbiYjNDM7ICogbGFzdCByZHNfY29ubl9wdXQoKSBydW5zLCB3aGljaCBtYXkgYmUgYWZ0ZXIgdGhpcyByZXR1cm5zLlxuICAqL1xuIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBpO1xuJiM0MztcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcGFzc2l2ZTtcbiBcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcDtcbiBcdGludCBucGF0aHMgPSAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7XG4gXG5AQCAtNTc0LDE2ICYjNDM7Njg5LDQ2IEBAIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4gXHRcdCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBjb25uLCBcdTAwMjZjb25uLVx1MDAzZWNfbGFkZHIsXG4gXHRcdCBcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIpO1xuIFxuLVx0LyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi9cbiYjNDM7XHQvKiBNYWtlIHJkc19kZXN0cm95X3BlbmRpbmcoKSB0cnVlIGZvciB0aGlzIGNvbm4uICBUb2dldGhlciB3aXRoXG4mIzQzO1x0ICogdGhlIHN5bmNocm9uaXplX3JjdSgpIGJlbG93IHRoaXMgc3RvcHMgdGhlIHdvcmstcmVxdWV1ZWluZ1xuJiM0MztcdCAqIHNpdGVzICh3aGljaCBhbGwgdGVzdCByZHNfZGVzdHJveV9wZW5kaW5nKCkgdW5kZXJcbiYjNDM7XHQgKiByY3VfcmVhZF9sb2NrKCkpIGZyb20gcXVldWVpbmcgbmV3IHdvcmsgb24gdGhlIHBhdGhcbiYjNDM7XHQgKiB3b3JrcXVldWVzIG9uY2Ugd2Ugc3RhcnQgY2FuY2VsbGluZyBhbmQgZGVzdHJveWluZyB0aGVtLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm93IHRoYXQgdGhlIHRyYW5zcG9ydCBzdGF0ZSBzdGF5cyBkaXNjb3ZlcmFibGUgKGUuZy4gb24gdGhlXG4mIzQzO1x0ICogdHJhbnNwb3J0cyYjMzk7IGNvbm5lY3Rpb24gbGlzdHMpIHVudGlsIHRoZSBmaW5hbCByZHNfY29ubl9wdXQoKSxcbiYjNDM7XHQgKiBhIGNvbm4gY2FuIGJlIGhhbmRlZCB0byByZHNfY29ubl9kZXN0cm95KCkgbW9yZSB0aGFuIG9uY2UgLVxuJiM0MztcdCAqIGUuZy4gZHJvcHBlZCBmb3IgYSBwcm90b2NvbCB2ZXJzaW9uIG1pc21hdGNoIGFuZCB0aGVuIGZvdW5kXG4mIzQzO1x0ICogYWdhaW4gYXQgbW9kdWxlIHVubG9hZC4gIE9ubHkgdGhlIGZpcnN0IGNhbGxlciBwcm9jZWVkczsgdGhlXG4mIzQzO1x0ICogdW5oYXNoIGFsc28gaGFwcGVucyB1bmRlciByZHNfY29ubl9sb2NrLCBzbyBhIGxvb2tlZC11cCBjb25uXG4mIzQzO1x0ICogY2FuIG5ldmVyIGJlIHF1aWVzY2VkIHR3aWNlLlxuJiM0MztcdCAqL1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZyZHNfY29ubl9sb2NrKTtcbiYjNDM7XHRpZiAoY29ubi1cdTAwM2VjX2Rlc3Ryb3lfaW5fcHJvZykge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJkc19jb25uX2xvY2spO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRXUklURV9PTkNFKGNvbm4tXHUwMDNlY19kZXN0cm95X2luX3Byb2csIHRydWUpO1xuJiM0MztcbiYjNDM7XHQvKiBFbnN1cmUgY29ubiB3aWxsIG5vdCBiZSBzY2hlZHVsZWQgZm9yIHJlY29ubmVjdCAqL1xuIFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNmNvbm4tXHUwMDNlY19oYXNoX25vZGUpO1xuJiM0MztcbiYjNDM7XHQvKiBTbmF0Y2ggY19wYXNzaXZlIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2s6XG4mIzQzO1x0ICogX19yZHNfY29ubl9jcmVhdGUoKSBkZXJlZmVyZW5jZXMgaXQgdW5kZXIgcmN1X3JlYWRfbG9jaygpXG4mIzQzO1x0ICogKGFuZCByZWZ1c2VzIHRvIGluc3RhbGwgYSBuZXcgb25lIG9uY2UgY19kZXN0cm95X2luX3Byb2cgaXNcbiYjNDM7XHQgKiBzZXQsIHdoaWNoIGl0IGNoZWNrcyB1bmRlciB0aGlzIGxvY2spLiAgQWZ0ZXIgdGhlXG4mIzQzO1x0ICogc3luY2hyb25pemVfcmN1KCkgYmVsb3cgbm8gb25lIGNhbiBwaWNrIHRoZSBwb2ludGVyIHVwIGFueVxuJiM0MztcdCAqIG1vcmUgYW5kIGl0cyByZWZlcmVuY2UgY2FuIGJlIGRyb3BwZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGFzc2l2ZSA9IGNvbm4tXHUwMDNlY19wYXNzaXZlO1xuJiM0MztcdGNvbm4tXHUwMDNlY19wYXNzaXZlID0gTlVMTDtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyZHNfY29ubl9sb2NrKTtcbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0Lyogc2h1dCB0aGUgY29ubmVjdGlvbiBkb3duICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGF0aHM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGNwID0gXHUwMDI2Y29ubi1cdTAwM2VjX3BhdGhbaV07XG4tXHRcdHJkc19jb25uX3BhdGhfZGVzdHJveShjcCk7XG4mIzQzO1x0XHRyZHNfY29ubl9wYXRoX3F1aWVzY2UoY3ApO1xuIFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2Y3AtXHUwMDNlY3BfcmV0cmFucykpO1xuIFx0fVxuIFxuQEAgLTU5NCwxMiAmIzQzOzczOSwxNCBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIFx0ICovXG4gXHRyZHNfY29uZ19yZW1vdmVfY29ubihjb25uKTtcbiBcbi1cdGtmcmVlKGNvbm4tXHUwMDNlY19wYXRoKTtcbi1cdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcbiYjNDM7XHQvKiBkcm9wIHRoZSByZWZlcmVuY2Ugb3VyIGNfcGFzc2l2ZSBwb2ludGVyIGhlbGQsIGlmIGFueSAqL1xuJiM0MztcdGlmIChwYXNzaXZlKVxuJiM0MztcdFx0cmRzX2Nvbm5fcHV0KHBhc3NpdmUpO1xuIFxuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuLVx0cmRzX2Nvbm5fY291bnQtLTtcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuJiM0MztcdC8qIGRyb3AgdGhlIGluaXRpYWwgcmVmZXJlbmNlOyB0aGUgY29ubmVjdGlvbiBpcyBmcmVlZCBmcm9tXG4mIzQzO1x0ICogcmRzX2Nvbm5fZGVzdHJveV9maW5pKCkgb25jZSBldmVyeSBob2xkZXIgaGFzIGRyb3BwZWQgdGhlaXJzXG4mIzQzO1x0ICovXG4mIzQzO1x0cmRzX2Nvbm5fcHV0KGNvbm4pO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9kZXN0cm95KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmMgYi9uZXQvcmRzL2liLmNcbmluZGV4IDc4NmYzOTE2OWJjMTQuLjc1NTY5MDU4MzMyNTkgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2liLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWIuY1xuQEAgLTUyNSwxMCAmIzQzOzUyNSw3IEBAIHN0YXRpYyB2b2lkIHJkc19pYl9zZXRfdW5sb2FkaW5nKHZvaWQpXG4gXG4gc3RhdGljIGJvb2wgcmRzX2liX2lzX3VubG9hZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwID0gXHUwMDI2Y29ubi1cdTAwM2VjX3BhdGhbMF07XG4tXG4tXHRyZXR1cm4gKHRlc3RfYml0KFJEU19ERVNUUk9ZX1BFTkRJTkcsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSB8fFxuLVx0XHRhdG9taWNfcmVhZChcdTAwMjZyZHNfaWJfdW5sb2FkaW5nKSAhPSAwKTtcbiYjNDM7XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cmRzX2liX3VubG9hZGluZykgIT0gMDtcbiB9XG4gXG4gdm9pZCByZHNfaWJfZXhpdCh2b2lkKVxuQEAgLTU0MSw2ICYjNDM7NTM4LDE1IEBAIHZvaWQgcmRzX2liX2V4aXQodm9pZClcbiAjZW5kaWZcbiBcdHJkc19pYl91bnJlZ2lzdGVyX2NsaWVudCgpO1xuIFx0cmRzX2liX2Rlc3Ryb3lfbm9kZXZfY29ubnMoKTtcbiYjNDM7XHRyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKFx1MDAyNnJkc19pYl90cmFuc3BvcnQpO1xuJiM0MztcbiYjNDM7XHQvKiBUZWFyaW5nIGRvd24gdGhlIGxhc3QgY29ubmVjdGlvbiBtYXkgaGF2ZSBkcm9wcGVkIHRoZSBmaW5hbFxuJiM0MztcdCAqIHJlZmVyZW5jZSBvbiBhIGRldmljZSwgZGVmZXJyaW5nIHJkc19pYl9kZXZfZnJlZSgpIHRvIHJkc193cS5cbiYjNDM7XHQgKiBEcmFpbiBpdCBiZWZvcmUgdGhlIG1vZHVsZSBnb2VzIGF3YXk7IGl0IHF1ZXVlcyBub3RoaW5nXG4mIzQzO1x0ICogZnVydGhlciBvbiByZHNfd3EuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zmx1c2hfd29ya3F1ZXVlKHJkc193cSk7XG4mIzQzO1xuIFx0cmRzX2liX3N5c2N0bF9leGl0KCk7XG4gXHRyZHNfaWJfcmVjdl9leGl0KCk7XG4gXHRyZHNfdHJhbnNfdW5yZWdpc3RlcihcdTAwMjZyZHNfaWJfdHJhbnNwb3J0KTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmNcbmluZGV4IDRmZWIwZWRjMzYwYzguLjI0ZTUzOGMyNTNhN2EgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2liX2NtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWJfY20uY1xuQEAgLTkyNCw4ICYjNDM7OTI0LDE0IEBAIGludCByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLFxuIFx0XHRyZHNfaWJfY29ubl9lcnJvcihjb25uLCBcJiMzNDtyZG1hX2FjY2VwdCBmYWlsZWRcXG5cJiMzNDspO1xuIFxuIG91dDpcbi1cdGlmIChjb25uKVxuJiM0MztcdGlmIChjb25uKSB7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZjb25uLVx1MDAzZWNfY21fbG9jayk7XG4mIzQzO1x0XHQvKiBUaGUgY29ubiBzdGF5cyByZWFjaGFibGUgdGhyb3VnaCBjbV9pZC1cdTAwM2Vjb250ZXh0XG4mIzQzO1x0XHQgKiB3aXRob3V0IGEgcmVmZXJlbmNlIG9mIGl0cyBvd246IGNvbm5lY3Rpb24gZGVzdHJveVxuJiM0MztcdFx0ICogc2h1dHMgdGhlIGNtX2lkIGRvd24gYmVmb3JlIHRoZSBjb25uIGlzIGZyZWVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZHNfY29ubl9wdXQoY29ubik7XG4mIzQzO1x0fVxuIFx0aWYgKGVycilcbiBcdFx0cmRtYV9yZWplY3QoY21faWQsIFx1MDAyNmVyciwgc2l6ZW9mKGludCksXG4gXHRcdFx0ICAgIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVEKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2xvb3AuYyBiL25ldC9yZHMvbG9vcC5jXG5pbmRleCBlNmIwNzUwYmJlZGFiLi43ZGFmOGVkMjVkNjlhIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9sb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvbG9vcC5jXG5AQCAtMTk1LDYgJiM0MzsxOTUsOCBAQCB2b2lkIHJkc19sb29wX2V4aXQodm9pZClcbiBcdFx0V0FSTl9PTihsYy1cdTAwM2Vjb25uLVx1MDAzZWNfcGFzc2l2ZSk7XG4gXHRcdHJkc19jb25uX2Rlc3Ryb3kobGMtXHUwMDNlY29ubik7XG4gXHR9XG4mIzQzO1xuJiM0MztcdHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoXHUwMDI2cmRzX2xvb3BfdHJhbnNwb3J0KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmRzX2xvb3Bfa2lsbF9jb25ucyhzdHJ1Y3QgbmV0ICpuZXQpXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuY1xuaW5kZXggZjI1ZjI1OTI1ODZmNy4uMjllOTUwMjhlNjFlNCAxMDA2NDRcbi0tLSBhL25ldC9yZHMvbWVzc2FnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL21lc3NhZ2UuY1xuQEAgLTE4Miw2ICYjNDM7MTgyLDE4IEBAIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4gXHRcdGtyZWZfcHV0KFx1MDAyNnJtLVx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX2ZyZWUoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiYjNDM7e1xuJiM0MztcdC8qIGdldCBpbiByZHNfc2VuZF9xdWV1ZV9ybSgpLCByZHNfc2VuZF9wcm9iZSgpIG9yIHRoZSBjb25nZXN0aW9uXG4mIzQzO1x0ICogbWFwIHBhdGggb2YgcmRzX3NlbmRfeG1pdCgpLiAgTWVzc2FnZXMgdGhhdCB3ZXJlIG5ldmVyIHF1ZXVlZCBvblxuJiM0MztcdCAqIGEgY29ubmVjdGlvbiBoYXZlIG5vIHJlZmVyZW5jZSB0byBkcm9wLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChybS1cdTAwM2VtX2luYy5pX2Nvbm4pXG4mIzQzO1x0XHRyZHNfY29ubl9wdXQocm0tXHUwMDNlbV9pbmMuaV9jb25uKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUocm0pO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXG5AQCAtMTkyLDcgJiM0MzsyMDQsNyBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV91bnBpbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0aWYgKHJtLVx1MDAzZWF0b21pYy5vcF91bnBpbl9kZWZlcnJlZClcbiBcdFx0cmRzX2F0b21pY19vcF91bnBpbl9wYWdlKFx1MDAyNnJtLVx1MDAzZWF0b21pYyk7XG4gXG4tXHRrZnJlZShybSk7XG4mIzQzO1x0cmRzX21lc3NhZ2VfZnJlZShybSk7XG4gfVxuIFxuIHZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG5AQCAtMjE3LDcgJiM0MzsyMjksNyBAQCB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHRrZnJlZShybSk7XG4mIzQzO1x0XHRyZHNfbWVzc2FnZV9mcmVlKHJtKTtcbiBcdH1cbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocmRzX21lc3NhZ2VfcHV0KTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaFxuaW5kZXggMmRiNDk1NzNkYWNkNS4uMzU3NjBkZDZiMDc3ZiAxMDA2NDRcbi0tLSBhL25ldC9yZHMvcmRzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRzLmhcbkBAIC04OSw3ICYjNDM7ODksNiBAQCBlbnVtIHtcbiAjZGVmaW5lIFJEU19SRUNPTk5FQ1RfUEVORElOR1x0MVxuICNkZWZpbmUgUkRTX0lOX1hNSVRcdFx0MlxuICNkZWZpbmUgUkRTX1JFQ1ZfUkVGSUxMXHRcdDNcbi0jZGVmaW5lXHRSRFNfREVTVFJPWV9QRU5ESU5HXHQ0XG4gXG4gLyogTWF4IG51bWJlciBvZiBtdWx0aXBhdGhzIHBlciBSRFMgY29ubmVjdGlvbi4gTXVzdCBiZSBhIHBvd2VyIG9mIDIgKi9cbiAjZGVmaW5lXHRSRFNfTVBBVEhfV09SS0VSU1x0OFxuQEAgLTEzOCw2ICYjNDM7MTM3LDEyIEBAIHN0cnVjdCByZHNfY29ubl9wYXRoIHtcbiAvKiBPbmUgcmRzX2Nvbm5lY3Rpb24gcGVyIFJEUyBhZGRyZXNzIHBhaXIgKi9cbiBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24ge1xuIFx0c3RydWN0IGhsaXN0X25vZGVcdGNfaGFzaF9ub2RlO1xuJiM0MztcdC8qIEZyZWUgb2YgdGhlIGNvbm5lY3Rpb24gbWVtb3J5IChub3QgdGhlIHRlYXJkb3duIG9mIGl0c1xuJiM0MztcdCAqIHRyYW5zcG9ydCBzdGF0ZSAtIHRoYXQgc3RheXMgc3luY2hyb25vdXMgaW5cbiYjNDM7XHQgKiByZHNfY29ubl9kZXN0cm95KCkpIGlzIGRlZmVycmVkIHVudGlsIHRoZSBsYXN0IHJlZmVyZW5jZSBpc1xuJiM0MztcdCAqIGRyb3BwZWQgdmlhIHJkc19jb25uX3B1dCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBrcmVmXHRcdGNfcmVmY291bnQ7XG4gXHRzdHJ1Y3QgaW42X2FkZHJcdFx0Y19sYWRkcjtcbiBcdHN0cnVjdCBpbjZfYWRkclx0XHRjX2ZhZGRyO1xuIFx0aW50XHRcdFx0Y19kZXZfaWY7IC8qIGlmaW5kZXggdXNlZCBmb3IgdGhpcyBjb25uICovXG5AQCAtMTQ4LDYgJiM0MzsxNTMsMTAgQEAgc3RydWN0IHJkc19jb25uZWN0aW9uIHtcbiBcdFx0XHRcdGNfcGFkX3RvXzMyOjI5O1xuIFx0aW50XHRcdFx0Y19ucGF0aHM7XG4gXHRib29sXHRcdFx0Y193aXRoX3Nwb3J0X2lkeDtcbiYjNDM7XHQvKiBTZXQgKHVuZGVyIFJDVSkgd2hlbiByZHNfY29ubl9kZXN0cm95KCkgc3RhcnRzIG9uIHRoaXMgY29ubjtcbiYjNDM7XHQgKiByZWFkIHRocm91Z2ggcmRzX2Rlc3Ryb3lfcGVuZGluZygpLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2xcdFx0XHRjX2Rlc3Ryb3lfaW5fcHJvZztcbiBcdHN0cnVjdCByZHNfY29ubmVjdGlvblx0KmNfcGFzc2l2ZTtcbiBcdHN0cnVjdCByZHNfdHJhbnNwb3J0XHQqY190cmFucztcbiBcbkBAIC01NDQsNiAmIzQzOzU1MywxMiBAQCBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCB7XG4gXHR1bnNpZ25lZCBpbnRcdFx0dF9wcmVmZXJfbG9vcGJhY2s6MSxcbiBcdFx0XHRcdHRfbXBfY2FwYWJsZToxO1xuIFx0dW5zaWduZWQgaW50XHRcdHRfdHlwZTtcbiYjNDM7XHQvKiBDb25uZWN0aW9ucyBvZiB0aGlzIHRyYW5zcG9ydCBub3QgeWV0IGZyZWVkOyBmcmVlaW5nIHJ1bnNcbiYjNDM7XHQgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYVxuJiM0MztcdCAqIGNvbm5lY3Rpb24sIHNvIHRyYW5zcG9ydCBtb2R1bGUgdW5sb2FkIGhhcyB0byB3YWl0IGZvciB0aGlzXG4mIzQzO1x0ICogdG8gcmVhY2ggemVybyAocmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZCgpKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhdG9taWNfdFx0XHR0X2Nvbm5fY291bnQ7XG4gXG4gXHRpbnQgKCpsYWRkcl9jaGVjaykoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsXG4gXHRcdFx0ICAgX191MzIgc2NvcGVfaWQpO1xuQEAgLTgxOSw2ICYjNDM7ODM0LDExIEBAIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0XHR1OCB0b3MsIGdmcF90IGdmcCwgaW50IGRldl9pZik7XG4gdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3BhdGgpO1xuIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuJiM0Mzt2b2lkIHJkc19jb25uX2dldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuJiM0Mzt2b2lkIHJkc19jb25uX3B1dChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuJiM0MzsvKiBob3cgbG9uZyB0cmFuc3BvcnQgdW5sb2FkIHdhaXRzIGZvciBpdHMgY29ubmVjdGlvbnMgdG8gYmUgZnJlZWQgKi9cbiYjNDM7I2RlZmluZSBSRFNfQ09OTl9GUkVFX1RJTUVPVVRfTVNcdDEwMDAwXG4mIzQzO3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpO1xuIHZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIHZvaWQgcmRzX2Nvbm5fcGF0aF9kcm9wKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCwgYm9vbCBkZXN0cm95KTtcbiB2b2lkIHJkc19jb25uX2Nvbm5lY3RfaWZfZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuQEAgLTk5NCw3ICYjNDM7MTAxNCw4IEBAIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgcmRzX2Rlc3Ryb3lfcGVuZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0cmV0dXJuICFjaGVja19uZXQocmRzX2Nvbm5fbmV0KGNvbm4pKSB8fFxuJiM0MztcdHJldHVybiBSRUFEX09OQ0UoY29ubi1cdTAwM2VjX2Rlc3Ryb3lfaW5fcHJvZykgfHxcbiYjNDM7XHQgICAgICAgIWNoZWNrX25ldChyZHNfY29ubl9uZXQoY29ubikpIHx8XG4gXHQgICAgICAgKGNvbm4tXHUwMDNlY190cmFucy1cdTAwM2V0X3VubG9hZGluZyBcdTAwMjZcdTAwMjYgY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfdW5sb2FkaW5nKGNvbm4pKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZWN2LmMgYi9uZXQvcmRzL3JlY3YuY1xuaW5kZXggNjIwNGU1NzdhOTBhZS4uYjAzMWMwYjQzYWY4MyAxMDA2NDRcbi0tLSBhL25ldC9yZHMvcmVjdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3JlY3YuY1xuQEAgLTQ2LDYgJiM0Mzs0Niw3IEBAIHZvaWQgcmRzX2luY19pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLFxuIHtcbiBcdHJlZmNvdW50X3NldChcdTAwMjZpbmMtXHUwMDNlaV9yZWZjb3VudCwgMSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbmMtXHUwMDNlaV9pdGVtKTtcbiYjNDM7XHRyZHNfY29ubl9nZXQoY29ubik7XHQvKiBwdXQgaW4gcmRzX2luY19wdXQoKSAqL1xuIFx0aW5jLVx1MDAzZWlfY29ubiA9IGNvbm47XG4gXHRpbmMtXHUwMDNlaV9jb25uX3BhdGggPSBOVUxMO1xuIFx0aW5jLVx1MDAzZWlfc2FkZHIgPSAqc2FkZHI7XG5AQCAtNjEsNiAmIzQzOzYyLDcgQEAgdm9pZCByZHNfaW5jX3BhdGhfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCxcbiB7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2aW5jLVx1MDAzZWlfcmVmY291bnQsIDEpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5jLVx1MDAzZWlfaXRlbSk7XG4mIzQzO1x0cmRzX2Nvbm5fZ2V0KGNwLVx1MDAzZWNwX2Nvbm4pO1x0LyogcHV0IGluIHJkc19pbmNfcHV0KCkgKi9cbiBcdGluYy1cdTAwM2VpX2Nvbm4gPSBjcC1cdTAwM2VjcF9jb25uO1xuIFx0aW5jLVx1MDAzZWlfY29ubl9wYXRoID0gY3A7XG4gXHRpbmMtXHUwMDNlaV9zYWRkciA9ICpzYWRkcjtcbkBAIC04MSw5ICYjNDM7ODMsMTkgQEAgdm9pZCByZHNfaW5jX3B1dChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpXG4ge1xuIFx0cmRzZGVidWcoXCYjMzQ7cHV0IGluYyAlcCByZWYgJWRcXG5cJiMzNDssIGluYywgcmVmY291bnRfcmVhZChcdTAwMjZpbmMtXHUwMDNlaV9yZWZjb3VudCkpO1xuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZpbmMtXHUwMDNlaV9yZWZjb3VudCkpIHtcbiYjNDM7XHRcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGluYy1cdTAwM2VpX2Nvbm47XG4mIzQzO1xuIFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2aW5jLVx1MDAzZWlfaXRlbSkpO1xuIFxuLVx0XHRpbmMtXHUwMDNlaV9jb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNlaW5jX2ZyZWUoaW5jKTtcbiYjNDM7XHRcdC8qIGluY19mcmVlKCkgY2FuIGZyZWUgdGhlIG1lbW9yeSBAaW5jIGxpdmVzIGluLCBzbyB0aGVcbiYjNDM7XHRcdCAqIGNvbm5lY3Rpb24gcmVmZXJlbmNlIGhhcyB0byBiZSBkcm9wcGVkIHRocm91Z2ggdGhlXG4mIzQzO1x0XHQgKiBjb3B5IHRha2VuIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNlaW5jX2ZyZWUoaW5jKTtcbiYjNDM7XHRcdC8qIGdldCBpbiByZHNfaW5jX2luaXQoKSwgcmRzX2luY19wYXRoX2luaXQoKSBvclxuJiM0MztcdFx0ICogcmRzX3JlY3ZfaW5jb21pbmcoKVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZHNfY29ubl9wdXQoY29ubik7XG4gXHR9XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19pbmNfcHV0KTtcbkBAIC0zMjUsNiAmIzQzOzMzNywxMyBAQCB2b2lkIHJkc19yZWN2X2luY29taW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IGluNl9hZGRyICpzYWRkcixcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7XG4gXG4mIzQzO1x0LyogZXZlcnkgY2FsbGVyIGluaXRpYWxpemVkIEBpbmMgd2l0aCByZHNfaW5jX2luaXQoKSBvclxuJiM0MztcdCAqIHJkc19pbmNfcGF0aF9pbml0KCkgZmlyc3QsIHNvIGlfY29ubiBhbHJlYWR5IGhvbGRzIGEgcmVmZXJlbmNlLlxuJiM0MztcdCAqIFRha2UgdGhlIG5ldyBvbmUgYmVmb3JlIGRyb3BwaW5nIHRoZSBvbGQsIHNvIHRoYXQgcmUtcG9pbnRpbmcgYW5cbiYjNDM7XHQgKiBpbmMgYXQgdGhlIGNvbm5lY3Rpb24gaXQgYWxyZWFkeSByZWZlcnMgdG8gY2Fubm90IGZyZWUgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xuJiM0MztcdHJkc19jb25uX3B1dChpbmMtXHUwMDNlaV9jb25uKTtcbiBcdGluYy1cdTAwM2VpX2Nvbm4gPSBjb25uO1xuIFx0aW5jLVx1MDAzZWlfcnhfamlmZmllcyA9IGppZmZpZXM7XG4gXHRpZiAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSlcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxYWZhOTgxZTVjMDZkLi4wNDVlYjNjM2Y5NzcyIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMjkwLDYgJiM0MzsyOTAsNyBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRcdFx0fVxuIFx0XHRcdHJtLVx1MDAzZWRhdGEub3BfYWN0aXZlID0gMTtcbiBcdFx0XHRybS1cdTAwM2VtX2luYy5pX2Nvbm5fcGF0aCA9IGNwO1xuJiM0MztcdFx0XHRyZHNfY29ubl9nZXQoY3AtXHUwMDNlY3BfY29ubik7XHQvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi9cbiBcdFx0XHRybS1cdTAwM2VtX2luYy5pX2Nvbm4gPSBjcC1cdTAwM2VjcF9jb25uO1xuIFxuIFx0XHRcdGNwLVx1MDAzZWNwX3htaXRfcm0gPSBybTtcbkBAIC05NDcsNiAmIzQzOzk0OCw3IEBAIHN0YXRpYyBpbnQgcmRzX3NlbmRfcXVldWVfcm0oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLFxuIFx0XHQvKiBUaGUgY29kZSBvcmRlcmluZyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IHdlJiMzOTtyZVxuIFx0XHQgICB0cnlpbmcgdG8gbWluaW1pemUgdGhlIHRpbWUgd2UgaG9sZCBjX2xvY2sgKi9cbiBcdFx0cmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKFx1MDAyNnJtLVx1MDAzZW1faW5jLmlfaGRyLCBzcG9ydCwgZHBvcnQsIDApO1xuJiM0MztcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1x0LyogcHV0IGluIHJkc19tZXNzYWdlX3B1dCgpICovXG4gXHRcdHJtLVx1MDAzZW1faW5jLmlfY29ubiA9IGNvbm47XG4gXHRcdHJtLVx1MDAzZW1faW5jLmlfY29ubl9wYXRoID0gY3A7XG4gXHRcdHJkc19tZXNzYWdlX2FkZHJlZihybSk7XG5AQCAtMTE1OSwxMyAmIzQzOzExNjEsMTQgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuIFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgdXNpbiwgbXNnLVx1MDAzZW1zZ19uYW1lKTtcbiBcdF9fYmUxNiBkcG9ydDtcbiBcdHN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBOVUxMO1xuLVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uO1xuJiM0MztcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdGludCBxdWV1ZWQgPSAwLCBhbGxvY2F0ZWRfbXIgPSAwO1xuIFx0aW50IG5vbmJsb2NrID0gbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUO1xuIFx0bG9uZyB0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG5vbmJsb2NrKTtcbiBcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aDtcbiBcdHN0cnVjdCBpbjZfYWRkciBkYWRkcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0X191MzIgc2NvcGVfaWQgPSAwO1xuIFx0c2l6ZV90IHJkbWFfcGF5bG9hZF9sZW4gPSAwO1xuIFx0Ym9vbCB6Y29weSA9ICgobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1pFUk9DT1BZKSBcdTAwMjZcdTAwMjZcbkBAIC0xMzQwLDExICYjNDM7MTM0MywyOSBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXG4gXHRybS1cdTAwM2VtX2RhZGRyID0gZGFkZHI7XG4gXG4gXHQvKiByZHNfY29ubl9jcmVhdGUgaGFzIGEgc3BpbmxvY2sgdGhhdCBydW5zIHdpdGggSVJRIG9mZi5cbi1cdCAqIENhY2hpbmcgdGhlIGNvbm4gaW4gdGhlIHNvY2tldCBoZWxwcyBhIGxvdC4gKi9cbi1cdGlmIChycy1cdTAwM2Vyc19jb25uIFx1MDAyNlx1MDAyNiBpcHY2X2FkZHJfZXF1YWwoXHUwMDI2cnMtXHUwMDNlcnNfY29ubi1cdTAwM2VjX2ZhZGRyLCBcdTAwMjZkYWRkcikgXHUwMDI2XHUwMDI2XG4tXHQgICAgcnMtXHUwMDNlcnNfdG9zID09IHJzLVx1MDAzZXJzX2Nvbm4tXHUwMDNlY190b3MpIHtcbi1cdFx0Y29ubiA9IHJzLVx1MDAzZXJzX2Nvbm47XG4mIzQzO1x0ICogQ2FjaGluZyB0aGUgY29ubiBpbiB0aGUgc29ja2V0IGhlbHBzIGEgbG90LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIGNhY2hlZCByc19jb25uIGhvbGRzIGEgY29ubmVjdGlvbiByZWZlcmVuY2U7IHRha2Ugb25lIG9mXG4mIzQzO1x0ICogb3VyIG93biBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgY2FsbCAoZHJvcHBlZCBvbiBib3RoIGV4aXRcbiYjNDM7XHQgKiBwYXRocyksIHNvIHRoYXQgbmVpdGhlciBhIGNvbmN1cnJlbnQgc2VuZGVyIHJlcGxhY2luZyB0aGVcbiYjNDM7XHQgKiBjYWNoZSBub3IgcmRzX2Nvbm5fZGVzdHJveSgpIGNhbiBmcmVlIHRoZSBjb25uZWN0aW9uIHVuZGVyXG4mIzQzO1x0ICogdXMuICBBIGNhY2hlZCBjb25uZWN0aW9uIHdob3NlIGRlc3RydWN0aW9uIGhhcyBiZWd1biBpcyBub3RcbiYjNDM7XHQgKiByZXVzZWQ6IGRyb3BwaW5nIGl0IGhlcmUgbGV0cyB0aGUgbmV4dCBzZW5kbXNnIGxvb2sgdXAgb3JcbiYjNDM7XHQgKiBjcmVhdGUgYSBsaXZlIG9uZSBpbnN0ZWFkIG9mIHJldHVybmluZyAtRUFHQUlOIGZvcmV2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cnMtXHUwMDNlcnNfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGNvbm4gPSBycy1cdTAwM2Vyc19jb25uO1xuJiM0MztcdGlmIChjb25uIFx1MDAyNlx1MDAyNiBpcHY2X2FkZHJfZXF1YWwoXHUwMDI2Y29ubi1cdTAwM2VjX2ZhZGRyLCBcdTAwMjZkYWRkcikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHJzLVx1MDAzZXJzX3RvcyA9PSBjb25uLVx1MDAzZWNfdG9zIFx1MDAyNlx1MDAyNiAhcmRzX2Rlc3Ryb3lfcGVuZGluZyhjb25uKSkge1xuJiM0MztcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xuIFx0fSBlbHNlIHtcbiYjNDM7XHRcdGNvbm4gPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnJzLVx1MDAzZXJzX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjb25uKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKm9sZDtcbiYjNDM7XG4gXHRcdGNvbm4gPSByZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoc29ja19uZXQoc29jay1cdTAwM2VzayksXG4gXHRcdFx0XHRcdFx0XHUwMDI2cnMtXHUwMDNlcnNfYm91bmRfYWRkciwgXHUwMDI2ZGFkZHIsXG4gXHRcdFx0XHRcdFx0cnMtXHUwMDNlcnNfdHJhbnNwb3J0LCBycy1cdTAwM2Vyc190b3MsXG5AQCAtMTM1Miw5ICYjNDM7MTM3MywxNyBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXG4gXHRcdFx0XHRcdFx0c2NvcGVfaWQpO1xuIFx0XHRpZiAoSVNfRVJSKGNvbm4pKSB7XG4gXHRcdFx0cmV0ID0gUFRSX0VSUihjb25uKTtcbiYjNDM7XHRcdFx0Y29ubiA9IE5VTEw7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiYjNDM7XHRcdC8qIGhhbmQgdGhlIGNhY2hlIGl0cyBvd24gcmVmZXJlbmNlICovXG4mIzQzO1x0XHRyZHNfY29ubl9nZXQoY29ubik7XG4mIzQzO1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZycy1cdTAwM2Vyc19sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRvbGQgPSBycy1cdTAwM2Vyc19jb25uO1xuIFx0XHRycy1cdTAwM2Vyc19jb25uID0gY29ubjtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cnMtXHUwMDNlcnNfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKG9sZClcbiYjNDM7XHRcdFx0cmRzX2Nvbm5fcHV0KG9sZCk7XG4gXHR9XG4gXG4gXHRpZiAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSkge1xuQEAgLTE0NjksNiAmIzQzOzE0OTgsOCBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXG4gXHRcdGtmcmVlKHZjdC52ZWNbaW5kXS5pb3YpO1xuIFx0a2ZyZWUodmN0LnZlYyk7XG4gXG4mIzQzO1x0cmRzX2Nvbm5fcHV0KGNvbm4pO1xuJiM0MztcbiBcdHJldHVybiBwYXlsb2FkX2xlbjtcbiBcbiBvdXQ6XG5AQCAtMTQ3Niw2ICYjNDM7MTUwNyw5IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbiBcdFx0a2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7XG4gXHRrZnJlZSh2Y3QudmVjKTtcbiBcbiYjNDM7XHRpZiAoY29ubilcbiYjNDM7XHRcdHJkc19jb25uX3B1dChjb25uKTtcbiYjNDM7XG4gXHQvKiBJZiB0aGUgdXNlciBpbmNsdWRlZCBhIFJETUFfTUFQIGNtc2csIHdlIGFsbG9jYXRlZCBhIE1SIG9uIHRoZSBmbHkuXG4gXHQgKiBJZiB0aGUgc2VuZG1zZyBnb2VzIHRocm91Z2gsIHdlIGtlZXAgdGhlIE1SLiBJZiBpdCBmYWlscyB3aXRoIEVBR0FJTlxuIFx0ICogb3IgaW4gYW55IG90aGVyIHdheSwgd2UgbmVlZCB0byBkZXN0cm95IHRoZSBNUiBhZ2FpbiAqL1xuQEAgLTE1MjIsNiAmIzQzOzE1NTYsNyBAQCByZHNfc2VuZF9wcm9iZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AsIF9fYmUxNiBzcG9ydCxcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cm0tXHUwMDNlbV9jb25uX2l0ZW0sIFx1MDAyNmNwLVx1MDAzZWNwX3NlbmRfcXVldWUpO1xuIFx0c2V0X2JpdChSRFNfTVNHX09OX0NPTk4sIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpO1xuIFx0cmRzX21lc3NhZ2VfYWRkcmVmKHJtKTtcbiYjNDM7XHRyZHNfY29ubl9nZXQoY3AtXHUwMDNlY3BfY29ubik7XHQvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi9cbiBcdHJtLVx1MDAzZW1faW5jLmlfY29ubiA9IGNwLVx1MDAzZWNwX2Nvbm47XG4gXHRybS1cdTAwM2VtX2luYy5pX2Nvbm5fcGF0aCA9IGNwO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jXG5pbmRleCA3NzRhNzFmODhkMzc1Li4yNjg1ZWUyMWEyMmQxIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy90Y3AuY1xuQEAgLTgwNSw2ICYjNDM7ODA1LDcgQEAgc3RhdGljIHZvaWQgcmRzX3RjcF9leGl0KHZvaWQpXG4gI2VuZGlmXG4gXHR1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoXHUwMDI2cmRzX3RjcF9uZXRfb3BzKTtcbiBcdHJkc190Y3BfZGVzdHJveV9jb25ucygpO1xuJiM0MztcdHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoXHUwMDI2cmRzX3RjcF90cmFuc3BvcnQpO1xuIFx0cmRzX3RyYW5zX3VucmVnaXN0ZXIoXHUwMDI2cmRzX3RjcF90cmFuc3BvcnQpO1xuIFx0cmRzX3RjcF9yZWN2X2V4aXQoKTtcbiBcdGttZW1fY2FjaGVfZGVzdHJveShyZHNfdGNwX2Nvbm5fc2xhYik7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuaW5kZXggMTNmYTYwYzE5ODViYi4uMGQyY2VkODkyYThhZSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvdGNwX2xpc3Rlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuQEAgLTE1Myw3ICYjNDM7MTUzLDcgQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bilcbiB7XG4gXHRzdHJ1Y3Qgc29ja2V0ICpsaXN0ZW5fc29jayA9IHJ0bi1cdTAwM2VyZHNfdGNwX2xpc3Rlbl9zb2NrO1xuIFx0c3RydWN0IHNvY2tldCAqbmV3X3NvY2sgPSBOVUxMO1xuLVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uO1xuJiM0MztcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7XG4gXHRpbnQgcmV0O1xuIFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcbiBcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnJzX3RjcCA9IE5VTEw7XG5AQCAtMjI5LDYgJiM0MzsyMjksNyBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuIFxuIFx0aWYgKElTX0VSUihjb25uKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKGNvbm4pO1xuJiM0MztcdFx0Y29ubiA9IE5VTEw7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0LyogQW4gaW5jb21pbmcgU1lOIHJlcXVlc3QgY2FtZSBpbiwgYW5kIFRDUCBqdXN0IGFjY2VwdGVkIGl0LlxuQEAgLTM0Myw2ICYjNDM7MzQ0LDggQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bilcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJzX3RjcC1cdTAwM2V0X2Nvbm5fcGF0aF9sb2NrKTtcbiBcdGlmIChuZXdfc29jaylcbiBcdFx0c29ja19yZWxlYXNlKG5ld19zb2NrKTtcbiYjNDM7XHRpZiAoY29ubilcbiYjNDM7XHRcdHJkc19jb25uX3B1dChjb25uKTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZydG4tXHUwMDNlcmRzX3RjcF9hY2NlcHRfbG9jayk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkRTJiMzNDssCiAgICAmIzM0O1JEU19UQ1AmIzM0OywKICAgICYjMzQ7UkRTX1JETUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3Jkc19jb25uX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9kZXN0cm95JiMzNDssCiAgICAmIzM0O3Jkc19jb25uX2Rlc3Ryb3lfZmluaSYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9nZXQmIzM0OywKICAgICYjMzQ7cmRzX2Nvbm5fcHV0JiMzNDssCiAgICAmIzM0O3Jkc19jb25uX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyZHNfcmVjdl9pbmNvbWluZyYjMzQ7LAogICAgJiMzNDtyZHNfaW5jX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfbWVzc2FnZV9mcmVlJiMzNDssCiAgICAmIzM0O3Jkc190Y3BfYWNjZXB0X29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyAoa3JlZikgdG8gc3RydWN0IHJkc19jb25uZWN0aW9uIChjX3JlZmNvdW50KSB0byBwcm9wZXJseSBtYW5hZ2UgY29ubmVjdGlvbiBsaWZldGltZXMgYW5kIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucy4gSXQgcmVmYWN0b3JzIGNvbm5lY3Rpb24gdGVhcmRvd24gaW50byBzeW5jaHJvbm91cyBxdWllc2NlIChyZHNfY29ubl9wYXRoX3F1aWVzY2UsIHJkc19jb25uX2Rlc3Ryb3kpIGFuZCBhc3luY2hyb25vdXMgZGVzdHJ1Y3Rpb24gKHJkc19jb25uX2Rlc3Ryb3lfZmluaSksIGFuZCB1cGRhdGVzIHJlZmVyZW5jZSB0cmFja2luZyBhY3Jvc3Mgc29ja2V0IHJlbGVhc2UsIG1lc3NhZ2UgcXVldWVzLCByZWN2L3NlbmQgcGF0aHMsIGFuZCB0cmFuc3BvcnRzIChUQ1AsIGxvb3AsIElCKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgbG9naWMsIHN5bmNocm9uaXphdGlvbiwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGluIG5ldC9yZHMsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDAxNWUxODZlNTRlMzU5M2RmNmZmYTAwNzMxYWVhMDlhOTE4YWQyMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTU6NTY6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuYwppbmRleCBkNWRlZmU5MTcyZTM2Li4wZWFhNWI5NzY1NzI0IDEwMDY0NAotLS0gYS9uZXQvcmRzL2FmX3Jkcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvYWZfcmRzLmMKQEAgLTgwLDYgJiM0Mzs4MCwxNCBAQCBzdGF0aWMgaW50IHJkc19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAJcmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIE5VTEwpOwogCXJkc19ub3RpZnlfbXNnX3pjb3B5X3B1cmdlKCZhbXA7cnMtJmd0O3JzX3pjb29raWVfcXVldWUpOwogCiYjNDM7CS8qIGRyb3AgdGhlIGNhY2hlZCBjb25uZWN0aW9uIHJlZmVyZW5jZTsgbm8gc2VuZG1zZyBjYW4gcmFjZQomIzQzOwkgKiB3aXRoIHVzIGhlcmUsIHRoZSBzb2NrZXQgaXMgZ29pbmcgYXdheQomIzQzOwkgKi8KJiM0MzsJaWYgKHJzLSZndDtyc19jb25uKSB7CiYjNDM7CQlyZHNfY29ubl9wdXQocnMtJmd0O3JzX2Nvbm4pOwomIzQzOwkJcnMtJmd0O3JzX2Nvbm4gPSBOVUxMOwomIzQzOwl9CiYjNDM7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7cmRzX3NvY2tfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmYW1wO3JzLSZndDtyc19pdGVtKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3Jkc19zb2NrX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwppbmRleCBiNmM0YmViNTBlYWYwLi4yYzhjYTU0YTkxY2E4IDEwMDY0NAotLS0gYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwpAQCAtNDcsNyAmIzQzOzQ3LDggQEAKIAogLyogY29udmVydGluZyB0aGlzIHRvIFJDVSBpcyBhIGNob3JlIGZvciBhbm90aGVyIGRheS4uICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25uX2xvY2spOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2Nvbm5fY291bnQ7CiYjNDM7Lyogd29rZW4gd2hlbmV2ZXIgYSB0cmFuc3BvcnQmIzM5O3MgdF9jb25uX2NvdW50IGRyb3BzIHRvIHplcm8gKi8KJiM0MztzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2Nvbm5fZnJlZWRfd2FpdHEpOwogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIHJkc19jb25uX2hhc2hbUkRTX0NPTk5FQ1RJT05fSEFTSF9FTlRSSUVTXTsKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2Nvbm5fc2xhYjsKIApAQCAtNzksNyAmIzQzOzgwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqcmRzX2Nvbm5fYnVja2V0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsCiAJCXZhciB8PSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfIyNzdWZmaXg7CVwKIH0gd2hpbGUgKDApCiAKLS8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrICovCiYjNDM7LyogcmN1IHJlYWQgbG9jayBtdXN0IGJlIGhlbGQgb3IgdGhlIGNvbm5lY3Rpb24gc3BpbmxvY2suCiYjNDM7ICogT24gc3VjY2VzcyBhIHJlZmVyZW5jZSBpcyB0YWtlbiBvbiB0aGUgcmV0dXJuZWQgY29ubmVjdGlvbjsgdGhlCiYjNDM7ICogY2FsbGVyIG11c3QgZHJvcCBpdCB3aXRoIHJkc19jb25uX3B1dCgpLgomIzQzOyAqLwogc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsCiAJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsCkBAIC05Niw2ICYjNDM7MTAwLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCiAJCSAgICBjb25uLSZndDtjX3RvcyA9PSB0b3MgJmFtcDsmYW1wOwogCQkgICAgbmV0ID09IHJkc19jb25uX25ldChjb25uKSAmYW1wOyZhbXA7CiAJCSAgICBjb25uLSZndDtjX2Rldl9pZiA9PSBkZXZfaWYpIHsKJiM0MzsJCQkvKiBBbiBlbnRyeSB3aG9zZSByZWZjb3VudCBhbHJlYWR5IGRyb3BwZWQgdG8KJiM0MzsJCQkgKiB6ZXJvIGhhcyBiZWVuIHVuaGFzaGVkIGFuZCBpcyBhYm91dCB0byBiZQomIzQzOwkJCSAqIGZyZWVkOyBhbiBSQ1UgdHJhdmVyc2FsIG1heSBzdGlsbCBjb21lCiYjNDM7CQkJICogYWNyb3NzIGl0LiAgVHJlYXQgaXQgYXMgYWJzZW50LgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtjb25uLSZndDtjX3JlZmNvdW50KSkKJiM0MzsJCQkJY29udGludWU7CiAJCQlyZXQgPSBjb25uOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE5Nyw3ICYjNDM7MjA4LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJICogV2UgbmVlZCBhIHNlY29uZCBjb25uZWN0aW9uIG9iamVjdCBpbnRvIHdoaWNoIHdlCiAJCSAqIGNhbiBzdGljayB0aGUgb3RoZXIgUVAuICovCiAJCXBhcmVudCA9IGNvbm47CiYjNDM7CQkvKiBUaGUgY19wYXNzaXZlIHBvaW50ZXIgaG9sZHMgYSByZWZlcmVuY2Ugd2hpY2ggaXMgb25seQomIzQzOwkJICogZHJvcHBlZCBvbmUgc3luY2hyb25pemVfcmN1KCkgYWZ0ZXIgdGhlIHBvaW50ZXIgaXMKJiM0MzsJCSAqIGNsZWFyZWQsIHNvIHdpdGhpbiB0aGlzIFJDVSBzZWN0aW9uIGEgZmV0Y2hlZCBwb2ludGVyCiYjNDM7CQkgKiBpcyBhbHdheXMgc2FmZSB0byB0YWtlIGEgcmVmZXJlbmNlIG9uLgomIzQzOwkJICovCiAJCWNvbm4gPSBwYXJlbnQtJmd0O2NfcGFzc2l2ZTsKJiM0MzsJCWlmIChjb25uKQomIzQzOwkJCXJkc19jb25uX2dldChjb25uKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKGNvbm4pCkBAIC0yMTUsNiAmIzQzOzIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJZ290byBvdXQ7CiAJfQogCiYjNDM7CWtyZWZfaW5pdCgmYW1wO2Nvbm4tJmd0O2NfcmVmY291bnQpOwogCUlOSVRfSExJU1RfTk9ERSgmYW1wO2Nvbm4tJmd0O2NfaGFzaF9ub2RlKTsKIAljb25uLSZndDtjX2xhZGRyID0gKmxhZGRyOwogCWNvbm4tJmd0O2NfaXN2NiA9ICFpcHY2X2FkZHJfdjRtYXBwZWQobGFkZHIpOwpAQCAtMjgyLDggJiM0MzszMDEsOSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICBpc19vdXRnb2luZyk7CiAJCWNvbm4tJmd0O2NfcGF0aFtpXS5jcF9pbmRleCA9IGk7CiAJCWNvbm4tJmd0O2NfcGF0aFtpXS5jcF93cSA9Ci0JCQlhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgmIzM0O2tyZHNfY3Bfd3EjJWx1LyVkJiMzNDssIDAsCi0JCQkJCQlyZHNfY29ubl9jb3VudCwgaSk7CiYjNDM7CQkJYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoJiMzNDtrcmRzX2NwX3dxIyVkLyVkJiMzNDssIDAsCiYjNDM7CQkJCQkJYXRvbWljX3JlYWQoJmFtcDt0cmFucy0mZ3Q7dF9jb25uX2NvdW50KSwKJiM0MzsJCQkJCQlpKTsKIAkJaWYgKCFjb25uLSZndDtjX3BhdGhbaV0uY3Bfd3EpCiAJCQljb25uLSZndDtjX3BhdGhbaV0uY3Bfd3EgPSByZHNfd3E7CiAJfQpAQCAtMzE1LDE1ICYjNDM7MzM1LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Jkc19jb25uX2xvY2ssIGZsYWdzKTsKIAlpZiAocGFyZW50KSB7CiAJCS8qIENyZWF0aW5nIHBhc3NpdmUgY29ubiAqLwotCQlpZiAocGFyZW50LSZndDtjX3Bhc3NpdmUpIHsKJiM0MzsJCWlmIChSRUFEX09OQ0UocGFyZW50LSZndDtjX2Rlc3Ryb3lfaW5fcHJvZykpIHsKJiM0MzsJCQkvKiBUaGUgcGFyZW50JiMzOTtzIGRlc3Ryb3kgaGFzIGJlZ3VuIChpdCBzZXRzIHRoZQomIzQzOwkJCSAqIGZsYWcgYW5kIHNuYXRjaGVzIGNfcGFzc2l2ZSB1bmRlciB0aGlzCiYjNDM7CQkJICogbG9jayk7IGRvIG5vdCBpbnN0YWxsIGEgbmV3IHBhc3NpdmUgY29ubgomIzQzOwkJCSAqIHRoYXQgbm90aGluZyB3b3VsZCBldmVyIGRlc3Ryb3kuCiYjNDM7CQkJICovCiYjNDM7CQkJdHJhbnMtJmd0O2Nvbm5fZnJlZShjb25uLSZndDtjX3BhdGhbMF0uY3BfdHJhbnNwb3J0X2RhdGEpOwomIzQzOwkJCWZyZWVfY3AgPSBjb25uLSZndDtjX3BhdGg7CiYjNDM7CQkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOwomIzQzOwkJCWNvbm4gPSBFUlJfUFRSKC1FTkVURE9XTik7CiYjNDM7CQl9IGVsc2UgaWYgKHBhcmVudC0mZ3Q7Y19wYXNzaXZlKSB7CiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KHBhcmVudC0mZ3Q7Y19wYXNzaXZlKTsKIAkJCXRyYW5zLSZndDtjb25uX2ZyZWUoY29ubi0mZ3Q7Y19wYXRoWzBdLmNwX3RyYW5zcG9ydF9kYXRhKTsKIAkJCWZyZWVfY3AgPSBjb25uLSZndDtjX3BhdGg7CiAJCQlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CiAJCQljb25uID0gcGFyZW50LSZndDtjX3Bhc3NpdmU7CiAJCX0gZWxzZSB7CiYjNDM7CQkJLyogVGhlIGluaXRpYWwgcmVmZXJlbmNlIGJlbG9uZ3MgdG8gd2hvZXZlcgomIzQzOwkJCSAqIGRlc3Ryb3lzIHRoZSBjb25uICh0aGUgdHJhbnNwb3J0JiMzOTtzIGNvbm4KJiM0MzsJCQkgKiBsaXN0cywgYXMgZm9yIGFueSBvdGhlciBjb25uKS4gIFRha2Ugb25lCiYjNDM7CQkJICogZm9yIHRoZSBjX3Bhc3NpdmUgcG9pbnRlciAtIGRyb3BwZWQgd2hlbgomIzQzOwkJCSAqIHRoZSBwYXJlbnQgaXMgZGVzdHJveWVkIC0gYW5kIG9uZSBmb3Igb3VyCiYjNDM7CQkJICogY2FsbGVyLgomIzQzOwkJCSAqLwomIzQzOwkJCXJkc19jb25uX2dldChjb25uKTsJLyogY19wYXNzaXZlICovCiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KGNvbm4pOwkvKiBjYWxsZXIgKi8KIAkJCXBhcmVudC0mZ3Q7Y19wYXNzaXZlID0gY29ubjsKIAkJCXJkc19jb25nX2FkZF9jb25uKGNvbm4pOwotCQkJcmRzX2Nvbm5fY291bnQmIzQzOyYjNDM7OwomIzQzOwkJCWF0b21pY19pbmMoJmFtcDtjb25uLSZndDtjX3RyYW5zLSZndDt0X2Nvbm5fY291bnQpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogQ3JlYXRpbmcgbm9ybWFsIGNvbm4gKi8KQEAgLTM1MCwxNSAmIzQzOzM5MCwyMSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCX0gZWxzZSB7CiAJCQljb25uLSZndDtjX215X2dlbl9udW0gPSByZHNfZ2VuX251bTsKIAkJCWNvbm4tJmd0O2NfcGVlcl9nZW5fbnVtID0gMDsKJiM0MzsJCQkvKiB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyCiYjNDM7CQkJICogZGVzdHJveXMgdGhlIGNvbm47IHRha2Ugb25lIGZvciBvdXIgY2FsbGVyCiYjNDM7CQkJICovCiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KGNvbm4pOwogCQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7Y29ubi0mZ3Q7Y19oYXNoX25vZGUsIGhlYWQpOwogCQkJcmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7Ci0JCQlyZHNfY29ubl9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CQkJYXRvbWljX2luYygmYW1wO2Nvbm4tJmd0O2NfdHJhbnMtJmd0O3RfY29ubl9jb3VudCk7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3Jkc19jb25uX2xvY2ssIGZsYWdzKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogb3V0OgomIzQzOwlpZiAocGFyZW50KQomIzQzOwkJcmRzX2Nvbm5fcHV0KHBhcmVudCk7CiAJaWYgKGZyZWVfY3ApIHsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IG5wYXRoczsgaSYjNDM7JiM0MzspCiAJCQlpZiAoZnJlZV9jcFtpXS5jcF93cSAhPSByZHNfd3EpCkBAIC01MTUsMTAgJiM0Mzs1NjEsMTIgQEAgdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCWNvbm4tJmd0O2NfdHJhbnMtJmd0O2Nvbm5fc2xvdHNfYXZhaWxhYmxlKGNvbm4sIGZhbHNlKTsKIH0KIAotLyogZGVzdHJveSBhIHNpbmdsZSByZHNfY29ubl9wYXRoLiByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlcgotICogYWxsIHBhdGhzIHVzaW5nIHJkc19jb25uX3BhdGhfZGVzdHJveSgpCiYjNDM7LyogcXVpZXNjZSBhIHNpbmdsZSByZHNfY29ubl9wYXRoOiBzaHV0IGl0IGRvd24gYW5kIHRlYXIgZG93biBhbnkKJiM0MzsgKiBxdWV1ZWQgbWVzc2FnZXMuICByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlciBhbGwgcGF0aHMgdXNpbmcKJiM0MzsgKiByZHNfY29ubl9wYXRoX3F1aWVzY2UoKTsgdGhlIHRyYW5zcG9ydCBzdGF0ZSBhbmQgdGhlIHdvcmtxdWV1ZSBhcmUKJiM0MzsgKiBmcmVlZCBsYXRlciwgZnJvbSByZHNfY29ubl9wYXRoX2ZyZWUoKS4KICAqLwotc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKJiM0MztzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3F1aWVzY2Uoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogewogCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICpydG1wOwogCkBAIC01NDcsNiAmIzQzOzU5NSwxNiBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCVdBUk5fT04oZGVsYXllZF93b3JrX3BlbmRpbmcoJmFtcDtjcC0mZ3Q7Y3BfcmVjdl93KSk7CiAJV0FSTl9PTihkZWxheWVkX3dvcmtfcGVuZGluZygmYW1wO2NwLSZndDtjcF9jb25uX3cpKTsKIAlXQVJOX09OKHdvcmtfcGVuZGluZygmYW1wO2NwLSZndDtjcF9kb3duX3cpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZnJlZSBhIHF1aWVzY2VkIHJkc19jb25uX3BhdGgmIzM5O3MgdHJhbnNwb3J0IHN0YXRlIGFuZCB3b3JrcXVldWU7IHJ1bnMKJiM0MzsgKiBmcm9tIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgdGhlIGxhc3QgY29ubmVjdGlvbiByZWZlcmVuY2UgaXMKJiM0MzsgKiBkcm9wcGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZnJlZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiYjNDM7ewomIzQzOwlpZiAoIWNwLSZndDtjcF90cmFuc3BvcnRfZGF0YSkKJiM0MzsJCXJldHVybjsKIAogCWlmIChjcC0mZ3Q7Y3Bfd3EgIT0gcmRzX3dxKSB7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGNwLSZndDtjcF93cSk7CkBAIC01NTYsMTcgJiM0Mzs2MTQsNzQgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIAljcC0mZ3Q7Y3BfY29ubi0mZ3Q7Y190cmFucy0mZ3Q7Y29ubl9mcmVlKGNwLSZndDtjcF90cmFuc3BvcnRfZGF0YSk7CiB9CiAKJiM0MzsvKiBGcmVlIGEgY29ubmVjdGlvbi4gIFRoaXMgcnVucyBmcm9tIHJkc19jb25uX3B1dCgpIHdoZW4gdGhlIGxhc3QKJiM0MzsgKiByZWZlcmVuY2UgaXMgZHJvcHBlZCwgYWZ0ZXIgcmRzX2Nvbm5fZGVzdHJveSgpIGhhcyBxdWllc2NlZCB0aGUKJiM0MzsgKiBjb25uZWN0aW9uIGFuZCBkcm9wcGVkIHRoZSBpbml0aWFsIHJlZmVyZW5jZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByZHNfY29ubl9kZXN0cm95X2Zpbmkoc3RydWN0IGtyZWYgKmtyZWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJkc19jb25uZWN0aW9uLAomIzQzOwkJCQkJCSAgIGNfcmVmY291bnQpOwomIzQzOwlpbnQgbnBhdGhzID0gKGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7CiYjNDM7CXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucyA9IGNvbm4tJmd0O2NfdHJhbnM7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnBhdGhzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJkc19jb25uX3BhdGhfZnJlZSgmYW1wO2Nvbm4tJmd0O2NfcGF0aFtpXSk7CiYjNDM7CiYjNDM7CWtmcmVlKGNvbm4tJmd0O2NfcGF0aCk7CiYjNDM7CWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKJiM0MzsKJiM0MzsJLyogb25seSBhZnRlciBldmVyeXRoaW5nIHRoZSB0cmFuc3BvcnQgbW9kdWxlIG93bnMgaGFzIGJlZW4KJiM0MzsJICogZnJlZWQgYWJvdmUgbWF5IGl0cyB1bmxvYWQgcHJvY2VlZAomIzQzOwkgKi8KJiM0MzsJaWYgKCFhdG9taWNfZGVjX3JldHVybigmYW1wO3RyYW5zLSZndDt0X2Nvbm5fY291bnQpKQomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtyZHNfY29ubl9mcmVlZF93YWl0cSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFdhaXQgZm9yIGFsbCBvZiBAdHJhbnMmIzM5O3MgY29ubmVjdGlvbnMgdG8gYmUgZnJlZWQ7IHRoZSBmcmVlIHJ1bnMKJiM0MzsgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYSBjb25uZWN0aW9uLgomIzQzOyAqIENhbGxlZCBvbiB0cmFuc3BvcnQgbW9kdWxlIHVubG9hZCwgYWZ0ZXIgdGhlIHRyYW5zcG9ydCBkZXN0cm95ZWQKJiM0MzsgKiBhbGwgb2YgaXRzIGNvbm5lY3Rpb25zOiBhbnl0aGluZyBzdGlsbCBob2xkaW5nIGEgY29ubmVjdGlvbgomIzQzOyAqIHJlZmVyZW5jZSBhdCB0aGF0IHBvaW50IGlzIGEgc2hvcnQtbGl2ZWQgbG9va3VwLXN0eWxlIGhvbGRlciwgc28KJiM0MzsgKiBhIGJvdW5kZWQgd2FpdCBzdWZmaWNlcyAtIGJ1dCB3YXJuIGlmIGl0IGV4cGlyZXMsIHNpbmNlIHRoZSBmcmVlcwomIzQzOyAqIHRoYXQgZm9sbG93IHRoZSB1bmxvYWQgd2lsbCB0aGVuIHRvdWNoIGZyZWVkIG1vZHVsZSB0ZXh0LgomIzQzOyAqLwomIzQzO3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpCiYjNDM7ewomIzQzOwlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChyZHNfY29ubl9mcmVlZF93YWl0cSwKJiM0MzsJCQkJIWF0b21pY19yZWFkKCZhbXA7dHJhbnMtJmd0O3RfY29ubl9jb3VudCksCiYjNDM7CQkJCW1zZWNzX3RvX2ppZmZpZXMoUkRTX0NPTk5fRlJFRV9USU1FT1VUX01TKSkpCiYjNDM7CQlXQVJOKDEsICYjMzQ7UkRTLyVzOiAlZCBjb25uZWN0aW9uKHMpIG5vdCBmcmVlZFxuJiMzNDssCiYjNDM7CQkgICAgIHRyYW5zLSZndDt0X25hbWUsIGF0b21pY19yZWFkKCZhbXA7dHJhbnMtJmd0O3RfY29ubl9jb3VudCkpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKTsKJiM0MzsKJiM0Mzt2b2lkIHJkc19jb25uX2dldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiYjNDM7ewomIzQzOwlrcmVmX2dldCgmYW1wO2Nvbm4tJmd0O2NfcmVmY291bnQpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9nZXQpOwomIzQzOwomIzQzO3ZvaWQgcmRzX2Nvbm5fcHV0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKJiM0Mzt7CiYjNDM7CWtyZWZfcHV0KCZhbXA7Y29ubi0mZ3Q7Y19yZWZjb3VudCwgcmRzX2Nvbm5fZGVzdHJveV9maW5pKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcHV0KTsKJiM0MzsKIC8qCiAgKiBTdG9wIGFuZCBmcmVlIGEgY29ubmVjdGlvbi4KICAqCi0gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gdmVyeSBsaW1pdGVkIGNpcmN1bXN0YW5jZXMuICBJdCBhc3N1bWVzIHRoYXQgb25jZQotICogdGhlIGNvbm4gaGFzIGJlZW4gc2h1dGRvd24gdGhhdCBubyBvbmUgZWxzZSBpcyByZWZlcmVuY2luZyB0aGUgY29ubmVjdGlvbi4KLSAqIFdlIGNhbiBvbmx5IGVuc3VyZSB0aGlzIGluIHRoZSBybW1vZCBwYXRoIGluIHRoZSBjdXJyZW50IGNvZGUuCiYjNDM7ICogUXVpZXNjZXMgdGhlIGNvbm5lY3Rpb24gc3luY2hyb25vdXNseSAod29ya2VycyBjYW5jZWxsZWQsIHRyYW5zcG9ydAomIzQzOyAqIGNvbm5lY3Rpb25zIHNodXQgZG93biwgcXVldWVkIG1lc3NhZ2VzIGRyb3BwZWQpIGFuZCBkcm9wcyB0aGUKJiM0MzsgKiBpbml0aWFsIHJlZmVyZW5jZS4gIFRoZSBtZW1vcnkgLSBpbmNsdWRpbmcgdGhlIHRyYW5zcG9ydCYjMzk7cwomIzQzOyAqIHBlci1jb25uZWN0aW9uIHN0YXRlIGFuZCB0aGUgcGF0aCB3b3JrcXVldWVzIC0gaXMgZnJlZWQgb25jZSB0aGUKJiM0MzsgKiBsYXN0IHJkc19jb25uX3B1dCgpIHJ1bnMsIHdoaWNoIG1heSBiZSBhZnRlciB0aGlzIHJldHVybnMuCiAgKi8KIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKJiM0MzsJc3RydWN0IHJkc19jb25uZWN0aW9uICpwYXNzaXZlOwogCXN0cnVjdCByZHNfY29ubl9wYXRoICpjcDsKIAlpbnQgbnBhdGhzID0gKGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7CiAKQEAgLTU3NCwxNiAmIzQzOzY4OSw0NiBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQogCQkgJiMzNDslcEk0XG4mIzM0OywgY29ubiwgJmFtcDtjb25uLSZndDtjX2xhZGRyLAogCQkgJmFtcDtjb25uLSZndDtjX2ZhZGRyKTsKIAotCS8qIEVuc3VyZSBjb25uIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBmb3IgcmVjb25uZWN0ICovCiYjNDM7CS8qIE1ha2UgcmRzX2Rlc3Ryb3lfcGVuZGluZygpIHRydWUgZm9yIHRoaXMgY29ubi4gIFRvZ2V0aGVyIHdpdGgKJiM0MzsJICogdGhlIHN5bmNocm9uaXplX3JjdSgpIGJlbG93IHRoaXMgc3RvcHMgdGhlIHdvcmstcmVxdWV1ZWluZwomIzQzOwkgKiBzaXRlcyAod2hpY2ggYWxsIHRlc3QgcmRzX2Rlc3Ryb3lfcGVuZGluZygpIHVuZGVyCiYjNDM7CSAqIHJjdV9yZWFkX2xvY2soKSkgZnJvbSBxdWV1ZWluZyBuZXcgd29yayBvbiB0aGUgcGF0aAomIzQzOwkgKiB3b3JrcXVldWVzIG9uY2Ugd2Ugc3RhcnQgY2FuY2VsbGluZyBhbmQgZGVzdHJveWluZyB0aGVtLgomIzQzOwkgKgomIzQzOwkgKiBOb3cgdGhhdCB0aGUgdHJhbnNwb3J0IHN0YXRlIHN0YXlzIGRpc2NvdmVyYWJsZSAoZS5nLiBvbiB0aGUKJiM0MzsJICogdHJhbnNwb3J0cyYjMzk7IGNvbm5lY3Rpb24gbGlzdHMpIHVudGlsIHRoZSBmaW5hbCByZHNfY29ubl9wdXQoKSwKJiM0MzsJICogYSBjb25uIGNhbiBiZSBoYW5kZWQgdG8gcmRzX2Nvbm5fZGVzdHJveSgpIG1vcmUgdGhhbiBvbmNlIC0KJiM0MzsJICogZS5nLiBkcm9wcGVkIGZvciBhIHByb3RvY29sIHZlcnNpb24gbWlzbWF0Y2ggYW5kIHRoZW4gZm91bmQKJiM0MzsJICogYWdhaW4gYXQgbW9kdWxlIHVubG9hZC4gIE9ubHkgdGhlIGZpcnN0IGNhbGxlciBwcm9jZWVkczsgdGhlCiYjNDM7CSAqIHVuaGFzaCBhbHNvIGhhcHBlbnMgdW5kZXIgcmRzX2Nvbm5fbG9jaywgc28gYSBsb29rZWQtdXAgY29ubgomIzQzOwkgKiBjYW4gbmV2ZXIgYmUgcXVpZXNjZWQgdHdpY2UuCiYjNDM7CSAqLwogCXNwaW5fbG9ja19pcnEoJmFtcDtyZHNfY29ubl9sb2NrKTsKJiM0MzsJaWYgKGNvbm4tJmd0O2NfZGVzdHJveV9pbl9wcm9nKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnEoJmFtcDtyZHNfY29ubl9sb2NrKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlXUklURV9PTkNFKGNvbm4tJmd0O2NfZGVzdHJveV9pbl9wcm9nLCB0cnVlKTsKJiM0MzsKJiM0MzsJLyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi8KIAlobGlzdF9kZWxfaW5pdF9yY3UoJmFtcDtjb25uLSZndDtjX2hhc2hfbm9kZSk7CiYjNDM7CiYjNDM7CS8qIFNuYXRjaCBjX3Bhc3NpdmUgd2hpbGUgaG9sZGluZyB0aGUgbG9jazoKJiM0MzsJICogX19yZHNfY29ubl9jcmVhdGUoKSBkZXJlZmVyZW5jZXMgaXQgdW5kZXIgcmN1X3JlYWRfbG9jaygpCiYjNDM7CSAqIChhbmQgcmVmdXNlcyB0byBpbnN0YWxsIGEgbmV3IG9uZSBvbmNlIGNfZGVzdHJveV9pbl9wcm9nIGlzCiYjNDM7CSAqIHNldCwgd2hpY2ggaXQgY2hlY2tzIHVuZGVyIHRoaXMgbG9jaykuICBBZnRlciB0aGUKJiM0MzsJICogc3luY2hyb25pemVfcmN1KCkgYmVsb3cgbm8gb25lIGNhbiBwaWNrIHRoZSBwb2ludGVyIHVwIGFueQomIzQzOwkgKiBtb3JlIGFuZCBpdHMgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJcGFzc2l2ZSA9IGNvbm4tJmd0O2NfcGFzc2l2ZTsKJiM0MzsJY29ubi0mZ3Q7Y19wYXNzaXZlID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnEoJmFtcDtyZHNfY29ubl9sb2NrKTsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCS8qIHNodXQgdGhlIGNvbm5lY3Rpb24gZG93biAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBucGF0aHM7IGkmIzQzOyYjNDM7KSB7CiAJCWNwID0gJmFtcDtjb25uLSZndDtjX3BhdGhbaV07Ci0JCXJkc19jb25uX3BhdGhfZGVzdHJveShjcCk7CiYjNDM7CQlyZHNfY29ubl9wYXRoX3F1aWVzY2UoY3ApOwogCQlCVUdfT04oIWxpc3RfZW1wdHkoJmFtcDtjcC0mZ3Q7Y3BfcmV0cmFucykpOwogCX0KIApAQCAtNTk0LDEyICYjNDM7NzM5LDE0IEBAIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiAJICovCiAJcmRzX2NvbmdfcmVtb3ZlX2Nvbm4oY29ubik7CiAKLQlrZnJlZShjb25uLSZndDtjX3BhdGgpOwotCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKJiM0MzsJLyogZHJvcCB0aGUgcmVmZXJlbmNlIG91ciBjX3Bhc3NpdmUgcG9pbnRlciBoZWxkLCBpZiBhbnkgKi8KJiM0MzsJaWYgKHBhc3NpdmUpCiYjNDM7CQlyZHNfY29ubl9wdXQocGFzc2l2ZSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Jkc19jb25uX2xvY2ssIGZsYWdzKTsKLQlyZHNfY29ubl9jb3VudC0tOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyZHNfY29ubl9sb2NrLCBmbGFncyk7CiYjNDM7CS8qIGRyb3AgdGhlIGluaXRpYWwgcmVmZXJlbmNlOyB0aGUgY29ubmVjdGlvbiBpcyBmcmVlZCBmcm9tCiYjNDM7CSAqIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgZXZlcnkgaG9sZGVyIGhhcyBkcm9wcGVkIHRoZWlycwomIzQzOwkgKi8KJiM0MzsJcmRzX2Nvbm5fcHV0KGNvbm4pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZGVzdHJveSk7CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuYyBiL25ldC9yZHMvaWIuYwppbmRleCA3ODZmMzkxNjliYzE0Li43NTU2OTA1ODMzMjU5IDEwMDY0NAotLS0gYS9uZXQvcmRzL2liLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9pYi5jCkBAIC01MjUsMTAgJiM0Mzs1MjUsNyBAQCBzdGF0aWMgdm9pZCByZHNfaWJfc2V0X3VubG9hZGluZyh2b2lkKQogCiBzdGF0aWMgYm9vbCByZHNfaWJfaXNfdW5sb2FkaW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKIHsKLQlzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AgPSAmYW1wO2Nvbm4tJmd0O2NfcGF0aFswXTsKLQotCXJldHVybiAodGVzdF9iaXQoUkRTX0RFU1RST1lfUEVORElORywgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpIHx8Ci0JCWF0b21pY19yZWFkKCZhbXA7cmRzX2liX3VubG9hZGluZykgIT0gMCk7CiYjNDM7CXJldHVybiBhdG9taWNfcmVhZCgmYW1wO3Jkc19pYl91bmxvYWRpbmcpICE9IDA7CiB9CiAKIHZvaWQgcmRzX2liX2V4aXQodm9pZCkKQEAgLTU0MSw2ICYjNDM7NTM4LDE1IEBAIHZvaWQgcmRzX2liX2V4aXQodm9pZCkKICNlbmRpZgogCXJkc19pYl91bnJlZ2lzdGVyX2NsaWVudCgpOwogCXJkc19pYl9kZXN0cm95X25vZGV2X2Nvbm5zKCk7CiYjNDM7CXJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoJmFtcDtyZHNfaWJfdHJhbnNwb3J0KTsKJiM0MzsKJiM0MzsJLyogVGVhcmluZyBkb3duIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWF5IGhhdmUgZHJvcHBlZCB0aGUgZmluYWwKJiM0MzsJICogcmVmZXJlbmNlIG9uIGEgZGV2aWNlLCBkZWZlcnJpbmcgcmRzX2liX2Rldl9mcmVlKCkgdG8gcmRzX3dxLgomIzQzOwkgKiBEcmFpbiBpdCBiZWZvcmUgdGhlIG1vZHVsZSBnb2VzIGF3YXk7IGl0IHF1ZXVlcyBub3RoaW5nCiYjNDM7CSAqIGZ1cnRoZXIgb24gcmRzX3dxLgomIzQzOwkgKi8KJiM0MzsJZmx1c2hfd29ya3F1ZXVlKHJkc193cSk7CiYjNDM7CiAJcmRzX2liX3N5c2N0bF9leGl0KCk7CiAJcmRzX2liX3JlY3ZfZXhpdCgpOwogCXJkc190cmFuc191bnJlZ2lzdGVyKCZhbXA7cmRzX2liX3RyYW5zcG9ydCk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmMKaW5kZXggNGZlYjBlZGMzNjBjOC4uMjRlNTM4YzI1M2E3YSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9jbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWJfY20uYwpAQCAtOTI0LDggJiM0Mzs5MjQsMTQgQEAgaW50IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCiAJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICYjMzQ7cmRtYV9hY2NlcHQgZmFpbGVkXG4mIzM0Oyk7CiAKIG91dDoKLQlpZiAoY29ubikKJiM0MzsJaWYgKGNvbm4pIHsKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7Y29ubi0mZ3Q7Y19jbV9sb2NrKTsKJiM0MzsJCS8qIFRoZSBjb25uIHN0YXlzIHJlYWNoYWJsZSB0aHJvdWdoIGNtX2lkLSZndDtjb250ZXh0CiYjNDM7CQkgKiB3aXRob3V0IGEgcmVmZXJlbmNlIG9mIGl0cyBvd246IGNvbm5lY3Rpb24gZGVzdHJveQomIzQzOwkJICogc2h1dHMgdGhlIGNtX2lkIGRvd24gYmVmb3JlIHRoZSBjb25uIGlzIGZyZWVkLgomIzQzOwkJICovCiYjNDM7CQlyZHNfY29ubl9wdXQoY29ubik7CiYjNDM7CX0KIAlpZiAoZXJyKQogCQlyZG1hX3JlamVjdChjbV9pZCwgJmFtcDtlcnIsIHNpemVvZihpbnQpLAogCQkJICAgIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVEKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvbG9vcC5jIGIvbmV0L3Jkcy9sb29wLmMKaW5kZXggZTZiMDc1MGJiZWRhYi4uN2RhZjhlZDI1ZDY5YSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9sb29wLmMKQEAgLTE5NSw2ICYjNDM7MTk1LDggQEAgdm9pZCByZHNfbG9vcF9leGl0KHZvaWQpCiAJCVdBUk5fT04obGMtJmd0O2Nvbm4tJmd0O2NfcGFzc2l2ZSk7CiAJCXJkc19jb25uX2Rlc3Ryb3kobGMtJmd0O2Nvbm4pOwogCX0KJiM0MzsKJiM0MzsJcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZCgmYW1wO3Jkc19sb29wX3RyYW5zcG9ydCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJkc19sb29wX2tpbGxfY29ubnMoc3RydWN0IG5ldCAqbmV0KQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuYwppbmRleCBmMjVmMjU5MjU4NmY3Li4yOWU5NTAyOGU2MWU0IDEwMDY0NAotLS0gYS9uZXQvcmRzL21lc3NhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL21lc3NhZ2UuYwpAQCAtMTgyLDYgJiM0MzsxODIsMTggQEAgc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSkKIAkJa3JlZl9wdXQoJmFtcDtybS0mZ3Q7YXRvbWljLm9wX3JkbWFfbXItJmd0O3Jfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX2ZyZWUoc3RydWN0IHJkc19tZXNzYWdlICpybSkKJiM0Mzt7CiYjNDM7CS8qIGdldCBpbiByZHNfc2VuZF9xdWV1ZV9ybSgpLCByZHNfc2VuZF9wcm9iZSgpIG9yIHRoZSBjb25nZXN0aW9uCiYjNDM7CSAqIG1hcCBwYXRoIG9mIHJkc19zZW5kX3htaXQoKS4gIE1lc3NhZ2VzIHRoYXQgd2VyZSBuZXZlciBxdWV1ZWQgb24KJiM0MzsJICogYSBjb25uZWN0aW9uIGhhdmUgbm8gcmVmZXJlbmNlIHRvIGRyb3AuCiYjNDM7CSAqLwomIzQzOwlpZiAocm0tJmd0O21faW5jLmlfY29ubikKJiM0MzsJCXJkc19jb25uX3B1dChybS0mZ3Q7bV9pbmMuaV9jb25uKTsKJiM0MzsKJiM0MzsJa2ZyZWUocm0pOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsCkBAIC0xOTIsNyAmIzQzOzIwNCw3IEBAIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJaWYgKHJtLSZndDthdG9taWMub3BfdW5waW5fZGVmZXJyZWQpCiAJCXJkc19hdG9taWNfb3BfdW5waW5fcGFnZSgmYW1wO3JtLSZndDthdG9taWMpOwogCi0Ja2ZyZWUocm0pOwomIzQzOwlyZHNfbWVzc2FnZV9mcmVlKHJtKTsKIH0KIAogdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSkKQEAgLTIxNyw3ICYjNDM7MjI5LDcgQEAgdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSkKIAkJCXJldHVybjsKIAkJfQogCi0JCWtmcmVlKHJtKTsKJiM0MzsJCXJkc19tZXNzYWdlX2ZyZWUocm0pOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19tZXNzYWdlX3B1dCk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaAppbmRleCAyZGI0OTU3M2RhY2Q1Li4zNTc2MGRkNmIwNzdmIDEwMDY0NAotLS0gYS9uZXQvcmRzL3Jkcy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRzLmgKQEAgLTg5LDcgJiM0Mzs4OSw2IEBAIGVudW0gewogI2RlZmluZSBSRFNfUkVDT05ORUNUX1BFTkRJTkcJMQogI2RlZmluZSBSRFNfSU5fWE1JVAkJMgogI2RlZmluZSBSRFNfUkVDVl9SRUZJTEwJCTMKLSNkZWZpbmUJUkRTX0RFU1RST1lfUEVORElORwk0CiAKIC8qIE1heCBudW1iZXIgb2YgbXVsdGlwYXRocyBwZXIgUkRTIGNvbm5lY3Rpb24uIE11c3QgYmUgYSBwb3dlciBvZiAyICovCiAjZGVmaW5lCVJEU19NUEFUSF9XT1JLRVJTCTgKQEAgLTEzOCw2ICYjNDM7MTM3LDEyIEBAIHN0cnVjdCByZHNfY29ubl9wYXRoIHsKIC8qIE9uZSByZHNfY29ubmVjdGlvbiBwZXIgUkRTIGFkZHJlc3MgcGFpciAqLwogc3RydWN0IHJkc19jb25uZWN0aW9uIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQljX2hhc2hfbm9kZTsKJiM0MzsJLyogRnJlZSBvZiB0aGUgY29ubmVjdGlvbiBtZW1vcnkgKG5vdCB0aGUgdGVhcmRvd24gb2YgaXRzCiYjNDM7CSAqIHRyYW5zcG9ydCBzdGF0ZSAtIHRoYXQgc3RheXMgc3luY2hyb25vdXMgaW4KJiM0MzsJICogcmRzX2Nvbm5fZGVzdHJveSgpKSBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgbGFzdCByZWZlcmVuY2UgaXMKJiM0MzsJICogZHJvcHBlZCB2aWEgcmRzX2Nvbm5fcHV0KCkuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3Qga3JlZgkJY19yZWZjb3VudDsKIAlzdHJ1Y3QgaW42X2FkZHIJCWNfbGFkZHI7CiAJc3RydWN0IGluNl9hZGRyCQljX2ZhZGRyOwogCWludAkJCWNfZGV2X2lmOyAvKiBpZmluZGV4IHVzZWQgZm9yIHRoaXMgY29ubiAqLwpAQCAtMTQ4LDYgJiM0MzsxNTMsMTAgQEAgc3RydWN0IHJkc19jb25uZWN0aW9uIHsKIAkJCQljX3BhZF90b18zMjoyOTsKIAlpbnQJCQljX25wYXRoczsKIAlib29sCQkJY193aXRoX3Nwb3J0X2lkeDsKJiM0MzsJLyogU2V0ICh1bmRlciBSQ1UpIHdoZW4gcmRzX2Nvbm5fZGVzdHJveSgpIHN0YXJ0cyBvbiB0aGlzIGNvbm47CiYjNDM7CSAqIHJlYWQgdGhyb3VnaCByZHNfZGVzdHJveV9wZW5kaW5nKCkuCiYjNDM7CSAqLwomIzQzOwlib29sCQkJY19kZXN0cm95X2luX3Byb2c7CiAJc3RydWN0IHJkc19jb25uZWN0aW9uCSpjX3Bhc3NpdmU7CiAJc3RydWN0IHJkc190cmFuc3BvcnQJKmNfdHJhbnM7CiAKQEAgLTU0NCw2ICYjNDM7NTUzLDEyIEBAIHN0cnVjdCByZHNfdHJhbnNwb3J0IHsKIAl1bnNpZ25lZCBpbnQJCXRfcHJlZmVyX2xvb3BiYWNrOjEsCiAJCQkJdF9tcF9jYXBhYmxlOjE7CiAJdW5zaWduZWQgaW50CQl0X3R5cGU7CiYjNDM7CS8qIENvbm5lY3Rpb25zIG9mIHRoaXMgdHJhbnNwb3J0IG5vdCB5ZXQgZnJlZWQ7IGZyZWVpbmcgcnVucwomIzQzOwkgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYQomIzQzOwkgKiBjb25uZWN0aW9uLCBzbyB0cmFuc3BvcnQgbW9kdWxlIHVubG9hZCBoYXMgdG8gd2FpdCBmb3IgdGhpcwomIzQzOwkgKiB0byByZWFjaCB6ZXJvIChyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKCkpLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX3QJCXRfY29ubl9jb3VudDsKIAogCWludCAoKmxhZGRyX2NoZWNrKShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJCSAgIF9fdTMyIHNjb3BlX2lkKTsKQEAgLTgxOSw2ICYjNDM7ODM0LDExIEBAIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJCXU4IHRvcywgZ2ZwX3QgZ2ZwLCBpbnQgZGV2X2lmKTsKIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoKTsKIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwomIzQzO3ZvaWQgcmRzX2Nvbm5fZ2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CiYjNDM7dm9pZCByZHNfY29ubl9wdXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKJiM0MzsvKiBob3cgbG9uZyB0cmFuc3BvcnQgdW5sb2FkIHdhaXRzIGZvciBpdHMgY29ubmVjdGlvbnMgdG8gYmUgZnJlZWQgKi8KJiM0MzsjZGVmaW5lIFJEU19DT05OX0ZSRUVfVElNRU9VVF9NUwkxMDAwMAomIzQzO3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpOwogdm9pZCByZHNfY29ubl9kcm9wKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CiB2b2lkIHJkc19jb25uX3BhdGhfZHJvcChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3BhdGgsIGJvb2wgZGVzdHJveSk7CiB2b2lkIHJkc19jb25uX2Nvbm5lY3RfaWZfZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwpAQCAtOTk0LDcgJiM0MzsxMDE0LDggQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgcmRzX2Rlc3Ryb3lfcGVuZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JcmV0dXJuICFjaGVja19uZXQocmRzX2Nvbm5fbmV0KGNvbm4pKSB8fAomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKGNvbm4tJmd0O2NfZGVzdHJveV9pbl9wcm9nKSB8fAomIzQzOwkgICAgICAgIWNoZWNrX25ldChyZHNfY29ubl9uZXQoY29ubikpIHx8CiAJICAgICAgIChjb25uLSZndDtjX3RyYW5zLSZndDt0X3VubG9hZGluZyAmYW1wOyZhbXA7IGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfdW5sb2FkaW5nKGNvbm4pKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZWN2LmMgYi9uZXQvcmRzL3JlY3YuYwppbmRleCA2MjA0ZTU3N2E5MGFlLi5iMDMxYzBiNDNhZjgzIDEwMDY0NAotLS0gYS9uZXQvcmRzL3JlY3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3JlY3YuYwpAQCAtNDYsNiAmIzQzOzQ2LDcgQEAgdm9pZCByZHNfaW5jX2luaXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCiB7CiAJcmVmY291bnRfc2V0KCZhbXA7aW5jLSZndDtpX3JlZmNvdW50LCAxKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2luYy0mZ3Q7aV9pdGVtKTsKJiM0MzsJcmRzX2Nvbm5fZ2V0KGNvbm4pOwkvKiBwdXQgaW4gcmRzX2luY19wdXQoKSAqLwogCWluYy0mZ3Q7aV9jb25uID0gY29ubjsKIAlpbmMtJmd0O2lfY29ubl9wYXRoID0gTlVMTDsKIAlpbmMtJmd0O2lfc2FkZHIgPSAqc2FkZHI7CkBAIC02MSw2ICYjNDM7NjIsNyBAQCB2b2lkIHJkc19pbmNfcGF0aF9pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uX3BhdGggKmNwLAogewogCXJlZmNvdW50X3NldCgmYW1wO2luYy0mZ3Q7aV9yZWZjb3VudCwgMSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtpbmMtJmd0O2lfaXRlbSk7CiYjNDM7CXJkc19jb25uX2dldChjcC0mZ3Q7Y3BfY29ubik7CS8qIHB1dCBpbiByZHNfaW5jX3B1dCgpICovCiAJaW5jLSZndDtpX2Nvbm4gPSBjcC0mZ3Q7Y3BfY29ubjsKIAlpbmMtJmd0O2lfY29ubl9wYXRoID0gY3A7CiAJaW5jLSZndDtpX3NhZGRyID0gKnNhZGRyOwpAQCAtODEsOSAmIzQzOzgzLDE5IEBAIHZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQogewogCXJkc2RlYnVnKCYjMzQ7cHV0IGluYyAlcCByZWYgJWRcbiYjMzQ7LCBpbmMsIHJlZmNvdW50X3JlYWQoJmFtcDtpbmMtJmd0O2lfcmVmY291bnQpKTsKIAlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7aW5jLSZndDtpX3JlZmNvdW50KSkgewomIzQzOwkJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaW5jLSZndDtpX2Nvbm47CiYjNDM7CiAJCUJVR19PTighbGlzdF9lbXB0eSgmYW1wO2luYy0mZ3Q7aV9pdGVtKSk7CiAKLQkJaW5jLSZndDtpX2Nvbm4tJmd0O2NfdHJhbnMtJmd0O2luY19mcmVlKGluYyk7CiYjNDM7CQkvKiBpbmNfZnJlZSgpIGNhbiBmcmVlIHRoZSBtZW1vcnkgQGluYyBsaXZlcyBpbiwgc28gdGhlCiYjNDM7CQkgKiBjb25uZWN0aW9uIHJlZmVyZW5jZSBoYXMgdG8gYmUgZHJvcHBlZCB0aHJvdWdoIHRoZQomIzQzOwkJICogY29weSB0YWtlbiBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJY29ubi0mZ3Q7Y190cmFucy0mZ3Q7aW5jX2ZyZWUoaW5jKTsKJiM0MzsJCS8qIGdldCBpbiByZHNfaW5jX2luaXQoKSwgcmRzX2luY19wYXRoX2luaXQoKSBvcgomIzQzOwkJICogcmRzX3JlY3ZfaW5jb21pbmcoKQomIzQzOwkJICovCiYjNDM7CQlyZHNfY29ubl9wdXQoY29ubik7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwocmRzX2luY19wdXQpOwpAQCAtMzI1LDYgJiM0MzszMzcsMTMgQEAgdm9pZCByZHNfcmVjdl9pbmNvbWluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7CiAKJiM0MzsJLyogZXZlcnkgY2FsbGVyIGluaXRpYWxpemVkIEBpbmMgd2l0aCByZHNfaW5jX2luaXQoKSBvcgomIzQzOwkgKiByZHNfaW5jX3BhdGhfaW5pdCgpIGZpcnN0LCBzbyBpX2Nvbm4gYWxyZWFkeSBob2xkcyBhIHJlZmVyZW5jZS4KJiM0MzsJICogVGFrZSB0aGUgbmV3IG9uZSBiZWZvcmUgZHJvcHBpbmcgdGhlIG9sZCwgc28gdGhhdCByZS1wb2ludGluZyBhbgomIzQzOwkgKiBpbmMgYXQgdGhlIGNvbm5lY3Rpb24gaXQgYWxyZWFkeSByZWZlcnMgdG8gY2Fubm90IGZyZWUgaXQuCiYjNDM7CSAqLwomIzQzOwlyZHNfY29ubl9nZXQoY29ubik7CiYjNDM7CXJkc19jb25uX3B1dChpbmMtJmd0O2lfY29ubik7CiAJaW5jLSZndDtpX2Nvbm4gPSBjb25uOwogCWluYy0mZ3Q7aV9yeF9qaWZmaWVzID0gamlmZmllczsKIAlpZiAoY29ubi0mZ3Q7Y190cmFucy0mZ3Q7dF9tcF9jYXBhYmxlKQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuYwppbmRleCAxYWZhOTgxZTVjMDZkLi4wNDVlYjNjM2Y5NzcyIDEwMDY0NAotLS0gYS9uZXQvcmRzL3NlbmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3NlbmQuYwpAQCAtMjkwLDYgJiM0MzsyOTAsNyBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCQl9CiAJCQlybS0mZ3Q7ZGF0YS5vcF9hY3RpdmUgPSAxOwogCQkJcm0tJmd0O21faW5jLmlfY29ubl9wYXRoID0gY3A7CiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KGNwLSZndDtjcF9jb25uKTsJLyogcHV0IGluIHJkc19tZXNzYWdlX3B1dCgpICovCiAJCQlybS0mZ3Q7bV9pbmMuaV9jb25uID0gY3AtJmd0O2NwX2Nvbm47CiAKIAkJCWNwLSZndDtjcF94bWl0X3JtID0gcm07CkBAIC05NDcsNiAmIzQzOzk0OCw3IEBAIHN0YXRpYyBpbnQgcmRzX3NlbmRfcXVldWVfcm0oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAogCQkvKiBUaGUgY29kZSBvcmRlcmluZyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IHdlJiMzOTtyZQogCQkgICB0cnlpbmcgdG8gbWluaW1pemUgdGhlIHRpbWUgd2UgaG9sZCBjX2xvY2sgKi8KIAkJcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKCZhbXA7cm0tJmd0O21faW5jLmlfaGRyLCBzcG9ydCwgZHBvcnQsIDApOwomIzQzOwkJcmRzX2Nvbm5fZ2V0KGNvbm4pOwkvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi8KIAkJcm0tJmd0O21faW5jLmlfY29ubiA9IGNvbm47CiAJCXJtLSZndDttX2luYy5pX2Nvbm5fcGF0aCA9IGNwOwogCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOwpAQCAtMTE1OSwxMyAmIzQzOzExNjEsMTQgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKQogCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2luICosIHVzaW4sIG1zZy0mZ3Q7bXNnX25hbWUpOwogCV9fYmUxNiBkcG9ydDsKIAlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gTlVMTDsKLQlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CiYjNDM7CXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAJaW50IHF1ZXVlZCA9IDAsIGFsbG9jYXRlZF9tciA9IDA7CiAJaW50IG5vbmJsb2NrID0gbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUOwogCWxvbmcgdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBub25ibG9jayk7CiAJc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoOwogCXN0cnVjdCBpbjZfYWRkciBkYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlfX3UzMiBzY29wZV9pZCA9IDA7CiAJc2l6ZV90IHJkbWFfcGF5bG9hZF9sZW4gPSAwOwogCWJvb2wgemNvcHkgPSAoKG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19aRVJPQ09QWSkgJmFtcDsmYW1wOwpAQCAtMTM0MCwxMSAmIzQzOzEzNDMsMjkgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKQogCXJtLSZndDttX2RhZGRyID0gZGFkZHI7CiAKIAkvKiByZHNfY29ubl9jcmVhdGUgaGFzIGEgc3BpbmxvY2sgdGhhdCBydW5zIHdpdGggSVJRIG9mZi4KLQkgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuICovCi0JaWYgKHJzLSZndDtyc19jb25uICZhbXA7JmFtcDsgaXB2Nl9hZGRyX2VxdWFsKCZhbXA7cnMtJmd0O3JzX2Nvbm4tJmd0O2NfZmFkZHIsICZhbXA7ZGFkZHIpICZhbXA7JmFtcDsKLQkgICAgcnMtJmd0O3JzX3RvcyA9PSBycy0mZ3Q7cnNfY29ubi0mZ3Q7Y190b3MpIHsKLQkJY29ubiA9IHJzLSZndDtyc19jb25uOwomIzQzOwkgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBjYWNoZWQgcnNfY29ubiBob2xkcyBhIGNvbm5lY3Rpb24gcmVmZXJlbmNlOyB0YWtlIG9uZSBvZgomIzQzOwkgKiBvdXIgb3duIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBjYWxsIChkcm9wcGVkIG9uIGJvdGggZXhpdAomIzQzOwkgKiBwYXRocyksIHNvIHRoYXQgbmVpdGhlciBhIGNvbmN1cnJlbnQgc2VuZGVyIHJlcGxhY2luZyB0aGUKJiM0MzsJICogY2FjaGUgbm9yIHJkc19jb25uX2Rlc3Ryb3koKSBjYW4gZnJlZSB0aGUgY29ubmVjdGlvbiB1bmRlcgomIzQzOwkgKiB1cy4gIEEgY2FjaGVkIGNvbm5lY3Rpb24gd2hvc2UgZGVzdHJ1Y3Rpb24gaGFzIGJlZ3VuIGlzIG5vdAomIzQzOwkgKiByZXVzZWQ6IGRyb3BwaW5nIGl0IGhlcmUgbGV0cyB0aGUgbmV4dCBzZW5kbXNnIGxvb2sgdXAgb3IKJiM0MzsJICogY3JlYXRlIGEgbGl2ZSBvbmUgaW5zdGVhZCBvZiByZXR1cm5pbmcgLUVBR0FJTiBmb3JldmVyLgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtycy0mZ3Q7cnNfbG9jaywgZmxhZ3MpOwomIzQzOwljb25uID0gcnMtJmd0O3JzX2Nvbm47CiYjNDM7CWlmIChjb25uICZhbXA7JmFtcDsgaXB2Nl9hZGRyX2VxdWFsKCZhbXA7Y29ubi0mZ3Q7Y19mYWRkciwgJmFtcDtkYWRkcikgJmFtcDsmYW1wOwomIzQzOwkgICAgcnMtJmd0O3JzX3RvcyA9PSBjb25uLSZndDtjX3RvcyAmYW1wOyZhbXA7ICFyZHNfZGVzdHJveV9wZW5kaW5nKGNvbm4pKSB7CiYjNDM7CQlyZHNfY29ubl9nZXQoY29ubik7CiAJfSBlbHNlIHsKJiM0MzsJCWNvbm4gPSBOVUxMOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtycy0mZ3Q7cnNfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoIWNvbm4pIHsKJiM0MzsJCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqb2xkOwomIzQzOwogCQljb25uID0gcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHNvY2tfbmV0KHNvY2stJmd0O3NrKSwKIAkJCQkJCSZhbXA7cnMtJmd0O3JzX2JvdW5kX2FkZHIsICZhbXA7ZGFkZHIsCiAJCQkJCQlycy0mZ3Q7cnNfdHJhbnNwb3J0LCBycy0mZ3Q7cnNfdG9zLApAQCAtMTM1Miw5ICYjNDM7MTM3MywxNyBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pCiAJCQkJCQlzY29wZV9pZCk7CiAJCWlmIChJU19FUlIoY29ubikpIHsKIAkJCXJldCA9IFBUUl9FUlIoY29ubik7CiYjNDM7CQkJY29ubiA9IE5VTEw7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJLyogaGFuZCB0aGUgY2FjaGUgaXRzIG93biByZWZlcmVuY2UgKi8KJiM0MzsJCXJkc19jb25uX2dldChjb25uKTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cnMtJmd0O3JzX2xvY2ssIGZsYWdzKTsKJiM0MzsJCW9sZCA9IHJzLSZndDtyc19jb25uOwogCQlycy0mZ3Q7cnNfY29ubiA9IGNvbm47CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cnMtJmd0O3JzX2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmIChvbGQpCiYjNDM7CQkJcmRzX2Nvbm5fcHV0KG9sZCk7CiAJfQogCiAJaWYgKGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfbXBfY2FwYWJsZSkgewpAQCAtMTQ2OSw2ICYjNDM7MTQ5OCw4IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbikKIAkJa2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7CiAJa2ZyZWUodmN0LnZlYyk7CiAKJiM0MzsJcmRzX2Nvbm5fcHV0KGNvbm4pOwomIzQzOwogCXJldHVybiBwYXlsb2FkX2xlbjsKIAogb3V0OgpAQCAtMTQ3Niw2ICYjNDM7MTUwNyw5IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbikKIAkJa2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7CiAJa2ZyZWUodmN0LnZlYyk7CiAKJiM0MzsJaWYgKGNvbm4pCiYjNDM7CQlyZHNfY29ubl9wdXQoY29ubik7CiYjNDM7CiAJLyogSWYgdGhlIHVzZXIgaW5jbHVkZWQgYSBSRE1BX01BUCBjbXNnLCB3ZSBhbGxvY2F0ZWQgYSBNUiBvbiB0aGUgZmx5LgogCSAqIElmIHRoZSBzZW5kbXNnIGdvZXMgdGhyb3VnaCwgd2Uga2VlcCB0aGUgTVIuIElmIGl0IGZhaWxzIHdpdGggRUFHQUlOCiAJICogb3IgaW4gYW55IG90aGVyIHdheSwgd2UgbmVlZCB0byBkZXN0cm95IHRoZSBNUiBhZ2FpbiAqLwpAQCAtMTUyMiw2ICYjNDM7MTU1Niw3IEBAIHJkc19zZW5kX3Byb2JlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCwgX19iZTE2IHNwb3J0LAogCWxpc3RfYWRkX3RhaWwoJmFtcDtybS0mZ3Q7bV9jb25uX2l0ZW0sICZhbXA7Y3AtJmd0O2NwX3NlbmRfcXVldWUpOwogCXNldF9iaXQoUkRTX01TR19PTl9DT05OLCAmYW1wO3JtLSZndDttX2ZsYWdzKTsKIAlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOwomIzQzOwlyZHNfY29ubl9nZXQoY3AtJmd0O2NwX2Nvbm4pOwkvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi8KIAlybS0mZ3Q7bV9pbmMuaV9jb25uID0gY3AtJmd0O2NwX2Nvbm47CiAJcm0tJmd0O21faW5jLmlfY29ubl9wYXRoID0gY3A7CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jCmluZGV4IDc3NGE3MWY4OGQzNzUuLjI2ODVlZTIxYTIyZDEgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy90Y3AuYwpAQCAtODA1LDYgJiM0Mzs4MDUsNyBAQCBzdGF0aWMgdm9pZCByZHNfdGNwX2V4aXQodm9pZCkKICNlbmRpZgogCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmYW1wO3Jkc190Y3BfbmV0X29wcyk7CiAJcmRzX3RjcF9kZXN0cm95X2Nvbm5zKCk7CiYjNDM7CXJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoJmFtcDtyZHNfdGNwX3RyYW5zcG9ydCk7CiAJcmRzX3RyYW5zX3VucmVnaXN0ZXIoJmFtcDtyZHNfdGNwX3RyYW5zcG9ydCk7CiAJcmRzX3RjcF9yZWN2X2V4aXQoKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX3RjcF9jb25uX3NsYWIpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwppbmRleCAxM2ZhNjBjMTk4NWJiLi4wZDJjZWQ4OTJhOGFlIDEwMDY0NAotLS0gYS9uZXQvcmRzL3RjcF9saXN0ZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwpAQCAtMTUzLDcgJiM0MzsxNTMsNyBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKQogewogCXN0cnVjdCBzb2NrZXQgKmxpc3Rlbl9zb2NrID0gcnRuLSZndDtyZHNfdGNwX2xpc3Rlbl9zb2NrOwogCXN0cnVjdCBzb2NrZXQgKm5ld19zb2NrID0gTlVMTDsKLQlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CiYjNDM7CXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwogCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnJzX3RjcCA9IE5VTEw7CkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIGludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pCiAKIAlpZiAoSVNfRVJSKGNvbm4pKSB7CiAJCXJldCA9IFBUUl9FUlIoY29ubik7CiYjNDM7CQljb25uID0gTlVMTDsKIAkJZ290byBvdXQ7CiAJfQogCS8qIEFuIGluY29taW5nIFNZTiByZXF1ZXN0IGNhbWUgaW4sIGFuZCBUQ1AganVzdCBhY2NlcHRlZCBpdC4KQEAgLTM0Myw2ICYjNDM7MzQ0LDggQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bikKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7cnNfdGNwLSZndDt0X2Nvbm5fcGF0aF9sb2NrKTsKIAlpZiAobmV3X3NvY2spCiAJCXNvY2tfcmVsZWFzZShuZXdfc29jayk7CiYjNDM7CWlmIChjb25uKQomIzQzOwkJcmRzX2Nvbm5fcHV0KGNvbm4pOwogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7cnRuLSZndDtyZHNfdGNwX2FjY2VwdF9sb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg2MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJEUyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBrZXJuZWwgcGF0Y2ggc2VyaWVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgc3Vic3lzdGVtLiBMZXQmIzM5O3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGZpbGVzIHdpdGhpbiBgbmV0L3Jkcy9gOiBgYWZfcmRzLmNgLCBgY29ubmVjdGlvbi5jYCwgYGliLmNgLCBgaWJfY20uY2AsIGBsb29wLmNgLCBgbWVzc2FnZS5jYCwgYHJkcy5oYCwgYHJlY3YuY2AsIGBzZW5kLmNgLCBgdGNwLmNgLCBhbmQgYHRjcF9saXN0ZW4uY2AuIFRoaXMgc3VnZ2VzdHMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIGFjcm9zcyB0aGUgY29yZSBSRFMgaW1wbGVtZW50YXRpb24uCgpUaGUga2V5IGNoYW5nZSBhcHBlYXJzIHRvIGJlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgcmVmZXJlbmNlIGNvdW50aW5nIOKAkyBga3JlZmAg4oCTIHRvIHRoZSBgc3RydWN0IHJkc19jb25uZWN0aW9uYC4gVGhleSYjMzk7cmUgcmVwbGFjaW5nIHRoZSBvbGQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdoaWNoLCBmcmFua2x5LCB3YXMgYWx3YXlzIGEgYml0IHN1c3BlY3Qgd2l0aCBpdHMgYXNzdW1wdGlvbnMgYWJvdXQgbm8gY29uY3VycmVudCByZWZlcmVuY2VzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFyb3VuZCBjb25uZWN0aW9uIGRlc3RydWN0aW9uLiBUaGlzIGlzIGEgY3JpdGljYWwgaW1wcm92ZW1lbnQsIGlmIGRvbmUgY29ycmVjdGx5LCBhcyBpdCBzb2x2ZXMgYSBmdW5kYW1lbnRhbCBjb25jdXJyZW5jeSBpc3N1ZS4KCkkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhleeKAmXZlIGltcGxlbWVudGVkIHRoaXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgcmRzX2Nvbm5fZGVzdHJveWAsIGBfX3Jkc19jb25uX2NyZWF0ZWAsIGByZHNfY29ubl9sb29rdXBgLCBgcmRzX3NlbmRtc2dgLCBgcmRzX3RjcF9hY2NlcHRfb25lYCwgYHJkc19yZWN2X2luY29taW5nYCwgYHJkc19tZXNzYWdlX2ZyZWVgLCBgcmRzX3JlbGVhc2VgLCBhbmQgc2V2ZXJhbCBvdGhlcnMuIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgbGlrZWx5IHdlcmUgbm90IHJlZmVyZW5jZSBjb3VudGVkIGJlZm9yZSB0aGUgcGF0Y2ggYW5kIHdpbGwgZ2l2ZSBhd2F5IGhvdyB3ZWxsIHRoZSByZWZlcmVuY2UgY291bnRpbmcgaGFzIGJlZW4gaW5jb3Jwb3JhdGVkLgoKSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGluY3JlbWVudGVkIGFuZCBkZWNyZW1lbnRlZCBpbiBlYWNoIG9mIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gQXJlIHRoZXkgdXNpbmcgdGhlIGNvcnJlY3QgYGtyZWZgIGZ1bmN0aW9ucz8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aCBvdGhlciBjb2RlPyBJIG5lZWQgdG8gbG9vayBmb3IgbWlzc2VkIGBrcmVmX3B1dGAgY2FsbHMsIGRvdWJsZSBkZWNyZW1lbnRzLCBhbmQgaW1wcm9wZXIgbG9ja2luZyBhcm91bmQgdGhlIHJlZmNvdW50LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUkRTIHRyYW5zcG9ydHMgdGhlbXNlbHZlcyAoVENQLCBSRE1BLCBldGMuKSB0byBlbnN1cmUgdGhlIHJlZmNvdW50aW5nIGlzIHByb3Blcmx5IGludGVncmF0ZWQgYXQgdGhhdCBsZXZlbC4KClRvIHN0YXJ0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgYG5ldC9yZHMvS2NvbmZpZ2AgZmlsZSB3aXRoIGdyZXBwZXIgdG8gcmV2aWV3IHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBhbmQgdGhlIHNwZWNpZmljIHRyYW5zcG9ydCBjb25maWd1cmF0aW9ucy4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBjb250ZXh0IG9uIHdoaWNoIHRyYW5zcG9ydHMgYXJlIGVuYWJsZWQgYW5kIHdoaWNoIG9uZXMgYXJlIGJlaW5nIGFmZmVjdGVkLiBUaGUgaW1wb3J0YW50IGNvbnNpZGVyYXRpb24gd2lsbCBiZSB0byB2ZXJpZnkgdGhlIGNvbXBhdGliaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJEUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnLTItXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXG5uZXQvcmRzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTktXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXG5uZXQvcmRzL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBJbmZpbmliYW5kXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTE2LVxubmV0L3Jkcy9LY29uZmlnOjE3OmNvbmZpZyBSRFNfVENQXG5uZXQvcmRzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBUQ1BcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctMjQtXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xubmV0L3Jkcy9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4OTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBSRFMgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYG5ldC9yZHMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXZlcnl0aGluZyBpbiBpdCwgZnJvbSB0aGUgdG9wIHRvIHRoZSBib3R0b20uIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgaXRzIHN0cnVjdHVyZSwgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXQgcHJlc2VudHMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBwcm92aWRlIGEgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyBvdmVyIFRDUCAoUkRTKSBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZC4gVGhpcyBLY29uZmlnIGZpbGUgZGljdGF0ZXMgaG93IFJEUyBpcyBwcmVzZW50ZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGFuZCwgdWx0aW1hdGVseSwgaG93IGl0JiMzOTtzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEl0JiMzOTtzIGNydWNpYWwgZm9yIGNvbnRyb2xsaW5nIHdoaWNoIHBhcnRzIG9mIFJEUyBhcmUgY29tcGlsZWQuIEkmIzM5O2xsIHBheSBzcGVjaWZpYyBhdHRlbnRpb24gdG8gYW55IGRlZmF1bHQgdmFsdWVzLCBpZiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBpbnZvbHZlZCwgYW5kIGFueSByZWxhdGlvbiB0byBvdGhlciBLY29uZmlnIGZpbGVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIG9wdGlvbnMuIEkgYWxzbyBuZWVkIHRvIGFzY2VydGFpbiB3aGF0IHRoaXMgdGVsbHMgbWUgYWJvdXQgaXRzIGludGVncmF0aW9uIHdpdGggb3RoZXIgbmV0d29ya2luZyBzdGFja3MgYW5kIHJlbGF0ZWQgY29tcG9uZW50cy4gVGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIGNyb3NzLXJlZmVyZW5jaW5nIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IHRoZSBmdWxsIHN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIFJEU1xuICAgNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBUaGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBwcm90b2NvbCBwcm92aWRlcyByZWxpYWJsZSxcbiAgIDg6XHRcdCAgc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIGRhdGFncmFtcyBvdmVyIEluZmluaWJhbmQgb3IgVENQLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBSRFNfUkRNQVxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7UkRTIG92ZXIgSW5maW5pYmFuZFwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBSRFMgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBBbGxvdyBSRFMgdG8gdXNlIEluZmluaWJhbmQgYXMgYSB0cmFuc3BvcnQuXG4gIDE1Olx0XHQgIFRoaXMgdHJhbnNwb3J0IHN1cHBvcnRzIFJETUEgb3BlcmF0aW9ucy5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgUkRTX1RDUFxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7UkRTIG92ZXIgVENQXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFJEU1xuICAyMDpcdFx0ZGVwZW5kcyBvbiBJUFY2IHx8ICFJUFY2XG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIEFsbG93IFJEUyB0byB1c2UgVENQIGFzIGEgdHJhbnNwb3J0LlxuICAyMzpcdFx0ICBUaGlzIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IFJETUEgb3BlcmF0aW9ucy5cbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgUkRTX0RFQlVHXG4gIDI2Olx0XHRib29sIFwmIzM0O1JEUyBkZWJ1Z2dpbmcgbWVzc2FnZXNcJiMzNDtcbiAgMjc6XHRcdGRlcGVuZHMgb24gUkRTXG4gIDI4Olx0XHRkZWZhdWx0IG5cbiAgMjk6XHRcbiAgMzA6XHRjb25maWcgR0NPVl9QUk9GSUxFX1JEU1xuICAzMTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgb24gUkRTXCYjMzQ7XG4gIDMyOlx0XHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXG4gIDMzOlx0XHRoZWxwXG4gIDM0Olx0XHQgIEVuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiBSRFMgZm9yIGNoZWNraW5nIHdoaWNoIGZ1bmN0aW9ucy9saW5lc1xuICAzNTpcdFx0ICBhcmUgZXhlY3V0ZWQuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBSRFM6IEEgQ2xlYXIgVGFyZ2V0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFJEUywgUmVkdW5kYW50IERhdGEgUHJvdG9jb2wsIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgY2FsbHMg4oCTIGBBRl9SRFNgLCBgUEZfUkRTYCwgdGhlIHdvcmtzLiBTeXprYWxsZXImIzM5O3MgZ290IHRoZSBmdWxsIHRvb2xib3ggcmVhZHkgdG8gZ28sIGhhbmRsaW5nIHRoZSBSRFMgc29ja2V0IHByaW1pdGl2ZXMgd2l0aCBlYXNlLiAgQW5kIHNpbmNlIGl0IHJ1bnMgZmluZSB3aXRoaW4gb3VyIHN0YW5kYXJkIFFFTVUgc2V0dXAsIGluY2x1ZGluZyBsb29wYmFjaywgVENQLCBhbmQgZXZlbiBSRE1BIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgcHJvcGVybHksIHdlJiMzOTt2ZSBnb3QgYSByZWFkaWx5IGV4ZWN1dGFibGUgdGFyZ2V0LgoKVGhlIGp1aWN5IHBhcnQsIGFuZCB0aGUga2V5IGZvciBmdXp6aW5nLCBpcyB0aGUgY29yZSBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uOiBzZW5kaW5nLCByZWNlaXZpbmcsIGFjY2VwdGluZywgY29ubmVjdGluZywgcmVsZWFzaW5nIHRoZSBzb2NrZXRzLi4uIGFsbCB0aGF0IGdvb2Qgc3R1ZmYuICBUaGlzIGNvZGUgbWFuaXB1bGF0ZXMgdGhlIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIHdpdGggYGtyZWZgIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZGVmZXJyZWQgZnJlZWluZywgaW50cm9kdWNlcyB0aG9zZSBgY19kZXN0cm95X2luX3Byb2dgIGNoZWNrcywgYW5kIGFkZHMgcmVmY291bnRpbmcgdG8gYHJzLSZndDtyc19jb25uYCBhbmQgdGhlIG1lc3NhZ2VzIHRoZW1zZWx2ZXMgKGByZHNfbWVzc2FnZV9mcmVlYCwgYHJkc19pbmNfcHV0YCwgYHJkc19yZWN2X2luY29taW5nYCksIGNoYW5naW5nIHJlZmNvdW50aW5nLCBsb2NraW5nLCBzeW5jaHJvbml6YXRpb24sIGFuZCB0aGUgb3ZlcmFsbCBtZW1vcnkgbGlmZWN5Y2xlIHdpdGhpbiB0aGUgbmV0d29yayBwcm90b2NvbC4gVGhhdCBzY3JlYW1zIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvbmZpcm1lZDogYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgdHJ1ZWAuICBObyBxdWVzdGlvbiB0aGVyZS4KCk5leHQgdXAsIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1JEU2AgYW5kIGBDT05GSUdfUkRTX1RDUGAgYXJlIHRoZSBvYnZpb3VzIG9uZXMuIFRoZW4gd2UgaGF2ZSBgUkRTX1JETUFgLCB3aGljaCBkZXBlbmRzIG9uIGBJTkZJTklCQU5EYCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AuIFNvLCBSRFMgYW5kIFJEU19UQ1AgYXJlIHByaW1hcnksIGFuZCBSRFNfUkRNQSBkZXBlbmRzIG9uIG90aGVyIGNvbmZpZ3MuIFNob3VsZCB3ZSBpbmNsdWRlIGFsbCB0aHJlZSB3aGVuIGJ1aWxkaW5nIHRoZSBmdXp6IHRhcmdldHM/CgpPa2F5LCBsZXQmIzM5O3MgZXhwbG9yZSB0aG9zZSBjb25maWd1cmF0aW9ucyBkaXJlY3RseTogYFJEU2AsIGBSRFNfVENQYCwgYW5kIGBSRFNfUkRNQWAuIEFuZCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmaWxlcyBvciBjb25maWdzIHdlIHNob3VsZCBiZSBhd2FyZSBvZi4KCkxldCYjMzk7cyBzdGFydCB3aXRoIGBuZXQvcmRzL01ha2VmaWxlYC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Jkcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfUkRTKSAmIzQzOz0gcmRzLm9cbiAgIDM6XHRyZHMteSA6PVx0YWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFxcXG4gICA0Olx0XHRcdFx0cmVjdi5vIHNlbmQubyBzdGF0cy5vIHN5c2N0bC5vIHRocmVhZHMubyB0cmFuc3BvcnQubyBcXFxuICAgNTpcdFx0XHRcdGxvb3AubyBwYWdlLm8gcmRtYS5vXG4gICA2Olx0XG4gICA3Olx0b2JqLSQoQ09ORklHX1JEU19SRE1BKSAmIzQzOz0gcmRzX3JkbWEub1xuICAgODpcdHJkc19yZG1hLXkgOj1cdHJkbWFfdHJhbnNwb3J0Lm8gXFxcbiAgIDk6XHRcdFx0XHRpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcXFxuICAxMDpcdFx0XHRcdGliX3N5c2N0bC5vIGliX3JkbWEubyBpYl9mcm1yLm9cbiAgMTE6XHRcbiAgMTI6XHRcbiAgMTM6XHRvYmotJChDT05GSUdfUkRTX1RDUCkgJiM0Mzs9IHJkc190Y3Aub1xuICAxNDpcdHJkc190Y3AteSA6PVx0XHR0Y3AubyB0Y3BfY29ubmVjdC5vIHRjcF9saXN0ZW4ubyB0Y3BfcmVjdi5vIFxcXG4gIDE1Olx0XHRcdFx0dGNwX3NlbmQubyB0Y3Bfc3RhdHMub1xuICAxNjpcdFxuICAxNzpcdGNjZmxhZ3MtJChDT05GSUdfUkRTX0RFQlVHKVx0Oj1cdC1EUkRTX0RFQlVHXG4gIDE4Olx0XG4gIDE5Olx0IyBmb3IgR0NPViBjb3ZlcmFnZSBwcm9maWxpbmdcbiAgMjA6XHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX1JEU1xuICAyMTpcdEdDT1ZfUFJPRklMRSA6PSB5XG4gIDIyOlx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc5OAoJCQkJCQkJb3V0cHV0OiAyNjcKCQkJCQkJCXRob3VnaHRzOiA5MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFJEUyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEkgc2VlIGEgcHJldHR5IGV4dGVuc2l2ZSBsaXN0IG9mIG1vZGlmaWVkIHN5bWJvbHM6IGByZHNfcmVsZWFzZWAsIGEgd2hvbGUgYnVuY2ggb2YgYHJkc19jb25uXypgIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gbWFuYWdlbWVudCwgYW5kIHRoZW4gZnVuY3Rpb25zIHNjYXR0ZXJlZCBhY3Jvc3MgSUIsIGxvb3AsIG1lc3NhZ2UgaGFuZGxpbmcsIHJlY2VpdmUsIHNlbmQsIGFuZCBUQ1AuCgpNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIG5hcnJvdyBkb3duIHRoZSBmb2N1cy4gSSB3YW50IHRvIGlkZW50aWZ5IHRoZSAqbW9zdCogaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgdG8gZXhwb3NlIG5ldyB2dWxuZXJhYmlsaXRpZXMuIEJhc2VkIG9uIHRoZSBtb2RpZmljYXRpb25zLCB0aGUgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSBkZWFsaW5nIHdpdGggY3JlYXRpb24sIGRlc3RydWN0aW9uLCBnZXR0aW5nLCBwdXR0aW5nIGFuZCBsb29rdXAgc2VlbSBsaWtlIHRoZSBtb3N0IGNyaXRpY2FsIG9uZXMuIGByZHNfc2VuZG1zZ2AsIGByZHNfcmVjdl9pbmNvbWluZ2AsIGByZHNfaW5jX3B1dGAsIGByZHNfbWVzc2FnZV9mcmVlYCwgYW5kIGByZHNfdGNwX2FjY2VwdF9vbmVgIGFsc28gc3RhbmQgb3V0LCBhcyB0aGV5IGFyZSBhbGwgYXQgdGhlIGludGVyZmFjZSBib3VuZGFyeSBvZiB0aGUgdXNlciBhbmQga2VybmVsIHNwYWNlLiBTbywgSSBzZWxlY3QgYF9fcmRzX2Nvbm5fY3JlYXRlYCwgYHJkc19jb25uX2Rlc3Ryb3lgLCBgcmRzX2Nvbm5fZGVzdHJveV9maW5pYCwgYHJkc19jb25uX3B1dGAsIGByZHNfY29ubl9nZXRgLCBgcmRzX2Nvbm5fbG9va3VwYCwgYHJkc19zZW5kbXNnYCwgYHJkc19yZWN2X2luY29taW5nYCwgYHJkc19pbmNfcHV0YCwgYHJkc19tZXNzYWdlX2ZyZWVgLCBhbmQgYHJkc190Y3BfYWNjZXB0X29uZWAuCgpJIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byB0aGUgUkRTIHN1YnN5c3RlbSBhbmQgYXJlIGRpcmVjdGx5IHRvdWNoZWQgYnkgdGhlIHBhdGNoLiBUaGV5IGFsbCBzZWVtIHRvIGZpdCB0aGUgYmlsbC4KCk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoaXMgcGF0Y2ggbGlrZWx5IGludHJvZHVjZXMgY2hhbmdlcyByZWxhdGVkIHRvIGNvcmUgUkRTIGZ1bmN0aW9uYWxpdHksIGFsb25nIHdpdGggaXRzIFRDUCBhbmQgUkRNQSBpbXBsZW1lbnRhdGlvbnMuIFNvIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkIHdpdGggYFJEU2AsIGBSRFNfVENQYCwgYW5kIGBSRFNfUkRNQWAuIEdpdmVuIHRoYXQgYFJEU2AgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBSRFNfUkRNQWAgZGVwZW5kcyBvbiBgSU5GSU5JQkFORGAsIEkmIzM5O2xsIGFsc28gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKT2theSwgbGV0JiMzOTtzIGZvcm11bGF0ZSB0aGUgcmVhc29uaW5nIGNsZWFybHkuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCByZWZlcmVuY2UgY291bnRpbmcgb2YgYHN0cnVjdCByZHNfY29ubmVjdGlvbmAgd2l0aCBga3JlZmAsIGFuZCBpdCByZW9yZ2FuaXplcyBjb25uZWN0aW9uIGRlc3RydWN0aW9uIGludG8gYSBxdWllc2NpbmcgYW5kIGZyZWVpbmcgcGhhc2UuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhIGRlZXAgZGl2ZSBpbnRvIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGluY2x1ZGluZyBjb3JlIHN5bmNocm9uaXphdGlvbiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBSRFMgcHJvdG9jb2wuIFNpbmNlIFJEUyBpcyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgc29ja2V0IG9wZXJhdGlvbnMsIGZsYXdzIGhlcmUgY291bGQgaGF2ZSBzZXJpb3VzIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gVGhlIGNoYW5nZXMgdG91Y2ggY3JpdGljYWwgYXJlYXMgbGlrZSBzZW5kLCByZWNlaXZlLCBhbmQgbWVzc2FnZSBoYW5kbGluZywgYXMgd2VsbCBhcyB0cmFuc3BvcnQtc3BlY2lmaWMgaGFuZGxlcnMgaW4gbG9vcCwgVENQLCBhbmQgSUIuIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgYWxsIGFyZWFzIG9mIG5ldHdvcmtpbmcgYXJlIGNvbXBsZXggYW5kIHByb25lIHRvIGVycm9ycy4KClRoZXJlZm9yZSwgV29ydGhGdXp6aW5nPXRydWUuIE5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19yZHNfY29ubl9jcmVhdGUmIzM0OywKICAgICYjMzQ7cmRzX2Nvbm5fZGVzdHJveSYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9kZXN0cm95X2ZpbmkmIzM0OywKICAgICYjMzQ7cmRzX2Nvbm5fZ2V0JiMzNDssCiAgICAmIzM0O3Jkc19jb25uX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9sb29rdXAmIzM0OywKICAgICYjMzQ7cmRzX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cmRzX3JlY3ZfaW5jb21pbmcmIzM0OywKICAgICYjMzQ7cmRzX2luY19wdXQmIzM0OywKICAgICYjMzQ7cmRzX21lc3NhZ2VfZnJlZSYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX2FjY2VwdF9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZWZlcmVuY2UgY291bnRpbmcgKGtyZWYpIHRvIHN0cnVjdCByZHNfY29ubmVjdGlvbiAoY19yZWZjb3VudCkgdG8gcHJvcGVybHkgbWFuYWdlIGNvbm5lY3Rpb24gbGlmZXRpbWVzIGFuZCBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGFuZCByYWNlIGNvbmRpdGlvbnMuIEl0IHJlZmFjdG9ycyBjb25uZWN0aW9uIHRlYXJkb3duIGludG8gc3luY2hyb25vdXMgcXVpZXNjZSAocmRzX2Nvbm5fcGF0aF9xdWllc2NlLCByZHNfY29ubl9kZXN0cm95KSBhbmQgYXN5bmNocm9ub3VzIGRlc3RydWN0aW9uIChyZHNfY29ubl9kZXN0cm95X2ZpbmkpLCBhbmQgdXBkYXRlcyByZWZlcmVuY2UgdHJhY2tpbmcgYWNyb3NzIHNvY2tldCByZWxlYXNlLCBtZXNzYWdlIHF1ZXVlcywgcmVjdi9zZW5kIHBhdGhzLCBhbmQgdHJhbnNwb3J0cyAoVENQLCBsb29wLCBJQikuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIGxvZ2ljLCBzeW5jaHJvbml6YXRpb24sIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpbiBuZXQvcmRzLCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkRTJiMzNDssCiAgICAmIzM0O1JEU19UQ1AmIzM0OywKICAgICYjMzQ7UkRTX1JETUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3Jkc19jb25uX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9kZXN0cm95JiMzNDssCiAgICAmIzM0O3Jkc19jb25uX2Rlc3Ryb3lfZmluaSYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9nZXQmIzM0OywKICAgICYjMzQ7cmRzX2Nvbm5fcHV0JiMzNDssCiAgICAmIzM0O3Jkc19jb25uX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyZHNfcmVjdl9pbmNvbWluZyYjMzQ7LAogICAgJiMzNDtyZHNfaW5jX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfbWVzc2FnZV9mcmVlJiMzNDssCiAgICAmIzM0O3Jkc190Y3BfYWNjZXB0X29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyAoa3JlZikgdG8gc3RydWN0IHJkc19jb25uZWN0aW9uIChjX3JlZmNvdW50KSB0byBwcm9wZXJseSBtYW5hZ2UgY29ubmVjdGlvbiBsaWZldGltZXMgYW5kIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucy4gSXQgcmVmYWN0b3JzIGNvbm5lY3Rpb24gdGVhcmRvd24gaW50byBzeW5jaHJvbm91cyBxdWllc2NlIChyZHNfY29ubl9wYXRoX3F1aWVzY2UsIHJkc19jb25uX2Rlc3Ryb3kpIGFuZCBhc3luY2hyb25vdXMgZGVzdHJ1Y3Rpb24gKHJkc19jb25uX2Rlc3Ryb3lfZmluaSksIGFuZCB1cGRhdGVzIHJlZmVyZW5jZSB0cmFja2luZyBhY3Jvc3Mgc29ja2V0IHJlbGVhc2UsIG1lc3NhZ2UgcXVldWVzLCByZWN2L3NlbmQgcGF0aHMsIGFuZCB0cmFuc3BvcnRzIChUQ1AsIGxvb3AsIElCKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgbG9naWMsIHN5bmNocm9uaXphdGlvbiwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGluIG5ldC9yZHMsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChga3JlZmApIG9mIGBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb25gIGFjcm9zcyB0aGUgUkRTIHN1YnN5c3RlbSAoaW5jbHVkaW5nIFRDUCwgSUIsIGFuZCBsb29wYmFjayB0cmFuc3BvcnRzKSB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGFuZCBtb2R1bGUtdW5sb2FkIHJhY2VzLlxuXG4tIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHJlZmNvdW50IGltYmFsYW5jZSwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBkZWFkbG9jayBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLCBTTFVCIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuXG4tIEtNU0FOIEFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgZG9lcyBub3QgbW9kaWZ5IGFueSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBpbmZvLWxlYWsgcmlzayksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBzaXppbmcgb3IgYm91bmRzIGNoZWNraW5nLCBhbmQgYHN0cnVjdCByZHNfY29ubmVjdGlvbmAgb2JqZWN0cyBjb250aW51ZSB0byBiZSBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2NgIChmdWxseSB6ZXJvLWluaXRpYWxpemVkKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDAxNWUxODZlNTRlMzU5M2RmNmZmYTAwNzMxYWVhMDlhOTE4YWQyMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTU6NTY6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuYwppbmRleCBkNWRlZmU5MTcyZTM2Li4wZWFhNWI5NzY1NzI0IDEwMDY0NAotLS0gYS9uZXQvcmRzL2FmX3Jkcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvYWZfcmRzLmMKQEAgLTgwLDYgJiM0Mzs4MCwxNCBAQCBzdGF0aWMgaW50IHJkc19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAJcmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIE5VTEwpOwogCXJkc19ub3RpZnlfbXNnX3pjb3B5X3B1cmdlKCZhbXA7cnMtJmd0O3JzX3pjb29raWVfcXVldWUpOwogCiYjNDM7CS8qIGRyb3AgdGhlIGNhY2hlZCBjb25uZWN0aW9uIHJlZmVyZW5jZTsgbm8gc2VuZG1zZyBjYW4gcmFjZQomIzQzOwkgKiB3aXRoIHVzIGhlcmUsIHRoZSBzb2NrZXQgaXMgZ29pbmcgYXdheQomIzQzOwkgKi8KJiM0MzsJaWYgKHJzLSZndDtyc19jb25uKSB7CiYjNDM7CQlyZHNfY29ubl9wdXQocnMtJmd0O3JzX2Nvbm4pOwomIzQzOwkJcnMtJmd0O3JzX2Nvbm4gPSBOVUxMOwomIzQzOwl9CiYjNDM7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7cmRzX3NvY2tfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmYW1wO3JzLSZndDtyc19pdGVtKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3Jkc19zb2NrX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwppbmRleCBiNmM0YmViNTBlYWYwLi4yYzhjYTU0YTkxY2E4IDEwMDY0NAotLS0gYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwpAQCAtNDcsNyAmIzQzOzQ3LDggQEAKIAogLyogY29udmVydGluZyB0aGlzIHRvIFJDVSBpcyBhIGNob3JlIGZvciBhbm90aGVyIGRheS4uICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25uX2xvY2spOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2Nvbm5fY291bnQ7CiYjNDM7Lyogd29rZW4gd2hlbmV2ZXIgYSB0cmFuc3BvcnQmIzM5O3MgdF9jb25uX2NvdW50IGRyb3BzIHRvIHplcm8gKi8KJiM0MztzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2Nvbm5fZnJlZWRfd2FpdHEpOwogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIHJkc19jb25uX2hhc2hbUkRTX0NPTk5FQ1RJT05fSEFTSF9FTlRSSUVTXTsKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2Nvbm5fc2xhYjsKIApAQCAtNzksNyAmIzQzOzgwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqcmRzX2Nvbm5fYnVja2V0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsCiAJCXZhciB8PSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfIyNzdWZmaXg7CVwKIH0gd2hpbGUgKDApCiAKLS8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrICovCiYjNDM7LyogcmN1IHJlYWQgbG9jayBtdXN0IGJlIGhlbGQgb3IgdGhlIGNvbm5lY3Rpb24gc3BpbmxvY2suCiYjNDM7ICogT24gc3VjY2VzcyBhIHJlZmVyZW5jZSBpcyB0YWtlbiBvbiB0aGUgcmV0dXJuZWQgY29ubmVjdGlvbjsgdGhlCiYjNDM7ICogY2FsbGVyIG11c3QgZHJvcCBpdCB3aXRoIHJkc19jb25uX3B1dCgpLgomIzQzOyAqLwogc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsCiAJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsCkBAIC05Niw2ICYjNDM7MTAwLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCiAJCSAgICBjb25uLSZndDtjX3RvcyA9PSB0b3MgJmFtcDsmYW1wOwogCQkgICAgbmV0ID09IHJkc19jb25uX25ldChjb25uKSAmYW1wOyZhbXA7CiAJCSAgICBjb25uLSZndDtjX2Rldl9pZiA9PSBkZXZfaWYpIHsKJiM0MzsJCQkvKiBBbiBlbnRyeSB3aG9zZSByZWZjb3VudCBhbHJlYWR5IGRyb3BwZWQgdG8KJiM0MzsJCQkgKiB6ZXJvIGhhcyBiZWVuIHVuaGFzaGVkIGFuZCBpcyBhYm91dCB0byBiZQomIzQzOwkJCSAqIGZyZWVkOyBhbiBSQ1UgdHJhdmVyc2FsIG1heSBzdGlsbCBjb21lCiYjNDM7CQkJICogYWNyb3NzIGl0LiAgVHJlYXQgaXQgYXMgYWJzZW50LgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtjb25uLSZndDtjX3JlZmNvdW50KSkKJiM0MzsJCQkJY29udGludWU7CiAJCQlyZXQgPSBjb25uOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE5Nyw3ICYjNDM7MjA4LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJICogV2UgbmVlZCBhIHNlY29uZCBjb25uZWN0aW9uIG9iamVjdCBpbnRvIHdoaWNoIHdlCiAJCSAqIGNhbiBzdGljayB0aGUgb3RoZXIgUVAuICovCiAJCXBhcmVudCA9IGNvbm47CiYjNDM7CQkvKiBUaGUgY19wYXNzaXZlIHBvaW50ZXIgaG9sZHMgYSByZWZlcmVuY2Ugd2hpY2ggaXMgb25seQomIzQzOwkJICogZHJvcHBlZCBvbmUgc3luY2hyb25pemVfcmN1KCkgYWZ0ZXIgdGhlIHBvaW50ZXIgaXMKJiM0MzsJCSAqIGNsZWFyZWQsIHNvIHdpdGhpbiB0aGlzIFJDVSBzZWN0aW9uIGEgZmV0Y2hlZCBwb2ludGVyCiYjNDM7CQkgKiBpcyBhbHdheXMgc2FmZSB0byB0YWtlIGEgcmVmZXJlbmNlIG9uLgomIzQzOwkJICovCiAJCWNvbm4gPSBwYXJlbnQtJmd0O2NfcGFzc2l2ZTsKJiM0MzsJCWlmIChjb25uKQomIzQzOwkJCXJkc19jb25uX2dldChjb25uKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKGNvbm4pCkBAIC0yMTUsNiAmIzQzOzIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJZ290byBvdXQ7CiAJfQogCiYjNDM7CWtyZWZfaW5pdCgmYW1wO2Nvbm4tJmd0O2NfcmVmY291bnQpOwogCUlOSVRfSExJU1RfTk9ERSgmYW1wO2Nvbm4tJmd0O2NfaGFzaF9ub2RlKTsKIAljb25uLSZndDtjX2xhZGRyID0gKmxhZGRyOwogCWNvbm4tJmd0O2NfaXN2NiA9ICFpcHY2X2FkZHJfdjRtYXBwZWQobGFkZHIpOwpAQCAtMjgyLDggJiM0MzszMDEsOSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICBpc19vdXRnb2luZyk7CiAJCWNvbm4tJmd0O2NfcGF0aFtpXS5jcF9pbmRleCA9IGk7CiAJCWNvbm4tJmd0O2NfcGF0aFtpXS5jcF93cSA9Ci0JCQlhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgmIzM0O2tyZHNfY3Bfd3EjJWx1LyVkJiMzNDssIDAsCi0JCQkJCQlyZHNfY29ubl9jb3VudCwgaSk7CiYjNDM7CQkJYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoJiMzNDtrcmRzX2NwX3dxIyVkLyVkJiMzNDssIDAsCiYjNDM7CQkJCQkJYXRvbWljX3JlYWQoJmFtcDt0cmFucy0mZ3Q7dF9jb25uX2NvdW50KSwKJiM0MzsJCQkJCQlpKTsKIAkJaWYgKCFjb25uLSZndDtjX3BhdGhbaV0uY3Bfd3EpCiAJCQljb25uLSZndDtjX3BhdGhbaV0uY3Bfd3EgPSByZHNfd3E7CiAJfQpAQCAtMzE1LDE1ICYjNDM7MzM1LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Jkc19jb25uX2xvY2ssIGZsYWdzKTsKIAlpZiAocGFyZW50KSB7CiAJCS8qIENyZWF0aW5nIHBhc3NpdmUgY29ubiAqLwotCQlpZiAocGFyZW50LSZndDtjX3Bhc3NpdmUpIHsKJiM0MzsJCWlmIChSRUFEX09OQ0UocGFyZW50LSZndDtjX2Rlc3Ryb3lfaW5fcHJvZykpIHsKJiM0MzsJCQkvKiBUaGUgcGFyZW50JiMzOTtzIGRlc3Ryb3kgaGFzIGJlZ3VuIChpdCBzZXRzIHRoZQomIzQzOwkJCSAqIGZsYWcgYW5kIHNuYXRjaGVzIGNfcGFzc2l2ZSB1bmRlciB0aGlzCiYjNDM7CQkJICogbG9jayk7IGRvIG5vdCBpbnN0YWxsIGEgbmV3IHBhc3NpdmUgY29ubgomIzQzOwkJCSAqIHRoYXQgbm90aGluZyB3b3VsZCBldmVyIGRlc3Ryb3kuCiYjNDM7CQkJICovCiYjNDM7CQkJdHJhbnMtJmd0O2Nvbm5fZnJlZShjb25uLSZndDtjX3BhdGhbMF0uY3BfdHJhbnNwb3J0X2RhdGEpOwomIzQzOwkJCWZyZWVfY3AgPSBjb25uLSZndDtjX3BhdGg7CiYjNDM7CQkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOwomIzQzOwkJCWNvbm4gPSBFUlJfUFRSKC1FTkVURE9XTik7CiYjNDM7CQl9IGVsc2UgaWYgKHBhcmVudC0mZ3Q7Y19wYXNzaXZlKSB7CiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KHBhcmVudC0mZ3Q7Y19wYXNzaXZlKTsKIAkJCXRyYW5zLSZndDtjb25uX2ZyZWUoY29ubi0mZ3Q7Y19wYXRoWzBdLmNwX3RyYW5zcG9ydF9kYXRhKTsKIAkJCWZyZWVfY3AgPSBjb25uLSZndDtjX3BhdGg7CiAJCQlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CiAJCQljb25uID0gcGFyZW50LSZndDtjX3Bhc3NpdmU7CiAJCX0gZWxzZSB7CiYjNDM7CQkJLyogVGhlIGluaXRpYWwgcmVmZXJlbmNlIGJlbG9uZ3MgdG8gd2hvZXZlcgomIzQzOwkJCSAqIGRlc3Ryb3lzIHRoZSBjb25uICh0aGUgdHJhbnNwb3J0JiMzOTtzIGNvbm4KJiM0MzsJCQkgKiBsaXN0cywgYXMgZm9yIGFueSBvdGhlciBjb25uKS4gIFRha2Ugb25lCiYjNDM7CQkJICogZm9yIHRoZSBjX3Bhc3NpdmUgcG9pbnRlciAtIGRyb3BwZWQgd2hlbgomIzQzOwkJCSAqIHRoZSBwYXJlbnQgaXMgZGVzdHJveWVkIC0gYW5kIG9uZSBmb3Igb3VyCiYjNDM7CQkJICogY2FsbGVyLgomIzQzOwkJCSAqLwomIzQzOwkJCXJkc19jb25uX2dldChjb25uKTsJLyogY19wYXNzaXZlICovCiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KGNvbm4pOwkvKiBjYWxsZXIgKi8KIAkJCXBhcmVudC0mZ3Q7Y19wYXNzaXZlID0gY29ubjsKIAkJCXJkc19jb25nX2FkZF9jb25uKGNvbm4pOwotCQkJcmRzX2Nvbm5fY291bnQmIzQzOyYjNDM7OwomIzQzOwkJCWF0b21pY19pbmMoJmFtcDtjb25uLSZndDtjX3RyYW5zLSZndDt0X2Nvbm5fY291bnQpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogQ3JlYXRpbmcgbm9ybWFsIGNvbm4gKi8KQEAgLTM1MCwxNSAmIzQzOzM5MCwyMSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCX0gZWxzZSB7CiAJCQljb25uLSZndDtjX215X2dlbl9udW0gPSByZHNfZ2VuX251bTsKIAkJCWNvbm4tJmd0O2NfcGVlcl9nZW5fbnVtID0gMDsKJiM0MzsJCQkvKiB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyCiYjNDM7CQkJICogZGVzdHJveXMgdGhlIGNvbm47IHRha2Ugb25lIGZvciBvdXIgY2FsbGVyCiYjNDM7CQkJICovCiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KGNvbm4pOwogCQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7Y29ubi0mZ3Q7Y19oYXNoX25vZGUsIGhlYWQpOwogCQkJcmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7Ci0JCQlyZHNfY29ubl9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CQkJYXRvbWljX2luYygmYW1wO2Nvbm4tJmd0O2NfdHJhbnMtJmd0O3RfY29ubl9jb3VudCk7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3Jkc19jb25uX2xvY2ssIGZsYWdzKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogb3V0OgomIzQzOwlpZiAocGFyZW50KQomIzQzOwkJcmRzX2Nvbm5fcHV0KHBhcmVudCk7CiAJaWYgKGZyZWVfY3ApIHsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IG5wYXRoczsgaSYjNDM7JiM0MzspCiAJCQlpZiAoZnJlZV9jcFtpXS5jcF93cSAhPSByZHNfd3EpCkBAIC01MTUsMTAgJiM0Mzs1NjEsMTIgQEAgdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCWNvbm4tJmd0O2NfdHJhbnMtJmd0O2Nvbm5fc2xvdHNfYXZhaWxhYmxlKGNvbm4sIGZhbHNlKTsKIH0KIAotLyogZGVzdHJveSBhIHNpbmdsZSByZHNfY29ubl9wYXRoLiByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlcgotICogYWxsIHBhdGhzIHVzaW5nIHJkc19jb25uX3BhdGhfZGVzdHJveSgpCiYjNDM7LyogcXVpZXNjZSBhIHNpbmdsZSByZHNfY29ubl9wYXRoOiBzaHV0IGl0IGRvd24gYW5kIHRlYXIgZG93biBhbnkKJiM0MzsgKiBxdWV1ZWQgbWVzc2FnZXMuICByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlciBhbGwgcGF0aHMgdXNpbmcKJiM0MzsgKiByZHNfY29ubl9wYXRoX3F1aWVzY2UoKTsgdGhlIHRyYW5zcG9ydCBzdGF0ZSBhbmQgdGhlIHdvcmtxdWV1ZSBhcmUKJiM0MzsgKiBmcmVlZCBsYXRlciwgZnJvbSByZHNfY29ubl9wYXRoX2ZyZWUoKS4KICAqLwotc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKJiM0MztzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3F1aWVzY2Uoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogewogCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICpydG1wOwogCkBAIC01NDcsNiAmIzQzOzU5NSwxNiBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCVdBUk5fT04oZGVsYXllZF93b3JrX3BlbmRpbmcoJmFtcDtjcC0mZ3Q7Y3BfcmVjdl93KSk7CiAJV0FSTl9PTihkZWxheWVkX3dvcmtfcGVuZGluZygmYW1wO2NwLSZndDtjcF9jb25uX3cpKTsKIAlXQVJOX09OKHdvcmtfcGVuZGluZygmYW1wO2NwLSZndDtjcF9kb3duX3cpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZnJlZSBhIHF1aWVzY2VkIHJkc19jb25uX3BhdGgmIzM5O3MgdHJhbnNwb3J0IHN0YXRlIGFuZCB3b3JrcXVldWU7IHJ1bnMKJiM0MzsgKiBmcm9tIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgdGhlIGxhc3QgY29ubmVjdGlvbiByZWZlcmVuY2UgaXMKJiM0MzsgKiBkcm9wcGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZnJlZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiYjNDM7ewomIzQzOwlpZiAoIWNwLSZndDtjcF90cmFuc3BvcnRfZGF0YSkKJiM0MzsJCXJldHVybjsKIAogCWlmIChjcC0mZ3Q7Y3Bfd3EgIT0gcmRzX3dxKSB7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGNwLSZndDtjcF93cSk7CkBAIC01NTYsMTcgJiM0Mzs2MTQsNzQgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIAljcC0mZ3Q7Y3BfY29ubi0mZ3Q7Y190cmFucy0mZ3Q7Y29ubl9mcmVlKGNwLSZndDtjcF90cmFuc3BvcnRfZGF0YSk7CiB9CiAKJiM0MzsvKiBGcmVlIGEgY29ubmVjdGlvbi4gIFRoaXMgcnVucyBmcm9tIHJkc19jb25uX3B1dCgpIHdoZW4gdGhlIGxhc3QKJiM0MzsgKiByZWZlcmVuY2UgaXMgZHJvcHBlZCwgYWZ0ZXIgcmRzX2Nvbm5fZGVzdHJveSgpIGhhcyBxdWllc2NlZCB0aGUKJiM0MzsgKiBjb25uZWN0aW9uIGFuZCBkcm9wcGVkIHRoZSBpbml0aWFsIHJlZmVyZW5jZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCByZHNfY29ubl9kZXN0cm95X2Zpbmkoc3RydWN0IGtyZWYgKmtyZWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJkc19jb25uZWN0aW9uLAomIzQzOwkJCQkJCSAgIGNfcmVmY291bnQpOwomIzQzOwlpbnQgbnBhdGhzID0gKGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7CiYjNDM7CXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucyA9IGNvbm4tJmd0O2NfdHJhbnM7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnBhdGhzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJkc19jb25uX3BhdGhfZnJlZSgmYW1wO2Nvbm4tJmd0O2NfcGF0aFtpXSk7CiYjNDM7CiYjNDM7CWtmcmVlKGNvbm4tJmd0O2NfcGF0aCk7CiYjNDM7CWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKJiM0MzsKJiM0MzsJLyogb25seSBhZnRlciBldmVyeXRoaW5nIHRoZSB0cmFuc3BvcnQgbW9kdWxlIG93bnMgaGFzIGJlZW4KJiM0MzsJICogZnJlZWQgYWJvdmUgbWF5IGl0cyB1bmxvYWQgcHJvY2VlZAomIzQzOwkgKi8KJiM0MzsJaWYgKCFhdG9taWNfZGVjX3JldHVybigmYW1wO3RyYW5zLSZndDt0X2Nvbm5fY291bnQpKQomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtyZHNfY29ubl9mcmVlZF93YWl0cSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFdhaXQgZm9yIGFsbCBvZiBAdHJhbnMmIzM5O3MgY29ubmVjdGlvbnMgdG8gYmUgZnJlZWQ7IHRoZSBmcmVlIHJ1bnMKJiM0MzsgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYSBjb25uZWN0aW9uLgomIzQzOyAqIENhbGxlZCBvbiB0cmFuc3BvcnQgbW9kdWxlIHVubG9hZCwgYWZ0ZXIgdGhlIHRyYW5zcG9ydCBkZXN0cm95ZWQKJiM0MzsgKiBhbGwgb2YgaXRzIGNvbm5lY3Rpb25zOiBhbnl0aGluZyBzdGlsbCBob2xkaW5nIGEgY29ubmVjdGlvbgomIzQzOyAqIHJlZmVyZW5jZSBhdCB0aGF0IHBvaW50IGlzIGEgc2hvcnQtbGl2ZWQgbG9va3VwLXN0eWxlIGhvbGRlciwgc28KJiM0MzsgKiBhIGJvdW5kZWQgd2FpdCBzdWZmaWNlcyAtIGJ1dCB3YXJuIGlmIGl0IGV4cGlyZXMsIHNpbmNlIHRoZSBmcmVlcwomIzQzOyAqIHRoYXQgZm9sbG93IHRoZSB1bmxvYWQgd2lsbCB0aGVuIHRvdWNoIGZyZWVkIG1vZHVsZSB0ZXh0LgomIzQzOyAqLwomIzQzO3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpCiYjNDM7ewomIzQzOwlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChyZHNfY29ubl9mcmVlZF93YWl0cSwKJiM0MzsJCQkJIWF0b21pY19yZWFkKCZhbXA7dHJhbnMtJmd0O3RfY29ubl9jb3VudCksCiYjNDM7CQkJCW1zZWNzX3RvX2ppZmZpZXMoUkRTX0NPTk5fRlJFRV9USU1FT1VUX01TKSkpCiYjNDM7CQlXQVJOKDEsICYjMzQ7UkRTLyVzOiAlZCBjb25uZWN0aW9uKHMpIG5vdCBmcmVlZFxuJiMzNDssCiYjNDM7CQkgICAgIHRyYW5zLSZndDt0X25hbWUsIGF0b21pY19yZWFkKCZhbXA7dHJhbnMtJmd0O3RfY29ubl9jb3VudCkpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKTsKJiM0MzsKJiM0Mzt2b2lkIHJkc19jb25uX2dldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiYjNDM7ewomIzQzOwlrcmVmX2dldCgmYW1wO2Nvbm4tJmd0O2NfcmVmY291bnQpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9nZXQpOwomIzQzOwomIzQzO3ZvaWQgcmRzX2Nvbm5fcHV0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKJiM0Mzt7CiYjNDM7CWtyZWZfcHV0KCZhbXA7Y29ubi0mZ3Q7Y19yZWZjb3VudCwgcmRzX2Nvbm5fZGVzdHJveV9maW5pKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcHV0KTsKJiM0MzsKIC8qCiAgKiBTdG9wIGFuZCBmcmVlIGEgY29ubmVjdGlvbi4KICAqCi0gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gdmVyeSBsaW1pdGVkIGNpcmN1bXN0YW5jZXMuICBJdCBhc3N1bWVzIHRoYXQgb25jZQotICogdGhlIGNvbm4gaGFzIGJlZW4gc2h1dGRvd24gdGhhdCBubyBvbmUgZWxzZSBpcyByZWZlcmVuY2luZyB0aGUgY29ubmVjdGlvbi4KLSAqIFdlIGNhbiBvbmx5IGVuc3VyZSB0aGlzIGluIHRoZSBybW1vZCBwYXRoIGluIHRoZSBjdXJyZW50IGNvZGUuCiYjNDM7ICogUXVpZXNjZXMgdGhlIGNvbm5lY3Rpb24gc3luY2hyb25vdXNseSAod29ya2VycyBjYW5jZWxsZWQsIHRyYW5zcG9ydAomIzQzOyAqIGNvbm5lY3Rpb25zIHNodXQgZG93biwgcXVldWVkIG1lc3NhZ2VzIGRyb3BwZWQpIGFuZCBkcm9wcyB0aGUKJiM0MzsgKiBpbml0aWFsIHJlZmVyZW5jZS4gIFRoZSBtZW1vcnkgLSBpbmNsdWRpbmcgdGhlIHRyYW5zcG9ydCYjMzk7cwomIzQzOyAqIHBlci1jb25uZWN0aW9uIHN0YXRlIGFuZCB0aGUgcGF0aCB3b3JrcXVldWVzIC0gaXMgZnJlZWQgb25jZSB0aGUKJiM0MzsgKiBsYXN0IHJkc19jb25uX3B1dCgpIHJ1bnMsIHdoaWNoIG1heSBiZSBhZnRlciB0aGlzIHJldHVybnMuCiAgKi8KIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKJiM0MzsJc3RydWN0IHJkc19jb25uZWN0aW9uICpwYXNzaXZlOwogCXN0cnVjdCByZHNfY29ubl9wYXRoICpjcDsKIAlpbnQgbnBhdGhzID0gKGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7CiAKQEAgLTU3NCwxNiAmIzQzOzY4OSw0NiBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQogCQkgJiMzNDslcEk0XG4mIzM0OywgY29ubiwgJmFtcDtjb25uLSZndDtjX2xhZGRyLAogCQkgJmFtcDtjb25uLSZndDtjX2ZhZGRyKTsKIAotCS8qIEVuc3VyZSBjb25uIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBmb3IgcmVjb25uZWN0ICovCiYjNDM7CS8qIE1ha2UgcmRzX2Rlc3Ryb3lfcGVuZGluZygpIHRydWUgZm9yIHRoaXMgY29ubi4gIFRvZ2V0aGVyIHdpdGgKJiM0MzsJICogdGhlIHN5bmNocm9uaXplX3JjdSgpIGJlbG93IHRoaXMgc3RvcHMgdGhlIHdvcmstcmVxdWV1ZWluZwomIzQzOwkgKiBzaXRlcyAod2hpY2ggYWxsIHRlc3QgcmRzX2Rlc3Ryb3lfcGVuZGluZygpIHVuZGVyCiYjNDM7CSAqIHJjdV9yZWFkX2xvY2soKSkgZnJvbSBxdWV1ZWluZyBuZXcgd29yayBvbiB0aGUgcGF0aAomIzQzOwkgKiB3b3JrcXVldWVzIG9uY2Ugd2Ugc3RhcnQgY2FuY2VsbGluZyBhbmQgZGVzdHJveWluZyB0aGVtLgomIzQzOwkgKgomIzQzOwkgKiBOb3cgdGhhdCB0aGUgdHJhbnNwb3J0IHN0YXRlIHN0YXlzIGRpc2NvdmVyYWJsZSAoZS5nLiBvbiB0aGUKJiM0MzsJICogdHJhbnNwb3J0cyYjMzk7IGNvbm5lY3Rpb24gbGlzdHMpIHVudGlsIHRoZSBmaW5hbCByZHNfY29ubl9wdXQoKSwKJiM0MzsJICogYSBjb25uIGNhbiBiZSBoYW5kZWQgdG8gcmRzX2Nvbm5fZGVzdHJveSgpIG1vcmUgdGhhbiBvbmNlIC0KJiM0MzsJICogZS5nLiBkcm9wcGVkIGZvciBhIHByb3RvY29sIHZlcnNpb24gbWlzbWF0Y2ggYW5kIHRoZW4gZm91bmQKJiM0MzsJICogYWdhaW4gYXQgbW9kdWxlIHVubG9hZC4gIE9ubHkgdGhlIGZpcnN0IGNhbGxlciBwcm9jZWVkczsgdGhlCiYjNDM7CSAqIHVuaGFzaCBhbHNvIGhhcHBlbnMgdW5kZXIgcmRzX2Nvbm5fbG9jaywgc28gYSBsb29rZWQtdXAgY29ubgomIzQzOwkgKiBjYW4gbmV2ZXIgYmUgcXVpZXNjZWQgdHdpY2UuCiYjNDM7CSAqLwogCXNwaW5fbG9ja19pcnEoJmFtcDtyZHNfY29ubl9sb2NrKTsKJiM0MzsJaWYgKGNvbm4tJmd0O2NfZGVzdHJveV9pbl9wcm9nKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnEoJmFtcDtyZHNfY29ubl9sb2NrKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlXUklURV9PTkNFKGNvbm4tJmd0O2NfZGVzdHJveV9pbl9wcm9nLCB0cnVlKTsKJiM0MzsKJiM0MzsJLyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi8KIAlobGlzdF9kZWxfaW5pdF9yY3UoJmFtcDtjb25uLSZndDtjX2hhc2hfbm9kZSk7CiYjNDM7CiYjNDM7CS8qIFNuYXRjaCBjX3Bhc3NpdmUgd2hpbGUgaG9sZGluZyB0aGUgbG9jazoKJiM0MzsJICogX19yZHNfY29ubl9jcmVhdGUoKSBkZXJlZmVyZW5jZXMgaXQgdW5kZXIgcmN1X3JlYWRfbG9jaygpCiYjNDM7CSAqIChhbmQgcmVmdXNlcyB0byBpbnN0YWxsIGEgbmV3IG9uZSBvbmNlIGNfZGVzdHJveV9pbl9wcm9nIGlzCiYjNDM7CSAqIHNldCwgd2hpY2ggaXQgY2hlY2tzIHVuZGVyIHRoaXMgbG9jaykuICBBZnRlciB0aGUKJiM0MzsJICogc3luY2hyb25pemVfcmN1KCkgYmVsb3cgbm8gb25lIGNhbiBwaWNrIHRoZSBwb2ludGVyIHVwIGFueQomIzQzOwkgKiBtb3JlIGFuZCBpdHMgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJcGFzc2l2ZSA9IGNvbm4tJmd0O2NfcGFzc2l2ZTsKJiM0MzsJY29ubi0mZ3Q7Y19wYXNzaXZlID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnEoJmFtcDtyZHNfY29ubl9sb2NrKTsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCS8qIHNodXQgdGhlIGNvbm5lY3Rpb24gZG93biAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBucGF0aHM7IGkmIzQzOyYjNDM7KSB7CiAJCWNwID0gJmFtcDtjb25uLSZndDtjX3BhdGhbaV07Ci0JCXJkc19jb25uX3BhdGhfZGVzdHJveShjcCk7CiYjNDM7CQlyZHNfY29ubl9wYXRoX3F1aWVzY2UoY3ApOwogCQlCVUdfT04oIWxpc3RfZW1wdHkoJmFtcDtjcC0mZ3Q7Y3BfcmV0cmFucykpOwogCX0KIApAQCAtNTk0LDEyICYjNDM7NzM5LDE0IEBAIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiAJICovCiAJcmRzX2NvbmdfcmVtb3ZlX2Nvbm4oY29ubik7CiAKLQlrZnJlZShjb25uLSZndDtjX3BhdGgpOwotCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKJiM0MzsJLyogZHJvcCB0aGUgcmVmZXJlbmNlIG91ciBjX3Bhc3NpdmUgcG9pbnRlciBoZWxkLCBpZiBhbnkgKi8KJiM0MzsJaWYgKHBhc3NpdmUpCiYjNDM7CQlyZHNfY29ubl9wdXQocGFzc2l2ZSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Jkc19jb25uX2xvY2ssIGZsYWdzKTsKLQlyZHNfY29ubl9jb3VudC0tOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyZHNfY29ubl9sb2NrLCBmbGFncyk7CiYjNDM7CS8qIGRyb3AgdGhlIGluaXRpYWwgcmVmZXJlbmNlOyB0aGUgY29ubmVjdGlvbiBpcyBmcmVlZCBmcm9tCiYjNDM7CSAqIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgZXZlcnkgaG9sZGVyIGhhcyBkcm9wcGVkIHRoZWlycwomIzQzOwkgKi8KJiM0MzsJcmRzX2Nvbm5fcHV0KGNvbm4pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZGVzdHJveSk7CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuYyBiL25ldC9yZHMvaWIuYwppbmRleCA3ODZmMzkxNjliYzE0Li43NTU2OTA1ODMzMjU5IDEwMDY0NAotLS0gYS9uZXQvcmRzL2liLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9pYi5jCkBAIC01MjUsMTAgJiM0Mzs1MjUsNyBAQCBzdGF0aWMgdm9pZCByZHNfaWJfc2V0X3VubG9hZGluZyh2b2lkKQogCiBzdGF0aWMgYm9vbCByZHNfaWJfaXNfdW5sb2FkaW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKIHsKLQlzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AgPSAmYW1wO2Nvbm4tJmd0O2NfcGF0aFswXTsKLQotCXJldHVybiAodGVzdF9iaXQoUkRTX0RFU1RST1lfUEVORElORywgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpIHx8Ci0JCWF0b21pY19yZWFkKCZhbXA7cmRzX2liX3VubG9hZGluZykgIT0gMCk7CiYjNDM7CXJldHVybiBhdG9taWNfcmVhZCgmYW1wO3Jkc19pYl91bmxvYWRpbmcpICE9IDA7CiB9CiAKIHZvaWQgcmRzX2liX2V4aXQodm9pZCkKQEAgLTU0MSw2ICYjNDM7NTM4LDE1IEBAIHZvaWQgcmRzX2liX2V4aXQodm9pZCkKICNlbmRpZgogCXJkc19pYl91bnJlZ2lzdGVyX2NsaWVudCgpOwogCXJkc19pYl9kZXN0cm95X25vZGV2X2Nvbm5zKCk7CiYjNDM7CXJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoJmFtcDtyZHNfaWJfdHJhbnNwb3J0KTsKJiM0MzsKJiM0MzsJLyogVGVhcmluZyBkb3duIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWF5IGhhdmUgZHJvcHBlZCB0aGUgZmluYWwKJiM0MzsJICogcmVmZXJlbmNlIG9uIGEgZGV2aWNlLCBkZWZlcnJpbmcgcmRzX2liX2Rldl9mcmVlKCkgdG8gcmRzX3dxLgomIzQzOwkgKiBEcmFpbiBpdCBiZWZvcmUgdGhlIG1vZHVsZSBnb2VzIGF3YXk7IGl0IHF1ZXVlcyBub3RoaW5nCiYjNDM7CSAqIGZ1cnRoZXIgb24gcmRzX3dxLgomIzQzOwkgKi8KJiM0MzsJZmx1c2hfd29ya3F1ZXVlKHJkc193cSk7CiYjNDM7CiAJcmRzX2liX3N5c2N0bF9leGl0KCk7CiAJcmRzX2liX3JlY3ZfZXhpdCgpOwogCXJkc190cmFuc191bnJlZ2lzdGVyKCZhbXA7cmRzX2liX3RyYW5zcG9ydCk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmMKaW5kZXggNGZlYjBlZGMzNjBjOC4uMjRlNTM4YzI1M2E3YSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9jbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWJfY20uYwpAQCAtOTI0LDggJiM0Mzs5MjQsMTQgQEAgaW50IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCiAJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICYjMzQ7cmRtYV9hY2NlcHQgZmFpbGVkXG4mIzM0Oyk7CiAKIG91dDoKLQlpZiAoY29ubikKJiM0MzsJaWYgKGNvbm4pIHsKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7Y29ubi0mZ3Q7Y19jbV9sb2NrKTsKJiM0MzsJCS8qIFRoZSBjb25uIHN0YXlzIHJlYWNoYWJsZSB0aHJvdWdoIGNtX2lkLSZndDtjb250ZXh0CiYjNDM7CQkgKiB3aXRob3V0IGEgcmVmZXJlbmNlIG9mIGl0cyBvd246IGNvbm5lY3Rpb24gZGVzdHJveQomIzQzOwkJICogc2h1dHMgdGhlIGNtX2lkIGRvd24gYmVmb3JlIHRoZSBjb25uIGlzIGZyZWVkLgomIzQzOwkJICovCiYjNDM7CQlyZHNfY29ubl9wdXQoY29ubik7CiYjNDM7CX0KIAlpZiAoZXJyKQogCQlyZG1hX3JlamVjdChjbV9pZCwgJmFtcDtlcnIsIHNpemVvZihpbnQpLAogCQkJICAgIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVEKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvbG9vcC5jIGIvbmV0L3Jkcy9sb29wLmMKaW5kZXggZTZiMDc1MGJiZWRhYi4uN2RhZjhlZDI1ZDY5YSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9sb29wLmMKQEAgLTE5NSw2ICYjNDM7MTk1LDggQEAgdm9pZCByZHNfbG9vcF9leGl0KHZvaWQpCiAJCVdBUk5fT04obGMtJmd0O2Nvbm4tJmd0O2NfcGFzc2l2ZSk7CiAJCXJkc19jb25uX2Rlc3Ryb3kobGMtJmd0O2Nvbm4pOwogCX0KJiM0MzsKJiM0MzsJcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZCgmYW1wO3Jkc19sb29wX3RyYW5zcG9ydCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJkc19sb29wX2tpbGxfY29ubnMoc3RydWN0IG5ldCAqbmV0KQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuYwppbmRleCBmMjVmMjU5MjU4NmY3Li4yOWU5NTAyOGU2MWU0IDEwMDY0NAotLS0gYS9uZXQvcmRzL21lc3NhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL21lc3NhZ2UuYwpAQCAtMTgyLDYgJiM0MzsxODIsMTggQEAgc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSkKIAkJa3JlZl9wdXQoJmFtcDtybS0mZ3Q7YXRvbWljLm9wX3JkbWFfbXItJmd0O3Jfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX2ZyZWUoc3RydWN0IHJkc19tZXNzYWdlICpybSkKJiM0Mzt7CiYjNDM7CS8qIGdldCBpbiByZHNfc2VuZF9xdWV1ZV9ybSgpLCByZHNfc2VuZF9wcm9iZSgpIG9yIHRoZSBjb25nZXN0aW9uCiYjNDM7CSAqIG1hcCBwYXRoIG9mIHJkc19zZW5kX3htaXQoKS4gIE1lc3NhZ2VzIHRoYXQgd2VyZSBuZXZlciBxdWV1ZWQgb24KJiM0MzsJICogYSBjb25uZWN0aW9uIGhhdmUgbm8gcmVmZXJlbmNlIHRvIGRyb3AuCiYjNDM7CSAqLwomIzQzOwlpZiAocm0tJmd0O21faW5jLmlfY29ubikKJiM0MzsJCXJkc19jb25uX3B1dChybS0mZ3Q7bV9pbmMuaV9jb25uKTsKJiM0MzsKJiM0MzsJa2ZyZWUocm0pOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsCkBAIC0xOTIsNyAmIzQzOzIwNCw3IEBAIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJaWYgKHJtLSZndDthdG9taWMub3BfdW5waW5fZGVmZXJyZWQpCiAJCXJkc19hdG9taWNfb3BfdW5waW5fcGFnZSgmYW1wO3JtLSZndDthdG9taWMpOwogCi0Ja2ZyZWUocm0pOwomIzQzOwlyZHNfbWVzc2FnZV9mcmVlKHJtKTsKIH0KIAogdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSkKQEAgLTIxNyw3ICYjNDM7MjI5LDcgQEAgdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSkKIAkJCXJldHVybjsKIAkJfQogCi0JCWtmcmVlKHJtKTsKJiM0MzsJCXJkc19tZXNzYWdlX2ZyZWUocm0pOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19tZXNzYWdlX3B1dCk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaAppbmRleCAyZGI0OTU3M2RhY2Q1Li4zNTc2MGRkNmIwNzdmIDEwMDY0NAotLS0gYS9uZXQvcmRzL3Jkcy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRzLmgKQEAgLTg5LDcgJiM0Mzs4OSw2IEBAIGVudW0gewogI2RlZmluZSBSRFNfUkVDT05ORUNUX1BFTkRJTkcJMQogI2RlZmluZSBSRFNfSU5fWE1JVAkJMgogI2RlZmluZSBSRFNfUkVDVl9SRUZJTEwJCTMKLSNkZWZpbmUJUkRTX0RFU1RST1lfUEVORElORwk0CiAKIC8qIE1heCBudW1iZXIgb2YgbXVsdGlwYXRocyBwZXIgUkRTIGNvbm5lY3Rpb24uIE11c3QgYmUgYSBwb3dlciBvZiAyICovCiAjZGVmaW5lCVJEU19NUEFUSF9XT1JLRVJTCTgKQEAgLTEzOCw2ICYjNDM7MTM3LDEyIEBAIHN0cnVjdCByZHNfY29ubl9wYXRoIHsKIC8qIE9uZSByZHNfY29ubmVjdGlvbiBwZXIgUkRTIGFkZHJlc3MgcGFpciAqLwogc3RydWN0IHJkc19jb25uZWN0aW9uIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQljX2hhc2hfbm9kZTsKJiM0MzsJLyogRnJlZSBvZiB0aGUgY29ubmVjdGlvbiBtZW1vcnkgKG5vdCB0aGUgdGVhcmRvd24gb2YgaXRzCiYjNDM7CSAqIHRyYW5zcG9ydCBzdGF0ZSAtIHRoYXQgc3RheXMgc3luY2hyb25vdXMgaW4KJiM0MzsJICogcmRzX2Nvbm5fZGVzdHJveSgpKSBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgbGFzdCByZWZlcmVuY2UgaXMKJiM0MzsJICogZHJvcHBlZCB2aWEgcmRzX2Nvbm5fcHV0KCkuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3Qga3JlZgkJY19yZWZjb3VudDsKIAlzdHJ1Y3QgaW42X2FkZHIJCWNfbGFkZHI7CiAJc3RydWN0IGluNl9hZGRyCQljX2ZhZGRyOwogCWludAkJCWNfZGV2X2lmOyAvKiBpZmluZGV4IHVzZWQgZm9yIHRoaXMgY29ubiAqLwpAQCAtMTQ4LDYgJiM0MzsxNTMsMTAgQEAgc3RydWN0IHJkc19jb25uZWN0aW9uIHsKIAkJCQljX3BhZF90b18zMjoyOTsKIAlpbnQJCQljX25wYXRoczsKIAlib29sCQkJY193aXRoX3Nwb3J0X2lkeDsKJiM0MzsJLyogU2V0ICh1bmRlciBSQ1UpIHdoZW4gcmRzX2Nvbm5fZGVzdHJveSgpIHN0YXJ0cyBvbiB0aGlzIGNvbm47CiYjNDM7CSAqIHJlYWQgdGhyb3VnaCByZHNfZGVzdHJveV9wZW5kaW5nKCkuCiYjNDM7CSAqLwomIzQzOwlib29sCQkJY19kZXN0cm95X2luX3Byb2c7CiAJc3RydWN0IHJkc19jb25uZWN0aW9uCSpjX3Bhc3NpdmU7CiAJc3RydWN0IHJkc190cmFuc3BvcnQJKmNfdHJhbnM7CiAKQEAgLTU0NCw2ICYjNDM7NTUzLDEyIEBAIHN0cnVjdCByZHNfdHJhbnNwb3J0IHsKIAl1bnNpZ25lZCBpbnQJCXRfcHJlZmVyX2xvb3BiYWNrOjEsCiAJCQkJdF9tcF9jYXBhYmxlOjE7CiAJdW5zaWduZWQgaW50CQl0X3R5cGU7CiYjNDM7CS8qIENvbm5lY3Rpb25zIG9mIHRoaXMgdHJhbnNwb3J0IG5vdCB5ZXQgZnJlZWQ7IGZyZWVpbmcgcnVucwomIzQzOwkgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYQomIzQzOwkgKiBjb25uZWN0aW9uLCBzbyB0cmFuc3BvcnQgbW9kdWxlIHVubG9hZCBoYXMgdG8gd2FpdCBmb3IgdGhpcwomIzQzOwkgKiB0byByZWFjaCB6ZXJvIChyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKCkpLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX3QJCXRfY29ubl9jb3VudDsKIAogCWludCAoKmxhZGRyX2NoZWNrKShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJCSAgIF9fdTMyIHNjb3BlX2lkKTsKQEAgLTgxOSw2ICYjNDM7ODM0LDExIEBAIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJCXU4IHRvcywgZ2ZwX3QgZ2ZwLCBpbnQgZGV2X2lmKTsKIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoKTsKIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwomIzQzO3ZvaWQgcmRzX2Nvbm5fZ2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CiYjNDM7dm9pZCByZHNfY29ubl9wdXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKJiM0MzsvKiBob3cgbG9uZyB0cmFuc3BvcnQgdW5sb2FkIHdhaXRzIGZvciBpdHMgY29ubmVjdGlvbnMgdG8gYmUgZnJlZWQgKi8KJiM0MzsjZGVmaW5lIFJEU19DT05OX0ZSRUVfVElNRU9VVF9NUwkxMDAwMAomIzQzO3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpOwogdm9pZCByZHNfY29ubl9kcm9wKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CiB2b2lkIHJkc19jb25uX3BhdGhfZHJvcChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3BhdGgsIGJvb2wgZGVzdHJveSk7CiB2b2lkIHJkc19jb25uX2Nvbm5lY3RfaWZfZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwpAQCAtOTk0LDcgJiM0MzsxMDE0LDggQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgcmRzX2Rlc3Ryb3lfcGVuZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JcmV0dXJuICFjaGVja19uZXQocmRzX2Nvbm5fbmV0KGNvbm4pKSB8fAomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKGNvbm4tJmd0O2NfZGVzdHJveV9pbl9wcm9nKSB8fAomIzQzOwkgICAgICAgIWNoZWNrX25ldChyZHNfY29ubl9uZXQoY29ubikpIHx8CiAJICAgICAgIChjb25uLSZndDtjX3RyYW5zLSZndDt0X3VubG9hZGluZyAmYW1wOyZhbXA7IGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfdW5sb2FkaW5nKGNvbm4pKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZWN2LmMgYi9uZXQvcmRzL3JlY3YuYwppbmRleCA2MjA0ZTU3N2E5MGFlLi5iMDMxYzBiNDNhZjgzIDEwMDY0NAotLS0gYS9uZXQvcmRzL3JlY3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3JlY3YuYwpAQCAtNDYsNiAmIzQzOzQ2LDcgQEAgdm9pZCByZHNfaW5jX2luaXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCiB7CiAJcmVmY291bnRfc2V0KCZhbXA7aW5jLSZndDtpX3JlZmNvdW50LCAxKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2luYy0mZ3Q7aV9pdGVtKTsKJiM0MzsJcmRzX2Nvbm5fZ2V0KGNvbm4pOwkvKiBwdXQgaW4gcmRzX2luY19wdXQoKSAqLwogCWluYy0mZ3Q7aV9jb25uID0gY29ubjsKIAlpbmMtJmd0O2lfY29ubl9wYXRoID0gTlVMTDsKIAlpbmMtJmd0O2lfc2FkZHIgPSAqc2FkZHI7CkBAIC02MSw2ICYjNDM7NjIsNyBAQCB2b2lkIHJkc19pbmNfcGF0aF9pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uX3BhdGggKmNwLAogewogCXJlZmNvdW50X3NldCgmYW1wO2luYy0mZ3Q7aV9yZWZjb3VudCwgMSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtpbmMtJmd0O2lfaXRlbSk7CiYjNDM7CXJkc19jb25uX2dldChjcC0mZ3Q7Y3BfY29ubik7CS8qIHB1dCBpbiByZHNfaW5jX3B1dCgpICovCiAJaW5jLSZndDtpX2Nvbm4gPSBjcC0mZ3Q7Y3BfY29ubjsKIAlpbmMtJmd0O2lfY29ubl9wYXRoID0gY3A7CiAJaW5jLSZndDtpX3NhZGRyID0gKnNhZGRyOwpAQCAtODEsOSAmIzQzOzgzLDE5IEBAIHZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQogewogCXJkc2RlYnVnKCYjMzQ7cHV0IGluYyAlcCByZWYgJWRcbiYjMzQ7LCBpbmMsIHJlZmNvdW50X3JlYWQoJmFtcDtpbmMtJmd0O2lfcmVmY291bnQpKTsKIAlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7aW5jLSZndDtpX3JlZmNvdW50KSkgewomIzQzOwkJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gaW5jLSZndDtpX2Nvbm47CiYjNDM7CiAJCUJVR19PTighbGlzdF9lbXB0eSgmYW1wO2luYy0mZ3Q7aV9pdGVtKSk7CiAKLQkJaW5jLSZndDtpX2Nvbm4tJmd0O2NfdHJhbnMtJmd0O2luY19mcmVlKGluYyk7CiYjNDM7CQkvKiBpbmNfZnJlZSgpIGNhbiBmcmVlIHRoZSBtZW1vcnkgQGluYyBsaXZlcyBpbiwgc28gdGhlCiYjNDM7CQkgKiBjb25uZWN0aW9uIHJlZmVyZW5jZSBoYXMgdG8gYmUgZHJvcHBlZCB0aHJvdWdoIHRoZQomIzQzOwkJICogY29weSB0YWtlbiBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJY29ubi0mZ3Q7Y190cmFucy0mZ3Q7aW5jX2ZyZWUoaW5jKTsKJiM0MzsJCS8qIGdldCBpbiByZHNfaW5jX2luaXQoKSwgcmRzX2luY19wYXRoX2luaXQoKSBvcgomIzQzOwkJICogcmRzX3JlY3ZfaW5jb21pbmcoKQomIzQzOwkJICovCiYjNDM7CQlyZHNfY29ubl9wdXQoY29ubik7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwocmRzX2luY19wdXQpOwpAQCAtMzI1LDYgJiM0MzszMzcsMTMgQEAgdm9pZCByZHNfcmVjdl9pbmNvbWluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7CiAKJiM0MzsJLyogZXZlcnkgY2FsbGVyIGluaXRpYWxpemVkIEBpbmMgd2l0aCByZHNfaW5jX2luaXQoKSBvcgomIzQzOwkgKiByZHNfaW5jX3BhdGhfaW5pdCgpIGZpcnN0LCBzbyBpX2Nvbm4gYWxyZWFkeSBob2xkcyBhIHJlZmVyZW5jZS4KJiM0MzsJICogVGFrZSB0aGUgbmV3IG9uZSBiZWZvcmUgZHJvcHBpbmcgdGhlIG9sZCwgc28gdGhhdCByZS1wb2ludGluZyBhbgomIzQzOwkgKiBpbmMgYXQgdGhlIGNvbm5lY3Rpb24gaXQgYWxyZWFkeSByZWZlcnMgdG8gY2Fubm90IGZyZWUgaXQuCiYjNDM7CSAqLwomIzQzOwlyZHNfY29ubl9nZXQoY29ubik7CiYjNDM7CXJkc19jb25uX3B1dChpbmMtJmd0O2lfY29ubik7CiAJaW5jLSZndDtpX2Nvbm4gPSBjb25uOwogCWluYy0mZ3Q7aV9yeF9qaWZmaWVzID0gamlmZmllczsKIAlpZiAoY29ubi0mZ3Q7Y190cmFucy0mZ3Q7dF9tcF9jYXBhYmxlKQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuYwppbmRleCAxYWZhOTgxZTVjMDZkLi4wNDVlYjNjM2Y5NzcyIDEwMDY0NAotLS0gYS9uZXQvcmRzL3NlbmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3NlbmQuYwpAQCAtMjkwLDYgJiM0MzsyOTAsNyBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCQl9CiAJCQlybS0mZ3Q7ZGF0YS5vcF9hY3RpdmUgPSAxOwogCQkJcm0tJmd0O21faW5jLmlfY29ubl9wYXRoID0gY3A7CiYjNDM7CQkJcmRzX2Nvbm5fZ2V0KGNwLSZndDtjcF9jb25uKTsJLyogcHV0IGluIHJkc19tZXNzYWdlX3B1dCgpICovCiAJCQlybS0mZ3Q7bV9pbmMuaV9jb25uID0gY3AtJmd0O2NwX2Nvbm47CiAKIAkJCWNwLSZndDtjcF94bWl0X3JtID0gcm07CkBAIC05NDcsNiAmIzQzOzk0OCw3IEBAIHN0YXRpYyBpbnQgcmRzX3NlbmRfcXVldWVfcm0oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAogCQkvKiBUaGUgY29kZSBvcmRlcmluZyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IHdlJiMzOTtyZQogCQkgICB0cnlpbmcgdG8gbWluaW1pemUgdGhlIHRpbWUgd2UgaG9sZCBjX2xvY2sgKi8KIAkJcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKCZhbXA7cm0tJmd0O21faW5jLmlfaGRyLCBzcG9ydCwgZHBvcnQsIDApOwomIzQzOwkJcmRzX2Nvbm5fZ2V0KGNvbm4pOwkvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi8KIAkJcm0tJmd0O21faW5jLmlfY29ubiA9IGNvbm47CiAJCXJtLSZndDttX2luYy5pX2Nvbm5fcGF0aCA9IGNwOwogCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOwpAQCAtMTE1OSwxMyAmIzQzOzExNjEsMTQgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKQogCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2luICosIHVzaW4sIG1zZy0mZ3Q7bXNnX25hbWUpOwogCV9fYmUxNiBkcG9ydDsKIAlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gTlVMTDsKLQlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CiYjNDM7CXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAJaW50IHF1ZXVlZCA9IDAsIGFsbG9jYXRlZF9tciA9IDA7CiAJaW50IG5vbmJsb2NrID0gbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUOwogCWxvbmcgdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBub25ibG9jayk7CiAJc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoOwogCXN0cnVjdCBpbjZfYWRkciBkYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlfX3UzMiBzY29wZV9pZCA9IDA7CiAJc2l6ZV90IHJkbWFfcGF5bG9hZF9sZW4gPSAwOwogCWJvb2wgemNvcHkgPSAoKG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19aRVJPQ09QWSkgJmFtcDsmYW1wOwpAQCAtMTM0MCwxMSAmIzQzOzEzNDMsMjkgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKQogCXJtLSZndDttX2RhZGRyID0gZGFkZHI7CiAKIAkvKiByZHNfY29ubl9jcmVhdGUgaGFzIGEgc3BpbmxvY2sgdGhhdCBydW5zIHdpdGggSVJRIG9mZi4KLQkgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuICovCi0JaWYgKHJzLSZndDtyc19jb25uICZhbXA7JmFtcDsgaXB2Nl9hZGRyX2VxdWFsKCZhbXA7cnMtJmd0O3JzX2Nvbm4tJmd0O2NfZmFkZHIsICZhbXA7ZGFkZHIpICZhbXA7JmFtcDsKLQkgICAgcnMtJmd0O3JzX3RvcyA9PSBycy0mZ3Q7cnNfY29ubi0mZ3Q7Y190b3MpIHsKLQkJY29ubiA9IHJzLSZndDtyc19jb25uOwomIzQzOwkgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBjYWNoZWQgcnNfY29ubiBob2xkcyBhIGNvbm5lY3Rpb24gcmVmZXJlbmNlOyB0YWtlIG9uZSBvZgomIzQzOwkgKiBvdXIgb3duIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBjYWxsIChkcm9wcGVkIG9uIGJvdGggZXhpdAomIzQzOwkgKiBwYXRocyksIHNvIHRoYXQgbmVpdGhlciBhIGNvbmN1cnJlbnQgc2VuZGVyIHJlcGxhY2luZyB0aGUKJiM0MzsJICogY2FjaGUgbm9yIHJkc19jb25uX2Rlc3Ryb3koKSBjYW4gZnJlZSB0aGUgY29ubmVjdGlvbiB1bmRlcgomIzQzOwkgKiB1cy4gIEEgY2FjaGVkIGNvbm5lY3Rpb24gd2hvc2UgZGVzdHJ1Y3Rpb24gaGFzIGJlZ3VuIGlzIG5vdAomIzQzOwkgKiByZXVzZWQ6IGRyb3BwaW5nIGl0IGhlcmUgbGV0cyB0aGUgbmV4dCBzZW5kbXNnIGxvb2sgdXAgb3IKJiM0MzsJICogY3JlYXRlIGEgbGl2ZSBvbmUgaW5zdGVhZCBvZiByZXR1cm5pbmcgLUVBR0FJTiBmb3JldmVyLgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtycy0mZ3Q7cnNfbG9jaywgZmxhZ3MpOwomIzQzOwljb25uID0gcnMtJmd0O3JzX2Nvbm47CiYjNDM7CWlmIChjb25uICZhbXA7JmFtcDsgaXB2Nl9hZGRyX2VxdWFsKCZhbXA7Y29ubi0mZ3Q7Y19mYWRkciwgJmFtcDtkYWRkcikgJmFtcDsmYW1wOwomIzQzOwkgICAgcnMtJmd0O3JzX3RvcyA9PSBjb25uLSZndDtjX3RvcyAmYW1wOyZhbXA7ICFyZHNfZGVzdHJveV9wZW5kaW5nKGNvbm4pKSB7CiYjNDM7CQlyZHNfY29ubl9nZXQoY29ubik7CiAJfSBlbHNlIHsKJiM0MzsJCWNvbm4gPSBOVUxMOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtycy0mZ3Q7cnNfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoIWNvbm4pIHsKJiM0MzsJCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqb2xkOwomIzQzOwogCQljb25uID0gcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHNvY2tfbmV0KHNvY2stJmd0O3NrKSwKIAkJCQkJCSZhbXA7cnMtJmd0O3JzX2JvdW5kX2FkZHIsICZhbXA7ZGFkZHIsCiAJCQkJCQlycy0mZ3Q7cnNfdHJhbnNwb3J0LCBycy0mZ3Q7cnNfdG9zLApAQCAtMTM1Miw5ICYjNDM7MTM3MywxNyBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pCiAJCQkJCQlzY29wZV9pZCk7CiAJCWlmIChJU19FUlIoY29ubikpIHsKIAkJCXJldCA9IFBUUl9FUlIoY29ubik7CiYjNDM7CQkJY29ubiA9IE5VTEw7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJLyogaGFuZCB0aGUgY2FjaGUgaXRzIG93biByZWZlcmVuY2UgKi8KJiM0MzsJCXJkc19jb25uX2dldChjb25uKTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cnMtJmd0O3JzX2xvY2ssIGZsYWdzKTsKJiM0MzsJCW9sZCA9IHJzLSZndDtyc19jb25uOwogCQlycy0mZ3Q7cnNfY29ubiA9IGNvbm47CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cnMtJmd0O3JzX2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmIChvbGQpCiYjNDM7CQkJcmRzX2Nvbm5fcHV0KG9sZCk7CiAJfQogCiAJaWYgKGNvbm4tJmd0O2NfdHJhbnMtJmd0O3RfbXBfY2FwYWJsZSkgewpAQCAtMTQ2OSw2ICYjNDM7MTQ5OCw4IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbikKIAkJa2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7CiAJa2ZyZWUodmN0LnZlYyk7CiAKJiM0MzsJcmRzX2Nvbm5fcHV0KGNvbm4pOwomIzQzOwogCXJldHVybiBwYXlsb2FkX2xlbjsKIAogb3V0OgpAQCAtMTQ3Niw2ICYjNDM7MTUwNyw5IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbikKIAkJa2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7CiAJa2ZyZWUodmN0LnZlYyk7CiAKJiM0MzsJaWYgKGNvbm4pCiYjNDM7CQlyZHNfY29ubl9wdXQoY29ubik7CiYjNDM7CiAJLyogSWYgdGhlIHVzZXIgaW5jbHVkZWQgYSBSRE1BX01BUCBjbXNnLCB3ZSBhbGxvY2F0ZWQgYSBNUiBvbiB0aGUgZmx5LgogCSAqIElmIHRoZSBzZW5kbXNnIGdvZXMgdGhyb3VnaCwgd2Uga2VlcCB0aGUgTVIuIElmIGl0IGZhaWxzIHdpdGggRUFHQUlOCiAJICogb3IgaW4gYW55IG90aGVyIHdheSwgd2UgbmVlZCB0byBkZXN0cm95IHRoZSBNUiBhZ2FpbiAqLwpAQCAtMTUyMiw2ICYjNDM7MTU1Niw3IEBAIHJkc19zZW5kX3Byb2JlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCwgX19iZTE2IHNwb3J0LAogCWxpc3RfYWRkX3RhaWwoJmFtcDtybS0mZ3Q7bV9jb25uX2l0ZW0sICZhbXA7Y3AtJmd0O2NwX3NlbmRfcXVldWUpOwogCXNldF9iaXQoUkRTX01TR19PTl9DT05OLCAmYW1wO3JtLSZndDttX2ZsYWdzKTsKIAlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOwomIzQzOwlyZHNfY29ubl9nZXQoY3AtJmd0O2NwX2Nvbm4pOwkvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi8KIAlybS0mZ3Q7bV9pbmMuaV9jb25uID0gY3AtJmd0O2NwX2Nvbm47CiAJcm0tJmd0O21faW5jLmlfY29ubl9wYXRoID0gY3A7CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jCmluZGV4IDc3NGE3MWY4OGQzNzUuLjI2ODVlZTIxYTIyZDEgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy90Y3AuYwpAQCAtODA1LDYgJiM0Mzs4MDUsNyBAQCBzdGF0aWMgdm9pZCByZHNfdGNwX2V4aXQodm9pZCkKICNlbmRpZgogCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmYW1wO3Jkc190Y3BfbmV0X29wcyk7CiAJcmRzX3RjcF9kZXN0cm95X2Nvbm5zKCk7CiYjNDM7CXJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoJmFtcDtyZHNfdGNwX3RyYW5zcG9ydCk7CiAJcmRzX3RyYW5zX3VucmVnaXN0ZXIoJmFtcDtyZHNfdGNwX3RyYW5zcG9ydCk7CiAJcmRzX3RjcF9yZWN2X2V4aXQoKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX3RjcF9jb25uX3NsYWIpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwppbmRleCAxM2ZhNjBjMTk4NWJiLi4wZDJjZWQ4OTJhOGFlIDEwMDY0NAotLS0gYS9uZXQvcmRzL3RjcF9saXN0ZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwpAQCAtMTUzLDcgJiM0MzsxNTMsNyBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKQogewogCXN0cnVjdCBzb2NrZXQgKmxpc3Rlbl9zb2NrID0gcnRuLSZndDtyZHNfdGNwX2xpc3Rlbl9zb2NrOwogCXN0cnVjdCBzb2NrZXQgKm5ld19zb2NrID0gTlVMTDsKLQlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CiYjNDM7CXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwogCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnJzX3RjcCA9IE5VTEw7CkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIGludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pCiAKIAlpZiAoSVNfRVJSKGNvbm4pKSB7CiAJCXJldCA9IFBUUl9FUlIoY29ubik7CiYjNDM7CQljb25uID0gTlVMTDsKIAkJZ290byBvdXQ7CiAJfQogCS8qIEFuIGluY29taW5nIFNZTiByZXF1ZXN0IGNhbWUgaW4sIGFuZCBUQ1AganVzdCBhY2NlcHRlZCBpdC4KQEAgLTM0Myw2ICYjNDM7MzQ0LDggQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bikKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7cnNfdGNwLSZndDt0X2Nvbm5fcGF0aF9sb2NrKTsKIAlpZiAobmV3X3NvY2spCiAJCXNvY2tfcmVsZWFzZShuZXdfc29jayk7CiYjNDM7CWlmIChjb25uKQomIzQzOwkJcmRzX2Nvbm5fcHV0KGNvbm4pOwogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7cnRuLSZndDtyZHNfdGNwX2FjY2VwdF9sb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA5NDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBSRFMgQ29ubmVjdGlvbiBSZWZhY3RvcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHJlZmFjdG9yaW5nIG9mIFJEUyBjb25uZWN0aW9uIG1hbmFnZW1lbnQgd2FycmFudHMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50LiBJIGtub3cgS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHdoZXJlYXMgS0FTQU4gdGFja2xlcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBldGMuLCBhbmQgTE9DS0RFUCBkZWFscyB3aXRoIGxvY2tpbmcgaXNzdWVzLgoKVGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgcmVmYWN0b3JpbmcgaG93IFJEUyBjb25uZWN0aW9ucyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZWlyIHJlZmVyZW5jZSBjb3VudGluZy4gVGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYHN0cnVjdCBrcmVmIGNfcmVmY291bnRgIGFuZCBjaGFuZ2luZyBob3cgcmVmcyBhcmUgdGFrZW4gYW5kIHB1dC4gVGhlIGdvYWwgaXMgdG8gZWxpbWluYXRlIFVBRnMsIGRvdWJsZSBmcmVlcywgcmVmY291bnRpbmcgbGVha3MsIGFuZCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRlYXJkb3duIGFuZCBtb2R1bGUgdW5sb2FkaW5nLiBTbywgaXQmIzM5O3MgYSBsaWZldGltZSBtYW5hZ2VtZW50IG92ZXJoYXVsLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIHRvdWNoIGFueXRoaW5nIHRoYXQgS01TQU4gd291bGQgY2FyZSBhYm91dD8gSSBuZWVkIHRvIGNoZWNrIGZvciB0d28gcHJpbWFyeSBLTVNBTiBjb25jZXJuczoKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlOioqIERvZXMgdGhpcyBwYXRjaCAqZXhwb3NlKiBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gSSBzZWUgbm8gY2hhbmdlcyB0byBgY29weV90b191c2VyYCwgYGdldC9zZXRzb2Nrb3B0YCwgYHJlY3Ztc2dgLCBldGMuLCBzbyBJJiMzOTttIG5vdCBpbW1lZGlhdGVseSB3b3JyaWVkIGFib3V0IGxlYWtpbmcgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhpcyB3YXkuIEl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYWZmZWN0IGFueSBkYXRhIGNvcGllZCB0byBvciBmcm9tIHVzZXJzcGFjZSBkaXJlY3RseS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogVGhlIGNvZGUgdXNlcyBga3JlZl9pbml0YCwgd2hpY2ggaXMgZ29vZC4gVGhlcmUgZG9uJiMzOTt0IHNlZW0gdG8gYmUgYW55IG9idmlvdXMgYnJhbmNoaW5nIHBvaW50cyB3aGVyZSBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlICpjb3VsZCogbGVhZCB0byBhIHNlY3VyaXR5IGlzc3VlLiBFdmVyeXRoaW5nIEkmIzM5O20gc2VlaW5nIGlzIGluaXRpYWxpemVkLgoKU28gZmFyLCBpdCBsb29rcyBjbGVhbi4gQnV0IG5vdyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkLiBgX19yZHNfY29ubl9jcmVhdGVgIGluaXRpYWxpemVzIGBrcmVmX2luaXQoJmFtcDtjb25uLSZndDtjX3JlZmNvdW50KWAgd2hpY2ggaXMgZ29vZCBidXQgdGhlIGBjb25uYCBpcyBhbGxvY2F0ZWQgZnJvbSBgcmRzX2Nvbm5fc2xhYmAuIEkgbmVlZCB0byB2ZXJpZnkgaG93IGByZHNfY29ubl9zbGFiYCBpcyBhbGxvY2F0ZWQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhbiBpc3N1ZSBpZiB0aGUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiB0aGUgYGNvbm5gIHN0cnVjdHVyZSBpcyBpbmNvbXBsZXRlLiBJcyBpdCBga21lbV9jYWNoZV96YWxsb2NgPyBUaGF0JiMzOTtzIHdoYXQgSSB3YW50IHRvIGtub3cuIElmIGl0JiMzOTtzIGEgYCpfemFsbG9jYCB2YXJpYW50LCBvciBpcyBwcm9wZXJseSB6ZXJvZWQsIHRoZSByaXNrIGlzIGV4dHJlbWVseSBsb3cuIElmIGl0JiMzOTtzIG5vdCwgdGhlbiBJJiMzOTtsbCBuZWVkIHRvIGRvIG1vcmUgYW5hbHlzaXMuCgpJbiBzdW1tYXJ5LCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBsaWtlbHkgKm5vdCogbmVjZXNzYXJ5IGhlcmUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBzZWVtIHRvIGludHJvZHVjZSBhbnkgZGlyZWN0IGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcyBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIHRoYXQgYXJlIG9idmlvdXMuIEhvd2V2ZXIsIGJlZm9yZSBJIG1ha2UgYSBmaW5hbCBjYWxsLCBJJiMzOTtsbCBjb25maXJtIHRoYXQgYHJkc19jb25uX3NsYWJgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggYSBxdWljayBncmVwIG9yIGZpbGUgaW5zcGVjdGlvbiB0byBzZWUgaG93IGl0JiMzOTtzIGFsbG9jYXRlZC4gSWYgdGhhdCBhbGxvY2F0aW9uIGlzIGNsZWFuLCBJJiMzOTtsbCBzdGljayB3aXRoIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGZvciB0aGlzIG9uZS4gSWYgbm90LCBJJiMzOTtsbCBuZWVkIGEgY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttZW1fY2FjaGVfemFsbG9jLipyZHNfY29ubl9zbGFiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvY29ubmVjdGlvbi5jPTE4Mz1zdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtMjIzLVxubmV0L3Jkcy9jb25uZWN0aW9uLmM6MjI0Olx0Y29ubiA9IGttZW1fY2FjaGVfemFsbG9jKHJkc19jb25uX3NsYWIsIGdmcCk7XG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0yMjUtXHRpZiAoIWNvbm4pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3OTUKCQkJCQkJCW91dHB1dDogMjM2CgkJCQkJCQl0aG91Z2h0czogODcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFwcGxpY2FiaWxpdHkgQW5hbHlzaXMgZm9yIFJEUyBDb25uZWN0aW9uIFRlYXJkb3duIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaXNzZWN0aW5nIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgUkRTIG5ldHdvcmsgcHJvdG9jb2wuIEl0JiMzOTtzIGZvY3VzZWQgb24gbWFuYWdpbmcgdGhlIGxpZmV0aW1lIG9mIGByZHNfY29ubmVjdGlvbmAgb2JqZWN0cyBtb3JlIHJvYnVzdGx5LCBzcGVjaWZpY2FsbHkgd2l0aCByZWZlcmVuY2UgY291bnRpbmcgKGBrcmVmYCkgYW5kIGFzeW5jaHJvbm91cyBjbGVhbnVwLiBUaGlzIGlzIHRvIGFkZHJlc3Mgc29tZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBpc3N1ZXMgZHVyaW5nIGNvbm5lY3Rpb24gdGVhcmRvd24gYW5kIG1vZHVsZSB1bmxvYWRpbmcuIE15IG1haW4gY29uY2VybiBpcywgb2YgY291cnNlLCB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcywgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgS01TQU4gd291bGQgYmUgZ29vZCBhdCBmaW5kaW5nLgoKVGhlIGZpcnN0IHRoaW5nIHRvIHVuZGVyc3RhbmQgaXMgaG93IGBjb25uYCBpcyBhbGxvY2F0ZWQ7IGl0JiMzOTtzIGRvbmUgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIG1lYW5pbmcgYWxsIG9mIHRoZSBmaWVsZHMgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGxvb2tlZCBjbG9zZWx5IGF0IGFsbCBvZiB0aGUgY2hhbmdlZCBmdW5jdGlvbnM6IGByZHNfcmVsZWFzZWAsIGByZHNfY29ubl9sb29rdXBgLCBgX19yZHNfY29ubl9jcmVhdGVgLCB0aGUgYHJkc19jb25uXypgIGZ1bmN0aW9ucyBpbiBgY29ubmVjdGlvbi5jYCwgYW5kIHZhcmlvdXMgZnVuY3Rpb25zIGluIGBpYi5jYCwgYGliX2NtLmNgLCBgbG9vcC5jYCwgYHRjcC5jYCwgYHRjcF9saXN0ZW4uY2AsIGBtZXNzYWdlLmNgLCBgcmVjdi5jYCwgYW5kIGBzZW5kLmNgIHRoYXQgaW52b2x2ZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGNvbmN1cnJlbmN5IHByaW1pdGl2ZXMsIG9iamVjdCBsaWZlY3ljbGUsIGFuZCB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gZm9yIGByZHNfY29ubmVjdGlvbmAuCgpNeSBhbmFseXNpcyByZWFsbHkgY2VudGVycyBhcm91bmQgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBhbnkgcmlza3MgdGhhdCBLTVNBTiBpcyBwYXJ0aWN1bGFybHkgYWRlcHQgYXQgZmluZGluZy4gSSBsb29rZWQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBidWZmZXIgb3ZlcnJ1bnMgdGhhdCBtaWdodCByZWFkIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgYW55IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3VsZCBsZWFrIHRvIHVzZXJzcGFjZS4KCkl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBhYm91dCByZWZlcmVuY2UgY291bnRpbmcsIG9iamVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgYW5kIGVuc3VyaW5nIGNvcnJlY3QgdGVhcmRvd24gc2VxdWVuY2UuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidWZmZXIgYm91bmRhcmllcywgc3RydWN0IHNlcmlhbGl6YXRpb24gdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIG5ldyBjb2RlIGlzIGFsbCByZWZjb3VudGluZywgY29uY3VycmVuY3ksIGFuZCBzaHV0ZG93bi4gVGhlcmVmb3JlLCBhbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhczoKCiogICBVc2UtQWZ0ZXItRnJlZSAoVUFGKSwgd2hpY2ggS0FTQU4gd291bGQgY2F0Y2guCiogICBNZW1vcnkgbGVha3MsIGRldGVjdGVkIGJ5IEtNRU1MRUFLLgoqICAgRGVhZGxvY2tzIG9yIGxvY2tpbmcgaW1iYWxhbmNlcywgd2hpY2ggTE9DS0RFUCBzaG91bGQgaWRlbnRpZnkuCiogICBEb3VibGUgZnJlZXMgb3IgaW52YWxpZCBmcmVlcywgY2F1Z2h0IGJ5IEtBU0FOIG9yIFNMVUIgZGVidWcuCgpLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHNwZWNpZmljYWxseSB0YXJnZXRlZCBhdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoZWl0aGVyIHN0YWNrL2hlYXAgKmJlZm9yZSogaW5pdGlhbGl6YXRpb24pIGFuZCBwb3RlbnRpYWxseSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgYWx0ZXIgYW55IGRhdGEgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgdXNlZC4gVGhlcmVmb3JlLCBnaXZlbiB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBwYXRjaCwgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGZpbmFsIGNoZWNrIG9mIHRoZSByZWFzb25pbmcgcmVxdWlyZW1lbnRzOgomIzM0O1VzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuIEl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LiBJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuJiMzNDsKClBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2A6Ci0gYEtNU0FOUmVhc29uaW5nYDogQSB0aG9yb3VnaCBleHBsYW5hdGlvbiBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5LgotIGBOZWVkc0tNU0FOYDogYGZhbHNlYC4KCk9rYXksIEkmIzM5O20gc2F0aXNmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKGBrcmVmYCkgb2YgYHN0cnVjdCByZHNfY29ubmVjdGlvbmAgYWNyb3NzIHRoZSBSRFMgc3Vic3lzdGVtIChpbmNsdWRpbmcgVENQLCBJQiwgYW5kIGxvb3BiYWNrIHRyYW5zcG9ydHMpIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIG1vZHVsZS11bmxvYWQgcmFjZXMuXG5cbi0gS0FTQU4gLyBMT0NLREVQIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmVmY291bnQgaW1iYWxhbmNlLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGRlYWRsb2NrIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duKSBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4sIFNMVUIgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC5cbi0gS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBtb2RpZnkgYW55IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGluZm8tbGVhayByaXNrKSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIHNpemluZyBvciBib3VuZHMgY2hlY2tpbmcsIGFuZCBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBvYmplY3RzIGNvbnRpbnVlIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvY2AgKGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQpLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcgKGBrcmVmYCkgb2YgYHN0cnVjdCByZHNfY29ubmVjdGlvbmAgYWNyb3NzIHRoZSBSRFMgc3Vic3lzdGVtIChpbmNsdWRpbmcgVENQLCBJQiwgYW5kIGxvb3BiYWNrIHRyYW5zcG9ydHMpIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIG1vZHVsZS11bmxvYWQgcmFjZXMuXG5cbi0gS0FTQU4gLyBMT0NLREVQIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgcmVmY291bnQgaW1iYWxhbmNlLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGRlYWRsb2NrIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duKSBhcmUgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4sIFNMVUIgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC5cbi0gS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBidWZmZXJzLCBkb2VzIG5vdCBtb2RpZnkgYW55IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGluZm8tbGVhayByaXNrKSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIHNpemluZyBvciBib3VuZHMgY2hlY2tpbmcsIGFuZCBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBvYmplY3RzIGNvbnRpbnVlIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvY2AgKGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQpLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMxLjk3Mzc1MDczMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODI1NjQ0MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1RDUFwiLFxuICAgIFwiUkRTX1JETUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3Jkc19jb25uX2NyZWF0ZVwiLFxuICAgIFwicmRzX2Nvbm5fZGVzdHJveVwiLFxuICAgIFwicmRzX2Nvbm5fZGVzdHJveV9maW5pXCIsXG4gICAgXCJyZHNfY29ubl9nZXRcIixcbiAgICBcInJkc19jb25uX3B1dFwiLFxuICAgIFwicmRzX2Nvbm5fbG9va3VwXCIsXG4gICAgXCJyZHNfc2VuZG1zZ1wiLFxuICAgIFwicmRzX3JlY3ZfaW5jb21pbmdcIixcbiAgICBcInJkc19pbmNfcHV0XCIsXG4gICAgXCJyZHNfbWVzc2FnZV9mcmVlXCIsXG4gICAgXCJyZHNfdGNwX2FjY2VwdF9vbmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSBvZiBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBhY3Jvc3MgdGhlIFJEUyBzdWJzeXN0ZW0gKGluY2x1ZGluZyBUQ1AsIElCLCBhbmQgbG9vcGJhY2sgdHJhbnNwb3J0cykgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgbW9kdWxlLXVubG9hZCByYWNlcy5cXG5cXG4tIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHJlZmNvdW50IGltYmFsYW5jZSwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBkZWFkbG9jayBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLCBTTFVCIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuXFxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gaW5mby1sZWFrIHJpc2spLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgc2l6aW5nIG9yIGJvdW5kcyBjaGVja2luZywgYW5kIGBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb25gIG9iamVjdHMgY29udGludWUgdG8gYmUgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoZnVsbHkgemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmVmZXJlbmNlIGNvdW50aW5nIChrcmVmKSB0byBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKGNfcmVmY291bnQpIHRvIHByb3Blcmx5IG1hbmFnZSBjb25uZWN0aW9uIGxpZmV0aW1lcyBhbmQgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zLiBJdCByZWZhY3RvcnMgY29ubmVjdGlvbiB0ZWFyZG93biBpbnRvIHN5bmNocm9ub3VzIHF1aWVzY2UgKHJkc19jb25uX3BhdGhfcXVpZXNjZSwgcmRzX2Nvbm5fZGVzdHJveSkgYW5kIGFzeW5jaHJvbm91cyBkZXN0cnVjdGlvbiAocmRzX2Nvbm5fZGVzdHJveV9maW5pKSwgYW5kIHVwZGF0ZXMgcmVmZXJlbmNlIHRyYWNraW5nIGFjcm9zcyBzb2NrZXQgcmVsZWFzZSwgbWVzc2FnZSBxdWV1ZXMsIHJlY3Yvc2VuZCBwYXRocywgYW5kIHRyYW5zcG9ydHMgKFRDUCwgbG9vcCwgSUIpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBsb2dpYywgc3luY2hyb25pemF0aW9uLCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaW4gbmV0L3JkcywgbWFraW5nIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMxLjk3Mzc1NTA4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNjczMjc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAwMTVlMTg2ZTU0ZTM1OTNkZjZmZmEwMDczMWFlYTA5YTkxOGFkMjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxNTo1NjoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuY1xcbmluZGV4IGQ1ZGVmZTkxNzJlMzYuLjBlYWE1Yjk3NjU3MjQgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9hZl9yZHMuY1xcbisrKyBiL25ldC9yZHMvYWZfcmRzLmNcXG5AQCAtODAsNiArODAsMTQgQEAgc3RhdGljIGludCByZHNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbiBcXHRyZHNfbm90aWZ5X3F1ZXVlX2dldChycywgTlVMTCk7XFxuIFxcdHJkc19ub3RpZnlfbXNnX3pjb3B5X3B1cmdlKFxcdTAwMjZycy1cXHUwMDNlcnNfemNvb2tpZV9xdWV1ZSk7XFxuIFxcbitcXHQvKiBkcm9wIHRoZSBjYWNoZWQgY29ubmVjdGlvbiByZWZlcmVuY2U7IG5vIHNlbmRtc2cgY2FuIHJhY2VcXG4rXFx0ICogd2l0aCB1cyBoZXJlLCB0aGUgc29ja2V0IGlzIGdvaW5nIGF3YXlcXG4rXFx0ICovXFxuK1xcdGlmIChycy1cXHUwMDNlcnNfY29ubikge1xcbitcXHRcXHRyZHNfY29ubl9wdXQocnMtXFx1MDAzZXJzX2Nvbm4pO1xcbitcXHRcXHRycy1cXHUwMDNlcnNfY29ubiA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cmRzX3NvY2tfbG9jayk7XFxuIFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJzLVxcdTAwM2Vyc19pdGVtKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnJkc19zb2NrX2xvY2spO1xcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXFxuaW5kZXggYjZjNGJlYjUwZWFmMC4uMmM4Y2E1NGE5MWNhOCAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xcbisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXFxuQEAgLTQ3LDcgKzQ3LDggQEBcXG4gXFxuIC8qIGNvbnZlcnRpbmcgdGhpcyB0byBSQ1UgaXMgYSBjaG9yZSBmb3IgYW5vdGhlciBkYXkuLiAqL1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25uX2xvY2spO1xcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfY29ubl9jb3VudDtcXG4rLyogd29rZW4gd2hlbmV2ZXIgYSB0cmFuc3BvcnQncyB0X2Nvbm5fY291bnQgZHJvcHMgdG8gemVybyAqL1xcbitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2Nvbm5fZnJlZWRfd2FpdHEpO1xcbiBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgcmRzX2Nvbm5faGFzaFtSRFNfQ09OTkVDVElPTl9IQVNIX0VOVFJJRVNdO1xcbiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19jb25uX3NsYWI7XFxuIFxcbkBAIC03OSw3ICs4MCwxMCBAQCBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKnJkc19jb25uX2J1Y2tldChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxhZGRyLFxcbiBcXHRcXHR2YXIgfD0gUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHXyMjc3VmZml4O1xcdFxcXFxcXG4gfSB3aGlsZSAoMClcXG4gXFxuLS8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrICovXFxuKy8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrLlxcbisgKiBPbiBzdWNjZXNzIGEgcmVmZXJlbmNlIGlzIHRha2VuIG9uIHRoZSByZXR1cm5lZCBjb25uZWN0aW9uOyB0aGVcXG4rICogY2FsbGVyIG11c3QgZHJvcCBpdCB3aXRoIHJkc19jb25uX3B1dCgpLlxcbisgKi9cXG4gc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsXFxuQEAgLTk2LDYgKzEwMCwxMyBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHQgICAgY29ubi1cXHUwMDNlY190b3MgPT0gdG9zIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBuZXQgPT0gcmRzX2Nvbm5fbmV0KGNvbm4pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBjb25uLVxcdTAwM2VjX2Rldl9pZiA9PSBkZXZfaWYpIHtcXG4rXFx0XFx0XFx0LyogQW4gZW50cnkgd2hvc2UgcmVmY291bnQgYWxyZWFkeSBkcm9wcGVkIHRvXFxuK1xcdFxcdFxcdCAqIHplcm8gaGFzIGJlZW4gdW5oYXNoZWQgYW5kIGlzIGFib3V0IHRvIGJlXFxuK1xcdFxcdFxcdCAqIGZyZWVkOyBhbiBSQ1UgdHJhdmVyc2FsIG1heSBzdGlsbCBjb21lXFxuK1xcdFxcdFxcdCAqIGFjcm9zcyBpdC4gIFRyZWF0IGl0IGFzIGFic2VudC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNmNvbm4tXFx1MDAzZWNfcmVmY291bnQpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0cmV0ID0gY29ubjtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5AQCAtMTk3LDcgKzIwOCwxNCBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdCAqIFdlIG5lZWQgYSBzZWNvbmQgY29ubmVjdGlvbiBvYmplY3QgaW50byB3aGljaCB3ZVxcbiBcXHRcXHQgKiBjYW4gc3RpY2sgdGhlIG90aGVyIFFQLiAqL1xcbiBcXHRcXHRwYXJlbnQgPSBjb25uO1xcbitcXHRcXHQvKiBUaGUgY19wYXNzaXZlIHBvaW50ZXIgaG9sZHMgYSByZWZlcmVuY2Ugd2hpY2ggaXMgb25seVxcbitcXHRcXHQgKiBkcm9wcGVkIG9uZSBzeW5jaHJvbml6ZV9yY3UoKSBhZnRlciB0aGUgcG9pbnRlciBpc1xcbitcXHRcXHQgKiBjbGVhcmVkLCBzbyB3aXRoaW4gdGhpcyBSQ1Ugc2VjdGlvbiBhIGZldGNoZWQgcG9pbnRlclxcbitcXHRcXHQgKiBpcyBhbHdheXMgc2FmZSB0byB0YWtlIGEgcmVmZXJlbmNlIG9uLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0Y29ubiA9IHBhcmVudC1cXHUwMDNlY19wYXNzaXZlO1xcbitcXHRcXHRpZiAoY29ubilcXG4rXFx0XFx0XFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xcbiBcXHR9XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRpZiAoY29ubilcXG5AQCAtMjE1LDYgKzIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGtyZWZfaW5pdChcXHUwMDI2Y29ubi1cXHUwMDNlY19yZWZjb3VudCk7XFxuIFxcdElOSVRfSExJU1RfTk9ERShcXHUwMDI2Y29ubi1cXHUwMDNlY19oYXNoX25vZGUpO1xcbiBcXHRjb25uLVxcdTAwM2VjX2xhZGRyID0gKmxhZGRyO1xcbiBcXHRjb25uLVxcdTAwM2VjX2lzdjYgPSAhaXB2Nl9hZGRyX3Y0bWFwcGVkKGxhZGRyKTtcXG5AQCAtMjgyLDggKzMwMSw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0ICAgICBpc19vdXRnb2luZyk7XFxuIFxcdFxcdGNvbm4tXFx1MDAzZWNfcGF0aFtpXS5jcF9pbmRleCA9IGk7XFxuIFxcdFxcdGNvbm4tXFx1MDAzZWNfcGF0aFtpXS5jcF93cSA9XFxuLVxcdFxcdFxcdGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJrcmRzX2NwX3dxIyVsdS8lZFxcXCIsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHJkc19jb25uX2NvdW50LCBpKTtcXG4rXFx0XFx0XFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXFxcImtyZHNfY3Bfd3EjJWQvJWRcXFwiLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRhdG9taWNfcmVhZChcXHUwMDI2dHJhbnMtXFx1MDAzZXRfY29ubl9jb3VudCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGkpO1xcbiBcXHRcXHRpZiAoIWNvbm4tXFx1MDAzZWNfcGF0aFtpXS5jcF93cSlcXG4gXFx0XFx0XFx0Y29ubi1cXHUwMDNlY19wYXRoW2ldLmNwX3dxID0gcmRzX3dxO1xcbiBcXHR9XFxuQEAgLTMxNSwxNSArMzM1LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJkc19jb25uX2xvY2ssIGZsYWdzKTtcXG4gXFx0aWYgKHBhcmVudCkge1xcbiBcXHRcXHQvKiBDcmVhdGluZyBwYXNzaXZlIGNvbm4gKi9cXG4tXFx0XFx0aWYgKHBhcmVudC1cXHUwMDNlY19wYXNzaXZlKSB7XFxuK1xcdFxcdGlmIChSRUFEX09OQ0UocGFyZW50LVxcdTAwM2VjX2Rlc3Ryb3lfaW5fcHJvZykpIHtcXG4rXFx0XFx0XFx0LyogVGhlIHBhcmVudCdzIGRlc3Ryb3kgaGFzIGJlZ3VuIChpdCBzZXRzIHRoZVxcbitcXHRcXHRcXHQgKiBmbGFnIGFuZCBzbmF0Y2hlcyBjX3Bhc3NpdmUgdW5kZXIgdGhpc1xcbitcXHRcXHRcXHQgKiBsb2NrKTsgZG8gbm90IGluc3RhbGwgYSBuZXcgcGFzc2l2ZSBjb25uXFxuK1xcdFxcdFxcdCAqIHRoYXQgbm90aGluZyB3b3VsZCBldmVyIGRlc3Ryb3kuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR0cmFucy1cXHUwMDNlY29ubl9mcmVlKGNvbm4tXFx1MDAzZWNfcGF0aFswXS5jcF90cmFuc3BvcnRfZGF0YSk7XFxuK1xcdFxcdFxcdGZyZWVfY3AgPSBjb25uLVxcdTAwM2VjX3BhdGg7XFxuK1xcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcXG4rXFx0XFx0XFx0Y29ubiA9IEVSUl9QVFIoLUVORVRET1dOKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChwYXJlbnQtXFx1MDAzZWNfcGFzc2l2ZSkge1xcbitcXHRcXHRcXHRyZHNfY29ubl9nZXQocGFyZW50LVxcdTAwM2VjX3Bhc3NpdmUpO1xcbiBcXHRcXHRcXHR0cmFucy1cXHUwMDNlY29ubl9mcmVlKGNvbm4tXFx1MDAzZWNfcGF0aFswXS5jcF90cmFuc3BvcnRfZGF0YSk7XFxuIFxcdFxcdFxcdGZyZWVfY3AgPSBjb25uLVxcdTAwM2VjX3BhdGg7XFxuIFxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcXG4gXFx0XFx0XFx0Y29ubiA9IHBhcmVudC1cXHUwMDNlY19wYXNzaXZlO1xcbiBcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHQvKiBUaGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyXFxuK1xcdFxcdFxcdCAqIGRlc3Ryb3lzIHRoZSBjb25uICh0aGUgdHJhbnNwb3J0J3MgY29ublxcbitcXHRcXHRcXHQgKiBsaXN0cywgYXMgZm9yIGFueSBvdGhlciBjb25uKS4gIFRha2Ugb25lXFxuK1xcdFxcdFxcdCAqIGZvciB0aGUgY19wYXNzaXZlIHBvaW50ZXIgLSBkcm9wcGVkIHdoZW5cXG4rXFx0XFx0XFx0ICogdGhlIHBhcmVudCBpcyBkZXN0cm95ZWQgLSBhbmQgb25lIGZvciBvdXJcXG4rXFx0XFx0XFx0ICogY2FsbGVyLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xcdC8qIGNfcGFzc2l2ZSAqL1xcbitcXHRcXHRcXHRyZHNfY29ubl9nZXQoY29ubik7XFx0LyogY2FsbGVyICovXFxuIFxcdFxcdFxcdHBhcmVudC1cXHUwMDNlY19wYXNzaXZlID0gY29ubjtcXG4gXFx0XFx0XFx0cmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7XFxuLVxcdFxcdFxcdHJkc19jb25uX2NvdW50Kys7XFxuK1xcdFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmNvbm4tXFx1MDAzZWNfdHJhbnMtXFx1MDAzZXRfY29ubl9jb3VudCk7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LyogQ3JlYXRpbmcgbm9ybWFsIGNvbm4gKi9cXG5AQCAtMzUwLDE1ICszOTAsMjEgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqX19yZHNfY29ubl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRjb25uLVxcdTAwM2VjX215X2dlbl9udW0gPSByZHNfZ2VuX251bTtcXG4gXFx0XFx0XFx0Y29ubi1cXHUwMDNlY19wZWVyX2dlbl9udW0gPSAwO1xcbitcXHRcXHRcXHQvKiB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyXFxuK1xcdFxcdFxcdCAqIGRlc3Ryb3lzIHRoZSBjb25uOyB0YWtlIG9uZSBmb3Igb3VyIGNhbGxlclxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xcbiBcXHRcXHRcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNmNvbm4tXFx1MDAzZWNfaGFzaF9ub2RlLCBoZWFkKTtcXG4gXFx0XFx0XFx0cmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7XFxuLVxcdFxcdFxcdHJkc19jb25uX2NvdW50Kys7XFxuK1xcdFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNmNvbm4tXFx1MDAzZWNfdHJhbnMtXFx1MDAzZXRfY29ubl9jb3VudCk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZyZHNfY29ubl9sb2NrLCBmbGFncyk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gb3V0OlxcbitcXHRpZiAocGFyZW50KVxcbitcXHRcXHRyZHNfY29ubl9wdXQocGFyZW50KTtcXG4gXFx0aWYgKGZyZWVfY3ApIHtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wYXRoczsgaSsrKVxcbiBcXHRcXHRcXHRpZiAoZnJlZV9jcFtpXS5jcF93cSAhPSByZHNfd3EpXFxuQEAgLTUxNSwxMCArNTYxLDEyIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiBcXHRcXHRjb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2Vjb25uX3Nsb3RzX2F2YWlsYWJsZShjb25uLCBmYWxzZSk7XFxuIH1cXG4gXFxuLS8qIGRlc3Ryb3kgYSBzaW5nbGUgcmRzX2Nvbm5fcGF0aC4gcmRzX2Nvbm5fZGVzdHJveSgpIGl0ZXJhdGVzIG92ZXJcXG4tICogYWxsIHBhdGhzIHVzaW5nIHJkc19jb25uX3BhdGhfZGVzdHJveSgpXFxuKy8qIHF1aWVzY2UgYSBzaW5nbGUgcmRzX2Nvbm5fcGF0aDogc2h1dCBpdCBkb3duIGFuZCB0ZWFyIGRvd24gYW55XFxuKyAqIHF1ZXVlZCBtZXNzYWdlcy4gIHJkc19jb25uX2Rlc3Ryb3koKSBpdGVyYXRlcyBvdmVyIGFsbCBwYXRocyB1c2luZ1xcbisgKiByZHNfY29ubl9wYXRoX3F1aWVzY2UoKTsgdGhlIHRyYW5zcG9ydCBzdGF0ZSBhbmQgdGhlIHdvcmtxdWV1ZSBhcmVcXG4rICogZnJlZWQgbGF0ZXIsIGZyb20gcmRzX2Nvbm5fcGF0aF9mcmVlKCkuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbitzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3F1aWVzY2Uoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiB7XFxuIFxcdHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICpydG1wO1xcbiBcXG5AQCAtNTQ3LDYgKzU5NSwxNiBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiBcXHRXQVJOX09OKGRlbGF5ZWRfd29ya19wZW5kaW5nKFxcdTAwMjZjcC1cXHUwMDNlY3BfcmVjdl93KSk7XFxuIFxcdFdBUk5fT04oZGVsYXllZF93b3JrX3BlbmRpbmcoXFx1MDAyNmNwLVxcdTAwM2VjcF9jb25uX3cpKTtcXG4gXFx0V0FSTl9PTih3b3JrX3BlbmRpbmcoXFx1MDAyNmNwLVxcdTAwM2VjcF9kb3duX3cpKTtcXG4rfVxcbitcXG4rLyogZnJlZSBhIHF1aWVzY2VkIHJkc19jb25uX3BhdGgncyB0cmFuc3BvcnQgc3RhdGUgYW5kIHdvcmtxdWV1ZTsgcnVuc1xcbisgKiBmcm9tIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgdGhlIGxhc3QgY29ubmVjdGlvbiByZWZlcmVuY2UgaXNcXG4rICogZHJvcHBlZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZnJlZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuK3tcXG4rXFx0aWYgKCFjcC1cXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGEpXFxuK1xcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChjcC1cXHUwMDNlY3Bfd3EgIT0gcmRzX3dxKSB7XFxuIFxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGNwLVxcdTAwM2VjcF93cSk7XFxuQEAgLTU1NiwxNyArNjE0LDc0IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuIFxcdGNwLVxcdTAwM2VjcF9jb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2Vjb25uX2ZyZWUoY3AtXFx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhKTtcXG4gfVxcbiBcXG4rLyogRnJlZSBhIGNvbm5lY3Rpb24uICBUaGlzIHJ1bnMgZnJvbSByZHNfY29ubl9wdXQoKSB3aGVuIHRoZSBsYXN0XFxuKyAqIHJlZmVyZW5jZSBpcyBkcm9wcGVkLCBhZnRlciByZHNfY29ubl9kZXN0cm95KCkgaGFzIHF1aWVzY2VkIHRoZVxcbisgKiBjb25uZWN0aW9uIGFuZCBkcm9wcGVkIHRoZSBpbml0aWFsIHJlZmVyZW5jZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJkc19jb25uX2Rlc3Ryb3lfZmluaShzdHJ1Y3Qga3JlZiAqa3JlZilcXG4re1xcbitcXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJkc19jb25uZWN0aW9uLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBjX3JlZmNvdW50KTtcXG4rXFx0aW50IG5wYXRocyA9IChjb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2V0X21wX2NhcGFibGUgPyBSRFNfTVBBVEhfV09SS0VSUyA6IDEpO1xcbitcXHRzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMgPSBjb25uLVxcdTAwM2VjX3RyYW5zO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGF0aHM7IGkrKylcXG4rXFx0XFx0cmRzX2Nvbm5fcGF0aF9mcmVlKFxcdTAwMjZjb25uLVxcdTAwM2VjX3BhdGhbaV0pO1xcbitcXG4rXFx0a2ZyZWUoY29ubi1cXHUwMDNlY19wYXRoKTtcXG4rXFx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xcbitcXG4rXFx0Lyogb25seSBhZnRlciBldmVyeXRoaW5nIHRoZSB0cmFuc3BvcnQgbW9kdWxlIG93bnMgaGFzIGJlZW5cXG4rXFx0ICogZnJlZWQgYWJvdmUgbWF5IGl0cyB1bmxvYWQgcHJvY2VlZFxcbitcXHQgKi9cXG4rXFx0aWYgKCFhdG9taWNfZGVjX3JldHVybihcXHUwMDI2dHJhbnMtXFx1MDAzZXRfY29ubl9jb3VudCkpXFxuK1xcdFxcdHdha2VfdXBfYWxsKFxcdTAwMjZyZHNfY29ubl9mcmVlZF93YWl0cSk7XFxuK31cXG4rXFxuKy8qIFdhaXQgZm9yIGFsbCBvZiBAdHJhbnMncyBjb25uZWN0aW9ucyB0byBiZSBmcmVlZDsgdGhlIGZyZWUgcnVuc1xcbisgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYSBjb25uZWN0aW9uLlxcbisgKiBDYWxsZWQgb24gdHJhbnNwb3J0IG1vZHVsZSB1bmxvYWQsIGFmdGVyIHRoZSB0cmFuc3BvcnQgZGVzdHJveWVkXFxuKyAqIGFsbCBvZiBpdHMgY29ubmVjdGlvbnM6IGFueXRoaW5nIHN0aWxsIGhvbGRpbmcgYSBjb25uZWN0aW9uXFxuKyAqIHJlZmVyZW5jZSBhdCB0aGF0IHBvaW50IGlzIGEgc2hvcnQtbGl2ZWQgbG9va3VwLXN0eWxlIGhvbGRlciwgc29cXG4rICogYSBib3VuZGVkIHdhaXQgc3VmZmljZXMgLSBidXQgd2FybiBpZiBpdCBleHBpcmVzLCBzaW5jZSB0aGUgZnJlZXNcXG4rICogdGhhdCBmb2xsb3cgdGhlIHVubG9hZCB3aWxsIHRoZW4gdG91Y2ggZnJlZWQgbW9kdWxlIHRleHQuXFxuKyAqL1xcbit2b2lkIHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKVxcbit7XFxuK1xcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KHJkc19jb25uX2ZyZWVkX3dhaXRxLFxcbitcXHRcXHRcXHRcXHQhYXRvbWljX3JlYWQoXFx1MDAyNnRyYW5zLVxcdTAwM2V0X2Nvbm5fY291bnQpLFxcbitcXHRcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKFJEU19DT05OX0ZSRUVfVElNRU9VVF9NUykpKVxcbitcXHRcXHRXQVJOKDEsIFxcXCJSRFMvJXM6ICVkIGNvbm5lY3Rpb24ocykgbm90IGZyZWVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgIHRyYW5zLVxcdTAwM2V0X25hbWUsIGF0b21pY19yZWFkKFxcdTAwMjZ0cmFucy1cXHUwMDNldF9jb25uX2NvdW50KSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZCk7XFxuK1xcbit2b2lkIHJkc19jb25uX2dldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXFxuK3tcXG4rXFx0a3JlZl9nZXQoXFx1MDAyNmNvbm4tXFx1MDAzZWNfcmVmY291bnQpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2dldCk7XFxuK1xcbit2b2lkIHJkc19jb25uX3B1dChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXFxuK3tcXG4rXFx0a3JlZl9wdXQoXFx1MDAyNmNvbm4tXFx1MDAzZWNfcmVmY291bnQsIHJkc19jb25uX2Rlc3Ryb3lfZmluaSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcHV0KTtcXG4rXFxuIC8qXFxuICAqIFN0b3AgYW5kIGZyZWUgYSBjb25uZWN0aW9uLlxcbiAgKlxcbi0gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gdmVyeSBsaW1pdGVkIGNpcmN1bXN0YW5jZXMuICBJdCBhc3N1bWVzIHRoYXQgb25jZVxcbi0gKiB0aGUgY29ubiBoYXMgYmVlbiBzaHV0ZG93biB0aGF0IG5vIG9uZSBlbHNlIGlzIHJlZmVyZW5jaW5nIHRoZSBjb25uZWN0aW9uLlxcbi0gKiBXZSBjYW4gb25seSBlbnN1cmUgdGhpcyBpbiB0aGUgcm1tb2QgcGF0aCBpbiB0aGUgY3VycmVudCBjb2RlLlxcbisgKiBRdWllc2NlcyB0aGUgY29ubmVjdGlvbiBzeW5jaHJvbm91c2x5ICh3b3JrZXJzIGNhbmNlbGxlZCwgdHJhbnNwb3J0XFxuKyAqIGNvbm5lY3Rpb25zIHNodXQgZG93biwgcXVldWVkIG1lc3NhZ2VzIGRyb3BwZWQpIGFuZCBkcm9wcyB0aGVcXG4rICogaW5pdGlhbCByZWZlcmVuY2UuICBUaGUgbWVtb3J5IC0gaW5jbHVkaW5nIHRoZSB0cmFuc3BvcnQnc1xcbisgKiBwZXItY29ubmVjdGlvbiBzdGF0ZSBhbmQgdGhlIHBhdGggd29ya3F1ZXVlcyAtIGlzIGZyZWVkIG9uY2UgdGhlXFxuKyAqIGxhc3QgcmRzX2Nvbm5fcHV0KCkgcnVucywgd2hpY2ggbWF5IGJlIGFmdGVyIHRoaXMgcmV0dXJucy5cXG4gICovXFxuIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IGk7XFxuK1xcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcGFzc2l2ZTtcXG4gXFx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwO1xcbiBcXHRpbnQgbnBhdGhzID0gKGNvbm4tXFx1MDAzZWNfdHJhbnMtXFx1MDAzZXRfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7XFxuIFxcbkBAIC01NzQsMTYgKzY4OSw0NiBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbiBcXHRcXHQgXFxcIiVwSTRcXFxcblxcXCIsIGNvbm4sIFxcdTAwMjZjb25uLVxcdTAwM2VjX2xhZGRyLFxcbiBcXHRcXHQgXFx1MDAyNmNvbm4tXFx1MDAzZWNfZmFkZHIpO1xcbiBcXG4tXFx0LyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi9cXG4rXFx0LyogTWFrZSByZHNfZGVzdHJveV9wZW5kaW5nKCkgdHJ1ZSBmb3IgdGhpcyBjb25uLiAgVG9nZXRoZXIgd2l0aFxcbitcXHQgKiB0aGUgc3luY2hyb25pemVfcmN1KCkgYmVsb3cgdGhpcyBzdG9wcyB0aGUgd29yay1yZXF1ZXVlaW5nXFxuK1xcdCAqIHNpdGVzICh3aGljaCBhbGwgdGVzdCByZHNfZGVzdHJveV9wZW5kaW5nKCkgdW5kZXJcXG4rXFx0ICogcmN1X3JlYWRfbG9jaygpKSBmcm9tIHF1ZXVlaW5nIG5ldyB3b3JrIG9uIHRoZSBwYXRoXFxuK1xcdCAqIHdvcmtxdWV1ZXMgb25jZSB3ZSBzdGFydCBjYW5jZWxsaW5nIGFuZCBkZXN0cm95aW5nIHRoZW0uXFxuK1xcdCAqXFxuK1xcdCAqIE5vdyB0aGF0IHRoZSB0cmFuc3BvcnQgc3RhdGUgc3RheXMgZGlzY292ZXJhYmxlIChlLmcuIG9uIHRoZVxcbitcXHQgKiB0cmFuc3BvcnRzJyBjb25uZWN0aW9uIGxpc3RzKSB1bnRpbCB0aGUgZmluYWwgcmRzX2Nvbm5fcHV0KCksXFxuK1xcdCAqIGEgY29ubiBjYW4gYmUgaGFuZGVkIHRvIHJkc19jb25uX2Rlc3Ryb3koKSBtb3JlIHRoYW4gb25jZSAtXFxuK1xcdCAqIGUuZy4gZHJvcHBlZCBmb3IgYSBwcm90b2NvbCB2ZXJzaW9uIG1pc21hdGNoIGFuZCB0aGVuIGZvdW5kXFxuK1xcdCAqIGFnYWluIGF0IG1vZHVsZSB1bmxvYWQuICBPbmx5IHRoZSBmaXJzdCBjYWxsZXIgcHJvY2VlZHM7IHRoZVxcbitcXHQgKiB1bmhhc2ggYWxzbyBoYXBwZW5zIHVuZGVyIHJkc19jb25uX2xvY2ssIHNvIGEgbG9va2VkLXVwIGNvbm5cXG4rXFx0ICogY2FuIG5ldmVyIGJlIHF1aWVzY2VkIHR3aWNlLlxcbitcXHQgKi9cXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cmRzX2Nvbm5fbG9jayk7XFxuK1xcdGlmIChjb25uLVxcdTAwM2VjX2Rlc3Ryb3lfaW5fcHJvZykge1xcbitcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnJkc19jb25uX2xvY2spO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0V1JJVEVfT05DRShjb25uLVxcdTAwM2VjX2Rlc3Ryb3lfaW5fcHJvZywgdHJ1ZSk7XFxuK1xcbitcXHQvKiBFbnN1cmUgY29ubiB3aWxsIG5vdCBiZSBzY2hlZHVsZWQgZm9yIHJlY29ubmVjdCAqL1xcbiBcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNmNvbm4tXFx1MDAzZWNfaGFzaF9ub2RlKTtcXG4rXFxuK1xcdC8qIFNuYXRjaCBjX3Bhc3NpdmUgd2hpbGUgaG9sZGluZyB0aGUgbG9jazpcXG4rXFx0ICogX19yZHNfY29ubl9jcmVhdGUoKSBkZXJlZmVyZW5jZXMgaXQgdW5kZXIgcmN1X3JlYWRfbG9jaygpXFxuK1xcdCAqIChhbmQgcmVmdXNlcyB0byBpbnN0YWxsIGEgbmV3IG9uZSBvbmNlIGNfZGVzdHJveV9pbl9wcm9nIGlzXFxuK1xcdCAqIHNldCwgd2hpY2ggaXQgY2hlY2tzIHVuZGVyIHRoaXMgbG9jaykuICBBZnRlciB0aGVcXG4rXFx0ICogc3luY2hyb25pemVfcmN1KCkgYmVsb3cgbm8gb25lIGNhbiBwaWNrIHRoZSBwb2ludGVyIHVwIGFueVxcbitcXHQgKiBtb3JlIGFuZCBpdHMgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkLlxcbitcXHQgKi9cXG4rXFx0cGFzc2l2ZSA9IGNvbm4tXFx1MDAzZWNfcGFzc2l2ZTtcXG4rXFx0Y29ubi1cXHUwMDNlY19wYXNzaXZlID0gTlVMTDtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZyZHNfY29ubl9sb2NrKTtcXG4gXFx0c3luY2hyb25pemVfcmN1KCk7XFxuIFxcbiBcXHQvKiBzaHV0IHRoZSBjb25uZWN0aW9uIGRvd24gKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wYXRoczsgaSsrKSB7XFxuIFxcdFxcdGNwID0gXFx1MDAyNmNvbm4tXFx1MDAzZWNfcGF0aFtpXTtcXG4tXFx0XFx0cmRzX2Nvbm5fcGF0aF9kZXN0cm95KGNwKTtcXG4rXFx0XFx0cmRzX2Nvbm5fcGF0aF9xdWllc2NlKGNwKTtcXG4gXFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZjcC1cXHUwMDNlY3BfcmV0cmFucykpO1xcbiBcXHR9XFxuIFxcbkBAIC01OTQsMTIgKzczOSwxNCBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbiBcXHQgKi9cXG4gXFx0cmRzX2NvbmdfcmVtb3ZlX2Nvbm4oY29ubik7XFxuIFxcbi1cXHRrZnJlZShjb25uLVxcdTAwM2VjX3BhdGgpO1xcbi1cXHRrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7XFxuK1xcdC8qIGRyb3AgdGhlIHJlZmVyZW5jZSBvdXIgY19wYXNzaXZlIHBvaW50ZXIgaGVsZCwgaWYgYW55ICovXFxuK1xcdGlmIChwYXNzaXZlKVxcbitcXHRcXHRyZHNfY29ubl9wdXQocGFzc2l2ZSk7XFxuIFxcbi1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xcbi1cXHRyZHNfY29ubl9jb3VudC0tO1xcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZyZHNfY29ubl9sb2NrLCBmbGFncyk7XFxuK1xcdC8qIGRyb3AgdGhlIGluaXRpYWwgcmVmZXJlbmNlOyB0aGUgY29ubmVjdGlvbiBpcyBmcmVlZCBmcm9tXFxuK1xcdCAqIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgZXZlcnkgaG9sZGVyIGhhcyBkcm9wcGVkIHRoZWlyc1xcbitcXHQgKi9cXG4rXFx0cmRzX2Nvbm5fcHV0KGNvbm4pO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2Rlc3Ryb3kpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jXFxuaW5kZXggNzg2ZjM5MTY5YmMxNC4uNzU1NjkwNTgzMzI1OSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL2liLmNcXG4rKysgYi9uZXQvcmRzL2liLmNcXG5AQCAtNTI1LDEwICs1MjUsNyBAQCBzdGF0aWMgdm9pZCByZHNfaWJfc2V0X3VubG9hZGluZyh2b2lkKVxcbiBcXG4gc3RhdGljIGJvb2wgcmRzX2liX2lzX3VubG9hZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXFxuIHtcXG4tXFx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwID0gXFx1MDAyNmNvbm4tXFx1MDAzZWNfcGF0aFswXTtcXG4tXFxuLVxcdHJldHVybiAodGVzdF9iaXQoUkRTX0RFU1RST1lfUEVORElORywgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykgfHxcXG4tXFx0XFx0YXRvbWljX3JlYWQoXFx1MDAyNnJkc19pYl91bmxvYWRpbmcpICE9IDApO1xcbitcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNnJkc19pYl91bmxvYWRpbmcpICE9IDA7XFxuIH1cXG4gXFxuIHZvaWQgcmRzX2liX2V4aXQodm9pZClcXG5AQCAtNTQxLDYgKzUzOCwxNSBAQCB2b2lkIHJkc19pYl9leGl0KHZvaWQpXFxuICNlbmRpZlxcbiBcXHRyZHNfaWJfdW5yZWdpc3Rlcl9jbGllbnQoKTtcXG4gXFx0cmRzX2liX2Rlc3Ryb3lfbm9kZXZfY29ubnMoKTtcXG4rXFx0cmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChcXHUwMDI2cmRzX2liX3RyYW5zcG9ydCk7XFxuK1xcbitcXHQvKiBUZWFyaW5nIGRvd24gdGhlIGxhc3QgY29ubmVjdGlvbiBtYXkgaGF2ZSBkcm9wcGVkIHRoZSBmaW5hbFxcbitcXHQgKiByZWZlcmVuY2Ugb24gYSBkZXZpY2UsIGRlZmVycmluZyByZHNfaWJfZGV2X2ZyZWUoKSB0byByZHNfd3EuXFxuK1xcdCAqIERyYWluIGl0IGJlZm9yZSB0aGUgbW9kdWxlIGdvZXMgYXdheTsgaXQgcXVldWVzIG5vdGhpbmdcXG4rXFx0ICogZnVydGhlciBvbiByZHNfd3EuXFxuK1xcdCAqL1xcbitcXHRmbHVzaF93b3JrcXVldWUocmRzX3dxKTtcXG4rXFxuIFxcdHJkc19pYl9zeXNjdGxfZXhpdCgpO1xcbiBcXHRyZHNfaWJfcmVjdl9leGl0KCk7XFxuIFxcdHJkc190cmFuc191bnJlZ2lzdGVyKFxcdTAwMjZyZHNfaWJfdHJhbnNwb3J0KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9jbS5jIGIvbmV0L3Jkcy9pYl9jbS5jXFxuaW5kZXggNGZlYjBlZGMzNjBjOC4uMjRlNTM4YzI1M2E3YSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL2liX2NtLmNcXG4rKysgYi9uZXQvcmRzL2liX2NtLmNcXG5AQCAtOTI0LDggKzkyNCwxNCBAQCBpbnQgcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCxcXG4gXFx0XFx0cmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgXFxcInJkbWFfYWNjZXB0IGZhaWxlZFxcXFxuXFxcIik7XFxuIFxcbiBvdXQ6XFxuLVxcdGlmIChjb25uKVxcbitcXHRpZiAoY29ubikge1xcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbm4tXFx1MDAzZWNfY21fbG9jayk7XFxuK1xcdFxcdC8qIFRoZSBjb25uIHN0YXlzIHJlYWNoYWJsZSB0aHJvdWdoIGNtX2lkLVxcdTAwM2Vjb250ZXh0XFxuK1xcdFxcdCAqIHdpdGhvdXQgYSByZWZlcmVuY2Ugb2YgaXRzIG93bjogY29ubmVjdGlvbiBkZXN0cm95XFxuK1xcdFxcdCAqIHNodXRzIHRoZSBjbV9pZCBkb3duIGJlZm9yZSB0aGUgY29ubiBpcyBmcmVlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJkc19jb25uX3B1dChjb25uKTtcXG4rXFx0fVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZG1hX3JlamVjdChjbV9pZCwgXFx1MDAyNmVyciwgc2l6ZW9mKGludCksXFxuIFxcdFxcdFxcdCAgICBJQl9DTV9SRUpfQ09OU1VNRVJfREVGSU5FRCk7XFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvbG9vcC5jIGIvbmV0L3Jkcy9sb29wLmNcXG5pbmRleCBlNmIwNzUwYmJlZGFiLi43ZGFmOGVkMjVkNjlhIDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvbG9vcC5jXFxuKysrIGIvbmV0L3Jkcy9sb29wLmNcXG5AQCAtMTk1LDYgKzE5NSw4IEBAIHZvaWQgcmRzX2xvb3BfZXhpdCh2b2lkKVxcbiBcXHRcXHRXQVJOX09OKGxjLVxcdTAwM2Vjb25uLVxcdTAwM2VjX3Bhc3NpdmUpO1xcbiBcXHRcXHRyZHNfY29ubl9kZXN0cm95KGxjLVxcdTAwM2Vjb25uKTtcXG4gXFx0fVxcbitcXG4rXFx0cmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChcXHUwMDI2cmRzX2xvb3BfdHJhbnNwb3J0KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcmRzX2xvb3Bfa2lsbF9jb25ucyhzdHJ1Y3QgbmV0ICpuZXQpXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvbWVzc2FnZS5jIGIvbmV0L3Jkcy9tZXNzYWdlLmNcXG5pbmRleCBmMjVmMjU5MjU4NmY3Li4yOWU5NTAyOGU2MWU0IDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvbWVzc2FnZS5jXFxuKysrIGIvbmV0L3Jkcy9tZXNzYWdlLmNcXG5AQCAtMTgyLDYgKzE4MiwxOCBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiBcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX2ZyZWUoc3RydWN0IHJkc19tZXNzYWdlICpybSlcXG4re1xcbitcXHQvKiBnZXQgaW4gcmRzX3NlbmRfcXVldWVfcm0oKSwgcmRzX3NlbmRfcHJvYmUoKSBvciB0aGUgY29uZ2VzdGlvblxcbitcXHQgKiBtYXAgcGF0aCBvZiByZHNfc2VuZF94bWl0KCkuICBNZXNzYWdlcyB0aGF0IHdlcmUgbmV2ZXIgcXVldWVkIG9uXFxuK1xcdCAqIGEgY29ubmVjdGlvbiBoYXZlIG5vIHJlZmVyZW5jZSB0byBkcm9wLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJtLVxcdTAwM2VtX2luYy5pX2Nvbm4pXFxuK1xcdFxcdHJkc19jb25uX3B1dChybS1cXHUwMDNlbV9pbmMuaV9jb25uKTtcXG4rXFxuK1xcdGtmcmVlKHJtKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbiBcXHRzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfbWVzc2FnZSxcXG5AQCAtMTkyLDcgKzIwNCw3IEBAIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdGlmIChybS1cXHUwMDNlYXRvbWljLm9wX3VucGluX2RlZmVycmVkKVxcbiBcXHRcXHRyZHNfYXRvbWljX29wX3VucGluX3BhZ2UoXFx1MDAyNnJtLVxcdTAwM2VhdG9taWMpO1xcbiBcXG4tXFx0a2ZyZWUocm0pO1xcbitcXHRyZHNfbWVzc2FnZV9mcmVlKHJtKTtcXG4gfVxcbiBcXG4gdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcXG5AQCAtMjE3LDcgKzIyOSw3IEBAIHZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0a2ZyZWUocm0pO1xcbitcXHRcXHRyZHNfbWVzc2FnZV9mcmVlKHJtKTtcXG4gXFx0fVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19tZXNzYWdlX3B1dCk7XFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRzLmggYi9uZXQvcmRzL3Jkcy5oXFxuaW5kZXggMmRiNDk1NzNkYWNkNS4uMzU3NjBkZDZiMDc3ZiAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL3Jkcy5oXFxuKysrIGIvbmV0L3Jkcy9yZHMuaFxcbkBAIC04OSw3ICs4OSw2IEBAIGVudW0ge1xcbiAjZGVmaW5lIFJEU19SRUNPTk5FQ1RfUEVORElOR1xcdDFcXG4gI2RlZmluZSBSRFNfSU5fWE1JVFxcdFxcdDJcXG4gI2RlZmluZSBSRFNfUkVDVl9SRUZJTExcXHRcXHQzXFxuLSNkZWZpbmVcXHRSRFNfREVTVFJPWV9QRU5ESU5HXFx0NFxcbiBcXG4gLyogTWF4IG51bWJlciBvZiBtdWx0aXBhdGhzIHBlciBSRFMgY29ubmVjdGlvbi4gTXVzdCBiZSBhIHBvd2VyIG9mIDIgKi9cXG4gI2RlZmluZVxcdFJEU19NUEFUSF9XT1JLRVJTXFx0OFxcbkBAIC0xMzgsNiArMTM3LDEyIEBAIHN0cnVjdCByZHNfY29ubl9wYXRoIHtcXG4gLyogT25lIHJkc19jb25uZWN0aW9uIHBlciBSRFMgYWRkcmVzcyBwYWlyICovXFxuIHN0cnVjdCByZHNfY29ubmVjdGlvbiB7XFxuIFxcdHN0cnVjdCBobGlzdF9ub2RlXFx0Y19oYXNoX25vZGU7XFxuK1xcdC8qIEZyZWUgb2YgdGhlIGNvbm5lY3Rpb24gbWVtb3J5IChub3QgdGhlIHRlYXJkb3duIG9mIGl0c1xcbitcXHQgKiB0cmFuc3BvcnQgc3RhdGUgLSB0aGF0IHN0YXlzIHN5bmNocm9ub3VzIGluXFxuK1xcdCAqIHJkc19jb25uX2Rlc3Ryb3koKSkgaXMgZGVmZXJyZWQgdW50aWwgdGhlIGxhc3QgcmVmZXJlbmNlIGlzXFxuK1xcdCAqIGRyb3BwZWQgdmlhIHJkc19jb25uX3B1dCgpLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IGtyZWZcXHRcXHRjX3JlZmNvdW50O1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHJcXHRcXHRjX2xhZGRyO1xcbiBcXHRzdHJ1Y3QgaW42X2FkZHJcXHRcXHRjX2ZhZGRyO1xcbiBcXHRpbnRcXHRcXHRcXHRjX2Rldl9pZjsgLyogaWZpbmRleCB1c2VkIGZvciB0aGlzIGNvbm4gKi9cXG5AQCAtMTQ4LDYgKzE1MywxMCBAQCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24ge1xcbiBcXHRcXHRcXHRcXHRjX3BhZF90b18zMjoyOTtcXG4gXFx0aW50XFx0XFx0XFx0Y19ucGF0aHM7XFxuIFxcdGJvb2xcXHRcXHRcXHRjX3dpdGhfc3BvcnRfaWR4O1xcbitcXHQvKiBTZXQgKHVuZGVyIFJDVSkgd2hlbiByZHNfY29ubl9kZXN0cm95KCkgc3RhcnRzIG9uIHRoaXMgY29ubjtcXG4rXFx0ICogcmVhZCB0aHJvdWdoIHJkc19kZXN0cm95X3BlbmRpbmcoKS5cXG4rXFx0ICovXFxuK1xcdGJvb2xcXHRcXHRcXHRjX2Rlc3Ryb3lfaW5fcHJvZztcXG4gXFx0c3RydWN0IHJkc19jb25uZWN0aW9uXFx0KmNfcGFzc2l2ZTtcXG4gXFx0c3RydWN0IHJkc190cmFuc3BvcnRcXHQqY190cmFucztcXG4gXFxuQEAgLTU0NCw2ICs1NTMsMTIgQEAgc3RydWN0IHJkc190cmFuc3BvcnQge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHR0X3ByZWZlcl9sb29wYmFjazoxLFxcbiBcXHRcXHRcXHRcXHR0X21wX2NhcGFibGU6MTtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0dF90eXBlO1xcbitcXHQvKiBDb25uZWN0aW9ucyBvZiB0aGlzIHRyYW5zcG9ydCBub3QgeWV0IGZyZWVkOyBmcmVlaW5nIHJ1bnNcXG4rXFx0ICogYXN5bmNocm9ub3VzbHkgb25jZSByZHNfY29ubl9kZXN0cm95KCkgaGFzIHF1aWVzY2VkIGFcXG4rXFx0ICogY29ubmVjdGlvbiwgc28gdHJhbnNwb3J0IG1vZHVsZSB1bmxvYWQgaGFzIHRvIHdhaXQgZm9yIHRoaXNcXG4rXFx0ICogdG8gcmVhY2ggemVybyAocmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZCgpKS5cXG4rXFx0ICovXFxuK1xcdGF0b21pY190XFx0XFx0dF9jb25uX2NvdW50O1xcbiBcXG4gXFx0aW50ICgqbGFkZHJfY2hlY2spKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLFxcbiBcXHRcXHRcXHQgICBfX3UzMiBzY29wZV9pZCk7XFxuQEAgLTgxOSw2ICs4MzQsMTEgQEAgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR1OCB0b3MsIGdmcF90IGdmcCwgaW50IGRldl9pZik7XFxuIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoKTtcXG4gdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XFxuK3ZvaWQgcmRzX2Nvbm5fZ2V0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XFxuK3ZvaWQgcmRzX2Nvbm5fcHV0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XFxuKy8qIGhvdyBsb25nIHRyYW5zcG9ydCB1bmxvYWQgd2FpdHMgZm9yIGl0cyBjb25uZWN0aW9ucyB0byBiZSBmcmVlZCAqL1xcbisjZGVmaW5lIFJEU19DT05OX0ZSRUVfVElNRU9VVF9NU1xcdDEwMDAwXFxuK3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpO1xcbiB2b2lkIHJkc19jb25uX2Ryb3Aoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcXG4gdm9pZCByZHNfY29ubl9wYXRoX2Ryb3Aoc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoLCBib29sIGRlc3Ryb3kpO1xcbiB2b2lkIHJkc19jb25uX2Nvbm5lY3RfaWZfZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xcbkBAIC05OTQsNyArMTAxNCw4IEBAIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCByZHNfZGVzdHJveV9wZW5kaW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG4ge1xcbi1cXHRyZXR1cm4gIWNoZWNrX25ldChyZHNfY29ubl9uZXQoY29ubikpIHx8XFxuK1xcdHJldHVybiBSRUFEX09OQ0UoY29ubi1cXHUwMDNlY19kZXN0cm95X2luX3Byb2cpIHx8XFxuK1xcdCAgICAgICAhY2hlY2tfbmV0KHJkc19jb25uX25ldChjb25uKSkgfHxcXG4gXFx0ICAgICAgIChjb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2V0X3VubG9hZGluZyBcXHUwMDI2XFx1MDAyNiBjb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2V0X3VubG9hZGluZyhjb25uKSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmVjdi5jIGIvbmV0L3Jkcy9yZWN2LmNcXG5pbmRleCA2MjA0ZTU3N2E5MGFlLi5iMDMxYzBiNDNhZjgzIDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvcmVjdi5jXFxuKysrIGIvbmV0L3Jkcy9yZWN2LmNcXG5AQCAtNDYsNiArNDYsNyBAQCB2b2lkIHJkc19pbmNfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcXG4ge1xcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmluYy1cXHUwMDNlaV9yZWZjb3VudCwgMSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZpbmMtXFx1MDAzZWlfaXRlbSk7XFxuK1xcdHJkc19jb25uX2dldChjb25uKTtcXHQvKiBwdXQgaW4gcmRzX2luY19wdXQoKSAqL1xcbiBcXHRpbmMtXFx1MDAzZWlfY29ubiA9IGNvbm47XFxuIFxcdGluYy1cXHUwMDNlaV9jb25uX3BhdGggPSBOVUxMO1xcbiBcXHRpbmMtXFx1MDAzZWlfc2FkZHIgPSAqc2FkZHI7XFxuQEAgLTYxLDYgKzYyLDcgQEAgdm9pZCByZHNfaW5jX3BhdGhfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCxcXG4ge1xcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmluYy1cXHUwMDNlaV9yZWZjb3VudCwgMSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZpbmMtXFx1MDAzZWlfaXRlbSk7XFxuK1xcdHJkc19jb25uX2dldChjcC1cXHUwMDNlY3BfY29ubik7XFx0LyogcHV0IGluIHJkc19pbmNfcHV0KCkgKi9cXG4gXFx0aW5jLVxcdTAwM2VpX2Nvbm4gPSBjcC1cXHUwMDNlY3BfY29ubjtcXG4gXFx0aW5jLVxcdTAwM2VpX2Nvbm5fcGF0aCA9IGNwO1xcbiBcXHRpbmMtXFx1MDAzZWlfc2FkZHIgPSAqc2FkZHI7XFxuQEAgLTgxLDkgKzgzLDE5IEBAIHZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKVxcbiB7XFxuIFxcdHJkc2RlYnVnKFxcXCJwdXQgaW5jICVwIHJlZiAlZFxcXFxuXFxcIiwgaW5jLCByZWZjb3VudF9yZWFkKFxcdTAwMjZpbmMtXFx1MDAzZWlfcmVmY291bnQpKTtcXG4gXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2aW5jLVxcdTAwM2VpX3JlZmNvdW50KSkge1xcbitcXHRcXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBpbmMtXFx1MDAzZWlfY29ubjtcXG4rXFxuIFxcdFxcdEJVR19PTighbGlzdF9lbXB0eShcXHUwMDI2aW5jLVxcdTAwM2VpX2l0ZW0pKTtcXG4gXFxuLVxcdFxcdGluYy1cXHUwMDNlaV9jb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2VpbmNfZnJlZShpbmMpO1xcbitcXHRcXHQvKiBpbmNfZnJlZSgpIGNhbiBmcmVlIHRoZSBtZW1vcnkgQGluYyBsaXZlcyBpbiwgc28gdGhlXFxuK1xcdFxcdCAqIGNvbm5lY3Rpb24gcmVmZXJlbmNlIGhhcyB0byBiZSBkcm9wcGVkIHRocm91Z2ggdGhlXFxuK1xcdFxcdCAqIGNvcHkgdGFrZW4gYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2VpbmNfZnJlZShpbmMpO1xcbitcXHRcXHQvKiBnZXQgaW4gcmRzX2luY19pbml0KCksIHJkc19pbmNfcGF0aF9pbml0KCkgb3JcXG4rXFx0XFx0ICogcmRzX3JlY3ZfaW5jb21pbmcoKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmRzX2Nvbm5fcHV0KGNvbm4pO1xcbiBcXHR9XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocmRzX2luY19wdXQpO1xcbkBAIC0zMjUsNiArMzM3LDEzIEBAIHZvaWQgcmRzX3JlY3ZfaW5jb21pbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLFxcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7XFxuIFxcbitcXHQvKiBldmVyeSBjYWxsZXIgaW5pdGlhbGl6ZWQgQGluYyB3aXRoIHJkc19pbmNfaW5pdCgpIG9yXFxuK1xcdCAqIHJkc19pbmNfcGF0aF9pbml0KCkgZmlyc3QsIHNvIGlfY29ubiBhbHJlYWR5IGhvbGRzIGEgcmVmZXJlbmNlLlxcbitcXHQgKiBUYWtlIHRoZSBuZXcgb25lIGJlZm9yZSBkcm9wcGluZyB0aGUgb2xkLCBzbyB0aGF0IHJlLXBvaW50aW5nIGFuXFxuK1xcdCAqIGluYyBhdCB0aGUgY29ubmVjdGlvbiBpdCBhbHJlYWR5IHJlZmVycyB0byBjYW5ub3QgZnJlZSBpdC5cXG4rXFx0ICovXFxuK1xcdHJkc19jb25uX2dldChjb25uKTtcXG4rXFx0cmRzX2Nvbm5fcHV0KGluYy1cXHUwMDNlaV9jb25uKTtcXG4gXFx0aW5jLVxcdTAwM2VpX2Nvbm4gPSBjb25uO1xcbiBcXHRpbmMtXFx1MDAzZWlfcnhfamlmZmllcyA9IGppZmZpZXM7XFxuIFxcdGlmIChjb25uLVxcdTAwM2VjX3RyYW5zLVxcdTAwM2V0X21wX2NhcGFibGUpXFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcXG5pbmRleCAxYWZhOTgxZTVjMDZkLi4wNDVlYjNjM2Y5NzcyIDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvc2VuZC5jXFxuKysrIGIvbmV0L3Jkcy9zZW5kLmNcXG5AQCAtMjkwLDYgKzI5MCw3IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRybS1cXHUwMDNlZGF0YS5vcF9hY3RpdmUgPSAxO1xcbiBcXHRcXHRcXHRybS1cXHUwMDNlbV9pbmMuaV9jb25uX3BhdGggPSBjcDtcXG4rXFx0XFx0XFx0cmRzX2Nvbm5fZ2V0KGNwLVxcdTAwM2VjcF9jb25uKTtcXHQvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi9cXG4gXFx0XFx0XFx0cm0tXFx1MDAzZW1faW5jLmlfY29ubiA9IGNwLVxcdTAwM2VjcF9jb25uO1xcbiBcXG4gXFx0XFx0XFx0Y3AtXFx1MDAzZWNwX3htaXRfcm0gPSBybTtcXG5AQCAtOTQ3LDYgKzk0OCw3IEBAIHN0YXRpYyBpbnQgcmRzX3NlbmRfcXVldWVfcm0oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRcXHQvKiBUaGUgY29kZSBvcmRlcmluZyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IHdlJ3JlXFxuIFxcdFxcdCAgIHRyeWluZyB0byBtaW5pbWl6ZSB0aGUgdGltZSB3ZSBob2xkIGNfbG9jayAqL1xcbiBcXHRcXHRyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoXFx1MDAyNnJtLVxcdTAwM2VtX2luYy5pX2hkciwgc3BvcnQsIGRwb3J0LCAwKTtcXG4rXFx0XFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xcdC8qIHB1dCBpbiByZHNfbWVzc2FnZV9wdXQoKSAqL1xcbiBcXHRcXHRybS1cXHUwMDNlbV9pbmMuaV9jb25uID0gY29ubjtcXG4gXFx0XFx0cm0tXFx1MDAzZW1faW5jLmlfY29ubl9wYXRoID0gY3A7XFxuIFxcdFxcdHJkc19tZXNzYWdlX2FkZHJlZihybSk7XFxuQEAgLTExNTksMTMgKzExNjEsMTQgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxcbiBcXHRERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9pbiAqLCB1c2luLCBtc2ctXFx1MDAzZW1zZ19uYW1lKTtcXG4gXFx0X19iZTE2IGRwb3J0O1xcbiBcXHRzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gTlVMTDtcXG4tXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uO1xcbitcXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBOVUxMO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFx0aW50IHF1ZXVlZCA9IDAsIGFsbG9jYXRlZF9tciA9IDA7XFxuIFxcdGludCBub25ibG9jayA9IG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUO1xcbiBcXHRsb25nIHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbm9uYmxvY2spO1xcbiBcXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3BhdGg7XFxuIFxcdHN0cnVjdCBpbjZfYWRkciBkYWRkcjtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0X191MzIgc2NvcGVfaWQgPSAwO1xcbiBcXHRzaXplX3QgcmRtYV9wYXlsb2FkX2xlbiA9IDA7XFxuIFxcdGJvb2wgemNvcHkgPSAoKG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX1pFUk9DT1BZKSBcXHUwMDI2XFx1MDAyNlxcbkBAIC0xMzQwLDExICsxMzQzLDI5IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcXG4gXFx0cm0tXFx1MDAzZW1fZGFkZHIgPSBkYWRkcjtcXG4gXFxuIFxcdC8qIHJkc19jb25uX2NyZWF0ZSBoYXMgYSBzcGlubG9jayB0aGF0IHJ1bnMgd2l0aCBJUlEgb2ZmLlxcbi1cXHQgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuICovXFxuLVxcdGlmIChycy1cXHUwMDNlcnNfY29ubiBcXHUwMDI2XFx1MDAyNiBpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNnJzLVxcdTAwM2Vyc19jb25uLVxcdTAwM2VjX2ZhZGRyLCBcXHUwMDI2ZGFkZHIpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBycy1cXHUwMDNlcnNfdG9zID09IHJzLVxcdTAwM2Vyc19jb25uLVxcdTAwM2VjX3Rvcykge1xcbi1cXHRcXHRjb25uID0gcnMtXFx1MDAzZXJzX2Nvbm47XFxuK1xcdCAqIENhY2hpbmcgdGhlIGNvbm4gaW4gdGhlIHNvY2tldCBoZWxwcyBhIGxvdC5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGNhY2hlZCByc19jb25uIGhvbGRzIGEgY29ubmVjdGlvbiByZWZlcmVuY2U7IHRha2Ugb25lIG9mXFxuK1xcdCAqIG91ciBvd24gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGlzIGNhbGwgKGRyb3BwZWQgb24gYm90aCBleGl0XFxuK1xcdCAqIHBhdGhzKSwgc28gdGhhdCBuZWl0aGVyIGEgY29uY3VycmVudCBzZW5kZXIgcmVwbGFjaW5nIHRoZVxcbitcXHQgKiBjYWNoZSBub3IgcmRzX2Nvbm5fZGVzdHJveSgpIGNhbiBmcmVlIHRoZSBjb25uZWN0aW9uIHVuZGVyXFxuK1xcdCAqIHVzLiAgQSBjYWNoZWQgY29ubmVjdGlvbiB3aG9zZSBkZXN0cnVjdGlvbiBoYXMgYmVndW4gaXMgbm90XFxuK1xcdCAqIHJldXNlZDogZHJvcHBpbmcgaXQgaGVyZSBsZXRzIHRoZSBuZXh0IHNlbmRtc2cgbG9vayB1cCBvclxcbitcXHQgKiBjcmVhdGUgYSBsaXZlIG9uZSBpbnN0ZWFkIG9mIHJldHVybmluZyAtRUFHQUlOIGZvcmV2ZXIuXFxuK1xcdCAqL1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cnMtXFx1MDAzZXJzX2xvY2ssIGZsYWdzKTtcXG4rXFx0Y29ubiA9IHJzLVxcdTAwM2Vyc19jb25uO1xcbitcXHRpZiAoY29ubiBcXHUwMDI2XFx1MDAyNiBpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmNvbm4tXFx1MDAzZWNfZmFkZHIsIFxcdTAwMjZkYWRkcikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJzLVxcdTAwM2Vyc190b3MgPT0gY29ubi1cXHUwMDNlY190b3MgXFx1MDAyNlxcdTAwMjYgIXJkc19kZXN0cm95X3BlbmRpbmcoY29ubikpIHtcXG4rXFx0XFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHRjb25uID0gTlVMTDtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZycy1cXHUwMDNlcnNfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0aWYgKCFjb25uKSB7XFxuK1xcdFxcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqb2xkO1xcbitcXG4gXFx0XFx0Y29ubiA9IHJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhzb2NrX25ldChzb2NrLVxcdTAwM2VzayksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZycy1cXHUwMDNlcnNfYm91bmRfYWRkciwgXFx1MDAyNmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRycy1cXHUwMDNlcnNfdHJhbnNwb3J0LCBycy1cXHUwMDNlcnNfdG9zLFxcbkBAIC0xMzUyLDkgKzEzNzMsMTcgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzY29wZV9pZCk7XFxuIFxcdFxcdGlmIChJU19FUlIoY29ubikpIHtcXG4gXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihjb25uKTtcXG4rXFx0XFx0XFx0Y29ubiA9IE5VTEw7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuK1xcdFxcdC8qIGhhbmQgdGhlIGNhY2hlIGl0cyBvd24gcmVmZXJlbmNlICovXFxuK1xcdFxcdHJkc19jb25uX2dldChjb25uKTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19sb2NrLCBmbGFncyk7XFxuK1xcdFxcdG9sZCA9IHJzLVxcdTAwM2Vyc19jb25uO1xcbiBcXHRcXHRycy1cXHUwMDNlcnNfY29ubiA9IGNvbm47XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnJzLVxcdTAwM2Vyc19sb2NrLCBmbGFncyk7XFxuK1xcdFxcdGlmIChvbGQpXFxuK1xcdFxcdFxcdHJkc19jb25uX3B1dChvbGQpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoY29ubi1cXHUwMDNlY190cmFucy1cXHUwMDNldF9tcF9jYXBhYmxlKSB7XFxuQEAgLTE0NjksNiArMTQ5OCw4IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcXG4gXFx0XFx0a2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7XFxuIFxcdGtmcmVlKHZjdC52ZWMpO1xcbiBcXG4rXFx0cmRzX2Nvbm5fcHV0KGNvbm4pO1xcbitcXG4gXFx0cmV0dXJuIHBheWxvYWRfbGVuO1xcbiBcXG4gb3V0OlxcbkBAIC0xNDc2LDYgKzE1MDcsOSBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXFxuIFxcdFxcdGtmcmVlKHZjdC52ZWNbaW5kXS5pb3YpO1xcbiBcXHRrZnJlZSh2Y3QudmVjKTtcXG4gXFxuK1xcdGlmIChjb25uKVxcbitcXHRcXHRyZHNfY29ubl9wdXQoY29ubik7XFxuK1xcbiBcXHQvKiBJZiB0aGUgdXNlciBpbmNsdWRlZCBhIFJETUFfTUFQIGNtc2csIHdlIGFsbG9jYXRlZCBhIE1SIG9uIHRoZSBmbHkuXFxuIFxcdCAqIElmIHRoZSBzZW5kbXNnIGdvZXMgdGhyb3VnaCwgd2Uga2VlcCB0aGUgTVIuIElmIGl0IGZhaWxzIHdpdGggRUFHQUlOXFxuIFxcdCAqIG9yIGluIGFueSBvdGhlciB3YXksIHdlIG5lZWQgdG8gZGVzdHJveSB0aGUgTVIgYWdhaW4gKi9cXG5AQCAtMTUyMiw2ICsxNTU2LDcgQEAgcmRzX3NlbmRfcHJvYmUoc3RydWN0IHJkc19jb25uX3BhdGggKmNwLCBfX2JlMTYgc3BvcnQsXFxuIFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnJtLVxcdTAwM2VtX2Nvbm5faXRlbSwgXFx1MDAyNmNwLVxcdTAwM2VjcF9zZW5kX3F1ZXVlKTtcXG4gXFx0c2V0X2JpdChSRFNfTVNHX09OX0NPTk4sIFxcdTAwMjZybS1cXHUwMDNlbV9mbGFncyk7XFxuIFxcdHJkc19tZXNzYWdlX2FkZHJlZihybSk7XFxuK1xcdHJkc19jb25uX2dldChjcC1cXHUwMDNlY3BfY29ubik7XFx0LyogcHV0IGluIHJkc19tZXNzYWdlX3B1dCgpICovXFxuIFxcdHJtLVxcdTAwM2VtX2luYy5pX2Nvbm4gPSBjcC1cXHUwMDNlY3BfY29ubjtcXG4gXFx0cm0tXFx1MDAzZW1faW5jLmlfY29ubl9wYXRoID0gY3A7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcC5jIGIvbmV0L3Jkcy90Y3AuY1xcbmluZGV4IDc3NGE3MWY4OGQzNzUuLjI2ODVlZTIxYTIyZDEgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy90Y3AuY1xcbisrKyBiL25ldC9yZHMvdGNwLmNcXG5AQCAtODA1LDYgKzgwNSw3IEBAIHN0YXRpYyB2b2lkIHJkc190Y3BfZXhpdCh2b2lkKVxcbiAjZW5kaWZcXG4gXFx0dW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKFxcdTAwMjZyZHNfdGNwX25ldF9vcHMpO1xcbiBcXHRyZHNfdGNwX2Rlc3Ryb3lfY29ubnMoKTtcXG4rXFx0cmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChcXHUwMDI2cmRzX3RjcF90cmFuc3BvcnQpO1xcbiBcXHRyZHNfdHJhbnNfdW5yZWdpc3RlcihcXHUwMDI2cmRzX3RjcF90cmFuc3BvcnQpO1xcbiBcXHRyZHNfdGNwX3JlY3ZfZXhpdCgpO1xcbiBcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX3RjcF9jb25uX3NsYWIpO1xcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcF9saXN0ZW4uYyBiL25ldC9yZHMvdGNwX2xpc3Rlbi5jXFxuaW5kZXggMTNmYTYwYzE5ODViYi4uMGQyY2VkODkyYThhZSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL3RjcF9saXN0ZW4uY1xcbisrKyBiL25ldC9yZHMvdGNwX2xpc3Rlbi5jXFxuQEAgLTE1Myw3ICsxNTMsNyBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxcbiB7XFxuIFxcdHN0cnVjdCBzb2NrZXQgKmxpc3Rlbl9zb2NrID0gcnRuLVxcdTAwM2VyZHNfdGNwX2xpc3Rlbl9zb2NrO1xcbiBcXHRzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jayA9IE5VTEw7XFxuLVxcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjtcXG4rXFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gTlVMTDtcXG4gXFx0aW50IHJldDtcXG4gXFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcXG4gXFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqcnNfdGNwID0gTlVMTDtcXG5AQCAtMjI5LDYgKzIyOSw3IEBAIGludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXFxuIFxcbiBcXHRpZiAoSVNfRVJSKGNvbm4pKSB7XFxuIFxcdFxcdHJldCA9IFBUUl9FUlIoY29ubik7XFxuK1xcdFxcdGNvbm4gPSBOVUxMO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXHQvKiBBbiBpbmNvbWluZyBTWU4gcmVxdWVzdCBjYW1lIGluLCBhbmQgVENQIGp1c3QgYWNjZXB0ZWQgaXQuXFxuQEAgLTM0Myw2ICszNDQsOCBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnJzX3RjcC1cXHUwMDNldF9jb25uX3BhdGhfbG9jayk7XFxuIFxcdGlmIChuZXdfc29jaylcXG4gXFx0XFx0c29ja19yZWxlYXNlKG5ld19zb2NrKTtcXG4rXFx0aWYgKGNvbm4pXFxuK1xcdFxcdHJkc19jb25uX3B1dChjb25uKTtcXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cnRuLVxcdTAwM2VyZHNfdGNwX2FjY2VwdF9sb2NrKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMzLjQ4MTIwMjEzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTgwMjAyMzM5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfVENQXCIsXG4gICAgXCJSRFNfUkRNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcmRzX2Nvbm5fY3JlYXRlXCIsXG4gICAgXCJyZHNfY29ubl9kZXN0cm95XCIsXG4gICAgXCJyZHNfY29ubl9kZXN0cm95X2ZpbmlcIixcbiAgICBcInJkc19jb25uX2dldFwiLFxuICAgIFwicmRzX2Nvbm5fcHV0XCIsXG4gICAgXCJyZHNfY29ubl9sb29rdXBcIixcbiAgICBcInJkc19zZW5kbXNnXCIsXG4gICAgXCJyZHNfcmVjdl9pbmNvbWluZ1wiLFxuICAgIFwicmRzX2luY19wdXRcIixcbiAgICBcInJkc19tZXNzYWdlX2ZyZWVcIixcbiAgICBcInJkc190Y3BfYWNjZXB0X29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmVmZXJlbmNlIGNvdW50aW5nIChrcmVmKSB0byBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKGNfcmVmY291bnQpIHRvIHByb3Blcmx5IG1hbmFnZSBjb25uZWN0aW9uIGxpZmV0aW1lcyBhbmQgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgcmFjZSBjb25kaXRpb25zLiBJdCByZWZhY3RvcnMgY29ubmVjdGlvbiB0ZWFyZG93biBpbnRvIHN5bmNocm9ub3VzIHF1aWVzY2UgKHJkc19jb25uX3BhdGhfcXVpZXNjZSwgcmRzX2Nvbm5fZGVzdHJveSkgYW5kIGFzeW5jaHJvbm91cyBkZXN0cnVjdGlvbiAocmRzX2Nvbm5fZGVzdHJveV9maW5pKSwgYW5kIHVwZGF0ZXMgcmVmZXJlbmNlIHRyYWNraW5nIGFjcm9zcyBzb2NrZXQgcmVsZWFzZSwgbWVzc2FnZSBxdWV1ZXMsIHJlY3Yvc2VuZCBwYXRocywgYW5kIHRyYW5zcG9ydHMgKFRDUCwgbG9vcCwgSUIpLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBsb2dpYywgc3luY2hyb25pemF0aW9uLCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaW4gbmV0L3JkcywgbWFraW5nIGl0IGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDAxNWUxODZlNTRlMzU5M2RmNmZmYTAwNzMxYWVhMDlhOTE4YWQyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTU6NTY6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuY1xuaW5kZXggZDVkZWZlOTE3MmUzNi4uMGVhYTViOTc2NTcyNCAxMDA2NDRcbi0tLSBhL25ldC9yZHMvYWZfcmRzLmNcbisrKyBiL25ldC9yZHMvYWZfcmRzLmNcbkBAIC04MCw2ICs4MCwxNCBAQCBzdGF0aWMgaW50IHJkc19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4gXHRyZHNfbm90aWZ5X3F1ZXVlX2dldChycywgTlVMTCk7XG4gXHRyZHNfbm90aWZ5X21zZ196Y29weV9wdXJnZShcdTAwMjZycy1cdTAwM2Vyc196Y29va2llX3F1ZXVlKTtcbiBcbitcdC8qIGRyb3AgdGhlIGNhY2hlZCBjb25uZWN0aW9uIHJlZmVyZW5jZTsgbm8gc2VuZG1zZyBjYW4gcmFjZVxuK1x0ICogd2l0aCB1cyBoZXJlLCB0aGUgc29ja2V0IGlzIGdvaW5nIGF3YXlcbitcdCAqL1xuK1x0aWYgKHJzLVx1MDAzZXJzX2Nvbm4pIHtcbitcdFx0cmRzX2Nvbm5fcHV0KHJzLVx1MDAzZXJzX2Nvbm4pO1xuK1x0XHRycy1cdTAwM2Vyc19jb25uID0gTlVMTDtcbitcdH1cbitcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZyZHNfc29ja19sb2NrKTtcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnMtXHUwMDNlcnNfaXRlbSk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZyZHNfc29ja19sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5pbmRleCBiNmM0YmViNTBlYWYwLi4yYzhjYTU0YTkxY2E4IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5AQCAtNDcsNyArNDcsOCBAQFxuIFxuIC8qIGNvbnZlcnRpbmcgdGhpcyB0byBSQ1UgaXMgYSBjaG9yZSBmb3IgYW5vdGhlciBkYXkuLiAqL1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX2Nvbm5fbG9jayk7XG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2Nvbm5fY291bnQ7XG4rLyogd29rZW4gd2hlbmV2ZXIgYSB0cmFuc3BvcnQncyB0X2Nvbm5fY291bnQgZHJvcHMgdG8gemVybyAqL1xuK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZHNfY29ubl9mcmVlZF93YWl0cSk7XG4gc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIHJkc19jb25uX2hhc2hbUkRTX0NPTk5FQ1RJT05fSEFTSF9FTlRSSUVTXTtcbiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19jb25uX3NsYWI7XG4gXG5AQCAtNzksNyArODAsMTAgQEAgc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpyZHNfY29ubl9idWNrZXQoY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYWRkcixcbiBcdFx0dmFyIHw9IFJEU19JTkZPX0NPTk5FQ1RJT05fRkxBR18jI3N1ZmZpeDtcdFxcXG4gfSB3aGlsZSAoMClcbiBcbi0vKiByY3UgcmVhZCBsb2NrIG11c3QgYmUgaGVsZCBvciB0aGUgY29ubmVjdGlvbiBzcGlubG9jayAqL1xuKy8qIHJjdSByZWFkIGxvY2sgbXVzdCBiZSBoZWxkIG9yIHRoZSBjb25uZWN0aW9uIHNwaW5sb2NrLlxuKyAqIE9uIHN1Y2Nlc3MgYSByZWZlcmVuY2UgaXMgdGFrZW4gb24gdGhlIHJldHVybmVkIGNvbm5lY3Rpb247IHRoZVxuKyAqIGNhbGxlciBtdXN0IGRyb3AgaXQgd2l0aCByZHNfY29ubl9wdXQoKS5cbisgKi9cbiBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCxcbiBcdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYWRkcixcbkBAIC05Niw2ICsxMDAsMTMgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0ICAgIGNvbm4tXHUwMDNlY190b3MgPT0gdG9zIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgbmV0ID09IHJkc19jb25uX25ldChjb25uKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGNvbm4tXHUwMDNlY19kZXZfaWYgPT0gZGV2X2lmKSB7XG4rXHRcdFx0LyogQW4gZW50cnkgd2hvc2UgcmVmY291bnQgYWxyZWFkeSBkcm9wcGVkIHRvXG4rXHRcdFx0ICogemVybyBoYXMgYmVlbiB1bmhhc2hlZCBhbmQgaXMgYWJvdXQgdG8gYmVcbitcdFx0XHQgKiBmcmVlZDsgYW4gUkNVIHRyYXZlcnNhbCBtYXkgc3RpbGwgY29tZVxuK1x0XHRcdCAqIGFjcm9zcyBpdC4gIFRyZWF0IGl0IGFzIGFic2VudC5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNmNvbm4tXHUwMDNlY19yZWZjb3VudCkpXG4rXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRyZXQgPSBjb25uO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMTk3LDcgKzIwOCwxNCBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdCAqIFdlIG5lZWQgYSBzZWNvbmQgY29ubmVjdGlvbiBvYmplY3QgaW50byB3aGljaCB3ZVxuIFx0XHQgKiBjYW4gc3RpY2sgdGhlIG90aGVyIFFQLiAqL1xuIFx0XHRwYXJlbnQgPSBjb25uO1xuK1x0XHQvKiBUaGUgY19wYXNzaXZlIHBvaW50ZXIgaG9sZHMgYSByZWZlcmVuY2Ugd2hpY2ggaXMgb25seVxuK1x0XHQgKiBkcm9wcGVkIG9uZSBzeW5jaHJvbml6ZV9yY3UoKSBhZnRlciB0aGUgcG9pbnRlciBpc1xuK1x0XHQgKiBjbGVhcmVkLCBzbyB3aXRoaW4gdGhpcyBSQ1Ugc2VjdGlvbiBhIGZldGNoZWQgcG9pbnRlclxuK1x0XHQgKiBpcyBhbHdheXMgc2FmZSB0byB0YWtlIGEgcmVmZXJlbmNlIG9uLlxuK1x0XHQgKi9cbiBcdFx0Y29ubiA9IHBhcmVudC1cdTAwM2VjX3Bhc3NpdmU7XG4rXHRcdGlmIChjb25uKVxuK1x0XHRcdHJkc19jb25uX2dldChjb25uKTtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aWYgKGNvbm4pXG5AQCAtMjE1LDYgKzIzMyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4rXHRrcmVmX2luaXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50KTtcbiBcdElOSVRfSExJU1RfTk9ERShcdTAwMjZjb25uLVx1MDAzZWNfaGFzaF9ub2RlKTtcbiBcdGNvbm4tXHUwMDNlY19sYWRkciA9ICpsYWRkcjtcbiBcdGNvbm4tXHUwMDNlY19pc3Y2ID0gIWlwdjZfYWRkcl92NG1hcHBlZChsYWRkcik7XG5AQCAtMjgyLDggKzMwMSw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgaXNfb3V0Z29pbmcpO1xuIFx0XHRjb25uLVx1MDAzZWNfcGF0aFtpXS5jcF9pbmRleCA9IGk7XG4gXHRcdGNvbm4tXHUwMDNlY19wYXRoW2ldLmNwX3dxID1cbi1cdFx0XHRhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcImtyZHNfY3Bfd3EjJWx1LyVkXCIsIDAsXG4tXHRcdFx0XHRcdFx0cmRzX2Nvbm5fY291bnQsIGkpO1xuK1x0XHRcdGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFwia3Jkc19jcF93cSMlZC8lZFwiLCAwLFxuK1x0XHRcdFx0XHRcdGF0b21pY19yZWFkKFx1MDAyNnRyYW5zLVx1MDAzZXRfY29ubl9jb3VudCksXG4rXHRcdFx0XHRcdFx0aSk7XG4gXHRcdGlmICghY29ubi1cdTAwM2VjX3BhdGhbaV0uY3Bfd3EpXG4gXHRcdFx0Y29ubi1cdTAwM2VjX3BhdGhbaV0uY3Bfd3EgPSByZHNfd3E7XG4gXHR9XG5AQCAtMzE1LDE1ICszMzUsMzUgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqX19yZHNfY29ubl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuIFx0aWYgKHBhcmVudCkge1xuIFx0XHQvKiBDcmVhdGluZyBwYXNzaXZlIGNvbm4gKi9cbi1cdFx0aWYgKHBhcmVudC1cdTAwM2VjX3Bhc3NpdmUpIHtcbitcdFx0aWYgKFJFQURfT05DRShwYXJlbnQtXHUwMDNlY19kZXN0cm95X2luX3Byb2cpKSB7XG4rXHRcdFx0LyogVGhlIHBhcmVudCdzIGRlc3Ryb3kgaGFzIGJlZ3VuIChpdCBzZXRzIHRoZVxuK1x0XHRcdCAqIGZsYWcgYW5kIHNuYXRjaGVzIGNfcGFzc2l2ZSB1bmRlciB0aGlzXG4rXHRcdFx0ICogbG9jayk7IGRvIG5vdCBpbnN0YWxsIGEgbmV3IHBhc3NpdmUgY29ublxuK1x0XHRcdCAqIHRoYXQgbm90aGluZyB3b3VsZCBldmVyIGRlc3Ryb3kuXG4rXHRcdFx0ICovXG4rXHRcdFx0dHJhbnMtXHUwMDNlY29ubl9mcmVlKGNvbm4tXHUwMDNlY19wYXRoWzBdLmNwX3RyYW5zcG9ydF9kYXRhKTtcbitcdFx0XHRmcmVlX2NwID0gY29ubi1cdTAwM2VjX3BhdGg7XG4rXHRcdFx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xuK1x0XHRcdGNvbm4gPSBFUlJfUFRSKC1FTkVURE9XTik7XG4rXHRcdH0gZWxzZSBpZiAocGFyZW50LVx1MDAzZWNfcGFzc2l2ZSkge1xuK1x0XHRcdHJkc19jb25uX2dldChwYXJlbnQtXHUwMDNlY19wYXNzaXZlKTtcbiBcdFx0XHR0cmFucy1cdTAwM2Vjb25uX2ZyZWUoY29ubi1cdTAwM2VjX3BhdGhbMF0uY3BfdHJhbnNwb3J0X2RhdGEpO1xuIFx0XHRcdGZyZWVfY3AgPSBjb25uLVx1MDAzZWNfcGF0aDtcbiBcdFx0XHRrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7XG4gXHRcdFx0Y29ubiA9IHBhcmVudC1cdTAwM2VjX3Bhc3NpdmU7XG4gXHRcdH0gZWxzZSB7XG4rXHRcdFx0LyogVGhlIGluaXRpYWwgcmVmZXJlbmNlIGJlbG9uZ3MgdG8gd2hvZXZlclxuK1x0XHRcdCAqIGRlc3Ryb3lzIHRoZSBjb25uICh0aGUgdHJhbnNwb3J0J3MgY29ublxuK1x0XHRcdCAqIGxpc3RzLCBhcyBmb3IgYW55IG90aGVyIGNvbm4pLiAgVGFrZSBvbmVcbitcdFx0XHQgKiBmb3IgdGhlIGNfcGFzc2l2ZSBwb2ludGVyIC0gZHJvcHBlZCB3aGVuXG4rXHRcdFx0ICogdGhlIHBhcmVudCBpcyBkZXN0cm95ZWQgLSBhbmQgb25lIGZvciBvdXJcbitcdFx0XHQgKiBjYWxsZXIuXG4rXHRcdFx0ICovXG4rXHRcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1x0LyogY19wYXNzaXZlICovXG4rXHRcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1x0LyogY2FsbGVyICovXG4gXHRcdFx0cGFyZW50LVx1MDAzZWNfcGFzc2l2ZSA9IGNvbm47XG4gXHRcdFx0cmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7XG4tXHRcdFx0cmRzX2Nvbm5fY291bnQrKztcbitcdFx0XHRhdG9taWNfaW5jKFx1MDAyNmNvbm4tXHUwMDNlY190cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBDcmVhdGluZyBub3JtYWwgY29ubiAqL1xuQEAgLTM1MCwxNSArMzkwLDIxIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRjb25uLVx1MDAzZWNfbXlfZ2VuX251bSA9IHJkc19nZW5fbnVtO1xuIFx0XHRcdGNvbm4tXHUwMDNlY19wZWVyX2dlbl9udW0gPSAwO1xuK1x0XHRcdC8qIHRoZSBpbml0aWFsIHJlZmVyZW5jZSBiZWxvbmdzIHRvIHdob2V2ZXJcbitcdFx0XHQgKiBkZXN0cm95cyB0aGUgY29ubjsgdGFrZSBvbmUgZm9yIG91ciBjYWxsZXJcbitcdFx0XHQgKi9cbitcdFx0XHRyZHNfY29ubl9nZXQoY29ubik7XG4gXHRcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNmNvbm4tXHUwMDNlY19oYXNoX25vZGUsIGhlYWQpO1xuIFx0XHRcdHJkc19jb25nX2FkZF9jb25uKGNvbm4pO1xuLVx0XHRcdHJkc19jb25uX2NvdW50Kys7XG4rXHRcdFx0YXRvbWljX2luYyhcdTAwMjZjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNldF9jb25uX2NvdW50KTtcbiBcdFx0fVxuIFx0fVxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyZHNfY29ubl9sb2NrLCBmbGFncyk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBvdXQ6XG4rXHRpZiAocGFyZW50KVxuK1x0XHRyZHNfY29ubl9wdXQocGFyZW50KTtcbiBcdGlmIChmcmVlX2NwKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYXRoczsgaSsrKVxuIFx0XHRcdGlmIChmcmVlX2NwW2ldLmNwX3dxICE9IHJkc193cSlcbkBAIC01MTUsMTAgKzU2MSwxMiBAQCB2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fc2xvdHNfYXZhaWxhYmxlKGNvbm4sIGZhbHNlKTtcbiB9XG4gXG4tLyogZGVzdHJveSBhIHNpbmdsZSByZHNfY29ubl9wYXRoLiByZHNfY29ubl9kZXN0cm95KCkgaXRlcmF0ZXMgb3ZlclxuLSAqIGFsbCBwYXRocyB1c2luZyByZHNfY29ubl9wYXRoX2Rlc3Ryb3koKVxuKy8qIHF1aWVzY2UgYSBzaW5nbGUgcmRzX2Nvbm5fcGF0aDogc2h1dCBpdCBkb3duIGFuZCB0ZWFyIGRvd24gYW55XG4rICogcXVldWVkIG1lc3NhZ2VzLiAgcmRzX2Nvbm5fZGVzdHJveSgpIGl0ZXJhdGVzIG92ZXIgYWxsIHBhdGhzIHVzaW5nXG4rICogcmRzX2Nvbm5fcGF0aF9xdWllc2NlKCk7IHRoZSB0cmFuc3BvcnQgc3RhdGUgYW5kIHRoZSB3b3JrcXVldWUgYXJlXG4rICogZnJlZWQgbGF0ZXIsIGZyb20gcmRzX2Nvbm5fcGF0aF9mcmVlKCkuXG4gICovXG4tc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbitzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3F1aWVzY2Uoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIHtcbiBcdHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICpydG1wO1xuIFxuQEAgLTU0Nyw2ICs1OTUsMTYgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFdBUk5fT04oZGVsYXllZF93b3JrX3BlbmRpbmcoXHUwMDI2Y3AtXHUwMDNlY3BfcmVjdl93KSk7XG4gXHRXQVJOX09OKGRlbGF5ZWRfd29ya19wZW5kaW5nKFx1MDAyNmNwLVx1MDAzZWNwX2Nvbm5fdykpO1xuIFx0V0FSTl9PTih3b3JrX3BlbmRpbmcoXHUwMDI2Y3AtXHUwMDNlY3BfZG93bl93KSk7XG4rfVxuK1xuKy8qIGZyZWUgYSBxdWllc2NlZCByZHNfY29ubl9wYXRoJ3MgdHJhbnNwb3J0IHN0YXRlIGFuZCB3b3JrcXVldWU7IHJ1bnNcbisgKiBmcm9tIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgdGhlIGxhc3QgY29ubmVjdGlvbiByZWZlcmVuY2UgaXNcbisgKiBkcm9wcGVkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZnJlZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4re1xuK1x0aWYgKCFjcC1cdTAwM2VjcF90cmFuc3BvcnRfZGF0YSlcbitcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKGNwLVx1MDAzZWNwX3dxICE9IHJkc193cSkge1xuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShjcC1cdTAwM2VjcF93cSk7XG5AQCAtNTU2LDE3ICs2MTQsNzQgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdGNwLVx1MDAzZWNwX2Nvbm4tXHUwMDNlY190cmFucy1cdTAwM2Vjb25uX2ZyZWUoY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGEpO1xuIH1cbiBcbisvKiBGcmVlIGEgY29ubmVjdGlvbi4gIFRoaXMgcnVucyBmcm9tIHJkc19jb25uX3B1dCgpIHdoZW4gdGhlIGxhc3RcbisgKiByZWZlcmVuY2UgaXMgZHJvcHBlZCwgYWZ0ZXIgcmRzX2Nvbm5fZGVzdHJveSgpIGhhcyBxdWllc2NlZCB0aGVcbisgKiBjb25uZWN0aW9uIGFuZCBkcm9wcGVkIHRoZSBpbml0aWFsIHJlZmVyZW5jZS5cbisgKi9cbitzdGF0aWMgdm9pZCByZHNfY29ubl9kZXN0cm95X2Zpbmkoc3RydWN0IGtyZWYgKmtyZWYpXG4re1xuK1x0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfY29ubmVjdGlvbixcbitcdFx0XHRcdFx0XHQgICBjX3JlZmNvdW50KTtcbitcdGludCBucGF0aHMgPSAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7XG4rXHRzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMgPSBjb25uLVx1MDAzZWNfdHJhbnM7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYXRoczsgaSsrKVxuK1x0XHRyZHNfY29ubl9wYXRoX2ZyZWUoXHUwMDI2Y29ubi1cdTAwM2VjX3BhdGhbaV0pO1xuK1xuK1x0a2ZyZWUoY29ubi1cdTAwM2VjX3BhdGgpO1xuK1x0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xuK1xuK1x0Lyogb25seSBhZnRlciBldmVyeXRoaW5nIHRoZSB0cmFuc3BvcnQgbW9kdWxlIG93bnMgaGFzIGJlZW5cbitcdCAqIGZyZWVkIGFib3ZlIG1heSBpdHMgdW5sb2FkIHByb2NlZWRcbitcdCAqL1xuK1x0aWYgKCFhdG9taWNfZGVjX3JldHVybihcdTAwMjZ0cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpKVxuK1x0XHR3YWtlX3VwX2FsbChcdTAwMjZyZHNfY29ubl9mcmVlZF93YWl0cSk7XG4rfVxuK1xuKy8qIFdhaXQgZm9yIGFsbCBvZiBAdHJhbnMncyBjb25uZWN0aW9ucyB0byBiZSBmcmVlZDsgdGhlIGZyZWUgcnVuc1xuKyAqIGFzeW5jaHJvbm91c2x5IG9uY2UgcmRzX2Nvbm5fZGVzdHJveSgpIGhhcyBxdWllc2NlZCBhIGNvbm5lY3Rpb24uXG4rICogQ2FsbGVkIG9uIHRyYW5zcG9ydCBtb2R1bGUgdW5sb2FkLCBhZnRlciB0aGUgdHJhbnNwb3J0IGRlc3Ryb3llZFxuKyAqIGFsbCBvZiBpdHMgY29ubmVjdGlvbnM6IGFueXRoaW5nIHN0aWxsIGhvbGRpbmcgYSBjb25uZWN0aW9uXG4rICogcmVmZXJlbmNlIGF0IHRoYXQgcG9pbnQgaXMgYSBzaG9ydC1saXZlZCBsb29rdXAtc3R5bGUgaG9sZGVyLCBzb1xuKyAqIGEgYm91bmRlZCB3YWl0IHN1ZmZpY2VzIC0gYnV0IHdhcm4gaWYgaXQgZXhwaXJlcywgc2luY2UgdGhlIGZyZWVzXG4rICogdGhhdCBmb2xsb3cgdGhlIHVubG9hZCB3aWxsIHRoZW4gdG91Y2ggZnJlZWQgbW9kdWxlIHRleHQuXG4rICovXG4rdm9pZCByZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucylcbit7XG4rXHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChyZHNfY29ubl9mcmVlZF93YWl0cSxcbitcdFx0XHRcdCFhdG9taWNfcmVhZChcdTAwMjZ0cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpLFxuK1x0XHRcdFx0bXNlY3NfdG9famlmZmllcyhSRFNfQ09OTl9GUkVFX1RJTUVPVVRfTVMpKSlcbitcdFx0V0FSTigxLCBcIlJEUy8lczogJWQgY29ubmVjdGlvbihzKSBub3QgZnJlZWRcXG5cIixcbitcdFx0ICAgICB0cmFucy1cdTAwM2V0X25hbWUsIGF0b21pY19yZWFkKFx1MDAyNnRyYW5zLVx1MDAzZXRfY29ubl9jb3VudCkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKTtcbitcbit2b2lkIHJkc19jb25uX2dldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4re1xuK1x0a3JlZl9nZXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50KTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZ2V0KTtcbitcbit2b2lkIHJkc19jb25uX3B1dChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4re1xuK1x0a3JlZl9wdXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50LCByZHNfY29ubl9kZXN0cm95X2ZpbmkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9wdXQpO1xuK1xuIC8qXG4gICogU3RvcCBhbmQgZnJlZSBhIGNvbm5lY3Rpb24uXG4gICpcbi0gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gdmVyeSBsaW1pdGVkIGNpcmN1bXN0YW5jZXMuICBJdCBhc3N1bWVzIHRoYXQgb25jZVxuLSAqIHRoZSBjb25uIGhhcyBiZWVuIHNodXRkb3duIHRoYXQgbm8gb25lIGVsc2UgaXMgcmVmZXJlbmNpbmcgdGhlIGNvbm5lY3Rpb24uXG4tICogV2UgY2FuIG9ubHkgZW5zdXJlIHRoaXMgaW4gdGhlIHJtbW9kIHBhdGggaW4gdGhlIGN1cnJlbnQgY29kZS5cbisgKiBRdWllc2NlcyB0aGUgY29ubmVjdGlvbiBzeW5jaHJvbm91c2x5ICh3b3JrZXJzIGNhbmNlbGxlZCwgdHJhbnNwb3J0XG4rICogY29ubmVjdGlvbnMgc2h1dCBkb3duLCBxdWV1ZWQgbWVzc2FnZXMgZHJvcHBlZCkgYW5kIGRyb3BzIHRoZVxuKyAqIGluaXRpYWwgcmVmZXJlbmNlLiAgVGhlIG1lbW9yeSAtIGluY2x1ZGluZyB0aGUgdHJhbnNwb3J0J3NcbisgKiBwZXItY29ubmVjdGlvbiBzdGF0ZSBhbmQgdGhlIHBhdGggd29ya3F1ZXVlcyAtIGlzIGZyZWVkIG9uY2UgdGhlXG4rICogbGFzdCByZHNfY29ubl9wdXQoKSBydW5zLCB3aGljaCBtYXkgYmUgYWZ0ZXIgdGhpcyByZXR1cm5zLlxuICAqL1xuIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBpO1xuK1x0c3RydWN0IHJkc19jb25uZWN0aW9uICpwYXNzaXZlO1xuIFx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwO1xuIFx0aW50IG5wYXRocyA9IChjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNldF9tcF9jYXBhYmxlID8gUkRTX01QQVRIX1dPUktFUlMgOiAxKTtcbiBcbkBAIC01NzQsMTYgKzY4OSw0NiBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIFx0XHQgXCIlcEk0XFxuXCIsIGNvbm4sIFx1MDAyNmNvbm4tXHUwMDNlY19sYWRkcixcbiBcdFx0IFx1MDAyNmNvbm4tXHUwMDNlY19mYWRkcik7XG4gXG4tXHQvKiBFbnN1cmUgY29ubiB3aWxsIG5vdCBiZSBzY2hlZHVsZWQgZm9yIHJlY29ubmVjdCAqL1xuK1x0LyogTWFrZSByZHNfZGVzdHJveV9wZW5kaW5nKCkgdHJ1ZSBmb3IgdGhpcyBjb25uLiAgVG9nZXRoZXIgd2l0aFxuK1x0ICogdGhlIHN5bmNocm9uaXplX3JjdSgpIGJlbG93IHRoaXMgc3RvcHMgdGhlIHdvcmstcmVxdWV1ZWluZ1xuK1x0ICogc2l0ZXMgKHdoaWNoIGFsbCB0ZXN0IHJkc19kZXN0cm95X3BlbmRpbmcoKSB1bmRlclxuK1x0ICogcmN1X3JlYWRfbG9jaygpKSBmcm9tIHF1ZXVlaW5nIG5ldyB3b3JrIG9uIHRoZSBwYXRoXG4rXHQgKiB3b3JrcXVldWVzIG9uY2Ugd2Ugc3RhcnQgY2FuY2VsbGluZyBhbmQgZGVzdHJveWluZyB0aGVtLlxuK1x0ICpcbitcdCAqIE5vdyB0aGF0IHRoZSB0cmFuc3BvcnQgc3RhdGUgc3RheXMgZGlzY292ZXJhYmxlIChlLmcuIG9uIHRoZVxuK1x0ICogdHJhbnNwb3J0cycgY29ubmVjdGlvbiBsaXN0cykgdW50aWwgdGhlIGZpbmFsIHJkc19jb25uX3B1dCgpLFxuK1x0ICogYSBjb25uIGNhbiBiZSBoYW5kZWQgdG8gcmRzX2Nvbm5fZGVzdHJveSgpIG1vcmUgdGhhbiBvbmNlIC1cbitcdCAqIGUuZy4gZHJvcHBlZCBmb3IgYSBwcm90b2NvbCB2ZXJzaW9uIG1pc21hdGNoIGFuZCB0aGVuIGZvdW5kXG4rXHQgKiBhZ2FpbiBhdCBtb2R1bGUgdW5sb2FkLiAgT25seSB0aGUgZmlyc3QgY2FsbGVyIHByb2NlZWRzOyB0aGVcbitcdCAqIHVuaGFzaCBhbHNvIGhhcHBlbnMgdW5kZXIgcmRzX2Nvbm5fbG9jaywgc28gYSBsb29rZWQtdXAgY29ublxuK1x0ICogY2FuIG5ldmVyIGJlIHF1aWVzY2VkIHR3aWNlLlxuK1x0ICovXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnJkc19jb25uX2xvY2spO1xuK1x0aWYgKGNvbm4tXHUwMDNlY19kZXN0cm95X2luX3Byb2cpIHtcbitcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJkc19jb25uX2xvY2spO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRXUklURV9PTkNFKGNvbm4tXHUwMDNlY19kZXN0cm95X2luX3Byb2csIHRydWUpO1xuK1xuK1x0LyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi9cbiBcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZjb25uLVx1MDAzZWNfaGFzaF9ub2RlKTtcbitcbitcdC8qIFNuYXRjaCBjX3Bhc3NpdmUgd2hpbGUgaG9sZGluZyB0aGUgbG9jazpcbitcdCAqIF9fcmRzX2Nvbm5fY3JlYXRlKCkgZGVyZWZlcmVuY2VzIGl0IHVuZGVyIHJjdV9yZWFkX2xvY2soKVxuK1x0ICogKGFuZCByZWZ1c2VzIHRvIGluc3RhbGwgYSBuZXcgb25lIG9uY2UgY19kZXN0cm95X2luX3Byb2cgaXNcbitcdCAqIHNldCwgd2hpY2ggaXQgY2hlY2tzIHVuZGVyIHRoaXMgbG9jaykuICBBZnRlciB0aGVcbitcdCAqIHN5bmNocm9uaXplX3JjdSgpIGJlbG93IG5vIG9uZSBjYW4gcGljayB0aGUgcG9pbnRlciB1cCBhbnlcbitcdCAqIG1vcmUgYW5kIGl0cyByZWZlcmVuY2UgY2FuIGJlIGRyb3BwZWQuXG4rXHQgKi9cbitcdHBhc3NpdmUgPSBjb25uLVx1MDAzZWNfcGFzc2l2ZTtcbitcdGNvbm4tXHUwMDNlY19wYXNzaXZlID0gTlVMTDtcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyZHNfY29ubl9sb2NrKTtcbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0Lyogc2h1dCB0aGUgY29ubmVjdGlvbiBkb3duICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGF0aHM7IGkrKykge1xuIFx0XHRjcCA9IFx1MDAyNmNvbm4tXHUwMDNlY19wYXRoW2ldO1xuLVx0XHRyZHNfY29ubl9wYXRoX2Rlc3Ryb3koY3ApO1xuK1x0XHRyZHNfY29ubl9wYXRoX3F1aWVzY2UoY3ApO1xuIFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2Y3AtXHUwMDNlY3BfcmV0cmFucykpO1xuIFx0fVxuIFxuQEAgLTU5NCwxMiArNzM5LDE0IEBAIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4gXHQgKi9cbiBcdHJkc19jb25nX3JlbW92ZV9jb25uKGNvbm4pO1xuIFxuLVx0a2ZyZWUoY29ubi1cdTAwM2VjX3BhdGgpO1xuLVx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xuK1x0LyogZHJvcCB0aGUgcmVmZXJlbmNlIG91ciBjX3Bhc3NpdmUgcG9pbnRlciBoZWxkLCBpZiBhbnkgKi9cbitcdGlmIChwYXNzaXZlKVxuK1x0XHRyZHNfY29ubl9wdXQocGFzc2l2ZSk7XG4gXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyZHNfY29ubl9sb2NrLCBmbGFncyk7XG4tXHRyZHNfY29ubl9jb3VudC0tO1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyZHNfY29ubl9sb2NrLCBmbGFncyk7XG4rXHQvKiBkcm9wIHRoZSBpbml0aWFsIHJlZmVyZW5jZTsgdGhlIGNvbm5lY3Rpb24gaXMgZnJlZWQgZnJvbVxuK1x0ICogcmRzX2Nvbm5fZGVzdHJveV9maW5pKCkgb25jZSBldmVyeSBob2xkZXIgaGFzIGRyb3BwZWQgdGhlaXJzXG4rXHQgKi9cbitcdHJkc19jb25uX3B1dChjb25uKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZGVzdHJveSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jXG5pbmRleCA3ODZmMzkxNjliYzE0Li43NTU2OTA1ODMzMjU5IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9pYi5jXG4rKysgYi9uZXQvcmRzL2liLmNcbkBAIC01MjUsMTAgKzUyNSw3IEBAIHN0YXRpYyB2b2lkIHJkc19pYl9zZXRfdW5sb2FkaW5nKHZvaWQpXG4gXG4gc3RhdGljIGJvb2wgcmRzX2liX2lzX3VubG9hZGluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwID0gXHUwMDI2Y29ubi1cdTAwM2VjX3BhdGhbMF07XG4tXG4tXHRyZXR1cm4gKHRlc3RfYml0KFJEU19ERVNUUk9ZX1BFTkRJTkcsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSB8fFxuLVx0XHRhdG9taWNfcmVhZChcdTAwMjZyZHNfaWJfdW5sb2FkaW5nKSAhPSAwKTtcbitcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZyZHNfaWJfdW5sb2FkaW5nKSAhPSAwO1xuIH1cbiBcbiB2b2lkIHJkc19pYl9leGl0KHZvaWQpXG5AQCAtNTQxLDYgKzUzOCwxNSBAQCB2b2lkIHJkc19pYl9leGl0KHZvaWQpXG4gI2VuZGlmXG4gXHRyZHNfaWJfdW5yZWdpc3Rlcl9jbGllbnQoKTtcbiBcdHJkc19pYl9kZXN0cm95X25vZGV2X2Nvbm5zKCk7XG4rXHRyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKFx1MDAyNnJkc19pYl90cmFuc3BvcnQpO1xuK1xuK1x0LyogVGVhcmluZyBkb3duIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWF5IGhhdmUgZHJvcHBlZCB0aGUgZmluYWxcbitcdCAqIHJlZmVyZW5jZSBvbiBhIGRldmljZSwgZGVmZXJyaW5nIHJkc19pYl9kZXZfZnJlZSgpIHRvIHJkc193cS5cbitcdCAqIERyYWluIGl0IGJlZm9yZSB0aGUgbW9kdWxlIGdvZXMgYXdheTsgaXQgcXVldWVzIG5vdGhpbmdcbitcdCAqIGZ1cnRoZXIgb24gcmRzX3dxLlxuK1x0ICovXG4rXHRmbHVzaF93b3JrcXVldWUocmRzX3dxKTtcbitcbiBcdHJkc19pYl9zeXNjdGxfZXhpdCgpO1xuIFx0cmRzX2liX3JlY3ZfZXhpdCgpO1xuIFx0cmRzX3RyYW5zX3VucmVnaXN0ZXIoXHUwMDI2cmRzX2liX3RyYW5zcG9ydCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9jbS5jIGIvbmV0L3Jkcy9pYl9jbS5jXG5pbmRleCA0ZmViMGVkYzM2MGM4Li4yNGU1MzhjMjUzYTdhIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9pYl9jbS5jXG4rKysgYi9uZXQvcmRzL2liX2NtLmNcbkBAIC05MjQsOCArOTI0LDE0IEBAIGludCByZHNfaWJfY21faGFuZGxlX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLFxuIFx0XHRyZHNfaWJfY29ubl9lcnJvcihjb25uLCBcInJkbWFfYWNjZXB0IGZhaWxlZFxcblwiKTtcbiBcbiBvdXQ6XG4tXHRpZiAoY29ubilcbitcdGlmIChjb25uKSB7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZjb25uLVx1MDAzZWNfY21fbG9jayk7XG4rXHRcdC8qIFRoZSBjb25uIHN0YXlzIHJlYWNoYWJsZSB0aHJvdWdoIGNtX2lkLVx1MDAzZWNvbnRleHRcbitcdFx0ICogd2l0aG91dCBhIHJlZmVyZW5jZSBvZiBpdHMgb3duOiBjb25uZWN0aW9uIGRlc3Ryb3lcbitcdFx0ICogc2h1dHMgdGhlIGNtX2lkIGRvd24gYmVmb3JlIHRoZSBjb25uIGlzIGZyZWVkLlxuK1x0XHQgKi9cbitcdFx0cmRzX2Nvbm5fcHV0KGNvbm4pO1xuK1x0fVxuIFx0aWYgKGVycilcbiBcdFx0cmRtYV9yZWplY3QoY21faWQsIFx1MDAyNmVyciwgc2l6ZW9mKGludCksXG4gXHRcdFx0ICAgIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVEKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2xvb3AuYyBiL25ldC9yZHMvbG9vcC5jXG5pbmRleCBlNmIwNzUwYmJlZGFiLi43ZGFmOGVkMjVkNjlhIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9sb29wLmNcbisrKyBiL25ldC9yZHMvbG9vcC5jXG5AQCAtMTk1LDYgKzE5NSw4IEBAIHZvaWQgcmRzX2xvb3BfZXhpdCh2b2lkKVxuIFx0XHRXQVJOX09OKGxjLVx1MDAzZWNvbm4tXHUwMDNlY19wYXNzaXZlKTtcbiBcdFx0cmRzX2Nvbm5fZGVzdHJveShsYy1cdTAwM2Vjb25uKTtcbiBcdH1cbitcbitcdHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoXHUwMDI2cmRzX2xvb3BfdHJhbnNwb3J0KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmRzX2xvb3Bfa2lsbF9jb25ucyhzdHJ1Y3QgbmV0ICpuZXQpXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuY1xuaW5kZXggZjI1ZjI1OTI1ODZmNy4uMjllOTUwMjhlNjFlNCAxMDA2NDRcbi0tLSBhL25ldC9yZHMvbWVzc2FnZS5jXG4rKysgYi9uZXQvcmRzL21lc3NhZ2UuY1xuQEAgLTE4Miw2ICsxODIsMTggQEAgc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Uoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiBcdFx0a3JlZl9wdXQoXHUwMDI2cm0tXHUwMDNlYXRvbWljLm9wX3JkbWFfbXItXHUwMDNlcl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9mcmVlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4re1xuK1x0LyogZ2V0IGluIHJkc19zZW5kX3F1ZXVlX3JtKCksIHJkc19zZW5kX3Byb2JlKCkgb3IgdGhlIGNvbmdlc3Rpb25cbitcdCAqIG1hcCBwYXRoIG9mIHJkc19zZW5kX3htaXQoKS4gIE1lc3NhZ2VzIHRoYXQgd2VyZSBuZXZlciBxdWV1ZWQgb25cbitcdCAqIGEgY29ubmVjdGlvbiBoYXZlIG5vIHJlZmVyZW5jZSB0byBkcm9wLlxuK1x0ICovXG4rXHRpZiAocm0tXHUwMDNlbV9pbmMuaV9jb25uKVxuK1x0XHRyZHNfY29ubl9wdXQocm0tXHUwMDNlbV9pbmMuaV9jb25uKTtcbitcbitcdGtmcmVlKHJtKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfbWVzc2FnZSxcbkBAIC0xOTIsNyArMjA0LDcgQEAgc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfdW5waW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdGlmIChybS1cdTAwM2VhdG9taWMub3BfdW5waW5fZGVmZXJyZWQpXG4gXHRcdHJkc19hdG9taWNfb3BfdW5waW5fcGFnZShcdTAwMjZybS1cdTAwM2VhdG9taWMpO1xuIFxuLVx0a2ZyZWUocm0pO1xuK1x0cmRzX21lc3NhZ2VfZnJlZShybSk7XG4gfVxuIFxuIHZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG5AQCAtMjE3LDcgKzIyOSw3IEBAIHZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXG4tXHRcdGtmcmVlKHJtKTtcbitcdFx0cmRzX21lc3NhZ2VfZnJlZShybSk7XG4gXHR9XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19tZXNzYWdlX3B1dCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZHMuaCBiL25ldC9yZHMvcmRzLmhcbmluZGV4IDJkYjQ5NTczZGFjZDUuLjM1NzYwZGQ2YjA3N2YgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3Jkcy5oXG4rKysgYi9uZXQvcmRzL3Jkcy5oXG5AQCAtODksNyArODksNiBAQCBlbnVtIHtcbiAjZGVmaW5lIFJEU19SRUNPTk5FQ1RfUEVORElOR1x0MVxuICNkZWZpbmUgUkRTX0lOX1hNSVRcdFx0MlxuICNkZWZpbmUgUkRTX1JFQ1ZfUkVGSUxMXHRcdDNcbi0jZGVmaW5lXHRSRFNfREVTVFJPWV9QRU5ESU5HXHQ0XG4gXG4gLyogTWF4IG51bWJlciBvZiBtdWx0aXBhdGhzIHBlciBSRFMgY29ubmVjdGlvbi4gTXVzdCBiZSBhIHBvd2VyIG9mIDIgKi9cbiAjZGVmaW5lXHRSRFNfTVBBVEhfV09SS0VSU1x0OFxuQEAgLTEzOCw2ICsxMzcsMTIgQEAgc3RydWN0IHJkc19jb25uX3BhdGgge1xuIC8qIE9uZSByZHNfY29ubmVjdGlvbiBwZXIgUkRTIGFkZHJlc3MgcGFpciAqL1xuIHN0cnVjdCByZHNfY29ubmVjdGlvbiB7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0Y19oYXNoX25vZGU7XG4rXHQvKiBGcmVlIG9mIHRoZSBjb25uZWN0aW9uIG1lbW9yeSAobm90IHRoZSB0ZWFyZG93biBvZiBpdHNcbitcdCAqIHRyYW5zcG9ydCBzdGF0ZSAtIHRoYXQgc3RheXMgc3luY2hyb25vdXMgaW5cbitcdCAqIHJkc19jb25uX2Rlc3Ryb3koKSkgaXMgZGVmZXJyZWQgdW50aWwgdGhlIGxhc3QgcmVmZXJlbmNlIGlzXG4rXHQgKiBkcm9wcGVkIHZpYSByZHNfY29ubl9wdXQoKS5cbitcdCAqL1xuK1x0c3RydWN0IGtyZWZcdFx0Y19yZWZjb3VudDtcbiBcdHN0cnVjdCBpbjZfYWRkclx0XHRjX2xhZGRyO1xuIFx0c3RydWN0IGluNl9hZGRyXHRcdGNfZmFkZHI7XG4gXHRpbnRcdFx0XHRjX2Rldl9pZjsgLyogaWZpbmRleCB1c2VkIGZvciB0aGlzIGNvbm4gKi9cbkBAIC0xNDgsNiArMTUzLDEwIEBAIHN0cnVjdCByZHNfY29ubmVjdGlvbiB7XG4gXHRcdFx0XHRjX3BhZF90b18zMjoyOTtcbiBcdGludFx0XHRcdGNfbnBhdGhzO1xuIFx0Ym9vbFx0XHRcdGNfd2l0aF9zcG9ydF9pZHg7XG4rXHQvKiBTZXQgKHVuZGVyIFJDVSkgd2hlbiByZHNfY29ubl9kZXN0cm95KCkgc3RhcnRzIG9uIHRoaXMgY29ubjtcbitcdCAqIHJlYWQgdGhyb3VnaCByZHNfZGVzdHJveV9wZW5kaW5nKCkuXG4rXHQgKi9cbitcdGJvb2xcdFx0XHRjX2Rlc3Ryb3lfaW5fcHJvZztcbiBcdHN0cnVjdCByZHNfY29ubmVjdGlvblx0KmNfcGFzc2l2ZTtcbiBcdHN0cnVjdCByZHNfdHJhbnNwb3J0XHQqY190cmFucztcbiBcbkBAIC01NDQsNiArNTUzLDEyIEBAIHN0cnVjdCByZHNfdHJhbnNwb3J0IHtcbiBcdHVuc2lnbmVkIGludFx0XHR0X3ByZWZlcl9sb29wYmFjazoxLFxuIFx0XHRcdFx0dF9tcF9jYXBhYmxlOjE7XG4gXHR1bnNpZ25lZCBpbnRcdFx0dF90eXBlO1xuK1x0LyogQ29ubmVjdGlvbnMgb2YgdGhpcyB0cmFuc3BvcnQgbm90IHlldCBmcmVlZDsgZnJlZWluZyBydW5zXG4rXHQgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYVxuK1x0ICogY29ubmVjdGlvbiwgc28gdHJhbnNwb3J0IG1vZHVsZSB1bmxvYWQgaGFzIHRvIHdhaXQgZm9yIHRoaXNcbitcdCAqIHRvIHJlYWNoIHplcm8gKHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoKSkuXG4rXHQgKi9cbitcdGF0b21pY190XHRcdHRfY29ubl9jb3VudDtcbiBcbiBcdGludCAoKmxhZGRyX2NoZWNrKShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcixcbiBcdFx0XHQgICBfX3UzMiBzY29wZV9pZCk7XG5AQCAtODE5LDYgKzgzNCwxMSBAQCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdFx0dTggdG9zLCBnZnBfdCBnZnAsIGludCBkZXZfaWYpO1xuIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoKTtcbiB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcbit2b2lkIHJkc19jb25uX2dldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuK3ZvaWQgcmRzX2Nvbm5fcHV0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XG4rLyogaG93IGxvbmcgdHJhbnNwb3J0IHVubG9hZCB3YWl0cyBmb3IgaXRzIGNvbm5lY3Rpb25zIHRvIGJlIGZyZWVkICovXG4rI2RlZmluZSBSRFNfQ09OTl9GUkVFX1RJTUVPVVRfTVNcdDEwMDAwXG4rdm9pZCByZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucyk7XG4gdm9pZCByZHNfY29ubl9kcm9wKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XG4gdm9pZCByZHNfY29ubl9wYXRoX2Ryb3Aoc3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoLCBib29sIGRlc3Ryb3kpO1xuIHZvaWQgcmRzX2Nvbm5fY29ubmVjdF9pZl9kb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XG5AQCAtOTk0LDcgKzEwMTQsOCBAQCB2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZik7XG4gXG4gc3RhdGljIGlubGluZSBib29sIHJkc19kZXN0cm95X3BlbmRpbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIHtcbi1cdHJldHVybiAhY2hlY2tfbmV0KHJkc19jb25uX25ldChjb25uKSkgfHxcbitcdHJldHVybiBSRUFEX09OQ0UoY29ubi1cdTAwM2VjX2Rlc3Ryb3lfaW5fcHJvZykgfHxcbitcdCAgICAgICAhY2hlY2tfbmV0KHJkc19jb25uX25ldChjb25uKSkgfHxcbiBcdCAgICAgICAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfdW5sb2FkaW5nIFx1MDAyNlx1MDAyNiBjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNldF91bmxvYWRpbmcoY29ubikpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3JlY3YuYyBiL25ldC9yZHMvcmVjdi5jXG5pbmRleCA2MjA0ZTU3N2E5MGFlLi5iMDMxYzBiNDNhZjgzIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZWN2LmNcbisrKyBiL25ldC9yZHMvcmVjdi5jXG5AQCAtNDYsNiArNDYsNyBAQCB2b2lkIHJkc19pbmNfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcbiB7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2aW5jLVx1MDAzZWlfcmVmY291bnQsIDEpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5jLVx1MDAzZWlfaXRlbSk7XG4rXHRyZHNfY29ubl9nZXQoY29ubik7XHQvKiBwdXQgaW4gcmRzX2luY19wdXQoKSAqL1xuIFx0aW5jLVx1MDAzZWlfY29ubiA9IGNvbm47XG4gXHRpbmMtXHUwMDNlaV9jb25uX3BhdGggPSBOVUxMO1xuIFx0aW5jLVx1MDAzZWlfc2FkZHIgPSAqc2FkZHI7XG5AQCAtNjEsNiArNjIsNyBAQCB2b2lkIHJkc19pbmNfcGF0aF9pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uX3BhdGggKmNwLFxuIHtcbiBcdHJlZmNvdW50X3NldChcdTAwMjZpbmMtXHUwMDNlaV9yZWZjb3VudCwgMSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbmMtXHUwMDNlaV9pdGVtKTtcbitcdHJkc19jb25uX2dldChjcC1cdTAwM2VjcF9jb25uKTtcdC8qIHB1dCBpbiByZHNfaW5jX3B1dCgpICovXG4gXHRpbmMtXHUwMDNlaV9jb25uID0gY3AtXHUwMDNlY3BfY29ubjtcbiBcdGluYy1cdTAwM2VpX2Nvbm5fcGF0aCA9IGNwO1xuIFx0aW5jLVx1MDAzZWlfc2FkZHIgPSAqc2FkZHI7XG5AQCAtODEsOSArODMsMTkgQEAgdm9pZCByZHNfaW5jX3B1dChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpXG4ge1xuIFx0cmRzZGVidWcoXCJwdXQgaW5jICVwIHJlZiAlZFxcblwiLCBpbmMsIHJlZmNvdW50X3JlYWQoXHUwMDI2aW5jLVx1MDAzZWlfcmVmY291bnQpKTtcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2aW5jLVx1MDAzZWlfcmVmY291bnQpKSB7XG4rXHRcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGluYy1cdTAwM2VpX2Nvbm47XG4rXG4gXHRcdEJVR19PTighbGlzdF9lbXB0eShcdTAwMjZpbmMtXHUwMDNlaV9pdGVtKSk7XG4gXG4tXHRcdGluYy1cdTAwM2VpX2Nvbm4tXHUwMDNlY190cmFucy1cdTAwM2VpbmNfZnJlZShpbmMpO1xuK1x0XHQvKiBpbmNfZnJlZSgpIGNhbiBmcmVlIHRoZSBtZW1vcnkgQGluYyBsaXZlcyBpbiwgc28gdGhlXG4rXHRcdCAqIGNvbm5lY3Rpb24gcmVmZXJlbmNlIGhhcyB0byBiZSBkcm9wcGVkIHRocm91Z2ggdGhlXG4rXHRcdCAqIGNvcHkgdGFrZW4gYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNlaW5jX2ZyZWUoaW5jKTtcbitcdFx0LyogZ2V0IGluIHJkc19pbmNfaW5pdCgpLCByZHNfaW5jX3BhdGhfaW5pdCgpIG9yXG4rXHRcdCAqIHJkc19yZWN2X2luY29taW5nKClcbitcdFx0ICovXG4rXHRcdHJkc19jb25uX3B1dChjb25uKTtcbiBcdH1cbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocmRzX2luY19wdXQpO1xuQEAgLTMyNSw2ICszMzcsMTMgQEAgdm9pZCByZHNfcmVjdl9pbmNvbWluZyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwO1xuIFxuK1x0LyogZXZlcnkgY2FsbGVyIGluaXRpYWxpemVkIEBpbmMgd2l0aCByZHNfaW5jX2luaXQoKSBvclxuK1x0ICogcmRzX2luY19wYXRoX2luaXQoKSBmaXJzdCwgc28gaV9jb25uIGFscmVhZHkgaG9sZHMgYSByZWZlcmVuY2UuXG4rXHQgKiBUYWtlIHRoZSBuZXcgb25lIGJlZm9yZSBkcm9wcGluZyB0aGUgb2xkLCBzbyB0aGF0IHJlLXBvaW50aW5nIGFuXG4rXHQgKiBpbmMgYXQgdGhlIGNvbm5lY3Rpb24gaXQgYWxyZWFkeSByZWZlcnMgdG8gY2Fubm90IGZyZWUgaXQuXG4rXHQgKi9cbitcdHJkc19jb25uX2dldChjb25uKTtcbitcdHJkc19jb25uX3B1dChpbmMtXHUwMDNlaV9jb25uKTtcbiBcdGluYy1cdTAwM2VpX2Nvbm4gPSBjb25uO1xuIFx0aW5jLVx1MDAzZWlfcnhfamlmZmllcyA9IGppZmZpZXM7XG4gXHRpZiAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSlcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxYWZhOTgxZTVjMDZkLi4wNDVlYjNjM2Y5NzcyIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbisrKyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMjkwLDYgKzI5MCw3IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0XHR9XG4gXHRcdFx0cm0tXHUwMDNlZGF0YS5vcF9hY3RpdmUgPSAxO1xuIFx0XHRcdHJtLVx1MDAzZW1faW5jLmlfY29ubl9wYXRoID0gY3A7XG4rXHRcdFx0cmRzX2Nvbm5fZ2V0KGNwLVx1MDAzZWNwX2Nvbm4pO1x0LyogcHV0IGluIHJkc19tZXNzYWdlX3B1dCgpICovXG4gXHRcdFx0cm0tXHUwMDNlbV9pbmMuaV9jb25uID0gY3AtXHUwMDNlY3BfY29ubjtcbiBcbiBcdFx0XHRjcC1cdTAwM2VjcF94bWl0X3JtID0gcm07XG5AQCAtOTQ3LDYgKzk0OCw3IEBAIHN0YXRpYyBpbnQgcmRzX3NlbmRfcXVldWVfcm0oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLFxuIFx0XHQvKiBUaGUgY29kZSBvcmRlcmluZyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IHdlJ3JlXG4gXHRcdCAgIHRyeWluZyB0byBtaW5pbWl6ZSB0aGUgdGltZSB3ZSBob2xkIGNfbG9jayAqL1xuIFx0XHRyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoXHUwMDI2cm0tXHUwMDNlbV9pbmMuaV9oZHIsIHNwb3J0LCBkcG9ydCwgMCk7XG4rXHRcdHJkc19jb25uX2dldChjb25uKTtcdC8qIHB1dCBpbiByZHNfbWVzc2FnZV9wdXQoKSAqL1xuIFx0XHRybS1cdTAwM2VtX2luYy5pX2Nvbm4gPSBjb25uO1xuIFx0XHRybS1cdTAwM2VtX2luYy5pX2Nvbm5fcGF0aCA9IGNwO1xuIFx0XHRyZHNfbWVzc2FnZV9hZGRyZWYocm0pO1xuQEAgLTExNTksMTMgKzExNjEsMTQgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuIFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgdXNpbiwgbXNnLVx1MDAzZW1zZ19uYW1lKTtcbiBcdF9fYmUxNiBkcG9ydDtcbiBcdHN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBOVUxMO1xuLVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uO1xuK1x0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gTlVMTDtcbiBcdGludCByZXQgPSAwO1xuIFx0aW50IHF1ZXVlZCA9IDAsIGFsbG9jYXRlZF9tciA9IDA7XG4gXHRpbnQgbm9uYmxvY2sgPSBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQ7XG4gXHRsb25nIHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbm9uYmxvY2spO1xuIFx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwYXRoO1xuIFx0c3RydWN0IGluNl9hZGRyIGRhZGRyO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdF9fdTMyIHNjb3BlX2lkID0gMDtcbiBcdHNpemVfdCByZG1hX3BheWxvYWRfbGVuID0gMDtcbiBcdGJvb2wgemNvcHkgPSAoKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19aRVJPQ09QWSkgXHUwMDI2XHUwMDI2XG5AQCAtMTM0MCwxMSArMTM0MywyOSBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXG4gXHRybS1cdTAwM2VtX2RhZGRyID0gZGFkZHI7XG4gXG4gXHQvKiByZHNfY29ubl9jcmVhdGUgaGFzIGEgc3BpbmxvY2sgdGhhdCBydW5zIHdpdGggSVJRIG9mZi5cbi1cdCAqIENhY2hpbmcgdGhlIGNvbm4gaW4gdGhlIHNvY2tldCBoZWxwcyBhIGxvdC4gKi9cbi1cdGlmIChycy1cdTAwM2Vyc19jb25uIFx1MDAyNlx1MDAyNiBpcHY2X2FkZHJfZXF1YWwoXHUwMDI2cnMtXHUwMDNlcnNfY29ubi1cdTAwM2VjX2ZhZGRyLCBcdTAwMjZkYWRkcikgXHUwMDI2XHUwMDI2XG4tXHQgICAgcnMtXHUwMDNlcnNfdG9zID09IHJzLVx1MDAzZXJzX2Nvbm4tXHUwMDNlY190b3MpIHtcbi1cdFx0Y29ubiA9IHJzLVx1MDAzZXJzX2Nvbm47XG4rXHQgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuXG4rXHQgKlxuK1x0ICogVGhlIGNhY2hlZCByc19jb25uIGhvbGRzIGEgY29ubmVjdGlvbiByZWZlcmVuY2U7IHRha2Ugb25lIG9mXG4rXHQgKiBvdXIgb3duIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBjYWxsIChkcm9wcGVkIG9uIGJvdGggZXhpdFxuK1x0ICogcGF0aHMpLCBzbyB0aGF0IG5laXRoZXIgYSBjb25jdXJyZW50IHNlbmRlciByZXBsYWNpbmcgdGhlXG4rXHQgKiBjYWNoZSBub3IgcmRzX2Nvbm5fZGVzdHJveSgpIGNhbiBmcmVlIHRoZSBjb25uZWN0aW9uIHVuZGVyXG4rXHQgKiB1cy4gIEEgY2FjaGVkIGNvbm5lY3Rpb24gd2hvc2UgZGVzdHJ1Y3Rpb24gaGFzIGJlZ3VuIGlzIG5vdFxuK1x0ICogcmV1c2VkOiBkcm9wcGluZyBpdCBoZXJlIGxldHMgdGhlIG5leHQgc2VuZG1zZyBsb29rIHVwIG9yXG4rXHQgKiBjcmVhdGUgYSBsaXZlIG9uZSBpbnN0ZWFkIG9mIHJldHVybmluZyAtRUFHQUlOIGZvcmV2ZXIuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJzLVx1MDAzZXJzX2xvY2ssIGZsYWdzKTtcbitcdGNvbm4gPSBycy1cdTAwM2Vyc19jb25uO1xuK1x0aWYgKGNvbm4gXHUwMDI2XHUwMDI2IGlwdjZfYWRkcl9lcXVhbChcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIsIFx1MDAyNmRhZGRyKSBcdTAwMjZcdTAwMjZcbitcdCAgICBycy1cdTAwM2Vyc190b3MgPT0gY29ubi1cdTAwM2VjX3RvcyBcdTAwMjZcdTAwMjYgIXJkc19kZXN0cm95X3BlbmRpbmcoY29ubikpIHtcbitcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xuIFx0fSBlbHNlIHtcbitcdFx0Y29ubiA9IE5VTEw7XG4rXHR9XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnJzLVx1MDAzZXJzX2xvY2ssIGZsYWdzKTtcbitcbitcdGlmICghY29ubikge1xuK1x0XHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKm9sZDtcbitcbiBcdFx0Y29ubiA9IHJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhzb2NrX25ldChzb2NrLVx1MDAzZXNrKSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZycy1cdTAwM2Vyc19ib3VuZF9hZGRyLCBcdTAwMjZkYWRkcixcbiBcdFx0XHRcdFx0XHRycy1cdTAwM2Vyc190cmFuc3BvcnQsIHJzLVx1MDAzZXJzX3RvcyxcbkBAIC0xMzUyLDkgKzEzNzMsMTcgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuIFx0XHRcdFx0XHRcdHNjb3BlX2lkKTtcbiBcdFx0aWYgKElTX0VSUihjb25uKSkge1xuIFx0XHRcdHJldCA9IFBUUl9FUlIoY29ubik7XG4rXHRcdFx0Y29ubiA9IE5VTEw7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbitcdFx0LyogaGFuZCB0aGUgY2FjaGUgaXRzIG93biByZWZlcmVuY2UgKi9cbitcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZycy1cdTAwM2Vyc19sb2NrLCBmbGFncyk7XG4rXHRcdG9sZCA9IHJzLVx1MDAzZXJzX2Nvbm47XG4gXHRcdHJzLVx1MDAzZXJzX2Nvbm4gPSBjb25uO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnJzLVx1MDAzZXJzX2xvY2ssIGZsYWdzKTtcbitcdFx0aWYgKG9sZClcbitcdFx0XHRyZHNfY29ubl9wdXQob2xkKTtcbiBcdH1cbiBcbiBcdGlmIChjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNldF9tcF9jYXBhYmxlKSB7XG5AQCAtMTQ2OSw2ICsxNDk4LDggQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuIFx0XHRrZnJlZSh2Y3QudmVjW2luZF0uaW92KTtcbiBcdGtmcmVlKHZjdC52ZWMpO1xuIFxuK1x0cmRzX2Nvbm5fcHV0KGNvbm4pO1xuK1xuIFx0cmV0dXJuIHBheWxvYWRfbGVuO1xuIFxuIG91dDpcbkBAIC0xNDc2LDYgKzE1MDcsOSBAQCBpbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXG4gXHRcdGtmcmVlKHZjdC52ZWNbaW5kXS5pb3YpO1xuIFx0a2ZyZWUodmN0LnZlYyk7XG4gXG4rXHRpZiAoY29ubilcbitcdFx0cmRzX2Nvbm5fcHV0KGNvbm4pO1xuK1xuIFx0LyogSWYgdGhlIHVzZXIgaW5jbHVkZWQgYSBSRE1BX01BUCBjbXNnLCB3ZSBhbGxvY2F0ZWQgYSBNUiBvbiB0aGUgZmx5LlxuIFx0ICogSWYgdGhlIHNlbmRtc2cgZ29lcyB0aHJvdWdoLCB3ZSBrZWVwIHRoZSBNUi4gSWYgaXQgZmFpbHMgd2l0aCBFQUdBSU5cbiBcdCAqIG9yIGluIGFueSBvdGhlciB3YXksIHdlIG5lZWQgdG8gZGVzdHJveSB0aGUgTVIgYWdhaW4gKi9cbkBAIC0xNTIyLDYgKzE1NTYsNyBAQCByZHNfc2VuZF9wcm9iZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AsIF9fYmUxNiBzcG9ydCxcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cm0tXHUwMDNlbV9jb25uX2l0ZW0sIFx1MDAyNmNwLVx1MDAzZWNwX3NlbmRfcXVldWUpO1xuIFx0c2V0X2JpdChSRFNfTVNHX09OX0NPTk4sIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpO1xuIFx0cmRzX21lc3NhZ2VfYWRkcmVmKHJtKTtcbitcdHJkc19jb25uX2dldChjcC1cdTAwM2VjcF9jb25uKTtcdC8qIHB1dCBpbiByZHNfbWVzc2FnZV9wdXQoKSAqL1xuIFx0cm0tXHUwMDNlbV9pbmMuaV9jb25uID0gY3AtXHUwMDNlY3BfY29ubjtcbiBcdHJtLVx1MDAzZW1faW5jLmlfY29ubl9wYXRoID0gY3A7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3AuYyBiL25ldC9yZHMvdGNwLmNcbmluZGV4IDc3NGE3MWY4OGQzNzUuLjI2ODVlZTIxYTIyZDEgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3RjcC5jXG4rKysgYi9uZXQvcmRzL3RjcC5jXG5AQCAtODA1LDYgKzgwNSw3IEBAIHN0YXRpYyB2b2lkIHJkc190Y3BfZXhpdCh2b2lkKVxuICNlbmRpZlxuIFx0dW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKFx1MDAyNnJkc190Y3BfbmV0X29wcyk7XG4gXHRyZHNfdGNwX2Rlc3Ryb3lfY29ubnMoKTtcbitcdHJkc19jb25uX3dhaXRfY29ubnNfZnJlZWQoXHUwMDI2cmRzX3RjcF90cmFuc3BvcnQpO1xuIFx0cmRzX3RyYW5zX3VucmVnaXN0ZXIoXHUwMDI2cmRzX3RjcF90cmFuc3BvcnQpO1xuIFx0cmRzX3RjcF9yZWN2X2V4aXQoKTtcbiBcdGttZW1fY2FjaGVfZGVzdHJveShyZHNfdGNwX2Nvbm5fc2xhYik7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuaW5kZXggMTNmYTYwYzE5ODViYi4uMGQyY2VkODkyYThhZSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvdGNwX2xpc3Rlbi5jXG4rKysgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuQEAgLTE1Myw3ICsxNTMsNyBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuIHtcbiBcdHN0cnVjdCBzb2NrZXQgKmxpc3Rlbl9zb2NrID0gcnRuLVx1MDAzZXJkc190Y3BfbGlzdGVuX3NvY2s7XG4gXHRzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jayA9IE5VTEw7XG4tXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47XG4rXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBOVUxMO1xuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4gXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICpyc190Y3AgPSBOVUxMO1xuQEAgLTIyOSw2ICsyMjksNyBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuIFxuIFx0aWYgKElTX0VSUihjb25uKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKGNvbm4pO1xuK1x0XHRjb25uID0gTlVMTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXHQvKiBBbiBpbmNvbWluZyBTWU4gcmVxdWVzdCBjYW1lIGluLCBhbmQgVENQIGp1c3QgYWNjZXB0ZWQgaXQuXG5AQCAtMzQzLDYgKzM0NCw4IEBAIGludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZyc190Y3AtXHUwMDNldF9jb25uX3BhdGhfbG9jayk7XG4gXHRpZiAobmV3X3NvY2spXG4gXHRcdHNvY2tfcmVsZWFzZShuZXdfc29jayk7XG4rXHRpZiAoY29ubilcbitcdFx0cmRzX2Nvbm5fcHV0KGNvbm4pO1xuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ0bi1cdTAwM2VyZHNfdGNwX2FjY2VwdF9sb2NrKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjMzLjQ4MTIwMzc4OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxOTY1ODA0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSRFMgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBrZXJuZWwgcGF0Y2ggc2VyaWVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgc3Vic3lzdGVtLiBMZXQncyBkaWcgaW4uIEl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBxdWl0ZSBhIGZldyBmaWxlcyB3aXRoaW4gYG5ldC9yZHMvYDogYGFmX3Jkcy5jYCwgYGNvbm5lY3Rpb24uY2AsIGBpYi5jYCwgYGliX2NtLmNgLCBgbG9vcC5jYCwgYG1lc3NhZ2UuY2AsIGByZHMuaGAsIGByZWN2LmNgLCBgc2VuZC5jYCwgYHRjcC5jYCwgYW5kIGB0Y3BfbGlzdGVuLmNgLiBUaGlzIHN1Z2dlc3RzIGEgcHJldHR5IHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbiBhY3Jvc3MgdGhlIGNvcmUgUkRTIGltcGxlbWVudGF0aW9uLlxuXG5UaGUga2V5IGNoYW5nZSBhcHBlYXJzIHRvIGJlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgcmVmZXJlbmNlIGNvdW50aW5nIOKAkyBga3JlZmAg4oCTIHRvIHRoZSBgc3RydWN0IHJkc19jb25uZWN0aW9uYC4gVGhleSdyZSByZXBsYWNpbmcgdGhlIG9sZCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgd2hpY2gsIGZyYW5rbHksIHdhcyBhbHdheXMgYSBiaXQgc3VzcGVjdCB3aXRoIGl0cyBhc3N1bXB0aW9ucyBhYm91dCBubyBjb25jdXJyZW50IHJlZmVyZW5jZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYXJvdW5kIGNvbm5lY3Rpb24gZGVzdHJ1Y3Rpb24uIFRoaXMgaXMgYSBjcml0aWNhbCBpbXByb3ZlbWVudCwgaWYgZG9uZSBjb3JyZWN0bHksIGFzIGl0IHNvbHZlcyBhIGZ1bmRhbWVudGFsIGNvbmN1cnJlbmN5IGlzc3VlLlxuXG5JIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXnigJl2ZSBpbXBsZW1lbnRlZCB0aGlzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHJkc19jb25uX2Rlc3Ryb3lgLCBgX19yZHNfY29ubl9jcmVhdGVgLCBgcmRzX2Nvbm5fbG9va3VwYCwgYHJkc19zZW5kbXNnYCwgYHJkc190Y3BfYWNjZXB0X29uZWAsIGByZHNfcmVjdl9pbmNvbWluZ2AsIGByZHNfbWVzc2FnZV9mcmVlYCwgYHJkc19yZWxlYXNlYCwgYW5kIHNldmVyYWwgb3RoZXJzLiBUaGlzIGlzIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGxpa2VseSB3ZXJlIG5vdCByZWZlcmVuY2UgY291bnRlZCBiZWZvcmUgdGhlIHBhdGNoIGFuZCB3aWxsIGdpdmUgYXdheSBob3cgd2VsbCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGhhcyBiZWVuIGluY29ycG9yYXRlZC5cblxuSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IHRoZSByZWZlcmVuY2UgY291bnQgaXMgaW5jcmVtZW50ZWQgYW5kIGRlY3JlbWVudGVkIGluIGVhY2ggb2YgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zLiBBcmUgdGhleSB1c2luZyB0aGUgY29ycmVjdCBga3JlZmAgZnVuY3Rpb25zPyBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIGNvZGU/IEkgbmVlZCB0byBsb29rIGZvciBtaXNzZWQgYGtyZWZfcHV0YCBjYWxscywgZG91YmxlIGRlY3JlbWVudHMsIGFuZCBpbXByb3BlciBsb2NraW5nIGFyb3VuZCB0aGUgcmVmY291bnQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFJEUyB0cmFuc3BvcnRzIHRoZW1zZWx2ZXMgKFRDUCwgUkRNQSwgZXRjLikgdG8gZW5zdXJlIHRoZSByZWZjb3VudGluZyBpcyBwcm9wZXJseSBpbnRlZ3JhdGVkIGF0IHRoYXQgbGV2ZWwuXG5cblRvIHN0YXJ0LCBsZXQncyBwdWxsIHVwIHRoZSBgbmV0L3Jkcy9LY29uZmlnYCBmaWxlIHdpdGggZ3JlcHBlciB0byByZXZpZXcgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGFuZCB0aGUgc3BlY2lmaWMgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb25zLiBUaGF0J2xsIGdpdmUgbWUgY29udGV4dCBvbiB3aGljaCB0cmFuc3BvcnRzIGFyZSBlbmFibGVkIGFuZCB3aGljaCBvbmVzIGFyZSBiZWluZyBhZmZlY3RlZC4gVGhlIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIHdpbGwgYmUgdG8gdmVyaWZ5IHRoZSBjb21wYXRpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg2MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE1OjU2OjM3LjY3Nzc4NzU2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIxMzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9LY29uZmlnLTItXFxubmV0L3Jkcy9LY29uZmlnOjM6Y29uZmlnIFJEU1xcbm5ldC9yZHMvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJUaGUgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyBQcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy05LVxcbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcXG5uZXQvcmRzL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIEluZmluaWJhbmRcXFwiXFxuLS1cXG5uZXQvcmRzL0tjb25maWctMTYtXFxubmV0L3Jkcy9LY29uZmlnOjE3OmNvbmZpZyBSRFNfVENQXFxubmV0L3Jkcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBUQ1BcXFwiXFxuLS1cXG5uZXQvcmRzL0tjb25maWctMjQtXFxubmV0L3Jkcy9LY29uZmlnOjI1OmNvbmZpZyBSRFNfREVCVUdcXG5uZXQvcmRzL0tjb25maWctMjYtXFx0Ym9vbCBcXFwiUkRTIGRlYnVnZ2luZyBtZXNzYWdlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6MzcuNzI1MDEwMDIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2ODQzMDc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byB0aGUgUkRTIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYG5ldC9yZHMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXZlcnl0aGluZyBpbiBpdCwgZnJvbSB0aGUgdG9wIHRvIHRoZSBib3R0b20uIEknbSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBpdHMgc3RydWN0dXJlLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpdCBwcmVzZW50cy4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgcHJvdmlkZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3Mgb3ZlciBUQ1AgKFJEUykgc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQuIFRoaXMgS2NvbmZpZyBmaWxlIGRpY3RhdGVzIGhvdyBSRFMgaXMgcHJlc2VudGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhbmQsIHVsdGltYXRlbHksIGhvdyBpdCdzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEl0J3MgY3J1Y2lhbCBmb3IgY29udHJvbGxpbmcgd2hpY2ggcGFydHMgb2YgUkRTIGFyZSBjb21waWxlZC4gSSdsbCBwYXkgc3BlY2lmaWMgYXR0ZW50aW9uIHRvIGFueSBkZWZhdWx0IHZhbHVlcywgaWYgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgaW52b2x2ZWQsIGFuZCBhbnkgcmVsYXRpb24gdG8gb3RoZXIgS2NvbmZpZyBmaWxlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBvcHRpb25zLiBJIGFsc28gbmVlZCB0byBhc2NlcnRhaW4gd2hhdCB0aGlzIHRlbGxzIG1lIGFib3V0IGl0cyBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3RhY2tzIGFuZCByZWxhdGVkIGNvbXBvbmVudHMuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBjcm9zcy1yZWZlcmVuY2luZyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgc291cmNlIHRvIGdldCB0aGUgZnVsbCBzdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4OTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1NjozOS44OTM0NDM5NzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcmRzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0Y29uZmlnIFJEU1xcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXFxcIlxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHByb3RvY29sIHByb3ZpZGVzIHJlbGlhYmxlLFxcbiAgIDg6XFx0XFx0ICBzZXF1ZW5jZWQgZGVsaXZlcnkgb2YgZGF0YWdyYW1zIG92ZXIgSW5maW5pYmFuZCBvciBUQ1AuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBSRFNfUkRNQVxcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIEluZmluaWJhbmRcXFwiXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFJEUyBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xcbiAgMTM6XFx0XFx0aGVscFxcbiAgMTQ6XFx0XFx0ICBBbGxvdyBSRFMgdG8gdXNlIEluZmluaWJhbmQgYXMgYSB0cmFuc3BvcnQuXFxuICAxNTpcXHRcXHQgIFRoaXMgdHJhbnNwb3J0IHN1cHBvcnRzIFJETUEgb3BlcmF0aW9ucy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIFJEU19UQ1BcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBUQ1BcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFJEU1xcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2IHx8ICFJUFY2XFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIEFsbG93IFJEUyB0byB1c2UgVENQIGFzIGEgdHJhbnNwb3J0LlxcbiAgMjM6XFx0XFx0ICBUaGlzIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IFJETUEgb3BlcmF0aW9ucy5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIFJEU19ERUJVR1xcbiAgMjY6XFx0XFx0Ym9vbCBcXFwiUkRTIGRlYnVnZ2luZyBtZXNzYWdlc1xcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gUkRTXFxuICAyODpcXHRcXHRkZWZhdWx0IG5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0Y29uZmlnIEdDT1ZfUFJPRklMRV9SRFNcXG4gIDMxOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiBSRFNcXFwiXFxuICAzMjpcXHRcXHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIEVuYWJsZSBHQ09WIHByb2ZpbGluZyBvbiBSRFMgZm9yIGNoZWNraW5nIHdoaWNoIGZ1bmN0aW9ucy9saW5lc1xcbiAgMzU6XFx0XFx0ICBhcmUgZXhlY3V0ZWQuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6MzkuODkzNTA0MTU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk5OTMyMjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFJEUzogQSBDbGVhciBUYXJnZXQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFJEUywgUmVkdW5kYW50IERhdGEgUHJvdG9jb2wsIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgY2FsbHMg4oCTIGBBRl9SRFNgLCBgUEZfUkRTYCwgdGhlIHdvcmtzLiBTeXprYWxsZXIncyBnb3QgdGhlIGZ1bGwgdG9vbGJveCByZWFkeSB0byBnbywgaGFuZGxpbmcgdGhlIFJEUyBzb2NrZXQgcHJpbWl0aXZlcyB3aXRoIGVhc2UuICBBbmQgc2luY2UgaXQgcnVucyBmaW5lIHdpdGhpbiBvdXIgc3RhbmRhcmQgUUVNVSBzZXR1cCwgaW5jbHVkaW5nIGxvb3BiYWNrLCBUQ1AsIGFuZCBldmVuIFJETUEgaWYgdGhlIGVudmlyb25tZW50IGlzIHNldCB1cCBwcm9wZXJseSwgd2UndmUgZ290IGEgcmVhZGlseSBleGVjdXRhYmxlIHRhcmdldC5cblxuVGhlIGp1aWN5IHBhcnQsIGFuZCB0aGUga2V5IGZvciBmdXp6aW5nLCBpcyB0aGUgY29yZSBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uOiBzZW5kaW5nLCByZWNlaXZpbmcsIGFjY2VwdGluZywgY29ubmVjdGluZywgcmVsZWFzaW5nIHRoZSBzb2NrZXRzLi4uIGFsbCB0aGF0IGdvb2Qgc3R1ZmYuICBUaGlzIGNvZGUgbWFuaXB1bGF0ZXMgdGhlIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIHdpdGggYGtyZWZgIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZGVmZXJyZWQgZnJlZWluZywgaW50cm9kdWNlcyB0aG9zZSBgY19kZXN0cm95X2luX3Byb2dgIGNoZWNrcywgYW5kIGFkZHMgcmVmY291bnRpbmcgdG8gYHJzLVx1MDAzZXJzX2Nvbm5gIGFuZCB0aGUgbWVzc2FnZXMgdGhlbXNlbHZlcyAoYHJkc19tZXNzYWdlX2ZyZWVgLCBgcmRzX2luY19wdXRgLCBgcmRzX3JlY3ZfaW5jb21pbmdgKSwgY2hhbmdpbmcgcmVmY291bnRpbmcsIGxvY2tpbmcsIHN5bmNocm9uaXphdGlvbiwgYW5kIHRoZSBvdmVyYWxsIG1lbW9yeSBsaWZlY3ljbGUgd2l0aGluIHRoZSBuZXR3b3JrIHByb3RvY29sLiBUaGF0IHNjcmVhbXMgZm9yIGZ1enppbmcuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb25maXJtZWQ6IGBXb3J0aEZ1enppbmdgIGlzIHVuZXF1aXZvY2FsbHkgYHRydWVgLiAgTm8gcXVlc3Rpb24gdGhlcmUuXG5cbk5leHQgdXAsIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1JEU2AgYW5kIGBDT05GSUdfUkRTX1RDUGAgYXJlIHRoZSBvYnZpb3VzIG9uZXMuIFRoZW4gd2UgaGF2ZSBgUkRTX1JETUFgLCB3aGljaCBkZXBlbmRzIG9uIGBJTkZJTklCQU5EYCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AuIFNvLCBSRFMgYW5kIFJEU19UQ1AgYXJlIHByaW1hcnksIGFuZCBSRFNfUkRNQSBkZXBlbmRzIG9uIG90aGVyIGNvbmZpZ3MuIFNob3VsZCB3ZSBpbmNsdWRlIGFsbCB0aHJlZSB3aGVuIGJ1aWxkaW5nIHRoZSBmdXp6IHRhcmdldHM/XG5cbk9rYXksIGxldCdzIGV4cGxvcmUgdGhvc2UgY29uZmlndXJhdGlvbnMgZGlyZWN0bHk6IGBSRFNgLCBgUkRTX1RDUGAsIGFuZCBgUkRTX1JETUFgLiBBbmQgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmaWxlcyBvciBjb25maWdzIHdlIHNob3VsZCBiZSBhd2FyZSBvZi5cblxuTGV0J3Mgc3RhcnQgd2l0aCBgbmV0L3Jkcy9NYWtlZmlsZWAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo0My44OTI4MjkyNjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcmRzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLSQoQ09ORklHX1JEUykgKz0gcmRzLm9cXG4gICAzOlxcdHJkcy15IDo9XFx0YWZfcmRzLm8gYmluZC5vIGNvbmcubyBjb25uZWN0aW9uLm8gaW5mby5vIG1lc3NhZ2UubyAgIFxcXFxcXG4gICA0OlxcdFxcdFxcdFxcdHJlY3YubyBzZW5kLm8gc3RhdHMubyBzeXNjdGwubyB0aHJlYWRzLm8gdHJhbnNwb3J0Lm8gXFxcXFxcbiAgIDU6XFx0XFx0XFx0XFx0bG9vcC5vIHBhZ2UubyByZG1hLm9cXG4gICA2OlxcdFxcbiAgIDc6XFx0b2JqLSQoQ09ORklHX1JEU19SRE1BKSArPSByZHNfcmRtYS5vXFxuICAgODpcXHRyZHNfcmRtYS15IDo9XFx0cmRtYV90cmFuc3BvcnQubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRcXHRpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRcXHRpYl9zeXNjdGwubyBpYl9yZG1hLm8gaWJfZnJtci5vXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcbiAgMTM6XFx0b2JqLSQoQ09ORklHX1JEU19UQ1ApICs9IHJkc190Y3Aub1xcbiAgMTQ6XFx0cmRzX3RjcC15IDo9XFx0XFx0dGNwLm8gdGNwX2Nvbm5lY3QubyB0Y3BfbGlzdGVuLm8gdGNwX3JlY3YubyBcXFxcXFxuICAxNTpcXHRcXHRcXHRcXHR0Y3Bfc2VuZC5vIHRjcF9zdGF0cy5vXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNjZmxhZ3MtJChDT05GSUdfUkRTX0RFQlVHKVxcdDo9XFx0LURSRFNfREVCVUdcXG4gIDE4OlxcdFxcbiAgMTk6XFx0IyBmb3IgR0NPViBjb3ZlcmFnZSBwcm9maWxpbmdcXG4gIDIwOlxcdGlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfUkRTXFxuICAyMTpcXHRHQ09WX1BST0ZJTEUgOj0geVxcbiAgMjI6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6NDMuODkyODg5ODA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUzMTIyMzc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUkRTIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEkgc2VlIGEgcHJldHR5IGV4dGVuc2l2ZSBsaXN0IG9mIG1vZGlmaWVkIHN5bWJvbHM6IGByZHNfcmVsZWFzZWAsIGEgd2hvbGUgYnVuY2ggb2YgYHJkc19jb25uXypgIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gbWFuYWdlbWVudCwgYW5kIHRoZW4gZnVuY3Rpb25zIHNjYXR0ZXJlZCBhY3Jvc3MgSUIsIGxvb3AsIG1lc3NhZ2UgaGFuZGxpbmcsIHJlY2VpdmUsIHNlbmQsIGFuZCBUQ1AuXG5cbk15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gbmFycm93IGRvd24gdGhlIGZvY3VzLiBJIHdhbnQgdG8gaWRlbnRpZnkgdGhlICptb3N0KiBpbnRlcmVzdGluZyBmdW5jdGlvbnMgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBleHBvc2UgbmV3IHZ1bG5lcmFiaWxpdGllcy4gQmFzZWQgb24gdGhlIG1vZGlmaWNhdGlvbnMsIHRoZSBjb25uZWN0aW9uIG1hbmFnZW1lbnQgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHRob3NlIGRlYWxpbmcgd2l0aCBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGdldHRpbmcsIHB1dHRpbmcgYW5kIGxvb2t1cCBzZWVtIGxpa2UgdGhlIG1vc3QgY3JpdGljYWwgb25lcy4gYHJkc19zZW5kbXNnYCwgYHJkc19yZWN2X2luY29taW5nYCwgYHJkc19pbmNfcHV0YCwgYHJkc19tZXNzYWdlX2ZyZWVgLCBhbmQgYHJkc190Y3BfYWNjZXB0X29uZWAgYWxzbyBzdGFuZCBvdXQsIGFzIHRoZXkgYXJlIGFsbCBhdCB0aGUgaW50ZXJmYWNlIGJvdW5kYXJ5IG9mIHRoZSB1c2VyIGFuZCBrZXJuZWwgc3BhY2UuIFNvLCBJIHNlbGVjdCBgX19yZHNfY29ubl9jcmVhdGVgLCBgcmRzX2Nvbm5fZGVzdHJveWAsIGByZHNfY29ubl9kZXN0cm95X2ZpbmlgLCBgcmRzX2Nvbm5fcHV0YCwgYHJkc19jb25uX2dldGAsIGByZHNfY29ubl9sb29rdXBgLCBgcmRzX3NlbmRtc2dgLCBgcmRzX3JlY3ZfaW5jb21pbmdgLCBgcmRzX2luY19wdXRgLCBgcmRzX21lc3NhZ2VfZnJlZWAsIGFuZCBgcmRzX3RjcF9hY2NlcHRfb25lYC5cblxuSSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgdG8gdGhlIFJEUyBzdWJzeXN0ZW0gYW5kIGFyZSBkaXJlY3RseSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gVGhleSBhbGwgc2VlbSB0byBmaXQgdGhlIGJpbGwuXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoaXMgcGF0Y2ggbGlrZWx5IGludHJvZHVjZXMgY2hhbmdlcyByZWxhdGVkIHRvIGNvcmUgUkRTIGZ1bmN0aW9uYWxpdHksIGFsb25nIHdpdGggaXRzIFRDUCBhbmQgUkRNQSBpbXBsZW1lbnRhdGlvbnMuIFNvIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkIHdpdGggYFJEU2AsIGBSRFNfVENQYCwgYW5kIGBSRFNfUkRNQWAuIEdpdmVuIHRoYXQgYFJEU2AgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBSRFNfUkRNQWAgZGVwZW5kcyBvbiBgSU5GSU5JQkFORGAsIEknbGwgYWxzbyBlbnN1cmUgdGhlc2UgYXJlIGVuYWJsZWQsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cbk9rYXksIGxldCdzIGZvcm11bGF0ZSB0aGUgcmVhc29uaW5nIGNsZWFybHkuIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCByZWZlcmVuY2UgY291bnRpbmcgb2YgYHN0cnVjdCByZHNfY29ubmVjdGlvbmAgd2l0aCBga3JlZmAsIGFuZCBpdCByZW9yZ2FuaXplcyBjb25uZWN0aW9uIGRlc3RydWN0aW9uIGludG8gYSBxdWllc2NpbmcgYW5kIGZyZWVpbmcgcGhhc2UuIEVzc2VudGlhbGx5LCBpdCdzIGEgZGVlcCBkaXZlIGludG8gY29ubmVjdGlvbiBsaWZlY3ljbGUgbWFuYWdlbWVudCwgaW5jbHVkaW5nIGNvcmUgc3luY2hyb25pemF0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIFJEUyBwcm90b2NvbC4gU2luY2UgUkRTIGlzIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBzb2NrZXQgb3BlcmF0aW9ucywgZmxhd3MgaGVyZSBjb3VsZCBoYXZlIHNlcmlvdXMgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBUaGUgY2hhbmdlcyB0b3VjaCBjcml0aWNhbCBhcmVhcyBsaWtlIHNlbmQsIHJlY2VpdmUsIGFuZCBtZXNzYWdlIGhhbmRsaW5nLCBhcyB3ZWxsIGFzIHRyYW5zcG9ydC1zcGVjaWZpYyBoYW5kbGVycyBpbiBsb29wLCBUQ1AsIGFuZCBJQi4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBhbGwgYXJlYXMgb2YgbmV0d29ya2luZyBhcmUgY29tcGxleCBhbmQgcHJvbmUgdG8gZXJyb3JzLlxuXG5UaGVyZWZvcmUsIFdvcnRoRnV6emluZz10cnVlLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3OTgsIk91dHB1dFRva2VucyI6MjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6NTEuNDI0MTE1ODY5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzczMTY2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1RDUFwiLFxuICAgIFwiUkRTX1JETUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3Jkc19jb25uX2NyZWF0ZVwiLFxuICAgIFwicmRzX2Nvbm5fZGVzdHJveVwiLFxuICAgIFwicmRzX2Nvbm5fZGVzdHJveV9maW5pXCIsXG4gICAgXCJyZHNfY29ubl9nZXRcIixcbiAgICBcInJkc19jb25uX3B1dFwiLFxuICAgIFwicmRzX2Nvbm5fbG9va3VwXCIsXG4gICAgXCJyZHNfc2VuZG1zZ1wiLFxuICAgIFwicmRzX3JlY3ZfaW5jb21pbmdcIixcbiAgICBcInJkc19pbmNfcHV0XCIsXG4gICAgXCJyZHNfbWVzc2FnZV9mcmVlXCIsXG4gICAgXCJyZHNfdGNwX2FjY2VwdF9vbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyAoa3JlZikgdG8gc3RydWN0IHJkc19jb25uZWN0aW9uIChjX3JlZmNvdW50KSB0byBwcm9wZXJseSBtYW5hZ2UgY29ubmVjdGlvbiBsaWZldGltZXMgYW5kIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucy4gSXQgcmVmYWN0b3JzIGNvbm5lY3Rpb24gdGVhcmRvd24gaW50byBzeW5jaHJvbm91cyBxdWllc2NlIChyZHNfY29ubl9wYXRoX3F1aWVzY2UsIHJkc19jb25uX2Rlc3Ryb3kpIGFuZCBhc3luY2hyb25vdXMgZGVzdHJ1Y3Rpb24gKHJkc19jb25uX2Rlc3Ryb3lfZmluaSksIGFuZCB1cGRhdGVzIHJlZmVyZW5jZSB0cmFja2luZyBhY3Jvc3Mgc29ja2V0IHJlbGVhc2UsIG1lc3NhZ2UgcXVldWVzLCByZWN2L3NlbmQgcGF0aHMsIGFuZCB0cmFuc3BvcnRzIChUQ1AsIGxvb3AsIElCKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgbG9naWMsIHN5bmNocm9uaXphdGlvbiwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGluIG5ldC9yZHMsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1RDUFwiLFxuICAgIFwiUkRTX1JETUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3Jkc19jb25uX2NyZWF0ZVwiLFxuICAgIFwicmRzX2Nvbm5fZGVzdHJveVwiLFxuICAgIFwicmRzX2Nvbm5fZGVzdHJveV9maW5pXCIsXG4gICAgXCJyZHNfY29ubl9nZXRcIixcbiAgICBcInJkc19jb25uX3B1dFwiLFxuICAgIFwicmRzX2Nvbm5fbG9va3VwXCIsXG4gICAgXCJyZHNfc2VuZG1zZ1wiLFxuICAgIFwicmRzX3JlY3ZfaW5jb21pbmdcIixcbiAgICBcInJkc19pbmNfcHV0XCIsXG4gICAgXCJyZHNfbWVzc2FnZV9mcmVlXCIsXG4gICAgXCJyZHNfdGNwX2FjY2VwdF9vbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmVyZW5jZSBjb3VudGluZyAoa3JlZikgdG8gc3RydWN0IHJkc19jb25uZWN0aW9uIChjX3JlZmNvdW50KSB0byBwcm9wZXJseSBtYW5hZ2UgY29ubmVjdGlvbiBsaWZldGltZXMgYW5kIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYW5kIHJhY2UgY29uZGl0aW9ucy4gSXQgcmVmYWN0b3JzIGNvbm5lY3Rpb24gdGVhcmRvd24gaW50byBzeW5jaHJvbm91cyBxdWllc2NlIChyZHNfY29ubl9wYXRoX3F1aWVzY2UsIHJkc19jb25uX2Rlc3Ryb3kpIGFuZCBhc3luY2hyb25vdXMgZGVzdHJ1Y3Rpb24gKHJkc19jb25uX2Rlc3Ryb3lfZmluaSksIGFuZCB1cGRhdGVzIHJlZmVyZW5jZSB0cmFja2luZyBhY3Jvc3Mgc29ja2V0IHJlbGVhc2UsIG1lc3NhZ2UgcXVldWVzLCByZWN2L3NlbmQgcGF0aHMsIGFuZCB0cmFuc3BvcnRzIChUQ1AsIGxvb3AsIElCKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgbG9naWMsIHN5bmNocm9uaXphdGlvbiwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGluIG5ldC9yZHMsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo1MS41MDE0NDAxMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjk3OTQ2MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6NTEuNTAxOTczMTI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUyOTc0MDg3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSBvZiBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBhY3Jvc3MgdGhlIFJEUyBzdWJzeXN0ZW0gKGluY2x1ZGluZyBUQ1AsIElCLCBhbmQgbG9vcGJhY2sgdHJhbnNwb3J0cykgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgbW9kdWxlLXVubG9hZCByYWNlcy5cXG5cXG4tIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHJlZmNvdW50IGltYmFsYW5jZSwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBkZWFkbG9jayBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLCBTTFVCIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuXFxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gaW5mby1sZWFrIHJpc2spLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgc2l6aW5nIG9yIGJvdW5kcyBjaGVja2luZywgYW5kIGBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb25gIG9iamVjdHMgY29udGludWUgdG8gYmUgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoZnVsbHkgemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAwMTVlMTg2ZTU0ZTM1OTNkZjZmZmEwMDczMWFlYTA5YTkxOGFkMjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE1OjU2OjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9hZl9yZHMuYyBiL25ldC9yZHMvYWZfcmRzLmNcbmluZGV4IGQ1ZGVmZTkxNzJlMzYuLjBlYWE1Yjk3NjU3MjQgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2FmX3Jkcy5jXG4rKysgYi9uZXQvcmRzL2FmX3Jkcy5jXG5AQCAtODAsNiArODAsMTQgQEAgc3RhdGljIGludCByZHNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIFx0cmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIE5VTEwpO1xuIFx0cmRzX25vdGlmeV9tc2dfemNvcHlfcHVyZ2UoXHUwMDI2cnMtXHUwMDNlcnNfemNvb2tpZV9xdWV1ZSk7XG4gXG4rXHQvKiBkcm9wIHRoZSBjYWNoZWQgY29ubmVjdGlvbiByZWZlcmVuY2U7IG5vIHNlbmRtc2cgY2FuIHJhY2VcbitcdCAqIHdpdGggdXMgaGVyZSwgdGhlIHNvY2tldCBpcyBnb2luZyBhd2F5XG4rXHQgKi9cbitcdGlmIChycy1cdTAwM2Vyc19jb25uKSB7XG4rXHRcdHJkc19jb25uX3B1dChycy1cdTAwM2Vyc19jb25uKTtcbitcdFx0cnMtXHUwMDNlcnNfY29ubiA9IE5VTEw7XG4rXHR9XG4rXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2cmRzX3NvY2tfbG9jayk7XG4gXHRsaXN0X2RlbF9pbml0KFx1MDAyNnJzLVx1MDAzZXJzX2l0ZW0pO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cmRzX3NvY2tfbG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xuaW5kZXggYjZjNGJlYjUwZWFmMC4uMmM4Y2E1NGE5MWNhOCAxMDA2NDRcbi0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jXG4rKysgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xuQEAgLTQ3LDcgKzQ3LDggQEBcbiBcbiAvKiBjb252ZXJ0aW5nIHRoaXMgdG8gUkNVIGlzIGEgY2hvcmUgZm9yIGFub3RoZXIgZGF5Li4gKi9cbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25uX2xvY2spO1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19jb25uX2NvdW50O1xuKy8qIHdva2VuIHdoZW5ldmVyIGEgdHJhbnNwb3J0J3MgdF9jb25uX2NvdW50IGRyb3BzIHRvIHplcm8gKi9cbitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmRzX2Nvbm5fZnJlZWRfd2FpdHEpO1xuIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCByZHNfY29ubl9oYXNoW1JEU19DT05ORUNUSU9OX0hBU0hfRU5UUklFU107XG4gc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfY29ubl9zbGFiO1xuIFxuQEAgLTc5LDcgKzgwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqcmRzX2Nvbm5fYnVja2V0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsXG4gXHRcdHZhciB8PSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfIyNzdWZmaXg7XHRcXFxuIH0gd2hpbGUgKDApXG4gXG4tLyogcmN1IHJlYWQgbG9jayBtdXN0IGJlIGhlbGQgb3IgdGhlIGNvbm5lY3Rpb24gc3BpbmxvY2sgKi9cbisvKiByY3UgcmVhZCBsb2NrIG11c3QgYmUgaGVsZCBvciB0aGUgY29ubmVjdGlvbiBzcGlubG9jay5cbisgKiBPbiBzdWNjZXNzIGEgcmVmZXJlbmNlIGlzIHRha2VuIG9uIHRoZSByZXR1cm5lZCBjb25uZWN0aW9uOyB0aGVcbisgKiBjYWxsZXIgbXVzdCBkcm9wIGl0IHdpdGggcmRzX2Nvbm5fcHV0KCkuXG4rICovXG4gc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsXG4gXHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsXG5AQCAtOTYsNiArMTAwLDEzIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdCAgICBjb25uLVx1MDAzZWNfdG9zID09IHRvcyBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIG5ldCA9PSByZHNfY29ubl9uZXQoY29ubikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBjb25uLVx1MDAzZWNfZGV2X2lmID09IGRldl9pZikge1xuK1x0XHRcdC8qIEFuIGVudHJ5IHdob3NlIHJlZmNvdW50IGFscmVhZHkgZHJvcHBlZCB0b1xuK1x0XHRcdCAqIHplcm8gaGFzIGJlZW4gdW5oYXNoZWQgYW5kIGlzIGFib3V0IHRvIGJlXG4rXHRcdFx0ICogZnJlZWQ7IGFuIFJDVSB0cmF2ZXJzYWwgbWF5IHN0aWxsIGNvbWVcbitcdFx0XHQgKiBhY3Jvc3MgaXQuICBUcmVhdCBpdCBhcyBhYnNlbnQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZjb25uLVx1MDAzZWNfcmVmY291bnQpKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmV0ID0gY29ubjtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTE5Nyw3ICsyMDgsMTQgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqX19yZHNfY29ubl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHQgKiBXZSBuZWVkIGEgc2Vjb25kIGNvbm5lY3Rpb24gb2JqZWN0IGludG8gd2hpY2ggd2VcbiBcdFx0ICogY2FuIHN0aWNrIHRoZSBvdGhlciBRUC4gKi9cbiBcdFx0cGFyZW50ID0gY29ubjtcbitcdFx0LyogVGhlIGNfcGFzc2l2ZSBwb2ludGVyIGhvbGRzIGEgcmVmZXJlbmNlIHdoaWNoIGlzIG9ubHlcbitcdFx0ICogZHJvcHBlZCBvbmUgc3luY2hyb25pemVfcmN1KCkgYWZ0ZXIgdGhlIHBvaW50ZXIgaXNcbitcdFx0ICogY2xlYXJlZCwgc28gd2l0aGluIHRoaXMgUkNVIHNlY3Rpb24gYSBmZXRjaGVkIHBvaW50ZXJcbitcdFx0ICogaXMgYWx3YXlzIHNhZmUgdG8gdGFrZSBhIHJlZmVyZW5jZSBvbi5cbitcdFx0ICovXG4gXHRcdGNvbm4gPSBwYXJlbnQtXHUwMDNlY19wYXNzaXZlO1xuK1x0XHRpZiAoY29ubilcbitcdFx0XHRyZHNfY29ubl9nZXQoY29ubik7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChjb25uKVxuQEAgLTIxNSw2ICsyMzMsNyBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0a3JlZl9pbml0KFx1MDAyNmNvbm4tXHUwMDNlY19yZWZjb3VudCk7XG4gXHRJTklUX0hMSVNUX05PREUoXHUwMDI2Y29ubi1cdTAwM2VjX2hhc2hfbm9kZSk7XG4gXHRjb25uLVx1MDAzZWNfbGFkZHIgPSAqbGFkZHI7XG4gXHRjb25uLVx1MDAzZWNfaXN2NiA9ICFpcHY2X2FkZHJfdjRtYXBwZWQobGFkZHIpO1xuQEAgLTI4Miw4ICszMDEsOSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgIGlzX291dGdvaW5nKTtcbiBcdFx0Y29ubi1cdTAwM2VjX3BhdGhbaV0uY3BfaW5kZXggPSBpO1xuIFx0XHRjb25uLVx1MDAzZWNfcGF0aFtpXS5jcF93cSA9XG4tXHRcdFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCJrcmRzX2NwX3dxIyVsdS8lZFwiLCAwLFxuLVx0XHRcdFx0XHRcdHJkc19jb25uX2NvdW50LCBpKTtcbitcdFx0XHRhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcImtyZHNfY3Bfd3EjJWQvJWRcIiwgMCxcbitcdFx0XHRcdFx0XHRhdG9taWNfcmVhZChcdTAwMjZ0cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpLFxuK1x0XHRcdFx0XHRcdGkpO1xuIFx0XHRpZiAoIWNvbm4tXHUwMDNlY19wYXRoW2ldLmNwX3dxKVxuIFx0XHRcdGNvbm4tXHUwMDNlY19wYXRoW2ldLmNwX3dxID0gcmRzX3dxO1xuIFx0fVxuQEAgLTMxNSwxNSArMzM1LDM1IEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJkc19jb25uX2xvY2ssIGZsYWdzKTtcbiBcdGlmIChwYXJlbnQpIHtcbiBcdFx0LyogQ3JlYXRpbmcgcGFzc2l2ZSBjb25uICovXG4tXHRcdGlmIChwYXJlbnQtXHUwMDNlY19wYXNzaXZlKSB7XG4rXHRcdGlmIChSRUFEX09OQ0UocGFyZW50LVx1MDAzZWNfZGVzdHJveV9pbl9wcm9nKSkge1xuK1x0XHRcdC8qIFRoZSBwYXJlbnQncyBkZXN0cm95IGhhcyBiZWd1biAoaXQgc2V0cyB0aGVcbitcdFx0XHQgKiBmbGFnIGFuZCBzbmF0Y2hlcyBjX3Bhc3NpdmUgdW5kZXIgdGhpc1xuK1x0XHRcdCAqIGxvY2spOyBkbyBub3QgaW5zdGFsbCBhIG5ldyBwYXNzaXZlIGNvbm5cbitcdFx0XHQgKiB0aGF0IG5vdGhpbmcgd291bGQgZXZlciBkZXN0cm95LlxuK1x0XHRcdCAqL1xuK1x0XHRcdHRyYW5zLVx1MDAzZWNvbm5fZnJlZShjb25uLVx1MDAzZWNfcGF0aFswXS5jcF90cmFuc3BvcnRfZGF0YSk7XG4rXHRcdFx0ZnJlZV9jcCA9IGNvbm4tXHUwMDNlY19wYXRoO1xuK1x0XHRcdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcbitcdFx0XHRjb25uID0gRVJSX1BUUigtRU5FVERPV04pO1xuK1x0XHR9IGVsc2UgaWYgKHBhcmVudC1cdTAwM2VjX3Bhc3NpdmUpIHtcbitcdFx0XHRyZHNfY29ubl9nZXQocGFyZW50LVx1MDAzZWNfcGFzc2l2ZSk7XG4gXHRcdFx0dHJhbnMtXHUwMDNlY29ubl9mcmVlKGNvbm4tXHUwMDNlY19wYXRoWzBdLmNwX3RyYW5zcG9ydF9kYXRhKTtcbiBcdFx0XHRmcmVlX2NwID0gY29ubi1cdTAwM2VjX3BhdGg7XG4gXHRcdFx0a21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pO1xuIFx0XHRcdGNvbm4gPSBwYXJlbnQtXHUwMDNlY19wYXNzaXZlO1xuIFx0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIFRoZSBpbml0aWFsIHJlZmVyZW5jZSBiZWxvbmdzIHRvIHdob2V2ZXJcbitcdFx0XHQgKiBkZXN0cm95cyB0aGUgY29ubiAodGhlIHRyYW5zcG9ydCdzIGNvbm5cbitcdFx0XHQgKiBsaXN0cywgYXMgZm9yIGFueSBvdGhlciBjb25uKS4gIFRha2Ugb25lXG4rXHRcdFx0ICogZm9yIHRoZSBjX3Bhc3NpdmUgcG9pbnRlciAtIGRyb3BwZWQgd2hlblxuK1x0XHRcdCAqIHRoZSBwYXJlbnQgaXMgZGVzdHJveWVkIC0gYW5kIG9uZSBmb3Igb3VyXG4rXHRcdFx0ICogY2FsbGVyLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJkc19jb25uX2dldChjb25uKTtcdC8qIGNfcGFzc2l2ZSAqL1xuK1x0XHRcdHJkc19jb25uX2dldChjb25uKTtcdC8qIGNhbGxlciAqL1xuIFx0XHRcdHBhcmVudC1cdTAwM2VjX3Bhc3NpdmUgPSBjb25uO1xuIFx0XHRcdHJkc19jb25nX2FkZF9jb25uKGNvbm4pO1xuLVx0XHRcdHJkc19jb25uX2NvdW50Kys7XG4rXHRcdFx0YXRvbWljX2luYyhcdTAwMjZjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNldF9jb25uX2NvdW50KTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LyogQ3JlYXRpbmcgbm9ybWFsIGNvbm4gKi9cbkBAIC0zNTAsMTUgKzM5MCwyMSBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0Y29ubi1cdTAwM2VjX215X2dlbl9udW0gPSByZHNfZ2VuX251bTtcbiBcdFx0XHRjb25uLVx1MDAzZWNfcGVlcl9nZW5fbnVtID0gMDtcbitcdFx0XHQvKiB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYmVsb25ncyB0byB3aG9ldmVyXG4rXHRcdFx0ICogZGVzdHJveXMgdGhlIGNvbm47IHRha2Ugb25lIGZvciBvdXIgY2FsbGVyXG4rXHRcdFx0ICovXG4rXHRcdFx0cmRzX2Nvbm5fZ2V0KGNvbm4pO1xuIFx0XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZjb25uLVx1MDAzZWNfaGFzaF9ub2RlLCBoZWFkKTtcbiBcdFx0XHRyZHNfY29uZ19hZGRfY29ubihjb25uKTtcbi1cdFx0XHRyZHNfY29ubl9jb3VudCsrO1xuK1x0XHRcdGF0b21pY19pbmMoXHUwMDI2Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfY29ubl9jb3VudCk7XG4gXHRcdH1cbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gb3V0OlxuK1x0aWYgKHBhcmVudClcbitcdFx0cmRzX2Nvbm5fcHV0KHBhcmVudCk7XG4gXHRpZiAoZnJlZV9jcCkge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGF0aHM7IGkrKylcbiBcdFx0XHRpZiAoZnJlZV9jcFtpXS5jcF93cSAhPSByZHNfd3EpXG5AQCAtNTE1LDEwICs1NjEsMTIgQEAgdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRcdGNvbm4tXHUwMDNlY190cmFucy1cdTAwM2Vjb25uX3Nsb3RzX2F2YWlsYWJsZShjb25uLCBmYWxzZSk7XG4gfVxuIFxuLS8qIGRlc3Ryb3kgYSBzaW5nbGUgcmRzX2Nvbm5fcGF0aC4gcmRzX2Nvbm5fZGVzdHJveSgpIGl0ZXJhdGVzIG92ZXJcbi0gKiBhbGwgcGF0aHMgdXNpbmcgcmRzX2Nvbm5fcGF0aF9kZXN0cm95KClcbisvKiBxdWllc2NlIGEgc2luZ2xlIHJkc19jb25uX3BhdGg6IHNodXQgaXQgZG93biBhbmQgdGVhciBkb3duIGFueVxuKyAqIHF1ZXVlZCBtZXNzYWdlcy4gIHJkc19jb25uX2Rlc3Ryb3koKSBpdGVyYXRlcyBvdmVyIGFsbCBwYXRocyB1c2luZ1xuKyAqIHJkc19jb25uX3BhdGhfcXVpZXNjZSgpOyB0aGUgdHJhbnNwb3J0IHN0YXRlIGFuZCB0aGUgd29ya3F1ZXVlIGFyZVxuKyAqIGZyZWVkIGxhdGVyLCBmcm9tIHJkc19jb25uX3BhdGhfZnJlZSgpLlxuICAqL1xuLXN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4rc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9xdWllc2NlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiB7XG4gXHRzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqcnRtcDtcbiBcbkBAIC01NDcsNiArNTk1LDE2IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRXQVJOX09OKGRlbGF5ZWRfd29ya19wZW5kaW5nKFx1MDAyNmNwLVx1MDAzZWNwX3JlY3ZfdykpO1xuIFx0V0FSTl9PTihkZWxheWVkX3dvcmtfcGVuZGluZyhcdTAwMjZjcC1cdTAwM2VjcF9jb25uX3cpKTtcbiBcdFdBUk5fT04od29ya19wZW5kaW5nKFx1MDAyNmNwLVx1MDAzZWNwX2Rvd25fdykpO1xuK31cbitcbisvKiBmcmVlIGEgcXVpZXNjZWQgcmRzX2Nvbm5fcGF0aCdzIHRyYW5zcG9ydCBzdGF0ZSBhbmQgd29ya3F1ZXVlOyBydW5zXG4rICogZnJvbSByZHNfY29ubl9kZXN0cm95X2ZpbmkoKSBvbmNlIHRoZSBsYXN0IGNvbm5lY3Rpb24gcmVmZXJlbmNlIGlzXG4rICogZHJvcHBlZC5cbisgKi9cbitzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX2ZyZWUoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuK3tcbitcdGlmICghY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGEpXG4rXHRcdHJldHVybjtcbiBcbiBcdGlmIChjcC1cdTAwM2VjcF93cSAhPSByZHNfd3EpIHtcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoY3AtXHUwMDNlY3Bfd3EpO1xuQEAgLTU1NiwxNyArNjE0LDc0IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRjcC1cdTAwM2VjcF9jb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNlY29ubl9mcmVlKGNwLVx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhKTtcbiB9XG4gXG4rLyogRnJlZSBhIGNvbm5lY3Rpb24uICBUaGlzIHJ1bnMgZnJvbSByZHNfY29ubl9wdXQoKSB3aGVuIHRoZSBsYXN0XG4rICogcmVmZXJlbmNlIGlzIGRyb3BwZWQsIGFmdGVyIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgdGhlXG4rICogY29ubmVjdGlvbiBhbmQgZHJvcHBlZCB0aGUgaW5pdGlhbCByZWZlcmVuY2UuXG4rICovXG4rc3RhdGljIHZvaWQgcmRzX2Nvbm5fZGVzdHJveV9maW5pKHN0cnVjdCBrcmVmICprcmVmKVxuK3tcbitcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sXG4rXHRcdFx0XHRcdFx0ICAgY19yZWZjb3VudCk7XG4rXHRpbnQgbnBhdGhzID0gKGNvbm4tXHUwMDNlY190cmFucy1cdTAwM2V0X21wX2NhcGFibGUgPyBSRFNfTVBBVEhfV09SS0VSUyA6IDEpO1xuK1x0c3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zID0gY29ubi1cdTAwM2VjX3RyYW5zO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGF0aHM7IGkrKylcbitcdFx0cmRzX2Nvbm5fcGF0aF9mcmVlKFx1MDAyNmNvbm4tXHUwMDNlY19wYXRoW2ldKTtcbitcbitcdGtmcmVlKGNvbm4tXHUwMDNlY19wYXRoKTtcbitcdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcbitcbitcdC8qIG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyB0aGUgdHJhbnNwb3J0IG1vZHVsZSBvd25zIGhhcyBiZWVuXG4rXHQgKiBmcmVlZCBhYm92ZSBtYXkgaXRzIHVubG9hZCBwcm9jZWVkXG4rXHQgKi9cbitcdGlmICghYXRvbWljX2RlY19yZXR1cm4oXHUwMDI2dHJhbnMtXHUwMDNldF9jb25uX2NvdW50KSlcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2cmRzX2Nvbm5fZnJlZWRfd2FpdHEpO1xuK31cbitcbisvKiBXYWl0IGZvciBhbGwgb2YgQHRyYW5zJ3MgY29ubmVjdGlvbnMgdG8gYmUgZnJlZWQ7IHRoZSBmcmVlIHJ1bnNcbisgKiBhc3luY2hyb25vdXNseSBvbmNlIHJkc19jb25uX2Rlc3Ryb3koKSBoYXMgcXVpZXNjZWQgYSBjb25uZWN0aW9uLlxuKyAqIENhbGxlZCBvbiB0cmFuc3BvcnQgbW9kdWxlIHVubG9hZCwgYWZ0ZXIgdGhlIHRyYW5zcG9ydCBkZXN0cm95ZWRcbisgKiBhbGwgb2YgaXRzIGNvbm5lY3Rpb25zOiBhbnl0aGluZyBzdGlsbCBob2xkaW5nIGEgY29ubmVjdGlvblxuKyAqIHJlZmVyZW5jZSBhdCB0aGF0IHBvaW50IGlzIGEgc2hvcnQtbGl2ZWQgbG9va3VwLXN0eWxlIGhvbGRlciwgc29cbisgKiBhIGJvdW5kZWQgd2FpdCBzdWZmaWNlcyAtIGJ1dCB3YXJuIGlmIGl0IGV4cGlyZXMsIHNpbmNlIHRoZSBmcmVlc1xuKyAqIHRoYXQgZm9sbG93IHRoZSB1bmxvYWQgd2lsbCB0aGVuIHRvdWNoIGZyZWVkIG1vZHVsZSB0ZXh0LlxuKyAqL1xuK3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpXG4re1xuK1x0aWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQocmRzX2Nvbm5fZnJlZWRfd2FpdHEsXG4rXHRcdFx0XHQhYXRvbWljX3JlYWQoXHUwMDI2dHJhbnMtXHUwMDNldF9jb25uX2NvdW50KSxcbitcdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoUkRTX0NPTk5fRlJFRV9USU1FT1VUX01TKSkpXG4rXHRcdFdBUk4oMSwgXCJSRFMvJXM6ICVkIGNvbm5lY3Rpb24ocykgbm90IGZyZWVkXFxuXCIsXG4rXHRcdCAgICAgdHJhbnMtXHUwMDNldF9uYW1lLCBhdG9taWNfcmVhZChcdTAwMjZ0cmFucy1cdTAwM2V0X2Nvbm5fY291bnQpKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZCk7XG4rXG4rdm9pZCByZHNfY29ubl9nZXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuK3tcbitcdGtyZWZfZ2V0KFx1MDAyNmNvbm4tXHUwMDNlY19yZWZjb3VudCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2dldCk7XG4rXG4rdm9pZCByZHNfY29ubl9wdXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuK3tcbitcdGtyZWZfcHV0KFx1MDAyNmNvbm4tXHUwMDNlY19yZWZjb3VudCwgcmRzX2Nvbm5fZGVzdHJveV9maW5pKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fcHV0KTtcbitcbiAvKlxuICAqIFN0b3AgYW5kIGZyZWUgYSBjb25uZWN0aW9uLlxuICAqXG4tICogVGhpcyBjYW4gb25seSBiZSB1c2VkIGluIHZlcnkgbGltaXRlZCBjaXJjdW1zdGFuY2VzLiAgSXQgYXNzdW1lcyB0aGF0IG9uY2Vcbi0gKiB0aGUgY29ubiBoYXMgYmVlbiBzaHV0ZG93biB0aGF0IG5vIG9uZSBlbHNlIGlzIHJlZmVyZW5jaW5nIHRoZSBjb25uZWN0aW9uLlxuLSAqIFdlIGNhbiBvbmx5IGVuc3VyZSB0aGlzIGluIHRoZSBybW1vZCBwYXRoIGluIHRoZSBjdXJyZW50IGNvZGUuXG4rICogUXVpZXNjZXMgdGhlIGNvbm5lY3Rpb24gc3luY2hyb25vdXNseSAod29ya2VycyBjYW5jZWxsZWQsIHRyYW5zcG9ydFxuKyAqIGNvbm5lY3Rpb25zIHNodXQgZG93biwgcXVldWVkIG1lc3NhZ2VzIGRyb3BwZWQpIGFuZCBkcm9wcyB0aGVcbisgKiBpbml0aWFsIHJlZmVyZW5jZS4gIFRoZSBtZW1vcnkgLSBpbmNsdWRpbmcgdGhlIHRyYW5zcG9ydCdzXG4rICogcGVyLWNvbm5lY3Rpb24gc3RhdGUgYW5kIHRoZSBwYXRoIHdvcmtxdWV1ZXMgLSBpcyBmcmVlZCBvbmNlIHRoZVxuKyAqIGxhc3QgcmRzX2Nvbm5fcHV0KCkgcnVucywgd2hpY2ggbWF5IGJlIGFmdGVyIHRoaXMgcmV0dXJucy5cbiAgKi9cbiB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgaTtcbitcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcGFzc2l2ZTtcbiBcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcDtcbiBcdGludCBucGF0aHMgPSAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSA/IFJEU19NUEFUSF9XT1JLRVJTIDogMSk7XG4gXG5AQCAtNTc0LDE2ICs2ODksNDYgQEAgdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbiBcdFx0IFwiJXBJNFxcblwiLCBjb25uLCBcdTAwMjZjb25uLVx1MDAzZWNfbGFkZHIsXG4gXHRcdCBcdTAwMjZjb25uLVx1MDAzZWNfZmFkZHIpO1xuIFxuLVx0LyogRW5zdXJlIGNvbm4gd2lsbCBub3QgYmUgc2NoZWR1bGVkIGZvciByZWNvbm5lY3QgKi9cbitcdC8qIE1ha2UgcmRzX2Rlc3Ryb3lfcGVuZGluZygpIHRydWUgZm9yIHRoaXMgY29ubi4gIFRvZ2V0aGVyIHdpdGhcbitcdCAqIHRoZSBzeW5jaHJvbml6ZV9yY3UoKSBiZWxvdyB0aGlzIHN0b3BzIHRoZSB3b3JrLXJlcXVldWVpbmdcbitcdCAqIHNpdGVzICh3aGljaCBhbGwgdGVzdCByZHNfZGVzdHJveV9wZW5kaW5nKCkgdW5kZXJcbitcdCAqIHJjdV9yZWFkX2xvY2soKSkgZnJvbSBxdWV1ZWluZyBuZXcgd29yayBvbiB0aGUgcGF0aFxuK1x0ICogd29ya3F1ZXVlcyBvbmNlIHdlIHN0YXJ0IGNhbmNlbGxpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlbS5cbitcdCAqXG4rXHQgKiBOb3cgdGhhdCB0aGUgdHJhbnNwb3J0IHN0YXRlIHN0YXlzIGRpc2NvdmVyYWJsZSAoZS5nLiBvbiB0aGVcbitcdCAqIHRyYW5zcG9ydHMnIGNvbm5lY3Rpb24gbGlzdHMpIHVudGlsIHRoZSBmaW5hbCByZHNfY29ubl9wdXQoKSxcbitcdCAqIGEgY29ubiBjYW4gYmUgaGFuZGVkIHRvIHJkc19jb25uX2Rlc3Ryb3koKSBtb3JlIHRoYW4gb25jZSAtXG4rXHQgKiBlLmcuIGRyb3BwZWQgZm9yIGEgcHJvdG9jb2wgdmVyc2lvbiBtaXNtYXRjaCBhbmQgdGhlbiBmb3VuZFxuK1x0ICogYWdhaW4gYXQgbW9kdWxlIHVubG9hZC4gIE9ubHkgdGhlIGZpcnN0IGNhbGxlciBwcm9jZWVkczsgdGhlXG4rXHQgKiB1bmhhc2ggYWxzbyBoYXBwZW5zIHVuZGVyIHJkc19jb25uX2xvY2ssIHNvIGEgbG9va2VkLXVwIGNvbm5cbitcdCAqIGNhbiBuZXZlciBiZSBxdWllc2NlZCB0d2ljZS5cbitcdCAqL1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZyZHNfY29ubl9sb2NrKTtcbitcdGlmIChjb25uLVx1MDAzZWNfZGVzdHJveV9pbl9wcm9nKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyZHNfY29ubl9sb2NrKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0V1JJVEVfT05DRShjb25uLVx1MDAzZWNfZGVzdHJveV9pbl9wcm9nLCB0cnVlKTtcbitcbitcdC8qIEVuc3VyZSBjb25uIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBmb3IgcmVjb25uZWN0ICovXG4gXHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2Y29ubi1cdTAwM2VjX2hhc2hfbm9kZSk7XG4rXG4rXHQvKiBTbmF0Y2ggY19wYXNzaXZlIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2s6XG4rXHQgKiBfX3Jkc19jb25uX2NyZWF0ZSgpIGRlcmVmZXJlbmNlcyBpdCB1bmRlciByY3VfcmVhZF9sb2NrKClcbitcdCAqIChhbmQgcmVmdXNlcyB0byBpbnN0YWxsIGEgbmV3IG9uZSBvbmNlIGNfZGVzdHJveV9pbl9wcm9nIGlzXG4rXHQgKiBzZXQsIHdoaWNoIGl0IGNoZWNrcyB1bmRlciB0aGlzIGxvY2spLiAgQWZ0ZXIgdGhlXG4rXHQgKiBzeW5jaHJvbml6ZV9yY3UoKSBiZWxvdyBubyBvbmUgY2FuIHBpY2sgdGhlIHBvaW50ZXIgdXAgYW55XG4rXHQgKiBtb3JlIGFuZCBpdHMgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkLlxuK1x0ICovXG4rXHRwYXNzaXZlID0gY29ubi1cdTAwM2VjX3Bhc3NpdmU7XG4rXHRjb25uLVx1MDAzZWNfcGFzc2l2ZSA9IE5VTEw7XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2cmRzX2Nvbm5fbG9jayk7XG4gXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiBcbiBcdC8qIHNodXQgdGhlIGNvbm5lY3Rpb24gZG93biAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhdGhzOyBpKyspIHtcbiBcdFx0Y3AgPSBcdTAwMjZjb25uLVx1MDAzZWNfcGF0aFtpXTtcbi1cdFx0cmRzX2Nvbm5fcGF0aF9kZXN0cm95KGNwKTtcbitcdFx0cmRzX2Nvbm5fcGF0aF9xdWllc2NlKGNwKTtcbiBcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNmNwLVx1MDAzZWNwX3JldHJhbnMpKTtcbiBcdH1cbiBcbkBAIC01OTQsMTIgKzczOSwxNCBAQCB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIFx0ICovXG4gXHRyZHNfY29uZ19yZW1vdmVfY29ubihjb25uKTtcbiBcbi1cdGtmcmVlKGNvbm4tXHUwMDNlY19wYXRoKTtcbi1cdGttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTtcbitcdC8qIGRyb3AgdGhlIHJlZmVyZW5jZSBvdXIgY19wYXNzaXZlIHBvaW50ZXIgaGVsZCwgaWYgYW55ICovXG4rXHRpZiAocGFzc2l2ZSlcbitcdFx0cmRzX2Nvbm5fcHV0KHBhc3NpdmUpO1xuIFxuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuLVx0cmRzX2Nvbm5fY291bnQtLTtcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cmRzX2Nvbm5fbG9jaywgZmxhZ3MpO1xuK1x0LyogZHJvcCB0aGUgaW5pdGlhbCByZWZlcmVuY2U7IHRoZSBjb25uZWN0aW9uIGlzIGZyZWVkIGZyb21cbitcdCAqIHJkc19jb25uX2Rlc3Ryb3lfZmluaSgpIG9uY2UgZXZlcnkgaG9sZGVyIGhhcyBkcm9wcGVkIHRoZWlyc1xuK1x0ICovXG4rXHRyZHNfY29ubl9wdXQoY29ubik7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2Rlc3Ryb3kpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuYyBiL25ldC9yZHMvaWIuY1xuaW5kZXggNzg2ZjM5MTY5YmMxNC4uNzU1NjkwNTgzMzI1OSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWIuY1xuKysrIGIvbmV0L3Jkcy9pYi5jXG5AQCAtNTI1LDEwICs1MjUsNyBAQCBzdGF0aWMgdm9pZCByZHNfaWJfc2V0X3VubG9hZGluZyh2b2lkKVxuIFxuIHN0YXRpYyBib29sIHJkc19pYl9pc191bmxvYWRpbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIHtcbi1cdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCA9IFx1MDAyNmNvbm4tXHUwMDNlY19wYXRoWzBdO1xuLVxuLVx0cmV0dXJuICh0ZXN0X2JpdChSRFNfREVTVFJPWV9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykgfHxcbi1cdFx0YXRvbWljX3JlYWQoXHUwMDI2cmRzX2liX3VubG9hZGluZykgIT0gMCk7XG4rXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2cmRzX2liX3VubG9hZGluZykgIT0gMDtcbiB9XG4gXG4gdm9pZCByZHNfaWJfZXhpdCh2b2lkKVxuQEAgLTU0MSw2ICs1MzgsMTUgQEAgdm9pZCByZHNfaWJfZXhpdCh2b2lkKVxuICNlbmRpZlxuIFx0cmRzX2liX3VucmVnaXN0ZXJfY2xpZW50KCk7XG4gXHRyZHNfaWJfZGVzdHJveV9ub2Rldl9jb25ucygpO1xuK1x0cmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChcdTAwMjZyZHNfaWJfdHJhbnNwb3J0KTtcbitcbitcdC8qIFRlYXJpbmcgZG93biB0aGUgbGFzdCBjb25uZWN0aW9uIG1heSBoYXZlIGRyb3BwZWQgdGhlIGZpbmFsXG4rXHQgKiByZWZlcmVuY2Ugb24gYSBkZXZpY2UsIGRlZmVycmluZyByZHNfaWJfZGV2X2ZyZWUoKSB0byByZHNfd3EuXG4rXHQgKiBEcmFpbiBpdCBiZWZvcmUgdGhlIG1vZHVsZSBnb2VzIGF3YXk7IGl0IHF1ZXVlcyBub3RoaW5nXG4rXHQgKiBmdXJ0aGVyIG9uIHJkc193cS5cbitcdCAqL1xuK1x0Zmx1c2hfd29ya3F1ZXVlKHJkc193cSk7XG4rXG4gXHRyZHNfaWJfc3lzY3RsX2V4aXQoKTtcbiBcdHJkc19pYl9yZWN2X2V4aXQoKTtcbiBcdHJkc190cmFuc191bnJlZ2lzdGVyKFx1MDAyNnJkc19pYl90cmFuc3BvcnQpO1xuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfY20uYyBiL25ldC9yZHMvaWJfY20uY1xuaW5kZXggNGZlYjBlZGMzNjBjOC4uMjRlNTM4YzI1M2E3YSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWJfY20uY1xuKysrIGIvbmV0L3Jkcy9pYl9jbS5jXG5AQCAtOTI0LDggKzkyNCwxNCBAQCBpbnQgcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCxcbiBcdFx0cmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgXCJyZG1hX2FjY2VwdCBmYWlsZWRcXG5cIik7XG4gXG4gb3V0OlxuLVx0aWYgKGNvbm4pXG4rXHRpZiAoY29ubikge1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29ubi1cdTAwM2VjX2NtX2xvY2spO1xuK1x0XHQvKiBUaGUgY29ubiBzdGF5cyByZWFjaGFibGUgdGhyb3VnaCBjbV9pZC1cdTAwM2Vjb250ZXh0XG4rXHRcdCAqIHdpdGhvdXQgYSByZWZlcmVuY2Ugb2YgaXRzIG93bjogY29ubmVjdGlvbiBkZXN0cm95XG4rXHRcdCAqIHNodXRzIHRoZSBjbV9pZCBkb3duIGJlZm9yZSB0aGUgY29ubiBpcyBmcmVlZC5cbitcdFx0ICovXG4rXHRcdHJkc19jb25uX3B1dChjb25uKTtcbitcdH1cbiBcdGlmIChlcnIpXG4gXHRcdHJkbWFfcmVqZWN0KGNtX2lkLCBcdTAwMjZlcnIsIHNpemVvZihpbnQpLFxuIFx0XHRcdCAgICBJQl9DTV9SRUpfQ09OU1VNRVJfREVGSU5FRCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9sb29wLmMgYi9uZXQvcmRzL2xvb3AuY1xuaW5kZXggZTZiMDc1MGJiZWRhYi4uN2RhZjhlZDI1ZDY5YSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvbG9vcC5jXG4rKysgYi9uZXQvcmRzL2xvb3AuY1xuQEAgLTE5NSw2ICsxOTUsOCBAQCB2b2lkIHJkc19sb29wX2V4aXQodm9pZClcbiBcdFx0V0FSTl9PTihsYy1cdTAwM2Vjb25uLVx1MDAzZWNfcGFzc2l2ZSk7XG4gXHRcdHJkc19jb25uX2Rlc3Ryb3kobGMtXHUwMDNlY29ubik7XG4gXHR9XG4rXG4rXHRyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKFx1MDAyNnJkc19sb29wX3RyYW5zcG9ydCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJkc19sb29wX2tpbGxfY29ubnMoc3RydWN0IG5ldCAqbmV0KVxuZGlmZiAtLWdpdCBhL25ldC9yZHMvbWVzc2FnZS5jIGIvbmV0L3Jkcy9tZXNzYWdlLmNcbmluZGV4IGYyNWYyNTkyNTg2ZjcuLjI5ZTk1MDI4ZTYxZTQgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL21lc3NhZ2UuY1xuKysrIGIvbmV0L3Jkcy9tZXNzYWdlLmNcbkBAIC0xODIsNiArMTgyLDE4IEBAIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4gXHRcdGtyZWZfcHV0KFx1MDAyNnJtLVx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVx1MDAzZXJfa3JlZiwgX19yZHNfcHV0X21yX2ZpbmFsKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfZnJlZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuK3tcbitcdC8qIGdldCBpbiByZHNfc2VuZF9xdWV1ZV9ybSgpLCByZHNfc2VuZF9wcm9iZSgpIG9yIHRoZSBjb25nZXN0aW9uXG4rXHQgKiBtYXAgcGF0aCBvZiByZHNfc2VuZF94bWl0KCkuICBNZXNzYWdlcyB0aGF0IHdlcmUgbmV2ZXIgcXVldWVkIG9uXG4rXHQgKiBhIGNvbm5lY3Rpb24gaGF2ZSBubyByZWZlcmVuY2UgdG8gZHJvcC5cbitcdCAqL1xuK1x0aWYgKHJtLVx1MDAzZW1faW5jLmlfY29ubilcbitcdFx0cmRzX2Nvbm5fcHV0KHJtLVx1MDAzZW1faW5jLmlfY29ubik7XG4rXG4rXHRrZnJlZShybSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXG5AQCAtMTkyLDcgKzIwNCw3IEBAIHN0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3VucGluX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRpZiAocm0tXHUwMDNlYXRvbWljLm9wX3VucGluX2RlZmVycmVkKVxuIFx0XHRyZHNfYXRvbWljX29wX3VucGluX3BhZ2UoXHUwMDI2cm0tXHUwMDNlYXRvbWljKTtcbiBcbi1cdGtmcmVlKHJtKTtcbitcdHJkc19tZXNzYWdlX2ZyZWUocm0pO1xuIH1cbiBcbiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuQEAgLTIxNyw3ICsyMjksNyBAQCB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHRrZnJlZShybSk7XG4rXHRcdHJkc19tZXNzYWdlX2ZyZWUocm0pO1xuIFx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChyZHNfbWVzc2FnZV9wdXQpO1xuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRzLmggYi9uZXQvcmRzL3Jkcy5oXG5pbmRleCAyZGI0OTU3M2RhY2Q1Li4zNTc2MGRkNmIwNzdmIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZHMuaFxuKysrIGIvbmV0L3Jkcy9yZHMuaFxuQEAgLTg5LDcgKzg5LDYgQEAgZW51bSB7XG4gI2RlZmluZSBSRFNfUkVDT05ORUNUX1BFTkRJTkdcdDFcbiAjZGVmaW5lIFJEU19JTl9YTUlUXHRcdDJcbiAjZGVmaW5lIFJEU19SRUNWX1JFRklMTFx0XHQzXG4tI2RlZmluZVx0UkRTX0RFU1RST1lfUEVORElOR1x0NFxuIFxuIC8qIE1heCBudW1iZXIgb2YgbXVsdGlwYXRocyBwZXIgUkRTIGNvbm5lY3Rpb24uIE11c3QgYmUgYSBwb3dlciBvZiAyICovXG4gI2RlZmluZVx0UkRTX01QQVRIX1dPUktFUlNcdDhcbkBAIC0xMzgsNiArMTM3LDEyIEBAIHN0cnVjdCByZHNfY29ubl9wYXRoIHtcbiAvKiBPbmUgcmRzX2Nvbm5lY3Rpb24gcGVyIFJEUyBhZGRyZXNzIHBhaXIgKi9cbiBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24ge1xuIFx0c3RydWN0IGhsaXN0X25vZGVcdGNfaGFzaF9ub2RlO1xuK1x0LyogRnJlZSBvZiB0aGUgY29ubmVjdGlvbiBtZW1vcnkgKG5vdCB0aGUgdGVhcmRvd24gb2YgaXRzXG4rXHQgKiB0cmFuc3BvcnQgc3RhdGUgLSB0aGF0IHN0YXlzIHN5bmNocm9ub3VzIGluXG4rXHQgKiByZHNfY29ubl9kZXN0cm95KCkpIGlzIGRlZmVycmVkIHVudGlsIHRoZSBsYXN0IHJlZmVyZW5jZSBpc1xuK1x0ICogZHJvcHBlZCB2aWEgcmRzX2Nvbm5fcHV0KCkuXG4rXHQgKi9cbitcdHN0cnVjdCBrcmVmXHRcdGNfcmVmY291bnQ7XG4gXHRzdHJ1Y3QgaW42X2FkZHJcdFx0Y19sYWRkcjtcbiBcdHN0cnVjdCBpbjZfYWRkclx0XHRjX2ZhZGRyO1xuIFx0aW50XHRcdFx0Y19kZXZfaWY7IC8qIGlmaW5kZXggdXNlZCBmb3IgdGhpcyBjb25uICovXG5AQCAtMTQ4LDYgKzE1MywxMCBAQCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24ge1xuIFx0XHRcdFx0Y19wYWRfdG9fMzI6Mjk7XG4gXHRpbnRcdFx0XHRjX25wYXRocztcbiBcdGJvb2xcdFx0XHRjX3dpdGhfc3BvcnRfaWR4O1xuK1x0LyogU2V0ICh1bmRlciBSQ1UpIHdoZW4gcmRzX2Nvbm5fZGVzdHJveSgpIHN0YXJ0cyBvbiB0aGlzIGNvbm47XG4rXHQgKiByZWFkIHRocm91Z2ggcmRzX2Rlc3Ryb3lfcGVuZGluZygpLlxuK1x0ICovXG4rXHRib29sXHRcdFx0Y19kZXN0cm95X2luX3Byb2c7XG4gXHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb25cdCpjX3Bhc3NpdmU7XG4gXHRzdHJ1Y3QgcmRzX3RyYW5zcG9ydFx0KmNfdHJhbnM7XG4gXG5AQCAtNTQ0LDYgKzU1MywxMiBAQCBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCB7XG4gXHR1bnNpZ25lZCBpbnRcdFx0dF9wcmVmZXJfbG9vcGJhY2s6MSxcbiBcdFx0XHRcdHRfbXBfY2FwYWJsZToxO1xuIFx0dW5zaWduZWQgaW50XHRcdHRfdHlwZTtcbitcdC8qIENvbm5lY3Rpb25zIG9mIHRoaXMgdHJhbnNwb3J0IG5vdCB5ZXQgZnJlZWQ7IGZyZWVpbmcgcnVuc1xuK1x0ICogYXN5bmNocm9ub3VzbHkgb25jZSByZHNfY29ubl9kZXN0cm95KCkgaGFzIHF1aWVzY2VkIGFcbitcdCAqIGNvbm5lY3Rpb24sIHNvIHRyYW5zcG9ydCBtb2R1bGUgdW5sb2FkIGhhcyB0byB3YWl0IGZvciB0aGlzXG4rXHQgKiB0byByZWFjaCB6ZXJvIChyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKCkpLlxuK1x0ICovXG4rXHRhdG9taWNfdFx0XHR0X2Nvbm5fY291bnQ7XG4gXG4gXHRpbnQgKCpsYWRkcl9jaGVjaykoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsXG4gXHRcdFx0ICAgX191MzIgc2NvcGVfaWQpO1xuQEAgLTgxOSw2ICs4MzQsMTEgQEAgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHRcdHU4IHRvcywgZ2ZwX3QgZ2ZwLCBpbnQgZGV2X2lmKTtcbiB2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XG4gdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XG4rdm9pZCByZHNfY29ubl9nZXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcbit2b2lkIHJkc19jb25uX3B1dChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuKy8qIGhvdyBsb25nIHRyYW5zcG9ydCB1bmxvYWQgd2FpdHMgZm9yIGl0cyBjb25uZWN0aW9ucyB0byBiZSBmcmVlZCAqL1xuKyNkZWZpbmUgUkRTX0NPTk5fRlJFRV9USU1FT1VUX01TXHQxMDAwMFxuK3ZvaWQgcmRzX2Nvbm5fd2FpdF9jb25uc19mcmVlZChzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpO1xuIHZvaWQgcmRzX2Nvbm5fZHJvcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuIHZvaWQgcmRzX2Nvbm5fcGF0aF9kcm9wKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCwgYm9vbCBkZXN0cm95KTtcbiB2b2lkIHJkc19jb25uX2Nvbm5lY3RfaWZfZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pO1xuQEAgLTk5NCw3ICsxMDE0LDggQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCByZHNfZGVzdHJveV9wZW5kaW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbiB7XG4tXHRyZXR1cm4gIWNoZWNrX25ldChyZHNfY29ubl9uZXQoY29ubikpIHx8XG4rXHRyZXR1cm4gUkVBRF9PTkNFKGNvbm4tXHUwMDNlY19kZXN0cm95X2luX3Byb2cpIHx8XG4rXHQgICAgICAgIWNoZWNrX25ldChyZHNfY29ubl9uZXQoY29ubikpIHx8XG4gXHQgICAgICAgKGNvbm4tXHUwMDNlY190cmFucy1cdTAwM2V0X3VubG9hZGluZyBcdTAwMjZcdTAwMjYgY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfdW5sb2FkaW5nKGNvbm4pKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZWN2LmMgYi9uZXQvcmRzL3JlY3YuY1xuaW5kZXggNjIwNGU1NzdhOTBhZS4uYjAzMWMwYjQzYWY4MyAxMDA2NDRcbi0tLSBhL25ldC9yZHMvcmVjdi5jXG4rKysgYi9uZXQvcmRzL3JlY3YuY1xuQEAgLTQ2LDYgKzQ2LDcgQEAgdm9pZCByZHNfaW5jX2luaXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sXG4ge1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNmluYy1cdTAwM2VpX3JlZmNvdW50LCAxKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluYy1cdTAwM2VpX2l0ZW0pO1xuK1x0cmRzX2Nvbm5fZ2V0KGNvbm4pO1x0LyogcHV0IGluIHJkc19pbmNfcHV0KCkgKi9cbiBcdGluYy1cdTAwM2VpX2Nvbm4gPSBjb25uO1xuIFx0aW5jLVx1MDAzZWlfY29ubl9wYXRoID0gTlVMTDtcbiBcdGluYy1cdTAwM2VpX3NhZGRyID0gKnNhZGRyO1xuQEAgLTYxLDYgKzYyLDcgQEAgdm9pZCByZHNfaW5jX3BhdGhfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCxcbiB7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2aW5jLVx1MDAzZWlfcmVmY291bnQsIDEpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5jLVx1MDAzZWlfaXRlbSk7XG4rXHRyZHNfY29ubl9nZXQoY3AtXHUwMDNlY3BfY29ubik7XHQvKiBwdXQgaW4gcmRzX2luY19wdXQoKSAqL1xuIFx0aW5jLVx1MDAzZWlfY29ubiA9IGNwLVx1MDAzZWNwX2Nvbm47XG4gXHRpbmMtXHUwMDNlaV9jb25uX3BhdGggPSBjcDtcbiBcdGluYy1cdTAwM2VpX3NhZGRyID0gKnNhZGRyO1xuQEAgLTgxLDkgKzgzLDE5IEBAIHZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKVxuIHtcbiBcdHJkc2RlYnVnKFwicHV0IGluYyAlcCByZWYgJWRcXG5cIiwgaW5jLCByZWZjb3VudF9yZWFkKFx1MDAyNmluYy1cdTAwM2VpX3JlZmNvdW50KSk7XG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmluYy1cdTAwM2VpX3JlZmNvdW50KSkge1xuK1x0XHRzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBpbmMtXHUwMDNlaV9jb25uO1xuK1xuIFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2aW5jLVx1MDAzZWlfaXRlbSkpO1xuIFxuLVx0XHRpbmMtXHUwMDNlaV9jb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNlaW5jX2ZyZWUoaW5jKTtcbitcdFx0LyogaW5jX2ZyZWUoKSBjYW4gZnJlZSB0aGUgbWVtb3J5IEBpbmMgbGl2ZXMgaW4sIHNvIHRoZVxuK1x0XHQgKiBjb25uZWN0aW9uIHJlZmVyZW5jZSBoYXMgdG8gYmUgZHJvcHBlZCB0aHJvdWdoIHRoZVxuK1x0XHQgKiBjb3B5IHRha2VuIGFib3ZlLlxuK1x0XHQgKi9cbitcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWluY19mcmVlKGluYyk7XG4rXHRcdC8qIGdldCBpbiByZHNfaW5jX2luaXQoKSwgcmRzX2luY19wYXRoX2luaXQoKSBvclxuK1x0XHQgKiByZHNfcmVjdl9pbmNvbWluZygpXG4rXHRcdCAqL1xuK1x0XHRyZHNfY29ubl9wdXQoY29ubik7XG4gXHR9XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJkc19pbmNfcHV0KTtcbkBAIC0zMjUsNiArMzM3LDEzIEBAIHZvaWQgcmRzX3JlY3ZfaW5jb21pbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLFxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcDtcbiBcbitcdC8qIGV2ZXJ5IGNhbGxlciBpbml0aWFsaXplZCBAaW5jIHdpdGggcmRzX2luY19pbml0KCkgb3JcbitcdCAqIHJkc19pbmNfcGF0aF9pbml0KCkgZmlyc3QsIHNvIGlfY29ubiBhbHJlYWR5IGhvbGRzIGEgcmVmZXJlbmNlLlxuK1x0ICogVGFrZSB0aGUgbmV3IG9uZSBiZWZvcmUgZHJvcHBpbmcgdGhlIG9sZCwgc28gdGhhdCByZS1wb2ludGluZyBhblxuK1x0ICogaW5jIGF0IHRoZSBjb25uZWN0aW9uIGl0IGFscmVhZHkgcmVmZXJzIHRvIGNhbm5vdCBmcmVlIGl0LlxuK1x0ICovXG4rXHRyZHNfY29ubl9nZXQoY29ubik7XG4rXHRyZHNfY29ubl9wdXQoaW5jLVx1MDAzZWlfY29ubik7XG4gXHRpbmMtXHUwMDNlaV9jb25uID0gY29ubjtcbiBcdGluYy1cdTAwM2VpX3J4X2ppZmZpZXMgPSBqaWZmaWVzO1xuIFx0aWYgKGNvbm4tXHUwMDNlY190cmFucy1cdTAwM2V0X21wX2NhcGFibGUpXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xuaW5kZXggMWFmYTk4MWU1YzA2ZC4uMDQ1ZWIzYzNmOTc3MiAxMDA2NDRcbi0tLSBhL25ldC9yZHMvc2VuZC5jXG4rKysgYi9uZXQvcmRzL3NlbmQuY1xuQEAgLTI5MCw2ICsyOTAsNyBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRcdFx0fVxuIFx0XHRcdHJtLVx1MDAzZWRhdGEub3BfYWN0aXZlID0gMTtcbiBcdFx0XHRybS1cdTAwM2VtX2luYy5pX2Nvbm5fcGF0aCA9IGNwO1xuK1x0XHRcdHJkc19jb25uX2dldChjcC1cdTAwM2VjcF9jb25uKTtcdC8qIHB1dCBpbiByZHNfbWVzc2FnZV9wdXQoKSAqL1xuIFx0XHRcdHJtLVx1MDAzZW1faW5jLmlfY29ubiA9IGNwLVx1MDAzZWNwX2Nvbm47XG4gXG4gXHRcdFx0Y3AtXHUwMDNlY3BfeG1pdF9ybSA9IHJtO1xuQEAgLTk0Nyw2ICs5NDgsNyBAQCBzdGF0aWMgaW50IHJkc19zZW5kX3F1ZXVlX3JtKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0LyogVGhlIGNvZGUgb3JkZXJpbmcgaXMgYSBsaXR0bGUgd2VpcmQsIGJ1dCB3ZSdyZVxuIFx0XHQgICB0cnlpbmcgdG8gbWluaW1pemUgdGhlIHRpbWUgd2UgaG9sZCBjX2xvY2sgKi9cbiBcdFx0cmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKFx1MDAyNnJtLVx1MDAzZW1faW5jLmlfaGRyLCBzcG9ydCwgZHBvcnQsIDApO1xuK1x0XHRyZHNfY29ubl9nZXQoY29ubik7XHQvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi9cbiBcdFx0cm0tXHUwMDNlbV9pbmMuaV9jb25uID0gY29ubjtcbiBcdFx0cm0tXHUwMDNlbV9pbmMuaV9jb25uX3BhdGggPSBjcDtcbiBcdFx0cmRzX21lc3NhZ2VfYWRkcmVmKHJtKTtcbkBAIC0xMTU5LDEzICsxMTYxLDE0IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbiBcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2luICosIHVzaW4sIG1zZy1cdTAwM2Vtc2dfbmFtZSk7XG4gXHRfX2JlMTYgZHBvcnQ7XG4gXHRzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gTlVMTDtcbi1cdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjtcbitcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdGludCBxdWV1ZWQgPSAwLCBhbGxvY2F0ZWRfbXIgPSAwO1xuIFx0aW50IG5vbmJsb2NrID0gbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUO1xuIFx0bG9uZyB0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG5vbmJsb2NrKTtcbiBcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aDtcbiBcdHN0cnVjdCBpbjZfYWRkciBkYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRfX3UzMiBzY29wZV9pZCA9IDA7XG4gXHRzaXplX3QgcmRtYV9wYXlsb2FkX2xlbiA9IDA7XG4gXHRib29sIHpjb3B5ID0gKChtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIFx1MDAyNlx1MDAyNlxuQEAgLTEzNDAsMTEgKzEzNDMsMjkgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuIFx0cm0tXHUwMDNlbV9kYWRkciA9IGRhZGRyO1xuIFxuIFx0LyogcmRzX2Nvbm5fY3JlYXRlIGhhcyBhIHNwaW5sb2NrIHRoYXQgcnVucyB3aXRoIElSUSBvZmYuXG4tXHQgKiBDYWNoaW5nIHRoZSBjb25uIGluIHRoZSBzb2NrZXQgaGVscHMgYSBsb3QuICovXG4tXHRpZiAocnMtXHUwMDNlcnNfY29ubiBcdTAwMjZcdTAwMjYgaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNnJzLVx1MDAzZXJzX2Nvbm4tXHUwMDNlY19mYWRkciwgXHUwMDI2ZGFkZHIpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHJzLVx1MDAzZXJzX3RvcyA9PSBycy1cdTAwM2Vyc19jb25uLVx1MDAzZWNfdG9zKSB7XG4tXHRcdGNvbm4gPSBycy1cdTAwM2Vyc19jb25uO1xuK1x0ICogQ2FjaGluZyB0aGUgY29ubiBpbiB0aGUgc29ja2V0IGhlbHBzIGEgbG90LlxuK1x0ICpcbitcdCAqIFRoZSBjYWNoZWQgcnNfY29ubiBob2xkcyBhIGNvbm5lY3Rpb24gcmVmZXJlbmNlOyB0YWtlIG9uZSBvZlxuK1x0ICogb3VyIG93biBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgY2FsbCAoZHJvcHBlZCBvbiBib3RoIGV4aXRcbitcdCAqIHBhdGhzKSwgc28gdGhhdCBuZWl0aGVyIGEgY29uY3VycmVudCBzZW5kZXIgcmVwbGFjaW5nIHRoZVxuK1x0ICogY2FjaGUgbm9yIHJkc19jb25uX2Rlc3Ryb3koKSBjYW4gZnJlZSB0aGUgY29ubmVjdGlvbiB1bmRlclxuK1x0ICogdXMuICBBIGNhY2hlZCBjb25uZWN0aW9uIHdob3NlIGRlc3RydWN0aW9uIGhhcyBiZWd1biBpcyBub3RcbitcdCAqIHJldXNlZDogZHJvcHBpbmcgaXQgaGVyZSBsZXRzIHRoZSBuZXh0IHNlbmRtc2cgbG9vayB1cCBvclxuK1x0ICogY3JlYXRlIGEgbGl2ZSBvbmUgaW5zdGVhZCBvZiByZXR1cm5pbmcgLUVBR0FJTiBmb3JldmVyLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZycy1cdTAwM2Vyc19sb2NrLCBmbGFncyk7XG4rXHRjb25uID0gcnMtXHUwMDNlcnNfY29ubjtcbitcdGlmIChjb25uIFx1MDAyNlx1MDAyNiBpcHY2X2FkZHJfZXF1YWwoXHUwMDI2Y29ubi1cdTAwM2VjX2ZhZGRyLCBcdTAwMjZkYWRkcikgXHUwMDI2XHUwMDI2XG4rXHQgICAgcnMtXHUwMDNlcnNfdG9zID09IGNvbm4tXHUwMDNlY190b3MgXHUwMDI2XHUwMDI2ICFyZHNfZGVzdHJveV9wZW5kaW5nKGNvbm4pKSB7XG4rXHRcdHJkc19jb25uX2dldChjb25uKTtcbiBcdH0gZWxzZSB7XG4rXHRcdGNvbm4gPSBOVUxMO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZycy1cdTAwM2Vyc19sb2NrLCBmbGFncyk7XG4rXG4rXHRpZiAoIWNvbm4pIHtcbitcdFx0c3RydWN0IHJkc19jb25uZWN0aW9uICpvbGQ7XG4rXG4gXHRcdGNvbm4gPSByZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoc29ja19uZXQoc29jay1cdTAwM2VzayksXG4gXHRcdFx0XHRcdFx0XHUwMDI2cnMtXHUwMDNlcnNfYm91bmRfYWRkciwgXHUwMDI2ZGFkZHIsXG4gXHRcdFx0XHRcdFx0cnMtXHUwMDNlcnNfdHJhbnNwb3J0LCBycy1cdTAwM2Vyc190b3MsXG5AQCAtMTM1Miw5ICsxMzczLDE3IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbiBcdFx0XHRcdFx0XHRzY29wZV9pZCk7XG4gXHRcdGlmIChJU19FUlIoY29ubikpIHtcbiBcdFx0XHRyZXQgPSBQVFJfRVJSKGNvbm4pO1xuK1x0XHRcdGNvbm4gPSBOVUxMO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXHRcdC8qIGhhbmQgdGhlIGNhY2hlIGl0cyBvd24gcmVmZXJlbmNlICovXG4rXHRcdHJkc19jb25uX2dldChjb25uKTtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cnMtXHUwMDNlcnNfbG9jaywgZmxhZ3MpO1xuK1x0XHRvbGQgPSBycy1cdTAwM2Vyc19jb25uO1xuIFx0XHRycy1cdTAwM2Vyc19jb25uID0gY29ubjtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZycy1cdTAwM2Vyc19sb2NrLCBmbGFncyk7XG4rXHRcdGlmIChvbGQpXG4rXHRcdFx0cmRzX2Nvbm5fcHV0KG9sZCk7XG4gXHR9XG4gXG4gXHRpZiAoY29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZXRfbXBfY2FwYWJsZSkge1xuQEAgLTE0NjksNiArMTQ5OCw4IEBAIGludCByZHNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBwYXlsb2FkX2xlbilcbiBcdFx0a2ZyZWUodmN0LnZlY1tpbmRdLmlvdik7XG4gXHRrZnJlZSh2Y3QudmVjKTtcbiBcbitcdHJkc19jb25uX3B1dChjb25uKTtcbitcbiBcdHJldHVybiBwYXlsb2FkX2xlbjtcbiBcbiBvdXQ6XG5AQCAtMTQ3Niw2ICsxNTA3LDkgQEAgaW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuIFx0XHRrZnJlZSh2Y3QudmVjW2luZF0uaW92KTtcbiBcdGtmcmVlKHZjdC52ZWMpO1xuIFxuK1x0aWYgKGNvbm4pXG4rXHRcdHJkc19jb25uX3B1dChjb25uKTtcbitcbiBcdC8qIElmIHRoZSB1c2VyIGluY2x1ZGVkIGEgUkRNQV9NQVAgY21zZywgd2UgYWxsb2NhdGVkIGEgTVIgb24gdGhlIGZseS5cbiBcdCAqIElmIHRoZSBzZW5kbXNnIGdvZXMgdGhyb3VnaCwgd2Uga2VlcCB0aGUgTVIuIElmIGl0IGZhaWxzIHdpdGggRUFHQUlOXG4gXHQgKiBvciBpbiBhbnkgb3RoZXIgd2F5LCB3ZSBuZWVkIHRvIGRlc3Ryb3kgdGhlIE1SIGFnYWluICovXG5AQCAtMTUyMiw2ICsxNTU2LDcgQEAgcmRzX3NlbmRfcHJvYmUoc3RydWN0IHJkc19jb25uX3BhdGggKmNwLCBfX2JlMTYgc3BvcnQsXG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNnJtLVx1MDAzZW1fY29ubl9pdGVtLCBcdTAwMjZjcC1cdTAwM2VjcF9zZW5kX3F1ZXVlKTtcbiBcdHNldF9iaXQoUkRTX01TR19PTl9DT05OLCBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKTtcbiBcdHJkc19tZXNzYWdlX2FkZHJlZihybSk7XG4rXHRyZHNfY29ubl9nZXQoY3AtXHUwMDNlY3BfY29ubik7XHQvKiBwdXQgaW4gcmRzX21lc3NhZ2VfcHV0KCkgKi9cbiBcdHJtLVx1MDAzZW1faW5jLmlfY29ubiA9IGNwLVx1MDAzZWNwX2Nvbm47XG4gXHRybS1cdTAwM2VtX2luYy5pX2Nvbm5fcGF0aCA9IGNwO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jXG5pbmRleCA3NzRhNzFmODhkMzc1Li4yNjg1ZWUyMWEyMmQxIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy90Y3AuY1xuKysrIGIvbmV0L3Jkcy90Y3AuY1xuQEAgLTgwNSw2ICs4MDUsNyBAQCBzdGF0aWMgdm9pZCByZHNfdGNwX2V4aXQodm9pZClcbiAjZW5kaWZcbiBcdHVucmVnaXN0ZXJfcGVybmV0X2RldmljZShcdTAwMjZyZHNfdGNwX25ldF9vcHMpO1xuIFx0cmRzX3RjcF9kZXN0cm95X2Nvbm5zKCk7XG4rXHRyZHNfY29ubl93YWl0X2Nvbm5zX2ZyZWVkKFx1MDAyNnJkc190Y3BfdHJhbnNwb3J0KTtcbiBcdHJkc190cmFuc191bnJlZ2lzdGVyKFx1MDAyNnJkc190Y3BfdHJhbnNwb3J0KTtcbiBcdHJkc190Y3BfcmVjdl9leGl0KCk7XG4gXHRrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX3RjcF9jb25uX3NsYWIpO1xuZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwX2xpc3Rlbi5jIGIvbmV0L3Jkcy90Y3BfbGlzdGVuLmNcbmluZGV4IDEzZmE2MGMxOTg1YmIuLjBkMmNlZDg5MmE4YWUgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuKysrIGIvbmV0L3Jkcy90Y3BfbGlzdGVuLmNcbkBAIC0xNTMsNyArMTUzLDcgQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bilcbiB7XG4gXHRzdHJ1Y3Qgc29ja2V0ICpsaXN0ZW5fc29jayA9IHJ0bi1cdTAwM2VyZHNfdGNwX2xpc3Rlbl9zb2NrO1xuIFx0c3RydWN0IHNvY2tldCAqbmV3X3NvY2sgPSBOVUxMO1xuLVx0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uO1xuK1x0c3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gTlVMTDtcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0O1xuIFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqcnNfdGNwID0gTlVMTDtcbkBAIC0yMjksNiArMjI5LDcgQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bilcbiBcbiBcdGlmIChJU19FUlIoY29ubikpIHtcbiBcdFx0cmV0ID0gUFRSX0VSUihjb25uKTtcbitcdFx0Y29ubiA9IE5VTEw7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0LyogQW4gaW5jb21pbmcgU1lOIHJlcXVlc3QgY2FtZSBpbiwgYW5kIFRDUCBqdXN0IGFjY2VwdGVkIGl0LlxuQEAgLTM0Myw2ICszNDQsOCBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2cnNfdGNwLVx1MDAzZXRfY29ubl9wYXRoX2xvY2spO1xuIFx0aWYgKG5ld19zb2NrKVxuIFx0XHRzb2NrX3JlbGVhc2UobmV3X3NvY2spO1xuK1x0aWYgKGNvbm4pXG4rXHRcdHJkc19jb25uX3B1dChjb25uKTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZydG4tXHUwMDNlcmRzX3RjcF9hY2NlcHRfbG9jayk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo1MS41MDE5NzM5MDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM1ODM4OTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIFJEUyBDb25uZWN0aW9uIFJlZmFjdG9yaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHJlZmFjdG9yaW5nIG9mIFJEUyBjb25uZWN0aW9uIG1hbmFnZW1lbnQgd2FycmFudHMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBzdWZmaWNpZW50LiBJIGtub3cgS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHdoZXJlYXMgS0FTQU4gdGFja2xlcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBldGMuLCBhbmQgTE9DS0RFUCBkZWFscyB3aXRoIGxvY2tpbmcgaXNzdWVzLlxuXG5UaGlzIHBhdGNoIGlzIGFsbCBhYm91dCByZWZhY3RvcmluZyBob3cgUkRTIGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgdGhlaXIgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGV5J3JlIGludHJvZHVjaW5nIGBzdHJ1Y3Qga3JlZiBjX3JlZmNvdW50YCBhbmQgY2hhbmdpbmcgaG93IHJlZnMgYXJlIHRha2VuIGFuZCBwdXQuIFRoZSBnb2FsIGlzIHRvIGVsaW1pbmF0ZSBVQUZzLCBkb3VibGUgZnJlZXMsIHJlZmNvdW50aW5nIGxlYWtzLCBhbmQgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0ZWFyZG93biBhbmQgbW9kdWxlIHVubG9hZGluZy4gU28sIGl0J3MgYSBsaWZldGltZSBtYW5hZ2VtZW50IG92ZXJoYXVsLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgdG91Y2ggYW55dGhpbmcgdGhhdCBLTVNBTiB3b3VsZCBjYXJlIGFib3V0PyBJIG5lZWQgdG8gY2hlY2sgZm9yIHR3byBwcmltYXJ5IEtNU0FOIGNvbmNlcm5zOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZToqKiBEb2VzIHRoaXMgcGF0Y2ggKmV4cG9zZSogbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IEkgc2VlIG5vIGNoYW5nZXMgdG8gYGNvcHlfdG9fdXNlcmAsIGBnZXQvc2V0c29ja29wdGAsIGByZWN2bXNnYCwgZXRjLiwgc28gSSdtIG5vdCBpbW1lZGlhdGVseSB3b3JyaWVkIGFib3V0IGxlYWtpbmcgdW5pbml0aWFsaXplZCBmaWVsZHMgdGhpcyB3YXkuIEl0IGRvZXNuJ3Qgc2VlbSB0byBhZmZlY3QgYW55IGRhdGEgY29waWVkIHRvIG9yIGZyb20gdXNlcnNwYWNlIGRpcmVjdGx5LlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogVGhlIGNvZGUgdXNlcyBga3JlZl9pbml0YCwgd2hpY2ggaXMgZ29vZC4gVGhlcmUgZG9uJ3Qgc2VlbSB0byBiZSBhbnkgb2J2aW91cyBicmFuY2hpbmcgcG9pbnRzIHdoZXJlIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgKmNvdWxkKiBsZWFkIHRvIGEgc2VjdXJpdHkgaXNzdWUuIEV2ZXJ5dGhpbmcgSSdtIHNlZWluZyBpcyBpbml0aWFsaXplZC5cblxuU28gZmFyLCBpdCBsb29rcyBjbGVhbi4gQnV0IG5vdyBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkLiBgX19yZHNfY29ubl9jcmVhdGVgIGluaXRpYWxpemVzIGBrcmVmX2luaXQoXHUwMDI2Y29ubi1cdTAwM2VjX3JlZmNvdW50KWAgd2hpY2ggaXMgZ29vZCBidXQgdGhlIGBjb25uYCBpcyBhbGxvY2F0ZWQgZnJvbSBgcmRzX2Nvbm5fc2xhYmAuIEkgbmVlZCB0byB2ZXJpZnkgaG93IGByZHNfY29ubl9zbGFiYCBpcyBhbGxvY2F0ZWQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhbiBpc3N1ZSBpZiB0aGUgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiB0aGUgYGNvbm5gIHN0cnVjdHVyZSBpcyBpbmNvbXBsZXRlLiBJcyBpdCBga21lbV9jYWNoZV96YWxsb2NgPyBUaGF0J3Mgd2hhdCBJIHdhbnQgdG8ga25vdy4gSWYgaXQncyBhIGAqX3phbGxvY2AgdmFyaWFudCwgb3IgaXMgcHJvcGVybHkgemVyb2VkLCB0aGUgcmlzayBpcyBleHRyZW1lbHkgbG93LiBJZiBpdCdzIG5vdCwgdGhlbiBJJ2xsIG5lZWQgdG8gZG8gbW9yZSBhbmFseXNpcy5cblxuSW4gc3VtbWFyeSwgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbGlrZWx5ICpub3QqIG5lY2Vzc2FyeSBoZXJlLiBUaGUgcGF0Y2ggZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgZGlyZWN0IGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcyBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIHRoYXQgYXJlIG9idmlvdXMuIEhvd2V2ZXIsIGJlZm9yZSBJIG1ha2UgYSBmaW5hbCBjYWxsLCBJJ2xsIGNvbmZpcm0gdGhhdCBgcmRzX2Nvbm5fc2xhYmAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHF1aWNrIGdyZXAgb3IgZmlsZSBpbnNwZWN0aW9uIHRvIHNlZSBob3cgaXQncyBhbGxvY2F0ZWQuIElmIHRoYXQgYWxsb2NhdGlvbiBpcyBjbGVhbiwgSSdsbCBzdGljayB3aXRoIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGZvciB0aGlzIG9uZS4gSWYgbm90LCBJJ2xsIG5lZWQgYSBjbG9zZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNTo1Njo1Ny44NjAzNjYzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQxMzkyNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fY2FjaGVfemFsbG9jLipyZHNfY29ubl9zbGFiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvY29ubmVjdGlvbi5jPTE4Mz1zdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpfX3Jkc19jb25uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0yMjMtXFxubmV0L3Jkcy9jb25uZWN0aW9uLmM6MjI0OlxcdGNvbm4gPSBrbWVtX2NhY2hlX3phbGxvYyhyZHNfY29ubl9zbGFiLCBnZnApO1xcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTIyNS1cXHRpZiAoIWNvbm4pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTY6NTkuODAxNzY0ODQ5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5OTc1OTU2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXBwbGljYWJpbGl0eSBBbmFseXNpcyBmb3IgUkRTIENvbm5lY3Rpb24gVGVhcmRvd24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaXNzZWN0aW5nIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgUkRTIG5ldHdvcmsgcHJvdG9jb2wuIEl0J3MgZm9jdXNlZCBvbiBtYW5hZ2luZyB0aGUgbGlmZXRpbWUgb2YgYHJkc19jb25uZWN0aW9uYCBvYmplY3RzIG1vcmUgcm9idXN0bHksIHNwZWNpZmljYWxseSB3aXRoIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSBhbmQgYXN5bmNocm9ub3VzIGNsZWFudXAuIFRoaXMgaXMgdG8gYWRkcmVzcyBzb21lIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGlzc3VlcyBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93biBhbmQgbW9kdWxlIHVubG9hZGluZy4gTXkgbWFpbiBjb25jZXJuIGlzLCBvZiBjb3Vyc2UsIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCBLTVNBTiB3b3VsZCBiZSBnb29kIGF0IGZpbmRpbmcuXG5cblRoZSBmaXJzdCB0aGluZyB0byB1bmRlcnN0YW5kIGlzIGhvdyBgY29ubmAgaXMgYWxsb2NhdGVkOyBpdCdzIGRvbmUgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIG1lYW5pbmcgYWxsIG9mIHRoZSBmaWVsZHMgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbG9va2VkIGNsb3NlbHkgYXQgYWxsIG9mIHRoZSBjaGFuZ2VkIGZ1bmN0aW9uczogYHJkc19yZWxlYXNlYCwgYHJkc19jb25uX2xvb2t1cGAsIGBfX3Jkc19jb25uX2NyZWF0ZWAsIHRoZSBgcmRzX2Nvbm5fKmAgZnVuY3Rpb25zIGluIGBjb25uZWN0aW9uLmNgLCBhbmQgdmFyaW91cyBmdW5jdGlvbnMgaW4gYGliLmNgLCBgaWJfY20uY2AsIGBsb29wLmNgLCBgdGNwLmNgLCBgdGNwX2xpc3Rlbi5jYCwgYG1lc3NhZ2UuY2AsIGByZWN2LmNgLCBhbmQgYHNlbmQuY2AgdGhhdCBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY29uY3VycmVuY3kgcHJpbWl0aXZlcywgb2JqZWN0IGxpZmVjeWNsZSwgYW5kIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbiBmb3IgYHJkc19jb25uZWN0aW9uYC5cblxuTXkgYW5hbHlzaXMgcmVhbGx5IGNlbnRlcnMgYXJvdW5kIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IHJpc2tzIHRoYXQgS01TQU4gaXMgcGFydGljdWxhcmx5IGFkZXB0IGF0IGZpbmRpbmcuIEkgbG9va2VkIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcywgYnVmZmVyIG92ZXJydW5zIHRoYXQgbWlnaHQgcmVhZCB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGFueSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIGRhdGEgY291bGQgbGVhayB0byB1c2Vyc3BhY2UuXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGFib3V0IHJlZmVyZW5jZSBjb3VudGluZywgb2JqZWN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBhbmQgZW5zdXJpbmcgY29ycmVjdCB0ZWFyZG93biBzZXF1ZW5jZS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1ZmZlciBib3VuZGFyaWVzLCBzdHJ1Y3Qgc2VyaWFsaXphdGlvbiB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUgbmV3IGNvZGUgaXMgYWxsIHJlZmNvdW50aW5nLCBjb25jdXJyZW5jeSwgYW5kIHNodXRkb3duLiBUaGVyZWZvcmUsIGFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlIGNoYW5nZXMgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzOlxuXG4qICAgVXNlLUFmdGVyLUZyZWUgKFVBRiksIHdoaWNoIEtBU0FOIHdvdWxkIGNhdGNoLlxuKiAgIE1lbW9yeSBsZWFrcywgZGV0ZWN0ZWQgYnkgS01FTUxFQUsuXG4qICAgRGVhZGxvY2tzIG9yIGxvY2tpbmcgaW1iYWxhbmNlcywgd2hpY2ggTE9DS0RFUCBzaG91bGQgaWRlbnRpZnkuXG4qICAgRG91YmxlIGZyZWVzIG9yIGludmFsaWQgZnJlZXMsIGNhdWdodCBieSBLQVNBTiBvciBTTFVCIGRlYnVnLlxuXG5LTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHNwZWNpZmljYWxseSB0YXJnZXRlZCBhdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoZWl0aGVyIHN0YWNrL2hlYXAgKmJlZm9yZSogaW5pdGlhbGl6YXRpb24pIGFuZCBwb3RlbnRpYWxseSBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lc24ndCBhbHRlciBhbnkgZGF0YSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSB1c2VkLiBUaGVyZWZvcmUsIGdpdmVuIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHBhdGNoLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLlxuXG5MZXQncyBkbyBhIHF1aWNrIGZpbmFsIGNoZWNrIG9mIHRoZSByZWFzb25pbmcgcmVxdWlyZW1lbnRzOlxuXCJVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLiBJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4gSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlwiXG5cblBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2A6XG4tIGBLTVNBTlJlYXNvbmluZ2A6IEEgdGhvcm91Z2ggZXhwbGFuYXRpb24gY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eS5cbi0gYE5lZWRzS01TQU5gOiBgZmFsc2VgLlxuXG5Pa2F5LCBJJ20gc2F0aXNmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc5NSwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTU6NTc6MDYuNzk5MzY0MTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSBvZiBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBhY3Jvc3MgdGhlIFJEUyBzdWJzeXN0ZW0gKGluY2x1ZGluZyBUQ1AsIElCLCBhbmQgbG9vcGJhY2sgdHJhbnNwb3J0cykgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgbW9kdWxlLXVubG9hZCByYWNlcy5cXG5cXG4tIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHJlZmNvdW50IGltYmFsYW5jZSwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBkZWFkbG9jayBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLCBTTFVCIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuXFxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gaW5mby1sZWFrIHJpc2spLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgc2l6aW5nIG9yIGJvdW5kcyBjaGVja2luZywgYW5kIGBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb25gIG9iamVjdHMgY29udGludWUgdG8gYmUgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoZnVsbHkgemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSBvZiBgc3RydWN0IHJkc19jb25uZWN0aW9uYCBhY3Jvc3MgdGhlIFJEUyBzdWJzeXN0ZW0gKGluY2x1ZGluZyBUQ1AsIElCLCBhbmQgbG9vcGJhY2sgdHJhbnNwb3J0cykgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgbW9kdWxlLXVubG9hZCByYWNlcy5cXG5cXG4tIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHJlZmNvdW50IGltYmFsYW5jZSwgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBkZWFkbG9jayBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93bikgYXJlIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLCBTTFVCIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuXFxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGRvZXMgbm90IG1vZGlmeSBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gaW5mby1sZWFrIHJpc2spLCBkb2VzIG5vdCBhbHRlciBidWZmZXIgc2l6aW5nIG9yIGJvdW5kcyBjaGVja2luZywgYW5kIGBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb25gIG9iamVjdHMgY29udGludWUgdG8gYmUgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCAoZnVsbHkgemVyby1pbml0aWFsaXplZCkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hgcv[1] Phase: Succeeded StartedAt: 2026-09-05 15:57:17 +0000 UTC FinishedAt: 2026-09-05 15:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 15:57:17 +0000 UTC FinishedAt: 2026-09-05 15:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2] Phase: Succeeded StartedAt: 2026-09-05 15:57:17 +0000 UTC FinishedAt: 2026-09-05 19:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 15:57:17 +0000 UTC FinishedAt: 2026-09-05 19:36:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 15:57:17 +0000 UTC FinishedAt: 2026-09-05 15:57:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 15:57:17 +0000 UTC FinishedAt: 2026-09-05 15:57:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow4hgcv/series-workflow4hgcv-convert-artifact-3747372212/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 15:57:27 +0000 UTC FinishedAt: 2026-09-05 16:14:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 15:57:27 +0000 UTC FinishedAt: 2026-09-05 16:14:02 +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:*37bcedad-7c31-44c4-8cdf-5f6f25ee86b7,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-workflow4hgcv/series-workflow4hgcv-convert-artifact-3747372212/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": "f12d3ff8-a8a4-407c-9ee9-093b7f294192", "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-workflow4hgcv/series-workflow4hgcv-build-action-1002443442/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 15:57:27 +0000 UTC FinishedAt: 2026-09-05 16:13:52 +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:*37bcedad-7c31-44c4-8cdf-5f6f25ee86b7,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-workflow4hgcv/series-workflow4hgcv-convert-artifact-3747372212/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": "f12d3ff8-a8a4-407c-9ee9-093b7f294192", "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-workflow4hgcv/series-workflow4hgcv-build-action-1002443442/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 16:14:02 +0000 UTC FinishedAt: 2026-09-05 16:14:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 16:14:02 +0000 UTC FinishedAt: 2026-09-05 16:14:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 16:14:02 +0000 UTC FinishedAt: 2026-09-05 16:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 16:14:02 +0000 UTC FinishedAt: 2026-09-05 16:14:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow4hgcv/series-workflow4hgcv-convert-artifact-2324483955/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 16:14:12 +0000 UTC FinishedAt: 2026-09-05 16:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 16:14:12 +0000 UTC FinishedAt: 2026-09-05 16:15:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f12d3ff8-a8a4-407c-9ee9-093b7f294192,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-workflow4hgcv/series-workflow4hgcv-build-action-1002443442/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-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 16:16:07 +0000 UTC FinishedAt: 2026-09-05 16:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 16:16:07 +0000 UTC FinishedAt: 2026-09-05 16:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 16:16:07 +0000 UTC FinishedAt: 2026-09-05 16:32:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 16:16:07 +0000 UTC FinishedAt: 2026-09-05 16:32:32 +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:*37bcedad-7c31-44c4-8cdf-5f6f25ee86b7,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-workflow4hgcv/series-workflow4hgcv-convert-artifact-2324483955/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": "3cf43281-ccb5-4235-ae93-1f457c648c32", "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-workflow4hgcv/series-workflow4hgcv-build-action-4021520167/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 16:16:07 +0000 UTC FinishedAt: 2026-09-05 16:32:22 +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:*37bcedad-7c31-44c4-8cdf-5f6f25ee86b7,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-workflow4hgcv/series-workflow4hgcv-convert-artifact-2324483955/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": "3cf43281-ccb5-4235-ae93-1f457c648c32", "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-workflow4hgcv/series-workflow4hgcv-build-action-4021520167/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 16:32:32 +0000 UTC FinishedAt: 2026-09-05 16:32:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 16:32:32 +0000 UTC FinishedAt: 2026-09-05 16:32:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 16:32:32 +0000 UTC FinishedAt: 2026-09-05 16:34:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 16:32:32 +0000 UTC FinishedAt: 2026-09-05 16:34:13 +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:*3cf43281-ccb5-4235-ae93-1f457c648c32,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-workflow4hgcv/series-workflow4hgcv-build-action-4021520167/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-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 16:34:23 +0000 UTC FinishedAt: 2026-09-05 19:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 16:34:23 +0000 UTC FinishedAt: 2026-09-05 19:36:07 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},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:*f12d3ff8-a8a4-407c-9ee9-093b7f294192,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3cf43281-ccb5-4235-ae93-1f457c648c32,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-workflow4hgcv/series-workflow4hgcv-build-action-1002443442/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-workflow4hgcv/series-workflow4hgcv-build-action-4021520167/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 16:34:23 +0000 UTC FinishedAt: 2026-09-05 16:34:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 16:34:23 +0000 UTC FinishedAt: 2026-09-05 16:34:29 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},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-workflow4hgcv/series-workflow4hgcv-convert-artifact-3356608876/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 16:34:23 +0000 UTC FinishedAt: 2026-09-05 16:34:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 16:34:23 +0000 UTC FinishedAt: 2026-09-05 16:34:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 16:34:23 +0000 UTC FinishedAt: 2026-09-05 16:34:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 16:34:33 +0000 UTC FinishedAt: 2026-09-05 19:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4hgcv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rds_conn_create","rds_conn_destroy","rds_conn_destroy_fini","rds_conn_get","rds_conn_put","rds_conn_lookup","rds_sendmsg","rds_recv_incoming","rds_inc_put","rds_message_free","rds_tcp_accept_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eab111e765729e93087ff86a2ec9b2ae42d0fa5","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA"],"series_id":"a3207a3a-be9d-4cd9-856e-5a24d0cebfd8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 16:34:33 +0000 UTC FinishedAt: 2026-09-05 19:35:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f12d3ff8-a8a4-407c-9ee9-093b7f294192,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3cf43281-ccb5-4235-ae93-1f457c648c32,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-workflow4hgcv/series-workflow4hgcv-build-action-1002443442/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-workflow4hgcv/series-workflow4hgcv-build-action-4021520167/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-workflow4hgcv/series-workflow4hgcv-convert-artifact-3356608876/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,}