Name: series-workflows7ngn Phase: Succeeded StartedAt: 2026-09-05 08:00:13 +0000 UTC FinishedAt: 2026-09-05 12:01:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[0] Phase: Succeeded StartedAt: 2026-09-05 08:00:13 +0000 UTC FinishedAt: 2026-09-05 08:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 08:00:13 +0000 UTC FinishedAt: 2026-09-05 08:17:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "0e5b5115-508e-49aa-95b6-3a446f450f93" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__loop_clr_fd", "lo_release", "loop_clr_fd", "loop_remove", "loop_add" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb29wX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtsb29wX2FkZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9vcCBibG9jayBkcml2ZXIgdGVhcmRvd24gcGF0aCBieSBkZWZlcnJpbmcgX19sb29wX2Nscl9mZCgpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlKCkgd2hpbGUgaG9sZGluZyBvcGVuX211dGV4LiBUaGlzIHByZXZlbnRzIGxvY2sgb3JkZXIgY29uZmxpY3RzIGR1cmluZyBJL08gZmx1c2hpbmcgYW5kIHJlc291cmNlIHJlbGVhc2UuXG5cbk1lbW9yeSBcdTAwMjYgc2FuaXRpemVyIGFuYWx5c2lzOlxuLSBUaGUgbmV3bHkgaW50cm9kdWNlZCB3b3JrX3N0cnVjdCBmaWVsZCBgbG9fY2xyX3dvcmtgIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHZpYSBga3phbGxvY19vYmooKWAgYW5kIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCBpbiBgbG9vcF9hZGQoKWAuXG4tIFRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCB0b3VjaCBvciBpbnRyb2R1Y2UgYW55IGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCBvdXRwdXQsIG9yIEJQRiBidWZmZXJzKSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMvc3RhY2sgdmFyaWFibGVzIHVuaW5pdGlhbGl6ZWQuXG4tIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGFzeW5jaHJvbm91cyBleGVjdXRpb24sIHN5bmNocm9uaXphdGlvbiwgcmVmY291bnRpbmcgKGdldF9kZXZpY2UvcHV0X2RldmljZSwgbW9kdWxlX3B1dCwgZnB1dCksIGxvY2tpbmcsIGFuZCBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpLiBUaGVzZSBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc21zLlxuXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svbG9vcC5jKSwgYWx0ZXJpbmcgaG93IGxvb3AgZGV2aWNlcyBhcmUgdG9ybiBkb3duIHdoZW4gcmVsZWFzZWQuIEl0IGNvbnZlcnRzIF9fbG9vcF9jbHJfZmQgdG8gcnVuIGFzeW5jaHJvbm91c2x5IG9uIGEgd29ya3F1ZXVlLCBtb2RpZmllcyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiAoYWRkaW5nIHN5bmNocm9uaXplX3JjdSwgZHJhaW5fd29ya3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKSwgYWRqdXN0cyBkZXZpY2UgYW5kIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbi4gTG9vcCBkZXZpY2VzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIGZ1enphYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjI4MWEyNWYxNjY3OGVlZDM1M2FhMjQ4NDNjN2I2OGY2MGQ2MTEyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDg6MTc6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggNmYxMjk3NjAzNWIwOS4uNTE2MTE4YjNhMTZjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTc1LDYgJiM0Mzs3NSw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXHRzdHJ1Y3QgZ2VuZGlza1x0XHQqbG9fZGlzaztcbiBcdHN0cnVjdCBtdXRleFx0XHRsb19tdXRleDtcbiBcdGJvb2xcdFx0XHRpZHJfdmlzaWJsZTtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGxvX2Nscl93b3JrO1xuIH07XG4gXG4gc3RydWN0IGxvb3BfY21kIHtcbkBAIC0xMTM0LDEzICYjNDM7MTEzNSw0MiBAQCBzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuJiM0MztzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4mIzQzO1x0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLVx1MDAzZWxvX2Rpc2s7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdHN0cnVjdCBmaWxlICpmaWxwO1xuIFx0Z2ZwX3QgZ2ZwID0gbG8tXHUwMDNlb2xkX2dmcF9tYXNrO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2luY2UgbG9vcF9xdWV1ZV9ycSgpIGlzIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2ssIHRoaXMgc3luY2hyb25pemVfcmN1KClcbiYjNDM7XHQgKiBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBxdWV1ZV93b3JrKCkgY2FsbHMgYXJlIG1hZGUgZnJvbSBsb29wX3F1ZXVlX3dvcmsoKVxuJiM0MztcdCAqIGZyb20gbG9vcF9xdWV1ZV9ycSgpLiBTdWJzZXF1ZW50IGxvb3BfcXVldWVfcnEoKSBjYWxscyB3aGljaCBhcmUgbWFkZSBhZnRlclxuJiM0MztcdCAqIHRoaXMgc3luY2hyb25pemVfcmN1KCkgcmV0dXJuZWQgc2hhbGwgc2VlIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGFuZFxuJiM0MztcdCAqIHJldHVybiB3aXRoIEJMS19TVFNfSU9FUlIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGlzIGRyYWluX3dvcmtxdWV1ZSgpIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIGxvb3BfaGFuZGxlX2NtZCgpIGNhbGxzIGFyZVxuJiM0MztcdCAqIG1hZGUgZnJvbSBsb29wX3Byb2Nlc3Nfd29yaygpIGZyb20gbG9vcF93b3JrZm4oKS9sb29wX3Jvb3RjZ193b3JrZm4oKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkcmFpbl93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoaXMgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHdhaXRzIGZvciBjb21wbGV0aW9uIG9mIGFsbCBvdXRzdGFuZGluZyBJL09cbiYjNDM7XHQgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyXG4mIzQzO1x0ICogdG8gcmVhY2ggMC4gU2luY2UgdGhlIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGNoZWNrIGluIGxvb3BfcXVldWVfcnEoKVxuJiM0MztcdCAqIGd1YXJhbnRlZXMgdGhhdCBubyBtb3JlIG5ldyBJL08gcmVxdWVzdHMgYXJlIG1hZGUsIHdlIGNhbiBjYWxsXG4mIzQzO1x0ICogYmxrX21xX3VuZnJlZXplX3F1ZXVlKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHJldHVybnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlKSk7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMjogUGVyZm9ybSByZW1haW5pbmcgY2xlYW51cCwgd2l0aCBvcGVuX211dGV4IGhlbGQuICovXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdFdBUk5fT05fT05DRShsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ydW5kb3duKTtcbiYjNDM7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvLVx1MDAzZWxvX2xvY2spO1xuIFx0ZmlscCA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiBcdGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7XG5AQCAtMTE1MSwxMiAmIzQzOzExODEsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRsby1cdTAwM2Vsb19zaXplbGltaXQgPSAwO1xuIFx0bWVtc2V0KGxvLVx1MDAzZWxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTtcbiBcbi1cdC8qXG4tXHQgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC5cbi1cdCAqXG4tXHQgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbFxuLVx0ICogLVx1MDAzZXJlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4mIzM5O3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy5cbi1cdCAqL1xuJiM0MztcdC8qIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LiAqL1xuIFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuQEAgLTExNjgsOCAmIzQzOzExOTMsNiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHQvKiBsZXQgdXNlci1zcGFjZSBrbm93IGFib3V0IHRoaXMgY2hhbmdlICovXG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRtYXBwaW5nX3NldF9nZnBfbWFzayhmaWxwLVx1MDAzZWZfbWFwcGluZywgZ2ZwKTtcbi1cdC8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovXG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiBcbiBcdGRpc2tfZm9yY2VfbWVkaWFfY2hhbmdlKGxvLVx1MDAzZWxvX2Rpc2spO1xuIFxuQEAgLTExOTksMTEgJiM0MzsxMjIyLDE4IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbiYjNDM7XHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0cHV0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4mIzQzO1xuIFx0Lypcbi1cdCAqIE5lZWQgbm90IGhvbGQgbG9fbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuIENhbGxpbmcgZnB1dCBob2xkaW5nXG4tXHQgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzXG4tXHQgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguXG4mIzQzO1x0ICogVGhpcyBpcyBzYWZlOiBmbHVzaF93b3JrKCkgZnJvbSBsb29wX3JlbW92ZSgpIGZyb20gbG9vcF9leGl0KCkgd2FpdHNcbiYjNDM7XHQgKiB1bnRpbCB0aGlzIGZ1bmN0aW9uIHJldHVybnM7IGVmZmVjdGl2ZWx5IGRyb3BwaW5nIHRoZSBmaW5hbCBtb2R1bGVcbiYjNDM7XHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXG4gXHQgKi9cbiYjNDM7XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiYjNDM7XG4gXHRmcHV0KGZpbHApO1xuIH1cbiBcbkBAIC0xNzY5LDggJiM0MzsxNzk5LDIwIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbi1cdGlmIChuZWVkX2NsZWFyKVxuLVx0XHRfX2xvb3BfY2xyX2ZkKGxvKTtcbiYjNDM7XHRpZiAoIW5lZWRfY2xlYXIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nXG4mIzQzO1x0ICogZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkgdG8gV1EgY29udGV4dC4gVGhlIExvX3J1bmRvd24gc3RhdGVcbiYjNDM7XHQgKiBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEdyYWIgZGlzayByZWZlcmVuY2Ugd2hpY2ggd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXNcbiYjNDM7XHQgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLVx1MDAzZW9wZW5fbXV0ZXguXG4mIzQzO1x0ICogV2UgZG9uJiMzOTt0IG5lZWQgdG8gZ3JhYiBkaXNrLVx1MDAzZWZvcHMtXHUwMDNlb3duZXIgcmVmZXJlbmNlIGJlY2F1c2VcbiYjNDM7XHQgKiB3ZSBhcmUgaG9sZGluZyBvbmUgb2J0YWluZWQgYnkgbG9vcF9jb25maWd1cmUoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRnZXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcbiYjNDM7XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbkBAIC0yMDM0LDYgJiM0MzsyMDc2LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcdGxvID0ga3phbGxvY19vYmooKmxvKTtcbiBcdGlmICghbG8pXG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XG4gXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbkBAIC0yMTM4LDYgJiM0MzsyMTgxLDkgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcbiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIHtcbiYjNDM7XHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXG4mIzQzO1x0Zmx1c2hfd29yayhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4mIzQzO1xuIFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4gXHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19sb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvb3BfY2xyX2ZkJiMzNDssCiAgICAmIzM0O2xvb3BfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2xvb3BfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svbG9vcC5jKSwgYWx0ZXJpbmcgaG93IGxvb3AgZGV2aWNlcyBhcmUgdG9ybiBkb3duIHdoZW4gcmVsZWFzZWQuIEl0IGNvbnZlcnRzIF9fbG9vcF9jbHJfZmQgdG8gcnVuIGFzeW5jaHJvbm91c2x5IG9uIGEgd29ya3F1ZXVlLCBtb2RpZmllcyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiAoYWRkaW5nIHN5bmNocm9uaXplX3JjdSwgZHJhaW5fd29ya3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKSwgYWRqdXN0cyBkZXZpY2UgYW5kIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbi4gTG9vcCBkZXZpY2VzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIGZ1enphYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjI4MWEyNWYxNjY3OGVlZDM1M2FhMjQ4NDNjN2I2OGY2MGQ2MTEyNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDg6MTc6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDZmMTI5NzYwMzViMDkuLjUxNjExOGIzYTE2YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC03NSw2ICYjNDM7NzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2UgewogCXN0cnVjdCBnZW5kaXNrCQkqbG9fZGlzazsKIAlzdHJ1Y3QgbXV0ZXgJCWxvX211dGV4OwogCWJvb2wJCQlpZHJfdmlzaWJsZTsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CWxvX2Nscl93b3JrOwogfTsKIAogc3RydWN0IGxvb3BfY21kIHsKQEAgLTExMzQsMTMgJiM0MzsxMTM1LDQyIEBAIHN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQomIzQzO3N0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewomIzQzOwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspOwomIzQzOwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLSZndDtsb19kaXNrOwogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwogCXN0cnVjdCBmaWxlICpmaWxwOwogCWdmcF90IGdmcCA9IGxvLSZndDtvbGRfZ2ZwX21hc2s7CiAJaW50IGVycjsKIAomIzQzOwkvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwkvKgomIzQzOwkgKiBTaW5jZSBsb29wX3F1ZXVlX3JxKCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jaywgdGhpcyBzeW5jaHJvbml6ZV9yY3UoKQomIzQzOwkgKiBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBxdWV1ZV93b3JrKCkgY2FsbHMgYXJlIG1hZGUgZnJvbSBsb29wX3F1ZXVlX3dvcmsoKQomIzQzOwkgKiBmcm9tIGxvb3BfcXVldWVfcnEoKS4gU3Vic2VxdWVudCBsb29wX3F1ZXVlX3JxKCkgY2FsbHMgd2hpY2ggYXJlIG1hZGUgYWZ0ZXIKJiM0MzsJICogdGhpcyBzeW5jaHJvbml6ZV9yY3UoKSByZXR1cm5lZCBzaGFsbCBzZWUgbG8tJmd0O2xvX3N0YXRlICE9IExvX2JvdW5kIGFuZAomIzQzOwkgKiByZXR1cm4gd2l0aCBCTEtfU1RTX0lPRVJSLgomIzQzOwkgKi8KJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgZHJhaW5fd29ya3F1ZXVlKCkgbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgbG9vcF9oYW5kbGVfY21kKCkgY2FsbHMgYXJlCiYjNDM7CSAqIG1hZGUgZnJvbSBsb29wX3Byb2Nlc3Nfd29yaygpIGZyb20gbG9vcF93b3JrZm4oKS9sb29wX3Jvb3RjZ193b3JrZm4oKS4KJiM0MzsJICovCiYjNDM7CWRyYWluX3dvcmtxdWV1ZShsby0mZ3Q7d29ya3F1ZXVlKTsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBibGtfbXFfZnJlZXplX3F1ZXVlKCkgd2FpdHMgZm9yIGNvbXBsZXRpb24gb2YgYWxsIG91dHN0YW5kaW5nIEkvTwomIzQzOwkgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyCiYjNDM7CSAqIHRvIHJlYWNoIDAuIFNpbmNlIHRoZSBsby0mZ3Q7bG9fc3RhdGUgIT0gTG9fYm91bmQgY2hlY2sgaW4gbG9vcF9xdWV1ZV9ycSgpCiYjNDM7CSAqIGd1YXJhbnRlZXMgdGhhdCBubyBtb3JlIG5ldyBJL08gcmVxdWVzdHMgYXJlIG1hZGUsIHdlIGNhbiBjYWxsCiYjNDM7CSAqIGJsa19tcV91bmZyZWV6ZV9xdWV1ZSgpIGltbWVkaWF0ZWx5IGFmdGVyIGJsa19tcV9mcmVlemVfcXVldWUoKSByZXR1cm5zLgomIzQzOwkgKi8KJiM0MzsJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUpKTsKJiM0MzsKJiM0MzsJLyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwlXQVJOX09OX09OQ0UobG8tJmd0O2xvX3N0YXRlICE9IExvX3J1bmRvd24pOwomIzQzOwogCXNwaW5fbG9ja19pcnEoJmFtcDtsby0mZ3Q7bG9fbG9jayk7CiAJZmlscCA9IGxvLSZndDtsb19iYWNraW5nX2ZpbGU7CiAJbG8tJmd0O2xvX2JhY2tpbmdfZmlsZSA9IE5VTEw7CkBAIC0xMTUxLDEyICYjNDM7MTE4MSw3IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlsby0mZ3Q7bG9fc2l6ZWxpbWl0ID0gMDsKIAltZW1zZXQobG8tJmd0O2xvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTsKIAotCS8qCi0JICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuCi0JICoKLQkgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbAotCSAqIC0mZ3Q7cmVsZWFzZSBjYWxsIG9ubHksIHNvIHRoZXJlIGNhbiYjMzk7dCBiZSBhbnkgb3V0c3RhbmRpbmcgSS9PLgotCSAqLwomIzQzOwkvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi8KIAlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSk7CiAJbGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFOwogCWxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7CkBAIC0xMTY4LDggJiM0MzsxMTkzLDYgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCS8qIGxldCB1c2VyLXNwYWNlIGtub3cgYWJvdXQgdGhpcyBjaGFuZ2UgKi8KIAlrb2JqZWN0X3VldmVudCgmYW1wO2Rpc2tfdG9fZGV2KGxvLSZndDtsb19kaXNrKS0mZ3Q7a29iaiwgS09CSl9DSEFOR0UpOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtJmd0O2ZfbWFwcGluZywgZ2ZwKTsKLQkvKiBUaGlzIGlzIHNhZmU6IG9wZW4oKSBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlLiAqLwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCiAJZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobG8tJmd0O2xvX2Rpc2spOwogCkBAIC0xMTk5LDExICYjNDM7MTIyMiwxOCBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiAJV1JJVEVfT05DRShsby0mZ3Q7bG9fc3RhdGUsIExvX3VuYm91bmQpOwogCW11dGV4X3VubG9jaygmYW1wO2xvLSZndDtsb19tdXRleCk7CiAKJiM0MzsJLyogU3RlcCAzOiBEcm9wIHJlZmNvdW50cywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovCiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwomIzQzOwlwdXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTsKJiM0MzsKIAkvKgotCSAqIE5lZWQgbm90IGhvbGQgbG9fbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuIENhbGxpbmcgZnB1dCBob2xkaW5nCi0JICogbG9fbXV0ZXggdHJpZ2dlcnMgYSBjaXJjdWxhciBsb2NrIGRlcGVuZGVuY3kgcG9zc2liaWxpdHkgd2FybmluZyBhcwotCSAqIGZwdXQgY2FuIHRha2Ugb3Blbl9tdXRleCB3aGljaCBpcyB1c3VhbGx5IHRha2VuIGJlZm9yZSBsb19tdXRleC4KJiM0MzsJICogVGhpcyBpcyBzYWZlOiBmbHVzaF93b3JrKCkgZnJvbSBsb29wX3JlbW92ZSgpIGZyb20gbG9vcF9leGl0KCkgd2FpdHMKJiM0MzsJICogdW50aWwgdGhpcyBmdW5jdGlvbiByZXR1cm5zOyBlZmZlY3RpdmVseSBkcm9wcGluZyB0aGUgZmluYWwgbW9kdWxlCiYjNDM7CSAqIHJlZmVyZW5jZXMgc3luY2hyb25vdXNseS4KIAkgKi8KJiM0MzsJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiYjNDM7CiAJZnB1dChmaWxwKTsKIH0KIApAQCAtMTc2OSw4ICYjNDM7MTc5OSwyMCBAQCBzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCW5lZWRfY2xlYXIgPSAobG8tJmd0O2xvX3N0YXRlID09IExvX3J1bmRvd24pOwogCW11dGV4X3VubG9jaygmYW1wO2xvLSZndDtsb19tdXRleCk7CiAKLQlpZiAobmVlZF9jbGVhcikKLQkJX19sb29wX2Nscl9mZChsbyk7CiYjNDM7CWlmICghbmVlZF9jbGVhcikKJiM0MzsJCXJldHVybjsKJiM0MzsJLyoKJiM0MzsJICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZwomIzQzOwkgKiBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKSB0byBXUSBjb250ZXh0LiBUaGUgTG9fcnVuZG93biBzdGF0ZQomIzQzOwkgKiBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy4KJiM0MzsJICoKJiM0MzsJICogR3JhYiBkaXNrIHJlZmVyZW5jZSB3aGljaCB3aWxsIGJlIGRyb3BwZWQgYXMgc29vbiBhcwomIzQzOwkgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLSZndDtvcGVuX211dGV4LgomIzQzOwkgKiBXZSBkb24mIzM5O3QgbmVlZCB0byBncmFiIGRpc2stJmd0O2ZvcHMtJmd0O293bmVyIHJlZmVyZW5jZSBiZWNhdXNlCiYjNDM7CSAqIHdlIGFyZSBob2xkaW5nIG9uZSBvYnRhaW5lZCBieSBsb29wX2NvbmZpZ3VyZSgpLgomIzQzOwkgKi8KJiM0MzsJZ2V0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7CiYjNDM7CXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZhbXA7bG8tJmd0O2xvX2Nscl93b3JrKTsKIH0KIAogc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQpAQCAtMjAzNCw2ICYjNDM7MjA3Niw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAJbG8gPSBremFsbG9jX29iaigqbG8pOwogCWlmICghbG8pCiAJCWdvdG8gb3V0OwomIzQzOwlJTklUX1dPUksoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpOwogCWxvLSZndDt3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtsby0mZ3Q7aWRsZV93b3JrZXJfbGlzdCk7CiAJdGltZXJfc2V0dXAoJmFtcDtsby0mZ3Q7dGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpOwpAQCAtMjEzOCw2ICYjNDM7MjE4MSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAKIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiB7CiYjNDM7CS8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi8KJiM0MzsJZmx1c2hfd29yaygmYW1wO2xvLSZndDtsb19jbHJfd29yayk7CiYjNDM7CiAJLyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovCiAJZGVsX2dlbmRpc2sobG8tJmd0O2xvX2Rpc2spOwogCWJsa19tcV9mcmVlX3RhZ19zZXQoJmFtcDtsby0mZ3Q7dGFnX3NldCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb29wIERldmljZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGtlcm5lbCBjb2RlLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgdGFyZ2V0aW5nIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AsIHNwZWNpZmljYWxseSB0aGUgbG9vcCBkZXZpY2UgcmVsZWFzZSBhbmQgdGVhcmRvd24gbWVjaGFuaXNtcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgY2FyZWZ1bCBpbnNwZWN0aW9uLgoKTG9va2luZyBjbG9zZXIsIHRoZSBwYXRjaCBpcyBtYWtpbmcgc2V2ZXJhbCBrZXkgYWx0ZXJhdGlvbnMuIEZpcnN0LCBpdCYjMzk7cyByZXdvcmtpbmcgaG93IHRoZSBsb29wIGRldmljZSBpcyByZWxlYXNlZCBhbmQgdG9ybiBkb3duLCB3aGljaCBpbmNsdWRlcyBjaGFuZ2VzIHRvIGBsb19yZWxlYXNlYCwgYF9fbG9vcF9jbHJfZmRgLCBgbG9vcF9hZGRgLCBhbmQgYGxvb3BfcmVtb3ZlYC4gT2YgcGFydGljdWxhciBpbnRlcmVzdCBpcyB0aGUgY29udmVyc2lvbiBvZiBgX19sb29wX2Nscl9mZGAgaW50byBhIHdvcmtxdWV1ZSBoYW5kbGVyLiBUaGV5JiMzOTtyZSBkZWZlcnJpbmcgaXQgdG8gYHN5c3RlbV9sb25nX3dxYCB2aWEgYGxvX3JlbGVhc2VgLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIHNvbWUgY29uY3VycmVuY3kgaXNzdWVzIG9yIGxvbmctcnVubmluZyBvcGVyYXRpb25zLiBUaGUgYWRkaXRpb24gb2YgYHN5bmNocm9uaXplX3JjdSgpYCwgYGRyYWluX3dvcmtxdWV1ZSgpYCwgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgIGZ1cnRoZXIgc3VnZ2VzdHMgdGhpcy4gSeKAmW0gYWxzbyBzZWVpbmcgYSBgV0FSTl9PTl9PTkNFYCBhYm91dCB0aGUgYGxvX3N0YXRlYCwgc3BlY2lmaWNhbGx5IHdoZW4gbm90IGluIGBMb19ydW5kb3duYC4gVGhpcyBoaW50cyBhdCBhIHBvdGVudGlhbCBzdGF0ZSB0cmFuc2l0aW9uIHByb2JsZW0gb3IgYSByYWNlIGNvbmRpdGlvbi4gRmluYWxseSwgdGhleSYjMzk7cmUgcGxheWluZyB3aXRoIG1vZHVsZSByZWZjb3VudGluZywgZGV2aWNlIHJlZmNvdW50aW5nLCBhbmQgbXV0ZXggbG9ja2luZyBvcmRlciwgd2hpY2ggaXMgYWx3YXlzIGEgcmVkIGZsYWcgdGhhdCBuZWVkcyBhIHRob3JvdWdoIGxvb2sgb3Zlci4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IEdpdmVuIHRoZSBuYXR1cmUgb2YgbG9vcCBkZXZpY2VzIGFzIHZpcnR1YWwgYmxvY2sgZGV2aWNlcywgYW5kIGtub3dpbmcgdGhlIGhpc3Rvcnkgb2YgZnV6emluZyB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgbm90IG9ubHkgcmVhY2hhYmxlIGJ1dCBoZWF2aWx5IGV4ZXJjaXNlZC4gTG9vcCBkZXZpY2VzIGFyZSB1c2VkIGV4dGVuc2l2ZWx5IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZSBgaW9jdGwoLi4uLCBMT09QXyopYCwgbW91bnQsIGFuZCBibG9jayBJL08gb3BlcmF0aW9ucyBhcmUgYWxsIGZyZXF1ZW50LiBTbywgdGhlcmUmIzM5O3Mgbm8gcmVhc29uIHRvIGJlbGlldmUgdGhpcyBpc27igJl0IGNyaXRpY2FsIGNvZGUuCgpOZXh0IHN0ZXA6IGxldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIEkmIzM5O2xsIHJ1biBgZ3JlcHBlcmAgb3IganVzdCBjaGVjayBgZHJpdmVycy9ibG9jay9LY29uZmlnYCB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTE9PUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE0MD1jb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0My1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNDQ6Y29uZmlnIEJMS19ERVZfTE9PUFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0NS1cdHRyaXN0YXRlIFwmIzM0O0xvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE3OC1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNzk6Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODAtXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBwcmUtY3JlYXRlIGF0IGluaXQgdGltZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBCbG9jayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgYmxvY2sgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlIGFuZCBoZWFkIGRvd24gdG8gYXJvdW5kIGxpbmUgMTQ0LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgYXJlIGRlZmluZWQuIEhvcGVmdWxseSwgdGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyByZXF1aXJlZCBvciBwb3RlbnRpYWxseSBjb25mbGljdHMgd2l0aCBvdGhlciBzZXR0aW5ncyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHJlbGF0aW9uc2hpcHMgdGhlcmUsIGFuZCB3aGF0IG90aGVyIHNldHRpbmdzIGFyZSBuZWNlc3NhcnkgZm9yIHRoZSBjb25maWcgb3B0aW9ucyBoZXJlIHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0NDpcdGNvbmZpZyBCTEtfREVWX0xPT1BcbiAxNDU6XHRcdHRyaXN0YXRlIFwmIzM0O0xvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMTQ2Olx0XHRoZWxwXG4gMTQ3Olx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGEgcmVndWxhciBmaWxlIGFzIGEgYmxvY2tcbiAxNDg6XHRcdCAgZGV2aWNlOyB5b3UgY2FuIHRoZW4gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gdGhhdCBibG9jayBkZXZpY2UgYW5kXG4gMTQ5Olx0XHQgIG1vdW50IGl0IGp1c3QgYXMgeW91IHdvdWxkIG1vdW50IG90aGVyIGJsb2NrIGRldmljZXMgc3VjaCBhcyBoYXJkXG4gMTUwOlx0XHQgIGRyaXZlIHBhcnRpdGlvbnMsIENELVJPTSBkcml2ZXMgb3IgZmxvcHB5IGRyaXZlcy4gVGhlIGxvb3AgZGV2aWNlc1xuIDE1MTpcdFx0ICBhcmUgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgd2l0aCBtYWpvciBudW1iZXIgNyBhbmQgdHlwaWNhbGx5XG4gMTUyOlx0XHQgIGNhbGxlZCAvZGV2L2xvb3AwLCAvZGV2L2xvb3AxIGV0Yy5cbiAxNTM6XHRcbiAxNTQ6XHRcdCAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY2hlY2sgYW4gSVNPIDk2NjAgZmlsZSBzeXN0ZW0gYmVmb3JlXG4gMTU1Olx0XHQgIGJ1cm5pbmcgdGhlIENELCBvciBpZiB5b3Ugd2FudCB0byB1c2UgZmxvcHB5IGltYWdlcyB3aXRob3V0IGZpcnN0XG4gMTU2Olx0XHQgIHdyaXRpbmcgdGhlbSB0byBmbG9wcHkuIEZ1cnRoZXJtb3JlLCBzb21lIExpbnV4IGRpc3RyaWJ1dGlvbnMgYXZvaWRcbiAxNTc6XHRcdCAgdGhlIG5lZWQgZm9yIGEgZGVkaWNhdGVkIExpbnV4IHBhcnRpdGlvbiBieSBrZWVwaW5nIHRoZWlyIGNvbXBsZXRlXG4gMTU4Olx0XHQgIHJvb3QgZmlsZSBzeXN0ZW0gaW5zaWRlIGEgRE9TIEZBVCBmaWxlIHVzaW5nIHRoaXMgbG9vcCBkZXZpY2VcbiAxNTk6XHRcdCAgZHJpdmVyLlxuIDE2MDpcdFxuIDE2MTpcdFx0ICBUbyB1c2UgdGhlIGxvb3AgZGV2aWNlLCB5b3UgbmVlZCB0aGUgbG9zZXR1cCB1dGlsaXR5LCBmb3VuZCBpbiB0aGVcbiAxNjI6XHRcdCAgdXRpbC1saW51eCBwYWNrYWdlLCBzZWVcbiAxNjM6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvdXRpbC1saW51eC9cdTAwM2UuXG4gMTY0Olx0XG4gMTY1Olx0XHQgIFRoZSBsb29wIGRldmljZSBkcml2ZXIgY2FuIGFsc28gYmUgdXNlZCB0byBcJiMzNDtoaWRlXCYjMzQ7IGEgZmlsZSBzeXN0ZW0gaW5cbiAxNjY6XHRcdCAgYSBkaXNrIHBhcnRpdGlvbiwgZmxvcHB5LCBvciByZWd1bGFyIGZpbGUsIGVpdGhlciB1c2luZyBlbmNyeXB0aW9uXG4gMTY3Olx0XHQgIChzY3JhbWJsaW5nIHRoZSBkYXRhKSBvciBzdGVnYW5vZ3JhcGh5IChoaWRpbmcgdGhlIGRhdGEgaW4gdGhlIGxvd1xuIDE2ODpcdFx0ICBiaXRzIG9mLCBzYXksIGEgc291bmQgZmlsZSkuIFRoaXMgaXMgYWxzbyBzYWZlIGlmIHRoZSBmaWxlIHJlc2lkZXNcbiAxNjk6XHRcdCAgb24gYSByZW1vdGUgZmlsZSBzZXJ2ZXIuXG4gMTcwOlx0XG4gMTcxOlx0XHQgIE5vdGUgdGhhdCB0aGlzIGxvb3AgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxvb3BiYWNrXG4gMTcyOlx0XHQgIGRldmljZSB1c2VkIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIGZyb20gdGhlIG1hY2hpbmUgdG8gaXRzZWxmLlxuIDE3MzpcdFxuIDE3NDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxNzU6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxvb3AuXG4gMTc2Olx0XG4gMTc3Olx0XHQgIE1vc3QgdXNlcnMgd2lsbCBhbnN3ZXIgTiBoZXJlLlxuIDE3ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMjEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb29wIERldmljZSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gYEJMS19ERVZfTE9PUGAgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGFueSBleHBsaWNpdGx5IGRlZmluZWQgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb25zIGl0IHRvdWNoZXMgd2l0aGluIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIFNvLCBsZXQmIzM5O3Mgc2VlLCB3ZSBoYXZlIGBfX2xvb3BfY2xyX2ZkYCwgYGxvX3JlbGVhc2VgLCBgbG9vcF9hZGRgLCBhbmQgYGxvb3BfcmVtb3ZlYCBhcyB0aGUga2V5IHBsYXllcnMgaGVyZS4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBjb25zaWRlciBhbnkgbm9uLXViaXF1aXRvdXMgZm9jdXMgc3ltYm9sczsgdGhhdCBsaXN0IGluY2x1ZGVzIHRoZSBzYW1lIGZ1bmN0aW9uczogYF9fbG9vcF9jbHJfZmRgLCBgbG9fcmVsZWFzZWAsIGBsb29wX2FkZGAsIGBsb29wX3JlbW92ZWAuIEkgaGF2ZSB0byBhbHNvIGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSBvZiBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucywgbGlrZSBgbG9vcF9jbHJfZmRgIG9yIGBsb29wX2NvbmZpZ3VyZWAsIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGFjdCBhcyB0cmlnZ2VycyBmb3IgdGhlc2UgY3JpdGljYWwgcGF0aHMuCgpOZXh0IHN0ZXA6IGxldCYjMzk7cyBkZWx2ZSBkZWVwZXIgaW50byBob3cgYGxvX3JlbGVhc2VgIGFuZCBgX19sb29wX2Nscl9mZGAgYXJlIGFjdHVhbGx5IGNhbGxlZCB3aXRoaW4gdGhlIHN5c3RlbS4gR3JlcHBpbmcgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBpcyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIGdldCBhIGZ1bGwgdmlldyBvZiB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9fcmVsZWFzZXxfX2xvb3BfY2xyX2ZkfGxvb3BfY2xyX2ZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9OTc9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDgtICogaXNfbG9vcF9kZXZpY2UoKSBpcyB0cnVlLCB3ZSBuZWVkIGEgZ2xvYmFsIGxvY2sgZm9yIHNlcmlhbGl6aW5nIGNvbmN1cnJlbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwOTogKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkvX19sb29wX2Nscl9mZCgpIGNhbGxzLlxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEwLSAqL1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMDQ9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEzNy1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExMzg6c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTM5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjEzLVx0ICogbG8tXHUwMDNlbG9fc3RhdGUgaXMgc2V0IHRvIExvX3VuYm91bmQgaGVyZSBhZnRlciByZW1vdmluZyBwYXJ0aXRpb25zIGhhc1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxNDpcdCAqIGZpbmlzaGVkLiBUaGVyZSBjYW5ub3QgYmUgYW55Ym9keSBlbHNlIGVudGVyaW5nIF9fbG9vcF9jbHJfZmQoKSBhc1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxNS1cdCAqIExvX3J1bmRvd24gc3RhdGUgcHJvdGVjdHMgdXMgZnJvbSBhbGwgdGhlIG90aGVyIHBsYWNlcyB0cnlpbmcgdG9cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjM5LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTI0MDpzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQ1LVx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjQ2Olx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyNDctXHQgKlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE1Njc9c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU5OC1cdGNhc2UgTE9PUF9DTFJfRkQ6XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTk5Olx0XHRyZXR1cm4gbG9vcF9jbHJfZmQobG8pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTYwMC1cdGNhc2UgTE9PUF9TRVRfU1RBVFVTOlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3Njc9c3RhdGljIGludCBsb19vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc4MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3ODI6c3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3ODMte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MDUtXHQgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODA2Olx0ICogZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkgdG8gV1EgY29udGV4dC4gVGhlIExvX3J1bmRvd24gc3RhdGVcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MDctXHQgKiBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy5cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODA5LVx0ICogR3JhYiBkaXNrIHJlZmVyZW5jZSB3aGljaCB3aWxsIGJlIGRyb3BwZWQgYXMgc29vbiBhc1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxMDpcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC5cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTEtXHQgKiBXZSBkb24mIzM5O3QgbmVlZCB0byBncmFiIGRpc2stXHUwMDNlZm9wcy1cdTAwM2Vvd25lciByZWZlcmVuY2UgYmVjYXVzZVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MzItXHQub3BlbiA9ICAgICAgICAgbG9fb3BlbixcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4MzM6XHQucmVsZWFzZSA9XHRsb19yZWxlYXNlLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgzNC1cdC5pb2N0bCA9XHRsb19pb2N0bCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDYzPXN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA3OC1cdFx0Z290byBvdXQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDc5Olx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwODAtXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjE4Mj1zdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4My17XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTg0Olx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4NS1cdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NDcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBsb29wX2Nscl9mZGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgb3ZlciB0byB0aGUgYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGxvb3BfY2xyX2ZkYCBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIG1lbnRhbGx5IHByZXBhcmUgdG8gcGFyc2UgdGhlIGNvZGUsIGZvY3VzaW5nIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGNsZWFycyBhIGZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggYSBsb29wIGRldmljZSwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaXNtIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBrZXJuZWwmIzM5O3MgbG9ja2luZyBzdHJhdGVnaWVzIGluIHRoaXMgYXJlYSwgdG9vLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjM1Olx0XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbjEyMzY6XHRcbjEyMzc6XHRcdGZwdXQoZmlscCk7XG4xMjM4Olx0fVxuMTIzOTpcdFxuMTI0MDpcdHN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbjEyNDE6XHR7XG4xMjQyOlx0XHRpbnQgZXJyO1xuMTI0MzpcdFxuMTI0NDpcdFx0LypcbjEyNDU6XHRcdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxuMTI0NjpcdFx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cbjEyNDc6XHRcdCAqXG4xMjQ4Olx0XHQgKiBUaGVyZWZvcmUsIHVzZSBnbG9iYWwgbG9jayB3aGVuIHNldHRpbmcgTG9fcnVuZG93biBzdGF0ZSBpbiBvcmRlciB0b1xuMTI0OTpcdFx0ICogbWFrZSBzdXJlIHRoYXQgbG9vcF92YWxpZGF0ZV9maWxlKCkgd2lsbCBmYWlsIGlmIHRoZSBcJiMzNDtzdHJ1Y3QgZmlsZVwmIzM0O1xuMTI1MDpcdFx0ICogd2hpY2ggbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGZvdW5kIHZpYSBmZ2V0KCkgd2FzIHRoaXNcbjEyNTE6XHRcdCAqIGxvb3AgZGV2aWNlLlxuMTI1MjpcdFx0ICovXG4xMjUzOlx0XHRlcnIgPSBsb29wX2dsb2JhbF9sb2NrX2tpbGxhYmxlKGxvLCB0cnVlKTtcbjEyNTQ6XHRcdGlmIChlcnIpXG4xMjU1Olx0XHRcdHJldHVybiBlcnI7XG4xMjU2Olx0XHRpZiAobG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQpIHtcbjEyNTc6XHRcdFx0bG9vcF9nbG9iYWxfdW5sb2NrKGxvLCB0cnVlKTtcbjEyNTg6XHRcdFx0cmV0dXJuIC1FTlhJTztcbjEyNTk6XHRcdH1cbjEyNjA6XHRcdC8qXG4xMjYxOlx0XHQgKiBNYXJrIHRoZSBkZXZpY2UgZm9yIHJlbW92aW5nIHRoZSBiYWNraW5nIGRldmljZSBvbiBsYXN0IGNsb3NlLlxuMTI2MjpcdFx0ICogSWYgd2UgYXJlIHRoZSBvbmx5IG9wZW5lciwgYWxzbyBzd2l0Y2ggdGhlIHN0YXRlIHRvIHJvdW5kb3duIGhlcmUgdG9cbjEyNjM6XHRcdCAqIHByZXZlbnQgbmV3IG9wZW5lcnMgZnJvbSBjb21pbmcgaW4uXG4xMjY0Olx0XHQgKi9cbjEyNjU6XHRcbjEyNjY6XHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0FVVE9DTEVBUjtcbjEyNjc6XHRcdGlmIChkaXNrX29wZW5lcnMobG8tXHUwMDNlbG9fZGlzaykgPT0gMSlcbjEyNjg6XHRcdFx0V1JJVEVfT05DRShsby1cdTAwM2Vsb19zdGF0ZSwgTG9fcnVuZG93bik7XG4xMjY5Olx0XHRsb29wX2dsb2JhbF91bmxvY2sobG8sIHRydWUpO1xuMTI3MDpcdFxuMTI3MTpcdFx0cmV0dXJuIDA7XG4xMjcyOlx0fVxuMTI3MzpcdFxuMTI3NDpcdHN0YXRpYyBpbnRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc0OAoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAyOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBMb29wIERldmljZSBUZWFyZG93biBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgZGVlcCBpbnRvIHRoZSBsb29wIGRldmljZSYjMzk7cyB0ZWFyZG93biBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGNsZWFucyB1cCBhZnRlciBpdHNlbGYuIEl0JiMzOTtzIGRlZmVycmluZyB0aGUgYF9fbG9vcF9jbHJfZmRgIGZ1bmN0aW9uIHRvIGEgd29ya3F1ZXVlIChgbG9fY2xyX3dvcmtgKSB3aXRoaW4gYGxvX3JlbGVhc2VgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHBhdHRlcm4gZm9yIG1hbmFnaW5nIEkvTyBhbmQgcHJldmVudGluZyBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGUgcmVsZWFzZSBwcm9jZXNzLiBJIHNlZSB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBxdWl0ZSBhIGZldyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB0byBoYW5kbGUgdGhpcyBkZWZlcnJlZCBjbGVhbnVwIOKAkyBgc3luY2hyb25pemVfcmN1YCwgYGRyYWluX3dvcmtxdWV1ZWAsIGFuZCBldmVuIGZyZWV6aW5nIHRoZSBibG9jayBxdWV1ZSAoYGJsa19tcV9mcmVlemVfcXVldWVgKS4gVGhleSYjMzk7cmUgYWxzbyBjYXJlZnVsbHkgYWRqdXN0aW5nIG11dGV4IGxvY2tpbmcgYXJvdW5kIHRoZSBgZGlzay0mZ3Q7b3Blbl9tdXRleGAgYW5kIHVwZGF0aW5nIHRoZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIGRldmljZXMgd2l0aCBgZ2V0X2RldmljZWAsIGBwdXRfZGV2aWNlYCwgYW5kIGBtb2R1bGVfcHV0YCwgYWxsIGltcG9ydGFudCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gVGhlIGBXQVJOX09OX09OQ0UobG8tJmd0O2xvX3N0YXRlICE9IExvX3J1bmRvd24pYCBzZWVtcyBsaWtlIGEgZ29vZCBzYW5pdHkgY2hlY2s7IGEgbmljZSBhZGRpdGlvbiB0byBjYXRjaCBhbnkgdW5leHBlY3RlZCBzdGF0ZXMgZHVyaW5nIGNsZWFudXAuCgpHaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSB0ZWFyZG93biBsb2dpYyB3aXRoaW4gdGhlIGxvb3AgZHJpdmVyIChgZHJpdmVycy9ibG9jay9sb29wLmNgKSwgd2hpY2ggaXMgY3JpdGljYWwgYW5kIHByb25lIHRvIHN1YnRsZSBjb25jdXJyZW5jeSBidWdzLiBUaGUgZmFjdCB0aGF0IHRoZSBsb29wIGRyaXZlciBpcyBlYXNpbHkgYWNjZXNzaWJsZSBpbiBib3RoIFFFTVUgYW5kIHN5emthbGxlciBtYWtlcyBpdCBldmVuIG1vcmUgYXBwZWFsaW5nLiBUaGUgYWRkZWQgYXNzZXJ0aW9uIGFuZCBjb21wbGV4aXR5IGFyb3VuZCBjb25jdXJyZW5jeSDigJMgd29ya3F1ZXVlIGRlZmVycmFsLCBxdWV1ZSBmcmVlemluZywgUkNVIHN5bmNocm9uaXphdGlvbiwgYW5kIHdvcmtxdWV1ZSBkcmFpbmluZyDigJMgYWxsIHNjcmVhbSAmIzM0O3BvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuJiMzNDsKCkkgc2hvdWxkIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBfX2xvb3BfY2xyX2ZkYCwgYGxvX3JlbGVhc2VgLCBgbG9vcF9jbHJfZmRgLCBgbG9vcF9yZW1vdmVgLCBhbmQgYGxvb3BfYWRkYC4gVGhlc2UgYXJlIHdoZXJlIHRoZSBjb3JlIGNoYW5nZXMgc2VlbSB0byBiZSBjb25jZW50cmF0ZWQuCgpBbmQsIG9mIGNvdXJzZSwgdGhlIGBCTEtfREVWX0xPT1BgIEVuYWJsZUNvbmZpZyBpcyBlc3NlbnRpYWwuCgpJIHdpbGwgbmVlZCB0byBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb29wX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtsb29wX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL2xvb3AuYyksIGFsdGVyaW5nIGhvdyBsb29wIGRldmljZXMgYXJlIHRvcm4gZG93biB3aGVuIHJlbGVhc2VkLiBJdCBjb252ZXJ0cyBfX2xvb3BfY2xyX2ZkIHRvIHJ1biBhc3luY2hyb25vdXNseSBvbiBhIHdvcmtxdWV1ZSwgbW9kaWZpZXMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gKGFkZGluZyBzeW5jaHJvbml6ZV9yY3UsIGRyYWluX3dvcmtxdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZSksIGFkanVzdHMgZGV2aWNlIGFuZCBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24uIExvb3AgZGV2aWNlcyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19sb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvb3BfY2xyX2ZkJiMzNDssCiAgICAmIzM0O2xvb3BfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2xvb3BfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svbG9vcC5jKSwgYWx0ZXJpbmcgaG93IGxvb3AgZGV2aWNlcyBhcmUgdG9ybiBkb3duIHdoZW4gcmVsZWFzZWQuIEl0IGNvbnZlcnRzIF9fbG9vcF9jbHJfZmQgdG8gcnVuIGFzeW5jaHJvbm91c2x5IG9uIGEgd29ya3F1ZXVlLCBtb2RpZmllcyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiAoYWRkaW5nIHN5bmNocm9uaXplX3JjdSwgZHJhaW5fd29ya3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKSwgYWRqdXN0cyBkZXZpY2UgYW5kIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbi4gTG9vcCBkZXZpY2VzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIGZ1enphYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsb29wIGJsb2NrIGRyaXZlciB0ZWFyZG93biBwYXRoIGJ5IGRlZmVycmluZyBfX2xvb3BfY2xyX2ZkKCkgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9fY2xyX3dvcmspIHJhdGhlciB0aGFuIGV4ZWN1dGluZyBpdCBzeW5jaHJvbm91c2x5IGluIGxvX3JlbGVhc2UoKSB3aGlsZSBob2xkaW5nIG9wZW5fbXV0ZXguIFRoaXMgcHJldmVudHMgbG9jayBvcmRlciBjb25mbGljdHMgZHVyaW5nIEkvTyBmbHVzaGluZyBhbmQgcmVzb3VyY2UgcmVsZWFzZS5cblxuTWVtb3J5IFx1MDAyNiBzYW5pdGl6ZXIgYW5hbHlzaXM6XG4tIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHdvcmtfc3RydWN0IGZpZWxkIGBsb19jbHJfd29ya2AgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdmlhIGBremFsbG9jX29iaigpYCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLKClgIGluIGBsb29wX2FkZCgpYC5cbi0gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IHRvdWNoIG9yIGludHJvZHVjZSBhbnkgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsIG91dHB1dCwgb3IgQlBGIGJ1ZmZlcnMpLCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcy9zdGFjayB2YXJpYWJsZXMgdW5pbml0aWFsaXplZC5cbi0gVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiwgc3luY2hyb25pemF0aW9uLCByZWZjb3VudGluZyAoZ2V0X2RldmljZS9wdXRfZGV2aWNlLCBtb2R1bGVfcHV0LCBmcHV0KSwgbG9ja2luZywgYW5kIG9iamVjdCBsaWZldGltZXMgKHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucykuIFRoZXNlIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIG1lY2hhbmlzbXMuXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIyODFhMjVmMTY2NzhlZWQzNTNhYTI0ODQzYzdiNjhmNjBkNjExMjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA4OjE3OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCA2ZjEyOTc2MDM1YjA5Li41MTYxMThiM2ExNmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtNzUsNiAmIzQzOzc1LDcgQEAgc3RydWN0IGxvb3BfZGV2aWNlIHsKIAlzdHJ1Y3QgZ2VuZGlzawkJKmxvX2Rpc2s7CiAJc3RydWN0IG11dGV4CQlsb19tdXRleDsKIAlib29sCQkJaWRyX3Zpc2libGU7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdAlsb19jbHJfd29yazsKIH07CiAKIHN0cnVjdCBsb29wX2NtZCB7CkBAIC0xMTM0LDEzICYjNDM7MTEzNSw0MiBAQCBzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSwKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKJiM0MztzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKJiM0MzsJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTsKJiM0MzsJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBsby0mZ3Q7bG9fZGlzazsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKIAlnZnBfdCBnZnAgPSBsby0mZ3Q7b2xkX2dmcF9tYXNrOwogCWludCBlcnI7CiAKJiM0MzsJLyogU3RlcCAxOiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgSS9PLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJLyoKJiM0MzsJICogU2luY2UgbG9vcF9xdWV1ZV9ycSgpIGlzIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2ssIHRoaXMgc3luY2hyb25pemVfcmN1KCkKJiM0MzsJICogbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgcXVldWVfd29yaygpIGNhbGxzIGFyZSBtYWRlIGZyb20gbG9vcF9xdWV1ZV93b3JrKCkKJiM0MzsJICogZnJvbSBsb29wX3F1ZXVlX3JxKCkuIFN1YnNlcXVlbnQgbG9vcF9xdWV1ZV9ycSgpIGNhbGxzIHdoaWNoIGFyZSBtYWRlIGFmdGVyCiYjNDM7CSAqIHRoaXMgc3luY2hyb25pemVfcmN1KCkgcmV0dXJuZWQgc2hhbGwgc2VlIGxvLSZndDtsb19zdGF0ZSAhPSBMb19ib3VuZCBhbmQKJiM0MzsJICogcmV0dXJuIHdpdGggQkxLX1NUU19JT0VSUi4KJiM0MzsJICovCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGRyYWluX3dvcmtxdWV1ZSgpIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIGxvb3BfaGFuZGxlX2NtZCgpIGNhbGxzIGFyZQomIzQzOwkgKiBtYWRlIGZyb20gbG9vcF9wcm9jZXNzX3dvcmsoKSBmcm9tIGxvb3Bfd29ya2ZuKCkvbG9vcF9yb290Y2dfd29ya2ZuKCkuCiYjNDM7CSAqLwomIzQzOwlkcmFpbl93b3JrcXVldWUobG8tJmd0O3dvcmtxdWV1ZSk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHdhaXRzIGZvciBjb21wbGV0aW9uIG9mIGFsbCBvdXRzdGFuZGluZyBJL08KJiM0MzsJICogd2hpY2ggaGFzIGJlZW4gc2NoZWR1bGVkIHZpYSBsb29wX3F1ZXVlX3JxKCksIGJ5IHdhaXRpbmcgZm9yIHFfdXNhZ2VfY291bnRlcgomIzQzOwkgKiB0byByZWFjaCAwLiBTaW5jZSB0aGUgbG8tJmd0O2xvX3N0YXRlICE9IExvX2JvdW5kIGNoZWNrIGluIGxvb3BfcXVldWVfcnEoKQomIzQzOwkgKiBndWFyYW50ZWVzIHRoYXQgbm8gbW9yZSBuZXcgSS9PIHJlcXVlc3RzIGFyZSBtYWRlLCB3ZSBjYW4gY2FsbAomIzQzOwkgKiBibGtfbXFfdW5mcmVlemVfcXVldWUoKSBpbW1lZGlhdGVseSBhZnRlciBibGtfbXFfZnJlZXplX3F1ZXVlKCkgcmV0dXJucy4KJiM0MzsJICovCiYjNDM7CWJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUsIGJsa19tcV9mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlKSk7CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMjogUGVyZm9ybSByZW1haW5pbmcgY2xlYW51cCwgd2l0aCBvcGVuX211dGV4IGhlbGQuICovCiYjNDM7CW11dGV4X2xvY2soJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsJV0FSTl9PTl9PTkNFKGxvLSZndDtsb19zdGF0ZSAhPSBMb19ydW5kb3duKTsKJiM0MzsKIAlzcGluX2xvY2tfaXJxKCZhbXA7bG8tJmd0O2xvX2xvY2spOwogCWZpbHAgPSBsby0mZ3Q7bG9fYmFja2luZ19maWxlOwogCWxvLSZndDtsb19iYWNraW5nX2ZpbGUgPSBOVUxMOwpAQCAtMTE1MSwxMiAmIzQzOzExODEsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiAJbG8tJmd0O2xvX3NpemVsaW1pdCA9IDA7CiAJbWVtc2V0KGxvLSZndDtsb19maWxlX25hbWUsIDAsIExPX05BTUVfU0laRSk7CiAKLQkvKgotCSAqIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LgotCSAqCi0JICogTm8gcXVldWUgZnJlZXppbmcgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgZmluYWwKLQkgKiAtJmd0O3JlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4mIzM5O3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy4KLQkgKi8KJiM0MzsJLyogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuICovCiAJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwogCWxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTsKIAlsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFOwpAQCAtMTE2OCw4ICYjNDM7MTE5Myw2IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAkvKiBsZXQgdXNlci1zcGFjZSBrbm93IGFib3V0IHRoaXMgY2hhbmdlICovCiAJa29iamVjdF91ZXZlbnQoJmFtcDtkaXNrX3RvX2Rldihsby0mZ3Q7bG9fZGlzayktJmd0O2tvYmosIEtPQkpfQ0hBTkdFKTsKIAltYXBwaW5nX3NldF9nZnBfbWFzayhmaWxwLSZndDtmX21hcHBpbmcsIGdmcCk7Ci0JLyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi8KLQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIAogCWRpc2tfZm9yY2VfbWVkaWFfY2hhbmdlKGxvLSZndDtsb19kaXNrKTsKIApAQCAtMTE5OSwxMSAmIzQzOzEyMjIsMTggQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCVdSSVRFX09OQ0UobG8tJmd0O2xvX3N0YXRlLCBMb191bmJvdW5kKTsKIAltdXRleF91bmxvY2soJmFtcDtsby0mZ3Q7bG9fbXV0ZXgpOwogCiYjNDM7CS8qIFN0ZXAgMzogRHJvcCByZWZjb3VudHMsIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsKJiM0MzsJcHV0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7CiYjNDM7CiAJLyoKLQkgKiBOZWVkIG5vdCBob2xkIGxvX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLiBDYWxsaW5nIGZwdXQgaG9sZGluZwotCSAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXMKLQkgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguCiYjNDM7CSAqIFRoaXMgaXMgc2FmZTogZmx1c2hfd29yaygpIGZyb20gbG9vcF9yZW1vdmUoKSBmcm9tIGxvb3BfZXhpdCgpIHdhaXRzCiYjNDM7CSAqIHVudGlsIHRoaXMgZnVuY3Rpb24gcmV0dXJuczsgZWZmZWN0aXZlbHkgZHJvcHBpbmcgdGhlIGZpbmFsIG1vZHVsZQomIzQzOwkgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuCiAJICovCiYjNDM7CW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwomIzQzOwogCWZwdXQoZmlscCk7CiB9CiAKQEAgLTE3NjksOCAmIzQzOzE3OTksMjAgQEAgc3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAluZWVkX2NsZWFyID0gKGxvLSZndDtsb19zdGF0ZSA9PSBMb19ydW5kb3duKTsKIAltdXRleF91bmxvY2soJmFtcDtsby0mZ3Q7bG9fbXV0ZXgpOwogCi0JaWYgKG5lZWRfY2xlYXIpCi0JCV9fbG9vcF9jbHJfZmQobG8pOwomIzQzOwlpZiAoIW5lZWRfY2xlYXIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CS8qCiYjNDM7CSAqIEluIG9yZGVyIHRvIGZsdXNoIG91dHN0YW5kaW5nIEkvTyBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcKJiM0MzsJICogZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkgdG8gV1EgY29udGV4dC4gVGhlIExvX3J1bmRvd24gc3RhdGUKJiM0MzsJICogZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uCiYjNDM7CSAqCiYjNDM7CSAqIEdyYWIgZGlzayByZWZlcmVuY2Ugd2hpY2ggd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXMKJiM0MzsJICogcmV0dXJuaW5nIGZyb20gbG9fcmVsZWFzZSgpIGFuZCByZWxlYXNpbmcgZGlzay0mZ3Q7b3Blbl9tdXRleC4KJiM0MzsJICogV2UgZG9uJiMzOTt0IG5lZWQgdG8gZ3JhYiBkaXNrLSZndDtmb3BzLSZndDtvd25lciByZWZlcmVuY2UgYmVjYXVzZQomIzQzOwkgKiB3ZSBhcmUgaG9sZGluZyBvbmUgb2J0YWluZWQgYnkgbG9vcF9jb25maWd1cmUoKS4KJiM0MzsJICovCiYjNDM7CWdldF9kZXZpY2UoZGlza190b19kZXYoZGlzaykpOwomIzQzOwlxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCAmYW1wO2xvLSZndDtsb19jbHJfd29yayk7CiB9CiAKIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKQEAgLTIwMzQsNiAmIzQzOzIwNzYsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCWxvID0ga3phbGxvY19vYmooKmxvKTsKIAlpZiAoIWxvKQogCQlnb3RvIG91dDsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bG8tJmd0O2xvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTsKIAlsby0mZ3Q7d29ya2VyX3RyZWUgPSBSQl9ST09UOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bG8tJmd0O2lkbGVfd29ya2VyX2xpc3QpOwogCXRpbWVyX3NldHVwKCZhbXA7bG8tJmd0O3RpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTsKQEAgLTIxMzgsNiAmIzQzOzIxODEsOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogewomIzQzOwkvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovCiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspOwomIzQzOwogCS8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqLwogCWRlbF9nZW5kaXNrKGxvLSZndDtsb19kaXNrKTsKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZhbXA7bG8tJmd0O3RhZ19zZXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyMgoJCQkJCQkJb3V0cHV0OiAyODkKCQkJCQkJCXRob3VnaHRzOiAxMDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb24gZm9yIExvb3AgRGV2aWNlIFRlYXJkb3duIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gQWZ0ZXIgYW5hbHl6aW5nIHRoZSBjb2RlLCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgY29uY2x1ZGVkLgoKVGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgdGVhcmRvd24gcHJvY2VzcyBmb3IgbG9vcCBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHRoZSBiYWNraW5nIGZpbGUgaXMgaGFuZGxlZC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRvIGRlZmVyIHRoZSBgX19sb29wX2Nscl9mZGAgZnVuY3Rpb24gdG8gYSB3b3JrcXVldWUgKGBzeXN0ZW1fbG9uZ193cWApLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBibG9ja2luZyB0aGUgYGxvX3JlbGVhc2VgIHBhdGggd2hpbGUgdGhlIGxvb3AgZGV2aWNlIGZsdXNoZXMgSS9PLCB3aGljaCBjb3VsZCBsZWFkIHRvIGxvY2sgaW52ZXJzaW9uIG9yIGRlYWRsb2NrcyB3aGVuIGhvbGRpbmcgYGRpc2stJmd0O29wZW5fbXV0ZXhgLiBJdCYjMzk7cyBhIHN5bmNocm9uaXphdGlvbiBpbXByb3ZlbWVudC4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHN0cnVjdCB3b3JrX3N0cnVjdCBsb19jbHJfd29ya2AgYW5kIG1vZGlmaWVzIGhvdyBgX19sb29wX2Nscl9mZGAgaXMgY2FsbGVkLCB1c2luZyBgcXVldWVfd29ya2AgaW5zdGVhZCBvZiBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsIGZyb20gYGxvX3JlbGVhc2VgLiBJbXBvcnRhbnRseSwgdGhlIHRlYXJkb3duIG5vdyBpbnZvbHZlcyBwcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nOiBgZ2V0X2RldmljZWAvYHB1dF9kZXZpY2VgLCBgbW9kdWxlX3B1dGAsIGFuZCBgZnB1dGAgYXJlIGNhcmVmdWxseSBtYW5hZ2VkLiBUaGUgYGxvX2Nscl93b3JrYCBpcyBmbHVzaGVkIGluIGBsb29wX3JlbW92ZWAgdG8gZW5zdXJlIHRoYXQgdGhlIGNsZWFudXAgaGFwcGVucy4KCk5vdywgbGV0JiMzOTtzIGFkZHJlc3MgdGhlIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSSYjMzk7dmUgc2NydXRpbml6ZWQgdGhlIGNoYW5nZXMgZm9yIHRoZSBmb2xsb3dpbmc6CgoxLiAgKipTdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vIG5ldyBvciBtb2RpZmllZCBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogVGhlIGBJTklUX1dPUktgIGNhbGwgZW5zdXJlcyB0aGF0IGBsb19jbHJfd29ya2AgaXMgaW5pdGlhbGl6ZWQgYW5kIHNhZmUuIFRoZSBgbmVlZF9jbGVhcmAgdmFyaWFibGUgcmVsaWVzIG9uIHRoZSBzdGF0ZSBvZiB0aGUgYGxvb3BfZGV2aWNlYCBzdHJ1Y3QuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246KiogTm8gY29tcGxleCBhbGxvY2F0aW9ucyBvciBpbml0aWFsaXphdGlvbnMgYXJlIGFkZGVkIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgo0LiAgKipCb3VuZHMgY2hlY2tzIGFuZCBsb2dpYzoqKiBOb25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb3IgYWNjZXNzLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGFuIGFzeW5jaHJvbm91cyB0ZWFyZG93biB3aXRoIGEgZm9jdXMgb24gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nLCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGF0ZWQgdG8gcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIHByb2JsZW1zIHRoYXQgYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4vTE9DS0RFUCBhbmQgZ2VuZXJhbCBzYW5pdGl6ZXJzLCByYXRoZXIgdGhhbiBLTVNBTi4KCktNU0FOJiMzOTtzIHByaW1hcnkgcHVycG9zZSBpcyB0byBkZXRlY3QgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIHRob3NlIHJpc2tzLCBhbmQgdGhlIGV4aXN0aW5nIGNvZGUgcGF0aHMgYXJlIGxpa2VseSBhbHJlYWR5IGNvdmVyZWQuCgpJbiBzaG9ydCwgdGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbiAvIGxpZmV0aW1lIC8gZGVhZGxvY2sgaXNzdWUsIGFuZCBhbGwgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4gVGhlIGFuc3dlciBpcyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsb29wIGJsb2NrIGRyaXZlciB0ZWFyZG93biBwYXRoIGJ5IGRlZmVycmluZyBfX2xvb3BfY2xyX2ZkKCkgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9fY2xyX3dvcmspIHJhdGhlciB0aGFuIGV4ZWN1dGluZyBpdCBzeW5jaHJvbm91c2x5IGluIGxvX3JlbGVhc2UoKSB3aGlsZSBob2xkaW5nIG9wZW5fbXV0ZXguIFRoaXMgcHJldmVudHMgbG9jayBvcmRlciBjb25mbGljdHMgZHVyaW5nIEkvTyBmbHVzaGluZyBhbmQgcmVzb3VyY2UgcmVsZWFzZS5cblxuTWVtb3J5IFx1MDAyNiBzYW5pdGl6ZXIgYW5hbHlzaXM6XG4tIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHdvcmtfc3RydWN0IGZpZWxkIGBsb19jbHJfd29ya2AgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdmlhIGBremFsbG9jX29iaigpYCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLKClgIGluIGBsb29wX2FkZCgpYC5cbi0gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IHRvdWNoIG9yIGludHJvZHVjZSBhbnkgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsIG91dHB1dCwgb3IgQlBGIGJ1ZmZlcnMpLCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcy9zdGFjayB2YXJpYWJsZXMgdW5pbml0aWFsaXplZC5cbi0gVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiwgc3luY2hyb25pemF0aW9uLCByZWZjb3VudGluZyAoZ2V0X2RldmljZS9wdXRfZGV2aWNlLCBtb2R1bGVfcHV0LCBmcHV0KSwgbG9ja2luZywgYW5kIG9iamVjdCBsaWZldGltZXMgKHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucykuIFRoZXNlIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIG1lY2hhbmlzbXMuXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9vcCBibG9jayBkcml2ZXIgdGVhcmRvd24gcGF0aCBieSBkZWZlcnJpbmcgX19sb29wX2Nscl9mZCgpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlKCkgd2hpbGUgaG9sZGluZyBvcGVuX211dGV4LiBUaGlzIHByZXZlbnRzIGxvY2sgb3JkZXIgY29uZmxpY3RzIGR1cmluZyBJL08gZmx1c2hpbmcgYW5kIHJlc291cmNlIHJlbGVhc2UuXG5cbk1lbW9yeSBcdTAwMjYgc2FuaXRpemVyIGFuYWx5c2lzOlxuLSBUaGUgbmV3bHkgaW50cm9kdWNlZCB3b3JrX3N0cnVjdCBmaWVsZCBgbG9fY2xyX3dvcmtgIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHZpYSBga3phbGxvY19vYmooKWAgYW5kIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCBpbiBgbG9vcF9hZGQoKWAuXG4tIFRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCB0b3VjaCBvciBpbnRyb2R1Y2UgYW55IGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCBvdXRwdXQsIG9yIEJQRiBidWZmZXJzKSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMvc3RhY2sgdmFyaWFibGVzIHVuaW5pdGlhbGl6ZWQuXG4tIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGFzeW5jaHJvbm91cyBleGVjdXRpb24sIHN5bmNocm9uaXphdGlvbiwgcmVmY291bnRpbmcgKGdldF9kZXZpY2UvcHV0X2RldmljZSwgbW9kdWxlX3B1dCwgZnB1dCksIGxvY2tpbmcsIGFuZCBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpLiBUaGVzZSBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc21zLlxuXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjE3OjE5Ljg1NTcxMzkxOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDk3MDg0MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb29wX3JlbW92ZVwiLFxuICAgIFwibG9vcF9hZGRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9vcCBibG9jayBkcml2ZXIgdGVhcmRvd24gcGF0aCBieSBkZWZlcnJpbmcgX19sb29wX2Nscl9mZCgpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlKCkgd2hpbGUgaG9sZGluZyBvcGVuX211dGV4LiBUaGlzIHByZXZlbnRzIGxvY2sgb3JkZXIgY29uZmxpY3RzIGR1cmluZyBJL08gZmx1c2hpbmcgYW5kIHJlc291cmNlIHJlbGVhc2UuXFxuXFxuTWVtb3J5IFxcdTAwMjYgc2FuaXRpemVyIGFuYWx5c2lzOlxcbi0gVGhlIG5ld2x5IGludHJvZHVjZWQgd29ya19zdHJ1Y3QgZmllbGQgYGxvX2Nscl93b3JrYCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IGxvb3BfZGV2aWNlYCB2aWEgYGt6YWxsb2Nfb2JqKClgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUksoKWAgaW4gYGxvb3BfYWRkKClgLlxcbi0gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IHRvdWNoIG9yIGludHJvZHVjZSBhbnkgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsIG91dHB1dCwgb3IgQlBGIGJ1ZmZlcnMpLCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcy9zdGFjayB2YXJpYWJsZXMgdW5pbml0aWFsaXplZC5cXG4tIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGFzeW5jaHJvbm91cyBleGVjdXRpb24sIHN5bmNocm9uaXphdGlvbiwgcmVmY291bnRpbmcgKGdldF9kZXZpY2UvcHV0X2RldmljZSwgbW9kdWxlX3B1dCwgZnB1dCksIGxvY2tpbmcsIGFuZCBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpLiBUaGVzZSBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc21zLlxcblxcblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL2xvb3AuYyksIGFsdGVyaW5nIGhvdyBsb29wIGRldmljZXMgYXJlIHRvcm4gZG93biB3aGVuIHJlbGVhc2VkLiBJdCBjb252ZXJ0cyBfX2xvb3BfY2xyX2ZkIHRvIHJ1biBhc3luY2hyb25vdXNseSBvbiBhIHdvcmtxdWV1ZSwgbW9kaWZpZXMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gKGFkZGluZyBzeW5jaHJvbml6ZV9yY3UsIGRyYWluX3dvcmtxdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZSksIGFkanVzdHMgZGV2aWNlIGFuZCBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24uIExvb3AgZGV2aWNlcyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MTkuODU1NzE4MDc5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTc1MDQ5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiMjgxYTI1ZjE2Njc4ZWVkMzUzYWEyNDg0M2M3YjY4ZjYwZDYxMTI3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDg6MTc6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbmluZGV4IDZmMTI5NzYwMzViMDkuLjUxNjExOGIzYTE2YzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbkBAIC03NSw2ICs3NSw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XFxuIFxcdHN0cnVjdCBnZW5kaXNrXFx0XFx0KmxvX2Rpc2s7XFxuIFxcdHN0cnVjdCBtdXRleFxcdFxcdGxvX211dGV4O1xcbiBcXHRib29sXFx0XFx0XFx0aWRyX3Zpc2libGU7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdGxvX2Nscl93b3JrO1xcbiB9O1xcbiBcXG4gc3RydWN0IGxvb3BfY21kIHtcXG5AQCAtMTEzNCwxMyArMTEzNSw0MiBAQCBzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuK3N0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuK1xcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBsb19jbHJfd29yayk7XFxuK1xcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gbG8tXFx1MDAzZWxvX2Rpc2s7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbiBcXHRzdHJ1Y3QgZmlsZSAqZmlscDtcXG4gXFx0Z2ZwX3QgZ2ZwID0gbG8tXFx1MDAzZW9sZF9nZnBfbWFzaztcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdC8qIFN0ZXAgMTogRmx1c2ggYWxsIG91dHN0YW5kaW5nIEkvTywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovXFxuK1xcdC8qXFxuK1xcdCAqIFNpbmNlIGxvb3BfcXVldWVfcnEoKSBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLCB0aGlzIHN5bmNocm9uaXplX3JjdSgpXFxuK1xcdCAqIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIHF1ZXVlX3dvcmsoKSBjYWxscyBhcmUgbWFkZSBmcm9tIGxvb3BfcXVldWVfd29yaygpXFxuK1xcdCAqIGZyb20gbG9vcF9xdWV1ZV9ycSgpLiBTdWJzZXF1ZW50IGxvb3BfcXVldWVfcnEoKSBjYWxscyB3aGljaCBhcmUgbWFkZSBhZnRlclxcbitcXHQgKiB0aGlzIHN5bmNocm9uaXplX3JjdSgpIHJldHVybmVkIHNoYWxsIHNlZSBsby1cXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQgYW5kXFxuK1xcdCAqIHJldHVybiB3aXRoIEJMS19TVFNfSU9FUlIuXFxuK1xcdCAqL1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBkcmFpbl93b3JrcXVldWUoKSBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBsb29wX2hhbmRsZV9jbWQoKSBjYWxscyBhcmVcXG4rXFx0ICogbWFkZSBmcm9tIGxvb3BfcHJvY2Vzc193b3JrKCkgZnJvbSBsb29wX3dvcmtmbigpL2xvb3Bfcm9vdGNnX3dvcmtmbigpLlxcbitcXHQgKi9cXG4rXFx0ZHJhaW5fd29ya3F1ZXVlKGxvLVxcdTAwM2V3b3JrcXVldWUpO1xcbitcXHQvKlxcbitcXHQgKiBUaGlzIGJsa19tcV9mcmVlemVfcXVldWUoKSB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiBhbGwgb3V0c3RhbmRpbmcgSS9PXFxuK1xcdCAqIHdoaWNoIGhhcyBiZWVuIHNjaGVkdWxlZCB2aWEgbG9vcF9xdWV1ZV9ycSgpLCBieSB3YWl0aW5nIGZvciBxX3VzYWdlX2NvdW50ZXJcXG4rXFx0ICogdG8gcmVhY2ggMC4gU2luY2UgdGhlIGxvLVxcdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCBjaGVjayBpbiBsb29wX3F1ZXVlX3JxKClcXG4rXFx0ICogZ3VhcmFudGVlcyB0aGF0IG5vIG1vcmUgbmV3IEkvTyByZXF1ZXN0cyBhcmUgbWFkZSwgd2UgY2FuIGNhbGxcXG4rXFx0ICogYmxrX21xX3VuZnJlZXplX3F1ZXVlKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHJldHVybnMuXFxuK1xcdCAqL1xcbitcXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXFx1MDAzZWxvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVxcdTAwM2Vsb19xdWV1ZSkpO1xcbitcXG4rXFx0LyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi9cXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcdFdBUk5fT05fT05DRShsby1cXHUwMDNlbG9fc3RhdGUgIT0gTG9fcnVuZG93bik7XFxuK1xcbiBcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZsby1cXHUwMDNlbG9fbG9jayk7XFxuIFxcdGZpbHAgPSBsby1cXHUwMDNlbG9fYmFja2luZ19maWxlO1xcbiBcXHRsby1cXHUwMDNlbG9fYmFja2luZ19maWxlID0gTlVMTDtcXG5AQCAtMTE1MSwxMiArMTE4MSw3IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0bG8tXFx1MDAzZWxvX3NpemVsaW1pdCA9IDA7XFxuIFxcdG1lbXNldChsby1cXHUwMDNlbG9fZmlsZV9uYW1lLCAwLCBMT19OQU1FX1NJWkUpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuXFxuLVxcdCAqXFxuLVxcdCAqIE5vIHF1ZXVlIGZyZWV6aW5nIG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGZpbmFsXFxuLVxcdCAqIC1cXHUwMDNlcmVsZWFzZSBjYWxsIG9ubHksIHNvIHRoZXJlIGNhbid0IGJlIGFueSBvdXRzdGFuZGluZyBJL08uXFxuLVxcdCAqL1xcbitcXHQvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi9cXG4gXFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbiBcXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XFxuIFxcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XFxuQEAgLTExNjgsOCArMTE5Myw2IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0LyogbGV0IHVzZXItc3BhY2Uga25vdyBhYm91dCB0aGlzIGNoYW5nZSAqL1xcbiBcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGlza190b19kZXYobG8tXFx1MDAzZWxvX2Rpc2spLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIFxcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtXFx1MDAzZWZfbWFwcGluZywgZ2ZwKTtcXG4tXFx0LyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi9cXG4tXFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuIFxcbiBcXHRkaXNrX2ZvcmNlX21lZGlhX2NoYW5nZShsby1cXHUwMDNlbG9fZGlzayk7XFxuIFxcbkBAIC0xMTk5LDExICsxMjIyLDE4IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0V1JJVEVfT05DRShsby1cXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmxvLVxcdTAwM2Vsb19tdXRleCk7XFxuIFxcbitcXHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG4rXFxuK1xcdHB1dF9kZXZpY2UoZGlza190b19kZXYoZGlzaykpO1xcbitcXG4gXFx0LypcXG4tXFx0ICogTmVlZCBub3QgaG9sZCBsb19tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4gQ2FsbGluZyBmcHV0IGhvbGRpbmdcXG4tXFx0ICogbG9fbXV0ZXggdHJpZ2dlcnMgYSBjaXJjdWxhciBsb2NrIGRlcGVuZGVuY3kgcG9zc2liaWxpdHkgd2FybmluZyBhc1xcbi1cXHQgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguXFxuK1xcdCAqIFRoaXMgaXMgc2FmZTogZmx1c2hfd29yaygpIGZyb20gbG9vcF9yZW1vdmUoKSBmcm9tIGxvb3BfZXhpdCgpIHdhaXRzXFxuK1xcdCAqIHVudGlsIHRoaXMgZnVuY3Rpb24gcmV0dXJuczsgZWZmZWN0aXZlbHkgZHJvcHBpbmcgdGhlIGZpbmFsIG1vZHVsZVxcbitcXHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXFxuIFxcdCAqL1xcbitcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4rXFxuIFxcdGZwdXQoZmlscCk7XFxuIH1cXG4gXFxuQEAgLTE3NjksOCArMTc5OSwyMCBAQCBzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiBcXHRuZWVkX2NsZWFyID0gKGxvLVxcdTAwM2Vsb19zdGF0ZSA9PSBMb19ydW5kb3duKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsby1cXHUwMDNlbG9fbXV0ZXgpO1xcbiBcXG4tXFx0aWYgKG5lZWRfY2xlYXIpXFxuLVxcdFxcdF9fbG9vcF9jbHJfZmQobG8pO1xcbitcXHRpZiAoIW5lZWRfY2xlYXIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0LypcXG4rXFx0ICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZ1xcbitcXHQgKiBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKSB0byBXUSBjb250ZXh0LiBUaGUgTG9fcnVuZG93biBzdGF0ZVxcbitcXHQgKiBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy5cXG4rXFx0ICpcXG4rXFx0ICogR3JhYiBkaXNrIHJlZmVyZW5jZSB3aGljaCB3aWxsIGJlIGRyb3BwZWQgYXMgc29vbiBhc1xcbitcXHQgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLVxcdTAwM2VvcGVuX211dGV4LlxcbitcXHQgKiBXZSBkb24ndCBuZWVkIHRvIGdyYWIgZGlzay1cXHUwMDNlZm9wcy1cXHUwMDNlb3duZXIgcmVmZXJlbmNlIGJlY2F1c2VcXG4rXFx0ICogd2UgYXJlIGhvbGRpbmcgb25lIG9idGFpbmVkIGJ5IGxvb3BfY29uZmlndXJlKCkuXFxuK1xcdCAqL1xcbitcXHRnZXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcXG4rXFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5AQCAtMjAzNCw2ICsyMDc2LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4gXFx0bG8gPSBremFsbG9jX29iaigqbG8pO1xcbiBcXHRpZiAoIWxvKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZsby1cXHUwMDNlbG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpO1xcbiBcXHRsby1cXHUwMDNld29ya2VyX3RyZWUgPSBSQl9ST09UO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bG8tXFx1MDAzZWlkbGVfd29ya2VyX2xpc3QpO1xcbiBcXHR0aW1lcl9zZXR1cChcXHUwMDI2bG8tXFx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcXG5AQCAtMjEzOCw2ICsyMTgxLDkgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4gXFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIHtcXG4rXFx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xcbitcXHRmbHVzaF93b3JrKFxcdTAwMjZsby1cXHUwMDNlbG9fY2xyX3dvcmspO1xcbitcXG4gXFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXFxuIFxcdGRlbF9nZW5kaXNrKGxvLVxcdTAwM2Vsb19kaXNrKTtcXG4gXFx0YmxrX21xX2ZyZWVfdGFnX3NldChcXHUwMDI2bG8tXFx1MDAzZXRhZ19zZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODoxNzoyMC4yMTM4OTU3MjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4NTg5NTIyMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb29wX3JlbW92ZVwiLFxuICAgIFwibG9vcF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL2xvb3AuYyksIGFsdGVyaW5nIGhvdyBsb29wIGRldmljZXMgYXJlIHRvcm4gZG93biB3aGVuIHJlbGVhc2VkLiBJdCBjb252ZXJ0cyBfX2xvb3BfY2xyX2ZkIHRvIHJ1biBhc3luY2hyb25vdXNseSBvbiBhIHdvcmtxdWV1ZSwgbW9kaWZpZXMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gKGFkZGluZyBzeW5jaHJvbml6ZV9yY3UsIGRyYWluX3dvcmtxdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZSksIGFkanVzdHMgZGV2aWNlIGFuZCBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24uIExvb3AgZGV2aWNlcyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMjgxYTI1ZjE2Njc4ZWVkMzUzYWEyNDg0M2M3YjY4ZjYwZDYxMTI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwODoxNzoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDZmMTI5NzYwMzViMDkuLjUxNjExOGIzYTE2YzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC03NSw2ICs3NSw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXHRzdHJ1Y3QgZ2VuZGlza1x0XHQqbG9fZGlzaztcbiBcdHN0cnVjdCBtdXRleFx0XHRsb19tdXRleDtcbiBcdGJvb2xcdFx0XHRpZHJfdmlzaWJsZTtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdFx0bG9fY2xyX3dvcms7XG4gfTtcbiBcbiBzdHJ1Y3QgbG9vcF9jbWQge1xuQEAgLTExMzQsMTMgKzExMzUsNDIgQEAgc3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbitzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4rXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspO1xuK1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBsby1cdTAwM2Vsb19kaXNrO1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4gXHRzdHJ1Y3QgZmlsZSAqZmlscDtcbiBcdGdmcF90IGdmcCA9IGxvLVx1MDAzZW9sZF9nZnBfbWFzaztcbiBcdGludCBlcnI7XG4gXG4rXHQvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xuK1x0LypcbitcdCAqIFNpbmNlIGxvb3BfcXVldWVfcnEoKSBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLCB0aGlzIHN5bmNocm9uaXplX3JjdSgpXG4rXHQgKiBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBxdWV1ZV93b3JrKCkgY2FsbHMgYXJlIG1hZGUgZnJvbSBsb29wX3F1ZXVlX3dvcmsoKVxuK1x0ICogZnJvbSBsb29wX3F1ZXVlX3JxKCkuIFN1YnNlcXVlbnQgbG9vcF9xdWV1ZV9ycSgpIGNhbGxzIHdoaWNoIGFyZSBtYWRlIGFmdGVyXG4rXHQgKiB0aGlzIHN5bmNocm9uaXplX3JjdSgpIHJldHVybmVkIHNoYWxsIHNlZSBsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCBhbmRcbitcdCAqIHJldHVybiB3aXRoIEJMS19TVFNfSU9FUlIuXG4rXHQgKi9cbitcdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0LypcbitcdCAqIFRoaXMgZHJhaW5fd29ya3F1ZXVlKCkgbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgbG9vcF9oYW5kbGVfY21kKCkgY2FsbHMgYXJlXG4rXHQgKiBtYWRlIGZyb20gbG9vcF9wcm9jZXNzX3dvcmsoKSBmcm9tIGxvb3Bfd29ya2ZuKCkvbG9vcF9yb290Y2dfd29ya2ZuKCkuXG4rXHQgKi9cbitcdGRyYWluX3dvcmtxdWV1ZShsby1cdTAwM2V3b3JrcXVldWUpO1xuK1x0LypcbitcdCAqIFRoaXMgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHdhaXRzIGZvciBjb21wbGV0aW9uIG9mIGFsbCBvdXRzdGFuZGluZyBJL09cbitcdCAqIHdoaWNoIGhhcyBiZWVuIHNjaGVkdWxlZCB2aWEgbG9vcF9xdWV1ZV9ycSgpLCBieSB3YWl0aW5nIGZvciBxX3VzYWdlX2NvdW50ZXJcbitcdCAqIHRvIHJlYWNoIDAuIFNpbmNlIHRoZSBsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCBjaGVjayBpbiBsb29wX3F1ZXVlX3JxKClcbitcdCAqIGd1YXJhbnRlZXMgdGhhdCBubyBtb3JlIG5ldyBJL08gcmVxdWVzdHMgYXJlIG1hZGUsIHdlIGNhbiBjYWxsXG4rXHQgKiBibGtfbXFfdW5mcmVlemVfcXVldWUoKSBpbW1lZGlhdGVseSBhZnRlciBibGtfbXFfZnJlZXplX3F1ZXVlKCkgcmV0dXJucy5cbitcdCAqL1xuK1x0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlKSk7XG4rXG4rXHQvKiBTdGVwIDI6IFBlcmZvcm0gcmVtYWluaW5nIGNsZWFudXAsIHdpdGggb3Blbl9tdXRleCBoZWxkLiAqL1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0V0FSTl9PTl9PTkNFKGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX3J1bmRvd24pO1xuK1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdGZpbHAgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gXHRsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBOVUxMO1xuQEAgLTExNTEsMTIgKzExODEsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRsby1cdTAwM2Vsb19zaXplbGltaXQgPSAwO1xuIFx0bWVtc2V0KGxvLVx1MDAzZWxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTtcbiBcbi1cdC8qXG4tXHQgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC5cbi1cdCAqXG4tXHQgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbFxuLVx0ICogLVx1MDAzZXJlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4ndCBiZSBhbnkgb3V0c3RhbmRpbmcgSS9PLlxuLVx0ICovXG4rXHQvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi9cbiBcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuIFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuIFx0bGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbkBAIC0xMTY4LDggKzExOTMsNiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHQvKiBsZXQgdXNlci1zcGFjZSBrbm93IGFib3V0IHRoaXMgY2hhbmdlICovXG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRtYXBwaW5nX3NldF9nZnBfbWFzayhmaWxwLVx1MDAzZWZfbWFwcGluZywgZ2ZwKTtcbi1cdC8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovXG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiBcbiBcdGRpc2tfZm9yY2VfbWVkaWFfY2hhbmdlKGxvLVx1MDAzZWxvX2Rpc2spO1xuIFxuQEAgLTExOTksMTEgKzEyMjIsMTggQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0V1JJVEVfT05DRShsby1cdTAwM2Vsb19zdGF0ZSwgTG9fdW5ib3VuZCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFxuK1x0LyogU3RlcCAzOiBEcm9wIHJlZmNvdW50cywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcbitcdHB1dF9kZXZpY2UoZGlza190b19kZXYoZGlzaykpO1xuK1xuIFx0Lypcbi1cdCAqIE5lZWQgbm90IGhvbGQgbG9fbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuIENhbGxpbmcgZnB1dCBob2xkaW5nXG4tXHQgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzXG4tXHQgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguXG4rXHQgKiBUaGlzIGlzIHNhZmU6IGZsdXNoX3dvcmsoKSBmcm9tIGxvb3BfcmVtb3ZlKCkgZnJvbSBsb29wX2V4aXQoKSB3YWl0c1xuK1x0ICogdW50aWwgdGhpcyBmdW5jdGlvbiByZXR1cm5zOyBlZmZlY3RpdmVseSBkcm9wcGluZyB0aGUgZmluYWwgbW9kdWxlXG4rXHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXG4gXHQgKi9cbitcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuK1xuIFx0ZnB1dChmaWxwKTtcbiB9XG4gXG5AQCAtMTc2OSw4ICsxNzk5LDIwIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbi1cdGlmIChuZWVkX2NsZWFyKVxuLVx0XHRfX2xvb3BfY2xyX2ZkKGxvKTtcbitcdGlmICghbmVlZF9jbGVhcilcbitcdFx0cmV0dXJuO1xuK1x0LypcbitcdCAqIEluIG9yZGVyIHRvIGZsdXNoIG91dHN0YW5kaW5nIEkvTyBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmdcbitcdCAqIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpIHRvIFdRIGNvbnRleHQuIFRoZSBMb19ydW5kb3duIHN0YXRlXG4rXHQgKiBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy5cbitcdCAqXG4rXHQgKiBHcmFiIGRpc2sgcmVmZXJlbmNlIHdoaWNoIHdpbGwgYmUgZHJvcHBlZCBhcyBzb29uIGFzXG4rXHQgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLVx1MDAzZW9wZW5fbXV0ZXguXG4rXHQgKiBXZSBkb24ndCBuZWVkIHRvIGdyYWIgZGlzay1cdTAwM2Vmb3BzLVx1MDAzZW93bmVyIHJlZmVyZW5jZSBiZWNhdXNlXG4rXHQgKiB3ZSBhcmUgaG9sZGluZyBvbmUgb2J0YWluZWQgYnkgbG9vcF9jb25maWd1cmUoKS5cbitcdCAqL1xuK1x0Z2V0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4rXHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbkBAIC0yMDM0LDYgKzIwNzYsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFx0bG8gPSBremFsbG9jX29iaigqbG8pO1xuIFx0aWYgKCFsbylcbiBcdFx0Z290byBvdXQ7XG4rXHRJTklUX1dPUksoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpO1xuIFx0bG8tXHUwMDNld29ya2VyX3RyZWUgPSBSQl9ST09UO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlaWRsZV93b3JrZXJfbGlzdCk7XG4gXHR0aW1lcl9zZXR1cChcdTAwMjZsby1cdTAwM2V0aW1lciwgbG9vcF9mcmVlX2lkbGVfd29ya2Vyc190aW1lciwgVElNRVJfREVGRVJSQUJMRSk7XG5AQCAtMjEzOCw2ICsyMTgxLDkgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcbiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIHtcbitcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cbitcdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuK1xuIFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4gXHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODoxNzoyMC4yMTM4OTcxNDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Nzg0MjQ4ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9vcCBEZXZpY2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQga2VybmVsIGNvZGUuIFRoZSBtb2RpZmljYXRpb25zIGFyZSB0YXJnZXRpbmcgYGRyaXZlcnMvYmxvY2svbG9vcC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBsb29wIGRldmljZSByZWxlYXNlIGFuZCB0ZWFyZG93biBtZWNoYW5pc21zLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBjYXJlZnVsIGluc3BlY3Rpb24uXG5cbkxvb2tpbmcgY2xvc2VyLCB0aGUgcGF0Y2ggaXMgbWFraW5nIHNldmVyYWwga2V5IGFsdGVyYXRpb25zLiBGaXJzdCwgaXQncyByZXdvcmtpbmcgaG93IHRoZSBsb29wIGRldmljZSBpcyByZWxlYXNlZCBhbmQgdG9ybiBkb3duLCB3aGljaCBpbmNsdWRlcyBjaGFuZ2VzIHRvIGBsb19yZWxlYXNlYCwgYF9fbG9vcF9jbHJfZmRgLCBgbG9vcF9hZGRgLCBhbmQgYGxvb3BfcmVtb3ZlYC4gT2YgcGFydGljdWxhciBpbnRlcmVzdCBpcyB0aGUgY29udmVyc2lvbiBvZiBgX19sb29wX2Nscl9mZGAgaW50byBhIHdvcmtxdWV1ZSBoYW5kbGVyLiBUaGV5J3JlIGRlZmVycmluZyBpdCB0byBgc3lzdGVtX2xvbmdfd3FgIHZpYSBgbG9fcmVsZWFzZWAsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIHRoZXkncmUgYWRkcmVzc2luZyBzb21lIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBsb25nLXJ1bm5pbmcgb3BlcmF0aW9ucy4gVGhlIGFkZGl0aW9uIG9mIGBzeW5jaHJvbml6ZV9yY3UoKWAsIGBkcmFpbl93b3JrcXVldWUoKWAsIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpYCBmdXJ0aGVyIHN1Z2dlc3RzIHRoaXMuIEnigJltIGFsc28gc2VlaW5nIGEgYFdBUk5fT05fT05DRWAgYWJvdXQgdGhlIGBsb19zdGF0ZWAsIHNwZWNpZmljYWxseSB3aGVuIG5vdCBpbiBgTG9fcnVuZG93bmAuIFRoaXMgaGludHMgYXQgYSBwb3RlbnRpYWwgc3RhdGUgdHJhbnNpdGlvbiBwcm9ibGVtIG9yIGEgcmFjZSBjb25kaXRpb24uIEZpbmFsbHksIHRoZXkncmUgcGxheWluZyB3aXRoIG1vZHVsZSByZWZjb3VudGluZywgZGV2aWNlIHJlZmNvdW50aW5nLCBhbmQgbXV0ZXggbG9ja2luZyBvcmRlciwgd2hpY2ggaXMgYWx3YXlzIGEgcmVkIGZsYWcgdGhhdCBuZWVkcyBhIHRob3JvdWdoIGxvb2sgb3Zlci5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZT8gR2l2ZW4gdGhlIG5hdHVyZSBvZiBsb29wIGRldmljZXMgYXMgdmlydHVhbCBibG9jayBkZXZpY2VzLCBhbmQga25vd2luZyB0aGUgaGlzdG9yeSBvZiBmdXp6aW5nIHdpdGggdG9vbHMgbGlrZSBzeXprYWxsZXIsIGl0J3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgY29kZSBwYXRoIGlzIG5vdCBvbmx5IHJlYWNoYWJsZSBidXQgaGVhdmlseSBleGVyY2lzZWQuIExvb3AgZGV2aWNlcyBhcmUgdXNlZCBleHRlbnNpdmVseSBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGFuZCB0aGUgYGlvY3RsKC4uLiwgTE9PUF8qKWAsIG1vdW50LCBhbmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMgYXJlIGFsbCBmcmVxdWVudC4gU28sIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGJlbGlldmUgdGhpcyBpc27igJl0IGNyaXRpY2FsIGNvZGUuXG5cbk5leHQgc3RlcDogbGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gYnVpbGQgYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gSSdsbCBydW4gYGdyZXBwZXJgIG9yIGp1c3QgY2hlY2sgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdG8gY29uZmlybSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjEwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MjUuOTk4MTQ4NjgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTIwMjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDMtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0NS1cXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNzk6Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgwLVxcdGludCBcXFwiTnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBwcmUtY3JlYXRlIGF0IGluaXQgdGltZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MjYuMDQ2MDczNDA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NjIxMzQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgQmxvY2sgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgYmxvY2sgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUgYW5kIGhlYWQgZG93biB0byBhcm91bmQgbGluZSAxNDQuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSByZWxldmFudCBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkLiBIb3BlZnVsbHksIHRoYXQnbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIHJlcXVpcmVkIG9yIHBvdGVudGlhbGx5IGNvbmZsaWN0cyB3aXRoIG90aGVyIHNldHRpbmdzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSdtIGxvb2tpbmcgZm9yIHRoZSByZWxhdGlvbnNoaXBzIHRoZXJlLCBhbmQgd2hhdCBvdGhlciBzZXR0aW5ncyBhcmUgbmVjZXNzYXJ5IGZvciB0aGUgY29uZmlnIG9wdGlvbnMgaGVyZSB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MjguMDMyMjg5MjMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NDpcXHRjb25maWcgQkxLX0RFVl9MT09QXFxuIDE0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuIDE0NjpcXHRcXHRoZWxwXFxuIDE0NzpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGEgcmVndWxhciBmaWxlIGFzIGEgYmxvY2tcXG4gMTQ4OlxcdFxcdCAgZGV2aWNlOyB5b3UgY2FuIHRoZW4gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gdGhhdCBibG9jayBkZXZpY2UgYW5kXFxuIDE0OTpcXHRcXHQgIG1vdW50IGl0IGp1c3QgYXMgeW91IHdvdWxkIG1vdW50IG90aGVyIGJsb2NrIGRldmljZXMgc3VjaCBhcyBoYXJkXFxuIDE1MDpcXHRcXHQgIGRyaXZlIHBhcnRpdGlvbnMsIENELVJPTSBkcml2ZXMgb3IgZmxvcHB5IGRyaXZlcy4gVGhlIGxvb3AgZGV2aWNlc1xcbiAxNTE6XFx0XFx0ICBhcmUgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgd2l0aCBtYWpvciBudW1iZXIgNyBhbmQgdHlwaWNhbGx5XFxuIDE1MjpcXHRcXHQgIGNhbGxlZCAvZGV2L2xvb3AwLCAvZGV2L2xvb3AxIGV0Yy5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGVjayBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbSBiZWZvcmVcXG4gMTU1OlxcdFxcdCAgYnVybmluZyB0aGUgQ0QsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBmbG9wcHkgaW1hZ2VzIHdpdGhvdXQgZmlyc3RcXG4gMTU2OlxcdFxcdCAgd3JpdGluZyB0aGVtIHRvIGZsb3BweS4gRnVydGhlcm1vcmUsIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyBhdm9pZFxcbiAxNTc6XFx0XFx0ICB0aGUgbmVlZCBmb3IgYSBkZWRpY2F0ZWQgTGludXggcGFydGl0aW9uIGJ5IGtlZXBpbmcgdGhlaXIgY29tcGxldGVcXG4gMTU4OlxcdFxcdCAgcm9vdCBmaWxlIHN5c3RlbSBpbnNpZGUgYSBET1MgRkFUIGZpbGUgdXNpbmcgdGhpcyBsb29wIGRldmljZVxcbiAxNTk6XFx0XFx0ICBkcml2ZXIuXFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdCAgVG8gdXNlIHRoZSBsb29wIGRldmljZSwgeW91IG5lZWQgdGhlIGxvc2V0dXAgdXRpbGl0eSwgZm91bmQgaW4gdGhlXFxuIDE2MjpcXHRcXHQgIHV0aWwtbGludXggcGFja2FnZSwgc2VlXFxuIDE2MzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L1xcdTAwM2UuXFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdCAgVGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHRvIFxcXCJoaWRlXFxcIiBhIGZpbGUgc3lzdGVtIGluXFxuIDE2NjpcXHRcXHQgIGEgZGlzayBwYXJ0aXRpb24sIGZsb3BweSwgb3IgcmVndWxhciBmaWxlLCBlaXRoZXIgdXNpbmcgZW5jcnlwdGlvblxcbiAxNjc6XFx0XFx0ICAoc2NyYW1ibGluZyB0aGUgZGF0YSkgb3Igc3RlZ2Fub2dyYXBoeSAoaGlkaW5nIHRoZSBkYXRhIGluIHRoZSBsb3dcXG4gMTY4OlxcdFxcdCAgYml0cyBvZiwgc2F5LCBhIHNvdW5kIGZpbGUpLiBUaGlzIGlzIGFsc28gc2FmZSBpZiB0aGUgZmlsZSByZXNpZGVzXFxuIDE2OTpcXHRcXHQgIG9uIGEgcmVtb3RlIGZpbGUgc2VydmVyLlxcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIGxvb3AgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxvb3BiYWNrXFxuIDE3MjpcXHRcXHQgIGRldmljZSB1c2VkIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIGZyb20gdGhlIG1hY2hpbmUgdG8gaXRzZWxmLlxcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxNzU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbG9vcC5cXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0ICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS5cXG4gMTc4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODoxNzoyOC4wMzIzNTQxMDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDQ0MzU1NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9vcCBEZXZpY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gYEJMS19ERVZfTE9PUGAgZG9lc24ndCBzZWVtIHRvIGhhdmUgYW55IGV4cGxpY2l0bHkgZGVmaW5lZCBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbnMgaXQgdG91Y2hlcyB3aXRoaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gU28sIGxldCdzIHNlZSwgd2UgaGF2ZSBgX19sb29wX2Nscl9mZGAsIGBsb19yZWxlYXNlYCwgYGxvb3BfYWRkYCwgYW5kIGBsb29wX3JlbW92ZWAgYXMgdGhlIGtleSBwbGF5ZXJzIGhlcmUuXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgYW5kIGNvbnNpZGVyIGFueSBub24tdWJpcXVpdG91cyBmb2N1cyBzeW1ib2xzOyB0aGF0IGxpc3QgaW5jbHVkZXMgdGhlIHNhbWUgZnVuY3Rpb25zOiBgX19sb29wX2Nscl9mZGAsIGBsb19yZWxlYXNlYCwgYGxvb3BfYWRkYCwgYGxvb3BfcmVtb3ZlYC4gSSBoYXZlIHRvIGFsc28gY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IG9mIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLCBsaWtlIGBsb29wX2Nscl9mZGAgb3IgYGxvb3BfY29uZmlndXJlYCwgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgYWN0IGFzIHRyaWdnZXJzIGZvciB0aGVzZSBjcml0aWNhbCBwYXRocy5cblxuTmV4dCBzdGVwOiBsZXQncyBkZWx2ZSBkZWVwZXIgaW50byBob3cgYGxvX3JlbGVhc2VgIGFuZCBgX19sb29wX2Nscl9mZGAgYXJlIGFjdHVhbGx5IGNhbGxlZCB3aXRoaW4gdGhlIHN5c3RlbS4gR3JlcHBpbmcgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBpcyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIGdldCBhIGZ1bGwgdmlldyBvZiB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMyMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjE3OjMwLjQ3NjcxMTU1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAwMzI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb19yZWxlYXNlfF9fbG9vcF9jbHJfZmR8bG9vcF9jbHJfZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9OTc9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwOC0gKiBpc19sb29wX2RldmljZSgpIGlzIHRydWUsIHdlIG5lZWQgYSBnbG9iYWwgbG9jayBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwOTogKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkvX19sb29wX2Nscl9mZCgpIGNhbGxzLlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMC0gKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMDQ9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTM3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExMzg6c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEzOS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjEzLVxcdCAqIGxvLVxcdTAwM2Vsb19zdGF0ZSBpcyBzZXQgdG8gTG9fdW5ib3VuZCBoZXJlIGFmdGVyIHJlbW92aW5nIHBhcnRpdGlvbnMgaGFzXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxNDpcXHQgKiBmaW5pc2hlZC4gVGhlcmUgY2Fubm90IGJlIGFueWJvZHkgZWxzZSBlbnRlcmluZyBfX2xvb3BfY2xyX2ZkKCkgYXNcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE1LVxcdCAqIExvX3J1bmRvd24gc3RhdGUgcHJvdGVjdHMgdXMgZnJvbSBhbGwgdGhlIG90aGVyIHBsYWNlcyB0cnlpbmcgdG9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMzktXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTI0MDpzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTI0MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQ1LVxcdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyNDY6XFx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQ3LVxcdCAqXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTY3PXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU5OC1cXHRjYXNlIExPT1BfQ0xSX0ZEOlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1OTk6XFx0XFx0cmV0dXJuIGxvb3BfY2xyX2ZkKGxvKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNjAwLVxcdGNhc2UgTE9PUF9TRVRfU1RBVFVTOlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTc2Nz1zdGF0aWMgaW50IGxvX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3ODEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTc4MjpzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3ODMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgwNS1cXHQgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgwNjpcXHQgKiBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKSB0byBXUSBjb250ZXh0LiBUaGUgTG9fcnVuZG93biBzdGF0ZVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MDctXFx0ICogZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODA5LVxcdCAqIEdyYWIgZGlzayByZWZlcmVuY2Ugd2hpY2ggd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXNcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODEwOlxcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXFx1MDAzZW9wZW5fbXV0ZXguXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgxMS1cXHQgKiBXZSBkb24ndCBuZWVkIHRvIGdyYWIgZGlzay1cXHUwMDNlZm9wcy1cXHUwMDNlb3duZXIgcmVmZXJlbmNlIGJlY2F1c2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgzMi1cXHQub3BlbiA9ICAgICAgICAgbG9fb3BlbixcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODMzOlxcdC5yZWxlYXNlID1cXHRsb19yZWxlYXNlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MzQtXFx0LmlvY3RsID1cXHRsb19pb2N0bCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIwNjM9c3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNzgtXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjA3OTpcXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA4MC1cXHRsby1cXHUwMDNld29ya2VyX3RyZWUgPSBSQl9ST09UO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjE4Mj1zdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxODMte1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxODQ6XFx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxODUtXFx0Zmx1c2hfd29yayhcXHUwMDI2bG8tXFx1MDAzZWxvX2Nscl93b3JrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MzAuNTIyNzE4MTM1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg4MDM3NzExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBsb29wX2Nscl9mZGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBoZWFkIG92ZXIgdG8gdGhlIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBsb29wX2Nscl9mZGAgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlcmUuIEknbSBnb2luZyB0byBtZW50YWxseSBwcmVwYXJlIHRvIHBhcnNlIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBob3cgdGhpcyBmdW5jdGlvbiBjbGVhcnMgYSBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIGEgbG9vcCBkZXZpY2UsIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmlzbSBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBrZXJuZWwncyBsb2NraW5nIHN0cmF0ZWdpZXMgaW4gdGhpcyBhcmVhLCB0b28uIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6Nzk0NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjE3OjMyLjQwMzA5NzEwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzNTpcXHRcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4xMjM2OlxcdFxcbjEyMzc6XFx0XFx0ZnB1dChmaWxwKTtcXG4xMjM4OlxcdH1cXG4xMjM5OlxcdFxcbjEyNDA6XFx0c3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbjEyNDE6XFx0e1xcbjEyNDI6XFx0XFx0aW50IGVycjtcXG4xMjQzOlxcdFxcbjEyNDQ6XFx0XFx0LypcXG4xMjQ1OlxcdFxcdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxcbjEyNDY6XFx0XFx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cXG4xMjQ3OlxcdFxcdCAqXFxuMTI0ODpcXHRcXHQgKiBUaGVyZWZvcmUsIHVzZSBnbG9iYWwgbG9jayB3aGVuIHNldHRpbmcgTG9fcnVuZG93biBzdGF0ZSBpbiBvcmRlciB0b1xcbjEyNDk6XFx0XFx0ICogbWFrZSBzdXJlIHRoYXQgbG9vcF92YWxpZGF0ZV9maWxlKCkgd2lsbCBmYWlsIGlmIHRoZSBcXFwic3RydWN0IGZpbGVcXFwiXFxuMTI1MDpcXHRcXHQgKiB3aGljaCBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgZm91bmQgdmlhIGZnZXQoKSB3YXMgdGhpc1xcbjEyNTE6XFx0XFx0ICogbG9vcCBkZXZpY2UuXFxuMTI1MjpcXHRcXHQgKi9cXG4xMjUzOlxcdFxcdGVyciA9IGxvb3BfZ2xvYmFsX2xvY2tfa2lsbGFibGUobG8sIHRydWUpO1xcbjEyNTQ6XFx0XFx0aWYgKGVycilcXG4xMjU1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTI1NjpcXHRcXHRpZiAobG8tXFx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kKSB7XFxuMTI1NzpcXHRcXHRcXHRsb29wX2dsb2JhbF91bmxvY2sobG8sIHRydWUpO1xcbjEyNTg6XFx0XFx0XFx0cmV0dXJuIC1FTlhJTztcXG4xMjU5OlxcdFxcdH1cXG4xMjYwOlxcdFxcdC8qXFxuMTI2MTpcXHRcXHQgKiBNYXJrIHRoZSBkZXZpY2UgZm9yIHJlbW92aW5nIHRoZSBiYWNraW5nIGRldmljZSBvbiBsYXN0IGNsb3NlLlxcbjEyNjI6XFx0XFx0ICogSWYgd2UgYXJlIHRoZSBvbmx5IG9wZW5lciwgYWxzbyBzd2l0Y2ggdGhlIHN0YXRlIHRvIHJvdW5kb3duIGhlcmUgdG9cXG4xMjYzOlxcdFxcdCAqIHByZXZlbnQgbmV3IG9wZW5lcnMgZnJvbSBjb21pbmcgaW4uXFxuMTI2NDpcXHRcXHQgKi9cXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0bG8tXFx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0FVVE9DTEVBUjtcXG4xMjY3OlxcdFxcdGlmIChkaXNrX29wZW5lcnMobG8tXFx1MDAzZWxvX2Rpc2spID09IDEpXFxuMTI2ODpcXHRcXHRcXHRXUklURV9PTkNFKGxvLVxcdTAwM2Vsb19zdGF0ZSwgTG9fcnVuZG93bik7XFxuMTI2OTpcXHRcXHRsb29wX2dsb2JhbF91bmxvY2sobG8sIHRydWUpO1xcbjEyNzA6XFx0XFxuMTI3MTpcXHRcXHRyZXR1cm4gMDtcXG4xMjcyOlxcdH1cXG4xMjczOlxcdFxcbjEyNzQ6XFx0c3RhdGljIGludFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODoxNzozMi40MDMyMTE2OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMyMzM2OTQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIExvb3AgRGV2aWNlIFRlYXJkb3duIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGRlZXAgaW50byB0aGUgbG9vcCBkZXZpY2UncyB0ZWFyZG93biBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGNsZWFucyB1cCBhZnRlciBpdHNlbGYuIEl0J3MgZGVmZXJyaW5nIHRoZSBgX19sb29wX2Nscl9mZGAgZnVuY3Rpb24gdG8gYSB3b3JrcXVldWUgKGBsb19jbHJfd29ya2ApIHdpdGhpbiBgbG9fcmVsZWFzZWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgcGF0dGVybiBmb3IgbWFuYWdpbmcgSS9PIGFuZCBwcmV2ZW50aW5nIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSByZWxlYXNlIHByb2Nlc3MuIEkgc2VlIHRoZXkncmUgaW50cm9kdWNpbmcgcXVpdGUgYSBmZXcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdG8gaGFuZGxlIHRoaXMgZGVmZXJyZWQgY2xlYW51cCDigJMgYHN5bmNocm9uaXplX3JjdWAsIGBkcmFpbl93b3JrcXVldWVgLCBhbmQgZXZlbiBmcmVlemluZyB0aGUgYmxvY2sgcXVldWUgKGBibGtfbXFfZnJlZXplX3F1ZXVlYCkuIFRoZXkncmUgYWxzbyBjYXJlZnVsbHkgYWRqdXN0aW5nIG11dGV4IGxvY2tpbmcgYXJvdW5kIHRoZSBgZGlzay1cdTAwM2VvcGVuX211dGV4YCBhbmQgdXBkYXRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgZGV2aWNlcyB3aXRoIGBnZXRfZGV2aWNlYCwgYHB1dF9kZXZpY2VgLCBhbmQgYG1vZHVsZV9wdXRgLCBhbGwgaW1wb3J0YW50IGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LiBUaGUgYFdBUk5fT05fT05DRShsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ydW5kb3duKWAgc2VlbXMgbGlrZSBhIGdvb2Qgc2FuaXR5IGNoZWNrOyBhIG5pY2UgYWRkaXRpb24gdG8gY2F0Y2ggYW55IHVuZXhwZWN0ZWQgc3RhdGVzIGR1cmluZyBjbGVhbnVwLlxuXG5HaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSB0ZWFyZG93biBsb2dpYyB3aXRoaW4gdGhlIGxvb3AgZHJpdmVyIChgZHJpdmVycy9ibG9jay9sb29wLmNgKSwgd2hpY2ggaXMgY3JpdGljYWwgYW5kIHByb25lIHRvIHN1YnRsZSBjb25jdXJyZW5jeSBidWdzLiBUaGUgZmFjdCB0aGF0IHRoZSBsb29wIGRyaXZlciBpcyBlYXNpbHkgYWNjZXNzaWJsZSBpbiBib3RoIFFFTVUgYW5kIHN5emthbGxlciBtYWtlcyBpdCBldmVuIG1vcmUgYXBwZWFsaW5nLiBUaGUgYWRkZWQgYXNzZXJ0aW9uIGFuZCBjb21wbGV4aXR5IGFyb3VuZCBjb25jdXJyZW5jeSDigJMgd29ya3F1ZXVlIGRlZmVycmFsLCBxdWV1ZSBmcmVlemluZywgUkNVIHN5bmNocm9uaXphdGlvbiwgYW5kIHdvcmtxdWV1ZSBkcmFpbmluZyDigJMgYWxsIHNjcmVhbSBcInBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuXCJcblxuSSBzaG91bGQgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIGZ1bmN0aW9uczogYF9fbG9vcF9jbHJfZmRgLCBgbG9fcmVsZWFzZWAsIGBsb29wX2Nscl9mZGAsIGBsb29wX3JlbW92ZWAsIGFuZCBgbG9vcF9hZGRgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGNvcmUgY2hhbmdlcyBzZWVtIHRvIGJlIGNvbmNlbnRyYXRlZC5cblxuQW5kLCBvZiBjb3Vyc2UsIHRoZSBgQkxLX0RFVl9MT09QYCBFbmFibGVDb25maWcgaXMgZXNzZW50aWFsLlxuXG5JIHdpbGwgbmVlZCB0byBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc0OCwiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODoxNzozOC43MjY1ODM0MTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjgzMTg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19sb29wX2Nscl9mZFwiLFxuICAgIFwibG9fcmVsZWFzZVwiLFxuICAgIFwibG9vcF9jbHJfZmRcIixcbiAgICBcImxvb3BfcmVtb3ZlXCIsXG4gICAgXCJsb29wX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svbG9vcC5jKSwgYWx0ZXJpbmcgaG93IGxvb3AgZGV2aWNlcyBhcmUgdG9ybiBkb3duIHdoZW4gcmVsZWFzZWQuIEl0IGNvbnZlcnRzIF9fbG9vcF9jbHJfZmQgdG8gcnVuIGFzeW5jaHJvbm91c2x5IG9uIGEgd29ya3F1ZXVlLCBtb2RpZmllcyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiAoYWRkaW5nIHN5bmNocm9uaXplX3JjdSwgZHJhaW5fd29ya3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKSwgYWRqdXN0cyBkZXZpY2UgYW5kIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbi4gTG9vcCBkZXZpY2VzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIGZ1enphYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb29wX3JlbW92ZVwiLFxuICAgIFwibG9vcF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL2xvb3AuYyksIGFsdGVyaW5nIGhvdyBsb29wIGRldmljZXMgYXJlIHRvcm4gZG93biB3aGVuIHJlbGVhc2VkLiBJdCBjb252ZXJ0cyBfX2xvb3BfY2xyX2ZkIHRvIHJ1biBhc3luY2hyb25vdXNseSBvbiBhIHdvcmtxdWV1ZSwgbW9kaWZpZXMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gKGFkZGluZyBzeW5jaHJvbml6ZV9yY3UsIGRyYWluX3dvcmtxdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZSksIGFkanVzdHMgZGV2aWNlIGFuZCBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24uIExvb3AgZGV2aWNlcyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MzguODAzNDIyMjQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ5MzY2NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MzguODAzODYzODU0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzE0ODkyMTMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsb29wIGJsb2NrIGRyaXZlciB0ZWFyZG93biBwYXRoIGJ5IGRlZmVycmluZyBfX2xvb3BfY2xyX2ZkKCkgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9fY2xyX3dvcmspIHJhdGhlciB0aGFuIGV4ZWN1dGluZyBpdCBzeW5jaHJvbm91c2x5IGluIGxvX3JlbGVhc2UoKSB3aGlsZSBob2xkaW5nIG9wZW5fbXV0ZXguIFRoaXMgcHJldmVudHMgbG9jayBvcmRlciBjb25mbGljdHMgZHVyaW5nIEkvTyBmbHVzaGluZyBhbmQgcmVzb3VyY2UgcmVsZWFzZS5cXG5cXG5NZW1vcnkgXFx1MDAyNiBzYW5pdGl6ZXIgYW5hbHlzaXM6XFxuLSBUaGUgbmV3bHkgaW50cm9kdWNlZCB3b3JrX3N0cnVjdCBmaWVsZCBgbG9fY2xyX3dvcmtgIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHZpYSBga3phbGxvY19vYmooKWAgYW5kIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCBpbiBgbG9vcF9hZGQoKWAuXFxuLSBUaGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgdG91Y2ggb3IgaW50cm9kdWNlIGFueSBkYXRhIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwgb3V0cHV0LCBvciBCUEYgYnVmZmVycyksIG5vciBkbyB0aGV5IGFsdGVyIGJ1ZmZlciBsZW5ndGhzIG9yIGxlYXZlIGFueSBzdHJ1Y3QgZmllbGRzL3N0YWNrIHZhcmlhYmxlcyB1bmluaXRpYWxpemVkLlxcbi0gVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiwgc3luY2hyb25pemF0aW9uLCByZWZjb3VudGluZyAoZ2V0X2RldmljZS9wdXRfZGV2aWNlLCBtb2R1bGVfcHV0LCBmcHV0KSwgbG9ja2luZywgYW5kIG9iamVjdCBsaWZldGltZXMgKHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucykuIFRoZXNlIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIG1lY2hhbmlzbXMuXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyODFhMjVmMTY2NzhlZWQzNTNhYTI0ODQzYzdiNjhmNjBkNjExMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA4OjE3OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggNmYxMjk3NjAzNWIwOS4uNTE2MTE4YjNhMTZjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTc1LDYgKzc1LDcgQEAgc3RydWN0IGxvb3BfZGV2aWNlIHtcbiBcdHN0cnVjdCBnZW5kaXNrXHRcdCpsb19kaXNrO1xuIFx0c3RydWN0IG11dGV4XHRcdGxvX211dGV4O1xuIFx0Ym9vbFx0XHRcdGlkcl92aXNpYmxlO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0XHRsb19jbHJfd29yaztcbiB9O1xuIFxuIHN0cnVjdCBsb29wX2NtZCB7XG5AQCAtMTEzNCwxMyArMTEzNSw0MiBAQCBzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuK3N0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbitcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBsb19jbHJfd29yayk7XG4rXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLVx1MDAzZWxvX2Rpc2s7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdHN0cnVjdCBmaWxlICpmaWxwO1xuIFx0Z2ZwX3QgZ2ZwID0gbG8tXHUwMDNlb2xkX2dmcF9tYXNrO1xuIFx0aW50IGVycjtcbiBcbitcdC8qIFN0ZXAgMTogRmx1c2ggYWxsIG91dHN0YW5kaW5nIEkvTywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovXG4rXHQvKlxuK1x0ICogU2luY2UgbG9vcF9xdWV1ZV9ycSgpIGlzIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2ssIHRoaXMgc3luY2hyb25pemVfcmN1KClcbitcdCAqIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIHF1ZXVlX3dvcmsoKSBjYWxscyBhcmUgbWFkZSBmcm9tIGxvb3BfcXVldWVfd29yaygpXG4rXHQgKiBmcm9tIGxvb3BfcXVldWVfcnEoKS4gU3Vic2VxdWVudCBsb29wX3F1ZXVlX3JxKCkgY2FsbHMgd2hpY2ggYXJlIG1hZGUgYWZ0ZXJcbitcdCAqIHRoaXMgc3luY2hyb25pemVfcmN1KCkgcmV0dXJuZWQgc2hhbGwgc2VlIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGFuZFxuK1x0ICogcmV0dXJuIHdpdGggQkxLX1NUU19JT0VSUi5cbitcdCAqL1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXHQvKlxuK1x0ICogVGhpcyBkcmFpbl93b3JrcXVldWUoKSBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBsb29wX2hhbmRsZV9jbWQoKSBjYWxscyBhcmVcbitcdCAqIG1hZGUgZnJvbSBsb29wX3Byb2Nlc3Nfd29yaygpIGZyb20gbG9vcF93b3JrZm4oKS9sb29wX3Jvb3RjZ193b3JrZm4oKS5cbitcdCAqL1xuK1x0ZHJhaW5fd29ya3F1ZXVlKGxvLVx1MDAzZXdvcmtxdWV1ZSk7XG4rXHQvKlxuK1x0ICogVGhpcyBibGtfbXFfZnJlZXplX3F1ZXVlKCkgd2FpdHMgZm9yIGNvbXBsZXRpb24gb2YgYWxsIG91dHN0YW5kaW5nIEkvT1xuK1x0ICogd2hpY2ggaGFzIGJlZW4gc2NoZWR1bGVkIHZpYSBsb29wX3F1ZXVlX3JxKCksIGJ5IHdhaXRpbmcgZm9yIHFfdXNhZ2VfY291bnRlclxuK1x0ICogdG8gcmVhY2ggMC4gU2luY2UgdGhlIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGNoZWNrIGluIGxvb3BfcXVldWVfcnEoKVxuK1x0ICogZ3VhcmFudGVlcyB0aGF0IG5vIG1vcmUgbmV3IEkvTyByZXF1ZXN0cyBhcmUgbWFkZSwgd2UgY2FuIGNhbGxcbitcdCAqIGJsa19tcV91bmZyZWV6ZV9xdWV1ZSgpIGltbWVkaWF0ZWx5IGFmdGVyIGJsa19tcV9mcmVlemVfcXVldWUoKSByZXR1cm5zLlxuK1x0ICovXG4rXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUsIGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpKTtcbitcbitcdC8qIFN0ZXAgMjogUGVyZm9ybSByZW1haW5pbmcgY2xlYW51cCwgd2l0aCBvcGVuX211dGV4IGhlbGQuICovXG4rXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXHRXQVJOX09OX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fcnVuZG93bik7XG4rXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvLVx1MDAzZWxvX2xvY2spO1xuIFx0ZmlscCA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiBcdGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7XG5AQCAtMTE1MSwxMiArMTE4MSw3IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdGxvLVx1MDAzZWxvX3NpemVsaW1pdCA9IDA7XG4gXHRtZW1zZXQobG8tXHUwMDNlbG9fZmlsZV9uYW1lLCAwLCBMT19OQU1FX1NJWkUpO1xuIFxuLVx0Lypcbi1cdCAqIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LlxuLVx0ICpcbi1cdCAqIE5vIHF1ZXVlIGZyZWV6aW5nIG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGZpbmFsXG4tXHQgKiAtXHUwMDNlcmVsZWFzZSBjYWxsIG9ubHksIHNvIHRoZXJlIGNhbid0IGJlIGFueSBvdXRzdGFuZGluZyBJL08uXG4tXHQgKi9cbitcdC8qIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LiAqL1xuIFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuQEAgLTExNjgsOCArMTE5Myw2IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdC8qIGxldCB1c2VyLXNwYWNlIGtub3cgYWJvdXQgdGhpcyBjaGFuZ2UgKi9cbiBcdGtvYmplY3RfdWV2ZW50KFx1MDAyNmRpc2tfdG9fZGV2KGxvLVx1MDAzZWxvX2Rpc2spLVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiBcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtXHUwMDNlZl9tYXBwaW5nLCBnZnApO1xuLVx0LyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi9cbi1cdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIFxuIFx0ZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobG8tXHUwMDNlbG9fZGlzayk7XG4gXG5AQCAtMTE5OSwxMSArMTIyMiwxOCBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRXUklURV9PTkNFKGxvLVx1MDAzZWxvX3N0YXRlLCBMb191bmJvdW5kKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZsby1cdTAwM2Vsb19tdXRleCk7XG4gXG4rXHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1xuK1x0cHV0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4rXG4gXHQvKlxuLVx0ICogTmVlZCBub3QgaG9sZCBsb19tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4gQ2FsbGluZyBmcHV0IGhvbGRpbmdcbi1cdCAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXNcbi1cdCAqIGZwdXQgY2FuIHRha2Ugb3Blbl9tdXRleCB3aGljaCBpcyB1c3VhbGx5IHRha2VuIGJlZm9yZSBsb19tdXRleC5cbitcdCAqIFRoaXMgaXMgc2FmZTogZmx1c2hfd29yaygpIGZyb20gbG9vcF9yZW1vdmUoKSBmcm9tIGxvb3BfZXhpdCgpIHdhaXRzXG4rXHQgKiB1bnRpbCB0aGlzIGZ1bmN0aW9uIHJldHVybnM7IGVmZmVjdGl2ZWx5IGRyb3BwaW5nIHRoZSBmaW5hbCBtb2R1bGVcbitcdCAqIHJlZmVyZW5jZXMgc3luY2hyb25vdXNseS5cbiBcdCAqL1xuK1x0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4rXG4gXHRmcHV0KGZpbHApO1xuIH1cbiBcbkBAIC0xNzY5LDggKzE3OTksMjAgQEAgc3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdG5lZWRfY2xlYXIgPSAobG8tXHUwMDNlbG9fc3RhdGUgPT0gTG9fcnVuZG93bik7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFxuLVx0aWYgKG5lZWRfY2xlYXIpXG4tXHRcdF9fbG9vcF9jbHJfZmQobG8pO1xuK1x0aWYgKCFuZWVkX2NsZWFyKVxuK1x0XHRyZXR1cm47XG4rXHQvKlxuK1x0ICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZ1xuK1x0ICogZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkgdG8gV1EgY29udGV4dC4gVGhlIExvX3J1bmRvd24gc3RhdGVcbitcdCAqIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLlxuK1x0ICpcbitcdCAqIEdyYWIgZGlzayByZWZlcmVuY2Ugd2hpY2ggd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXNcbitcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC5cbitcdCAqIFdlIGRvbid0IG5lZWQgdG8gZ3JhYiBkaXNrLVx1MDAzZWZvcHMtXHUwMDNlb3duZXIgcmVmZXJlbmNlIGJlY2F1c2VcbitcdCAqIHdlIGFyZSBob2xkaW5nIG9uZSBvYnRhaW5lZCBieSBsb29wX2NvbmZpZ3VyZSgpLlxuK1x0ICovXG4rXHRnZXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcbitcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuQEAgLTIwMzQsNiArMjA3Niw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXHRsbyA9IGt6YWxsb2Nfb2JqKCpsbyk7XG4gXHRpZiAoIWxvKVxuIFx0XHRnb3RvIG91dDtcbitcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XG4gXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbkBAIC0yMTM4LDYgKzIxODEsOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4ge1xuK1x0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xuK1x0Zmx1c2hfd29yayhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4rXG4gXHQvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgdW5yZWFjaGFibGUgZnJvbSBwYXRobmFtZS4gKi9cbiBcdGRlbF9nZW5kaXNrKGxvLVx1MDAzZWxvX2Rpc2spO1xuIFx0YmxrX21xX2ZyZWVfdGFnX3NldChcdTAwMjZsby1cdTAwM2V0YWdfc2V0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjE3OjM4LjgwMzg2NTk3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTQ4ODk1NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb24gZm9yIExvb3AgRGV2aWNlIFRlYXJkb3duIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEFmdGVyIGFuYWx5emluZyB0aGUgY29kZSwgaGVyZSdzIHdoYXQgSSd2ZSBjb25jbHVkZWQuXG5cblRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIHRlYXJkb3duIHByb2Nlc3MgZm9yIGxvb3AgZGV2aWNlcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgYmFja2luZyBmaWxlIGlzIGhhbmRsZWQuIFRoZSBjb3JlIGNoYW5nZSBpcyB0byBkZWZlciB0aGUgYF9fbG9vcF9jbHJfZmRgIGZ1bmN0aW9uIHRvIGEgd29ya3F1ZXVlIChgc3lzdGVtX2xvbmdfd3FgKS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgYmxvY2tpbmcgdGhlIGBsb19yZWxlYXNlYCBwYXRoIHdoaWxlIHRoZSBsb29wIGRldmljZSBmbHVzaGVzIEkvTywgd2hpY2ggY291bGQgbGVhZCB0byBsb2NrIGludmVyc2lvbiBvciBkZWFkbG9ja3Mgd2hlbiBob2xkaW5nIGBkaXNrLVx1MDAzZW9wZW5fbXV0ZXhgLiBJdCdzIGEgc3luY2hyb25pemF0aW9uIGltcHJvdmVtZW50LlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBzdHJ1Y3Qgd29ya19zdHJ1Y3QgbG9fY2xyX3dvcmtgIGFuZCBtb2RpZmllcyBob3cgYF9fbG9vcF9jbHJfZmRgIGlzIGNhbGxlZCwgdXNpbmcgYHF1ZXVlX3dvcmtgIGluc3RlYWQgb2YgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbCBmcm9tIGBsb19yZWxlYXNlYC4gSW1wb3J0YW50bHksIHRoZSB0ZWFyZG93biBub3cgaW52b2x2ZXMgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZzogYGdldF9kZXZpY2VgL2BwdXRfZGV2aWNlYCwgYG1vZHVsZV9wdXRgLCBhbmQgYGZwdXRgIGFyZSBjYXJlZnVsbHkgbWFuYWdlZC4gVGhlIGBsb19jbHJfd29ya2AgaXMgZmx1c2hlZCBpbiBgbG9vcF9yZW1vdmVgIHRvIGVuc3VyZSB0aGF0IHRoZSBjbGVhbnVwIGhhcHBlbnMuXG5cbk5vdywgbGV0J3MgYWRkcmVzcyB0aGUgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJJ3ZlIHNjcnV0aW5pemVkIHRoZSBjaGFuZ2VzIGZvciB0aGUgZm9sbG93aW5nOlxuXG4xLiAgKipTdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vIG5ldyBvciBtb2RpZmllZCBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIFRoZSBgSU5JVF9XT1JLYCBjYWxsIGVuc3VyZXMgdGhhdCBgbG9fY2xyX3dvcmtgIGlzIGluaXRpYWxpemVkIGFuZCBzYWZlLiBUaGUgYG5lZWRfY2xlYXJgIHZhcmlhYmxlIHJlbGllcyBvbiB0aGUgc3RhdGUgb2YgdGhlIGBsb29wX2RldmljZWAgc3RydWN0LlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBObyBjb21wbGV4IGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9ucyBhcmUgYWRkZWQgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiAgKipCb3VuZHMgY2hlY2tzIGFuZCBsb2dpYzoqKiBOb25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb3IgYWNjZXNzLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGFuIGFzeW5jaHJvbm91cyB0ZWFyZG93biB3aXRoIGEgZm9jdXMgb24gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nLCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGF0ZWQgdG8gcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIHByb2JsZW1zIHRoYXQgYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4vTE9DS0RFUCBhbmQgZ2VuZXJhbCBzYW5pdGl6ZXJzLCByYXRoZXIgdGhhbiBLTVNBTi5cblxuS01TQU4ncyBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gZGV0ZWN0IHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIHRob3NlIHJpc2tzLCBhbmQgdGhlIGV4aXN0aW5nIGNvZGUgcGF0aHMgYXJlIGxpa2VseSBhbHJlYWR5IGNvdmVyZWQuXG5cbkluIHNob3J0LCB0aGlzIGlzIGEgc3luY2hyb25pemF0aW9uIC8gbGlmZXRpbWUgLyBkZWFkbG9jayBpc3N1ZSwgYW5kIGFsbCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycywgbm90IEtNU0FOLiBUaGUgYW5zd2VyIGlzIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODIyLCJPdXRwdXRUb2tlbnMiOjI4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODoxNzo0NS45NTI3NjM5NzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9vcCBibG9jayBkcml2ZXIgdGVhcmRvd24gcGF0aCBieSBkZWZlcnJpbmcgX19sb29wX2Nscl9mZCgpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlKCkgd2hpbGUgaG9sZGluZyBvcGVuX211dGV4LiBUaGlzIHByZXZlbnRzIGxvY2sgb3JkZXIgY29uZmxpY3RzIGR1cmluZyBJL08gZmx1c2hpbmcgYW5kIHJlc291cmNlIHJlbGVhc2UuXFxuXFxuTWVtb3J5IFxcdTAwMjYgc2FuaXRpemVyIGFuYWx5c2lzOlxcbi0gVGhlIG5ld2x5IGludHJvZHVjZWQgd29ya19zdHJ1Y3QgZmllbGQgYGxvX2Nscl93b3JrYCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IGxvb3BfZGV2aWNlYCB2aWEgYGt6YWxsb2Nfb2JqKClgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUksoKWAgaW4gYGxvb3BfYWRkKClgLlxcbi0gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IHRvdWNoIG9yIGludHJvZHVjZSBhbnkgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsIG91dHB1dCwgb3IgQlBGIGJ1ZmZlcnMpLCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcy9zdGFjayB2YXJpYWJsZXMgdW5pbml0aWFsaXplZC5cXG4tIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGFzeW5jaHJvbm91cyBleGVjdXRpb24sIHN5bmNocm9uaXphdGlvbiwgcmVmY291bnRpbmcgKGdldF9kZXZpY2UvcHV0X2RldmljZSwgbW9kdWxlX3B1dCwgZnB1dCksIGxvY2tpbmcsIGFuZCBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpLiBUaGVzZSBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc21zLlxcblxcblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxvb3AgYmxvY2sgZHJpdmVyIHRlYXJkb3duIHBhdGggYnkgZGVmZXJyaW5nIF9fbG9vcF9jbHJfZmQoKSB0byBhIHdvcmtxdWV1ZSBpdGVtIChsb19jbHJfd29yaykgcmF0aGVyIHRoYW4gZXhlY3V0aW5nIGl0IHN5bmNocm9ub3VzbHkgaW4gbG9fcmVsZWFzZSgpIHdoaWxlIGhvbGRpbmcgb3Blbl9tdXRleC4gVGhpcyBwcmV2ZW50cyBsb2NrIG9yZGVyIGNvbmZsaWN0cyBkdXJpbmcgSS9PIGZsdXNoaW5nIGFuZCByZXNvdXJjZSByZWxlYXNlLlxcblxcbk1lbW9yeSBcXHUwMDI2IHNhbml0aXplciBhbmFseXNpczpcXG4tIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHdvcmtfc3RydWN0IGZpZWxkIGBsb19jbHJfd29ya2AgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdmlhIGBremFsbG9jX29iaigpYCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLKClgIGluIGBsb29wX2FkZCgpYC5cXG4tIFRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCB0b3VjaCBvciBpbnRyb2R1Y2UgYW55IGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCBvdXRwdXQsIG9yIEJQRiBidWZmZXJzKSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMvc3RhY2sgdmFyaWFibGVzIHVuaW5pdGlhbGl6ZWQuXFxuLSBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBhc3luY2hyb25vdXMgZXhlY3V0aW9uLCBzeW5jaHJvbml6YXRpb24sIHJlZmNvdW50aW5nIChnZXRfZGV2aWNlL3B1dF9kZXZpY2UsIG1vZHVsZV9wdXQsIGZwdXQpLCBsb2NraW5nLCBhbmQgb2JqZWN0IGxpZmV0aW1lcyAodXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zKS4gVGhlc2UgaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcy5cXG5cXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows7ngn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 08:00:13 +0000 UTC FinishedAt: 2026-09-05 08:17:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "0e5b5115-508e-49aa-95b6-3a446f450f93" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__loop_clr_fd", "lo_release", "loop_clr_fd", "loop_remove", "loop_add" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb29wX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtsb29wX2FkZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9vcCBibG9jayBkcml2ZXIgdGVhcmRvd24gcGF0aCBieSBkZWZlcnJpbmcgX19sb29wX2Nscl9mZCgpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlKCkgd2hpbGUgaG9sZGluZyBvcGVuX211dGV4LiBUaGlzIHByZXZlbnRzIGxvY2sgb3JkZXIgY29uZmxpY3RzIGR1cmluZyBJL08gZmx1c2hpbmcgYW5kIHJlc291cmNlIHJlbGVhc2UuXG5cbk1lbW9yeSBcdTAwMjYgc2FuaXRpemVyIGFuYWx5c2lzOlxuLSBUaGUgbmV3bHkgaW50cm9kdWNlZCB3b3JrX3N0cnVjdCBmaWVsZCBgbG9fY2xyX3dvcmtgIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHZpYSBga3phbGxvY19vYmooKWAgYW5kIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCBpbiBgbG9vcF9hZGQoKWAuXG4tIFRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCB0b3VjaCBvciBpbnRyb2R1Y2UgYW55IGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCBvdXRwdXQsIG9yIEJQRiBidWZmZXJzKSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMvc3RhY2sgdmFyaWFibGVzIHVuaW5pdGlhbGl6ZWQuXG4tIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGFzeW5jaHJvbm91cyBleGVjdXRpb24sIHN5bmNocm9uaXphdGlvbiwgcmVmY291bnRpbmcgKGdldF9kZXZpY2UvcHV0X2RldmljZSwgbW9kdWxlX3B1dCwgZnB1dCksIGxvY2tpbmcsIGFuZCBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpLiBUaGVzZSBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc21zLlxuXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svbG9vcC5jKSwgYWx0ZXJpbmcgaG93IGxvb3AgZGV2aWNlcyBhcmUgdG9ybiBkb3duIHdoZW4gcmVsZWFzZWQuIEl0IGNvbnZlcnRzIF9fbG9vcF9jbHJfZmQgdG8gcnVuIGFzeW5jaHJvbm91c2x5IG9uIGEgd29ya3F1ZXVlLCBtb2RpZmllcyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiAoYWRkaW5nIHN5bmNocm9uaXplX3JjdSwgZHJhaW5fd29ya3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKSwgYWRqdXN0cyBkZXZpY2UgYW5kIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbi4gTG9vcCBkZXZpY2VzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIGZ1enphYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjI4MWEyNWYxNjY3OGVlZDM1M2FhMjQ4NDNjN2I2OGY2MGQ2MTEyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDg6MTc6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggNmYxMjk3NjAzNWIwOS4uNTE2MTE4YjNhMTZjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTc1LDYgJiM0Mzs3NSw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXHRzdHJ1Y3QgZ2VuZGlza1x0XHQqbG9fZGlzaztcbiBcdHN0cnVjdCBtdXRleFx0XHRsb19tdXRleDtcbiBcdGJvb2xcdFx0XHRpZHJfdmlzaWJsZTtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGxvX2Nscl93b3JrO1xuIH07XG4gXG4gc3RydWN0IGxvb3BfY21kIHtcbkBAIC0xMTM0LDEzICYjNDM7MTEzNSw0MiBAQCBzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuJiM0MztzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4mIzQzO1x0c3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLVx1MDAzZWxvX2Rpc2s7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdHN0cnVjdCBmaWxlICpmaWxwO1xuIFx0Z2ZwX3QgZ2ZwID0gbG8tXHUwMDNlb2xkX2dmcF9tYXNrO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2luY2UgbG9vcF9xdWV1ZV9ycSgpIGlzIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2ssIHRoaXMgc3luY2hyb25pemVfcmN1KClcbiYjNDM7XHQgKiBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBxdWV1ZV93b3JrKCkgY2FsbHMgYXJlIG1hZGUgZnJvbSBsb29wX3F1ZXVlX3dvcmsoKVxuJiM0MztcdCAqIGZyb20gbG9vcF9xdWV1ZV9ycSgpLiBTdWJzZXF1ZW50IGxvb3BfcXVldWVfcnEoKSBjYWxscyB3aGljaCBhcmUgbWFkZSBhZnRlclxuJiM0MztcdCAqIHRoaXMgc3luY2hyb25pemVfcmN1KCkgcmV0dXJuZWQgc2hhbGwgc2VlIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGFuZFxuJiM0MztcdCAqIHJldHVybiB3aXRoIEJMS19TVFNfSU9FUlIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGlzIGRyYWluX3dvcmtxdWV1ZSgpIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIGxvb3BfaGFuZGxlX2NtZCgpIGNhbGxzIGFyZVxuJiM0MztcdCAqIG1hZGUgZnJvbSBsb29wX3Byb2Nlc3Nfd29yaygpIGZyb20gbG9vcF93b3JrZm4oKS9sb29wX3Jvb3RjZ193b3JrZm4oKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkcmFpbl93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoaXMgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHdhaXRzIGZvciBjb21wbGV0aW9uIG9mIGFsbCBvdXRzdGFuZGluZyBJL09cbiYjNDM7XHQgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyXG4mIzQzO1x0ICogdG8gcmVhY2ggMC4gU2luY2UgdGhlIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGNoZWNrIGluIGxvb3BfcXVldWVfcnEoKVxuJiM0MztcdCAqIGd1YXJhbnRlZXMgdGhhdCBubyBtb3JlIG5ldyBJL08gcmVxdWVzdHMgYXJlIG1hZGUsIHdlIGNhbiBjYWxsXG4mIzQzO1x0ICogYmxrX21xX3VuZnJlZXplX3F1ZXVlKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHJldHVybnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlKSk7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMjogUGVyZm9ybSByZW1haW5pbmcgY2xlYW51cCwgd2l0aCBvcGVuX211dGV4IGhlbGQuICovXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdFdBUk5fT05fT05DRShsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ydW5kb3duKTtcbiYjNDM7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvLVx1MDAzZWxvX2xvY2spO1xuIFx0ZmlscCA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiBcdGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7XG5AQCAtMTE1MSwxMiAmIzQzOzExODEsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRsby1cdTAwM2Vsb19zaXplbGltaXQgPSAwO1xuIFx0bWVtc2V0KGxvLVx1MDAzZWxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTtcbiBcbi1cdC8qXG4tXHQgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC5cbi1cdCAqXG4tXHQgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbFxuLVx0ICogLVx1MDAzZXJlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4mIzM5O3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy5cbi1cdCAqL1xuJiM0MztcdC8qIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LiAqL1xuIFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuQEAgLTExNjgsOCAmIzQzOzExOTMsNiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHQvKiBsZXQgdXNlci1zcGFjZSBrbm93IGFib3V0IHRoaXMgY2hhbmdlICovXG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRtYXBwaW5nX3NldF9nZnBfbWFzayhmaWxwLVx1MDAzZWZfbWFwcGluZywgZ2ZwKTtcbi1cdC8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovXG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiBcbiBcdGRpc2tfZm9yY2VfbWVkaWFfY2hhbmdlKGxvLVx1MDAzZWxvX2Rpc2spO1xuIFxuQEAgLTExOTksMTEgJiM0MzsxMjIyLDE4IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbiYjNDM7XHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0cHV0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4mIzQzO1xuIFx0Lypcbi1cdCAqIE5lZWQgbm90IGhvbGQgbG9fbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuIENhbGxpbmcgZnB1dCBob2xkaW5nXG4tXHQgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzXG4tXHQgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguXG4mIzQzO1x0ICogVGhpcyBpcyBzYWZlOiBmbHVzaF93b3JrKCkgZnJvbSBsb29wX3JlbW92ZSgpIGZyb20gbG9vcF9leGl0KCkgd2FpdHNcbiYjNDM7XHQgKiB1bnRpbCB0aGlzIGZ1bmN0aW9uIHJldHVybnM7IGVmZmVjdGl2ZWx5IGRyb3BwaW5nIHRoZSBmaW5hbCBtb2R1bGVcbiYjNDM7XHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXG4gXHQgKi9cbiYjNDM7XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiYjNDM7XG4gXHRmcHV0KGZpbHApO1xuIH1cbiBcbkBAIC0xNzY5LDggJiM0MzsxNzk5LDIwIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbi1cdGlmIChuZWVkX2NsZWFyKVxuLVx0XHRfX2xvb3BfY2xyX2ZkKGxvKTtcbiYjNDM7XHRpZiAoIW5lZWRfY2xlYXIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nXG4mIzQzO1x0ICogZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkgdG8gV1EgY29udGV4dC4gVGhlIExvX3J1bmRvd24gc3RhdGVcbiYjNDM7XHQgKiBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEdyYWIgZGlzayByZWZlcmVuY2Ugd2hpY2ggd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXNcbiYjNDM7XHQgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLVx1MDAzZW9wZW5fbXV0ZXguXG4mIzQzO1x0ICogV2UgZG9uJiMzOTt0IG5lZWQgdG8gZ3JhYiBkaXNrLVx1MDAzZWZvcHMtXHUwMDNlb3duZXIgcmVmZXJlbmNlIGJlY2F1c2VcbiYjNDM7XHQgKiB3ZSBhcmUgaG9sZGluZyBvbmUgb2J0YWluZWQgYnkgbG9vcF9jb25maWd1cmUoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRnZXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcbiYjNDM7XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbkBAIC0yMDM0LDYgJiM0MzsyMDc2LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcdGxvID0ga3phbGxvY19vYmooKmxvKTtcbiBcdGlmICghbG8pXG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XG4gXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbkBAIC0yMTM4LDYgJiM0MzsyMTgxLDkgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcbiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIHtcbiYjNDM7XHQvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovXG4mIzQzO1x0Zmx1c2hfd29yayhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4mIzQzO1xuIFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4gXHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19sb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvb3BfY2xyX2ZkJiMzNDssCiAgICAmIzM0O2xvb3BfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2xvb3BfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svbG9vcC5jKSwgYWx0ZXJpbmcgaG93IGxvb3AgZGV2aWNlcyBhcmUgdG9ybiBkb3duIHdoZW4gcmVsZWFzZWQuIEl0IGNvbnZlcnRzIF9fbG9vcF9jbHJfZmQgdG8gcnVuIGFzeW5jaHJvbm91c2x5IG9uIGEgd29ya3F1ZXVlLCBtb2RpZmllcyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiAoYWRkaW5nIHN5bmNocm9uaXplX3JjdSwgZHJhaW5fd29ya3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKSwgYWRqdXN0cyBkZXZpY2UgYW5kIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbi4gTG9vcCBkZXZpY2VzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIGZ1enphYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjI4MWEyNWYxNjY3OGVlZDM1M2FhMjQ4NDNjN2I2OGY2MGQ2MTEyNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDg6MTc6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDZmMTI5NzYwMzViMDkuLjUxNjExOGIzYTE2YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC03NSw2ICYjNDM7NzUsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2UgewogCXN0cnVjdCBnZW5kaXNrCQkqbG9fZGlzazsKIAlzdHJ1Y3QgbXV0ZXgJCWxvX211dGV4OwogCWJvb2wJCQlpZHJfdmlzaWJsZTsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CWxvX2Nscl93b3JrOwogfTsKIAogc3RydWN0IGxvb3BfY21kIHsKQEAgLTExMzQsMTMgJiM0MzsxMTM1LDQyIEBAIHN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQomIzQzO3N0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewomIzQzOwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspOwomIzQzOwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLSZndDtsb19kaXNrOwogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwogCXN0cnVjdCBmaWxlICpmaWxwOwogCWdmcF90IGdmcCA9IGxvLSZndDtvbGRfZ2ZwX21hc2s7CiAJaW50IGVycjsKIAomIzQzOwkvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwkvKgomIzQzOwkgKiBTaW5jZSBsb29wX3F1ZXVlX3JxKCkgaXMgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jaywgdGhpcyBzeW5jaHJvbml6ZV9yY3UoKQomIzQzOwkgKiBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBxdWV1ZV93b3JrKCkgY2FsbHMgYXJlIG1hZGUgZnJvbSBsb29wX3F1ZXVlX3dvcmsoKQomIzQzOwkgKiBmcm9tIGxvb3BfcXVldWVfcnEoKS4gU3Vic2VxdWVudCBsb29wX3F1ZXVlX3JxKCkgY2FsbHMgd2hpY2ggYXJlIG1hZGUgYWZ0ZXIKJiM0MzsJICogdGhpcyBzeW5jaHJvbml6ZV9yY3UoKSByZXR1cm5lZCBzaGFsbCBzZWUgbG8tJmd0O2xvX3N0YXRlICE9IExvX2JvdW5kIGFuZAomIzQzOwkgKiByZXR1cm4gd2l0aCBCTEtfU1RTX0lPRVJSLgomIzQzOwkgKi8KJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgZHJhaW5fd29ya3F1ZXVlKCkgbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgbG9vcF9oYW5kbGVfY21kKCkgY2FsbHMgYXJlCiYjNDM7CSAqIG1hZGUgZnJvbSBsb29wX3Byb2Nlc3Nfd29yaygpIGZyb20gbG9vcF93b3JrZm4oKS9sb29wX3Jvb3RjZ193b3JrZm4oKS4KJiM0MzsJICovCiYjNDM7CWRyYWluX3dvcmtxdWV1ZShsby0mZ3Q7d29ya3F1ZXVlKTsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBibGtfbXFfZnJlZXplX3F1ZXVlKCkgd2FpdHMgZm9yIGNvbXBsZXRpb24gb2YgYWxsIG91dHN0YW5kaW5nIEkvTwomIzQzOwkgKiB3aGljaCBoYXMgYmVlbiBzY2hlZHVsZWQgdmlhIGxvb3BfcXVldWVfcnEoKSwgYnkgd2FpdGluZyBmb3IgcV91c2FnZV9jb3VudGVyCiYjNDM7CSAqIHRvIHJlYWNoIDAuIFNpbmNlIHRoZSBsby0mZ3Q7bG9fc3RhdGUgIT0gTG9fYm91bmQgY2hlY2sgaW4gbG9vcF9xdWV1ZV9ycSgpCiYjNDM7CSAqIGd1YXJhbnRlZXMgdGhhdCBubyBtb3JlIG5ldyBJL08gcmVxdWVzdHMgYXJlIG1hZGUsIHdlIGNhbiBjYWxsCiYjNDM7CSAqIGJsa19tcV91bmZyZWV6ZV9xdWV1ZSgpIGltbWVkaWF0ZWx5IGFmdGVyIGJsa19tcV9mcmVlemVfcXVldWUoKSByZXR1cm5zLgomIzQzOwkgKi8KJiM0MzsJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUpKTsKJiM0MzsKJiM0MzsJLyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwlXQVJOX09OX09OQ0UobG8tJmd0O2xvX3N0YXRlICE9IExvX3J1bmRvd24pOwomIzQzOwogCXNwaW5fbG9ja19pcnEoJmFtcDtsby0mZ3Q7bG9fbG9jayk7CiAJZmlscCA9IGxvLSZndDtsb19iYWNraW5nX2ZpbGU7CiAJbG8tJmd0O2xvX2JhY2tpbmdfZmlsZSA9IE5VTEw7CkBAIC0xMTUxLDEyICYjNDM7MTE4MSw3IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlsby0mZ3Q7bG9fc2l6ZWxpbWl0ID0gMDsKIAltZW1zZXQobG8tJmd0O2xvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTsKIAotCS8qCi0JICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuCi0JICoKLQkgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbAotCSAqIC0mZ3Q7cmVsZWFzZSBjYWxsIG9ubHksIHNvIHRoZXJlIGNhbiYjMzk7dCBiZSBhbnkgb3V0c3RhbmRpbmcgSS9PLgotCSAqLwomIzQzOwkvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi8KIAlsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSk7CiAJbGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFOwogCWxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7CkBAIC0xMTY4LDggJiM0MzsxMTkzLDYgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCS8qIGxldCB1c2VyLXNwYWNlIGtub3cgYWJvdXQgdGhpcyBjaGFuZ2UgKi8KIAlrb2JqZWN0X3VldmVudCgmYW1wO2Rpc2tfdG9fZGV2KGxvLSZndDtsb19kaXNrKS0mZ3Q7a29iaiwgS09CSl9DSEFOR0UpOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtJmd0O2ZfbWFwcGluZywgZ2ZwKTsKLQkvKiBUaGlzIGlzIHNhZmU6IG9wZW4oKSBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlLiAqLwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCiAJZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobG8tJmd0O2xvX2Rpc2spOwogCkBAIC0xMTk5LDExICYjNDM7MTIyMiwxOCBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiAJV1JJVEVfT05DRShsby0mZ3Q7bG9fc3RhdGUsIExvX3VuYm91bmQpOwogCW11dGV4X3VubG9jaygmYW1wO2xvLSZndDtsb19tdXRleCk7CiAKJiM0MzsJLyogU3RlcCAzOiBEcm9wIHJlZmNvdW50cywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovCiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2Rpc2stJmd0O29wZW5fbXV0ZXgpOwomIzQzOwomIzQzOwlwdXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTsKJiM0MzsKIAkvKgotCSAqIE5lZWQgbm90IGhvbGQgbG9fbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuIENhbGxpbmcgZnB1dCBob2xkaW5nCi0JICogbG9fbXV0ZXggdHJpZ2dlcnMgYSBjaXJjdWxhciBsb2NrIGRlcGVuZGVuY3kgcG9zc2liaWxpdHkgd2FybmluZyBhcwotCSAqIGZwdXQgY2FuIHRha2Ugb3Blbl9tdXRleCB3aGljaCBpcyB1c3VhbGx5IHRha2VuIGJlZm9yZSBsb19tdXRleC4KJiM0MzsJICogVGhpcyBpcyBzYWZlOiBmbHVzaF93b3JrKCkgZnJvbSBsb29wX3JlbW92ZSgpIGZyb20gbG9vcF9leGl0KCkgd2FpdHMKJiM0MzsJICogdW50aWwgdGhpcyBmdW5jdGlvbiByZXR1cm5zOyBlZmZlY3RpdmVseSBkcm9wcGluZyB0aGUgZmluYWwgbW9kdWxlCiYjNDM7CSAqIHJlZmVyZW5jZXMgc3luY2hyb25vdXNseS4KIAkgKi8KJiM0MzsJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiYjNDM7CiAJZnB1dChmaWxwKTsKIH0KIApAQCAtMTc2OSw4ICYjNDM7MTc5OSwyMCBAQCBzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCW5lZWRfY2xlYXIgPSAobG8tJmd0O2xvX3N0YXRlID09IExvX3J1bmRvd24pOwogCW11dGV4X3VubG9jaygmYW1wO2xvLSZndDtsb19tdXRleCk7CiAKLQlpZiAobmVlZF9jbGVhcikKLQkJX19sb29wX2Nscl9mZChsbyk7CiYjNDM7CWlmICghbmVlZF9jbGVhcikKJiM0MzsJCXJldHVybjsKJiM0MzsJLyoKJiM0MzsJICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZwomIzQzOwkgKiBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKSB0byBXUSBjb250ZXh0LiBUaGUgTG9fcnVuZG93biBzdGF0ZQomIzQzOwkgKiBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy4KJiM0MzsJICoKJiM0MzsJICogR3JhYiBkaXNrIHJlZmVyZW5jZSB3aGljaCB3aWxsIGJlIGRyb3BwZWQgYXMgc29vbiBhcwomIzQzOwkgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLSZndDtvcGVuX211dGV4LgomIzQzOwkgKiBXZSBkb24mIzM5O3QgbmVlZCB0byBncmFiIGRpc2stJmd0O2ZvcHMtJmd0O293bmVyIHJlZmVyZW5jZSBiZWNhdXNlCiYjNDM7CSAqIHdlIGFyZSBob2xkaW5nIG9uZSBvYnRhaW5lZCBieSBsb29wX2NvbmZpZ3VyZSgpLgomIzQzOwkgKi8KJiM0MzsJZ2V0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7CiYjNDM7CXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZhbXA7bG8tJmd0O2xvX2Nscl93b3JrKTsKIH0KIAogc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQpAQCAtMjAzNCw2ICYjNDM7MjA3Niw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAJbG8gPSBremFsbG9jX29iaigqbG8pOwogCWlmICghbG8pCiAJCWdvdG8gb3V0OwomIzQzOwlJTklUX1dPUksoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpOwogCWxvLSZndDt3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtsby0mZ3Q7aWRsZV93b3JrZXJfbGlzdCk7CiAJdGltZXJfc2V0dXAoJmFtcDtsby0mZ3Q7dGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpOwpAQCAtMjEzOCw2ICYjNDM7MjE4MSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAKIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiB7CiYjNDM7CS8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi8KJiM0MzsJZmx1c2hfd29yaygmYW1wO2xvLSZndDtsb19jbHJfd29yayk7CiYjNDM7CiAJLyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovCiAJZGVsX2dlbmRpc2sobG8tJmd0O2xvX2Rpc2spOwogCWJsa19tcV9mcmVlX3RhZ19zZXQoJmFtcDtsby0mZ3Q7dGFnX3NldCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb29wIERldmljZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGtlcm5lbCBjb2RlLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgdGFyZ2V0aW5nIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AsIHNwZWNpZmljYWxseSB0aGUgbG9vcCBkZXZpY2UgcmVsZWFzZSBhbmQgdGVhcmRvd24gbWVjaGFuaXNtcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgY2FyZWZ1bCBpbnNwZWN0aW9uLgoKTG9va2luZyBjbG9zZXIsIHRoZSBwYXRjaCBpcyBtYWtpbmcgc2V2ZXJhbCBrZXkgYWx0ZXJhdGlvbnMuIEZpcnN0LCBpdCYjMzk7cyByZXdvcmtpbmcgaG93IHRoZSBsb29wIGRldmljZSBpcyByZWxlYXNlZCBhbmQgdG9ybiBkb3duLCB3aGljaCBpbmNsdWRlcyBjaGFuZ2VzIHRvIGBsb19yZWxlYXNlYCwgYF9fbG9vcF9jbHJfZmRgLCBgbG9vcF9hZGRgLCBhbmQgYGxvb3BfcmVtb3ZlYC4gT2YgcGFydGljdWxhciBpbnRlcmVzdCBpcyB0aGUgY29udmVyc2lvbiBvZiBgX19sb29wX2Nscl9mZGAgaW50byBhIHdvcmtxdWV1ZSBoYW5kbGVyLiBUaGV5JiMzOTtyZSBkZWZlcnJpbmcgaXQgdG8gYHN5c3RlbV9sb25nX3dxYCB2aWEgYGxvX3JlbGVhc2VgLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIHNvbWUgY29uY3VycmVuY3kgaXNzdWVzIG9yIGxvbmctcnVubmluZyBvcGVyYXRpb25zLiBUaGUgYWRkaXRpb24gb2YgYHN5bmNocm9uaXplX3JjdSgpYCwgYGRyYWluX3dvcmtxdWV1ZSgpYCwgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgIGZ1cnRoZXIgc3VnZ2VzdHMgdGhpcy4gSeKAmW0gYWxzbyBzZWVpbmcgYSBgV0FSTl9PTl9PTkNFYCBhYm91dCB0aGUgYGxvX3N0YXRlYCwgc3BlY2lmaWNhbGx5IHdoZW4gbm90IGluIGBMb19ydW5kb3duYC4gVGhpcyBoaW50cyBhdCBhIHBvdGVudGlhbCBzdGF0ZSB0cmFuc2l0aW9uIHByb2JsZW0gb3IgYSByYWNlIGNvbmRpdGlvbi4gRmluYWxseSwgdGhleSYjMzk7cmUgcGxheWluZyB3aXRoIG1vZHVsZSByZWZjb3VudGluZywgZGV2aWNlIHJlZmNvdW50aW5nLCBhbmQgbXV0ZXggbG9ja2luZyBvcmRlciwgd2hpY2ggaXMgYWx3YXlzIGEgcmVkIGZsYWcgdGhhdCBuZWVkcyBhIHRob3JvdWdoIGxvb2sgb3Zlci4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IEdpdmVuIHRoZSBuYXR1cmUgb2YgbG9vcCBkZXZpY2VzIGFzIHZpcnR1YWwgYmxvY2sgZGV2aWNlcywgYW5kIGtub3dpbmcgdGhlIGhpc3Rvcnkgb2YgZnV6emluZyB3aXRoIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgbm90IG9ubHkgcmVhY2hhYmxlIGJ1dCBoZWF2aWx5IGV4ZXJjaXNlZC4gTG9vcCBkZXZpY2VzIGFyZSB1c2VkIGV4dGVuc2l2ZWx5IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZSBgaW9jdGwoLi4uLCBMT09QXyopYCwgbW91bnQsIGFuZCBibG9jayBJL08gb3BlcmF0aW9ucyBhcmUgYWxsIGZyZXF1ZW50LiBTbywgdGhlcmUmIzM5O3Mgbm8gcmVhc29uIHRvIGJlbGlldmUgdGhpcyBpc27igJl0IGNyaXRpY2FsIGNvZGUuCgpOZXh0IHN0ZXA6IGxldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIEkmIzM5O2xsIHJ1biBgZ3JlcHBlcmAgb3IganVzdCBjaGVjayBgZHJpdmVycy9ibG9jay9LY29uZmlnYCB0byBjb25maXJtIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTE9PUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE0MD1jb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0My1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNDQ6Y29uZmlnIEJMS19ERVZfTE9PUFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0NS1cdHRyaXN0YXRlIFwmIzM0O0xvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE3OC1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNzk6Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODAtXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBwcmUtY3JlYXRlIGF0IGluaXQgdGltZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBCbG9jayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgYmxvY2sgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlIGFuZCBoZWFkIGRvd24gdG8gYXJvdW5kIGxpbmUgMTQ0LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgYXJlIGRlZmluZWQuIEhvcGVmdWxseSwgdGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyByZXF1aXJlZCBvciBwb3RlbnRpYWxseSBjb25mbGljdHMgd2l0aCBvdGhlciBzZXR0aW5ncyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHJlbGF0aW9uc2hpcHMgdGhlcmUsIGFuZCB3aGF0IG90aGVyIHNldHRpbmdzIGFyZSBuZWNlc3NhcnkgZm9yIHRoZSBjb25maWcgb3B0aW9ucyBoZXJlIHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0NDpcdGNvbmZpZyBCTEtfREVWX0xPT1BcbiAxNDU6XHRcdHRyaXN0YXRlIFwmIzM0O0xvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMTQ2Olx0XHRoZWxwXG4gMTQ3Olx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGEgcmVndWxhciBmaWxlIGFzIGEgYmxvY2tcbiAxNDg6XHRcdCAgZGV2aWNlOyB5b3UgY2FuIHRoZW4gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gdGhhdCBibG9jayBkZXZpY2UgYW5kXG4gMTQ5Olx0XHQgIG1vdW50IGl0IGp1c3QgYXMgeW91IHdvdWxkIG1vdW50IG90aGVyIGJsb2NrIGRldmljZXMgc3VjaCBhcyBoYXJkXG4gMTUwOlx0XHQgIGRyaXZlIHBhcnRpdGlvbnMsIENELVJPTSBkcml2ZXMgb3IgZmxvcHB5IGRyaXZlcy4gVGhlIGxvb3AgZGV2aWNlc1xuIDE1MTpcdFx0ICBhcmUgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgd2l0aCBtYWpvciBudW1iZXIgNyBhbmQgdHlwaWNhbGx5XG4gMTUyOlx0XHQgIGNhbGxlZCAvZGV2L2xvb3AwLCAvZGV2L2xvb3AxIGV0Yy5cbiAxNTM6XHRcbiAxNTQ6XHRcdCAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY2hlY2sgYW4gSVNPIDk2NjAgZmlsZSBzeXN0ZW0gYmVmb3JlXG4gMTU1Olx0XHQgIGJ1cm5pbmcgdGhlIENELCBvciBpZiB5b3Ugd2FudCB0byB1c2UgZmxvcHB5IGltYWdlcyB3aXRob3V0IGZpcnN0XG4gMTU2Olx0XHQgIHdyaXRpbmcgdGhlbSB0byBmbG9wcHkuIEZ1cnRoZXJtb3JlLCBzb21lIExpbnV4IGRpc3RyaWJ1dGlvbnMgYXZvaWRcbiAxNTc6XHRcdCAgdGhlIG5lZWQgZm9yIGEgZGVkaWNhdGVkIExpbnV4IHBhcnRpdGlvbiBieSBrZWVwaW5nIHRoZWlyIGNvbXBsZXRlXG4gMTU4Olx0XHQgIHJvb3QgZmlsZSBzeXN0ZW0gaW5zaWRlIGEgRE9TIEZBVCBmaWxlIHVzaW5nIHRoaXMgbG9vcCBkZXZpY2VcbiAxNTk6XHRcdCAgZHJpdmVyLlxuIDE2MDpcdFxuIDE2MTpcdFx0ICBUbyB1c2UgdGhlIGxvb3AgZGV2aWNlLCB5b3UgbmVlZCB0aGUgbG9zZXR1cCB1dGlsaXR5LCBmb3VuZCBpbiB0aGVcbiAxNjI6XHRcdCAgdXRpbC1saW51eCBwYWNrYWdlLCBzZWVcbiAxNjM6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvdXRpbC1saW51eC9cdTAwM2UuXG4gMTY0Olx0XG4gMTY1Olx0XHQgIFRoZSBsb29wIGRldmljZSBkcml2ZXIgY2FuIGFsc28gYmUgdXNlZCB0byBcJiMzNDtoaWRlXCYjMzQ7IGEgZmlsZSBzeXN0ZW0gaW5cbiAxNjY6XHRcdCAgYSBkaXNrIHBhcnRpdGlvbiwgZmxvcHB5LCBvciByZWd1bGFyIGZpbGUsIGVpdGhlciB1c2luZyBlbmNyeXB0aW9uXG4gMTY3Olx0XHQgIChzY3JhbWJsaW5nIHRoZSBkYXRhKSBvciBzdGVnYW5vZ3JhcGh5IChoaWRpbmcgdGhlIGRhdGEgaW4gdGhlIGxvd1xuIDE2ODpcdFx0ICBiaXRzIG9mLCBzYXksIGEgc291bmQgZmlsZSkuIFRoaXMgaXMgYWxzbyBzYWZlIGlmIHRoZSBmaWxlIHJlc2lkZXNcbiAxNjk6XHRcdCAgb24gYSByZW1vdGUgZmlsZSBzZXJ2ZXIuXG4gMTcwOlx0XG4gMTcxOlx0XHQgIE5vdGUgdGhhdCB0aGlzIGxvb3AgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxvb3BiYWNrXG4gMTcyOlx0XHQgIGRldmljZSB1c2VkIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIGZyb20gdGhlIG1hY2hpbmUgdG8gaXRzZWxmLlxuIDE3MzpcdFxuIDE3NDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxNzU6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxvb3AuXG4gMTc2Olx0XG4gMTc3Olx0XHQgIE1vc3QgdXNlcnMgd2lsbCBhbnN3ZXIgTiBoZXJlLlxuIDE3ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMjEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb29wIERldmljZSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gYEJMS19ERVZfTE9PUGAgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGFueSBleHBsaWNpdGx5IGRlZmluZWQgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb25zIGl0IHRvdWNoZXMgd2l0aGluIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIFNvLCBsZXQmIzM5O3Mgc2VlLCB3ZSBoYXZlIGBfX2xvb3BfY2xyX2ZkYCwgYGxvX3JlbGVhc2VgLCBgbG9vcF9hZGRgLCBhbmQgYGxvb3BfcmVtb3ZlYCBhcyB0aGUga2V5IHBsYXllcnMgaGVyZS4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBjb25zaWRlciBhbnkgbm9uLXViaXF1aXRvdXMgZm9jdXMgc3ltYm9sczsgdGhhdCBsaXN0IGluY2x1ZGVzIHRoZSBzYW1lIGZ1bmN0aW9uczogYF9fbG9vcF9jbHJfZmRgLCBgbG9fcmVsZWFzZWAsIGBsb29wX2FkZGAsIGBsb29wX3JlbW92ZWAuIEkgaGF2ZSB0byBhbHNvIGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSBvZiBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucywgbGlrZSBgbG9vcF9jbHJfZmRgIG9yIGBsb29wX2NvbmZpZ3VyZWAsIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGFjdCBhcyB0cmlnZ2VycyBmb3IgdGhlc2UgY3JpdGljYWwgcGF0aHMuCgpOZXh0IHN0ZXA6IGxldCYjMzk7cyBkZWx2ZSBkZWVwZXIgaW50byBob3cgYGxvX3JlbGVhc2VgIGFuZCBgX19sb29wX2Nscl9mZGAgYXJlIGFjdHVhbGx5IGNhbGxlZCB3aXRoaW4gdGhlIHN5c3RlbS4gR3JlcHBpbmcgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBpcyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIGdldCBhIGZ1bGwgdmlldyBvZiB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9fcmVsZWFzZXxfX2xvb3BfY2xyX2ZkfGxvb3BfY2xyX2ZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9OTc9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDgtICogaXNfbG9vcF9kZXZpY2UoKSBpcyB0cnVlLCB3ZSBuZWVkIGEgZ2xvYmFsIGxvY2sgZm9yIHNlcmlhbGl6aW5nIGNvbmN1cnJlbnRcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwOTogKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkvX19sb29wX2Nscl9mZCgpIGNhbGxzLlxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEwLSAqL1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMDQ9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEzNy1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExMzg6c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTM5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjEzLVx0ICogbG8tXHUwMDNlbG9fc3RhdGUgaXMgc2V0IHRvIExvX3VuYm91bmQgaGVyZSBhZnRlciByZW1vdmluZyBwYXJ0aXRpb25zIGhhc1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxNDpcdCAqIGZpbmlzaGVkLiBUaGVyZSBjYW5ub3QgYmUgYW55Ym9keSBlbHNlIGVudGVyaW5nIF9fbG9vcF9jbHJfZmQoKSBhc1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTIxNS1cdCAqIExvX3J1bmRvd24gc3RhdGUgcHJvdGVjdHMgdXMgZnJvbSBhbGwgdGhlIG90aGVyIHBsYWNlcyB0cnlpbmcgdG9cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjM5LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTI0MDpzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQ1LVx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMjQ2Olx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyNDctXHQgKlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE1Njc9c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU5OC1cdGNhc2UgTE9PUF9DTFJfRkQ6XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTk5Olx0XHRyZXR1cm4gbG9vcF9jbHJfZmQobG8pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTYwMC1cdGNhc2UgTE9PUF9TRVRfU1RBVFVTOlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE3Njc9c3RhdGljIGludCBsb19vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTc4MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3ODI6c3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3ODMte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MDUtXHQgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODA2Olx0ICogZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkgdG8gV1EgY29udGV4dC4gVGhlIExvX3J1bmRvd24gc3RhdGVcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MDctXHQgKiBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy5cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODA5LVx0ICogR3JhYiBkaXNrIHJlZmVyZW5jZSB3aGljaCB3aWxsIGJlIGRyb3BwZWQgYXMgc29vbiBhc1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTgxMDpcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC5cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MTEtXHQgKiBXZSBkb24mIzM5O3QgbmVlZCB0byBncmFiIGRpc2stXHUwMDNlZm9wcy1cdTAwM2Vvd25lciByZWZlcmVuY2UgYmVjYXVzZVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MzItXHQub3BlbiA9ICAgICAgICAgbG9fb3BlbixcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4MzM6XHQucmVsZWFzZSA9XHRsb19yZWxlYXNlLFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgzNC1cdC5pb2N0bCA9XHRsb19pb2N0bCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDYzPXN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA3OC1cdFx0Z290byBvdXQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDc5Olx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwODAtXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjE4Mj1zdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4My17XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTg0Olx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjE4NS1cdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NDcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBsb29wX2Nscl9mZGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgb3ZlciB0byB0aGUgYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGxvb3BfY2xyX2ZkYCBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIG1lbnRhbGx5IHByZXBhcmUgdG8gcGFyc2UgdGhlIGNvZGUsIGZvY3VzaW5nIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGNsZWFycyBhIGZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggYSBsb29wIGRldmljZSwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaXNtIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBrZXJuZWwmIzM5O3MgbG9ja2luZyBzdHJhdGVnaWVzIGluIHRoaXMgYXJlYSwgdG9vLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjM1Olx0XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbjEyMzY6XHRcbjEyMzc6XHRcdGZwdXQoZmlscCk7XG4xMjM4Olx0fVxuMTIzOTpcdFxuMTI0MDpcdHN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbjEyNDE6XHR7XG4xMjQyOlx0XHRpbnQgZXJyO1xuMTI0MzpcdFxuMTI0NDpcdFx0LypcbjEyNDU6XHRcdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxuMTI0NjpcdFx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cbjEyNDc6XHRcdCAqXG4xMjQ4Olx0XHQgKiBUaGVyZWZvcmUsIHVzZSBnbG9iYWwgbG9jayB3aGVuIHNldHRpbmcgTG9fcnVuZG93biBzdGF0ZSBpbiBvcmRlciB0b1xuMTI0OTpcdFx0ICogbWFrZSBzdXJlIHRoYXQgbG9vcF92YWxpZGF0ZV9maWxlKCkgd2lsbCBmYWlsIGlmIHRoZSBcJiMzNDtzdHJ1Y3QgZmlsZVwmIzM0O1xuMTI1MDpcdFx0ICogd2hpY2ggbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGZvdW5kIHZpYSBmZ2V0KCkgd2FzIHRoaXNcbjEyNTE6XHRcdCAqIGxvb3AgZGV2aWNlLlxuMTI1MjpcdFx0ICovXG4xMjUzOlx0XHRlcnIgPSBsb29wX2dsb2JhbF9sb2NrX2tpbGxhYmxlKGxvLCB0cnVlKTtcbjEyNTQ6XHRcdGlmIChlcnIpXG4xMjU1Olx0XHRcdHJldHVybiBlcnI7XG4xMjU2Olx0XHRpZiAobG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQpIHtcbjEyNTc6XHRcdFx0bG9vcF9nbG9iYWxfdW5sb2NrKGxvLCB0cnVlKTtcbjEyNTg6XHRcdFx0cmV0dXJuIC1FTlhJTztcbjEyNTk6XHRcdH1cbjEyNjA6XHRcdC8qXG4xMjYxOlx0XHQgKiBNYXJrIHRoZSBkZXZpY2UgZm9yIHJlbW92aW5nIHRoZSBiYWNraW5nIGRldmljZSBvbiBsYXN0IGNsb3NlLlxuMTI2MjpcdFx0ICogSWYgd2UgYXJlIHRoZSBvbmx5IG9wZW5lciwgYWxzbyBzd2l0Y2ggdGhlIHN0YXRlIHRvIHJvdW5kb3duIGhlcmUgdG9cbjEyNjM6XHRcdCAqIHByZXZlbnQgbmV3IG9wZW5lcnMgZnJvbSBjb21pbmcgaW4uXG4xMjY0Olx0XHQgKi9cbjEyNjU6XHRcbjEyNjY6XHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0FVVE9DTEVBUjtcbjEyNjc6XHRcdGlmIChkaXNrX29wZW5lcnMobG8tXHUwMDNlbG9fZGlzaykgPT0gMSlcbjEyNjg6XHRcdFx0V1JJVEVfT05DRShsby1cdTAwM2Vsb19zdGF0ZSwgTG9fcnVuZG93bik7XG4xMjY5Olx0XHRsb29wX2dsb2JhbF91bmxvY2sobG8sIHRydWUpO1xuMTI3MDpcdFxuMTI3MTpcdFx0cmV0dXJuIDA7XG4xMjcyOlx0fVxuMTI3MzpcdFxuMTI3NDpcdHN0YXRpYyBpbnRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc0OAoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAyOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBMb29wIERldmljZSBUZWFyZG93biBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgZGVlcCBpbnRvIHRoZSBsb29wIGRldmljZSYjMzk7cyB0ZWFyZG93biBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGNsZWFucyB1cCBhZnRlciBpdHNlbGYuIEl0JiMzOTtzIGRlZmVycmluZyB0aGUgYF9fbG9vcF9jbHJfZmRgIGZ1bmN0aW9uIHRvIGEgd29ya3F1ZXVlIChgbG9fY2xyX3dvcmtgKSB3aXRoaW4gYGxvX3JlbGVhc2VgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHBhdHRlcm4gZm9yIG1hbmFnaW5nIEkvTyBhbmQgcHJldmVudGluZyBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGUgcmVsZWFzZSBwcm9jZXNzLiBJIHNlZSB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBxdWl0ZSBhIGZldyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB0byBoYW5kbGUgdGhpcyBkZWZlcnJlZCBjbGVhbnVwIOKAkyBgc3luY2hyb25pemVfcmN1YCwgYGRyYWluX3dvcmtxdWV1ZWAsIGFuZCBldmVuIGZyZWV6aW5nIHRoZSBibG9jayBxdWV1ZSAoYGJsa19tcV9mcmVlemVfcXVldWVgKS4gVGhleSYjMzk7cmUgYWxzbyBjYXJlZnVsbHkgYWRqdXN0aW5nIG11dGV4IGxvY2tpbmcgYXJvdW5kIHRoZSBgZGlzay0mZ3Q7b3Blbl9tdXRleGAgYW5kIHVwZGF0aW5nIHRoZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIGRldmljZXMgd2l0aCBgZ2V0X2RldmljZWAsIGBwdXRfZGV2aWNlYCwgYW5kIGBtb2R1bGVfcHV0YCwgYWxsIGltcG9ydGFudCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gVGhlIGBXQVJOX09OX09OQ0UobG8tJmd0O2xvX3N0YXRlICE9IExvX3J1bmRvd24pYCBzZWVtcyBsaWtlIGEgZ29vZCBzYW5pdHkgY2hlY2s7IGEgbmljZSBhZGRpdGlvbiB0byBjYXRjaCBhbnkgdW5leHBlY3RlZCBzdGF0ZXMgZHVyaW5nIGNsZWFudXAuCgpHaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSB0ZWFyZG93biBsb2dpYyB3aXRoaW4gdGhlIGxvb3AgZHJpdmVyIChgZHJpdmVycy9ibG9jay9sb29wLmNgKSwgd2hpY2ggaXMgY3JpdGljYWwgYW5kIHByb25lIHRvIHN1YnRsZSBjb25jdXJyZW5jeSBidWdzLiBUaGUgZmFjdCB0aGF0IHRoZSBsb29wIGRyaXZlciBpcyBlYXNpbHkgYWNjZXNzaWJsZSBpbiBib3RoIFFFTVUgYW5kIHN5emthbGxlciBtYWtlcyBpdCBldmVuIG1vcmUgYXBwZWFsaW5nLiBUaGUgYWRkZWQgYXNzZXJ0aW9uIGFuZCBjb21wbGV4aXR5IGFyb3VuZCBjb25jdXJyZW5jeSDigJMgd29ya3F1ZXVlIGRlZmVycmFsLCBxdWV1ZSBmcmVlemluZywgUkNVIHN5bmNocm9uaXphdGlvbiwgYW5kIHdvcmtxdWV1ZSBkcmFpbmluZyDigJMgYWxsIHNjcmVhbSAmIzM0O3BvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuJiMzNDsKCkkgc2hvdWxkIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBfX2xvb3BfY2xyX2ZkYCwgYGxvX3JlbGVhc2VgLCBgbG9vcF9jbHJfZmRgLCBgbG9vcF9yZW1vdmVgLCBhbmQgYGxvb3BfYWRkYC4gVGhlc2UgYXJlIHdoZXJlIHRoZSBjb3JlIGNoYW5nZXMgc2VlbSB0byBiZSBjb25jZW50cmF0ZWQuCgpBbmQsIG9mIGNvdXJzZSwgdGhlIGBCTEtfREVWX0xPT1BgIEVuYWJsZUNvbmZpZyBpcyBlc3NlbnRpYWwuCgpJIHdpbGwgbmVlZCB0byBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9fcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtsb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb29wX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtsb29wX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL2xvb3AuYyksIGFsdGVyaW5nIGhvdyBsb29wIGRldmljZXMgYXJlIHRvcm4gZG93biB3aGVuIHJlbGVhc2VkLiBJdCBjb252ZXJ0cyBfX2xvb3BfY2xyX2ZkIHRvIHJ1biBhc3luY2hyb25vdXNseSBvbiBhIHdvcmtxdWV1ZSwgbW9kaWZpZXMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gKGFkZGluZyBzeW5jaHJvbml6ZV9yY3UsIGRyYWluX3dvcmtxdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZSksIGFkanVzdHMgZGV2aWNlIGFuZCBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24uIExvb3AgZGV2aWNlcyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19sb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2xvb3BfY2xyX2ZkJiMzNDssCiAgICAmIzM0O2xvb3BfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2xvb3BfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svbG9vcC5jKSwgYWx0ZXJpbmcgaG93IGxvb3AgZGV2aWNlcyBhcmUgdG9ybiBkb3duIHdoZW4gcmVsZWFzZWQuIEl0IGNvbnZlcnRzIF9fbG9vcF9jbHJfZmQgdG8gcnVuIGFzeW5jaHJvbm91c2x5IG9uIGEgd29ya3F1ZXVlLCBtb2RpZmllcyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiAoYWRkaW5nIHN5bmNocm9uaXplX3JjdSwgZHJhaW5fd29ya3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKSwgYWRqdXN0cyBkZXZpY2UgYW5kIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbi4gTG9vcCBkZXZpY2VzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIGZ1enphYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwODoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA4OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsb29wIGJsb2NrIGRyaXZlciB0ZWFyZG93biBwYXRoIGJ5IGRlZmVycmluZyBfX2xvb3BfY2xyX2ZkKCkgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9fY2xyX3dvcmspIHJhdGhlciB0aGFuIGV4ZWN1dGluZyBpdCBzeW5jaHJvbm91c2x5IGluIGxvX3JlbGVhc2UoKSB3aGlsZSBob2xkaW5nIG9wZW5fbXV0ZXguIFRoaXMgcHJldmVudHMgbG9jayBvcmRlciBjb25mbGljdHMgZHVyaW5nIEkvTyBmbHVzaGluZyBhbmQgcmVzb3VyY2UgcmVsZWFzZS5cblxuTWVtb3J5IFx1MDAyNiBzYW5pdGl6ZXIgYW5hbHlzaXM6XG4tIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHdvcmtfc3RydWN0IGZpZWxkIGBsb19jbHJfd29ya2AgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdmlhIGBremFsbG9jX29iaigpYCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLKClgIGluIGBsb29wX2FkZCgpYC5cbi0gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IHRvdWNoIG9yIGludHJvZHVjZSBhbnkgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsIG91dHB1dCwgb3IgQlBGIGJ1ZmZlcnMpLCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcy9zdGFjayB2YXJpYWJsZXMgdW5pbml0aWFsaXplZC5cbi0gVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiwgc3luY2hyb25pemF0aW9uLCByZWZjb3VudGluZyAoZ2V0X2RldmljZS9wdXRfZGV2aWNlLCBtb2R1bGVfcHV0LCBmcHV0KSwgbG9ja2luZywgYW5kIG9iamVjdCBsaWZldGltZXMgKHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucykuIFRoZXNlIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIG1lY2hhbmlzbXMuXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIyODFhMjVmMTY2NzhlZWQzNTNhYTI0ODQzYzdiNjhmNjBkNjExMjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA4OjE3OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCA2ZjEyOTc2MDM1YjA5Li41MTYxMThiM2ExNmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtNzUsNiAmIzQzOzc1LDcgQEAgc3RydWN0IGxvb3BfZGV2aWNlIHsKIAlzdHJ1Y3QgZ2VuZGlzawkJKmxvX2Rpc2s7CiAJc3RydWN0IG11dGV4CQlsb19tdXRleDsKIAlib29sCQkJaWRyX3Zpc2libGU7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdAlsb19jbHJfd29yazsKIH07CiAKIHN0cnVjdCBsb29wX2NtZCB7CkBAIC0xMTM0LDEzICYjNDM7MTEzNSw0MiBAQCBzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSwKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKJiM0MztzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKJiM0MzsJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGxvX2Nscl93b3JrKTsKJiM0MzsJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBsby0mZ3Q7bG9fZGlzazsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKIAlnZnBfdCBnZnAgPSBsby0mZ3Q7b2xkX2dmcF9tYXNrOwogCWludCBlcnI7CiAKJiM0MzsJLyogU3RlcCAxOiBGbHVzaCBhbGwgb3V0c3RhbmRpbmcgSS9PLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi8KJiM0MzsJLyoKJiM0MzsJICogU2luY2UgbG9vcF9xdWV1ZV9ycSgpIGlzIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2ssIHRoaXMgc3luY2hyb25pemVfcmN1KCkKJiM0MzsJICogbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgcXVldWVfd29yaygpIGNhbGxzIGFyZSBtYWRlIGZyb20gbG9vcF9xdWV1ZV93b3JrKCkKJiM0MzsJICogZnJvbSBsb29wX3F1ZXVlX3JxKCkuIFN1YnNlcXVlbnQgbG9vcF9xdWV1ZV9ycSgpIGNhbGxzIHdoaWNoIGFyZSBtYWRlIGFmdGVyCiYjNDM7CSAqIHRoaXMgc3luY2hyb25pemVfcmN1KCkgcmV0dXJuZWQgc2hhbGwgc2VlIGxvLSZndDtsb19zdGF0ZSAhPSBMb19ib3VuZCBhbmQKJiM0MzsJICogcmV0dXJuIHdpdGggQkxLX1NUU19JT0VSUi4KJiM0MzsJICovCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGRyYWluX3dvcmtxdWV1ZSgpIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIGxvb3BfaGFuZGxlX2NtZCgpIGNhbGxzIGFyZQomIzQzOwkgKiBtYWRlIGZyb20gbG9vcF9wcm9jZXNzX3dvcmsoKSBmcm9tIGxvb3Bfd29ya2ZuKCkvbG9vcF9yb290Y2dfd29ya2ZuKCkuCiYjNDM7CSAqLwomIzQzOwlkcmFpbl93b3JrcXVldWUobG8tJmd0O3dvcmtxdWV1ZSk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHdhaXRzIGZvciBjb21wbGV0aW9uIG9mIGFsbCBvdXRzdGFuZGluZyBJL08KJiM0MzsJICogd2hpY2ggaGFzIGJlZW4gc2NoZWR1bGVkIHZpYSBsb29wX3F1ZXVlX3JxKCksIGJ5IHdhaXRpbmcgZm9yIHFfdXNhZ2VfY291bnRlcgomIzQzOwkgKiB0byByZWFjaCAwLiBTaW5jZSB0aGUgbG8tJmd0O2xvX3N0YXRlICE9IExvX2JvdW5kIGNoZWNrIGluIGxvb3BfcXVldWVfcnEoKQomIzQzOwkgKiBndWFyYW50ZWVzIHRoYXQgbm8gbW9yZSBuZXcgSS9PIHJlcXVlc3RzIGFyZSBtYWRlLCB3ZSBjYW4gY2FsbAomIzQzOwkgKiBibGtfbXFfdW5mcmVlemVfcXVldWUoKSBpbW1lZGlhdGVseSBhZnRlciBibGtfbXFfZnJlZXplX3F1ZXVlKCkgcmV0dXJucy4KJiM0MzsJICovCiYjNDM7CWJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUsIGJsa19tcV9mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlKSk7CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMjogUGVyZm9ybSByZW1haW5pbmcgY2xlYW51cCwgd2l0aCBvcGVuX211dGV4IGhlbGQuICovCiYjNDM7CW11dGV4X2xvY2soJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsJV0FSTl9PTl9PTkNFKGxvLSZndDtsb19zdGF0ZSAhPSBMb19ydW5kb3duKTsKJiM0MzsKIAlzcGluX2xvY2tfaXJxKCZhbXA7bG8tJmd0O2xvX2xvY2spOwogCWZpbHAgPSBsby0mZ3Q7bG9fYmFja2luZ19maWxlOwogCWxvLSZndDtsb19iYWNraW5nX2ZpbGUgPSBOVUxMOwpAQCAtMTE1MSwxMiAmIzQzOzExODEsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiAJbG8tJmd0O2xvX3NpemVsaW1pdCA9IDA7CiAJbWVtc2V0KGxvLSZndDtsb19maWxlX25hbWUsIDAsIExPX05BTUVfU0laRSk7CiAKLQkvKgotCSAqIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LgotCSAqCi0JICogTm8gcXVldWUgZnJlZXppbmcgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgZmluYWwKLQkgKiAtJmd0O3JlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4mIzM5O3QgYmUgYW55IG91dHN0YW5kaW5nIEkvTy4KLQkgKi8KJiM0MzsJLyogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuICovCiAJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwogCWxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTsKIAlsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFOwpAQCAtMTE2OCw4ICYjNDM7MTE5Myw2IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAkvKiBsZXQgdXNlci1zcGFjZSBrbm93IGFib3V0IHRoaXMgY2hhbmdlICovCiAJa29iamVjdF91ZXZlbnQoJmFtcDtkaXNrX3RvX2Rldihsby0mZ3Q7bG9fZGlzayktJmd0O2tvYmosIEtPQkpfQ0hBTkdFKTsKIAltYXBwaW5nX3NldF9nZnBfbWFzayhmaWxwLSZndDtmX21hcHBpbmcsIGdmcCk7Ci0JLyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi8KLQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIAogCWRpc2tfZm9yY2VfbWVkaWFfY2hhbmdlKGxvLSZndDtsb19kaXNrKTsKIApAQCAtMTE5OSwxMSAmIzQzOzEyMjIsMTggQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCVdSSVRFX09OQ0UobG8tJmd0O2xvX3N0YXRlLCBMb191bmJvdW5kKTsKIAltdXRleF91bmxvY2soJmFtcDtsby0mZ3Q7bG9fbXV0ZXgpOwogCiYjNDM7CS8qIFN0ZXAgMzogRHJvcCByZWZjb3VudHMsIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqLwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsKJiM0MzsJcHV0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7CiYjNDM7CiAJLyoKLQkgKiBOZWVkIG5vdCBob2xkIGxvX211dGV4IHRvIGZwdXQgYmFja2luZyBmaWxlLiBDYWxsaW5nIGZwdXQgaG9sZGluZwotCSAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXMKLQkgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguCiYjNDM7CSAqIFRoaXMgaXMgc2FmZTogZmx1c2hfd29yaygpIGZyb20gbG9vcF9yZW1vdmUoKSBmcm9tIGxvb3BfZXhpdCgpIHdhaXRzCiYjNDM7CSAqIHVudGlsIHRoaXMgZnVuY3Rpb24gcmV0dXJuczsgZWZmZWN0aXZlbHkgZHJvcHBpbmcgdGhlIGZpbmFsIG1vZHVsZQomIzQzOwkgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuCiAJICovCiYjNDM7CW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwomIzQzOwogCWZwdXQoZmlscCk7CiB9CiAKQEAgLTE3NjksOCAmIzQzOzE3OTksMjAgQEAgc3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAluZWVkX2NsZWFyID0gKGxvLSZndDtsb19zdGF0ZSA9PSBMb19ydW5kb3duKTsKIAltdXRleF91bmxvY2soJmFtcDtsby0mZ3Q7bG9fbXV0ZXgpOwogCi0JaWYgKG5lZWRfY2xlYXIpCi0JCV9fbG9vcF9jbHJfZmQobG8pOwomIzQzOwlpZiAoIW5lZWRfY2xlYXIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CS8qCiYjNDM7CSAqIEluIG9yZGVyIHRvIGZsdXNoIG91dHN0YW5kaW5nIEkvTyBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmcKJiM0MzsJICogZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkgdG8gV1EgY29udGV4dC4gVGhlIExvX3J1bmRvd24gc3RhdGUKJiM0MzsJICogZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uCiYjNDM7CSAqCiYjNDM7CSAqIEdyYWIgZGlzayByZWZlcmVuY2Ugd2hpY2ggd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXMKJiM0MzsJICogcmV0dXJuaW5nIGZyb20gbG9fcmVsZWFzZSgpIGFuZCByZWxlYXNpbmcgZGlzay0mZ3Q7b3Blbl9tdXRleC4KJiM0MzsJICogV2UgZG9uJiMzOTt0IG5lZWQgdG8gZ3JhYiBkaXNrLSZndDtmb3BzLSZndDtvd25lciByZWZlcmVuY2UgYmVjYXVzZQomIzQzOwkgKiB3ZSBhcmUgaG9sZGluZyBvbmUgb2J0YWluZWQgYnkgbG9vcF9jb25maWd1cmUoKS4KJiM0MzsJICovCiYjNDM7CWdldF9kZXZpY2UoZGlza190b19kZXYoZGlzaykpOwomIzQzOwlxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCAmYW1wO2xvLSZndDtsb19jbHJfd29yayk7CiB9CiAKIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKQEAgLTIwMzQsNiAmIzQzOzIwNzYsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCWxvID0ga3phbGxvY19vYmooKmxvKTsKIAlpZiAoIWxvKQogCQlnb3RvIG91dDsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bG8tJmd0O2xvX2Nscl93b3JrLCBfX2xvb3BfY2xyX2ZkKTsKIAlsby0mZ3Q7d29ya2VyX3RyZWUgPSBSQl9ST09UOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bG8tJmd0O2lkbGVfd29ya2VyX2xpc3QpOwogCXRpbWVyX3NldHVwKCZhbXA7bG8tJmd0O3RpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTsKQEAgLTIxMzgsNiAmIzQzOzIxODEsOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogewomIzQzOwkvKiBXYWl0IGZvciBfX2xvb3BfY2xyX2ZkKCkgdG8gY29tcGxldGUuICovCiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtsby0mZ3Q7bG9fY2xyX3dvcmspOwomIzQzOwogCS8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqLwogCWRlbF9nZW5kaXNrKGxvLSZndDtsb19kaXNrKTsKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZhbXA7bG8tJmd0O3RhZ19zZXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyMgoJCQkJCQkJb3V0cHV0OiAyODkKCQkJCQkJCXRob3VnaHRzOiAxMDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb24gZm9yIExvb3AgRGV2aWNlIFRlYXJkb3duIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gQWZ0ZXIgYW5hbHl6aW5nIHRoZSBjb2RlLCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgY29uY2x1ZGVkLgoKVGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgdGVhcmRvd24gcHJvY2VzcyBmb3IgbG9vcCBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHRoZSBiYWNraW5nIGZpbGUgaXMgaGFuZGxlZC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRvIGRlZmVyIHRoZSBgX19sb29wX2Nscl9mZGAgZnVuY3Rpb24gdG8gYSB3b3JrcXVldWUgKGBzeXN0ZW1fbG9uZ193cWApLiBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBibG9ja2luZyB0aGUgYGxvX3JlbGVhc2VgIHBhdGggd2hpbGUgdGhlIGxvb3AgZGV2aWNlIGZsdXNoZXMgSS9PLCB3aGljaCBjb3VsZCBsZWFkIHRvIGxvY2sgaW52ZXJzaW9uIG9yIGRlYWRsb2NrcyB3aGVuIGhvbGRpbmcgYGRpc2stJmd0O29wZW5fbXV0ZXhgLiBJdCYjMzk7cyBhIHN5bmNocm9uaXphdGlvbiBpbXByb3ZlbWVudC4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHN0cnVjdCB3b3JrX3N0cnVjdCBsb19jbHJfd29ya2AgYW5kIG1vZGlmaWVzIGhvdyBgX19sb29wX2Nscl9mZGAgaXMgY2FsbGVkLCB1c2luZyBgcXVldWVfd29ya2AgaW5zdGVhZCBvZiBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsIGZyb20gYGxvX3JlbGVhc2VgLiBJbXBvcnRhbnRseSwgdGhlIHRlYXJkb3duIG5vdyBpbnZvbHZlcyBwcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nOiBgZ2V0X2RldmljZWAvYHB1dF9kZXZpY2VgLCBgbW9kdWxlX3B1dGAsIGFuZCBgZnB1dGAgYXJlIGNhcmVmdWxseSBtYW5hZ2VkLiBUaGUgYGxvX2Nscl93b3JrYCBpcyBmbHVzaGVkIGluIGBsb29wX3JlbW92ZWAgdG8gZW5zdXJlIHRoYXQgdGhlIGNsZWFudXAgaGFwcGVucy4KCk5vdywgbGV0JiMzOTtzIGFkZHJlc3MgdGhlIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSSYjMzk7dmUgc2NydXRpbml6ZWQgdGhlIGNoYW5nZXMgZm9yIHRoZSBmb2xsb3dpbmc6CgoxLiAgKipTdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vIG5ldyBvciBtb2RpZmllZCBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogVGhlIGBJTklUX1dPUktgIGNhbGwgZW5zdXJlcyB0aGF0IGBsb19jbHJfd29ya2AgaXMgaW5pdGlhbGl6ZWQgYW5kIHNhZmUuIFRoZSBgbmVlZF9jbGVhcmAgdmFyaWFibGUgcmVsaWVzIG9uIHRoZSBzdGF0ZSBvZiB0aGUgYGxvb3BfZGV2aWNlYCBzdHJ1Y3QuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246KiogTm8gY29tcGxleCBhbGxvY2F0aW9ucyBvciBpbml0aWFsaXphdGlvbnMgYXJlIGFkZGVkIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgo0LiAgKipCb3VuZHMgY2hlY2tzIGFuZCBsb2dpYzoqKiBOb25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb3IgYWNjZXNzLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGFuIGFzeW5jaHJvbm91cyB0ZWFyZG93biB3aXRoIGEgZm9jdXMgb24gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nLCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGF0ZWQgdG8gcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIHByb2JsZW1zIHRoYXQgYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4vTE9DS0RFUCBhbmQgZ2VuZXJhbCBzYW5pdGl6ZXJzLCByYXRoZXIgdGhhbiBLTVNBTi4KCktNU0FOJiMzOTtzIHByaW1hcnkgcHVycG9zZSBpcyB0byBkZXRlY3QgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIHRob3NlIHJpc2tzLCBhbmQgdGhlIGV4aXN0aW5nIGNvZGUgcGF0aHMgYXJlIGxpa2VseSBhbHJlYWR5IGNvdmVyZWQuCgpJbiBzaG9ydCwgdGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbiAvIGxpZmV0aW1lIC8gZGVhZGxvY2sgaXNzdWUsIGFuZCBhbGwgaXNzdWVzIGFyZSBoYW5kbGVkIGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMsIG5vdCBLTVNBTi4gVGhlIGFuc3dlciBpcyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsb29wIGJsb2NrIGRyaXZlciB0ZWFyZG93biBwYXRoIGJ5IGRlZmVycmluZyBfX2xvb3BfY2xyX2ZkKCkgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9fY2xyX3dvcmspIHJhdGhlciB0aGFuIGV4ZWN1dGluZyBpdCBzeW5jaHJvbm91c2x5IGluIGxvX3JlbGVhc2UoKSB3aGlsZSBob2xkaW5nIG9wZW5fbXV0ZXguIFRoaXMgcHJldmVudHMgbG9jayBvcmRlciBjb25mbGljdHMgZHVyaW5nIEkvTyBmbHVzaGluZyBhbmQgcmVzb3VyY2UgcmVsZWFzZS5cblxuTWVtb3J5IFx1MDAyNiBzYW5pdGl6ZXIgYW5hbHlzaXM6XG4tIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHdvcmtfc3RydWN0IGZpZWxkIGBsb19jbHJfd29ya2AgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdmlhIGBremFsbG9jX29iaigpYCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLKClgIGluIGBsb29wX2FkZCgpYC5cbi0gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IHRvdWNoIG9yIGludHJvZHVjZSBhbnkgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsIG91dHB1dCwgb3IgQlBGIGJ1ZmZlcnMpLCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcy9zdGFjayB2YXJpYWJsZXMgdW5pbml0aWFsaXplZC5cbi0gVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiwgc3luY2hyb25pemF0aW9uLCByZWZjb3VudGluZyAoZ2V0X2RldmljZS9wdXRfZGV2aWNlLCBtb2R1bGVfcHV0LCBmcHV0KSwgbG9ja2luZywgYW5kIG9iamVjdCBsaWZldGltZXMgKHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucykuIFRoZXNlIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIG1lY2hhbmlzbXMuXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9vcCBibG9jayBkcml2ZXIgdGVhcmRvd24gcGF0aCBieSBkZWZlcnJpbmcgX19sb29wX2Nscl9mZCgpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlKCkgd2hpbGUgaG9sZGluZyBvcGVuX211dGV4LiBUaGlzIHByZXZlbnRzIGxvY2sgb3JkZXIgY29uZmxpY3RzIGR1cmluZyBJL08gZmx1c2hpbmcgYW5kIHJlc291cmNlIHJlbGVhc2UuXG5cbk1lbW9yeSBcdTAwMjYgc2FuaXRpemVyIGFuYWx5c2lzOlxuLSBUaGUgbmV3bHkgaW50cm9kdWNlZCB3b3JrX3N0cnVjdCBmaWVsZCBgbG9fY2xyX3dvcmtgIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHZpYSBga3phbGxvY19vYmooKWAgYW5kIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCBpbiBgbG9vcF9hZGQoKWAuXG4tIFRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCB0b3VjaCBvciBpbnRyb2R1Y2UgYW55IGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCBvdXRwdXQsIG9yIEJQRiBidWZmZXJzKSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMvc3RhY2sgdmFyaWFibGVzIHVuaW5pdGlhbGl6ZWQuXG4tIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGFzeW5jaHJvbm91cyBleGVjdXRpb24sIHN5bmNocm9uaXphdGlvbiwgcmVmY291bnRpbmcgKGdldF9kZXZpY2UvcHV0X2RldmljZSwgbW9kdWxlX3B1dCwgZnB1dCksIGxvY2tpbmcsIGFuZCBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpLiBUaGVzZSBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc21zLlxuXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjE3OjE5Ljg1NTcxMzkxOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDk3MDg0MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb29wX3JlbW92ZVwiLFxuICAgIFwibG9vcF9hZGRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9vcCBibG9jayBkcml2ZXIgdGVhcmRvd24gcGF0aCBieSBkZWZlcnJpbmcgX19sb29wX2Nscl9mZCgpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlKCkgd2hpbGUgaG9sZGluZyBvcGVuX211dGV4LiBUaGlzIHByZXZlbnRzIGxvY2sgb3JkZXIgY29uZmxpY3RzIGR1cmluZyBJL08gZmx1c2hpbmcgYW5kIHJlc291cmNlIHJlbGVhc2UuXFxuXFxuTWVtb3J5IFxcdTAwMjYgc2FuaXRpemVyIGFuYWx5c2lzOlxcbi0gVGhlIG5ld2x5IGludHJvZHVjZWQgd29ya19zdHJ1Y3QgZmllbGQgYGxvX2Nscl93b3JrYCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IGxvb3BfZGV2aWNlYCB2aWEgYGt6YWxsb2Nfb2JqKClgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUksoKWAgaW4gYGxvb3BfYWRkKClgLlxcbi0gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IHRvdWNoIG9yIGludHJvZHVjZSBhbnkgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsIG91dHB1dCwgb3IgQlBGIGJ1ZmZlcnMpLCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcy9zdGFjayB2YXJpYWJsZXMgdW5pbml0aWFsaXplZC5cXG4tIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGFzeW5jaHJvbm91cyBleGVjdXRpb24sIHN5bmNocm9uaXphdGlvbiwgcmVmY291bnRpbmcgKGdldF9kZXZpY2UvcHV0X2RldmljZSwgbW9kdWxlX3B1dCwgZnB1dCksIGxvY2tpbmcsIGFuZCBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpLiBUaGVzZSBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc21zLlxcblxcblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL2xvb3AuYyksIGFsdGVyaW5nIGhvdyBsb29wIGRldmljZXMgYXJlIHRvcm4gZG93biB3aGVuIHJlbGVhc2VkLiBJdCBjb252ZXJ0cyBfX2xvb3BfY2xyX2ZkIHRvIHJ1biBhc3luY2hyb25vdXNseSBvbiBhIHdvcmtxdWV1ZSwgbW9kaWZpZXMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gKGFkZGluZyBzeW5jaHJvbml6ZV9yY3UsIGRyYWluX3dvcmtxdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZSksIGFkanVzdHMgZGV2aWNlIGFuZCBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24uIExvb3AgZGV2aWNlcyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MTkuODU1NzE4MDc5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTc1MDQ5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiMjgxYTI1ZjE2Njc4ZWVkMzUzYWEyNDg0M2M3YjY4ZjYwZDYxMTI3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDg6MTc6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbmluZGV4IDZmMTI5NzYwMzViMDkuLjUxNjExOGIzYTE2YzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbkBAIC03NSw2ICs3NSw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XFxuIFxcdHN0cnVjdCBnZW5kaXNrXFx0XFx0KmxvX2Rpc2s7XFxuIFxcdHN0cnVjdCBtdXRleFxcdFxcdGxvX211dGV4O1xcbiBcXHRib29sXFx0XFx0XFx0aWRyX3Zpc2libGU7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdGxvX2Nscl93b3JrO1xcbiB9O1xcbiBcXG4gc3RydWN0IGxvb3BfY21kIHtcXG5AQCAtMTEzNCwxMyArMTEzNSw0MiBAQCBzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuK3N0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuK1xcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBsb19jbHJfd29yayk7XFxuK1xcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gbG8tXFx1MDAzZWxvX2Rpc2s7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xcbiBcXHRzdHJ1Y3QgZmlsZSAqZmlscDtcXG4gXFx0Z2ZwX3QgZ2ZwID0gbG8tXFx1MDAzZW9sZF9nZnBfbWFzaztcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdC8qIFN0ZXAgMTogRmx1c2ggYWxsIG91dHN0YW5kaW5nIEkvTywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovXFxuK1xcdC8qXFxuK1xcdCAqIFNpbmNlIGxvb3BfcXVldWVfcnEoKSBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLCB0aGlzIHN5bmNocm9uaXplX3JjdSgpXFxuK1xcdCAqIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIHF1ZXVlX3dvcmsoKSBjYWxscyBhcmUgbWFkZSBmcm9tIGxvb3BfcXVldWVfd29yaygpXFxuK1xcdCAqIGZyb20gbG9vcF9xdWV1ZV9ycSgpLiBTdWJzZXF1ZW50IGxvb3BfcXVldWVfcnEoKSBjYWxscyB3aGljaCBhcmUgbWFkZSBhZnRlclxcbitcXHQgKiB0aGlzIHN5bmNocm9uaXplX3JjdSgpIHJldHVybmVkIHNoYWxsIHNlZSBsby1cXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQgYW5kXFxuK1xcdCAqIHJldHVybiB3aXRoIEJMS19TVFNfSU9FUlIuXFxuK1xcdCAqL1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBkcmFpbl93b3JrcXVldWUoKSBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBsb29wX2hhbmRsZV9jbWQoKSBjYWxscyBhcmVcXG4rXFx0ICogbWFkZSBmcm9tIGxvb3BfcHJvY2Vzc193b3JrKCkgZnJvbSBsb29wX3dvcmtmbigpL2xvb3Bfcm9vdGNnX3dvcmtmbigpLlxcbitcXHQgKi9cXG4rXFx0ZHJhaW5fd29ya3F1ZXVlKGxvLVxcdTAwM2V3b3JrcXVldWUpO1xcbitcXHQvKlxcbitcXHQgKiBUaGlzIGJsa19tcV9mcmVlemVfcXVldWUoKSB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiBhbGwgb3V0c3RhbmRpbmcgSS9PXFxuK1xcdCAqIHdoaWNoIGhhcyBiZWVuIHNjaGVkdWxlZCB2aWEgbG9vcF9xdWV1ZV9ycSgpLCBieSB3YWl0aW5nIGZvciBxX3VzYWdlX2NvdW50ZXJcXG4rXFx0ICogdG8gcmVhY2ggMC4gU2luY2UgdGhlIGxvLVxcdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCBjaGVjayBpbiBsb29wX3F1ZXVlX3JxKClcXG4rXFx0ICogZ3VhcmFudGVlcyB0aGF0IG5vIG1vcmUgbmV3IEkvTyByZXF1ZXN0cyBhcmUgbWFkZSwgd2UgY2FuIGNhbGxcXG4rXFx0ICogYmxrX21xX3VuZnJlZXplX3F1ZXVlKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHJldHVybnMuXFxuK1xcdCAqL1xcbitcXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXFx1MDAzZWxvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVxcdTAwM2Vsb19xdWV1ZSkpO1xcbitcXG4rXFx0LyogU3RlcCAyOiBQZXJmb3JtIHJlbWFpbmluZyBjbGVhbnVwLCB3aXRoIG9wZW5fbXV0ZXggaGVsZC4gKi9cXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcdFdBUk5fT05fT05DRShsby1cXHUwMDNlbG9fc3RhdGUgIT0gTG9fcnVuZG93bik7XFxuK1xcbiBcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZsby1cXHUwMDNlbG9fbG9jayk7XFxuIFxcdGZpbHAgPSBsby1cXHUwMDNlbG9fYmFja2luZ19maWxlO1xcbiBcXHRsby1cXHUwMDNlbG9fYmFja2luZ19maWxlID0gTlVMTDtcXG5AQCAtMTE1MSwxMiArMTE4MSw3IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0bG8tXFx1MDAzZWxvX3NpemVsaW1pdCA9IDA7XFxuIFxcdG1lbXNldChsby1cXHUwMDNlbG9fZmlsZV9uYW1lLCAwLCBMT19OQU1FX1NJWkUpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogUmVzZXQgdGhlIGJsb2NrIHNpemUgdG8gdGhlIGRlZmF1bHQuXFxuLVxcdCAqXFxuLVxcdCAqIE5vIHF1ZXVlIGZyZWV6aW5nIG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGZpbmFsXFxuLVxcdCAqIC1cXHUwMDNlcmVsZWFzZSBjYWxsIG9ubHksIHNvIHRoZXJlIGNhbid0IGJlIGFueSBvdXRzdGFuZGluZyBJL08uXFxuLVxcdCAqL1xcbitcXHQvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi9cXG4gXFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbiBcXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XFxuIFxcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XFxuQEAgLTExNjgsOCArMTE5Myw2IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0LyogbGV0IHVzZXItc3BhY2Uga25vdyBhYm91dCB0aGlzIGNoYW5nZSAqL1xcbiBcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGlza190b19kZXYobG8tXFx1MDAzZWxvX2Rpc2spLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIFxcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtXFx1MDAzZWZfbWFwcGluZywgZ2ZwKTtcXG4tXFx0LyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi9cXG4tXFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuIFxcbiBcXHRkaXNrX2ZvcmNlX21lZGlhX2NoYW5nZShsby1cXHUwMDNlbG9fZGlzayk7XFxuIFxcbkBAIC0xMTk5LDExICsxMjIyLDE4IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0V1JJVEVfT05DRShsby1cXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmxvLVxcdTAwM2Vsb19tdXRleCk7XFxuIFxcbitcXHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG4rXFxuK1xcdHB1dF9kZXZpY2UoZGlza190b19kZXYoZGlzaykpO1xcbitcXG4gXFx0LypcXG4tXFx0ICogTmVlZCBub3QgaG9sZCBsb19tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4gQ2FsbGluZyBmcHV0IGhvbGRpbmdcXG4tXFx0ICogbG9fbXV0ZXggdHJpZ2dlcnMgYSBjaXJjdWxhciBsb2NrIGRlcGVuZGVuY3kgcG9zc2liaWxpdHkgd2FybmluZyBhc1xcbi1cXHQgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguXFxuK1xcdCAqIFRoaXMgaXMgc2FmZTogZmx1c2hfd29yaygpIGZyb20gbG9vcF9yZW1vdmUoKSBmcm9tIGxvb3BfZXhpdCgpIHdhaXRzXFxuK1xcdCAqIHVudGlsIHRoaXMgZnVuY3Rpb24gcmV0dXJuczsgZWZmZWN0aXZlbHkgZHJvcHBpbmcgdGhlIGZpbmFsIG1vZHVsZVxcbitcXHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXFxuIFxcdCAqL1xcbitcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4rXFxuIFxcdGZwdXQoZmlscCk7XFxuIH1cXG4gXFxuQEAgLTE3NjksOCArMTc5OSwyMCBAQCBzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiBcXHRuZWVkX2NsZWFyID0gKGxvLVxcdTAwM2Vsb19zdGF0ZSA9PSBMb19ydW5kb3duKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsby1cXHUwMDNlbG9fbXV0ZXgpO1xcbiBcXG4tXFx0aWYgKG5lZWRfY2xlYXIpXFxuLVxcdFxcdF9fbG9vcF9jbHJfZmQobG8pO1xcbitcXHRpZiAoIW5lZWRfY2xlYXIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0LypcXG4rXFx0ICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZ1xcbitcXHQgKiBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKSB0byBXUSBjb250ZXh0LiBUaGUgTG9fcnVuZG93biBzdGF0ZVxcbitcXHQgKiBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy5cXG4rXFx0ICpcXG4rXFx0ICogR3JhYiBkaXNrIHJlZmVyZW5jZSB3aGljaCB3aWxsIGJlIGRyb3BwZWQgYXMgc29vbiBhc1xcbitcXHQgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLVxcdTAwM2VvcGVuX211dGV4LlxcbitcXHQgKiBXZSBkb24ndCBuZWVkIHRvIGdyYWIgZGlzay1cXHUwMDNlZm9wcy1cXHUwMDNlb3duZXIgcmVmZXJlbmNlIGJlY2F1c2VcXG4rXFx0ICogd2UgYXJlIGhvbGRpbmcgb25lIG9idGFpbmVkIGJ5IGxvb3BfY29uZmlndXJlKCkuXFxuK1xcdCAqL1xcbitcXHRnZXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcXG4rXFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yayk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5AQCAtMjAzNCw2ICsyMDc2LDcgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4gXFx0bG8gPSBremFsbG9jX29iaigqbG8pO1xcbiBcXHRpZiAoIWxvKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZsby1cXHUwMDNlbG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpO1xcbiBcXHRsby1cXHUwMDNld29ya2VyX3RyZWUgPSBSQl9ST09UO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bG8tXFx1MDAzZWlkbGVfd29ya2VyX2xpc3QpO1xcbiBcXHR0aW1lcl9zZXR1cChcXHUwMDI2bG8tXFx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcXG5AQCAtMjEzOCw2ICsyMTgxLDkgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4gXFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIHtcXG4rXFx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xcbitcXHRmbHVzaF93b3JrKFxcdTAwMjZsby1cXHUwMDNlbG9fY2xyX3dvcmspO1xcbitcXG4gXFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXFxuIFxcdGRlbF9nZW5kaXNrKGxvLVxcdTAwM2Vsb19kaXNrKTtcXG4gXFx0YmxrX21xX2ZyZWVfdGFnX3NldChcXHUwMDI2bG8tXFx1MDAzZXRhZ19zZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODoxNzoyMC4yMTM4OTU3MjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE4NTg5NTIyMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb29wX3JlbW92ZVwiLFxuICAgIFwibG9vcF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL2xvb3AuYyksIGFsdGVyaW5nIGhvdyBsb29wIGRldmljZXMgYXJlIHRvcm4gZG93biB3aGVuIHJlbGVhc2VkLiBJdCBjb252ZXJ0cyBfX2xvb3BfY2xyX2ZkIHRvIHJ1biBhc3luY2hyb25vdXNseSBvbiBhIHdvcmtxdWV1ZSwgbW9kaWZpZXMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gKGFkZGluZyBzeW5jaHJvbml6ZV9yY3UsIGRyYWluX3dvcmtxdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZSksIGFkanVzdHMgZGV2aWNlIGFuZCBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24uIExvb3AgZGV2aWNlcyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMjgxYTI1ZjE2Njc4ZWVkMzUzYWEyNDg0M2M3YjY4ZjYwZDYxMTI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwODoxNzoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDZmMTI5NzYwMzViMDkuLjUxNjExOGIzYTE2YzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC03NSw2ICs3NSw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXHRzdHJ1Y3QgZ2VuZGlza1x0XHQqbG9fZGlzaztcbiBcdHN0cnVjdCBtdXRleFx0XHRsb19tdXRleDtcbiBcdGJvb2xcdFx0XHRpZHJfdmlzaWJsZTtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdFx0bG9fY2xyX3dvcms7XG4gfTtcbiBcbiBzdHJ1Y3QgbG9vcF9jbWQge1xuQEAgLTExMzQsMTMgKzExMzUsNDIgQEAgc3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbitzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4rXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgbG9fY2xyX3dvcmspO1xuK1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBsby1cdTAwM2Vsb19kaXNrO1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4gXHRzdHJ1Y3QgZmlsZSAqZmlscDtcbiBcdGdmcF90IGdmcCA9IGxvLVx1MDAzZW9sZF9nZnBfbWFzaztcbiBcdGludCBlcnI7XG4gXG4rXHQvKiBTdGVwIDE6IEZsdXNoIGFsbCBvdXRzdGFuZGluZyBJL08sIHdpdGhvdXQgb3Blbl9tdXRleCBoZWxkLiAqL1xuK1x0LypcbitcdCAqIFNpbmNlIGxvb3BfcXVldWVfcnEoKSBpcyBjYWxsZWQgd2l0aCBSQ1UgcmVhZCBsb2NrLCB0aGlzIHN5bmNocm9uaXplX3JjdSgpXG4rXHQgKiBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBxdWV1ZV93b3JrKCkgY2FsbHMgYXJlIG1hZGUgZnJvbSBsb29wX3F1ZXVlX3dvcmsoKVxuK1x0ICogZnJvbSBsb29wX3F1ZXVlX3JxKCkuIFN1YnNlcXVlbnQgbG9vcF9xdWV1ZV9ycSgpIGNhbGxzIHdoaWNoIGFyZSBtYWRlIGFmdGVyXG4rXHQgKiB0aGlzIHN5bmNocm9uaXplX3JjdSgpIHJldHVybmVkIHNoYWxsIHNlZSBsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCBhbmRcbitcdCAqIHJldHVybiB3aXRoIEJMS19TVFNfSU9FUlIuXG4rXHQgKi9cbitcdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0LypcbitcdCAqIFRoaXMgZHJhaW5fd29ya3F1ZXVlKCkgbWFrZXMgc3VyZSB0aGF0IG5vIG1vcmUgbG9vcF9oYW5kbGVfY21kKCkgY2FsbHMgYXJlXG4rXHQgKiBtYWRlIGZyb20gbG9vcF9wcm9jZXNzX3dvcmsoKSBmcm9tIGxvb3Bfd29ya2ZuKCkvbG9vcF9yb290Y2dfd29ya2ZuKCkuXG4rXHQgKi9cbitcdGRyYWluX3dvcmtxdWV1ZShsby1cdTAwM2V3b3JrcXVldWUpO1xuK1x0LypcbitcdCAqIFRoaXMgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpIHdhaXRzIGZvciBjb21wbGV0aW9uIG9mIGFsbCBvdXRzdGFuZGluZyBJL09cbitcdCAqIHdoaWNoIGhhcyBiZWVuIHNjaGVkdWxlZCB2aWEgbG9vcF9xdWV1ZV9ycSgpLCBieSB3YWl0aW5nIGZvciBxX3VzYWdlX2NvdW50ZXJcbitcdCAqIHRvIHJlYWNoIDAuIFNpbmNlIHRoZSBsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZCBjaGVjayBpbiBsb29wX3F1ZXVlX3JxKClcbitcdCAqIGd1YXJhbnRlZXMgdGhhdCBubyBtb3JlIG5ldyBJL08gcmVxdWVzdHMgYXJlIG1hZGUsIHdlIGNhbiBjYWxsXG4rXHQgKiBibGtfbXFfdW5mcmVlemVfcXVldWUoKSBpbW1lZGlhdGVseSBhZnRlciBibGtfbXFfZnJlZXplX3F1ZXVlKCkgcmV0dXJucy5cbitcdCAqL1xuK1x0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlKSk7XG4rXG4rXHQvKiBTdGVwIDI6IFBlcmZvcm0gcmVtYWluaW5nIGNsZWFudXAsIHdpdGggb3Blbl9tdXRleCBoZWxkLiAqL1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0V0FSTl9PTl9PTkNFKGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX3J1bmRvd24pO1xuK1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdGZpbHAgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gXHRsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBOVUxMO1xuQEAgLTExNTEsMTIgKzExODEsNyBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRsby1cdTAwM2Vsb19zaXplbGltaXQgPSAwO1xuIFx0bWVtc2V0KGxvLVx1MDAzZWxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTtcbiBcbi1cdC8qXG4tXHQgKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC5cbi1cdCAqXG4tXHQgKiBObyBxdWV1ZSBmcmVlemluZyBuZWVkZWQgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBmaW5hbFxuLVx0ICogLVx1MDAzZXJlbGVhc2UgY2FsbCBvbmx5LCBzbyB0aGVyZSBjYW4ndCBiZSBhbnkgb3V0c3RhbmRpbmcgSS9PLlxuLVx0ICovXG4rXHQvKiBSZXNldCB0aGUgYmxvY2sgc2l6ZSB0byB0aGUgZGVmYXVsdC4gKi9cbiBcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuIFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuIFx0bGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbkBAIC0xMTY4LDggKzExOTMsNiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHQvKiBsZXQgdXNlci1zcGFjZSBrbm93IGFib3V0IHRoaXMgY2hhbmdlICovXG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gXHRtYXBwaW5nX3NldF9nZnBfbWFzayhmaWxwLVx1MDAzZWZfbWFwcGluZywgZ2ZwKTtcbi1cdC8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovXG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiBcbiBcdGRpc2tfZm9yY2VfbWVkaWFfY2hhbmdlKGxvLVx1MDAzZWxvX2Rpc2spO1xuIFxuQEAgLTExOTksMTEgKzEyMjIsMTggQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0V1JJVEVfT05DRShsby1cdTAwM2Vsb19zdGF0ZSwgTG9fdW5ib3VuZCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFxuK1x0LyogU3RlcCAzOiBEcm9wIHJlZmNvdW50cywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcbitcdHB1dF9kZXZpY2UoZGlza190b19kZXYoZGlzaykpO1xuK1xuIFx0Lypcbi1cdCAqIE5lZWQgbm90IGhvbGQgbG9fbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuIENhbGxpbmcgZnB1dCBob2xkaW5nXG4tXHQgKiBsb19tdXRleCB0cmlnZ2VycyBhIGNpcmN1bGFyIGxvY2sgZGVwZW5kZW5jeSBwb3NzaWJpbGl0eSB3YXJuaW5nIGFzXG4tXHQgKiBmcHV0IGNhbiB0YWtlIG9wZW5fbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fbXV0ZXguXG4rXHQgKiBUaGlzIGlzIHNhZmU6IGZsdXNoX3dvcmsoKSBmcm9tIGxvb3BfcmVtb3ZlKCkgZnJvbSBsb29wX2V4aXQoKSB3YWl0c1xuK1x0ICogdW50aWwgdGhpcyBmdW5jdGlvbiByZXR1cm5zOyBlZmZlY3RpdmVseSBkcm9wcGluZyB0aGUgZmluYWwgbW9kdWxlXG4rXHQgKiByZWZlcmVuY2VzIHN5bmNocm9ub3VzbHkuXG4gXHQgKi9cbitcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuK1xuIFx0ZnB1dChmaWxwKTtcbiB9XG4gXG5AQCAtMTc2OSw4ICsxNzk5LDIwIEBAIHN0YXRpYyB2b2lkIGxvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRuZWVkX2NsZWFyID0gKGxvLVx1MDAzZWxvX3N0YXRlID09IExvX3J1bmRvd24pO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvLVx1MDAzZWxvX211dGV4KTtcbiBcbi1cdGlmIChuZWVkX2NsZWFyKVxuLVx0XHRfX2xvb3BfY2xyX2ZkKGxvKTtcbitcdGlmICghbmVlZF9jbGVhcilcbitcdFx0cmV0dXJuO1xuK1x0LypcbitcdCAqIEluIG9yZGVyIHRvIGZsdXNoIG91dHN0YW5kaW5nIEkvTyBiZWZvcmUgY2xlYXJpbmcgdGhlIGJhY2tpbmdcbitcdCAqIGRldmljZSwgZGVmZXIgX19sb29wX2Nscl9mZCgpIHRvIFdRIGNvbnRleHQuIFRoZSBMb19ydW5kb3duIHN0YXRlXG4rXHQgKiBndWFyYW50ZWVzIHRoYXQgbG9fb3BlbigpIHdpbGwgZmFpbCB3aXRoIC1FTlhJTy5cbitcdCAqXG4rXHQgKiBHcmFiIGRpc2sgcmVmZXJlbmNlIHdoaWNoIHdpbGwgYmUgZHJvcHBlZCBhcyBzb29uIGFzXG4rXHQgKiByZXR1cm5pbmcgZnJvbSBsb19yZWxlYXNlKCkgYW5kIHJlbGVhc2luZyBkaXNrLVx1MDAzZW9wZW5fbXV0ZXguXG4rXHQgKiBXZSBkb24ndCBuZWVkIHRvIGdyYWIgZGlzay1cdTAwM2Vmb3BzLVx1MDAzZW93bmVyIHJlZmVyZW5jZSBiZWNhdXNlXG4rXHQgKiB3ZSBhcmUgaG9sZGluZyBvbmUgb2J0YWluZWQgYnkgbG9vcF9jb25maWd1cmUoKS5cbitcdCAqL1xuK1x0Z2V0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4rXHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbkBAIC0yMDM0LDYgKzIwNzYsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFx0bG8gPSBremFsbG9jX29iaigqbG8pO1xuIFx0aWYgKCFsbylcbiBcdFx0Z290byBvdXQ7XG4rXHRJTklUX1dPUksoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmssIF9fbG9vcF9jbHJfZmQpO1xuIFx0bG8tXHUwMDNld29ya2VyX3RyZWUgPSBSQl9ST09UO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlaWRsZV93b3JrZXJfbGlzdCk7XG4gXHR0aW1lcl9zZXR1cChcdTAwMjZsby1cdTAwM2V0aW1lciwgbG9vcF9mcmVlX2lkbGVfd29ya2Vyc190aW1lciwgVElNRVJfREVGRVJSQUJMRSk7XG5AQCAtMjEzOCw2ICsyMTgxLDkgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbiBcbiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIHtcbitcdC8qIFdhaXQgZm9yIF9fbG9vcF9jbHJfZmQoKSB0byBjb21wbGV0ZS4gKi9cbitcdGZsdXNoX3dvcmsoXHUwMDI2bG8tXHUwMDNlbG9fY2xyX3dvcmspO1xuK1xuIFx0LyogTWFrZSB0aGlzIGxvb3AgZGV2aWNlIHVucmVhY2hhYmxlIGZyb20gcGF0aG5hbWUuICovXG4gXHRkZWxfZ2VuZGlzayhsby1cdTAwM2Vsb19kaXNrKTtcbiBcdGJsa19tcV9mcmVlX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODoxNzoyMC4yMTM4OTcxNDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Nzg0MjQ4ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9vcCBEZXZpY2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQga2VybmVsIGNvZGUuIFRoZSBtb2RpZmljYXRpb25zIGFyZSB0YXJnZXRpbmcgYGRyaXZlcnMvYmxvY2svbG9vcC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBsb29wIGRldmljZSByZWxlYXNlIGFuZCB0ZWFyZG93biBtZWNoYW5pc21zLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBjYXJlZnVsIGluc3BlY3Rpb24uXG5cbkxvb2tpbmcgY2xvc2VyLCB0aGUgcGF0Y2ggaXMgbWFraW5nIHNldmVyYWwga2V5IGFsdGVyYXRpb25zLiBGaXJzdCwgaXQncyByZXdvcmtpbmcgaG93IHRoZSBsb29wIGRldmljZSBpcyByZWxlYXNlZCBhbmQgdG9ybiBkb3duLCB3aGljaCBpbmNsdWRlcyBjaGFuZ2VzIHRvIGBsb19yZWxlYXNlYCwgYF9fbG9vcF9jbHJfZmRgLCBgbG9vcF9hZGRgLCBhbmQgYGxvb3BfcmVtb3ZlYC4gT2YgcGFydGljdWxhciBpbnRlcmVzdCBpcyB0aGUgY29udmVyc2lvbiBvZiBgX19sb29wX2Nscl9mZGAgaW50byBhIHdvcmtxdWV1ZSBoYW5kbGVyLiBUaGV5J3JlIGRlZmVycmluZyBpdCB0byBgc3lzdGVtX2xvbmdfd3FgIHZpYSBgbG9fcmVsZWFzZWAsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIHRoZXkncmUgYWRkcmVzc2luZyBzb21lIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBsb25nLXJ1bm5pbmcgb3BlcmF0aW9ucy4gVGhlIGFkZGl0aW9uIG9mIGBzeW5jaHJvbml6ZV9yY3UoKWAsIGBkcmFpbl93b3JrcXVldWUoKWAsIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpYCBmdXJ0aGVyIHN1Z2dlc3RzIHRoaXMuIEnigJltIGFsc28gc2VlaW5nIGEgYFdBUk5fT05fT05DRWAgYWJvdXQgdGhlIGBsb19zdGF0ZWAsIHNwZWNpZmljYWxseSB3aGVuIG5vdCBpbiBgTG9fcnVuZG93bmAuIFRoaXMgaGludHMgYXQgYSBwb3RlbnRpYWwgc3RhdGUgdHJhbnNpdGlvbiBwcm9ibGVtIG9yIGEgcmFjZSBjb25kaXRpb24uIEZpbmFsbHksIHRoZXkncmUgcGxheWluZyB3aXRoIG1vZHVsZSByZWZjb3VudGluZywgZGV2aWNlIHJlZmNvdW50aW5nLCBhbmQgbXV0ZXggbG9ja2luZyBvcmRlciwgd2hpY2ggaXMgYWx3YXlzIGEgcmVkIGZsYWcgdGhhdCBuZWVkcyBhIHRob3JvdWdoIGxvb2sgb3Zlci5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZT8gR2l2ZW4gdGhlIG5hdHVyZSBvZiBsb29wIGRldmljZXMgYXMgdmlydHVhbCBibG9jayBkZXZpY2VzLCBhbmQga25vd2luZyB0aGUgaGlzdG9yeSBvZiBmdXp6aW5nIHdpdGggdG9vbHMgbGlrZSBzeXprYWxsZXIsIGl0J3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgY29kZSBwYXRoIGlzIG5vdCBvbmx5IHJlYWNoYWJsZSBidXQgaGVhdmlseSBleGVyY2lzZWQuIExvb3AgZGV2aWNlcyBhcmUgdXNlZCBleHRlbnNpdmVseSBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGFuZCB0aGUgYGlvY3RsKC4uLiwgTE9PUF8qKWAsIG1vdW50LCBhbmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMgYXJlIGFsbCBmcmVxdWVudC4gU28sIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGJlbGlldmUgdGhpcyBpc27igJl0IGNyaXRpY2FsIGNvZGUuXG5cbk5leHQgc3RlcDogbGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gYnVpbGQgYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gSSdsbCBydW4gYGdyZXBwZXJgIG9yIGp1c3QgY2hlY2sgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdG8gY29uZmlybSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjEwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MjUuOTk4MTQ4NjgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTIwMjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDMtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0NS1cXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNzk6Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgwLVxcdGludCBcXFwiTnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBwcmUtY3JlYXRlIGF0IGluaXQgdGltZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MjYuMDQ2MDczNDA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NjIxMzQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgQmxvY2sgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgYmxvY2sgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUgYW5kIGhlYWQgZG93biB0byBhcm91bmQgbGluZSAxNDQuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSByZWxldmFudCBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkLiBIb3BlZnVsbHksIHRoYXQnbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIHJlcXVpcmVkIG9yIHBvdGVudGlhbGx5IGNvbmZsaWN0cyB3aXRoIG90aGVyIHNldHRpbmdzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gSSdtIGxvb2tpbmcgZm9yIHRoZSByZWxhdGlvbnNoaXBzIHRoZXJlLCBhbmQgd2hhdCBvdGhlciBzZXR0aW5ncyBhcmUgbmVjZXNzYXJ5IGZvciB0aGUgY29uZmlnIG9wdGlvbnMgaGVyZSB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MjguMDMyMjg5MjMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NDpcXHRjb25maWcgQkxLX0RFVl9MT09QXFxuIDE0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiTG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuIDE0NjpcXHRcXHRoZWxwXFxuIDE0NzpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGEgcmVndWxhciBmaWxlIGFzIGEgYmxvY2tcXG4gMTQ4OlxcdFxcdCAgZGV2aWNlOyB5b3UgY2FuIHRoZW4gY3JlYXRlIGEgZmlsZSBzeXN0ZW0gb24gdGhhdCBibG9jayBkZXZpY2UgYW5kXFxuIDE0OTpcXHRcXHQgIG1vdW50IGl0IGp1c3QgYXMgeW91IHdvdWxkIG1vdW50IG90aGVyIGJsb2NrIGRldmljZXMgc3VjaCBhcyBoYXJkXFxuIDE1MDpcXHRcXHQgIGRyaXZlIHBhcnRpdGlvbnMsIENELVJPTSBkcml2ZXMgb3IgZmxvcHB5IGRyaXZlcy4gVGhlIGxvb3AgZGV2aWNlc1xcbiAxNTE6XFx0XFx0ICBhcmUgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZXMgd2l0aCBtYWpvciBudW1iZXIgNyBhbmQgdHlwaWNhbGx5XFxuIDE1MjpcXHRcXHQgIGNhbGxlZCAvZGV2L2xvb3AwLCAvZGV2L2xvb3AxIGV0Yy5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGVjayBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbSBiZWZvcmVcXG4gMTU1OlxcdFxcdCAgYnVybmluZyB0aGUgQ0QsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBmbG9wcHkgaW1hZ2VzIHdpdGhvdXQgZmlyc3RcXG4gMTU2OlxcdFxcdCAgd3JpdGluZyB0aGVtIHRvIGZsb3BweS4gRnVydGhlcm1vcmUsIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyBhdm9pZFxcbiAxNTc6XFx0XFx0ICB0aGUgbmVlZCBmb3IgYSBkZWRpY2F0ZWQgTGludXggcGFydGl0aW9uIGJ5IGtlZXBpbmcgdGhlaXIgY29tcGxldGVcXG4gMTU4OlxcdFxcdCAgcm9vdCBmaWxlIHN5c3RlbSBpbnNpZGUgYSBET1MgRkFUIGZpbGUgdXNpbmcgdGhpcyBsb29wIGRldmljZVxcbiAxNTk6XFx0XFx0ICBkcml2ZXIuXFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdCAgVG8gdXNlIHRoZSBsb29wIGRldmljZSwgeW91IG5lZWQgdGhlIGxvc2V0dXAgdXRpbGl0eSwgZm91bmQgaW4gdGhlXFxuIDE2MjpcXHRcXHQgIHV0aWwtbGludXggcGFja2FnZSwgc2VlXFxuIDE2MzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L1xcdTAwM2UuXFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdCAgVGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHRvIFxcXCJoaWRlXFxcIiBhIGZpbGUgc3lzdGVtIGluXFxuIDE2NjpcXHRcXHQgIGEgZGlzayBwYXJ0aXRpb24sIGZsb3BweSwgb3IgcmVndWxhciBmaWxlLCBlaXRoZXIgdXNpbmcgZW5jcnlwdGlvblxcbiAxNjc6XFx0XFx0ICAoc2NyYW1ibGluZyB0aGUgZGF0YSkgb3Igc3RlZ2Fub2dyYXBoeSAoaGlkaW5nIHRoZSBkYXRhIGluIHRoZSBsb3dcXG4gMTY4OlxcdFxcdCAgYml0cyBvZiwgc2F5LCBhIHNvdW5kIGZpbGUpLiBUaGlzIGlzIGFsc28gc2FmZSBpZiB0aGUgZmlsZSByZXNpZGVzXFxuIDE2OTpcXHRcXHQgIG9uIGEgcmVtb3RlIGZpbGUgc2VydmVyLlxcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIGxvb3AgZGV2aWNlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGxvb3BiYWNrXFxuIDE3MjpcXHRcXHQgIGRldmljZSB1c2VkIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIGZyb20gdGhlIG1hY2hpbmUgdG8gaXRzZWxmLlxcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxNzU6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbG9vcC5cXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0ICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS5cXG4gMTc4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODoxNzoyOC4wMzIzNTQxMDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDQ0MzU1NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9vcCBEZXZpY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gYEJMS19ERVZfTE9PUGAgZG9lc24ndCBzZWVtIHRvIGhhdmUgYW55IGV4cGxpY2l0bHkgZGVmaW5lZCBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbnMgaXQgdG91Y2hlcyB3aXRoaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gU28sIGxldCdzIHNlZSwgd2UgaGF2ZSBgX19sb29wX2Nscl9mZGAsIGBsb19yZWxlYXNlYCwgYGxvb3BfYWRkYCwgYW5kIGBsb29wX3JlbW92ZWAgYXMgdGhlIGtleSBwbGF5ZXJzIGhlcmUuXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgYW5kIGNvbnNpZGVyIGFueSBub24tdWJpcXVpdG91cyBmb2N1cyBzeW1ib2xzOyB0aGF0IGxpc3QgaW5jbHVkZXMgdGhlIHNhbWUgZnVuY3Rpb25zOiBgX19sb29wX2Nscl9mZGAsIGBsb19yZWxlYXNlYCwgYGxvb3BfYWRkYCwgYGxvb3BfcmVtb3ZlYC4gSSBoYXZlIHRvIGFsc28gY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IG9mIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLCBsaWtlIGBsb29wX2Nscl9mZGAgb3IgYGxvb3BfY29uZmlndXJlYCwgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgYWN0IGFzIHRyaWdnZXJzIGZvciB0aGVzZSBjcml0aWNhbCBwYXRocy5cblxuTmV4dCBzdGVwOiBsZXQncyBkZWx2ZSBkZWVwZXIgaW50byBob3cgYGxvX3JlbGVhc2VgIGFuZCBgX19sb29wX2Nscl9mZGAgYXJlIGFjdHVhbGx5IGNhbGxlZCB3aXRoaW4gdGhlIHN5c3RlbS4gR3JlcHBpbmcgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBpcyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIGdldCBhIGZ1bGwgdmlldyBvZiB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMyMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjE3OjMwLjQ3NjcxMTU1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAwMzI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb19yZWxlYXNlfF9fbG9vcF9jbHJfZmR8bG9vcF9jbHJfZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9OTc9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwOC0gKiBpc19sb29wX2RldmljZSgpIGlzIHRydWUsIHdlIG5lZWQgYSBnbG9iYWwgbG9jayBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwOTogKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkvX19sb29wX2Nscl9mZCgpIGNhbGxzLlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMC0gKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMDQ9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTM3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExMzg6c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEzOS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjEzLVxcdCAqIGxvLVxcdTAwM2Vsb19zdGF0ZSBpcyBzZXQgdG8gTG9fdW5ib3VuZCBoZXJlIGFmdGVyIHJlbW92aW5nIHBhcnRpdGlvbnMgaGFzXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTIxNDpcXHQgKiBmaW5pc2hlZC4gVGhlcmUgY2Fubm90IGJlIGFueWJvZHkgZWxzZSBlbnRlcmluZyBfX2xvb3BfY2xyX2ZkKCkgYXNcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjE1LVxcdCAqIExvX3J1bmRvd24gc3RhdGUgcHJvdGVjdHMgdXMgZnJvbSBhbGwgdGhlIG90aGVyIHBsYWNlcyB0cnlpbmcgdG9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEyMzktXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTI0MDpzdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTI0MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQ1LVxcdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEyNDY6XFx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMjQ3LVxcdCAqXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTY3PXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU5OC1cXHRjYXNlIExPT1BfQ0xSX0ZEOlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1OTk6XFx0XFx0cmV0dXJuIGxvb3BfY2xyX2ZkKGxvKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNjAwLVxcdGNhc2UgTE9PUF9TRVRfU1RBVFVTOlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTc2Nz1zdGF0aWMgaW50IGxvX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3ODEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTc4MjpzdGF0aWMgdm9pZCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE3ODMte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgwNS1cXHQgKiBJbiBvcmRlciB0byBmbHVzaCBvdXRzdGFuZGluZyBJL08gYmVmb3JlIGNsZWFyaW5nIHRoZSBiYWNraW5nXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTgwNjpcXHQgKiBkZXZpY2UsIGRlZmVyIF9fbG9vcF9jbHJfZmQoKSB0byBXUSBjb250ZXh0LiBUaGUgTG9fcnVuZG93biBzdGF0ZVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MDctXFx0ICogZ3VhcmFudGVlcyB0aGF0IGxvX29wZW4oKSB3aWxsIGZhaWwgd2l0aCAtRU5YSU8uXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODA5LVxcdCAqIEdyYWIgZGlzayByZWZlcmVuY2Ugd2hpY2ggd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXNcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODEwOlxcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXFx1MDAzZW9wZW5fbXV0ZXguXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgxMS1cXHQgKiBXZSBkb24ndCBuZWVkIHRvIGdyYWIgZGlzay1cXHUwMDNlZm9wcy1cXHUwMDNlb3duZXIgcmVmZXJlbmNlIGJlY2F1c2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgzMi1cXHQub3BlbiA9ICAgICAgICAgbG9fb3BlbixcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODMzOlxcdC5yZWxlYXNlID1cXHRsb19yZWxlYXNlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4MzQtXFx0LmlvY3RsID1cXHRsb19pb2N0bCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIwNjM9c3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIwNzgtXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjA3OTpcXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA4MC1cXHRsby1cXHUwMDNld29ya2VyX3RyZWUgPSBSQl9ST09UO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjE4Mj1zdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxODMte1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIxODQ6XFx0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxODUtXFx0Zmx1c2hfd29yayhcXHUwMDI2bG8tXFx1MDAzZWxvX2Nscl93b3JrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MzAuNTIyNzE4MTM1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg4MDM3NzExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBsb29wX2Nscl9mZGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBoZWFkIG92ZXIgdG8gdGhlIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBsb29wX2Nscl9mZGAgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlcmUuIEknbSBnb2luZyB0byBtZW50YWxseSBwcmVwYXJlIHRvIHBhcnNlIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBob3cgdGhpcyBmdW5jdGlvbiBjbGVhcnMgYSBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIGEgbG9vcCBkZXZpY2UsIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG1lY2hhbmlzbSBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBrZXJuZWwncyBsb2NraW5nIHN0cmF0ZWdpZXMgaW4gdGhpcyBhcmVhLCB0b28uIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6Nzk0NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjE3OjMyLjQwMzA5NzEwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzNTpcXHRcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4xMjM2OlxcdFxcbjEyMzc6XFx0XFx0ZnB1dChmaWxwKTtcXG4xMjM4OlxcdH1cXG4xMjM5OlxcdFxcbjEyNDA6XFx0c3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbjEyNDE6XFx0e1xcbjEyNDI6XFx0XFx0aW50IGVycjtcXG4xMjQzOlxcdFxcbjEyNDQ6XFx0XFx0LypcXG4xMjQ1OlxcdFxcdCAqIFNpbmNlIGxvX2lvY3RsKCkgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MgaGVsZCwgaXQgaXMgcG9zc2libGUgdGhhdFxcbjEyNDY6XFx0XFx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cXG4xMjQ3OlxcdFxcdCAqXFxuMTI0ODpcXHRcXHQgKiBUaGVyZWZvcmUsIHVzZSBnbG9iYWwgbG9jayB3aGVuIHNldHRpbmcgTG9fcnVuZG93biBzdGF0ZSBpbiBvcmRlciB0b1xcbjEyNDk6XFx0XFx0ICogbWFrZSBzdXJlIHRoYXQgbG9vcF92YWxpZGF0ZV9maWxlKCkgd2lsbCBmYWlsIGlmIHRoZSBcXFwic3RydWN0IGZpbGVcXFwiXFxuMTI1MDpcXHRcXHQgKiB3aGljaCBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgZm91bmQgdmlhIGZnZXQoKSB3YXMgdGhpc1xcbjEyNTE6XFx0XFx0ICogbG9vcCBkZXZpY2UuXFxuMTI1MjpcXHRcXHQgKi9cXG4xMjUzOlxcdFxcdGVyciA9IGxvb3BfZ2xvYmFsX2xvY2tfa2lsbGFibGUobG8sIHRydWUpO1xcbjEyNTQ6XFx0XFx0aWYgKGVycilcXG4xMjU1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTI1NjpcXHRcXHRpZiAobG8tXFx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kKSB7XFxuMTI1NzpcXHRcXHRcXHRsb29wX2dsb2JhbF91bmxvY2sobG8sIHRydWUpO1xcbjEyNTg6XFx0XFx0XFx0cmV0dXJuIC1FTlhJTztcXG4xMjU5OlxcdFxcdH1cXG4xMjYwOlxcdFxcdC8qXFxuMTI2MTpcXHRcXHQgKiBNYXJrIHRoZSBkZXZpY2UgZm9yIHJlbW92aW5nIHRoZSBiYWNraW5nIGRldmljZSBvbiBsYXN0IGNsb3NlLlxcbjEyNjI6XFx0XFx0ICogSWYgd2UgYXJlIHRoZSBvbmx5IG9wZW5lciwgYWxzbyBzd2l0Y2ggdGhlIHN0YXRlIHRvIHJvdW5kb3duIGhlcmUgdG9cXG4xMjYzOlxcdFxcdCAqIHByZXZlbnQgbmV3IG9wZW5lcnMgZnJvbSBjb21pbmcgaW4uXFxuMTI2NDpcXHRcXHQgKi9cXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0bG8tXFx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0FVVE9DTEVBUjtcXG4xMjY3OlxcdFxcdGlmIChkaXNrX29wZW5lcnMobG8tXFx1MDAzZWxvX2Rpc2spID09IDEpXFxuMTI2ODpcXHRcXHRcXHRXUklURV9PTkNFKGxvLVxcdTAwM2Vsb19zdGF0ZSwgTG9fcnVuZG93bik7XFxuMTI2OTpcXHRcXHRsb29wX2dsb2JhbF91bmxvY2sobG8sIHRydWUpO1xcbjEyNzA6XFx0XFxuMTI3MTpcXHRcXHRyZXR1cm4gMDtcXG4xMjcyOlxcdH1cXG4xMjczOlxcdFxcbjEyNzQ6XFx0c3RhdGljIGludFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODoxNzozMi40MDMyMTE2OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMyMzM2OTQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIExvb3AgRGV2aWNlIFRlYXJkb3duIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGRlZXAgaW50byB0aGUgbG9vcCBkZXZpY2UncyB0ZWFyZG93biBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGNsZWFucyB1cCBhZnRlciBpdHNlbGYuIEl0J3MgZGVmZXJyaW5nIHRoZSBgX19sb29wX2Nscl9mZGAgZnVuY3Rpb24gdG8gYSB3b3JrcXVldWUgKGBsb19jbHJfd29ya2ApIHdpdGhpbiBgbG9fcmVsZWFzZWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgcGF0dGVybiBmb3IgbWFuYWdpbmcgSS9PIGFuZCBwcmV2ZW50aW5nIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSByZWxlYXNlIHByb2Nlc3MuIEkgc2VlIHRoZXkncmUgaW50cm9kdWNpbmcgcXVpdGUgYSBmZXcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdG8gaGFuZGxlIHRoaXMgZGVmZXJyZWQgY2xlYW51cCDigJMgYHN5bmNocm9uaXplX3JjdWAsIGBkcmFpbl93b3JrcXVldWVgLCBhbmQgZXZlbiBmcmVlemluZyB0aGUgYmxvY2sgcXVldWUgKGBibGtfbXFfZnJlZXplX3F1ZXVlYCkuIFRoZXkncmUgYWxzbyBjYXJlZnVsbHkgYWRqdXN0aW5nIG11dGV4IGxvY2tpbmcgYXJvdW5kIHRoZSBgZGlzay1cdTAwM2VvcGVuX211dGV4YCBhbmQgdXBkYXRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgZGV2aWNlcyB3aXRoIGBnZXRfZGV2aWNlYCwgYHB1dF9kZXZpY2VgLCBhbmQgYG1vZHVsZV9wdXRgLCBhbGwgaW1wb3J0YW50IGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LiBUaGUgYFdBUk5fT05fT05DRShsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ydW5kb3duKWAgc2VlbXMgbGlrZSBhIGdvb2Qgc2FuaXR5IGNoZWNrOyBhIG5pY2UgYWRkaXRpb24gdG8gY2F0Y2ggYW55IHVuZXhwZWN0ZWQgc3RhdGVzIGR1cmluZyBjbGVhbnVwLlxuXG5HaXZlbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMsIHRoaXMgaXMgKmRlZmluaXRlbHkqIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSB0ZWFyZG93biBsb2dpYyB3aXRoaW4gdGhlIGxvb3AgZHJpdmVyIChgZHJpdmVycy9ibG9jay9sb29wLmNgKSwgd2hpY2ggaXMgY3JpdGljYWwgYW5kIHByb25lIHRvIHN1YnRsZSBjb25jdXJyZW5jeSBidWdzLiBUaGUgZmFjdCB0aGF0IHRoZSBsb29wIGRyaXZlciBpcyBlYXNpbHkgYWNjZXNzaWJsZSBpbiBib3RoIFFFTVUgYW5kIHN5emthbGxlciBtYWtlcyBpdCBldmVuIG1vcmUgYXBwZWFsaW5nLiBUaGUgYWRkZWQgYXNzZXJ0aW9uIGFuZCBjb21wbGV4aXR5IGFyb3VuZCBjb25jdXJyZW5jeSDigJMgd29ya3F1ZXVlIGRlZmVycmFsLCBxdWV1ZSBmcmVlemluZywgUkNVIHN5bmNocm9uaXphdGlvbiwgYW5kIHdvcmtxdWV1ZSBkcmFpbmluZyDigJMgYWxsIHNjcmVhbSBcInBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuXCJcblxuSSBzaG91bGQgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIGZ1bmN0aW9uczogYF9fbG9vcF9jbHJfZmRgLCBgbG9fcmVsZWFzZWAsIGBsb29wX2Nscl9mZGAsIGBsb29wX3JlbW92ZWAsIGFuZCBgbG9vcF9hZGRgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGNvcmUgY2hhbmdlcyBzZWVtIHRvIGJlIGNvbmNlbnRyYXRlZC5cblxuQW5kLCBvZiBjb3Vyc2UsIHRoZSBgQkxLX0RFVl9MT09QYCBFbmFibGVDb25maWcgaXMgZXNzZW50aWFsLlxuXG5JIHdpbGwgbmVlZCB0byBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc0OCwiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODoxNzozOC43MjY1ODM0MTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjgzMTg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19sb29wX2Nscl9mZFwiLFxuICAgIFwibG9fcmVsZWFzZVwiLFxuICAgIFwibG9vcF9jbHJfZmRcIixcbiAgICBcImxvb3BfcmVtb3ZlXCIsXG4gICAgXCJsb29wX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgKGRyaXZlcnMvYmxvY2svbG9vcC5jKSwgYWx0ZXJpbmcgaG93IGxvb3AgZGV2aWNlcyBhcmUgdG9ybiBkb3duIHdoZW4gcmVsZWFzZWQuIEl0IGNvbnZlcnRzIF9fbG9vcF9jbHJfZmQgdG8gcnVuIGFzeW5jaHJvbm91c2x5IG9uIGEgd29ya3F1ZXVlLCBtb2RpZmllcyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiAoYWRkaW5nIHN5bmNocm9uaXplX3JjdSwgZHJhaW5fd29ya3F1ZXVlLCBibGtfbXFfZnJlZXplX3F1ZXVlKSwgYWRqdXN0cyBkZXZpY2UgYW5kIG1vZHVsZSByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBhZGRzIGEgV0FSTl9PTl9PTkNFIGFzc2VydGlvbi4gTG9vcCBkZXZpY2VzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIGZ1enphYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX3JlbGVhc2VcIixcbiAgICBcImxvb3BfY2xyX2ZkXCIsXG4gICAgXCJsb29wX3JlbW92ZVwiLFxuICAgIFwibG9vcF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyIChkcml2ZXJzL2Jsb2NrL2xvb3AuYyksIGFsdGVyaW5nIGhvdyBsb29wIGRldmljZXMgYXJlIHRvcm4gZG93biB3aGVuIHJlbGVhc2VkLiBJdCBjb252ZXJ0cyBfX2xvb3BfY2xyX2ZkIHRvIHJ1biBhc3luY2hyb25vdXNseSBvbiBhIHdvcmtxdWV1ZSwgbW9kaWZpZXMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gKGFkZGluZyBzeW5jaHJvbml6ZV9yY3UsIGRyYWluX3dvcmtxdWV1ZSwgYmxrX21xX2ZyZWV6ZV9xdWV1ZSksIGFkanVzdHMgZGV2aWNlIGFuZCBtb2R1bGUgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYWRkcyBhIFdBUk5fT05fT05DRSBhc3NlcnRpb24uIExvb3AgZGV2aWNlcyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MzguODAzNDIyMjQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ5MzY2NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDg6MTc6MzguODAzODYzODU0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzE0ODkyMTMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBsb29wIGJsb2NrIGRyaXZlciB0ZWFyZG93biBwYXRoIGJ5IGRlZmVycmluZyBfX2xvb3BfY2xyX2ZkKCkgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9fY2xyX3dvcmspIHJhdGhlciB0aGFuIGV4ZWN1dGluZyBpdCBzeW5jaHJvbm91c2x5IGluIGxvX3JlbGVhc2UoKSB3aGlsZSBob2xkaW5nIG9wZW5fbXV0ZXguIFRoaXMgcHJldmVudHMgbG9jayBvcmRlciBjb25mbGljdHMgZHVyaW5nIEkvTyBmbHVzaGluZyBhbmQgcmVzb3VyY2UgcmVsZWFzZS5cXG5cXG5NZW1vcnkgXFx1MDAyNiBzYW5pdGl6ZXIgYW5hbHlzaXM6XFxuLSBUaGUgbmV3bHkgaW50cm9kdWNlZCB3b3JrX3N0cnVjdCBmaWVsZCBgbG9fY2xyX3dvcmtgIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHZpYSBga3phbGxvY19vYmooKWAgYW5kIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SSygpYCBpbiBgbG9vcF9hZGQoKWAuXFxuLSBUaGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgdG91Y2ggb3IgaW50cm9kdWNlIGFueSBkYXRhIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXIgc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwgb3V0cHV0LCBvciBCUEYgYnVmZmVycyksIG5vciBkbyB0aGV5IGFsdGVyIGJ1ZmZlciBsZW5ndGhzIG9yIGxlYXZlIGFueSBzdHJ1Y3QgZmllbGRzL3N0YWNrIHZhcmlhYmxlcyB1bmluaXRpYWxpemVkLlxcbi0gVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiwgc3luY2hyb25pemF0aW9uLCByZWZjb3VudGluZyAoZ2V0X2RldmljZS9wdXRfZGV2aWNlLCBtb2R1bGVfcHV0LCBmcHV0KSwgbG9ja2luZywgYW5kIG9iamVjdCBsaWZldGltZXMgKHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucykuIFRoZXNlIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIG1lY2hhbmlzbXMuXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyODFhMjVmMTY2NzhlZWQzNTNhYTI0ODQzYzdiNjhmNjBkNjExMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA4OjE3OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggNmYxMjk3NjAzNWIwOS4uNTE2MTE4YjNhMTZjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTc1LDYgKzc1LDcgQEAgc3RydWN0IGxvb3BfZGV2aWNlIHtcbiBcdHN0cnVjdCBnZW5kaXNrXHRcdCpsb19kaXNrO1xuIFx0c3RydWN0IG11dGV4XHRcdGxvX211dGV4O1xuIFx0Ym9vbFx0XHRcdGlkcl92aXNpYmxlO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0XHRsb19jbHJfd29yaztcbiB9O1xuIFxuIHN0cnVjdCBsb29wX2NtZCB7XG5AQCAtMTEzNCwxMyArMTEzNSw0MiBAQCBzdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuK3N0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbitcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBsb19jbHJfd29yayk7XG4rXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGxvLVx1MDAzZWxvX2Rpc2s7XG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdHN0cnVjdCBmaWxlICpmaWxwO1xuIFx0Z2ZwX3QgZ2ZwID0gbG8tXHUwMDNlb2xkX2dmcF9tYXNrO1xuIFx0aW50IGVycjtcbiBcbitcdC8qIFN0ZXAgMTogRmx1c2ggYWxsIG91dHN0YW5kaW5nIEkvTywgd2l0aG91dCBvcGVuX211dGV4IGhlbGQuICovXG4rXHQvKlxuK1x0ICogU2luY2UgbG9vcF9xdWV1ZV9ycSgpIGlzIGNhbGxlZCB3aXRoIFJDVSByZWFkIGxvY2ssIHRoaXMgc3luY2hyb25pemVfcmN1KClcbitcdCAqIG1ha2VzIHN1cmUgdGhhdCBubyBtb3JlIHF1ZXVlX3dvcmsoKSBjYWxscyBhcmUgbWFkZSBmcm9tIGxvb3BfcXVldWVfd29yaygpXG4rXHQgKiBmcm9tIGxvb3BfcXVldWVfcnEoKS4gU3Vic2VxdWVudCBsb29wX3F1ZXVlX3JxKCkgY2FsbHMgd2hpY2ggYXJlIG1hZGUgYWZ0ZXJcbitcdCAqIHRoaXMgc3luY2hyb25pemVfcmN1KCkgcmV0dXJuZWQgc2hhbGwgc2VlIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGFuZFxuK1x0ICogcmV0dXJuIHdpdGggQkxLX1NUU19JT0VSUi5cbitcdCAqL1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXHQvKlxuK1x0ICogVGhpcyBkcmFpbl93b3JrcXVldWUoKSBtYWtlcyBzdXJlIHRoYXQgbm8gbW9yZSBsb29wX2hhbmRsZV9jbWQoKSBjYWxscyBhcmVcbitcdCAqIG1hZGUgZnJvbSBsb29wX3Byb2Nlc3Nfd29yaygpIGZyb20gbG9vcF93b3JrZm4oKS9sb29wX3Jvb3RjZ193b3JrZm4oKS5cbitcdCAqL1xuK1x0ZHJhaW5fd29ya3F1ZXVlKGxvLVx1MDAzZXdvcmtxdWV1ZSk7XG4rXHQvKlxuK1x0ICogVGhpcyBibGtfbXFfZnJlZXplX3F1ZXVlKCkgd2FpdHMgZm9yIGNvbXBsZXRpb24gb2YgYWxsIG91dHN0YW5kaW5nIEkvT1xuK1x0ICogd2hpY2ggaGFzIGJlZW4gc2NoZWR1bGVkIHZpYSBsb29wX3F1ZXVlX3JxKCksIGJ5IHdhaXRpbmcgZm9yIHFfdXNhZ2VfY291bnRlclxuK1x0ICogdG8gcmVhY2ggMC4gU2luY2UgdGhlIGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kIGNoZWNrIGluIGxvb3BfcXVldWVfcnEoKVxuK1x0ICogZ3VhcmFudGVlcyB0aGF0IG5vIG1vcmUgbmV3IEkvTyByZXF1ZXN0cyBhcmUgbWFkZSwgd2UgY2FuIGNhbGxcbitcdCAqIGJsa19tcV91bmZyZWV6ZV9xdWV1ZSgpIGltbWVkaWF0ZWx5IGFmdGVyIGJsa19tcV9mcmVlemVfcXVldWUoKSByZXR1cm5zLlxuK1x0ICovXG4rXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUsIGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpKTtcbitcbitcdC8qIFN0ZXAgMjogUGVyZm9ybSByZW1haW5pbmcgY2xlYW51cCwgd2l0aCBvcGVuX211dGV4IGhlbGQuICovXG4rXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXHRXQVJOX09OX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fcnVuZG93bik7XG4rXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvLVx1MDAzZWxvX2xvY2spO1xuIFx0ZmlscCA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiBcdGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IE5VTEw7XG5AQCAtMTE1MSwxMiArMTE4MSw3IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdGxvLVx1MDAzZWxvX3NpemVsaW1pdCA9IDA7XG4gXHRtZW1zZXQobG8tXHUwMDNlbG9fZmlsZV9uYW1lLCAwLCBMT19OQU1FX1NJWkUpO1xuIFxuLVx0Lypcbi1cdCAqIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LlxuLVx0ICpcbi1cdCAqIE5vIHF1ZXVlIGZyZWV6aW5nIG5lZWRlZCBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGZpbmFsXG4tXHQgKiAtXHUwMDNlcmVsZWFzZSBjYWxsIG9ubHksIHNvIHRoZXJlIGNhbid0IGJlIGFueSBvdXRzdGFuZGluZyBJL08uXG4tXHQgKi9cbitcdC8qIFJlc2V0IHRoZSBibG9jayBzaXplIHRvIHRoZSBkZWZhdWx0LiAqL1xuIFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG4gXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuQEAgLTExNjgsOCArMTE5Myw2IEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdC8qIGxldCB1c2VyLXNwYWNlIGtub3cgYWJvdXQgdGhpcyBjaGFuZ2UgKi9cbiBcdGtvYmplY3RfdWV2ZW50KFx1MDAyNmRpc2tfdG9fZGV2KGxvLVx1MDAzZWxvX2Rpc2spLVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiBcdG1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbHAtXHUwMDNlZl9tYXBwaW5nLCBnZnApO1xuLVx0LyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi9cbi1cdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIFxuIFx0ZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobG8tXHUwMDNlbG9fZGlzayk7XG4gXG5AQCAtMTE5OSwxMSArMTIyMiwxOCBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRXUklURV9PTkNFKGxvLVx1MDAzZWxvX3N0YXRlLCBMb191bmJvdW5kKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZsby1cdTAwM2Vsb19tdXRleCk7XG4gXG4rXHQvKiBTdGVwIDM6IERyb3AgcmVmY291bnRzLCB3aXRob3V0IG9wZW5fbXV0ZXggaGVsZC4gKi9cbitcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1xuK1x0cHV0X2RldmljZShkaXNrX3RvX2RldihkaXNrKSk7XG4rXG4gXHQvKlxuLVx0ICogTmVlZCBub3QgaG9sZCBsb19tdXRleCB0byBmcHV0IGJhY2tpbmcgZmlsZS4gQ2FsbGluZyBmcHV0IGhvbGRpbmdcbi1cdCAqIGxvX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIgbG9jayBkZXBlbmRlbmN5IHBvc3NpYmlsaXR5IHdhcm5pbmcgYXNcbi1cdCAqIGZwdXQgY2FuIHRha2Ugb3Blbl9tdXRleCB3aGljaCBpcyB1c3VhbGx5IHRha2VuIGJlZm9yZSBsb19tdXRleC5cbitcdCAqIFRoaXMgaXMgc2FmZTogZmx1c2hfd29yaygpIGZyb20gbG9vcF9yZW1vdmUoKSBmcm9tIGxvb3BfZXhpdCgpIHdhaXRzXG4rXHQgKiB1bnRpbCB0aGlzIGZ1bmN0aW9uIHJldHVybnM7IGVmZmVjdGl2ZWx5IGRyb3BwaW5nIHRoZSBmaW5hbCBtb2R1bGVcbitcdCAqIHJlZmVyZW5jZXMgc3luY2hyb25vdXNseS5cbiBcdCAqL1xuK1x0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4rXG4gXHRmcHV0KGZpbHApO1xuIH1cbiBcbkBAIC0xNzY5LDggKzE3OTksMjAgQEAgc3RhdGljIHZvaWQgbG9fcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdG5lZWRfY2xlYXIgPSAobG8tXHUwMDNlbG9fc3RhdGUgPT0gTG9fcnVuZG93bik7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFxuLVx0aWYgKG5lZWRfY2xlYXIpXG4tXHRcdF9fbG9vcF9jbHJfZmQobG8pO1xuK1x0aWYgKCFuZWVkX2NsZWFyKVxuK1x0XHRyZXR1cm47XG4rXHQvKlxuK1x0ICogSW4gb3JkZXIgdG8gZmx1c2ggb3V0c3RhbmRpbmcgSS9PIGJlZm9yZSBjbGVhcmluZyB0aGUgYmFja2luZ1xuK1x0ICogZGV2aWNlLCBkZWZlciBfX2xvb3BfY2xyX2ZkKCkgdG8gV1EgY29udGV4dC4gVGhlIExvX3J1bmRvd24gc3RhdGVcbitcdCAqIGd1YXJhbnRlZXMgdGhhdCBsb19vcGVuKCkgd2lsbCBmYWlsIHdpdGggLUVOWElPLlxuK1x0ICpcbitcdCAqIEdyYWIgZGlzayByZWZlcmVuY2Ugd2hpY2ggd2lsbCBiZSBkcm9wcGVkIGFzIHNvb24gYXNcbitcdCAqIHJldHVybmluZyBmcm9tIGxvX3JlbGVhc2UoKSBhbmQgcmVsZWFzaW5nIGRpc2stXHUwMDNlb3Blbl9tdXRleC5cbitcdCAqIFdlIGRvbid0IG5lZWQgdG8gZ3JhYiBkaXNrLVx1MDAzZWZvcHMtXHUwMDNlb3duZXIgcmVmZXJlbmNlIGJlY2F1c2VcbitcdCAqIHdlIGFyZSBob2xkaW5nIG9uZSBvYnRhaW5lZCBieSBsb29wX2NvbmZpZ3VyZSgpLlxuK1x0ICovXG4rXHRnZXRfZGV2aWNlKGRpc2tfdG9fZGV2KGRpc2spKTtcbitcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNmxvLVx1MDAzZWxvX2Nscl93b3JrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuQEAgLTIwMzQsNiArMjA3Niw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXHRsbyA9IGt6YWxsb2Nfb2JqKCpsbyk7XG4gXHRpZiAoIWxvKVxuIFx0XHRnb3RvIG91dDtcbitcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yaywgX19sb29wX2Nscl9mZCk7XG4gXHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbkBAIC0yMTM4LDYgKzIxODEsOSBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4ge1xuK1x0LyogV2FpdCBmb3IgX19sb29wX2Nscl9mZCgpIHRvIGNvbXBsZXRlLiAqL1xuK1x0Zmx1c2hfd29yayhcdTAwMjZsby1cdTAwM2Vsb19jbHJfd29yayk7XG4rXG4gXHQvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgdW5yZWFjaGFibGUgZnJvbSBwYXRobmFtZS4gKi9cbiBcdGRlbF9nZW5kaXNrKGxvLVx1MDAzZWxvX2Rpc2spO1xuIFx0YmxrX21xX2ZyZWVfdGFnX3NldChcdTAwMjZsby1cdTAwM2V0YWdfc2V0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA4OjE3OjM4LjgwMzg2NTk3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTQ4ODk1NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb24gZm9yIExvb3AgRGV2aWNlIFRlYXJkb3duIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEFmdGVyIGFuYWx5emluZyB0aGUgY29kZSwgaGVyZSdzIHdoYXQgSSd2ZSBjb25jbHVkZWQuXG5cblRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIHRlYXJkb3duIHByb2Nlc3MgZm9yIGxvb3AgZGV2aWNlcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgYmFja2luZyBmaWxlIGlzIGhhbmRsZWQuIFRoZSBjb3JlIGNoYW5nZSBpcyB0byBkZWZlciB0aGUgYF9fbG9vcF9jbHJfZmRgIGZ1bmN0aW9uIHRvIGEgd29ya3F1ZXVlIChgc3lzdGVtX2xvbmdfd3FgKS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgYmxvY2tpbmcgdGhlIGBsb19yZWxlYXNlYCBwYXRoIHdoaWxlIHRoZSBsb29wIGRldmljZSBmbHVzaGVzIEkvTywgd2hpY2ggY291bGQgbGVhZCB0byBsb2NrIGludmVyc2lvbiBvciBkZWFkbG9ja3Mgd2hlbiBob2xkaW5nIGBkaXNrLVx1MDAzZW9wZW5fbXV0ZXhgLiBJdCdzIGEgc3luY2hyb25pemF0aW9uIGltcHJvdmVtZW50LlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBzdHJ1Y3Qgd29ya19zdHJ1Y3QgbG9fY2xyX3dvcmtgIGFuZCBtb2RpZmllcyBob3cgYF9fbG9vcF9jbHJfZmRgIGlzIGNhbGxlZCwgdXNpbmcgYHF1ZXVlX3dvcmtgIGluc3RlYWQgb2YgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbCBmcm9tIGBsb19yZWxlYXNlYC4gSW1wb3J0YW50bHksIHRoZSB0ZWFyZG93biBub3cgaW52b2x2ZXMgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZzogYGdldF9kZXZpY2VgL2BwdXRfZGV2aWNlYCwgYG1vZHVsZV9wdXRgLCBhbmQgYGZwdXRgIGFyZSBjYXJlZnVsbHkgbWFuYWdlZC4gVGhlIGBsb19jbHJfd29ya2AgaXMgZmx1c2hlZCBpbiBgbG9vcF9yZW1vdmVgIHRvIGVuc3VyZSB0aGF0IHRoZSBjbGVhbnVwIGhhcHBlbnMuXG5cbk5vdywgbGV0J3MgYWRkcmVzcyB0aGUgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJJ3ZlIHNjcnV0aW5pemVkIHRoZSBjaGFuZ2VzIGZvciB0aGUgZm9sbG93aW5nOlxuXG4xLiAgKipTdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vIG5ldyBvciBtb2RpZmllZCBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIFRoZSBgSU5JVF9XT1JLYCBjYWxsIGVuc3VyZXMgdGhhdCBgbG9fY2xyX3dvcmtgIGlzIGluaXRpYWxpemVkIGFuZCBzYWZlLiBUaGUgYG5lZWRfY2xlYXJgIHZhcmlhYmxlIHJlbGllcyBvbiB0aGUgc3RhdGUgb2YgdGhlIGBsb29wX2RldmljZWAgc3RydWN0LlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBObyBjb21wbGV4IGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9ucyBhcmUgYWRkZWQgdGhhdCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiAgKipCb3VuZHMgY2hlY2tzIGFuZCBsb2dpYzoqKiBOb25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb3IgYWNjZXNzLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGFuIGFzeW5jaHJvbm91cyB0ZWFyZG93biB3aXRoIGEgZm9jdXMgb24gcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nLCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgYXJlIHJlbGF0ZWQgdG8gcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIHByb2JsZW1zIHRoYXQgYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4vTE9DS0RFUCBhbmQgZ2VuZXJhbCBzYW5pdGl6ZXJzLCByYXRoZXIgdGhhbiBLTVNBTi5cblxuS01TQU4ncyBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gZGV0ZWN0IHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIHRob3NlIHJpc2tzLCBhbmQgdGhlIGV4aXN0aW5nIGNvZGUgcGF0aHMgYXJlIGxpa2VseSBhbHJlYWR5IGNvdmVyZWQuXG5cbkluIHNob3J0LCB0aGlzIGlzIGEgc3luY2hyb25pemF0aW9uIC8gbGlmZXRpbWUgLyBkZWFkbG9jayBpc3N1ZSwgYW5kIGFsbCBpc3N1ZXMgYXJlIGhhbmRsZWQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycywgbm90IEtNU0FOLiBUaGUgYW5zd2VyIGlzIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODIyLCJPdXRwdXRUb2tlbnMiOjI4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwODoxNzo0NS45NTI3NjM5NzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgbG9vcCBibG9jayBkcml2ZXIgdGVhcmRvd24gcGF0aCBieSBkZWZlcnJpbmcgX19sb29wX2Nscl9mZCgpIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvX2Nscl93b3JrKSByYXRoZXIgdGhhbiBleGVjdXRpbmcgaXQgc3luY2hyb25vdXNseSBpbiBsb19yZWxlYXNlKCkgd2hpbGUgaG9sZGluZyBvcGVuX211dGV4LiBUaGlzIHByZXZlbnRzIGxvY2sgb3JkZXIgY29uZmxpY3RzIGR1cmluZyBJL08gZmx1c2hpbmcgYW5kIHJlc291cmNlIHJlbGVhc2UuXFxuXFxuTWVtb3J5IFxcdTAwMjYgc2FuaXRpemVyIGFuYWx5c2lzOlxcbi0gVGhlIG5ld2x5IGludHJvZHVjZWQgd29ya19zdHJ1Y3QgZmllbGQgYGxvX2Nscl93b3JrYCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IGxvb3BfZGV2aWNlYCB2aWEgYGt6YWxsb2Nfb2JqKClgIGFuZCBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUksoKWAgaW4gYGxvb3BfYWRkKClgLlxcbi0gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IHRvdWNoIG9yIGludHJvZHVjZSBhbnkgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2VyIHNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsIG91dHB1dCwgb3IgQlBGIGJ1ZmZlcnMpLCBub3IgZG8gdGhleSBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBsZWF2ZSBhbnkgc3RydWN0IGZpZWxkcy9zdGFjayB2YXJpYWJsZXMgdW5pbml0aWFsaXplZC5cXG4tIFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIGFzeW5jaHJvbm91cyBleGVjdXRpb24sIHN5bmNocm9uaXphdGlvbiwgcmVmY291bnRpbmcgKGdldF9kZXZpY2UvcHV0X2RldmljZSwgbW9kdWxlX3B1dCwgZnB1dCksIGxvY2tpbmcsIGFuZCBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMpLiBUaGVzZSBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc21zLlxcblxcblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGxvb3AgYmxvY2sgZHJpdmVyIHRlYXJkb3duIHBhdGggYnkgZGVmZXJyaW5nIF9fbG9vcF9jbHJfZmQoKSB0byBhIHdvcmtxdWV1ZSBpdGVtIChsb19jbHJfd29yaykgcmF0aGVyIHRoYW4gZXhlY3V0aW5nIGl0IHN5bmNocm9ub3VzbHkgaW4gbG9fcmVsZWFzZSgpIHdoaWxlIGhvbGRpbmcgb3Blbl9tdXRleC4gVGhpcyBwcmV2ZW50cyBsb2NrIG9yZGVyIGNvbmZsaWN0cyBkdXJpbmcgSS9PIGZsdXNoaW5nIGFuZCByZXNvdXJjZSByZWxlYXNlLlxcblxcbk1lbW9yeSBcXHUwMDI2IHNhbml0aXplciBhbmFseXNpczpcXG4tIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHdvcmtfc3RydWN0IGZpZWxkIGBsb19jbHJfd29ya2AgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdmlhIGBremFsbG9jX29iaigpYCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLKClgIGluIGBsb29wX2FkZCgpYC5cXG4tIFRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCB0b3VjaCBvciBpbnRyb2R1Y2UgYW55IGRhdGEgYnVmZmVycyBjb3BpZWQgdG8gdXNlciBzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCBvdXRwdXQsIG9yIEJQRiBidWZmZXJzKSwgbm9yIGRvIHRoZXkgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgbGVhdmUgYW55IHN0cnVjdCBmaWVsZHMvc3RhY2sgdmFyaWFibGVzIHVuaW5pdGlhbGl6ZWQuXFxuLSBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBhc3luY2hyb25vdXMgZXhlY3V0aW9uLCBzeW5jaHJvbml6YXRpb24sIHJlZmNvdW50aW5nIChnZXRfZGV2aWNlL3B1dF9kZXZpY2UsIG1vZHVsZV9wdXQsIGZwdXQpLCBsb2NraW5nLCBhbmQgb2JqZWN0IGxpZmV0aW1lcyAodXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zKS4gVGhlc2UgaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcy5cXG5cXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows7ngn[1] Phase: Succeeded StartedAt: 2026-09-05 08:17:56 +0000 UTC FinishedAt: 2026-09-05 08:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 08:17:56 +0000 UTC FinishedAt: 2026-09-05 08:17:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2] Phase: Succeeded StartedAt: 2026-09-05 08:17:56 +0000 UTC FinishedAt: 2026-09-05 12:01:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 08:17:56 +0000 UTC FinishedAt: 2026-09-05 12:01:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 08:17:56 +0000 UTC FinishedAt: 2026-09-05 08:18:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 08:17:56 +0000 UTC FinishedAt: 2026-09-05 08:18:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflows7ngn/series-workflows7ngn-convert-artifact-2148442691/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 08:18:06 +0000 UTC FinishedAt: 2026-09-05 08:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 08:18:06 +0000 UTC FinishedAt: 2026-09-05 08:33:57 +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:*334465d2-70fd-4908-a025-6f5756bf4898,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-workflows7ngn/series-workflows7ngn-convert-artifact-2148442691/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": "43357ccf-f0b7-41c6-beaa-7f0a88b56b9e", "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-workflows7ngn/series-workflows7ngn-build-action-2908888241/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 08:18:06 +0000 UTC FinishedAt: 2026-09-05 08:33:47 +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:*334465d2-70fd-4908-a025-6f5756bf4898,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-workflows7ngn/series-workflows7ngn-convert-artifact-2148442691/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": "43357ccf-f0b7-41c6-beaa-7f0a88b56b9e", "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-workflows7ngn/series-workflows7ngn-build-action-2908888241/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 08:33:57 +0000 UTC FinishedAt: 2026-09-05 08:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 08:33:57 +0000 UTC FinishedAt: 2026-09-05 08:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 08:33:57 +0000 UTC FinishedAt: 2026-09-05 08:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 08:33:57 +0000 UTC FinishedAt: 2026-09-05 08:34:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflows7ngn/series-workflows7ngn-convert-artifact-3071504122/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 08:34:07 +0000 UTC FinishedAt: 2026-09-05 08:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 08:34:07 +0000 UTC FinishedAt: 2026-09-05 08:36:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*43357ccf-f0b7-41c6-beaa-7f0a88b56b9e,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-workflows7ngn/series-workflows7ngn-build-action-2908888241/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-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 08:36:11 +0000 UTC FinishedAt: 2026-09-05 08:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 08:36:11 +0000 UTC FinishedAt: 2026-09-05 08:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 08:36:11 +0000 UTC FinishedAt: 2026-09-05 08:52:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 08:36:11 +0000 UTC FinishedAt: 2026-09-05 08:52:29 +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:*334465d2-70fd-4908-a025-6f5756bf4898,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-workflows7ngn/series-workflows7ngn-convert-artifact-3071504122/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": "0e5f9114-2be7-4764-aa14-6e4cc28dacfd", "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-workflows7ngn/series-workflows7ngn-build-action-2037255774/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 08:36:11 +0000 UTC FinishedAt: 2026-09-05 08:52:19 +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:*334465d2-70fd-4908-a025-6f5756bf4898,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-workflows7ngn/series-workflows7ngn-convert-artifact-3071504122/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": "0e5f9114-2be7-4764-aa14-6e4cc28dacfd", "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-workflows7ngn/series-workflows7ngn-build-action-2037255774/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 08:52:29 +0000 UTC FinishedAt: 2026-09-05 08:52:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 08:52:29 +0000 UTC FinishedAt: 2026-09-05 08:52:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 08:52:29 +0000 UTC FinishedAt: 2026-09-05 08:54:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 08:52:29 +0000 UTC FinishedAt: 2026-09-05 08:54: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:*0e5f9114-2be7-4764-aa14-6e4cc28dacfd,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-workflows7ngn/series-workflows7ngn-build-action-2037255774/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-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 08:54:23 +0000 UTC FinishedAt: 2026-09-05 12:01:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 08:54:23 +0000 UTC FinishedAt: 2026-09-05 12:01:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"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:*43357ccf-f0b7-41c6-beaa-7f0a88b56b9e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0e5f9114-2be7-4764-aa14-6e4cc28dacfd,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-workflows7ngn/series-workflows7ngn-build-action-2908888241/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-workflows7ngn/series-workflows7ngn-build-action-2037255774/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 08:54:23 +0000 UTC FinishedAt: 2026-09-05 08:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 08:54:23 +0000 UTC FinishedAt: 2026-09-05 08:54:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"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-workflows7ngn/series-workflows7ngn-convert-artifact-2770751791/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 08:54:23 +0000 UTC FinishedAt: 2026-09-05 08:54:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 08:54:23 +0000 UTC FinishedAt: 2026-09-05 08:54:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 08:54:23 +0000 UTC FinishedAt: 2026-09-05 08:54:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 08:54:33 +0000 UTC FinishedAt: 2026-09-05 12:01:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflows7ngn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__loop_clr_fd","lo_release","loop_clr_fd","loop_remove","loop_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"0e5b5115-508e-49aa-95b6-3a446f450f93","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 08:54:33 +0000 UTC FinishedAt: 2026-09-05 12:01:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*43357ccf-f0b7-41c6-beaa-7f0a88b56b9e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0e5f9114-2be7-4764-aa14-6e4cc28dacfd,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-workflows7ngn/series-workflows7ngn-build-action-2908888241/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-workflows7ngn/series-workflows7ngn-build-action-2037255774/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-workflows7ngn/series-workflows7ngn-convert-artifact-2770751791/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,}