Name: series-workflow2vs8w Phase: Succeeded StartedAt: 2026-09-04 20:09:31 +0000 UTC FinishedAt: 2026-09-04 23:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[0] Phase: Succeeded StartedAt: 2026-09-04 20:09:31 +0000 UTC FinishedAt: 2026-09-04 20:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 20:09:31 +0000 UTC FinishedAt: 2026-09-04 20:12:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b35d3d2fae3058265ba937544a3895cedce18d08", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b35d3d2fae3058265ba937544a3895cedce18d08", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "SYSFS" ], "series_id": "280ebb4a-90c3-40d6-8994-328d37fa2b21" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sysfs_get_link_ksettings", "speed_show", "duplex_show" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtTWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtzcGVlZF9zaG93JiMzNDssCiAgICAmIzM0O2R1cGxleF9zaG93JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgKGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCkgYnkgaW50cm9kdWNpbmcgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCB0byBvcHRpbWl6ZSBsb2NraW5nIChhdm9pZGluZyB1bm5lY2Vzc2FyeSBSVE5MIGxvY2tpbmcgd2hlbiBvbmx5IG5ldGRldiBvcHMgbG9jayBpcyByZXF1aXJlZCkuXG5cblRoZSBzdGFjayB2YXJpYWJsZSBgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kYCBpcyBwYXNzZWQgdG8gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCwgd2hpY2ggZGVsZWdhdGVzIHRvIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAuIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIGBtZW1zZXQoLi4uLCAwLCBzaXplb2YoKmNtZCkpYCBwcmlvciB0byBpbnZva2luZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgc2hvdyBmdW5jdGlvbnMgb25seSBhY2Nlc3MgZmllbGRzIG9mIGBjbWRgIGlmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgcmV0dXJucyBzdWNjZXNzICgwKS4gT3V0cHV0IGlzIGZvcm1hdHRlZCBpbnRvIHN5c2ZzIHN0cmluZyBidWZmZXJzIHVzaW5nIGBzeXNmc19lbWl0KClgLCBlbGltaW5hdGluZyBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgZGlzY2xvc3VyZS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxvY2tpbmcgcmVncmVzc2lvbnMgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgaW4gbmV0L2NvcmUvbmV0LXN5c2ZzLmMgdG8gdXNlIGEgbmV3IGxvY2tpbmcgaGVscGVyIHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpLCBtb2RpZnlpbmcgaG93IHJ0bmwgYW5kIG5ldGRldiBvcHMgbG9ja3MgYXJlIGFjcXVpcmVkIGFuZCBjaGVja2VkLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHN5c2ZzIGNvZGUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvc3lzL2NsYXNzL25ldC9cdTAwM2NpZmFjZVx1MDAzZS9zcGVlZCBhbmQgL3N5cy9jbGFzcy9uZXQvXHUwMDNjaWZhY2VcdTAwM2UvZHVwbGV4LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzU0MjNmNzQ4ZGQ1ZTRjZDI3MWJmMDAzODZhY2YxNzdmOTBiZjdhY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMjA6MTA6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xuaW5kZXggMzUyMTczZGY3NTc4NS4uZmE3OTBlNDQyNTcwNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xuQEAgLTExOCw2ICYjNDM7MTE4LDQ5IEBAIHN0YXRpYyBpbnQgc3lzZnNfcnRubF9sb2NrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuJiM0MztcdGJvb2wgbmVlZF9ydG5sO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcbiYjNDM7XHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8XG4mIzQzO1x0XHQgICAgKG5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNlxuJiM0MztcdFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTKTtcbiYjNDM7XHRpZiAobmVlZF9ydG5sKSB7XG4mIzQzO1x0XHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuJiM0MztcdFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxuJiM0MztcdFx0XHRyZXQgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuJiM0MztcdGlmIChuZWVkX3J0bmwpXG4mIzQzO1x0XHRydG5sX3VubG9jaygpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJiMzOTtzICovXG4gc3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXG5AQCAtMzMyLDcwICYjNDM7Mzc1LDQxIEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTtcbiBzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuJiM0MztcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVJTlZBTDtcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbi1cdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuLVxuLVx0XHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZjbWQpKVxuLVx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4tXHR9XG4tXHRydG5sX3VubG9jaygpO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcbiB9XG4gc3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTtcbiBcbiBzdGF0aWMgc3NpemVfdCBkdXBsZXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuLVx0aW50IHJldCA9IC1FSU5WQUw7XG4tXG4tXHQvKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcbi1cdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbi1cdCAqL1xuLVx0aWYgKCFuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbiYjNDM7XHRjb25zdCBjaGFyICpkdXBsZXg7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuJiM0MztcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVJTlZBTDtcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbi1cdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuLVxuLVx0XHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZjbWQpKSB7XG4tXHRcdFx0Y29uc3QgY2hhciAqZHVwbGV4O1xuLVxuLVx0XHRcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfSEFMRjpcbi1cdFx0XHRcdGR1cGxleCA9IFwmIzM0O2hhbGZcJiMzNDs7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHRjYXNlIERVUExFWF9GVUxMOlxuLVx0XHRcdFx0ZHVwbGV4ID0gXCYjMzQ7ZnVsbFwmIzM0Oztcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGRlZmF1bHQ6XG4tXHRcdFx0XHRkdXBsZXggPSBcJiMzNDt1bmtub3duXCYjMzQ7O1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslc1xcblwmIzM0OywgZHVwbGV4KTtcbi1cdFx0fVxuJiM0MztcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4mIzQzO1x0Y2FzZSBEVVBMRVhfSEFMRjpcbiYjNDM7XHRcdGR1cGxleCA9IFwmIzM0O2hhbGZcJiMzNDs7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERVUExFWF9GVUxMOlxuJiM0MztcdFx0ZHVwbGV4ID0gXCYjMzQ7ZnVsbFwmIzM0OztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRkdXBsZXggPSBcJiMzNDt1bmtub3duXCYjMzQ7O1xuJiM0MztcdFx0YnJlYWs7XG4gXHR9XG4tXHRydG5sX3VubG9jaygpO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslc1xcblwmIzM0OywgZHVwbGV4KTtcbiB9XG4gc3RhdGljIERFVklDRV9BVFRSX1JPKGR1cGxleCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3NwZWVkX3Nob3cmIzM0OywKICAgICYjMzQ7ZHVwbGV4X3Nob3cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgaW4gbmV0L2NvcmUvbmV0LXN5c2ZzLmMgdG8gdXNlIGEgbmV3IGxvY2tpbmcgaGVscGVyIHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpLCBtb2RpZnlpbmcgaG93IHJ0bmwgYW5kIG5ldGRldiBvcHMgbG9ja3MgYXJlIGFjcXVpcmVkIGFuZCBjaGVja2VkLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHN5c2ZzIGNvZGUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvc3lzL2NsYXNzL25ldC9cdTAwM2NpZmFjZVx1MDAzZS9zcGVlZCBhbmQgL3N5cy9jbGFzcy9uZXQvXHUwMDNjaWZhY2VcdTAwM2UvZHVwbGV4LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzU0MjNmNzQ4ZGQ1ZTRjZDI3MWJmMDAzODZhY2YxNzdmOTBiZjdhYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjA6MTA6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDM1MjE3M2RmNzU3ODUuLmZhNzkwZTQ0MjU3MDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw0OSBAQCBzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKJiM0MzsJYm9vbCBuZWVkX3J0bmw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzCiYjNDM7CSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWlmICghbmV0ZGV2LSZndDtldGh0b29sX29wcy0mZ3Q7Z2V0X2xpbmtfa3NldHRpbmdzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8CiYjNDM7CQkgICAgKG5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsKJiM0MzsJCSAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7CiYjNDM7CWlmIChuZWVkX3J0bmwpIHsKJiM0MzsJCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CW5ldGRldl9sb2NrX29wcyhuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSAtRUlOVkFMOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQlpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpCiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzO3VubG9jazoKJiM0MzsJbmV0ZGV2X3VubG9ja19vcHMobmV0ZGV2KTsKJiM0MzsJaWYgKG5lZWRfcnRubCkKJiM0MzsJCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJiMzOTtzICovCiBzdGF0aWMgc3NpemVfdCBuZXRkZXZfc2hvdyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLApAQCAtMzMyLDcwICYjNDM7Mzc1LDQxIEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTsKIHN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQkvKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHMKLQkgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuCi0JICovCi0JaWYgKCFuZXRkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfbGlua19rc2V0dGluZ3MpCi0JCXJldHVybiByZXQ7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDsKJiM0MzsJaW50IHJldDsKIAotCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwomIzQzOwlyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCAmYW1wO2NtZCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7Ci0KLQkJaWYgKCFfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgJmFtcDtjbWQpKQotCQkJcmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTsKLQl9Ci0JcnRubF91bmxvY2soKTsKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7CiAKIHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwcwotCSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KLQkgKi8KLQlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKLQkJcmV0dXJuIHJldDsKJiM0MzsJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kOwomIzQzOwljb25zdCBjaGFyICpkdXBsZXg7CiYjNDM7CWludCByZXQ7CiAKLQlyZXQgPSBzeXNmc19ydG5sX2xvY2soJmFtcDtkZXYtJmd0O2tvYmosICZhbXA7YXR0ci0mZ3Q7YXR0ciwgbmV0ZGV2KTsKJiM0MzsJcmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgJmFtcDtjbWQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSAtRUlOVkFMOwotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kOwotCi0JCWlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7Y21kKSkgewotCQkJY29uc3QgY2hhciAqZHVwbGV4OwotCi0JCQlzd2l0Y2ggKGNtZC5iYXNlLmR1cGxleCkgewotCQkJY2FzZSBEVVBMRVhfSEFMRjoKLQkJCQlkdXBsZXggPSAmIzM0O2hhbGYmIzM0OzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRFVQTEVYX0ZVTEw6Ci0JCQkJZHVwbGV4ID0gJiMzNDtmdWxsJiMzNDs7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWR1cGxleCA9ICYjMzQ7dW5rbm93biYjMzQ7OwotCQkJCWJyZWFrOwotCQkJfQotCQkJcmV0ID0gc3lzZnNfZW1pdChidWYsICYjMzQ7JXNcbiYjMzQ7LCBkdXBsZXgpOwotCQl9CiYjNDM7CXN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7CiYjNDM7CWNhc2UgRFVQTEVYX0hBTEY6CiYjNDM7CQlkdXBsZXggPSAmIzM0O2hhbGYmIzM0OzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIERVUExFWF9GVUxMOgomIzQzOwkJZHVwbGV4ID0gJiMzNDtmdWxsJiMzNDs7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWR1cGxleCA9ICYjMzQ7dW5rbm93biYjMzQ7OwomIzQzOwkJYnJlYWs7CiAJfQotCXJ0bmxfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVzXG4mIzM0OywgZHVwbGV4KTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhkdXBsZXgpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIEludGVyZmFjZSBTeXNmcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHJlZmFjdG9yaW5nIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgd2UgaGFuZGxlIHRoZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgYXR0cmlidXRlcyB3aXRoaW4gdGhlIGAvc3lzL2NsYXNzL25ldC8mbHQ7aWZhY2UmZ3Q7L2AgaGllcmFyY2h5LiBUaGVzZSBhcmUgY3J1Y2lhbCwgb2J2aW91c2x5LCBmb3IgcmVwb3J0aW5nIGxpbmsgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5ncy4KClRoZSBrZXkgaGVyZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBiZSBhIGhlbHBlciBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHNpZ27igJR3ZSYjMzk7cmUgbGlrZWx5IHRyeWluZyB0byBEUlkgdXAgc29tZSBjb2RlIGFuZCBjZW50cmFsaXplIHRoZSBsb2NraW5nIGxvZ2ljLiBUaGF0JiMzOTtzIHVzdWFsbHkgYSB3aW4gZm9yIG1haW50YWluYWJpbGl0eSBhbmQgY29ycmVjdG5lc3MsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3lzZnMgYXR0cmlidXRlcyB0aGF0IGludm9sdmUga2VybmVsIGRhdGEuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBsb2NraW5nOgoKMS4gIFdlIGhhdmUgYHN5c2ZzX3J0bmxfbG9ja2AgYmVpbmcgbG9ja2VkIGNvbmRpdGlvbmFsbHkuIFRoZSBkZWNpc2lvbiB0byBsb2NrIGl0IGhpbmdlcyBvbiBgbmVlZF9ydG5sYCwgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gd2hldGhlciB3ZSBuZWVkIHRvIGNhbGwgYG5ldGRldl9sb2NrX29wc2AgZmlyc3QsIG9yIGlmIHdlIG5lZWQgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTYCBmbGFnLiBUaGlzIGlzIGNsZXZlcjsgaXQmIzM5O3MgcmVjb2duaXppbmcgdGhhdCBub3QgYWxsIG9wZXJhdGlvbnMgcmVxdWlyZSB0aGUgUlROTCAoUm91dGluZyBUYWJsZSBOZXh0IExldmVsKSBsb2NrLiBUaGF0IGNhbiBsZWFkIHRvIGxlc3MgY29udGVudGlvbi4KMi4gIFRoZW4sIHdlIGhhdmUgYG5ldGRldl9sb2NrX29wcyhuZXRkZXYpYCBhbmQgdGhlIGBkZXZfaXNhbGl2ZWAgY2hlY2sgd2hpY2ggcHJvdGVjdHMgYWdhaW5zdCByYWNlcyBhbmQgZW5zdXJlcyB0aGUgZGV2aWNlIGlzIHN0aWxsIHZhbGlkIGJlZm9yZSB3ZSBhdHRlbXB0IHRvIHdvcmsgd2l0aCBpdC4gVGhhdCYjMzk7cyBhIHNvbGlkIGRlZmVuc2UuCjMuICBUaGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBzZWVtcyB0byBiZSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKWAuIFRoYXQmIzM5O3Mgd2hlcmUgd2UmIzM5O3JlIGFjdHVhbGx5IGZldGNoaW5nIHRoZSBsaW5rIHNldHRpbmdzLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBjYXJlZnVsbHkgcmVwbGFjaW5nIGVhcmxpZXIgbG9naWMgd2l0aCB0aGlzIGNsZWFuZXIgbW9kZWwuCjQuICBGaW5hbGx5LCB3ZSBjYWxsIHRoZSBzZXR0aW5ncyBmcm9tIHRoZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgZnVuY3Rpb25zLgoKVG8gZ2V0IGEgYmV0dGVyIGdyaXAsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bGwgcHJvYmFibHkgZ3JhYiBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIHF1aWNrbHkgY2hlY2sgdGhlIHNvdXJjZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGNoYW5nZSBmaXRzIHdpdGhpbiB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXQtc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XHRzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTtcbiAxMTY6XHRcdGRldl9wdXQobmRldik7XG4gMTE3Olx0XG4gMTE4Olx0XHRyZXR1cm4gcmV0O1xuIDExOTpcdH1cbiAxMjA6XHRcbiAxMjE6XHRzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gMTIyOlx0XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gMTIzOlx0XHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiAxMjQ6XHR7XG4gMTI1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuIDEyNjpcdFx0Ym9vbCBuZWVkX3J0bmw7XG4gMTI3Olx0XHRpbnQgcmV0O1xuIDEyODpcdFxuIDEyOTpcdFx0LypcbiAxMzA6XHRcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4gMTMxOlx0XHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4gMTMyOlx0XHQgKi9cbiAxMzM6XHRcdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbiAxMzQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTM1Olx0XG4gMTM2Olx0XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSB8fFxuIDEzNzpcdFx0XHQgICAgKG5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNlxuIDEzODpcdFx0XHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MpO1xuIDEzOTpcdFx0aWYgKG5lZWRfcnRubCkge1xuIDE0MDpcdFx0XHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbiAxNDE6XHRcdFx0aWYgKHJldClcbiAxNDI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDE0MzpcdFx0fVxuIDE0NDpcdFx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbiAxNDc6XHRcdFx0cmV0ID0gLUVOT0RFVjtcbiAxNDg6XHRcdFx0Z290byB1bmxvY2s7XG4gMTQ5Olx0XHR9XG4gMTUwOlx0XG4gMTUxOlx0XHRyZXQgPSAtRUlOVkFMO1xuIDE1MjpcdFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuIDE1MzpcdFx0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG4gMTU0Olx0XHRcdFx0cmV0ID0gMDtcbiAxNTU6XHRcdH1cbiAxNTY6XHRcbiAxNTc6XHR1bmxvY2s6XG4gMTU4Olx0XHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuIDE1OTpcdFx0aWYgKG5lZWRfcnRubClcbiAxNjA6XHRcdFx0cnRubF91bmxvY2soKTtcbiAxNjE6XHRcdHJldHVybiByZXQ7XG4gMTYyOlx0fVxuIDE2MzpcdFxuIDE2NDpcdC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCYjMzk7cyAqL1xuIDE2NTpcdHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldixcbiAxNjY6XHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLFxuIDE2NzpcdFx0XHRcdCAgIHNzaXplX3QgKCpmb3JtYXQpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICosIGNoYXIgKikpXG4gMTY4Olx0e1xuIDE2OTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7XG4gMTcwOlx0XHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4gMTcxOlx0XG4gMTcyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMTczOlx0XHRpZiAoZGV2X2lzYWxpdmUobmRldikpXG4gMTc0Olx0XHRcdHJldCA9ICgqZm9ybWF0KShuZGV2LCBidWYpO1xuIDE3NTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMTc2Olx0XG4gMTc3Olx0XHRyZXR1cm4gcmV0O1xuIDE3ODpcdH1cbiAxNzk6XHRcbiAxODA6XHQvKiBnZW5lcmF0ZSBhIHNob3cgZnVuY3Rpb24gZm9yIHNpbXBsZSBmaWVsZCAqL1xuIDE4MTpcdCNkZWZpbmUgTkVUREVWSUNFX1NIT1coZmllbGQsIGZvcm1hdF9zdHJpbmcpXHRcdFx0XHRcXFxuIDE4MjpcdHN0YXRpYyBzc2l6ZV90IGZvcm1hdF8jI2ZpZWxkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZilcdFxcXG4gMTgzOlx0e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMTg0Olx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZvcm1hdF9zdHJpbmcsIFJFQURfT05DRShkZXYtXHUwMDNlZmllbGQpKTtcdFx0XFxcbiAxODU6XHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAxODY6XHRzdGF0aWMgc3NpemVfdCBmaWVsZCMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFx0XHRcdFx0XFxcbiAxODc6XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcdFxcXG4gMTg4Olx0e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMTg5Olx0XHRyZXR1cm4gbmV0ZGV2X3Nob3coZGV2LCBhdHRyLCBidWYsIGZvcm1hdF8jI2ZpZWxkKTtcdFx0XFxcbiAxOTA6XHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAxOTE6XHRcbiAxOTI6XHQjZGVmaW5lIE5FVERFVklDRV9TSE9XX1JPKGZpZWxkLCBmb3JtYXRfc3RyaW5nKVx0XHRcdFx0XFxcbiAxOTM6XHRORVRERVZJQ0VfU0hPVyhmaWVsZCwgZm9ybWF0X3N0cmluZyk7XHRcdFx0XHRcdFxcXG4gMTk0Olx0c3RhdGljIERFVklDRV9BVFRSX1JPKGZpZWxkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZXQtc3lzZnMuY2AgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldC1zeXNmcy5jYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBwaWVjZSwgYXMgaXQgaGFuZGxlcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBuZXR3b3JraW5nLiBJbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAsIGxpa2UgUUVNVSBvciBHQ0UsIHdoZXJlIHN5c2ZzIGFuZCBuZXR3b3JrIGRldmljZXMgYXJlIHByZXNlbnQsIHRoaXMgY29kZSBpcyBhYnNvbHV0ZWx5IHJlbGV2YW50LiBUaGluayBvZiB0aGUgY29tbW9uIHN5c2ZzIHBhdGhzIGxpa2UgYC9zeXMvY2xhc3MvbmV0Lyovc3BlZWRgIGFuZCBgL3N5cy9jbGFzcy9uZXQvKi9kdXBsZXhgOyB0aGlzIGNvZGUgdW5kZXJwaW5zIHRob3NlLgoKV2hhdCYjMzk7cyBjb25jZXJuaW5nIGhlcmUgaXMgdGhlIGV4dGVudCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBuZXR3b3JraW5nIHN5c2ZzIGNvZGUsIGFuZCB0aGUgY2hhbmdlcyBpbnZvbHZlIGxvY2tpbmcgc2VtYW50aWNzLiBTcGVjaWZpY2FsbHksIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBydG5sIGxvY2tpbmcgYW5kIHRoZSBuZXRkZXYgb3BlcmF0aW9ucyBsb2NraW5nIG5lZWRzIGNhcmVmdWwgc2NydXRpbnkuIFBsdXMsIHRoZXJlJiMzOTtzIGEgbmV3IGhlbHBlciwgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AsIGJlaW5nIGludHJvZHVjZWQuIEFuZCwgb2YgY291cnNlLCB0aGV5IGFyZSBtb2RpZnlpbmcgY3J1Y2lhbCBmdW5jdGlvbnMgbGlrZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AuIFRob3NlIGFyZSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgYXJlYXMuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBoZXJlLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBuZXQvY29yZS9NYWtlZmlsZWAgb3IgYG5ldC9LY29uZmlnYCBmb3IgdGhlIHByZXNlbmNlIG9mIGBuZXQtc3lzZnMub2AsIGp1c3QgdG8gdmVyaWZ5IHRoYXQgTkVUIGFuZCBTWVNGUyBhcmUgaW5kZWVkIGNvbmZpZ3VyZWQgYXMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0LXN5c2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xOD1vYmotJChDT05GSUdfTkVUREVWX0FERFJfTElTVF9URVNUKSAmIzQzOz0gZGV2X2FkZHJfbGlzdHNfdGVzdC5vXG5uZXQvY29yZS9NYWtlZmlsZS0xOS1cbm5ldC9jb3JlL01ha2VmaWxlOjIwOm9iai15ICYjNDM7PSBuZXQtc3lzZnMub1xubmV0L2NvcmUvTWFrZWZpbGUtMjEtb2JqLXkgJiM0Mzs9IGhvdGRhdGEub1xuLS1cbm5ldC9jb3JlL2Rldi5jLTE2OC0jaW5jbHVkZSBcJiMzNDtkZXZtZW0uaFwmIzM0O1xubmV0L2NvcmUvZGV2LmM6MTY5OiNpbmNsdWRlIFwmIzM0O25ldC1zeXNmcy5oXCYjMzQ7XG5uZXQvY29yZS9kZXYuYy0xNzAtXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMi0vKlxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MzogKiBuZXQtc3lzZnMuYyAtIG5ldHdvcmsgZGV2aWNlIGNsYXNzIGFuZCBhdHRyaWJ1dGVzXG5uZXQvY29yZS9uZXQtc3lzZnMuYy00LSAqXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzAtI2luY2x1ZGUgXCYjMzQ7ZGV2LmhcJiMzNDtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjMxOiNpbmNsdWRlIFwmIzM0O25ldC1zeXNmcy5oXCYjMzQ7XG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zMi1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYy05Ny0jaW5jbHVkZSBcJiMzNDtkZXZtZW0uaFwmIzM0O1xubmV0L2NvcmUvc2tidWZmLmM6OTg6I2luY2x1ZGUgXCYjMzQ7bmV0LXN5c2ZzLmhcJiMzNDtcbm5ldC9jb3JlL3NrYnVmZi5jLTk5LSNpbmNsdWRlIFwmIzM0O25ldG1lbV9wcml2LmhcJiMzNDtcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zMS0jaW5jbHVkZSBcJiMzNDtkZXYuaFwmIzM0O1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6MzI6I2luY2x1ZGUgXCYjMzQ7bmV0LXN5c2ZzLmhcJiMzNDtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtlcm5lbCYjMzk7cyBOZXR3b3JrIENvcmUgZm9yIFN5c3RlbSBGaWxlIFN1cHBvcnQqKgoKT2theSwgc28gSSBzZWUgdGhpcyBsaW5lOiBgb2JqLXkgJiM0Mzs9IG5ldC1zeXNmcy5vYCBpbiBgbmV0L2NvcmUvTWFrZWZpbGVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgYG5ldC1zeXNmcy5vYCBpcyBiZWluZyBpbmNsdWRlZCwgYnV0IHVuZGVyIHdoYXQgY29uZGl0aW9ucz8mIzM0OyBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBsaWtlbHkgbWVhbnMgdGhlIHN5c3RlbSBmaWxlIHN1cHBvcnQgZm9yIG5ldHdvcmsgY29yZSBpcyBiZWluZyBjb25kaXRpb25hbGx5IGVuYWJsZWQuIFRoZSBNYWtlZmlsZSBjbGVhcmx5IHN0YXRlcyB0aGF0IHRoaXMgb2JqZWN0IGZpbGUgaXMgb25seSBpbmNsdWRlZCB3aGVuIGJvdGggYENPTkZJR19ORVRgIGFuZCBgQ09ORklHX1NZU0ZTYCBhcmUgZGVmaW5lZCBhbmQgc2V0IHRvIGB5YC4KCkJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgdW5kZXJseWluZyBsb2dpYy4gSXMgdGhlcmUgYSBtb3JlIGV4cGxpY2l0IGAjaWZkZWYgQ09ORklHX1NZU0ZTYCBjaGVjayAqd2l0aGluKiBgbmV0L2NvcmUvTWFrZWZpbGVgIHJlbGF0ZWQgdG8gdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBgbmV0LXN5c2ZzLm9gIG9yLCBtb3JlIGJyb2FkbHksIGRvZXMgYG5ldC9jb3JlYCBnZXQgY29tcGlsZWQgYXQgYWxsIHdoZW4gQ09ORklHX05FVCBpcyBzZXQ/IEl0JiMzOTtzIGdvb2QgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmN5IHRyZWUgdG8gbWFrZSBzdXJlIHRoZSBpbmNsdXNpb24gaXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgdG8gdmVyaWZ5IHdoZW4gZGlnZ2luZyBpbnRvIGtlcm5lbCBuZXR3b3JraW5nLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN5c3RlbSBmaWxlIGludGVyZmFjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUtOC1cbm5ldC9NYWtlZmlsZTo5Om9iai15XHRcdFx0XHQ6PSBkZXZyZXMubyBzb2NrZXQubyBjb3JlL1xubmV0L01ha2VmaWxlLTEwLVxubmV0L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19DT01QQVQpXHRcdCYjNDM7PSBjb21wYXQub1xubmV0L01ha2VmaWxlLTEyLVxubmV0L01ha2VmaWxlLTEzLSMgTExDIGhhcyB0byBiZSBsaW5rZWQgYmVmb3JlIHRoZSBmaWxlcyBpbiBuZXQvODAyL1xubmV0L01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19MTEMpXHRcdCYjNDM7PSBsbGMvXG5uZXQvTWFrZWZpbGU6MTU6b2JqLXlcdFx0XHRcdCYjNDM7PSBldGhlcm5ldC8gODAyLyBzY2hlZC8gbmV0bGluay8gYnBmLyBldGh0b29sL1xubmV0L01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19ORVRGSUxURVIpXHRcdCYjNDM7PSBuZXRmaWx0ZXIvXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXHRcdCYjNDM7PSBpcHY0L1xubmV0L01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19UTFMpXHRcdCYjNDM7PSB0bHMvXG5uZXQvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX1hGUk0pXHRcdCYjNDM7PSB4ZnJtL1xubmV0L01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19VTklYKVx0XHQmIzQzOz0gdW5peC9cbm5ldC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSU5FVF9QU1ApXHRcdCYjNDM7PSBwc3AvXG5uZXQvTWFrZWZpbGU6MjI6b2JqLXlcdFx0XHRcdCYjNDM7PSBpcHY2L1xubmV0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19QQUNLRVQpXHRcdCYjNDM7PSBwYWNrZXQvXG5uZXQvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX05FVF9LRVkpXHRcdCYjNDM7PSBrZXkvXG5uZXQvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JSSURHRSlcdFx0JiM0Mzs9IGJyaWRnZS9cbm5ldC9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfTkVUX0RFVkxJTkspXHQmIzQzOz0gZGV2bGluay9cbm5ldC9NYWtlZmlsZToyNzpvYmoteVx0XHRcdFx0JiM0Mzs9IGRzYS9cbm5ldC9NYWtlZmlsZToyODpvYmotJChDT05GSUdfWDI1KVx0XHQmIzQzOz0geDI1L1xubmV0L01ha2VmaWxlOjI5Om9iai0kKENPTkZJR19MQVBCKVx0XHQmIzQzOz0gbGFwYi9cbm5ldC9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfQ0FOKVx0XHQmIzQzOz0gY2FuL1xubmV0L01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19CVClcdFx0JiM0Mzs9IGJsdWV0b290aC9cbm5ldC9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfU1VOUlBDKVx0XHQmIzQzOz0gc3VucnBjL1xubmV0L01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19BRl9SWFJQQylcdFx0JiM0Mzs9IHJ4cnBjL1xubmV0L01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19BRl9LQ00pXHRcdCYjNDM7PSBrY20vXG5uZXQvTWFrZWZpbGU6MzU6b2JqLSQoQ09ORklHX1NUUkVBTV9QQVJTRVIpXHQmIzQzOz0gc3RycGFyc2VyL1xubmV0L01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19BVE0pXHRcdCYjNDM7PSBhdG0vXG5uZXQvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0wyVFApXHRcdCYjNDM7PSBsMnRwL1xubmV0L01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19QSE9ORVQpXHRcdCYjNDM7PSBwaG9uZXQvXG5uZXQvTWFrZWZpbGUtMzktaWZuZXEgKCQoQ09ORklHX1ZMQU5fODAyMVEpLClcbm5ldC9NYWtlZmlsZTo0MDpvYmoteVx0XHRcdFx0JiM0Mzs9IDgwMjFxL1xubmV0L01ha2VmaWxlLTQxLWVuZGlmXG5uZXQvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQX1NDVFApXHRcdCYjNDM7PSBzY3RwL1xubmV0L01ha2VmaWxlOjQzOm9iai0kKENPTkZJR19SRFMpXHRcdCYjNDM7PSByZHMvXG5uZXQvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX1dJUkVMRVNTKVx0XHQmIzQzOz0gd2lyZWxlc3MvXG5uZXQvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX01BQzgwMjExKVx0XHQmIzQzOz0gbWFjODAyMTEvXG5uZXQvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX1RJUEMpXHRcdCYjNDM7PSB0aXBjL1xubmV0L01ha2VmaWxlOjQ3Om9iai0kKENPTkZJR19ORVRMQUJFTClcdFx0JiM0Mzs9IG5ldGxhYmVsL1xubmV0L01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19JVUNWKVx0XHQmIzQzOz0gaXVjdi9cbm5ldC9NYWtlZmlsZTo0OTpvYmotJChDT05GSUdfU01DKVx0XHQmIzQzOz0gc21jL1xubmV0L01ha2VmaWxlOjUwOm9iai0kKENPTkZJR19SRktJTEwpXHRcdCYjNDM7PSByZmtpbGwvXG5uZXQvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX05FVF85UClcdFx0JiM0Mzs9IDlwL1xubmV0L01ha2VmaWxlOjUyOm9iai0kKENPTkZJR19EQ0IpXHRcdCYjNDM7PSBkY2IvXG5uZXQvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHXzZMT1dQQU4pXHRcdCYjNDM7PSA2bG93cGFuL1xubmV0L01ha2VmaWxlOjU0Om9iai0kKENPTkZJR19JRUVFODAyMTU0KVx0JiM0Mzs9IGllZWU4MDIxNTQvXG5uZXQvTWFrZWZpbGU6NTU6b2JqLSQoQ09ORklHX01BQzgwMjE1NClcdFx0JiM0Mzs9IG1hYzgwMjE1NC9cbm5ldC9NYWtlZmlsZS01Ni1cbm5ldC9NYWtlZmlsZTo1NzpvYmotJChDT05GSUdfU1lTQ1RMKVx0XHQmIzQzOz0gc3lzY3RsX25ldC5vXG5uZXQvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX0ROU19SRVNPTFZFUilcdCYjNDM7PSBkbnNfcmVzb2x2ZXIvXG5uZXQvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX0NFUEhfTElCKVx0XHQmIzQzOz0gY2VwaC9cbm5ldC9NYWtlZmlsZTo2MDpvYmotJChDT05GSUdfQkFUTUFOX0FEVilcdCYjNDM7PSBiYXRtYW4tYWR2L1xubmV0L01ha2VmaWxlOjYxOm9iai0kKENPTkZJR19ORkMpXHRcdCYjNDM7PSBuZmMvXG5uZXQvTWFrZWZpbGU6NjI6b2JqLSQoQ09ORklHX1BTQU1QTEUpXHRcdCYjNDM7PSBwc2FtcGxlL1xubmV0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfSUZFKVx0XHQmIzQzOz0gaWZlL1xubmV0L01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19PUEVOVlNXSVRDSClcdCYjNDM7PSBvcGVudnN3aXRjaC9cbm5ldC9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfVlNPQ0tFVFMpXHQmIzQzOz0gdm13X3Zzb2NrL1xubmV0L01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19NUExTKVx0XHQmIzQzOz0gbXBscy9cbm5ldC9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfTkVUX05TSClcdFx0JiM0Mzs9IG5zaC9cbm5ldC9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfSFNSKVx0XHQmIzQzOz0gaHNyL1xubmV0L01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19ORVRfU1dJVENIREVWKVx0JiM0Mzs9IHN3aXRjaGRldi9cbm5ldC9NYWtlZmlsZTo3MDpvYmotJChDT05GSUdfTkVUX0wzX01BU1RFUl9ERVYpXHQmIzQzOz0gbDNtZGV2L1xubmV0L01ha2VmaWxlOjcxOm9iai0kKENPTkZJR19RUlRSKVx0XHQmIzQzOz0gcXJ0ci9cbm5ldC9NYWtlZmlsZTo3MjpvYmotJChDT05GSUdfTkVUX05DU0kpXHRcdCYjNDM7PSBuY3NpL1xubmV0L01ha2VmaWxlOjczOm9iai0kKENPTkZJR19YRFBfU09DS0VUUylcdCYjNDM7PSB4ZHAvXG5uZXQvTWFrZWZpbGU6NzQ6b2JqLSQoQ09ORklHX01QVENQKVx0XHQmIzQzOz0gbXB0Y3AvXG5uZXQvTWFrZWZpbGU6NzU6b2JqLSQoQ09ORklHX01DVFApXHRcdCYjNDM7PSBtY3RwL1xubmV0L01ha2VmaWxlOjc2Om9iai0kKENPTkZJR19ORVRfSEFORFNIQUtFKVx0JiM0Mzs9IGhhbmRzaGFrZS9cbm5ldC9NYWtlZmlsZTo3NzpvYmotJChDT05GSUdfTkVUX1NIQVBFUilcdCYjNDM7PSBzaGFwZXIvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZXQtc3lzZnMuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaG9va3MgZm9yIG5ldHdvcmsgaW50ZXJmYWNlcyBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwb2tlIGFyb3VuZCBpbiBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLiBJdCYjMzk7cyBhIGtleSBzcG90IGZvciBzeXNmcyBpbnRlcmFjdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JraW5nLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGNvZGUgZm9yIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyAoYCNpZmRlZmAsIGAjaWZgLCBldGMuKSBvciBzdWJ0bGUgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHdoaWNoIGZlYXR1cmVzIG9yIHN1YnN5c3RlbXMgbWlnaHQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvZiB0aGUgc3lzZnMgYXR0cmlidXRlcyBhbmQgaG93IHRoZXkgYXJlIGV4cG9zZWQuIEdvdHRhIHNlZSB3aGF0IGZsYWdzIG9yIG1vZHVsZXMgbmVlZCB0byBiZSBhY3RpdmUgdG8gbWFrZSBjZXJ0YWluIG9wdGlvbnMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGZpbGVzeXN0ZW0uIFRoaXMgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgYmVmb3JlIEkgZGlnIGludG8gYW55IHBhcnRpY3VsYXIgYXR0cmlidXRlIG9yIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBnZXQgdGhlIG92ZXJhbGwgY29udGV4dCBiZWZvcmUgSSBjYW4gaXNvbGF0ZSBhbnkgc3BlY2lmaWMgaXNzdWUgb3IgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0LXN5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzItXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozMzojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zNC1zdGF0aWMgY29uc3QgY2hhciBmbXRfaGV4W10gPSBcJiMzNDslI3hcXG5cJiMzNDs7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9OTE0PXN0YXRpYyBib29sIHdpcmVsZXNzX2dyb3VwX25lZWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkxNS17XG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5MTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExKVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTE3LVx0aWYgKG5kZXYtXHUwMDNlaWVlZTgwMjExX3B0cilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MTktI2VuZGlmXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5MjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX1dJUkVMRVNTX0VYVClcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkyMS1cdGlmIChuZGV2LVx1MDAzZXdpcmVsZXNzX2hhbmRsZXJzKVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkyNi1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjkyNzojZWxzZSAvKiBDT05GSUdfU1lTRlMgKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkyOC0jZGVmaW5lIG5ldF9jbGFzc19ncm91cHNcdE5VTExcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjkyOTojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MzAtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5MzE6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTMyLSNkZWZpbmUgdG9fcnhfcXVldWVfYXR0cihfYXR0cikgXFxcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz05NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgcnhfcXVldWVfc3lzZnNfb3BzID0ge1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTk2NS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjk2NjojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTY3LXN0YXRpYyBzc2l6ZV90IHNob3dfcnBzX21hcChzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpxdWV1ZSwgY2hhciAqYnVmKVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTExNDE9c3RhdGljIHN0cnVjdCByeF9xdWV1ZV9hdHRyaWJ1dGUgcnBzX2Rldl9mbG93X3RhYmxlX2NudF9hdHRyaWJ1dGUgX19yb19hZnRlcl9pbml0XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTE0My1cdFx0IHNob3dfcnBzX2Rldl9mbG93X3RhYmxlX2NudCwgc3RvcmVfcnBzX2Rldl9mbG93X3RhYmxlX2NudCk7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMTQ0OiNlbmRpZiAvKiBDT05GSUdfUlBTICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMTQ1LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTE0Nj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcnhfcXVldWVfZGVmYXVsdF9hdHRyc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjExNDc6I2lmZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExNDgtXHRcdTAwMjZycHNfY3B1c19hdHRyaWJ1dGUuYXR0cixcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMTU1PXN0YXRpYyB2b2lkIHJ4X3F1ZXVlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTE1Ny1cdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnF1ZXVlID0gdG9fcnhfcXVldWUoa29iaik7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMTU4OiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMTU5LVx0cnBzX3RhZ19wdHIgdGFnX3B0cjtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMjA0PXN0YXRpYyBpbnQgcnhfcXVldWVfZGVmYXVsdF9tYXNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTIwNi17XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMjA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19SUFMpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19TWVNDVEwpXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMjA4LVx0c3RydWN0IGNwdW1hc2sgKnJwc19kZWZhdWx0X21hc2s7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTI4ND1zdGF0aWMgaW50IHJ4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5kZXgsIGt1aWRfdCBrdWlkLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMDAtfVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTMwMTojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzAyLVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEzMDQ9bmV0X3J4X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2xkX251bSwgaW50IG5ld19udW0pXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzA1LXtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzMDY6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTMwNy1cdGludCBpO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMDktXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzEwOiNpZm5kZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTMxMS1cdGlmICghZGV2LVx1MDAzZXN5c2ZzX3J4X3F1ZXVlX2dyb3VwKVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEzNDA9c3RhdGljIGludCBuZXRfcnhfcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBudW0sXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM0Mi17XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzQzOiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDQtXHRpbnQgZXJyb3IgPSAwO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDYtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzQ3OiNpZm5kZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM0OC1cdGlmICghZGV2LVx1MDAzZXN5c2ZzX3J4X3F1ZXVlX2dyb3VwKVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNjItXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzYzOiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNjQtLypcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xNDMxPXN0YXRpYyBzc2l6ZV90IHRyYWZmaWNfY2xhc3Nfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDY3LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTQ2ODojaWZkZWYgQ09ORklHX1hQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTQ2OS1zdGF0aWMgc3NpemVfdCB0eF9tYXhyYXRlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTUyMz1zdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZV9hdHRyaWJ1dGUgcXVldWVfdHJhZmZpY19jbGFzcyBfX3JvX2FmdGVyX2luaXRcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTI1LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTUyNjojaWZkZWYgQ09ORklHX0JRTFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTUyNy0vKlxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTE3MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZHFsX2dyb3VwID0ge307XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxNzAzOiNlbmRpZiAvKiBDT05GSUdfQlFMICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNzA0LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTcwNTojaWZkZWYgQ09ORklHX1hQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTcwNi1zdGF0aWMgc3NpemVfdCB4cHNfcXVldWVfc2hvdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTkwMz1zdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZV9hdHRyaWJ1dGUgeHBzX3J4cXNfYXR0cmlidXRlIF9fcm9fYWZ0ZXJfaW5pdFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTkwNC1cdD0gX19BVFRSX1JXKHhwc19yeHFzKTtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE5MDU6I2VuZGlmIC8qIENPTkZJR19YUFMgKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE5MDYtXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xOTA3PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpuZXRkZXZfcXVldWVfZGVmYXVsdF9hdHRyc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xOTA5LVx0XHUwMDI2cXVldWVfdHJhZmZpY19jbGFzcy5hdHRyLFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTkxMDojaWZkZWYgQ09ORklHX1hQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTkxMS1cdFx1MDAyNnhwc19jcHVzX2F0dHJpYnV0ZS5hdHRyLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTE5NTQ9c3RhdGljIGJvb2wgbmV0ZGV2X3VzZXNfYnFsKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTk1OC1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE5NTk6XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQlFMKTtcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE5NjAtfVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIwMTY9c3RhdGljIGludCB0eF9xdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBpbmRleCxcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDMxLX1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIwMzI6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzMy1cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMDM1PW5ldGRldl9xdWV1ZV91cGRhdGVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG9sZF9udW0sIGludCBuZXdfbnVtKVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzNi17XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDM3OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwMzgtXHRpbnQgaTtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDcxLVx0cmV0dXJuIDA7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDcyOiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwNzMtfVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIwNzU9c3RhdGljIGludCBuZXRfdHhfcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBudW0sXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA3Ny17XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDc4OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwNzktXHRpbnQgZXJyb3IgPSAwO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwOTAtXHRyZXR1cm4gMDtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIwOTE6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA5Mi19XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IHJlZ2lzdGVyX3F1ZXVlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA5Ny1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIwOTg6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA5OS1cdGRldi1cdTAwM2VxdWV1ZXNfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoXCYjMzQ7cXVldWVzXCYjMzQ7LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxMjEtXHRuZXRfcnhfcXVldWVfdXBkYXRlX2tvYmplY3RzKGRldiwgcnhxLCAwKTtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxMjI6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEyMy1cdGtzZXRfdW5yZWdpc3RlcihkZXYtXHUwMDNlcXVldWVzX2tzZXQpO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxMjg9c3RhdGljIGludCBxdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGt1aWRfdCBrdWlkLCBrZ2lkX3Qga2dpZClcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTMxLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjEzMjojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTMzLVx0aWYgKG5kZXYtXHUwMDNlcXVldWVzX2tzZXQpIHtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMTUzPXN0YXRpYyB2b2lkIHJlbW92ZV9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNTYtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTU3OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNTgtXHRyZWFsX3J4ID0gZGV2LVx1MDAzZXJlYWxfbnVtX3J4X3F1ZXVlcztcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTY4LVx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNjk6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE3MC1cdGtzZXRfdW5yZWdpc3RlcihkZXYtXHUwMDNlcXVldWVzX2tzZXQpO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxODE9c3RhdGljIHN0cnVjdCBuc19jb21tb24gKm5ldF9ncmFiX2N1cnJlbnRfbnModm9pZClcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTgzLVx0c3RydWN0IG5ldCAqbmV0ID0gY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucztcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxODQ6I2lmZGVmIENPTkZJR19ORVRfTlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxODUtXHRpZiAobmV0KVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIyNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBuZXRfY2xhc3MgPSB7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjI3Mi1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIyNzM6I2lmZGVmIENPTkZJR19PRlxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjI3NC1zdGF0aWMgaW50IG9mX2Rldl9ub2RlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMzI2PWludCBuZXRkZXZfcmVnaXN0ZXJfa29iamVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzM4LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjMzOTojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzQwLVx0LyogQWxsb3cgZm9yIGEgZGV2aWNlIHNwZWNpZmljIGdyb3VwICovXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjM0OC1cdFx0Kmdyb3VwcyYjNDM7JiM0MzsgPSBcdTAwMjZ3aXJlbGVzc19ncm91cDtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIzNDk6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjM1MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBDaGFuZ2VzIGluIE5ldC1TeXNmcy5jKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBhZGRpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgd2UmIzM5O3ZlIGp1c3QgaW1wbGVtZW50ZWQuIEZpcnN0LCBsZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGZ1bmN0aW9ucyBpbiBxdWVzdGlvbjogYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AsIGBzcGVlZF9zaG93YCwgYW5kIGBkdXBsZXhfc2hvd2AuIEkmIzM5O2xsIGNvbmZpcm0gdGhlaXIgc2NvcGUsIHNvIEkga25vdyB3aGVyZSB0aGV5IGxpdmUgd2l0aGluIHRoZSBuZXQgc3Vic3lzdGVtLgoKQWxyaWdodCwgYSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYWxsIHRocmVlIGZ1bmN0aW9ucywgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AsIGBzcGVlZF9zaG93YCwgYW5kIGBkdXBsZXhfc2hvd2AsIGFyZSBpbmRlZWQgc3RhdGljIHdpdGhpbiBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLiBOb3cgdGhhdCBJIGtub3cgdGhlIHNjb3BlIG9mIHRoZWlyIGRlZmluaXRpb24gSSBjYW4gcHJvY2VlZCB0byBjb25zaWRlciBob3cgdGhleSBmaXQgd2l0aGluIHRoZSBjb2RlLgoKR2l2ZW4gdGhhdCB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aGV5JiMzOTtyZSBiZWluZyAqY2FsbGVkKiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYG5ldC1zeXNmcy5jYCwgZm9jdXNpbmcgb24gdGhlIHZpY2luaXR5IG9mIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCwgdG8gZmluZCBhbnkgbG9jYWwgdXNhZ2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIHB1cnBvc2UgYW5kIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbSYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0LXN5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3MDpcdFx0cnRubF91bmxvY2soKTtcbiAzNzE6XHRcdHJldHVybiByZXQ7XG4gMzcyOlx0fVxuIDM3MzpcdHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTtcbiAzNzQ6XHRcbiAzNzU6XHRzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiAzNzY6XHRcdFx0XHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4gMzc3Olx0e1xuIDM3ODpcdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuIDM3OTpcdFx0aW50IHJldDtcbiAzODA6XHRcbiAzODE6XHRcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4gMzgyOlx0XHRpZiAocmV0KVxuIDM4MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDM4NDpcdFxuIDM4NTpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4gMzg2Olx0fVxuIDM4NzpcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XG4gMzg4Olx0XG4gMzg5Olx0c3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIDM5MDpcdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4gMzkxOlx0e1xuIDM5MjpcdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuIDM5MzpcdFx0Y29uc3QgY2hhciAqZHVwbGV4O1xuIDM5NDpcdFx0aW50IHJldDtcbiAzOTU6XHRcbiAzOTY6XHRcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4gMzk3Olx0XHRpZiAocmV0KVxuIDM5ODpcdFx0XHRyZXR1cm4gcmV0O1xuIDM5OTpcdFxuIDQwMDpcdFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcbiA0MDE6XHRcdGNhc2UgRFVQTEVYX0hBTEY6XG4gNDAyOlx0XHRcdGR1cGxleCA9IFwmIzM0O2hhbGZcJiMzNDs7XG4gNDAzOlx0XHRcdGJyZWFrO1xuIDQwNDpcdFx0Y2FzZSBEVVBMRVhfRlVMTDpcbiA0MDU6XHRcdFx0ZHVwbGV4ID0gXCYjMzQ7ZnVsbFwmIzM0OztcbiA0MDY6XHRcdFx0YnJlYWs7XG4gNDA3Olx0XHRkZWZhdWx0OlxuIDQwODpcdFx0XHRkdXBsZXggPSBcJiMzNDt1bmtub3duXCYjMzQ7O1xuIDQwOTpcdFx0XHRicmVhaztcbiA0MTA6XHRcdH1cbiA0MTE6XHRcbiA0MTI6XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXNcXG5cJiMzNDssIGR1cGxleCk7XG4gNDEzOlx0fVxuIDQxNDpcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyhkdXBsZXgpO1xuIDQxNTpcdFxuIDQxNjpcdHN0YXRpYyBzc2l6ZV90IHRlc3Rpbmdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gNDE3Olx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4gNDE4Olx0e1xuIDQxOTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbiA0MjA6XHRcbiA0MjE6XHRcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gNDIyOlx0XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgISFuZXRpZl90ZXN0aW5nKG5ldGRldikpO1xuIDQyMzpcdFxuIDQyNDpcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDI1Olx0fVxuIDQyNjpcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyh0ZXN0aW5nKTtcbiA0Mjc6XHRcbiA0Mjg6XHRzdGF0aWMgc3NpemVfdCBkb3JtYW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIDQyOTpcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk4NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkRlbHZpbmcgaW50byBOZXR3b3JrIERldmljZSBMb2NraW5nIE1lY2hhbmlzbXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBuZXR3b3JrIGRldmljZSBvcGVyYXRpb25zIGFyZSBzeW5jaHJvbml6ZWQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbiBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb25zIGZvciBgbmV0ZGV2X25lZWRfb3BzX2xvY2tgLCBgbmV0ZGV2X2xvY2tfb3BzYCwgYW5kIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBsb2NraW5nIGlzIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBvcGVyYXRpb25zIHN0cnVjdHVyZXMsIGFuZCBob3cgbGluayBzZXR0aW5ncyBhcmUgYWNjZXNzZWQuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGlzIGNyaXRpY2FsIGZvciB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBvciBkZXNpZ25pbmcuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgaGVyZSBpcyBwYXJhbW91bnQ7IGl0IGRpcmVjdGx5IGltcGFjdHMgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIGEgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIG1hbmlmZXN0IGluIHNvbWUgcmVhbGx5IHVnbHkgd2F5cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIGNvbnRyb2wgZmxvdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0zMjY9X19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI3LVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjMyODppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0zMjktXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM3MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEludGVyZmFjZSBMaW5rIFNldHRpbmdzKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHdoZXJlIEkmIzM5O2QgKmV4cGVjdCogdG8gZmluZCBpdCwgaXMgbGlrZWx5IHdpdGhpbiB0aGUgYG5ldC9ldGh0b29sL2AgZGlyZWN0b3J5LCBvciBwb3RlbnRpYWxseSBzb21ld2hlcmUgaW4gdGhlIGNvcmUgbmV0d29yayBpbnRlcmZhY2UgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgc3RhcnRpbmcgdGhlcmUsIHRvIGdldCB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGlmX2dldF9saW5rX2tzZXR0aW5nc1xcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jPTI0Mj1zdGF0aWMgdm9pZCBnZXRfZGV2aWNlX3N0YXRlKHN0cnVjdCBsZWRfbmV0ZGV2X2RhdGEgKnRyaWdnZXJfZGF0YSlcbi0tXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jLTI0Ny1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmM6MjQ4Olx0aWYgKG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyh0cmlnZ2VyX2RhdGEtXHUwMDNlbmV0X2RldiwgXHUwMDI2Y21kKSlcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMtMjQ5LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz03OTU9c3RhdGljIGludCBib25kX3VwZGF0ZV9zcGVlZF9kdXBsZXgoc3RydWN0IHNsYXZlICpzbGF2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTgwMC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6ODAxOlx0cmVzID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHNsYXZlX2RldiwgXHUwMDI2ZWNtZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTgwMi1cdGlmIChyZXMgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0zMDg1PXN0YXRpYyB2b2lkIF9fdGVhbV9wb3J0X2NoYW5nZV9zZW5kKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsIGJvb2wgbGlua3VwKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA5NC1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA5NTpcdFx0ZXJyID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHBvcnQtXHUwMDNlZGV2LCBcdTAwMjZlY21kKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA5Ni1cdFx0aWYgKCFlcnIpIHtcbi0tXG5kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jPTExOT1pbnQgZmNvZV9saW5rX3NwZWVkX3VwZGF0ZShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KVxuLS1cbmRyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmMtMTIzLVxuZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYzoxMjQ6XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmVjbWQpKSB7XG5kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jLTEyNS1cdFx0bHBvcnQtXHUwMDNlbGlua19zdXBwb3J0ZWRfc3BlZWRzIFx1MDAyNj0gfihGQ19QT1JUU1BFRURfMUdCSVQgIHxcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0zMjY9X19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI3LVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjMyODppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0zMjktXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpO1xuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYz0zNj1zdGF0aWMgaW50IHBvcnRfY29zdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy0zOS1cbm5ldC9icmlkZ2UvYnJfaWYuYzo0MDpcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2ZWNtZCkpIHtcbm5ldC9icmlkZ2UvYnJfaWYuYy00MS1cdFx0c3dpdGNoIChlY21kLmJhc2Uuc3BlZWQpIHtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMjE9c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE1Mi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE1MzpcdFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTU0LVx0XHRcdHJldCA9IDA7XG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz00Mjk9c3RydWN0IGV0aHRvb2xfbGlua191c2V0dGluZ3Mge1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtNDM4LS8qIEludGVybmFsIGtlcm5lbCBoZWxwZXIgdG8gcXVlcnkgYSBkZXZpY2UgZXRodG9vbF9saW5rX3NldHRpbmdzLiAqL1xubmV0L2V0aHRvb2wvaW9jdGwuYzo0Mzk6aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NDAtXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz00NTY9aW50IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2My1cdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2V0aHRvb2wvaW9jdGwuYzo0NjQ6XHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2NS1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tLVxubmV0L2V0aHRvb2wvbGlua2luZm8uYz0yND1zdGF0aWMgaW50IGxpbmtpbmZvX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuLS1cbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMzYtXHRcdHJldHVybiByZXQ7XG5uZXQvZXRodG9vbC9saW5raW5mby5jOjM3Olx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2Vrc2V0dGluZ3MpO1xubmV0L2V0aHRvb2wvbGlua2luZm8uYy0zOC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2V0aHRvb2wvbGlua2luZm8uYz05OD1ldGhubF9zZXRfbGlua2luZm8oc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTEwNi1cbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM6MTA3Olx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2a3NldHRpbmdzKTtcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMTA4LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jPTI4PXN0YXRpYyBpbnQgbGlua21vZGVzX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuLS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTQxLVxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM6NDI6XHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcdTAwMjZkYXRhLVx1MDAzZWtzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy00My1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYz0zMTk9ZXRobmxfc2V0X2xpbmttb2RlcyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTMyNi1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jOjMyNzpcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmtzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy0zMjgtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L3NjaGVkL3NjaF9jYnMuYz0zMjM9c3RhdGljIHZvaWQgY2JzX3NldF9wb3J0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNic19zY2hlZF9kYXRhICpxKVxuLS1cbm5ldC9zY2hlZC9zY2hfY2JzLmMtMzI5LVxubmV0L3NjaGVkL3NjaF9jYnMuYzozMzA6XHRlcnIgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcdTAwMjZlY21kKTtcbm5ldC9zY2hlZC9zY2hfY2JzLmMtMzMxLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEyOTQ9c3RhdGljIHZvaWQgdGFwcmlvX3NldF9waWNvc19wZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMwMi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTMwMzpcdGVyciA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmVjbWQpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzA0LVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MDgKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogNTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IGBuZXQvY29yZS9uZXQtc3lzZnMuY2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBoZWxwZXIgYW5kIHRoZSByZWxhdGVkIHN5c2ZzIGNhbGxiYWNrcyBmb3IgYHNwZWVkYCBhbmQgYGR1cGxleGAgYXR0cmlidXRlcyAoYHNwZWVkX3Nob3dgLCBgZHVwbGV4X3Nob3dgKS4gVGhlc2UgYXR0cmlidXRlcyBhcmUgY3JlYXRlZCB1c2luZyBgREVWSUNFX0FUVFJfUk9gLgoKRmlyc3QsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBzeXNmcyBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gdGhlIGxpbmsmIzM5O3Mgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5ncy4gVGhlIGNvZGUgcmVmYWN0b3JzIGxvY2tpbmcgbWVjaGFuaXNtcyAoYHN5c2ZzX3J0bmxfbG9ja2AgYW5kIGBuZXRkZXZfbG9ja19vcHNgKSBhbmQsIGNydWNpYWxseSwgY2FsbHMgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2Agd2hpbGUgYWxzbyBkb2luZyBjaGVja3MgZm9yIGBkZXZfaXNhbGl2ZWAgYW5kIGBuZXRpZl9ydW5uaW5nYC4gVGhpcyBoaXRzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBhIGNyaXRpY2FsIGNvcmUgc3Vic3lzdGVtIChuZXR3b3JraW5nIHZpYSBzeXNmcykuIFNvLCBgV29ydGhGdXp6aW5nID0gVHJ1ZWAuCgpOZXh0LCB0aGUgYEZvY3VzU3ltYm9sc2A6IHdoYXQgZG8gd2UgbmVlZCB0byB0YXJnZXQ/IE9idmlvdXNseSwgdGhlIGNvcmUgZnVuY3Rpb25zOiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCwgYHNwZWVkX3Nob3dgLCBhbmQgYGR1cGxleF9zaG93YC4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMgcGF0Y2guCgpGaW5hbGx5LCB3aGF0IGFyZSB0aGUgYEVuYWJsZUNvbmZpZ3NgPyBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBjb21waWxlZC4gVGhlIGZpbGUgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCBpcyBjbGVhcmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVQ9eWAuIFRoZSBzeXNmcyBhdHRyaWJ1dGVzIHRoZW1zZWx2ZXMgYXJlIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfU1lTRlNgLiBUaGVyZWZvcmUsIHdlIG11c3QgZW5hYmxlIGBORVRgIGFuZCBgU1lTRlNgLiBgQ09ORklHX0lORVRgIG1pZ2h0IGJlIHR5cGljYWwsIGJ1dCB3ZSBkb24mIzM5O3QgbmVlZCBpdC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AgdG8gYmUgc3VyZS4gWWVwLCB0aGUgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgIGFyZSBpbmRlZWQgY29uZGl0aW9uYWwgb24gYENPTkZJR19TWVNGU2AuCgpTbywgdG8gc3VtbWFyaXplOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgVHJ1ZWAgKGNvcmUgbmV0IHN5c2ZzIGF0dHJpYnV0ZXMsIGhpdHMgbG9ja2luZywgY3J1Y2lhbCBjaGVja3MpCiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBleHBsYW5hdGlvbiBwcm92aWRlZC4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssICYjMzQ7c3BlZWRfc2hvdyYjMzQ7LCAmIzM0O2R1cGxleF9zaG93JiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7TkVUJiMzNDssICYjMzQ7U1lTRlMmIzM0O11gCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3NwZWVkX3Nob3cmIzM0OywKICAgICYjMzQ7ZHVwbGV4X3Nob3cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgaW4gbmV0L2NvcmUvbmV0LXN5c2ZzLmMgdG8gdXNlIGEgbmV3IGxvY2tpbmcgaGVscGVyIHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpLCBtb2RpZnlpbmcgaG93IHJ0bmwgYW5kIG5ldGRldiBvcHMgbG9ja3MgYXJlIGFjcXVpcmVkIGFuZCBjaGVja2VkLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHN5c2ZzIGNvZGUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvc3lzL2NsYXNzL25ldC9cdTAwM2NpZmFjZVx1MDAzZS9zcGVlZCBhbmQgL3N5cy9jbGFzcy9uZXQvXHUwMDNjaWZhY2VcdTAwM2UvZHVwbGV4LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNmc19nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7c3BlZWRfc2hvdyYjMzQ7LAogICAgJiMzNDtkdXBsZXhfc2hvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzIHNwZWVkIGFuZCBkdXBsZXggYXR0cmlidXRlcyBpbiBuZXQvY29yZS9uZXQtc3lzZnMuYyB0byB1c2UgYSBuZXcgbG9ja2luZyBoZWxwZXIgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCksIG1vZGlmeWluZyBob3cgcnRubCBhbmQgbmV0ZGV2IG9wcyBsb2NrcyBhcmUgYWNxdWlyZWQgYW5kIGNoZWNrZWQuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgc3lzZnMgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9zeXMvY2xhc3MvbmV0L1x1MDAzY2lmYWNlXHUwMDNlL3NwZWVkIGFuZCAvc3lzL2NsYXNzL25ldC9cdTAwM2NpZmFjZVx1MDAzZS9kdXBsZXguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzIHNwZWVkIGFuZCBkdXBsZXggYXR0cmlidXRlcyAoYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgKSBieSBpbnRyb2R1Y2luZyBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKClgIHRvIG9wdGltaXplIGxvY2tpbmcgKGF2b2lkaW5nIHVubmVjZXNzYXJ5IFJUTkwgbG9ja2luZyB3aGVuIG9ubHkgbmV0ZGV2IG9wcyBsb2NrIGlzIHJlcXVpcmVkKS5cblxuVGhlIHN0YWNrIHZhcmlhYmxlIGBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWRgIGlzIHBhc3NlZCB0byBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKClgLCB3aGljaCBkZWxlZ2F0ZXMgdG8gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYC4gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggYG1lbXNldCguLi4sIDAsIHNpemVvZigqY21kKSlgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBzaG93IGZ1bmN0aW9ucyBvbmx5IGFjY2VzcyBmaWVsZHMgb2YgYGNtZGAgaWYgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCByZXR1cm5zIHN1Y2Nlc3MgKDApLiBPdXRwdXQgaXMgZm9ybWF0dGVkIGludG8gc3lzZnMgc3RyaW5nIGJ1ZmZlcnMgdXNpbmcgYHN5c2ZzX2VtaXQoKWAsIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBkaXNjbG9zdXJlLlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbG9ja2luZyByZWdyZXNzaW9ucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzU0MjNmNzQ4ZGQ1ZTRjZDI3MWJmMDAzODZhY2YxNzdmOTBiZjdhYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjA6MTA6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDM1MjE3M2RmNzU3ODUuLmZhNzkwZTQ0MjU3MDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw0OSBAQCBzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKJiM0MzsJYm9vbCBuZWVkX3J0bmw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzCiYjNDM7CSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWlmICghbmV0ZGV2LSZndDtldGh0b29sX29wcy0mZ3Q7Z2V0X2xpbmtfa3NldHRpbmdzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8CiYjNDM7CQkgICAgKG5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsKJiM0MzsJCSAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7CiYjNDM7CWlmIChuZWVkX3J0bmwpIHsKJiM0MzsJCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CW5ldGRldl9sb2NrX29wcyhuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSAtRUlOVkFMOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQlpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpCiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzO3VubG9jazoKJiM0MzsJbmV0ZGV2X3VubG9ja19vcHMobmV0ZGV2KTsKJiM0MzsJaWYgKG5lZWRfcnRubCkKJiM0MzsJCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJiMzOTtzICovCiBzdGF0aWMgc3NpemVfdCBuZXRkZXZfc2hvdyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLApAQCAtMzMyLDcwICYjNDM7Mzc1LDQxIEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTsKIHN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQkvKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHMKLQkgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuCi0JICovCi0JaWYgKCFuZXRkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfbGlua19rc2V0dGluZ3MpCi0JCXJldHVybiByZXQ7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDsKJiM0MzsJaW50IHJldDsKIAotCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwomIzQzOwlyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCAmYW1wO2NtZCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7Ci0KLQkJaWYgKCFfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgJmFtcDtjbWQpKQotCQkJcmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTsKLQl9Ci0JcnRubF91bmxvY2soKTsKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7CiAKIHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwcwotCSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KLQkgKi8KLQlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKLQkJcmV0dXJuIHJldDsKJiM0MzsJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kOwomIzQzOwljb25zdCBjaGFyICpkdXBsZXg7CiYjNDM7CWludCByZXQ7CiAKLQlyZXQgPSBzeXNmc19ydG5sX2xvY2soJmFtcDtkZXYtJmd0O2tvYmosICZhbXA7YXR0ci0mZ3Q7YXR0ciwgbmV0ZGV2KTsKJiM0MzsJcmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgJmFtcDtjbWQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSAtRUlOVkFMOwotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kOwotCi0JCWlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7Y21kKSkgewotCQkJY29uc3QgY2hhciAqZHVwbGV4OwotCi0JCQlzd2l0Y2ggKGNtZC5iYXNlLmR1cGxleCkgewotCQkJY2FzZSBEVVBMRVhfSEFMRjoKLQkJCQlkdXBsZXggPSAmIzM0O2hhbGYmIzM0OzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRFVQTEVYX0ZVTEw6Ci0JCQkJZHVwbGV4ID0gJiMzNDtmdWxsJiMzNDs7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWR1cGxleCA9ICYjMzQ7dW5rbm93biYjMzQ7OwotCQkJCWJyZWFrOwotCQkJfQotCQkJcmV0ID0gc3lzZnNfZW1pdChidWYsICYjMzQ7JXNcbiYjMzQ7LCBkdXBsZXgpOwotCQl9CiYjNDM7CXN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7CiYjNDM7CWNhc2UgRFVQTEVYX0hBTEY6CiYjNDM7CQlkdXBsZXggPSAmIzM0O2hhbGYmIzM0OzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIERVUExFWF9GVUxMOgomIzQzOwkJZHVwbGV4ID0gJiMzNDtmdWxsJiMzNDs7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWR1cGxleCA9ICYjMzQ7dW5rbm93biYjMzQ7OwomIzQzOwkJYnJlYWs7CiAJfQotCXJ0bmxfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVzXG4mIzM0OywgZHVwbGV4KTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhkdXBsZXgpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBJbnRlcmZhY2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbW9kaWZpY2F0aW9ucyBhbmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIHRvdWNoZXMgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byByZXZvbHZlIGFyb3VuZCByZWZhY3RvcmluZyBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2Agd2l0aGluIHRoZSBzeXNmcyBpbnRlcmZhY2UgYnkgaW50cm9kdWNpbmcgdGhpcyBuZXcgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AgZnVuY3Rpb24uCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBhbmQgYF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3NgLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGUgYGNtZGAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgc3VzcGVjdCBgY21kYCBob2xkcyB0aGUgc3BlY2lmaWMgRVRIVE9PTCBjb21tYW5kIGJlaW5nIGV4ZWN1dGVkLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBsaWZlY3ljbGUgaXMga2V5LgoKVG8gc3BlZWQgdGhpbmdzIHVwLCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgbG9jYXRlIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24gb2YgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGVzc2VudGlhbCBjb250ZXh0IEkgbmVlZCB0byBwcm9jZWVkIHdpdGggdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYz0yNDI9c3RhdGljIHZvaWQgZ2V0X2RldmljZV9zdGF0ZShzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEpXG4tLVxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYy0yNDctXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jOjI0ODpcdGlmIChuZXRpZl9nZXRfbGlua19rc2V0dGluZ3ModHJpZ2dlcl9kYXRhLVx1MDAzZW5ldF9kZXYsIFx1MDAyNmNtZCkpXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jLTI0OS1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Nzk1PXN0YXRpYyBpbnQgYm9uZF91cGRhdGVfc3BlZWRfZHVwbGV4KHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy04MDAtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjgwMTpcdHJlcyA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzbGF2ZV9kZXYsIFx1MDAyNmVjbWQpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy04MDItXHRpZiAocmVzIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzA4NT1zdGF0aWMgdm9pZCBfX3RlYW1fcG9ydF9jaGFuZ2Vfc2VuZChzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0LCBib29sIGxpbmt1cClcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwOTQtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwOTU6XHRcdGVyciA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhwb3J0LVx1MDAzZWRldiwgXHUwMDI2ZWNtZCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwOTYtXHRcdGlmICghZXJyKSB7XG4tLVxuZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYz0xMTk9aW50IGZjb2VfbGlua19zcGVlZF91cGRhdGUoc3RydWN0IGZjX2xwb3J0ICpscG9ydClcbi0tXG5kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jLTEyMy1cbmRyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmM6MTI0Olx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZlY21kKSkge1xuZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYy0xMjUtXHRcdGxwb3J0LVx1MDAzZWxpbmtfc3VwcG9ydGVkX3NwZWVkcyBcdTAwMjY9IH4oRkNfUE9SVFNQRUVEXzFHQklUICB8XG4tLVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg9MzI2PV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTMyNy1cdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncyk7XG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDozMjg6aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI5LVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmM9MzY9c3RhdGljIGludCBwb3J0X2Nvc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzktXG5uZXQvYnJpZGdlL2JyX2lmLmM6NDA6XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmVjbWQpKSB7XG5uZXQvYnJpZGdlL2JyX2lmLmMtNDEtXHRcdHN3aXRjaCAoZWNtZC5iYXNlLnNwZWVkKSB7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTIxPXN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMjktXHQvKlxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTMwOlx0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMS1cdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTItXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxNTM6XHRcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKSlcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE1NC1cdFx0XHRyZXQgPSAwO1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9NDI5PXN0cnVjdCBldGh0b29sX2xpbmtfdXNldHRpbmdzIHtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQzOC0vKiBJbnRlcm5hbCBrZXJuZWwgaGVscGVyIHRvIHF1ZXJ5IGEgZGV2aWNlIGV0aHRvb2xfbGlua19zZXR0aW5ncy4gKi9cbm5ldC9ldGh0b29sL2lvY3RsLmM6NDM5OmludCBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDQwLVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtNDUyLX1cbm5ldC9ldGh0b29sL2lvY3RsLmM6NDUzOkVYUE9SVF9TWU1CT0wobmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKTtcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDU0LVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9NDU2PWludCBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy00NjMtXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDY0Olx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xubmV0L2V0aHRvb2wvaW9jdGwuYy00NjUtXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuLS1cbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM9MjQ9c3RhdGljIGludCBsaW5raW5mb19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbi0tXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTM2LVx0XHRyZXR1cm4gcmV0O1xubmV0L2V0aHRvb2wvbGlua2luZm8uYzozNzpcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmRhdGEtXHUwMDNla3NldHRpbmdzKTtcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMzgtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM9OTg9ZXRobmxfc2V0X2xpbmtpbmZvKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvbGlua2luZm8uYy0xMDYtXG5uZXQvZXRodG9vbC9saW5raW5mby5jOjEwNzpcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmtzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9saW5raW5mby5jLTEwOC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYz0yOD1zdGF0aWMgaW50IGxpbmttb2Rlc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbi0tXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy00MS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jOjQyOlx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2Vrc2V0dGluZ3MpO1xubmV0L2V0aHRvb2wvbGlua21vZGVzLmMtNDMtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM9MzE5PWV0aG5sX3NldF9saW5rbW9kZXMoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy0zMjYtXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYzozMjc6XHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcdTAwMjZrc2V0dGluZ3MpO1xubmV0L2V0aHRvb2wvbGlua21vZGVzLmMtMzI4LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9zY2hlZC9zY2hfY2JzLmM9MzIzPXN0YXRpYyB2b2lkIGNic19zZXRfcG9ydF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYnNfc2NoZWRfZGF0YSAqcSlcbi0tXG5uZXQvc2NoZWQvc2NoX2Nicy5jLTMyOS1cbm5ldC9zY2hlZC9zY2hfY2JzLmM6MzMwOlx0ZXJyID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2ZWNtZCk7XG5uZXQvc2NoZWQvc2NoX2Nicy5jLTMzMS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMjk0PXN0YXRpYyB2b2lkIHRhcHJpb19zZXRfcGljb3NfcGVyX2J5dGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMDItXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzMDM6XHRlcnIgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcdTAwMjZlY21kKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMwNC1cdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGluIGBldGh0b29sL2lvY3RsLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhpcy4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCwgSSBuZWVkIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgY29kZSBpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AsIGFuZCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDQzOC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdHkgaXMgbGlrZWx5IGRlZmluZWQgb3IgYXQgbGVhc3Qgd2hlcmUgSSBjYW4gdHJhY2UgaXRzIHVzYWdlIHdpdGhpbiB0aGUgaW9jdGwgZnJhbWV3b3JrLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIGludGVyZmFjZSBhbmQgaG93IGl0IHJldHJpZXZlcyB0aGUgbGluayBzZXR0aW5ncyBkYXRhLiBUaGlzJiMzOTtsbCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUgaW4gcmVsYXRpb24gdG8gdGhlIGJyb2FkZXIgRXRoZXJuZXQgZHJpdmVyIGludGVyYWN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhcm91bmQgdGhpcyBmdW5jdGlvbiBpcyBwYXJhbW91bnQgdG8gY29ycmVjdGx5IGludGVycHJldCB0aGUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDM1Olx0XHR9IGxpbmtfbW9kZXM7XG4gNDM2Olx0fTtcbiA0Mzc6XHRcbiA0Mzg6XHQvKiBJbnRlcm5hbCBrZXJuZWwgaGVscGVyIHRvIHF1ZXJ5IGEgZGV2aWNlIGV0aHRvb2xfbGlua19zZXR0aW5ncy4gKi9cbiA0Mzk6XHRpbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gNDQwOlx0XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXG4gNDQxOlx0e1xuIDQ0MjpcdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzX2NvbXBhdChkZXYpO1xuIDQ0MzpcdFxuIDQ0NDpcdFx0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuIDQ0NTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gNDQ2Olx0XG4gNDQ3Olx0XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4gNDQ4Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQ0OTpcdFxuIDQ1MDpcdFx0bWVtc2V0KGxpbmtfa3NldHRpbmdzLCAwLCBzaXplb2YoKmxpbmtfa3NldHRpbmdzKSk7XG4gNDUxOlx0XHRyZXR1cm4gZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncyhkZXYsIGxpbmtfa3NldHRpbmdzKTtcbiA0NTI6XHR9XG4gNDUzOlx0RVhQT1JUX1NZTUJPTChuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MpO1xuIDQ1NDpcdFxuIDQ1NTpcdC8qIENvbnZlbmllbmNlIGhlbHBlciBmb3IgY2FsbGVycyB0aGF0IGhvbGQgb25seSBydG5sX2xvY2soKS4gKi9cbiA0NTY6XHRpbnQgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDQ1NzpcdFx0XHRcdFx0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncylcbiA0NTg6XHR7XG4gNDU5Olx0XHRpbnQgcmV0O1xuIDQ2MDpcdFxuIDQ2MTpcdFx0QVNTRVJUX1JUTkwoKTtcbiA0NjI6XHRcbiA0NjM6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuIDQ2NDpcdFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xuIDQ2NTpcdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiA0NjY6XHRcdHJldHVybiByZXQ7XG4gNDY3Olx0fVxuIDQ2ODpcdEVYUE9SVF9TWU1CT0woX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyk7XG4gNDY5Olx0XG4gNDcwOlx0LyogY29udmVydCBldGh0b29sX2xpbmtfdXNldHRpbmdzIGluIHVzZXIgc3BhY2UgdG8gYSBrZXJuZWwgaW50ZXJuYWxcbiA0NzE6XHQgKiBldGh0b29sX2xpbmtfa3NldHRpbmdzLiByZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBlcnJvci5cbiA0NzI6XHQgKi9cbiA0NzM6XHRzdGF0aWMgaW50IGxvYWRfbGlua19rc2V0dGluZ3NfZnJvbV91c2VyKHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICp0byxcbiA0NzQ6XHRcdFx0XHRcdFx0IGNvbnN0IHZvaWQgX191c2VyICpmcm9tKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzE1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE5ldHdvcmsgSW50ZXJmYWNlIExpbmsgU2V0dGluZ3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgcmV0cmlldmluZyBhbmQgaGFuZGxpbmcgbGluayBjb25maWd1cmF0aW9uLiBGaXJzdCwgdGhlIGZ1bmN0aW9uIHplcm9lcyBvdXQgdGhlIGBsaW5rX2tzZXR0aW5nc2Agc3RydWN0dXJlIHVzaW5nIGBtZW1zZXRgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBlbnN1cmluZyB3ZSBzdGFydCB3aXRoIGEgY2xlYW4gc2xhdGUgYmVmb3JlIHBvcHVsYXRpbmcgdGhlIHN0cnVjdHVyZS4gVGhlbiwgdGhlIHJlYWwgYWN0aW9uIGhhcHBlbnM6IHdlIGNhbGwgdGhlIGBnZXRfbGlua19rc2V0dGluZ3NgIGZ1bmN0aW9uIHZpYSB0aGUgZGV2aWNlJiMzOTtzIGBldGh0b29sX29wc2Agc3RydWN0dXJlLiBUaGlzIGlzIGhvdyB3ZSBhY3R1YWxseSBpbnRlcmZhY2Ugd2l0aCB0aGUgbmV0d29yayBjYXJkJiMzOTtzIGRyaXZlciB0byBmZXRjaCBpdHMgY3VycmVudCBzZXR0aW5ncywgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4KCk5leHQsIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHN5c2ZzIGZyYW1ld29yay4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRocm91Z2ggYG5ldC9jb3JlL25ldC1zeXNmcy5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDExNS0xNzAgYW5kIDM3MC00MjAuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHN5c2ZzIGF0dHJpYnV0ZSBkZWZpbml0aW9ucyBhbmQgaG93IHRoZXNlIGxpbmsgc2V0dGluZ3MgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIHNlY3Rpb25zIGRlYWwgd2l0aCB0aGUgZmlsZSBjcmVhdGlvbiwgcGVybWlzc2lvbnMsIGFuZCBwb3NzaWJseSBob3cgdGhlIGF0dHJpYnV0ZXMgYXJlIHBvcHVsYXRlZCB3aXRoIHRoZSBkYXRhIHdlIGFyZSBnZXR0aW5nIGZyb20gdGhlIGRldmljZSBkcml2ZXIuIFRoaXMgc2hvdWxkIHByb3ZpZGUgY29udGV4dCBvbiBob3cgdGhlc2Ugc2V0dGluZ3MgYXJlIHJlcHJlc2VudGVkIGluIHRoZSBmaWxlc3lzdGVtIGFuZCBob3cgdGhleSBjYW4gYmUgYWNjZXNzZWQvbW9kaWZpZWQgYnkgdXNlciBzcGFjZSB0b29scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXQtc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XHRzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTtcbiAxMTY6XHRcdGRldl9wdXQobmRldik7XG4gMTE3Olx0XG4gMTE4Olx0XHRyZXR1cm4gcmV0O1xuIDExOTpcdH1cbiAxMjA6XHRcbiAxMjE6XHRzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gMTIyOlx0XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gMTIzOlx0XHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiAxMjQ6XHR7XG4gMTI1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuIDEyNjpcdFx0Ym9vbCBuZWVkX3J0bmw7XG4gMTI3Olx0XHRpbnQgcmV0O1xuIDEyODpcdFxuIDEyOTpcdFx0LypcbiAxMzA6XHRcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4gMTMxOlx0XHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4gMTMyOlx0XHQgKi9cbiAxMzM6XHRcdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbiAxMzQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTM1Olx0XG4gMTM2Olx0XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSB8fFxuIDEzNzpcdFx0XHQgICAgKG5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNlxuIDEzODpcdFx0XHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MpO1xuIDEzOTpcdFx0aWYgKG5lZWRfcnRubCkge1xuIDE0MDpcdFx0XHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbiAxNDE6XHRcdFx0aWYgKHJldClcbiAxNDI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDE0MzpcdFx0fVxuIDE0NDpcdFx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbiAxNDc6XHRcdFx0cmV0ID0gLUVOT0RFVjtcbiAxNDg6XHRcdFx0Z290byB1bmxvY2s7XG4gMTQ5Olx0XHR9XG4gMTUwOlx0XG4gMTUxOlx0XHRyZXQgPSAtRUlOVkFMO1xuIDE1MjpcdFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuIDE1MzpcdFx0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG4gMTU0Olx0XHRcdFx0cmV0ID0gMDtcbiAxNTU6XHRcdH1cbiAxNTY6XHRcbiAxNTc6XHR1bmxvY2s6XG4gMTU4Olx0XHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuIDE1OTpcdFx0aWYgKG5lZWRfcnRubClcbiAxNjA6XHRcdFx0cnRubF91bmxvY2soKTtcbiAxNjE6XHRcdHJldHVybiByZXQ7XG4gMTYyOlx0fVxuIDE2MzpcdFxuIDE2NDpcdC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCYjMzk7cyAqL1xuIDE2NTpcdHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldixcbiAxNjY6XHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLFxuIDE2NzpcdFx0XHRcdCAgIHNzaXplX3QgKCpmb3JtYXQpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICosIGNoYXIgKikpXG4gMTY4Olx0e1xuIDE2OTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7XG4gMTcwOlx0XHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4gMTcxOlx0XG4gMTcyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMTczOlx0XHRpZiAoZGV2X2lzYWxpdmUobmRldikpXG4gMTc0Olx0XHRcdHJldCA9ICgqZm9ybWF0KShuZGV2LCBidWYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDA5CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDk1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSaXNrIEFzc2Vzc21lbnQgZm9yIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgY29kZSBpcyBzYWZlIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IEtNU0FOIGlzc3Vlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd2hpY2ggaXMgd2hlcmUgS01TQU4gc2hpbmVzLgoKRmlyc3QsIEkmIzM5O2xsIHRyYWNlIHRoZSBkYXRhIGZsb3cgaW4gYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgLiBUaGUga2V5IGZ1bmN0aW9uIGlzIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLiBJdCBsb29rcyBsaWtlOgoKYGBgYwpzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQp7CglzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7CglpbnQgcmV0OwoKCXJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsICZhbXA7Y21kKTsKCWlmIChyZXQpCgkJcmV0dXJuIHJldDsKCglyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTsKfQpgYGAKCklmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybnMgMCwgdGhlbiB0aGUgY3J1Y2lhbCBwYXJ0IGhhcHBlbnMgaW4gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AuIEkgc2VlIHRoYXQgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgaW5pdGlhbGx5IGRvZXMgYG1lbXNldChsaW5rX2tzZXR0aW5ncywgMCwgc2l6ZW9mKCpsaW5rX2tzZXR0aW5ncykpYCBvbiB0aGUgYGNtZGAgc3RydWN0LiBUaGVuLCBhIGRyaXZlciYjMzk7cyBgZ2V0X2xpbmtfa3NldHRpbmdzYCBjYWxsYmFjayBwb3B1bGF0ZXMgaXQuIElmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybnMgYW4gZXJyb3IsIHRoZSBgY21kYCBzdHJ1Y3QgaXMgKm5ldmVyKiByZWFkLiBUaGlzIG1lYW5zIHRoZSBjb2RlIG9ubHkgcmVhZHMgaWYgaXQmIzM5O3MgYmVlbiBpbml0aWFsaXplZC4gYHN5c2ZzX2VtaXRgIGlzIHVzZWQgdG8gZm9ybWF0IHRoZSBgY21kYCBzdHJ1Y3QgaW50byBhIHN0cmluZyB0aGF0IHdpbGwgYmUgd3JpdHRlbiB0byBgYnVmYCwgc28gdGhhdCYjMzk7cyBva2F5LgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgZm9yIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuIFRoaXMgcGF0Y2ggYWltcyB0byBpbXByb3ZlIHRoYXQgYXNwZWN0IGJ5IHVzaW5nIFJUTkwgb25seSBpZiBuZWVkZWQgd2l0aCBgb3BfbmVlZHNfcnRubGAsIGBuZXRkZXZfbmVlZF9vcHNfbG9ja2AsIGNoZWNraW5nIGBkZXZfaXNhbGl2ZWAsIGFuZCB0aGVuIGNhbGxpbmcgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AuIFRoaXMgbG9va3MgZ29vZCwgYXZvaWRpbmcgUlROTCB3aGVuIGl0JiMzOTtzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuCgpOb3csIGNvbmNlcm5pbmcgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s6Ci0gICBUaGUgYGNtZGAgc3RydWN0IGlzIHN0YWNrLWFsbG9jYXRlZCwgd2hpY2ggaXMgZmluZSBpbiBpdHNlbGYuCi0gICBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBjYWxscyBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYC4KLSAgIEluc2lkZSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCwgdGhlIGNydWNpYWwgYG1lbXNldChsaW5rX2tzZXR0aW5ncywgMCwgc2l6ZW9mKCpsaW5rX2tzZXR0aW5ncykpYCAqZ3VhcmFudGVlcyogdGhhdCBgY21kYCBpcyB6ZXJvZWQgYmVmb3JlIGFueSBkcml2ZXIgaW50ZXJhY3Rpb24uCi0gICBJZiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCByZXR1cm5zIDAsIGBjbWRgIGlzIGZ1bGx5IHplcm9lZCBhbmQgcG9wdWxhdGVkIGJ5IHRoZSBkcml2ZXIuCi0gICBJZiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCByZXR1cm5zIGFuIGVycm9yIChub24temVybyksIGBjbWRgIGlzICpuZXZlciogcmVhZCBvciB1c2VkLCBzbyB0aGlzIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4KLSAgIGBzeXNmc19lbWl0YCBmb3JtYXRzIHRoZSB2YWx1ZSBhcyBhIHN0cmluZyBpbnRvIHRoZSBidWZmZXIsIHNvIG5vIHJhdyBrZXJuZWwgc3RydWN0IGJ5dGVzIGFyZSBleHBvc2VkLgotICAgQW55IGxvY2tpbmcgb3IgZGV2aWNlIHN0YXRlIGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uCgpMZXQgbWUgYW5hbHl6ZSB0aGUgcGF0aCBpbiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBhIGJpdCBtb3JlIGNhcmVmdWxseToKCmBgYGMKcmV0ID0gLUVJTlZBTDsKaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewoJaWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKQoJCXJldCA9IDA7Cn0KYGBgCgpJZiBgbmV0aWZfcnVubmluZyhuZXRkZXYpYCBpcyBmYWxzZSwgYHJldGAgcmVtYWlucyBgLUVJTlZBTGAuIElmIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGZhaWxzIChyZXR1cm5zIG5vbi16ZXJvKSwgYHJldGAgc3RpbGwgcmVtYWlucyBgLUVJTlZBTGAuIE9ubHkgaWYgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgKnN1Y2NlZWRzKiBkb2VzIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybiAwLiBBbmQgaW1wb3J0YW50bHksIGBjbWRgICppcyogaW5pdGlhbGl6ZWQgYnkgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AuCgpJbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMgKGBzcGVlZF9zaG93YCwgYGR1cGxleF9zaG93YCk6CmBgYGMKcmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgJmFtcDtjbWQpOwppZiAocmV0KQogICAgcmV0dXJuIHJldDsKYGBgCgpgY21kYCBpcyBvbmx5IHJlYWQgaWYgYHJldCA9PSAwYC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBhbHdheXMgaW5pdGlhbGl6ZWQgd2hlbiBpdCYjMzk7cyByZWFkLgoKKipDb25jbHVzaW9uOioqCgpObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLiBObyB1bmluaXRpYWxpemVkIGRhdGEgb3IgcGFkZGluZyBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGRldGVjdG9ycyBhcmUgZnVsbHkgc3VmZmljaWVudC4gVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZSBiZWNhdXNlIHRoZSBzdGFuZGFyZCBydW50aW1lIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzIHNwZWVkIGFuZCBkdXBsZXggYXR0cmlidXRlcyAoYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgKSBieSBpbnRyb2R1Y2luZyBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKClgIHRvIG9wdGltaXplIGxvY2tpbmcgKGF2b2lkaW5nIHVubmVjZXNzYXJ5IFJUTkwgbG9ja2luZyB3aGVuIG9ubHkgbmV0ZGV2IG9wcyBsb2NrIGlzIHJlcXVpcmVkKS5cblxuVGhlIHN0YWNrIHZhcmlhYmxlIGBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWRgIGlzIHBhc3NlZCB0byBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKClgLCB3aGljaCBkZWxlZ2F0ZXMgdG8gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYC4gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggYG1lbXNldCguLi4sIDAsIHNpemVvZigqY21kKSlgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBzaG93IGZ1bmN0aW9ucyBvbmx5IGFjY2VzcyBmaWVsZHMgb2YgYGNtZGAgaWYgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCByZXR1cm5zIHN1Y2Nlc3MgKDApLiBPdXRwdXQgaXMgZm9ybWF0dGVkIGludG8gc3lzZnMgc3RyaW5nIGJ1ZmZlcnMgdXNpbmcgYHN5c2ZzX2VtaXQoKWAsIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBkaXNjbG9zdXJlLlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbG9ja2luZyByZWdyZXNzaW9ucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgKGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCkgYnkgaW50cm9kdWNpbmcgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCB0byBvcHRpbWl6ZSBsb2NraW5nIChhdm9pZGluZyB1bm5lY2Vzc2FyeSBSVE5MIGxvY2tpbmcgd2hlbiBvbmx5IG5ldGRldiBvcHMgbG9jayBpcyByZXF1aXJlZCkuXG5cblRoZSBzdGFjayB2YXJpYWJsZSBgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kYCBpcyBwYXNzZWQgdG8gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCwgd2hpY2ggZGVsZWdhdGVzIHRvIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAuIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIGBtZW1zZXQoLi4uLCAwLCBzaXplb2YoKmNtZCkpYCBwcmlvciB0byBpbnZva2luZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgc2hvdyBmdW5jdGlvbnMgb25seSBhY2Nlc3MgZmllbGRzIG9mIGBjbWRgIGlmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgcmV0dXJucyBzdWNjZXNzICgwKS4gT3V0cHV0IGlzIGZvcm1hdHRlZCBpbnRvIHN5c2ZzIHN0cmluZyBidWZmZXJzIHVzaW5nIGBzeXNmc19lbWl0KClgLCBlbGltaW5hdGluZyBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgZGlzY2xvc3VyZS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxvY2tpbmcgcmVncmVzc2lvbnMgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTA6NTIuODI3NjE1NjMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5MjYzMjkwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwic3BlZWRfc2hvd1wiLFxuICAgIFwiZHVwbGV4X3Nob3dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgc3BlZWQgYW5kIGR1cGxleCBhdHRyaWJ1dGVzIChgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2ApIGJ5IGludHJvZHVjaW5nIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgdG8gb3B0aW1pemUgbG9ja2luZyAoYXZvaWRpbmcgdW5uZWNlc3NhcnkgUlROTCBsb2NraW5nIHdoZW4gb25seSBuZXRkZXYgb3BzIGxvY2sgaXMgcmVxdWlyZWQpLlxcblxcblRoZSBzdGFjayB2YXJpYWJsZSBgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kYCBpcyBwYXNzZWQgdG8gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCwgd2hpY2ggZGVsZWdhdGVzIHRvIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAuIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIGBtZW1zZXQoLi4uLCAwLCBzaXplb2YoKmNtZCkpYCBwcmlvciB0byBpbnZva2luZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgc2hvdyBmdW5jdGlvbnMgb25seSBhY2Nlc3MgZmllbGRzIG9mIGBjbWRgIGlmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgcmV0dXJucyBzdWNjZXNzICgwKS4gT3V0cHV0IGlzIGZvcm1hdHRlZCBpbnRvIHN5c2ZzIHN0cmluZyBidWZmZXJzIHVzaW5nIGBzeXNmc19lbWl0KClgLCBlbGltaW5hdGluZyBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgZGlzY2xvc3VyZS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbG9ja2luZyByZWdyZXNzaW9ucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgc3BlZWQgYW5kIGR1cGxleCBhdHRyaWJ1dGVzIGluIG5ldC9jb3JlL25ldC1zeXNmcy5jIHRvIHVzZSBhIG5ldyBsb2NraW5nIGhlbHBlciBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKSwgbW9kaWZ5aW5nIGhvdyBydG5sIGFuZCBuZXRkZXYgb3BzIGxvY2tzIGFyZSBhY3F1aXJlZCBhbmQgY2hlY2tlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBzeXNmcyBjb2RlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3N5cy9jbGFzcy9uZXQvXFx1MDAzY2lmYWNlXFx1MDAzZS9zcGVlZCBhbmQgL3N5cy9jbGFzcy9uZXQvXFx1MDAzY2lmYWNlXFx1MDAzZS9kdXBsZXguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjEwOjUyLjgyNzYyMDgwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYxMjgxNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzU0MjNmNzQ4ZGQ1ZTRjZDI3MWJmMDAzODZhY2YxNzdmOTBiZjdhY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDIwOjEwOjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcXG5pbmRleCAzNTIxNzNkZjc1Nzg1Li5mYTc5MGU0NDI1NzA0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jXFxuKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcXG5AQCAtMTE4LDYgKzExOCw0OSBAQCBzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XFxuK1xcdGJvb2wgbmVlZF9ydG5sO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcXG4rXFx0ICogcmV0dXJuaW5nIGVhcmx5IHdpdGhvdXQgaGl0dGluZyB0aGUgbG9ja2luZyBzZWN0aW9uIGJlbG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKG5ldGRldikgfHxcXG4rXFx0XFx0ICAgIChuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjZcXG4rXFx0XFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTKTtcXG4rXFx0aWYgKG5lZWRfcnRubCkge1xcbitcXHRcXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXFx1MDAyNmRldi1cXHUwMDNla29iaiwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHIsIG5ldGRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XFxuK1xcbitcXHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IC1FSU5WQUw7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcXG4rXFx0XFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxcbitcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHR9XFxuK1xcbit1bmxvY2s6XFxuK1xcdG5ldGRldl91bmxvY2tfb3BzKG5ldGRldik7XFxuK1xcdGlmIChuZWVkX3J0bmwpXFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCdzICovXFxuIHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZixcXG5AQCAtMzMyLDcwICszNzUsNDEgQEAgc3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpO1xcbiBzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiB7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XFxuLVxcdGludCByZXQgPSAtRUlOVkFMO1xcbi1cXG4tXFx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXFxuLVxcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cXG4tXFx0ICovXFxuLVxcdGlmICghbmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXFx1MDAyNmRldi1cXHUwMDNla29iaiwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHIsIG5ldGRldik7XFxuK1xcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFxcdTAwMjZjbWQpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbi1cXHRcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuLVxcbi1cXHRcXHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcXHUwMDI2Y21kKSlcXG4tXFx0XFx0XFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcXG4tXFx0fVxcbi1cXHRydG5sX3VubG9jaygpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcXG4gfVxcbiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oc3BlZWQpO1xcbiBcXG4gc3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiB7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XFxuLVxcdGludCByZXQgPSAtRUlOVkFMO1xcbi1cXG4tXFx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXFxuLVxcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cXG4tXFx0ICovXFxuLVxcdGlmICghbmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuK1xcdGNvbnN0IGNoYXIgKmR1cGxleDtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vrb2JqLCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0ciwgbmV0ZGV2KTtcXG4rXFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXFx1MDAyNmNtZCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuLVxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcXG4tXFxuLVxcdFxcdGlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFxcdTAwMjZjbWQpKSB7XFxuLVxcdFxcdFxcdGNvbnN0IGNoYXIgKmR1cGxleDtcXG4tXFxuLVxcdFxcdFxcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XFxuLVxcdFxcdFxcdGNhc2UgRFVQTEVYX0hBTEY6XFxuLVxcdFxcdFxcdFxcdGR1cGxleCA9IFxcXCJoYWxmXFxcIjtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdGNhc2UgRFVQTEVYX0ZVTEw6XFxuLVxcdFxcdFxcdFxcdGR1cGxleCA9IFxcXCJmdWxsXFxcIjtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdFxcdGR1cGxleCA9IFxcXCJ1bmtub3duXFxcIjtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIFxcXCIlc1xcXFxuXFxcIiwgZHVwbGV4KTtcXG4tXFx0XFx0fVxcbitcXHRzd2l0Y2ggKGNtZC5iYXNlLmR1cGxleCkge1xcbitcXHRjYXNlIERVUExFWF9IQUxGOlxcbitcXHRcXHRkdXBsZXggPSBcXFwiaGFsZlxcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERVUExFWF9GVUxMOlxcbitcXHRcXHRkdXBsZXggPSBcXFwiZnVsbFxcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRkdXBsZXggPSBcXFwidW5rbm93blxcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHR9XFxuLVxcdHJ0bmxfdW5sb2NrKCk7XFxuLVxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlc1xcXFxuXFxcIiwgZHVwbGV4KTtcXG4gfVxcbiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjEwOjUzLjM4OTQ4NjgzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDcxOTg5ODIwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwic3BlZWRfc2hvd1wiLFxuICAgIFwiZHVwbGV4X3Nob3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzIHNwZWVkIGFuZCBkdXBsZXggYXR0cmlidXRlcyBpbiBuZXQvY29yZS9uZXQtc3lzZnMuYyB0byB1c2UgYSBuZXcgbG9ja2luZyBoZWxwZXIgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCksIG1vZGlmeWluZyBob3cgcnRubCBhbmQgbmV0ZGV2IG9wcyBsb2NrcyBhcmUgYWNxdWlyZWQgYW5kIGNoZWNrZWQuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgc3lzZnMgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9zeXMvY2xhc3MvbmV0L1xcdTAwM2NpZmFjZVxcdTAwM2Uvc3BlZWQgYW5kIC9zeXMvY2xhc3MvbmV0L1xcdTAwM2NpZmFjZVxcdTAwM2UvZHVwbGV4LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc1NDIzZjc0OGRkNWU0Y2QyNzFiZjAwMzg2YWNmMTc3ZjkwYmY3YWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIwOjEwOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xuaW5kZXggMzUyMTczZGY3NTc4NS4uZmE3OTBlNDQyNTcwNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jXG4rKysgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xuQEAgLTExOCw2ICsxMTgsNDkgQEAgc3RhdGljIGludCBzeXNmc19ydG5sX2xvY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuK1x0Ym9vbCBuZWVkX3J0bmw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LypcbitcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4rXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4rXHQgKi9cbitcdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSB8fFxuK1x0XHQgICAgKG5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNlxuK1x0XHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MpO1xuK1x0aWYgKG5lZWRfcnRubCkge1xuK1x0XHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG4rXG4rXHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRyZXQgPSAtRUlOVkFMO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuK1x0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG4rXHRcdFx0cmV0ID0gMDtcbitcdH1cbitcbit1bmxvY2s6XG4rXHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuK1x0aWYgKG5lZWRfcnRubClcbitcdFx0cnRubF91bmxvY2soKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCdzICovXG4gc3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXG5AQCAtMzMyLDcwICszNzUsNDEgQEAgc3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpO1xuIHN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuLVx0aW50IHJldCA9IC1FSU5WQUw7XG4tXG4tXHQvKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcbi1cdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbi1cdCAqL1xuLVx0aWYgKCFuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuK1x0aW50IHJldDtcbiBcbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuK1x0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXHUwMDI2Y21kKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSAtRUlOVkFMO1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuLVx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4tXG4tXHRcdGlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmNtZCkpXG4tXHRcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcbi1cdH1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4gfVxuIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XG4gXG4gc3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbitcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbitcdGNvbnN0IGNoYXIgKmR1cGxleDtcbitcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbitcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVJTlZBTDtcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbi1cdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuLVxuLVx0XHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZjbWQpKSB7XG4tXHRcdFx0Y29uc3QgY2hhciAqZHVwbGV4O1xuLVxuLVx0XHRcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfSEFMRjpcbi1cdFx0XHRcdGR1cGxleCA9IFwiaGFsZlwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfRlVMTDpcbi1cdFx0XHRcdGR1cGxleCA9IFwiZnVsbFwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0ZGVmYXVsdDpcbi1cdFx0XHRcdGR1cGxleCA9IFwidW5rbm93blwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcIiVzXFxuXCIsIGR1cGxleCk7XG4tXHRcdH1cbitcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4rXHRjYXNlIERVUExFWF9IQUxGOlxuK1x0XHRkdXBsZXggPSBcImhhbGZcIjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIERVUExFWF9GVUxMOlxuK1x0XHRkdXBsZXggPSBcImZ1bGxcIjtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRkdXBsZXggPSBcInVua25vd25cIjtcbitcdFx0YnJlYWs7XG4gXHR9XG4tXHRydG5sX3VubG9jaygpO1xuLVx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlc1xcblwiLCBkdXBsZXgpO1xuIH1cbiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjEwOjUzLjM4OTQ4ODI3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODI1MjM5NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBJbnRlcmZhY2UgU3lzZnMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSByZWZhY3RvcmluZyBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHdlIGhhbmRsZSB0aGUgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgIGF0dHJpYnV0ZXMgd2l0aGluIHRoZSBgL3N5cy9jbGFzcy9uZXQvXHUwMDNjaWZhY2VcdTAwM2UvYCBoaWVyYXJjaHkuIFRoZXNlIGFyZSBjcnVjaWFsLCBvYnZpb3VzbHksIGZvciByZXBvcnRpbmcgbGluayBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzLlxuXG5UaGUga2V5IGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYC4gSXQncyBkZXNpZ25lZCB0byBiZSBhIGhlbHBlciBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHNpZ27igJR3ZSdyZSBsaWtlbHkgdHJ5aW5nIHRvIERSWSB1cCBzb21lIGNvZGUgYW5kIGNlbnRyYWxpemUgdGhlIGxvY2tpbmcgbG9naWMuIFRoYXQncyB1c3VhbGx5IGEgd2luIGZvciBtYWludGFpbmFiaWxpdHkgYW5kIGNvcnJlY3RuZXNzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN5c2ZzIGF0dHJpYnV0ZXMgdGhhdCBpbnZvbHZlIGtlcm5lbCBkYXRhLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIGxvY2tpbmc6XG5cbjEuICBXZSBoYXZlIGBzeXNmc19ydG5sX2xvY2tgIGJlaW5nIGxvY2tlZCBjb25kaXRpb25hbGx5LiBUaGUgZGVjaXNpb24gdG8gbG9jayBpdCBoaW5nZXMgb24gYG5lZWRfcnRubGAsIHdoaWNoIGl0c2VsZiBkZXBlbmRzIG9uIHdoZXRoZXIgd2UgbmVlZCB0byBjYWxsIGBuZXRkZXZfbG9ja19vcHNgIGZpcnN0LCBvciBpZiB3ZSBuZWVkIHRoZSBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HU2AgZmxhZy4gVGhpcyBpcyBjbGV2ZXI7IGl0J3MgcmVjb2duaXppbmcgdGhhdCBub3QgYWxsIG9wZXJhdGlvbnMgcmVxdWlyZSB0aGUgUlROTCAoUm91dGluZyBUYWJsZSBOZXh0IExldmVsKSBsb2NrLiBUaGF0IGNhbiBsZWFkIHRvIGxlc3MgY29udGVudGlvbi5cbjIuICBUaGVuLCB3ZSBoYXZlIGBuZXRkZXZfbG9ja19vcHMobmV0ZGV2KWAgYW5kIHRoZSBgZGV2X2lzYWxpdmVgIGNoZWNrIHdoaWNoIHByb3RlY3RzIGFnYWluc3QgcmFjZXMgYW5kIGVuc3VyZXMgdGhlIGRldmljZSBpcyBzdGlsbCB2YWxpZCBiZWZvcmUgd2UgYXR0ZW1wdCB0byB3b3JrIHdpdGggaXQuIFRoYXQncyBhIHNvbGlkIGRlZmVuc2UuXG4zLiAgVGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgc2VlbXMgdG8gYmUgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZClgLiBUaGF0J3Mgd2hlcmUgd2UncmUgYWN0dWFsbHkgZmV0Y2hpbmcgdGhlIGxpbmsgc2V0dGluZ3MuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGNhcmVmdWxseSByZXBsYWNpbmcgZWFybGllciBsb2dpYyB3aXRoIHRoaXMgY2xlYW5lciBtb2RlbC5cbjQuICBGaW5hbGx5LCB3ZSBjYWxsIHRoZSBzZXR0aW5ncyBmcm9tIHRoZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgZnVuY3Rpb25zLlxuXG5UbyBnZXQgYSBiZXR0ZXIgZ3JpcCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlLiBJJ2xsIHByb2JhYmx5IGdyYWIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBxdWlja2x5IGNoZWNrIHRoZSBzb3VyY2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjaGFuZ2UgZml0cyB3aXRoaW4gdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6MTQuMjE0NzI5ODYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldC1zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXHRzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTtcXG4gMTE2OlxcdFxcdGRldl9wdXQobmRldik7XFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdHJldHVybiByZXQ7XFxuIDExOTpcXHR9XFxuIDEyMDpcXHRcXG4gMTIxOlxcdHN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMTIyOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4gMTIzOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbiAxMjQ6XFx0e1xcbiAxMjU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcXG4gMTI2OlxcdFxcdGJvb2wgbmVlZF9ydG5sO1xcbiAxMjc6XFx0XFx0aW50IHJldDtcXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0LypcXG4gMTMwOlxcdFxcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXFxuIDEzMTpcXHRcXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXFxuIDEzMjpcXHRcXHQgKi9cXG4gMTMzOlxcdFxcdGlmICghbmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxcbiAxMzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8XFxuIDEzNzpcXHRcXHRcXHQgICAgKG5ldGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNlxcbiAxMzg6XFx0XFx0XFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTKTtcXG4gMTM5OlxcdFxcdGlmIChuZWVkX3J0bmwpIHtcXG4gMTQwOlxcdFxcdFxcdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vrb2JqLCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0ciwgbmV0ZGV2KTtcXG4gMTQxOlxcdFxcdFxcdGlmIChyZXQpXFxuIDE0MjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDM6XFx0XFx0fVxcbiAxNDQ6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdFxcdGlmICghZGV2X2lzYWxpdmUobmV0ZGV2KSkge1xcbiAxNDc6XFx0XFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4gMTQ4OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiAxNDk6XFx0XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiAxNTI6XFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbiAxNTM6XFx0XFx0XFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxcbiAxNTQ6XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4gMTU1OlxcdFxcdH1cXG4gMTU2OlxcdFxcbiAxNTc6XFx0dW5sb2NrOlxcbiAxNTg6XFx0XFx0bmV0ZGV2X3VubG9ja19vcHMobmV0ZGV2KTtcXG4gMTU5OlxcdFxcdGlmIChuZWVkX3J0bmwpXFxuIDE2MDpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbiAxNjE6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTYyOlxcdH1cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0LyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJ3MgKi9cXG4gMTY1OlxcdHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMTY2OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXFxuIDE2NzpcXHRcXHRcXHRcXHQgICBzc2l6ZV90ICgqZm9ybWF0KShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBjaGFyICopKVxcbiAxNjg6XFx0e1xcbiAxNjk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7XFxuIDE3MDpcXHRcXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuIDE3MTpcXHRcXG4gMTcyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMTczOlxcdFxcdGlmIChkZXZfaXNhbGl2ZShuZGV2KSlcXG4gMTc0OlxcdFxcdFxcdHJldCA9ICgqZm9ybWF0KShuZGV2LCBidWYpO1xcbiAxNzU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDE3NjpcXHRcXG4gMTc3OlxcdFxcdHJldHVybiByZXQ7XFxuIDE3ODpcXHR9XFxuIDE3OTpcXHRcXG4gMTgwOlxcdC8qIGdlbmVyYXRlIGEgc2hvdyBmdW5jdGlvbiBmb3Igc2ltcGxlIGZpZWxkICovXFxuIDE4MTpcXHQjZGVmaW5lIE5FVERFVklDRV9TSE9XKGZpZWxkLCBmb3JtYXRfc3RyaW5nKVxcdFxcdFxcdFxcdFxcXFxcXG4gMTgyOlxcdHN0YXRpYyBzc2l6ZV90IGZvcm1hdF8jI2ZpZWxkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZilcXHRcXFxcXFxuIDE4MzpcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxODQ6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBmb3JtYXRfc3RyaW5nLCBSRUFEX09OQ0UoZGV2LVxcdTAwM2VmaWVsZCkpO1xcdFxcdFxcXFxcXG4gMTg1OlxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE4NjpcXHRzdGF0aWMgc3NpemVfdCBmaWVsZCMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcdFxcdFxcdFxcdFxcXFxcXG4gMTg3OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcdFxcXFxcXG4gMTg4OlxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE4OTpcXHRcXHRyZXR1cm4gbmV0ZGV2X3Nob3coZGV2LCBhdHRyLCBidWYsIGZvcm1hdF8jI2ZpZWxkKTtcXHRcXHRcXFxcXFxuIDE5MDpcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxOTE6XFx0XFxuIDE5MjpcXHQjZGVmaW5lIE5FVERFVklDRV9TSE9XX1JPKGZpZWxkLCBmb3JtYXRfc3RyaW5nKVxcdFxcdFxcdFxcdFxcXFxcXG4gMTkzOlxcdE5FVERFVklDRV9TSE9XKGZpZWxkLCBmb3JtYXRfc3RyaW5nKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE5NDpcXHRzdGF0aWMgREVWSUNFX0FUVFJfUk8oZmllbGQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjE0LjIxNDg0ODY0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5OTE1NjA4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZXQtc3lzZnMuY2AgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZXQtc3lzZnMuY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNydWNpYWwgcGllY2UsIGFzIGl0IGhhbmRsZXMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgbmV0d29ya2luZy4gSW4gYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwLCBsaWtlIFFFTVUgb3IgR0NFLCB3aGVyZSBzeXNmcyBhbmQgbmV0d29yayBkZXZpY2VzIGFyZSBwcmVzZW50LCB0aGlzIGNvZGUgaXMgYWJzb2x1dGVseSByZWxldmFudC4gVGhpbmsgb2YgdGhlIGNvbW1vbiBzeXNmcyBwYXRocyBsaWtlIGAvc3lzL2NsYXNzL25ldC8qL3NwZWVkYCBhbmQgYC9zeXMvY2xhc3MvbmV0LyovZHVwbGV4YDsgdGhpcyBjb2RlIHVuZGVycGlucyB0aG9zZS5cblxuV2hhdCdzIGNvbmNlcm5pbmcgaGVyZSBpcyB0aGUgZXh0ZW50IG9mIHRoZSBtb2RpZmljYXRpb25zLiBXZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgbmV0d29ya2luZyBzeXNmcyBjb2RlLCBhbmQgdGhlIGNoYW5nZXMgaW52b2x2ZSBsb2NraW5nIHNlbWFudGljcy4gU3BlY2lmaWNhbGx5LCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gcnRubCBsb2NraW5nIGFuZCB0aGUgbmV0ZGV2IG9wZXJhdGlvbnMgbG9ja2luZyBuZWVkcyBjYXJlZnVsIHNjcnV0aW55LiBQbHVzLCB0aGVyZSdzIGEgbmV3IGhlbHBlciwgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AsIGJlaW5nIGludHJvZHVjZWQuIEFuZCwgb2YgY291cnNlLCB0aGV5IGFyZSBtb2RpZnlpbmcgY3J1Y2lhbCBmdW5jdGlvbnMgbGlrZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AuIFRob3NlIGFyZSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgYXJlYXMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXJlIGFyZW4ndCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgaGVyZS4gSSdsbCBxdWlja2x5IGNoZWNrIGBuZXQvY29yZS9NYWtlZmlsZWAgb3IgYG5ldC9LY29uZmlnYCBmb3IgdGhlIHByZXNlbmNlIG9mIGBuZXQtc3lzZnMub2AsIGp1c3QgdG8gdmVyaWZ5IHRoYXQgTkVUIGFuZCBTWVNGUyBhcmUgaW5kZWVkIGNvbmZpZ3VyZWQgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMToxOS4yMDY0MTMwNTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMyODQyODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldC1zeXNmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTE4PW9iai0kKENPTkZJR19ORVRERVZfQUREUl9MSVNUX1RFU1QpICs9IGRldl9hZGRyX2xpc3RzX3Rlc3Qub1xcbm5ldC9jb3JlL01ha2VmaWxlLTE5LVxcbm5ldC9jb3JlL01ha2VmaWxlOjIwOm9iai15ICs9IG5ldC1zeXNmcy5vXFxubmV0L2NvcmUvTWFrZWZpbGUtMjEtb2JqLXkgKz0gaG90ZGF0YS5vXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xNjgtI2luY2x1ZGUgXFxcImRldm1lbS5oXFxcIlxcbm5ldC9jb3JlL2Rldi5jOjE2OTojaW5jbHVkZSBcXFwibmV0LXN5c2ZzLmhcXFwiXFxubmV0L2NvcmUvZGV2LmMtMTcwLVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMi0vKlxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjM6ICogbmV0LXN5c2ZzLmMgLSBuZXR3b3JrIGRldmljZSBjbGFzcyBhbmQgYXR0cmlidXRlc1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTQtICpcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTMwLSNpbmNsdWRlIFxcXCJkZXYuaFxcXCJcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozMTojaW5jbHVkZSBcXFwibmV0LXN5c2ZzLmhcXFwiXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzItXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy05Ny0jaW5jbHVkZSBcXFwiZGV2bWVtLmhcXFwiXFxubmV0L2NvcmUvc2tidWZmLmM6OTg6I2luY2x1ZGUgXFxcIm5ldC1zeXNmcy5oXFxcIlxcbm5ldC9jb3JlL3NrYnVmZi5jLTk5LSNpbmNsdWRlIFxcXCJuZXRtZW1fcHJpdi5oXFxcIlxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzEtI2luY2x1ZGUgXFxcImRldi5oXFxcIlxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjMyOiNpbmNsdWRlIFxcXCJuZXQtc3lzZnMuaFxcXCJcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6MTkuNTM5MjYxNjIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM5MDg0NzExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEtlcm5lbCdzIE5ldHdvcmsgQ29yZSBmb3IgU3lzdGVtIEZpbGUgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgbGluZTogYG9iai15ICs9IG5ldC1zeXNmcy5vYCBpbiBgbmV0L2NvcmUvTWFrZWZpbGVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgYG5ldC1zeXNmcy5vYCBpcyBiZWluZyBpbmNsdWRlZCwgYnV0IHVuZGVyIHdoYXQgY29uZGl0aW9ucz9cIiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBsaWtlbHkgbWVhbnMgdGhlIHN5c3RlbSBmaWxlIHN1cHBvcnQgZm9yIG5ldHdvcmsgY29yZSBpcyBiZWluZyBjb25kaXRpb25hbGx5IGVuYWJsZWQuIFRoZSBNYWtlZmlsZSBjbGVhcmx5IHN0YXRlcyB0aGF0IHRoaXMgb2JqZWN0IGZpbGUgaXMgb25seSBpbmNsdWRlZCB3aGVuIGJvdGggYENPTkZJR19ORVRgIGFuZCBgQ09ORklHX1NZU0ZTYCBhcmUgZGVmaW5lZCBhbmQgc2V0IHRvIGB5YC5cblxuQnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBJcyB0aGVyZSBhIG1vcmUgZXhwbGljaXQgYCNpZmRlZiBDT05GSUdfU1lTRlNgIGNoZWNrICp3aXRoaW4qIGBuZXQvY29yZS9NYWtlZmlsZWAgcmVsYXRlZCB0byB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGBuZXQtc3lzZnMub2Agb3IsIG1vcmUgYnJvYWRseSwgZG9lcyBgbmV0L2NvcmVgIGdldCBjb21waWxlZCBhdCBhbGwgd2hlbiBDT05GSUdfTkVUIGlzIHNldD8gSXQncyBnb29kIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jeSB0cmVlIHRvIG1ha2Ugc3VyZSB0aGUgaW5jbHVzaW9uIGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5LiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIHRvIHZlcmlmeSB3aGVuIGRpZ2dpbmcgaW50byBrZXJuZWwgbmV0d29ya2luZywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzeXN0ZW0gZmlsZSBpbnRlcmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTE3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6MjMuOTMwMTEwNzAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDczMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9NYWtlZmlsZS04LVxcbm5ldC9NYWtlZmlsZTo5Om9iai15XFx0XFx0XFx0XFx0Oj0gZGV2cmVzLm8gc29ja2V0Lm8gY29yZS9cXG5uZXQvTWFrZWZpbGUtMTAtXFxubmV0L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19DT01QQVQpXFx0XFx0Kz0gY29tcGF0Lm9cXG5uZXQvTWFrZWZpbGUtMTItXFxubmV0L01ha2VmaWxlLTEzLSMgTExDIGhhcyB0byBiZSBsaW5rZWQgYmVmb3JlIHRoZSBmaWxlcyBpbiBuZXQvODAyL1xcbm5ldC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTExDKVxcdFxcdCs9IGxsYy9cXG5uZXQvTWFrZWZpbGU6MTU6b2JqLXlcXHRcXHRcXHRcXHQrPSBldGhlcm5ldC8gODAyLyBzY2hlZC8gbmV0bGluay8gYnBmLyBldGh0b29sL1xcbm5ldC9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfTkVURklMVEVSKVxcdFxcdCs9IG5ldGZpbHRlci9cXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXFx0XFx0Kz0gaXB2NC9cXG5uZXQvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX1RMUylcXHRcXHQrPSB0bHMvXFxubmV0L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19YRlJNKVxcdFxcdCs9IHhmcm0vXFxubmV0L01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19VTklYKVxcdFxcdCs9IHVuaXgvXFxubmV0L01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19JTkVUX1BTUClcXHRcXHQrPSBwc3AvXFxubmV0L01ha2VmaWxlOjIyOm9iai15XFx0XFx0XFx0XFx0Kz0gaXB2Ni9cXG5uZXQvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX1BBQ0tFVClcXHRcXHQrPSBwYWNrZXQvXFxubmV0L01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORVRfS0VZKVxcdFxcdCs9IGtleS9cXG5uZXQvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JSSURHRSlcXHRcXHQrPSBicmlkZ2UvXFxubmV0L01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19ORVRfREVWTElOSylcXHQrPSBkZXZsaW5rL1xcbm5ldC9NYWtlZmlsZToyNzpvYmoteVxcdFxcdFxcdFxcdCs9IGRzYS9cXG5uZXQvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX1gyNSlcXHRcXHQrPSB4MjUvXFxubmV0L01ha2VmaWxlOjI5Om9iai0kKENPTkZJR19MQVBCKVxcdFxcdCs9IGxhcGIvXFxubmV0L01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19DQU4pXFx0XFx0Kz0gY2FuL1xcbm5ldC9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlQpXFx0XFx0Kz0gYmx1ZXRvb3RoL1xcbm5ldC9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfU1VOUlBDKVxcdFxcdCs9IHN1bnJwYy9cXG5uZXQvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX0FGX1JYUlBDKVxcdFxcdCs9IHJ4cnBjL1xcbm5ldC9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQUZfS0NNKVxcdFxcdCs9IGtjbS9cXG5uZXQvTWFrZWZpbGU6MzU6b2JqLSQoQ09ORklHX1NUUkVBTV9QQVJTRVIpXFx0Kz0gc3RycGFyc2VyL1xcbm5ldC9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfQVRNKVxcdFxcdCs9IGF0bS9cXG5uZXQvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0wyVFApXFx0XFx0Kz0gbDJ0cC9cXG5uZXQvTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX1BIT05FVClcXHRcXHQrPSBwaG9uZXQvXFxubmV0L01ha2VmaWxlLTM5LWlmbmVxICgkKENPTkZJR19WTEFOXzgwMjFRKSwpXFxubmV0L01ha2VmaWxlOjQwOm9iai15XFx0XFx0XFx0XFx0Kz0gODAyMXEvXFxubmV0L01ha2VmaWxlLTQxLWVuZGlmXFxubmV0L01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUF9TQ1RQKVxcdFxcdCs9IHNjdHAvXFxubmV0L01ha2VmaWxlOjQzOm9iai0kKENPTkZJR19SRFMpXFx0XFx0Kz0gcmRzL1xcbm5ldC9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfV0lSRUxFU1MpXFx0XFx0Kz0gd2lyZWxlc3MvXFxubmV0L01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19NQUM4MDIxMSlcXHRcXHQrPSBtYWM4MDIxMS9cXG5uZXQvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX1RJUEMpXFx0XFx0Kz0gdGlwYy9cXG5uZXQvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX05FVExBQkVMKVxcdFxcdCs9IG5ldGxhYmVsL1xcbm5ldC9NYWtlZmlsZTo0ODpvYmotJChDT05GSUdfSVVDVilcXHRcXHQrPSBpdWN2L1xcbm5ldC9NYWtlZmlsZTo0OTpvYmotJChDT05GSUdfU01DKVxcdFxcdCs9IHNtYy9cXG5uZXQvTWFrZWZpbGU6NTA6b2JqLSQoQ09ORklHX1JGS0lMTClcXHRcXHQrPSByZmtpbGwvXFxubmV0L01ha2VmaWxlOjUxOm9iai0kKENPTkZJR19ORVRfOVApXFx0XFx0Kz0gOXAvXFxubmV0L01ha2VmaWxlOjUyOm9iai0kKENPTkZJR19EQ0IpXFx0XFx0Kz0gZGNiL1xcbm5ldC9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfNkxPV1BBTilcXHRcXHQrPSA2bG93cGFuL1xcbm5ldC9NYWtlZmlsZTo1NDpvYmotJChDT05GSUdfSUVFRTgwMjE1NClcXHQrPSBpZWVlODAyMTU0L1xcbm5ldC9NYWtlZmlsZTo1NTpvYmotJChDT05GSUdfTUFDODAyMTU0KVxcdFxcdCs9IG1hYzgwMjE1NC9cXG5uZXQvTWFrZWZpbGUtNTYtXFxubmV0L01ha2VmaWxlOjU3Om9iai0kKENPTkZJR19TWVNDVEwpXFx0XFx0Kz0gc3lzY3RsX25ldC5vXFxubmV0L01ha2VmaWxlOjU4Om9iai0kKENPTkZJR19ETlNfUkVTT0xWRVIpXFx0Kz0gZG5zX3Jlc29sdmVyL1xcbm5ldC9NYWtlZmlsZTo1OTpvYmotJChDT05GSUdfQ0VQSF9MSUIpXFx0XFx0Kz0gY2VwaC9cXG5uZXQvTWFrZWZpbGU6NjA6b2JqLSQoQ09ORklHX0JBVE1BTl9BRFYpXFx0Kz0gYmF0bWFuLWFkdi9cXG5uZXQvTWFrZWZpbGU6NjE6b2JqLSQoQ09ORklHX05GQylcXHRcXHQrPSBuZmMvXFxubmV0L01ha2VmaWxlOjYyOm9iai0kKENPTkZJR19QU0FNUExFKVxcdFxcdCs9IHBzYW1wbGUvXFxubmV0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfSUZFKVxcdFxcdCs9IGlmZS9cXG5uZXQvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX09QRU5WU1dJVENIKVxcdCs9IG9wZW52c3dpdGNoL1xcbm5ldC9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfVlNPQ0tFVFMpXFx0Kz0gdm13X3Zzb2NrL1xcbm5ldC9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfTVBMUylcXHRcXHQrPSBtcGxzL1xcbm5ldC9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfTkVUX05TSClcXHRcXHQrPSBuc2gvXFxubmV0L01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19IU1IpXFx0XFx0Kz0gaHNyL1xcbm5ldC9NYWtlZmlsZTo2OTpvYmotJChDT05GSUdfTkVUX1NXSVRDSERFVilcXHQrPSBzd2l0Y2hkZXYvXFxubmV0L01ha2VmaWxlOjcwOm9iai0kKENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVilcXHQrPSBsM21kZXYvXFxubmV0L01ha2VmaWxlOjcxOm9iai0kKENPTkZJR19RUlRSKVxcdFxcdCs9IHFydHIvXFxubmV0L01ha2VmaWxlOjcyOm9iai0kKENPTkZJR19ORVRfTkNTSSlcXHRcXHQrPSBuY3NpL1xcbm5ldC9NYWtlZmlsZTo3MzpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpXFx0Kz0geGRwL1xcbm5ldC9NYWtlZmlsZTo3NDpvYmotJChDT05GSUdfTVBUQ1ApXFx0XFx0Kz0gbXB0Y3AvXFxubmV0L01ha2VmaWxlOjc1Om9iai0kKENPTkZJR19NQ1RQKVxcdFxcdCs9IG1jdHAvXFxubmV0L01ha2VmaWxlOjc2Om9iai0kKENPTkZJR19ORVRfSEFORFNIQUtFKVxcdCs9IGhhbmRzaGFrZS9cXG5uZXQvTWFrZWZpbGU6Nzc6b2JqLSQoQ09ORklHX05FVF9TSEFQRVIpXFx0Kz0gc2hhcGVyL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMToyMy45ODAxODg1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzA2MjgxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQtc3lzZnMuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBob29rcyBmb3IgbmV0d29yayBpbnRlcmZhY2VzIGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBva2UgYXJvdW5kIGluIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AuIEl0J3MgYSBrZXkgc3BvdCBmb3Igc3lzZnMgaW50ZXJhY3Rpb25zIHJlbGF0ZWQgdG8gbmV0d29ya2luZy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGNvZGUgZm9yIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyAoYCNpZmRlZmAsIGAjaWZgLCBldGMuKSBvciBzdWJ0bGUgZGVwZW5kZW5jaWVzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgd2hpY2ggZmVhdHVyZXMgb3Igc3Vic3lzdGVtcyBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBzeXNmcyBhdHRyaWJ1dGVzIGFuZCBob3cgdGhleSBhcmUgZXhwb3NlZC4gR290dGEgc2VlIHdoYXQgZmxhZ3Mgb3IgbW9kdWxlcyBuZWVkIHRvIGJlIGFjdGl2ZSB0byBtYWtlIGNlcnRhaW4gb3B0aW9ucyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgZmlsZXN5c3RlbS4gVGhpcyBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCBiZWZvcmUgSSBkaWcgaW50byBhbnkgcGFydGljdWxhciBhdHRyaWJ1dGUgb3IgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGdldCB0aGUgb3ZlcmFsbCBjb250ZXh0IGJlZm9yZSBJIGNhbiBpc29sYXRlIGFueSBzcGVjaWZpYyBpc3N1ZSBvciBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMToyNi4wMTA4MTk2MzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDY1NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvbmV0LXN5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzItXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MzM6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTM0LXN0YXRpYyBjb25zdCBjaGFyIGZtdF9oZXhbXSA9IFxcXCIlI3hcXFxcblxcXCI7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz05MTQ9c3RhdGljIGJvb2wgd2lyZWxlc3NfZ3JvdXBfbmVlZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkxNS17XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTE2OiNpZiBJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMSlcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MTctXFx0aWYgKG5kZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MTktI2VuZGlmXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTIwOiNpZiBJU19FTkFCTEVEKENPTkZJR19XSVJFTEVTU19FWFQpXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTIxLVxcdGlmIChuZGV2LVxcdTAwM2V3aXJlbGVzc19oYW5kbGVycylcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkyNi1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5Mjc6I2Vsc2UgLyogQ09ORklHX1NZU0ZTICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTI4LSNkZWZpbmUgbmV0X2NsYXNzX2dyb3Vwc1xcdE5VTExcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5Mjk6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkzMC1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5MzE6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkzMi0jZGVmaW5lIHRvX3J4X3F1ZXVlX2F0dHIoX2F0dHIpIFxcXFxcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTk2MT1zdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyByeF9xdWV1ZV9zeXNmc19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05NjUtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTY2OiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTY3LXN0YXRpYyBzc2l6ZV90IHNob3dfcnBzX21hcChzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpxdWV1ZSwgY2hhciAqYnVmKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTE0MT1zdGF0aWMgc3RydWN0IHJ4X3F1ZXVlX2F0dHJpYnV0ZSBycHNfZGV2X2Zsb3dfdGFibGVfY250X2F0dHJpYnV0ZSBfX3JvX2FmdGVyX2luaXRcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExNDMtXFx0XFx0IHNob3dfcnBzX2Rldl9mbG93X3RhYmxlX2NudCwgc3RvcmVfcnBzX2Rldl9mbG93X3RhYmxlX2NudCk7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTE0NDojZW5kaWYgLyogQ09ORklHX1JQUyAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExNDUtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTE0Nj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcnhfcXVldWVfZGVmYXVsdF9hdHRyc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMTQ3OiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTE0OC1cXHRcXHUwMDI2cnBzX2NwdXNfYXR0cmlidXRlLmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMTU1PXN0YXRpYyB2b2lkIHJ4X3F1ZXVlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMTU3LVxcdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnF1ZXVlID0gdG9fcnhfcXVldWUoa29iaik7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTE1ODojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExNTktXFx0cnBzX3RhZ19wdHIgdGFnX3B0cjtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEyMDQ9c3RhdGljIGludCByeF9xdWV1ZV9kZWZhdWx0X21hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyMDYte1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEyMDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX1JQUykgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfU1lTQ1RMKVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyMDgtXFx0c3RydWN0IGNwdW1hc2sgKnJwc19kZWZhdWx0X21hc2s7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMjg0PXN0YXRpYyBpbnQgcnhfcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmRleCwga3VpZF90IGt1aWQsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzAwLX1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzAxOiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzAyLVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTMwND1uZXRfcnhfcXVldWVfdXBkYXRlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvbGRfbnVtLCBpbnQgbmV3X251bSlcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzA1LXtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzA2OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzA3LVxcdGludCBpO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTMwOS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzEwOiNpZm5kZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMTEtXFx0aWYgKCFkZXYtXFx1MDAzZXN5c2ZzX3J4X3F1ZXVlX2dyb3VwKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTM0MD1zdGF0aWMgaW50IG5ldF9yeF9xdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bSxcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDIte1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzNDM6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDQtXFx0aW50IGVycm9yID0gMDtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDYtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTM0NzojaWZuZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzQ4LVxcdGlmICghZGV2LVxcdTAwM2VzeXNmc19yeF9xdWV1ZV9ncm91cClcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNjItXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTM2MzojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM2NC0vKlxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTQzMT1zdGF0aWMgc3NpemVfdCB0cmFmZmljX2NsYXNzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDY3LVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE0Njg6I2lmZGVmIENPTkZJR19YUFNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDY5LXN0YXRpYyBzc2l6ZV90IHR4X21heHJhdGVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTE1MjM9c3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWVfYXR0cmlidXRlIHF1ZXVlX3RyYWZmaWNfY2xhc3MgX19yb19hZnRlcl9pbml0XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTI1LVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE1MjY6I2lmZGVmIENPTkZJR19CUUxcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTI3LS8qXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xNzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRxbF9ncm91cCA9IHt9O1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE3MDM6I2VuZGlmIC8qIENPTkZJR19CUUwgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNzA0LVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE3MDU6I2lmZGVmIENPTkZJR19YUFNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNzA2LXN0YXRpYyBzc2l6ZV90IHhwc19xdWV1ZV9zaG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpbmRleCxcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTE5MDM9c3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWVfYXR0cmlidXRlIHhwc19yeHFzX2F0dHJpYnV0ZSBfX3JvX2FmdGVyX2luaXRcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xOTA0LVxcdD0gX19BVFRSX1JXKHhwc19yeHFzKTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxOTA1OiNlbmRpZiAvKiBDT05GSUdfWFBTICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTkwNi1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xOTA3PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpuZXRkZXZfcXVldWVfZGVmYXVsdF9hdHRyc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE5MDktXFx0XFx1MDAyNnF1ZXVlX3RyYWZmaWNfY2xhc3MuYXR0cixcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxOTEwOiNpZmRlZiBDT05GSUdfWFBTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTkxMS1cXHRcXHUwMDI2eHBzX2NwdXNfYXR0cmlidXRlLmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xOTU0PXN0YXRpYyBib29sIG5ldGRldl91c2VzX2JxbChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTk1OC1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxOTU5OlxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19CUUwpO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE5NjAtfVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjAxNj1zdGF0aWMgaW50IHR4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IGluZGV4LFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzMS19XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjAzMjojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzMy1cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIwMzU9bmV0ZGV2X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2xkX251bSwgaW50IG5ld19udW0pXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzNi17XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjAzNzojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzOC1cXHRpbnQgaTtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwNzEtXFx0cmV0dXJuIDA7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA3MjojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA3My19XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMDc1PXN0YXRpYyBpbnQgbmV0X3R4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA3Ny17XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA3ODojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA3OS1cXHRpbnQgZXJyb3IgPSAwO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA5MC1cXHRyZXR1cm4gMDtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDkxOiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDkyLX1cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIwOTQ9c3RhdGljIGludCByZWdpc3Rlcl9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA5Ny1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDk4OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDk5LVxcdGRldi1cXHUwMDNlcXVldWVzX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKFxcXCJxdWV1ZXNcXFwiLFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEyMS1cXHRuZXRfcnhfcXVldWVfdXBkYXRlX2tvYmplY3RzKGRldiwgcnhxLCAwKTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTIyOiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTIzLVxcdGtzZXRfdW5yZWdpc3RlcihkZXYtXFx1MDAzZXF1ZXVlc19rc2V0KTtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxMjg9c3RhdGljIGludCBxdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGt1aWRfdCBrdWlkLCBrZ2lkX3Qga2dpZClcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxMzEtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjEzMjojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEzMy1cXHRpZiAobmRldi1cXHUwMDNlcXVldWVzX2tzZXQpIHtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxNTM9c3RhdGljIHZvaWQgcmVtb3ZlX3F1ZXVlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTU2LVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNTc6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNTgtXFx0cmVhbF9yeCA9IGRldi1cXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE2OC1cXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNjk6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNzAtXFx0a3NldF91bnJlZ2lzdGVyKGRldi1cXHUwMDNlcXVldWVzX2tzZXQpO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjE4MT1zdGF0aWMgc3RydWN0IG5zX2NvbW1vbiAqbmV0X2dyYWJfY3VycmVudF9ucyh2b2lkKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE4My1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnM7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjE4NDojaWZkZWYgQ09ORklHX05FVF9OU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxODUtXFx0aWYgKG5ldClcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIyNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBuZXRfY2xhc3MgPSB7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMjcyLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIyNzM6I2lmZGVmIENPTkZJR19PRlxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIyNzQtc3RhdGljIGludCBvZl9kZXZfbm9kZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMzI2PWludCBuZXRkZXZfcmVnaXN0ZXJfa29iamVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIzMzgtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjMzOTojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjM0MC1cXHQvKiBBbGxvdyBmb3IgYSBkZXZpY2Ugc3BlY2lmaWMgZ3JvdXAgKi9cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIzNDgtXFx0XFx0Kmdyb3VwcysrID0gXFx1MDAyNndpcmVsZXNzX2dyb3VwO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIzNDk6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIzNTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjI2LjA1OTg5MDEyMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODAwMTc1MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgQ2hhbmdlcyBpbiBOZXQtU3lzZnMuYyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9ucyB3ZSd2ZSBqdXN0IGltcGxlbWVudGVkLiBGaXJzdCwgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGZ1bmN0aW9ucyBpbiBxdWVzdGlvbjogYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AsIGBzcGVlZF9zaG93YCwgYW5kIGBkdXBsZXhfc2hvd2AuIEknbGwgY29uZmlybSB0aGVpciBzY29wZSwgc28gSSBrbm93IHdoZXJlIHRoZXkgbGl2ZSB3aXRoaW4gdGhlIG5ldCBzdWJzeXN0ZW0uXG5cbkFscmlnaHQsIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGFsbCB0aHJlZSBmdW5jdGlvbnMsIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLCBgc3BlZWRfc2hvd2AsIGFuZCBgZHVwbGV4X3Nob3dgLCBhcmUgaW5kZWVkIHN0YXRpYyB3aXRoaW4gYG5ldC9jb3JlL25ldC1zeXNmcy5jYC4gTm93IHRoYXQgSSBrbm93IHRoZSBzY29wZSBvZiB0aGVpciBkZWZpbml0aW9uIEkgY2FuIHByb2NlZWQgdG8gY29uc2lkZXIgaG93IHRoZXkgZml0IHdpdGhpbiB0aGUgY29kZS5cblxuR2l2ZW4gdGhhdCB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IHRoZXkncmUgYmVpbmcgKmNhbGxlZCogd2l0aGluIHRoaXMgc3BlY2lmaWMgZmlsZS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgYG5ldC1zeXNmcy5jYCwgZm9jdXNpbmcgb24gdGhlIHZpY2luaXR5IG9mIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCwgdG8gZmluZCBhbnkgbG9jYWwgdXNhZ2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIHB1cnBvc2UgYW5kIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbSdzIHN5c2ZzIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MzQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6MjguODYwMDY4MzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldC1zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MDpcXHRcXHRydG5sX3VubG9jaygpO1xcbiAzNzE6XFx0XFx0cmV0dXJuIHJldDtcXG4gMzcyOlxcdH1cXG4gMzczOlxcdHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTtcXG4gMzc0OlxcdFxcbiAzNzU6XFx0c3RhdGljIHNzaXplX3Qgc3BlZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIDM3NjpcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuIDM3NzpcXHR7XFxuIDM3ODpcXHRcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuIDM3OTpcXHRcXHRpbnQgcmV0O1xcbiAzODA6XFx0XFxuIDM4MTpcXHRcXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcXHUwMDI2Y21kKTtcXG4gMzgyOlxcdFxcdGlmIChyZXQpXFxuIDM4MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzODQ6XFx0XFxuIDM4NTpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcXG4gMzg2OlxcdH1cXG4gMzg3OlxcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMzkwOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuIDM5MTpcXHR7XFxuIDM5MjpcXHRcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuIDM5MzpcXHRcXHRjb25zdCBjaGFyICpkdXBsZXg7XFxuIDM5NDpcXHRcXHRpbnQgcmV0O1xcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcXHUwMDI2Y21kKTtcXG4gMzk3OlxcdFxcdGlmIChyZXQpXFxuIDM5ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzOTk6XFx0XFxuIDQwMDpcXHRcXHRzd2l0Y2ggKGNtZC5iYXNlLmR1cGxleCkge1xcbiA0MDE6XFx0XFx0Y2FzZSBEVVBMRVhfSEFMRjpcXG4gNDAyOlxcdFxcdFxcdGR1cGxleCA9IFxcXCJoYWxmXFxcIjtcXG4gNDAzOlxcdFxcdFxcdGJyZWFrO1xcbiA0MDQ6XFx0XFx0Y2FzZSBEVVBMRVhfRlVMTDpcXG4gNDA1OlxcdFxcdFxcdGR1cGxleCA9IFxcXCJmdWxsXFxcIjtcXG4gNDA2OlxcdFxcdFxcdGJyZWFrO1xcbiA0MDc6XFx0XFx0ZGVmYXVsdDpcXG4gNDA4OlxcdFxcdFxcdGR1cGxleCA9IFxcXCJ1bmtub3duXFxcIjtcXG4gNDA5OlxcdFxcdFxcdGJyZWFrO1xcbiA0MTA6XFx0XFx0fVxcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlc1xcXFxuXFxcIiwgZHVwbGV4KTtcXG4gNDEzOlxcdH1cXG4gNDE0OlxcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyhkdXBsZXgpO1xcbiA0MTU6XFx0XFxuIDQxNjpcXHRzdGF0aWMgc3NpemVfdCB0ZXN0aW5nX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiA0MTc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuIDQxODpcXHR7XFxuIDQxOTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xcbiA0MjA6XFx0XFxuIDQyMTpcXHRcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbiA0MjI6XFx0XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCAhIW5ldGlmX3Rlc3RpbmcobmV0ZGV2KSk7XFxuIDQyMzpcXHRcXG4gNDI0OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MjU6XFx0fVxcbiA0MjY6XFx0c3RhdGljIERFVklDRV9BVFRSX1JPKHRlc3RpbmcpO1xcbiA0Mjc6XFx0XFxuIDQyODpcXHRzdGF0aWMgc3NpemVfdCBkb3JtYW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiA0Mjk6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjI4Ljg2MDE5NDgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODU1MDM2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkRlbHZpbmcgaW50byBOZXR3b3JrIERldmljZSBMb2NraW5nIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbnMgYXJlIHN5bmNocm9uaXplZC4gSSdtIGdvaW5nIHRvIGp1bXAgaW4gYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9ucyBmb3IgYG5ldGRldl9uZWVkX29wc19sb2NrYCwgYG5ldGRldl9sb2NrX29wc2AsIGFuZCBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgbG9ja2luZyBpcyBpbXBsZW1lbnRlZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmVzLCBhbmQgaG93IGxpbmsgc2V0dGluZ3MgYXJlIGFjY2Vzc2VkLiBLbm93aW5nIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBpcyBjcml0aWNhbCBmb3Igd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZyBvciBkZXNpZ25pbmcuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgaGVyZSBpcyBwYXJhbW91bnQ7IGl0IGRpcmVjdGx5IGltcGFjdHMgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIGEgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIG1hbmlmZXN0IGluIHNvbWUgcmVhbGx5IHVnbHkgd2F5cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0aGUgY29udHJvbCBmbG93IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTg0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMTozMS4xNDU3MDE1MjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTM2MjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9ldGh0b29sLmg9MzI2PV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0zMjctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpO1xcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjMyODppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI5LVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6MzEuMjcxMDY4ODM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MzQ3MTk4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEludGVyZmFjZSBMaW5rIFNldHRpbmdzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgd2hlcmUgSSdkICpleHBlY3QqIHRvIGZpbmQgaXQsIGlzIGxpa2VseSB3aXRoaW4gdGhlIGBuZXQvZXRodG9vbC9gIGRpcmVjdG9yeSwgb3IgcG90ZW50aWFsbHkgc29tZXdoZXJlIGluIHRoZSBjb3JlIG5ldHdvcmsgaW50ZXJmYWNlIGNvZGUuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgc3RhcnRpbmcgdGhlcmUsIHRvIGdldCB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzcwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6MzMuMDA1NzkwNzUyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzczMzU5OTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGlmX2dldF9saW5rX2tzZXR0aW5nc1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmM9MjQyPXN0YXRpYyB2b2lkIGdldF9kZXZpY2Vfc3RhdGUoc3RydWN0IGxlZF9uZXRkZXZfZGF0YSAqdHJpZ2dlcl9kYXRhKVxcbi0tXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYy0yNDctXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYzoyNDg6XFx0aWYgKG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyh0cmlnZ2VyX2RhdGEtXFx1MDAzZW5ldF9kZXYsIFxcdTAwMjZjbWQpKVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMtMjQ5LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Nzk1PXN0YXRpYyBpbnQgYm9uZF91cGRhdGVfc3BlZWRfZHVwbGV4KHN0cnVjdCBzbGF2ZSAqc2xhdmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTgwMC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjgwMTpcXHRyZXMgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3Moc2xhdmVfZGV2LCBcXHUwMDI2ZWNtZCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy04MDItXFx0aWYgKHJlcyBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTMwODU9c3RhdGljIHZvaWQgX190ZWFtX3BvcnRfY2hhbmdlX3NlbmQoc3RydWN0IHRlYW1fcG9ydCAqcG9ydCwgYm9vbCBsaW5rdXApXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwOTQtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDk1OlxcdFxcdGVyciA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhwb3J0LVxcdTAwM2VkZXYsIFxcdTAwMjZlY21kKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwOTYtXFx0XFx0aWYgKCFlcnIpIHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmM9MTE5PWludCBmY29lX2xpbmtfc3BlZWRfdXBkYXRlKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpXFxuLS1cXG5kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jLTEyMy1cXG5kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jOjEyNDpcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFxcdTAwMjZlY21kKSkge1xcbmRyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmMtMTI1LVxcdFxcdGxwb3J0LVxcdTAwM2VsaW5rX3N1cHBvcnRlZF9zcGVlZHMgXFx1MDAyNj0gfihGQ19QT1JUU1BFRURfMUdCSVQgIHxcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTMyNj1fX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI3LVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDozMjg6aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTMyOS1cXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncyk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM9MzY9c3RhdGljIGludCBwb3J0X2Nvc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy0zOS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM6NDA6XFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2ZWNtZCkpIHtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtNDEtXFx0XFx0c3dpdGNoIChlY21kLmJhc2Uuc3BlZWQpIHtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEyMT1zdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTItXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE1MzpcXHRcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTU0LVxcdFxcdFxcdHJldCA9IDA7XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTQyOT1zdHJ1Y3QgZXRodG9vbF9saW5rX3VzZXR0aW5ncyB7XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQzOC0vKiBJbnRlcm5hbCBrZXJuZWwgaGVscGVyIHRvIHF1ZXJ5IGEgZGV2aWNlIGV0aHRvb2xfbGlua19zZXR0aW5ncy4gKi9cXG5uZXQvZXRodG9vbC9pb2N0bC5jOjQzOTppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NDAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTQ1Nj1pbnQgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NjMtXFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0NjQ6XFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDY1LVxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuLS1cXG5uZXQvZXRodG9vbC9saW5raW5mby5jPTI0PXN0YXRpYyBpbnQgbGlua2luZm9fcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuLS1cXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTM2LVxcdFxcdHJldHVybiByZXQ7XFxubmV0L2V0aHRvb2wvbGlua2luZm8uYzozNzpcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2ZGF0YS1cXHUwMDNla3NldHRpbmdzKTtcXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTM4LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2V0aHRvb2wvbGlua2luZm8uYz05OD1ldGhubF9zZXRfbGlua2luZm8oc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMTA2LVxcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM6MTA3OlxcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZrc2V0dGluZ3MpO1xcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMTA4LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYz0yOD1zdGF0aWMgaW50IGxpbmttb2Rlc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTQxLVxcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jOjQyOlxcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZkYXRhLVxcdTAwM2Vrc2V0dGluZ3MpO1xcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTQzLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYz0zMTk9ZXRobmxfc2V0X2xpbmttb2RlcyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmMtMzI2LVxcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jOjMyNzpcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2a3NldHRpbmdzKTtcXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy0zMjgtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2JzLmM9MzIzPXN0YXRpYyB2b2lkIGNic19zZXRfcG9ydF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYnNfc2NoZWRfZGF0YSAqcSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2JzLmMtMzI5LVxcbm5ldC9zY2hlZC9zY2hfY2JzLmM6MzMwOlxcdGVyciA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZlY21kKTtcXG5uZXQvc2NoZWQvc2NoX2Nicy5jLTMzMS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTI5ND1zdGF0aWMgdm9pZCB0YXByaW9fc2V0X3BpY29zX3Blcl9ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMDItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzAzOlxcdGVyciA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZlY21kKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMDQtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjM1LjM3OTE1NTEyOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTI3NTcxMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IGBuZXQvY29yZS9uZXQtc3lzZnMuY2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBoZWxwZXIgYW5kIHRoZSByZWxhdGVkIHN5c2ZzIGNhbGxiYWNrcyBmb3IgYHNwZWVkYCBhbmQgYGR1cGxleGAgYXR0cmlidXRlcyAoYHNwZWVkX3Nob3dgLCBgZHVwbGV4X3Nob3dgKS4gVGhlc2UgYXR0cmlidXRlcyBhcmUgY3JlYXRlZCB1c2luZyBgREVWSUNFX0FUVFJfUk9gLlxuXG5GaXJzdCwgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIHN5c2ZzIGF0dHJpYnV0ZXMgcmVsYXRlZCB0byB0aGUgbGluaydzIHNwZWVkIGFuZCBkdXBsZXggc2V0dGluZ3MuIFRoZSBjb2RlIHJlZmFjdG9ycyBsb2NraW5nIG1lY2hhbmlzbXMgKGBzeXNmc19ydG5sX2xvY2tgIGFuZCBgbmV0ZGV2X2xvY2tfb3BzYCkgYW5kLCBjcnVjaWFsbHksIGNhbGxzIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIHdoaWxlIGFsc28gZG9pbmcgY2hlY2tzIGZvciBgZGV2X2lzYWxpdmVgIGFuZCBgbmV0aWZfcnVubmluZ2AuIFRoaXMgaGl0cyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYSBjcml0aWNhbCBjb3JlIHN1YnN5c3RlbSAobmV0d29ya2luZyB2aWEgc3lzZnMpLiBTbywgYFdvcnRoRnV6emluZyA9IFRydWVgLlxuXG5OZXh0LCB0aGUgYEZvY3VzU3ltYm9sc2A6IHdoYXQgZG8gd2UgbmVlZCB0byB0YXJnZXQ/IE9idmlvdXNseSwgdGhlIGNvcmUgZnVuY3Rpb25zOiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCwgYHNwZWVkX3Nob3dgLCBhbmQgYGR1cGxleF9zaG93YC4gVGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBwYXRjaC5cblxuRmluYWxseSwgd2hhdCBhcmUgdGhlIGBFbmFibGVDb25maWdzYD8gV2UgbmVlZCB0byBlbnN1cmUgdGhlIHJlbGV2YW50IGNvZGUgaXMgY29tcGlsZWQuIFRoZSBmaWxlIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AgaXMgY2xlYXJseSBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUPXlgLiBUaGUgc3lzZnMgYXR0cmlidXRlcyB0aGVtc2VsdmVzIGFyZSBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1NZU0ZTYC4gVGhlcmVmb3JlLCB3ZSBtdXN0IGVuYWJsZSBgTkVUYCBhbmQgYFNZU0ZTYC4gYENPTkZJR19JTkVUYCBtaWdodCBiZSB0eXBpY2FsLCBidXQgd2UgZG9uJ3QgbmVlZCBpdC4gSSdsbCBkb3VibGUtY2hlY2sgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCB0byBiZSBzdXJlLiBZZXAsIHRoZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgYXJlIGluZGVlZCBjb25kaXRpb25hbCBvbiBgQ09ORklHX1NZU0ZTYC5cblxuU28sIHRvIHN1bW1hcml6ZTpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgVHJ1ZWAgKGNvcmUgbmV0IHN5c2ZzIGF0dHJpYnV0ZXMsIGhpdHMgbG9ja2luZywgY3J1Y2lhbCBjaGVja3MpXG4qICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24gcHJvdmlkZWQuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJzeXNmc19nZXRfbGlua19rc2V0dGluZ3NcIiwgXCJzcGVlZF9zaG93XCIsIFwiZHVwbGV4X3Nob3dcIl1gXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiTkVUXCIsIFwiU1lTRlNcIl1gXG5cbkxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MDgsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjQwLjUwNjcyOTAxOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzM2MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIlNZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJzcGVlZF9zaG93XCIsXG4gICAgXCJkdXBsZXhfc2hvd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgc3BlZWQgYW5kIGR1cGxleCBhdHRyaWJ1dGVzIGluIG5ldC9jb3JlL25ldC1zeXNmcy5jIHRvIHVzZSBhIG5ldyBsb2NraW5nIGhlbHBlciBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKSwgbW9kaWZ5aW5nIGhvdyBydG5sIGFuZCBuZXRkZXYgb3BzIGxvY2tzIGFyZSBhY3F1aXJlZCBhbmQgY2hlY2tlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBzeXNmcyBjb2RlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3N5cy9jbGFzcy9uZXQvXFx1MDAzY2lmYWNlXFx1MDAzZS9zcGVlZCBhbmQgL3N5cy9jbGFzcy9uZXQvXFx1MDAzY2lmYWNlXFx1MDAzZS9kdXBsZXguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwic3BlZWRfc2hvd1wiLFxuICAgIFwiZHVwbGV4X3Nob3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzIHNwZWVkIGFuZCBkdXBsZXggYXR0cmlidXRlcyBpbiBuZXQvY29yZS9uZXQtc3lzZnMuYyB0byB1c2UgYSBuZXcgbG9ja2luZyBoZWxwZXIgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCksIG1vZGlmeWluZyBob3cgcnRubCBhbmQgbmV0ZGV2IG9wcyBsb2NrcyBhcmUgYWNxdWlyZWQgYW5kIGNoZWNrZWQuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgc3lzZnMgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9zeXMvY2xhc3MvbmV0L1xcdTAwM2NpZmFjZVxcdTAwM2Uvc3BlZWQgYW5kIC9zeXMvY2xhc3MvbmV0L1xcdTAwM2NpZmFjZVxcdTAwM2UvZHVwbGV4LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMTo0MC41ODg0NzM2ODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTY1NDYyMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6NDAuNTg5MTAyMTU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjgxNjQ4Mjg3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgc3BlZWQgYW5kIGR1cGxleCBhdHRyaWJ1dGVzIChgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2ApIGJ5IGludHJvZHVjaW5nIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgdG8gb3B0aW1pemUgbG9ja2luZyAoYXZvaWRpbmcgdW5uZWNlc3NhcnkgUlROTCBsb2NraW5nIHdoZW4gb25seSBuZXRkZXYgb3BzIGxvY2sgaXMgcmVxdWlyZWQpLlxcblxcblRoZSBzdGFjayB2YXJpYWJsZSBgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kYCBpcyBwYXNzZWQgdG8gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCwgd2hpY2ggZGVsZWdhdGVzIHRvIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAuIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIGBtZW1zZXQoLi4uLCAwLCBzaXplb2YoKmNtZCkpYCBwcmlvciB0byBpbnZva2luZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgc2hvdyBmdW5jdGlvbnMgb25seSBhY2Nlc3MgZmllbGRzIG9mIGBjbWRgIGlmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgcmV0dXJucyBzdWNjZXNzICgwKS4gT3V0cHV0IGlzIGZvcm1hdHRlZCBpbnRvIHN5c2ZzIHN0cmluZyBidWZmZXJzIHVzaW5nIGBzeXNmc19lbWl0KClgLCBlbGltaW5hdGluZyBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgZGlzY2xvc3VyZS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbG9ja2luZyByZWdyZXNzaW9ucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc1NDIzZjc0OGRkNWU0Y2QyNzFiZjAwMzg2YWNmMTc3ZjkwYmY3YWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIwOjEwOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xuaW5kZXggMzUyMTczZGY3NTc4NS4uZmE3OTBlNDQyNTcwNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jXG4rKysgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xuQEAgLTExOCw2ICsxMTgsNDkgQEAgc3RhdGljIGludCBzeXNmc19ydG5sX2xvY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuK1x0Ym9vbCBuZWVkX3J0bmw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LypcbitcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4rXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4rXHQgKi9cbitcdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSB8fFxuK1x0XHQgICAgKG5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNlxuK1x0XHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MpO1xuK1x0aWYgKG5lZWRfcnRubCkge1xuK1x0XHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG4rXG4rXHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRyZXQgPSAtRUlOVkFMO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuK1x0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG4rXHRcdFx0cmV0ID0gMDtcbitcdH1cbitcbit1bmxvY2s6XG4rXHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuK1x0aWYgKG5lZWRfcnRubClcbitcdFx0cnRubF91bmxvY2soKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCdzICovXG4gc3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXG5AQCAtMzMyLDcwICszNzUsNDEgQEAgc3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpO1xuIHN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuLVx0aW50IHJldCA9IC1FSU5WQUw7XG4tXG4tXHQvKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcbi1cdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbi1cdCAqL1xuLVx0aWYgKCFuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuK1x0aW50IHJldDtcbiBcbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuK1x0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXHUwMDI2Y21kKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSAtRUlOVkFMO1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuLVx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4tXG4tXHRcdGlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmNtZCkpXG4tXHRcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcbi1cdH1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4gfVxuIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XG4gXG4gc3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbitcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbitcdGNvbnN0IGNoYXIgKmR1cGxleDtcbitcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbitcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVJTlZBTDtcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbi1cdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuLVxuLVx0XHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZjbWQpKSB7XG4tXHRcdFx0Y29uc3QgY2hhciAqZHVwbGV4O1xuLVxuLVx0XHRcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfSEFMRjpcbi1cdFx0XHRcdGR1cGxleCA9IFwiaGFsZlwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfRlVMTDpcbi1cdFx0XHRcdGR1cGxleCA9IFwiZnVsbFwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0ZGVmYXVsdDpcbi1cdFx0XHRcdGR1cGxleCA9IFwidW5rbm93blwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcIiVzXFxuXCIsIGR1cGxleCk7XG4tXHRcdH1cbitcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4rXHRjYXNlIERVUExFWF9IQUxGOlxuK1x0XHRkdXBsZXggPSBcImhhbGZcIjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIERVUExFWF9GVUxMOlxuK1x0XHRkdXBsZXggPSBcImZ1bGxcIjtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRkdXBsZXggPSBcInVua25vd25cIjtcbitcdFx0YnJlYWs7XG4gXHR9XG4tXHRydG5sX3VubG9jaygpO1xuLVx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlc1xcblwiLCBkdXBsZXgpO1xuIH1cbiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjQwLjU4OTEwMzE3NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzM0MjgzMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBJbnRlcmZhY2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSB0b3VjaGVzIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gcmV2b2x2ZSBhcm91bmQgcmVmYWN0b3JpbmcgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgIHdpdGhpbiB0aGUgc3lzZnMgaW50ZXJmYWNlIGJ5IGludHJvZHVjaW5nIHRoaXMgbmV3IGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGZ1bmN0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgYW5kIGBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzYCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhlIGBjbWRgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIGFuZCB1c2VkIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgc3VzcGVjdCBgY21kYCBob2xkcyB0aGUgc3BlY2lmaWMgRVRIVE9PTCBjb21tYW5kIGJlaW5nIGV4ZWN1dGVkLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBsaWZlY3ljbGUgaXMga2V5LlxuXG5UbyBzcGVlZCB0aGluZ3MgdXAsIEknbGwgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uIG9mIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBlc3NlbnRpYWwgY29udGV4dCBJIG5lZWQgdG8gcHJvY2VlZCB3aXRoIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjQ1LjkyMzM4OTk3NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzODA1OTY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYz0yNDI9c3RhdGljIHZvaWQgZ2V0X2RldmljZV9zdGF0ZShzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEpXFxuLS1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jLTI0Ny1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jOjI0ODpcXHRpZiAobmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHRyaWdnZXJfZGF0YS1cXHUwMDNlbmV0X2RldiwgXFx1MDAyNmNtZCkpXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYy0yNDktXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz03OTU9c3RhdGljIGludCBib25kX3VwZGF0ZV9zcGVlZF9kdXBsZXgoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtODAwLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6ODAxOlxcdHJlcyA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzbGF2ZV9kZXYsIFxcdTAwMjZlY21kKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTgwMi1cXHRpZiAocmVzIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzA4NT1zdGF0aWMgdm9pZCBfX3RlYW1fcG9ydF9jaGFuZ2Vfc2VuZChzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0LCBib29sIGxpbmt1cClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA5NC1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwOTU6XFx0XFx0ZXJyID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHBvcnQtXFx1MDAzZWRldiwgXFx1MDAyNmVjbWQpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA5Ni1cXHRcXHRpZiAoIWVycikge1xcbi0tXFxuZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYz0xMTk9aW50IGZjb2VfbGlua19zcGVlZF91cGRhdGUoc3RydWN0IGZjX2xwb3J0ICpscG9ydClcXG4tLVxcbmRyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmMtMTIzLVxcbmRyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmM6MTI0OlxcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgXFx1MDAyNmVjbWQpKSB7XFxuZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYy0xMjUtXFx0XFx0bHBvcnQtXFx1MDAzZWxpbmtfc3VwcG9ydGVkX3NwZWVkcyBcXHUwMDI2PSB+KEZDX1BPUlRTUEVFRF8xR0JJVCAgfFxcbi0tXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg9MzI2PV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0zMjctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpO1xcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjMyODppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI5LVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYz0zNj1zdGF0aWMgaW50IHBvcnRfY29zdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jLTM5LVxcbm5ldC9icmlkZ2UvYnJfaWYuYzo0MDpcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZlY21kKSkge1xcbm5ldC9icmlkZ2UvYnJfaWYuYy00MS1cXHRcXHRzd2l0Y2ggKGVjbWQuYmFzZS5zcGVlZCkge1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTIxPXN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyOS1cXHQvKlxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzMDpcXHQgKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIG5ldGlmX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwc1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMS1cXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTItXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE1MzpcXHRcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTU0LVxcdFxcdFxcdHJldCA9IDA7XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTQyOT1zdHJ1Y3QgZXRodG9vbF9saW5rX3VzZXR0aW5ncyB7XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQzOC0vKiBJbnRlcm5hbCBrZXJuZWwgaGVscGVyIHRvIHF1ZXJ5IGEgZGV2aWNlIGV0aHRvb2xfbGlua19zZXR0aW5ncy4gKi9cXG5uZXQvZXRodG9vbC9pb2N0bC5jOjQzOTppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NDAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ1Mi19XFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0NTM6RVhQT1JUX1NZTUJPTChuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MpO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDU0LVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz00NTY9aW50IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDYzLVxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDY0OlxcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGxpbmtfa3NldHRpbmdzKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2NS1cXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbi0tXFxubmV0L2V0aHRvb2wvbGlua2luZm8uYz0yND1zdGF0aWMgaW50IGxpbmtpbmZvX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxcbi0tXFxubmV0L2V0aHRvb2wvbGlua2luZm8uYy0zNi1cXHRcXHRyZXR1cm4gcmV0O1xcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM6Mzc6XFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXFx1MDAyNmRhdGEtXFx1MDAzZWtzZXR0aW5ncyk7XFxubmV0L2V0aHRvb2wvbGlua2luZm8uYy0zOC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM9OTg9ZXRobmxfc2V0X2xpbmtpbmZvKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTEwNi1cXG5uZXQvZXRodG9vbC9saW5raW5mby5jOjEwNzpcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2a3NldHRpbmdzKTtcXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTEwOC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM9Mjg9c3RhdGljIGludCBsaW5rbW9kZXNfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuLS1cXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy00MS1cXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYzo0MjpcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2ZGF0YS1cXHUwMDNla3NldHRpbmdzKTtcXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy00My1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM9MzE5PWV0aG5sX3NldF9saW5rbW9kZXMoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTMyNi1cXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYzozMjc6XFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXFx1MDAyNmtzZXR0aW5ncyk7XFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmMtMzI4LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nicy5jPTMyMz1zdGF0aWMgdm9pZCBjYnNfc2V0X3BvcnRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2JzX3NjaGVkX2RhdGEgKnEpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nicy5jLTMyOS1cXG5uZXQvc2NoZWQvc2NoX2Nicy5jOjMzMDpcXHRlcnIgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2ZWNtZCk7XFxubmV0L3NjaGVkL3NjaF9jYnMuYy0zMzEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEyOTQ9c3RhdGljIHZvaWQgdGFwcmlvX3NldF9waWNvc19wZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzAyLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTMwMzpcXHRlcnIgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2ZWNtZCk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzA0LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMTo0Ny44NjE0NTU3NjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk5NDUzMjAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBpbiBgZXRodG9vbC9pb2N0bC5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGlzLiBUbyByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AsIEkgbmVlZCB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGNvZGUgaW4gYG5ldC9ldGh0b29sL2lvY3RsLmNgLCBhbmQgSSdtIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDQzOC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25hbGl0eSBpcyBsaWtlbHkgZGVmaW5lZCBvciBhdCBsZWFzdCB3aGVyZSBJIGNhbiB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBpb2N0bCBmcmFtZXdvcmsuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBpbnRlcmZhY2UgYW5kIGhvdyBpdCByZXRyaWV2ZXMgdGhlIGxpbmsgc2V0dGluZ3MgZGF0YS4gVGhpcydsbCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUgaW4gcmVsYXRpb24gdG8gdGhlIGJyb2FkZXIgRXRoZXJuZXQgZHJpdmVyIGludGVyYWN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhcm91bmQgdGhpcyBmdW5jdGlvbiBpcyBwYXJhbW91bnQgdG8gY29ycmVjdGx5IGludGVycHJldCB0aGUgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMTo1MC44NTU5ODk4OTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDM1OlxcdFxcdH0gbGlua19tb2RlcztcXG4gNDM2OlxcdH07XFxuIDQzNzpcXHRcXG4gNDM4OlxcdC8qIEludGVybmFsIGtlcm5lbCBoZWxwZXIgdG8gcXVlcnkgYSBkZXZpY2UgZXRodG9vbF9saW5rX3NldHRpbmdzLiAqL1xcbiA0Mzk6XFx0aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiA0NDA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXFxuIDQ0MTpcXHR7XFxuIDQ0MjpcXHRcXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGRldik7XFxuIDQ0MzpcXHRcXG4gNDQ0OlxcdFxcdGlmICghZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxcbiA0NDU6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA0NDY6XFx0XFxuIDQ0NzpcXHRcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuIDQ0ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0bWVtc2V0KGxpbmtfa3NldHRpbmdzLCAwLCBzaXplb2YoKmxpbmtfa3NldHRpbmdzKSk7XFxuIDQ1MTpcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xcbiA0NTI6XFx0fVxcbiA0NTM6XFx0RVhQT1JUX1NZTUJPTChuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MpO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHQvKiBDb252ZW5pZW5jZSBoZWxwZXIgZm9yIGNhbGxlcnMgdGhhdCBob2xkIG9ubHkgcnRubF9sb2NrKCkuICovXFxuIDQ1NjpcXHRpbnQgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiA0NTc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncylcXG4gNDU4OlxcdHtcXG4gNDU5OlxcdFxcdGludCByZXQ7XFxuIDQ2MDpcXHRcXG4gNDYxOlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuIDQ2MjpcXHRcXG4gNDYzOlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbiA0NjQ6XFx0XFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xcbiA0NjU6XFx0XFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4gNDY2OlxcdFxcdHJldHVybiByZXQ7XFxuIDQ2NzpcXHR9XFxuIDQ2ODpcXHRFWFBPUlRfU1lNQk9MKF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MpO1xcbiA0Njk6XFx0XFxuIDQ3MDpcXHQvKiBjb252ZXJ0IGV0aHRvb2xfbGlua191c2V0dGluZ3MgaW4gdXNlciBzcGFjZSB0byBhIGtlcm5lbCBpbnRlcm5hbFxcbiA0NzE6XFx0ICogZXRodG9vbF9saW5rX2tzZXR0aW5ncy4gcmV0dXJuIDAgb24gc3VjY2VzcywgZXJybm8gb24gZXJyb3IuXFxuIDQ3MjpcXHQgKi9cXG4gNDczOlxcdHN0YXRpYyBpbnQgbG9hZF9saW5rX2tzZXR0aW5nc19mcm9tX3VzZXIoc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKnRvLFxcbiA0NzQ6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHZvaWQgX191c2VyICpmcm9tKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMTo1MC44NTYyMzgyOTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzg3NzUwODM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgTmV0d29yayBJbnRlcmZhY2UgTGluayBTZXR0aW5ncyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEknbSB0YWtpbmcgYSBsb29rIGF0IGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIHJldHJpZXZpbmcgYW5kIGhhbmRsaW5nIGxpbmsgY29uZmlndXJhdGlvbi4gRmlyc3QsIHRoZSBmdW5jdGlvbiB6ZXJvZXMgb3V0IHRoZSBgbGlua19rc2V0dGluZ3NgIHN0cnVjdHVyZSB1c2luZyBgbWVtc2V0YC4gVGhhdCdzIHN0YW5kYXJkIHByYWN0aWNlLCBlbnN1cmluZyB3ZSBzdGFydCB3aXRoIGEgY2xlYW4gc2xhdGUgYmVmb3JlIHBvcHVsYXRpbmcgdGhlIHN0cnVjdHVyZS4gVGhlbiwgdGhlIHJlYWwgYWN0aW9uIGhhcHBlbnM6IHdlIGNhbGwgdGhlIGBnZXRfbGlua19rc2V0dGluZ3NgIGZ1bmN0aW9uIHZpYSB0aGUgZGV2aWNlJ3MgYGV0aHRvb2xfb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgaG93IHdlIGFjdHVhbGx5IGludGVyZmFjZSB3aXRoIHRoZSBuZXR3b3JrIGNhcmQncyBkcml2ZXIgdG8gZmV0Y2ggaXRzIGN1cnJlbnQgc2V0dGluZ3MsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuXG5cbk5leHQsIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHN5c2ZzIGZyYW1ld29yay4gSSdtIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMTE1LTE3MCBhbmQgMzcwLTQyMC4gSSBleHBlY3QgdG8gZmluZCB0aGUgc3lzZnMgYXR0cmlidXRlIGRlZmluaXRpb25zIGFuZCBob3cgdGhlc2UgbGluayBzZXR0aW5ncyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBzZWN0aW9ucyBkZWFsIHdpdGggdGhlIGZpbGUgY3JlYXRpb24sIHBlcm1pc3Npb25zLCBhbmQgcG9zc2libHkgaG93IHRoZSBhdHRyaWJ1dGVzIGFyZSBwb3B1bGF0ZWQgd2l0aCB0aGUgZGF0YSB3ZSBhcmUgZ2V0dGluZyBmcm9tIHRoZSBkZXZpY2UgZHJpdmVyLiBUaGlzIHNob3VsZCBwcm92aWRlIGNvbnRleHQgb24gaG93IHRoZXNlIHNldHRpbmdzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgZmlsZXN5c3RlbSBhbmQgaG93IHRoZXkgY2FuIGJlIGFjY2Vzc2VkL21vZGlmaWVkIGJ5IHVzZXIgc3BhY2UgdG9vbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjU4LjczMzc0OTM0M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0LXN5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdFxcdHN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pO1xcbiAxMTY6XFx0XFx0ZGV2X3B1dChuZGV2KTtcXG4gMTE3OlxcdFxcbiAxMTg6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTE5OlxcdH1cXG4gMTIwOlxcdFxcbiAxMjE6XFx0c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxcbiAxMjI6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiAxMjM6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuIDEyNDpcXHR7XFxuIDEyNTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xcbiAxMjY6XFx0XFx0Ym9vbCBuZWVkX3J0bmw7XFxuIDEyNzpcXHRcXHRpbnQgcmV0O1xcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHQvKlxcbiAxMzA6XFx0XFx0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcXG4gMTMxOlxcdFxcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cXG4gMTMyOlxcdFxcdCAqL1xcbiAxMzM6XFx0XFx0aWYgKCFuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXFxuIDEzNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTM1OlxcdFxcbiAxMzY6XFx0XFx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKG5ldGRldikgfHxcXG4gMTM3OlxcdFxcdFxcdCAgICAobmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2XFxuIDEzODpcXHRcXHRcXHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MpO1xcbiAxMzk6XFx0XFx0aWYgKG5lZWRfcnRubCkge1xcbiAxNDA6XFx0XFx0XFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWtvYmosIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyLCBuZXRkZXYpO1xcbiAxNDE6XFx0XFx0XFx0aWYgKHJldClcXG4gMTQyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE0MzpcXHRcXHR9XFxuIDE0NDpcXHRcXHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0aWYgKCFkZXZfaXNhbGl2ZShuZXRkZXYpKSB7XFxuIDE0NzpcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbiAxNDg6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIDE0OTpcXHRcXHR9XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDE1MjpcXHRcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuIDE1MzpcXHRcXHRcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXFxuIDE1NDpcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbiAxNTU6XFx0XFx0fVxcbiAxNTY6XFx0XFxuIDE1NzpcXHR1bmxvY2s6XFxuIDE1ODpcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xcbiAxNTk6XFx0XFx0aWYgKG5lZWRfcnRubClcXG4gMTYwOlxcdFxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuIDE2MTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNjI6XFx0fVxcbiAxNjM6XFx0XFxuIDE2NDpcXHQvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwncyAqL1xcbiAxNjU6XFx0c3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxcbiAxNjY6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZixcXG4gMTY3OlxcdFxcdFxcdFxcdCAgIHNzaXplX3QgKCpmb3JtYXQpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICosIGNoYXIgKikpXFxuIDE2ODpcXHR7XFxuIDE2OTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoZGV2KTtcXG4gMTcwOlxcdFxcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAxNzM6XFx0XFx0aWYgKGRldl9pc2FsaXZlKG5kZXYpKVxcbiAxNzQ6XFx0XFx0XFx0cmV0ID0gKCpmb3JtYXQpKG5kZXYsIGJ1Zik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjU4LjczMzkxOTEwM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDAxOTk4NDY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSaXNrIEFzc2Vzc21lbnQgZm9yIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNvZGUgaXMgc2FmZSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IEtNU0FOIGlzc3Vlcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyB3aGVyZSBLTVNBTiBzaGluZXMuXG5cbkZpcnN0LCBJJ2xsIHRyYWNlIHRoZSBkYXRhIGZsb3cgaW4gYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgLiBUaGUga2V5IGZ1bmN0aW9uIGlzIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLiBJdCBsb29rcyBsaWtlOlxuXG5gYGBjXG5zdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcblx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbntcblx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuXHRpbnQgcmV0O1xuXG5cdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG5cdGlmIChyZXQpXG5cdFx0cmV0dXJuIHJldDtcblxuXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcbn1cbmBgYFxuXG5JZiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCByZXR1cm5zIDAsIHRoZW4gdGhlIGNydWNpYWwgcGFydCBoYXBwZW5zIGluIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgLiBJIHNlZSB0aGF0IGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGluaXRpYWxseSBkb2VzIGBtZW1zZXQobGlua19rc2V0dGluZ3MsIDAsIHNpemVvZigqbGlua19rc2V0dGluZ3MpKWAgb24gdGhlIGBjbWRgIHN0cnVjdC4gVGhlbiwgYSBkcml2ZXIncyBgZ2V0X2xpbmtfa3NldHRpbmdzYCBjYWxsYmFjayBwb3B1bGF0ZXMgaXQuIElmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybnMgYW4gZXJyb3IsIHRoZSBgY21kYCBzdHJ1Y3QgaXMgKm5ldmVyKiByZWFkLiBUaGlzIG1lYW5zIHRoZSBjb2RlIG9ubHkgcmVhZHMgaWYgaXQncyBiZWVuIGluaXRpYWxpemVkLiBgc3lzZnNfZW1pdGAgaXMgdXNlZCB0byBmb3JtYXQgdGhlIGBjbWRgIHN0cnVjdCBpbnRvIGEgc3RyaW5nIHRoYXQgd2lsbCBiZSB3cml0dGVuIHRvIGBidWZgLCBzbyB0aGF0J3Mgb2theS5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgZm9yIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuIFRoaXMgcGF0Y2ggYWltcyB0byBpbXByb3ZlIHRoYXQgYXNwZWN0IGJ5IHVzaW5nIFJUTkwgb25seSBpZiBuZWVkZWQgd2l0aCBgb3BfbmVlZHNfcnRubGAsIGBuZXRkZXZfbmVlZF9vcHNfbG9ja2AsIGNoZWNraW5nIGBkZXZfaXNhbGl2ZWAsIGFuZCB0aGVuIGNhbGxpbmcgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AuIFRoaXMgbG9va3MgZ29vZCwgYXZvaWRpbmcgUlROTCB3aGVuIGl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2FyeS5cblxuTm93LCBjb25jZXJuaW5nIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrOlxuLSAgIFRoZSBgY21kYCBzdHJ1Y3QgaXMgc3RhY2stYWxsb2NhdGVkLCB3aGljaCBpcyBmaW5lIGluIGl0c2VsZi5cbi0gICBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBjYWxscyBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYC5cbi0gICBJbnNpZGUgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AsIHRoZSBjcnVjaWFsIGBtZW1zZXQobGlua19rc2V0dGluZ3MsIDAsIHNpemVvZigqbGlua19rc2V0dGluZ3MpKWAgKmd1YXJhbnRlZXMqIHRoYXQgYGNtZGAgaXMgemVyb2VkIGJlZm9yZSBhbnkgZHJpdmVyIGludGVyYWN0aW9uLlxuLSAgIElmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybnMgMCwgYGNtZGAgaXMgZnVsbHkgemVyb2VkIGFuZCBwb3B1bGF0ZWQgYnkgdGhlIGRyaXZlci5cbi0gICBJZiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCByZXR1cm5zIGFuIGVycm9yIChub24temVybyksIGBjbWRgIGlzICpuZXZlciogcmVhZCBvciB1c2VkLCBzbyB0aGlzIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy5cbi0gICBgc3lzZnNfZW1pdGAgZm9ybWF0cyB0aGUgdmFsdWUgYXMgYSBzdHJpbmcgaW50byB0aGUgYnVmZmVyLCBzbyBubyByYXcga2VybmVsIHN0cnVjdCBieXRlcyBhcmUgZXhwb3NlZC5cbi0gICBBbnkgbG9ja2luZyBvciBkZXZpY2Ugc3RhdGUgaXNzdWVzIHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIGFuZCBLQVNBTi5cblxuTGV0IG1lIGFuYWx5emUgdGhlIHBhdGggaW4gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AgYSBiaXQgbW9yZSBjYXJlZnVsbHk6XG5cbmBgYGNcbnJldCA9IC1FSU5WQUw7XG5pZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG5cdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKSlcblx0XHRyZXQgPSAwO1xufVxuYGBgXG5cbklmIGBuZXRpZl9ydW5uaW5nKG5ldGRldilgIGlzIGZhbHNlLCBgcmV0YCByZW1haW5zIGAtRUlOVkFMYC4gSWYgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgZmFpbHMgKHJldHVybnMgbm9uLXplcm8pLCBgcmV0YCBzdGlsbCByZW1haW5zIGAtRUlOVkFMYC4gT25seSBpZiBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCAqc3VjY2VlZHMqIGRvZXMgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AgcmV0dXJuIDAuIEFuZCBpbXBvcnRhbnRseSwgYGNtZGAgKmlzKiBpbml0aWFsaXplZCBieSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYC5cblxuSW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zIChgc3BlZWRfc2hvd2AsIGBkdXBsZXhfc2hvd2ApOlxuYGBgY1xucmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXHUwMDI2Y21kKTtcbmlmIChyZXQpXG4gICAgcmV0dXJuIHJldDtcbmBgYFxuXG5gY21kYCBpcyBvbmx5IHJlYWQgaWYgYHJldCA9PSAwYC4gVGhlcmVmb3JlLCBpdCdzIGFsd2F5cyBpbml0aWFsaXplZCB3aGVuIGl0J3MgcmVhZC5cblxuKipDb25jbHVzaW9uOioqXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlIHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50LiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLiBLTVNBTiBpcyBvdmVya2lsbCBoZXJlIGJlY2F1c2UgdGhlIHN0YW5kYXJkIHJ1bnRpbWUgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG4iLCJJbnB1dFRva2VucyI6ODAwOSwiT3V0cHV0VG9rZW5zIjoyNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMjowOC43NTM5MDc0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgKGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCkgYnkgaW50cm9kdWNpbmcgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCB0byBvcHRpbWl6ZSBsb2NraW5nIChhdm9pZGluZyB1bm5lY2Vzc2FyeSBSVE5MIGxvY2tpbmcgd2hlbiBvbmx5IG5ldGRldiBvcHMgbG9jayBpcyByZXF1aXJlZCkuXFxuXFxuVGhlIHN0YWNrIHZhcmlhYmxlIGBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWRgIGlzIHBhc3NlZCB0byBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKClgLCB3aGljaCBkZWxlZ2F0ZXMgdG8gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYC4gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggYG1lbXNldCguLi4sIDAsIHNpemVvZigqY21kKSlgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBzaG93IGZ1bmN0aW9ucyBvbmx5IGFjY2VzcyBmaWVsZHMgb2YgYGNtZGAgaWYgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCByZXR1cm5zIHN1Y2Nlc3MgKDApLiBPdXRwdXQgaXMgZm9ybWF0dGVkIGludG8gc3lzZnMgc3RyaW5nIGJ1ZmZlcnMgdXNpbmcgYHN5c2ZzX2VtaXQoKWAsIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBkaXNjbG9zdXJlLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIHJlZ3Jlc3Npb25zIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgKGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCkgYnkgaW50cm9kdWNpbmcgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCB0byBvcHRpbWl6ZSBsb2NraW5nIChhdm9pZGluZyB1bm5lY2Vzc2FyeSBSVE5MIGxvY2tpbmcgd2hlbiBvbmx5IG5ldGRldiBvcHMgbG9jayBpcyByZXF1aXJlZCkuXFxuXFxuVGhlIHN0YWNrIHZhcmlhYmxlIGBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWRgIGlzIHBhc3NlZCB0byBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKClgLCB3aGljaCBkZWxlZ2F0ZXMgdG8gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYC4gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggYG1lbXNldCguLi4sIDAsIHNpemVvZigqY21kKSlgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBzaG93IGZ1bmN0aW9ucyBvbmx5IGFjY2VzcyBmaWVsZHMgb2YgYGNtZGAgaWYgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCByZXR1cm5zIHN1Y2Nlc3MgKDApLiBPdXRwdXQgaXMgZm9ybWF0dGVkIGludG8gc3lzZnMgc3RyaW5nIGJ1ZmZlcnMgdXNpbmcgYHN5c2ZzX2VtaXQoKWAsIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBkaXNjbG9zdXJlLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIHJlZ3Jlc3Npb25zIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow2vs8w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 20:09:31 +0000 UTC FinishedAt: 2026-09-04 20:12:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b35d3d2fae3058265ba937544a3895cedce18d08", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b35d3d2fae3058265ba937544a3895cedce18d08", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "SYSFS" ], "series_id": "280ebb4a-90c3-40d6-8994-328d37fa2b21" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sysfs_get_link_ksettings", "speed_show", "duplex_show" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtTWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtzcGVlZF9zaG93JiMzNDssCiAgICAmIzM0O2R1cGxleF9zaG93JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgKGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCkgYnkgaW50cm9kdWNpbmcgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCB0byBvcHRpbWl6ZSBsb2NraW5nIChhdm9pZGluZyB1bm5lY2Vzc2FyeSBSVE5MIGxvY2tpbmcgd2hlbiBvbmx5IG5ldGRldiBvcHMgbG9jayBpcyByZXF1aXJlZCkuXG5cblRoZSBzdGFjayB2YXJpYWJsZSBgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kYCBpcyBwYXNzZWQgdG8gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCwgd2hpY2ggZGVsZWdhdGVzIHRvIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAuIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIGBtZW1zZXQoLi4uLCAwLCBzaXplb2YoKmNtZCkpYCBwcmlvciB0byBpbnZva2luZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgc2hvdyBmdW5jdGlvbnMgb25seSBhY2Nlc3MgZmllbGRzIG9mIGBjbWRgIGlmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgcmV0dXJucyBzdWNjZXNzICgwKS4gT3V0cHV0IGlzIGZvcm1hdHRlZCBpbnRvIHN5c2ZzIHN0cmluZyBidWZmZXJzIHVzaW5nIGBzeXNmc19lbWl0KClgLCBlbGltaW5hdGluZyBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgZGlzY2xvc3VyZS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxvY2tpbmcgcmVncmVzc2lvbnMgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgaW4gbmV0L2NvcmUvbmV0LXN5c2ZzLmMgdG8gdXNlIGEgbmV3IGxvY2tpbmcgaGVscGVyIHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpLCBtb2RpZnlpbmcgaG93IHJ0bmwgYW5kIG5ldGRldiBvcHMgbG9ja3MgYXJlIGFjcXVpcmVkIGFuZCBjaGVja2VkLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHN5c2ZzIGNvZGUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvc3lzL2NsYXNzL25ldC9cdTAwM2NpZmFjZVx1MDAzZS9zcGVlZCBhbmQgL3N5cy9jbGFzcy9uZXQvXHUwMDNjaWZhY2VcdTAwM2UvZHVwbGV4LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzU0MjNmNzQ4ZGQ1ZTRjZDI3MWJmMDAzODZhY2YxNzdmOTBiZjdhY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMjA6MTA6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xuaW5kZXggMzUyMTczZGY3NTc4NS4uZmE3OTBlNDQyNTcwNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xuQEAgLTExOCw2ICYjNDM7MTE4LDQ5IEBAIHN0YXRpYyBpbnQgc3lzZnNfcnRubF9sb2NrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuJiM0MztcdGJvb2wgbmVlZF9ydG5sO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcbiYjNDM7XHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8XG4mIzQzO1x0XHQgICAgKG5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNlxuJiM0MztcdFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTKTtcbiYjNDM7XHRpZiAobmVlZF9ydG5sKSB7XG4mIzQzO1x0XHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuJiM0MztcdFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxuJiM0MztcdFx0XHRyZXQgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuJiM0MztcdGlmIChuZWVkX3J0bmwpXG4mIzQzO1x0XHRydG5sX3VubG9jaygpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJiMzOTtzICovXG4gc3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXG5AQCAtMzMyLDcwICYjNDM7Mzc1LDQxIEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTtcbiBzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuJiM0MztcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVJTlZBTDtcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbi1cdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuLVxuLVx0XHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZjbWQpKVxuLVx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4tXHR9XG4tXHRydG5sX3VubG9jaygpO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcbiB9XG4gc3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTtcbiBcbiBzdGF0aWMgc3NpemVfdCBkdXBsZXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuLVx0aW50IHJldCA9IC1FSU5WQUw7XG4tXG4tXHQvKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcbi1cdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbi1cdCAqL1xuLVx0aWYgKCFuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbiYjNDM7XHRjb25zdCBjaGFyICpkdXBsZXg7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuJiM0MztcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVJTlZBTDtcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbi1cdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuLVxuLVx0XHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZjbWQpKSB7XG4tXHRcdFx0Y29uc3QgY2hhciAqZHVwbGV4O1xuLVxuLVx0XHRcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfSEFMRjpcbi1cdFx0XHRcdGR1cGxleCA9IFwmIzM0O2hhbGZcJiMzNDs7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHRjYXNlIERVUExFWF9GVUxMOlxuLVx0XHRcdFx0ZHVwbGV4ID0gXCYjMzQ7ZnVsbFwmIzM0Oztcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGRlZmF1bHQ6XG4tXHRcdFx0XHRkdXBsZXggPSBcJiMzNDt1bmtub3duXCYjMzQ7O1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslc1xcblwmIzM0OywgZHVwbGV4KTtcbi1cdFx0fVxuJiM0MztcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4mIzQzO1x0Y2FzZSBEVVBMRVhfSEFMRjpcbiYjNDM7XHRcdGR1cGxleCA9IFwmIzM0O2hhbGZcJiMzNDs7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERVUExFWF9GVUxMOlxuJiM0MztcdFx0ZHVwbGV4ID0gXCYjMzQ7ZnVsbFwmIzM0OztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRkdXBsZXggPSBcJiMzNDt1bmtub3duXCYjMzQ7O1xuJiM0MztcdFx0YnJlYWs7XG4gXHR9XG4tXHRydG5sX3VubG9jaygpO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslc1xcblwmIzM0OywgZHVwbGV4KTtcbiB9XG4gc3RhdGljIERFVklDRV9BVFRSX1JPKGR1cGxleCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3NwZWVkX3Nob3cmIzM0OywKICAgICYjMzQ7ZHVwbGV4X3Nob3cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgaW4gbmV0L2NvcmUvbmV0LXN5c2ZzLmMgdG8gdXNlIGEgbmV3IGxvY2tpbmcgaGVscGVyIHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpLCBtb2RpZnlpbmcgaG93IHJ0bmwgYW5kIG5ldGRldiBvcHMgbG9ja3MgYXJlIGFjcXVpcmVkIGFuZCBjaGVja2VkLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHN5c2ZzIGNvZGUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvc3lzL2NsYXNzL25ldC9cdTAwM2NpZmFjZVx1MDAzZS9zcGVlZCBhbmQgL3N5cy9jbGFzcy9uZXQvXHUwMDNjaWZhY2VcdTAwM2UvZHVwbGV4LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzU0MjNmNzQ4ZGQ1ZTRjZDI3MWJmMDAzODZhY2YxNzdmOTBiZjdhYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjA6MTA6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDM1MjE3M2RmNzU3ODUuLmZhNzkwZTQ0MjU3MDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw0OSBAQCBzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKJiM0MzsJYm9vbCBuZWVkX3J0bmw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzCiYjNDM7CSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWlmICghbmV0ZGV2LSZndDtldGh0b29sX29wcy0mZ3Q7Z2V0X2xpbmtfa3NldHRpbmdzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8CiYjNDM7CQkgICAgKG5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsKJiM0MzsJCSAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7CiYjNDM7CWlmIChuZWVkX3J0bmwpIHsKJiM0MzsJCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CW5ldGRldl9sb2NrX29wcyhuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSAtRUlOVkFMOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQlpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpCiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzO3VubG9jazoKJiM0MzsJbmV0ZGV2X3VubG9ja19vcHMobmV0ZGV2KTsKJiM0MzsJaWYgKG5lZWRfcnRubCkKJiM0MzsJCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJiMzOTtzICovCiBzdGF0aWMgc3NpemVfdCBuZXRkZXZfc2hvdyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLApAQCAtMzMyLDcwICYjNDM7Mzc1LDQxIEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTsKIHN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQkvKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHMKLQkgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuCi0JICovCi0JaWYgKCFuZXRkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfbGlua19rc2V0dGluZ3MpCi0JCXJldHVybiByZXQ7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDsKJiM0MzsJaW50IHJldDsKIAotCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwomIzQzOwlyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCAmYW1wO2NtZCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7Ci0KLQkJaWYgKCFfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgJmFtcDtjbWQpKQotCQkJcmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTsKLQl9Ci0JcnRubF91bmxvY2soKTsKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7CiAKIHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwcwotCSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KLQkgKi8KLQlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKLQkJcmV0dXJuIHJldDsKJiM0MzsJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kOwomIzQzOwljb25zdCBjaGFyICpkdXBsZXg7CiYjNDM7CWludCByZXQ7CiAKLQlyZXQgPSBzeXNmc19ydG5sX2xvY2soJmFtcDtkZXYtJmd0O2tvYmosICZhbXA7YXR0ci0mZ3Q7YXR0ciwgbmV0ZGV2KTsKJiM0MzsJcmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgJmFtcDtjbWQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSAtRUlOVkFMOwotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kOwotCi0JCWlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7Y21kKSkgewotCQkJY29uc3QgY2hhciAqZHVwbGV4OwotCi0JCQlzd2l0Y2ggKGNtZC5iYXNlLmR1cGxleCkgewotCQkJY2FzZSBEVVBMRVhfSEFMRjoKLQkJCQlkdXBsZXggPSAmIzM0O2hhbGYmIzM0OzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRFVQTEVYX0ZVTEw6Ci0JCQkJZHVwbGV4ID0gJiMzNDtmdWxsJiMzNDs7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWR1cGxleCA9ICYjMzQ7dW5rbm93biYjMzQ7OwotCQkJCWJyZWFrOwotCQkJfQotCQkJcmV0ID0gc3lzZnNfZW1pdChidWYsICYjMzQ7JXNcbiYjMzQ7LCBkdXBsZXgpOwotCQl9CiYjNDM7CXN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7CiYjNDM7CWNhc2UgRFVQTEVYX0hBTEY6CiYjNDM7CQlkdXBsZXggPSAmIzM0O2hhbGYmIzM0OzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIERVUExFWF9GVUxMOgomIzQzOwkJZHVwbGV4ID0gJiMzNDtmdWxsJiMzNDs7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWR1cGxleCA9ICYjMzQ7dW5rbm93biYjMzQ7OwomIzQzOwkJYnJlYWs7CiAJfQotCXJ0bmxfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVzXG4mIzM0OywgZHVwbGV4KTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhkdXBsZXgpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIEludGVyZmFjZSBTeXNmcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHJlZmFjdG9yaW5nIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgd2UgaGFuZGxlIHRoZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgYXR0cmlidXRlcyB3aXRoaW4gdGhlIGAvc3lzL2NsYXNzL25ldC8mbHQ7aWZhY2UmZ3Q7L2AgaGllcmFyY2h5LiBUaGVzZSBhcmUgY3J1Y2lhbCwgb2J2aW91c2x5LCBmb3IgcmVwb3J0aW5nIGxpbmsgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5ncy4KClRoZSBrZXkgaGVyZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBiZSBhIGhlbHBlciBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHNpZ27igJR3ZSYjMzk7cmUgbGlrZWx5IHRyeWluZyB0byBEUlkgdXAgc29tZSBjb2RlIGFuZCBjZW50cmFsaXplIHRoZSBsb2NraW5nIGxvZ2ljLiBUaGF0JiMzOTtzIHVzdWFsbHkgYSB3aW4gZm9yIG1haW50YWluYWJpbGl0eSBhbmQgY29ycmVjdG5lc3MsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3lzZnMgYXR0cmlidXRlcyB0aGF0IGludm9sdmUga2VybmVsIGRhdGEuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBsb2NraW5nOgoKMS4gIFdlIGhhdmUgYHN5c2ZzX3J0bmxfbG9ja2AgYmVpbmcgbG9ja2VkIGNvbmRpdGlvbmFsbHkuIFRoZSBkZWNpc2lvbiB0byBsb2NrIGl0IGhpbmdlcyBvbiBgbmVlZF9ydG5sYCwgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gd2hldGhlciB3ZSBuZWVkIHRvIGNhbGwgYG5ldGRldl9sb2NrX29wc2AgZmlyc3QsIG9yIGlmIHdlIG5lZWQgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTYCBmbGFnLiBUaGlzIGlzIGNsZXZlcjsgaXQmIzM5O3MgcmVjb2duaXppbmcgdGhhdCBub3QgYWxsIG9wZXJhdGlvbnMgcmVxdWlyZSB0aGUgUlROTCAoUm91dGluZyBUYWJsZSBOZXh0IExldmVsKSBsb2NrLiBUaGF0IGNhbiBsZWFkIHRvIGxlc3MgY29udGVudGlvbi4KMi4gIFRoZW4sIHdlIGhhdmUgYG5ldGRldl9sb2NrX29wcyhuZXRkZXYpYCBhbmQgdGhlIGBkZXZfaXNhbGl2ZWAgY2hlY2sgd2hpY2ggcHJvdGVjdHMgYWdhaW5zdCByYWNlcyBhbmQgZW5zdXJlcyB0aGUgZGV2aWNlIGlzIHN0aWxsIHZhbGlkIGJlZm9yZSB3ZSBhdHRlbXB0IHRvIHdvcmsgd2l0aCBpdC4gVGhhdCYjMzk7cyBhIHNvbGlkIGRlZmVuc2UuCjMuICBUaGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBzZWVtcyB0byBiZSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKWAuIFRoYXQmIzM5O3Mgd2hlcmUgd2UmIzM5O3JlIGFjdHVhbGx5IGZldGNoaW5nIHRoZSBsaW5rIHNldHRpbmdzLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBjYXJlZnVsbHkgcmVwbGFjaW5nIGVhcmxpZXIgbG9naWMgd2l0aCB0aGlzIGNsZWFuZXIgbW9kZWwuCjQuICBGaW5hbGx5LCB3ZSBjYWxsIHRoZSBzZXR0aW5ncyBmcm9tIHRoZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgZnVuY3Rpb25zLgoKVG8gZ2V0IGEgYmV0dGVyIGdyaXAsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bGwgcHJvYmFibHkgZ3JhYiBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIHF1aWNrbHkgY2hlY2sgdGhlIHNvdXJjZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGNoYW5nZSBmaXRzIHdpdGhpbiB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXQtc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XHRzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTtcbiAxMTY6XHRcdGRldl9wdXQobmRldik7XG4gMTE3Olx0XG4gMTE4Olx0XHRyZXR1cm4gcmV0O1xuIDExOTpcdH1cbiAxMjA6XHRcbiAxMjE6XHRzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gMTIyOlx0XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gMTIzOlx0XHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiAxMjQ6XHR7XG4gMTI1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuIDEyNjpcdFx0Ym9vbCBuZWVkX3J0bmw7XG4gMTI3Olx0XHRpbnQgcmV0O1xuIDEyODpcdFxuIDEyOTpcdFx0LypcbiAxMzA6XHRcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4gMTMxOlx0XHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4gMTMyOlx0XHQgKi9cbiAxMzM6XHRcdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbiAxMzQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTM1Olx0XG4gMTM2Olx0XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSB8fFxuIDEzNzpcdFx0XHQgICAgKG5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNlxuIDEzODpcdFx0XHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MpO1xuIDEzOTpcdFx0aWYgKG5lZWRfcnRubCkge1xuIDE0MDpcdFx0XHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbiAxNDE6XHRcdFx0aWYgKHJldClcbiAxNDI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDE0MzpcdFx0fVxuIDE0NDpcdFx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbiAxNDc6XHRcdFx0cmV0ID0gLUVOT0RFVjtcbiAxNDg6XHRcdFx0Z290byB1bmxvY2s7XG4gMTQ5Olx0XHR9XG4gMTUwOlx0XG4gMTUxOlx0XHRyZXQgPSAtRUlOVkFMO1xuIDE1MjpcdFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuIDE1MzpcdFx0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG4gMTU0Olx0XHRcdFx0cmV0ID0gMDtcbiAxNTU6XHRcdH1cbiAxNTY6XHRcbiAxNTc6XHR1bmxvY2s6XG4gMTU4Olx0XHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuIDE1OTpcdFx0aWYgKG5lZWRfcnRubClcbiAxNjA6XHRcdFx0cnRubF91bmxvY2soKTtcbiAxNjE6XHRcdHJldHVybiByZXQ7XG4gMTYyOlx0fVxuIDE2MzpcdFxuIDE2NDpcdC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCYjMzk7cyAqL1xuIDE2NTpcdHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldixcbiAxNjY6XHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLFxuIDE2NzpcdFx0XHRcdCAgIHNzaXplX3QgKCpmb3JtYXQpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICosIGNoYXIgKikpXG4gMTY4Olx0e1xuIDE2OTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7XG4gMTcwOlx0XHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4gMTcxOlx0XG4gMTcyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMTczOlx0XHRpZiAoZGV2X2lzYWxpdmUobmRldikpXG4gMTc0Olx0XHRcdHJldCA9ICgqZm9ybWF0KShuZGV2LCBidWYpO1xuIDE3NTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMTc2Olx0XG4gMTc3Olx0XHRyZXR1cm4gcmV0O1xuIDE3ODpcdH1cbiAxNzk6XHRcbiAxODA6XHQvKiBnZW5lcmF0ZSBhIHNob3cgZnVuY3Rpb24gZm9yIHNpbXBsZSBmaWVsZCAqL1xuIDE4MTpcdCNkZWZpbmUgTkVUREVWSUNFX1NIT1coZmllbGQsIGZvcm1hdF9zdHJpbmcpXHRcdFx0XHRcXFxuIDE4MjpcdHN0YXRpYyBzc2l6ZV90IGZvcm1hdF8jI2ZpZWxkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZilcdFxcXG4gMTgzOlx0e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMTg0Olx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZvcm1hdF9zdHJpbmcsIFJFQURfT05DRShkZXYtXHUwMDNlZmllbGQpKTtcdFx0XFxcbiAxODU6XHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAxODY6XHRzdGF0aWMgc3NpemVfdCBmaWVsZCMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFx0XHRcdFx0XFxcbiAxODc6XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcdFxcXG4gMTg4Olx0e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gMTg5Olx0XHRyZXR1cm4gbmV0ZGV2X3Nob3coZGV2LCBhdHRyLCBidWYsIGZvcm1hdF8jI2ZpZWxkKTtcdFx0XFxcbiAxOTA6XHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiAxOTE6XHRcbiAxOTI6XHQjZGVmaW5lIE5FVERFVklDRV9TSE9XX1JPKGZpZWxkLCBmb3JtYXRfc3RyaW5nKVx0XHRcdFx0XFxcbiAxOTM6XHRORVRERVZJQ0VfU0hPVyhmaWVsZCwgZm9ybWF0X3N0cmluZyk7XHRcdFx0XHRcdFxcXG4gMTk0Olx0c3RhdGljIERFVklDRV9BVFRSX1JPKGZpZWxkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZXQtc3lzZnMuY2AgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldC1zeXNmcy5jYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBwaWVjZSwgYXMgaXQgaGFuZGxlcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBuZXR3b3JraW5nLiBJbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAsIGxpa2UgUUVNVSBvciBHQ0UsIHdoZXJlIHN5c2ZzIGFuZCBuZXR3b3JrIGRldmljZXMgYXJlIHByZXNlbnQsIHRoaXMgY29kZSBpcyBhYnNvbHV0ZWx5IHJlbGV2YW50LiBUaGluayBvZiB0aGUgY29tbW9uIHN5c2ZzIHBhdGhzIGxpa2UgYC9zeXMvY2xhc3MvbmV0Lyovc3BlZWRgIGFuZCBgL3N5cy9jbGFzcy9uZXQvKi9kdXBsZXhgOyB0aGlzIGNvZGUgdW5kZXJwaW5zIHRob3NlLgoKV2hhdCYjMzk7cyBjb25jZXJuaW5nIGhlcmUgaXMgdGhlIGV4dGVudCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBuZXR3b3JraW5nIHN5c2ZzIGNvZGUsIGFuZCB0aGUgY2hhbmdlcyBpbnZvbHZlIGxvY2tpbmcgc2VtYW50aWNzLiBTcGVjaWZpY2FsbHksIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBydG5sIGxvY2tpbmcgYW5kIHRoZSBuZXRkZXYgb3BlcmF0aW9ucyBsb2NraW5nIG5lZWRzIGNhcmVmdWwgc2NydXRpbnkuIFBsdXMsIHRoZXJlJiMzOTtzIGEgbmV3IGhlbHBlciwgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AsIGJlaW5nIGludHJvZHVjZWQuIEFuZCwgb2YgY291cnNlLCB0aGV5IGFyZSBtb2RpZnlpbmcgY3J1Y2lhbCBmdW5jdGlvbnMgbGlrZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AuIFRob3NlIGFyZSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgYXJlYXMuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBoZXJlLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBuZXQvY29yZS9NYWtlZmlsZWAgb3IgYG5ldC9LY29uZmlnYCBmb3IgdGhlIHByZXNlbmNlIG9mIGBuZXQtc3lzZnMub2AsIGp1c3QgdG8gdmVyaWZ5IHRoYXQgTkVUIGFuZCBTWVNGUyBhcmUgaW5kZWVkIGNvbmZpZ3VyZWQgYXMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0LXN5c2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xOD1vYmotJChDT05GSUdfTkVUREVWX0FERFJfTElTVF9URVNUKSAmIzQzOz0gZGV2X2FkZHJfbGlzdHNfdGVzdC5vXG5uZXQvY29yZS9NYWtlZmlsZS0xOS1cbm5ldC9jb3JlL01ha2VmaWxlOjIwOm9iai15ICYjNDM7PSBuZXQtc3lzZnMub1xubmV0L2NvcmUvTWFrZWZpbGUtMjEtb2JqLXkgJiM0Mzs9IGhvdGRhdGEub1xuLS1cbm5ldC9jb3JlL2Rldi5jLTE2OC0jaW5jbHVkZSBcJiMzNDtkZXZtZW0uaFwmIzM0O1xubmV0L2NvcmUvZGV2LmM6MTY5OiNpbmNsdWRlIFwmIzM0O25ldC1zeXNmcy5oXCYjMzQ7XG5uZXQvY29yZS9kZXYuYy0xNzAtXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMi0vKlxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MzogKiBuZXQtc3lzZnMuYyAtIG5ldHdvcmsgZGV2aWNlIGNsYXNzIGFuZCBhdHRyaWJ1dGVzXG5uZXQvY29yZS9uZXQtc3lzZnMuYy00LSAqXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzAtI2luY2x1ZGUgXCYjMzQ7ZGV2LmhcJiMzNDtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjMxOiNpbmNsdWRlIFwmIzM0O25ldC1zeXNmcy5oXCYjMzQ7XG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zMi1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYy05Ny0jaW5jbHVkZSBcJiMzNDtkZXZtZW0uaFwmIzM0O1xubmV0L2NvcmUvc2tidWZmLmM6OTg6I2luY2x1ZGUgXCYjMzQ7bmV0LXN5c2ZzLmhcJiMzNDtcbm5ldC9jb3JlL3NrYnVmZi5jLTk5LSNpbmNsdWRlIFwmIzM0O25ldG1lbV9wcml2LmhcJiMzNDtcbi0tXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zMS0jaW5jbHVkZSBcJiMzNDtkZXYuaFwmIzM0O1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmM6MzI6I2luY2x1ZGUgXCYjMzQ7bmV0LXN5c2ZzLmhcJiMzNDtcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtlcm5lbCYjMzk7cyBOZXR3b3JrIENvcmUgZm9yIFN5c3RlbSBGaWxlIFN1cHBvcnQqKgoKT2theSwgc28gSSBzZWUgdGhpcyBsaW5lOiBgb2JqLXkgJiM0Mzs9IG5ldC1zeXNmcy5vYCBpbiBgbmV0L2NvcmUvTWFrZWZpbGVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgYG5ldC1zeXNmcy5vYCBpcyBiZWluZyBpbmNsdWRlZCwgYnV0IHVuZGVyIHdoYXQgY29uZGl0aW9ucz8mIzM0OyBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBsaWtlbHkgbWVhbnMgdGhlIHN5c3RlbSBmaWxlIHN1cHBvcnQgZm9yIG5ldHdvcmsgY29yZSBpcyBiZWluZyBjb25kaXRpb25hbGx5IGVuYWJsZWQuIFRoZSBNYWtlZmlsZSBjbGVhcmx5IHN0YXRlcyB0aGF0IHRoaXMgb2JqZWN0IGZpbGUgaXMgb25seSBpbmNsdWRlZCB3aGVuIGJvdGggYENPTkZJR19ORVRgIGFuZCBgQ09ORklHX1NZU0ZTYCBhcmUgZGVmaW5lZCBhbmQgc2V0IHRvIGB5YC4KCkJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgdW5kZXJseWluZyBsb2dpYy4gSXMgdGhlcmUgYSBtb3JlIGV4cGxpY2l0IGAjaWZkZWYgQ09ORklHX1NZU0ZTYCBjaGVjayAqd2l0aGluKiBgbmV0L2NvcmUvTWFrZWZpbGVgIHJlbGF0ZWQgdG8gdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBgbmV0LXN5c2ZzLm9gIG9yLCBtb3JlIGJyb2FkbHksIGRvZXMgYG5ldC9jb3JlYCBnZXQgY29tcGlsZWQgYXQgYWxsIHdoZW4gQ09ORklHX05FVCBpcyBzZXQ/IEl0JiMzOTtzIGdvb2QgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmN5IHRyZWUgdG8gbWFrZSBzdXJlIHRoZSBpbmNsdXNpb24gaXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgdG8gdmVyaWZ5IHdoZW4gZGlnZ2luZyBpbnRvIGtlcm5lbCBuZXR3b3JraW5nLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN5c3RlbSBmaWxlIGludGVyZmFjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUtOC1cbm5ldC9NYWtlZmlsZTo5Om9iai15XHRcdFx0XHQ6PSBkZXZyZXMubyBzb2NrZXQubyBjb3JlL1xubmV0L01ha2VmaWxlLTEwLVxubmV0L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19DT01QQVQpXHRcdCYjNDM7PSBjb21wYXQub1xubmV0L01ha2VmaWxlLTEyLVxubmV0L01ha2VmaWxlLTEzLSMgTExDIGhhcyB0byBiZSBsaW5rZWQgYmVmb3JlIHRoZSBmaWxlcyBpbiBuZXQvODAyL1xubmV0L01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19MTEMpXHRcdCYjNDM7PSBsbGMvXG5uZXQvTWFrZWZpbGU6MTU6b2JqLXlcdFx0XHRcdCYjNDM7PSBldGhlcm5ldC8gODAyLyBzY2hlZC8gbmV0bGluay8gYnBmLyBldGh0b29sL1xubmV0L01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19ORVRGSUxURVIpXHRcdCYjNDM7PSBuZXRmaWx0ZXIvXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXHRcdCYjNDM7PSBpcHY0L1xubmV0L01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19UTFMpXHRcdCYjNDM7PSB0bHMvXG5uZXQvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX1hGUk0pXHRcdCYjNDM7PSB4ZnJtL1xubmV0L01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19VTklYKVx0XHQmIzQzOz0gdW5peC9cbm5ldC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSU5FVF9QU1ApXHRcdCYjNDM7PSBwc3AvXG5uZXQvTWFrZWZpbGU6MjI6b2JqLXlcdFx0XHRcdCYjNDM7PSBpcHY2L1xubmV0L01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19QQUNLRVQpXHRcdCYjNDM7PSBwYWNrZXQvXG5uZXQvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX05FVF9LRVkpXHRcdCYjNDM7PSBrZXkvXG5uZXQvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JSSURHRSlcdFx0JiM0Mzs9IGJyaWRnZS9cbm5ldC9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfTkVUX0RFVkxJTkspXHQmIzQzOz0gZGV2bGluay9cbm5ldC9NYWtlZmlsZToyNzpvYmoteVx0XHRcdFx0JiM0Mzs9IGRzYS9cbm5ldC9NYWtlZmlsZToyODpvYmotJChDT05GSUdfWDI1KVx0XHQmIzQzOz0geDI1L1xubmV0L01ha2VmaWxlOjI5Om9iai0kKENPTkZJR19MQVBCKVx0XHQmIzQzOz0gbGFwYi9cbm5ldC9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfQ0FOKVx0XHQmIzQzOz0gY2FuL1xubmV0L01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19CVClcdFx0JiM0Mzs9IGJsdWV0b290aC9cbm5ldC9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfU1VOUlBDKVx0XHQmIzQzOz0gc3VucnBjL1xubmV0L01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19BRl9SWFJQQylcdFx0JiM0Mzs9IHJ4cnBjL1xubmV0L01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19BRl9LQ00pXHRcdCYjNDM7PSBrY20vXG5uZXQvTWFrZWZpbGU6MzU6b2JqLSQoQ09ORklHX1NUUkVBTV9QQVJTRVIpXHQmIzQzOz0gc3RycGFyc2VyL1xubmV0L01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19BVE0pXHRcdCYjNDM7PSBhdG0vXG5uZXQvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0wyVFApXHRcdCYjNDM7PSBsMnRwL1xubmV0L01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19QSE9ORVQpXHRcdCYjNDM7PSBwaG9uZXQvXG5uZXQvTWFrZWZpbGUtMzktaWZuZXEgKCQoQ09ORklHX1ZMQU5fODAyMVEpLClcbm5ldC9NYWtlZmlsZTo0MDpvYmoteVx0XHRcdFx0JiM0Mzs9IDgwMjFxL1xubmV0L01ha2VmaWxlLTQxLWVuZGlmXG5uZXQvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQX1NDVFApXHRcdCYjNDM7PSBzY3RwL1xubmV0L01ha2VmaWxlOjQzOm9iai0kKENPTkZJR19SRFMpXHRcdCYjNDM7PSByZHMvXG5uZXQvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX1dJUkVMRVNTKVx0XHQmIzQzOz0gd2lyZWxlc3MvXG5uZXQvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX01BQzgwMjExKVx0XHQmIzQzOz0gbWFjODAyMTEvXG5uZXQvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX1RJUEMpXHRcdCYjNDM7PSB0aXBjL1xubmV0L01ha2VmaWxlOjQ3Om9iai0kKENPTkZJR19ORVRMQUJFTClcdFx0JiM0Mzs9IG5ldGxhYmVsL1xubmV0L01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19JVUNWKVx0XHQmIzQzOz0gaXVjdi9cbm5ldC9NYWtlZmlsZTo0OTpvYmotJChDT05GSUdfU01DKVx0XHQmIzQzOz0gc21jL1xubmV0L01ha2VmaWxlOjUwOm9iai0kKENPTkZJR19SRktJTEwpXHRcdCYjNDM7PSByZmtpbGwvXG5uZXQvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX05FVF85UClcdFx0JiM0Mzs9IDlwL1xubmV0L01ha2VmaWxlOjUyOm9iai0kKENPTkZJR19EQ0IpXHRcdCYjNDM7PSBkY2IvXG5uZXQvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHXzZMT1dQQU4pXHRcdCYjNDM7PSA2bG93cGFuL1xubmV0L01ha2VmaWxlOjU0Om9iai0kKENPTkZJR19JRUVFODAyMTU0KVx0JiM0Mzs9IGllZWU4MDIxNTQvXG5uZXQvTWFrZWZpbGU6NTU6b2JqLSQoQ09ORklHX01BQzgwMjE1NClcdFx0JiM0Mzs9IG1hYzgwMjE1NC9cbm5ldC9NYWtlZmlsZS01Ni1cbm5ldC9NYWtlZmlsZTo1NzpvYmotJChDT05GSUdfU1lTQ1RMKVx0XHQmIzQzOz0gc3lzY3RsX25ldC5vXG5uZXQvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX0ROU19SRVNPTFZFUilcdCYjNDM7PSBkbnNfcmVzb2x2ZXIvXG5uZXQvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX0NFUEhfTElCKVx0XHQmIzQzOz0gY2VwaC9cbm5ldC9NYWtlZmlsZTo2MDpvYmotJChDT05GSUdfQkFUTUFOX0FEVilcdCYjNDM7PSBiYXRtYW4tYWR2L1xubmV0L01ha2VmaWxlOjYxOm9iai0kKENPTkZJR19ORkMpXHRcdCYjNDM7PSBuZmMvXG5uZXQvTWFrZWZpbGU6NjI6b2JqLSQoQ09ORklHX1BTQU1QTEUpXHRcdCYjNDM7PSBwc2FtcGxlL1xubmV0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfSUZFKVx0XHQmIzQzOz0gaWZlL1xubmV0L01ha2VmaWxlOjY0Om9iai0kKENPTkZJR19PUEVOVlNXSVRDSClcdCYjNDM7PSBvcGVudnN3aXRjaC9cbm5ldC9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfVlNPQ0tFVFMpXHQmIzQzOz0gdm13X3Zzb2NrL1xubmV0L01ha2VmaWxlOjY2Om9iai0kKENPTkZJR19NUExTKVx0XHQmIzQzOz0gbXBscy9cbm5ldC9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfTkVUX05TSClcdFx0JiM0Mzs9IG5zaC9cbm5ldC9NYWtlZmlsZTo2ODpvYmotJChDT05GSUdfSFNSKVx0XHQmIzQzOz0gaHNyL1xubmV0L01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19ORVRfU1dJVENIREVWKVx0JiM0Mzs9IHN3aXRjaGRldi9cbm5ldC9NYWtlZmlsZTo3MDpvYmotJChDT05GSUdfTkVUX0wzX01BU1RFUl9ERVYpXHQmIzQzOz0gbDNtZGV2L1xubmV0L01ha2VmaWxlOjcxOm9iai0kKENPTkZJR19RUlRSKVx0XHQmIzQzOz0gcXJ0ci9cbm5ldC9NYWtlZmlsZTo3MjpvYmotJChDT05GSUdfTkVUX05DU0kpXHRcdCYjNDM7PSBuY3NpL1xubmV0L01ha2VmaWxlOjczOm9iai0kKENPTkZJR19YRFBfU09DS0VUUylcdCYjNDM7PSB4ZHAvXG5uZXQvTWFrZWZpbGU6NzQ6b2JqLSQoQ09ORklHX01QVENQKVx0XHQmIzQzOz0gbXB0Y3AvXG5uZXQvTWFrZWZpbGU6NzU6b2JqLSQoQ09ORklHX01DVFApXHRcdCYjNDM7PSBtY3RwL1xubmV0L01ha2VmaWxlOjc2Om9iai0kKENPTkZJR19ORVRfSEFORFNIQUtFKVx0JiM0Mzs9IGhhbmRzaGFrZS9cbm5ldC9NYWtlZmlsZTo3NzpvYmotJChDT05GSUdfTkVUX1NIQVBFUilcdCYjNDM7PSBzaGFwZXIvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZXQtc3lzZnMuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaG9va3MgZm9yIG5ldHdvcmsgaW50ZXJmYWNlcyBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwb2tlIGFyb3VuZCBpbiBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLiBJdCYjMzk7cyBhIGtleSBzcG90IGZvciBzeXNmcyBpbnRlcmFjdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JraW5nLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGNvZGUgZm9yIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyAoYCNpZmRlZmAsIGAjaWZgLCBldGMuKSBvciBzdWJ0bGUgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHdoaWNoIGZlYXR1cmVzIG9yIHN1YnN5c3RlbXMgbWlnaHQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvZiB0aGUgc3lzZnMgYXR0cmlidXRlcyBhbmQgaG93IHRoZXkgYXJlIGV4cG9zZWQuIEdvdHRhIHNlZSB3aGF0IGZsYWdzIG9yIG1vZHVsZXMgbmVlZCB0byBiZSBhY3RpdmUgdG8gbWFrZSBjZXJ0YWluIG9wdGlvbnMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGZpbGVzeXN0ZW0uIFRoaXMgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgYmVmb3JlIEkgZGlnIGludG8gYW55IHBhcnRpY3VsYXIgYXR0cmlidXRlIG9yIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBnZXQgdGhlIG92ZXJhbGwgY29udGV4dCBiZWZvcmUgSSBjYW4gaXNvbGF0ZSBhbnkgc3BlY2lmaWMgaXNzdWUgb3IgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0LXN5c2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzItXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozMzojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zNC1zdGF0aWMgY29uc3QgY2hhciBmbXRfaGV4W10gPSBcJiMzNDslI3hcXG5cJiMzNDs7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9OTE0PXN0YXRpYyBib29sIHdpcmVsZXNzX2dyb3VwX25lZWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkxNS17XG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5MTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0NGRzgwMjExKVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTE3LVx0aWYgKG5kZXYtXHUwMDNlaWVlZTgwMjExX3B0cilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MTktI2VuZGlmXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5MjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX1dJUkVMRVNTX0VYVClcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkyMS1cdGlmIChuZGV2LVx1MDAzZXdpcmVsZXNzX2hhbmRsZXJzKVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkyNi1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjkyNzojZWxzZSAvKiBDT05GSUdfU1lTRlMgKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkyOC0jZGVmaW5lIG5ldF9jbGFzc19ncm91cHNcdE5VTExcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjkyOTojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MzAtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5MzE6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTMyLSNkZWZpbmUgdG9fcnhfcXVldWVfYXR0cihfYXR0cikgXFxcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz05NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgcnhfcXVldWVfc3lzZnNfb3BzID0ge1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTk2NS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjk2NjojaWZkZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTY3LXN0YXRpYyBzc2l6ZV90IHNob3dfcnBzX21hcChzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpxdWV1ZSwgY2hhciAqYnVmKVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTExNDE9c3RhdGljIHN0cnVjdCByeF9xdWV1ZV9hdHRyaWJ1dGUgcnBzX2Rldl9mbG93X3RhYmxlX2NudF9hdHRyaWJ1dGUgX19yb19hZnRlcl9pbml0XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTE0My1cdFx0IHNob3dfcnBzX2Rldl9mbG93X3RhYmxlX2NudCwgc3RvcmVfcnBzX2Rldl9mbG93X3RhYmxlX2NudCk7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMTQ0OiNlbmRpZiAvKiBDT05GSUdfUlBTICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMTQ1LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTE0Nj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcnhfcXVldWVfZGVmYXVsdF9hdHRyc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjExNDc6I2lmZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExNDgtXHRcdTAwMjZycHNfY3B1c19hdHRyaWJ1dGUuYXR0cixcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMTU1PXN0YXRpYyB2b2lkIHJ4X3F1ZXVlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTE1Ny1cdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnF1ZXVlID0gdG9fcnhfcXVldWUoa29iaik7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMTU4OiNpZmRlZiBDT05GSUdfUlBTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMTU5LVx0cnBzX3RhZ19wdHIgdGFnX3B0cjtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMjA0PXN0YXRpYyBpbnQgcnhfcXVldWVfZGVmYXVsdF9tYXNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTIwNi17XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMjA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19SUFMpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19TWVNDVEwpXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMjA4LVx0c3RydWN0IGNwdW1hc2sgKnJwc19kZWZhdWx0X21hc2s7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTI4ND1zdGF0aWMgaW50IHJ4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5kZXgsIGt1aWRfdCBrdWlkLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMDAtfVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTMwMTojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzAyLVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEzMDQ9bmV0X3J4X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2xkX251bSwgaW50IG5ld19udW0pXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzA1LXtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzMDY6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTMwNy1cdGludCBpO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMDktXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzEwOiNpZm5kZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTMxMS1cdGlmICghZGV2LVx1MDAzZXN5c2ZzX3J4X3F1ZXVlX2dyb3VwKVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEzNDA9c3RhdGljIGludCBuZXRfcnhfcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBudW0sXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM0Mi17XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzQzOiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDQtXHRpbnQgZXJyb3IgPSAwO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDYtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzQ3OiNpZm5kZWYgQ09ORklHX1JQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM0OC1cdGlmICghZGV2LVx1MDAzZXN5c2ZzX3J4X3F1ZXVlX2dyb3VwKVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNjItXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzYzOiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNjQtLypcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xNDMxPXN0YXRpYyBzc2l6ZV90IHRyYWZmaWNfY2xhc3Nfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDY3LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTQ2ODojaWZkZWYgQ09ORklHX1hQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTQ2OS1zdGF0aWMgc3NpemVfdCB0eF9tYXhyYXRlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTUyMz1zdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZV9hdHRyaWJ1dGUgcXVldWVfdHJhZmZpY19jbGFzcyBfX3JvX2FmdGVyX2luaXRcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTI1LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTUyNjojaWZkZWYgQ09ORklHX0JRTFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTUyNy0vKlxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTE3MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZHFsX2dyb3VwID0ge307XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxNzAzOiNlbmRpZiAvKiBDT05GSUdfQlFMICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNzA0LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTcwNTojaWZkZWYgQ09ORklHX1hQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTcwNi1zdGF0aWMgc3NpemVfdCB4cHNfcXVldWVfc2hvdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTkwMz1zdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZV9hdHRyaWJ1dGUgeHBzX3J4cXNfYXR0cmlidXRlIF9fcm9fYWZ0ZXJfaW5pdFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTkwNC1cdD0gX19BVFRSX1JXKHhwc19yeHFzKTtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE5MDU6I2VuZGlmIC8qIENPTkZJR19YUFMgKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE5MDYtXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xOTA3PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpuZXRkZXZfcXVldWVfZGVmYXVsdF9hdHRyc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xOTA5LVx0XHUwMDI2cXVldWVfdHJhZmZpY19jbGFzcy5hdHRyLFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTkxMDojaWZkZWYgQ09ORklHX1hQU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTkxMS1cdFx1MDAyNnhwc19jcHVzX2F0dHJpYnV0ZS5hdHRyLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTE5NTQ9c3RhdGljIGJvb2wgbmV0ZGV2X3VzZXNfYnFsKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTk1OC1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE5NTk6XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQlFMKTtcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE5NjAtfVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIwMTY9c3RhdGljIGludCB0eF9xdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBpbmRleCxcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDMxLX1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIwMzI6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzMy1cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMDM1PW5ldGRldl9xdWV1ZV91cGRhdGVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG9sZF9udW0sIGludCBuZXdfbnVtKVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzNi17XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDM3OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwMzgtXHRpbnQgaTtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDcxLVx0cmV0dXJuIDA7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDcyOiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwNzMtfVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIwNzU9c3RhdGljIGludCBuZXRfdHhfcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBudW0sXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA3Ny17XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDc4OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwNzktXHRpbnQgZXJyb3IgPSAwO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwOTAtXHRyZXR1cm4gMDtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIwOTE6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA5Mi19XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IHJlZ2lzdGVyX3F1ZXVlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA5Ny1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIwOTg6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA5OS1cdGRldi1cdTAwM2VxdWV1ZXNfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoXCYjMzQ7cXVldWVzXCYjMzQ7LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxMjEtXHRuZXRfcnhfcXVldWVfdXBkYXRlX2tvYmplY3RzKGRldiwgcnhxLCAwKTtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxMjI6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEyMy1cdGtzZXRfdW5yZWdpc3RlcihkZXYtXHUwMDNlcXVldWVzX2tzZXQpO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxMjg9c3RhdGljIGludCBxdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGt1aWRfdCBrdWlkLCBrZ2lkX3Qga2dpZClcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTMxLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjEzMjojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTMzLVx0aWYgKG5kZXYtXHUwMDNlcXVldWVzX2tzZXQpIHtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMTUzPXN0YXRpYyB2b2lkIHJlbW92ZV9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNTYtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTU3OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNTgtXHRyZWFsX3J4ID0gZGV2LVx1MDAzZXJlYWxfbnVtX3J4X3F1ZXVlcztcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTY4LVx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNjk6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE3MC1cdGtzZXRfdW5yZWdpc3RlcihkZXYtXHUwMDNlcXVldWVzX2tzZXQpO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxODE9c3RhdGljIHN0cnVjdCBuc19jb21tb24gKm5ldF9ncmFiX2N1cnJlbnRfbnModm9pZClcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTgzLVx0c3RydWN0IG5ldCAqbmV0ID0gY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucztcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxODQ6I2lmZGVmIENPTkZJR19ORVRfTlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxODUtXHRpZiAobmV0KVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIyNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBuZXRfY2xhc3MgPSB7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjI3Mi1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIyNzM6I2lmZGVmIENPTkZJR19PRlxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjI3NC1zdGF0aWMgaW50IG9mX2Rldl9ub2RlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMzI2PWludCBuZXRkZXZfcmVnaXN0ZXJfa29iamVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzM4LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjMzOTojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzQwLVx0LyogQWxsb3cgZm9yIGEgZGV2aWNlIHNwZWNpZmljIGdyb3VwICovXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjM0OC1cdFx0Kmdyb3VwcyYjNDM7JiM0MzsgPSBcdTAwMjZ3aXJlbGVzc19ncm91cDtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIzNDk6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjM1MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBDaGFuZ2VzIGluIE5ldC1TeXNmcy5jKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBhZGRpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgd2UmIzM5O3ZlIGp1c3QgaW1wbGVtZW50ZWQuIEZpcnN0LCBsZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGZ1bmN0aW9ucyBpbiBxdWVzdGlvbjogYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AsIGBzcGVlZF9zaG93YCwgYW5kIGBkdXBsZXhfc2hvd2AuIEkmIzM5O2xsIGNvbmZpcm0gdGhlaXIgc2NvcGUsIHNvIEkga25vdyB3aGVyZSB0aGV5IGxpdmUgd2l0aGluIHRoZSBuZXQgc3Vic3lzdGVtLgoKQWxyaWdodCwgYSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYWxsIHRocmVlIGZ1bmN0aW9ucywgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AsIGBzcGVlZF9zaG93YCwgYW5kIGBkdXBsZXhfc2hvd2AsIGFyZSBpbmRlZWQgc3RhdGljIHdpdGhpbiBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLiBOb3cgdGhhdCBJIGtub3cgdGhlIHNjb3BlIG9mIHRoZWlyIGRlZmluaXRpb24gSSBjYW4gcHJvY2VlZCB0byBjb25zaWRlciBob3cgdGhleSBmaXQgd2l0aGluIHRoZSBjb2RlLgoKR2l2ZW4gdGhhdCB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aGV5JiMzOTtyZSBiZWluZyAqY2FsbGVkKiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYG5ldC1zeXNmcy5jYCwgZm9jdXNpbmcgb24gdGhlIHZpY2luaXR5IG9mIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCwgdG8gZmluZCBhbnkgbG9jYWwgdXNhZ2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIHB1cnBvc2UgYW5kIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbSYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0LXN5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3MDpcdFx0cnRubF91bmxvY2soKTtcbiAzNzE6XHRcdHJldHVybiByZXQ7XG4gMzcyOlx0fVxuIDM3MzpcdHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTtcbiAzNzQ6XHRcbiAzNzU6XHRzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiAzNzY6XHRcdFx0XHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4gMzc3Olx0e1xuIDM3ODpcdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuIDM3OTpcdFx0aW50IHJldDtcbiAzODA6XHRcbiAzODE6XHRcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4gMzgyOlx0XHRpZiAocmV0KVxuIDM4MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDM4NDpcdFxuIDM4NTpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4gMzg2Olx0fVxuIDM4NzpcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XG4gMzg4Olx0XG4gMzg5Olx0c3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIDM5MDpcdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4gMzkxOlx0e1xuIDM5MjpcdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuIDM5MzpcdFx0Y29uc3QgY2hhciAqZHVwbGV4O1xuIDM5NDpcdFx0aW50IHJldDtcbiAzOTU6XHRcbiAzOTY6XHRcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4gMzk3Olx0XHRpZiAocmV0KVxuIDM5ODpcdFx0XHRyZXR1cm4gcmV0O1xuIDM5OTpcdFxuIDQwMDpcdFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcbiA0MDE6XHRcdGNhc2UgRFVQTEVYX0hBTEY6XG4gNDAyOlx0XHRcdGR1cGxleCA9IFwmIzM0O2hhbGZcJiMzNDs7XG4gNDAzOlx0XHRcdGJyZWFrO1xuIDQwNDpcdFx0Y2FzZSBEVVBMRVhfRlVMTDpcbiA0MDU6XHRcdFx0ZHVwbGV4ID0gXCYjMzQ7ZnVsbFwmIzM0OztcbiA0MDY6XHRcdFx0YnJlYWs7XG4gNDA3Olx0XHRkZWZhdWx0OlxuIDQwODpcdFx0XHRkdXBsZXggPSBcJiMzNDt1bmtub3duXCYjMzQ7O1xuIDQwOTpcdFx0XHRicmVhaztcbiA0MTA6XHRcdH1cbiA0MTE6XHRcbiA0MTI6XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXNcXG5cJiMzNDssIGR1cGxleCk7XG4gNDEzOlx0fVxuIDQxNDpcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyhkdXBsZXgpO1xuIDQxNTpcdFxuIDQxNjpcdHN0YXRpYyBzc2l6ZV90IHRlc3Rpbmdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gNDE3Olx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4gNDE4Olx0e1xuIDQxOTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbiA0MjA6XHRcbiA0MjE6XHRcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gNDIyOlx0XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgISFuZXRpZl90ZXN0aW5nKG5ldGRldikpO1xuIDQyMzpcdFxuIDQyNDpcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDI1Olx0fVxuIDQyNjpcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyh0ZXN0aW5nKTtcbiA0Mjc6XHRcbiA0Mjg6XHRzdGF0aWMgc3NpemVfdCBkb3JtYW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIDQyOTpcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk4NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkRlbHZpbmcgaW50byBOZXR3b3JrIERldmljZSBMb2NraW5nIE1lY2hhbmlzbXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBuZXR3b3JrIGRldmljZSBvcGVyYXRpb25zIGFyZSBzeW5jaHJvbml6ZWQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbiBhbmQgY2hlY2sgdGhlIGRlZmluaXRpb25zIGZvciBgbmV0ZGV2X25lZWRfb3BzX2xvY2tgLCBgbmV0ZGV2X2xvY2tfb3BzYCwgYW5kIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBsb2NraW5nIGlzIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBvcGVyYXRpb25zIHN0cnVjdHVyZXMsIGFuZCBob3cgbGluayBzZXR0aW5ncyBhcmUgYWNjZXNzZWQuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBvZiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGlzIGNyaXRpY2FsIGZvciB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBvciBkZXNpZ25pbmcuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgaGVyZSBpcyBwYXJhbW91bnQ7IGl0IGRpcmVjdGx5IGltcGFjdHMgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIGEgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIG1hbmlmZXN0IGluIHNvbWUgcmVhbGx5IHVnbHkgd2F5cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIGNvbnRyb2wgZmxvdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0zMjY9X19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI3LVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjMyODppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0zMjktXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM3MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEludGVyZmFjZSBMaW5rIFNldHRpbmdzKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHdoZXJlIEkmIzM5O2QgKmV4cGVjdCogdG8gZmluZCBpdCwgaXMgbGlrZWx5IHdpdGhpbiB0aGUgYG5ldC9ldGh0b29sL2AgZGlyZWN0b3J5LCBvciBwb3RlbnRpYWxseSBzb21ld2hlcmUgaW4gdGhlIGNvcmUgbmV0d29yayBpbnRlcmZhY2UgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgc3RhcnRpbmcgdGhlcmUsIHRvIGdldCB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGlmX2dldF9saW5rX2tzZXR0aW5nc1xcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jPTI0Mj1zdGF0aWMgdm9pZCBnZXRfZGV2aWNlX3N0YXRlKHN0cnVjdCBsZWRfbmV0ZGV2X2RhdGEgKnRyaWdnZXJfZGF0YSlcbi0tXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jLTI0Ny1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmM6MjQ4Olx0aWYgKG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyh0cmlnZ2VyX2RhdGEtXHUwMDNlbmV0X2RldiwgXHUwMDI2Y21kKSlcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMtMjQ5LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz03OTU9c3RhdGljIGludCBib25kX3VwZGF0ZV9zcGVlZF9kdXBsZXgoc3RydWN0IHNsYXZlICpzbGF2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTgwMC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6ODAxOlx0cmVzID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHNsYXZlX2RldiwgXHUwMDI2ZWNtZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTgwMi1cdGlmIChyZXMgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYz0zMDg1PXN0YXRpYyB2b2lkIF9fdGVhbV9wb3J0X2NoYW5nZV9zZW5kKHN0cnVjdCB0ZWFtX3BvcnQgKnBvcnQsIGJvb2wgbGlua3VwKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA5NC1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM6MzA5NTpcdFx0ZXJyID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHBvcnQtXHUwMDNlZGV2LCBcdTAwMjZlY21kKTtcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA5Ni1cdFx0aWYgKCFlcnIpIHtcbi0tXG5kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jPTExOT1pbnQgZmNvZV9saW5rX3NwZWVkX3VwZGF0ZShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KVxuLS1cbmRyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmMtMTIzLVxuZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYzoxMjQ6XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmVjbWQpKSB7XG5kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jLTEyNS1cdFx0bHBvcnQtXHUwMDNlbGlua19zdXBwb3J0ZWRfc3BlZWRzIFx1MDAyNj0gfihGQ19QT1JUU1BFRURfMUdCSVQgIHxcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0zMjY9X19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI3LVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjMyODppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0zMjktXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpO1xuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYz0zNj1zdGF0aWMgaW50IHBvcnRfY29zdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy0zOS1cbm5ldC9icmlkZ2UvYnJfaWYuYzo0MDpcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2ZWNtZCkpIHtcbm5ldC9icmlkZ2UvYnJfaWYuYy00MS1cdFx0c3dpdGNoIChlY21kLmJhc2Uuc3BlZWQpIHtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMjE9c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE1Mi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE1MzpcdFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTU0LVx0XHRcdHJldCA9IDA7XG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz00Mjk9c3RydWN0IGV0aHRvb2xfbGlua191c2V0dGluZ3Mge1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtNDM4LS8qIEludGVybmFsIGtlcm5lbCBoZWxwZXIgdG8gcXVlcnkgYSBkZXZpY2UgZXRodG9vbF9saW5rX3NldHRpbmdzLiAqL1xubmV0L2V0aHRvb2wvaW9jdGwuYzo0Mzk6aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NDAtXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz00NTY9aW50IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2My1cdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2V0aHRvb2wvaW9jdGwuYzo0NjQ6XHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2NS1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tLVxubmV0L2V0aHRvb2wvbGlua2luZm8uYz0yND1zdGF0aWMgaW50IGxpbmtpbmZvX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuLS1cbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMzYtXHRcdHJldHVybiByZXQ7XG5uZXQvZXRodG9vbC9saW5raW5mby5jOjM3Olx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2Vrc2V0dGluZ3MpO1xubmV0L2V0aHRvb2wvbGlua2luZm8uYy0zOC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2V0aHRvb2wvbGlua2luZm8uYz05OD1ldGhubF9zZXRfbGlua2luZm8oc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTEwNi1cbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM6MTA3Olx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2a3NldHRpbmdzKTtcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMTA4LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jPTI4PXN0YXRpYyBpbnQgbGlua21vZGVzX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuLS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTQxLVxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM6NDI6XHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcdTAwMjZkYXRhLVx1MDAzZWtzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy00My1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYz0zMTk9ZXRobmxfc2V0X2xpbmttb2RlcyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTMyNi1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jOjMyNzpcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmtzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy0zMjgtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L3NjaGVkL3NjaF9jYnMuYz0zMjM9c3RhdGljIHZvaWQgY2JzX3NldF9wb3J0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNic19zY2hlZF9kYXRhICpxKVxuLS1cbm5ldC9zY2hlZC9zY2hfY2JzLmMtMzI5LVxubmV0L3NjaGVkL3NjaF9jYnMuYzozMzA6XHRlcnIgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcdTAwMjZlY21kKTtcbm5ldC9zY2hlZC9zY2hfY2JzLmMtMzMxLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEyOTQ9c3RhdGljIHZvaWQgdGFwcmlvX3NldF9waWNvc19wZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMwMi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTMwMzpcdGVyciA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmVjbWQpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzA0LVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MDgKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogNTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IGBuZXQvY29yZS9uZXQtc3lzZnMuY2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBoZWxwZXIgYW5kIHRoZSByZWxhdGVkIHN5c2ZzIGNhbGxiYWNrcyBmb3IgYHNwZWVkYCBhbmQgYGR1cGxleGAgYXR0cmlidXRlcyAoYHNwZWVkX3Nob3dgLCBgZHVwbGV4X3Nob3dgKS4gVGhlc2UgYXR0cmlidXRlcyBhcmUgY3JlYXRlZCB1c2luZyBgREVWSUNFX0FUVFJfUk9gLgoKRmlyc3QsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBzeXNmcyBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gdGhlIGxpbmsmIzM5O3Mgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5ncy4gVGhlIGNvZGUgcmVmYWN0b3JzIGxvY2tpbmcgbWVjaGFuaXNtcyAoYHN5c2ZzX3J0bmxfbG9ja2AgYW5kIGBuZXRkZXZfbG9ja19vcHNgKSBhbmQsIGNydWNpYWxseSwgY2FsbHMgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2Agd2hpbGUgYWxzbyBkb2luZyBjaGVja3MgZm9yIGBkZXZfaXNhbGl2ZWAgYW5kIGBuZXRpZl9ydW5uaW5nYC4gVGhpcyBoaXRzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBhIGNyaXRpY2FsIGNvcmUgc3Vic3lzdGVtIChuZXR3b3JraW5nIHZpYSBzeXNmcykuIFNvLCBgV29ydGhGdXp6aW5nID0gVHJ1ZWAuCgpOZXh0LCB0aGUgYEZvY3VzU3ltYm9sc2A6IHdoYXQgZG8gd2UgbmVlZCB0byB0YXJnZXQ/IE9idmlvdXNseSwgdGhlIGNvcmUgZnVuY3Rpb25zOiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCwgYHNwZWVkX3Nob3dgLCBhbmQgYGR1cGxleF9zaG93YC4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMgcGF0Y2guCgpGaW5hbGx5LCB3aGF0IGFyZSB0aGUgYEVuYWJsZUNvbmZpZ3NgPyBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBjb21waWxlZC4gVGhlIGZpbGUgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCBpcyBjbGVhcmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVQ9eWAuIFRoZSBzeXNmcyBhdHRyaWJ1dGVzIHRoZW1zZWx2ZXMgYXJlIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfU1lTRlNgLiBUaGVyZWZvcmUsIHdlIG11c3QgZW5hYmxlIGBORVRgIGFuZCBgU1lTRlNgLiBgQ09ORklHX0lORVRgIG1pZ2h0IGJlIHR5cGljYWwsIGJ1dCB3ZSBkb24mIzM5O3QgbmVlZCBpdC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AgdG8gYmUgc3VyZS4gWWVwLCB0aGUgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgIGFyZSBpbmRlZWQgY29uZGl0aW9uYWwgb24gYENPTkZJR19TWVNGU2AuCgpTbywgdG8gc3VtbWFyaXplOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgVHJ1ZWAgKGNvcmUgbmV0IHN5c2ZzIGF0dHJpYnV0ZXMsIGhpdHMgbG9ja2luZywgY3J1Y2lhbCBjaGVja3MpCiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBleHBsYW5hdGlvbiBwcm92aWRlZC4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssICYjMzQ7c3BlZWRfc2hvdyYjMzQ7LCAmIzM0O2R1cGxleF9zaG93JiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7TkVUJiMzNDssICYjMzQ7U1lTRlMmIzM0O11gCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3NwZWVkX3Nob3cmIzM0OywKICAgICYjMzQ7ZHVwbGV4X3Nob3cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgaW4gbmV0L2NvcmUvbmV0LXN5c2ZzLmMgdG8gdXNlIGEgbmV3IGxvY2tpbmcgaGVscGVyIHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpLCBtb2RpZnlpbmcgaG93IHJ0bmwgYW5kIG5ldGRldiBvcHMgbG9ja3MgYXJlIGFjcXVpcmVkIGFuZCBjaGVja2VkLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIHN5c2ZzIGNvZGUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSAvc3lzL2NsYXNzL25ldC9cdTAwM2NpZmFjZVx1MDAzZS9zcGVlZCBhbmQgL3N5cy9jbGFzcy9uZXQvXHUwMDNjaWZhY2VcdTAwM2UvZHVwbGV4LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7U1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNmc19nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7c3BlZWRfc2hvdyYjMzQ7LAogICAgJiMzNDtkdXBsZXhfc2hvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzIHNwZWVkIGFuZCBkdXBsZXggYXR0cmlidXRlcyBpbiBuZXQvY29yZS9uZXQtc3lzZnMuYyB0byB1c2UgYSBuZXcgbG9ja2luZyBoZWxwZXIgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCksIG1vZGlmeWluZyBob3cgcnRubCBhbmQgbmV0ZGV2IG9wcyBsb2NrcyBhcmUgYWNxdWlyZWQgYW5kIGNoZWNrZWQuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgc3lzZnMgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9zeXMvY2xhc3MvbmV0L1x1MDAzY2lmYWNlXHUwMDNlL3NwZWVkIGFuZCAvc3lzL2NsYXNzL25ldC9cdTAwM2NpZmFjZVx1MDAzZS9kdXBsZXguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzIHNwZWVkIGFuZCBkdXBsZXggYXR0cmlidXRlcyAoYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgKSBieSBpbnRyb2R1Y2luZyBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKClgIHRvIG9wdGltaXplIGxvY2tpbmcgKGF2b2lkaW5nIHVubmVjZXNzYXJ5IFJUTkwgbG9ja2luZyB3aGVuIG9ubHkgbmV0ZGV2IG9wcyBsb2NrIGlzIHJlcXVpcmVkKS5cblxuVGhlIHN0YWNrIHZhcmlhYmxlIGBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWRgIGlzIHBhc3NlZCB0byBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKClgLCB3aGljaCBkZWxlZ2F0ZXMgdG8gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYC4gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggYG1lbXNldCguLi4sIDAsIHNpemVvZigqY21kKSlgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBzaG93IGZ1bmN0aW9ucyBvbmx5IGFjY2VzcyBmaWVsZHMgb2YgYGNtZGAgaWYgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCByZXR1cm5zIHN1Y2Nlc3MgKDApLiBPdXRwdXQgaXMgZm9ybWF0dGVkIGludG8gc3lzZnMgc3RyaW5nIGJ1ZmZlcnMgdXNpbmcgYHN5c2ZzX2VtaXQoKWAsIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBkaXNjbG9zdXJlLlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbG9ja2luZyByZWdyZXNzaW9ucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzU0MjNmNzQ4ZGQ1ZTRjZDI3MWJmMDAzODZhY2YxNzdmOTBiZjdhYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjA6MTA6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDM1MjE3M2RmNzU3ODUuLmZhNzkwZTQ0MjU3MDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw0OSBAQCBzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKJiM0MzsJYm9vbCBuZWVkX3J0bmw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzCiYjNDM7CSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWlmICghbmV0ZGV2LSZndDtldGh0b29sX29wcy0mZ3Q7Z2V0X2xpbmtfa3NldHRpbmdzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8CiYjNDM7CQkgICAgKG5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsKJiM0MzsJCSAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7CiYjNDM7CWlmIChuZWVkX3J0bmwpIHsKJiM0MzsJCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CW5ldGRldl9sb2NrX29wcyhuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSAtRUlOVkFMOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQlpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpCiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzO3VubG9jazoKJiM0MzsJbmV0ZGV2X3VubG9ja19vcHMobmV0ZGV2KTsKJiM0MzsJaWYgKG5lZWRfcnRubCkKJiM0MzsJCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJiMzOTtzICovCiBzdGF0aWMgc3NpemVfdCBuZXRkZXZfc2hvdyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLApAQCAtMzMyLDcwICYjNDM7Mzc1LDQxIEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTsKIHN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQkvKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHMKLQkgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuCi0JICovCi0JaWYgKCFuZXRkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfbGlua19rc2V0dGluZ3MpCi0JCXJldHVybiByZXQ7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDsKJiM0MzsJaW50IHJldDsKIAotCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwomIzQzOwlyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCAmYW1wO2NtZCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7Ci0KLQkJaWYgKCFfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgJmFtcDtjbWQpKQotCQkJcmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTsKLQl9Ci0JcnRubF91bmxvY2soKTsKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7CiAKIHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwcwotCSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KLQkgKi8KLQlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKLQkJcmV0dXJuIHJldDsKJiM0MzsJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kOwomIzQzOwljb25zdCBjaGFyICpkdXBsZXg7CiYjNDM7CWludCByZXQ7CiAKLQlyZXQgPSBzeXNmc19ydG5sX2xvY2soJmFtcDtkZXYtJmd0O2tvYmosICZhbXA7YXR0ci0mZ3Q7YXR0ciwgbmV0ZGV2KTsKJiM0MzsJcmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgJmFtcDtjbWQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSAtRUlOVkFMOwotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kOwotCi0JCWlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7Y21kKSkgewotCQkJY29uc3QgY2hhciAqZHVwbGV4OwotCi0JCQlzd2l0Y2ggKGNtZC5iYXNlLmR1cGxleCkgewotCQkJY2FzZSBEVVBMRVhfSEFMRjoKLQkJCQlkdXBsZXggPSAmIzM0O2hhbGYmIzM0OzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRFVQTEVYX0ZVTEw6Ci0JCQkJZHVwbGV4ID0gJiMzNDtmdWxsJiMzNDs7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWR1cGxleCA9ICYjMzQ7dW5rbm93biYjMzQ7OwotCQkJCWJyZWFrOwotCQkJfQotCQkJcmV0ID0gc3lzZnNfZW1pdChidWYsICYjMzQ7JXNcbiYjMzQ7LCBkdXBsZXgpOwotCQl9CiYjNDM7CXN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7CiYjNDM7CWNhc2UgRFVQTEVYX0hBTEY6CiYjNDM7CQlkdXBsZXggPSAmIzM0O2hhbGYmIzM0OzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIERVUExFWF9GVUxMOgomIzQzOwkJZHVwbGV4ID0gJiMzNDtmdWxsJiMzNDs7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWR1cGxleCA9ICYjMzQ7dW5rbm93biYjMzQ7OwomIzQzOwkJYnJlYWs7CiAJfQotCXJ0bmxfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVzXG4mIzM0OywgZHVwbGV4KTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhkdXBsZXgpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBJbnRlcmZhY2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbW9kaWZpY2F0aW9ucyBhbmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIHRvdWNoZXMgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byByZXZvbHZlIGFyb3VuZCByZWZhY3RvcmluZyBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2Agd2l0aGluIHRoZSBzeXNmcyBpbnRlcmZhY2UgYnkgaW50cm9kdWNpbmcgdGhpcyBuZXcgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AgZnVuY3Rpb24uCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBhbmQgYF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3NgLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGUgYGNtZGAgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgc3VzcGVjdCBgY21kYCBob2xkcyB0aGUgc3BlY2lmaWMgRVRIVE9PTCBjb21tYW5kIGJlaW5nIGV4ZWN1dGVkLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBsaWZlY3ljbGUgaXMga2V5LgoKVG8gc3BlZWQgdGhpbmdzIHVwLCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgbG9jYXRlIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24gb2YgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGVzc2VudGlhbCBjb250ZXh0IEkgbmVlZCB0byBwcm9jZWVkIHdpdGggdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYz0yNDI9c3RhdGljIHZvaWQgZ2V0X2RldmljZV9zdGF0ZShzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEpXG4tLVxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYy0yNDctXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jOjI0ODpcdGlmIChuZXRpZl9nZXRfbGlua19rc2V0dGluZ3ModHJpZ2dlcl9kYXRhLVx1MDAzZW5ldF9kZXYsIFx1MDAyNmNtZCkpXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jLTI0OS1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Nzk1PXN0YXRpYyBpbnQgYm9uZF91cGRhdGVfc3BlZWRfZHVwbGV4KHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy04MDAtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjgwMTpcdHJlcyA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzbGF2ZV9kZXYsIFx1MDAyNmVjbWQpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy04MDItXHRpZiAocmVzIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzA4NT1zdGF0aWMgdm9pZCBfX3RlYW1fcG9ydF9jaGFuZ2Vfc2VuZChzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0LCBib29sIGxpbmt1cClcbi0tXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwOTQtXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwOTU6XHRcdGVyciA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhwb3J0LVx1MDAzZWRldiwgXHUwMDI2ZWNtZCk7XG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwOTYtXHRcdGlmICghZXJyKSB7XG4tLVxuZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYz0xMTk9aW50IGZjb2VfbGlua19zcGVlZF91cGRhdGUoc3RydWN0IGZjX2xwb3J0ICpscG9ydClcbi0tXG5kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jLTEyMy1cbmRyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmM6MTI0Olx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZlY21kKSkge1xuZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYy0xMjUtXHRcdGxwb3J0LVx1MDAzZWxpbmtfc3VwcG9ydGVkX3NwZWVkcyBcdTAwMjY9IH4oRkNfUE9SVFNQRUVEXzFHQklUICB8XG4tLVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg9MzI2PV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTMyNy1cdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncyk7XG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDozMjg6aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI5LVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmM9MzY9c3RhdGljIGludCBwb3J0X2Nvc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzktXG5uZXQvYnJpZGdlL2JyX2lmLmM6NDA6XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmVjbWQpKSB7XG5uZXQvYnJpZGdlL2JyX2lmLmMtNDEtXHRcdHN3aXRjaCAoZWNtZC5iYXNlLnNwZWVkKSB7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTIxPXN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMjktXHQvKlxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTMwOlx0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMS1cdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTItXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxNTM6XHRcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKSlcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE1NC1cdFx0XHRyZXQgPSAwO1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9NDI5PXN0cnVjdCBldGh0b29sX2xpbmtfdXNldHRpbmdzIHtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQzOC0vKiBJbnRlcm5hbCBrZXJuZWwgaGVscGVyIHRvIHF1ZXJ5IGEgZGV2aWNlIGV0aHRvb2xfbGlua19zZXR0aW5ncy4gKi9cbm5ldC9ldGh0b29sL2lvY3RsLmM6NDM5OmludCBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDQwLVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtNDUyLX1cbm5ldC9ldGh0b29sL2lvY3RsLmM6NDUzOkVYUE9SVF9TWU1CT0wobmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKTtcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDU0LVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9NDU2PWludCBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy00NjMtXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDY0Olx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xubmV0L2V0aHRvb2wvaW9jdGwuYy00NjUtXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuLS1cbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM9MjQ9c3RhdGljIGludCBsaW5raW5mb19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbi0tXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTM2LVx0XHRyZXR1cm4gcmV0O1xubmV0L2V0aHRvb2wvbGlua2luZm8uYzozNzpcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmRhdGEtXHUwMDNla3NldHRpbmdzKTtcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMzgtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM9OTg9ZXRobmxfc2V0X2xpbmtpbmZvKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvbGlua2luZm8uYy0xMDYtXG5uZXQvZXRodG9vbC9saW5raW5mby5jOjEwNzpcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmtzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9saW5raW5mby5jLTEwOC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYz0yOD1zdGF0aWMgaW50IGxpbmttb2Rlc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbi0tXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy00MS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jOjQyOlx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2Vrc2V0dGluZ3MpO1xubmV0L2V0aHRvb2wvbGlua21vZGVzLmMtNDMtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM9MzE5PWV0aG5sX3NldF9saW5rbW9kZXMoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy0zMjYtXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYzozMjc6XHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcdTAwMjZrc2V0dGluZ3MpO1xubmV0L2V0aHRvb2wvbGlua21vZGVzLmMtMzI4LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9zY2hlZC9zY2hfY2JzLmM9MzIzPXN0YXRpYyB2b2lkIGNic19zZXRfcG9ydF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYnNfc2NoZWRfZGF0YSAqcSlcbi0tXG5uZXQvc2NoZWQvc2NoX2Nicy5jLTMyOS1cbm5ldC9zY2hlZC9zY2hfY2JzLmM6MzMwOlx0ZXJyID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2ZWNtZCk7XG5uZXQvc2NoZWQvc2NoX2Nicy5jLTMzMS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMjk0PXN0YXRpYyB2b2lkIHRhcHJpb19zZXRfcGljb3NfcGVyX2J5dGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMDItXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzMDM6XHRlcnIgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcdTAwMjZlY21kKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMwNC1cdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGluIGBldGh0b29sL2lvY3RsLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhpcy4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCwgSSBuZWVkIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgY29kZSBpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AsIGFuZCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDQzOC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdHkgaXMgbGlrZWx5IGRlZmluZWQgb3IgYXQgbGVhc3Qgd2hlcmUgSSBjYW4gdHJhY2UgaXRzIHVzYWdlIHdpdGhpbiB0aGUgaW9jdGwgZnJhbWV3b3JrLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBuZXR3b3JrIGludGVyZmFjZSBhbmQgaG93IGl0IHJldHJpZXZlcyB0aGUgbGluayBzZXR0aW5ncyBkYXRhLiBUaGlzJiMzOTtsbCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUgaW4gcmVsYXRpb24gdG8gdGhlIGJyb2FkZXIgRXRoZXJuZXQgZHJpdmVyIGludGVyYWN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhcm91bmQgdGhpcyBmdW5jdGlvbiBpcyBwYXJhbW91bnQgdG8gY29ycmVjdGx5IGludGVycHJldCB0aGUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDM1Olx0XHR9IGxpbmtfbW9kZXM7XG4gNDM2Olx0fTtcbiA0Mzc6XHRcbiA0Mzg6XHQvKiBJbnRlcm5hbCBrZXJuZWwgaGVscGVyIHRvIHF1ZXJ5IGEgZGV2aWNlIGV0aHRvb2xfbGlua19zZXR0aW5ncy4gKi9cbiA0Mzk6XHRpbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gNDQwOlx0XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXG4gNDQxOlx0e1xuIDQ0MjpcdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzX2NvbXBhdChkZXYpO1xuIDQ0MzpcdFxuIDQ0NDpcdFx0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuIDQ0NTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gNDQ2Olx0XG4gNDQ3Olx0XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4gNDQ4Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQ0OTpcdFxuIDQ1MDpcdFx0bWVtc2V0KGxpbmtfa3NldHRpbmdzLCAwLCBzaXplb2YoKmxpbmtfa3NldHRpbmdzKSk7XG4gNDUxOlx0XHRyZXR1cm4gZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncyhkZXYsIGxpbmtfa3NldHRpbmdzKTtcbiA0NTI6XHR9XG4gNDUzOlx0RVhQT1JUX1NZTUJPTChuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MpO1xuIDQ1NDpcdFxuIDQ1NTpcdC8qIENvbnZlbmllbmNlIGhlbHBlciBmb3IgY2FsbGVycyB0aGF0IGhvbGQgb25seSBydG5sX2xvY2soKS4gKi9cbiA0NTY6XHRpbnQgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDQ1NzpcdFx0XHRcdFx0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncylcbiA0NTg6XHR7XG4gNDU5Olx0XHRpbnQgcmV0O1xuIDQ2MDpcdFxuIDQ2MTpcdFx0QVNTRVJUX1JUTkwoKTtcbiA0NjI6XHRcbiA0NjM6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuIDQ2NDpcdFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xuIDQ2NTpcdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiA0NjY6XHRcdHJldHVybiByZXQ7XG4gNDY3Olx0fVxuIDQ2ODpcdEVYUE9SVF9TWU1CT0woX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyk7XG4gNDY5Olx0XG4gNDcwOlx0LyogY29udmVydCBldGh0b29sX2xpbmtfdXNldHRpbmdzIGluIHVzZXIgc3BhY2UgdG8gYSBrZXJuZWwgaW50ZXJuYWxcbiA0NzE6XHQgKiBldGh0b29sX2xpbmtfa3NldHRpbmdzLiByZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBlcnJvci5cbiA0NzI6XHQgKi9cbiA0NzM6XHRzdGF0aWMgaW50IGxvYWRfbGlua19rc2V0dGluZ3NfZnJvbV91c2VyKHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICp0byxcbiA0NzQ6XHRcdFx0XHRcdFx0IGNvbnN0IHZvaWQgX191c2VyICpmcm9tKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzE1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE5ldHdvcmsgSW50ZXJmYWNlIExpbmsgU2V0dGluZ3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgcmV0cmlldmluZyBhbmQgaGFuZGxpbmcgbGluayBjb25maWd1cmF0aW9uLiBGaXJzdCwgdGhlIGZ1bmN0aW9uIHplcm9lcyBvdXQgdGhlIGBsaW5rX2tzZXR0aW5nc2Agc3RydWN0dXJlIHVzaW5nIGBtZW1zZXRgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBlbnN1cmluZyB3ZSBzdGFydCB3aXRoIGEgY2xlYW4gc2xhdGUgYmVmb3JlIHBvcHVsYXRpbmcgdGhlIHN0cnVjdHVyZS4gVGhlbiwgdGhlIHJlYWwgYWN0aW9uIGhhcHBlbnM6IHdlIGNhbGwgdGhlIGBnZXRfbGlua19rc2V0dGluZ3NgIGZ1bmN0aW9uIHZpYSB0aGUgZGV2aWNlJiMzOTtzIGBldGh0b29sX29wc2Agc3RydWN0dXJlLiBUaGlzIGlzIGhvdyB3ZSBhY3R1YWxseSBpbnRlcmZhY2Ugd2l0aCB0aGUgbmV0d29yayBjYXJkJiMzOTtzIGRyaXZlciB0byBmZXRjaCBpdHMgY3VycmVudCBzZXR0aW5ncywgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4KCk5leHQsIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHN5c2ZzIGZyYW1ld29yay4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRocm91Z2ggYG5ldC9jb3JlL25ldC1zeXNmcy5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDExNS0xNzAgYW5kIDM3MC00MjAuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHN5c2ZzIGF0dHJpYnV0ZSBkZWZpbml0aW9ucyBhbmQgaG93IHRoZXNlIGxpbmsgc2V0dGluZ3MgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIHNlY3Rpb25zIGRlYWwgd2l0aCB0aGUgZmlsZSBjcmVhdGlvbiwgcGVybWlzc2lvbnMsIGFuZCBwb3NzaWJseSBob3cgdGhlIGF0dHJpYnV0ZXMgYXJlIHBvcHVsYXRlZCB3aXRoIHRoZSBkYXRhIHdlIGFyZSBnZXR0aW5nIGZyb20gdGhlIGRldmljZSBkcml2ZXIuIFRoaXMgc2hvdWxkIHByb3ZpZGUgY29udGV4dCBvbiBob3cgdGhlc2Ugc2V0dGluZ3MgYXJlIHJlcHJlc2VudGVkIGluIHRoZSBmaWxlc3lzdGVtIGFuZCBob3cgdGhleSBjYW4gYmUgYWNjZXNzZWQvbW9kaWZpZWQgYnkgdXNlciBzcGFjZSB0b29scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXQtc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XHRzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTtcbiAxMTY6XHRcdGRldl9wdXQobmRldik7XG4gMTE3Olx0XG4gMTE4Olx0XHRyZXR1cm4gcmV0O1xuIDExOTpcdH1cbiAxMjA6XHRcbiAxMjE6XHRzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gMTIyOlx0XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gMTIzOlx0XHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiAxMjQ6XHR7XG4gMTI1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuIDEyNjpcdFx0Ym9vbCBuZWVkX3J0bmw7XG4gMTI3Olx0XHRpbnQgcmV0O1xuIDEyODpcdFxuIDEyOTpcdFx0LypcbiAxMzA6XHRcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4gMTMxOlx0XHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4gMTMyOlx0XHQgKi9cbiAxMzM6XHRcdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbiAxMzQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTM1Olx0XG4gMTM2Olx0XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSB8fFxuIDEzNzpcdFx0XHQgICAgKG5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNlxuIDEzODpcdFx0XHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MpO1xuIDEzOTpcdFx0aWYgKG5lZWRfcnRubCkge1xuIDE0MDpcdFx0XHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbiAxNDE6XHRcdFx0aWYgKHJldClcbiAxNDI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDE0MzpcdFx0fVxuIDE0NDpcdFx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbiAxNDc6XHRcdFx0cmV0ID0gLUVOT0RFVjtcbiAxNDg6XHRcdFx0Z290byB1bmxvY2s7XG4gMTQ5Olx0XHR9XG4gMTUwOlx0XG4gMTUxOlx0XHRyZXQgPSAtRUlOVkFMO1xuIDE1MjpcdFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuIDE1MzpcdFx0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG4gMTU0Olx0XHRcdFx0cmV0ID0gMDtcbiAxNTU6XHRcdH1cbiAxNTY6XHRcbiAxNTc6XHR1bmxvY2s6XG4gMTU4Olx0XHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuIDE1OTpcdFx0aWYgKG5lZWRfcnRubClcbiAxNjA6XHRcdFx0cnRubF91bmxvY2soKTtcbiAxNjE6XHRcdHJldHVybiByZXQ7XG4gMTYyOlx0fVxuIDE2MzpcdFxuIDE2NDpcdC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCYjMzk7cyAqL1xuIDE2NTpcdHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldixcbiAxNjY6XHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLFxuIDE2NzpcdFx0XHRcdCAgIHNzaXplX3QgKCpmb3JtYXQpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICosIGNoYXIgKikpXG4gMTY4Olx0e1xuIDE2OTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7XG4gMTcwOlx0XHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4gMTcxOlx0XG4gMTcyOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMTczOlx0XHRpZiAoZGV2X2lzYWxpdmUobmRldikpXG4gMTc0Olx0XHRcdHJldCA9ICgqZm9ybWF0KShuZGV2LCBidWYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDA5CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDk1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSaXNrIEFzc2Vzc21lbnQgZm9yIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgY29kZSBpcyBzYWZlIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IEtNU0FOIGlzc3Vlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd2hpY2ggaXMgd2hlcmUgS01TQU4gc2hpbmVzLgoKRmlyc3QsIEkmIzM5O2xsIHRyYWNlIHRoZSBkYXRhIGZsb3cgaW4gYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgLiBUaGUga2V5IGZ1bmN0aW9uIGlzIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLiBJdCBsb29rcyBsaWtlOgoKYGBgYwpzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQp7CglzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7CglpbnQgcmV0OwoKCXJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsICZhbXA7Y21kKTsKCWlmIChyZXQpCgkJcmV0dXJuIHJldDsKCglyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTsKfQpgYGAKCklmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybnMgMCwgdGhlbiB0aGUgY3J1Y2lhbCBwYXJ0IGhhcHBlbnMgaW4gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AuIEkgc2VlIHRoYXQgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgaW5pdGlhbGx5IGRvZXMgYG1lbXNldChsaW5rX2tzZXR0aW5ncywgMCwgc2l6ZW9mKCpsaW5rX2tzZXR0aW5ncykpYCBvbiB0aGUgYGNtZGAgc3RydWN0LiBUaGVuLCBhIGRyaXZlciYjMzk7cyBgZ2V0X2xpbmtfa3NldHRpbmdzYCBjYWxsYmFjayBwb3B1bGF0ZXMgaXQuIElmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybnMgYW4gZXJyb3IsIHRoZSBgY21kYCBzdHJ1Y3QgaXMgKm5ldmVyKiByZWFkLiBUaGlzIG1lYW5zIHRoZSBjb2RlIG9ubHkgcmVhZHMgaWYgaXQmIzM5O3MgYmVlbiBpbml0aWFsaXplZC4gYHN5c2ZzX2VtaXRgIGlzIHVzZWQgdG8gZm9ybWF0IHRoZSBgY21kYCBzdHJ1Y3QgaW50byBhIHN0cmluZyB0aGF0IHdpbGwgYmUgd3JpdHRlbiB0byBgYnVmYCwgc28gdGhhdCYjMzk7cyBva2F5LgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgZm9yIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuIFRoaXMgcGF0Y2ggYWltcyB0byBpbXByb3ZlIHRoYXQgYXNwZWN0IGJ5IHVzaW5nIFJUTkwgb25seSBpZiBuZWVkZWQgd2l0aCBgb3BfbmVlZHNfcnRubGAsIGBuZXRkZXZfbmVlZF9vcHNfbG9ja2AsIGNoZWNraW5nIGBkZXZfaXNhbGl2ZWAsIGFuZCB0aGVuIGNhbGxpbmcgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AuIFRoaXMgbG9va3MgZ29vZCwgYXZvaWRpbmcgUlROTCB3aGVuIGl0JiMzOTtzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuCgpOb3csIGNvbmNlcm5pbmcgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s6Ci0gICBUaGUgYGNtZGAgc3RydWN0IGlzIHN0YWNrLWFsbG9jYXRlZCwgd2hpY2ggaXMgZmluZSBpbiBpdHNlbGYuCi0gICBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBjYWxscyBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYC4KLSAgIEluc2lkZSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCwgdGhlIGNydWNpYWwgYG1lbXNldChsaW5rX2tzZXR0aW5ncywgMCwgc2l6ZW9mKCpsaW5rX2tzZXR0aW5ncykpYCAqZ3VhcmFudGVlcyogdGhhdCBgY21kYCBpcyB6ZXJvZWQgYmVmb3JlIGFueSBkcml2ZXIgaW50ZXJhY3Rpb24uCi0gICBJZiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCByZXR1cm5zIDAsIGBjbWRgIGlzIGZ1bGx5IHplcm9lZCBhbmQgcG9wdWxhdGVkIGJ5IHRoZSBkcml2ZXIuCi0gICBJZiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCByZXR1cm5zIGFuIGVycm9yIChub24temVybyksIGBjbWRgIGlzICpuZXZlciogcmVhZCBvciB1c2VkLCBzbyB0aGlzIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4KLSAgIGBzeXNmc19lbWl0YCBmb3JtYXRzIHRoZSB2YWx1ZSBhcyBhIHN0cmluZyBpbnRvIHRoZSBidWZmZXIsIHNvIG5vIHJhdyBrZXJuZWwgc3RydWN0IGJ5dGVzIGFyZSBleHBvc2VkLgotICAgQW55IGxvY2tpbmcgb3IgZGV2aWNlIHN0YXRlIGlzc3VlcyB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uCgpMZXQgbWUgYW5hbHl6ZSB0aGUgcGF0aCBpbiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBhIGJpdCBtb3JlIGNhcmVmdWxseToKCmBgYGMKcmV0ID0gLUVJTlZBTDsKaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewoJaWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKQoJCXJldCA9IDA7Cn0KYGBgCgpJZiBgbmV0aWZfcnVubmluZyhuZXRkZXYpYCBpcyBmYWxzZSwgYHJldGAgcmVtYWlucyBgLUVJTlZBTGAuIElmIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGZhaWxzIChyZXR1cm5zIG5vbi16ZXJvKSwgYHJldGAgc3RpbGwgcmVtYWlucyBgLUVJTlZBTGAuIE9ubHkgaWYgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgKnN1Y2NlZWRzKiBkb2VzIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybiAwLiBBbmQgaW1wb3J0YW50bHksIGBjbWRgICppcyogaW5pdGlhbGl6ZWQgYnkgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AuCgpJbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMgKGBzcGVlZF9zaG93YCwgYGR1cGxleF9zaG93YCk6CmBgYGMKcmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgJmFtcDtjbWQpOwppZiAocmV0KQogICAgcmV0dXJuIHJldDsKYGBgCgpgY21kYCBpcyBvbmx5IHJlYWQgaWYgYHJldCA9PSAwYC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBhbHdheXMgaW5pdGlhbGl6ZWQgd2hlbiBpdCYjMzk7cyByZWFkLgoKKipDb25jbHVzaW9uOioqCgpObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLiBObyB1bmluaXRpYWxpemVkIGRhdGEgb3IgcGFkZGluZyBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGRldGVjdG9ycyBhcmUgZnVsbHkgc3VmZmljaWVudC4gVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZSBiZWNhdXNlIHRoZSBzdGFuZGFyZCBydW50aW1lIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzIHNwZWVkIGFuZCBkdXBsZXggYXR0cmlidXRlcyAoYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgKSBieSBpbnRyb2R1Y2luZyBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKClgIHRvIG9wdGltaXplIGxvY2tpbmcgKGF2b2lkaW5nIHVubmVjZXNzYXJ5IFJUTkwgbG9ja2luZyB3aGVuIG9ubHkgbmV0ZGV2IG9wcyBsb2NrIGlzIHJlcXVpcmVkKS5cblxuVGhlIHN0YWNrIHZhcmlhYmxlIGBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWRgIGlzIHBhc3NlZCB0byBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKClgLCB3aGljaCBkZWxlZ2F0ZXMgdG8gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYC4gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggYG1lbXNldCguLi4sIDAsIHNpemVvZigqY21kKSlgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBzaG93IGZ1bmN0aW9ucyBvbmx5IGFjY2VzcyBmaWVsZHMgb2YgYGNtZGAgaWYgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCByZXR1cm5zIHN1Y2Nlc3MgKDApLiBPdXRwdXQgaXMgZm9ybWF0dGVkIGludG8gc3lzZnMgc3RyaW5nIGJ1ZmZlcnMgdXNpbmcgYHN5c2ZzX2VtaXQoKWAsIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBkaXNjbG9zdXJlLlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbG9ja2luZyByZWdyZXNzaW9ucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgKGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCkgYnkgaW50cm9kdWNpbmcgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCB0byBvcHRpbWl6ZSBsb2NraW5nIChhdm9pZGluZyB1bm5lY2Vzc2FyeSBSVE5MIGxvY2tpbmcgd2hlbiBvbmx5IG5ldGRldiBvcHMgbG9jayBpcyByZXF1aXJlZCkuXG5cblRoZSBzdGFjayB2YXJpYWJsZSBgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kYCBpcyBwYXNzZWQgdG8gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCwgd2hpY2ggZGVsZWdhdGVzIHRvIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAuIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIGBtZW1zZXQoLi4uLCAwLCBzaXplb2YoKmNtZCkpYCBwcmlvciB0byBpbnZva2luZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgc2hvdyBmdW5jdGlvbnMgb25seSBhY2Nlc3MgZmllbGRzIG9mIGBjbWRgIGlmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgcmV0dXJucyBzdWNjZXNzICgwKS4gT3V0cHV0IGlzIGZvcm1hdHRlZCBpbnRvIHN5c2ZzIHN0cmluZyBidWZmZXJzIHVzaW5nIGBzeXNmc19lbWl0KClgLCBlbGltaW5hdGluZyBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgZGlzY2xvc3VyZS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBBbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIGxvY2tpbmcgcmVncmVzc2lvbnMgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTA6NTIuODI3NjE1NjMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5MjYzMjkwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwic3BlZWRfc2hvd1wiLFxuICAgIFwiZHVwbGV4X3Nob3dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgc3BlZWQgYW5kIGR1cGxleCBhdHRyaWJ1dGVzIChgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2ApIGJ5IGludHJvZHVjaW5nIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgdG8gb3B0aW1pemUgbG9ja2luZyAoYXZvaWRpbmcgdW5uZWNlc3NhcnkgUlROTCBsb2NraW5nIHdoZW4gb25seSBuZXRkZXYgb3BzIGxvY2sgaXMgcmVxdWlyZWQpLlxcblxcblRoZSBzdGFjayB2YXJpYWJsZSBgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kYCBpcyBwYXNzZWQgdG8gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCwgd2hpY2ggZGVsZWdhdGVzIHRvIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAuIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIGBtZW1zZXQoLi4uLCAwLCBzaXplb2YoKmNtZCkpYCBwcmlvciB0byBpbnZva2luZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgc2hvdyBmdW5jdGlvbnMgb25seSBhY2Nlc3MgZmllbGRzIG9mIGBjbWRgIGlmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgcmV0dXJucyBzdWNjZXNzICgwKS4gT3V0cHV0IGlzIGZvcm1hdHRlZCBpbnRvIHN5c2ZzIHN0cmluZyBidWZmZXJzIHVzaW5nIGBzeXNmc19lbWl0KClgLCBlbGltaW5hdGluZyBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgZGlzY2xvc3VyZS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbG9ja2luZyByZWdyZXNzaW9ucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgc3BlZWQgYW5kIGR1cGxleCBhdHRyaWJ1dGVzIGluIG5ldC9jb3JlL25ldC1zeXNmcy5jIHRvIHVzZSBhIG5ldyBsb2NraW5nIGhlbHBlciBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKSwgbW9kaWZ5aW5nIGhvdyBydG5sIGFuZCBuZXRkZXYgb3BzIGxvY2tzIGFyZSBhY3F1aXJlZCBhbmQgY2hlY2tlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBzeXNmcyBjb2RlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3N5cy9jbGFzcy9uZXQvXFx1MDAzY2lmYWNlXFx1MDAzZS9zcGVlZCBhbmQgL3N5cy9jbGFzcy9uZXQvXFx1MDAzY2lmYWNlXFx1MDAzZS9kdXBsZXguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjEwOjUyLjgyNzYyMDgwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYxMjgxNDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzU0MjNmNzQ4ZGQ1ZTRjZDI3MWJmMDAzODZhY2YxNzdmOTBiZjdhY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDIwOjEwOjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcXG5pbmRleCAzNTIxNzNkZjc1Nzg1Li5mYTc5MGU0NDI1NzA0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jXFxuKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcXG5AQCAtMTE4LDYgKzExOCw0OSBAQCBzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XFxuK1xcdGJvb2wgbmVlZF9ydG5sO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcXG4rXFx0ICogcmV0dXJuaW5nIGVhcmx5IHdpdGhvdXQgaGl0dGluZyB0aGUgbG9ja2luZyBzZWN0aW9uIGJlbG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKG5ldGRldikgfHxcXG4rXFx0XFx0ICAgIChuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjZcXG4rXFx0XFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTKTtcXG4rXFx0aWYgKG5lZWRfcnRubCkge1xcbitcXHRcXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXFx1MDAyNmRldi1cXHUwMDNla29iaiwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHIsIG5ldGRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XFxuK1xcbitcXHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IC1FSU5WQUw7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcXG4rXFx0XFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxcbitcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHR9XFxuK1xcbit1bmxvY2s6XFxuK1xcdG5ldGRldl91bmxvY2tfb3BzKG5ldGRldik7XFxuK1xcdGlmIChuZWVkX3J0bmwpXFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCdzICovXFxuIHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZixcXG5AQCAtMzMyLDcwICszNzUsNDEgQEAgc3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpO1xcbiBzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiB7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XFxuLVxcdGludCByZXQgPSAtRUlOVkFMO1xcbi1cXG4tXFx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXFxuLVxcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cXG4tXFx0ICovXFxuLVxcdGlmICghbmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXFx1MDAyNmRldi1cXHUwMDNla29iaiwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHIsIG5ldGRldik7XFxuK1xcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFxcdTAwMjZjbWQpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbi1cXHRcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuLVxcbi1cXHRcXHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcXHUwMDI2Y21kKSlcXG4tXFx0XFx0XFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcXG4tXFx0fVxcbi1cXHRydG5sX3VubG9jaygpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcXG4gfVxcbiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oc3BlZWQpO1xcbiBcXG4gc3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiB7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XFxuLVxcdGludCByZXQgPSAtRUlOVkFMO1xcbi1cXG4tXFx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXFxuLVxcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cXG4tXFx0ICovXFxuLVxcdGlmICghbmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuK1xcdGNvbnN0IGNoYXIgKmR1cGxleDtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vrb2JqLCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0ciwgbmV0ZGV2KTtcXG4rXFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXFx1MDAyNmNtZCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSAtRUlOVkFMO1xcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuLVxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcXG4tXFxuLVxcdFxcdGlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFxcdTAwMjZjbWQpKSB7XFxuLVxcdFxcdFxcdGNvbnN0IGNoYXIgKmR1cGxleDtcXG4tXFxuLVxcdFxcdFxcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XFxuLVxcdFxcdFxcdGNhc2UgRFVQTEVYX0hBTEY6XFxuLVxcdFxcdFxcdFxcdGR1cGxleCA9IFxcXCJoYWxmXFxcIjtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdGNhc2UgRFVQTEVYX0ZVTEw6XFxuLVxcdFxcdFxcdFxcdGR1cGxleCA9IFxcXCJmdWxsXFxcIjtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdFxcdGR1cGxleCA9IFxcXCJ1bmtub3duXFxcIjtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIFxcXCIlc1xcXFxuXFxcIiwgZHVwbGV4KTtcXG4tXFx0XFx0fVxcbitcXHRzd2l0Y2ggKGNtZC5iYXNlLmR1cGxleCkge1xcbitcXHRjYXNlIERVUExFWF9IQUxGOlxcbitcXHRcXHRkdXBsZXggPSBcXFwiaGFsZlxcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERVUExFWF9GVUxMOlxcbitcXHRcXHRkdXBsZXggPSBcXFwiZnVsbFxcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRkdXBsZXggPSBcXFwidW5rbm93blxcXCI7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHR9XFxuLVxcdHJ0bmxfdW5sb2NrKCk7XFxuLVxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlc1xcXFxuXFxcIiwgZHVwbGV4KTtcXG4gfVxcbiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjEwOjUzLjM4OTQ4NjgzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDcxOTg5ODIwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwic3BlZWRfc2hvd1wiLFxuICAgIFwiZHVwbGV4X3Nob3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzIHNwZWVkIGFuZCBkdXBsZXggYXR0cmlidXRlcyBpbiBuZXQvY29yZS9uZXQtc3lzZnMuYyB0byB1c2UgYSBuZXcgbG9ja2luZyBoZWxwZXIgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCksIG1vZGlmeWluZyBob3cgcnRubCBhbmQgbmV0ZGV2IG9wcyBsb2NrcyBhcmUgYWNxdWlyZWQgYW5kIGNoZWNrZWQuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgc3lzZnMgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9zeXMvY2xhc3MvbmV0L1xcdTAwM2NpZmFjZVxcdTAwM2Uvc3BlZWQgYW5kIC9zeXMvY2xhc3MvbmV0L1xcdTAwM2NpZmFjZVxcdTAwM2UvZHVwbGV4LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc1NDIzZjc0OGRkNWU0Y2QyNzFiZjAwMzg2YWNmMTc3ZjkwYmY3YWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIwOjEwOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xuaW5kZXggMzUyMTczZGY3NTc4NS4uZmE3OTBlNDQyNTcwNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jXG4rKysgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xuQEAgLTExOCw2ICsxMTgsNDkgQEAgc3RhdGljIGludCBzeXNmc19ydG5sX2xvY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuK1x0Ym9vbCBuZWVkX3J0bmw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LypcbitcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4rXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4rXHQgKi9cbitcdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSB8fFxuK1x0XHQgICAgKG5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNlxuK1x0XHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MpO1xuK1x0aWYgKG5lZWRfcnRubCkge1xuK1x0XHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG4rXG4rXHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRyZXQgPSAtRUlOVkFMO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuK1x0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG4rXHRcdFx0cmV0ID0gMDtcbitcdH1cbitcbit1bmxvY2s6XG4rXHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuK1x0aWYgKG5lZWRfcnRubClcbitcdFx0cnRubF91bmxvY2soKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCdzICovXG4gc3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXG5AQCAtMzMyLDcwICszNzUsNDEgQEAgc3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpO1xuIHN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuLVx0aW50IHJldCA9IC1FSU5WQUw7XG4tXG4tXHQvKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcbi1cdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbi1cdCAqL1xuLVx0aWYgKCFuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuK1x0aW50IHJldDtcbiBcbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuK1x0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXHUwMDI2Y21kKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSAtRUlOVkFMO1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuLVx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4tXG4tXHRcdGlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmNtZCkpXG4tXHRcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcbi1cdH1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4gfVxuIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XG4gXG4gc3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbitcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbitcdGNvbnN0IGNoYXIgKmR1cGxleDtcbitcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbitcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVJTlZBTDtcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbi1cdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuLVxuLVx0XHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZjbWQpKSB7XG4tXHRcdFx0Y29uc3QgY2hhciAqZHVwbGV4O1xuLVxuLVx0XHRcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfSEFMRjpcbi1cdFx0XHRcdGR1cGxleCA9IFwiaGFsZlwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfRlVMTDpcbi1cdFx0XHRcdGR1cGxleCA9IFwiZnVsbFwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0ZGVmYXVsdDpcbi1cdFx0XHRcdGR1cGxleCA9IFwidW5rbm93blwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcIiVzXFxuXCIsIGR1cGxleCk7XG4tXHRcdH1cbitcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4rXHRjYXNlIERVUExFWF9IQUxGOlxuK1x0XHRkdXBsZXggPSBcImhhbGZcIjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIERVUExFWF9GVUxMOlxuK1x0XHRkdXBsZXggPSBcImZ1bGxcIjtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRkdXBsZXggPSBcInVua25vd25cIjtcbitcdFx0YnJlYWs7XG4gXHR9XG4tXHRydG5sX3VubG9jaygpO1xuLVx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlc1xcblwiLCBkdXBsZXgpO1xuIH1cbiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjEwOjUzLjM4OTQ4ODI3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODI1MjM5NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBJbnRlcmZhY2UgU3lzZnMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSByZWZhY3RvcmluZyBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHdlIGhhbmRsZSB0aGUgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgIGF0dHJpYnV0ZXMgd2l0aGluIHRoZSBgL3N5cy9jbGFzcy9uZXQvXHUwMDNjaWZhY2VcdTAwM2UvYCBoaWVyYXJjaHkuIFRoZXNlIGFyZSBjcnVjaWFsLCBvYnZpb3VzbHksIGZvciByZXBvcnRpbmcgbGluayBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzLlxuXG5UaGUga2V5IGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYC4gSXQncyBkZXNpZ25lZCB0byBiZSBhIGhlbHBlciBmdW5jdGlvbiwgd2hpY2ggaXMgYSBnb29kIHNpZ27igJR3ZSdyZSBsaWtlbHkgdHJ5aW5nIHRvIERSWSB1cCBzb21lIGNvZGUgYW5kIGNlbnRyYWxpemUgdGhlIGxvY2tpbmcgbG9naWMuIFRoYXQncyB1c3VhbGx5IGEgd2luIGZvciBtYWludGFpbmFiaWxpdHkgYW5kIGNvcnJlY3RuZXNzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN5c2ZzIGF0dHJpYnV0ZXMgdGhhdCBpbnZvbHZlIGtlcm5lbCBkYXRhLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIGxvY2tpbmc6XG5cbjEuICBXZSBoYXZlIGBzeXNmc19ydG5sX2xvY2tgIGJlaW5nIGxvY2tlZCBjb25kaXRpb25hbGx5LiBUaGUgZGVjaXNpb24gdG8gbG9jayBpdCBoaW5nZXMgb24gYG5lZWRfcnRubGAsIHdoaWNoIGl0c2VsZiBkZXBlbmRzIG9uIHdoZXRoZXIgd2UgbmVlZCB0byBjYWxsIGBuZXRkZXZfbG9ja19vcHNgIGZpcnN0LCBvciBpZiB3ZSBuZWVkIHRoZSBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HU2AgZmxhZy4gVGhpcyBpcyBjbGV2ZXI7IGl0J3MgcmVjb2duaXppbmcgdGhhdCBub3QgYWxsIG9wZXJhdGlvbnMgcmVxdWlyZSB0aGUgUlROTCAoUm91dGluZyBUYWJsZSBOZXh0IExldmVsKSBsb2NrLiBUaGF0IGNhbiBsZWFkIHRvIGxlc3MgY29udGVudGlvbi5cbjIuICBUaGVuLCB3ZSBoYXZlIGBuZXRkZXZfbG9ja19vcHMobmV0ZGV2KWAgYW5kIHRoZSBgZGV2X2lzYWxpdmVgIGNoZWNrIHdoaWNoIHByb3RlY3RzIGFnYWluc3QgcmFjZXMgYW5kIGVuc3VyZXMgdGhlIGRldmljZSBpcyBzdGlsbCB2YWxpZCBiZWZvcmUgd2UgYXR0ZW1wdCB0byB3b3JrIHdpdGggaXQuIFRoYXQncyBhIHNvbGlkIGRlZmVuc2UuXG4zLiAgVGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgc2VlbXMgdG8gYmUgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZClgLiBUaGF0J3Mgd2hlcmUgd2UncmUgYWN0dWFsbHkgZmV0Y2hpbmcgdGhlIGxpbmsgc2V0dGluZ3MuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGNhcmVmdWxseSByZXBsYWNpbmcgZWFybGllciBsb2dpYyB3aXRoIHRoaXMgY2xlYW5lciBtb2RlbC5cbjQuICBGaW5hbGx5LCB3ZSBjYWxsIHRoZSBzZXR0aW5ncyBmcm9tIHRoZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgZnVuY3Rpb25zLlxuXG5UbyBnZXQgYSBiZXR0ZXIgZ3JpcCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlLiBJJ2xsIHByb2JhYmx5IGdyYWIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGFuZCBxdWlja2x5IGNoZWNrIHRoZSBzb3VyY2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjaGFuZ2UgZml0cyB3aXRoaW4gdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6MTQuMjE0NzI5ODYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldC1zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXHRzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTtcXG4gMTE2OlxcdFxcdGRldl9wdXQobmRldik7XFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdHJldHVybiByZXQ7XFxuIDExOTpcXHR9XFxuIDEyMDpcXHRcXG4gMTIxOlxcdHN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMTIyOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4gMTIzOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbiAxMjQ6XFx0e1xcbiAxMjU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcXG4gMTI2OlxcdFxcdGJvb2wgbmVlZF9ydG5sO1xcbiAxMjc6XFx0XFx0aW50IHJldDtcXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0LypcXG4gMTMwOlxcdFxcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXFxuIDEzMTpcXHRcXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXFxuIDEzMjpcXHRcXHQgKi9cXG4gMTMzOlxcdFxcdGlmICghbmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxcbiAxMzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8XFxuIDEzNzpcXHRcXHRcXHQgICAgKG5ldGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNlxcbiAxMzg6XFx0XFx0XFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTKTtcXG4gMTM5OlxcdFxcdGlmIChuZWVkX3J0bmwpIHtcXG4gMTQwOlxcdFxcdFxcdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vrb2JqLCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0ciwgbmV0ZGV2KTtcXG4gMTQxOlxcdFxcdFxcdGlmIChyZXQpXFxuIDE0MjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDM6XFx0XFx0fVxcbiAxNDQ6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdFxcdGlmICghZGV2X2lzYWxpdmUobmV0ZGV2KSkge1xcbiAxNDc6XFx0XFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4gMTQ4OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiAxNDk6XFx0XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiAxNTI6XFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbiAxNTM6XFx0XFx0XFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxcbiAxNTQ6XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4gMTU1OlxcdFxcdH1cXG4gMTU2OlxcdFxcbiAxNTc6XFx0dW5sb2NrOlxcbiAxNTg6XFx0XFx0bmV0ZGV2X3VubG9ja19vcHMobmV0ZGV2KTtcXG4gMTU5OlxcdFxcdGlmIChuZWVkX3J0bmwpXFxuIDE2MDpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbiAxNjE6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTYyOlxcdH1cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0LyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJ3MgKi9cXG4gMTY1OlxcdHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMTY2OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXFxuIDE2NzpcXHRcXHRcXHRcXHQgICBzc2l6ZV90ICgqZm9ybWF0KShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBjaGFyICopKVxcbiAxNjg6XFx0e1xcbiAxNjk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGRldik7XFxuIDE3MDpcXHRcXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuIDE3MTpcXHRcXG4gMTcyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMTczOlxcdFxcdGlmIChkZXZfaXNhbGl2ZShuZGV2KSlcXG4gMTc0OlxcdFxcdFxcdHJldCA9ICgqZm9ybWF0KShuZGV2LCBidWYpO1xcbiAxNzU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDE3NjpcXHRcXG4gMTc3OlxcdFxcdHJldHVybiByZXQ7XFxuIDE3ODpcXHR9XFxuIDE3OTpcXHRcXG4gMTgwOlxcdC8qIGdlbmVyYXRlIGEgc2hvdyBmdW5jdGlvbiBmb3Igc2ltcGxlIGZpZWxkICovXFxuIDE4MTpcXHQjZGVmaW5lIE5FVERFVklDRV9TSE9XKGZpZWxkLCBmb3JtYXRfc3RyaW5nKVxcdFxcdFxcdFxcdFxcXFxcXG4gMTgyOlxcdHN0YXRpYyBzc2l6ZV90IGZvcm1hdF8jI2ZpZWxkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZilcXHRcXFxcXFxuIDE4MzpcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxODQ6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBmb3JtYXRfc3RyaW5nLCBSRUFEX09OQ0UoZGV2LVxcdTAwM2VmaWVsZCkpO1xcdFxcdFxcXFxcXG4gMTg1OlxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE4NjpcXHRzdGF0aWMgc3NpemVfdCBmaWVsZCMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcdFxcdFxcdFxcdFxcXFxcXG4gMTg3OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcdFxcXFxcXG4gMTg4OlxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE4OTpcXHRcXHRyZXR1cm4gbmV0ZGV2X3Nob3coZGV2LCBhdHRyLCBidWYsIGZvcm1hdF8jI2ZpZWxkKTtcXHRcXHRcXFxcXFxuIDE5MDpcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxOTE6XFx0XFxuIDE5MjpcXHQjZGVmaW5lIE5FVERFVklDRV9TSE9XX1JPKGZpZWxkLCBmb3JtYXRfc3RyaW5nKVxcdFxcdFxcdFxcdFxcXFxcXG4gMTkzOlxcdE5FVERFVklDRV9TSE9XKGZpZWxkLCBmb3JtYXRfc3RyaW5nKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDE5NDpcXHRzdGF0aWMgREVWSUNFX0FUVFJfUk8oZmllbGQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjE0LjIxNDg0ODY0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5OTE1NjA4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZXQtc3lzZnMuY2AgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZXQtc3lzZnMuY2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNydWNpYWwgcGllY2UsIGFzIGl0IGhhbmRsZXMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgbmV0d29ya2luZy4gSW4gYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwLCBsaWtlIFFFTVUgb3IgR0NFLCB3aGVyZSBzeXNmcyBhbmQgbmV0d29yayBkZXZpY2VzIGFyZSBwcmVzZW50LCB0aGlzIGNvZGUgaXMgYWJzb2x1dGVseSByZWxldmFudC4gVGhpbmsgb2YgdGhlIGNvbW1vbiBzeXNmcyBwYXRocyBsaWtlIGAvc3lzL2NsYXNzL25ldC8qL3NwZWVkYCBhbmQgYC9zeXMvY2xhc3MvbmV0LyovZHVwbGV4YDsgdGhpcyBjb2RlIHVuZGVycGlucyB0aG9zZS5cblxuV2hhdCdzIGNvbmNlcm5pbmcgaGVyZSBpcyB0aGUgZXh0ZW50IG9mIHRoZSBtb2RpZmljYXRpb25zLiBXZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgbmV0d29ya2luZyBzeXNmcyBjb2RlLCBhbmQgdGhlIGNoYW5nZXMgaW52b2x2ZSBsb2NraW5nIHNlbWFudGljcy4gU3BlY2lmaWNhbGx5LCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gcnRubCBsb2NraW5nIGFuZCB0aGUgbmV0ZGV2IG9wZXJhdGlvbnMgbG9ja2luZyBuZWVkcyBjYXJlZnVsIHNjcnV0aW55LiBQbHVzLCB0aGVyZSdzIGEgbmV3IGhlbHBlciwgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AsIGJlaW5nIGludHJvZHVjZWQuIEFuZCwgb2YgY291cnNlLCB0aGV5IGFyZSBtb2RpZnlpbmcgY3J1Y2lhbCBmdW5jdGlvbnMgbGlrZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AuIFRob3NlIGFyZSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgYXJlYXMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXJlIGFyZW4ndCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgaGVyZS4gSSdsbCBxdWlja2x5IGNoZWNrIGBuZXQvY29yZS9NYWtlZmlsZWAgb3IgYG5ldC9LY29uZmlnYCBmb3IgdGhlIHByZXNlbmNlIG9mIGBuZXQtc3lzZnMub2AsIGp1c3QgdG8gdmVyaWZ5IHRoYXQgTkVUIGFuZCBTWVNGUyBhcmUgaW5kZWVkIGNvbmZpZ3VyZWQgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMToxOS4yMDY0MTMwNTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMyODQyODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldC1zeXNmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTE4PW9iai0kKENPTkZJR19ORVRERVZfQUREUl9MSVNUX1RFU1QpICs9IGRldl9hZGRyX2xpc3RzX3Rlc3Qub1xcbm5ldC9jb3JlL01ha2VmaWxlLTE5LVxcbm5ldC9jb3JlL01ha2VmaWxlOjIwOm9iai15ICs9IG5ldC1zeXNmcy5vXFxubmV0L2NvcmUvTWFrZWZpbGUtMjEtb2JqLXkgKz0gaG90ZGF0YS5vXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xNjgtI2luY2x1ZGUgXFxcImRldm1lbS5oXFxcIlxcbm5ldC9jb3JlL2Rldi5jOjE2OTojaW5jbHVkZSBcXFwibmV0LXN5c2ZzLmhcXFwiXFxubmV0L2NvcmUvZGV2LmMtMTcwLVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMi0vKlxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjM6ICogbmV0LXN5c2ZzLmMgLSBuZXR3b3JrIGRldmljZSBjbGFzcyBhbmQgYXR0cmlidXRlc1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTQtICpcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTMwLSNpbmNsdWRlIFxcXCJkZXYuaFxcXCJcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozMTojaW5jbHVkZSBcXFwibmV0LXN5c2ZzLmhcXFwiXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzItXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy05Ny0jaW5jbHVkZSBcXFwiZGV2bWVtLmhcXFwiXFxubmV0L2NvcmUvc2tidWZmLmM6OTg6I2luY2x1ZGUgXFxcIm5ldC1zeXNmcy5oXFxcIlxcbm5ldC9jb3JlL3NrYnVmZi5jLTk5LSNpbmNsdWRlIFxcXCJuZXRtZW1fcHJpdi5oXFxcIlxcbi0tXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzEtI2luY2x1ZGUgXFxcImRldi5oXFxcIlxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jOjMyOiNpbmNsdWRlIFxcXCJuZXQtc3lzZnMuaFxcXCJcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYy0zMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6MTkuNTM5MjYxNjIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM5MDg0NzExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEtlcm5lbCdzIE5ldHdvcmsgQ29yZSBmb3IgU3lzdGVtIEZpbGUgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgbGluZTogYG9iai15ICs9IG5ldC1zeXNmcy5vYCBpbiBgbmV0L2NvcmUvTWFrZWZpbGVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgYG5ldC1zeXNmcy5vYCBpcyBiZWluZyBpbmNsdWRlZCwgYnV0IHVuZGVyIHdoYXQgY29uZGl0aW9ucz9cIiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBsaWtlbHkgbWVhbnMgdGhlIHN5c3RlbSBmaWxlIHN1cHBvcnQgZm9yIG5ldHdvcmsgY29yZSBpcyBiZWluZyBjb25kaXRpb25hbGx5IGVuYWJsZWQuIFRoZSBNYWtlZmlsZSBjbGVhcmx5IHN0YXRlcyB0aGF0IHRoaXMgb2JqZWN0IGZpbGUgaXMgb25seSBpbmNsdWRlZCB3aGVuIGJvdGggYENPTkZJR19ORVRgIGFuZCBgQ09ORklHX1NZU0ZTYCBhcmUgZGVmaW5lZCBhbmQgc2V0IHRvIGB5YC5cblxuQnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBJcyB0aGVyZSBhIG1vcmUgZXhwbGljaXQgYCNpZmRlZiBDT05GSUdfU1lTRlNgIGNoZWNrICp3aXRoaW4qIGBuZXQvY29yZS9NYWtlZmlsZWAgcmVsYXRlZCB0byB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGBuZXQtc3lzZnMub2Agb3IsIG1vcmUgYnJvYWRseSwgZG9lcyBgbmV0L2NvcmVgIGdldCBjb21waWxlZCBhdCBhbGwgd2hlbiBDT05GSUdfTkVUIGlzIHNldD8gSXQncyBnb29kIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jeSB0cmVlIHRvIG1ha2Ugc3VyZSB0aGUgaW5jbHVzaW9uIGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5LiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIHRvIHZlcmlmeSB3aGVuIGRpZ2dpbmcgaW50byBrZXJuZWwgbmV0d29ya2luZywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzeXN0ZW0gZmlsZSBpbnRlcmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTE3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6MjMuOTMwMTEwNzAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDczMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9NYWtlZmlsZS04LVxcbm5ldC9NYWtlZmlsZTo5Om9iai15XFx0XFx0XFx0XFx0Oj0gZGV2cmVzLm8gc29ja2V0Lm8gY29yZS9cXG5uZXQvTWFrZWZpbGUtMTAtXFxubmV0L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19DT01QQVQpXFx0XFx0Kz0gY29tcGF0Lm9cXG5uZXQvTWFrZWZpbGUtMTItXFxubmV0L01ha2VmaWxlLTEzLSMgTExDIGhhcyB0byBiZSBsaW5rZWQgYmVmb3JlIHRoZSBmaWxlcyBpbiBuZXQvODAyL1xcbm5ldC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTExDKVxcdFxcdCs9IGxsYy9cXG5uZXQvTWFrZWZpbGU6MTU6b2JqLXlcXHRcXHRcXHRcXHQrPSBldGhlcm5ldC8gODAyLyBzY2hlZC8gbmV0bGluay8gYnBmLyBldGh0b29sL1xcbm5ldC9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfTkVURklMVEVSKVxcdFxcdCs9IG5ldGZpbHRlci9cXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXFx0XFx0Kz0gaXB2NC9cXG5uZXQvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX1RMUylcXHRcXHQrPSB0bHMvXFxubmV0L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19YRlJNKVxcdFxcdCs9IHhmcm0vXFxubmV0L01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19VTklYKVxcdFxcdCs9IHVuaXgvXFxubmV0L01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19JTkVUX1BTUClcXHRcXHQrPSBwc3AvXFxubmV0L01ha2VmaWxlOjIyOm9iai15XFx0XFx0XFx0XFx0Kz0gaXB2Ni9cXG5uZXQvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX1BBQ0tFVClcXHRcXHQrPSBwYWNrZXQvXFxubmV0L01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORVRfS0VZKVxcdFxcdCs9IGtleS9cXG5uZXQvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JSSURHRSlcXHRcXHQrPSBicmlkZ2UvXFxubmV0L01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19ORVRfREVWTElOSylcXHQrPSBkZXZsaW5rL1xcbm5ldC9NYWtlZmlsZToyNzpvYmoteVxcdFxcdFxcdFxcdCs9IGRzYS9cXG5uZXQvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX1gyNSlcXHRcXHQrPSB4MjUvXFxubmV0L01ha2VmaWxlOjI5Om9iai0kKENPTkZJR19MQVBCKVxcdFxcdCs9IGxhcGIvXFxubmV0L01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19DQU4pXFx0XFx0Kz0gY2FuL1xcbm5ldC9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfQlQpXFx0XFx0Kz0gYmx1ZXRvb3RoL1xcbm5ldC9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfU1VOUlBDKVxcdFxcdCs9IHN1bnJwYy9cXG5uZXQvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX0FGX1JYUlBDKVxcdFxcdCs9IHJ4cnBjL1xcbm5ldC9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQUZfS0NNKVxcdFxcdCs9IGtjbS9cXG5uZXQvTWFrZWZpbGU6MzU6b2JqLSQoQ09ORklHX1NUUkVBTV9QQVJTRVIpXFx0Kz0gc3RycGFyc2VyL1xcbm5ldC9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfQVRNKVxcdFxcdCs9IGF0bS9cXG5uZXQvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0wyVFApXFx0XFx0Kz0gbDJ0cC9cXG5uZXQvTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX1BIT05FVClcXHRcXHQrPSBwaG9uZXQvXFxubmV0L01ha2VmaWxlLTM5LWlmbmVxICgkKENPTkZJR19WTEFOXzgwMjFRKSwpXFxubmV0L01ha2VmaWxlOjQwOm9iai15XFx0XFx0XFx0XFx0Kz0gODAyMXEvXFxubmV0L01ha2VmaWxlLTQxLWVuZGlmXFxubmV0L01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUF9TQ1RQKVxcdFxcdCs9IHNjdHAvXFxubmV0L01ha2VmaWxlOjQzOm9iai0kKENPTkZJR19SRFMpXFx0XFx0Kz0gcmRzL1xcbm5ldC9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfV0lSRUxFU1MpXFx0XFx0Kz0gd2lyZWxlc3MvXFxubmV0L01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19NQUM4MDIxMSlcXHRcXHQrPSBtYWM4MDIxMS9cXG5uZXQvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX1RJUEMpXFx0XFx0Kz0gdGlwYy9cXG5uZXQvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX05FVExBQkVMKVxcdFxcdCs9IG5ldGxhYmVsL1xcbm5ldC9NYWtlZmlsZTo0ODpvYmotJChDT05GSUdfSVVDVilcXHRcXHQrPSBpdWN2L1xcbm5ldC9NYWtlZmlsZTo0OTpvYmotJChDT05GSUdfU01DKVxcdFxcdCs9IHNtYy9cXG5uZXQvTWFrZWZpbGU6NTA6b2JqLSQoQ09ORklHX1JGS0lMTClcXHRcXHQrPSByZmtpbGwvXFxubmV0L01ha2VmaWxlOjUxOm9iai0kKENPTkZJR19ORVRfOVApXFx0XFx0Kz0gOXAvXFxubmV0L01ha2VmaWxlOjUyOm9iai0kKENPTkZJR19EQ0IpXFx0XFx0Kz0gZGNiL1xcbm5ldC9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfNkxPV1BBTilcXHRcXHQrPSA2bG93cGFuL1xcbm5ldC9NYWtlZmlsZTo1NDpvYmotJChDT05GSUdfSUVFRTgwMjE1NClcXHQrPSBpZWVlODAyMTU0L1xcbm5ldC9NYWtlZmlsZTo1NTpvYmotJChDT05GSUdfTUFDODAyMTU0KVxcdFxcdCs9IG1hYzgwMjE1NC9cXG5uZXQvTWFrZWZpbGUtNTYtXFxubmV0L01ha2VmaWxlOjU3Om9iai0kKENPTkZJR19TWVNDVEwpXFx0XFx0Kz0gc3lzY3RsX25ldC5vXFxubmV0L01ha2VmaWxlOjU4Om9iai0kKENPTkZJR19ETlNfUkVTT0xWRVIpXFx0Kz0gZG5zX3Jlc29sdmVyL1xcbm5ldC9NYWtlZmlsZTo1OTpvYmotJChDT05GSUdfQ0VQSF9MSUIpXFx0XFx0Kz0gY2VwaC9cXG5uZXQvTWFrZWZpbGU6NjA6b2JqLSQoQ09ORklHX0JBVE1BTl9BRFYpXFx0Kz0gYmF0bWFuLWFkdi9cXG5uZXQvTWFrZWZpbGU6NjE6b2JqLSQoQ09ORklHX05GQylcXHRcXHQrPSBuZmMvXFxubmV0L01ha2VmaWxlOjYyOm9iai0kKENPTkZJR19QU0FNUExFKVxcdFxcdCs9IHBzYW1wbGUvXFxubmV0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfSUZFKVxcdFxcdCs9IGlmZS9cXG5uZXQvTWFrZWZpbGU6NjQ6b2JqLSQoQ09ORklHX09QRU5WU1dJVENIKVxcdCs9IG9wZW52c3dpdGNoL1xcbm5ldC9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfVlNPQ0tFVFMpXFx0Kz0gdm13X3Zzb2NrL1xcbm5ldC9NYWtlZmlsZTo2NjpvYmotJChDT05GSUdfTVBMUylcXHRcXHQrPSBtcGxzL1xcbm5ldC9NYWtlZmlsZTo2NzpvYmotJChDT05GSUdfTkVUX05TSClcXHRcXHQrPSBuc2gvXFxubmV0L01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19IU1IpXFx0XFx0Kz0gaHNyL1xcbm5ldC9NYWtlZmlsZTo2OTpvYmotJChDT05GSUdfTkVUX1NXSVRDSERFVilcXHQrPSBzd2l0Y2hkZXYvXFxubmV0L01ha2VmaWxlOjcwOm9iai0kKENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVilcXHQrPSBsM21kZXYvXFxubmV0L01ha2VmaWxlOjcxOm9iai0kKENPTkZJR19RUlRSKVxcdFxcdCs9IHFydHIvXFxubmV0L01ha2VmaWxlOjcyOm9iai0kKENPTkZJR19ORVRfTkNTSSlcXHRcXHQrPSBuY3NpL1xcbm5ldC9NYWtlZmlsZTo3MzpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpXFx0Kz0geGRwL1xcbm5ldC9NYWtlZmlsZTo3NDpvYmotJChDT05GSUdfTVBUQ1ApXFx0XFx0Kz0gbXB0Y3AvXFxubmV0L01ha2VmaWxlOjc1Om9iai0kKENPTkZJR19NQ1RQKVxcdFxcdCs9IG1jdHAvXFxubmV0L01ha2VmaWxlOjc2Om9iai0kKENPTkZJR19ORVRfSEFORFNIQUtFKVxcdCs9IGhhbmRzaGFrZS9cXG5uZXQvTWFrZWZpbGU6Nzc6b2JqLSQoQ09ORklHX05FVF9TSEFQRVIpXFx0Kz0gc2hhcGVyL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMToyMy45ODAxODg1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzA2MjgxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQtc3lzZnMuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBob29rcyBmb3IgbmV0d29yayBpbnRlcmZhY2VzIGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBva2UgYXJvdW5kIGluIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AuIEl0J3MgYSBrZXkgc3BvdCBmb3Igc3lzZnMgaW50ZXJhY3Rpb25zIHJlbGF0ZWQgdG8gbmV0d29ya2luZy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGNvZGUgZm9yIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyAoYCNpZmRlZmAsIGAjaWZgLCBldGMuKSBvciBzdWJ0bGUgZGVwZW5kZW5jaWVzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgd2hpY2ggZmVhdHVyZXMgb3Igc3Vic3lzdGVtcyBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBzeXNmcyBhdHRyaWJ1dGVzIGFuZCBob3cgdGhleSBhcmUgZXhwb3NlZC4gR290dGEgc2VlIHdoYXQgZmxhZ3Mgb3IgbW9kdWxlcyBuZWVkIHRvIGJlIGFjdGl2ZSB0byBtYWtlIGNlcnRhaW4gb3B0aW9ucyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgZmlsZXN5c3RlbS4gVGhpcyBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCBiZWZvcmUgSSBkaWcgaW50byBhbnkgcGFydGljdWxhciBhdHRyaWJ1dGUgb3IgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGdldCB0aGUgb3ZlcmFsbCBjb250ZXh0IGJlZm9yZSBJIGNhbiBpc29sYXRlIGFueSBzcGVjaWZpYyBpc3N1ZSBvciBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMToyNi4wMTA4MTk2MzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDY1NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvbmV0LXN5c2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzItXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MzM6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTM0LXN0YXRpYyBjb25zdCBjaGFyIGZtdF9oZXhbXSA9IFxcXCIlI3hcXFxcblxcXCI7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz05MTQ9c3RhdGljIGJvb2wgd2lyZWxlc3NfZ3JvdXBfbmVlZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkxNS17XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTE2OiNpZiBJU19FTkFCTEVEKENPTkZJR19DRkc4MDIxMSlcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MTctXFx0aWYgKG5kZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MTktI2VuZGlmXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTIwOiNpZiBJU19FTkFCTEVEKENPTkZJR19XSVJFTEVTU19FWFQpXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTIxLVxcdGlmIChuZGV2LVxcdTAwM2V3aXJlbGVzc19oYW5kbGVycylcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkyNi1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5Mjc6I2Vsc2UgLyogQ09ORklHX1NZU0ZTICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTI4LSNkZWZpbmUgbmV0X2NsYXNzX2dyb3Vwc1xcdE5VTExcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5Mjk6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkzMC1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5MzE6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkzMi0jZGVmaW5lIHRvX3J4X3F1ZXVlX2F0dHIoX2F0dHIpIFxcXFxcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTk2MT1zdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyByeF9xdWV1ZV9zeXNmc19vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05NjUtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTY2OiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTY3LXN0YXRpYyBzc2l6ZV90IHNob3dfcnBzX21hcChzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlICpxdWV1ZSwgY2hhciAqYnVmKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTE0MT1zdGF0aWMgc3RydWN0IHJ4X3F1ZXVlX2F0dHJpYnV0ZSBycHNfZGV2X2Zsb3dfdGFibGVfY250X2F0dHJpYnV0ZSBfX3JvX2FmdGVyX2luaXRcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExNDMtXFx0XFx0IHNob3dfcnBzX2Rldl9mbG93X3RhYmxlX2NudCwgc3RvcmVfcnBzX2Rldl9mbG93X3RhYmxlX2NudCk7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTE0NDojZW5kaWYgLyogQ09ORklHX1JQUyAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExNDUtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTE0Nj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcnhfcXVldWVfZGVmYXVsdF9hdHRyc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMTQ3OiNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTE0OC1cXHRcXHUwMDI2cnBzX2NwdXNfYXR0cmlidXRlLmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMTU1PXN0YXRpYyB2b2lkIHJ4X3F1ZXVlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMTU3LVxcdHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnF1ZXVlID0gdG9fcnhfcXVldWUoa29iaik7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTE1ODojaWZkZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTExNTktXFx0cnBzX3RhZ19wdHIgdGFnX3B0cjtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEyMDQ9c3RhdGljIGludCByeF9xdWV1ZV9kZWZhdWx0X21hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyMDYte1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEyMDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX1JQUykgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfU1lTQ1RMKVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyMDgtXFx0c3RydWN0IGNwdW1hc2sgKnJwc19kZWZhdWx0X21hc2s7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMjg0PXN0YXRpYyBpbnQgcnhfcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmRleCwga3VpZF90IGt1aWQsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzAwLX1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzAxOiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzAyLVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTMwND1uZXRfcnhfcXVldWVfdXBkYXRlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvbGRfbnVtLCBpbnQgbmV3X251bSlcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzA1LXtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzA2OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzA3LVxcdGludCBpO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTMwOS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzEwOiNpZm5kZWYgQ09ORklHX1JQU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMTEtXFx0aWYgKCFkZXYtXFx1MDAzZXN5c2ZzX3J4X3F1ZXVlX2dyb3VwKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTM0MD1zdGF0aWMgaW50IG5ldF9yeF9xdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bSxcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDIte1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzNDM6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDQtXFx0aW50IGVycm9yID0gMDtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDYtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTM0NzojaWZuZGVmIENPTkZJR19SUFNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzQ4LVxcdGlmICghZGV2LVxcdTAwM2VzeXNmc19yeF9xdWV1ZV9ncm91cClcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNjItXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTM2MzojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM2NC0vKlxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTQzMT1zdGF0aWMgc3NpemVfdCB0cmFmZmljX2NsYXNzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDY3LVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE0Njg6I2lmZGVmIENPTkZJR19YUFNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDY5LXN0YXRpYyBzc2l6ZV90IHR4X21heHJhdGVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTE1MjM9c3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWVfYXR0cmlidXRlIHF1ZXVlX3RyYWZmaWNfY2xhc3MgX19yb19hZnRlcl9pbml0XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTI1LVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE1MjY6I2lmZGVmIENPTkZJR19CUUxcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTI3LS8qXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xNzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRxbF9ncm91cCA9IHt9O1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE3MDM6I2VuZGlmIC8qIENPTkZJR19CUUwgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNzA0LVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE3MDU6I2lmZGVmIENPTkZJR19YUFNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNzA2LXN0YXRpYyBzc2l6ZV90IHhwc19xdWV1ZV9zaG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpbmRleCxcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTE5MDM9c3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWVfYXR0cmlidXRlIHhwc19yeHFzX2F0dHJpYnV0ZSBfX3JvX2FmdGVyX2luaXRcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xOTA0LVxcdD0gX19BVFRSX1JXKHhwc19yeHFzKTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxOTA1OiNlbmRpZiAvKiBDT05GSUdfWFBTICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTkwNi1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xOTA3PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpuZXRkZXZfcXVldWVfZGVmYXVsdF9hdHRyc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE5MDktXFx0XFx1MDAyNnF1ZXVlX3RyYWZmaWNfY2xhc3MuYXR0cixcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxOTEwOiNpZmRlZiBDT05GSUdfWFBTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTkxMS1cXHRcXHUwMDI2eHBzX2NwdXNfYXR0cmlidXRlLmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xOTU0PXN0YXRpYyBib29sIG5ldGRldl91c2VzX2JxbChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTk1OC1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxOTU5OlxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19CUUwpO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE5NjAtfVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjAxNj1zdGF0aWMgaW50IHR4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IGluZGV4LFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzMS19XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjAzMjojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzMy1cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIwMzU9bmV0ZGV2X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2xkX251bSwgaW50IG5ld19udW0pXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzNi17XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjAzNzojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzOC1cXHRpbnQgaTtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwNzEtXFx0cmV0dXJuIDA7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA3MjojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA3My19XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMDc1PXN0YXRpYyBpbnQgbmV0X3R4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA3Ny17XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA3ODojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA3OS1cXHRpbnQgZXJyb3IgPSAwO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA5MC1cXHRyZXR1cm4gMDtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDkxOiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDkyLX1cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIwOTQ9c3RhdGljIGludCByZWdpc3Rlcl9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA5Ny1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDk4OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDk5LVxcdGRldi1cXHUwMDNlcXVldWVzX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKFxcXCJxdWV1ZXNcXFwiLFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEyMS1cXHRuZXRfcnhfcXVldWVfdXBkYXRlX2tvYmplY3RzKGRldiwgcnhxLCAwKTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTIyOiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTIzLVxcdGtzZXRfdW5yZWdpc3RlcihkZXYtXFx1MDAzZXF1ZXVlc19rc2V0KTtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxMjg9c3RhdGljIGludCBxdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGt1aWRfdCBrdWlkLCBrZ2lkX3Qga2dpZClcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxMzEtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjEzMjojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEzMy1cXHRpZiAobmRldi1cXHUwMDNlcXVldWVzX2tzZXQpIHtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxNTM9c3RhdGljIHZvaWQgcmVtb3ZlX3F1ZXVlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTU2LVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNTc6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNTgtXFx0cmVhbF9yeCA9IGRldi1cXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE2OC1cXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNjk6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNzAtXFx0a3NldF91bnJlZ2lzdGVyKGRldi1cXHUwMDNlcXVldWVzX2tzZXQpO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjE4MT1zdGF0aWMgc3RydWN0IG5zX2NvbW1vbiAqbmV0X2dyYWJfY3VycmVudF9ucyh2b2lkKVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE4My1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnM7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjE4NDojaWZkZWYgQ09ORklHX05FVF9OU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxODUtXFx0aWYgKG5ldClcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIyNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBuZXRfY2xhc3MgPSB7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMjcyLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIyNzM6I2lmZGVmIENPTkZJR19PRlxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIyNzQtc3RhdGljIGludCBvZl9kZXZfbm9kZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMzI2PWludCBuZXRkZXZfcmVnaXN0ZXJfa29iamVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIzMzgtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjMzOTojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjM0MC1cXHQvKiBBbGxvdyBmb3IgYSBkZXZpY2Ugc3BlY2lmaWMgZ3JvdXAgKi9cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIzNDgtXFx0XFx0Kmdyb3VwcysrID0gXFx1MDAyNndpcmVsZXNzX2dyb3VwO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIzNDk6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIzNTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjI2LjA1OTg5MDEyMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODAwMTc1MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgQ2hhbmdlcyBpbiBOZXQtU3lzZnMuYyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9ucyB3ZSd2ZSBqdXN0IGltcGxlbWVudGVkLiBGaXJzdCwgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGZ1bmN0aW9ucyBpbiBxdWVzdGlvbjogYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AsIGBzcGVlZF9zaG93YCwgYW5kIGBkdXBsZXhfc2hvd2AuIEknbGwgY29uZmlybSB0aGVpciBzY29wZSwgc28gSSBrbm93IHdoZXJlIHRoZXkgbGl2ZSB3aXRoaW4gdGhlIG5ldCBzdWJzeXN0ZW0uXG5cbkFscmlnaHQsIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGFsbCB0aHJlZSBmdW5jdGlvbnMsIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLCBgc3BlZWRfc2hvd2AsIGFuZCBgZHVwbGV4X3Nob3dgLCBhcmUgaW5kZWVkIHN0YXRpYyB3aXRoaW4gYG5ldC9jb3JlL25ldC1zeXNmcy5jYC4gTm93IHRoYXQgSSBrbm93IHRoZSBzY29wZSBvZiB0aGVpciBkZWZpbml0aW9uIEkgY2FuIHByb2NlZWQgdG8gY29uc2lkZXIgaG93IHRoZXkgZml0IHdpdGhpbiB0aGUgY29kZS5cblxuR2l2ZW4gdGhhdCB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IHRoZXkncmUgYmVpbmcgKmNhbGxlZCogd2l0aGluIHRoaXMgc3BlY2lmaWMgZmlsZS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgYG5ldC1zeXNmcy5jYCwgZm9jdXNpbmcgb24gdGhlIHZpY2luaXR5IG9mIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCwgdG8gZmluZCBhbnkgbG9jYWwgdXNhZ2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIHB1cnBvc2UgYW5kIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbSdzIHN5c2ZzIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MzQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6MjguODYwMDY4MzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldC1zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MDpcXHRcXHRydG5sX3VubG9jaygpO1xcbiAzNzE6XFx0XFx0cmV0dXJuIHJldDtcXG4gMzcyOlxcdH1cXG4gMzczOlxcdHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTtcXG4gMzc0OlxcdFxcbiAzNzU6XFx0c3RhdGljIHNzaXplX3Qgc3BlZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIDM3NjpcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuIDM3NzpcXHR7XFxuIDM3ODpcXHRcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuIDM3OTpcXHRcXHRpbnQgcmV0O1xcbiAzODA6XFx0XFxuIDM4MTpcXHRcXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcXHUwMDI2Y21kKTtcXG4gMzgyOlxcdFxcdGlmIChyZXQpXFxuIDM4MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzODQ6XFx0XFxuIDM4NTpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcXG4gMzg2OlxcdH1cXG4gMzg3OlxcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMzkwOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuIDM5MTpcXHR7XFxuIDM5MjpcXHRcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuIDM5MzpcXHRcXHRjb25zdCBjaGFyICpkdXBsZXg7XFxuIDM5NDpcXHRcXHRpbnQgcmV0O1xcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcXHUwMDI2Y21kKTtcXG4gMzk3OlxcdFxcdGlmIChyZXQpXFxuIDM5ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzOTk6XFx0XFxuIDQwMDpcXHRcXHRzd2l0Y2ggKGNtZC5iYXNlLmR1cGxleCkge1xcbiA0MDE6XFx0XFx0Y2FzZSBEVVBMRVhfSEFMRjpcXG4gNDAyOlxcdFxcdFxcdGR1cGxleCA9IFxcXCJoYWxmXFxcIjtcXG4gNDAzOlxcdFxcdFxcdGJyZWFrO1xcbiA0MDQ6XFx0XFx0Y2FzZSBEVVBMRVhfRlVMTDpcXG4gNDA1OlxcdFxcdFxcdGR1cGxleCA9IFxcXCJmdWxsXFxcIjtcXG4gNDA2OlxcdFxcdFxcdGJyZWFrO1xcbiA0MDc6XFx0XFx0ZGVmYXVsdDpcXG4gNDA4OlxcdFxcdFxcdGR1cGxleCA9IFxcXCJ1bmtub3duXFxcIjtcXG4gNDA5OlxcdFxcdFxcdGJyZWFrO1xcbiA0MTA6XFx0XFx0fVxcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlc1xcXFxuXFxcIiwgZHVwbGV4KTtcXG4gNDEzOlxcdH1cXG4gNDE0OlxcdHN0YXRpYyBERVZJQ0VfQVRUUl9STyhkdXBsZXgpO1xcbiA0MTU6XFx0XFxuIDQxNjpcXHRzdGF0aWMgc3NpemVfdCB0ZXN0aW5nX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiA0MTc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuIDQxODpcXHR7XFxuIDQxOTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xcbiA0MjA6XFx0XFxuIDQyMTpcXHRcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbiA0MjI6XFx0XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCAhIW5ldGlmX3Rlc3RpbmcobmV0ZGV2KSk7XFxuIDQyMzpcXHRcXG4gNDI0OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MjU6XFx0fVxcbiA0MjY6XFx0c3RhdGljIERFVklDRV9BVFRSX1JPKHRlc3RpbmcpO1xcbiA0Mjc6XFx0XFxuIDQyODpcXHRzdGF0aWMgc3NpemVfdCBkb3JtYW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiA0Mjk6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjI4Ljg2MDE5NDgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODU1MDM2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkRlbHZpbmcgaW50byBOZXR3b3JrIERldmljZSBMb2NraW5nIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbnMgYXJlIHN5bmNocm9uaXplZC4gSSdtIGdvaW5nIHRvIGp1bXAgaW4gYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9ucyBmb3IgYG5ldGRldl9uZWVkX29wc19sb2NrYCwgYG5ldGRldl9sb2NrX29wc2AsIGFuZCBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgbG9ja2luZyBpcyBpbXBsZW1lbnRlZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmVzLCBhbmQgaG93IGxpbmsgc2V0dGluZ3MgYXJlIGFjY2Vzc2VkLiBLbm93aW5nIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBpcyBjcml0aWNhbCBmb3Igd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZyBvciBkZXNpZ25pbmcuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgaGVyZSBpcyBwYXJhbW91bnQ7IGl0IGRpcmVjdGx5IGltcGFjdHMgcGVyZm9ybWFuY2UgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIGEgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIG1hbmlmZXN0IGluIHNvbWUgcmVhbGx5IHVnbHkgd2F5cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0aGUgY29udHJvbCBmbG93IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTg0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMTozMS4xNDU3MDE1MjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTM2MjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9ldGh0b29sLmg9MzI2PV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0zMjctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpO1xcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjMyODppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI5LVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6MzEuMjcxMDY4ODM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MzQ3MTk4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEludGVyZmFjZSBMaW5rIFNldHRpbmdzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgd2hlcmUgSSdkICpleHBlY3QqIHRvIGZpbmQgaXQsIGlzIGxpa2VseSB3aXRoaW4gdGhlIGBuZXQvZXRodG9vbC9gIGRpcmVjdG9yeSwgb3IgcG90ZW50aWFsbHkgc29tZXdoZXJlIGluIHRoZSBjb3JlIG5ldHdvcmsgaW50ZXJmYWNlIGNvZGUuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgc3RhcnRpbmcgdGhlcmUsIHRvIGdldCB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzcwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6MzMuMDA1NzkwNzUyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzczMzU5OTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGlmX2dldF9saW5rX2tzZXR0aW5nc1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmM9MjQyPXN0YXRpYyB2b2lkIGdldF9kZXZpY2Vfc3RhdGUoc3RydWN0IGxlZF9uZXRkZXZfZGF0YSAqdHJpZ2dlcl9kYXRhKVxcbi0tXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYy0yNDctXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYzoyNDg6XFx0aWYgKG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyh0cmlnZ2VyX2RhdGEtXFx1MDAzZW5ldF9kZXYsIFxcdTAwMjZjbWQpKVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMtMjQ5LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Nzk1PXN0YXRpYyBpbnQgYm9uZF91cGRhdGVfc3BlZWRfZHVwbGV4KHN0cnVjdCBzbGF2ZSAqc2xhdmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTgwMC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjgwMTpcXHRyZXMgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3Moc2xhdmVfZGV2LCBcXHUwMDI2ZWNtZCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy04MDItXFx0aWYgKHJlcyBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jPTMwODU9c3RhdGljIHZvaWQgX190ZWFtX3BvcnRfY2hhbmdlX3NlbmQoc3RydWN0IHRlYW1fcG9ydCAqcG9ydCwgYm9vbCBsaW5rdXApXFxuLS1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwOTQtXFxuZHJpdmVycy9uZXQvdGVhbS90ZWFtX2NvcmUuYzozMDk1OlxcdFxcdGVyciA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhwb3J0LVxcdTAwM2VkZXYsIFxcdTAwMjZlY21kKTtcXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jLTMwOTYtXFx0XFx0aWYgKCFlcnIpIHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmM9MTE5PWludCBmY29lX2xpbmtfc3BlZWRfdXBkYXRlKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpXFxuLS1cXG5kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jLTEyMy1cXG5kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jOjEyNDpcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFxcdTAwMjZlY21kKSkge1xcbmRyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmMtMTI1LVxcdFxcdGxwb3J0LVxcdTAwM2VsaW5rX3N1cHBvcnRlZF9zcGVlZHMgXFx1MDAyNj0gfihGQ19QT1JUU1BFRURfMUdCSVQgIHxcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTMyNj1fX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI3LVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDozMjg6aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTMyOS1cXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncyk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM9MzY9c3RhdGljIGludCBwb3J0X2Nvc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy0zOS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM6NDA6XFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2ZWNtZCkpIHtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtNDEtXFx0XFx0c3dpdGNoIChlY21kLmJhc2Uuc3BlZWQpIHtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEyMT1zdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTItXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE1MzpcXHRcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTU0LVxcdFxcdFxcdHJldCA9IDA7XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTQyOT1zdHJ1Y3QgZXRodG9vbF9saW5rX3VzZXR0aW5ncyB7XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQzOC0vKiBJbnRlcm5hbCBrZXJuZWwgaGVscGVyIHRvIHF1ZXJ5IGEgZGV2aWNlIGV0aHRvb2xfbGlua19zZXR0aW5ncy4gKi9cXG5uZXQvZXRodG9vbC9pb2N0bC5jOjQzOTppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NDAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTQ1Nj1pbnQgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NjMtXFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0NjQ6XFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDY1LVxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuLS1cXG5uZXQvZXRodG9vbC9saW5raW5mby5jPTI0PXN0YXRpYyBpbnQgbGlua2luZm9fcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuLS1cXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTM2LVxcdFxcdHJldHVybiByZXQ7XFxubmV0L2V0aHRvb2wvbGlua2luZm8uYzozNzpcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2ZGF0YS1cXHUwMDNla3NldHRpbmdzKTtcXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTM4LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2V0aHRvb2wvbGlua2luZm8uYz05OD1ldGhubF9zZXRfbGlua2luZm8oc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMTA2LVxcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM6MTA3OlxcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZrc2V0dGluZ3MpO1xcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMTA4LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYz0yOD1zdGF0aWMgaW50IGxpbmttb2Rlc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTQxLVxcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jOjQyOlxcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZkYXRhLVxcdTAwM2Vrc2V0dGluZ3MpO1xcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTQzLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYz0zMTk9ZXRobmxfc2V0X2xpbmttb2RlcyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmMtMzI2LVxcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jOjMyNzpcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2a3NldHRpbmdzKTtcXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy0zMjgtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2JzLmM9MzIzPXN0YXRpYyB2b2lkIGNic19zZXRfcG9ydF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYnNfc2NoZWRfZGF0YSAqcSlcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2JzLmMtMzI5LVxcbm5ldC9zY2hlZC9zY2hfY2JzLmM6MzMwOlxcdGVyciA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZlY21kKTtcXG5uZXQvc2NoZWQvc2NoX2Nicy5jLTMzMS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTI5ND1zdGF0aWMgdm9pZCB0YXByaW9fc2V0X3BpY29zX3Blcl9ieXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMDItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMzAzOlxcdGVyciA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZlY21kKTtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTEzMDQtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjM1LjM3OTE1NTEyOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTI3NTcxMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IGBuZXQvY29yZS9uZXQtc3lzZnMuY2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBoZWxwZXIgYW5kIHRoZSByZWxhdGVkIHN5c2ZzIGNhbGxiYWNrcyBmb3IgYHNwZWVkYCBhbmQgYGR1cGxleGAgYXR0cmlidXRlcyAoYHNwZWVkX3Nob3dgLCBgZHVwbGV4X3Nob3dgKS4gVGhlc2UgYXR0cmlidXRlcyBhcmUgY3JlYXRlZCB1c2luZyBgREVWSUNFX0FUVFJfUk9gLlxuXG5GaXJzdCwgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIHN5c2ZzIGF0dHJpYnV0ZXMgcmVsYXRlZCB0byB0aGUgbGluaydzIHNwZWVkIGFuZCBkdXBsZXggc2V0dGluZ3MuIFRoZSBjb2RlIHJlZmFjdG9ycyBsb2NraW5nIG1lY2hhbmlzbXMgKGBzeXNmc19ydG5sX2xvY2tgIGFuZCBgbmV0ZGV2X2xvY2tfb3BzYCkgYW5kLCBjcnVjaWFsbHksIGNhbGxzIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIHdoaWxlIGFsc28gZG9pbmcgY2hlY2tzIGZvciBgZGV2X2lzYWxpdmVgIGFuZCBgbmV0aWZfcnVubmluZ2AuIFRoaXMgaGl0cyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYSBjcml0aWNhbCBjb3JlIHN1YnN5c3RlbSAobmV0d29ya2luZyB2aWEgc3lzZnMpLiBTbywgYFdvcnRoRnV6emluZyA9IFRydWVgLlxuXG5OZXh0LCB0aGUgYEZvY3VzU3ltYm9sc2A6IHdoYXQgZG8gd2UgbmVlZCB0byB0YXJnZXQ/IE9idmlvdXNseSwgdGhlIGNvcmUgZnVuY3Rpb25zOiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCwgYHNwZWVkX3Nob3dgLCBhbmQgYGR1cGxleF9zaG93YC4gVGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBwYXRjaC5cblxuRmluYWxseSwgd2hhdCBhcmUgdGhlIGBFbmFibGVDb25maWdzYD8gV2UgbmVlZCB0byBlbnN1cmUgdGhlIHJlbGV2YW50IGNvZGUgaXMgY29tcGlsZWQuIFRoZSBmaWxlIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AgaXMgY2xlYXJseSBjb21waWxlZCB3aGVuIGBDT05GSUdfTkVUPXlgLiBUaGUgc3lzZnMgYXR0cmlidXRlcyB0aGVtc2VsdmVzIGFyZSBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1NZU0ZTYC4gVGhlcmVmb3JlLCB3ZSBtdXN0IGVuYWJsZSBgTkVUYCBhbmQgYFNZU0ZTYC4gYENPTkZJR19JTkVUYCBtaWdodCBiZSB0eXBpY2FsLCBidXQgd2UgZG9uJ3QgbmVlZCBpdC4gSSdsbCBkb3VibGUtY2hlY2sgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCB0byBiZSBzdXJlLiBZZXAsIHRoZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgYXJlIGluZGVlZCBjb25kaXRpb25hbCBvbiBgQ09ORklHX1NZU0ZTYC5cblxuU28sIHRvIHN1bW1hcml6ZTpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgVHJ1ZWAgKGNvcmUgbmV0IHN5c2ZzIGF0dHJpYnV0ZXMsIGhpdHMgbG9ja2luZywgY3J1Y2lhbCBjaGVja3MpXG4qICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24gcHJvdmlkZWQuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJzeXNmc19nZXRfbGlua19rc2V0dGluZ3NcIiwgXCJzcGVlZF9zaG93XCIsIFwiZHVwbGV4X3Nob3dcIl1gXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiTkVUXCIsIFwiU1lTRlNcIl1gXG5cbkxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MDgsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjQwLjUwNjcyOTAxOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzM2MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIlNZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJzcGVlZF9zaG93XCIsXG4gICAgXCJkdXBsZXhfc2hvd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgc3BlZWQgYW5kIGR1cGxleCBhdHRyaWJ1dGVzIGluIG5ldC9jb3JlL25ldC1zeXNmcy5jIHRvIHVzZSBhIG5ldyBsb2NraW5nIGhlbHBlciBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKSwgbW9kaWZ5aW5nIGhvdyBydG5sIGFuZCBuZXRkZXYgb3BzIGxvY2tzIGFyZSBhY3F1aXJlZCBhbmQgY2hlY2tlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBzeXNmcyBjb2RlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgL3N5cy9jbGFzcy9uZXQvXFx1MDAzY2lmYWNlXFx1MDAzZS9zcGVlZCBhbmQgL3N5cy9jbGFzcy9uZXQvXFx1MDAzY2lmYWNlXFx1MDAzZS9kdXBsZXguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCIsXG4gICAgXCJTWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwic3BlZWRfc2hvd1wiLFxuICAgIFwiZHVwbGV4X3Nob3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzIHNwZWVkIGFuZCBkdXBsZXggYXR0cmlidXRlcyBpbiBuZXQvY29yZS9uZXQtc3lzZnMuYyB0byB1c2UgYSBuZXcgbG9ja2luZyBoZWxwZXIgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCksIG1vZGlmeWluZyBob3cgcnRubCBhbmQgbmV0ZGV2IG9wcyBsb2NrcyBhcmUgYWNxdWlyZWQgYW5kIGNoZWNrZWQuIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgc3lzZnMgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIC9zeXMvY2xhc3MvbmV0L1xcdTAwM2NpZmFjZVxcdTAwM2Uvc3BlZWQgYW5kIC9zeXMvY2xhc3MvbmV0L1xcdTAwM2NpZmFjZVxcdTAwM2UvZHVwbGV4LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMTo0MC41ODg0NzM2ODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTY1NDYyMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6MTE6NDAuNTg5MTAyMTU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjgxNjQ4Mjg3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgc3BlZWQgYW5kIGR1cGxleCBhdHRyaWJ1dGVzIChgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2ApIGJ5IGludHJvZHVjaW5nIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgdG8gb3B0aW1pemUgbG9ja2luZyAoYXZvaWRpbmcgdW5uZWNlc3NhcnkgUlROTCBsb2NraW5nIHdoZW4gb25seSBuZXRkZXYgb3BzIGxvY2sgaXMgcmVxdWlyZWQpLlxcblxcblRoZSBzdGFjayB2YXJpYWJsZSBgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kYCBpcyBwYXNzZWQgdG8gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCwgd2hpY2ggZGVsZWdhdGVzIHRvIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAuIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKWAgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIGBtZW1zZXQoLi4uLCAwLCBzaXplb2YoKmNtZCkpYCBwcmlvciB0byBpbnZva2luZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgc2hvdyBmdW5jdGlvbnMgb25seSBhY2Nlc3MgZmllbGRzIG9mIGBjbWRgIGlmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgcmV0dXJucyBzdWNjZXNzICgwKS4gT3V0cHV0IGlzIGZvcm1hdHRlZCBpbnRvIHN5c2ZzIHN0cmluZyBidWZmZXJzIHVzaW5nIGBzeXNmc19lbWl0KClgLCBlbGltaW5hdGluZyBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgZGlzY2xvc3VyZS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgbG9ja2luZyByZWdyZXNzaW9ucyBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc1NDIzZjc0OGRkNWU0Y2QyNzFiZjAwMzg2YWNmMTc3ZjkwYmY3YWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIwOjEwOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xuaW5kZXggMzUyMTczZGY3NTc4NS4uZmE3OTBlNDQyNTcwNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jXG4rKysgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xuQEAgLTExOCw2ICsxMTgsNDkgQEAgc3RhdGljIGludCBzeXNmc19ydG5sX2xvY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuK1x0Ym9vbCBuZWVkX3J0bmw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LypcbitcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4rXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4rXHQgKi9cbitcdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSB8fFxuK1x0XHQgICAgKG5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNlxuK1x0XHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MpO1xuK1x0aWYgKG5lZWRfcnRubCkge1xuK1x0XHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0bmV0ZGV2X2xvY2tfb3BzKG5ldGRldik7XG4rXG4rXHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRyZXQgPSAtRUlOVkFMO1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuK1x0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG4rXHRcdFx0cmV0ID0gMDtcbitcdH1cbitcbit1bmxvY2s6XG4rXHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuK1x0aWYgKG5lZWRfcnRubClcbitcdFx0cnRubF91bmxvY2soKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCdzICovXG4gc3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXG5AQCAtMzMyLDcwICszNzUsNDEgQEAgc3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpO1xuIHN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuLVx0aW50IHJldCA9IC1FSU5WQUw7XG4tXG4tXHQvKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcbi1cdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbi1cdCAqL1xuLVx0aWYgKCFuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuK1x0aW50IHJldDtcbiBcbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuK1x0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXHUwMDI2Y21kKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSAtRUlOVkFMO1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuLVx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4tXG4tXHRcdGlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmNtZCkpXG4tXHRcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcbi1cdH1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4gfVxuIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XG4gXG4gc3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbitcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbitcdGNvbnN0IGNoYXIgKmR1cGxleDtcbitcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbitcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gLUVJTlZBTDtcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbi1cdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuLVxuLVx0XHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZjbWQpKSB7XG4tXHRcdFx0Y29uc3QgY2hhciAqZHVwbGV4O1xuLVxuLVx0XHRcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfSEFMRjpcbi1cdFx0XHRcdGR1cGxleCA9IFwiaGFsZlwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfRlVMTDpcbi1cdFx0XHRcdGR1cGxleCA9IFwiZnVsbFwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0ZGVmYXVsdDpcbi1cdFx0XHRcdGR1cGxleCA9IFwidW5rbm93blwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcIiVzXFxuXCIsIGR1cGxleCk7XG4tXHRcdH1cbitcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4rXHRjYXNlIERVUExFWF9IQUxGOlxuK1x0XHRkdXBsZXggPSBcImhhbGZcIjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIERVUExFWF9GVUxMOlxuK1x0XHRkdXBsZXggPSBcImZ1bGxcIjtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRkdXBsZXggPSBcInVua25vd25cIjtcbitcdFx0YnJlYWs7XG4gXHR9XG4tXHRydG5sX3VubG9jaygpO1xuLVx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlc1xcblwiLCBkdXBsZXgpO1xuIH1cbiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjQwLjU4OTEwMzE3NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzM0MjgzMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBJbnRlcmZhY2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSB0b3VjaGVzIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gcmV2b2x2ZSBhcm91bmQgcmVmYWN0b3JpbmcgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgIHdpdGhpbiB0aGUgc3lzZnMgaW50ZXJmYWNlIGJ5IGludHJvZHVjaW5nIHRoaXMgbmV3IGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGZ1bmN0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgYW5kIGBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzYCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhlIGBjbWRgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIGFuZCB1c2VkIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgc3VzcGVjdCBgY21kYCBob2xkcyB0aGUgc3BlY2lmaWMgRVRIVE9PTCBjb21tYW5kIGJlaW5nIGV4ZWN1dGVkLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBsaWZlY3ljbGUgaXMga2V5LlxuXG5UbyBzcGVlZCB0aGluZ3MgdXAsIEknbGwgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uIG9mIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBlc3NlbnRpYWwgY29udGV4dCBJIG5lZWQgdG8gcHJvY2VlZCB3aXRoIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjQ1LjkyMzM4OTk3NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzODA1OTY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYz0yNDI9c3RhdGljIHZvaWQgZ2V0X2RldmljZV9zdGF0ZShzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEpXFxuLS1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jLTI0Ny1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jOjI0ODpcXHRpZiAobmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHRyaWdnZXJfZGF0YS1cXHUwMDNlbmV0X2RldiwgXFx1MDAyNmNtZCkpXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYy0yNDktXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz03OTU9c3RhdGljIGludCBib25kX3VwZGF0ZV9zcGVlZF9kdXBsZXgoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtODAwLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6ODAxOlxcdHJlcyA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzbGF2ZV9kZXYsIFxcdTAwMjZlY21kKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTgwMi1cXHRpZiAocmVzIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmM9MzA4NT1zdGF0aWMgdm9pZCBfX3RlYW1fcG9ydF9jaGFuZ2Vfc2VuZChzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0LCBib29sIGxpbmt1cClcXG4tLVxcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA5NC1cXG5kcml2ZXJzL25ldC90ZWFtL3RlYW1fY29yZS5jOjMwOTU6XFx0XFx0ZXJyID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHBvcnQtXFx1MDAzZWRldiwgXFx1MDAyNmVjbWQpO1xcbmRyaXZlcnMvbmV0L3RlYW0vdGVhbV9jb3JlLmMtMzA5Ni1cXHRcXHRpZiAoIWVycikge1xcbi0tXFxuZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYz0xMTk9aW50IGZjb2VfbGlua19zcGVlZF91cGRhdGUoc3RydWN0IGZjX2xwb3J0ICpscG9ydClcXG4tLVxcbmRyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmMtMTIzLVxcbmRyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmM6MTI0OlxcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgXFx1MDAyNmVjbWQpKSB7XFxuZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYy0xMjUtXFx0XFx0bHBvcnQtXFx1MDAzZWxpbmtfc3VwcG9ydGVkX3NwZWVkcyBcXHUwMDI2PSB+KEZDX1BPUlRTUEVFRF8xR0JJVCAgfFxcbi0tXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg9MzI2PV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0zMjctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpO1xcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjMyODppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI5LVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYz0zNj1zdGF0aWMgaW50IHBvcnRfY29zdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jLTM5LVxcbm5ldC9icmlkZ2UvYnJfaWYuYzo0MDpcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZlY21kKSkge1xcbm5ldC9icmlkZ2UvYnJfaWYuYy00MS1cXHRcXHRzd2l0Y2ggKGVjbWQuYmFzZS5zcGVlZCkge1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTIxPXN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyOS1cXHQvKlxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzMDpcXHQgKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIG5ldGlmX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwc1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMS1cXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTItXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE1MzpcXHRcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTU0LVxcdFxcdFxcdHJldCA9IDA7XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTQyOT1zdHJ1Y3QgZXRodG9vbF9saW5rX3VzZXR0aW5ncyB7XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQzOC0vKiBJbnRlcm5hbCBrZXJuZWwgaGVscGVyIHRvIHF1ZXJ5IGEgZGV2aWNlIGV0aHRvb2xfbGlua19zZXR0aW5ncy4gKi9cXG5uZXQvZXRodG9vbC9pb2N0bC5jOjQzOTppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NDAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ1Mi19XFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0NTM6RVhQT1JUX1NZTUJPTChuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MpO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDU0LVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz00NTY9aW50IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDYzLVxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDY0OlxcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGxpbmtfa3NldHRpbmdzKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2NS1cXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbi0tXFxubmV0L2V0aHRvb2wvbGlua2luZm8uYz0yND1zdGF0aWMgaW50IGxpbmtpbmZvX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxcbi0tXFxubmV0L2V0aHRvb2wvbGlua2luZm8uYy0zNi1cXHRcXHRyZXR1cm4gcmV0O1xcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM6Mzc6XFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXFx1MDAyNmRhdGEtXFx1MDAzZWtzZXR0aW5ncyk7XFxubmV0L2V0aHRvb2wvbGlua2luZm8uYy0zOC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM9OTg9ZXRobmxfc2V0X2xpbmtpbmZvKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTEwNi1cXG5uZXQvZXRodG9vbC9saW5raW5mby5jOjEwNzpcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2a3NldHRpbmdzKTtcXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTEwOC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM9Mjg9c3RhdGljIGludCBsaW5rbW9kZXNfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuLS1cXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy00MS1cXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYzo0MjpcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2ZGF0YS1cXHUwMDNla3NldHRpbmdzKTtcXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy00My1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM9MzE5PWV0aG5sX3NldF9saW5rbW9kZXMoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTMyNi1cXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYzozMjc6XFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXFx1MDAyNmtzZXR0aW5ncyk7XFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmMtMzI4LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nicy5jPTMyMz1zdGF0aWMgdm9pZCBjYnNfc2V0X3BvcnRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2JzX3NjaGVkX2RhdGEgKnEpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nicy5jLTMyOS1cXG5uZXQvc2NoZWQvc2NoX2Nicy5jOjMzMDpcXHRlcnIgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2ZWNtZCk7XFxubmV0L3NjaGVkL3NjaF9jYnMuYy0zMzEtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEyOTQ9c3RhdGljIHZvaWQgdGFwcmlvX3NldF9waWNvc19wZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzAyLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTMwMzpcXHRlcnIgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcXHUwMDI2ZWNtZCk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzA0LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMTo0Ny44NjE0NTU3NjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk5NDUzMjAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBpbiBgZXRodG9vbC9pb2N0bC5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGlzLiBUbyByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AsIEkgbmVlZCB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGNvZGUgaW4gYG5ldC9ldGh0b29sL2lvY3RsLmNgLCBhbmQgSSdtIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDQzOC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25hbGl0eSBpcyBsaWtlbHkgZGVmaW5lZCBvciBhdCBsZWFzdCB3aGVyZSBJIGNhbiB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBpb2N0bCBmcmFtZXdvcmsuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBpbnRlcmZhY2UgYW5kIGhvdyBpdCByZXRyaWV2ZXMgdGhlIGxpbmsgc2V0dGluZ3MgZGF0YS4gVGhpcydsbCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUgaW4gcmVsYXRpb24gdG8gdGhlIGJyb2FkZXIgRXRoZXJuZXQgZHJpdmVyIGludGVyYWN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhcm91bmQgdGhpcyBmdW5jdGlvbiBpcyBwYXJhbW91bnQgdG8gY29ycmVjdGx5IGludGVycHJldCB0aGUgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMTo1MC44NTU5ODk4OTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDM1OlxcdFxcdH0gbGlua19tb2RlcztcXG4gNDM2OlxcdH07XFxuIDQzNzpcXHRcXG4gNDM4OlxcdC8qIEludGVybmFsIGtlcm5lbCBoZWxwZXIgdG8gcXVlcnkgYSBkZXZpY2UgZXRodG9vbF9saW5rX3NldHRpbmdzLiAqL1xcbiA0Mzk6XFx0aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiA0NDA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXFxuIDQ0MTpcXHR7XFxuIDQ0MjpcXHRcXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGRldik7XFxuIDQ0MzpcXHRcXG4gNDQ0OlxcdFxcdGlmICghZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxcbiA0NDU6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA0NDY6XFx0XFxuIDQ0NzpcXHRcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuIDQ0ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0bWVtc2V0KGxpbmtfa3NldHRpbmdzLCAwLCBzaXplb2YoKmxpbmtfa3NldHRpbmdzKSk7XFxuIDQ1MTpcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xcbiA0NTI6XFx0fVxcbiA0NTM6XFx0RVhQT1JUX1NZTUJPTChuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MpO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHQvKiBDb252ZW5pZW5jZSBoZWxwZXIgZm9yIGNhbGxlcnMgdGhhdCBob2xkIG9ubHkgcnRubF9sb2NrKCkuICovXFxuIDQ1NjpcXHRpbnQgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiA0NTc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncylcXG4gNDU4OlxcdHtcXG4gNDU5OlxcdFxcdGludCByZXQ7XFxuIDQ2MDpcXHRcXG4gNDYxOlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuIDQ2MjpcXHRcXG4gNDYzOlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbiA0NjQ6XFx0XFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xcbiA0NjU6XFx0XFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4gNDY2OlxcdFxcdHJldHVybiByZXQ7XFxuIDQ2NzpcXHR9XFxuIDQ2ODpcXHRFWFBPUlRfU1lNQk9MKF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MpO1xcbiA0Njk6XFx0XFxuIDQ3MDpcXHQvKiBjb252ZXJ0IGV0aHRvb2xfbGlua191c2V0dGluZ3MgaW4gdXNlciBzcGFjZSB0byBhIGtlcm5lbCBpbnRlcm5hbFxcbiA0NzE6XFx0ICogZXRodG9vbF9saW5rX2tzZXR0aW5ncy4gcmV0dXJuIDAgb24gc3VjY2VzcywgZXJybm8gb24gZXJyb3IuXFxuIDQ3MjpcXHQgKi9cXG4gNDczOlxcdHN0YXRpYyBpbnQgbG9hZF9saW5rX2tzZXR0aW5nc19mcm9tX3VzZXIoc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKnRvLFxcbiA0NzQ6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHZvaWQgX191c2VyICpmcm9tKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMTo1MC44NTYyMzgyOTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzg3NzUwODM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgTmV0d29yayBJbnRlcmZhY2UgTGluayBTZXR0aW5ncyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEknbSB0YWtpbmcgYSBsb29rIGF0IGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIHJldHJpZXZpbmcgYW5kIGhhbmRsaW5nIGxpbmsgY29uZmlndXJhdGlvbi4gRmlyc3QsIHRoZSBmdW5jdGlvbiB6ZXJvZXMgb3V0IHRoZSBgbGlua19rc2V0dGluZ3NgIHN0cnVjdHVyZSB1c2luZyBgbWVtc2V0YC4gVGhhdCdzIHN0YW5kYXJkIHByYWN0aWNlLCBlbnN1cmluZyB3ZSBzdGFydCB3aXRoIGEgY2xlYW4gc2xhdGUgYmVmb3JlIHBvcHVsYXRpbmcgdGhlIHN0cnVjdHVyZS4gVGhlbiwgdGhlIHJlYWwgYWN0aW9uIGhhcHBlbnM6IHdlIGNhbGwgdGhlIGBnZXRfbGlua19rc2V0dGluZ3NgIGZ1bmN0aW9uIHZpYSB0aGUgZGV2aWNlJ3MgYGV0aHRvb2xfb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgaG93IHdlIGFjdHVhbGx5IGludGVyZmFjZSB3aXRoIHRoZSBuZXR3b3JrIGNhcmQncyBkcml2ZXIgdG8gZmV0Y2ggaXRzIGN1cnJlbnQgc2V0dGluZ3MsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuXG5cbk5leHQsIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHN5c2ZzIGZyYW1ld29yay4gSSdtIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMTE1LTE3MCBhbmQgMzcwLTQyMC4gSSBleHBlY3QgdG8gZmluZCB0aGUgc3lzZnMgYXR0cmlidXRlIGRlZmluaXRpb25zIGFuZCBob3cgdGhlc2UgbGluayBzZXR0aW5ncyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBzZWN0aW9ucyBkZWFsIHdpdGggdGhlIGZpbGUgY3JlYXRpb24sIHBlcm1pc3Npb25zLCBhbmQgcG9zc2libHkgaG93IHRoZSBhdHRyaWJ1dGVzIGFyZSBwb3B1bGF0ZWQgd2l0aCB0aGUgZGF0YSB3ZSBhcmUgZ2V0dGluZyBmcm9tIHRoZSBkZXZpY2UgZHJpdmVyLiBUaGlzIHNob3VsZCBwcm92aWRlIGNvbnRleHQgb24gaG93IHRoZXNlIHNldHRpbmdzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgZmlsZXN5c3RlbSBhbmQgaG93IHRoZXkgY2FuIGJlIGFjY2Vzc2VkL21vZGlmaWVkIGJ5IHVzZXIgc3BhY2UgdG9vbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjU4LjczMzc0OTM0M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0LXN5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdFxcdHN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pO1xcbiAxMTY6XFx0XFx0ZGV2X3B1dChuZGV2KTtcXG4gMTE3OlxcdFxcbiAxMTg6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTE5OlxcdH1cXG4gMTIwOlxcdFxcbiAxMjE6XFx0c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxcbiAxMjI6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiAxMjM6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuIDEyNDpcXHR7XFxuIDEyNTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xcbiAxMjY6XFx0XFx0Ym9vbCBuZWVkX3J0bmw7XFxuIDEyNzpcXHRcXHRpbnQgcmV0O1xcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHQvKlxcbiAxMzA6XFx0XFx0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3M7IHRoaXMgaGVscHNcXG4gMTMxOlxcdFxcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cXG4gMTMyOlxcdFxcdCAqL1xcbiAxMzM6XFx0XFx0aWYgKCFuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXFxuIDEzNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTM1OlxcdFxcbiAxMzY6XFx0XFx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKG5ldGRldikgfHxcXG4gMTM3OlxcdFxcdFxcdCAgICAobmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2XFxuIDEzODpcXHRcXHRcXHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MpO1xcbiAxMzk6XFx0XFx0aWYgKG5lZWRfcnRubCkge1xcbiAxNDA6XFx0XFx0XFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWtvYmosIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyLCBuZXRkZXYpO1xcbiAxNDE6XFx0XFx0XFx0aWYgKHJldClcXG4gMTQyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE0MzpcXHRcXHR9XFxuIDE0NDpcXHRcXHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0aWYgKCFkZXZfaXNhbGl2ZShuZXRkZXYpKSB7XFxuIDE0NzpcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbiAxNDg6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIDE0OTpcXHRcXHR9XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDE1MjpcXHRcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuIDE1MzpcXHRcXHRcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXFxuIDE1NDpcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbiAxNTU6XFx0XFx0fVxcbiAxNTY6XFx0XFxuIDE1NzpcXHR1bmxvY2s6XFxuIDE1ODpcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xcbiAxNTk6XFx0XFx0aWYgKG5lZWRfcnRubClcXG4gMTYwOlxcdFxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuIDE2MTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNjI6XFx0fVxcbiAxNjM6XFx0XFxuIDE2NDpcXHQvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwncyAqL1xcbiAxNjU6XFx0c3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxcbiAxNjY6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZixcXG4gMTY3OlxcdFxcdFxcdFxcdCAgIHNzaXplX3QgKCpmb3JtYXQpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICosIGNoYXIgKikpXFxuIDE2ODpcXHR7XFxuIDE2OTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoZGV2KTtcXG4gMTcwOlxcdFxcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAxNzM6XFx0XFx0aWYgKGRldl9pc2FsaXZlKG5kZXYpKVxcbiAxNzQ6XFx0XFx0XFx0cmV0ID0gKCpmb3JtYXQpKG5kZXYsIGJ1Zik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjExOjU4LjczMzkxOTEwM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDAxOTk4NDY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSaXNrIEFzc2Vzc21lbnQgZm9yIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNvZGUgaXMgc2FmZSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IEtNU0FOIGlzc3Vlcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyB3aGVyZSBLTVNBTiBzaGluZXMuXG5cbkZpcnN0LCBJJ2xsIHRyYWNlIHRoZSBkYXRhIGZsb3cgaW4gYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgLiBUaGUga2V5IGZ1bmN0aW9uIGlzIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLiBJdCBsb29rcyBsaWtlOlxuXG5gYGBjXG5zdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcblx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbntcblx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuXHRpbnQgcmV0O1xuXG5cdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG5cdGlmIChyZXQpXG5cdFx0cmV0dXJuIHJldDtcblxuXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcbn1cbmBgYFxuXG5JZiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCByZXR1cm5zIDAsIHRoZW4gdGhlIGNydWNpYWwgcGFydCBoYXBwZW5zIGluIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgLiBJIHNlZSB0aGF0IGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGluaXRpYWxseSBkb2VzIGBtZW1zZXQobGlua19rc2V0dGluZ3MsIDAsIHNpemVvZigqbGlua19rc2V0dGluZ3MpKWAgb24gdGhlIGBjbWRgIHN0cnVjdC4gVGhlbiwgYSBkcml2ZXIncyBgZ2V0X2xpbmtfa3NldHRpbmdzYCBjYWxsYmFjayBwb3B1bGF0ZXMgaXQuIElmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybnMgYW4gZXJyb3IsIHRoZSBgY21kYCBzdHJ1Y3QgaXMgKm5ldmVyKiByZWFkLiBUaGlzIG1lYW5zIHRoZSBjb2RlIG9ubHkgcmVhZHMgaWYgaXQncyBiZWVuIGluaXRpYWxpemVkLiBgc3lzZnNfZW1pdGAgaXMgdXNlZCB0byBmb3JtYXQgdGhlIGBjbWRgIHN0cnVjdCBpbnRvIGEgc3RyaW5nIHRoYXQgd2lsbCBiZSB3cml0dGVuIHRvIGBidWZgLCBzbyB0aGF0J3Mgb2theS5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgZm9yIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuIFRoaXMgcGF0Y2ggYWltcyB0byBpbXByb3ZlIHRoYXQgYXNwZWN0IGJ5IHVzaW5nIFJUTkwgb25seSBpZiBuZWVkZWQgd2l0aCBgb3BfbmVlZHNfcnRubGAsIGBuZXRkZXZfbmVlZF9vcHNfbG9ja2AsIGNoZWNraW5nIGBkZXZfaXNhbGl2ZWAsIGFuZCB0aGVuIGNhbGxpbmcgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AuIFRoaXMgbG9va3MgZ29vZCwgYXZvaWRpbmcgUlROTCB3aGVuIGl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2FyeS5cblxuTm93LCBjb25jZXJuaW5nIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrOlxuLSAgIFRoZSBgY21kYCBzdHJ1Y3QgaXMgc3RhY2stYWxsb2NhdGVkLCB3aGljaCBpcyBmaW5lIGluIGl0c2VsZi5cbi0gICBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBjYWxscyBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYC5cbi0gICBJbnNpZGUgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AsIHRoZSBjcnVjaWFsIGBtZW1zZXQobGlua19rc2V0dGluZ3MsIDAsIHNpemVvZigqbGlua19rc2V0dGluZ3MpKWAgKmd1YXJhbnRlZXMqIHRoYXQgYGNtZGAgaXMgemVyb2VkIGJlZm9yZSBhbnkgZHJpdmVyIGludGVyYWN0aW9uLlxuLSAgIElmIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybnMgMCwgYGNtZGAgaXMgZnVsbHkgemVyb2VkIGFuZCBwb3B1bGF0ZWQgYnkgdGhlIGRyaXZlci5cbi0gICBJZiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCByZXR1cm5zIGFuIGVycm9yIChub24temVybyksIGBjbWRgIGlzICpuZXZlciogcmVhZCBvciB1c2VkLCBzbyB0aGlzIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy5cbi0gICBgc3lzZnNfZW1pdGAgZm9ybWF0cyB0aGUgdmFsdWUgYXMgYSBzdHJpbmcgaW50byB0aGUgYnVmZmVyLCBzbyBubyByYXcga2VybmVsIHN0cnVjdCBieXRlcyBhcmUgZXhwb3NlZC5cbi0gICBBbnkgbG9ja2luZyBvciBkZXZpY2Ugc3RhdGUgaXNzdWVzIHdvdWxkIGJlIGNhdWdodCBieSBMT0NLREVQIGFuZCBLQVNBTi5cblxuTGV0IG1lIGFuYWx5emUgdGhlIHBhdGggaW4gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AgYSBiaXQgbW9yZSBjYXJlZnVsbHk6XG5cbmBgYGNcbnJldCA9IC1FSU5WQUw7XG5pZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG5cdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKSlcblx0XHRyZXQgPSAwO1xufVxuYGBgXG5cbklmIGBuZXRpZl9ydW5uaW5nKG5ldGRldilgIGlzIGZhbHNlLCBgcmV0YCByZW1haW5zIGAtRUlOVkFMYC4gSWYgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgZmFpbHMgKHJldHVybnMgbm9uLXplcm8pLCBgcmV0YCBzdGlsbCByZW1haW5zIGAtRUlOVkFMYC4gT25seSBpZiBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCAqc3VjY2VlZHMqIGRvZXMgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AgcmV0dXJuIDAuIEFuZCBpbXBvcnRhbnRseSwgYGNtZGAgKmlzKiBpbml0aWFsaXplZCBieSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYC5cblxuSW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zIChgc3BlZWRfc2hvd2AsIGBkdXBsZXhfc2hvd2ApOlxuYGBgY1xucmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXHUwMDI2Y21kKTtcbmlmIChyZXQpXG4gICAgcmV0dXJuIHJldDtcbmBgYFxuXG5gY21kYCBpcyBvbmx5IHJlYWQgaWYgYHJldCA9PSAwYC4gVGhlcmVmb3JlLCBpdCdzIGFsd2F5cyBpbml0aWFsaXplZCB3aGVuIGl0J3MgcmVhZC5cblxuKipDb25jbHVzaW9uOioqXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlIHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50LiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLiBLTVNBTiBpcyBvdmVya2lsbCBoZXJlIGJlY2F1c2UgdGhlIHN0YW5kYXJkIHJ1bnRpbWUgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG4iLCJJbnB1dFRva2VucyI6ODAwOSwiT3V0cHV0VG9rZW5zIjoyNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDoxMjowOC43NTM5MDc0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgKGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCkgYnkgaW50cm9kdWNpbmcgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCB0byBvcHRpbWl6ZSBsb2NraW5nIChhdm9pZGluZyB1bm5lY2Vzc2FyeSBSVE5MIGxvY2tpbmcgd2hlbiBvbmx5IG5ldGRldiBvcHMgbG9jayBpcyByZXF1aXJlZCkuXFxuXFxuVGhlIHN0YWNrIHZhcmlhYmxlIGBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWRgIGlzIHBhc3NlZCB0byBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKClgLCB3aGljaCBkZWxlZ2F0ZXMgdG8gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYC4gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggYG1lbXNldCguLi4sIDAsIHNpemVvZigqY21kKSlgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBzaG93IGZ1bmN0aW9ucyBvbmx5IGFjY2VzcyBmaWVsZHMgb2YgYGNtZGAgaWYgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCByZXR1cm5zIHN1Y2Nlc3MgKDApLiBPdXRwdXQgaXMgZm9ybWF0dGVkIGludG8gc3lzZnMgc3RyaW5nIGJ1ZmZlcnMgdXNpbmcgYHN5c2ZzX2VtaXQoKWAsIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBkaXNjbG9zdXJlLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIHJlZ3Jlc3Npb25zIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyBzcGVlZCBhbmQgZHVwbGV4IGF0dHJpYnV0ZXMgKGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCkgYnkgaW50cm9kdWNpbmcgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCB0byBvcHRpbWl6ZSBsb2NraW5nIChhdm9pZGluZyB1bm5lY2Vzc2FyeSBSVE5MIGxvY2tpbmcgd2hlbiBvbmx5IG5ldGRldiBvcHMgbG9jayBpcyByZXF1aXJlZCkuXFxuXFxuVGhlIHN0YWNrIHZhcmlhYmxlIGBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWRgIGlzIHBhc3NlZCB0byBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKClgLCB3aGljaCBkZWxlZ2F0ZXMgdG8gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYC4gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpYCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggYG1lbXNldCguLi4sIDAsIHNpemVvZigqY21kKSlgIHByaW9yIHRvIGludm9raW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBzaG93IGZ1bmN0aW9ucyBvbmx5IGFjY2VzcyBmaWVsZHMgb2YgYGNtZGAgaWYgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpYCByZXR1cm5zIHN1Y2Nlc3MgKDApLiBPdXRwdXQgaXMgZm9ybWF0dGVkIGludG8gc3lzZnMgc3RyaW5nIGJ1ZmZlcnMgdXNpbmcgYHN5c2ZzX2VtaXQoKWAsIGVsaW1pbmF0aW5nIGFueSByaXNrIG9mIGluZm8tbGVha3Mgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBkaXNjbG9zdXJlLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBvciBsb2NraW5nIHJlZ3Jlc3Npb25zIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow2vs8w[1] Phase: Succeeded StartedAt: 2026-09-04 20:12:31 +0000 UTC FinishedAt: 2026-09-04 20:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 20:12:31 +0000 UTC FinishedAt: 2026-09-04 20:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2] Phase: Succeeded StartedAt: 2026-09-04 20:12:31 +0000 UTC FinishedAt: 2026-09-04 23:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 20:12:31 +0000 UTC FinishedAt: 2026-09-04 23:53:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 20:12:31 +0000 UTC FinishedAt: 2026-09-04 20:12:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 20:12:31 +0000 UTC FinishedAt: 2026-09-04 20:12:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow2vs8w/series-workflow2vs8w-convert-artifact-1132125283/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 20:12:55 +0000 UTC FinishedAt: 2026-09-04 20:29:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 20:12:55 +0000 UTC FinishedAt: 2026-09-04 20:29:09 +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:*5aa73268-7b6a-4a1e-9307-55f712666eda,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-workflow2vs8w/series-workflow2vs8w-convert-artifact-1132125283/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": "fe5d795e-e1cf-44da-87b0-3df17089f470", "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-workflow2vs8w/series-workflow2vs8w-build-action-60225489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 20:12:55 +0000 UTC FinishedAt: 2026-09-04 20:28:59 +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:*5aa73268-7b6a-4a1e-9307-55f712666eda,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-workflow2vs8w/series-workflow2vs8w-convert-artifact-1132125283/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": "fe5d795e-e1cf-44da-87b0-3df17089f470", "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-workflow2vs8w/series-workflow2vs8w-build-action-60225489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 20:29:09 +0000 UTC FinishedAt: 2026-09-04 20:29:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 20:29:09 +0000 UTC FinishedAt: 2026-09-04 20:29:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 20:29:09 +0000 UTC FinishedAt: 2026-09-04 20:29:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 20:29:09 +0000 UTC FinishedAt: 2026-09-04 20:29:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow2vs8w/series-workflow2vs8w-convert-artifact-2621479066/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 20:29:19 +0000 UTC FinishedAt: 2026-09-04 20:31:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 20:29:19 +0000 UTC FinishedAt: 2026-09-04 20:30:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fe5d795e-e1cf-44da-87b0-3df17089f470,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-workflow2vs8w/series-workflow2vs8w-build-action-60225489/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-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 20:31:08 +0000 UTC FinishedAt: 2026-09-04 20:31:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 20:31:08 +0000 UTC FinishedAt: 2026-09-04 20:31:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 20:31:08 +0000 UTC FinishedAt: 2026-09-04 20:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 20:31:08 +0000 UTC FinishedAt: 2026-09-04 20:48:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5aa73268-7b6a-4a1e-9307-55f712666eda,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-workflow2vs8w/series-workflow2vs8w-convert-artifact-2621479066/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": "1cc5f71c-ca8c-44ac-b7ab-f83a06f7eea6", "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-workflow2vs8w/series-workflow2vs8w-build-action-2999469182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 20:31:08 +0000 UTC FinishedAt: 2026-09-04 20:47:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5aa73268-7b6a-4a1e-9307-55f712666eda,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-workflow2vs8w/series-workflow2vs8w-convert-artifact-2621479066/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": "1cc5f71c-ca8c-44ac-b7ab-f83a06f7eea6", "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-workflow2vs8w/series-workflow2vs8w-build-action-2999469182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 20:48:06 +0000 UTC FinishedAt: 2026-09-04 20:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 20:48:06 +0000 UTC FinishedAt: 2026-09-04 20:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 20:48:06 +0000 UTC FinishedAt: 2026-09-04 20:49:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 20:48:06 +0000 UTC FinishedAt: 2026-09-04 20:49:36 +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:*1cc5f71c-ca8c-44ac-b7ab-f83a06f7eea6,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-workflow2vs8w/series-workflow2vs8w-build-action-2999469182/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-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 20:49:46 +0000 UTC FinishedAt: 2026-09-04 23:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 20:49:46 +0000 UTC FinishedAt: 2026-09-04 23:53:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"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:*fe5d795e-e1cf-44da-87b0-3df17089f470,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1cc5f71c-ca8c-44ac-b7ab-f83a06f7eea6,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-workflow2vs8w/series-workflow2vs8w-build-action-60225489/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-workflow2vs8w/series-workflow2vs8w-build-action-2999469182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 20:49:46 +0000 UTC FinishedAt: 2026-09-04 20:50:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 20:49:46 +0000 UTC FinishedAt: 2026-09-04 20:50:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"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-workflow2vs8w/series-workflow2vs8w-convert-artifact-3557338703/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 20:49:46 +0000 UTC FinishedAt: 2026-09-04 20:49:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 20:49:46 +0000 UTC FinishedAt: 2026-09-04 20:49:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 20:49:46 +0000 UTC FinishedAt: 2026-09-04 20:49:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 20:50:11 +0000 UTC FinishedAt: 2026-09-04 23:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vs8w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sysfs_get_link_ksettings","speed_show","duplex_show"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b35d3d2fae3058265ba937544a3895cedce18d08","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSFS"],"series_id":"280ebb4a-90c3-40d6-8994-328d37fa2b21","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 20:50:11 +0000 UTC FinishedAt: 2026-09-04 23:53:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fe5d795e-e1cf-44da-87b0-3df17089f470,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1cc5f71c-ca8c-44ac-b7ab-f83a06f7eea6,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-workflow2vs8w/series-workflow2vs8w-build-action-60225489/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-workflow2vs8w/series-workflow2vs8w-build-action-2999469182/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-workflow2vs8w/series-workflow2vs8w-convert-artifact-3557338703/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,}