Name: series-workflow7c6zc Phase: Succeeded StartedAt: 2026-08-31 08:11:14 +0000 UTC FinishedAt: 2026-08-31 12:07:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[0] Phase: Succeeded StartedAt: 2026-08-31 08:11:14 +0000 UTC FinishedAt: 2026-08-31 08:14:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 08:11:14 +0000 UTC FinishedAt: 2026-08-31 08:14:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SYSFS", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SYSFS", "NET" ], "series_id": "b09daea7-2916-44de-800b-e07d85254391" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netif_get_link_ksettings", "speed_show", "duplex_show", "sysfs_get_link_ksettings" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NZU0ZTJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGlmX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtzcGVlZF9zaG93JiMzNDssCiAgICAmIzM0O2R1cGxleF9zaG93JiMzNDssCiAgICAmIzM0O3N5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgJiMzOTtzcGVlZCYjMzk7IGFuZCAmIzM5O2R1cGxleCYjMzk7IGF0dHJpYnV0ZSByZWFkIGhhbmRsZXJzIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gJiMzOTtzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKSYjMzk7LCBhbGxvd2luZyB0aGUgdXNlIG9mIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgKG5ldGRldl9sb2NrX29wcykgaW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIFJUTkwuXG5cblRoZSBzdGFjay1hbGxvY2F0ZWQgJiMzOTtzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQmIzM5OyB2YXJpYWJsZSBpcyBwYXNzZWQgdG8gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCksIHdoaWNoIHplcm9lcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIG1lbXNldCgpIGJlZm9yZSBxdWVyeWluZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgZmllbGRzIGNtZC5iYXNlLnNwZWVkIGFuZCBjbWQuYmFzZS5kdXBsZXggYXJlIGFjY2Vzc2VkIG9ubHkgd2hlbiBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKSByZXR1cm5zIHN1Y2Nlc3MgKDApLCBhbmQgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgaW50byB0ZXh0IHZpYSBzeXNmc19lbWl0KCkuIExvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGFzcGVjdHMgb2YgdGhpcyBwYXRjaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGJ1aWxkcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MsIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgbG9ja2luZyBsb2dpYyB3aGVuIHJlYWRpbmcgdGhlIG5ldHdvcmsgZGV2aWNlICYjMzk7c3BlZWQmIzM5OyBhbmQgJiMzOTtkdXBsZXgmIzM5OyBzeXNmcyBhdHRyaWJ1dGVzLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgdGhlIFJUTkwgbG9jaywgaXQgdXNlcyBwZXItZGV2aWNlIG9wcyBsb2NraW5nIChuZXRkZXZfbG9ja19vcHMpIHdoZW4gc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UsIGNoZWNrcyBkZXZfaXNhbGl2ZSwgYW5kIGNhbGxzIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpLiBUaGlzIGFmZmVjdHMgdXNlci1hY2Nlc3NpYmxlIHN5c2ZzIGVuZHBvaW50cyBhbmQgbmV0d29yayBkZXZpY2UgbG9ja2luZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDllMzZmN2E1M2ZkNTg2YTVkYTlhYjJiNDFjZGU0NWFmNDVjMDA5MzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODoxMzowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jXG5pbmRleCAzNTIxNzNkZjc1Nzg1Li4zZTAxZTdmM2NhYzc5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldC1zeXNmcy5jXG5AQCAtMTE4LDYgJiM0MzsxMTgsNTUgQEAgc3RhdGljIGludCBzeXNmc19ydG5sX2xvY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogVXNlIHRoZSBwZXItZGV2aWNlIG9wcyBsb2NrIHdpdGhvdXQgUlROTCB3aGVuIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaXQuXG4mIzQzOyAqIExlZ2FjeSBkZXZpY2VzIGFuZCBjYWxsYmFja3Mgd2hpY2ggZXhwbGljaXRseSByZXF1aXJlIFJUTkwgcmV0YWluIHRoZVxuJiM0MzsgKiBleGlzdGluZyBsb2NraW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XG4mIzQzO1x0aW50IHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0Ym9vbCBuZWVkX3J0bmw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKTsgdGhpcyBoZWxwc1xuJiM0MztcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSB8fFxuJiM0MztcdFx0ICAgIChuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjZcbiYjNDM7XHRcdCAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7XG4mIzQzO1x0aWYgKG5lZWRfcnRubCkge1xuJiM0MztcdFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFx1MDAyNmRldi1cdTAwM2Vrb2JqLCBcdTAwMjZhdHRyLVx1MDAzZWF0dHIsIG5ldGRldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0fSBlbHNlIGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBLZWVwIHRoZSBzeXNmcyBBQkk6IHJlcG9ydCBhbnkgY2FsbGJhY2sgZXJyb3IgYXMgLUVJTlZBTFxuJiM0MztcdFx0ICogaW5zdGVhZCBvZiBwcm9wYWdhdGluZyB0aGUgZHJpdmVyJiMzOTtzIGVycm9yIGNvZGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKSlcbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl91bmxvY2tfb3BzKG5ldGRldik7XG4mIzQzO1x0aWYgKG5lZWRfcnRubClcbiYjNDM7XHRcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJiMzOTtzICovXG4gc3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXG5AQCAtMzMyLDI3ICYjNDM7MzgxLDEzIEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTtcbiBzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdHJldCA9IC1FSU5WQUw7XG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4tXHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbiYjNDM7XHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcbiBcbi1cdFx0aWYgKCFfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgXHUwMDI2Y21kKSlcbi1cdFx0XHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpO1xuLVx0fVxuLVx0cnRubF91bmxvY2soKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XG5AQCAtMzYwLDQxICYjNDM7Mzk1LDI2IEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XG4gc3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IC1FSU5WQUw7XG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4tXHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbi1cbi1cdFx0aWYgKCFfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgXHUwMDI2Y21kKSkge1xuLVx0XHRcdGNvbnN0IGNoYXIgKmR1cGxleDtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4mIzQzO1x0Y29uc3QgY2hhciAqZHVwbGV4O1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRcdFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcbi1cdFx0XHRjYXNlIERVUExFWF9IQUxGOlxuLVx0XHRcdFx0ZHVwbGV4ID0gXCYjMzQ7aGFsZlwmIzM0Oztcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGNhc2UgRFVQTEVYX0ZVTEw6XG4tXHRcdFx0XHRkdXBsZXggPSBcJiMzNDtmdWxsXCYjMzQ7O1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0ZGVmYXVsdDpcbi1cdFx0XHRcdGR1cGxleCA9IFwmIzM0O3Vua25vd25cJiMzNDs7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzXFxuXCYjMzQ7LCBkdXBsZXgpO1xuJiM0MztcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4mIzQzO1x0XHRjYXNlIERVUExFWF9IQUxGOlxuJiM0MztcdFx0XHRkdXBsZXggPSBcJiMzNDtoYWxmXCYjMzQ7O1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgRFVQTEVYX0ZVTEw6XG4mIzQzO1x0XHRcdGR1cGxleCA9IFwmIzM0O2Z1bGxcJiMzNDs7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0ZHVwbGV4ID0gXCYjMzQ7dW5rbm93blwmIzM0OztcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjNDM7XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslc1xcblwmIzM0OywgZHVwbGV4KTtcbiBcdH1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gc3RhdGljIERFVklDRV9BVFRSX1JPKGR1cGxleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1lTRlMmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3NwZWVkX3Nob3cmIzM0OywKICAgICYjMzQ7ZHVwbGV4X3Nob3cmIzM0OywKICAgICYjMzQ7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGxvY2tpbmcgbG9naWMgd2hlbiByZWFkaW5nIHRoZSBuZXR3b3JrIGRldmljZSAmIzM5O3NwZWVkJiMzOTsgYW5kICYjMzk7ZHVwbGV4JiMzOTsgc3lzZnMgYXR0cmlidXRlcy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIHRoZSBSVE5MIGxvY2ssIGl0IHVzZXMgcGVyLWRldmljZSBvcHMgbG9ja2luZyAobmV0ZGV2X2xvY2tfb3BzKSB3aGVuIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLCBjaGVja3MgZGV2X2lzYWxpdmUsIGFuZCBjYWxscyBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKS4gVGhpcyBhZmZlY3RzIHVzZXItYWNjZXNzaWJsZSBzeXNmcyBlbmRwb2ludHMgYW5kIG5ldHdvcmsgZGV2aWNlIGxvY2tpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZTM2ZjdhNTNmZDU4NmE1ZGE5YWIyYjQxY2RlNDVhZjQ1YzAwOTM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDg6MTM6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDM1MjE3M2RmNzU3ODUuLjNlMDFlN2YzY2FjNzkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw1NSBAQCBzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoKJiM0MzsgKiBVc2UgdGhlIHBlci1kZXZpY2Ugb3BzIGxvY2sgd2l0aG91dCBSVE5MIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyBpdC4KJiM0MzsgKiBMZWdhY3kgZGV2aWNlcyBhbmQgY2FsbGJhY2tzIHdoaWNoIGV4cGxpY2l0bHkgcmVxdWlyZSBSVE5MIHJldGFpbiB0aGUKJiM0MzsgKiBleGlzdGluZyBsb2NraW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAomIzQzOwkJCQkgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7CiYjNDM7CWludCByZXQgPSAtRUlOVkFMOwomIzQzOwlib29sIG5lZWRfcnRubDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKTsgdGhpcyBoZWxwcwomIzQzOwkgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8CiYjNDM7CQkgICAgKG5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsKJiM0MzsJCSAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7CiYjNDM7CWlmIChuZWVkX3J0bmwpIHsKJiM0MzsJCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CW5ldGRldl9sb2NrX29wcyhuZXRkZXYpOwomIzQzOwomIzQzOwlyZXQgPSAtRUlOVkFMOwomIzQzOwlpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CX0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogS2VlcCB0aGUgc3lzZnMgQUJJOiByZXBvcnQgYW55IGNhbGxiYWNrIGVycm9yIGFzIC1FSU5WQUwKJiM0MzsJCSAqIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgdGhlIGRyaXZlciYjMzk7cyBlcnJvciBjb2RlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpCiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpOwomIzQzOwlpZiAobmVlZF9ydG5sKQomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwmIzM5O3MgKi8KIHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCkBAIC0zMzIsMjcgJiM0MzszODEsMTMgQEAgc3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpOwogc3RhdGljIHNzaXplX3Qgc3BlZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwcwotCSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KLQkgKi8KLQlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDsKJiM0MzsJaW50IHJldDsKIAotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7CiYjNDM7CXJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsICZhbXA7Y21kKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpOwogCi0JCWlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7Y21kKSkKLQkJCXJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7Ci0JfQotCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7CkBAIC0zNjAsNDEgJiM0MzszOTUsMjYgQEAgc3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTsKIHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwcwotCSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KLQkgKi8KLQlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSAtRUlOVkFMOwotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kOwotCi0JCWlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7Y21kKSkgewotCQkJY29uc3QgY2hhciAqZHVwbGV4OwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7CiYjNDM7CWNvbnN0IGNoYXIgKmR1cGxleDsKJiM0MzsJaW50IHJldDsKIAotCQkJc3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHsKLQkJCWNhc2UgRFVQTEVYX0hBTEY6Ci0JCQkJZHVwbGV4ID0gJiMzNDtoYWxmJiMzNDs7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERVUExFWF9GVUxMOgotCQkJCWR1cGxleCA9ICYjMzQ7ZnVsbCYjMzQ7OwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlkdXBsZXggPSAmIzM0O3Vua25vd24mIzM0OzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXJldCA9IHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVzXG4mIzM0OywgZHVwbGV4KTsKJiM0MzsJcmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgJmFtcDtjbWQpOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJc3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHsKJiM0MzsJCWNhc2UgRFVQTEVYX0hBTEY6CiYjNDM7CQkJZHVwbGV4ID0gJiMzNDtoYWxmJiMzNDs7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIERVUExFWF9GVUxMOgomIzQzOwkJCWR1cGxleCA9ICYjMzQ7ZnVsbCYjMzQ7OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlkdXBsZXggPSAmIzM0O3Vua25vd24mIzM0OzsKJiM0MzsJCQlicmVhazsKIAkJfQomIzQzOwkJcmV0ID0gc3lzZnNfZW1pdChidWYsICYjMzQ7JXNcbiYjMzQ7LCBkdXBsZXgpOwogCX0KLQlydG5sX3VubG9jaygpOwomIzQzOwogCXJldHVybiByZXQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3lzdGVtIEZpbGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGUgZGlmZiBpcyBwb2ludGluZyBtZSB0byBjaGFuZ2VzIGluIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AuIFRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSBkaWZmIGl0c2VsZiDigJMgbG9va2luZyBmb3IgdGhlIG1lYXQgb2YgdGhlIGFsdGVyYXRpb25zLCBvZiBjb3Vyc2UsIG5vdGluZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBsaWtlbHkgaW50ZW50aW9ucy4gVGhlbiwgSSYjMzk7bGwgbGV2ZXJhZ2UgbXkga25vd2xlZGdlIG9mIHRoZSBjb2RlYmFzZSBhbmQgbmV0IHN1YnN5c3RlbSB0byBmaWd1cmUgb3V0IHRoZSBpbXBhY3RzLiBBIGBncmVwYCBvZiB0aGUgZmlsZSwgb3IgbWF5YmUganVzdCBhIHF1aWNrIHJlYWQsIHNob3VsZCBwaW5wb2ludCB0aGUga2V5IGxpbmVzIG9mIGNvZGUgYW5kIHRoZSBzcGVjaWZpYyBhcmVhcyB0b3VjaGVkLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBhbGwgbXkgdG9vbHMgYW5kIGV4cGVyaWVuY2UgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIHRoaXM7IG9ubHkgdGhlbiBjYW4gSSBhc3Nlc3MgdGhlIHF1YWxpdHkgb2YgdGhlc2UgYWx0ZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldC1zeXNmcy5jPTY5PXN0YXRpYyBpbnQgc3lzZnNfcnRubF9sb2NrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyNS0gKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEyNjpzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMjctXHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MzgxPXN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTM4Ni1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjM4NzpcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zODgtXHRpZiAoIXJldClcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0zOTU9c3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTQwMS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjQwMjpcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG5uZXQvY29yZS9uZXQtc3lzZnMuYy00MDMtXHRpZiAoIXJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwOTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzcGVjaWZpZWQgc2VjdGlvbnMgb2YgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCwgZm9jdXNpbmcgb24gdGhlIGNvcmUgaWRlYXMgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIG5ldC1zeXNmcy5jOiBBIFRhcmdldGVkIFNjYW4qKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gYG5ldC1zeXNmcy5jYCwgc3BlY2lmaWNhbGx5IHRob3NlIHNlY3Rpb25zIGFyb3VuZCBsaW5lcyAxMTAtMTgwIGFuZCAzODAtNDIwLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhpcyB0aWVzIGludG8gdGhlIGxhcmdlciBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uIGFuZCBpbnRlcmZhY2UuIEZyb20gdGhlIGxpbmUgbnVtYmVycyBhbG9uZSwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBibG9ja3MgZGVhbCB3aXRoIHRoZSBjcml0aWNhbCBkZXRhaWxzIG9mIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgbmV0d29yayBkZXZpY2UgaW5mb3JtYXRpb24gYW5kIGNvbnRyb2wgcGFyYW1ldGVycyB2aWEgc3lzZnMuCgpNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBsaW5lcyAxMTAtMTgwIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4gY3JlYXRpbmcgb3IgaGFuZGxpbmcgdGhlIGF0dHJpYnV0ZXMgYW5kIGZpbGVzIHdpdGhpbiB0aGUgYC9zeXMvY2xhc3MvbmV0L2AgZGlyZWN0b3J5IGZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWNoYW5pc21zIGJ5IHdoaWNoIGF0dHJpYnV0ZXMsIGxpa2UgYG9wZXJzdGF0ZWAsIGBjYXJyaWVyYCwgYGFkZHJlc3NgIGFuZCBtYW55IG1vcmUsIGFyZSBkZWZpbmVkLCBjcmVhdGVkLCBhbmQgdXBkYXRlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBtYW5hZ2luZyB0aG9zZS4KClRoZSBzZWNvbmQgc2VjdGlvbiwgYXJvdW5kIGxpbmVzIDM4MC00MjAsIGlzIGxpa2VseSB0byBiZSBjZW50ZXJlZCBhcm91bmQgY3JlYXRpbmcsIGRlc3Ryb3lpbmcsIG9yIGNvbmZpZ3VyaW5nIHNwZWNpZmljIGF0dHJpYnV0ZXMgcmVsYXRpbmcgdG8gbmV0d29yayBkZXZpY2VzIHRoYXQgYXJlIHJlcHJlc2VudGVkIGluIGBzeXNmc2AuIFBlcmhhcHMgdGhpcyBtaWdodCBpbnZvbHZlIHJlZ2lzdGVyaW5nIG9yIHVucmVnaXN0ZXJpbmcgc3BlY2lmaWMgZGF0YSBlbGVtZW50cywgZGVmaW5pbmcgcGVybWlzc2lvbnMgb24gYXR0cmlidXRlcywgb3IgdXBkYXRpbmcgdGhlaXIgdmFsdWVzIGFzIHRoZSBkZXZpY2UgY2hhbmdlcyBzdGF0ZS4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGlzIHNlY3Rpb24gYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHVzZXMgb2YgYGtvYmplY3RfY3JlYXRlX2FuZF9hZGRgLCBgc3lzZnNfY3JlYXRlX2ZpbGVgLCBvciByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IHNpZ25hbCBkeW5hbWljIGF0dHJpYnV0ZSBjcmVhdGlvbi4gSSBhbHNvIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgZXJyb3IgaGFuZGxpbmcgcm91dGluZXMuIEkmIzM5O20gZXhwZWN0aW5nIGEgbG90IG9mIGludGVyYWN0aW9uIHdpdGggdGhlIGNvcmUgYGtvYmplY3RgIGluZnJhc3RydWN0dXJlIGFuZCB0aGUgYHN0cnVjdCBhdHRyaWJ1dGVgIGRlZmluaXRpb25zIHVzZWQgZm9yIHN5c2ZzLiBJJiMzOTttIGhvcGluZyB0byBiZSBhYmxlIHRvIG1hcCB0aGVzZSBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgdG8gc3BlY2lmaWMgZmVhdHVyZXMgb3IgY29udHJvbCBwb2ludHMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCBzaG91bGQgYmUgYSBnb29kIGRlZXAtZGl2ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldC1zeXNmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTU6XHRcdHN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pO1xuIDExNjpcdFx0ZGV2X3B1dChuZGV2KTtcbiAxMTc6XHRcbiAxMTg6XHRcdHJldHVybiByZXQ7XG4gMTE5Olx0fVxuIDEyMDpcdFxuIDEyMTpcdC8qXG4gMTIyOlx0ICogVXNlIHRoZSBwZXItZGV2aWNlIG9wcyBsb2NrIHdpdGhvdXQgUlROTCB3aGVuIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaXQuXG4gMTIzOlx0ICogTGVnYWN5IGRldmljZXMgYW5kIGNhbGxiYWNrcyB3aGljaCBleHBsaWNpdGx5IHJlcXVpcmUgUlROTCByZXRhaW4gdGhlXG4gMTI0Olx0ICogZXhpc3RpbmcgbG9ja2luZy5cbiAxMjU6XHQgKi9cbiAxMjY6XHRzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gMTI3Olx0XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gMTI4Olx0XHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiAxMjk6XHR7XG4gMTMwOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuIDEzMTpcdFx0aW50IHJldCA9IC1FSU5WQUw7XG4gMTMyOlx0XHRib29sIG5lZWRfcnRubDtcbiAxMzM6XHRcbiAxMzQ6XHRcdC8qXG4gMTM1Olx0XHQgKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpOyB0aGlzIGhlbHBzXG4gMTM2Olx0XHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4gMTM3Olx0XHQgKi9cbiAxMzg6XHRcdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbiAxMzk6XHRcdFx0cmV0dXJuIHJldDtcbiAxNDA6XHRcbiAxNDE6XHRcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8XG4gMTQyOlx0XHRcdCAgICAobmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2XG4gMTQzOlx0XHRcdCAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7XG4gMTQ0Olx0XHRpZiAobmVlZF9ydG5sKSB7XG4gMTQ1Olx0XHRcdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuIDE0NjpcdFx0XHRpZiAocmV0KVxuIDE0NzpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTQ4Olx0XHR9XG4gMTQ5Olx0XHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcbiAxNTA6XHRcbiAxNTE6XHRcdHJldCA9IC1FSU5WQUw7XG4gMTUyOlx0XHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbiAxNTM6XHRcdFx0cmV0ID0gLUVOT0RFVjtcbiAxNTQ6XHRcdH0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4gMTU1Olx0XHRcdC8qXG4gMTU2Olx0XHRcdCAqIEtlZXAgdGhlIHN5c2ZzIEFCSTogcmVwb3J0IGFueSBjYWxsYmFjayBlcnJvciBhcyAtRUlOVkFMXG4gMTU3Olx0XHRcdCAqIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgdGhlIGRyaXZlciYjMzk7cyBlcnJvciBjb2RlLlxuIDE1ODpcdFx0XHQgKi9cbiAxNTk6XHRcdFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxuIDE2MDpcdFx0XHRcdHJldCA9IDA7XG4gMTYxOlx0XHR9XG4gMTYyOlx0XG4gMTYzOlx0XHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuIDE2NDpcdFx0aWYgKG5lZWRfcnRubClcbiAxNjU6XHRcdFx0cnRubF91bmxvY2soKTtcbiAxNjY6XHRcbiAxNjc6XHRcdHJldHVybiByZXQ7XG4gMTY4Olx0fVxuIDE2OTpcdFxuIDE3MDpcdC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCYjMzk7cyAqL1xuIDE3MTpcdHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldixcbiAxNzI6XHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLFxuIDE3MzpcdFx0XHRcdCAgIHNzaXplX3QgKCpmb3JtYXQpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICosIGNoYXIgKikpXG4gMTc0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS2VybmVsIE1vZHVsZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBlbmFibGluZyBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLiBUbyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMuIFRoYXQgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0g4oCTIHRoZSBgTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMgdGhhdCBjb250cm9sIHdoYXQgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgTWFrZWZpbGVgIGluIHRoYXQgZGlyZWN0b3J5IGl0c2VsZjsgdGhhdCYjMzk7bGwgcHJvYmFibHkgaGF2ZSB0aGUgaW5jbHVkZSBkaXJlY3RpdmVzLCBvciBhdCBsZWFzdCBwb2ludCBtZSB0b3dhcmQgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBvcHRpb25zLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiwgc2VlIHdoYXQmIzM5O3MgdWx0aW1hdGVseSBwdWxsaW5nIHRoYXQgbW9kdWxlIGludG8gdGhlIGJ1aWxkLiBTaG91bGQgYmUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCEgS25vd2luZyB0aGUgZGVwZW5kZW5jeSB0cmVlIGxpa2UgdGhpcyBpcyBrZXkgZm9yIHVuZGVyc3RhbmRpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBwb3RlbnRpYWxseSB0cm91Ymxlc2hvb3RpbmcgYnVpbGQgaXNzdWVzIG9yIGNvbmZsaWN0cyBkb3duIHRoZSByb2FkLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0LXN5c2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTE4PW9iai0kKENPTkZJR19ORVRERVZfQUREUl9MSVNUX1RFU1QpICYjNDM7PSBkZXZfYWRkcl9saXN0c190ZXN0Lm9cbm5ldC9jb3JlL01ha2VmaWxlLTE5LVxubmV0L2NvcmUvTWFrZWZpbGU6MjA6b2JqLXkgJiM0Mzs9IG5ldC1zeXNmcy5vXG5uZXQvY29yZS9NYWtlZmlsZS0yMS1vYmoteSAmIzQzOz0gaG90ZGF0YS5vXG4tLVxubmV0L2NvcmUvZGV2LmMtMTY4LSNpbmNsdWRlIFwmIzM0O2Rldm1lbS5oXCYjMzQ7XG5uZXQvY29yZS9kZXYuYzoxNjk6I2luY2x1ZGUgXCYjMzQ7bmV0LXN5c2ZzLmhcJiMzNDtcbm5ldC9jb3JlL2Rldi5jLTE3MC1cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yLS8qXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozOiAqIG5ldC1zeXNmcy5jIC0gbmV0d29yayBkZXZpY2UgY2xhc3MgYW5kIGF0dHJpYnV0ZXNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTQtICpcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zMC0jaW5jbHVkZSBcJiMzNDtkZXYuaFwmIzM0O1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MzE6I2luY2x1ZGUgXCYjMzQ7bmV0LXN5c2ZzLmhcJiMzNDtcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTMyLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTk3LSNpbmNsdWRlIFwmIzM0O2Rldm1lbS5oXCYjMzQ7XG5uZXQvY29yZS9za2J1ZmYuYzo5ODojaW5jbHVkZSBcJiMzNDtuZXQtc3lzZnMuaFwmIzM0O1xubmV0L2NvcmUvc2tidWZmLmMtOTktI2luY2x1ZGUgXCYjMzQ7bmV0bWVtX3ByaXYuaFwmIzM0O1xuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTMxLSNpbmNsdWRlIFwmIzM0O2Rldi5oXCYjMzQ7XG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozMjojaW5jbHVkZSBcJiMzNDtuZXQtc3lzZnMuaFwmIzM0O1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBuZXQtc3lzZnMuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgZnVuY3Rpb25zIHdpdGhpbiBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgIGFyZSBzdWJqZWN0IHRvIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSB0b3Agb2YgdGhlIGZpbGUuIEV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCBgI2lmZGVmYCBibG9ja3Mgb3Igb3RoZXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBnYXRlIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3Igb2YgdGhvc2UgZnVuY3Rpb25zLiBJ4oCZbGwgc3RhcnQgdGhlcmUgYW5kIHNjYW4gZm9yIGFueSBpbnN0YW5jZXMgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB3cmFwcGVkIHdpdGhpbiBjb25kaXRpb25hbCBibG9ja3MuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBhbnN3ZXIgYWJvdXQgd2hldGhlciB0aGVpciBhdmFpbGFiaWxpdHkgaXMgZGVwZW5kZW50IG9uIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBidWlsZCBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldC1zeXNmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBuZXQtc3lzZnMuYyAtIG5ldHdvcmsgZGV2aWNlIGNsYXNzIGFuZCBhdHRyaWJ1dGVzXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMDMgU3RlcGhlbiBIZW1taW5nZXIgXHUwMDNjc2hlbW1pbmdlckBvc2RsLm9yZ1x1MDAzZVxuICAgNjpcdCAqL1xuICAgNzpcdFxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uc3Byb3h5LmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gIDIwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbiAgMjI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiAgMjM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gIDI0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2VcbiAgMjU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHUuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gIDI3Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9yeF9xdWV1ZS5oXHUwMDNlXG4gIDI4Olx0I2luY2x1ZGUgXHUwMDNjbmV0L3Jwcy5oXHUwMDNlXG4gIDI5Olx0XG4gIDMwOlx0I2luY2x1ZGUgXCYjMzQ7ZGV2LmhcJiMzNDtcbiAgMzE6XHQjaW5jbHVkZSBcJiMzNDtuZXQtc3lzZnMuaFwmIzM0O1xuICAzMjpcdFxuICAzMzpcdCNpZmRlZiBDT05GSUdfU1lTRlNcbiAgMzQ6XHRzdGF0aWMgY29uc3QgY2hhciBmbXRfaGV4W10gPSBcJiMzNDslI3hcXG5cJiMzNDs7XG4gIDM1Olx0c3RhdGljIGNvbnN0IGNoYXIgZm10X2RlY1tdID0gXCYjMzQ7JWRcXG5cJiMzNDs7XG4gIDM2Olx0c3RhdGljIGNvbnN0IGNoYXIgZm10X3VpbnRbXSA9IFwmIzM0OyV1XFxuXCYjMzQ7O1xuICAzNzpcdHN0YXRpYyBjb25zdCBjaGFyIGZtdF91bG9uZ1tdID0gXCYjMzQ7JWx1XFxuXCYjMzQ7O1xuICAzODpcdHN0YXRpYyBjb25zdCBjaGFyIGZtdF91NjRbXSA9IFwmIzM0OyVsbHVcXG5cJiMzNDs7XG4gIDM5Olx0XG4gIDQwOlx0LyogVGhlcmUgaXMgYSBwb3NzaWJsZSBBQkJBIGRlYWRsb2NrIGJldHdlZW4gcnRubF9sb2NrIGFuZCBrZXJuZnNfbm9kZS1cdTAwM2VhY3RpdmUsXG4gIDQxOlx0ICogd2hlbiB1bnJlZ2lzdGVyaW5nIGEgbmV0IGRldmljZSBhbmQgYWNjZXNzaW5nIGFzc29jaWF0ZWQgc3lzZnMgZmlsZXMuIFRoZVxuICA0MjpcdCAqIHBvdGVudGlhbCBkZWFkbG9jayBpcyBhcyBmb2xsb3c6XG4gIDQzOlx0ICpcbiAgNDQ6XHQgKiAgICAgICAgIENQVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFUgMVxuICA0NTpcdCAqXG4gIDQ2Olx0ICogICAgcnRubF9sb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZnNfcmVhZFxuICA0NzpcdCAqICAgIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkgICAgICAgICAgICAgICAgICAga2VybmZzX3NlcV9zdGFydFxuICA0ODpcdCAqICAgIGRldmljZV9kZWwgLyBrb2JqZWN0X3B1dCAgICAgICAgICAgICAgICAgICAgICBrZXJuZnNfZ2V0X2FjdGl2ZSAoa24tXHUwMDNlYWN0aXZlJiM0MzsmIzQzOylcbiAgNDk6XHQgKiAgICBrZXJuZnNfZHJhaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2ZzX2tmX3NlcV9zaG93XG4gIDUwOlx0ICogICAgd2FpdF9ldmVudCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydG5sX2xvY2tcbiAgNTE6XHQgKiAgICAgICBrbi1cdTAwM2VhY3RpdmUgPT0gS05fREVBQ1RJVkFURURfQklBUykgICAgICAgLVx1MDAzZSB3YWl0cyBvbiBDUFUgMCB0byByZWxlYXNlXG4gIDUyOlx0ICogICAgLVx1MDAzZSB3YWl0cyBvbiBDUFUgMSB0byBkZWNyZWFzZSBrbi1cdTAwM2VhY3RpdmUgICAgICAgdGhlIHJ0bmwgbG9jay5cbiAgNTM6XHQgKlxuICA1NDpcdCAqIFRoZSBoaXN0b3JpY2FsIGZpeCB3YXMgdG8gdXNlIHJ0bmxfdHJ5bG9jayB3aXRoIHJlc3RhcnRfc3lzY2FsbCB0byBiYWlsIG91dFxuICA1NTpcdCAqIG9mIHN5c2ZzIG9wZXJhdGlvbnMgd2hlbiB0aGUgbG9jayBjb3VsZG4mIzM5O3QgYmUgdGFrZW4uIFRoaXMgZml4ZWQgdGhlIGFib3ZlXG4gIDU2Olx0ICogaXNzdWUgYXMgaXQgYWxsb3dlZCBDUFUgMSB0byBiYWlsIG91dCBvZiB0aGUgQUJCQSBzaXR1YXRpb24uXG4gIDU3Olx0ICpcbiAgNTg6XHQgKiBCdXQgaXQgY2FtZSB3aXRoIHBlcmZvcm1hbmNlcyBpc3N1ZXMsIGFzIHN5c2NhbGxzIGFyZSBiZWluZyByZXN0YXJ0ZWQgaW5cbiAgNTk6XHQgKiBsb29wcyB3aGVuIHRoZXJlIHdhcyBjb250ZW50aW9uIG9uIHRoZSBydG5sIGxvY2ssIHdpdGggaHVnZSBzbG93IGRvd25zIGluXG4gIDYwOlx0ICogc3BlY2lmaWMgc2NlbmFyaW9zIChlLmcuIGxvdHMgb2YgdmlydHVhbCBpbnRlcmZhY2VzIGNyZWF0ZWQgYW5kIHVzZXJzcGFjZVxuICA2MTpcdCAqIGRhZW1vbnMgcXVlcnlpbmcgdGhlaXIgYXR0cmlidXRlcykuXG4gIDYyOlx0ICpcbiAgNjM6XHQgKiBUaGUgaWRlYSBiZWxvdyBpcyB0byBiYWlsIG91dCBvZiB0aGUgYWN0aXZlIGtlcm5mc19ub2RlIHByb3RlY3Rpb25cbiAgNjQ6XHQgKiAoa24tXHUwMDNlYWN0aXZlKSB3aGlsZSB0cnlpbmcgdG8gdGFrZSB0aGUgcnRubCBsb2NrLlxuICA2NTpcdCAqXG4gIDY2Olx0ICogVGhpcyByZXBsYWNlcyBydG5sX2xvY2soKSBhbmQgc3RpbGwgaGFzIHRvIGJlIHVzZWQgd2l0aCBydG5sX3VubG9jaygpLiBUaGVcbiAgNjc6XHQgKiBuZXQgZGV2aWNlIGlzIGd1YXJhbnRlZWQgdG8gYmUgYWxpdmUgaWYgdGhpcyByZXR1cm5zIHN1Y2Nlc3NmdWxseS5cbiAgNjg6XHQgKi9cbiAgNjk6XHRzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbiAgNzA6XHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiAgNzE6XHR7XG4gIDcyOlx0XHRzdHJ1Y3Qga2VybmZzX25vZGUgKmtuO1xuICA3MzpcdFx0aW50IHJldCA9IDA7XG4gIDc0Olx0XG4gIDc1Olx0XHQvKiBGaXJzdCwgd2UgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgbmV0IGRldmljZSBhcyB0aGUgdW5yZWdpc3RyYXRpb25cbiAgNzY6XHRcdCAqIHBhdGggbWlnaHQgcnVuIGluIHBhcmFsbGVsLiBUaGlzIHdpbGwgZW5zdXJlIHRoZSBuZXQgZGV2aWNlIGFuZCB0aGVcbiAgNzc6XHRcdCAqIGFzc29jaWF0ZWQgc3lzZnMgb2JqZWN0cyB3b24mIzM5O3QgYmUgZnJlZWQgd2hpbGUgd2UgdHJ5IHRvIHRha2UgdGhlIHJ0bmxcbiAgNzg6XHRcdCAqIGxvY2suXG4gIDc5Olx0XHQgKi9cbiAgODA6XHRcdGRldl9ob2xkKG5kZXYpO1xuICA4MTpcdFx0Lyogc3lzZnNfYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24gd2FzIGludHJvZHVjZWQgdG8gYWxsb3cgc2VsZi1yZW1vdmFsIG9mXG4gIDgyOlx0XHQgKiBkZXZpY2VzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHN5c2ZzIGZpbGVzIGJ5IGJhaWxpbmcgb3V0IG9mIHRoZVxuICA4MzpcdFx0ICogc3lzZnMva2VybmZzIHByb3RlY3Rpb24uIFdlIGRvIHRoaXMgaGVyZSB0byBhbGxvdyB0aGUgdW5yZWdpc3RyYXRpb25cbiAgODQ6XHRcdCAqIHBhdGggdG8gY29tcGxldGUgaW4gcGFyYWxsZWwuIFRoZSBmb2xsb3dpbmcgdGFrZXMgYSByZWZlcmVuY2Ugb24gdGhlXG4gIDg1Olx0XHQgKiBrb2JqZWN0IGFuZCB0aGUga2VybmZzX25vZGUgYmVpbmcgYWNjZXNzZWQuXG4gIDg2Olx0XHQgKlxuICA4NzpcdFx0ICogVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGhvbGQgYSByZWZlcmVuY2Ugb250byB0aGUgbmV0IGRldmljZSBhbmQgdGhlXG4gIDg4Olx0XHQgKiB1bnJlZ2lzdHJhdGlvbiBwYXRoIHdpbGwgd2FpdCBmb3IgdXMgZXZlbnR1YWxseSBpbiBuZXRkZXZfcnVuX3RvZG9cbiAgODk6XHRcdCAqIChvdXRzaWRlIGFuIHJ0bmwgbG9jayBzZWN0aW9uKS5cbiAgOTA6XHRcdCAqL1xuICA5MTpcdFx0a24gPSBzeXNmc19icmVha19hY3RpdmVfcHJvdGVjdGlvbihrb2JqLCBhdHRyKTtcbiAgOTI6XHRcdC8qIFdlIGNhbiBub3cgdHJ5IHRvIHRha2UgdGhlIHJ0bmwgbG9jay4gVGhpcyBjYW4mIzM5O3QgZGVhZGxvY2sgdXMgYXMgdGhlXG4gIDkzOlx0XHQgKiB1bnJlZ2lzdHJhdGlvbiBwYXRoIGlzIGFibGUgdG8gZHJhaW4gc3lzZnMgZmlsZXMgKGtlcm5mc19ub2RlKSB0aGFua3NcbiAgOTQ6XHRcdCAqIHRvIHRoZSBhYm92ZSBkYW5jZS5cbiAgOTU6XHRcdCAqL1xuICA5NjpcdFx0aWYgKHJ0bmxfbG9ja19pbnRlcnJ1cHRpYmxlKCkpIHtcbiAgOTc6XHRcdFx0cmV0ID0gLUVSRVNUQVJUU1lTO1xuICA5ODpcdFx0XHRnb3RvIHVuYnJlYWs7XG4gIDk5Olx0XHR9XG4gMTAwOlx0XHQvKiBDaGVjayBkaXNtYW50bGUgb24gdGhlIGRldmljZSBoYXNuJiMzOTt0IHN0YXJ0ZWQsIG90aGVyd2lzZSBkZW55IHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDYxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2U/IEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gdHJhY2UgaXRzIGRlY2xhcmF0aW9uIHRvIGZpZ3VyZSBvdXQgaXRzIHByb3RvdHlwZSBhbmQsIGNydWNpYWxseSwgdW5kZXJzdGFuZCB3aGljaCBkYXRhIHN0cnVjdHVyZXMgaXQgb3BlcmF0ZXMgb24uIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgYXJndW1lbnRzIGl0IHRha2VzIGFuZCB3aGF0IGl0IHJldHVybnMsIGFuZCBsaWtlbHkgZGl2ZSBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLiBLbm93aW5nIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbmV0d29yayBzdGFjayBpcyBrZXkuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfaWYuYz0zNj1zdGF0aWMgaW50IHBvcnRfY29zdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy0zOS1cbm5ldC9icmlkZ2UvYnJfaWYuYzo0MDpcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2ZWNtZCkpIHtcbm5ldC9icmlkZ2UvYnJfaWYuYy00MS1cdFx0c3dpdGNoIChlY21kLmJhc2Uuc3BlZWQpIHtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMjY9c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNC1cdC8qXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzU6XHQgKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpOyB0aGlzIGhlbHBzXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzYtXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTU4LVx0XHQgKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE1OTpcdFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTYwLVx0XHRcdHJldCA9IDA7XG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz00Mjk9c3RydWN0IGV0aHRvb2xfbGlua191c2V0dGluZ3Mge1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtNDM4LS8qIEludGVybmFsIGtlcm5lbCBoZWxwZXIgdG8gcXVlcnkgYSBkZXZpY2UgZXRodG9vbF9saW5rX3NldHRpbmdzLiAqL1xubmV0L2V0aHRvb2wvaW9jdGwuYzo0Mzk6aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NDAtXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy00NTItfVxubmV0L2V0aHRvb2wvaW9jdGwuYzo0NTM6RVhQT1JUX1NZTUJPTChuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MpO1xubmV0L2V0aHRvb2wvaW9jdGwuYy00NTQtXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz00NTY9aW50IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2My1cdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2V0aHRvb2wvaW9jdGwuYzo0NjQ6XHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2NS1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tLVxubmV0L2V0aHRvb2wvbGlua2luZm8uYz0yND1zdGF0aWMgaW50IGxpbmtpbmZvX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuLS1cbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMzYtXHRcdHJldHVybiByZXQ7XG5uZXQvZXRodG9vbC9saW5raW5mby5jOjM3Olx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2Vrc2V0dGluZ3MpO1xubmV0L2V0aHRvb2wvbGlua2luZm8uYy0zOC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2V0aHRvb2wvbGlua2luZm8uYz05OD1ldGhubF9zZXRfbGlua2luZm8oc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTEwNi1cbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM6MTA3Olx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2a3NldHRpbmdzKTtcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMTA4LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jPTI4PXN0YXRpYyBpbnQgbGlua21vZGVzX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuLS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTQxLVxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM6NDI6XHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcdTAwMjZkYXRhLVx1MDAzZWtzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy00My1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYz0zMTk9ZXRobmxfc2V0X2xpbmttb2RlcyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTMyNi1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jOjMyNzpcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmtzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy0zMjgtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L3NjaGVkL3NjaF9jYnMuYz0zMjM9c3RhdGljIHZvaWQgY2JzX3NldF9wb3J0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNic19zY2hlZF9kYXRhICpxKVxuLS1cbm5ldC9zY2hlZC9zY2hfY2JzLmMtMzI5LVxubmV0L3NjaGVkL3NjaF9jYnMuYzozMzA6XHRlcnIgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcdTAwMjZlY21kKTtcbm5ldC9zY2hlZC9zY2hfY2JzLmMtMzMxLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEyOTQ9c3RhdGljIHZvaWQgdGFwcmlvX3NldF9waWNvc19wZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMwMi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTMwMzpcdGVyciA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmVjbWQpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzA0LVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBEZXZpY2UgU3lzZnMgQXR0cmlidXRlcyBhbmQgTG9ja2luZyBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aGUgYHNwZWVkYCBhbmQgYGR1cGxleGAgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGAvc3lzL2NsYXNzL25ldC8mbHQ7aWZuYW1lJmd0Oy9gIGhpZXJhcmNoeSBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYG5ldC9jb3JlL25ldC1zeXNmcy5jYC4gSXQgc2VlbXMgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBQcmV2aW91c2x5LCByZXRyaWV2aW5nIHRoZSBsaW5rIHNldHRpbmdzIGZvciB0aGVzZSBhdHRyaWJ1dGVzIGFsd2F5cyBpbnZvbHZlZCBhY3F1aXJpbmcgdGhlIGBydG5sX2xvY2tgIGFuZCB0aGVuIGNhbGxpbmcgYF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3NgLiBOb3csIHRoZSBjb2RlIHVzZXMgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AgaW5zdGVhZC4KClRoaXMgbmV3IGZ1bmN0aW9uIGludHJvZHVjZXMgYSBtb3JlIG51YW5jZWQgbG9ja2luZyBzdHJhdGVneS4gSW5zdGVhZCBvZiBhbHdheXMgZ3JhYmJpbmcgdGhlIGBydG5sX2xvY2tgLCBpdCBub3cgdXNlcyB0aGUgcGVyLWRldmljZSBvcGVyYXRpb25zIGxvY2ssIGBuZXRkZXZfbG9ja19vcHMobmV0ZGV2KWAsIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnRzIGl0LiBUaGUgYHJ0bmxfbG9ja2AgaXMgb25seSByZXRhaW5lZCBpZiB0aGUgZGV2aWNlICpuZWVkcyogaXQsIGRldGVybWluZWQgYnkgYG5ldGRldl9uZWVkX29wc19sb2NrYCBhbmQgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1NgLiBBZGRpdGlvbmFsbHksIGEgY2hlY2sgZm9yIGBkZXZfaXNhbGl2ZShuZXRkZXYpYCBpcyBub3cgcHJlc2VudCwgYW5kIGBuZXRpZl9ydW5uaW5nKG5ldGRldilgIGlzIGNoZWNrZWQgYmVmb3JlIHRoZSBjYWxsIHRvIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpYC4KClRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/IEFic29sdXRlbHkuIEFueSB1c2Vyc3BhY2UgcHJvY2VzcyBjYW4gcmVhZCB0aGVzZSBzeXNmcyBhdHRyaWJ1dGVzLCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4gVGhpbmsgc3RhbmRhcmQgc3lzZnMgcmVhZHMsIG9yIHRoZSB3YXkgc3l6a2FsbGVyIG9wZXJhdGVzLCBvciBldmVuIGNvbmN1cnJlbnQgbWFuaXB1bGF0aW9uIG9mIGludGVyZmFjZXMgd2l0aCBzeXNmcyByZWFkcy4gQW5kIHRoZSBuZXR3b3JrIGludGVyZmFjZXMgdGhlbXNlbHZlcyAoZHVtbXksIHZldGgsIGxvb3BiYWNrLCBldGMuKSBhcmUgcmVhZGlseSBhdmFpbGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLgoKU28sIHRoaXMgY2hhbmdlIGhhcyBzaWduaWZpY2FudCBjb25jdXJyZW5jeSBpbXBsaWNhdGlvbnMuIEl0IGNoYW5nZXMgdGhlIGxvY2tpbmcgcnVsZXMgZm9yIHN5c2ZzIHF1ZXJpZXMsIGZhdm9yaW5nIGBuZXRkZXZfbG9ja19vcHNgIHdoZXJlIHBvc3NpYmxlLCBidXQgcHJlc2VydmluZyBSVE5MIGxvY2tpbmcgd2hlcmUgbmVjZXNzYXJ5LCBhbmQgYWRkaW5nIHRoZSBgZGV2X2lzYWxpdmVgIGNoZWNrLiBUaGlzIGhhcyBtZSB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gbmV0ZGV2aWNlIGxpZmVjeWNsZSwgdGhlIHBlci1kZXZpY2UgbG9jaywgc3lzZnMgYWNjZXNzLCBhbmQgdGhlIFJUTkwgbG9jay4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlc2UgbG9ja2luZyBpbnRlcmFjdGlvbnMuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCBhcmUgaW5kZWVkIHRoZSBzdGF0aWMgZnVuY3Rpb25zIEkgdGhpbmsgdGhleSBhcmUgYW5kIGhvdyB0aGV5IGFyZSByZWZlcmVuY2VkIGluIHRoZSBgZGV2aWNlX2F0dHJpYnV0ZWAgc3RydWN0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byBwb3JlIG92ZXIgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXQtc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0XG4gMzgxOlx0c3RhdGljIHNzaXplX3Qgc3BlZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gMzgyOlx0XHRcdFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIDM4MzpcdHtcbiAzODQ6XHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbiAzODU6XHRcdGludCByZXQ7XG4gMzg2Olx0XG4gMzg3Olx0XHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xuIDM4ODpcdFx0aWYgKCFyZXQpXG4gMzg5Olx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4gMzkwOlx0XG4gMzkxOlx0XHRyZXR1cm4gcmV0O1xuIDM5MjpcdH1cbiAzOTM6XHRzdGF0aWMgREVWSUNFX0FUVFJfUk8oc3BlZWQpO1xuIDM5NDpcdFxuIDM5NTpcdHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiAzOTY6XHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIDM5NzpcdHtcbiAzOTg6XHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbiAzOTk6XHRcdGNvbnN0IGNoYXIgKmR1cGxleDtcbiA0MDA6XHRcdGludCByZXQ7XG4gNDAxOlx0XG4gNDAyOlx0XHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xuIDQwMzpcdFx0aWYgKCFyZXQpIHtcbiA0MDQ6XHRcdFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcbiA0MDU6XHRcdFx0Y2FzZSBEVVBMRVhfSEFMRjpcbiA0MDY6XHRcdFx0XHRkdXBsZXggPSBcJiMzNDtoYWxmXCYjMzQ7O1xuIDQwNzpcdFx0XHRcdGJyZWFrO1xuIDQwODpcdFx0XHRjYXNlIERVUExFWF9GVUxMOlxuIDQwOTpcdFx0XHRcdGR1cGxleCA9IFwmIzM0O2Z1bGxcJiMzNDs7XG4gNDEwOlx0XHRcdFx0YnJlYWs7XG4gNDExOlx0XHRcdGRlZmF1bHQ6XG4gNDEyOlx0XHRcdFx0ZHVwbGV4ID0gXCYjMzQ7dW5rbm93blwmIzM0OztcbiA0MTM6XHRcdFx0XHRicmVhaztcbiA0MTQ6XHRcdFx0fVxuIDQxNTpcdFx0XHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXNcXG5cJiMzNDssIGR1cGxleCk7XG4gNDE2Olx0XHR9XG4gNDE3Olx0XG4gNDE4Olx0XHRyZXR1cm4gcmV0O1xuIDQxOTpcdH1cbiA0MjA6XHRzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTtcbiA0MjE6XHRcbiA0MjI6XHRzdGF0aWMgc3NpemVfdCB0ZXN0aW5nX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIDQyMzpcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIDQyNDpcdHtcbiA0MjU6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XG4gNDI2Olx0XG4gNDI3Olx0XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuIDQyODpcdFx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsICEhbmV0aWZfdGVzdGluZyhuZXRkZXYpKTtcbiA0Mjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MjcKCQkJCQkJCW91dHB1dDogNTUKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29yZSBTeW1ib2wgVmlzaWJpbGl0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgbGFuZHNjYXBlIG9mIHN5bWJvbHMgd2l0aGluIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgc3ltYm9scyBkZWZpbmVkIHdpdGhpbiB0aGF0IGZpbGUgaXRzZWxmLiBNb3JlIGJyb2FkbHksIHRob3VnaCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBzeW1ib2xzIGFyZSAqZXhwb3J0ZWQqIG9yICpkZWZpbmVkKiB3aXRoaW4gdGhhdCBzcGVjaWZpYyBmaWxlIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIGl0LiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gbWFwIG91dCB0aGUgY29ubmVjdGlvbnMgYW5kIHNjb3BlIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGlzIGlzIGxpa2VseSB0aGUgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZSBvciBidWcgd2l0aGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfc2hvd3xuZXRpZl9nZXRfbGlua19rc2V0dGluZ3N8bmV0ZGV2X2xvY2tfb3BzfHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xMTAxPV9fbmV0ZGV2X3B1dF9sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0KVxubmV0L2NvcmUvZGV2LmMtMTEwMi17XG5uZXQvY29yZS9kZXYuYzoxMTAzOlx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTEwNC1cdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlIFx1MDAzZSBORVRSRUdfUkVHSVNURVJFRCB8fFxuLS1cbm5ldC9jb3JlL2Rldi5jPTE4NDg9dm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE4NTktXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XG5uZXQvY29yZS9kZXYuYzoxODYwOlx0XHRuZXRkZXZfbG9ja19vcHMobG93ZXJfZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTE4NjEtXHRcdG5ldGlmX2Rpc2FibGVfbHJvKGxvd2VyX2Rldik7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTkzND1zdGF0aWMgdm9pZCBjYWxsX25ldGRldmljZV91bnJlZ2lzdGVyX25vdGlmaWVycyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTE5MzctXHRpZiAoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApIHtcbm5ldC9jb3JlL2Rldi5jOjE5Mzg6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTkzOS1cdFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXIobmIsIE5FVERFVl9HT0lOR19ET1dOLFxuLS1cbm5ldC9jb3JlL2Rldi5jPTE5NDc9c3RhdGljIGludCBjYWxsX25ldGRldmljZV9yZWdpc3Rlcl9uZXRfbm90aWZpZXJzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTk1My1cdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2NvcmUvZGV2LmM6MTk1NDpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXYuYy0xOTU1LVx0XHRlcnIgPSBjYWxsX25ldGRldmljZV9yZWdpc3Rlcl9ub3RpZmllcnMobmIsIGRldik7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA2MTE9c3RhdGljIHZvaWQgYnBmX3hkcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNjIwLVx0aWYgKHhkcF9saW5rLVx1MDAzZWRldikge1xubmV0L2NvcmUvZGV2LmM6MTA2MjE6XHRcdG5ldGRldl9sb2NrX29wcyh4ZHBfbGluay1cdTAwM2VkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTA2MjItXHRcdFdBUk5fT04oZGV2X3hkcF9kZXRhY2hfbGluayh4ZHBfbGluay1cdTAwM2VkZXYsIE5VTEwsIHhkcF9saW5rKSk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA2NzI9c3RhdGljIGludCBicGZfeGRwX2xpbmtfdXBkYXRlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDcwNC1cbm5ldC9jb3JlL2Rldi5jOjEwNzA1Olx0bmV0ZGV2X2xvY2tfb3BzKHhkcF9saW5rLVx1MDAzZWRldik7XG5uZXQvY29yZS9kZXYuYy0xMDcwNi1cdG1vZGUgPSBkZXZfeGRwX21vZGUoeGRwX2xpbmstXHUwMDNlZGV2LCB4ZHBfbGluay1cdTAwM2VmbGFncyk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA3MzE9aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDc2My1cbm5ldC9jb3JlL2Rldi5jOjEwNzY0Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXYuYy0xMDc2NS1cdGVyciA9IGRldl94ZHBfYXR0YWNoX2xpbmsoZGV2LCBcdTAwMjZleHRhY2ssIGxpbmspO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEwOTI1PXN0YXRpYyB2b2lkIG5ldGRldl9zeW5jX2xvd2VyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcixcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDkzNi1cdFx0XHRcdCAgIFx1MDAyNmZlYXR1cmUsIGxvd2VyLVx1MDAzZW5hbWUpO1xubmV0L2NvcmUvZGV2LmM6MTA5Mzc6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyKTtcbm5ldC9jb3JlL2Rldi5jLTEwOTM4LVx0XHRcdGxvd2VyLVx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcdTAwMjY9IH5mZWF0dXJlO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTUxMS1cbm5ldC9jb3JlL2Rldi5jOjExNTEyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXYuYy0xMTUxMy1cdF9fbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTExNTM5LVx0LyogTm90aWZ5IHByb3RvY29scywgdGhhdCBhIG5ldyBkZXZpY2UgYXBwZWFyZWQuICovXG5uZXQvY29yZS9kZXYuYzoxMTU0MDpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTE1NDEtXHRyZXQgPSBjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1JFR0lTVEVSLCBkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEyNDQxPXZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9ub3RpZnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjUwMy1cdFx0LyogU2h1dGRvd24gcXVldWVpbmcgZGlzY2lwbGluZS4gKi9cbm5ldC9jb3JlL2Rldi5jOjEyNTA0Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyNTA1LVx0XHRkZXZfc2h1dGRvd24oZGV2KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMjcwMj1pbnQgX19kZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyNzg2LVxubmV0L2NvcmUvZGV2LmM6MTI3ODc6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyNzg4LVx0LyogSWYgZGV2aWNlIGlzIHJ1bm5pbmcgY2xvc2UgaXQgZmlyc3QuICovXG4tLVxubmV0L2NvcmUvZGV2LmMtMTI4MDAtXHQvKiBTaHV0ZG93biBxdWV1ZWluZyBkaXNjaXBsaW5lLiAqL1xubmV0L2NvcmUvZGV2LmM6MTI4MDE6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyODAyLVx0ZGV2X3NodXRkb3duKGRldik7XG4tLVxubmV0L2NvcmUvZGV2Lmg9NjA9REVGSU5FX0ZSRUUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0LCBzdHJ1Y3QgbmV0X2RldmljZSAqLFxuLS1cbm5ldC9jb3JlL2Rldi5oLTYyLVxubmV0L2NvcmUvZGV2Lmg6NjM6I2RlZmluZSBmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIHZhcl9uYW1lLCBpZmluZGV4KVx0XFxcbm5ldC9jb3JlL2Rldi5oLTY0LVx0Zm9yIChzdHJ1Y3QgbmV0X2RldmljZSAqdmFyX25hbWUgX19mcmVlKG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdCkgPSBOVUxMOyBcXFxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0xOD1pbnQgZGV2X2NoYW5nZV9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5ld25hbWUpXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTIxLVxubmV0L2NvcmUvZGV2X2FwaS5jOjIyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMjMtXHRyZXQgPSBuZXRpZl9jaGFuZ2VfbmFtZShkZXYsIG5ld25hbWUpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0zOT1pbnQgZGV2X3NldF9hbGlhcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICphbGlhcywgc2l6ZV90IGxlbilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtNDItXG5uZXQvY29yZS9kZXZfYXBpLmM6NDM6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy00NC1cdHJldCA9IG5ldGlmX3NldF9hbGlhcyhkZXYsIGFsaWFzLCBsZW4pO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz02Mj1pbnQgZGV2X2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTY2LVxubmV0L2NvcmUvZGV2X2FwaS5jOjY3Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtNjgtXHRyZXQgPSBuZXRpZl9jaGFuZ2VfZmxhZ3MoZGV2LCBmbGFncywgZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9ODE9dm9pZCBkZXZfc2V0X2dyb3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfZ3JvdXApXG5uZXQvY29yZS9kZXZfYXBpLmMtODIte1xubmV0L2NvcmUvZGV2X2FwaS5jOjgzOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtODQtXHRuZXRpZl9zZXRfZ3JvdXAoZGV2LCBuZXdfZ3JvdXApO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz04OD1pbnQgZGV2X3NldF9tYWNfYWRkcmVzc191c2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTk0LVx0ZG93bl93cml0ZShcdTAwMjZkZXZfYWRkcl9zZW0pO1xubmV0L2NvcmUvZGV2X2FwaS5jOjk1Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtOTYtXHRyZXQgPSBuZXRpZl9zZXRfbWFjX2FkZHJlc3MoZGV2LCBzcywgZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MTM1PWludCBkZXZfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMTM4LVxubmV0L2NvcmUvZGV2X2FwaS5jOjEzOTpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTE0MC1cdHJldCA9IG5ldGlmX2NoYW5nZV9jYXJyaWVyKGRldiwgbmV3X2NhcnJpZXIpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0xNTM9aW50IGRldl9jaGFuZ2VfdHhfcXVldWVfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbmV3X2xlbilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMTU2LVxubmV0L2NvcmUvZGV2X2FwaS5jOjE1NzpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTE1OC1cdHJldCA9IG5ldGlmX2NoYW5nZV90eF9xdWV1ZV9sZW4oZGV2LCBuZXdfbGVuKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MTcxPWludCBkZXZfY2hhbmdlX3Byb3RvX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBwcm90b19kb3duKVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0xNzQtXG5uZXQvY29yZS9kZXZfYXBpLmM6MTc1Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMTc2LVx0cmV0ID0gbmV0aWZfY2hhbmdlX3Byb3RvX2Rvd24oZGV2LCBwcm90b19kb3duKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MTk3PWludCBkZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTIwMC1cbm5ldC9jb3JlL2Rldl9hcGkuYzoyMDE6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMDItXHRyZXQgPSBuZXRpZl9vcGVuKGRldiwgZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MjE4PXZvaWQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXZfYXBpLmMtMjE5LXtcbm5ldC9jb3JlL2Rldl9hcGkuYzoyMjA6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMjEtXHRuZXRpZl9jbG9zZShkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yMjY9aW50IGRldl9ldGhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMjM0LVxubmV0L2NvcmUvZGV2X2FwaS5jOjIzNTpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTIzNi1cdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yNDQ9aW50IGRldl9zZXRfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0yNDctXG5uZXQvY29yZS9kZXZfYXBpLmM6MjQ4Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMjQ5LVx0cmV0ID0gbmV0aWZfc2V0X210dShkZXYsIG5ld19tdHUpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yNjQ9dm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNjUte1xubmV0L2NvcmUvZGV2X2FwaS5jOjI2NjpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTI2Ny1cdG5ldGlmX2Rpc2FibGVfbHJvKGRldik7XG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jPTI4Mz1pbnQgZGV2X3NldF9wcm9taXNjdWl0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0yODYtXG5uZXQvY29yZS9kZXZfYXBpLmM6Mjg3Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMjg4LVx0cmV0ID0gbmV0aWZfc2V0X3Byb21pc2N1aXR5KGRldiwgaW5jKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MzEwPWludCBkZXZfc2V0X2FsbG11bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMpXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTMxMy1cbm5ldC9jb3JlL2Rldl9hcGkuYzozMTQ6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0zMTUtXHRyZXQgPSBuZXRpZl9zZXRfYWxsbXVsdGkoZGV2LCBpbmMsIHRydWUpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0zMzM9aW50IGRldl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNzLFxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0zMzctXG5uZXQvY29yZS9kZXZfYXBpLmM6MzM4Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMzM5LVx0cmV0ID0gbmV0aWZfc2V0X21hY19hZGRyZXNzKGRldiwgc3MsIGV4dGFjayk7XG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jPTM0Nj1pbnQgZGV2X3hkcF9wcm9wYWdhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMzQ5LVxubmV0L2NvcmUvZGV2X2FwaS5jOjM1MDpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTM1MS1cdHJldCA9IG5ldGlmX3hkcF9wcm9wYWdhdGUoZGV2LCBicGYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0zNjY9dm9pZCBuZXRkZXZfc3RhdGVfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXZfYXBpLmMtMzY3LXtcbm5ldC9jb3JlL2Rldl9hcGkuYzozNjg6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0zNjktXHRuZXRpZl9zdGF0ZV9jaGFuZ2UoZGV2KTtcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0yODI9c3RhdGljIGludCBkZXZfZ2V0X2h3dHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTI5NS1cdGtlcm5lbF9jZmcuaWZyID0gaWZyO1xubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mjk2Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy0yOTctXHRlcnIgPSBkZXZfZ2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIFx1MDAyNmtlcm5lbF9jZmcpO1xuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTM5MT1zdGF0aWMgaW50IGRldl9zZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDIxLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDIyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy00MjMtXHRlcnIgPSBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIFx1MDAyNmtlcm5lbF9jZmcsIFx1MDAyNmV4dGFjayk7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDQxPWludCBnZW5lcmljX2h3dHN0YW1wX2dldF9sb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ1Mi1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjQ1MzpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDU0LVx0ZXJyID0gZGV2X2dldF9od3RzdGFtcF9waHlsaWIoZGV2LCBrZXJuZWxfY2ZnKTtcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz00NjE9aW50IGdlbmVyaWNfaHd0c3RhbXBfc2V0X2xvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDczLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDc0Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy00NzUtXHRlcnIgPSBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIGtlcm5lbF9jZmcsIGV4dGFjayk7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDgyPXN0YXRpYyBpbnQgZGV2X3Npb2Nib25kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDg5LVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDkwOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ5MS1cdFx0aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NTAxPXN0YXRpYyBpbnQgZGV2X3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLFxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUwOC1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjUwOTpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MTAtXHRcdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTUyMD1zdGF0aWMgaW50IGRldl9zaW9jd2FuZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZl9zZXR0aW5ncyAqaWZzKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUyNi1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjUyNzpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MjgtXHRcdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTU0MT1zdGF0aWMgaW50IGRldl9pZnNpb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKmRhdGEsXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTc2LVx0XHRcdCAgIChzaXplX3QpZGV2LVx1MDAzZWFkZHJfbGVuKSk7XG5uZXQvY29yZS9kZXZfaW9jdGwuYzo1Nzc6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTc4LVx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRUFERFIsIGRldik7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTgyLVx0Y2FzZSBTSU9DU0lGTUFQOlxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NTgzOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU4NC1cdFx0ZXJyID0gbmV0aWZfc2V0aWZtYXAoZGV2LCBpZnIpO1xuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU5My1cdFx0XHRyZXR1cm4gLUVOT0RFVjtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU5NDpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01OTUtXHRcdGVyciA9IGRldl9tY19hZGRfZ2xvYmFsKGRldiwgaWZyLVx1MDAzZWlmcl9od2FkZHIuc2FfZGF0YSk7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNjA1LVx0XHRcdHJldHVybiAtRU5PREVWO1xubmV0L2NvcmUvZGV2X2lvY3RsLmM6NjA2Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwNy1cdFx0ZXJyID0gZGV2X21jX2RlbF9nbG9iYWwoZGV2LCBpZnItXHUwMDNlaWZyX2h3YWRkci5zYV9kYXRhKTtcbi0tXG5uZXQvY29yZS9mYWlsb3Zlci5jPTIxNj1mYWlsb3Zlcl9leGlzdGluZ19zbGF2ZV9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZmFpbG92ZXJfZGV2KVxuLS1cbm5ldC9jb3JlL2ZhaWxvdmVyLmMtMjI1LVx0XHRpZiAoZXRoZXJfYWRkcl9lcXVhbChmYWlsb3Zlcl9kZXYtXHUwMDNlcGVybV9hZGRyLCBkZXYtXHUwMDNlcGVybV9hZGRyKSkge1xubmV0L2NvcmUvZmFpbG92ZXIuYzoyMjY6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9mYWlsb3Zlci5jLTIyNy1cdFx0XHRmYWlsb3Zlcl9zbGF2ZV9yZWdpc3RlcihkZXYpO1xuLS1cbm5ldC9jb3JlL2xpbmtfd2F0Y2guYz0xOTA9c3RhdGljIHZvaWQgX19saW5rd2F0Y2hfcnVuX3F1ZXVlKGludCB1cmdlbnRfb25seSlcbi0tXG5uZXQvY29yZS9saW5rX3dhdGNoLmMtMjM4LVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHdldmVudGxpc3RfbG9jayk7XG5uZXQvY29yZS9saW5rX3dhdGNoLmM6MjM5Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYy0yNDAtXHRcdGxpbmt3YXRjaF9kb19kZXYoZGV2KTtcbi0tXG5uZXQvY29yZS9saW5rX3dhdGNoLmM9MjkxPXZvaWQgbGlua3dhdGNoX3N5bmNfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvbGlua193YXRjaC5jLTI5My1cdGlmIChsaW5rd2F0Y2hfY2xlYW5fZGV2KGRldikpIHtcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYzoyOTQ6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvbGlua193YXRjaC5jLTI5NS1cdFx0bGlua3dhdGNoX2RvX2RldihkZXYpO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTY5PXN0YXRpYyBpbnQgc3lzZnNfcnRubF9sb2NrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyNS0gKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEyNjpzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMjctXHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM0LVx0Lypcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzNTpcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCk7IHRoaXMgaGVscHNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNi1cdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDgtXHR9XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxNDk6XHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE1MC1cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTgtXHRcdCAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTU5Olx0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNjAtXHRcdFx0cmV0ID0gMDtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNzAtLyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJiMzOTtzICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxNzE6c3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTcyLVx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTkyPXN0YXRpYyBzc2l6ZV90IGZpZWxkIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXHRcdFx0XHRcXFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE5NC17XHRcdFx0XHRcdFx0XHRcdFx0XFxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE5NTpcdHJldHVybiBuZXRkZXZfc2hvdyhkZXYsIGF0dHIsIGJ1ZiwgZm9ybWF0XyMjZmllbGQpO1x0XHRcXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTk2LX1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTI4OD1zdGF0aWMgc3NpemVfdCBuYW1lX2Fzc2lnbl90eXBlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTI5NS1cdGlmIChSRUFEX09OQ0UobmRldi1cdTAwM2VuYW1lX2Fzc2lnbl90eXBlKSAhPSBORVRfTkFNRV9VTktOT1dOKVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6Mjk2Olx0XHRyZXQgPSBuZXRkZXZfc2hvdyhkZXYsIGF0dHIsIGJ1ZiwgZm9ybWF0X25hbWVfYXNzaWduX3R5cGUpO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjk3LVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTM4MT1zdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zODYtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozODc6XHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzg4LVx0aWYgKCFyZXQpXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9Mzk1PXN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy00MDEtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo0MDI6XHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtNDAzLVx0aWYgKCFyZXQpIHtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xNDgxPXN0YXRpYyBzc2l6ZV90IHR4X21heHJhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTUwNi1cdGVyciA9IC1FT1BOT1RTVVBQO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTUwNzpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTUwOC1cdGlmIChkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0X3R4X21heHJhdGUpXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjE1OT1zdGF0aWMgdm9pZCByZW1vdmVfcXVldWVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTcwLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjE3MTpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE3Mi1cdGRldi1cdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMgPSAwO1xuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9NjE4PWludCBuZXRkZXZfbmxfcXVldWVfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy02MzgtXHR9IGVsc2Uge1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzo2Mzk6XHRcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgbmV0ZGV2LFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy02NDAtXHRcdFx0XHRcdFx0ICAgICAgIGN0eC1cdTAwM2VpZmluZGV4KSB7XG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz05MDE9aW50IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtOTM4LVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzo5Mzk6XHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIG5ldGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtOTQwLVx0XHRlcnIgPSBuZXRkZXZfbmxfcXN0YXRzX2dldF9kdW1wX29uZShuZXRkZXYsIHNjb3BlLCBza2IsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xNDcyPXN0YXRpYyBpbnQgbmV0ZGV2X2dlbmxfbmV0ZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xNDc4LVx0Y2FzZSBORVRERVZfUkVHSVNURVI6XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjE0Nzk6XHRcdG5ldGRldl9sb2NrX29wc190b19mdWxsKG5ldGRldik7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTE0ODAtXHRcdG5ldGRldl9nZW5sX2Rldl9ub3RpZnkobmV0ZGV2LCBORVRERVZfQ01EX0RFVl9BRERfTlRGKTtcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTEzMD1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE1NC1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTU1Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTU2LVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MzAzNz1zdGF0aWMgaW50IGRvX3NldF9tYXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlmaW5kZXgsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA1NS1cdFx0XHRlcnIgPSBvcHMtXHUwMDNlbmRvX2RlbF9zbGF2ZSh1cHBlcl9kZXYsIGRldik7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzozMDU2Olx0XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA1Ny1cdFx0XHRpZiAoZXJyKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTMwNzEtXHRcdFx0ZXJyID0gb3BzLVx1MDAzZW5kb19hZGRfc2xhdmUodXBwZXJfZGV2LCBkZXYsIGV4dGFjayk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzozMDcyOlx0XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA3My1cdFx0XHRpZiAoZXJyKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTMxNDQ9c3RhdGljIGludCBkb19zZXRsaW5rKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzE3NS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjMxNzY6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMxNzctXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzIxMy1cdFx0ZG93bl93cml0ZShcdTAwMjZkZXZfYWRkcl9zZW0pO1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzIxNDpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMjE1LVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTM3MTA9aW50IHJ0bmxfY29uZmlndXJlX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGlmaW5mb21zZyAqaWZtLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTM3MTUtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzozNzE2Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zNzE3LVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTM5Mjg9c3RhdGljIGludCBydG5sX25ld2xpbmtfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZmluZm9tc2cgKmlmbSxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zOTgwLVx0aWYgKHRiW0lGTEFfTUFTVEVSXSkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6Mzk4MTpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zOTgyLVx0XHRlcnIgPSBkb19zZXRfbWFzdGVyKGRldiwgbmxhX2dldF91MzIodGJbSUZMQV9NQVNURVJdKSwgZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMzYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBTeXN0ZW0gQ29uZmlndXJhdGlvbiBmb3IgTmV0d29yayBhbmQgU3lzZnMgSW50ZWdyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYG5ldC1zeXNmcy5jYC4gSSBrbm93IGl0JiMzOTtzIGNvbXBpbGVkIGFzIHBhcnQgb2YgdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5IHdoZW4gdGhlIG5ldHdvcmsgc3RhY2sgaXMgYWN0aXZlLCBhbmQgSSBiZWxpZXZlIGl0IGxldmVyYWdlcyB0aGUgYCNpZmRlZiBDT05GSUdfU1lTRlNgIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpdGhpbiB0aGUgY29kZS4gU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBib3RoIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19TWVNGU2AgYXJlIHByb3Blcmx5IGRlZmluZWQgYW5kIGVuYWJsZWQuIFRpbWUgdG8gdmVyaWZ5IHRoYXQgdGhvc2Ugc2V0dGluZ3MgYXJlIGNvcnJlY3RseSBkb2N1bWVudGVkIGFuZCBzZXQgdXAgaW4gS2NvbmZpZy4gVGhpcyB3aWxsIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzItXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozMzojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zNC1zdGF0aWMgY29uc3QgY2hhciBmbXRfaGV4W10gPSBcJiMzNDslI3hcXG5cJiMzNDs7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9OTIwPXN0YXRpYyBib29sIHdpcmVsZXNzX2dyb3VwX25lZWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MzItXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5MzM6I2Vsc2UgLyogQ09ORklHX1NZU0ZTICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MzQtI2RlZmluZSBuZXRfY2xhc3NfZ3JvdXBzXHROVUxMXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5MzU6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTM2LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTM3OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkzOC0jZGVmaW5lIHRvX3J4X3F1ZXVlX2F0dHIoX2F0dHIpIFxcXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTI5MD1zdGF0aWMgaW50IHJ4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5kZXgsIGt1aWRfdCBrdWlkLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMDYtfVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTMwNzojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzA4LVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEzMTA9bmV0X3J4X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2xkX251bSwgaW50IG5ld19udW0pXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzExLXtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzMTI6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTMxMy1cdGludCBpO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEzNDY9c3RhdGljIGludCBuZXRfcnhfcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBudW0sXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM0OC17XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzQ5OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNTAtXHRpbnQgZXJyb3IgPSAwO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNjgtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzY5OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNzAtLypcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMDIyPXN0YXRpYyBpbnQgdHhfcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgaW5kZXgsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzNy19XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDM4OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwMzktXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjA0MT1uZXRkZXZfcXVldWVfdXBkYXRlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvbGRfbnVtLCBpbnQgbmV3X251bSlcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwNDIte1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA0MzojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDQ0LVx0aW50IGk7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA3Ny1cdHJldHVybiAwO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA3ODojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDc5LX1cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMDgxPXN0YXRpYyBpbnQgbmV0X3R4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwODMte1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA4NDojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDg1LVx0aW50IGVycm9yID0gMDtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDk2LVx0cmV0dXJuIDA7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDk3OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwOTgtfVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxMDA9c3RhdGljIGludCByZWdpc3Rlcl9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxMDMtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTA0OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxMDUtXHRkZXYtXHUwMDNlcXVldWVzX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKFwmIzM0O3F1ZXVlc1wmIzM0Oyxcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTI3LVx0bmV0X3J4X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhkZXYsIHJ4cSwgMCk7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTI4OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxMjktXHRrc2V0X3VucmVnaXN0ZXIoZGV2LVx1MDAzZXF1ZXVlc19rc2V0KTtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMTM0PXN0YXRpYyBpbnQgcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBrdWlkX3Qga3VpZCwga2dpZF90IGtnaWQpXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEzNy1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxMzg6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEzOS1cdGlmIChuZGV2LVx1MDAzZXF1ZXVlc19rc2V0KSB7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjE1OT1zdGF0aWMgdm9pZCByZW1vdmVfcXVldWVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTYyLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjE2MzojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTY0LVx0cmVhbF9yeCA9IGRldi1cdTAwM2VyZWFsX251bV9yeF9xdWV1ZXM7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE3NC1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTc1OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNzYtXHRrc2V0X3VucmVnaXN0ZXIoZGV2LVx1MDAzZXF1ZXVlc19rc2V0KTtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMzMyPWludCBuZXRkZXZfcmVnaXN0ZXJfa29iamVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzQ0LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjM0NTojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzQ2LVx0LyogQWxsb3cgZm9yIGEgZGV2aWNlIHNwZWNpZmljIGdyb3VwICovXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjM1NC1cdFx0Kmdyb3VwcyYjNDM7JiM0MzsgPSBcdTAwMjZ3aXJlbGVzc19ncm91cDtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIzNTU6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjM1Ni1cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5uZXQvY29yZS9uZXQtc3lzZnMuaDoyOiNpZm5kZWYgX19ORVRfU1lTRlNfSF9fXG5uZXQvY29yZS9uZXQtc3lzZnMuaDozOiNkZWZpbmUgX19ORVRfU1lTRlNfSF9fXG5uZXQvY29yZS9uZXQtc3lzZnMuaC00LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTExOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVwZW5kZW5jeSBDaGVjayBpbiBgbmV0L0tjb25maWdgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcGFydGljdWxhciBjb21wb25lbnQgb3IgZmVhdHVyZS4gTXkgdXN1YWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgYG5ldC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kLCBpbXBvcnRhbnRseSwgdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRoYXQgd2lsbCByZXZlYWwgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgdGhpbmcgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBtb2R1bGVzIG9yIHNldHRpbmdzIHRoaXMgZGVwZW5kcyBvbiB0byBnZXQgYSBjbGVhciBwaWN0dXJlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgcGFyc2luZyB0aGF0IGZpbGUuIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTmV0d29yayBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUXG4gICA3Olx0XHRib29sIFwmIzM0O05ldHdvcmtpbmcgc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0c2VsZWN0IE5MQVRUUlxuICAgOTpcdFx0c2VsZWN0IEdFTkVSSUNfTkVUX1VUSUxTXG4gIDEwOlx0XHRzZWxlY3QgQlBGXG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFVubGVzcyB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUuXG4gIDEzOlx0XHQgIFRoZSByZWFzb24gaXMgdGhhdCBzb21lIHByb2dyYW1zIG5lZWQga2VybmVsIG5ldHdvcmtpbmcgc3VwcG9ydCBldmVuXG4gIDE0Olx0XHQgIHdoZW4gcnVubmluZyBvbiBhIHN0YW5kLWFsb25lIG1hY2hpbmUgdGhhdCBpc24mIzM5O3QgY29ubmVjdGVkIHRvIGFueVxuICAxNTpcdFx0ICBvdGhlciBjb21wdXRlci5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgSWYgeW91IGFyZSB1cGdyYWRpbmcgZnJvbSBhbiBvbGRlciBrZXJuZWwsIHlvdVxuICAxODpcdFx0ICBzaG91bGQgY29uc2lkZXIgdXBkYXRpbmcgeW91ciBuZXR3b3JraW5nIHRvb2xzIHRvbyBiZWNhdXNlIGNoYW5nZXNcbiAgMTk6XHRcdCAgaW4gdGhlIGtlcm5lbCBhbmQgdGhlIHRvb2xzIG9mdGVuIGdvIGhhbmQgaW4gaGFuZC4gVGhlIHRvb2xzIGFyZVxuICAyMDpcdFx0ICBjb250YWluZWQgaW4gdGhlIHBhY2thZ2UgbmV0LXRvb2xzLCB0aGUgbG9jYXRpb24gYW5kIHZlcnNpb24gbnVtYmVyXG4gIDIxOlx0XHQgIG9mIHdoaWNoIGFyZSBnaXZlbiBpbiBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlc1x1MDAzZS5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgRm9yIGEgZ2VuZXJhbCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgaXQgaXMgaGlnaGx5XG4gIDI0Olx0XHQgIHJlY29tbWVuZGVkIHRvIHJlYWQgdGhlIE5FVC1IT1dUTywgYXZhaWxhYmxlIGZyb21cbiAgMjU6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cdTAwM2UuXG4gIDI2Olx0XG4gIDI3Olx0aWYgTkVUXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcbiAgMzA6XHRcdGJvb2xcbiAgMzE6XHRcdGhlbHBcbiAgMzI6XHRcdCAgVGhpcyBvcHRpb24gY2FuIGJlIHNlbGVjdGVkIGJ5IG90aGVyIG9wdGlvbnMgdGhhdCBuZWVkIGNvbXBhdFxuICAzMzpcdFx0ICBuZXRsaW5rIG1lc3NhZ2VzLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBDT01QQVRfTkVUTElOS19NRVNTQUdFU1xuICAzNjpcdFx0ZGVmX2Jvb2wgeVxuICAzNzpcdFx0ZGVwZW5kcyBvbiBDT01QQVRcbiAgMzg6XHRcdGRlcGVuZHMgb24gV0VYVF9DT1JFIHx8IFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgVGhpcyBvcHRpb24gbWFrZXMgaXQgcG9zc2libGUgdG8gc2VuZCBkaWZmZXJlbnQgbmV0bGluayBtZXNzYWdlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgzMwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQ09ORklHX1NZU0ZTYCBvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIHJlbGV2YW50IGZpbGVzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGBmcy9zeXNmcy9LY29uZmlnYC4gSXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIElmIHRoYXQgZG9lc24mIzM5O3QgcGFuIG91dCwgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIG5leHQgbG9naWNhbCBwbGFjZSB0byBjaGVjay4gSXQmIzM5O3MgcGxhdXNpYmxlIHRoYXQgaXQmIzM5O3MgYSBtb3JlIGZ1bmRhbWVudGFsIG9yIGdlbmVyaWMgb3B0aW9uIGluZmx1ZW5jaW5nIGVhcmx5IHN5c3RlbSBpbml0aWFsaXphdGlvbi4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIGRldGFpbHMuIFRpbWUgdG8gZ2V0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTWVNGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zeXNmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9zeXNmcy9LY29uZmlnOjI6Y29uZmlnIFNZU0ZTXG5mcy9zeXNmcy9LY29uZmlnLTMtXHRib29sIFwmIzM0O3N5c2ZzIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIEludGVyZmFjZSBTcGVlZCBhbmQgRHVwbGV4IFNldHRpbmdzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgc3ltYm9scyByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlIHNldHRpbmdzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBzcGVlZCBhbmQgZHVwbGV4LiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGNlbnRlcmVkIGFyb3VuZCBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCwgd2hpY2ggaXMgbWFya2VkIGFzIHN0YXRpYywgYWxvbmcgd2l0aCBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AsIGFsc28gc3RhdGljIGZ1bmN0aW9ucy4gSW50cmlndWluZywgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uLgoKQWgsIHRoZXJlIGl0IGlzISBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBpcyB0aGUga2V5IOKAkyBpdCYjMzk7cyBhbiBleHBvcnRlZCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9ldGh0b29sL2lvY3RsLmNgLCBhbmQgaXQgYXBwZWFycyB0byBiZSB3aGF0IGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGlzIGxldmVyYWdpbmcuIFNpbmNlIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGlzIGV4cG9ydGVkLCBpdCYjMzk7cyB0aGUgcmVhbCBlbnRyeSBwb2ludCBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29kZSBmbG93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGluIGBuZXQvZXRodG9vbC9pb2N0bC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdpbGwgZmluZCB0aGUgY2FsbGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzIGFyZSBiZWluZyByZXRyaWV2ZWQgYW5kIGV4cG9zZWQsIGVzcGVjaWFsbHkgbm93IHRoYXQgdGhlIGJhY2tpbmcgZnVuY3Rpb24sIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLCBpcyBzdGF0aWMuIFRoaXMgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nLCBtYXliZSB0byBjb25zb2xpZGF0ZSBhY2Nlc3Mgb3IgaGlkZSBzb21lIGludGVybmFsIGRldGFpbHMuIFRpbWUgdG8gZXhhbWluZSB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDM1Olx0XHR9IGxpbmtfbW9kZXM7XG4gNDM2Olx0fTtcbiA0Mzc6XHRcbiA0Mzg6XHQvKiBJbnRlcm5hbCBrZXJuZWwgaGVscGVyIHRvIHF1ZXJ5IGEgZGV2aWNlIGV0aHRvb2xfbGlua19zZXR0aW5ncy4gKi9cbiA0Mzk6XHRpbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gNDQwOlx0XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXG4gNDQxOlx0e1xuIDQ0MjpcdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzX2NvbXBhdChkZXYpO1xuIDQ0MzpcdFxuIDQ0NDpcdFx0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuIDQ0NTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gNDQ2Olx0XG4gNDQ3Olx0XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4gNDQ4Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQ0OTpcdFxuIDQ1MDpcdFx0bWVtc2V0KGxpbmtfa3NldHRpbmdzLCAwLCBzaXplb2YoKmxpbmtfa3NldHRpbmdzKSk7XG4gNDUxOlx0XHRyZXR1cm4gZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncyhkZXYsIGxpbmtfa3NldHRpbmdzKTtcbiA0NTI6XHR9XG4gNDUzOlx0RVhQT1JUX1NZTUJPTChuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MpO1xuIDQ1NDpcdFxuIDQ1NTpcdC8qIENvbnZlbmllbmNlIGhlbHBlciBmb3IgY2FsbGVycyB0aGF0IGhvbGQgb25seSBydG5sX2xvY2soKS4gKi9cbiA0NTY6XHRpbnQgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDQ1NzpcdFx0XHRcdFx0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncylcbiA0NTg6XHR7XG4gNDU5Olx0XHRpbnQgcmV0O1xuIDQ2MDpcdFxuIDQ2MTpcdFx0QVNTRVJUX1JUTkwoKTtcbiA0NjI6XHRcbiA0NjM6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuIDQ2NDpcdFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xuIDQ2NTpcdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiA0NjY6XHRcdHJldHVybiByZXQ7XG4gNDY3Olx0fVxuIDQ2ODpcdEVYUE9SVF9TWU1CT0woX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyk7XG4gNDY5Olx0XG4gNDcwOlx0LyogY29udmVydCBldGh0b29sX2xpbmtfdXNldHRpbmdzIGluIHVzZXIgc3BhY2UgdG8gYSBrZXJuZWwgaW50ZXJuYWxcbiA0NzE6XHQgKiBldGh0b29sX2xpbmtfa3NldHRpbmdzLiByZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBlcnJvci5cbiA0NzI6XHQgKi9cbiA0NzM6XHRzdGF0aWMgaW50IGxvYWRfbGlua19rc2V0dGluZ3NfZnJvbV91c2VyKHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICp0byxcbiA0NzQ6XHRcdFx0XHRcdFx0IGNvbnN0IHZvaWQgX191c2VyICpmcm9tKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI1MAoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAzNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBGdW5jdGlvbiBGdXp6aW5nIFRhcmdldHMgZm9yIE5ldHdvcmsgU3lzZnMgQXR0cmlidXRlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCwgYW5kIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgYW5kIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGlzIHRoZSBub24tc3RhdGljIG9uZS4gTG9va2luZyBhdCB0aGUgcHJvbXB0JiMzOTtzIGluc3RydWN0aW9ucywgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBlbXBoYXNpemluZyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBmdW5jdGlvbnMgYXJlIG9mdGVuIGlubGluZWQsIGFuZCB3ZSBuZWVkIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgZm9yIGZ1enppbmcuIFNvLCB3aGlsZSBgc3BlZWRfc2hvd2AsIGBkdXBsZXhfc2hvd2AsIGFuZCBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBhcmUgcmVsZXZhbnQgaW4gY29udGV4dCwgSSBuZWVkIHRvIHByaW9yaXRpemUgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgZm9yIGBGb2N1c1N5bWJvbHNgLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpcyB0YXJnZXRlZC4gV2hpbGUgdGhlIHN0YXRpYyBvbmVzIGFyZSBjYWxsZWQsIEkgbmVlZCB0byBmb2N1cyB0aGUgZnV6emluZyB0byAqb25seSogd2hhdCB0aGUgcHJvbXB0IGlzIGFza2luZy4gYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgLCBhbmQgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2Agc2hvdWxkIGJlIGluY2x1ZGVkLCBldmVuIGlmIHRoZXkgYXJlIHN0YXRpYyBzaW5jZSB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyB0aGVtLgoKTm93LCB3aXRoIHRob3NlIHByaW9yaXRpZXMgaW4gbWluZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29ycmVjdCBFbmFibGVDb25maWdzIGFyZSBzZXQuIEkgc2VlIGBTWVNGU2AgYW5kIGBORVRgLCB3aGljaCBzZWVtIGFwcHJvcHJpYXRlLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLgoKVGhlIHBhdGNoJiMzOTtzIGRlc2NyaXB0aW9uIGhpZ2hsaWdodHMgYSBjaGFuZ2UgaW4gdGhlIGxvY2tpbmcgbWVjaGFuaXNtIGFuZCBoYW5kbGluZyBvZiBgZGV2X2lzYWxpdmVgIGNoZWNrcyBmb3IgcmVhZGluZyBzcGVlZCBhbmQgZHVwbGV4IHN5c2ZzIGF0dHJpYnV0ZXMuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIG5ldHdvcmsgaW50ZXJmYWNlIGluZm9ybWF0aW9uIHRocm91Z2ggc3lzZnMuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBmdXp6aW5nLiBUaGlzIHNob3VsZCBnZXQgYSBoaWdoIHByaW9yaXR5IHdoZW4gc2V0dGluZyB1cCB0aGUgZnV6emluZy4KCkkmIzM5O2xsIHZlcmlmeSBldmVyeXRoaW5nIHdpdGggYHNldC1yZXN1bHRzYCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXQgdXAgY29ycmVjdGx5LiBUaGlzIHNob3VsZCBiZSBhIGdvb2QgaW5pdGlhbCBwYXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1lTRlMmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3NwZWVkX3Nob3cmIzM0OywKICAgICYjMzQ7ZHVwbGV4X3Nob3cmIzM0OywKICAgICYjMzQ7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGxvY2tpbmcgbG9naWMgd2hlbiByZWFkaW5nIHRoZSBuZXR3b3JrIGRldmljZSAmIzM5O3NwZWVkJiMzOTsgYW5kICYjMzk7ZHVwbGV4JiMzOTsgc3lzZnMgYXR0cmlidXRlcy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIHRoZSBSVE5MIGxvY2ssIGl0IHVzZXMgcGVyLWRldmljZSBvcHMgbG9ja2luZyAobmV0ZGV2X2xvY2tfb3BzKSB3aGVuIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLCBjaGVja3MgZGV2X2lzYWxpdmUsIGFuZCBjYWxscyBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKS4gVGhpcyBhZmZlY3RzIHVzZXItYWNjZXNzaWJsZSBzeXNmcyBlbmRwb2ludHMgYW5kIG5ldHdvcmsgZGV2aWNlIGxvY2tpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NZU0ZTJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGlmX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtzcGVlZF9zaG93JiMzNDssCiAgICAmIzM0O2R1cGxleF9zaG93JiMzNDssCiAgICAmIzM0O3N5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBsb2NraW5nIGxvZ2ljIHdoZW4gcmVhZGluZyB0aGUgbmV0d29yayBkZXZpY2UgJiMzOTtzcGVlZCYjMzk7IGFuZCAmIzM5O2R1cGxleCYjMzk7IHN5c2ZzIGF0dHJpYnV0ZXMuIEluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IGFjcXVpcmluZyB0aGUgUlROTCBsb2NrLCBpdCB1c2VzIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgKG5ldGRldl9sb2NrX29wcykgd2hlbiBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSwgY2hlY2tzIGRldl9pc2FsaXZlLCBhbmQgY2FsbHMgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCkuIFRoaXMgYWZmZWN0cyB1c2VyLWFjY2Vzc2libGUgc3lzZnMgZW5kcG9pbnRzIGFuZCBuZXR3b3JrIGRldmljZSBsb2NraW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyAmIzM5O3NwZWVkJiMzOTsgYW5kICYjMzk7ZHVwbGV4JiMzOTsgYXR0cmlidXRlIHJlYWQgaGFuZGxlcnMgaW50byBhIGhlbHBlciBmdW5jdGlvbiAmIzM5O3N5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpJiMzOTssIGFsbG93aW5nIHRoZSB1c2Ugb2YgcGVyLWRldmljZSBvcHMgbG9ja2luZyAobmV0ZGV2X2xvY2tfb3BzKSBpbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgUlROTC5cblxuVGhlIHN0YWNrLWFsbG9jYXRlZCAmIzM5O3N0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZCYjMzk7IHZhcmlhYmxlIGlzIHBhc3NlZCB0byBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKSwgd2hpY2ggemVyb2VzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggbWVtc2V0KCkgYmVmb3JlIHF1ZXJ5aW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBmaWVsZHMgY21kLmJhc2Uuc3BlZWQgYW5kIGNtZC5iYXNlLmR1cGxleCBhcmUgYWNjZXNzZWQgb25seSB3aGVuIHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpIHJldHVybnMgc3VjY2VzcyAoMCksIGFuZCB2YWx1ZXMgYXJlIGZvcm1hdHRlZCBpbnRvIHRleHQgdmlhIHN5c2ZzX2VtaXQoKS4gTG9ja2luZyBhbmQgY29uY3VycmVuY3kgYXNwZWN0cyBvZiB0aGlzIHBhdGNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVhayByaXNrcywgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZTM2ZjdhNTNmZDU4NmE1ZGE5YWIyYjQxY2RlNDVhZjQ1YzAwOTM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDg6MTM6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDM1MjE3M2RmNzU3ODUuLjNlMDFlN2YzY2FjNzkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw1NSBAQCBzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoKJiM0MzsgKiBVc2UgdGhlIHBlci1kZXZpY2Ugb3BzIGxvY2sgd2l0aG91dCBSVE5MIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyBpdC4KJiM0MzsgKiBMZWdhY3kgZGV2aWNlcyBhbmQgY2FsbGJhY2tzIHdoaWNoIGV4cGxpY2l0bHkgcmVxdWlyZSBSVE5MIHJldGFpbiB0aGUKJiM0MzsgKiBleGlzdGluZyBsb2NraW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAomIzQzOwkJCQkgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7CiYjNDM7CWludCByZXQgPSAtRUlOVkFMOwomIzQzOwlib29sIG5lZWRfcnRubDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKTsgdGhpcyBoZWxwcwomIzQzOwkgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8CiYjNDM7CQkgICAgKG5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsKJiM0MzsJCSAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7CiYjNDM7CWlmIChuZWVkX3J0bmwpIHsKJiM0MzsJCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CW5ldGRldl9sb2NrX29wcyhuZXRkZXYpOwomIzQzOwomIzQzOwlyZXQgPSAtRUlOVkFMOwomIzQzOwlpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CX0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogS2VlcCB0aGUgc3lzZnMgQUJJOiByZXBvcnQgYW55IGNhbGxiYWNrIGVycm9yIGFzIC1FSU5WQUwKJiM0MzsJCSAqIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgdGhlIGRyaXZlciYjMzk7cyBlcnJvciBjb2RlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpCiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpOwomIzQzOwlpZiAobmVlZF9ydG5sKQomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwmIzM5O3MgKi8KIHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCkBAIC0zMzIsMjcgJiM0MzszODEsMTMgQEAgc3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpOwogc3RhdGljIHNzaXplX3Qgc3BlZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwcwotCSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KLQkgKi8KLQlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDsKJiM0MzsJaW50IHJldDsKIAotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7CiYjNDM7CXJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsICZhbXA7Y21kKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpOwogCi0JCWlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7Y21kKSkKLQkJCXJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7Ci0JfQotCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7CkBAIC0zNjAsNDEgJiM0MzszOTUsMjYgQEAgc3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTsKIHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwcwotCSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KLQkgKi8KLQlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSAtRUlOVkFMOwotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kOwotCi0JCWlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7Y21kKSkgewotCQkJY29uc3QgY2hhciAqZHVwbGV4OwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7CiYjNDM7CWNvbnN0IGNoYXIgKmR1cGxleDsKJiM0MzsJaW50IHJldDsKIAotCQkJc3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHsKLQkJCWNhc2UgRFVQTEVYX0hBTEY6Ci0JCQkJZHVwbGV4ID0gJiMzNDtoYWxmJiMzNDs7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERVUExFWF9GVUxMOgotCQkJCWR1cGxleCA9ICYjMzQ7ZnVsbCYjMzQ7OwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlkdXBsZXggPSAmIzM0O3Vua25vd24mIzM0OzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXJldCA9IHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVzXG4mIzM0OywgZHVwbGV4KTsKJiM0MzsJcmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgJmFtcDtjbWQpOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJc3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHsKJiM0MzsJCWNhc2UgRFVQTEVYX0hBTEY6CiYjNDM7CQkJZHVwbGV4ID0gJiMzNDtoYWxmJiMzNDs7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIERVUExFWF9GVUxMOgomIzQzOwkJCWR1cGxleCA9ICYjMzQ7ZnVsbCYjMzQ7OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlkdXBsZXggPSAmIzM0O3Vua25vd24mIzM0OzsKJiM0MzsJCQlicmVhazsKIAkJfQomIzQzOwkJcmV0ID0gc3lzZnNfZW1pdChidWYsICYjMzQ7JXNcbiYjMzQ7LCBkdXBsZXgpOwogCX0KLQlydG5sX3VubG9jaygpOwomIzQzOwogCXJldHVybiByZXQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIC0gUGF0Y2ggU2VyaWVzIFJldmlldyoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBsb29rIGF0IGEgTGludXgga2VybmVsIHBhdGNoIHNlcmllcyBhbmQgZGVjaWRlIGlmIGl0IG5lZWRzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLiBObyBwcm9ibGVtLCBsZXQmIzM5O3Mgc3RhcnQgYnkgbWFraW5nIHN1cmUgaXQmIzM5O3Mgc2FmZSDigJMgc3RhbmRhcmQgZGVmZW5zaXZlIHJldmlldywgbm8gbWFsaWNpb3VzIHN0dWZmLCBqdXN0IGNoZWNraW5nIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgbWVtb3J5IHNhbml0aXplciBhdHRlbnRpb24uIFRoaXMgaXMgYSBiZW5pZ24gc2V2ZXJpdHkgYXNzZXNzbWVudCwgcHVyZWx5IGFib3V0IHRoZSBjb2RlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9jb3JlL25ldC1zeXNmcy5jYC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGhlbHBlci4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyB0aGVuIHVzZWQgaW4gYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgLCBjYWxsaW5nIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCAmYW1wO2NtZClgLiBIbW0sIGFuZCBgY21kYCBpcyBhbiAqdW5pbml0aWFsaXplZCogYHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtgIG9uIHRoZSBzdGFjay4gTm93IHRoYXQgY2F0Y2hlcyBteSBleWUuIElzIGBjbWRgIHByb3Blcmx5IGluaXRpYWxpemVkIGluc2lkZSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCB0byBzZWUuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhhdCBvdXQsIGFzIHdlbGwgYXMgYF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGF0IGxvY2FsIHZhcmlhYmxlIGBjbWRgIGlzIGJlaW5nIGluaXRpYWxpemVkIGJlZm9yZSBpdCYjMzk7cyB1c2VkLiBUaGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IEtNU0FOIG1pZ2h0IG5lZWQgdG8gbG9vayBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0zMjY9X19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI3LVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjMyODppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0zMjktXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpO1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9NDI5PXN0cnVjdCBldGh0b29sX2xpbmtfdXNldHRpbmdzIHtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQzOC0vKiBJbnRlcm5hbCBrZXJuZWwgaGVscGVyIHRvIHF1ZXJ5IGEgZGV2aWNlIGV0aHRvb2xfbGlua19zZXR0aW5ncy4gKi9cbm5ldC9ldGh0b29sL2lvY3RsLmM6NDM5OmludCBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDQwLVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDA3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBFdGh0b29sIENvZGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGV0aHRvb2wmIzM5O3MgaGFuZGxpbmcgb2YgY2VydGFpbiBjb25maWd1cmF0aW9ucyB3b3Jrcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgbmV0L2V0aHRvb2wvaW9jdGwuY2AgYXJvdW5kIGxpbmUgNDM5LiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBpb2N0bCBoYW5kbGluZyBsb2dpYyByZXNpZGVzLCB3aGljaCBzaG91bGQgYmUgaW50ZXJlc3RpbmcuIFRoZW4sIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgZXRodG9vbCB1c2VzLCBJJiMzOTtsbCBuZWVkIHRvIHJlZmVyZW5jZSBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgIGFyb3VuZCBsaW5lIDMyNi4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBzdHJ1Y3R1cmVzIGxpa2UgYGV0aHRvb2xfZ3NldF90YCBvciBzaW1pbGFyLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSBob3cgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgYWNjZXNzZWQgc28gSSBjYW4gY29tcHJlaGVuZCB0aGUgZGF0YSBmbG93IGFuZCBhbnkgZGF0YSB2YWxpZGF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgc3RhcnRpbmcgcG9pbnQgaGVscHMgY2xhcmlmeSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlci1zcGFjZSBldGh0b29sIHV0aWxpdHkgYW5kIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBkZXZpY2UgZHJpdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9pb2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHRcdHN0cnVjdCBldGh0b29sX2xpbmtfc2V0dGluZ3MgYmFzZTtcbiA0MzE6XHRcdHN0cnVjdCB7XG4gNDMyOlx0XHRcdF9fdTMyIHN1cHBvcnRlZFtfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTlUzMl07XG4gNDMzOlx0XHRcdF9fdTMyIGFkdmVydGlzaW5nW19fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OVTMyXTtcbiA0MzQ6XHRcdFx0X191MzIgbHBfYWR2ZXJ0aXNpbmdbX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05VMzJdO1xuIDQzNTpcdFx0fSBsaW5rX21vZGVzO1xuIDQzNjpcdH07XG4gNDM3Olx0XG4gNDM4Olx0LyogSW50ZXJuYWwga2VybmVsIGhlbHBlciB0byBxdWVyeSBhIGRldmljZSBldGh0b29sX2xpbmtfc2V0dGluZ3MuICovXG4gNDM5Olx0aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDQ0MDpcdFx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxuIDQ0MTpcdHtcbiA0NDI6XHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcbiA0NDM6XHRcbiA0NDQ6XHRcdGlmICghZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbiA0NDU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDQ0NjpcdFxuIDQ0NzpcdFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuIDQ0ODpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0NDk6XHRcbiA0NTA6XHRcdG1lbXNldChsaW5rX2tzZXR0aW5ncywgMCwgc2l6ZW9mKCpsaW5rX2tzZXR0aW5ncykpO1xuIDQ1MTpcdFx0cmV0dXJuIGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XG4gNDUyOlx0fVxuIDQ1MzpcdEVYUE9SVF9TWU1CT0wobmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKTtcbiA0NTQ6XHRcbiA0NTU6XHQvKiBDb252ZW5pZW5jZSBoZWxwZXIgZm9yIGNhbGxlcnMgdGhhdCBob2xkIG9ubHkgcnRubF9sb2NrKCkuICovXG4gNDU2Olx0aW50IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiA0NTc6XHRcdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXG4gNDU4Olx0e1xuIDQ1OTpcdFx0aW50IHJldDtcbiA0NjA6XHRcbiA0NjE6XHRcdEFTU0VSVF9SVE5MKCk7XG4gNDYyOlx0XG4gNDYzOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbiA0NjQ6XHRcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGxpbmtfa3NldHRpbmdzKTtcbiA0NjU6XHRcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4gNDY2Olx0XHRyZXR1cm4gcmV0O1xuIDQ2NzpcdH1cbiA0Njg6XHRFWFBPUlRfU1lNQk9MKF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MpO1xuIDQ2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzY0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5ldCBzeXNmcyBzcGVlZC9kdXBsZXggaW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucyB3aXRoIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgLCBgc3BlZWRfc2hvd2AsIGFuZCBgZHVwbGV4X3Nob3dgLiBUaGUgYG1lbXNldGAgaW4gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgaXMgaW1tZWRpYXRlbHkgYXBwYXJlbnQg4oCTIHRoZSBjb2RlIGlzIHplcm9pbmcgb3V0IHRoZSBgbGlua19rc2V0dGluZ3NgIHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyJiMzOTtzIGBnZXRfbGlua19rc2V0dGluZ3NgIGZ1bmN0aW9uIHZpYSBgZGV2LSZndDtldGh0b29sX29wc2AuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gaW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlLCBlbGltaW5hdGluZyB0aGUgcmlzayBvZiB1bmRlZmluZWQgYmVoYXZpb3IgaWYgdGhlIGRyaXZlciBkb2VzbiYjMzk7dCBwb3B1bGF0ZSBldmVyeSBmaWVsZC4KCk5vdywgbG9va2luZyBhdCBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCwgaXQgc2VlbXMgd2UmIzM5O3ZlIGdvdCBhIGxheWVyZWQgYXBwcm9hY2ggdG8gb2J0YWluaW5nIHRoZSBsaW5rIHNldHRpbmdzLiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIGRyaXZlciBhY3R1YWxseSAqaGFzKiBhIGBnZXRfbGlua19rc2V0dGluZ3NgIG9wZXJhdGlvbiBkZWZpbmVkLiBJZiBub3QsIGl0IGJhaWxzIG91dCBlYXJseSB3aXRoIGAtRUlOVkFMYC4gVGhlbiB0aGVyZSYjMzk7cyB0aGUgY29uZGl0aW9uYWwgbG9ja2luZyBzZWN0aW9uLiBJdCBpbnRlbGxpZ2VudGx5IGRldGVybWluZXMgd2hldGhlciB0byB1c2UgYHJ0bmxfbG9ja2Agb3IgYSBwZXItZGV2aWNlIGBuZXRkZXZfbG9ja19vcHNgIGJhc2VkIG9uIHRoZSBuZWVkIGZvciBSVE5MIGNvbnRleHQgZm9yIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uLiBBZnRlciB0aGUgbG9ja2luZyBpcyBoYW5kbGVkLCB0aGVyZSYjMzk7cyBhIHNhZmV0eSBjaGVjazogYGRldl9pc2FsaXZlYCBhbmQgYG5ldGlmX3J1bm5pbmdgLiBJZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCBhbGl2ZSwgb3IgaXMgbm90IHJ1bm5pbmcgaXQgcmV0dXJucyBhbiBlcnJvci4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgY2FsbCB0byBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYC4gSWYgKnRoYXQqIHN1Y2NlZWRzIChyZXR1cm5zIDApLCB0aGUgZnVuY3Rpb24gcHJvY2VlZHMuIE90aGVyd2lzZSwgaXQgcmVwb3J0cyBgLUVJTlZBTGAuIEZpbmFsbHksIHRoZSBsb2NrIGlzIHJlbGVhc2VkLgoKSW5zcGVjdGluZyBgc3BlZWRfc2hvd2AgcmVpbmZvcmNlcyB0aGF0IHRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgb25seSBhY2Nlc3NlZCBpZiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBzdWNjZWVkcy4gU28sIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgaXMgcHJvdGVjdGVkIGZyb20gcG90ZW50aWFsIGdhcmJhZ2UgZGF0YSwgd2hpY2ggSSYjMzk7dmUgc2VlbiBiZWZvcmUgaWYgdGhlIGRyaXZlciBkb2VzIG5vdCBpbml0aWFsaXplIHRoZSBgZXRodG9vbF9saW5rX2tzZXR0aW5nc2AuIFRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMgdG8gYGR1cGxleF9zaG93YCBzaW5jZSBpdCBmdW5jdGlvbnMgaWRlbnRpY2FsbHkuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGEgcmVmYWN0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBlZmZvcnQuIFRoZSBwcmV2aW91cyBjb2RlIGRpcmVjdGx5IGFjcXVpcmVkIHRoZSBSVE5MIGxvY2ssIHRoZW4gY2FsbGVkIGBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzYC4gVGhlIHJldmlzZWQgdmVyc2lvbiBleHRyYWN0cyB0aGUgY29tbW9uIGxvY2tpbmcgYW5kIHF1ZXJ5IGxvZ2ljIGludG8gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AuIFRoaXMgY2VudHJhbGl6YXRpb24gaXMgZ29vZCwgYW5kIHRoZSBjb25kaXRpb25hbCBsb2NraW5nIGJhc2VkIG9uIGBuZXRkZXZfbmVlZF9vcHNfbG9ja2AgaXMgYSBkZWZpbml0ZSBpbXByb3ZlbWVudC4gSXQgYWxsb3dzIGxvY2tsZXNzIG9yIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgd2hlbiBwb3NzaWJsZSwgcmVkdWNpbmcgdGhlIHNjb3BlIG9mIHRoZSBSVE5MIGxvY2suIEluIGVzc2VuY2UsIGl0JiMzOTtzIGFib3V0IHJlZHVjaW5nIGNvbnRlbnRpb24gYW5kIGltcHJvdmluZyBjb25jdXJyZW5jeSBpbiB0aGUga2VybmVsLgoKSSYjMzk7bGwgbm93IG5lZWQgdG8gdmVyaWZ5IHRoZXJlIGFyZW4mIzM5O3QgYW55IHN1YnRsZSBnb3RjaGFzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgZWxzZXdoZXJlLiBJIG5lZWQgdG8gY29tYiB0aHJvdWdoIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AgYXJvdW5kIGxpbmVzIDExOCB0byA0MDAuIEVuc3VyZSBubyBvdGhlciBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgbGVhdmUgZGF0YSB1bmluaXRpYWxpemVkLCB3aGljaCBjYW4gbGVhZCB0byB0cmlja3kgYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXQtc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XHQgKiBUaGVyZSYjMzk7cyBubyBuZWVkIHRvIGtlZXAgdW5icmVha2luZyB0aGUgc3lzZnMgcHJvdGVjdGlvbiBub3IgdG8gaG9sZFxuIDExMTpcdFx0ICogYSBuZXQgZGV2aWNlIHJlZmVyZW5jZSBmcm9tIHRoYXQgcG9pbnQ7IHRoYXQgd2FzIG9ubHkgbmVlZGVkIHRvIHRha2VcbiAxMTI6XHRcdCAqIHRoZSBydG5sIGxvY2suXG4gMTEzOlx0XHQgKi9cbiAxMTQ6XHR1bmJyZWFrOlxuIDExNTpcdFx0c3lzZnNfdW5icmVha19hY3RpdmVfcHJvdGVjdGlvbihrbik7XG4gMTE2Olx0XHRkZXZfcHV0KG5kZXYpO1xuIDExNzpcdFxuIDExODpcdFx0cmV0dXJuIHJldDtcbiAxMTk6XHR9XG4gMTIwOlx0XG4gMTIxOlx0LypcbiAxMjI6XHQgKiBVc2UgdGhlIHBlci1kZXZpY2Ugb3BzIGxvY2sgd2l0aG91dCBSVE5MIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyBpdC5cbiAxMjM6XHQgKiBMZWdhY3kgZGV2aWNlcyBhbmQgY2FsbGJhY2tzIHdoaWNoIGV4cGxpY2l0bHkgcmVxdWlyZSBSVE5MIHJldGFpbiB0aGVcbiAxMjQ6XHQgKiBleGlzdGluZyBsb2NraW5nLlxuIDEyNTpcdCAqL1xuIDEyNjpcdHN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcbiAxMjc6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiAxMjg6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuIDEyOTpcdHtcbiAxMzA6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XG4gMTMxOlx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbiAxMzI6XHRcdGJvb2wgbmVlZF9ydG5sO1xuIDEzMzpcdFxuIDEzNDpcdFx0LypcbiAxMzU6XHRcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCk7IHRoaXMgaGVscHNcbiAxMzY6XHRcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbiAxMzc6XHRcdCAqL1xuIDEzODpcdFx0aWYgKCFuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuIDEzOTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE0MDpcdFxuIDE0MTpcdFx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKG5ldGRldikgfHxcbiAxNDI6XHRcdFx0ICAgIChuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjZcbiAxNDM6XHRcdFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTKTtcbiAxNDQ6XHRcdGlmIChuZWVkX3J0bmwpIHtcbiAxNDU6XHRcdFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFx1MDAyNmRldi1cdTAwM2Vrb2JqLCBcdTAwMjZhdHRyLVx1MDAzZWF0dHIsIG5ldGRldik7XG4gMTQ2Olx0XHRcdGlmIChyZXQpXG4gMTQ3Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAxNDg6XHRcdH1cbiAxNDk6XHRcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xuIDE1MDpcdFxuIDE1MTpcdFx0cmV0ID0gLUVJTlZBTDtcbiAxNTI6XHRcdGlmICghZGV2X2lzYWxpdmUobmV0ZGV2KSkge1xuIDE1MzpcdFx0XHRyZXQgPSAtRU5PREVWO1xuIDE1NDpcdFx0fSBlbHNlIGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiAxNTU6XHRcdFx0LypcbiAxNTY6XHRcdFx0ICogS2VlcCB0aGUgc3lzZnMgQUJJOiByZXBvcnQgYW55IGNhbGxiYWNrIGVycm9yIGFzIC1FSU5WQUxcbiAxNTc6XHRcdFx0ICogaW5zdGVhZCBvZiBwcm9wYWdhdGluZyB0aGUgZHJpdmVyJiMzOTtzIGVycm9yIGNvZGUuXG4gMTU4Olx0XHRcdCAqL1xuIDE1OTpcdFx0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgRnVuY3Rpb25zKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBhbHJlYWR5IGxvb2tlZCBhdCB0aGUgY29yZSBsb2dpYywgYW5kIEkmIzM5O20gZmFpcmx5IGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50IHRoZXJlLiBOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgdGFrZSBhIGdvb2QgaGFyZCBsb29rIGF0IHRoZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyAtIHNwZWNpZmljYWxseSwgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlZ3JhdGUsIHdoYXQgYXNzdW1wdGlvbnMgdGhleSBtYWtlIGFib3V0IHRoZSBkYXRhLCBhbmQgaWYgdGhleSBpbnRyb2R1Y2UgYW55IGVkZ2UtY2FzZSB2dWxuZXJhYmlsaXRpZXMgb3IgaW5lZmZpY2llbmNpZXMgaW50byB0aGUgbGFyZ2VyIHByb2Nlc3MuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgdHlwZXMgdGhleSBoYW5kbGUsIHBvdGVudGlhbCBvdmVyZmxvdyBpc3N1ZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBpZiB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBzaGFyZWQgcmVzb3VyY2VzLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGVpciBpbXBsZW1lbnRhdGlvbiBpbnRyb2R1Y2VzIGFueSBzdWJ0bGUgYnVncyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aGljaCBjb3VsZCBjYXNjYWRlIHVwd2FyZHMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGNvbXBvbmVudHMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXQtc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzc1Olx0XG4gMzc2Olx0XHRydG5sX3VubG9jaygpO1xuIDM3NzpcdFx0cmV0dXJuIHJldDtcbiAzNzg6XHR9XG4gMzc5Olx0c3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpO1xuIDM4MDpcdFxuIDM4MTpcdHN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIDM4MjpcdFx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiAzODM6XHR7XG4gMzg0Olx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4gMzg1Olx0XHRpbnQgcmV0O1xuIDM4NjpcdFxuIDM4NzpcdFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXHUwMDI2Y21kKTtcbiAzODg6XHRcdGlmICghcmV0KVxuIDM4OTpcdFx0XHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpO1xuIDM5MDpcdFxuIDM5MTpcdFx0cmV0dXJuIHJldDtcbiAzOTI6XHR9XG4gMzkzOlx0c3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTtcbiAzOTQ6XHRcbiAzOTU6XHRzdGF0aWMgc3NpemVfdCBkdXBsZXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gMzk2Olx0XHRcdFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiAzOTc6XHR7XG4gMzk4Olx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4gMzk5Olx0XHRjb25zdCBjaGFyICpkdXBsZXg7XG4gNDAwOlx0XHRpbnQgcmV0O1xuIDQwMTpcdFxuIDQwMjpcdFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXHUwMDI2Y21kKTtcbiA0MDM6XHRcdGlmICghcmV0KSB7XG4gNDA0Olx0XHRcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4gNDA1Olx0XHRcdGNhc2UgRFVQTEVYX0hBTEY6XG4gNDA2Olx0XHRcdFx0ZHVwbGV4ID0gXCYjMzQ7aGFsZlwmIzM0OztcbiA0MDc6XHRcdFx0XHRicmVhaztcbiA0MDg6XHRcdFx0Y2FzZSBEVVBMRVhfRlVMTDpcbiA0MDk6XHRcdFx0XHRkdXBsZXggPSBcJiMzNDtmdWxsXCYjMzQ7O1xuIDQxMDpcdFx0XHRcdGJyZWFrO1xuIDQxMTpcdFx0XHRkZWZhdWx0OlxuIDQxMjpcdFx0XHRcdGR1cGxleCA9IFwmIzM0O3Vua25vd25cJiMzNDs7XG4gNDEzOlx0XHRcdFx0YnJlYWs7XG4gNDE0Olx0XHRcdH1cbiA0MTU6XHRcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzXFxuXCYjMzQ7LCBkdXBsZXgpO1xuIDQxNjpcdFx0fVxuIDQxNzpcdFxuIDQxODpcdFx0cmV0dXJuIHJldDtcbiA0MTk6XHR9XG4gNDIwOlx0c3RhdGljIERFVklDRV9BVFRSX1JPKGR1cGxleCk7XG4gNDIxOlx0XG4gNDIyOlx0c3RhdGljIHNzaXplX3QgdGVzdGluZ19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiA0MjM6XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiA0MjQ6XHR7XG4gNDI1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuIDQyNjpcdFxuIDQyNzpcdFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiA0Mjg6XHRcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCAhIW5ldGlmX3Rlc3RpbmcobmV0ZGV2KSk7XG4gNDI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzAKCQkJCQkJCW91dHB1dDogMjE3CgkJCQkJCQl0aG91Z2h0czogNTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSYjMzk7dmUgYmVlbiBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZXNlIGNoYW5nZXMgYW5kIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBhc3Nlc3NtZW50LgoKRmlyc3QsIEkgc2VlIHRoZSByZWZhY3RvcmluZyB0byBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYC4gSXQgdGFrZXMgYSBgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZGAsIHdoaWNoIGlzIHN0YW5kYXJkLiBJbXBvcnRhbnRseSwgaW4gdGhlIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCBmdW5jdGlvbnMsIGBjbWRgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suIE5vdywgaWYgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZClgIHJldHVybnMgc3VjY2VzcyAoMCksIHdoaWNoIGlzIGtleSwgdGhlbiBgY21kYCBnZXRzIHplcm9lZCBvdXQgKmJlZm9yZSogdGhlIGRyaXZlciBjYWxsYmFjayBwb3B1bGF0ZXMgaXQuIFRoaXMgaXMgaGFuZGxlZCBieSBhIGBtZW1zZXQoKWAgd2l0aGluIHRoZSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKClgIGZ1bmN0aW9uLiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCB0aGVuIHNldHMgYHJldCA9IDBgLiBJZiBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBmYWlscyBmb3IgYW55IHJlYXNvbiAoZGV2aWNlIG5vdCBydW5uaW5nLCBlcnJvciwgZXRjLiksIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybnMgYW4gZXJyb3IgY29kZSwgbGlrZSBgLUVJTlZBTGAgb3IgYC1FTk9ERVZgLgoKVGhlIGltcG9ydGFudCBiaXQgaXMgdGhhdCB0aGUgYGNtZGAgZmllbGRzIChsaWtlIGBjbWQuYmFzZS5zcGVlZGAgYW5kIGBjbWQuYmFzZS5kdXBsZXhgKSBhcmUgKm9ubHkqIGFjY2Vzc2VkIGlmIGByZXQgPT0gMGAgaS5lLiB3aGVuIGl0IHdhcyBhIHN1Y2Nlc3NmdWwgcmV0dXJuIGNvZGUuIEkgYXBwcmVjaWF0ZSB0aGlzIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gRnVydGhlcm1vcmUsIHRoZSBgc3lzZnNfZW1pdGAgZnVuY3Rpb24gYWN0dWFsbHkgZm9ybWF0cyB0aGUgZGF0YSBpbnRvIHN0cmluZ3MvbnVtYmVycyBmb3IgdGhlIHVzZXIgc3BhY2UsIG5vdCBkaXJlY3QgY29waWVzIG9mIGtlcm5lbCBzdHJ1Y3R1cmVzLiBUaGlzIHByZXZlbnRzIGFueSByYXcga2VybmVsIGRhdGEgYmVpbmcgc2VudCBvdXQuCgpDcnVjaWFsbHksIHRoZSBsb2NraW5nIGNoYW5nZXMgYXJlIHVzaW5nIHRoZSBwZXItZGV2aWNlIG9wcyBsb2NrIChgbmV0ZGV2X2xvY2tfb3BzYCkgd2hlcmUgYXBwcm9wcmlhdGUgaW5zdGVhZCBvZiByZWx5aW5nIHNvbGVseSBvbiBSVE5MLiBJJiMzOTttIGNvbWZvcnRhYmxlIHdpdGggdGhpcy4gTE9DS0RFUCBhbmQgdGhlIHN0YW5kYXJkIGNvbmN1cnJlbmN5IGNoZWNrcyBpbiBLQVNBTiBrZXJuZWwgYnVpbGRzIHdpbGwgY2F0Y2ggYW55IGlzc3VlcyBoZXJlLCBhcyBpcyBzdGFuZGFyZCBwcmFjdGljZS4KClRoZXJlZm9yZSwgZ2l2ZW4gYWxsIHRoZXNlIGZhY3RvcnMsIEkgYW0gY2VydGFpbiB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcy4gTm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4KCkluIHN1bW1hcnk6CgoqICAgVGhlIHBhdGNoIGVtcGxveXMgYSBzaGFyZWQgaGVscGVyIGZ1bmN0aW9uIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgZm9yIHJlYWRpbmcgdGhlIGBzcGVlZGAgYW5kIGBkdXBsZXhgIGF0dHJpYnV0ZXMgb2YgdGhlIHN5c2ZzLgoqICAgVGhpcyB1c2VzIHBlci1kZXZpY2UgbG9ja2luZyB3aGVyZSBwb3NzaWJsZSwgcmVkdWNpbmcgdGhlIHJlbGlhbmNlIG9uIFJUTkwuCiogICBUaGUgYGV0aHRvb2xfbGlua19rc2V0dGluZ3NgIHN0cnVjdHVyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLCB3aGljaCBpcyB6ZXJvZWQgd2l0aCBgbWVtc2V0KClgIGJlZm9yZSB0aGUgZHJpdmVyIGNhbGxiYWNrIHBvcHVsYXRlcyBpdC4KKiAgIFRoZSBjb2RlIG9ubHkgYWNjZXNzZXMgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlIGlmIHRoZSByZXR1cm4gY29kZSBpcyBzdWNjZXNzZnVsLgoqICAgVGhlIG91dHB1dCB0byB1c2Vyc3BhY2UgaXMgaGFuZGxlZCBieSB0aGUgYHN5c2ZzX2VtaXQoKWAgZnVuY3Rpb24sIGZvcm1hdHRpbmcgdGhlIGRhdGEgaW5zdGVhZCBvZiByYXcgbWVtb3J5IGNvcGllcy4KKiAgIFN0YW5kYXJkIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUCBhbmQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgcmVmYWN0b3JpbmcgaW50cm9kdWNlZCBpc3N1ZXMgZnJvbSB0aGUgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLgoqICAgVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm9ybWF0aW9uIGxlYWssIGhlbmNlIEtNU0FOIGlzIG5vdCBuZWVkZWQuCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzICYjMzk7c3BlZWQmIzM5OyBhbmQgJiMzOTtkdXBsZXgmIzM5OyBhdHRyaWJ1dGUgcmVhZCBoYW5kbGVycyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uICYjMzk7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCkmIzM5OywgYWxsb3dpbmcgdGhlIHVzZSBvZiBwZXItZGV2aWNlIG9wcyBsb2NraW5nIChuZXRkZXZfbG9ja19vcHMpIGluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IGFjcXVpcmluZyBSVE5MLlxuXG5UaGUgc3RhY2stYWxsb2NhdGVkICYjMzk7c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kJiMzOTsgdmFyaWFibGUgaXMgcGFzc2VkIHRvIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpLCB3aGljaCB6ZXJvZXMgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgd2l0aCBtZW1zZXQoKSBiZWZvcmUgcXVlcnlpbmcgdGhlIGRyaXZlciBjYWxsYmFjay4gVGhlIGZpZWxkcyBjbWQuYmFzZS5zcGVlZCBhbmQgY21kLmJhc2UuZHVwbGV4IGFyZSBhY2Nlc3NlZCBvbmx5IHdoZW4gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCkgcmV0dXJucyBzdWNjZXNzICgwKSwgYW5kIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGludG8gdGV4dCB2aWEgc3lzZnNfZW1pdCgpLiBMb2NraW5nIGFuZCBjb25jdXJyZW5jeSBhc3BlY3RzIG9mIHRoaXMgcGF0Y2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrIHJpc2tzLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzICYjMzk7c3BlZWQmIzM5OyBhbmQgJiMzOTtkdXBsZXgmIzM5OyBhdHRyaWJ1dGUgcmVhZCBoYW5kbGVycyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uICYjMzk7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCkmIzM5OywgYWxsb3dpbmcgdGhlIHVzZSBvZiBwZXItZGV2aWNlIG9wcyBsb2NraW5nIChuZXRkZXZfbG9ja19vcHMpIGluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IGFjcXVpcmluZyBSVE5MLlxuXG5UaGUgc3RhY2stYWxsb2NhdGVkICYjMzk7c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kJiMzOTsgdmFyaWFibGUgaXMgcGFzc2VkIHRvIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpLCB3aGljaCB6ZXJvZXMgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgd2l0aCBtZW1zZXQoKSBiZWZvcmUgcXVlcnlpbmcgdGhlIGRyaXZlciBjYWxsYmFjay4gVGhlIGZpZWxkcyBjbWQuYmFzZS5zcGVlZCBhbmQgY21kLmJhc2UuZHVwbGV4IGFyZSBhY2Nlc3NlZCBvbmx5IHdoZW4gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCkgcmV0dXJucyBzdWNjZXNzICgwKSwgYW5kIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGludG8gdGV4dCB2aWEgc3lzZnNfZW1pdCgpLiBMb2NraW5nIGFuZCBjb25jdXJyZW5jeSBhc3BlY3RzIG9mIHRoaXMgcGF0Y2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrIHJpc2tzLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjA4LjI1NTU4OTgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYxMjY4MjI4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1lTRlNcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGlmX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwic3BlZWRfc2hvd1wiLFxuICAgIFwiZHVwbGV4X3Nob3dcIixcbiAgICBcInN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyAnc3BlZWQnIGFuZCAnZHVwbGV4JyBhdHRyaWJ1dGUgcmVhZCBoYW5kbGVycyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uICdzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKScsIGFsbG93aW5nIHRoZSB1c2Ugb2YgcGVyLWRldmljZSBvcHMgbG9ja2luZyAobmV0ZGV2X2xvY2tfb3BzKSBpbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgUlROTC5cXG5cXG5UaGUgc3RhY2stYWxsb2NhdGVkICdzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQnIHZhcmlhYmxlIGlzIHBhc3NlZCB0byBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKSwgd2hpY2ggemVyb2VzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggbWVtc2V0KCkgYmVmb3JlIHF1ZXJ5aW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBmaWVsZHMgY21kLmJhc2Uuc3BlZWQgYW5kIGNtZC5iYXNlLmR1cGxleCBhcmUgYWNjZXNzZWQgb25seSB3aGVuIHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpIHJldHVybnMgc3VjY2VzcyAoMCksIGFuZCB2YWx1ZXMgYXJlIGZvcm1hdHRlZCBpbnRvIHRleHQgdmlhIHN5c2ZzX2VtaXQoKS4gTG9ja2luZyBhbmQgY29uY3VycmVuY3kgYXNwZWN0cyBvZiB0aGlzIHBhdGNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVhayByaXNrcywgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGxvY2tpbmcgbG9naWMgd2hlbiByZWFkaW5nIHRoZSBuZXR3b3JrIGRldmljZSAnc3BlZWQnIGFuZCAnZHVwbGV4JyBzeXNmcyBhdHRyaWJ1dGVzLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgdGhlIFJUTkwgbG9jaywgaXQgdXNlcyBwZXItZGV2aWNlIG9wcyBsb2NraW5nIChuZXRkZXZfbG9ja19vcHMpIHdoZW4gc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UsIGNoZWNrcyBkZXZfaXNhbGl2ZSwgYW5kIGNhbGxzIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpLiBUaGlzIGFmZmVjdHMgdXNlci1hY2Nlc3NpYmxlIHN5c2ZzIGVuZHBvaW50cyBhbmQgbmV0d29yayBkZXZpY2UgbG9ja2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6MDguMjU1NTk1ODVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTY4MDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDllMzZmN2E1M2ZkNTg2YTVkYTlhYjJiNDFjZGU0NWFmNDVjMDA5MzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDg6MTM6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xcbmluZGV4IDM1MjE3M2RmNzU3ODUuLjNlMDFlN2YzY2FjNzkgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcXG4rKysgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xcbkBAIC0xMTgsNiArMTE4LDU1IEBAIHN0YXRpYyBpbnQgc3lzZnNfcnRubF9sb2NrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKlxcbisgKiBVc2UgdGhlIHBlci1kZXZpY2Ugb3BzIGxvY2sgd2l0aG91dCBSVE5MIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyBpdC5cXG4rICogTGVnYWN5IGRldmljZXMgYW5kIGNhbGxiYWNrcyB3aGljaCBleHBsaWNpdGx5IHJlcXVpcmUgUlROTCByZXRhaW4gdGhlXFxuKyAqIGV4aXN0aW5nIGxvY2tpbmcuXFxuKyAqL1xcbitzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcXG4rXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuK1xcdGJvb2wgbmVlZF9ydG5sO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKTsgdGhpcyBoZWxwc1xcbitcXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW5ldGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8XFxuK1xcdFxcdCAgICAobmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2XFxuK1xcdFxcdCAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7XFxuK1xcdGlmIChuZWVkX3J0bmwpIHtcXG4rXFx0XFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWtvYmosIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyLCBuZXRkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xcbitcXG4rXFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0aWYgKCFkZXZfaXNhbGl2ZShuZXRkZXYpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdH0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEtlZXAgdGhlIHN5c2ZzIEFCSTogcmVwb3J0IGFueSBjYWxsYmFjayBlcnJvciBhcyAtRUlOVkFMXFxuK1xcdFxcdCAqIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgdGhlIGRyaXZlcidzIGVycm9yIGNvZGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdG5ldGRldl91bmxvY2tfb3BzKG5ldGRldik7XFxuK1xcdGlmIChuZWVkX3J0bmwpXFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwncyAqL1xcbiBzdGF0aWMgc3NpemVfdCBuZXRkZXZfc2hvdyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXFxuQEAgLTMzMiwyNyArMzgxLDEzIEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTtcXG4gc3RhdGljIHNzaXplX3Qgc3BlZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xcbi1cXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG4tXFxuLVxcdC8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwc1xcbi1cXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIW5ldGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vrb2JqLCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0ciwgbmV0ZGV2KTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbi1cXHRcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuK1xcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFxcdTAwMjZjbWQpO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcXG4gXFxuLVxcdFxcdGlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFxcdTAwMjZjbWQpKVxcbi1cXHRcXHRcXHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpO1xcbi1cXHR9XFxuLVxcdHJ0bmxfdW5sb2NrKCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gc3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTtcXG5AQCAtMzYwLDQxICszOTUsMjYgQEAgc3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTtcXG4gc3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiB7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XFxuLVxcdGludCByZXQgPSAtRUlOVkFMO1xcbi1cXG4tXFx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXFxuLVxcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cXG4tXFx0ICovXFxuLVxcdGlmICghbmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWtvYmosIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyLCBuZXRkZXYpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbi1cXHRcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuLVxcbi1cXHRcXHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcXHUwMDI2Y21kKSkge1xcbi1cXHRcXHRcXHRjb25zdCBjaGFyICpkdXBsZXg7XFxuK1xcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcXG4rXFx0Y29uc3QgY2hhciAqZHVwbGV4O1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0XFx0XFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcXG4tXFx0XFx0XFx0Y2FzZSBEVVBMRVhfSEFMRjpcXG4tXFx0XFx0XFx0XFx0ZHVwbGV4ID0gXFxcImhhbGZcXFwiO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0Y2FzZSBEVVBMRVhfRlVMTDpcXG4tXFx0XFx0XFx0XFx0ZHVwbGV4ID0gXFxcImZ1bGxcXFwiO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0XFx0ZHVwbGV4ID0gXFxcInVua25vd25cXFwiO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVzXFxcXG5cXFwiLCBkdXBsZXgpO1xcbitcXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcXHUwMDI2Y21kKTtcXG4rXFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcXG4rXFx0XFx0Y2FzZSBEVVBMRVhfSEFMRjpcXG4rXFx0XFx0XFx0ZHVwbGV4ID0gXFxcImhhbGZcXFwiO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBEVVBMRVhfRlVMTDpcXG4rXFx0XFx0XFx0ZHVwbGV4ID0gXFxcImZ1bGxcXFwiO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0ZHVwbGV4ID0gXFxcInVua25vd25cXFwiO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbitcXHRcXHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVzXFxcXG5cXFwiLCBkdXBsZXgpO1xcbiBcXHR9XFxuLVxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhkdXBsZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMzowOC44MDgxMTA2MzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUyMjM4MjExMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNZU0ZTXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcInNwZWVkX3Nob3dcIixcbiAgICBcImR1cGxleF9zaG93XCIsXG4gICAgXCJzeXNmc19nZXRfbGlua19rc2V0dGluZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBsb2NraW5nIGxvZ2ljIHdoZW4gcmVhZGluZyB0aGUgbmV0d29yayBkZXZpY2UgJ3NwZWVkJyBhbmQgJ2R1cGxleCcgc3lzZnMgYXR0cmlidXRlcy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIHRoZSBSVE5MIGxvY2ssIGl0IHVzZXMgcGVyLWRldmljZSBvcHMgbG9ja2luZyAobmV0ZGV2X2xvY2tfb3BzKSB3aGVuIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLCBjaGVja3MgZGV2X2lzYWxpdmUsIGFuZCBjYWxscyBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKS4gVGhpcyBhZmZlY3RzIHVzZXItYWNjZXNzaWJsZSBzeXNmcyBlbmRwb2ludHMgYW5kIG5ldHdvcmsgZGV2aWNlIGxvY2tpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDllMzZmN2E1M2ZkNTg2YTVkYTlhYjJiNDFjZGU0NWFmNDVjMDA5MzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODoxMzowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcbmluZGV4IDM1MjE3M2RmNzU3ODUuLjNlMDFlN2YzY2FjNzkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXQtc3lzZnMuY1xuKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcbkBAIC0xMTgsNiArMTE4LDU1IEBAIHN0YXRpYyBpbnQgc3lzZnNfcnRubF9sb2NrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLypcbisgKiBVc2UgdGhlIHBlci1kZXZpY2Ugb3BzIGxvY2sgd2l0aG91dCBSVE5MIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyBpdC5cbisgKiBMZWdhY3kgZGV2aWNlcyBhbmQgY2FsbGJhY2tzIHdoaWNoIGV4cGxpY2l0bHkgcmVxdWlyZSBSVE5MIHJldGFpbiB0aGVcbisgKiBleGlzdGluZyBsb2NraW5nLlxuKyAqL1xuK3N0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XG4rXHRpbnQgcmV0ID0gLUVJTlZBTDtcbitcdGJvb2wgbmVlZF9ydG5sO1xuK1xuK1x0LypcbitcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCk7IHRoaXMgaGVscHNcbitcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbitcdCAqL1xuK1x0aWYgKCFuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKG5ldGRldikgfHxcbitcdFx0ICAgIChuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjZcbitcdFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTKTtcbitcdGlmIChuZWVkX3J0bmwpIHtcbitcdFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFx1MDAyNmRldi1cdTAwM2Vrb2JqLCBcdTAwMjZhdHRyLVx1MDAzZWF0dHIsIG5ldGRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xuK1xuK1x0cmV0ID0gLUVJTlZBTDtcbitcdGlmICghZGV2X2lzYWxpdmUobmV0ZGV2KSkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0fSBlbHNlIGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbitcdFx0LypcbitcdFx0ICogS2VlcCB0aGUgc3lzZnMgQUJJOiByZXBvcnQgYW55IGNhbGxiYWNrIGVycm9yIGFzIC1FSU5WQUxcbitcdFx0ICogaW5zdGVhZCBvZiBwcm9wYWdhdGluZyB0aGUgZHJpdmVyJ3MgZXJyb3IgY29kZS5cbitcdFx0ICovXG4rXHRcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKSlcbitcdFx0XHRyZXQgPSAwO1xuK1x0fVxuK1xuK1x0bmV0ZGV2X3VubG9ja19vcHMobmV0ZGV2KTtcbitcdGlmIChuZWVkX3J0bmwpXG4rXHRcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwncyAqL1xuIHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLFxuQEAgLTMzMiwyNyArMzgxLDEzIEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTtcbiBzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbitcdGludCByZXQ7XG4gXG4tXHRyZXQgPSAtRUlOVkFMO1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuLVx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4rXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4gXG4tXHRcdGlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmNtZCkpXG4tXHRcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcbi1cdH1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oc3BlZWQpO1xuQEAgLTM2MCw0MSArMzk1LDI2IEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XG4gc3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IC1FSU5WQUw7XG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4tXHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbi1cbi1cdFx0aWYgKCFfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgXHUwMDI2Y21kKSkge1xuLVx0XHRcdGNvbnN0IGNoYXIgKmR1cGxleDtcbitcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbitcdGNvbnN0IGNoYXIgKmR1cGxleDtcbitcdGludCByZXQ7XG4gXG4tXHRcdFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcbi1cdFx0XHRjYXNlIERVUExFWF9IQUxGOlxuLVx0XHRcdFx0ZHVwbGV4ID0gXCJoYWxmXCI7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHRjYXNlIERVUExFWF9GVUxMOlxuLVx0XHRcdFx0ZHVwbGV4ID0gXCJmdWxsXCI7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHRkZWZhdWx0OlxuLVx0XHRcdFx0ZHVwbGV4ID0gXCJ1bmtub3duXCI7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIFwiJXNcXG5cIiwgZHVwbGV4KTtcbitcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4rXHRpZiAoIXJldCkge1xuK1x0XHRzd2l0Y2ggKGNtZC5iYXNlLmR1cGxleCkge1xuK1x0XHRjYXNlIERVUExFWF9IQUxGOlxuK1x0XHRcdGR1cGxleCA9IFwiaGFsZlwiO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIERVUExFWF9GVUxMOlxuK1x0XHRcdGR1cGxleCA9IFwiZnVsbFwiO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGR1cGxleCA9IFwidW5rbm93blwiO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4rXHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcIiVzXFxuXCIsIGR1cGxleCk7XG4gXHR9XG4tXHRydG5sX3VubG9jaygpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gc3RhdGljIERFVklDRV9BVFRSX1JPKGR1cGxleCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMzowOC44MDgxMTI3MzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTEwODA5MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3lzdGVtIEZpbGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoZSBkaWZmIGlzIHBvaW50aW5nIG1lIHRvIGNoYW5nZXMgaW4gYG5ldC9jb3JlL25ldC1zeXNmcy5jYC4gVGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBtb2RpZmllZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSBkaWZmIGl0c2VsZiDigJMgbG9va2luZyBmb3IgdGhlIG1lYXQgb2YgdGhlIGFsdGVyYXRpb25zLCBvZiBjb3Vyc2UsIG5vdGluZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBsaWtlbHkgaW50ZW50aW9ucy4gVGhlbiwgSSdsbCBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlIGFuZCBuZXQgc3Vic3lzdGVtIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGFjdHMuIEEgYGdyZXBgIG9mIHRoZSBmaWxlLCBvciBtYXliZSBqdXN0IGEgcXVpY2sgcmVhZCwgc2hvdWxkIHBpbnBvaW50IHRoZSBrZXkgbGluZXMgb2YgY29kZSBhbmQgdGhlIHNwZWNpZmljIGFyZWFzIHRvdWNoZWQuIEknbGwgbmVlZCB0byB1c2UgYWxsIG15IHRvb2xzIGFuZCBleHBlcmllbmNlIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB0aGlzOyBvbmx5IHRoZW4gY2FuIEkgYXNzZXNzIHRoZSBxdWFsaXR5IG9mIHRoZXNlIGFsdGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMzoxNS43MTg5MjY4OTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMTMyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmV0LXN5c2ZzLmM9Njk9c3RhdGljIGludCBzeXNmc19ydG5sX2xvY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMjUtICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTI2OnN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMjctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MzgxPXN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzg2LVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjM4NzpcXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcXHUwMDI2Y21kKTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zODgtXFx0aWYgKCFyZXQpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0zOTU9c3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtNDAxLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjQwMjpcXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcXHUwMDI2Y21kKTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy00MDMtXFx0aWYgKCFyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6MTUuODU5MDY0MzU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAxMjg2OTY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNwZWNpZmllZCBzZWN0aW9ucyBvZiBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLCBmb2N1c2luZyBvbiB0aGUgY29yZSBpZGVhcyBmcm9tIGFuIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBuZXQtc3lzZnMuYzogQSBUYXJnZXRlZCBTY2FuKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiBgbmV0LXN5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgdGhvc2Ugc2VjdGlvbnMgYXJvdW5kIGxpbmVzIDExMC0xODAgYW5kIDM4MC00MjAuIEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBsYXJnZXIgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgaW50ZXJmYWNlLiBGcm9tIHRoZSBsaW5lIG51bWJlcnMgYWxvbmUsIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBibG9ja3MgZGVhbCB3aXRoIHRoZSBjcml0aWNhbCBkZXRhaWxzIG9mIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgbmV0d29yayBkZXZpY2UgaW5mb3JtYXRpb24gYW5kIGNvbnRyb2wgcGFyYW1ldGVycyB2aWEgc3lzZnMuXG5cbk15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IGxpbmVzIDExMC0xODAgYXJlIGxpa2VseSBpbnZvbHZlZCBpbiBjcmVhdGluZyBvciBoYW5kbGluZyB0aGUgYXR0cmlidXRlcyBhbmQgZmlsZXMgd2l0aGluIHRoZSBgL3N5cy9jbGFzcy9uZXQvYCBkaXJlY3RvcnkgZm9yIGVhY2ggbmV0d29yayBpbnRlcmZhY2UuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lY2hhbmlzbXMgYnkgd2hpY2ggYXR0cmlidXRlcywgbGlrZSBgb3BlcnN0YXRlYCwgYGNhcnJpZXJgLCBgYWRkcmVzc2AgYW5kIG1hbnkgbW9yZSwgYXJlIGRlZmluZWQsIGNyZWF0ZWQsIGFuZCB1cGRhdGVkLiBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgbWFuYWdpbmcgdGhvc2UuXG5cblRoZSBzZWNvbmQgc2VjdGlvbiwgYXJvdW5kIGxpbmVzIDM4MC00MjAsIGlzIGxpa2VseSB0byBiZSBjZW50ZXJlZCBhcm91bmQgY3JlYXRpbmcsIGRlc3Ryb3lpbmcsIG9yIGNvbmZpZ3VyaW5nIHNwZWNpZmljIGF0dHJpYnV0ZXMgcmVsYXRpbmcgdG8gbmV0d29yayBkZXZpY2VzIHRoYXQgYXJlIHJlcHJlc2VudGVkIGluIGBzeXNmc2AuIFBlcmhhcHMgdGhpcyBtaWdodCBpbnZvbHZlIHJlZ2lzdGVyaW5nIG9yIHVucmVnaXN0ZXJpbmcgc3BlY2lmaWMgZGF0YSBlbGVtZW50cywgZGVmaW5pbmcgcGVybWlzc2lvbnMgb24gYXR0cmlidXRlcywgb3IgdXBkYXRpbmcgdGhlaXIgdmFsdWVzIGFzIHRoZSBkZXZpY2UgY2hhbmdlcyBzdGF0ZS4gSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgc2VjdGlvbiBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjay4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSB1c2VzIG9mIGBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkYCwgYHN5c2ZzX2NyZWF0ZV9maWxlYCwgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBzaWduYWwgZHluYW1pYyBhdHRyaWJ1dGUgY3JlYXRpb24uIEkgYWxzbyB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIHJvdXRpbmVzLiBJJ20gZXhwZWN0aW5nIGEgbG90IG9mIGludGVyYWN0aW9uIHdpdGggdGhlIGNvcmUgYGtvYmplY3RgIGluZnJhc3RydWN0dXJlIGFuZCB0aGUgYHN0cnVjdCBhdHRyaWJ1dGVgIGRlZmluaXRpb25zIHVzZWQgZm9yIHN5c2ZzLiBJJ20gaG9waW5nIHRvIGJlIGFibGUgdG8gbWFwIHRoZXNlIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyB0byBzcGVjaWZpYyBmZWF0dXJlcyBvciBjb250cm9sIHBvaW50cyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEl0IHNob3VsZCBiZSBhIGdvb2QgZGVlcC1kaXZlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDk5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6MTkuODcxOTM4MjA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldC1zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXHRzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTtcXG4gMTE2OlxcdFxcdGRldl9wdXQobmRldik7XFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdHJldHVybiByZXQ7XFxuIDExOTpcXHR9XFxuIDEyMDpcXHRcXG4gMTIxOlxcdC8qXFxuIDEyMjpcXHQgKiBVc2UgdGhlIHBlci1kZXZpY2Ugb3BzIGxvY2sgd2l0aG91dCBSVE5MIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyBpdC5cXG4gMTIzOlxcdCAqIExlZ2FjeSBkZXZpY2VzIGFuZCBjYWxsYmFja3Mgd2hpY2ggZXhwbGljaXRseSByZXF1aXJlIFJUTkwgcmV0YWluIHRoZVxcbiAxMjQ6XFx0ICogZXhpc3RpbmcgbG9ja2luZy5cXG4gMTI1OlxcdCAqL1xcbiAxMjY6XFx0c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxcbiAxMjc6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiAxMjg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuIDEyOTpcXHR7XFxuIDEzMDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xcbiAxMzE6XFx0XFx0aW50IHJldCA9IC1FSU5WQUw7XFxuIDEzMjpcXHRcXHRib29sIG5lZWRfcnRubDtcXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0LypcXG4gMTM1OlxcdFxcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCk7IHRoaXMgaGVscHNcXG4gMTM2OlxcdFxcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cXG4gMTM3OlxcdFxcdCAqL1xcbiAxMzg6XFx0XFx0aWYgKCFuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXFxuIDEzOTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSB8fFxcbiAxNDI6XFx0XFx0XFx0ICAgIChuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjZcXG4gMTQzOlxcdFxcdFxcdCAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7XFxuIDE0NDpcXHRcXHRpZiAobmVlZF9ydG5sKSB7XFxuIDE0NTpcXHRcXHRcXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXFx1MDAyNmRldi1cXHUwMDNla29iaiwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHIsIG5ldGRldik7XFxuIDE0NjpcXHRcXHRcXHRpZiAocmV0KVxcbiAxNDc6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTQ4OlxcdFxcdH1cXG4gMTQ5OlxcdFxcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiAxNTI6XFx0XFx0aWYgKCFkZXZfaXNhbGl2ZShuZXRkZXYpKSB7XFxuIDE1MzpcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbiAxNTQ6XFx0XFx0fSBlbHNlIGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcXG4gMTU1OlxcdFxcdFxcdC8qXFxuIDE1NjpcXHRcXHRcXHQgKiBLZWVwIHRoZSBzeXNmcyBBQkk6IHJlcG9ydCBhbnkgY2FsbGJhY2sgZXJyb3IgYXMgLUVJTlZBTFxcbiAxNTc6XFx0XFx0XFx0ICogaW5zdGVhZCBvZiBwcm9wYWdhdGluZyB0aGUgZHJpdmVyJ3MgZXJyb3IgY29kZS5cXG4gMTU4OlxcdFxcdFxcdCAqL1xcbiAxNTk6XFx0XFx0XFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxcbiAxNjA6XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4gMTYxOlxcdFxcdH1cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0bmV0ZGV2X3VubG9ja19vcHMobmV0ZGV2KTtcXG4gMTY0OlxcdFxcdGlmIChuZWVkX3J0bmwpXFxuIDE2NTpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNjg6XFx0fVxcbiAxNjk6XFx0XFxuIDE3MDpcXHQvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwncyAqL1xcbiAxNzE6XFx0c3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxcbiAxNzI6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZixcXG4gMTczOlxcdFxcdFxcdFxcdCAgIHNzaXplX3QgKCpmb3JtYXQpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICosIGNoYXIgKikpXFxuIDE3NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjE5Ljg3MjE0Mjk0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjU4NTk3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEtlcm5lbCBNb2R1bGUgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGVuYWJsaW5nIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AuIFRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBidWlsZC10aW1lIGRlcGVuZGVuY2llcy4gVGhhdCBtZWFucyBkaWdnaW5nIGludG8gdGhlIGJ1aWxkIHN5c3RlbSDigJMgdGhlIGBNYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcyB0aGF0IGNvbnRyb2wgd2hhdCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYE1ha2VmaWxlYCBpbiB0aGF0IGRpcmVjdG9yeSBpdHNlbGY7IHRoYXQnbGwgcHJvYmFibHkgaGF2ZSB0aGUgaW5jbHVkZSBkaXJlY3RpdmVzLCBvciBhdCBsZWFzdCBwb2ludCBtZSB0b3dhcmQgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBvcHRpb25zLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiwgc2VlIHdoYXQncyB1bHRpbWF0ZWx5IHB1bGxpbmcgdGhhdCBtb2R1bGUgaW50byB0aGUgYnVpbGQuIFNob3VsZCBiZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgcHJvY2VzcywgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ghIEtub3dpbmcgdGhlIGRlcGVuZGVuY3kgdHJlZSBsaWtlIHRoaXMgaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgdHJvdWJsZXNob290aW5nIGJ1aWxkIGlzc3VlcyBvciBjb25mbGljdHMgZG93biB0aGUgcm9hZC4gQWxyaWdodCwgbGV0J3MgZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjIyLjIzODAwNTY1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEzNDc4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0LXN5c2ZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xOD1vYmotJChDT05GSUdfTkVUREVWX0FERFJfTElTVF9URVNUKSArPSBkZXZfYWRkcl9saXN0c190ZXN0Lm9cXG5uZXQvY29yZS9NYWtlZmlsZS0xOS1cXG5uZXQvY29yZS9NYWtlZmlsZToyMDpvYmoteSArPSBuZXQtc3lzZnMub1xcbm5ldC9jb3JlL01ha2VmaWxlLTIxLW9iai15ICs9IGhvdGRhdGEub1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTY4LSNpbmNsdWRlIFxcXCJkZXZtZW0uaFxcXCJcXG5uZXQvY29yZS9kZXYuYzoxNjk6I2luY2x1ZGUgXFxcIm5ldC1zeXNmcy5oXFxcIlxcbm5ldC9jb3JlL2Rldi5jLTE3MC1cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTItLypcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozOiAqIG5ldC1zeXNmcy5jIC0gbmV0d29yayBkZXZpY2UgY2xhc3MgYW5kIGF0dHJpYnV0ZXNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy00LSAqXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zMC0jaW5jbHVkZSBcXFwiZGV2LmhcXFwiXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MzE6I2luY2x1ZGUgXFxcIm5ldC1zeXNmcy5oXFxcIlxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTMyLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtOTctI2luY2x1ZGUgXFxcImRldm1lbS5oXFxcIlxcbm5ldC9jb3JlL3NrYnVmZi5jOjk4OiNpbmNsdWRlIFxcXCJuZXQtc3lzZnMuaFxcXCJcXG5uZXQvY29yZS9za2J1ZmYuYy05OS0jaW5jbHVkZSBcXFwibmV0bWVtX3ByaXYuaFxcXCJcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTMxLSNpbmNsdWRlIFxcXCJkZXYuaFxcXCJcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozMjojaW5jbHVkZSBcXFwibmV0LXN5c2ZzLmhcXFwiXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjIyLjM5OTM1OTUwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2OTcwMzIxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBuZXQtc3lzZnMuYyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldC9jb3JlL25ldC1zeXNmcy5jYCBhcmUgc3ViamVjdCB0byBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLiBFeHBlcmllbmNlIHRlbGxzIG1lIHRoYXQncyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCBgI2lmZGVmYCBibG9ja3Mgb3Igb3RoZXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBnYXRlIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3Igb2YgdGhvc2UgZnVuY3Rpb25zLiBJ4oCZbGwgc3RhcnQgdGhlcmUgYW5kIHNjYW4gZm9yIGFueSBpbnN0YW5jZXMgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB3cmFwcGVkIHdpdGhpbiBjb25kaXRpb25hbCBibG9ja3MuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBhbnN3ZXIgYWJvdXQgd2hldGhlciB0aGVpciBhdmFpbGFiaWxpdHkgaXMgZGVwZW5kZW50IG9uIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBidWlsZCBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTc2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6MjkuMDk2Mzk1ODMyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXQtc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIG5ldC1zeXNmcy5jIC0gbmV0d29yayBkZXZpY2UgY2xhc3MgYW5kIGF0dHJpYnV0ZXNcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMDMgU3RlcGhlbiBIZW1taW5nZXIgXFx1MDAzY3NoZW1taW5nZXJAb3NkbC5vcmdcXHUwMDNlXFxuICAgNjpcXHQgKi9cXG4gICA3OlxcdFxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFxcdTAwM2VcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9hcnAuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbnNwcm94eS5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICAyMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvamlmZmllcy5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFxcdTAwM2VcXG4gIDIzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAgMjQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX25ldC5oXFx1MDAzZVxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdS5oXFx1MDAzZVxcbiAgMjY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXFx1MDAzZVxcbiAgMjc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfcnhfcXVldWUuaFxcdTAwM2VcXG4gIDI4OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvcnBzLmhcXHUwMDNlXFxuICAyOTpcXHRcXG4gIDMwOlxcdCNpbmNsdWRlIFxcXCJkZXYuaFxcXCJcXG4gIDMxOlxcdCNpbmNsdWRlIFxcXCJuZXQtc3lzZnMuaFxcXCJcXG4gIDMyOlxcdFxcbiAgMzM6XFx0I2lmZGVmIENPTkZJR19TWVNGU1xcbiAgMzQ6XFx0c3RhdGljIGNvbnN0IGNoYXIgZm10X2hleFtdID0gXFxcIiUjeFxcXFxuXFxcIjtcXG4gIDM1OlxcdHN0YXRpYyBjb25zdCBjaGFyIGZtdF9kZWNbXSA9IFxcXCIlZFxcXFxuXFxcIjtcXG4gIDM2OlxcdHN0YXRpYyBjb25zdCBjaGFyIGZtdF91aW50W10gPSBcXFwiJXVcXFxcblxcXCI7XFxuICAzNzpcXHRzdGF0aWMgY29uc3QgY2hhciBmbXRfdWxvbmdbXSA9IFxcXCIlbHVcXFxcblxcXCI7XFxuICAzODpcXHRzdGF0aWMgY29uc3QgY2hhciBmbXRfdTY0W10gPSBcXFwiJWxsdVxcXFxuXFxcIjtcXG4gIDM5OlxcdFxcbiAgNDA6XFx0LyogVGhlcmUgaXMgYSBwb3NzaWJsZSBBQkJBIGRlYWRsb2NrIGJldHdlZW4gcnRubF9sb2NrIGFuZCBrZXJuZnNfbm9kZS1cXHUwMDNlYWN0aXZlLFxcbiAgNDE6XFx0ICogd2hlbiB1bnJlZ2lzdGVyaW5nIGEgbmV0IGRldmljZSBhbmQgYWNjZXNzaW5nIGFzc29jaWF0ZWQgc3lzZnMgZmlsZXMuIFRoZVxcbiAgNDI6XFx0ICogcG90ZW50aWFsIGRlYWRsb2NrIGlzIGFzIGZvbGxvdzpcXG4gIDQzOlxcdCAqXFxuICA0NDpcXHQgKiAgICAgICAgIENQVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFUgMVxcbiAgNDU6XFx0ICpcXG4gIDQ2OlxcdCAqICAgIHJ0bmxfbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmZzX3JlYWRcXG4gIDQ3OlxcdCAqICAgIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkgICAgICAgICAgICAgICAgICAga2VybmZzX3NlcV9zdGFydFxcbiAgNDg6XFx0ICogICAgZGV2aWNlX2RlbCAvIGtvYmplY3RfcHV0ICAgICAgICAgICAgICAgICAgICAgIGtlcm5mc19nZXRfYWN0aXZlIChrbi1cXHUwMDNlYWN0aXZlKyspXFxuICA0OTpcXHQgKiAgICBrZXJuZnNfZHJhaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2ZzX2tmX3NlcV9zaG93XFxuICA1MDpcXHQgKiAgICB3YWl0X2V2ZW50KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0bmxfbG9ja1xcbiAgNTE6XFx0ICogICAgICAga24tXFx1MDAzZWFjdGl2ZSA9PSBLTl9ERUFDVElWQVRFRF9CSUFTKSAgICAgICAtXFx1MDAzZSB3YWl0cyBvbiBDUFUgMCB0byByZWxlYXNlXFxuICA1MjpcXHQgKiAgICAtXFx1MDAzZSB3YWl0cyBvbiBDUFUgMSB0byBkZWNyZWFzZSBrbi1cXHUwMDNlYWN0aXZlICAgICAgIHRoZSBydG5sIGxvY2suXFxuICA1MzpcXHQgKlxcbiAgNTQ6XFx0ICogVGhlIGhpc3RvcmljYWwgZml4IHdhcyB0byB1c2UgcnRubF90cnlsb2NrIHdpdGggcmVzdGFydF9zeXNjYWxsIHRvIGJhaWwgb3V0XFxuICA1NTpcXHQgKiBvZiBzeXNmcyBvcGVyYXRpb25zIHdoZW4gdGhlIGxvY2sgY291bGRuJ3QgYmUgdGFrZW4uIFRoaXMgZml4ZWQgdGhlIGFib3ZlXFxuICA1NjpcXHQgKiBpc3N1ZSBhcyBpdCBhbGxvd2VkIENQVSAxIHRvIGJhaWwgb3V0IG9mIHRoZSBBQkJBIHNpdHVhdGlvbi5cXG4gIDU3OlxcdCAqXFxuICA1ODpcXHQgKiBCdXQgaXQgY2FtZSB3aXRoIHBlcmZvcm1hbmNlcyBpc3N1ZXMsIGFzIHN5c2NhbGxzIGFyZSBiZWluZyByZXN0YXJ0ZWQgaW5cXG4gIDU5OlxcdCAqIGxvb3BzIHdoZW4gdGhlcmUgd2FzIGNvbnRlbnRpb24gb24gdGhlIHJ0bmwgbG9jaywgd2l0aCBodWdlIHNsb3cgZG93bnMgaW5cXG4gIDYwOlxcdCAqIHNwZWNpZmljIHNjZW5hcmlvcyAoZS5nLiBsb3RzIG9mIHZpcnR1YWwgaW50ZXJmYWNlcyBjcmVhdGVkIGFuZCB1c2Vyc3BhY2VcXG4gIDYxOlxcdCAqIGRhZW1vbnMgcXVlcnlpbmcgdGhlaXIgYXR0cmlidXRlcykuXFxuICA2MjpcXHQgKlxcbiAgNjM6XFx0ICogVGhlIGlkZWEgYmVsb3cgaXMgdG8gYmFpbCBvdXQgb2YgdGhlIGFjdGl2ZSBrZXJuZnNfbm9kZSBwcm90ZWN0aW9uXFxuICA2NDpcXHQgKiAoa24tXFx1MDAzZWFjdGl2ZSkgd2hpbGUgdHJ5aW5nIHRvIHRha2UgdGhlIHJ0bmwgbG9jay5cXG4gIDY1OlxcdCAqXFxuICA2NjpcXHQgKiBUaGlzIHJlcGxhY2VzIHJ0bmxfbG9jaygpIGFuZCBzdGlsbCBoYXMgdG8gYmUgdXNlZCB3aXRoIHJ0bmxfdW5sb2NrKCkuIFRoZVxcbiAgNjc6XFx0ICogbmV0IGRldmljZSBpcyBndWFyYW50ZWVkIHRvIGJlIGFsaXZlIGlmIHRoaXMgcmV0dXJucyBzdWNjZXNzZnVsbHkuXFxuICA2ODpcXHQgKi9cXG4gIDY5OlxcdHN0YXRpYyBpbnQgc3lzZnNfcnRubF9sb2NrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbiAgNzA6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuICA3MTpcXHR7XFxuICA3MjpcXHRcXHRzdHJ1Y3Qga2VybmZzX25vZGUgKmtuO1xcbiAgNzM6XFx0XFx0aW50IHJldCA9IDA7XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdC8qIEZpcnN0LCB3ZSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXQgZGV2aWNlIGFzIHRoZSB1bnJlZ2lzdHJhdGlvblxcbiAgNzY6XFx0XFx0ICogcGF0aCBtaWdodCBydW4gaW4gcGFyYWxsZWwuIFRoaXMgd2lsbCBlbnN1cmUgdGhlIG5ldCBkZXZpY2UgYW5kIHRoZVxcbiAgNzc6XFx0XFx0ICogYXNzb2NpYXRlZCBzeXNmcyBvYmplY3RzIHdvbid0IGJlIGZyZWVkIHdoaWxlIHdlIHRyeSB0byB0YWtlIHRoZSBydG5sXFxuICA3ODpcXHRcXHQgKiBsb2NrLlxcbiAgNzk6XFx0XFx0ICovXFxuICA4MDpcXHRcXHRkZXZfaG9sZChuZGV2KTtcXG4gIDgxOlxcdFxcdC8qIHN5c2ZzX2JyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uIHdhcyBpbnRyb2R1Y2VkIHRvIGFsbG93IHNlbGYtcmVtb3ZhbCBvZlxcbiAgODI6XFx0XFx0ICogZGV2aWNlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBzeXNmcyBmaWxlcyBieSBiYWlsaW5nIG91dCBvZiB0aGVcXG4gIDgzOlxcdFxcdCAqIHN5c2ZzL2tlcm5mcyBwcm90ZWN0aW9uLiBXZSBkbyB0aGlzIGhlcmUgdG8gYWxsb3cgdGhlIHVucmVnaXN0cmF0aW9uXFxuICA4NDpcXHRcXHQgKiBwYXRoIHRvIGNvbXBsZXRlIGluIHBhcmFsbGVsLiBUaGUgZm9sbG93aW5nIHRha2VzIGEgcmVmZXJlbmNlIG9uIHRoZVxcbiAgODU6XFx0XFx0ICoga29iamVjdCBhbmQgdGhlIGtlcm5mc19ub2RlIGJlaW5nIGFjY2Vzc2VkLlxcbiAgODY6XFx0XFx0ICpcXG4gIDg3OlxcdFxcdCAqIFRoaXMgd29ya3MgYmVjYXVzZSB3ZSBob2xkIGEgcmVmZXJlbmNlIG9udG8gdGhlIG5ldCBkZXZpY2UgYW5kIHRoZVxcbiAgODg6XFx0XFx0ICogdW5yZWdpc3RyYXRpb24gcGF0aCB3aWxsIHdhaXQgZm9yIHVzIGV2ZW50dWFsbHkgaW4gbmV0ZGV2X3J1bl90b2RvXFxuICA4OTpcXHRcXHQgKiAob3V0c2lkZSBhbiBydG5sIGxvY2sgc2VjdGlvbikuXFxuICA5MDpcXHRcXHQgKi9cXG4gIDkxOlxcdFxcdGtuID0gc3lzZnNfYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa29iaiwgYXR0cik7XFxuICA5MjpcXHRcXHQvKiBXZSBjYW4gbm93IHRyeSB0byB0YWtlIHRoZSBydG5sIGxvY2suIFRoaXMgY2FuJ3QgZGVhZGxvY2sgdXMgYXMgdGhlXFxuICA5MzpcXHRcXHQgKiB1bnJlZ2lzdHJhdGlvbiBwYXRoIGlzIGFibGUgdG8gZHJhaW4gc3lzZnMgZmlsZXMgKGtlcm5mc19ub2RlKSB0aGFua3NcXG4gIDk0OlxcdFxcdCAqIHRvIHRoZSBhYm92ZSBkYW5jZS5cXG4gIDk1OlxcdFxcdCAqL1xcbiAgOTY6XFx0XFx0aWYgKHJ0bmxfbG9ja19pbnRlcnJ1cHRpYmxlKCkpIHtcXG4gIDk3OlxcdFxcdFxcdHJldCA9IC1FUkVTVEFSVFNZUztcXG4gIDk4OlxcdFxcdFxcdGdvdG8gdW5icmVhaztcXG4gIDk5OlxcdFxcdH1cXG4gMTAwOlxcdFxcdC8qIENoZWNrIGRpc21hbnRsZSBvbiB0aGUgZGV2aWNlIGhhc24ndCBzdGFydGVkLCBvdGhlcndpc2UgZGVueSB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6MjkuMDk2NjY5ODYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NTg3Mzc3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIEknbSB0aGlua2luZywgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZT8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIHRyYWNlIGl0cyBkZWNsYXJhdGlvbiB0byBmaWd1cmUgb3V0IGl0cyBwcm90b3R5cGUgYW5kLCBjcnVjaWFsbHksIHVuZGVyc3RhbmQgd2hpY2ggZGF0YSBzdHJ1Y3R1cmVzIGl0IG9wZXJhdGVzIG9uLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgYXJndW1lbnRzIGl0IHRha2VzIGFuZCB3aGF0IGl0IHJldHVybnMsIGFuZCBsaWtlbHkgZGl2ZSBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLiBLbm93aW5nIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbmV0d29yayBzdGFjayBpcyBrZXkuIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjMwLjg1NTQwOTg3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyOTU0NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGlmX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfaWYuYz0zNj1zdGF0aWMgaW50IHBvcnRfY29zdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jLTM5LVxcbm5ldC9icmlkZ2UvYnJfaWYuYzo0MDpcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZlY21kKSkge1xcbm5ldC9icmlkZ2UvYnJfaWYuYy00MS1cXHRcXHRzd2l0Y2ggKGVjbWQuYmFzZS5zcGVlZCkge1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTI2PXN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNC1cXHQvKlxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzNTpcXHQgKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpOyB0aGlzIGhlbHBzXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM2LVxcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE1OC1cXHRcXHQgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxNTk6XFx0XFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE2MC1cXHRcXHRcXHRyZXQgPSAwO1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz00Mjk9c3RydWN0IGV0aHRvb2xfbGlua191c2V0dGluZ3Mge1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00MzgtLyogSW50ZXJuYWwga2VybmVsIGhlbHBlciB0byBxdWVyeSBhIGRldmljZSBldGh0b29sX2xpbmtfc2V0dGluZ3MuICovXFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0Mzk6aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDQwLVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NTItfVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDUzOkVYUE9SVF9TWU1CT0wobmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ1NC1cXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9NDU2PWludCBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2My1cXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjQ2NDpcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NjUtXFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM9MjQ9c3RhdGljIGludCBsaW5raW5mb19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMzYtXFx0XFx0cmV0dXJuIHJldDtcXG5uZXQvZXRodG9vbC9saW5raW5mby5jOjM3OlxcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZkYXRhLVxcdTAwM2Vrc2V0dGluZ3MpO1xcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMzgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvZXRodG9vbC9saW5raW5mby5jPTk4PWV0aG5sX3NldF9saW5raW5mbyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbGlua2luZm8uYy0xMDYtXFxubmV0L2V0aHRvb2wvbGlua2luZm8uYzoxMDc6XFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXFx1MDAyNmtzZXR0aW5ncyk7XFxubmV0L2V0aHRvb2wvbGlua2luZm8uYy0xMDgtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jPTI4PXN0YXRpYyBpbnQgbGlua21vZGVzX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxcbi0tXFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmMtNDEtXFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM6NDI6XFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXFx1MDAyNmRhdGEtXFx1MDAzZWtzZXR0aW5ncyk7XFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmMtNDMtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jPTMxOT1ldGhubF9zZXRfbGlua21vZGVzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy0zMjYtXFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM6MzI3OlxcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZrc2V0dGluZ3MpO1xcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTMyOC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYnMuYz0zMjM9c3RhdGljIHZvaWQgY2JzX3NldF9wb3J0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNic19zY2hlZF9kYXRhICpxKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYnMuYy0zMjktXFxubmV0L3NjaGVkL3NjaF9jYnMuYzozMzA6XFx0ZXJyID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXFx1MDAyNmVjbWQpO1xcbm5ldC9zY2hlZC9zY2hfY2JzLmMtMzMxLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMjk0PXN0YXRpYyB2b2lkIHRhcHJpb19zZXRfcGljb3NfcGVyX2J5dGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMwMi1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzMDM6XFx0ZXJyID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXFx1MDAyNmVjbWQpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMwNC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6MzEuMDM4MzcyMzE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMzQxMTQyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgRGV2aWNlIFN5c2ZzIEF0dHJpYnV0ZXMgYW5kIExvY2tpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRoZSBgc3BlZWRgIGFuZCBgZHVwbGV4YCBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYC9zeXMvY2xhc3MvbmV0L1x1MDAzY2lmbmFtZVx1MDAzZS9gIGhpZXJhcmNoeSBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYG5ldC9jb3JlL25ldC1zeXNmcy5jYC4gSXQgc2VlbXMgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBQcmV2aW91c2x5LCByZXRyaWV2aW5nIHRoZSBsaW5rIHNldHRpbmdzIGZvciB0aGVzZSBhdHRyaWJ1dGVzIGFsd2F5cyBpbnZvbHZlZCBhY3F1aXJpbmcgdGhlIGBydG5sX2xvY2tgIGFuZCB0aGVuIGNhbGxpbmcgYF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3NgLiBOb3csIHRoZSBjb2RlIHVzZXMgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AgaW5zdGVhZC5cblxuVGhpcyBuZXcgZnVuY3Rpb24gaW50cm9kdWNlcyBhIG1vcmUgbnVhbmNlZCBsb2NraW5nIHN0cmF0ZWd5LiBJbnN0ZWFkIG9mIGFsd2F5cyBncmFiYmluZyB0aGUgYHJ0bmxfbG9ja2AsIGl0IG5vdyB1c2VzIHRoZSBwZXItZGV2aWNlIG9wZXJhdGlvbnMgbG9jaywgYG5ldGRldl9sb2NrX29wcyhuZXRkZXYpYCwgd2hlbiB0aGUgbmV0d29yayBkZXZpY2Ugc3VwcG9ydHMgaXQuIFRoZSBgcnRubF9sb2NrYCBpcyBvbmx5IHJldGFpbmVkIGlmIHRoZSBkZXZpY2UgKm5lZWRzKiBpdCwgZGV0ZXJtaW5lZCBieSBgbmV0ZGV2X25lZWRfb3BzX2xvY2tgIGFuZCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HU2AuIEFkZGl0aW9uYWxseSwgYSBjaGVjayBmb3IgYGRldl9pc2FsaXZlKG5ldGRldilgIGlzIG5vdyBwcmVzZW50LCBhbmQgYG5ldGlmX3J1bm5pbmcobmV0ZGV2KWAgaXMgY2hlY2tlZCBiZWZvcmUgdGhlIGNhbGwgdG8gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZClgLlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGUgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50PyBBYnNvbHV0ZWx5LiBBbnkgdXNlcnNwYWNlIHByb2Nlc3MgY2FuIHJlYWQgdGhlc2Ugc3lzZnMgYXR0cmlidXRlcywgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuIFRoaW5rIHN0YW5kYXJkIHN5c2ZzIHJlYWRzLCBvciB0aGUgd2F5IHN5emthbGxlciBvcGVyYXRlcywgb3IgZXZlbiBjb25jdXJyZW50IG1hbmlwdWxhdGlvbiBvZiBpbnRlcmZhY2VzIHdpdGggc3lzZnMgcmVhZHMuIEFuZCB0aGUgbmV0d29yayBpbnRlcmZhY2VzIHRoZW1zZWx2ZXMgKGR1bW15LCB2ZXRoLCBsb29wYmFjaywgZXRjLikgYXJlIHJlYWRpbHkgYXZhaWxhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRS5cblxuU28sIHRoaXMgY2hhbmdlIGhhcyBzaWduaWZpY2FudCBjb25jdXJyZW5jeSBpbXBsaWNhdGlvbnMuIEl0IGNoYW5nZXMgdGhlIGxvY2tpbmcgcnVsZXMgZm9yIHN5c2ZzIHF1ZXJpZXMsIGZhdm9yaW5nIGBuZXRkZXZfbG9ja19vcHNgIHdoZXJlIHBvc3NpYmxlLCBidXQgcHJlc2VydmluZyBSVE5MIGxvY2tpbmcgd2hlcmUgbmVjZXNzYXJ5LCBhbmQgYWRkaW5nIHRoZSBgZGV2X2lzYWxpdmVgIGNoZWNrLiBUaGlzIGhhcyBtZSB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gbmV0ZGV2aWNlIGxpZmVjeWNsZSwgdGhlIHBlci1kZXZpY2UgbG9jaywgc3lzZnMgYWNjZXNzLCBhbmQgdGhlIFJUTkwgbG9jay4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlc2UgbG9ja2luZyBpbnRlcmFjdGlvbnMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgYXJlIGluZGVlZCB0aGUgc3RhdGljIGZ1bmN0aW9ucyBJIHRoaW5rIHRoZXkgYXJlIGFuZCBob3cgdGhleSBhcmUgcmVmZXJlbmNlZCBpbiB0aGUgYGRldmljZV9hdHRyaWJ1dGVgIHN0cnVjdHVyZXMuIEknbGwgbmVlZCB0byBwb3JlIG92ZXIgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMzozNy4xNzI0ODk1MDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldC1zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4MDpcXHRcXG4gMzgxOlxcdHN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiAzODI6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiAzODM6XFx0e1xcbiAzODQ6XFx0XFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xcbiAzODU6XFx0XFx0aW50IHJldDtcXG4gMzg2OlxcdFxcbiAzODc6XFx0XFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXFx1MDAyNmNtZCk7XFxuIDM4ODpcXHRcXHRpZiAoIXJldClcXG4gMzg5OlxcdFxcdFxcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XFxuIDM5MDpcXHRcXG4gMzkxOlxcdFxcdHJldHVybiByZXQ7XFxuIDM5MjpcXHR9XFxuIDM5MzpcXHRzdGF0aWMgREVWSUNFX0FUVFJfUk8oc3BlZWQpO1xcbiAzOTQ6XFx0XFxuIDM5NTpcXHRzdGF0aWMgc3NpemVfdCBkdXBsZXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIDM5NjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiAzOTc6XFx0e1xcbiAzOTg6XFx0XFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xcbiAzOTk6XFx0XFx0Y29uc3QgY2hhciAqZHVwbGV4O1xcbiA0MDA6XFx0XFx0aW50IHJldDtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXFx1MDAyNmNtZCk7XFxuIDQwMzpcXHRcXHRpZiAoIXJldCkge1xcbiA0MDQ6XFx0XFx0XFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcXG4gNDA1OlxcdFxcdFxcdGNhc2UgRFVQTEVYX0hBTEY6XFxuIDQwNjpcXHRcXHRcXHRcXHRkdXBsZXggPSBcXFwiaGFsZlxcXCI7XFxuIDQwNzpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDA4OlxcdFxcdFxcdGNhc2UgRFVQTEVYX0ZVTEw6XFxuIDQwOTpcXHRcXHRcXHRcXHRkdXBsZXggPSBcXFwiZnVsbFxcXCI7XFxuIDQxMDpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDExOlxcdFxcdFxcdGRlZmF1bHQ6XFxuIDQxMjpcXHRcXHRcXHRcXHRkdXBsZXggPSBcXFwidW5rbm93blxcXCI7XFxuIDQxMzpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDE0OlxcdFxcdFxcdH1cXG4gNDE1OlxcdFxcdFxcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIGR1cGxleCk7XFxuIDQxNjpcXHRcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdFxcdHJldHVybiByZXQ7XFxuIDQxOTpcXHR9XFxuIDQyMDpcXHRzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTtcXG4gNDIxOlxcdFxcbiA0MjI6XFx0c3RhdGljIHNzaXplX3QgdGVzdGluZ19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gNDIzOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiA0MjQ6XFx0e1xcbiA0MjU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcXG4gNDI2OlxcdFxcbiA0Mjc6XFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4gNDI4OlxcdFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgISFuZXRpZl90ZXN0aW5nKG5ldGRldikpO1xcbiA0Mjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjM3LjE3Mjc1MzcyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzY1MDcyMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29yZSBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxhbmRzY2FwZSBvZiBzeW1ib2xzIHdpdGhpbiBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIHN5bWJvbHMgZGVmaW5lZCB3aXRoaW4gdGhhdCBmaWxlIGl0c2VsZi4gTW9yZSBicm9hZGx5LCB0aG91Z2gsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgc3ltYm9scyBhcmUgKmV4cG9ydGVkKiBvciAqZGVmaW5lZCogd2l0aGluIHRoYXQgc3BlY2lmaWMgZmlsZSBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byBpdC4gRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gbWFwIG91dCB0aGUgY29ubmVjdGlvbnMgYW5kIHNjb3BlIG9mIHdoYXQncyBnb2luZyBvbiBpbiB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIFRoaXMgaXMgbGlrZWx5IHRoZSBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlIG9yIGJ1ZyB3aXRoaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDI3LCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMzozOS45Mzc4MjkyNTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTc0NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfc2hvd3xuZXRpZl9nZXRfbGlua19rc2V0dGluZ3N8bmV0ZGV2X2xvY2tfb3BzfHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MTEwMT1fX25ldGRldl9wdXRfbG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvY29yZS9kZXYuYy0xMTAyLXtcXG5uZXQvY29yZS9kZXYuYzoxMTAzOlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMTA0LVxcdGlmIChkZXYtXFx1MDAzZXJlZ19zdGF0ZSBcXHUwMDNlIE5FVFJFR19SRUdJU1RFUkVEIHx8XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xODQ4PXZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTE4NTktXFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikge1xcbm5ldC9jb3JlL2Rldi5jOjE4NjA6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XFxubmV0L2NvcmUvZGV2LmMtMTg2MS1cXHRcXHRuZXRpZl9kaXNhYmxlX2xybyhsb3dlcl9kZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTkzND1zdGF0aWMgdm9pZCBjYWxsX25ldGRldmljZV91bnJlZ2lzdGVyX25vdGlmaWVycyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTkzNy1cXHRpZiAoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkge1xcbm5ldC9jb3JlL2Rldi5jOjE5Mzg6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTkzOS1cXHRcXHRjYWxsX25ldGRldmljZV9ub3RpZmllcihuYiwgTkVUREVWX0dPSU5HX0RPV04sXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xOTQ3PXN0YXRpYyBpbnQgY2FsbF9uZXRkZXZpY2VfcmVnaXN0ZXJfbmV0X25vdGlmaWVycyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTk1My1cXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG5uZXQvY29yZS9kZXYuYzoxOTU0OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTE5NTUtXFx0XFx0ZXJyID0gY2FsbF9uZXRkZXZpY2VfcmVnaXN0ZXJfbm90aWZpZXJzKG5iLCBkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTA2MTE9c3RhdGljIHZvaWQgYnBmX3hkcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA2MjAtXFx0aWYgKHhkcF9saW5rLVxcdTAwM2VkZXYpIHtcXG5uZXQvY29yZS9kZXYuYzoxMDYyMTpcXHRcXHRuZXRkZXZfbG9ja19vcHMoeGRwX2xpbmstXFx1MDAzZWRldik7XFxubmV0L2NvcmUvZGV2LmMtMTA2MjItXFx0XFx0V0FSTl9PTihkZXZfeGRwX2RldGFjaF9saW5rKHhkcF9saW5rLVxcdTAwM2VkZXYsIE5VTEwsIHhkcF9saW5rKSk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDY3Mj1zdGF0aWMgaW50IGJwZl94ZHBfbGlua191cGRhdGUoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA3MDQtXFxubmV0L2NvcmUvZGV2LmM6MTA3MDU6XFx0bmV0ZGV2X2xvY2tfb3BzKHhkcF9saW5rLVxcdTAwM2VkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTEwNzA2LVxcdG1vZGUgPSBkZXZfeGRwX21vZGUoeGRwX2xpbmstXFx1MDAzZWRldiwgeGRwX2xpbmstXFx1MDAzZWZsYWdzKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwNzMxPWludCBicGZfeGRwX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDc2My1cXG5uZXQvY29yZS9kZXYuYzoxMDc2NDpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMDc2NS1cXHRlcnIgPSBkZXZfeGRwX2F0dGFjaF9saW5rKGRldiwgXFx1MDAyNmV4dGFjaywgbGluayk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDkyNT1zdGF0aWMgdm9pZCBuZXRkZXZfc3luY19sb3dlcl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDkzNi1cXHRcXHRcXHRcXHQgICBcXHUwMDI2ZmVhdHVyZSwgbG93ZXItXFx1MDAzZW5hbWUpO1xcbm5ldC9jb3JlL2Rldi5jOjEwOTM3OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhsb3dlcik7XFxubmV0L2NvcmUvZGV2LmMtMTA5MzgtXFx0XFx0XFx0bG93ZXItXFx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcXHUwMDI2PSB+ZmVhdHVyZTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTExNTExLVxcbm5ldC9jb3JlL2Rldi5jOjExNTEyOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTExNTEzLVxcdF9fbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTE1MzktXFx0LyogTm90aWZ5IHByb3RvY29scywgdGhhdCBhIG5ldyBkZXZpY2UgYXBwZWFyZWQuICovXFxubmV0L2NvcmUvZGV2LmM6MTE1NDA6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTE1NDEtXFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9SRUdJU1RFUiwgZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyNDQxPXZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9ub3RpZnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEyNTAzLVxcdFxcdC8qIFNodXRkb3duIHF1ZXVlaW5nIGRpc2NpcGxpbmUuICovXFxubmV0L2NvcmUvZGV2LmM6MTI1MDQ6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTI1MDUtXFx0XFx0ZGV2X3NodXRkb3duKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjcwMj1pbnQgX19kZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTI3ODYtXFxubmV0L2NvcmUvZGV2LmM6MTI3ODc6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTI3ODgtXFx0LyogSWYgZGV2aWNlIGlzIHJ1bm5pbmcgY2xvc2UgaXQgZmlyc3QuICovXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjgwMC1cXHQvKiBTaHV0ZG93biBxdWV1ZWluZyBkaXNjaXBsaW5lLiAqL1xcbm5ldC9jb3JlL2Rldi5jOjEyODAxOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTEyODAyLVxcdGRldl9zaHV0ZG93bihkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2Lmg9NjA9REVGSU5FX0ZSRUUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0LCBzdHJ1Y3QgbmV0X2RldmljZSAqLFxcbi0tXFxubmV0L2NvcmUvZGV2LmgtNjItXFxubmV0L2NvcmUvZGV2Lmg6NjM6I2RlZmluZSBmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIHZhcl9uYW1lLCBpZmluZGV4KVxcdFxcXFxcXG5uZXQvY29yZS9kZXYuaC02NC1cXHRmb3IgKHN0cnVjdCBuZXRfZGV2aWNlICp2YXJfbmFtZSBfX2ZyZWUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KSA9IE5VTEw7IFxcXFxcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0xOD1pbnQgZGV2X2NoYW5nZV9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5ld25hbWUpXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMjEtXFxubmV0L2NvcmUvZGV2X2FwaS5jOjIyOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMy1cXHRyZXQgPSBuZXRpZl9jaGFuZ2VfbmFtZShkZXYsIG5ld25hbWUpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTM5PWludCBkZXZfc2V0X2FsaWFzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmFsaWFzLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTQyLVxcbm5ldC9jb3JlL2Rldl9hcGkuYzo0MzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtNDQtXFx0cmV0ID0gbmV0aWZfc2V0X2FsaWFzKGRldiwgYWxpYXMsIGxlbik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9NjI9aW50IGRldl9jaGFuZ2VfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGZsYWdzLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTY2LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzo2NzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtNjgtXFx0cmV0ID0gbmV0aWZfY2hhbmdlX2ZsYWdzKGRldiwgZmxhZ3MsIGV4dGFjayk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9ODE9dm9pZCBkZXZfc2V0X2dyb3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfZ3JvdXApXFxubmV0L2NvcmUvZGV2X2FwaS5jLTgyLXtcXG5uZXQvY29yZS9kZXZfYXBpLmM6ODM6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTg0LVxcdG5ldGlmX3NldF9ncm91cChkZXYsIG5ld19ncm91cCk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9ODg9aW50IGRldl9zZXRfbWFjX2FkZHJlc3NfdXNlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTk0LVxcdGRvd25fd3JpdGUoXFx1MDAyNmRldl9hZGRyX3NlbSk7XFxubmV0L2NvcmUvZGV2X2FwaS5jOjk1OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy05Ni1cXHRyZXQgPSBuZXRpZl9zZXRfbWFjX2FkZHJlc3MoZGV2LCBzcywgZXh0YWNrKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0xMzU9aW50IGRldl9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTEzOC1cXG5uZXQvY29yZS9kZXZfYXBpLmM6MTM5OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0xNDAtXFx0cmV0ID0gbmV0aWZfY2hhbmdlX2NhcnJpZXIoZGV2LCBuZXdfY2Fycmllcik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MTUzPWludCBkZXZfY2hhbmdlX3R4X3F1ZXVlX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG5ld19sZW4pXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMTU2LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzoxNTc6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTE1OC1cXHRyZXQgPSBuZXRpZl9jaGFuZ2VfdHhfcXVldWVfbGVuKGRldiwgbmV3X2xlbik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MTcxPWludCBkZXZfY2hhbmdlX3Byb3RvX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBwcm90b19kb3duKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTE3NC1cXG5uZXQvY29yZS9kZXZfYXBpLmM6MTc1OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0xNzYtXFx0cmV0ID0gbmV0aWZfY2hhbmdlX3Byb3RvX2Rvd24oZGV2LCBwcm90b19kb3duKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0xOTc9aW50IGRldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMDAtXFxubmV0L2NvcmUvZGV2X2FwaS5jOjIwMTpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjAyLVxcdHJldCA9IG5ldGlmX29wZW4oZGV2LCBleHRhY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTIxOD12b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMTkte1xcbm5ldC9jb3JlL2Rldl9hcGkuYzoyMjA6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTIyMS1cXHRuZXRpZl9jbG9zZShkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTIyNj1pbnQgZGV2X2V0aF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTIzNC1cXG5uZXQvY29yZS9kZXZfYXBpLmM6MjM1OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMzYtXFx0aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MjQ0PWludCBkZXZfc2V0X210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNDctXFxubmV0L2NvcmUvZGV2X2FwaS5jOjI0ODpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjQ5LVxcdHJldCA9IG5ldGlmX3NldF9tdHUoZGV2LCBuZXdfbXR1KTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0yNjQ9dm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjY1LXtcXG5uZXQvY29yZS9kZXZfYXBpLmM6MjY2OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNjctXFx0bmV0aWZfZGlzYWJsZV9scm8oZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0yODM9aW50IGRldl9zZXRfcHJvbWlzY3VpdHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluYylcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yODYtXFxubmV0L2NvcmUvZGV2X2FwaS5jOjI4NzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjg4LVxcdHJldCA9IG5ldGlmX3NldF9wcm9taXNjdWl0eShkZXYsIGluYyk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MzEwPWludCBkZXZfc2V0X2FsbG11bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMpXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMzEzLVxcbm5ldC9jb3JlL2Rldl9hcGkuYzozMTQ6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTMxNS1cXHRyZXQgPSBuZXRpZl9zZXRfYWxsbXVsdGkoZGV2LCBpbmMsIHRydWUpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTMzMz1pbnQgZGV2X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc3MsXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMzM3LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzozMzg6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTMzOS1cXHRyZXQgPSBuZXRpZl9zZXRfbWFjX2FkZHJlc3MoZGV2LCBzcywgZXh0YWNrKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0zNDY9aW50IGRldl94ZHBfcHJvcGFnYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICpicGYpXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMzQ5LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzozNTA6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTM1MS1cXHRyZXQgPSBuZXRpZl94ZHBfcHJvcGFnYXRlKGRldiwgYnBmKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0zNjY9dm9pZCBuZXRkZXZfc3RhdGVfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FwaS5jLTM2Ny17XFxubmV0L2NvcmUvZGV2X2FwaS5jOjM2ODpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMzY5LVxcdG5ldGlmX3N0YXRlX2NoYW5nZShkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9MjgyPXN0YXRpYyBpbnQgZGV2X2dldF9od3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTI5NS1cXHRrZXJuZWxfY2ZnLmlmciA9IGlmcjtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYzoyOTY6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMjk3LVxcdGVyciA9IGRldl9nZXRfaHd0c3RhbXBfcGh5bGliKGRldiwgXFx1MDAyNmtlcm5lbF9jZmcpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9MzkxPXN0YXRpYyBpbnQgZGV2X3NldF9od3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQyMS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo0MjI6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDIzLVxcdGVyciA9IGRldl9zZXRfaHd0c3RhbXBfcGh5bGliKGRldiwgXFx1MDAyNmtlcm5lbF9jZmcsIFxcdTAwMjZleHRhY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDQxPWludCBnZW5lcmljX2h3dHN0YW1wX2dldF9sb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDUyLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjQ1MzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00NTQtXFx0ZXJyID0gZGV2X2dldF9od3RzdGFtcF9waHlsaWIoZGV2LCBrZXJuZWxfY2ZnKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTQ2MT1pbnQgZ2VuZXJpY19od3RzdGFtcF9zZXRfbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ3My1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo0NzQ6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDc1LVxcdGVyciA9IGRldl9zZXRfaHd0c3RhbXBfcGh5bGliKGRldiwga2VybmVsX2NmZywgZXh0YWNrKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTQ4Mj1zdGF0aWMgaW50IGRldl9zaW9jYm9uZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDg5LVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjQ5MDpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00OTEtXFx0XFx0aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz01MDE9c3RhdGljIGludCBkZXZfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MDgtXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NTA5OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUxMC1cXHRcXHRpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTUyMD1zdGF0aWMgaW50IGRldl9zaW9jd2FuZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZl9zZXR0aW5ncyAqaWZzKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTI2LVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjUyNzpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MjgtXFx0XFx0aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz01NDE9c3RhdGljIGludCBkZXZfaWZzaW9jKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICpkYXRhLFxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTc2LVxcdFxcdFxcdCAgIChzaXplX3QpZGV2LVxcdTAwM2VhZGRyX2xlbikpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU3NzpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01NzgtXFx0XFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9DSEFOR0VBRERSLCBkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTgyLVxcdGNhc2UgU0lPQ1NJRk1BUDpcXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo1ODM6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTg0LVxcdFxcdGVyciA9IG5ldGlmX3NldGlmbWFwKGRldiwgaWZyKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU5My1cXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo1OTQ6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTk1LVxcdFxcdGVyciA9IGRldl9tY19hZGRfZ2xvYmFsKGRldiwgaWZyLVxcdTAwM2VpZnJfaHdhZGRyLnNhX2RhdGEpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNjA1LVxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjYwNjpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy02MDctXFx0XFx0ZXJyID0gZGV2X21jX2RlbF9nbG9iYWwoZGV2LCBpZnItXFx1MDAzZWlmcl9od2FkZHIuc2FfZGF0YSk7XFxuLS1cXG5uZXQvY29yZS9mYWlsb3Zlci5jPTIxNj1mYWlsb3Zlcl9leGlzdGluZ19zbGF2ZV9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZmFpbG92ZXJfZGV2KVxcbi0tXFxubmV0L2NvcmUvZmFpbG92ZXIuYy0yMjUtXFx0XFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwoZmFpbG92ZXJfZGV2LVxcdTAwM2VwZXJtX2FkZHIsIGRldi1cXHUwMDNlcGVybV9hZGRyKSkge1xcbm5ldC9jb3JlL2ZhaWxvdmVyLmM6MjI2OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2ZhaWxvdmVyLmMtMjI3LVxcdFxcdFxcdGZhaWxvdmVyX3NsYXZlX3JlZ2lzdGVyKGRldik7XFxuLS1cXG5uZXQvY29yZS9saW5rX3dhdGNoLmM9MTkwPXN0YXRpYyB2b2lkIF9fbGlua3dhdGNoX3J1bl9xdWV1ZShpbnQgdXJnZW50X29ubHkpXFxuLS1cXG5uZXQvY29yZS9saW5rX3dhdGNoLmMtMjM4LVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bHdldmVudGxpc3RfbG9jayk7XFxubmV0L2NvcmUvbGlua193YXRjaC5jOjIzOTpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9saW5rX3dhdGNoLmMtMjQwLVxcdFxcdGxpbmt3YXRjaF9kb19kZXYoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYz0yOTE9dm9pZCBsaW5rd2F0Y2hfc3luY19kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYy0yOTMtXFx0aWYgKGxpbmt3YXRjaF9jbGVhbl9kZXYoZGV2KSkge1xcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYzoyOTQ6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvbGlua193YXRjaC5jLTI5NS1cXHRcXHRsaW5rd2F0Y2hfZG9fZGV2KGRldik7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz02OT1zdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyNS0gKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMjY6c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyNy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzQtXFx0LypcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzU6XFx0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKTsgdGhpcyBoZWxwc1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNi1cXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDgtXFx0fVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE0OTpcXHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTAtXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTgtXFx0XFx0ICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTU5OlxcdFxcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKSlcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNjAtXFx0XFx0XFx0cmV0ID0gMDtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE3MC0vKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwncyAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE3MTpzdGF0aWMgc3NpemVfdCBuZXRkZXZfc2hvdyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTcyLVxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xOTI9c3RhdGljIHNzaXplX3QgZmllbGQjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xOTQte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxOTU6XFx0cmV0dXJuIG5ldGRldl9zaG93KGRldiwgYXR0ciwgYnVmLCBmb3JtYXRfIyNmaWVsZCk7XFx0XFx0XFxcXFxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE5Ni19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9Mjg4PXN0YXRpYyBzc2l6ZV90IG5hbWVfYXNzaWduX3R5cGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yOTUtXFx0aWYgKFJFQURfT05DRShuZGV2LVxcdTAwM2VuYW1lX2Fzc2lnbl90eXBlKSAhPSBORVRfTkFNRV9VTktOT1dOKVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjI5NjpcXHRcXHRyZXQgPSBuZXRkZXZfc2hvdyhkZXYsIGF0dHIsIGJ1ZiwgZm9ybWF0X25hbWVfYXNzaWduX3R5cGUpO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTI5Ny1cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTM4MT1zdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTM4Ni1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozODc6XFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXFx1MDAyNmNtZCk7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzg4LVxcdGlmICghcmV0KVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9Mzk1PXN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTQwMS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo0MDI6XFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXFx1MDAyNmNtZCk7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtNDAzLVxcdGlmICghcmV0KSB7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xNDgxPXN0YXRpYyBzc2l6ZV90IHR4X21heHJhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTA2LVxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE1MDc6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTUwOC1cXHRpZiAoZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0X3R4X21heHJhdGUpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMTU5PXN0YXRpYyB2b2lkIHJlbW92ZV9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE3MC1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTcxOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNzItXFx0ZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMgPSAwO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz02MTg9aW50IG5ldGRldl9ubF9xdWV1ZV9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNjM4LVxcdH0gZWxzZSB7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzo2Mzk6XFx0XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy02NDAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz05MDE9aW50IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05MzgtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzo5Mzk6XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtOTQwLVxcdFxcdGVyciA9IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBfb25lKG5ldGRldiwgc2NvcGUsIHNrYixcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9MTQ3Mj1zdGF0aWMgaW50IG5ldGRldl9nZW5sX25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xNDc4LVxcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTQ3OTpcXHRcXHRuZXRkZXZfbG9ja19vcHNfdG9fZnVsbChuZXRkZXYpO1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTQ4MC1cXHRcXHRuZXRkZXZfZ2VubF9kZXZfbm90aWZ5KG5ldGRldiwgTkVUREVWX0NNRF9ERVZfQUREX05URik7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTEzMD1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTU0LVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTU1OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTU2LVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0zMDM3PXN0YXRpYyBpbnQgZG9fc2V0X21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWZpbmRleCxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMwNTUtXFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fZGVsX3NsYXZlKHVwcGVyX2RldiwgZGV2KTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzozMDU2OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMwNTctXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMwNzEtXFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fYWRkX3NsYXZlKHVwcGVyX2RldiwgZGV2LCBleHRhY2spO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjMwNzI6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA3My1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MzE0ND1zdGF0aWMgaW50IGRvX3NldGxpbmsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMxNzUtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzE3NjpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMTc3LVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzIxMy1cXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZkZXZfYWRkcl9zZW0pO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjMyMTQ6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzIxNS1cXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTM3MTA9aW50IHJ0bmxfY29uZmlndXJlX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGlmaW5mb21zZyAqaWZtLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzcxNS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzozNzE2OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM3MTctXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0zOTI4PXN0YXRpYyBpbnQgcnRubF9uZXdsaW5rX2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWZpbmZvbXNnICppZm0sXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zOTgwLVxcdGlmICh0YltJRkxBX01BU1RFUl0pIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzozOTgxOlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM5ODItXFx0XFx0ZXJyID0gZG9fc2V0X21hc3RlcihkZXYsIG5sYV9nZXRfdTMyKHRiW0lGTEFfTUFTVEVSXSksIGV4dGFjayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjQwLjA2MzU4MzE5N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzczMDM5MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIFN5c3RlbSBDb25maWd1cmF0aW9uIGZvciBOZXR3b3JrIGFuZCBTeXNmcyBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYG5ldC1zeXNmcy5jYC4gSSBrbm93IGl0J3MgY29tcGlsZWQgYXMgcGFydCBvZiB0aGUgYG5ldC9jb3JlYCBkaXJlY3Rvcnkgd2hlbiB0aGUgbmV0d29yayBzdGFjayBpcyBhY3RpdmUsIGFuZCBJIGJlbGlldmUgaXQgbGV2ZXJhZ2VzIHRoZSBgI2lmZGVmIENPTkZJR19TWVNGU2AgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2l0aGluIHRoZSBjb2RlLiBTbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJvdGggYENPTkZJR19ORVRgIGFuZCBgQ09ORklHX1NZU0ZTYCBhcmUgcHJvcGVybHkgZGVmaW5lZCBhbmQgZW5hYmxlZC4gVGltZSB0byB2ZXJpZnkgdGhhdCB0aG9zZSBzZXR0aW5ncyBhcmUgY29ycmVjdGx5IGRvY3VtZW50ZWQgYW5kIHNldCB1cCBpbiBLY29uZmlnLiBUaGlzIHdpbGwgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAzNiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjQzLjgzNjYyNTg1N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMDIwMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXQtc3lzZnMuYy0zMi1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozMzojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzQtc3RhdGljIGNvbnN0IGNoYXIgZm10X2hleFtdID0gXFxcIiUjeFxcXFxuXFxcIjtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTkyMD1zdGF0aWMgYm9vbCB3aXJlbGVzc19ncm91cF9uZWVkZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MzItXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTMzOiNlbHNlIC8qIENPTkZJR19TWVNGUyAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkzNC0jZGVmaW5lIG5ldF9jbGFzc19ncm91cHNcXHROVUxMXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTM1OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MzYtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTM3OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MzgtI2RlZmluZSB0b19yeF9xdWV1ZV9hdHRyKF9hdHRyKSBcXFxcXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMjkwPXN0YXRpYyBpbnQgcnhfcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmRleCwga3VpZF90IGt1aWQsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzA2LX1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzA3OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzA4LVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTMxMD1uZXRfcnhfcXVldWVfdXBkYXRlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvbGRfbnVtLCBpbnQgbmV3X251bSlcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzExLXtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzEyOiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzEzLVxcdGludCBpO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTM0Nj1zdGF0aWMgaW50IG5ldF9yeF9xdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bSxcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDgte1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzNDk6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNTAtXFx0aW50IGVycm9yID0gMDtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNjgtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTM2OTojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM3MC0vKlxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjAyMj1zdGF0aWMgaW50IHR4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IGluZGV4LFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzNy19XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjAzODojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzOS1cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIwNDE9bmV0ZGV2X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2xkX251bSwgaW50IG5ld19udW0pXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA0Mi17XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA0MzojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA0NC1cXHRpbnQgaTtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwNzctXFx0cmV0dXJuIDA7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA3ODojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA3OS19XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMDgxPXN0YXRpYyBpbnQgbmV0X3R4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA4My17XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA4NDojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA4NS1cXHRpbnQgZXJyb3IgPSAwO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA5Ni1cXHRyZXR1cm4gMDtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDk3OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDk4LX1cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxMDA9c3RhdGljIGludCByZWdpc3Rlcl9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEwMy1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTA0OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTA1LVxcdGRldi1cXHUwMDNlcXVldWVzX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKFxcXCJxdWV1ZXNcXFwiLFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEyNy1cXHRuZXRfcnhfcXVldWVfdXBkYXRlX2tvYmplY3RzKGRldiwgcnhxLCAwKTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTI4OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTI5LVxcdGtzZXRfdW5yZWdpc3RlcihkZXYtXFx1MDAzZXF1ZXVlc19rc2V0KTtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxMzQ9c3RhdGljIGludCBxdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGt1aWRfdCBrdWlkLCBrZ2lkX3Qga2dpZClcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxMzctXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjEzODojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEzOS1cXHRpZiAobmRldi1cXHUwMDNlcXVldWVzX2tzZXQpIHtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxNTk9c3RhdGljIHZvaWQgcmVtb3ZlX3F1ZXVlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTYyLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNjM6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNjQtXFx0cmVhbF9yeCA9IGRldi1cXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE3NC1cXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNzU6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNzYtXFx0a3NldF91bnJlZ2lzdGVyKGRldi1cXHUwMDNlcXVldWVzX2tzZXQpO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjMzMj1pbnQgbmV0ZGV2X3JlZ2lzdGVyX2tvYmplY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzQ0LVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIzNDU6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIzNDYtXFx0LyogQWxsb3cgZm9yIGEgZGV2aWNlIHNwZWNpZmljIGdyb3VwICovXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzU0LVxcdFxcdCpncm91cHMrKyA9IFxcdTAwMjZ3aXJlbGVzc19ncm91cDtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMzU1OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzU2LVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5oOjI6I2lmbmRlZiBfX05FVF9TWVNGU19IX19cXG5uZXQvY29yZS9uZXQtc3lzZnMuaDozOiNkZWZpbmUgX19ORVRfU1lTRlNfSF9fXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmgtNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6NDMuOTM2NjUzNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzEwNzY0NTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZXBlbmRlbmN5IENoZWNrIGluIGBuZXQvS2NvbmZpZ2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhcnRpY3VsYXIgY29tcG9uZW50IG9yIGZlYXR1cmUuIE15IHVzdWFsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCwgaW1wb3J0YW50bHksIHRoZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyB0aGF0IHdpbGwgcmV2ZWFsIHRoZSBwcmVyZXF1aXNpdGVzIGZvciB0aGlzIHRoaW5nIHRvIGJlIGVuYWJsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgbW9kdWxlcyBvciBzZXR0aW5ncyB0aGlzIGRlcGVuZHMgb24gdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHN0YXJ0IHBhcnNpbmcgdGhhdCBmaWxlLiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTExOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjQ3LjA0NDMwMDY4OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBOZXR3b3JrIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBORVRcXG4gICA3OlxcdFxcdGJvb2wgXFxcIk5ldHdvcmtpbmcgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBOTEFUVFJcXG4gICA5OlxcdFxcdHNlbGVjdCBHRU5FUklDX05FVF9VVElMU1xcbiAgMTA6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBVbmxlc3MgeW91IHJlYWxseSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgeW91IHNob3VsZCBzYXkgWSBoZXJlLlxcbiAgMTM6XFx0XFx0ICBUaGUgcmVhc29uIGlzIHRoYXQgc29tZSBwcm9ncmFtcyBuZWVkIGtlcm5lbCBuZXR3b3JraW5nIHN1cHBvcnQgZXZlblxcbiAgMTQ6XFx0XFx0ICB3aGVuIHJ1bm5pbmcgb24gYSBzdGFuZC1hbG9uZSBtYWNoaW5lIHRoYXQgaXNuJ3QgY29ubmVjdGVkIHRvIGFueVxcbiAgMTU6XFx0XFx0ICBvdGhlciBjb21wdXRlci5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBJZiB5b3UgYXJlIHVwZ3JhZGluZyBmcm9tIGFuIG9sZGVyIGtlcm5lbCwgeW91XFxuICAxODpcXHRcXHQgIHNob3VsZCBjb25zaWRlciB1cGRhdGluZyB5b3VyIG5ldHdvcmtpbmcgdG9vbHMgdG9vIGJlY2F1c2UgY2hhbmdlc1xcbiAgMTk6XFx0XFx0ICBpbiB0aGUga2VybmVsIGFuZCB0aGUgdG9vbHMgb2Z0ZW4gZ28gaGFuZCBpbiBoYW5kLiBUaGUgdG9vbHMgYXJlXFxuICAyMDpcXHRcXHQgIGNvbnRhaW5lZCBpbiB0aGUgcGFja2FnZSBuZXQtdG9vbHMsIHRoZSBsb2NhdGlvbiBhbmQgdmVyc2lvbiBudW1iZXJcXG4gIDIxOlxcdFxcdCAgb2Ygd2hpY2ggYXJlIGdpdmVuIGluIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlc1xcdTAwM2UuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgRm9yIGEgZ2VuZXJhbCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgaXQgaXMgaGlnaGx5XFxuICAyNDpcXHRcXHQgIHJlY29tbWVuZGVkIHRvIHJlYWQgdGhlIE5FVC1IT1dUTywgYXZhaWxhYmxlIGZyb21cXG4gIDI1OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXFx1MDAzZS5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0aWYgTkVUXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTXFxuICAzMDpcXHRcXHRib29sXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGNhbiBiZSBzZWxlY3RlZCBieSBvdGhlciBvcHRpb25zIHRoYXQgbmVlZCBjb21wYXRcXG4gIDMzOlxcdFxcdCAgbmV0bGluayBtZXNzYWdlcy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIENPTVBBVF9ORVRMSU5LX01FU1NBR0VTXFxuICAzNjpcXHRcXHRkZWZfYm9vbCB5XFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIENPTVBBVFxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkUgfHwgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFU1xcbiAgMzk6XFx0XFx0aGVscFxcbiAgNDA6XFx0XFx0ICBUaGlzIG9wdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSB0byBzZW5kIGRpZmZlcmVudCBuZXRsaW5rIG1lc3NhZ2VzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjQ3LjA0NDM3ODg0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDg4MzI1NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBIdW50aW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBDT05GSUdfU1lTRlNgIG9wdGlvbiBpcyBkZWZpbmVkIGluIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSByZWxldmFudCBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBgZnMvc3lzZnMvS2NvbmZpZ2AuIEl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlLiBJZiB0aGF0IGRvZXNuJ3QgcGFuIG91dCwgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIG5leHQgbG9naWNhbCBwbGFjZSB0byBjaGVjay4gSXQncyBwbGF1c2libGUgdGhhdCBpdCdzIGEgbW9yZSBmdW5kYW1lbnRhbCBvciBnZW5lcmljIG9wdGlvbiBpbmZsdWVuY2luZyBlYXJseSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24uIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgYW55IGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBkZXRhaWxzLiBUaW1lIHRvIGdldCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgzMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6NTAuNTMyNzA2OTc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2MTc1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNZU0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zeXNmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvc3lzZnMvS2NvbmZpZzoyOmNvbmZpZyBTWVNGU1xcbmZzL3N5c2ZzL0tjb25maWctMy1cXHRib29sIFxcXCJzeXNmcyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6NTAuNjc2MzMzNjg5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNTE4MTI2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgSW50ZXJmYWNlIFNwZWVkIGFuZCBEdXBsZXggU2V0dGluZ3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgc3ltYm9scyByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlIHNldHRpbmdzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBzcGVlZCBhbmQgZHVwbGV4LiBJJ20gc2VlaW5nIGNoYW5nZXMgY2VudGVyZWQgYXJvdW5kIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLCB3aGljaCBpcyBtYXJrZWQgYXMgc3RhdGljLCBhbG9uZyB3aXRoIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCwgYWxzbyBzdGF0aWMgZnVuY3Rpb25zLiBJbnRyaWd1aW5nLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24uXG5cbkFoLCB0aGVyZSBpdCBpcyEgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgaXMgdGhlIGtleSDigJMgaXQncyBhbiBleHBvcnRlZCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9ldGh0b29sL2lvY3RsLmNgLCBhbmQgaXQgYXBwZWFycyB0byBiZSB3aGF0IGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGlzIGxldmVyYWdpbmcuIFNpbmNlIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGlzIGV4cG9ydGVkLCBpdCdzIHRoZSByZWFsIGVudHJ5IHBvaW50IEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvZGUgZmxvdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb250ZXh0IGFyb3VuZCBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFRoYXQncyB3aGVyZSBJIHdpbGwgZmluZCB0aGUgY2FsbGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzIGFyZSBiZWluZyByZXRyaWV2ZWQgYW5kIGV4cG9zZWQsIGVzcGVjaWFsbHkgbm93IHRoYXQgdGhlIGJhY2tpbmcgZnVuY3Rpb24sIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLCBpcyBzdGF0aWMuIFRoaXMgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nLCBtYXliZSB0byBjb25zb2xpZGF0ZSBhY2Nlc3Mgb3IgaGlkZSBzb21lIGludGVybmFsIGRldGFpbHMuIFRpbWUgdG8gZXhhbWluZSB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjU2LjcyODE0ODUzOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDIzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MzU6XFx0XFx0fSBsaW5rX21vZGVzO1xcbiA0MzY6XFx0fTtcXG4gNDM3OlxcdFxcbiA0Mzg6XFx0LyogSW50ZXJuYWwga2VybmVsIGhlbHBlciB0byBxdWVyeSBhIGRldmljZSBldGh0b29sX2xpbmtfc2V0dGluZ3MuICovXFxuIDQzOTpcXHRpbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDQ0MDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncylcXG4gNDQxOlxcdHtcXG4gNDQyOlxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0aWYgKCFkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXFxuIDQ0NTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdFxcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4gNDQ4OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0NDk6XFx0XFxuIDQ1MDpcXHRcXHRtZW1zZXQobGlua19rc2V0dGluZ3MsIDAsIHNpemVvZigqbGlua19rc2V0dGluZ3MpKTtcXG4gNDUxOlxcdFxcdHJldHVybiBkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XFxuIDQ1MjpcXHR9XFxuIDQ1MzpcXHRFWFBPUlRfU1lNQk9MKG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyk7XFxuIDQ1NDpcXHRcXG4gNDU1OlxcdC8qIENvbnZlbmllbmNlIGhlbHBlciBmb3IgY2FsbGVycyB0aGF0IGhvbGQgb25seSBydG5sX2xvY2soKS4gKi9cXG4gNDU2OlxcdGludCBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDQ1NzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxcbiA0NTg6XFx0e1xcbiA0NTk6XFx0XFx0aW50IHJldDtcXG4gNDYwOlxcdFxcbiA0NjE6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuIDQ2NDpcXHRcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XFxuIDQ2NTpcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbiA0NjY6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDY3OlxcdH1cXG4gNDY4OlxcdEVYUE9SVF9TWU1CT0woX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyk7XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdC8qIGNvbnZlcnQgZXRodG9vbF9saW5rX3VzZXR0aW5ncyBpbiB1c2VyIHNwYWNlIHRvIGEga2VybmVsIGludGVybmFsXFxuIDQ3MTpcXHQgKiBldGh0b29sX2xpbmtfa3NldHRpbmdzLiByZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBlcnJvci5cXG4gNDcyOlxcdCAqL1xcbiA0NzM6XFx0c3RhdGljIGludCBsb2FkX2xpbmtfa3NldHRpbmdzX2Zyb21fdXNlcihzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqdG8sXFxuIDQ3NDpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjU2LjcyODM5MjUxOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTk0NDM2NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgRnVuY3Rpb24gRnV6emluZyBUYXJnZXRzIGZvciBOZXR3b3JrIFN5c2ZzIEF0dHJpYnV0ZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgLCBhbmQgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLCBhbmQgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgaXMgdGhlIG5vbi1zdGF0aWMgb25lLiBMb29raW5nIGF0IHRoZSBwcm9tcHQncyBpbnN0cnVjdGlvbnMsIHNwZWNpZmljYWxseSwgaXQncyBlbXBoYXNpemluZyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBmdW5jdGlvbnMgYXJlIG9mdGVuIGlubGluZWQsIGFuZCB3ZSBuZWVkIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgZm9yIGZ1enppbmcuIFNvLCB3aGlsZSBgc3BlZWRfc2hvd2AsIGBkdXBsZXhfc2hvd2AsIGFuZCBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBhcmUgcmVsZXZhbnQgaW4gY29udGV4dCwgSSBuZWVkIHRvIHByaW9yaXRpemUgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgZm9yIGBGb2N1c1N5bWJvbHNgLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGlzIHRhcmdldGVkLiBXaGlsZSB0aGUgc3RhdGljIG9uZXMgYXJlIGNhbGxlZCwgSSBuZWVkIHRvIGZvY3VzIHRoZSBmdXp6aW5nIHRvICpvbmx5KiB3aGF0IHRoZSBwcm9tcHQgaXMgYXNraW5nLiBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AsIGFuZCBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBzaG91bGQgYmUgaW5jbHVkZWQsIGV2ZW4gaWYgdGhleSBhcmUgc3RhdGljIHNpbmNlIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHRoZW0uXG5cbk5vdywgd2l0aCB0aG9zZSBwcmlvcml0aWVzIGluIG1pbmQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvcnJlY3QgRW5hYmxlQ29uZmlncyBhcmUgc2V0LiBJIHNlZSBgU1lTRlNgIGFuZCBgTkVUYCwgd2hpY2ggc2VlbSBhcHByb3ByaWF0ZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLlxuXG5UaGUgcGF0Y2gncyBkZXNjcmlwdGlvbiBoaWdobGlnaHRzIGEgY2hhbmdlIGluIHRoZSBsb2NraW5nIG1lY2hhbmlzbSBhbmQgaGFuZGxpbmcgb2YgYGRldl9pc2FsaXZlYCBjaGVja3MgZm9yIHJlYWRpbmcgc3BlZWQgYW5kIGR1cGxleCBzeXNmcyBhdHRyaWJ1dGVzLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBuZXR3b3JrIGludGVyZmFjZSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgZnV6emluZy4gVGhpcyBzaG91bGQgZ2V0IGEgaGlnaCBwcmlvcml0eSB3aGVuIHNldHRpbmcgdXAgdGhlIGZ1enppbmcuXG5cbkknbGwgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2l0aCBgc2V0LXJlc3VsdHNgIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBpbml0aWFsIHBhc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjUwLCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjE0OjAwLjkyMjgzMjE4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzQ4NjQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1lTRlNcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGlmX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwic3BlZWRfc2hvd1wiLFxuICAgIFwiZHVwbGV4X3Nob3dcIixcbiAgICBcInN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGxvY2tpbmcgbG9naWMgd2hlbiByZWFkaW5nIHRoZSBuZXR3b3JrIGRldmljZSAnc3BlZWQnIGFuZCAnZHVwbGV4JyBzeXNmcyBhdHRyaWJ1dGVzLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgdGhlIFJUTkwgbG9jaywgaXQgdXNlcyBwZXItZGV2aWNlIG9wcyBsb2NraW5nIChuZXRkZXZfbG9ja19vcHMpIHdoZW4gc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UsIGNoZWNrcyBkZXZfaXNhbGl2ZSwgYW5kIGNhbGxzIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpLiBUaGlzIGFmZmVjdHMgdXNlci1hY2Nlc3NpYmxlIHN5c2ZzIGVuZHBvaW50cyBhbmQgbmV0d29yayBkZXZpY2UgbG9ja2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTWVNGU1wiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJzcGVlZF9zaG93XCIsXG4gICAgXCJkdXBsZXhfc2hvd1wiLFxuICAgIFwic3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgbG9ja2luZyBsb2dpYyB3aGVuIHJlYWRpbmcgdGhlIG5ldHdvcmsgZGV2aWNlICdzcGVlZCcgYW5kICdkdXBsZXgnIHN5c2ZzIGF0dHJpYnV0ZXMuIEluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IGFjcXVpcmluZyB0aGUgUlROTCBsb2NrLCBpdCB1c2VzIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgKG5ldGRldl9sb2NrX29wcykgd2hlbiBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSwgY2hlY2tzIGRldl9pc2FsaXZlLCBhbmQgY2FsbHMgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCkuIFRoaXMgYWZmZWN0cyB1c2VyLWFjY2Vzc2libGUgc3lzZnMgZW5kcG9pbnRzIGFuZCBuZXR3b3JrIGRldmljZSBsb2NraW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxNDowMS4wNDYzMjYwNzhaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzM2MDcyMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTQ6MDEuMDQ2Nzg0MTU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDMzMzU2MDk0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgJ3NwZWVkJyBhbmQgJ2R1cGxleCcgYXR0cmlidXRlIHJlYWQgaGFuZGxlcnMgaW50byBhIGhlbHBlciBmdW5jdGlvbiAnc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCknLCBhbGxvd2luZyB0aGUgdXNlIG9mIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgKG5ldGRldl9sb2NrX29wcykgaW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIFJUTkwuXFxuXFxuVGhlIHN0YWNrLWFsbG9jYXRlZCAnc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kJyB2YXJpYWJsZSBpcyBwYXNzZWQgdG8gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCksIHdoaWNoIHplcm9lcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIG1lbXNldCgpIGJlZm9yZSBxdWVyeWluZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgZmllbGRzIGNtZC5iYXNlLnNwZWVkIGFuZCBjbWQuYmFzZS5kdXBsZXggYXJlIGFjY2Vzc2VkIG9ubHkgd2hlbiBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKSByZXR1cm5zIHN1Y2Nlc3MgKDApLCBhbmQgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgaW50byB0ZXh0IHZpYSBzeXNmc19lbWl0KCkuIExvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGFzcGVjdHMgb2YgdGhpcyBwYXRjaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGJ1aWxkcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MsIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZTM2ZjdhNTNmZDU4NmE1ZGE5YWIyYjQxY2RlNDVhZjQ1YzAwOTM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDg6MTM6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jXG5pbmRleCAzNTIxNzNkZjc1Nzg1Li4zZTAxZTdmM2NhYzc5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcbisrKyBiL25ldC9jb3JlL25ldC1zeXNmcy5jXG5AQCAtMTE4LDYgKzExOCw1NSBAQCBzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qXG4rICogVXNlIHRoZSBwZXItZGV2aWNlIG9wcyBsb2NrIHdpdGhvdXQgUlROTCB3aGVuIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaXQuXG4rICogTGVnYWN5IGRldmljZXMgYW5kIGNhbGxiYWNrcyB3aGljaCBleHBsaWNpdGx5IHJlcXVpcmUgUlROTCByZXRhaW4gdGhlXG4rICogZXhpc3RpbmcgbG9ja2luZy5cbisgKi9cbitzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuK1x0aW50IHJldCA9IC1FSU5WQUw7XG4rXHRib29sIG5lZWRfcnRubDtcbitcbitcdC8qXG4rXHQgKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpOyB0aGlzIGhlbHBzXG4rXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4rXHQgKi9cbitcdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8XG4rXHRcdCAgICAobmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2XG4rXHRcdCAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7XG4rXHRpZiAobmVlZF9ydG5sKSB7XG4rXHRcdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcbitcbitcdHJldCA9IC1FSU5WQUw7XG4rXHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdH0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEtlZXAgdGhlIHN5c2ZzIEFCSTogcmVwb3J0IGFueSBjYWxsYmFjayBlcnJvciBhcyAtRUlOVkFMXG4rXHRcdCAqIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgdGhlIGRyaXZlcidzIGVycm9yIGNvZGUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG4rXHRcdFx0cmV0ID0gMDtcbitcdH1cbitcbitcdG5ldGRldl91bmxvY2tfb3BzKG5ldGRldik7XG4rXHRpZiAobmVlZF9ydG5sKVxuK1x0XHRydG5sX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJ3MgKi9cbiBzdGF0aWMgc3NpemVfdCBuZXRkZXZfc2hvdyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZixcbkBAIC0zMzIsMjcgKzM4MSwxMyBAQCBzdGF0aWMgREVWSUNFX0FUVFJfUlcoY2Fycmllcik7XG4gc3RhdGljIHNzaXplX3Qgc3BlZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XG4tXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi1cbi1cdC8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwc1xuLVx0ICogcmV0dXJuaW5nIGVhcmx5IHdpdGhvdXQgaGl0dGluZyB0aGUgbG9ja2luZyBzZWN0aW9uIGJlbG93LlxuLVx0ICovXG4tXHRpZiAoIW5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4rXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gLUVJTlZBTDtcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbi1cdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuK1x0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXHUwMDI2Y21kKTtcbitcdGlmICghcmV0KVxuK1x0XHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpO1xuIFxuLVx0XHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZjbWQpKVxuLVx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4tXHR9XG4tXHRydG5sX3VubG9jaygpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gc3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTtcbkBAIC0zNjAsNDEgKzM5NSwyNiBAQCBzdGF0aWMgREVWSUNFX0FUVFJfUk8oc3BlZWQpO1xuIHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XG4tXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi1cbi1cdC8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwc1xuLVx0ICogcmV0dXJuaW5nIGVhcmx5IHdpdGhvdXQgaGl0dGluZyB0aGUgbG9ja2luZyBzZWN0aW9uIGJlbG93LlxuLVx0ICovXG4tXHRpZiAoIW5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRyZXQgPSAtRUlOVkFMO1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuLVx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4tXG4tXHRcdGlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmNtZCkpIHtcbi1cdFx0XHRjb25zdCBjaGFyICpkdXBsZXg7XG4rXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4rXHRjb25zdCBjaGFyICpkdXBsZXg7XG4rXHRpbnQgcmV0O1xuIFxuLVx0XHRcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfSEFMRjpcbi1cdFx0XHRcdGR1cGxleCA9IFwiaGFsZlwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfRlVMTDpcbi1cdFx0XHRcdGR1cGxleCA9IFwiZnVsbFwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0ZGVmYXVsdDpcbi1cdFx0XHRcdGR1cGxleCA9IFwidW5rbm93blwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcIiVzXFxuXCIsIGR1cGxleCk7XG4rXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcbitcdFx0Y2FzZSBEVVBMRVhfSEFMRjpcbitcdFx0XHRkdXBsZXggPSBcImhhbGZcIjtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBEVVBMRVhfRlVMTDpcbitcdFx0XHRkdXBsZXggPSBcImZ1bGxcIjtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRkdXBsZXggPSBcInVua25vd25cIjtcbitcdFx0XHRicmVhaztcbiBcdFx0fVxuK1x0XHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgXCIlc1xcblwiLCBkdXBsZXgpO1xuIFx0fVxuLVx0cnRubF91bmxvY2soKTtcbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhkdXBsZXgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTQ6MDEuMDQ2Nzg2ODg4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MzAwNDA5MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiAtIFBhdGNoIFNlcmllcyBSZXZpZXcqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBsb29rIGF0IGEgTGludXgga2VybmVsIHBhdGNoIHNlcmllcyBhbmQgZGVjaWRlIGlmIGl0IG5lZWRzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLiBObyBwcm9ibGVtLCBsZXQncyBzdGFydCBieSBtYWtpbmcgc3VyZSBpdCdzIHNhZmUg4oCTIHN0YW5kYXJkIGRlZmVuc2l2ZSByZXZpZXcsIG5vIG1hbGljaW91cyBzdHVmZiwganVzdCBjaGVja2luZyBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIG1lbW9yeSBzYW5pdGl6ZXIgYXR0ZW50aW9uLiBUaGlzIGlzIGEgYmVuaWduIHNldmVyaXR5IGFzc2Vzc21lbnQsIHB1cmVseSBhYm91dCB0aGUgY29kZS5cblxuQWxyaWdodCwgbGV0J3MgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIHRvdWNoaW5nIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AuIExldCdzIHNlZS4uLiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGhlbHBlci4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIHRoZW4gdXNlZCBpbiBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AsIGNhbGxpbmcgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZClgLiBIbW0sIGFuZCBgY21kYCBpcyBhbiAqdW5pbml0aWFsaXplZCogYHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtgIG9uIHRoZSBzdGFjay4gTm93IHRoYXQgY2F0Y2hlcyBteSBleWUuIElzIGBjbWRgIHByb3Blcmx5IGluaXRpYWxpemVkIGluc2lkZSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCB0byBzZWUuIEknbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGF0IG91dCwgYXMgd2VsbCBhcyBgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQgbG9jYWwgdmFyaWFibGUgYGNtZGAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0J3MgdXNlZC4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBLTVNBTiBtaWdodCBuZWVkIHRvIGxvb2sgYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxNDoxNS4zNDcxOTg2NzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDAxMzM5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0zMjY9X19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTMyNy1cXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncyk7XFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6MzI4OmludCBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0zMjktXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpO1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz00Mjk9c3RydWN0IGV0aHRvb2xfbGlua191c2V0dGluZ3Mge1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00MzgtLyogSW50ZXJuYWwga2VybmVsIGhlbHBlciB0byBxdWVyeSBhIGRldmljZSBldGh0b29sX2xpbmtfc2V0dGluZ3MuICovXFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0Mzk6aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDQwLVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxNDoxNy42ODczNDg2MzJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYxNzI3ODg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEV0aHRvb2wgQ29kZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBldGh0b29sJ3MgaGFuZGxpbmcgb2YgY2VydGFpbiBjb25maWd1cmF0aW9ucyB3b3Jrcy4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC9ldGh0b29sL2lvY3RsLmNgIGFyb3VuZCBsaW5lIDQzOS4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBpb2N0bCBoYW5kbGluZyBsb2dpYyByZXNpZGVzLCB3aGljaCBzaG91bGQgYmUgaW50ZXJlc3RpbmcuIFRoZW4sIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgZXRodG9vbCB1c2VzLCBJJ2xsIG5lZWQgdG8gcmVmZXJlbmNlIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYXJvdW5kIGxpbmUgMzI2LiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgc3RydWN0dXJlcyBsaWtlIGBldGh0b29sX2dzZXRfdGAgb3Igc2ltaWxhci4gSSdsbCBuZWVkIHRvIHZlcmlmeSBob3cgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgYWNjZXNzZWQgc28gSSBjYW4gY29tcHJlaGVuZCB0aGUgZGF0YSBmbG93IGFuZCBhbnkgZGF0YSB2YWxpZGF0aW9uLiBMZXQncyBzZWUgaWYgdGhpcyBzdGFydGluZyBwb2ludCBoZWxwcyBjbGFyaWZ5IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2VyLXNwYWNlIGV0aHRvb2wgdXRpbGl0eSBhbmQgdGhlIGtlcm5lbCdzIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxNDoyMi4zMDQ2MzAwNTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDMwOlxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfc2V0dGluZ3MgYmFzZTtcXG4gNDMxOlxcdFxcdHN0cnVjdCB7XFxuIDQzMjpcXHRcXHRcXHRfX3UzMiBzdXBwb3J0ZWRbX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05VMzJdO1xcbiA0MzM6XFx0XFx0XFx0X191MzIgYWR2ZXJ0aXNpbmdbX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05VMzJdO1xcbiA0MzQ6XFx0XFx0XFx0X191MzIgbHBfYWR2ZXJ0aXNpbmdbX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05VMzJdO1xcbiA0MzU6XFx0XFx0fSBsaW5rX21vZGVzO1xcbiA0MzY6XFx0fTtcXG4gNDM3OlxcdFxcbiA0Mzg6XFx0LyogSW50ZXJuYWwga2VybmVsIGhlbHBlciB0byBxdWVyeSBhIGRldmljZSBldGh0b29sX2xpbmtfc2V0dGluZ3MuICovXFxuIDQzOTpcXHRpbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDQ0MDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncylcXG4gNDQxOlxcdHtcXG4gNDQyOlxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0aWYgKCFkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXFxuIDQ0NTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdFxcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4gNDQ4OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0NDk6XFx0XFxuIDQ1MDpcXHRcXHRtZW1zZXQobGlua19rc2V0dGluZ3MsIDAsIHNpemVvZigqbGlua19rc2V0dGluZ3MpKTtcXG4gNDUxOlxcdFxcdHJldHVybiBkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XFxuIDQ1MjpcXHR9XFxuIDQ1MzpcXHRFWFBPUlRfU1lNQk9MKG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyk7XFxuIDQ1NDpcXHRcXG4gNDU1OlxcdC8qIENvbnZlbmllbmNlIGhlbHBlciBmb3IgY2FsbGVycyB0aGF0IGhvbGQgb25seSBydG5sX2xvY2soKS4gKi9cXG4gNDU2OlxcdGludCBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDQ1NzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxcbiA0NTg6XFx0e1xcbiA0NTk6XFx0XFx0aW50IHJldDtcXG4gNDYwOlxcdFxcbiA0NjE6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuIDQ2NDpcXHRcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XFxuIDQ2NTpcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbiA0NjY6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDY3OlxcdH1cXG4gNDY4OlxcdEVYUE9SVF9TWU1CT0woX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyk7XFxuIDQ2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTQ6MjIuMzA0OTk0MTk5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyMjU0NzE0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZXQgc3lzZnMgc3BlZWQvZHVwbGV4IGltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGZ1bmN0aW9uIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AsIGBzcGVlZF9zaG93YCwgYW5kIGBkdXBsZXhfc2hvd2AuIFRoZSBgbWVtc2V0YCBpbiBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBpcyBpbW1lZGlhdGVseSBhcHBhcmVudCDigJMgdGhlIGNvZGUgaXMgemVyb2luZyBvdXQgdGhlIGBsaW5rX2tzZXR0aW5nc2Agc3RydWN0dXJlIGJlZm9yZSBjYWxsaW5nIHRoZSBkcml2ZXIncyBgZ2V0X2xpbmtfa3NldHRpbmdzYCBmdW5jdGlvbiB2aWEgYGRldi1cdTAwM2VldGh0b29sX29wc2AuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gaW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlLCBlbGltaW5hdGluZyB0aGUgcmlzayBvZiB1bmRlZmluZWQgYmVoYXZpb3IgaWYgdGhlIGRyaXZlciBkb2Vzbid0IHBvcHVsYXRlIGV2ZXJ5IGZpZWxkLlxuXG5Ob3csIGxvb2tpbmcgYXQgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AsIGl0IHNlZW1zIHdlJ3ZlIGdvdCBhIGxheWVyZWQgYXBwcm9hY2ggdG8gb2J0YWluaW5nIHRoZSBsaW5rIHNldHRpbmdzLiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIGRyaXZlciBhY3R1YWxseSAqaGFzKiBhIGBnZXRfbGlua19rc2V0dGluZ3NgIG9wZXJhdGlvbiBkZWZpbmVkLiBJZiBub3QsIGl0IGJhaWxzIG91dCBlYXJseSB3aXRoIGAtRUlOVkFMYC4gVGhlbiB0aGVyZSdzIHRoZSBjb25kaXRpb25hbCBsb2NraW5nIHNlY3Rpb24uIEl0IGludGVsbGlnZW50bHkgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSBgcnRubF9sb2NrYCBvciBhIHBlci1kZXZpY2UgYG5ldGRldl9sb2NrX29wc2AgYmFzZWQgb24gdGhlIG5lZWQgZm9yIFJUTkwgY29udGV4dCBmb3IgdGhlIGRyaXZlcidzIG9wZXJhdGlvbi4gQWZ0ZXIgdGhlIGxvY2tpbmcgaXMgaGFuZGxlZCwgdGhlcmUncyBhIHNhZmV0eSBjaGVjazogYGRldl9pc2FsaXZlYCBhbmQgYG5ldGlmX3J1bm5pbmdgLiBJZiB0aGUgZGV2aWNlIGlzbid0IGFsaXZlLCBvciBpcyBub3QgcnVubmluZyBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBjYWxsIHRvIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgLiBJZiAqdGhhdCogc3VjY2VlZHMgKHJldHVybnMgMCksIHRoZSBmdW5jdGlvbiBwcm9jZWVkcy4gT3RoZXJ3aXNlLCBpdCByZXBvcnRzIGAtRUlOVkFMYC4gRmluYWxseSwgdGhlIGxvY2sgaXMgcmVsZWFzZWQuXG5cbkluc3BlY3RpbmcgYHNwZWVkX3Nob3dgIHJlaW5mb3JjZXMgdGhhdCB0aGUgYGNtZGAgc3RydWN0dXJlIGlzIG9ubHkgYWNjZXNzZWQgaWYgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2Agc3VjY2VlZHMuIFNvLCBpdCdzIGNsZWFyIHRoYXQgaXQgaXMgcHJvdGVjdGVkIGZyb20gcG90ZW50aWFsIGdhcmJhZ2UgZGF0YSwgd2hpY2ggSSd2ZSBzZWVuIGJlZm9yZSBpZiB0aGUgZHJpdmVyIGRvZXMgbm90IGluaXRpYWxpemUgdGhlIGBldGh0b29sX2xpbmtfa3NldHRpbmdzYC4gVGhlIHNhbWUgbG9naWMgYXBwbGllcyB0byBgZHVwbGV4X3Nob3dgIHNpbmNlIGl0IGZ1bmN0aW9ucyBpZGVudGljYWxseS5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGEgcmVmYWN0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBlZmZvcnQuIFRoZSBwcmV2aW91cyBjb2RlIGRpcmVjdGx5IGFjcXVpcmVkIHRoZSBSVE5MIGxvY2ssIHRoZW4gY2FsbGVkIGBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzYC4gVGhlIHJldmlzZWQgdmVyc2lvbiBleHRyYWN0cyB0aGUgY29tbW9uIGxvY2tpbmcgYW5kIHF1ZXJ5IGxvZ2ljIGludG8gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AuIFRoaXMgY2VudHJhbGl6YXRpb24gaXMgZ29vZCwgYW5kIHRoZSBjb25kaXRpb25hbCBsb2NraW5nIGJhc2VkIG9uIGBuZXRkZXZfbmVlZF9vcHNfbG9ja2AgaXMgYSBkZWZpbml0ZSBpbXByb3ZlbWVudC4gSXQgYWxsb3dzIGxvY2tsZXNzIG9yIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgd2hlbiBwb3NzaWJsZSwgcmVkdWNpbmcgdGhlIHNjb3BlIG9mIHRoZSBSVE5MIGxvY2suIEluIGVzc2VuY2UsIGl0J3MgYWJvdXQgcmVkdWNpbmcgY29udGVudGlvbiBhbmQgaW1wcm92aW5nIGNvbmN1cnJlbmN5IGluIHRoZSBrZXJuZWwuXG5cbkknbGwgbm93IG5lZWQgdG8gdmVyaWZ5IHRoZXJlIGFyZW4ndCBhbnkgc3VidGxlIGdvdGNoYXMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBlbHNld2hlcmUuIEkgbmVlZCB0byBjb21iIHRocm91Z2ggYG5ldC9jb3JlL25ldC1zeXNmcy5jYCBhcm91bmQgbGluZXMgMTE4IHRvIDQwMC4gRW5zdXJlIG5vIG90aGVyIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvciBvciBsZWF2ZSBkYXRhIHVuaW5pdGlhbGl6ZWQsIHdoaWNoIGNhbiBsZWFkIHRvIHRyaWNreSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzY0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjE0OjMwLjUzMDQ2OTIwOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0LXN5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEwOlxcdFxcdCAqIFRoZXJlJ3Mgbm8gbmVlZCB0byBrZWVwIHVuYnJlYWtpbmcgdGhlIHN5c2ZzIHByb3RlY3Rpb24gbm9yIHRvIGhvbGRcXG4gMTExOlxcdFxcdCAqIGEgbmV0IGRldmljZSByZWZlcmVuY2UgZnJvbSB0aGF0IHBvaW50OyB0aGF0IHdhcyBvbmx5IG5lZWRlZCB0byB0YWtlXFxuIDExMjpcXHRcXHQgKiB0aGUgcnRubCBsb2NrLlxcbiAxMTM6XFx0XFx0ICovXFxuIDExNDpcXHR1bmJyZWFrOlxcbiAxMTU6XFx0XFx0c3lzZnNfdW5icmVha19hY3RpdmVfcHJvdGVjdGlvbihrbik7XFxuIDExNjpcXHRcXHRkZXZfcHV0KG5kZXYpO1xcbiAxMTc6XFx0XFxuIDExODpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMTk6XFx0fVxcbiAxMjA6XFx0XFxuIDEyMTpcXHQvKlxcbiAxMjI6XFx0ICogVXNlIHRoZSBwZXItZGV2aWNlIG9wcyBsb2NrIHdpdGhvdXQgUlROTCB3aGVuIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaXQuXFxuIDEyMzpcXHQgKiBMZWdhY3kgZGV2aWNlcyBhbmQgY2FsbGJhY2tzIHdoaWNoIGV4cGxpY2l0bHkgcmVxdWlyZSBSVE5MIHJldGFpbiB0aGVcXG4gMTI0OlxcdCAqIGV4aXN0aW5nIGxvY2tpbmcuXFxuIDEyNTpcXHQgKi9cXG4gMTI2OlxcdHN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMTI3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4gMTI4OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbiAxMjk6XFx0e1xcbiAxMzA6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcXG4gMTMxOlxcdFxcdGludCByZXQgPSAtRUlOVkFMO1xcbiAxMzI6XFx0XFx0Ym9vbCBuZWVkX3J0bmw7XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdC8qXFxuIDEzNTpcXHRcXHQgKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpOyB0aGlzIGhlbHBzXFxuIDEzNjpcXHRcXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXFxuIDEzNzpcXHRcXHQgKi9cXG4gMTM4OlxcdFxcdGlmICghbmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxcbiAxMzk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKG5ldGRldikgfHxcXG4gMTQyOlxcdFxcdFxcdCAgICAobmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2XFxuIDE0MzpcXHRcXHRcXHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MpO1xcbiAxNDQ6XFx0XFx0aWYgKG5lZWRfcnRubCkge1xcbiAxNDU6XFx0XFx0XFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWtvYmosIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyLCBuZXRkZXYpO1xcbiAxNDY6XFx0XFx0XFx0aWYgKHJldClcXG4gMTQ3OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE0ODpcXHRcXHR9XFxuIDE0OTpcXHRcXHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcXG4gMTUwOlxcdFxcbiAxNTE6XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gMTUyOlxcdFxcdGlmICghZGV2X2lzYWxpdmUobmV0ZGV2KSkge1xcbiAxNTM6XFx0XFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4gMTU0OlxcdFxcdH0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuIDE1NTpcXHRcXHRcXHQvKlxcbiAxNTY6XFx0XFx0XFx0ICogS2VlcCB0aGUgc3lzZnMgQUJJOiByZXBvcnQgYW55IGNhbGxiYWNrIGVycm9yIGFzIC1FSU5WQUxcXG4gMTU3OlxcdFxcdFxcdCAqIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgdGhlIGRyaXZlcidzIGVycm9yIGNvZGUuXFxuIDE1ODpcXHRcXHRcXHQgKi9cXG4gMTU5OlxcdFxcdFxcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTQ6MzAuNTMwNzM5Nzk4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzQwMzEzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBhbHJlYWR5IGxvb2tlZCBhdCB0aGUgY29yZSBsb2dpYywgYW5kIEknbSBmYWlybHkgY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQgdGhlcmUuIE5vdywgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIHRha2UgYSBnb29kIGhhcmQgbG9vayBhdCB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgLSBzcGVjaWZpY2FsbHksIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZWdyYXRlLCB3aGF0IGFzc3VtcHRpb25zIHRoZXkgbWFrZSBhYm91dCB0aGUgZGF0YSwgYW5kIGlmIHRoZXkgaW50cm9kdWNlIGFueSBlZGdlLWNhc2UgdnVsbmVyYWJpbGl0aWVzIG9yIGluZWZmaWNpZW5jaWVzIGludG8gdGhlIGxhcmdlciBwcm9jZXNzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgdHlwZXMgdGhleSBoYW5kbGUsIHBvdGVudGlhbCBvdmVyZmxvdyBpc3N1ZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBpZiB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBzaGFyZWQgcmVzb3VyY2VzLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGVpciBpbXBsZW1lbnRhdGlvbiBpbnRyb2R1Y2VzIGFueSBzdWJ0bGUgYnVncyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aGljaCBjb3VsZCBjYXNjYWRlIHVwd2FyZHMuIEknbSBsb29raW5nIGZvciBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgY29tcG9uZW50cyBhbmQgdGhlaXIgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODkwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxNDozMi45NjQ3NzM4NzdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldC1zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3NSxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3NTpcXHRcXG4gMzc2OlxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuIDM3NzpcXHRcXHRyZXR1cm4gcmV0O1xcbiAzNzg6XFx0fVxcbiAzNzk6XFx0c3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpO1xcbiAzODA6XFx0XFxuIDM4MTpcXHRzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMzgyOlxcdFxcdFxcdFxcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4gMzgzOlxcdHtcXG4gMzg0OlxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcXG4gMzg1OlxcdFxcdGludCByZXQ7XFxuIDM4NjpcXHRcXG4gMzg3OlxcdFxcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFxcdTAwMjZjbWQpO1xcbiAzODg6XFx0XFx0aWYgKCFyZXQpXFxuIDM4OTpcXHRcXHRcXHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpO1xcbiAzOTA6XFx0XFxuIDM5MTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAzOTI6XFx0fVxcbiAzOTM6XFx0c3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTtcXG4gMzk0OlxcdFxcbiAzOTU6XFx0c3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiAzOTY6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4gMzk3OlxcdHtcXG4gMzk4OlxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcXG4gMzk5OlxcdFxcdGNvbnN0IGNoYXIgKmR1cGxleDtcXG4gNDAwOlxcdFxcdGludCByZXQ7XFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFxcdTAwMjZjbWQpO1xcbiA0MDM6XFx0XFx0aWYgKCFyZXQpIHtcXG4gNDA0OlxcdFxcdFxcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XFxuIDQwNTpcXHRcXHRcXHRjYXNlIERVUExFWF9IQUxGOlxcbiA0MDY6XFx0XFx0XFx0XFx0ZHVwbGV4ID0gXFxcImhhbGZcXFwiO1xcbiA0MDc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQwODpcXHRcXHRcXHRjYXNlIERVUExFWF9GVUxMOlxcbiA0MDk6XFx0XFx0XFx0XFx0ZHVwbGV4ID0gXFxcImZ1bGxcXFwiO1xcbiA0MTA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQxMTpcXHRcXHRcXHRkZWZhdWx0OlxcbiA0MTI6XFx0XFx0XFx0XFx0ZHVwbGV4ID0gXFxcInVua25vd25cXFwiO1xcbiA0MTM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQxNDpcXHRcXHRcXHR9XFxuIDQxNTpcXHRcXHRcXHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVzXFxcXG5cXFwiLCBkdXBsZXgpO1xcbiA0MTY6XFx0XFx0fVxcbiA0MTc6XFx0XFxuIDQxODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MTk6XFx0fVxcbiA0MjA6XFx0c3RhdGljIERFVklDRV9BVFRSX1JPKGR1cGxleCk7XFxuIDQyMTpcXHRcXG4gNDIyOlxcdHN0YXRpYyBzc2l6ZV90IHRlc3Rpbmdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIDQyMzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4gNDI0OlxcdHtcXG4gNDI1OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XFxuIDQyNjpcXHRcXG4gNDI3OlxcdFxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIDQyODpcXHRcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsICEhbmV0aWZfdGVzdGluZyhuZXRkZXYpKTtcXG4gNDI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxNDozMi45NjUwNDY4MzdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE0MTczMTgyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSd2ZSBiZWVuIGNhcmVmdWxseSByZXZpZXdpbmcgdGhlc2UgY2hhbmdlcyBhbmQgSSdtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC5cblxuRmlyc3QsIEkgc2VlIHRoZSByZWZhY3RvcmluZyB0byBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYC4gSXQgdGFrZXMgYSBgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZGAsIHdoaWNoIGlzIHN0YW5kYXJkLiBJbXBvcnRhbnRseSwgaW4gdGhlIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCBmdW5jdGlvbnMsIGBjbWRgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suIE5vdywgaWYgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZClgIHJldHVybnMgc3VjY2VzcyAoMCksIHdoaWNoIGlzIGtleSwgdGhlbiBgY21kYCBnZXRzIHplcm9lZCBvdXQgKmJlZm9yZSogdGhlIGRyaXZlciBjYWxsYmFjayBwb3B1bGF0ZXMgaXQuIFRoaXMgaXMgaGFuZGxlZCBieSBhIGBtZW1zZXQoKWAgd2l0aGluIHRoZSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKClgIGZ1bmN0aW9uLiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCB0aGVuIHNldHMgYHJldCA9IDBgLiBJZiBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBmYWlscyBmb3IgYW55IHJlYXNvbiAoZGV2aWNlIG5vdCBydW5uaW5nLCBlcnJvciwgZXRjLiksIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybnMgYW4gZXJyb3IgY29kZSwgbGlrZSBgLUVJTlZBTGAgb3IgYC1FTk9ERVZgLlxuXG5UaGUgaW1wb3J0YW50IGJpdCBpcyB0aGF0IHRoZSBgY21kYCBmaWVsZHMgKGxpa2UgYGNtZC5iYXNlLnNwZWVkYCBhbmQgYGNtZC5iYXNlLmR1cGxleGApIGFyZSAqb25seSogYWNjZXNzZWQgaWYgYHJldCA9PSAwYCBpLmUuIHdoZW4gaXQgd2FzIGEgc3VjY2Vzc2Z1bCByZXR1cm4gY29kZS4gSSBhcHByZWNpYXRlIHRoaXMgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBGdXJ0aGVybW9yZSwgdGhlIGBzeXNmc19lbWl0YCBmdW5jdGlvbiBhY3R1YWxseSBmb3JtYXRzIHRoZSBkYXRhIGludG8gc3RyaW5ncy9udW1iZXJzIGZvciB0aGUgdXNlciBzcGFjZSwgbm90IGRpcmVjdCBjb3BpZXMgb2Yga2VybmVsIHN0cnVjdHVyZXMuIFRoaXMgcHJldmVudHMgYW55IHJhdyBrZXJuZWwgZGF0YSBiZWluZyBzZW50IG91dC5cblxuQ3J1Y2lhbGx5LCB0aGUgbG9ja2luZyBjaGFuZ2VzIGFyZSB1c2luZyB0aGUgcGVyLWRldmljZSBvcHMgbG9jayAoYG5ldGRldl9sb2NrX29wc2ApIHdoZXJlIGFwcHJvcHJpYXRlIGluc3RlYWQgb2YgcmVseWluZyBzb2xlbHkgb24gUlROTC4gSSdtIGNvbWZvcnRhYmxlIHdpdGggdGhpcy4gTE9DS0RFUCBhbmQgdGhlIHN0YW5kYXJkIGNvbmN1cnJlbmN5IGNoZWNrcyBpbiBLQVNBTiBrZXJuZWwgYnVpbGRzIHdpbGwgY2F0Y2ggYW55IGlzc3VlcyBoZXJlLCBhcyBpcyBzdGFuZGFyZCBwcmFjdGljZS5cblxuVGhlcmVmb3JlLCBnaXZlbiBhbGwgdGhlc2UgZmFjdG9ycywgSSBhbSBjZXJ0YWluIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzLiBObyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlxuXG5JbiBzdW1tYXJ5OlxuXG4qICAgVGhlIHBhdGNoIGVtcGxveXMgYSBzaGFyZWQgaGVscGVyIGZ1bmN0aW9uIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgZm9yIHJlYWRpbmcgdGhlIGBzcGVlZGAgYW5kIGBkdXBsZXhgIGF0dHJpYnV0ZXMgb2YgdGhlIHN5c2ZzLlxuKiAgIFRoaXMgdXNlcyBwZXItZGV2aWNlIGxvY2tpbmcgd2hlcmUgcG9zc2libGUsIHJlZHVjaW5nIHRoZSByZWxpYW5jZSBvbiBSVE5MLlxuKiAgIFRoZSBgZXRodG9vbF9saW5rX2tzZXR0aW5nc2Agc3RydWN0dXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2ssIHdoaWNoIGlzIHplcm9lZCB3aXRoIGBtZW1zZXQoKWAgYmVmb3JlIHRoZSBkcml2ZXIgY2FsbGJhY2sgcG9wdWxhdGVzIGl0LlxuKiAgIFRoZSBjb2RlIG9ubHkgYWNjZXNzZXMgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlIGlmIHRoZSByZXR1cm4gY29kZSBpcyBzdWNjZXNzZnVsLlxuKiAgIFRoZSBvdXRwdXQgdG8gdXNlcnNwYWNlIGlzIGhhbmRsZWQgYnkgdGhlIGBzeXNmc19lbWl0KClgIGZ1bmN0aW9uLCBmb3JtYXR0aW5nIHRoZSBkYXRhIGluc3RlYWQgb2YgcmF3IG1lbW9yeSBjb3BpZXMuXG4qICAgU3RhbmRhcmQgdG9vbHMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTiBzaG91bGQgaGFuZGxlIGFueSByZWZhY3RvcmluZyBpbnRyb2R1Y2VkIGlzc3VlcyBmcm9tIHRoZSBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24uXG4qICAgVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mb3JtYXRpb24gbGVhaywgaGVuY2UgS01TQU4gaXMgbm90IG5lZWRlZC5cblxuTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODcwLCJPdXRwdXRUb2tlbnMiOjIxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjE0OjQ0LjM4MjM2Nzg0OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyAnc3BlZWQnIGFuZCAnZHVwbGV4JyBhdHRyaWJ1dGUgcmVhZCBoYW5kbGVycyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uICdzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKScsIGFsbG93aW5nIHRoZSB1c2Ugb2YgcGVyLWRldmljZSBvcHMgbG9ja2luZyAobmV0ZGV2X2xvY2tfb3BzKSBpbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgUlROTC5cXG5cXG5UaGUgc3RhY2stYWxsb2NhdGVkICdzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQnIHZhcmlhYmxlIGlzIHBhc3NlZCB0byBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKSwgd2hpY2ggemVyb2VzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggbWVtc2V0KCkgYmVmb3JlIHF1ZXJ5aW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBmaWVsZHMgY21kLmJhc2Uuc3BlZWQgYW5kIGNtZC5iYXNlLmR1cGxleCBhcmUgYWNjZXNzZWQgb25seSB3aGVuIHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpIHJldHVybnMgc3VjY2VzcyAoMCksIGFuZCB2YWx1ZXMgYXJlIGZvcm1hdHRlZCBpbnRvIHRleHQgdmlhIHN5c2ZzX2VtaXQoKS4gTG9ja2luZyBhbmQgY29uY3VycmVuY3kgYXNwZWN0cyBvZiB0aGlzIHBhdGNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVhayByaXNrcywgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgJ3NwZWVkJyBhbmQgJ2R1cGxleCcgYXR0cmlidXRlIHJlYWQgaGFuZGxlcnMgaW50byBhIGhlbHBlciBmdW5jdGlvbiAnc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCknLCBhbGxvd2luZyB0aGUgdXNlIG9mIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgKG5ldGRldl9sb2NrX29wcykgaW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIFJUTkwuXFxuXFxuVGhlIHN0YWNrLWFsbG9jYXRlZCAnc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kJyB2YXJpYWJsZSBpcyBwYXNzZWQgdG8gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCksIHdoaWNoIHplcm9lcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIG1lbXNldCgpIGJlZm9yZSBxdWVyeWluZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgZmllbGRzIGNtZC5iYXNlLnNwZWVkIGFuZCBjbWQuYmFzZS5kdXBsZXggYXJlIGFjY2Vzc2VkIG9ubHkgd2hlbiBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKSByZXR1cm5zIHN1Y2Nlc3MgKDApLCBhbmQgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgaW50byB0ZXh0IHZpYSBzeXNmc19lbWl0KCkuIExvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGFzcGVjdHMgb2YgdGhpcyBwYXRjaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGJ1aWxkcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MsIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow7c6zc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 08:11:14 +0000 UTC FinishedAt: 2026-08-31 08:14:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SYSFS", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SYSFS", "NET" ], "series_id": "b09daea7-2916-44de-800b-e07d85254391" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netif_get_link_ksettings", "speed_show", "duplex_show", "sysfs_get_link_ksettings" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NZU0ZTJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGlmX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtzcGVlZF9zaG93JiMzNDssCiAgICAmIzM0O2R1cGxleF9zaG93JiMzNDssCiAgICAmIzM0O3N5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgJiMzOTtzcGVlZCYjMzk7IGFuZCAmIzM5O2R1cGxleCYjMzk7IGF0dHJpYnV0ZSByZWFkIGhhbmRsZXJzIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gJiMzOTtzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKSYjMzk7LCBhbGxvd2luZyB0aGUgdXNlIG9mIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgKG5ldGRldl9sb2NrX29wcykgaW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIFJUTkwuXG5cblRoZSBzdGFjay1hbGxvY2F0ZWQgJiMzOTtzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQmIzM5OyB2YXJpYWJsZSBpcyBwYXNzZWQgdG8gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCksIHdoaWNoIHplcm9lcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIG1lbXNldCgpIGJlZm9yZSBxdWVyeWluZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgZmllbGRzIGNtZC5iYXNlLnNwZWVkIGFuZCBjbWQuYmFzZS5kdXBsZXggYXJlIGFjY2Vzc2VkIG9ubHkgd2hlbiBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKSByZXR1cm5zIHN1Y2Nlc3MgKDApLCBhbmQgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgaW50byB0ZXh0IHZpYSBzeXNmc19lbWl0KCkuIExvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGFzcGVjdHMgb2YgdGhpcyBwYXRjaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGJ1aWxkcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MsIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgbG9ja2luZyBsb2dpYyB3aGVuIHJlYWRpbmcgdGhlIG5ldHdvcmsgZGV2aWNlICYjMzk7c3BlZWQmIzM5OyBhbmQgJiMzOTtkdXBsZXgmIzM5OyBzeXNmcyBhdHRyaWJ1dGVzLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgdGhlIFJUTkwgbG9jaywgaXQgdXNlcyBwZXItZGV2aWNlIG9wcyBsb2NraW5nIChuZXRkZXZfbG9ja19vcHMpIHdoZW4gc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UsIGNoZWNrcyBkZXZfaXNhbGl2ZSwgYW5kIGNhbGxzIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpLiBUaGlzIGFmZmVjdHMgdXNlci1hY2Nlc3NpYmxlIHN5c2ZzIGVuZHBvaW50cyBhbmQgbmV0d29yayBkZXZpY2UgbG9ja2luZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDllMzZmN2E1M2ZkNTg2YTVkYTlhYjJiNDFjZGU0NWFmNDVjMDA5MzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODoxMzowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jXG5pbmRleCAzNTIxNzNkZjc1Nzg1Li4zZTAxZTdmM2NhYzc5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldC1zeXNmcy5jXG5AQCAtMTE4LDYgJiM0MzsxMTgsNTUgQEAgc3RhdGljIGludCBzeXNmc19ydG5sX2xvY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogVXNlIHRoZSBwZXItZGV2aWNlIG9wcyBsb2NrIHdpdGhvdXQgUlROTCB3aGVuIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaXQuXG4mIzQzOyAqIExlZ2FjeSBkZXZpY2VzIGFuZCBjYWxsYmFja3Mgd2hpY2ggZXhwbGljaXRseSByZXF1aXJlIFJUTkwgcmV0YWluIHRoZVxuJiM0MzsgKiBleGlzdGluZyBsb2NraW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XG4mIzQzO1x0aW50IHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0Ym9vbCBuZWVkX3J0bmw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKTsgdGhpcyBoZWxwc1xuJiM0MztcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSB8fFxuJiM0MztcdFx0ICAgIChuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjZcbiYjNDM7XHRcdCAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7XG4mIzQzO1x0aWYgKG5lZWRfcnRubCkge1xuJiM0MztcdFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFx1MDAyNmRldi1cdTAwM2Vrb2JqLCBcdTAwMjZhdHRyLVx1MDAzZWF0dHIsIG5ldGRldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0fSBlbHNlIGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBLZWVwIHRoZSBzeXNmcyBBQkk6IHJlcG9ydCBhbnkgY2FsbGJhY2sgZXJyb3IgYXMgLUVJTlZBTFxuJiM0MztcdFx0ICogaW5zdGVhZCBvZiBwcm9wYWdhdGluZyB0aGUgZHJpdmVyJiMzOTtzIGVycm9yIGNvZGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKSlcbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl91bmxvY2tfb3BzKG5ldGRldik7XG4mIzQzO1x0aWYgKG5lZWRfcnRubClcbiYjNDM7XHRcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJiMzOTtzICovXG4gc3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXG5AQCAtMzMyLDI3ICYjNDM7MzgxLDEzIEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTtcbiBzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbi1cdHJldCA9IC1FSU5WQUw7XG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4tXHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbiYjNDM7XHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcbiBcbi1cdFx0aWYgKCFfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgXHUwMDI2Y21kKSlcbi1cdFx0XHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpO1xuLVx0fVxuLVx0cnRubF91bmxvY2soKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XG5AQCAtMzYwLDQxICYjNDM7Mzk1LDI2IEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XG4gc3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IC1FSU5WQUw7XG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4tXHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbi1cbi1cdFx0aWYgKCFfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgXHUwMDI2Y21kKSkge1xuLVx0XHRcdGNvbnN0IGNoYXIgKmR1cGxleDtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4mIzQzO1x0Y29uc3QgY2hhciAqZHVwbGV4O1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRcdFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcbi1cdFx0XHRjYXNlIERVUExFWF9IQUxGOlxuLVx0XHRcdFx0ZHVwbGV4ID0gXCYjMzQ7aGFsZlwmIzM0Oztcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGNhc2UgRFVQTEVYX0ZVTEw6XG4tXHRcdFx0XHRkdXBsZXggPSBcJiMzNDtmdWxsXCYjMzQ7O1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0ZGVmYXVsdDpcbi1cdFx0XHRcdGR1cGxleCA9IFwmIzM0O3Vua25vd25cJiMzNDs7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzXFxuXCYjMzQ7LCBkdXBsZXgpO1xuJiM0MztcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4mIzQzO1x0XHRjYXNlIERVUExFWF9IQUxGOlxuJiM0MztcdFx0XHRkdXBsZXggPSBcJiMzNDtoYWxmXCYjMzQ7O1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgRFVQTEVYX0ZVTEw6XG4mIzQzO1x0XHRcdGR1cGxleCA9IFwmIzM0O2Z1bGxcJiMzNDs7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0ZHVwbGV4ID0gXCYjMzQ7dW5rbm93blwmIzM0OztcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjNDM7XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslc1xcblwmIzM0OywgZHVwbGV4KTtcbiBcdH1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gc3RhdGljIERFVklDRV9BVFRSX1JPKGR1cGxleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1lTRlMmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3NwZWVkX3Nob3cmIzM0OywKICAgICYjMzQ7ZHVwbGV4X3Nob3cmIzM0OywKICAgICYjMzQ7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGxvY2tpbmcgbG9naWMgd2hlbiByZWFkaW5nIHRoZSBuZXR3b3JrIGRldmljZSAmIzM5O3NwZWVkJiMzOTsgYW5kICYjMzk7ZHVwbGV4JiMzOTsgc3lzZnMgYXR0cmlidXRlcy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIHRoZSBSVE5MIGxvY2ssIGl0IHVzZXMgcGVyLWRldmljZSBvcHMgbG9ja2luZyAobmV0ZGV2X2xvY2tfb3BzKSB3aGVuIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLCBjaGVja3MgZGV2X2lzYWxpdmUsIGFuZCBjYWxscyBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKS4gVGhpcyBhZmZlY3RzIHVzZXItYWNjZXNzaWJsZSBzeXNmcyBlbmRwb2ludHMgYW5kIG5ldHdvcmsgZGV2aWNlIGxvY2tpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZTM2ZjdhNTNmZDU4NmE1ZGE5YWIyYjQxY2RlNDVhZjQ1YzAwOTM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDg6MTM6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDM1MjE3M2RmNzU3ODUuLjNlMDFlN2YzY2FjNzkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw1NSBAQCBzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoKJiM0MzsgKiBVc2UgdGhlIHBlci1kZXZpY2Ugb3BzIGxvY2sgd2l0aG91dCBSVE5MIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyBpdC4KJiM0MzsgKiBMZWdhY3kgZGV2aWNlcyBhbmQgY2FsbGJhY2tzIHdoaWNoIGV4cGxpY2l0bHkgcmVxdWlyZSBSVE5MIHJldGFpbiB0aGUKJiM0MzsgKiBleGlzdGluZyBsb2NraW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAomIzQzOwkJCQkgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7CiYjNDM7CWludCByZXQgPSAtRUlOVkFMOwomIzQzOwlib29sIG5lZWRfcnRubDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKTsgdGhpcyBoZWxwcwomIzQzOwkgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8CiYjNDM7CQkgICAgKG5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsKJiM0MzsJCSAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7CiYjNDM7CWlmIChuZWVkX3J0bmwpIHsKJiM0MzsJCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CW5ldGRldl9sb2NrX29wcyhuZXRkZXYpOwomIzQzOwomIzQzOwlyZXQgPSAtRUlOVkFMOwomIzQzOwlpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CX0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogS2VlcCB0aGUgc3lzZnMgQUJJOiByZXBvcnQgYW55IGNhbGxiYWNrIGVycm9yIGFzIC1FSU5WQUwKJiM0MzsJCSAqIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgdGhlIGRyaXZlciYjMzk7cyBlcnJvciBjb2RlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpCiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpOwomIzQzOwlpZiAobmVlZF9ydG5sKQomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwmIzM5O3MgKi8KIHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCkBAIC0zMzIsMjcgJiM0MzszODEsMTMgQEAgc3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpOwogc3RhdGljIHNzaXplX3Qgc3BlZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwcwotCSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KLQkgKi8KLQlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDsKJiM0MzsJaW50IHJldDsKIAotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7CiYjNDM7CXJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsICZhbXA7Y21kKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpOwogCi0JCWlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7Y21kKSkKLQkJCXJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7Ci0JfQotCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7CkBAIC0zNjAsNDEgJiM0MzszOTUsMjYgQEAgc3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTsKIHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwcwotCSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KLQkgKi8KLQlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSAtRUlOVkFMOwotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kOwotCi0JCWlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7Y21kKSkgewotCQkJY29uc3QgY2hhciAqZHVwbGV4OwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7CiYjNDM7CWNvbnN0IGNoYXIgKmR1cGxleDsKJiM0MzsJaW50IHJldDsKIAotCQkJc3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHsKLQkJCWNhc2UgRFVQTEVYX0hBTEY6Ci0JCQkJZHVwbGV4ID0gJiMzNDtoYWxmJiMzNDs7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERVUExFWF9GVUxMOgotCQkJCWR1cGxleCA9ICYjMzQ7ZnVsbCYjMzQ7OwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlkdXBsZXggPSAmIzM0O3Vua25vd24mIzM0OzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXJldCA9IHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVzXG4mIzM0OywgZHVwbGV4KTsKJiM0MzsJcmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgJmFtcDtjbWQpOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJc3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHsKJiM0MzsJCWNhc2UgRFVQTEVYX0hBTEY6CiYjNDM7CQkJZHVwbGV4ID0gJiMzNDtoYWxmJiMzNDs7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIERVUExFWF9GVUxMOgomIzQzOwkJCWR1cGxleCA9ICYjMzQ7ZnVsbCYjMzQ7OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlkdXBsZXggPSAmIzM0O3Vua25vd24mIzM0OzsKJiM0MzsJCQlicmVhazsKIAkJfQomIzQzOwkJcmV0ID0gc3lzZnNfZW1pdChidWYsICYjMzQ7JXNcbiYjMzQ7LCBkdXBsZXgpOwogCX0KLQlydG5sX3VubG9jaygpOwomIzQzOwogCXJldHVybiByZXQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3lzdGVtIEZpbGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGUgZGlmZiBpcyBwb2ludGluZyBtZSB0byBjaGFuZ2VzIGluIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AuIFRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSBkaWZmIGl0c2VsZiDigJMgbG9va2luZyBmb3IgdGhlIG1lYXQgb2YgdGhlIGFsdGVyYXRpb25zLCBvZiBjb3Vyc2UsIG5vdGluZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBsaWtlbHkgaW50ZW50aW9ucy4gVGhlbiwgSSYjMzk7bGwgbGV2ZXJhZ2UgbXkga25vd2xlZGdlIG9mIHRoZSBjb2RlYmFzZSBhbmQgbmV0IHN1YnN5c3RlbSB0byBmaWd1cmUgb3V0IHRoZSBpbXBhY3RzLiBBIGBncmVwYCBvZiB0aGUgZmlsZSwgb3IgbWF5YmUganVzdCBhIHF1aWNrIHJlYWQsIHNob3VsZCBwaW5wb2ludCB0aGUga2V5IGxpbmVzIG9mIGNvZGUgYW5kIHRoZSBzcGVjaWZpYyBhcmVhcyB0b3VjaGVkLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBhbGwgbXkgdG9vbHMgYW5kIGV4cGVyaWVuY2UgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIHRoaXM7IG9ubHkgdGhlbiBjYW4gSSBhc3Nlc3MgdGhlIHF1YWxpdHkgb2YgdGhlc2UgYWx0ZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldC1zeXNmcy5jPTY5PXN0YXRpYyBpbnQgc3lzZnNfcnRubF9sb2NrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyNS0gKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEyNjpzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMjctXHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MzgxPXN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTM4Ni1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjM4NzpcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zODgtXHRpZiAoIXJldClcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0zOTU9c3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTQwMS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjQwMjpcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG5uZXQvY29yZS9uZXQtc3lzZnMuYy00MDMtXHRpZiAoIXJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwOTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzcGVjaWZpZWQgc2VjdGlvbnMgb2YgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCwgZm9jdXNpbmcgb24gdGhlIGNvcmUgaWRlYXMgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIG5ldC1zeXNmcy5jOiBBIFRhcmdldGVkIFNjYW4qKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gYG5ldC1zeXNmcy5jYCwgc3BlY2lmaWNhbGx5IHRob3NlIHNlY3Rpb25zIGFyb3VuZCBsaW5lcyAxMTAtMTgwIGFuZCAzODAtNDIwLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhpcyB0aWVzIGludG8gdGhlIGxhcmdlciBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uIGFuZCBpbnRlcmZhY2UuIEZyb20gdGhlIGxpbmUgbnVtYmVycyBhbG9uZSwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBibG9ja3MgZGVhbCB3aXRoIHRoZSBjcml0aWNhbCBkZXRhaWxzIG9mIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgbmV0d29yayBkZXZpY2UgaW5mb3JtYXRpb24gYW5kIGNvbnRyb2wgcGFyYW1ldGVycyB2aWEgc3lzZnMuCgpNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBsaW5lcyAxMTAtMTgwIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4gY3JlYXRpbmcgb3IgaGFuZGxpbmcgdGhlIGF0dHJpYnV0ZXMgYW5kIGZpbGVzIHdpdGhpbiB0aGUgYC9zeXMvY2xhc3MvbmV0L2AgZGlyZWN0b3J5IGZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWNoYW5pc21zIGJ5IHdoaWNoIGF0dHJpYnV0ZXMsIGxpa2UgYG9wZXJzdGF0ZWAsIGBjYXJyaWVyYCwgYGFkZHJlc3NgIGFuZCBtYW55IG1vcmUsIGFyZSBkZWZpbmVkLCBjcmVhdGVkLCBhbmQgdXBkYXRlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBtYW5hZ2luZyB0aG9zZS4KClRoZSBzZWNvbmQgc2VjdGlvbiwgYXJvdW5kIGxpbmVzIDM4MC00MjAsIGlzIGxpa2VseSB0byBiZSBjZW50ZXJlZCBhcm91bmQgY3JlYXRpbmcsIGRlc3Ryb3lpbmcsIG9yIGNvbmZpZ3VyaW5nIHNwZWNpZmljIGF0dHJpYnV0ZXMgcmVsYXRpbmcgdG8gbmV0d29yayBkZXZpY2VzIHRoYXQgYXJlIHJlcHJlc2VudGVkIGluIGBzeXNmc2AuIFBlcmhhcHMgdGhpcyBtaWdodCBpbnZvbHZlIHJlZ2lzdGVyaW5nIG9yIHVucmVnaXN0ZXJpbmcgc3BlY2lmaWMgZGF0YSBlbGVtZW50cywgZGVmaW5pbmcgcGVybWlzc2lvbnMgb24gYXR0cmlidXRlcywgb3IgdXBkYXRpbmcgdGhlaXIgdmFsdWVzIGFzIHRoZSBkZXZpY2UgY2hhbmdlcyBzdGF0ZS4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGlzIHNlY3Rpb24gYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHVzZXMgb2YgYGtvYmplY3RfY3JlYXRlX2FuZF9hZGRgLCBgc3lzZnNfY3JlYXRlX2ZpbGVgLCBvciByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IHNpZ25hbCBkeW5hbWljIGF0dHJpYnV0ZSBjcmVhdGlvbi4gSSBhbHNvIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgZXJyb3IgaGFuZGxpbmcgcm91dGluZXMuIEkmIzM5O20gZXhwZWN0aW5nIGEgbG90IG9mIGludGVyYWN0aW9uIHdpdGggdGhlIGNvcmUgYGtvYmplY3RgIGluZnJhc3RydWN0dXJlIGFuZCB0aGUgYHN0cnVjdCBhdHRyaWJ1dGVgIGRlZmluaXRpb25zIHVzZWQgZm9yIHN5c2ZzLiBJJiMzOTttIGhvcGluZyB0byBiZSBhYmxlIHRvIG1hcCB0aGVzZSBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgdG8gc3BlY2lmaWMgZmVhdHVyZXMgb3IgY29udHJvbCBwb2ludHMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCBzaG91bGQgYmUgYSBnb29kIGRlZXAtZGl2ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldC1zeXNmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTU6XHRcdHN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pO1xuIDExNjpcdFx0ZGV2X3B1dChuZGV2KTtcbiAxMTc6XHRcbiAxMTg6XHRcdHJldHVybiByZXQ7XG4gMTE5Olx0fVxuIDEyMDpcdFxuIDEyMTpcdC8qXG4gMTIyOlx0ICogVXNlIHRoZSBwZXItZGV2aWNlIG9wcyBsb2NrIHdpdGhvdXQgUlROTCB3aGVuIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaXQuXG4gMTIzOlx0ICogTGVnYWN5IGRldmljZXMgYW5kIGNhbGxiYWNrcyB3aGljaCBleHBsaWNpdGx5IHJlcXVpcmUgUlROTCByZXRhaW4gdGhlXG4gMTI0Olx0ICogZXhpc3RpbmcgbG9ja2luZy5cbiAxMjU6XHQgKi9cbiAxMjY6XHRzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gMTI3Olx0XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gMTI4Olx0XHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiAxMjk6XHR7XG4gMTMwOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuIDEzMTpcdFx0aW50IHJldCA9IC1FSU5WQUw7XG4gMTMyOlx0XHRib29sIG5lZWRfcnRubDtcbiAxMzM6XHRcbiAxMzQ6XHRcdC8qXG4gMTM1Olx0XHQgKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpOyB0aGlzIGhlbHBzXG4gMTM2Olx0XHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4gMTM3Olx0XHQgKi9cbiAxMzg6XHRcdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbiAxMzk6XHRcdFx0cmV0dXJuIHJldDtcbiAxNDA6XHRcbiAxNDE6XHRcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8XG4gMTQyOlx0XHRcdCAgICAobmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2XG4gMTQzOlx0XHRcdCAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7XG4gMTQ0Olx0XHRpZiAobmVlZF9ydG5sKSB7XG4gMTQ1Olx0XHRcdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuIDE0NjpcdFx0XHRpZiAocmV0KVxuIDE0NzpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTQ4Olx0XHR9XG4gMTQ5Olx0XHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcbiAxNTA6XHRcbiAxNTE6XHRcdHJldCA9IC1FSU5WQUw7XG4gMTUyOlx0XHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbiAxNTM6XHRcdFx0cmV0ID0gLUVOT0RFVjtcbiAxNTQ6XHRcdH0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4gMTU1Olx0XHRcdC8qXG4gMTU2Olx0XHRcdCAqIEtlZXAgdGhlIHN5c2ZzIEFCSTogcmVwb3J0IGFueSBjYWxsYmFjayBlcnJvciBhcyAtRUlOVkFMXG4gMTU3Olx0XHRcdCAqIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgdGhlIGRyaXZlciYjMzk7cyBlcnJvciBjb2RlLlxuIDE1ODpcdFx0XHQgKi9cbiAxNTk6XHRcdFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxuIDE2MDpcdFx0XHRcdHJldCA9IDA7XG4gMTYxOlx0XHR9XG4gMTYyOlx0XG4gMTYzOlx0XHRuZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpO1xuIDE2NDpcdFx0aWYgKG5lZWRfcnRubClcbiAxNjU6XHRcdFx0cnRubF91bmxvY2soKTtcbiAxNjY6XHRcbiAxNjc6XHRcdHJldHVybiByZXQ7XG4gMTY4Olx0fVxuIDE2OTpcdFxuIDE3MDpcdC8qIHVzZSBzYW1lIGxvY2tpbmcgcnVsZXMgYXMgR0lGKiBpb2N0bCYjMzk7cyAqL1xuIDE3MTpcdHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldixcbiAxNzI6XHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLFxuIDE3MzpcdFx0XHRcdCAgIHNzaXplX3QgKCpmb3JtYXQpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICosIGNoYXIgKikpXG4gMTc0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS2VybmVsIE1vZHVsZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBlbmFibGluZyBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLiBUbyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMuIFRoYXQgbWVhbnMgZGlnZ2luZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0g4oCTIHRoZSBgTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMgdGhhdCBjb250cm9sIHdoYXQgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgTWFrZWZpbGVgIGluIHRoYXQgZGlyZWN0b3J5IGl0c2VsZjsgdGhhdCYjMzk7bGwgcHJvYmFibHkgaGF2ZSB0aGUgaW5jbHVkZSBkaXJlY3RpdmVzLCBvciBhdCBsZWFzdCBwb2ludCBtZSB0b3dhcmQgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBvcHRpb25zLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiwgc2VlIHdoYXQmIzM5O3MgdWx0aW1hdGVseSBwdWxsaW5nIHRoYXQgbW9kdWxlIGludG8gdGhlIGJ1aWxkLiBTaG91bGQgYmUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCEgS25vd2luZyB0aGUgZGVwZW5kZW5jeSB0cmVlIGxpa2UgdGhpcyBpcyBrZXkgZm9yIHVuZGVyc3RhbmRpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBwb3RlbnRpYWxseSB0cm91Ymxlc2hvb3RpbmcgYnVpbGQgaXNzdWVzIG9yIGNvbmZsaWN0cyBkb3duIHRoZSByb2FkLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0LXN5c2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTE4PW9iai0kKENPTkZJR19ORVRERVZfQUREUl9MSVNUX1RFU1QpICYjNDM7PSBkZXZfYWRkcl9saXN0c190ZXN0Lm9cbm5ldC9jb3JlL01ha2VmaWxlLTE5LVxubmV0L2NvcmUvTWFrZWZpbGU6MjA6b2JqLXkgJiM0Mzs9IG5ldC1zeXNmcy5vXG5uZXQvY29yZS9NYWtlZmlsZS0yMS1vYmoteSAmIzQzOz0gaG90ZGF0YS5vXG4tLVxubmV0L2NvcmUvZGV2LmMtMTY4LSNpbmNsdWRlIFwmIzM0O2Rldm1lbS5oXCYjMzQ7XG5uZXQvY29yZS9kZXYuYzoxNjk6I2luY2x1ZGUgXCYjMzQ7bmV0LXN5c2ZzLmhcJiMzNDtcbm5ldC9jb3JlL2Rldi5jLTE3MC1cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yLS8qXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozOiAqIG5ldC1zeXNmcy5jIC0gbmV0d29yayBkZXZpY2UgY2xhc3MgYW5kIGF0dHJpYnV0ZXNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTQtICpcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zMC0jaW5jbHVkZSBcJiMzNDtkZXYuaFwmIzM0O1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MzE6I2luY2x1ZGUgXCYjMzQ7bmV0LXN5c2ZzLmhcJiMzNDtcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTMyLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTk3LSNpbmNsdWRlIFwmIzM0O2Rldm1lbS5oXCYjMzQ7XG5uZXQvY29yZS9za2J1ZmYuYzo5ODojaW5jbHVkZSBcJiMzNDtuZXQtc3lzZnMuaFwmIzM0O1xubmV0L2NvcmUvc2tidWZmLmMtOTktI2luY2x1ZGUgXCYjMzQ7bmV0bWVtX3ByaXYuaFwmIzM0O1xuLS1cbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTMxLSNpbmNsdWRlIFwmIzM0O2Rldi5oXCYjMzQ7XG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozMjojaW5jbHVkZSBcJiMzNDtuZXQtc3lzZnMuaFwmIzM0O1xubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBuZXQtc3lzZnMuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgZnVuY3Rpb25zIHdpdGhpbiBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgIGFyZSBzdWJqZWN0IHRvIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSB0b3Agb2YgdGhlIGZpbGUuIEV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCBgI2lmZGVmYCBibG9ja3Mgb3Igb3RoZXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBnYXRlIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3Igb2YgdGhvc2UgZnVuY3Rpb25zLiBJ4oCZbGwgc3RhcnQgdGhlcmUgYW5kIHNjYW4gZm9yIGFueSBpbnN0YW5jZXMgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB3cmFwcGVkIHdpdGhpbiBjb25kaXRpb25hbCBibG9ja3MuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBhbnN3ZXIgYWJvdXQgd2hldGhlciB0aGVpciBhdmFpbGFiaWxpdHkgaXMgZGVwZW5kZW50IG9uIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBidWlsZCBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldC1zeXNmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBuZXQtc3lzZnMuYyAtIG5ldHdvcmsgZGV2aWNlIGNsYXNzIGFuZCBhdHRyaWJ1dGVzXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMDMgU3RlcGhlbiBIZW1taW5nZXIgXHUwMDNjc2hlbW1pbmdlckBvc2RsLm9yZ1x1MDAzZVxuICAgNjpcdCAqL1xuICAgNzpcdFxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uc3Byb3h5LmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gIDIwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbiAgMjI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiAgMjM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gIDI0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2VcbiAgMjU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHUuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gIDI3Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9yeF9xdWV1ZS5oXHUwMDNlXG4gIDI4Olx0I2luY2x1ZGUgXHUwMDNjbmV0L3Jwcy5oXHUwMDNlXG4gIDI5Olx0XG4gIDMwOlx0I2luY2x1ZGUgXCYjMzQ7ZGV2LmhcJiMzNDtcbiAgMzE6XHQjaW5jbHVkZSBcJiMzNDtuZXQtc3lzZnMuaFwmIzM0O1xuICAzMjpcdFxuICAzMzpcdCNpZmRlZiBDT05GSUdfU1lTRlNcbiAgMzQ6XHRzdGF0aWMgY29uc3QgY2hhciBmbXRfaGV4W10gPSBcJiMzNDslI3hcXG5cJiMzNDs7XG4gIDM1Olx0c3RhdGljIGNvbnN0IGNoYXIgZm10X2RlY1tdID0gXCYjMzQ7JWRcXG5cJiMzNDs7XG4gIDM2Olx0c3RhdGljIGNvbnN0IGNoYXIgZm10X3VpbnRbXSA9IFwmIzM0OyV1XFxuXCYjMzQ7O1xuICAzNzpcdHN0YXRpYyBjb25zdCBjaGFyIGZtdF91bG9uZ1tdID0gXCYjMzQ7JWx1XFxuXCYjMzQ7O1xuICAzODpcdHN0YXRpYyBjb25zdCBjaGFyIGZtdF91NjRbXSA9IFwmIzM0OyVsbHVcXG5cJiMzNDs7XG4gIDM5Olx0XG4gIDQwOlx0LyogVGhlcmUgaXMgYSBwb3NzaWJsZSBBQkJBIGRlYWRsb2NrIGJldHdlZW4gcnRubF9sb2NrIGFuZCBrZXJuZnNfbm9kZS1cdTAwM2VhY3RpdmUsXG4gIDQxOlx0ICogd2hlbiB1bnJlZ2lzdGVyaW5nIGEgbmV0IGRldmljZSBhbmQgYWNjZXNzaW5nIGFzc29jaWF0ZWQgc3lzZnMgZmlsZXMuIFRoZVxuICA0MjpcdCAqIHBvdGVudGlhbCBkZWFkbG9jayBpcyBhcyBmb2xsb3c6XG4gIDQzOlx0ICpcbiAgNDQ6XHQgKiAgICAgICAgIENQVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFUgMVxuICA0NTpcdCAqXG4gIDQ2Olx0ICogICAgcnRubF9sb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZnNfcmVhZFxuICA0NzpcdCAqICAgIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkgICAgICAgICAgICAgICAgICAga2VybmZzX3NlcV9zdGFydFxuICA0ODpcdCAqICAgIGRldmljZV9kZWwgLyBrb2JqZWN0X3B1dCAgICAgICAgICAgICAgICAgICAgICBrZXJuZnNfZ2V0X2FjdGl2ZSAoa24tXHUwMDNlYWN0aXZlJiM0MzsmIzQzOylcbiAgNDk6XHQgKiAgICBrZXJuZnNfZHJhaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2ZzX2tmX3NlcV9zaG93XG4gIDUwOlx0ICogICAgd2FpdF9ldmVudCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydG5sX2xvY2tcbiAgNTE6XHQgKiAgICAgICBrbi1cdTAwM2VhY3RpdmUgPT0gS05fREVBQ1RJVkFURURfQklBUykgICAgICAgLVx1MDAzZSB3YWl0cyBvbiBDUFUgMCB0byByZWxlYXNlXG4gIDUyOlx0ICogICAgLVx1MDAzZSB3YWl0cyBvbiBDUFUgMSB0byBkZWNyZWFzZSBrbi1cdTAwM2VhY3RpdmUgICAgICAgdGhlIHJ0bmwgbG9jay5cbiAgNTM6XHQgKlxuICA1NDpcdCAqIFRoZSBoaXN0b3JpY2FsIGZpeCB3YXMgdG8gdXNlIHJ0bmxfdHJ5bG9jayB3aXRoIHJlc3RhcnRfc3lzY2FsbCB0byBiYWlsIG91dFxuICA1NTpcdCAqIG9mIHN5c2ZzIG9wZXJhdGlvbnMgd2hlbiB0aGUgbG9jayBjb3VsZG4mIzM5O3QgYmUgdGFrZW4uIFRoaXMgZml4ZWQgdGhlIGFib3ZlXG4gIDU2Olx0ICogaXNzdWUgYXMgaXQgYWxsb3dlZCBDUFUgMSB0byBiYWlsIG91dCBvZiB0aGUgQUJCQSBzaXR1YXRpb24uXG4gIDU3Olx0ICpcbiAgNTg6XHQgKiBCdXQgaXQgY2FtZSB3aXRoIHBlcmZvcm1hbmNlcyBpc3N1ZXMsIGFzIHN5c2NhbGxzIGFyZSBiZWluZyByZXN0YXJ0ZWQgaW5cbiAgNTk6XHQgKiBsb29wcyB3aGVuIHRoZXJlIHdhcyBjb250ZW50aW9uIG9uIHRoZSBydG5sIGxvY2ssIHdpdGggaHVnZSBzbG93IGRvd25zIGluXG4gIDYwOlx0ICogc3BlY2lmaWMgc2NlbmFyaW9zIChlLmcuIGxvdHMgb2YgdmlydHVhbCBpbnRlcmZhY2VzIGNyZWF0ZWQgYW5kIHVzZXJzcGFjZVxuICA2MTpcdCAqIGRhZW1vbnMgcXVlcnlpbmcgdGhlaXIgYXR0cmlidXRlcykuXG4gIDYyOlx0ICpcbiAgNjM6XHQgKiBUaGUgaWRlYSBiZWxvdyBpcyB0byBiYWlsIG91dCBvZiB0aGUgYWN0aXZlIGtlcm5mc19ub2RlIHByb3RlY3Rpb25cbiAgNjQ6XHQgKiAoa24tXHUwMDNlYWN0aXZlKSB3aGlsZSB0cnlpbmcgdG8gdGFrZSB0aGUgcnRubCBsb2NrLlxuICA2NTpcdCAqXG4gIDY2Olx0ICogVGhpcyByZXBsYWNlcyBydG5sX2xvY2soKSBhbmQgc3RpbGwgaGFzIHRvIGJlIHVzZWQgd2l0aCBydG5sX3VubG9jaygpLiBUaGVcbiAgNjc6XHQgKiBuZXQgZGV2aWNlIGlzIGd1YXJhbnRlZWQgdG8gYmUgYWxpdmUgaWYgdGhpcyByZXR1cm5zIHN1Y2Nlc3NmdWxseS5cbiAgNjg6XHQgKi9cbiAgNjk6XHRzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbiAgNzA6XHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiAgNzE6XHR7XG4gIDcyOlx0XHRzdHJ1Y3Qga2VybmZzX25vZGUgKmtuO1xuICA3MzpcdFx0aW50IHJldCA9IDA7XG4gIDc0Olx0XG4gIDc1Olx0XHQvKiBGaXJzdCwgd2UgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgbmV0IGRldmljZSBhcyB0aGUgdW5yZWdpc3RyYXRpb25cbiAgNzY6XHRcdCAqIHBhdGggbWlnaHQgcnVuIGluIHBhcmFsbGVsLiBUaGlzIHdpbGwgZW5zdXJlIHRoZSBuZXQgZGV2aWNlIGFuZCB0aGVcbiAgNzc6XHRcdCAqIGFzc29jaWF0ZWQgc3lzZnMgb2JqZWN0cyB3b24mIzM5O3QgYmUgZnJlZWQgd2hpbGUgd2UgdHJ5IHRvIHRha2UgdGhlIHJ0bmxcbiAgNzg6XHRcdCAqIGxvY2suXG4gIDc5Olx0XHQgKi9cbiAgODA6XHRcdGRldl9ob2xkKG5kZXYpO1xuICA4MTpcdFx0Lyogc3lzZnNfYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24gd2FzIGludHJvZHVjZWQgdG8gYWxsb3cgc2VsZi1yZW1vdmFsIG9mXG4gIDgyOlx0XHQgKiBkZXZpY2VzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHN5c2ZzIGZpbGVzIGJ5IGJhaWxpbmcgb3V0IG9mIHRoZVxuICA4MzpcdFx0ICogc3lzZnMva2VybmZzIHByb3RlY3Rpb24uIFdlIGRvIHRoaXMgaGVyZSB0byBhbGxvdyB0aGUgdW5yZWdpc3RyYXRpb25cbiAgODQ6XHRcdCAqIHBhdGggdG8gY29tcGxldGUgaW4gcGFyYWxsZWwuIFRoZSBmb2xsb3dpbmcgdGFrZXMgYSByZWZlcmVuY2Ugb24gdGhlXG4gIDg1Olx0XHQgKiBrb2JqZWN0IGFuZCB0aGUga2VybmZzX25vZGUgYmVpbmcgYWNjZXNzZWQuXG4gIDg2Olx0XHQgKlxuICA4NzpcdFx0ICogVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGhvbGQgYSByZWZlcmVuY2Ugb250byB0aGUgbmV0IGRldmljZSBhbmQgdGhlXG4gIDg4Olx0XHQgKiB1bnJlZ2lzdHJhdGlvbiBwYXRoIHdpbGwgd2FpdCBmb3IgdXMgZXZlbnR1YWxseSBpbiBuZXRkZXZfcnVuX3RvZG9cbiAgODk6XHRcdCAqIChvdXRzaWRlIGFuIHJ0bmwgbG9jayBzZWN0aW9uKS5cbiAgOTA6XHRcdCAqL1xuICA5MTpcdFx0a24gPSBzeXNmc19icmVha19hY3RpdmVfcHJvdGVjdGlvbihrb2JqLCBhdHRyKTtcbiAgOTI6XHRcdC8qIFdlIGNhbiBub3cgdHJ5IHRvIHRha2UgdGhlIHJ0bmwgbG9jay4gVGhpcyBjYW4mIzM5O3QgZGVhZGxvY2sgdXMgYXMgdGhlXG4gIDkzOlx0XHQgKiB1bnJlZ2lzdHJhdGlvbiBwYXRoIGlzIGFibGUgdG8gZHJhaW4gc3lzZnMgZmlsZXMgKGtlcm5mc19ub2RlKSB0aGFua3NcbiAgOTQ6XHRcdCAqIHRvIHRoZSBhYm92ZSBkYW5jZS5cbiAgOTU6XHRcdCAqL1xuICA5NjpcdFx0aWYgKHJ0bmxfbG9ja19pbnRlcnJ1cHRpYmxlKCkpIHtcbiAgOTc6XHRcdFx0cmV0ID0gLUVSRVNUQVJUU1lTO1xuICA5ODpcdFx0XHRnb3RvIHVuYnJlYWs7XG4gIDk5Olx0XHR9XG4gMTAwOlx0XHQvKiBDaGVjayBkaXNtYW50bGUgb24gdGhlIGRldmljZSBoYXNuJiMzOTt0IHN0YXJ0ZWQsIG90aGVyd2lzZSBkZW55IHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDYxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2U/IEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gdHJhY2UgaXRzIGRlY2xhcmF0aW9uIHRvIGZpZ3VyZSBvdXQgaXRzIHByb3RvdHlwZSBhbmQsIGNydWNpYWxseSwgdW5kZXJzdGFuZCB3aGljaCBkYXRhIHN0cnVjdHVyZXMgaXQgb3BlcmF0ZXMgb24uIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgYXJndW1lbnRzIGl0IHRha2VzIGFuZCB3aGF0IGl0IHJldHVybnMsIGFuZCBsaWtlbHkgZGl2ZSBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLiBLbm93aW5nIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbmV0d29yayBzdGFjayBpcyBrZXkuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfaWYuYz0zNj1zdGF0aWMgaW50IHBvcnRfY29zdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy0zOS1cbm5ldC9icmlkZ2UvYnJfaWYuYzo0MDpcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2ZWNtZCkpIHtcbm5ldC9icmlkZ2UvYnJfaWYuYy00MS1cdFx0c3dpdGNoIChlY21kLmJhc2Uuc3BlZWQpIHtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMjY9c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNC1cdC8qXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzU6XHQgKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpOyB0aGlzIGhlbHBzXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzYtXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTU4LVx0XHQgKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE1OTpcdFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTYwLVx0XHRcdHJldCA9IDA7XG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz00Mjk9c3RydWN0IGV0aHRvb2xfbGlua191c2V0dGluZ3Mge1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtNDM4LS8qIEludGVybmFsIGtlcm5lbCBoZWxwZXIgdG8gcXVlcnkgYSBkZXZpY2UgZXRodG9vbF9saW5rX3NldHRpbmdzLiAqL1xubmV0L2V0aHRvb2wvaW9jdGwuYzo0Mzk6aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NDAtXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy00NTItfVxubmV0L2V0aHRvb2wvaW9jdGwuYzo0NTM6RVhQT1JUX1NZTUJPTChuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MpO1xubmV0L2V0aHRvb2wvaW9jdGwuYy00NTQtXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz00NTY9aW50IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2My1cdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2V0aHRvb2wvaW9jdGwuYzo0NjQ6XHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2NS1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tLVxubmV0L2V0aHRvb2wvbGlua2luZm8uYz0yND1zdGF0aWMgaW50IGxpbmtpbmZvX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuLS1cbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMzYtXHRcdHJldHVybiByZXQ7XG5uZXQvZXRodG9vbC9saW5raW5mby5jOjM3Olx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2Vrc2V0dGluZ3MpO1xubmV0L2V0aHRvb2wvbGlua2luZm8uYy0zOC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L2V0aHRvb2wvbGlua2luZm8uYz05OD1ldGhubF9zZXRfbGlua2luZm8oc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9saW5raW5mby5jLTEwNi1cbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM6MTA3Olx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXHUwMDI2a3NldHRpbmdzKTtcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMTA4LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jPTI4PXN0YXRpYyBpbnQgbGlua21vZGVzX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuLS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTQxLVxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM6NDI6XHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcdTAwMjZkYXRhLVx1MDAzZWtzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy00My1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYz0zMTk9ZXRobmxfc2V0X2xpbmttb2RlcyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTMyNi1cbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jOjMyNzpcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmtzZXR0aW5ncyk7XG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy0zMjgtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L3NjaGVkL3NjaF9jYnMuYz0zMjM9c3RhdGljIHZvaWQgY2JzX3NldF9wb3J0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNic19zY2hlZF9kYXRhICpxKVxuLS1cbm5ldC9zY2hlZC9zY2hfY2JzLmMtMzI5LVxubmV0L3NjaGVkL3NjaF9jYnMuYzozMzA6XHRlcnIgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBcdTAwMjZlY21kKTtcbm5ldC9zY2hlZC9zY2hfY2JzLmMtMzMxLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTEyOTQ9c3RhdGljIHZvaWQgdGFwcmlvX3NldF9waWNvc19wZXJfYnl0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMwMi1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MTMwMzpcdGVyciA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFx1MDAyNmVjbWQpO1xubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMzA0LVx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBEZXZpY2UgU3lzZnMgQXR0cmlidXRlcyBhbmQgTG9ja2luZyBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyB0aGUgYHNwZWVkYCBhbmQgYGR1cGxleGAgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGAvc3lzL2NsYXNzL25ldC8mbHQ7aWZuYW1lJmd0Oy9gIGhpZXJhcmNoeSBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYG5ldC9jb3JlL25ldC1zeXNmcy5jYC4gSXQgc2VlbXMgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBQcmV2aW91c2x5LCByZXRyaWV2aW5nIHRoZSBsaW5rIHNldHRpbmdzIGZvciB0aGVzZSBhdHRyaWJ1dGVzIGFsd2F5cyBpbnZvbHZlZCBhY3F1aXJpbmcgdGhlIGBydG5sX2xvY2tgIGFuZCB0aGVuIGNhbGxpbmcgYF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3NgLiBOb3csIHRoZSBjb2RlIHVzZXMgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AgaW5zdGVhZC4KClRoaXMgbmV3IGZ1bmN0aW9uIGludHJvZHVjZXMgYSBtb3JlIG51YW5jZWQgbG9ja2luZyBzdHJhdGVneS4gSW5zdGVhZCBvZiBhbHdheXMgZ3JhYmJpbmcgdGhlIGBydG5sX2xvY2tgLCBpdCBub3cgdXNlcyB0aGUgcGVyLWRldmljZSBvcGVyYXRpb25zIGxvY2ssIGBuZXRkZXZfbG9ja19vcHMobmV0ZGV2KWAsIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnRzIGl0LiBUaGUgYHJ0bmxfbG9ja2AgaXMgb25seSByZXRhaW5lZCBpZiB0aGUgZGV2aWNlICpuZWVkcyogaXQsIGRldGVybWluZWQgYnkgYG5ldGRldl9uZWVkX29wc19sb2NrYCBhbmQgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1NgLiBBZGRpdGlvbmFsbHksIGEgY2hlY2sgZm9yIGBkZXZfaXNhbGl2ZShuZXRkZXYpYCBpcyBub3cgcHJlc2VudCwgYW5kIGBuZXRpZl9ydW5uaW5nKG5ldGRldilgIGlzIGNoZWNrZWQgYmVmb3JlIHRoZSBjYWxsIHRvIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpYC4KClRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/IEFic29sdXRlbHkuIEFueSB1c2Vyc3BhY2UgcHJvY2VzcyBjYW4gcmVhZCB0aGVzZSBzeXNmcyBhdHRyaWJ1dGVzLCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4gVGhpbmsgc3RhbmRhcmQgc3lzZnMgcmVhZHMsIG9yIHRoZSB3YXkgc3l6a2FsbGVyIG9wZXJhdGVzLCBvciBldmVuIGNvbmN1cnJlbnQgbWFuaXB1bGF0aW9uIG9mIGludGVyZmFjZXMgd2l0aCBzeXNmcyByZWFkcy4gQW5kIHRoZSBuZXR3b3JrIGludGVyZmFjZXMgdGhlbXNlbHZlcyAoZHVtbXksIHZldGgsIGxvb3BiYWNrLCBldGMuKSBhcmUgcmVhZGlseSBhdmFpbGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLgoKU28sIHRoaXMgY2hhbmdlIGhhcyBzaWduaWZpY2FudCBjb25jdXJyZW5jeSBpbXBsaWNhdGlvbnMuIEl0IGNoYW5nZXMgdGhlIGxvY2tpbmcgcnVsZXMgZm9yIHN5c2ZzIHF1ZXJpZXMsIGZhdm9yaW5nIGBuZXRkZXZfbG9ja19vcHNgIHdoZXJlIHBvc3NpYmxlLCBidXQgcHJlc2VydmluZyBSVE5MIGxvY2tpbmcgd2hlcmUgbmVjZXNzYXJ5LCBhbmQgYWRkaW5nIHRoZSBgZGV2X2lzYWxpdmVgIGNoZWNrLiBUaGlzIGhhcyBtZSB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gbmV0ZGV2aWNlIGxpZmVjeWNsZSwgdGhlIHBlci1kZXZpY2UgbG9jaywgc3lzZnMgYWNjZXNzLCBhbmQgdGhlIFJUTkwgbG9jay4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlc2UgbG9ja2luZyBpbnRlcmFjdGlvbnMuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCBhcmUgaW5kZWVkIHRoZSBzdGF0aWMgZnVuY3Rpb25zIEkgdGhpbmsgdGhleSBhcmUgYW5kIGhvdyB0aGV5IGFyZSByZWZlcmVuY2VkIGluIHRoZSBgZGV2aWNlX2F0dHJpYnV0ZWAgc3RydWN0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byBwb3JlIG92ZXIgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXQtc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0XG4gMzgxOlx0c3RhdGljIHNzaXplX3Qgc3BlZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gMzgyOlx0XHRcdFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIDM4MzpcdHtcbiAzODQ6XHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbiAzODU6XHRcdGludCByZXQ7XG4gMzg2Olx0XG4gMzg3Olx0XHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xuIDM4ODpcdFx0aWYgKCFyZXQpXG4gMzg5Olx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4gMzkwOlx0XG4gMzkxOlx0XHRyZXR1cm4gcmV0O1xuIDM5MjpcdH1cbiAzOTM6XHRzdGF0aWMgREVWSUNFX0FUVFJfUk8oc3BlZWQpO1xuIDM5NDpcdFxuIDM5NTpcdHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiAzOTY6XHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIDM5NzpcdHtcbiAzOTg6XHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbiAzOTk6XHRcdGNvbnN0IGNoYXIgKmR1cGxleDtcbiA0MDA6XHRcdGludCByZXQ7XG4gNDAxOlx0XG4gNDAyOlx0XHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xuIDQwMzpcdFx0aWYgKCFyZXQpIHtcbiA0MDQ6XHRcdFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcbiA0MDU6XHRcdFx0Y2FzZSBEVVBMRVhfSEFMRjpcbiA0MDY6XHRcdFx0XHRkdXBsZXggPSBcJiMzNDtoYWxmXCYjMzQ7O1xuIDQwNzpcdFx0XHRcdGJyZWFrO1xuIDQwODpcdFx0XHRjYXNlIERVUExFWF9GVUxMOlxuIDQwOTpcdFx0XHRcdGR1cGxleCA9IFwmIzM0O2Z1bGxcJiMzNDs7XG4gNDEwOlx0XHRcdFx0YnJlYWs7XG4gNDExOlx0XHRcdGRlZmF1bHQ6XG4gNDEyOlx0XHRcdFx0ZHVwbGV4ID0gXCYjMzQ7dW5rbm93blwmIzM0OztcbiA0MTM6XHRcdFx0XHRicmVhaztcbiA0MTQ6XHRcdFx0fVxuIDQxNTpcdFx0XHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXNcXG5cJiMzNDssIGR1cGxleCk7XG4gNDE2Olx0XHR9XG4gNDE3Olx0XG4gNDE4Olx0XHRyZXR1cm4gcmV0O1xuIDQxOTpcdH1cbiA0MjA6XHRzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTtcbiA0MjE6XHRcbiA0MjI6XHRzdGF0aWMgc3NpemVfdCB0ZXN0aW5nX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIDQyMzpcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIDQyNDpcdHtcbiA0MjU6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XG4gNDI2Olx0XG4gNDI3Olx0XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuIDQyODpcdFx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsICEhbmV0aWZfdGVzdGluZyhuZXRkZXYpKTtcbiA0Mjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MjcKCQkJCQkJCW91dHB1dDogNTUKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29yZSBTeW1ib2wgVmlzaWJpbGl0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgbGFuZHNjYXBlIG9mIHN5bWJvbHMgd2l0aGluIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgc3ltYm9scyBkZWZpbmVkIHdpdGhpbiB0aGF0IGZpbGUgaXRzZWxmLiBNb3JlIGJyb2FkbHksIHRob3VnaCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBzeW1ib2xzIGFyZSAqZXhwb3J0ZWQqIG9yICpkZWZpbmVkKiB3aXRoaW4gdGhhdCBzcGVjaWZpYyBmaWxlIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIGl0LiBFc3NlbnRpYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gbWFwIG91dCB0aGUgY29ubmVjdGlvbnMgYW5kIHNjb3BlIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGlzIGlzIGxpa2VseSB0aGUgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZSBvciBidWcgd2l0aGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfc2hvd3xuZXRpZl9nZXRfbGlua19rc2V0dGluZ3N8bmV0ZGV2X2xvY2tfb3BzfHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xMTAxPV9fbmV0ZGV2X3B1dF9sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0KVxubmV0L2NvcmUvZGV2LmMtMTEwMi17XG5uZXQvY29yZS9kZXYuYzoxMTAzOlx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTEwNC1cdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlIFx1MDAzZSBORVRSRUdfUkVHSVNURVJFRCB8fFxuLS1cbm5ldC9jb3JlL2Rldi5jPTE4NDg9dm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE4NTktXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XG5uZXQvY29yZS9kZXYuYzoxODYwOlx0XHRuZXRkZXZfbG9ja19vcHMobG93ZXJfZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTE4NjEtXHRcdG5ldGlmX2Rpc2FibGVfbHJvKGxvd2VyX2Rldik7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTkzND1zdGF0aWMgdm9pZCBjYWxsX25ldGRldmljZV91bnJlZ2lzdGVyX25vdGlmaWVycyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTE5MzctXHRpZiAoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApIHtcbm5ldC9jb3JlL2Rldi5jOjE5Mzg6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTkzOS1cdFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXIobmIsIE5FVERFVl9HT0lOR19ET1dOLFxuLS1cbm5ldC9jb3JlL2Rldi5jPTE5NDc9c3RhdGljIGludCBjYWxsX25ldGRldmljZV9yZWdpc3Rlcl9uZXRfbm90aWZpZXJzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTk1My1cdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2NvcmUvZGV2LmM6MTk1NDpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXYuYy0xOTU1LVx0XHRlcnIgPSBjYWxsX25ldGRldmljZV9yZWdpc3Rlcl9ub3RpZmllcnMobmIsIGRldik7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA2MTE9c3RhdGljIHZvaWQgYnBmX3hkcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNjIwLVx0aWYgKHhkcF9saW5rLVx1MDAzZWRldikge1xubmV0L2NvcmUvZGV2LmM6MTA2MjE6XHRcdG5ldGRldl9sb2NrX29wcyh4ZHBfbGluay1cdTAwM2VkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTA2MjItXHRcdFdBUk5fT04oZGV2X3hkcF9kZXRhY2hfbGluayh4ZHBfbGluay1cdTAwM2VkZXYsIE5VTEwsIHhkcF9saW5rKSk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA2NzI9c3RhdGljIGludCBicGZfeGRwX2xpbmtfdXBkYXRlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDcwNC1cbm5ldC9jb3JlL2Rldi5jOjEwNzA1Olx0bmV0ZGV2X2xvY2tfb3BzKHhkcF9saW5rLVx1MDAzZWRldik7XG5uZXQvY29yZS9kZXYuYy0xMDcwNi1cdG1vZGUgPSBkZXZfeGRwX21vZGUoeGRwX2xpbmstXHUwMDNlZGV2LCB4ZHBfbGluay1cdTAwM2VmbGFncyk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA3MzE9aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDc2My1cbm5ldC9jb3JlL2Rldi5jOjEwNzY0Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXYuYy0xMDc2NS1cdGVyciA9IGRldl94ZHBfYXR0YWNoX2xpbmsoZGV2LCBcdTAwMjZleHRhY2ssIGxpbmspO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEwOTI1PXN0YXRpYyB2b2lkIG5ldGRldl9zeW5jX2xvd2VyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcixcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDkzNi1cdFx0XHRcdCAgIFx1MDAyNmZlYXR1cmUsIGxvd2VyLVx1MDAzZW5hbWUpO1xubmV0L2NvcmUvZGV2LmM6MTA5Mzc6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyKTtcbm5ldC9jb3JlL2Rldi5jLTEwOTM4LVx0XHRcdGxvd2VyLVx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcdTAwMjY9IH5mZWF0dXJlO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTUxMS1cbm5ldC9jb3JlL2Rldi5jOjExNTEyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXYuYy0xMTUxMy1cdF9fbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTExNTM5LVx0LyogTm90aWZ5IHByb3RvY29scywgdGhhdCBhIG5ldyBkZXZpY2UgYXBwZWFyZWQuICovXG5uZXQvY29yZS9kZXYuYzoxMTU0MDpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTE1NDEtXHRyZXQgPSBjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1JFR0lTVEVSLCBkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEyNDQxPXZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9ub3RpZnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjUwMy1cdFx0LyogU2h1dGRvd24gcXVldWVpbmcgZGlzY2lwbGluZS4gKi9cbm5ldC9jb3JlL2Rldi5jOjEyNTA0Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyNTA1LVx0XHRkZXZfc2h1dGRvd24oZGV2KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMjcwMj1pbnQgX19kZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyNzg2LVxubmV0L2NvcmUvZGV2LmM6MTI3ODc6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyNzg4LVx0LyogSWYgZGV2aWNlIGlzIHJ1bm5pbmcgY2xvc2UgaXQgZmlyc3QuICovXG4tLVxubmV0L2NvcmUvZGV2LmMtMTI4MDAtXHQvKiBTaHV0ZG93biBxdWV1ZWluZyBkaXNjaXBsaW5lLiAqL1xubmV0L2NvcmUvZGV2LmM6MTI4MDE6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyODAyLVx0ZGV2X3NodXRkb3duKGRldik7XG4tLVxubmV0L2NvcmUvZGV2Lmg9NjA9REVGSU5FX0ZSRUUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0LCBzdHJ1Y3QgbmV0X2RldmljZSAqLFxuLS1cbm5ldC9jb3JlL2Rldi5oLTYyLVxubmV0L2NvcmUvZGV2Lmg6NjM6I2RlZmluZSBmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIHZhcl9uYW1lLCBpZmluZGV4KVx0XFxcbm5ldC9jb3JlL2Rldi5oLTY0LVx0Zm9yIChzdHJ1Y3QgbmV0X2RldmljZSAqdmFyX25hbWUgX19mcmVlKG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdCkgPSBOVUxMOyBcXFxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0xOD1pbnQgZGV2X2NoYW5nZV9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5ld25hbWUpXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTIxLVxubmV0L2NvcmUvZGV2X2FwaS5jOjIyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMjMtXHRyZXQgPSBuZXRpZl9jaGFuZ2VfbmFtZShkZXYsIG5ld25hbWUpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0zOT1pbnQgZGV2X3NldF9hbGlhcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICphbGlhcywgc2l6ZV90IGxlbilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtNDItXG5uZXQvY29yZS9kZXZfYXBpLmM6NDM6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy00NC1cdHJldCA9IG5ldGlmX3NldF9hbGlhcyhkZXYsIGFsaWFzLCBsZW4pO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz02Mj1pbnQgZGV2X2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTY2LVxubmV0L2NvcmUvZGV2X2FwaS5jOjY3Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtNjgtXHRyZXQgPSBuZXRpZl9jaGFuZ2VfZmxhZ3MoZGV2LCBmbGFncywgZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9ODE9dm9pZCBkZXZfc2V0X2dyb3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfZ3JvdXApXG5uZXQvY29yZS9kZXZfYXBpLmMtODIte1xubmV0L2NvcmUvZGV2X2FwaS5jOjgzOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtODQtXHRuZXRpZl9zZXRfZ3JvdXAoZGV2LCBuZXdfZ3JvdXApO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz04OD1pbnQgZGV2X3NldF9tYWNfYWRkcmVzc191c2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTk0LVx0ZG93bl93cml0ZShcdTAwMjZkZXZfYWRkcl9zZW0pO1xubmV0L2NvcmUvZGV2X2FwaS5jOjk1Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtOTYtXHRyZXQgPSBuZXRpZl9zZXRfbWFjX2FkZHJlc3MoZGV2LCBzcywgZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MTM1PWludCBkZXZfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMTM4LVxubmV0L2NvcmUvZGV2X2FwaS5jOjEzOTpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTE0MC1cdHJldCA9IG5ldGlmX2NoYW5nZV9jYXJyaWVyKGRldiwgbmV3X2NhcnJpZXIpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0xNTM9aW50IGRldl9jaGFuZ2VfdHhfcXVldWVfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbmV3X2xlbilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMTU2LVxubmV0L2NvcmUvZGV2X2FwaS5jOjE1NzpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTE1OC1cdHJldCA9IG5ldGlmX2NoYW5nZV90eF9xdWV1ZV9sZW4oZGV2LCBuZXdfbGVuKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MTcxPWludCBkZXZfY2hhbmdlX3Byb3RvX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBwcm90b19kb3duKVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0xNzQtXG5uZXQvY29yZS9kZXZfYXBpLmM6MTc1Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMTc2LVx0cmV0ID0gbmV0aWZfY2hhbmdlX3Byb3RvX2Rvd24oZGV2LCBwcm90b19kb3duKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MTk3PWludCBkZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTIwMC1cbm5ldC9jb3JlL2Rldl9hcGkuYzoyMDE6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMDItXHRyZXQgPSBuZXRpZl9vcGVuKGRldiwgZXh0YWNrKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MjE4PXZvaWQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXZfYXBpLmMtMjE5LXtcbm5ldC9jb3JlL2Rldl9hcGkuYzoyMjA6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMjEtXHRuZXRpZl9jbG9zZShkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yMjY9aW50IGRldl9ldGhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMjM0LVxubmV0L2NvcmUvZGV2X2FwaS5jOjIzNTpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTIzNi1cdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yNDQ9aW50IGRldl9zZXRfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0yNDctXG5uZXQvY29yZS9kZXZfYXBpLmM6MjQ4Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMjQ5LVx0cmV0ID0gbmV0aWZfc2V0X210dShkZXYsIG5ld19tdHUpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yNjQ9dm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNjUte1xubmV0L2NvcmUvZGV2X2FwaS5jOjI2NjpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTI2Ny1cdG5ldGlmX2Rpc2FibGVfbHJvKGRldik7XG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jPTI4Mz1pbnQgZGV2X3NldF9wcm9taXNjdWl0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0yODYtXG5uZXQvY29yZS9kZXZfYXBpLmM6Mjg3Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMjg4LVx0cmV0ID0gbmV0aWZfc2V0X3Byb21pc2N1aXR5KGRldiwgaW5jKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmM9MzEwPWludCBkZXZfc2V0X2FsbG11bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMpXG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTMxMy1cbm5ldC9jb3JlL2Rldl9hcGkuYzozMTQ6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0zMTUtXHRyZXQgPSBuZXRpZl9zZXRfYWxsbXVsdGkoZGV2LCBpbmMsIHRydWUpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0zMzM9aW50IGRldl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNzLFxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0zMzctXG5uZXQvY29yZS9kZXZfYXBpLmM6MzM4Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfYXBpLmMtMzM5LVx0cmV0ID0gbmV0aWZfc2V0X21hY19hZGRyZXNzKGRldiwgc3MsIGV4dGFjayk7XG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jPTM0Nj1pbnQgZGV2X3hkcF9wcm9wYWdhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZilcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMzQ5LVxubmV0L2NvcmUvZGV2X2FwaS5jOjM1MDpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2FwaS5jLTM1MS1cdHJldCA9IG5ldGlmX3hkcF9wcm9wYWdhdGUoZGV2LCBicGYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0zNjY9dm9pZCBuZXRkZXZfc3RhdGVfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXZfYXBpLmMtMzY3LXtcbm5ldC9jb3JlL2Rldl9hcGkuYzozNjg6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0zNjktXHRuZXRpZl9zdGF0ZV9jaGFuZ2UoZGV2KTtcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz0yODI9c3RhdGljIGludCBkZXZfZ2V0X2h3dHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTI5NS1cdGtlcm5lbF9jZmcuaWZyID0gaWZyO1xubmV0L2NvcmUvZGV2X2lvY3RsLmM6Mjk2Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy0yOTctXHRlcnIgPSBkZXZfZ2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIFx1MDAyNmtlcm5lbF9jZmcpO1xuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTM5MT1zdGF0aWMgaW50IGRldl9zZXRfaHd0c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDIxLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDIyOlx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy00MjMtXHRlcnIgPSBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIFx1MDAyNmtlcm5lbF9jZmcsIFx1MDAyNmV4dGFjayk7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDQxPWludCBnZW5lcmljX2h3dHN0YW1wX2dldF9sb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ1Mi1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjQ1MzpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDU0LVx0ZXJyID0gZGV2X2dldF9od3RzdGFtcF9waHlsaWIoZGV2LCBrZXJuZWxfY2ZnKTtcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYz00NjE9aW50IGdlbmVyaWNfaHd0c3RhbXBfc2V0X2xvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDczLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDc0Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy00NzUtXHRlcnIgPSBkZXZfc2V0X2h3dHN0YW1wX3BoeWxpYihkZXYsIGtlcm5lbF9jZmcsIGV4dGFjayk7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDgyPXN0YXRpYyBpbnQgZGV2X3Npb2Nib25kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDg5LVxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NDkwOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ5MS1cdFx0aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NTAxPXN0YXRpYyBpbnQgZGV2X3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLFxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUwOC1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjUwOTpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MTAtXHRcdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTUyMD1zdGF0aWMgaW50IGRldl9zaW9jd2FuZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZl9zZXR0aW5ncyAqaWZzKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUyNi1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjUyNzpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MjgtXHRcdGlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTU0MT1zdGF0aWMgaW50IGRldl9pZnNpb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKmRhdGEsXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTc2LVx0XHRcdCAgIChzaXplX3QpZGV2LVx1MDAzZWFkZHJfbGVuKSk7XG5uZXQvY29yZS9kZXZfaW9jdGwuYzo1Nzc6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTc4LVx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRUFERFIsIGRldik7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTgyLVx0Y2FzZSBTSU9DU0lGTUFQOlxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NTgzOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU4NC1cdFx0ZXJyID0gbmV0aWZfc2V0aWZtYXAoZGV2LCBpZnIpO1xuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU5My1cdFx0XHRyZXR1cm4gLUVOT0RFVjtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU5NDpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01OTUtXHRcdGVyciA9IGRldl9tY19hZGRfZ2xvYmFsKGRldiwgaWZyLVx1MDAzZWlmcl9od2FkZHIuc2FfZGF0YSk7XG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNjA1LVx0XHRcdHJldHVybiAtRU5PREVWO1xubmV0L2NvcmUvZGV2X2lvY3RsLmM6NjA2Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwNy1cdFx0ZXJyID0gZGV2X21jX2RlbF9nbG9iYWwoZGV2LCBpZnItXHUwMDNlaWZyX2h3YWRkci5zYV9kYXRhKTtcbi0tXG5uZXQvY29yZS9mYWlsb3Zlci5jPTIxNj1mYWlsb3Zlcl9leGlzdGluZ19zbGF2ZV9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZmFpbG92ZXJfZGV2KVxuLS1cbm5ldC9jb3JlL2ZhaWxvdmVyLmMtMjI1LVx0XHRpZiAoZXRoZXJfYWRkcl9lcXVhbChmYWlsb3Zlcl9kZXYtXHUwMDNlcGVybV9hZGRyLCBkZXYtXHUwMDNlcGVybV9hZGRyKSkge1xubmV0L2NvcmUvZmFpbG92ZXIuYzoyMjY6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9mYWlsb3Zlci5jLTIyNy1cdFx0XHRmYWlsb3Zlcl9zbGF2ZV9yZWdpc3RlcihkZXYpO1xuLS1cbm5ldC9jb3JlL2xpbmtfd2F0Y2guYz0xOTA9c3RhdGljIHZvaWQgX19saW5rd2F0Y2hfcnVuX3F1ZXVlKGludCB1cmdlbnRfb25seSlcbi0tXG5uZXQvY29yZS9saW5rX3dhdGNoLmMtMjM4LVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bHdldmVudGxpc3RfbG9jayk7XG5uZXQvY29yZS9saW5rX3dhdGNoLmM6MjM5Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYy0yNDAtXHRcdGxpbmt3YXRjaF9kb19kZXYoZGV2KTtcbi0tXG5uZXQvY29yZS9saW5rX3dhdGNoLmM9MjkxPXZvaWQgbGlua3dhdGNoX3N5bmNfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvbGlua193YXRjaC5jLTI5My1cdGlmIChsaW5rd2F0Y2hfY2xlYW5fZGV2KGRldikpIHtcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYzoyOTQ6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvbGlua193YXRjaC5jLTI5NS1cdFx0bGlua3dhdGNoX2RvX2RldihkZXYpO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTY5PXN0YXRpYyBpbnQgc3lzZnNfcnRubF9sb2NrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyNS0gKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEyNjpzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMjctXHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM0LVx0Lypcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzNTpcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCk7IHRoaXMgaGVscHNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNi1cdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDgtXHR9XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxNDk6XHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE1MC1cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTgtXHRcdCAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTU5Olx0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNjAtXHRcdFx0cmV0ID0gMDtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNzAtLyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJiMzOTtzICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxNzE6c3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTcyLVx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTkyPXN0YXRpYyBzc2l6ZV90IGZpZWxkIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXHRcdFx0XHRcXFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE5NC17XHRcdFx0XHRcdFx0XHRcdFx0XFxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE5NTpcdHJldHVybiBuZXRkZXZfc2hvdyhkZXYsIGF0dHIsIGJ1ZiwgZm9ybWF0XyMjZmllbGQpO1x0XHRcXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTk2LX1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTI4OD1zdGF0aWMgc3NpemVfdCBuYW1lX2Fzc2lnbl90eXBlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTI5NS1cdGlmIChSRUFEX09OQ0UobmRldi1cdTAwM2VuYW1lX2Fzc2lnbl90eXBlKSAhPSBORVRfTkFNRV9VTktOT1dOKVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6Mjk2Olx0XHRyZXQgPSBuZXRkZXZfc2hvdyhkZXYsIGF0dHIsIGJ1ZiwgZm9ybWF0X25hbWVfYXNzaWduX3R5cGUpO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjk3LVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTM4MT1zdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zODYtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozODc6XHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzg4LVx0aWYgKCFyZXQpXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9Mzk1PXN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy00MDEtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo0MDI6XHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtNDAzLVx0aWYgKCFyZXQpIHtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xNDgxPXN0YXRpYyBzc2l6ZV90IHR4X21heHJhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTUwNi1cdGVyciA9IC1FT1BOT1RTVVBQO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTUwNzpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTUwOC1cdGlmIChkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0X3R4X21heHJhdGUpXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjE1OT1zdGF0aWMgdm9pZCByZW1vdmVfcXVldWVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTcwLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjE3MTpcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE3Mi1cdGRldi1cdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMgPSAwO1xuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9NjE4PWludCBuZXRkZXZfbmxfcXVldWVfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy02MzgtXHR9IGVsc2Uge1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzo2Mzk6XHRcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgbmV0ZGV2LFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy02NDAtXHRcdFx0XHRcdFx0ICAgICAgIGN0eC1cdTAwM2VpZmluZGV4KSB7XG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz05MDE9aW50IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtOTM4LVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzo5Mzk6XHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIG5ldGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtOTQwLVx0XHRlcnIgPSBuZXRkZXZfbmxfcXN0YXRzX2dldF9kdW1wX29uZShuZXRkZXYsIHNjb3BlLCBza2IsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xNDcyPXN0YXRpYyBpbnQgbmV0ZGV2X2dlbmxfbmV0ZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xNDc4LVx0Y2FzZSBORVRERVZfUkVHSVNURVI6XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjE0Nzk6XHRcdG5ldGRldl9sb2NrX29wc190b19mdWxsKG5ldGRldik7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTE0ODAtXHRcdG5ldGRldl9nZW5sX2Rldl9ub3RpZnkobmV0ZGV2LCBORVRERVZfQ01EX0RFVl9BRERfTlRGKTtcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTEzMD1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE1NC1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTU1Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTU2LVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MzAzNz1zdGF0aWMgaW50IGRvX3NldF9tYXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlmaW5kZXgsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA1NS1cdFx0XHRlcnIgPSBvcHMtXHUwMDNlbmRvX2RlbF9zbGF2ZSh1cHBlcl9kZXYsIGRldik7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzozMDU2Olx0XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA1Ny1cdFx0XHRpZiAoZXJyKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTMwNzEtXHRcdFx0ZXJyID0gb3BzLVx1MDAzZW5kb19hZGRfc2xhdmUodXBwZXJfZGV2LCBkZXYsIGV4dGFjayk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzozMDcyOlx0XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA3My1cdFx0XHRpZiAoZXJyKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTMxNDQ9c3RhdGljIGludCBkb19zZXRsaW5rKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzE3NS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjMxNzY6XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMxNzctXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzIxMy1cdFx0ZG93bl93cml0ZShcdTAwMjZkZXZfYWRkcl9zZW0pO1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzIxNDpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMjE1LVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTM3MTA9aW50IHJ0bmxfY29uZmlndXJlX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGlmaW5mb21zZyAqaWZtLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTM3MTUtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzozNzE2Olx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zNzE3LVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTM5Mjg9c3RhdGljIGludCBydG5sX25ld2xpbmtfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZmluZm9tc2cgKmlmbSxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zOTgwLVx0aWYgKHRiW0lGTEFfTUFTVEVSXSkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6Mzk4MTpcdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zOTgyLVx0XHRlcnIgPSBkb19zZXRfbWFzdGVyKGRldiwgbmxhX2dldF91MzIodGJbSUZMQV9NQVNURVJdKSwgZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMzYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBTeXN0ZW0gQ29uZmlndXJhdGlvbiBmb3IgTmV0d29yayBhbmQgU3lzZnMgSW50ZWdyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYG5ldC1zeXNmcy5jYC4gSSBrbm93IGl0JiMzOTtzIGNvbXBpbGVkIGFzIHBhcnQgb2YgdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5IHdoZW4gdGhlIG5ldHdvcmsgc3RhY2sgaXMgYWN0aXZlLCBhbmQgSSBiZWxpZXZlIGl0IGxldmVyYWdlcyB0aGUgYCNpZmRlZiBDT05GSUdfU1lTRlNgIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpdGhpbiB0aGUgY29kZS4gU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBib3RoIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19TWVNGU2AgYXJlIHByb3Blcmx5IGRlZmluZWQgYW5kIGVuYWJsZWQuIFRpbWUgdG8gdmVyaWZ5IHRoYXQgdGhvc2Ugc2V0dGluZ3MgYXJlIGNvcnJlY3RseSBkb2N1bWVudGVkIGFuZCBzZXQgdXAgaW4gS2NvbmZpZy4gVGhpcyB3aWxsIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzItXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozMzojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zNC1zdGF0aWMgY29uc3QgY2hhciBmbXRfaGV4W10gPSBcJiMzNDslI3hcXG5cJiMzNDs7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9OTIwPXN0YXRpYyBib29sIHdpcmVsZXNzX2dyb3VwX25lZWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MzItXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5MzM6I2Vsc2UgLyogQ09ORklHX1NZU0ZTICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MzQtI2RlZmluZSBuZXRfY2xhc3NfZ3JvdXBzXHROVUxMXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo5MzU6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtOTM2LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTM3OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkzOC0jZGVmaW5lIHRvX3J4X3F1ZXVlX2F0dHIoX2F0dHIpIFxcXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTI5MD1zdGF0aWMgaW50IHJ4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5kZXgsIGt1aWRfdCBrdWlkLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzMDYtfVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTMwNzojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzA4LVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEzMTA9bmV0X3J4X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2xkX251bSwgaW50IG5ld19udW0pXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzExLXtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzMTI6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTMxMy1cdGludCBpO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTEzNDY9c3RhdGljIGludCBuZXRfcnhfcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBudW0sXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM0OC17XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzQ5OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNTAtXHRpbnQgZXJyb3IgPSAwO1xuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNjgtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzY5OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNzAtLypcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMDIyPXN0YXRpYyBpbnQgdHhfcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgaW5kZXgsXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzNy19XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDM4OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwMzktXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjA0MT1uZXRkZXZfcXVldWVfdXBkYXRlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvbGRfbnVtLCBpbnQgbmV3X251bSlcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwNDIte1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA0MzojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDQ0LVx0aW50IGk7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA3Ny1cdHJldHVybiAwO1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA3ODojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDc5LX1cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMDgxPXN0YXRpYyBpbnQgbmV0X3R4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwODMte1xubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA4NDojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDg1LVx0aW50IGVycm9yID0gMDtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDk2LVx0cmV0dXJuIDA7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDk3OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwOTgtfVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxMDA9c3RhdGljIGludCByZWdpc3Rlcl9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxMDMtXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTA0OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxMDUtXHRkZXYtXHUwMDNlcXVldWVzX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKFwmIzM0O3F1ZXVlc1wmIzM0Oyxcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTI3LVx0bmV0X3J4X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhkZXYsIHJ4cSwgMCk7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTI4OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxMjktXHRrc2V0X3VucmVnaXN0ZXIoZGV2LVx1MDAzZXF1ZXVlc19rc2V0KTtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMTM0PXN0YXRpYyBpbnQgcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBrdWlkX3Qga3VpZCwga2dpZF90IGtnaWQpXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEzNy1cbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxMzg6I2lmZGVmIENPTkZJR19TWVNGU1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEzOS1cdGlmIChuZGV2LVx1MDAzZXF1ZXVlc19rc2V0KSB7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjE1OT1zdGF0aWMgdm9pZCByZW1vdmVfcXVldWVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTYyLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjE2MzojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTY0LVx0cmVhbF9yeCA9IGRldi1cdTAwM2VyZWFsX251bV9yeF9xdWV1ZXM7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE3NC1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTc1OiNpZmRlZiBDT05GSUdfU1lTRlNcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNzYtXHRrc2V0X3VucmVnaXN0ZXIoZGV2LVx1MDAzZXF1ZXVlc19rc2V0KTtcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMzMyPWludCBuZXRkZXZfcmVnaXN0ZXJfa29iamVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzQ0LVxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjM0NTojaWZkZWYgQ09ORklHX1NZU0ZTXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzQ2LVx0LyogQWxsb3cgZm9yIGEgZGV2aWNlIHNwZWNpZmljIGdyb3VwICovXG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjM1NC1cdFx0Kmdyb3VwcyYjNDM7JiM0MzsgPSBcdTAwMjZ3aXJlbGVzc19ncm91cDtcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIzNTU6I2VuZGlmIC8qIENPTkZJR19TWVNGUyAqL1xubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjM1Ni1cbi0tXG5uZXQvY29yZS9uZXQtc3lzZnMuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG5uZXQvY29yZS9uZXQtc3lzZnMuaDoyOiNpZm5kZWYgX19ORVRfU1lTRlNfSF9fXG5uZXQvY29yZS9uZXQtc3lzZnMuaDozOiNkZWZpbmUgX19ORVRfU1lTRlNfSF9fXG5uZXQvY29yZS9uZXQtc3lzZnMuaC00LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTExOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVwZW5kZW5jeSBDaGVjayBpbiBgbmV0L0tjb25maWdgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcGFydGljdWxhciBjb21wb25lbnQgb3IgZmVhdHVyZS4gTXkgdXN1YWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgYG5ldC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kLCBpbXBvcnRhbnRseSwgdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRoYXQgd2lsbCByZXZlYWwgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgdGhpbmcgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBtb2R1bGVzIG9yIHNldHRpbmdzIHRoaXMgZGVwZW5kcyBvbiB0byBnZXQgYSBjbGVhciBwaWN0dXJlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgcGFyc2luZyB0aGF0IGZpbGUuIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTmV0d29yayBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUXG4gICA3Olx0XHRib29sIFwmIzM0O05ldHdvcmtpbmcgc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0c2VsZWN0IE5MQVRUUlxuICAgOTpcdFx0c2VsZWN0IEdFTkVSSUNfTkVUX1VUSUxTXG4gIDEwOlx0XHRzZWxlY3QgQlBGXG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFVubGVzcyB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUuXG4gIDEzOlx0XHQgIFRoZSByZWFzb24gaXMgdGhhdCBzb21lIHByb2dyYW1zIG5lZWQga2VybmVsIG5ldHdvcmtpbmcgc3VwcG9ydCBldmVuXG4gIDE0Olx0XHQgIHdoZW4gcnVubmluZyBvbiBhIHN0YW5kLWFsb25lIG1hY2hpbmUgdGhhdCBpc24mIzM5O3QgY29ubmVjdGVkIHRvIGFueVxuICAxNTpcdFx0ICBvdGhlciBjb21wdXRlci5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgSWYgeW91IGFyZSB1cGdyYWRpbmcgZnJvbSBhbiBvbGRlciBrZXJuZWwsIHlvdVxuICAxODpcdFx0ICBzaG91bGQgY29uc2lkZXIgdXBkYXRpbmcgeW91ciBuZXR3b3JraW5nIHRvb2xzIHRvbyBiZWNhdXNlIGNoYW5nZXNcbiAgMTk6XHRcdCAgaW4gdGhlIGtlcm5lbCBhbmQgdGhlIHRvb2xzIG9mdGVuIGdvIGhhbmQgaW4gaGFuZC4gVGhlIHRvb2xzIGFyZVxuICAyMDpcdFx0ICBjb250YWluZWQgaW4gdGhlIHBhY2thZ2UgbmV0LXRvb2xzLCB0aGUgbG9jYXRpb24gYW5kIHZlcnNpb24gbnVtYmVyXG4gIDIxOlx0XHQgIG9mIHdoaWNoIGFyZSBnaXZlbiBpbiBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlc1x1MDAzZS5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgRm9yIGEgZ2VuZXJhbCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgaXQgaXMgaGlnaGx5XG4gIDI0Olx0XHQgIHJlY29tbWVuZGVkIHRvIHJlYWQgdGhlIE5FVC1IT1dUTywgYXZhaWxhYmxlIGZyb21cbiAgMjU6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cdTAwM2UuXG4gIDI2Olx0XG4gIDI3Olx0aWYgTkVUXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcbiAgMzA6XHRcdGJvb2xcbiAgMzE6XHRcdGhlbHBcbiAgMzI6XHRcdCAgVGhpcyBvcHRpb24gY2FuIGJlIHNlbGVjdGVkIGJ5IG90aGVyIG9wdGlvbnMgdGhhdCBuZWVkIGNvbXBhdFxuICAzMzpcdFx0ICBuZXRsaW5rIG1lc3NhZ2VzLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBDT01QQVRfTkVUTElOS19NRVNTQUdFU1xuICAzNjpcdFx0ZGVmX2Jvb2wgeVxuICAzNzpcdFx0ZGVwZW5kcyBvbiBDT01QQVRcbiAgMzg6XHRcdGRlcGVuZHMgb24gV0VYVF9DT1JFIHx8IFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgVGhpcyBvcHRpb24gbWFrZXMgaXQgcG9zc2libGUgdG8gc2VuZCBkaWZmZXJlbnQgbmV0bGluayBtZXNzYWdlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgzMwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQ09ORklHX1NZU0ZTYCBvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIHJlbGV2YW50IGZpbGVzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGBmcy9zeXNmcy9LY29uZmlnYC4gSXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuIElmIHRoYXQgZG9lc24mIzM5O3QgcGFuIG91dCwgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIG5leHQgbG9naWNhbCBwbGFjZSB0byBjaGVjay4gSXQmIzM5O3MgcGxhdXNpYmxlIHRoYXQgaXQmIzM5O3MgYSBtb3JlIGZ1bmRhbWVudGFsIG9yIGdlbmVyaWMgb3B0aW9uIGluZmx1ZW5jaW5nIGVhcmx5IHN5c3RlbSBpbml0aWFsaXphdGlvbi4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIGRldGFpbHMuIFRpbWUgdG8gZ2V0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTWVNGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zeXNmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9zeXNmcy9LY29uZmlnOjI6Y29uZmlnIFNZU0ZTXG5mcy9zeXNmcy9LY29uZmlnLTMtXHRib29sIFwmIzM0O3N5c2ZzIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIEludGVyZmFjZSBTcGVlZCBhbmQgRHVwbGV4IFNldHRpbmdzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgc3ltYm9scyByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlIHNldHRpbmdzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBzcGVlZCBhbmQgZHVwbGV4LiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGNlbnRlcmVkIGFyb3VuZCBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCwgd2hpY2ggaXMgbWFya2VkIGFzIHN0YXRpYywgYWxvbmcgd2l0aCBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AsIGFsc28gc3RhdGljIGZ1bmN0aW9ucy4gSW50cmlndWluZywgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uLgoKQWgsIHRoZXJlIGl0IGlzISBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBpcyB0aGUga2V5IOKAkyBpdCYjMzk7cyBhbiBleHBvcnRlZCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9ldGh0b29sL2lvY3RsLmNgLCBhbmQgaXQgYXBwZWFycyB0byBiZSB3aGF0IGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGlzIGxldmVyYWdpbmcuIFNpbmNlIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGlzIGV4cG9ydGVkLCBpdCYjMzk7cyB0aGUgcmVhbCBlbnRyeSBwb2ludCBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29kZSBmbG93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGluIGBuZXQvZXRodG9vbC9pb2N0bC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdpbGwgZmluZCB0aGUgY2FsbGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzIGFyZSBiZWluZyByZXRyaWV2ZWQgYW5kIGV4cG9zZWQsIGVzcGVjaWFsbHkgbm93IHRoYXQgdGhlIGJhY2tpbmcgZnVuY3Rpb24sIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLCBpcyBzdGF0aWMuIFRoaXMgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nLCBtYXliZSB0byBjb25zb2xpZGF0ZSBhY2Nlc3Mgb3IgaGlkZSBzb21lIGludGVybmFsIGRldGFpbHMuIFRpbWUgdG8gZXhhbWluZSB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDM1Olx0XHR9IGxpbmtfbW9kZXM7XG4gNDM2Olx0fTtcbiA0Mzc6XHRcbiA0Mzg6XHQvKiBJbnRlcm5hbCBrZXJuZWwgaGVscGVyIHRvIHF1ZXJ5IGEgZGV2aWNlIGV0aHRvb2xfbGlua19zZXR0aW5ncy4gKi9cbiA0Mzk6XHRpbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gNDQwOlx0XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXG4gNDQxOlx0e1xuIDQ0MjpcdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzX2NvbXBhdChkZXYpO1xuIDQ0MzpcdFxuIDQ0NDpcdFx0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuIDQ0NTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gNDQ2Olx0XG4gNDQ3Olx0XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4gNDQ4Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQ0OTpcdFxuIDQ1MDpcdFx0bWVtc2V0KGxpbmtfa3NldHRpbmdzLCAwLCBzaXplb2YoKmxpbmtfa3NldHRpbmdzKSk7XG4gNDUxOlx0XHRyZXR1cm4gZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncyhkZXYsIGxpbmtfa3NldHRpbmdzKTtcbiA0NTI6XHR9XG4gNDUzOlx0RVhQT1JUX1NZTUJPTChuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MpO1xuIDQ1NDpcdFxuIDQ1NTpcdC8qIENvbnZlbmllbmNlIGhlbHBlciBmb3IgY2FsbGVycyB0aGF0IGhvbGQgb25seSBydG5sX2xvY2soKS4gKi9cbiA0NTY6XHRpbnQgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDQ1NzpcdFx0XHRcdFx0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncylcbiA0NTg6XHR7XG4gNDU5Olx0XHRpbnQgcmV0O1xuIDQ2MDpcdFxuIDQ2MTpcdFx0QVNTRVJUX1JUTkwoKTtcbiA0NjI6XHRcbiA0NjM6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuIDQ2NDpcdFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgbGlua19rc2V0dGluZ3MpO1xuIDQ2NTpcdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiA0NjY6XHRcdHJldHVybiByZXQ7XG4gNDY3Olx0fVxuIDQ2ODpcdEVYUE9SVF9TWU1CT0woX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyk7XG4gNDY5Olx0XG4gNDcwOlx0LyogY29udmVydCBldGh0b29sX2xpbmtfdXNldHRpbmdzIGluIHVzZXIgc3BhY2UgdG8gYSBrZXJuZWwgaW50ZXJuYWxcbiA0NzE6XHQgKiBldGh0b29sX2xpbmtfa3NldHRpbmdzLiByZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBlcnJvci5cbiA0NzI6XHQgKi9cbiA0NzM6XHRzdGF0aWMgaW50IGxvYWRfbGlua19rc2V0dGluZ3NfZnJvbV91c2VyKHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICp0byxcbiA0NzQ6XHRcdFx0XHRcdFx0IGNvbnN0IHZvaWQgX191c2VyICpmcm9tKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI1MAoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAzNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBGdW5jdGlvbiBGdXp6aW5nIFRhcmdldHMgZm9yIE5ldHdvcmsgU3lzZnMgQXR0cmlidXRlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCwgYW5kIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgYW5kIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGlzIHRoZSBub24tc3RhdGljIG9uZS4gTG9va2luZyBhdCB0aGUgcHJvbXB0JiMzOTtzIGluc3RydWN0aW9ucywgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBlbXBoYXNpemluZyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBmdW5jdGlvbnMgYXJlIG9mdGVuIGlubGluZWQsIGFuZCB3ZSBuZWVkIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgZm9yIGZ1enppbmcuIFNvLCB3aGlsZSBgc3BlZWRfc2hvd2AsIGBkdXBsZXhfc2hvd2AsIGFuZCBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBhcmUgcmVsZXZhbnQgaW4gY29udGV4dCwgSSBuZWVkIHRvIHByaW9yaXRpemUgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgZm9yIGBGb2N1c1N5bWJvbHNgLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpcyB0YXJnZXRlZC4gV2hpbGUgdGhlIHN0YXRpYyBvbmVzIGFyZSBjYWxsZWQsIEkgbmVlZCB0byBmb2N1cyB0aGUgZnV6emluZyB0byAqb25seSogd2hhdCB0aGUgcHJvbXB0IGlzIGFza2luZy4gYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgLCBhbmQgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2Agc2hvdWxkIGJlIGluY2x1ZGVkLCBldmVuIGlmIHRoZXkgYXJlIHN0YXRpYyBzaW5jZSB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyB0aGVtLgoKTm93LCB3aXRoIHRob3NlIHByaW9yaXRpZXMgaW4gbWluZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29ycmVjdCBFbmFibGVDb25maWdzIGFyZSBzZXQuIEkgc2VlIGBTWVNGU2AgYW5kIGBORVRgLCB3aGljaCBzZWVtIGFwcHJvcHJpYXRlLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLgoKVGhlIHBhdGNoJiMzOTtzIGRlc2NyaXB0aW9uIGhpZ2hsaWdodHMgYSBjaGFuZ2UgaW4gdGhlIGxvY2tpbmcgbWVjaGFuaXNtIGFuZCBoYW5kbGluZyBvZiBgZGV2X2lzYWxpdmVgIGNoZWNrcyBmb3IgcmVhZGluZyBzcGVlZCBhbmQgZHVwbGV4IHN5c2ZzIGF0dHJpYnV0ZXMuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIG5ldHdvcmsgaW50ZXJmYWNlIGluZm9ybWF0aW9uIHRocm91Z2ggc3lzZnMuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBmdXp6aW5nLiBUaGlzIHNob3VsZCBnZXQgYSBoaWdoIHByaW9yaXR5IHdoZW4gc2V0dGluZyB1cCB0aGUgZnV6emluZy4KCkkmIzM5O2xsIHZlcmlmeSBldmVyeXRoaW5nIHdpdGggYHNldC1yZXN1bHRzYCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXQgdXAgY29ycmVjdGx5LiBUaGlzIHNob3VsZCBiZSBhIGdvb2QgaW5pdGlhbCBwYXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1lTRlMmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3NwZWVkX3Nob3cmIzM0OywKICAgICYjMzQ7ZHVwbGV4X3Nob3cmIzM0OywKICAgICYjMzQ7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGxvY2tpbmcgbG9naWMgd2hlbiByZWFkaW5nIHRoZSBuZXR3b3JrIGRldmljZSAmIzM5O3NwZWVkJiMzOTsgYW5kICYjMzk7ZHVwbGV4JiMzOTsgc3lzZnMgYXR0cmlidXRlcy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIHRoZSBSVE5MIGxvY2ssIGl0IHVzZXMgcGVyLWRldmljZSBvcHMgbG9ja2luZyAobmV0ZGV2X2xvY2tfb3BzKSB3aGVuIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLCBjaGVja3MgZGV2X2lzYWxpdmUsIGFuZCBjYWxscyBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKS4gVGhpcyBhZmZlY3RzIHVzZXItYWNjZXNzaWJsZSBzeXNmcyBlbmRwb2ludHMgYW5kIG5ldHdvcmsgZGV2aWNlIGxvY2tpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NZU0ZTJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGlmX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtzcGVlZF9zaG93JiMzNDssCiAgICAmIzM0O2R1cGxleF9zaG93JiMzNDssCiAgICAmIzM0O3N5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBsb2NraW5nIGxvZ2ljIHdoZW4gcmVhZGluZyB0aGUgbmV0d29yayBkZXZpY2UgJiMzOTtzcGVlZCYjMzk7IGFuZCAmIzM5O2R1cGxleCYjMzk7IHN5c2ZzIGF0dHJpYnV0ZXMuIEluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IGFjcXVpcmluZyB0aGUgUlROTCBsb2NrLCBpdCB1c2VzIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgKG5ldGRldl9sb2NrX29wcykgd2hlbiBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSwgY2hlY2tzIGRldl9pc2FsaXZlLCBhbmQgY2FsbHMgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCkuIFRoaXMgYWZmZWN0cyB1c2VyLWFjY2Vzc2libGUgc3lzZnMgZW5kcG9pbnRzIGFuZCBuZXR3b3JrIGRldmljZSBsb2NraW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyAmIzM5O3NwZWVkJiMzOTsgYW5kICYjMzk7ZHVwbGV4JiMzOTsgYXR0cmlidXRlIHJlYWQgaGFuZGxlcnMgaW50byBhIGhlbHBlciBmdW5jdGlvbiAmIzM5O3N5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpJiMzOTssIGFsbG93aW5nIHRoZSB1c2Ugb2YgcGVyLWRldmljZSBvcHMgbG9ja2luZyAobmV0ZGV2X2xvY2tfb3BzKSBpbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgUlROTC5cblxuVGhlIHN0YWNrLWFsbG9jYXRlZCAmIzM5O3N0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZCYjMzk7IHZhcmlhYmxlIGlzIHBhc3NlZCB0byBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKSwgd2hpY2ggemVyb2VzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggbWVtc2V0KCkgYmVmb3JlIHF1ZXJ5aW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBmaWVsZHMgY21kLmJhc2Uuc3BlZWQgYW5kIGNtZC5iYXNlLmR1cGxleCBhcmUgYWNjZXNzZWQgb25seSB3aGVuIHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpIHJldHVybnMgc3VjY2VzcyAoMCksIGFuZCB2YWx1ZXMgYXJlIGZvcm1hdHRlZCBpbnRvIHRleHQgdmlhIHN5c2ZzX2VtaXQoKS4gTG9ja2luZyBhbmQgY29uY3VycmVuY3kgYXNwZWN0cyBvZiB0aGlzIHBhdGNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVhayByaXNrcywgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZTM2ZjdhNTNmZDU4NmE1ZGE5YWIyYjQxY2RlNDVhZjQ1YzAwOTM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDg6MTM6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDM1MjE3M2RmNzU3ODUuLjNlMDFlN2YzY2FjNzkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw1NSBAQCBzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoKJiM0MzsgKiBVc2UgdGhlIHBlci1kZXZpY2Ugb3BzIGxvY2sgd2l0aG91dCBSVE5MIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyBpdC4KJiM0MzsgKiBMZWdhY3kgZGV2aWNlcyBhbmQgY2FsbGJhY2tzIHdoaWNoIGV4cGxpY2l0bHkgcmVxdWlyZSBSVE5MIHJldGFpbiB0aGUKJiM0MzsgKiBleGlzdGluZyBsb2NraW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAomIzQzOwkJCQkgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7CiYjNDM7CWludCByZXQgPSAtRUlOVkFMOwomIzQzOwlib29sIG5lZWRfcnRubDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKTsgdGhpcyBoZWxwcwomIzQzOwkgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8CiYjNDM7CQkgICAgKG5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsKJiM0MzsJCSAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7CiYjNDM7CWlmIChuZWVkX3J0bmwpIHsKJiM0MzsJCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CW5ldGRldl9sb2NrX29wcyhuZXRkZXYpOwomIzQzOwomIzQzOwlyZXQgPSAtRUlOVkFMOwomIzQzOwlpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CX0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogS2VlcCB0aGUgc3lzZnMgQUJJOiByZXBvcnQgYW55IGNhbGxiYWNrIGVycm9yIGFzIC1FSU5WQUwKJiM0MzsJCSAqIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgdGhlIGRyaXZlciYjMzk7cyBlcnJvciBjb2RlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpCiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfdW5sb2NrX29wcyhuZXRkZXYpOwomIzQzOwlpZiAobmVlZF9ydG5sKQomIzQzOwkJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwmIzM5O3MgKi8KIHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCkBAIC0zMzIsMjcgJiM0MzszODEsMTMgQEAgc3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpOwogc3RhdGljIHNzaXplX3Qgc3BlZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwcwotCSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KLQkgKi8KLQlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDsKJiM0MzsJaW50IHJldDsKIAotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7CiYjNDM7CXJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsICZhbXA7Y21kKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpOwogCi0JCWlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7Y21kKSkKLQkJCXJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7Ci0JfQotCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7CkBAIC0zNjAsNDEgJiM0MzszOTUsMjYgQEAgc3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTsKIHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwcwotCSAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy4KLQkgKi8KLQlpZiAoIW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9saW5rX2tzZXR0aW5ncykKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHN5c2ZzX3J0bmxfbG9jaygmYW1wO2Rldi0mZ3Q7a29iaiwgJmFtcDthdHRyLSZndDthdHRyLCBuZXRkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSAtRUlOVkFMOwotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kOwotCi0JCWlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7Y21kKSkgewotCQkJY29uc3QgY2hhciAqZHVwbGV4OwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7CiYjNDM7CWNvbnN0IGNoYXIgKmR1cGxleDsKJiM0MzsJaW50IHJldDsKIAotCQkJc3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHsKLQkJCWNhc2UgRFVQTEVYX0hBTEY6Ci0JCQkJZHVwbGV4ID0gJiMzNDtoYWxmJiMzNDs7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERVUExFWF9GVUxMOgotCQkJCWR1cGxleCA9ICYjMzQ7ZnVsbCYjMzQ7OwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlkdXBsZXggPSAmIzM0O3Vua25vd24mIzM0OzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXJldCA9IHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVzXG4mIzM0OywgZHVwbGV4KTsKJiM0MzsJcmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgJmFtcDtjbWQpOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJc3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHsKJiM0MzsJCWNhc2UgRFVQTEVYX0hBTEY6CiYjNDM7CQkJZHVwbGV4ID0gJiMzNDtoYWxmJiMzNDs7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIERVUExFWF9GVUxMOgomIzQzOwkJCWR1cGxleCA9ICYjMzQ7ZnVsbCYjMzQ7OwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlkdXBsZXggPSAmIzM0O3Vua25vd24mIzM0OzsKJiM0MzsJCQlicmVhazsKIAkJfQomIzQzOwkJcmV0ID0gc3lzZnNfZW1pdChidWYsICYjMzQ7JXNcbiYjMzQ7LCBkdXBsZXgpOwogCX0KLQlydG5sX3VubG9jaygpOwomIzQzOwogCXJldHVybiByZXQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MDYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIC0gUGF0Y2ggU2VyaWVzIFJldmlldyoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBsb29rIGF0IGEgTGludXgga2VybmVsIHBhdGNoIHNlcmllcyBhbmQgZGVjaWRlIGlmIGl0IG5lZWRzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLiBObyBwcm9ibGVtLCBsZXQmIzM5O3Mgc3RhcnQgYnkgbWFraW5nIHN1cmUgaXQmIzM5O3Mgc2FmZSDigJMgc3RhbmRhcmQgZGVmZW5zaXZlIHJldmlldywgbm8gbWFsaWNpb3VzIHN0dWZmLCBqdXN0IGNoZWNraW5nIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgbWVtb3J5IHNhbml0aXplciBhdHRlbnRpb24uIFRoaXMgaXMgYSBiZW5pZ24gc2V2ZXJpdHkgYXNzZXNzbWVudCwgcHVyZWx5IGFib3V0IHRoZSBjb2RlLgoKQWxyaWdodCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9jb3JlL25ldC1zeXNmcy5jYC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGhlbHBlci4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyB0aGVuIHVzZWQgaW4gYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgLCBjYWxsaW5nIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCAmYW1wO2NtZClgLiBIbW0sIGFuZCBgY21kYCBpcyBhbiAqdW5pbml0aWFsaXplZCogYHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtgIG9uIHRoZSBzdGFjay4gTm93IHRoYXQgY2F0Y2hlcyBteSBleWUuIElzIGBjbWRgIHByb3Blcmx5IGluaXRpYWxpemVkIGluc2lkZSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCB0byBzZWUuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhhdCBvdXQsIGFzIHdlbGwgYXMgYF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGF0IGxvY2FsIHZhcmlhYmxlIGBjbWRgIGlzIGJlaW5nIGluaXRpYWxpemVkIGJlZm9yZSBpdCYjMzk7cyB1c2VkLiBUaGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IEtNU0FOIG1pZ2h0IG5lZWQgdG8gbG9vayBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0zMjY9X19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMzI3LVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKTtcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjMyODppbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0zMjktXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpO1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9NDI5PXN0cnVjdCBldGh0b29sX2xpbmtfdXNldHRpbmdzIHtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQzOC0vKiBJbnRlcm5hbCBrZXJuZWwgaGVscGVyIHRvIHF1ZXJ5IGEgZGV2aWNlIGV0aHRvb2xfbGlua19zZXR0aW5ncy4gKi9cbm5ldC9ldGh0b29sL2lvY3RsLmM6NDM5OmludCBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDQwLVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDA3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBFdGh0b29sIENvZGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGV0aHRvb2wmIzM5O3MgaGFuZGxpbmcgb2YgY2VydGFpbiBjb25maWd1cmF0aW9ucyB3b3Jrcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCBgbmV0L2V0aHRvb2wvaW9jdGwuY2AgYXJvdW5kIGxpbmUgNDM5LiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBpb2N0bCBoYW5kbGluZyBsb2dpYyByZXNpZGVzLCB3aGljaCBzaG91bGQgYmUgaW50ZXJlc3RpbmcuIFRoZW4sIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgZXRodG9vbCB1c2VzLCBJJiMzOTtsbCBuZWVkIHRvIHJlZmVyZW5jZSBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgIGFyb3VuZCBsaW5lIDMyNi4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBzdHJ1Y3R1cmVzIGxpa2UgYGV0aHRvb2xfZ3NldF90YCBvciBzaW1pbGFyLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSBob3cgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgYWNjZXNzZWQgc28gSSBjYW4gY29tcHJlaGVuZCB0aGUgZGF0YSBmbG93IGFuZCBhbnkgZGF0YSB2YWxpZGF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgc3RhcnRpbmcgcG9pbnQgaGVscHMgY2xhcmlmeSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlci1zcGFjZSBldGh0b29sIHV0aWxpdHkgYW5kIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBkZXZpY2UgZHJpdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9pb2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHRcdHN0cnVjdCBldGh0b29sX2xpbmtfc2V0dGluZ3MgYmFzZTtcbiA0MzE6XHRcdHN0cnVjdCB7XG4gNDMyOlx0XHRcdF9fdTMyIHN1cHBvcnRlZFtfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTlUzMl07XG4gNDMzOlx0XHRcdF9fdTMyIGFkdmVydGlzaW5nW19fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OVTMyXTtcbiA0MzQ6XHRcdFx0X191MzIgbHBfYWR2ZXJ0aXNpbmdbX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05VMzJdO1xuIDQzNTpcdFx0fSBsaW5rX21vZGVzO1xuIDQzNjpcdH07XG4gNDM3Olx0XG4gNDM4Olx0LyogSW50ZXJuYWwga2VybmVsIGhlbHBlciB0byBxdWVyeSBhIGRldmljZSBldGh0b29sX2xpbmtfc2V0dGluZ3MuICovXG4gNDM5Olx0aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIDQ0MDpcdFx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxuIDQ0MTpcdHtcbiA0NDI6XHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcbiA0NDM6XHRcbiA0NDQ6XHRcdGlmICghZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbiA0NDU6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDQ0NjpcdFxuIDQ0NzpcdFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuIDQ0ODpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0NDk6XHRcbiA0NTA6XHRcdG1lbXNldChsaW5rX2tzZXR0aW5ncywgMCwgc2l6ZW9mKCpsaW5rX2tzZXR0aW5ncykpO1xuIDQ1MTpcdFx0cmV0dXJuIGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XG4gNDUyOlx0fVxuIDQ1MzpcdEVYUE9SVF9TWU1CT0wobmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKTtcbiA0NTQ6XHRcbiA0NTU6XHQvKiBDb252ZW5pZW5jZSBoZWxwZXIgZm9yIGNhbGxlcnMgdGhhdCBob2xkIG9ubHkgcnRubF9sb2NrKCkuICovXG4gNDU2Olx0aW50IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiA0NTc6XHRcdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpXG4gNDU4Olx0e1xuIDQ1OTpcdFx0aW50IHJldDtcbiA0NjA6XHRcbiA0NjE6XHRcdEFTU0VSVF9SVE5MKCk7XG4gNDYyOlx0XG4gNDYzOlx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbiA0NjQ6XHRcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGxpbmtfa3NldHRpbmdzKTtcbiA0NjU6XHRcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4gNDY2Olx0XHRyZXR1cm4gcmV0O1xuIDQ2NzpcdH1cbiA0Njg6XHRFWFBPUlRfU1lNQk9MKF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MpO1xuIDQ2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzY0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5ldCBzeXNmcyBzcGVlZC9kdXBsZXggaW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBmdW5jdGlvbiBhbmQgaXRzIGludGVyYWN0aW9ucyB3aXRoIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgLCBgc3BlZWRfc2hvd2AsIGFuZCBgZHVwbGV4X3Nob3dgLiBUaGUgYG1lbXNldGAgaW4gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgaXMgaW1tZWRpYXRlbHkgYXBwYXJlbnQg4oCTIHRoZSBjb2RlIGlzIHplcm9pbmcgb3V0IHRoZSBgbGlua19rc2V0dGluZ3NgIHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyJiMzOTtzIGBnZXRfbGlua19rc2V0dGluZ3NgIGZ1bmN0aW9uIHZpYSBgZGV2LSZndDtldGh0b29sX29wc2AuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gaW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlLCBlbGltaW5hdGluZyB0aGUgcmlzayBvZiB1bmRlZmluZWQgYmVoYXZpb3IgaWYgdGhlIGRyaXZlciBkb2VzbiYjMzk7dCBwb3B1bGF0ZSBldmVyeSBmaWVsZC4KCk5vdywgbG9va2luZyBhdCBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCwgaXQgc2VlbXMgd2UmIzM5O3ZlIGdvdCBhIGxheWVyZWQgYXBwcm9hY2ggdG8gb2J0YWluaW5nIHRoZSBsaW5rIHNldHRpbmdzLiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIGRyaXZlciBhY3R1YWxseSAqaGFzKiBhIGBnZXRfbGlua19rc2V0dGluZ3NgIG9wZXJhdGlvbiBkZWZpbmVkLiBJZiBub3QsIGl0IGJhaWxzIG91dCBlYXJseSB3aXRoIGAtRUlOVkFMYC4gVGhlbiB0aGVyZSYjMzk7cyB0aGUgY29uZGl0aW9uYWwgbG9ja2luZyBzZWN0aW9uLiBJdCBpbnRlbGxpZ2VudGx5IGRldGVybWluZXMgd2hldGhlciB0byB1c2UgYHJ0bmxfbG9ja2Agb3IgYSBwZXItZGV2aWNlIGBuZXRkZXZfbG9ja19vcHNgIGJhc2VkIG9uIHRoZSBuZWVkIGZvciBSVE5MIGNvbnRleHQgZm9yIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uLiBBZnRlciB0aGUgbG9ja2luZyBpcyBoYW5kbGVkLCB0aGVyZSYjMzk7cyBhIHNhZmV0eSBjaGVjazogYGRldl9pc2FsaXZlYCBhbmQgYG5ldGlmX3J1bm5pbmdgLiBJZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCBhbGl2ZSwgb3IgaXMgbm90IHJ1bm5pbmcgaXQgcmV0dXJucyBhbiBlcnJvci4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgY2FsbCB0byBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYC4gSWYgKnRoYXQqIHN1Y2NlZWRzIChyZXR1cm5zIDApLCB0aGUgZnVuY3Rpb24gcHJvY2VlZHMuIE90aGVyd2lzZSwgaXQgcmVwb3J0cyBgLUVJTlZBTGAuIEZpbmFsbHksIHRoZSBsb2NrIGlzIHJlbGVhc2VkLgoKSW5zcGVjdGluZyBgc3BlZWRfc2hvd2AgcmVpbmZvcmNlcyB0aGF0IHRoZSBgY21kYCBzdHJ1Y3R1cmUgaXMgb25seSBhY2Nlc3NlZCBpZiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBzdWNjZWVkcy4gU28sIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgaXMgcHJvdGVjdGVkIGZyb20gcG90ZW50aWFsIGdhcmJhZ2UgZGF0YSwgd2hpY2ggSSYjMzk7dmUgc2VlbiBiZWZvcmUgaWYgdGhlIGRyaXZlciBkb2VzIG5vdCBpbml0aWFsaXplIHRoZSBgZXRodG9vbF9saW5rX2tzZXR0aW5nc2AuIFRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMgdG8gYGR1cGxleF9zaG93YCBzaW5jZSBpdCBmdW5jdGlvbnMgaWRlbnRpY2FsbHkuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGEgcmVmYWN0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBlZmZvcnQuIFRoZSBwcmV2aW91cyBjb2RlIGRpcmVjdGx5IGFjcXVpcmVkIHRoZSBSVE5MIGxvY2ssIHRoZW4gY2FsbGVkIGBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzYC4gVGhlIHJldmlzZWQgdmVyc2lvbiBleHRyYWN0cyB0aGUgY29tbW9uIGxvY2tpbmcgYW5kIHF1ZXJ5IGxvZ2ljIGludG8gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AuIFRoaXMgY2VudHJhbGl6YXRpb24gaXMgZ29vZCwgYW5kIHRoZSBjb25kaXRpb25hbCBsb2NraW5nIGJhc2VkIG9uIGBuZXRkZXZfbmVlZF9vcHNfbG9ja2AgaXMgYSBkZWZpbml0ZSBpbXByb3ZlbWVudC4gSXQgYWxsb3dzIGxvY2tsZXNzIG9yIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgd2hlbiBwb3NzaWJsZSwgcmVkdWNpbmcgdGhlIHNjb3BlIG9mIHRoZSBSVE5MIGxvY2suIEluIGVzc2VuY2UsIGl0JiMzOTtzIGFib3V0IHJlZHVjaW5nIGNvbnRlbnRpb24gYW5kIGltcHJvdmluZyBjb25jdXJyZW5jeSBpbiB0aGUga2VybmVsLgoKSSYjMzk7bGwgbm93IG5lZWQgdG8gdmVyaWZ5IHRoZXJlIGFyZW4mIzM5O3QgYW55IHN1YnRsZSBnb3RjaGFzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgZWxzZXdoZXJlLiBJIG5lZWQgdG8gY29tYiB0aHJvdWdoIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AgYXJvdW5kIGxpbmVzIDExOCB0byA0MDAuIEVuc3VyZSBubyBvdGhlciBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggaW50cm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgbGVhdmUgZGF0YSB1bmluaXRpYWxpemVkLCB3aGljaCBjYW4gbGVhZCB0byB0cmlja3kgYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXQtc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XHQgKiBUaGVyZSYjMzk7cyBubyBuZWVkIHRvIGtlZXAgdW5icmVha2luZyB0aGUgc3lzZnMgcHJvdGVjdGlvbiBub3IgdG8gaG9sZFxuIDExMTpcdFx0ICogYSBuZXQgZGV2aWNlIHJlZmVyZW5jZSBmcm9tIHRoYXQgcG9pbnQ7IHRoYXQgd2FzIG9ubHkgbmVlZGVkIHRvIHRha2VcbiAxMTI6XHRcdCAqIHRoZSBydG5sIGxvY2suXG4gMTEzOlx0XHQgKi9cbiAxMTQ6XHR1bmJyZWFrOlxuIDExNTpcdFx0c3lzZnNfdW5icmVha19hY3RpdmVfcHJvdGVjdGlvbihrbik7XG4gMTE2Olx0XHRkZXZfcHV0KG5kZXYpO1xuIDExNzpcdFxuIDExODpcdFx0cmV0dXJuIHJldDtcbiAxMTk6XHR9XG4gMTIwOlx0XG4gMTIxOlx0LypcbiAxMjI6XHQgKiBVc2UgdGhlIHBlci1kZXZpY2Ugb3BzIGxvY2sgd2l0aG91dCBSVE5MIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyBpdC5cbiAxMjM6XHQgKiBMZWdhY3kgZGV2aWNlcyBhbmQgY2FsbGJhY2tzIHdoaWNoIGV4cGxpY2l0bHkgcmVxdWlyZSBSVE5MIHJldGFpbiB0aGVcbiAxMjQ6XHQgKiBleGlzdGluZyBsb2NraW5nLlxuIDEyNTpcdCAqL1xuIDEyNjpcdHN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcbiAxMjc6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiAxMjg6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuIDEyOTpcdHtcbiAxMzA6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XG4gMTMxOlx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbiAxMzI6XHRcdGJvb2wgbmVlZF9ydG5sO1xuIDEzMzpcdFxuIDEzNDpcdFx0LypcbiAxMzU6XHRcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCk7IHRoaXMgaGVscHNcbiAxMzY6XHRcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbiAxMzc6XHRcdCAqL1xuIDEzODpcdFx0aWYgKCFuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuIDEzOTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE0MDpcdFxuIDE0MTpcdFx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKG5ldGRldikgfHxcbiAxNDI6XHRcdFx0ICAgIChuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjZcbiAxNDM6XHRcdFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTKTtcbiAxNDQ6XHRcdGlmIChuZWVkX3J0bmwpIHtcbiAxNDU6XHRcdFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFx1MDAyNmRldi1cdTAwM2Vrb2JqLCBcdTAwMjZhdHRyLVx1MDAzZWF0dHIsIG5ldGRldik7XG4gMTQ2Olx0XHRcdGlmIChyZXQpXG4gMTQ3Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAxNDg6XHRcdH1cbiAxNDk6XHRcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xuIDE1MDpcdFxuIDE1MTpcdFx0cmV0ID0gLUVJTlZBTDtcbiAxNTI6XHRcdGlmICghZGV2X2lzYWxpdmUobmV0ZGV2KSkge1xuIDE1MzpcdFx0XHRyZXQgPSAtRU5PREVWO1xuIDE1NDpcdFx0fSBlbHNlIGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiAxNTU6XHRcdFx0LypcbiAxNTY6XHRcdFx0ICogS2VlcCB0aGUgc3lzZnMgQUJJOiByZXBvcnQgYW55IGNhbGxiYWNrIGVycm9yIGFzIC1FSU5WQUxcbiAxNTc6XHRcdFx0ICogaW5zdGVhZCBvZiBwcm9wYWdhdGluZyB0aGUgZHJpdmVyJiMzOTtzIGVycm9yIGNvZGUuXG4gMTU4Olx0XHRcdCAqL1xuIDE1OTpcdFx0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgRnVuY3Rpb25zKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBhbHJlYWR5IGxvb2tlZCBhdCB0aGUgY29yZSBsb2dpYywgYW5kIEkmIzM5O20gZmFpcmx5IGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50IHRoZXJlLiBOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgdGFrZSBhIGdvb2QgaGFyZCBsb29rIGF0IHRoZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyAtIHNwZWNpZmljYWxseSwgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlZ3JhdGUsIHdoYXQgYXNzdW1wdGlvbnMgdGhleSBtYWtlIGFib3V0IHRoZSBkYXRhLCBhbmQgaWYgdGhleSBpbnRyb2R1Y2UgYW55IGVkZ2UtY2FzZSB2dWxuZXJhYmlsaXRpZXMgb3IgaW5lZmZpY2llbmNpZXMgaW50byB0aGUgbGFyZ2VyIHByb2Nlc3MuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgdHlwZXMgdGhleSBoYW5kbGUsIHBvdGVudGlhbCBvdmVyZmxvdyBpc3N1ZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBpZiB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBzaGFyZWQgcmVzb3VyY2VzLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGVpciBpbXBsZW1lbnRhdGlvbiBpbnRyb2R1Y2VzIGFueSBzdWJ0bGUgYnVncyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aGljaCBjb3VsZCBjYXNjYWRlIHVwd2FyZHMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGNvbXBvbmVudHMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXQtc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzc1Olx0XG4gMzc2Olx0XHRydG5sX3VubG9jaygpO1xuIDM3NzpcdFx0cmV0dXJuIHJldDtcbiAzNzg6XHR9XG4gMzc5Olx0c3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpO1xuIDM4MDpcdFxuIDM4MTpcdHN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIDM4MjpcdFx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiAzODM6XHR7XG4gMzg0Olx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4gMzg1Olx0XHRpbnQgcmV0O1xuIDM4NjpcdFxuIDM4NzpcdFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXHUwMDI2Y21kKTtcbiAzODg6XHRcdGlmICghcmV0KVxuIDM4OTpcdFx0XHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpO1xuIDM5MDpcdFxuIDM5MTpcdFx0cmV0dXJuIHJldDtcbiAzOTI6XHR9XG4gMzkzOlx0c3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTtcbiAzOTQ6XHRcbiAzOTU6XHRzdGF0aWMgc3NpemVfdCBkdXBsZXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gMzk2Olx0XHRcdFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiAzOTc6XHR7XG4gMzk4Olx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4gMzk5Olx0XHRjb25zdCBjaGFyICpkdXBsZXg7XG4gNDAwOlx0XHRpbnQgcmV0O1xuIDQwMTpcdFxuIDQwMjpcdFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXHUwMDI2Y21kKTtcbiA0MDM6XHRcdGlmICghcmV0KSB7XG4gNDA0Olx0XHRcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4gNDA1Olx0XHRcdGNhc2UgRFVQTEVYX0hBTEY6XG4gNDA2Olx0XHRcdFx0ZHVwbGV4ID0gXCYjMzQ7aGFsZlwmIzM0OztcbiA0MDc6XHRcdFx0XHRicmVhaztcbiA0MDg6XHRcdFx0Y2FzZSBEVVBMRVhfRlVMTDpcbiA0MDk6XHRcdFx0XHRkdXBsZXggPSBcJiMzNDtmdWxsXCYjMzQ7O1xuIDQxMDpcdFx0XHRcdGJyZWFrO1xuIDQxMTpcdFx0XHRkZWZhdWx0OlxuIDQxMjpcdFx0XHRcdGR1cGxleCA9IFwmIzM0O3Vua25vd25cJiMzNDs7XG4gNDEzOlx0XHRcdFx0YnJlYWs7XG4gNDE0Olx0XHRcdH1cbiA0MTU6XHRcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVzXFxuXCYjMzQ7LCBkdXBsZXgpO1xuIDQxNjpcdFx0fVxuIDQxNzpcdFxuIDQxODpcdFx0cmV0dXJuIHJldDtcbiA0MTk6XHR9XG4gNDIwOlx0c3RhdGljIERFVklDRV9BVFRSX1JPKGR1cGxleCk7XG4gNDIxOlx0XG4gNDIyOlx0c3RhdGljIHNzaXplX3QgdGVzdGluZ19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiA0MjM6XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiA0MjQ6XHR7XG4gNDI1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuIDQyNjpcdFxuIDQyNzpcdFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiA0Mjg6XHRcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCAhIW5ldGlmX3Rlc3RpbmcobmV0ZGV2KSk7XG4gNDI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzAKCQkJCQkJCW91dHB1dDogMjE3CgkJCQkJCQl0aG91Z2h0czogNTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSYjMzk7dmUgYmVlbiBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZXNlIGNoYW5nZXMgYW5kIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBhc3Nlc3NtZW50LgoKRmlyc3QsIEkgc2VlIHRoZSByZWZhY3RvcmluZyB0byBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYC4gSXQgdGFrZXMgYSBgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZGAsIHdoaWNoIGlzIHN0YW5kYXJkLiBJbXBvcnRhbnRseSwgaW4gdGhlIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCBmdW5jdGlvbnMsIGBjbWRgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suIE5vdywgaWYgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZClgIHJldHVybnMgc3VjY2VzcyAoMCksIHdoaWNoIGlzIGtleSwgdGhlbiBgY21kYCBnZXRzIHplcm9lZCBvdXQgKmJlZm9yZSogdGhlIGRyaXZlciBjYWxsYmFjayBwb3B1bGF0ZXMgaXQuIFRoaXMgaXMgaGFuZGxlZCBieSBhIGBtZW1zZXQoKWAgd2l0aGluIHRoZSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKClgIGZ1bmN0aW9uLiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCB0aGVuIHNldHMgYHJldCA9IDBgLiBJZiBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBmYWlscyBmb3IgYW55IHJlYXNvbiAoZGV2aWNlIG5vdCBydW5uaW5nLCBlcnJvciwgZXRjLiksIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybnMgYW4gZXJyb3IgY29kZSwgbGlrZSBgLUVJTlZBTGAgb3IgYC1FTk9ERVZgLgoKVGhlIGltcG9ydGFudCBiaXQgaXMgdGhhdCB0aGUgYGNtZGAgZmllbGRzIChsaWtlIGBjbWQuYmFzZS5zcGVlZGAgYW5kIGBjbWQuYmFzZS5kdXBsZXhgKSBhcmUgKm9ubHkqIGFjY2Vzc2VkIGlmIGByZXQgPT0gMGAgaS5lLiB3aGVuIGl0IHdhcyBhIHN1Y2Nlc3NmdWwgcmV0dXJuIGNvZGUuIEkgYXBwcmVjaWF0ZSB0aGlzIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gRnVydGhlcm1vcmUsIHRoZSBgc3lzZnNfZW1pdGAgZnVuY3Rpb24gYWN0dWFsbHkgZm9ybWF0cyB0aGUgZGF0YSBpbnRvIHN0cmluZ3MvbnVtYmVycyBmb3IgdGhlIHVzZXIgc3BhY2UsIG5vdCBkaXJlY3QgY29waWVzIG9mIGtlcm5lbCBzdHJ1Y3R1cmVzLiBUaGlzIHByZXZlbnRzIGFueSByYXcga2VybmVsIGRhdGEgYmVpbmcgc2VudCBvdXQuCgpDcnVjaWFsbHksIHRoZSBsb2NraW5nIGNoYW5nZXMgYXJlIHVzaW5nIHRoZSBwZXItZGV2aWNlIG9wcyBsb2NrIChgbmV0ZGV2X2xvY2tfb3BzYCkgd2hlcmUgYXBwcm9wcmlhdGUgaW5zdGVhZCBvZiByZWx5aW5nIHNvbGVseSBvbiBSVE5MLiBJJiMzOTttIGNvbWZvcnRhYmxlIHdpdGggdGhpcy4gTE9DS0RFUCBhbmQgdGhlIHN0YW5kYXJkIGNvbmN1cnJlbmN5IGNoZWNrcyBpbiBLQVNBTiBrZXJuZWwgYnVpbGRzIHdpbGwgY2F0Y2ggYW55IGlzc3VlcyBoZXJlLCBhcyBpcyBzdGFuZGFyZCBwcmFjdGljZS4KClRoZXJlZm9yZSwgZ2l2ZW4gYWxsIHRoZXNlIGZhY3RvcnMsIEkgYW0gY2VydGFpbiB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcy4gTm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4KCkluIHN1bW1hcnk6CgoqICAgVGhlIHBhdGNoIGVtcGxveXMgYSBzaGFyZWQgaGVscGVyIGZ1bmN0aW9uIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgZm9yIHJlYWRpbmcgdGhlIGBzcGVlZGAgYW5kIGBkdXBsZXhgIGF0dHJpYnV0ZXMgb2YgdGhlIHN5c2ZzLgoqICAgVGhpcyB1c2VzIHBlci1kZXZpY2UgbG9ja2luZyB3aGVyZSBwb3NzaWJsZSwgcmVkdWNpbmcgdGhlIHJlbGlhbmNlIG9uIFJUTkwuCiogICBUaGUgYGV0aHRvb2xfbGlua19rc2V0dGluZ3NgIHN0cnVjdHVyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLCB3aGljaCBpcyB6ZXJvZWQgd2l0aCBgbWVtc2V0KClgIGJlZm9yZSB0aGUgZHJpdmVyIGNhbGxiYWNrIHBvcHVsYXRlcyBpdC4KKiAgIFRoZSBjb2RlIG9ubHkgYWNjZXNzZXMgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlIGlmIHRoZSByZXR1cm4gY29kZSBpcyBzdWNjZXNzZnVsLgoqICAgVGhlIG91dHB1dCB0byB1c2Vyc3BhY2UgaXMgaGFuZGxlZCBieSB0aGUgYHN5c2ZzX2VtaXQoKWAgZnVuY3Rpb24sIGZvcm1hdHRpbmcgdGhlIGRhdGEgaW5zdGVhZCBvZiByYXcgbWVtb3J5IGNvcGllcy4KKiAgIFN0YW5kYXJkIHRvb2xzIHN1Y2ggYXMgTE9DS0RFUCBhbmQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgcmVmYWN0b3JpbmcgaW50cm9kdWNlZCBpc3N1ZXMgZnJvbSB0aGUgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLgoqICAgVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm9ybWF0aW9uIGxlYWssIGhlbmNlIEtNU0FOIGlzIG5vdCBuZWVkZWQuCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzICYjMzk7c3BlZWQmIzM5OyBhbmQgJiMzOTtkdXBsZXgmIzM5OyBhdHRyaWJ1dGUgcmVhZCBoYW5kbGVycyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uICYjMzk7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCkmIzM5OywgYWxsb3dpbmcgdGhlIHVzZSBvZiBwZXItZGV2aWNlIG9wcyBsb2NraW5nIChuZXRkZXZfbG9ja19vcHMpIGluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IGFjcXVpcmluZyBSVE5MLlxuXG5UaGUgc3RhY2stYWxsb2NhdGVkICYjMzk7c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kJiMzOTsgdmFyaWFibGUgaXMgcGFzc2VkIHRvIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpLCB3aGljaCB6ZXJvZXMgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgd2l0aCBtZW1zZXQoKSBiZWZvcmUgcXVlcnlpbmcgdGhlIGRyaXZlciBjYWxsYmFjay4gVGhlIGZpZWxkcyBjbWQuYmFzZS5zcGVlZCBhbmQgY21kLmJhc2UuZHVwbGV4IGFyZSBhY2Nlc3NlZCBvbmx5IHdoZW4gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCkgcmV0dXJucyBzdWNjZXNzICgwKSwgYW5kIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGludG8gdGV4dCB2aWEgc3lzZnNfZW1pdCgpLiBMb2NraW5nIGFuZCBjb25jdXJyZW5jeSBhc3BlY3RzIG9mIHRoaXMgcGF0Y2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrIHJpc2tzLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHN5c2ZzICYjMzk7c3BlZWQmIzM5OyBhbmQgJiMzOTtkdXBsZXgmIzM5OyBhdHRyaWJ1dGUgcmVhZCBoYW5kbGVycyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uICYjMzk7c3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCkmIzM5OywgYWxsb3dpbmcgdGhlIHVzZSBvZiBwZXItZGV2aWNlIG9wcyBsb2NraW5nIChuZXRkZXZfbG9ja19vcHMpIGluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IGFjcXVpcmluZyBSVE5MLlxuXG5UaGUgc3RhY2stYWxsb2NhdGVkICYjMzk7c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kJiMzOTsgdmFyaWFibGUgaXMgcGFzc2VkIHRvIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpLCB3aGljaCB6ZXJvZXMgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgd2l0aCBtZW1zZXQoKSBiZWZvcmUgcXVlcnlpbmcgdGhlIGRyaXZlciBjYWxsYmFjay4gVGhlIGZpZWxkcyBjbWQuYmFzZS5zcGVlZCBhbmQgY21kLmJhc2UuZHVwbGV4IGFyZSBhY2Nlc3NlZCBvbmx5IHdoZW4gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCkgcmV0dXJucyBzdWNjZXNzICgwKSwgYW5kIHZhbHVlcyBhcmUgZm9ybWF0dGVkIGludG8gdGV4dCB2aWEgc3lzZnNfZW1pdCgpLiBMb2NraW5nIGFuZCBjb25jdXJyZW5jeSBhc3BlY3RzIG9mIHRoaXMgcGF0Y2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrIHJpc2tzLCBzbyBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjA4LjI1NTU4OTgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYxMjY4MjI4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1lTRlNcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGlmX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwic3BlZWRfc2hvd1wiLFxuICAgIFwiZHVwbGV4X3Nob3dcIixcbiAgICBcInN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyAnc3BlZWQnIGFuZCAnZHVwbGV4JyBhdHRyaWJ1dGUgcmVhZCBoYW5kbGVycyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uICdzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKScsIGFsbG93aW5nIHRoZSB1c2Ugb2YgcGVyLWRldmljZSBvcHMgbG9ja2luZyAobmV0ZGV2X2xvY2tfb3BzKSBpbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgUlROTC5cXG5cXG5UaGUgc3RhY2stYWxsb2NhdGVkICdzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQnIHZhcmlhYmxlIGlzIHBhc3NlZCB0byBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKSwgd2hpY2ggemVyb2VzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggbWVtc2V0KCkgYmVmb3JlIHF1ZXJ5aW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBmaWVsZHMgY21kLmJhc2Uuc3BlZWQgYW5kIGNtZC5iYXNlLmR1cGxleCBhcmUgYWNjZXNzZWQgb25seSB3aGVuIHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpIHJldHVybnMgc3VjY2VzcyAoMCksIGFuZCB2YWx1ZXMgYXJlIGZvcm1hdHRlZCBpbnRvIHRleHQgdmlhIHN5c2ZzX2VtaXQoKS4gTG9ja2luZyBhbmQgY29uY3VycmVuY3kgYXNwZWN0cyBvZiB0aGlzIHBhdGNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVhayByaXNrcywgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGxvY2tpbmcgbG9naWMgd2hlbiByZWFkaW5nIHRoZSBuZXR3b3JrIGRldmljZSAnc3BlZWQnIGFuZCAnZHVwbGV4JyBzeXNmcyBhdHRyaWJ1dGVzLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgdGhlIFJUTkwgbG9jaywgaXQgdXNlcyBwZXItZGV2aWNlIG9wcyBsb2NraW5nIChuZXRkZXZfbG9ja19vcHMpIHdoZW4gc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UsIGNoZWNrcyBkZXZfaXNhbGl2ZSwgYW5kIGNhbGxzIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpLiBUaGlzIGFmZmVjdHMgdXNlci1hY2Nlc3NpYmxlIHN5c2ZzIGVuZHBvaW50cyBhbmQgbmV0d29yayBkZXZpY2UgbG9ja2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6MDguMjU1NTk1ODVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTY4MDk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDllMzZmN2E1M2ZkNTg2YTVkYTlhYjJiNDFjZGU0NWFmNDVjMDA5MzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDg6MTM6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xcbmluZGV4IDM1MjE3M2RmNzU3ODUuLjNlMDFlN2YzY2FjNzkgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcXG4rKysgYi9uZXQvY29yZS9uZXQtc3lzZnMuY1xcbkBAIC0xMTgsNiArMTE4LDU1IEBAIHN0YXRpYyBpbnQgc3lzZnNfcnRubF9sb2NrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKlxcbisgKiBVc2UgdGhlIHBlci1kZXZpY2Ugb3BzIGxvY2sgd2l0aG91dCBSVE5MIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyBpdC5cXG4rICogTGVnYWN5IGRldmljZXMgYW5kIGNhbGxiYWNrcyB3aGljaCBleHBsaWNpdGx5IHJlcXVpcmUgUlROTCByZXRhaW4gdGhlXFxuKyAqIGV4aXN0aW5nIGxvY2tpbmcuXFxuKyAqL1xcbitzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcXG4rXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuK1xcdGJvb2wgbmVlZF9ydG5sO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKTsgdGhpcyBoZWxwc1xcbitcXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW5ldGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8XFxuK1xcdFxcdCAgICAobmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2XFxuK1xcdFxcdCAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7XFxuK1xcdGlmIChuZWVkX3J0bmwpIHtcXG4rXFx0XFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWtvYmosIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyLCBuZXRkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xcbitcXG4rXFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0aWYgKCFkZXZfaXNhbGl2ZShuZXRkZXYpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdH0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEtlZXAgdGhlIHN5c2ZzIEFCSTogcmVwb3J0IGFueSBjYWxsYmFjayBlcnJvciBhcyAtRUlOVkFMXFxuK1xcdFxcdCAqIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgdGhlIGRyaXZlcidzIGVycm9yIGNvZGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdG5ldGRldl91bmxvY2tfb3BzKG5ldGRldik7XFxuK1xcdGlmIChuZWVkX3J0bmwpXFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwncyAqL1xcbiBzdGF0aWMgc3NpemVfdCBuZXRkZXZfc2hvdyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXFxuQEAgLTMzMiwyNyArMzgxLDEzIEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTtcXG4gc3RhdGljIHNzaXplX3Qgc3BlZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xcbi1cXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG4tXFxuLVxcdC8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwc1xcbi1cXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIW5ldGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2Vrb2JqLCBcXHUwMDI2YXR0ci1cXHUwMDNlYXR0ciwgbmV0ZGV2KTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbi1cXHRcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuK1xcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFxcdTAwMjZjbWQpO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcXG4gXFxuLVxcdFxcdGlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFxcdTAwMjZjbWQpKVxcbi1cXHRcXHRcXHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpO1xcbi1cXHR9XFxuLVxcdHJ0bmxfdW5sb2NrKCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gc3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTtcXG5AQCAtMzYwLDQxICszOTUsMjYgQEAgc3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTtcXG4gc3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiB7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XFxuLVxcdGludCByZXQgPSAtRUlOVkFMO1xcbi1cXG4tXFx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXFxuLVxcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cXG4tXFx0ICovXFxuLVxcdGlmICghbmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWtvYmosIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyLCBuZXRkZXYpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbi1cXHRcXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XFxuLVxcbi1cXHRcXHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcXHUwMDI2Y21kKSkge1xcbi1cXHRcXHRcXHRjb25zdCBjaGFyICpkdXBsZXg7XFxuK1xcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcXG4rXFx0Y29uc3QgY2hhciAqZHVwbGV4O1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0XFx0XFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcXG4tXFx0XFx0XFx0Y2FzZSBEVVBMRVhfSEFMRjpcXG4tXFx0XFx0XFx0XFx0ZHVwbGV4ID0gXFxcImhhbGZcXFwiO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0Y2FzZSBEVVBMRVhfRlVMTDpcXG4tXFx0XFx0XFx0XFx0ZHVwbGV4ID0gXFxcImZ1bGxcXFwiO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0XFx0ZHVwbGV4ID0gXFxcInVua25vd25cXFwiO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVzXFxcXG5cXFwiLCBkdXBsZXgpO1xcbitcXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcXHUwMDI2Y21kKTtcXG4rXFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcXG4rXFx0XFx0Y2FzZSBEVVBMRVhfSEFMRjpcXG4rXFx0XFx0XFx0ZHVwbGV4ID0gXFxcImhhbGZcXFwiO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBEVVBMRVhfRlVMTDpcXG4rXFx0XFx0XFx0ZHVwbGV4ID0gXFxcImZ1bGxcXFwiO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0ZHVwbGV4ID0gXFxcInVua25vd25cXFwiO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbitcXHRcXHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVzXFxcXG5cXFwiLCBkdXBsZXgpO1xcbiBcXHR9XFxuLVxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhkdXBsZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMzowOC44MDgxMTA2MzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUyMjM4MjExMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNZU0ZTXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcInNwZWVkX3Nob3dcIixcbiAgICBcImR1cGxleF9zaG93XCIsXG4gICAgXCJzeXNmc19nZXRfbGlua19rc2V0dGluZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBsb2NraW5nIGxvZ2ljIHdoZW4gcmVhZGluZyB0aGUgbmV0d29yayBkZXZpY2UgJ3NwZWVkJyBhbmQgJ2R1cGxleCcgc3lzZnMgYXR0cmlidXRlcy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIHRoZSBSVE5MIGxvY2ssIGl0IHVzZXMgcGVyLWRldmljZSBvcHMgbG9ja2luZyAobmV0ZGV2X2xvY2tfb3BzKSB3aGVuIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLCBjaGVja3MgZGV2X2lzYWxpdmUsIGFuZCBjYWxscyBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKS4gVGhpcyBhZmZlY3RzIHVzZXItYWNjZXNzaWJsZSBzeXNmcyBlbmRwb2ludHMgYW5kIG5ldHdvcmsgZGV2aWNlIGxvY2tpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDllMzZmN2E1M2ZkNTg2YTVkYTlhYjJiNDFjZGU0NWFmNDVjMDA5MzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwODoxMzowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcbmluZGV4IDM1MjE3M2RmNzU3ODUuLjNlMDFlN2YzY2FjNzkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXQtc3lzZnMuY1xuKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcbkBAIC0xMTgsNiArMTE4LDU1IEBAIHN0YXRpYyBpbnQgc3lzZnNfcnRubF9sb2NrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLypcbisgKiBVc2UgdGhlIHBlci1kZXZpY2Ugb3BzIGxvY2sgd2l0aG91dCBSVE5MIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyBpdC5cbisgKiBMZWdhY3kgZGV2aWNlcyBhbmQgY2FsbGJhY2tzIHdoaWNoIGV4cGxpY2l0bHkgcmVxdWlyZSBSVE5MIHJldGFpbiB0aGVcbisgKiBleGlzdGluZyBsb2NraW5nLlxuKyAqL1xuK3N0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XG4rXHRpbnQgcmV0ID0gLUVJTlZBTDtcbitcdGJvb2wgbmVlZF9ydG5sO1xuK1xuK1x0LypcbitcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCk7IHRoaXMgaGVscHNcbitcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cbitcdCAqL1xuK1x0aWYgKCFuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKG5ldGRldikgfHxcbitcdFx0ICAgIChuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjZcbitcdFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTKTtcbitcdGlmIChuZWVkX3J0bmwpIHtcbitcdFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFx1MDAyNmRldi1cdTAwM2Vrb2JqLCBcdTAwMjZhdHRyLVx1MDAzZWF0dHIsIG5ldGRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xuK1xuK1x0cmV0ID0gLUVJTlZBTDtcbitcdGlmICghZGV2X2lzYWxpdmUobmV0ZGV2KSkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0fSBlbHNlIGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbitcdFx0LypcbitcdFx0ICogS2VlcCB0aGUgc3lzZnMgQUJJOiByZXBvcnQgYW55IGNhbGxiYWNrIGVycm9yIGFzIC1FSU5WQUxcbitcdFx0ICogaW5zdGVhZCBvZiBwcm9wYWdhdGluZyB0aGUgZHJpdmVyJ3MgZXJyb3IgY29kZS5cbitcdFx0ICovXG4rXHRcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKSlcbitcdFx0XHRyZXQgPSAwO1xuK1x0fVxuK1xuK1x0bmV0ZGV2X3VubG9ja19vcHMobmV0ZGV2KTtcbitcdGlmIChuZWVkX3J0bmwpXG4rXHRcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwncyAqL1xuIHN0YXRpYyBzc2l6ZV90IG5ldGRldl9zaG93KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLFxuQEAgLTMzMiwyNyArMzgxLDEzIEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjYXJyaWVyKTtcbiBzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHQgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbitcdGludCByZXQ7XG4gXG4tXHRyZXQgPSAtRUlOVkFMO1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuLVx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4rXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4gXG4tXHRcdGlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmNtZCkpXG4tXHRcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsIGNtZC5iYXNlLnNwZWVkKTtcbi1cdH1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oc3BlZWQpO1xuQEAgLTM2MCw0MSArMzk1LDI2IEBAIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhzcGVlZCk7XG4gc3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0LyogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzOyB0aGlzIGhlbHBzXG4tXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4tXHQgKi9cbi1cdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IC1FSU5WQUw7XG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4tXHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbi1cbi1cdFx0aWYgKCFfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgXHUwMDI2Y21kKSkge1xuLVx0XHRcdGNvbnN0IGNoYXIgKmR1cGxleDtcbitcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbitcdGNvbnN0IGNoYXIgKmR1cGxleDtcbitcdGludCByZXQ7XG4gXG4tXHRcdFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcbi1cdFx0XHRjYXNlIERVUExFWF9IQUxGOlxuLVx0XHRcdFx0ZHVwbGV4ID0gXCJoYWxmXCI7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHRjYXNlIERVUExFWF9GVUxMOlxuLVx0XHRcdFx0ZHVwbGV4ID0gXCJmdWxsXCI7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHRkZWZhdWx0OlxuLVx0XHRcdFx0ZHVwbGV4ID0gXCJ1bmtub3duXCI7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdFx0cmV0ID0gc3lzZnNfZW1pdChidWYsIFwiJXNcXG5cIiwgZHVwbGV4KTtcbitcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZCk7XG4rXHRpZiAoIXJldCkge1xuK1x0XHRzd2l0Y2ggKGNtZC5iYXNlLmR1cGxleCkge1xuK1x0XHRjYXNlIERVUExFWF9IQUxGOlxuK1x0XHRcdGR1cGxleCA9IFwiaGFsZlwiO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIERVUExFWF9GVUxMOlxuK1x0XHRcdGR1cGxleCA9IFwiZnVsbFwiO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGR1cGxleCA9IFwidW5rbm93blwiO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4rXHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcIiVzXFxuXCIsIGR1cGxleCk7XG4gXHR9XG4tXHRydG5sX3VubG9jaygpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gc3RhdGljIERFVklDRV9BVFRSX1JPKGR1cGxleCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMzowOC44MDgxMTI3MzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTEwODA5MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3lzdGVtIEZpbGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoZSBkaWZmIGlzIHBvaW50aW5nIG1lIHRvIGNoYW5nZXMgaW4gYG5ldC9jb3JlL25ldC1zeXNmcy5jYC4gVGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBtb2RpZmllZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSBkaWZmIGl0c2VsZiDigJMgbG9va2luZyBmb3IgdGhlIG1lYXQgb2YgdGhlIGFsdGVyYXRpb25zLCBvZiBjb3Vyc2UsIG5vdGluZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBsaWtlbHkgaW50ZW50aW9ucy4gVGhlbiwgSSdsbCBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlIGFuZCBuZXQgc3Vic3lzdGVtIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGFjdHMuIEEgYGdyZXBgIG9mIHRoZSBmaWxlLCBvciBtYXliZSBqdXN0IGEgcXVpY2sgcmVhZCwgc2hvdWxkIHBpbnBvaW50IHRoZSBrZXkgbGluZXMgb2YgY29kZSBhbmQgdGhlIHNwZWNpZmljIGFyZWFzIHRvdWNoZWQuIEknbGwgbmVlZCB0byB1c2UgYWxsIG15IHRvb2xzIGFuZCBleHBlcmllbmNlIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB0aGlzOyBvbmx5IHRoZW4gY2FuIEkgYXNzZXNzIHRoZSBxdWFsaXR5IG9mIHRoZXNlIGFsdGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMzoxNS43MTg5MjY4OTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMTMyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmV0LXN5c2ZzLmM9Njk9c3RhdGljIGludCBzeXNmc19ydG5sX2xvY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMjUtICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTI2OnN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMjctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MzgxPXN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzg2LVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjM4NzpcXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcXHUwMDI2Y21kKTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zODgtXFx0aWYgKCFyZXQpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0zOTU9c3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtNDAxLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjQwMjpcXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcXHUwMDI2Y21kKTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy00MDMtXFx0aWYgKCFyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6MTUuODU5MDY0MzU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAxMjg2OTY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNwZWNpZmllZCBzZWN0aW9ucyBvZiBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLCBmb2N1c2luZyBvbiB0aGUgY29yZSBpZGVhcyBmcm9tIGFuIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBuZXQtc3lzZnMuYzogQSBUYXJnZXRlZCBTY2FuKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiBgbmV0LXN5c2ZzLmNgLCBzcGVjaWZpY2FsbHkgdGhvc2Ugc2VjdGlvbnMgYXJvdW5kIGxpbmVzIDExMC0xODAgYW5kIDM4MC00MjAuIEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBsYXJnZXIgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgaW50ZXJmYWNlLiBGcm9tIHRoZSBsaW5lIG51bWJlcnMgYWxvbmUsIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBibG9ja3MgZGVhbCB3aXRoIHRoZSBjcml0aWNhbCBkZXRhaWxzIG9mIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgbmV0d29yayBkZXZpY2UgaW5mb3JtYXRpb24gYW5kIGNvbnRyb2wgcGFyYW1ldGVycyB2aWEgc3lzZnMuXG5cbk15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IGxpbmVzIDExMC0xODAgYXJlIGxpa2VseSBpbnZvbHZlZCBpbiBjcmVhdGluZyBvciBoYW5kbGluZyB0aGUgYXR0cmlidXRlcyBhbmQgZmlsZXMgd2l0aGluIHRoZSBgL3N5cy9jbGFzcy9uZXQvYCBkaXJlY3RvcnkgZm9yIGVhY2ggbmV0d29yayBpbnRlcmZhY2UuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lY2hhbmlzbXMgYnkgd2hpY2ggYXR0cmlidXRlcywgbGlrZSBgb3BlcnN0YXRlYCwgYGNhcnJpZXJgLCBgYWRkcmVzc2AgYW5kIG1hbnkgbW9yZSwgYXJlIGRlZmluZWQsIGNyZWF0ZWQsIGFuZCB1cGRhdGVkLiBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgbWFuYWdpbmcgdGhvc2UuXG5cblRoZSBzZWNvbmQgc2VjdGlvbiwgYXJvdW5kIGxpbmVzIDM4MC00MjAsIGlzIGxpa2VseSB0byBiZSBjZW50ZXJlZCBhcm91bmQgY3JlYXRpbmcsIGRlc3Ryb3lpbmcsIG9yIGNvbmZpZ3VyaW5nIHNwZWNpZmljIGF0dHJpYnV0ZXMgcmVsYXRpbmcgdG8gbmV0d29yayBkZXZpY2VzIHRoYXQgYXJlIHJlcHJlc2VudGVkIGluIGBzeXNmc2AuIFBlcmhhcHMgdGhpcyBtaWdodCBpbnZvbHZlIHJlZ2lzdGVyaW5nIG9yIHVucmVnaXN0ZXJpbmcgc3BlY2lmaWMgZGF0YSBlbGVtZW50cywgZGVmaW5pbmcgcGVybWlzc2lvbnMgb24gYXR0cmlidXRlcywgb3IgdXBkYXRpbmcgdGhlaXIgdmFsdWVzIGFzIHRoZSBkZXZpY2UgY2hhbmdlcyBzdGF0ZS4gSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgc2VjdGlvbiBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjay4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSB1c2VzIG9mIGBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkYCwgYHN5c2ZzX2NyZWF0ZV9maWxlYCwgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBzaWduYWwgZHluYW1pYyBhdHRyaWJ1dGUgY3JlYXRpb24uIEkgYWxzbyB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGVycm9yIGhhbmRsaW5nIHJvdXRpbmVzLiBJJ20gZXhwZWN0aW5nIGEgbG90IG9mIGludGVyYWN0aW9uIHdpdGggdGhlIGNvcmUgYGtvYmplY3RgIGluZnJhc3RydWN0dXJlIGFuZCB0aGUgYHN0cnVjdCBhdHRyaWJ1dGVgIGRlZmluaXRpb25zIHVzZWQgZm9yIHN5c2ZzLiBJJ20gaG9waW5nIHRvIGJlIGFibGUgdG8gbWFwIHRoZXNlIGZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcyB0byBzcGVjaWZpYyBmZWF0dXJlcyBvciBjb250cm9sIHBvaW50cyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEl0IHNob3VsZCBiZSBhIGdvb2QgZGVlcC1kaXZlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDk5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6MTkuODcxOTM4MjA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldC1zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXHRzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTtcXG4gMTE2OlxcdFxcdGRldl9wdXQobmRldik7XFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdHJldHVybiByZXQ7XFxuIDExOTpcXHR9XFxuIDEyMDpcXHRcXG4gMTIxOlxcdC8qXFxuIDEyMjpcXHQgKiBVc2UgdGhlIHBlci1kZXZpY2Ugb3BzIGxvY2sgd2l0aG91dCBSVE5MIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyBpdC5cXG4gMTIzOlxcdCAqIExlZ2FjeSBkZXZpY2VzIGFuZCBjYWxsYmFja3Mgd2hpY2ggZXhwbGljaXRseSByZXF1aXJlIFJUTkwgcmV0YWluIHRoZVxcbiAxMjQ6XFx0ICogZXhpc3RpbmcgbG9ja2luZy5cXG4gMTI1OlxcdCAqL1xcbiAxMjY6XFx0c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxcbiAxMjc6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiAxMjg6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuIDEyOTpcXHR7XFxuIDEzMDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xcbiAxMzE6XFx0XFx0aW50IHJldCA9IC1FSU5WQUw7XFxuIDEzMjpcXHRcXHRib29sIG5lZWRfcnRubDtcXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0LypcXG4gMTM1OlxcdFxcdCAqIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCk7IHRoaXMgaGVscHNcXG4gMTM2OlxcdFxcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cXG4gMTM3OlxcdFxcdCAqL1xcbiAxMzg6XFx0XFx0aWYgKCFuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXFxuIDEzOTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSB8fFxcbiAxNDI6XFx0XFx0XFx0ICAgIChuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjZcXG4gMTQzOlxcdFxcdFxcdCAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7XFxuIDE0NDpcXHRcXHRpZiAobmVlZF9ydG5sKSB7XFxuIDE0NTpcXHRcXHRcXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXFx1MDAyNmRldi1cXHUwMDNla29iaiwgXFx1MDAyNmF0dHItXFx1MDAzZWF0dHIsIG5ldGRldik7XFxuIDE0NjpcXHRcXHRcXHRpZiAocmV0KVxcbiAxNDc6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTQ4OlxcdFxcdH1cXG4gMTQ5OlxcdFxcdG5ldGRldl9sb2NrX29wcyhuZXRkZXYpO1xcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiAxNTI6XFx0XFx0aWYgKCFkZXZfaXNhbGl2ZShuZXRkZXYpKSB7XFxuIDE1MzpcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbiAxNTQ6XFx0XFx0fSBlbHNlIGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcXG4gMTU1OlxcdFxcdFxcdC8qXFxuIDE1NjpcXHRcXHRcXHQgKiBLZWVwIHRoZSBzeXNmcyBBQkk6IHJlcG9ydCBhbnkgY2FsbGJhY2sgZXJyb3IgYXMgLUVJTlZBTFxcbiAxNTc6XFx0XFx0XFx0ICogaW5zdGVhZCBvZiBwcm9wYWdhdGluZyB0aGUgZHJpdmVyJ3MgZXJyb3IgY29kZS5cXG4gMTU4OlxcdFxcdFxcdCAqL1xcbiAxNTk6XFx0XFx0XFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxcbiAxNjA6XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4gMTYxOlxcdFxcdH1cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0bmV0ZGV2X3VubG9ja19vcHMobmV0ZGV2KTtcXG4gMTY0OlxcdFxcdGlmIChuZWVkX3J0bmwpXFxuIDE2NTpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNjg6XFx0fVxcbiAxNjk6XFx0XFxuIDE3MDpcXHQvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwncyAqL1xcbiAxNzE6XFx0c3RhdGljIHNzaXplX3QgbmV0ZGV2X3Nob3coY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LFxcbiAxNzI6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZixcXG4gMTczOlxcdFxcdFxcdFxcdCAgIHNzaXplX3QgKCpmb3JtYXQpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICosIGNoYXIgKikpXFxuIDE3NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjE5Ljg3MjE0Mjk0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjU4NTk3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEtlcm5lbCBNb2R1bGUgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGVuYWJsaW5nIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AuIFRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBidWlsZC10aW1lIGRlcGVuZGVuY2llcy4gVGhhdCBtZWFucyBkaWdnaW5nIGludG8gdGhlIGJ1aWxkIHN5c3RlbSDigJMgdGhlIGBNYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcyB0aGF0IGNvbnRyb2wgd2hhdCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYE1ha2VmaWxlYCBpbiB0aGF0IGRpcmVjdG9yeSBpdHNlbGY7IHRoYXQnbGwgcHJvYmFibHkgaGF2ZSB0aGUgaW5jbHVkZSBkaXJlY3RpdmVzLCBvciBhdCBsZWFzdCBwb2ludCBtZSB0b3dhcmQgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBvcHRpb25zLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiwgc2VlIHdoYXQncyB1bHRpbWF0ZWx5IHB1bGxpbmcgdGhhdCBtb2R1bGUgaW50byB0aGUgYnVpbGQuIFNob3VsZCBiZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgcHJvY2VzcywgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ghIEtub3dpbmcgdGhlIGRlcGVuZGVuY3kgdHJlZSBsaWtlIHRoaXMgaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgdHJvdWJsZXNob290aW5nIGJ1aWxkIGlzc3VlcyBvciBjb25mbGljdHMgZG93biB0aGUgcm9hZC4gQWxyaWdodCwgbGV0J3MgZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjIyLjIzODAwNTY1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEzNDc4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0LXN5c2ZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0xOD1vYmotJChDT05GSUdfTkVUREVWX0FERFJfTElTVF9URVNUKSArPSBkZXZfYWRkcl9saXN0c190ZXN0Lm9cXG5uZXQvY29yZS9NYWtlZmlsZS0xOS1cXG5uZXQvY29yZS9NYWtlZmlsZToyMDpvYmoteSArPSBuZXQtc3lzZnMub1xcbm5ldC9jb3JlL01ha2VmaWxlLTIxLW9iai15ICs9IGhvdGRhdGEub1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTY4LSNpbmNsdWRlIFxcXCJkZXZtZW0uaFxcXCJcXG5uZXQvY29yZS9kZXYuYzoxNjk6I2luY2x1ZGUgXFxcIm5ldC1zeXNmcy5oXFxcIlxcbm5ldC9jb3JlL2Rldi5jLTE3MC1cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTItLypcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozOiAqIG5ldC1zeXNmcy5jIC0gbmV0d29yayBkZXZpY2UgY2xhc3MgYW5kIGF0dHJpYnV0ZXNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy00LSAqXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0zMC0jaW5jbHVkZSBcXFwiZGV2LmhcXFwiXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MzE6I2luY2x1ZGUgXFxcIm5ldC1zeXNmcy5oXFxcIlxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTMyLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtOTctI2luY2x1ZGUgXFxcImRldm1lbS5oXFxcIlxcbm5ldC9jb3JlL3NrYnVmZi5jOjk4OiNpbmNsdWRlIFxcXCJuZXQtc3lzZnMuaFxcXCJcXG5uZXQvY29yZS9za2J1ZmYuYy05OS0jaW5jbHVkZSBcXFwibmV0bWVtX3ByaXYuaFxcXCJcXG4tLVxcbm5ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jLTMxLSNpbmNsdWRlIFxcXCJkZXYuaFxcXCJcXG5uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYzozMjojaW5jbHVkZSBcXFwibmV0LXN5c2ZzLmhcXFwiXFxubmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMtMzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjIyLjM5OTM1OTUwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2OTcwMzIxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBuZXQtc3lzZnMuYyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldC9jb3JlL25ldC1zeXNmcy5jYCBhcmUgc3ViamVjdCB0byBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLiBFeHBlcmllbmNlIHRlbGxzIG1lIHRoYXQncyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCBgI2lmZGVmYCBibG9ja3Mgb3Igb3RoZXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBnYXRlIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3Igb2YgdGhvc2UgZnVuY3Rpb25zLiBJ4oCZbGwgc3RhcnQgdGhlcmUgYW5kIHNjYW4gZm9yIGFueSBpbnN0YW5jZXMgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB3cmFwcGVkIHdpdGhpbiBjb25kaXRpb25hbCBibG9ja3MuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBhbnN3ZXIgYWJvdXQgd2hldGhlciB0aGVpciBhdmFpbGFiaWxpdHkgaXMgZGVwZW5kZW50IG9uIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBidWlsZCBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTc2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6MjkuMDk2Mzk1ODMyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXQtc3lzZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIG5ldC1zeXNmcy5jIC0gbmV0d29yayBkZXZpY2UgY2xhc3MgYW5kIGF0dHJpYnV0ZXNcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMDMgU3RlcGhlbiBIZW1taW5nZXIgXFx1MDAzY3NoZW1taW5nZXJAb3NkbC5vcmdcXHUwMDNlXFxuICAgNjpcXHQgKi9cXG4gICA3OlxcdFxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NhcGFiaWxpdHkuaFxcdTAwM2VcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9hcnAuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbnNwcm94eS5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICAyMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvamlmZmllcy5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFxcdTAwM2VcXG4gIDIzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAgMjQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX25ldC5oXFx1MDAzZVxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdS5oXFx1MDAzZVxcbiAgMjY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXFx1MDAzZVxcbiAgMjc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfcnhfcXVldWUuaFxcdTAwM2VcXG4gIDI4OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvcnBzLmhcXHUwMDNlXFxuICAyOTpcXHRcXG4gIDMwOlxcdCNpbmNsdWRlIFxcXCJkZXYuaFxcXCJcXG4gIDMxOlxcdCNpbmNsdWRlIFxcXCJuZXQtc3lzZnMuaFxcXCJcXG4gIDMyOlxcdFxcbiAgMzM6XFx0I2lmZGVmIENPTkZJR19TWVNGU1xcbiAgMzQ6XFx0c3RhdGljIGNvbnN0IGNoYXIgZm10X2hleFtdID0gXFxcIiUjeFxcXFxuXFxcIjtcXG4gIDM1OlxcdHN0YXRpYyBjb25zdCBjaGFyIGZtdF9kZWNbXSA9IFxcXCIlZFxcXFxuXFxcIjtcXG4gIDM2OlxcdHN0YXRpYyBjb25zdCBjaGFyIGZtdF91aW50W10gPSBcXFwiJXVcXFxcblxcXCI7XFxuICAzNzpcXHRzdGF0aWMgY29uc3QgY2hhciBmbXRfdWxvbmdbXSA9IFxcXCIlbHVcXFxcblxcXCI7XFxuICAzODpcXHRzdGF0aWMgY29uc3QgY2hhciBmbXRfdTY0W10gPSBcXFwiJWxsdVxcXFxuXFxcIjtcXG4gIDM5OlxcdFxcbiAgNDA6XFx0LyogVGhlcmUgaXMgYSBwb3NzaWJsZSBBQkJBIGRlYWRsb2NrIGJldHdlZW4gcnRubF9sb2NrIGFuZCBrZXJuZnNfbm9kZS1cXHUwMDNlYWN0aXZlLFxcbiAgNDE6XFx0ICogd2hlbiB1bnJlZ2lzdGVyaW5nIGEgbmV0IGRldmljZSBhbmQgYWNjZXNzaW5nIGFzc29jaWF0ZWQgc3lzZnMgZmlsZXMuIFRoZVxcbiAgNDI6XFx0ICogcG90ZW50aWFsIGRlYWRsb2NrIGlzIGFzIGZvbGxvdzpcXG4gIDQzOlxcdCAqXFxuICA0NDpcXHQgKiAgICAgICAgIENQVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFUgMVxcbiAgNDU6XFx0ICpcXG4gIDQ2OlxcdCAqICAgIHJ0bmxfbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmZzX3JlYWRcXG4gIDQ3OlxcdCAqICAgIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkgICAgICAgICAgICAgICAgICAga2VybmZzX3NlcV9zdGFydFxcbiAgNDg6XFx0ICogICAgZGV2aWNlX2RlbCAvIGtvYmplY3RfcHV0ICAgICAgICAgICAgICAgICAgICAgIGtlcm5mc19nZXRfYWN0aXZlIChrbi1cXHUwMDNlYWN0aXZlKyspXFxuICA0OTpcXHQgKiAgICBrZXJuZnNfZHJhaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2ZzX2tmX3NlcV9zaG93XFxuICA1MDpcXHQgKiAgICB3YWl0X2V2ZW50KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0bmxfbG9ja1xcbiAgNTE6XFx0ICogICAgICAga24tXFx1MDAzZWFjdGl2ZSA9PSBLTl9ERUFDVElWQVRFRF9CSUFTKSAgICAgICAtXFx1MDAzZSB3YWl0cyBvbiBDUFUgMCB0byByZWxlYXNlXFxuICA1MjpcXHQgKiAgICAtXFx1MDAzZSB3YWl0cyBvbiBDUFUgMSB0byBkZWNyZWFzZSBrbi1cXHUwMDNlYWN0aXZlICAgICAgIHRoZSBydG5sIGxvY2suXFxuICA1MzpcXHQgKlxcbiAgNTQ6XFx0ICogVGhlIGhpc3RvcmljYWwgZml4IHdhcyB0byB1c2UgcnRubF90cnlsb2NrIHdpdGggcmVzdGFydF9zeXNjYWxsIHRvIGJhaWwgb3V0XFxuICA1NTpcXHQgKiBvZiBzeXNmcyBvcGVyYXRpb25zIHdoZW4gdGhlIGxvY2sgY291bGRuJ3QgYmUgdGFrZW4uIFRoaXMgZml4ZWQgdGhlIGFib3ZlXFxuICA1NjpcXHQgKiBpc3N1ZSBhcyBpdCBhbGxvd2VkIENQVSAxIHRvIGJhaWwgb3V0IG9mIHRoZSBBQkJBIHNpdHVhdGlvbi5cXG4gIDU3OlxcdCAqXFxuICA1ODpcXHQgKiBCdXQgaXQgY2FtZSB3aXRoIHBlcmZvcm1hbmNlcyBpc3N1ZXMsIGFzIHN5c2NhbGxzIGFyZSBiZWluZyByZXN0YXJ0ZWQgaW5cXG4gIDU5OlxcdCAqIGxvb3BzIHdoZW4gdGhlcmUgd2FzIGNvbnRlbnRpb24gb24gdGhlIHJ0bmwgbG9jaywgd2l0aCBodWdlIHNsb3cgZG93bnMgaW5cXG4gIDYwOlxcdCAqIHNwZWNpZmljIHNjZW5hcmlvcyAoZS5nLiBsb3RzIG9mIHZpcnR1YWwgaW50ZXJmYWNlcyBjcmVhdGVkIGFuZCB1c2Vyc3BhY2VcXG4gIDYxOlxcdCAqIGRhZW1vbnMgcXVlcnlpbmcgdGhlaXIgYXR0cmlidXRlcykuXFxuICA2MjpcXHQgKlxcbiAgNjM6XFx0ICogVGhlIGlkZWEgYmVsb3cgaXMgdG8gYmFpbCBvdXQgb2YgdGhlIGFjdGl2ZSBrZXJuZnNfbm9kZSBwcm90ZWN0aW9uXFxuICA2NDpcXHQgKiAoa24tXFx1MDAzZWFjdGl2ZSkgd2hpbGUgdHJ5aW5nIHRvIHRha2UgdGhlIHJ0bmwgbG9jay5cXG4gIDY1OlxcdCAqXFxuICA2NjpcXHQgKiBUaGlzIHJlcGxhY2VzIHJ0bmxfbG9jaygpIGFuZCBzdGlsbCBoYXMgdG8gYmUgdXNlZCB3aXRoIHJ0bmxfdW5sb2NrKCkuIFRoZVxcbiAgNjc6XFx0ICogbmV0IGRldmljZSBpcyBndWFyYW50ZWVkIHRvIGJlIGFsaXZlIGlmIHRoaXMgcmV0dXJucyBzdWNjZXNzZnVsbHkuXFxuICA2ODpcXHQgKi9cXG4gIDY5OlxcdHN0YXRpYyBpbnQgc3lzZnNfcnRubF9sb2NrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLFxcbiAgNzA6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuICA3MTpcXHR7XFxuICA3MjpcXHRcXHRzdHJ1Y3Qga2VybmZzX25vZGUgKmtuO1xcbiAgNzM6XFx0XFx0aW50IHJldCA9IDA7XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdC8qIEZpcnN0LCB3ZSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXQgZGV2aWNlIGFzIHRoZSB1bnJlZ2lzdHJhdGlvblxcbiAgNzY6XFx0XFx0ICogcGF0aCBtaWdodCBydW4gaW4gcGFyYWxsZWwuIFRoaXMgd2lsbCBlbnN1cmUgdGhlIG5ldCBkZXZpY2UgYW5kIHRoZVxcbiAgNzc6XFx0XFx0ICogYXNzb2NpYXRlZCBzeXNmcyBvYmplY3RzIHdvbid0IGJlIGZyZWVkIHdoaWxlIHdlIHRyeSB0byB0YWtlIHRoZSBydG5sXFxuICA3ODpcXHRcXHQgKiBsb2NrLlxcbiAgNzk6XFx0XFx0ICovXFxuICA4MDpcXHRcXHRkZXZfaG9sZChuZGV2KTtcXG4gIDgxOlxcdFxcdC8qIHN5c2ZzX2JyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uIHdhcyBpbnRyb2R1Y2VkIHRvIGFsbG93IHNlbGYtcmVtb3ZhbCBvZlxcbiAgODI6XFx0XFx0ICogZGV2aWNlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBzeXNmcyBmaWxlcyBieSBiYWlsaW5nIG91dCBvZiB0aGVcXG4gIDgzOlxcdFxcdCAqIHN5c2ZzL2tlcm5mcyBwcm90ZWN0aW9uLiBXZSBkbyB0aGlzIGhlcmUgdG8gYWxsb3cgdGhlIHVucmVnaXN0cmF0aW9uXFxuICA4NDpcXHRcXHQgKiBwYXRoIHRvIGNvbXBsZXRlIGluIHBhcmFsbGVsLiBUaGUgZm9sbG93aW5nIHRha2VzIGEgcmVmZXJlbmNlIG9uIHRoZVxcbiAgODU6XFx0XFx0ICoga29iamVjdCBhbmQgdGhlIGtlcm5mc19ub2RlIGJlaW5nIGFjY2Vzc2VkLlxcbiAgODY6XFx0XFx0ICpcXG4gIDg3OlxcdFxcdCAqIFRoaXMgd29ya3MgYmVjYXVzZSB3ZSBob2xkIGEgcmVmZXJlbmNlIG9udG8gdGhlIG5ldCBkZXZpY2UgYW5kIHRoZVxcbiAgODg6XFx0XFx0ICogdW5yZWdpc3RyYXRpb24gcGF0aCB3aWxsIHdhaXQgZm9yIHVzIGV2ZW50dWFsbHkgaW4gbmV0ZGV2X3J1bl90b2RvXFxuICA4OTpcXHRcXHQgKiAob3V0c2lkZSBhbiBydG5sIGxvY2sgc2VjdGlvbikuXFxuICA5MDpcXHRcXHQgKi9cXG4gIDkxOlxcdFxcdGtuID0gc3lzZnNfYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa29iaiwgYXR0cik7XFxuICA5MjpcXHRcXHQvKiBXZSBjYW4gbm93IHRyeSB0byB0YWtlIHRoZSBydG5sIGxvY2suIFRoaXMgY2FuJ3QgZGVhZGxvY2sgdXMgYXMgdGhlXFxuICA5MzpcXHRcXHQgKiB1bnJlZ2lzdHJhdGlvbiBwYXRoIGlzIGFibGUgdG8gZHJhaW4gc3lzZnMgZmlsZXMgKGtlcm5mc19ub2RlKSB0aGFua3NcXG4gIDk0OlxcdFxcdCAqIHRvIHRoZSBhYm92ZSBkYW5jZS5cXG4gIDk1OlxcdFxcdCAqL1xcbiAgOTY6XFx0XFx0aWYgKHJ0bmxfbG9ja19pbnRlcnJ1cHRpYmxlKCkpIHtcXG4gIDk3OlxcdFxcdFxcdHJldCA9IC1FUkVTVEFSVFNZUztcXG4gIDk4OlxcdFxcdFxcdGdvdG8gdW5icmVhaztcXG4gIDk5OlxcdFxcdH1cXG4gMTAwOlxcdFxcdC8qIENoZWNrIGRpc21hbnRsZSBvbiB0aGUgZGV2aWNlIGhhc24ndCBzdGFydGVkLCBvdGhlcndpc2UgZGVueSB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6MjkuMDk2NjY5ODYyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NTg3Mzc3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBmdW5jdGlvbiBhY3R1YWxseSAqZG9lcyouIEknbSB0aGlua2luZywgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZT8gSSdsbCBwcm9iYWJseSBuZWVkIHRvIHRyYWNlIGl0cyBkZWNsYXJhdGlvbiB0byBmaWd1cmUgb3V0IGl0cyBwcm90b3R5cGUgYW5kLCBjcnVjaWFsbHksIHVuZGVyc3RhbmQgd2hpY2ggZGF0YSBzdHJ1Y3R1cmVzIGl0IG9wZXJhdGVzIG9uLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgYXJndW1lbnRzIGl0IHRha2VzIGFuZCB3aGF0IGl0IHJldHVybnMsIGFuZCBsaWtlbHkgZGl2ZSBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLiBLbm93aW5nIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbmV0d29yayBzdGFjayBpcyBrZXkuIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjMwLjg1NTQwOTg3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyOTU0NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGlmX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfaWYuYz0zNj1zdGF0aWMgaW50IHBvcnRfY29zdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jLTM5LVxcbm5ldC9icmlkZ2UvYnJfaWYuYzo0MDpcXHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZlY21kKSkge1xcbm5ldC9icmlkZ2UvYnJfaWYuYy00MS1cXHRcXHRzd2l0Y2ggKGVjbWQuYmFzZS5zcGVlZCkge1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTI2PXN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNC1cXHQvKlxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzNTpcXHQgKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpOyB0aGlzIGhlbHBzXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM2LVxcdCAqIHJldHVybmluZyBlYXJseSB3aXRob3V0IGhpdHRpbmcgdGhlIGxvY2tpbmcgc2VjdGlvbiBiZWxvdy5cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE1OC1cXHRcXHQgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxNTk6XFx0XFx0aWYgKCFuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBjbWQpKVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE2MC1cXHRcXHRcXHRyZXQgPSAwO1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz00Mjk9c3RydWN0IGV0aHRvb2xfbGlua191c2V0dGluZ3Mge1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00MzgtLyogSW50ZXJuYWwga2VybmVsIGhlbHBlciB0byBxdWVyeSBhIGRldmljZSBldGh0b29sX2xpbmtfc2V0dGluZ3MuICovXFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0Mzk6aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDQwLVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NTItfVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6NDUzOkVYUE9SVF9TWU1CT0wobmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ1NC1cXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9NDU2PWludCBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTQ2My1cXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjQ2NDpcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy00NjUtXFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmM9MjQ9c3RhdGljIGludCBsaW5raW5mb19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMzYtXFx0XFx0cmV0dXJuIHJldDtcXG5uZXQvZXRodG9vbC9saW5raW5mby5jOjM3OlxcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZkYXRhLVxcdTAwM2Vrc2V0dGluZ3MpO1xcbm5ldC9ldGh0b29sL2xpbmtpbmZvLmMtMzgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvZXRodG9vbC9saW5raW5mby5jPTk4PWV0aG5sX3NldF9saW5raW5mbyhzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbGlua2luZm8uYy0xMDYtXFxubmV0L2V0aHRvb2wvbGlua2luZm8uYzoxMDc6XFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXFx1MDAyNmtzZXR0aW5ncyk7XFxubmV0L2V0aHRvb2wvbGlua2luZm8uYy0xMDgtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jPTI4PXN0YXRpYyBpbnQgbGlua21vZGVzX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxcbi0tXFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmMtNDEtXFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM6NDI6XFx0cmV0ID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXFx1MDAyNmRhdGEtXFx1MDAzZWtzZXR0aW5ncyk7XFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmMtNDMtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jPTMxOT1ldGhubF9zZXRfbGlua21vZGVzKHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9saW5rbW9kZXMuYy0zMjYtXFxubmV0L2V0aHRvb2wvbGlua21vZGVzLmM6MzI3OlxcdHJldCA9IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIFxcdTAwMjZrc2V0dGluZ3MpO1xcbm5ldC9ldGh0b29sL2xpbmttb2Rlcy5jLTMyOC1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9jYnMuYz0zMjM9c3RhdGljIHZvaWQgY2JzX3NldF9wb3J0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNic19zY2hlZF9kYXRhICpxKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYnMuYy0zMjktXFxubmV0L3NjaGVkL3NjaF9jYnMuYzozMzA6XFx0ZXJyID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXFx1MDAyNmVjbWQpO1xcbm5ldC9zY2hlZC9zY2hfY2JzLmMtMzMxLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0xMjk0PXN0YXRpYyB2b2lkIHRhcHJpb19zZXRfcGljb3NfcGVyX2J5dGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMwMi1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjEzMDM6XFx0ZXJyID0gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgXFx1MDAyNmVjbWQpO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTMwNC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6MzEuMDM4MzcyMzE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMzQxMTQyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgRGV2aWNlIFN5c2ZzIEF0dHJpYnV0ZXMgYW5kIExvY2tpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRoZSBgc3BlZWRgIGFuZCBgZHVwbGV4YCBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgYC9zeXMvY2xhc3MvbmV0L1x1MDAzY2lmbmFtZVx1MDAzZS9gIGhpZXJhcmNoeSBpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYG5ldC9jb3JlL25ldC1zeXNmcy5jYC4gSXQgc2VlbXMgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBQcmV2aW91c2x5LCByZXRyaWV2aW5nIHRoZSBsaW5rIHNldHRpbmdzIGZvciB0aGVzZSBhdHRyaWJ1dGVzIGFsd2F5cyBpbnZvbHZlZCBhY3F1aXJpbmcgdGhlIGBydG5sX2xvY2tgIGFuZCB0aGVuIGNhbGxpbmcgYF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3NgLiBOb3csIHRoZSBjb2RlIHVzZXMgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AgaW5zdGVhZC5cblxuVGhpcyBuZXcgZnVuY3Rpb24gaW50cm9kdWNlcyBhIG1vcmUgbnVhbmNlZCBsb2NraW5nIHN0cmF0ZWd5LiBJbnN0ZWFkIG9mIGFsd2F5cyBncmFiYmluZyB0aGUgYHJ0bmxfbG9ja2AsIGl0IG5vdyB1c2VzIHRoZSBwZXItZGV2aWNlIG9wZXJhdGlvbnMgbG9jaywgYG5ldGRldl9sb2NrX29wcyhuZXRkZXYpYCwgd2hlbiB0aGUgbmV0d29yayBkZXZpY2Ugc3VwcG9ydHMgaXQuIFRoZSBgcnRubF9sb2NrYCBpcyBvbmx5IHJldGFpbmVkIGlmIHRoZSBkZXZpY2UgKm5lZWRzKiBpdCwgZGV0ZXJtaW5lZCBieSBgbmV0ZGV2X25lZWRfb3BzX2xvY2tgIGFuZCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HU2AuIEFkZGl0aW9uYWxseSwgYSBjaGVjayBmb3IgYGRldl9pc2FsaXZlKG5ldGRldilgIGlzIG5vdyBwcmVzZW50LCBhbmQgYG5ldGlmX3J1bm5pbmcobmV0ZGV2KWAgaXMgY2hlY2tlZCBiZWZvcmUgdGhlIGNhbGwgdG8gYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZClgLlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGUgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50PyBBYnNvbHV0ZWx5LiBBbnkgdXNlcnNwYWNlIHByb2Nlc3MgY2FuIHJlYWQgdGhlc2Ugc3lzZnMgYXR0cmlidXRlcywgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuIFRoaW5rIHN0YW5kYXJkIHN5c2ZzIHJlYWRzLCBvciB0aGUgd2F5IHN5emthbGxlciBvcGVyYXRlcywgb3IgZXZlbiBjb25jdXJyZW50IG1hbmlwdWxhdGlvbiBvZiBpbnRlcmZhY2VzIHdpdGggc3lzZnMgcmVhZHMuIEFuZCB0aGUgbmV0d29yayBpbnRlcmZhY2VzIHRoZW1zZWx2ZXMgKGR1bW15LCB2ZXRoLCBsb29wYmFjaywgZXRjLikgYXJlIHJlYWRpbHkgYXZhaWxhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRS5cblxuU28sIHRoaXMgY2hhbmdlIGhhcyBzaWduaWZpY2FudCBjb25jdXJyZW5jeSBpbXBsaWNhdGlvbnMuIEl0IGNoYW5nZXMgdGhlIGxvY2tpbmcgcnVsZXMgZm9yIHN5c2ZzIHF1ZXJpZXMsIGZhdm9yaW5nIGBuZXRkZXZfbG9ja19vcHNgIHdoZXJlIHBvc3NpYmxlLCBidXQgcHJlc2VydmluZyBSVE5MIGxvY2tpbmcgd2hlcmUgbmVjZXNzYXJ5LCBhbmQgYWRkaW5nIHRoZSBgZGV2X2lzYWxpdmVgIGNoZWNrLiBUaGlzIGhhcyBtZSB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gbmV0ZGV2aWNlIGxpZmVjeWNsZSwgdGhlIHBlci1kZXZpY2UgbG9jaywgc3lzZnMgYWNjZXNzLCBhbmQgdGhlIFJUTkwgbG9jay4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlc2UgbG9ja2luZyBpbnRlcmFjdGlvbnMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AgYXJlIGluZGVlZCB0aGUgc3RhdGljIGZ1bmN0aW9ucyBJIHRoaW5rIHRoZXkgYXJlIGFuZCBob3cgdGhleSBhcmUgcmVmZXJlbmNlZCBpbiB0aGUgYGRldmljZV9hdHRyaWJ1dGVgIHN0cnVjdHVyZXMuIEknbGwgbmVlZCB0byBwb3JlIG92ZXIgYG5ldC9jb3JlL25ldC1zeXNmcy5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMzozNy4xNzI0ODk1MDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldC1zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4MDpcXHRcXG4gMzgxOlxcdHN0YXRpYyBzc2l6ZV90IHNwZWVkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiAzODI6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiAzODM6XFx0e1xcbiAzODQ6XFx0XFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xcbiAzODU6XFx0XFx0aW50IHJldDtcXG4gMzg2OlxcdFxcbiAzODc6XFx0XFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXFx1MDAyNmNtZCk7XFxuIDM4ODpcXHRcXHRpZiAoIXJldClcXG4gMzg5OlxcdFxcdFxcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XFxuIDM5MDpcXHRcXG4gMzkxOlxcdFxcdHJldHVybiByZXQ7XFxuIDM5MjpcXHR9XFxuIDM5MzpcXHRzdGF0aWMgREVWSUNFX0FUVFJfUk8oc3BlZWQpO1xcbiAzOTQ6XFx0XFxuIDM5NTpcXHRzdGF0aWMgc3NpemVfdCBkdXBsZXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIDM5NjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiAzOTc6XFx0e1xcbiAzOTg6XFx0XFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xcbiAzOTk6XFx0XFx0Y29uc3QgY2hhciAqZHVwbGV4O1xcbiA0MDA6XFx0XFx0aW50IHJldDtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXFx1MDAyNmNtZCk7XFxuIDQwMzpcXHRcXHRpZiAoIXJldCkge1xcbiA0MDQ6XFx0XFx0XFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcXG4gNDA1OlxcdFxcdFxcdGNhc2UgRFVQTEVYX0hBTEY6XFxuIDQwNjpcXHRcXHRcXHRcXHRkdXBsZXggPSBcXFwiaGFsZlxcXCI7XFxuIDQwNzpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDA4OlxcdFxcdFxcdGNhc2UgRFVQTEVYX0ZVTEw6XFxuIDQwOTpcXHRcXHRcXHRcXHRkdXBsZXggPSBcXFwiZnVsbFxcXCI7XFxuIDQxMDpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDExOlxcdFxcdFxcdGRlZmF1bHQ6XFxuIDQxMjpcXHRcXHRcXHRcXHRkdXBsZXggPSBcXFwidW5rbm93blxcXCI7XFxuIDQxMzpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDE0OlxcdFxcdFxcdH1cXG4gNDE1OlxcdFxcdFxcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsIGR1cGxleCk7XFxuIDQxNjpcXHRcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdFxcdHJldHVybiByZXQ7XFxuIDQxOTpcXHR9XFxuIDQyMDpcXHRzdGF0aWMgREVWSUNFX0FUVFJfUk8oZHVwbGV4KTtcXG4gNDIxOlxcdFxcbiA0MjI6XFx0c3RhdGljIHNzaXplX3QgdGVzdGluZ19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gNDIzOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbiA0MjQ6XFx0e1xcbiA0MjU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcXG4gNDI2OlxcdFxcbiA0Mjc6XFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4gNDI4OlxcdFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgISFuZXRpZl90ZXN0aW5nKG5ldGRldikpO1xcbiA0Mjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjM3LjE3Mjc1MzcyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzY1MDcyMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQ29yZSBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxhbmRzY2FwZSBvZiBzeW1ib2xzIHdpdGhpbiBgbmV0L2NvcmUvbmV0LXN5c2ZzLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIHN5bWJvbHMgZGVmaW5lZCB3aXRoaW4gdGhhdCBmaWxlIGl0c2VsZi4gTW9yZSBicm9hZGx5LCB0aG91Z2gsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgc3ltYm9scyBhcmUgKmV4cG9ydGVkKiBvciAqZGVmaW5lZCogd2l0aGluIHRoYXQgc3BlY2lmaWMgZmlsZSBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byBpdC4gRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gbWFwIG91dCB0aGUgY29ubmVjdGlvbnMgYW5kIHNjb3BlIG9mIHdoYXQncyBnb2luZyBvbiBpbiB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIFRoaXMgaXMgbGlrZWx5IHRoZSBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlIG9yIGJ1ZyB3aXRoaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDI3LCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxMzozOS45Mzc4MjkyNTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTc0NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfc2hvd3xuZXRpZl9nZXRfbGlua19rc2V0dGluZ3N8bmV0ZGV2X2xvY2tfb3BzfHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MTEwMT1fX25ldGRldl9wdXRfbG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvY29yZS9kZXYuYy0xMTAyLXtcXG5uZXQvY29yZS9kZXYuYzoxMTAzOlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMTA0LVxcdGlmIChkZXYtXFx1MDAzZXJlZ19zdGF0ZSBcXHUwMDNlIE5FVFJFR19SRUdJU1RFUkVEIHx8XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xODQ4PXZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTE4NTktXFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikge1xcbm5ldC9jb3JlL2Rldi5jOjE4NjA6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XFxubmV0L2NvcmUvZGV2LmMtMTg2MS1cXHRcXHRuZXRpZl9kaXNhYmxlX2xybyhsb3dlcl9kZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTkzND1zdGF0aWMgdm9pZCBjYWxsX25ldGRldmljZV91bnJlZ2lzdGVyX25vdGlmaWVycyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTkzNy1cXHRpZiAoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkge1xcbm5ldC9jb3JlL2Rldi5jOjE5Mzg6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTkzOS1cXHRcXHRjYWxsX25ldGRldmljZV9ub3RpZmllcihuYiwgTkVUREVWX0dPSU5HX0RPV04sXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xOTQ3PXN0YXRpYyBpbnQgY2FsbF9uZXRkZXZpY2VfcmVnaXN0ZXJfbmV0X25vdGlmaWVycyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTk1My1cXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG5uZXQvY29yZS9kZXYuYzoxOTU0OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTE5NTUtXFx0XFx0ZXJyID0gY2FsbF9uZXRkZXZpY2VfcmVnaXN0ZXJfbm90aWZpZXJzKG5iLCBkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTA2MTE9c3RhdGljIHZvaWQgYnBmX3hkcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA2MjAtXFx0aWYgKHhkcF9saW5rLVxcdTAwM2VkZXYpIHtcXG5uZXQvY29yZS9kZXYuYzoxMDYyMTpcXHRcXHRuZXRkZXZfbG9ja19vcHMoeGRwX2xpbmstXFx1MDAzZWRldik7XFxubmV0L2NvcmUvZGV2LmMtMTA2MjItXFx0XFx0V0FSTl9PTihkZXZfeGRwX2RldGFjaF9saW5rKHhkcF9saW5rLVxcdTAwM2VkZXYsIE5VTEwsIHhkcF9saW5rKSk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDY3Mj1zdGF0aWMgaW50IGJwZl94ZHBfbGlua191cGRhdGUoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA3MDQtXFxubmV0L2NvcmUvZGV2LmM6MTA3MDU6XFx0bmV0ZGV2X2xvY2tfb3BzKHhkcF9saW5rLVxcdTAwM2VkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTEwNzA2LVxcdG1vZGUgPSBkZXZfeGRwX21vZGUoeGRwX2xpbmstXFx1MDAzZWRldiwgeGRwX2xpbmstXFx1MDAzZWZsYWdzKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwNzMxPWludCBicGZfeGRwX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDc2My1cXG5uZXQvY29yZS9kZXYuYzoxMDc2NDpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMDc2NS1cXHRlcnIgPSBkZXZfeGRwX2F0dGFjaF9saW5rKGRldiwgXFx1MDAyNmV4dGFjaywgbGluayk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDkyNT1zdGF0aWMgdm9pZCBuZXRkZXZfc3luY19sb3dlcl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDkzNi1cXHRcXHRcXHRcXHQgICBcXHUwMDI2ZmVhdHVyZSwgbG93ZXItXFx1MDAzZW5hbWUpO1xcbm5ldC9jb3JlL2Rldi5jOjEwOTM3OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhsb3dlcik7XFxubmV0L2NvcmUvZGV2LmMtMTA5MzgtXFx0XFx0XFx0bG93ZXItXFx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcXHUwMDI2PSB+ZmVhdHVyZTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTExNTExLVxcbm5ldC9jb3JlL2Rldi5jOjExNTEyOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTExNTEzLVxcdF9fbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTE1MzktXFx0LyogTm90aWZ5IHByb3RvY29scywgdGhhdCBhIG5ldyBkZXZpY2UgYXBwZWFyZWQuICovXFxubmV0L2NvcmUvZGV2LmM6MTE1NDA6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTE1NDEtXFx0cmV0ID0gY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9SRUdJU1RFUiwgZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyNDQxPXZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueV9ub3RpZnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEyNTAzLVxcdFxcdC8qIFNodXRkb3duIHF1ZXVlaW5nIGRpc2NpcGxpbmUuICovXFxubmV0L2NvcmUvZGV2LmM6MTI1MDQ6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTI1MDUtXFx0XFx0ZGV2X3NodXRkb3duKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjcwMj1pbnQgX19kZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTI3ODYtXFxubmV0L2NvcmUvZGV2LmM6MTI3ODc6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTI3ODgtXFx0LyogSWYgZGV2aWNlIGlzIHJ1bm5pbmcgY2xvc2UgaXQgZmlyc3QuICovXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjgwMC1cXHQvKiBTaHV0ZG93biBxdWV1ZWluZyBkaXNjaXBsaW5lLiAqL1xcbm5ldC9jb3JlL2Rldi5jOjEyODAxOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTEyODAyLVxcdGRldl9zaHV0ZG93bihkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2Lmg9NjA9REVGSU5FX0ZSRUUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0LCBzdHJ1Y3QgbmV0X2RldmljZSAqLFxcbi0tXFxubmV0L2NvcmUvZGV2LmgtNjItXFxubmV0L2NvcmUvZGV2Lmg6NjM6I2RlZmluZSBmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIHZhcl9uYW1lLCBpZmluZGV4KVxcdFxcXFxcXG5uZXQvY29yZS9kZXYuaC02NC1cXHRmb3IgKHN0cnVjdCBuZXRfZGV2aWNlICp2YXJfbmFtZSBfX2ZyZWUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KSA9IE5VTEw7IFxcXFxcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0xOD1pbnQgZGV2X2NoYW5nZV9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5ld25hbWUpXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMjEtXFxubmV0L2NvcmUvZGV2X2FwaS5jOjIyOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMy1cXHRyZXQgPSBuZXRpZl9jaGFuZ2VfbmFtZShkZXYsIG5ld25hbWUpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTM5PWludCBkZXZfc2V0X2FsaWFzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmFsaWFzLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTQyLVxcbm5ldC9jb3JlL2Rldl9hcGkuYzo0MzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtNDQtXFx0cmV0ID0gbmV0aWZfc2V0X2FsaWFzKGRldiwgYWxpYXMsIGxlbik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9NjI9aW50IGRldl9jaGFuZ2VfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGZsYWdzLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTY2LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzo2NzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtNjgtXFx0cmV0ID0gbmV0aWZfY2hhbmdlX2ZsYWdzKGRldiwgZmxhZ3MsIGV4dGFjayk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9ODE9dm9pZCBkZXZfc2V0X2dyb3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfZ3JvdXApXFxubmV0L2NvcmUvZGV2X2FwaS5jLTgyLXtcXG5uZXQvY29yZS9kZXZfYXBpLmM6ODM6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTg0LVxcdG5ldGlmX3NldF9ncm91cChkZXYsIG5ld19ncm91cCk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9ODg9aW50IGRldl9zZXRfbWFjX2FkZHJlc3NfdXNlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTk0LVxcdGRvd25fd3JpdGUoXFx1MDAyNmRldl9hZGRyX3NlbSk7XFxubmV0L2NvcmUvZGV2X2FwaS5jOjk1OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy05Ni1cXHRyZXQgPSBuZXRpZl9zZXRfbWFjX2FkZHJlc3MoZGV2LCBzcywgZXh0YWNrKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0xMzU9aW50IGRldl9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTEzOC1cXG5uZXQvY29yZS9kZXZfYXBpLmM6MTM5OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0xNDAtXFx0cmV0ID0gbmV0aWZfY2hhbmdlX2NhcnJpZXIoZGV2LCBuZXdfY2Fycmllcik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MTUzPWludCBkZXZfY2hhbmdlX3R4X3F1ZXVlX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG5ld19sZW4pXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMTU2LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzoxNTc6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTE1OC1cXHRyZXQgPSBuZXRpZl9jaGFuZ2VfdHhfcXVldWVfbGVuKGRldiwgbmV3X2xlbik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MTcxPWludCBkZXZfY2hhbmdlX3Byb3RvX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBwcm90b19kb3duKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTE3NC1cXG5uZXQvY29yZS9kZXZfYXBpLmM6MTc1OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0xNzYtXFx0cmV0ID0gbmV0aWZfY2hhbmdlX3Byb3RvX2Rvd24oZGV2LCBwcm90b19kb3duKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0xOTc9aW50IGRldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMDAtXFxubmV0L2NvcmUvZGV2X2FwaS5jOjIwMTpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjAyLVxcdHJldCA9IG5ldGlmX29wZW4oZGV2LCBleHRhY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTIxOD12b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMTkte1xcbm5ldC9jb3JlL2Rldl9hcGkuYzoyMjA6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTIyMS1cXHRuZXRpZl9jbG9zZShkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTIyNj1pbnQgZGV2X2V0aF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTIzNC1cXG5uZXQvY29yZS9kZXZfYXBpLmM6MjM1OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yMzYtXFx0aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MjQ0PWludCBkZXZfc2V0X210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNDctXFxubmV0L2NvcmUvZGV2X2FwaS5jOjI0ODpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjQ5LVxcdHJldCA9IG5ldGlmX3NldF9tdHUoZGV2LCBuZXdfbXR1KTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0yNjQ9dm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjY1LXtcXG5uZXQvY29yZS9kZXZfYXBpLmM6MjY2OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNjctXFx0bmV0aWZfZGlzYWJsZV9scm8oZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0yODM9aW50IGRldl9zZXRfcHJvbWlzY3VpdHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluYylcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yODYtXFxubmV0L2NvcmUvZGV2X2FwaS5jOjI4NzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjg4LVxcdHJldCA9IG5ldGlmX3NldF9wcm9taXNjdWl0eShkZXYsIGluYyk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmM9MzEwPWludCBkZXZfc2V0X2FsbG11bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMpXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMzEzLVxcbm5ldC9jb3JlL2Rldl9hcGkuYzozMTQ6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTMxNS1cXHRyZXQgPSBuZXRpZl9zZXRfYWxsbXVsdGkoZGV2LCBpbmMsIHRydWUpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jPTMzMz1pbnQgZGV2X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc3MsXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMzM3LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzozMzg6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTMzOS1cXHRyZXQgPSBuZXRpZl9zZXRfbWFjX2FkZHJlc3MoZGV2LCBzcywgZXh0YWNrKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0zNDY9aW50IGRldl94ZHBfcHJvcGFnYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICpicGYpXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMzQ5LVxcbm5ldC9jb3JlL2Rldl9hcGkuYzozNTA6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2FwaS5jLTM1MS1cXHRyZXQgPSBuZXRpZl94ZHBfcHJvcGFnYXRlKGRldiwgYnBmKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0zNjY9dm9pZCBuZXRkZXZfc3RhdGVfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FwaS5jLTM2Ny17XFxubmV0L2NvcmUvZGV2X2FwaS5jOjM2ODpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMzY5LVxcdG5ldGlmX3N0YXRlX2NoYW5nZShkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9MjgyPXN0YXRpYyBpbnQgZGV2X2dldF9od3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTI5NS1cXHRrZXJuZWxfY2ZnLmlmciA9IGlmcjtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYzoyOTY6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtMjk3LVxcdGVyciA9IGRldl9nZXRfaHd0c3RhbXBfcGh5bGliKGRldiwgXFx1MDAyNmtlcm5lbF9jZmcpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9MzkxPXN0YXRpYyBpbnQgZGV2X3NldF9od3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQyMS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo0MjI6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDIzLVxcdGVyciA9IGRldl9zZXRfaHd0c3RhbXBfcGh5bGliKGRldiwgXFx1MDAyNmtlcm5lbF9jZmcsIFxcdTAwMjZleHRhY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NDQxPWludCBnZW5lcmljX2h3dHN0YW1wX2dldF9sb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDUyLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjQ1MzpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00NTQtXFx0ZXJyID0gZGV2X2dldF9od3RzdGFtcF9waHlsaWIoZGV2LCBrZXJuZWxfY2ZnKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTQ2MT1pbnQgZ2VuZXJpY19od3RzdGFtcF9zZXRfbG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTQ3My1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo0NzQ6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDc1LVxcdGVyciA9IGRldl9zZXRfaHd0c3RhbXBfcGh5bGliKGRldiwga2VybmVsX2NmZywgZXh0YWNrKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTQ4Mj1zdGF0aWMgaW50IGRldl9zaW9jYm9uZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNDg5LVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjQ5MDpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy00OTEtXFx0XFx0aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz01MDE9c3RhdGljIGludCBkZXZfc2lvY2RldnByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MDgtXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NTA5OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTUxMC1cXHRcXHRpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTUyMD1zdGF0aWMgaW50IGRldl9zaW9jd2FuZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZl9zZXR0aW5ncyAqaWZzKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTI2LVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjUyNzpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01MjgtXFx0XFx0aWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYz01NDE9c3RhdGljIGludCBkZXZfaWZzaW9jKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICpkYXRhLFxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTc2LVxcdFxcdFxcdCAgIChzaXplX3QpZGV2LVxcdTAwM2VhZGRyX2xlbikpO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU3NzpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01NzgtXFx0XFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9DSEFOR0VBRERSLCBkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTgyLVxcdGNhc2UgU0lPQ1NJRk1BUDpcXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo1ODM6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTg0LVxcdFxcdGVyciA9IG5ldGlmX3NldGlmbWFwKGRldiwgaWZyKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU5My1cXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo1OTQ6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNTk1LVxcdFxcdGVyciA9IGRldl9tY19hZGRfZ2xvYmFsKGRldiwgaWZyLVxcdTAwM2VpZnJfaHdhZGRyLnNhX2RhdGEpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNjA1LVxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjYwNjpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy02MDctXFx0XFx0ZXJyID0gZGV2X21jX2RlbF9nbG9iYWwoZGV2LCBpZnItXFx1MDAzZWlmcl9od2FkZHIuc2FfZGF0YSk7XFxuLS1cXG5uZXQvY29yZS9mYWlsb3Zlci5jPTIxNj1mYWlsb3Zlcl9leGlzdGluZ19zbGF2ZV9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZmFpbG92ZXJfZGV2KVxcbi0tXFxubmV0L2NvcmUvZmFpbG92ZXIuYy0yMjUtXFx0XFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwoZmFpbG92ZXJfZGV2LVxcdTAwM2VwZXJtX2FkZHIsIGRldi1cXHUwMDNlcGVybV9hZGRyKSkge1xcbm5ldC9jb3JlL2ZhaWxvdmVyLmM6MjI2OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2ZhaWxvdmVyLmMtMjI3LVxcdFxcdFxcdGZhaWxvdmVyX3NsYXZlX3JlZ2lzdGVyKGRldik7XFxuLS1cXG5uZXQvY29yZS9saW5rX3dhdGNoLmM9MTkwPXN0YXRpYyB2b2lkIF9fbGlua3dhdGNoX3J1bl9xdWV1ZShpbnQgdXJnZW50X29ubHkpXFxuLS1cXG5uZXQvY29yZS9saW5rX3dhdGNoLmMtMjM4LVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bHdldmVudGxpc3RfbG9jayk7XFxubmV0L2NvcmUvbGlua193YXRjaC5jOjIzOTpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9saW5rX3dhdGNoLmMtMjQwLVxcdFxcdGxpbmt3YXRjaF9kb19kZXYoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYz0yOTE9dm9pZCBsaW5rd2F0Y2hfc3luY19kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYy0yOTMtXFx0aWYgKGxpbmt3YXRjaF9jbGVhbl9kZXYoZGV2KSkge1xcbm5ldC9jb3JlL2xpbmtfd2F0Y2guYzoyOTQ6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvbGlua193YXRjaC5jLTI5NS1cXHRcXHRsaW5rd2F0Y2hfZG9fZGV2KGRldik7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz02OT1zdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyNS0gKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMjY6c3RhdGljIGludCBzeXNmc19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IGRldmljZSAqZGV2LFxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEyNy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzQtXFx0LypcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzU6XFx0ICogVGhlIGNoZWNrIGlzIGFsc28gZG9uZSBpbiBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKTsgdGhpcyBoZWxwc1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNi1cXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNDgtXFx0fVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE0OTpcXHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTAtXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTgtXFx0XFx0ICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTU5OlxcdFxcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKSlcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNjAtXFx0XFx0XFx0cmV0ID0gMDtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE3MC0vKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRiogaW9jdGwncyAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE3MTpzdGF0aWMgc3NpemVfdCBuZXRkZXZfc2hvdyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTcyLVxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xOTI9c3RhdGljIHNzaXplX3QgZmllbGQjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xOTQte1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxOTU6XFx0cmV0dXJuIG5ldGRldl9zaG93KGRldiwgYXR0ciwgYnVmLCBmb3JtYXRfIyNmaWVsZCk7XFx0XFx0XFxcXFxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTE5Ni19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9Mjg4PXN0YXRpYyBzc2l6ZV90IG5hbWVfYXNzaWduX3R5cGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yOTUtXFx0aWYgKFJFQURfT05DRShuZGV2LVxcdTAwM2VuYW1lX2Fzc2lnbl90eXBlKSAhPSBORVRfTkFNRV9VTktOT1dOKVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjI5NjpcXHRcXHRyZXQgPSBuZXRkZXZfc2hvdyhkZXYsIGF0dHIsIGJ1ZiwgZm9ybWF0X25hbWVfYXNzaWduX3R5cGUpO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTI5Ny1cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTM4MT1zdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTM4Ni1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozODc6XFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXFx1MDAyNmNtZCk7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzg4LVxcdGlmICghcmV0KVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9Mzk1PXN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTQwMS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo0MDI6XFx0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXFx1MDAyNmNtZCk7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtNDAzLVxcdGlmICghcmV0KSB7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xNDgxPXN0YXRpYyBzc2l6ZV90IHR4X21heHJhdGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xNTA2LVxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjE1MDc6XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTUwOC1cXHRpZiAoZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0X3R4X21heHJhdGUpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMTU5PXN0YXRpYyB2b2lkIHJlbW92ZV9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE3MC1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTcxOlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNzItXFx0ZGV2LVxcdTAwM2VyZWFsX251bV9yeF9xdWV1ZXMgPSAwO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz02MTg9aW50IG5ldGRldl9ubF9xdWV1ZV9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNjM4LVxcdH0gZWxzZSB7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzo2Mzk6XFx0XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy02NDAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz05MDE9aW50IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05MzgtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzo5Mzk6XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtOTQwLVxcdFxcdGVyciA9IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBfb25lKG5ldGRldiwgc2NvcGUsIHNrYixcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9MTQ3Mj1zdGF0aWMgaW50IG5ldGRldl9nZW5sX25ldGRldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xNDc4LVxcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MTQ3OTpcXHRcXHRuZXRkZXZfbG9ja19vcHNfdG9fZnVsbChuZXRkZXYpO1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTQ4MC1cXHRcXHRuZXRkZXZfZ2VubF9kZXZfbm90aWZ5KG5ldGRldiwgTkVUREVWX0NNRF9ERVZfQUREX05URik7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTEzMD1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTU0LVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTU1OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTU2LVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0zMDM3PXN0YXRpYyBpbnQgZG9fc2V0X21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWZpbmRleCxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMwNTUtXFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fZGVsX3NsYXZlKHVwcGVyX2RldiwgZGV2KTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzozMDU2OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMwNTctXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMwNzEtXFx0XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fYWRkX3NsYXZlKHVwcGVyX2RldiwgZGV2LCBleHRhY2spO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjMwNzI6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzA3My1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MzE0ND1zdGF0aWMgaW50IGRvX3NldGxpbmsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTMxNzUtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MzE3NjpcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zMTc3LVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzIxMy1cXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZkZXZfYWRkcl9zZW0pO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjMyMTQ6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzIxNS1cXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTM3MTA9aW50IHJ0bmxfY29uZmlndXJlX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGlmaW5mb21zZyAqaWZtLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMzcxNS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzozNzE2OlxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM3MTctXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0zOTI4PXN0YXRpYyBpbnQgcnRubF9uZXdsaW5rX2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWZpbmZvbXNnICppZm0sXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0zOTgwLVxcdGlmICh0YltJRkxBX01BU1RFUl0pIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzozOTgxOlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTM5ODItXFx0XFx0ZXJyID0gZG9fc2V0X21hc3RlcihkZXYsIG5sYV9nZXRfdTMyKHRiW0lGTEFfTUFTVEVSXSksIGV4dGFjayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjQwLjA2MzU4MzE5N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzczMDM5MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIFN5c3RlbSBDb25maWd1cmF0aW9uIGZvciBOZXR3b3JrIGFuZCBTeXNmcyBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYG5ldC1zeXNmcy5jYC4gSSBrbm93IGl0J3MgY29tcGlsZWQgYXMgcGFydCBvZiB0aGUgYG5ldC9jb3JlYCBkaXJlY3Rvcnkgd2hlbiB0aGUgbmV0d29yayBzdGFjayBpcyBhY3RpdmUsIGFuZCBJIGJlbGlldmUgaXQgbGV2ZXJhZ2VzIHRoZSBgI2lmZGVmIENPTkZJR19TWVNGU2AgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2l0aGluIHRoZSBjb2RlLiBTbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJvdGggYENPTkZJR19ORVRgIGFuZCBgQ09ORklHX1NZU0ZTYCBhcmUgcHJvcGVybHkgZGVmaW5lZCBhbmQgZW5hYmxlZC4gVGltZSB0byB2ZXJpZnkgdGhhdCB0aG9zZSBzZXR0aW5ncyBhcmUgY29ycmVjdGx5IGRvY3VtZW50ZWQgYW5kIHNldCB1cCBpbiBLY29uZmlnLiBUaGlzIHdpbGwgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAzNiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjQzLjgzNjYyNTg1N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMDIwMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXQtc3lzZnMuYy0zMi1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzozMzojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMzQtc3RhdGljIGNvbnN0IGNoYXIgZm10X2hleFtdID0gXFxcIiUjeFxcXFxuXFxcIjtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTkyMD1zdGF0aWMgYm9vbCB3aXJlbGVzc19ncm91cF9uZWVkZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MzItXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTMzOiNlbHNlIC8qIENPTkZJR19TWVNGUyAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTkzNC0jZGVmaW5lIG5ldF9jbGFzc19ncm91cHNcXHROVUxMXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTM1OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MzYtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6OTM3OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy05MzgtI2RlZmluZSB0b19yeF9xdWV1ZV9hdHRyKF9hdHRyKSBcXFxcXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0xMjkwPXN0YXRpYyBpbnQgcnhfcXVldWVfY2hhbmdlX293bmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmRleCwga3VpZF90IGt1aWQsXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzA2LX1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzA3OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzA4LVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTMxMD1uZXRfcnhfcXVldWVfdXBkYXRlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvbGRfbnVtLCBpbnQgbmV3X251bSlcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzExLXtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoxMzEyOiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0xMzEzLVxcdGludCBpO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MTM0Nj1zdGF0aWMgaW50IG5ldF9yeF9xdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bSxcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNDgte1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjEzNDk6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNTAtXFx0aW50IGVycm9yID0gMDtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTEzNjgtXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MTM2OTojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMTM3MC0vKlxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjAyMj1zdGF0aWMgaW50IHR4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IGluZGV4LFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzNy19XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjAzODojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjAzOS1cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIwNDE9bmV0ZGV2X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2xkX251bSwgaW50IG5ld19udW0pXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA0Mi17XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA0MzojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA0NC1cXHRpbnQgaTtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIwNzctXFx0cmV0dXJuIDA7XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA3ODojZW5kaWYgLyogQ09ORklHX1NZU0ZTICovXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA3OS19XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYz0yMDgxPXN0YXRpYyBpbnQgbmV0X3R4X3F1ZXVlX2NoYW5nZV9vd25lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA4My17XFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjA4NDojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA4NS1cXHRpbnQgZXJyb3IgPSAwO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjA5Ni1cXHRyZXR1cm4gMDtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMDk3OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMDk4LX1cXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxMDA9c3RhdGljIGludCByZWdpc3Rlcl9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEwMy1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTA0OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTA1LVxcdGRldi1cXHUwMDNlcXVldWVzX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKFxcXCJxdWV1ZXNcXFwiLFxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEyNy1cXHRuZXRfcnhfcXVldWVfdXBkYXRlX2tvYmplY3RzKGRldiwgcnhxLCAwKTtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMTI4OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTI5LVxcdGtzZXRfdW5yZWdpc3RlcihkZXYtXFx1MDAzZXF1ZXVlc19rc2V0KTtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxMzQ9c3RhdGljIGludCBxdWV1ZV9jaGFuZ2Vfb3duZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGt1aWRfdCBrdWlkLCBrZ2lkX3Qga2dpZClcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxMzctXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6MjEzODojaWZkZWYgQ09ORklHX1NZU0ZTXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjEzOS1cXHRpZiAobmRldi1cXHUwMDNlcXVldWVzX2tzZXQpIHtcXG4tLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jPTIxNTk9c3RhdGljIHZvaWQgcmVtb3ZlX3F1ZXVlX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMTYyLVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNjM6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNjQtXFx0cmVhbF9yeCA9IGRldi1cXHUwMDNlcmVhbF9udW1fcnhfcXVldWVzO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtMjE3NC1cXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIxNzU6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIxNzYtXFx0a3NldF91bnJlZ2lzdGVyKGRldi1cXHUwMDNlcXVldWVzX2tzZXQpO1xcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9MjMzMj1pbnQgbmV0ZGV2X3JlZ2lzdGVyX2tvYmplY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzQ0LVxcbm5ldC9jb3JlL25ldC1zeXNmcy5jOjIzNDU6I2lmZGVmIENPTkZJR19TWVNGU1xcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTIzNDYtXFx0LyogQWxsb3cgZm9yIGEgZGV2aWNlIHNwZWNpZmljIGdyb3VwICovXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzU0LVxcdFxcdCpncm91cHMrKyA9IFxcdTAwMjZ3aXJlbGVzc19ncm91cDtcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzoyMzU1OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi9cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy0yMzU2LVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbm5ldC9jb3JlL25ldC1zeXNmcy5oOjI6I2lmbmRlZiBfX05FVF9TWVNGU19IX19cXG5uZXQvY29yZS9uZXQtc3lzZnMuaDozOiNkZWZpbmUgX19ORVRfU1lTRlNfSF9fXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmgtNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6NDMuOTM2NjUzNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzEwNzY0NTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZXBlbmRlbmN5IENoZWNrIGluIGBuZXQvS2NvbmZpZ2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhcnRpY3VsYXIgY29tcG9uZW50IG9yIGZlYXR1cmUuIE15IHVzdWFsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCwgaW1wb3J0YW50bHksIHRoZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyB0aGF0IHdpbGwgcmV2ZWFsIHRoZSBwcmVyZXF1aXNpdGVzIGZvciB0aGlzIHRoaW5nIHRvIGJlIGVuYWJsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgbW9kdWxlcyBvciBzZXR0aW5ncyB0aGlzIGRlcGVuZHMgb24gdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHN0YXJ0IHBhcnNpbmcgdGhhdCBmaWxlLiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTExOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjQ3LjA0NDMwMDY4OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBOZXR3b3JrIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBORVRcXG4gICA3OlxcdFxcdGJvb2wgXFxcIk5ldHdvcmtpbmcgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBOTEFUVFJcXG4gICA5OlxcdFxcdHNlbGVjdCBHRU5FUklDX05FVF9VVElMU1xcbiAgMTA6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBVbmxlc3MgeW91IHJlYWxseSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgeW91IHNob3VsZCBzYXkgWSBoZXJlLlxcbiAgMTM6XFx0XFx0ICBUaGUgcmVhc29uIGlzIHRoYXQgc29tZSBwcm9ncmFtcyBuZWVkIGtlcm5lbCBuZXR3b3JraW5nIHN1cHBvcnQgZXZlblxcbiAgMTQ6XFx0XFx0ICB3aGVuIHJ1bm5pbmcgb24gYSBzdGFuZC1hbG9uZSBtYWNoaW5lIHRoYXQgaXNuJ3QgY29ubmVjdGVkIHRvIGFueVxcbiAgMTU6XFx0XFx0ICBvdGhlciBjb21wdXRlci5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBJZiB5b3UgYXJlIHVwZ3JhZGluZyBmcm9tIGFuIG9sZGVyIGtlcm5lbCwgeW91XFxuICAxODpcXHRcXHQgIHNob3VsZCBjb25zaWRlciB1cGRhdGluZyB5b3VyIG5ldHdvcmtpbmcgdG9vbHMgdG9vIGJlY2F1c2UgY2hhbmdlc1xcbiAgMTk6XFx0XFx0ICBpbiB0aGUga2VybmVsIGFuZCB0aGUgdG9vbHMgb2Z0ZW4gZ28gaGFuZCBpbiBoYW5kLiBUaGUgdG9vbHMgYXJlXFxuICAyMDpcXHRcXHQgIGNvbnRhaW5lZCBpbiB0aGUgcGFja2FnZSBuZXQtdG9vbHMsIHRoZSBsb2NhdGlvbiBhbmQgdmVyc2lvbiBudW1iZXJcXG4gIDIxOlxcdFxcdCAgb2Ygd2hpY2ggYXJlIGdpdmVuIGluIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlc1xcdTAwM2UuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgRm9yIGEgZ2VuZXJhbCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgaXQgaXMgaGlnaGx5XFxuICAyNDpcXHRcXHQgIHJlY29tbWVuZGVkIHRvIHJlYWQgdGhlIE5FVC1IT1dUTywgYXZhaWxhYmxlIGZyb21cXG4gIDI1OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXFx1MDAzZS5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0aWYgTkVUXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTXFxuICAzMDpcXHRcXHRib29sXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGNhbiBiZSBzZWxlY3RlZCBieSBvdGhlciBvcHRpb25zIHRoYXQgbmVlZCBjb21wYXRcXG4gIDMzOlxcdFxcdCAgbmV0bGluayBtZXNzYWdlcy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIENPTVBBVF9ORVRMSU5LX01FU1NBR0VTXFxuICAzNjpcXHRcXHRkZWZfYm9vbCB5XFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIENPTVBBVFxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBXRVhUX0NPUkUgfHwgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFU1xcbiAgMzk6XFx0XFx0aGVscFxcbiAgNDA6XFx0XFx0ICBUaGlzIG9wdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSB0byBzZW5kIGRpZmZlcmVudCBuZXRsaW5rIG1lc3NhZ2VzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjQ3LjA0NDM3ODg0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDg4MzI1NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBIdW50aW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBDT05GSUdfU1lTRlNgIG9wdGlvbiBpcyBkZWZpbmVkIGluIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSByZWxldmFudCBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBgZnMvc3lzZnMvS2NvbmZpZ2AuIEl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlLiBJZiB0aGF0IGRvZXNuJ3QgcGFuIG91dCwgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIG5leHQgbG9naWNhbCBwbGFjZSB0byBjaGVjay4gSXQncyBwbGF1c2libGUgdGhhdCBpdCdzIGEgbW9yZSBmdW5kYW1lbnRhbCBvciBnZW5lcmljIG9wdGlvbiBpbmZsdWVuY2luZyBlYXJseSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24uIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgYW55IGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBkZXRhaWxzLiBUaW1lIHRvIGdldCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgzMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6NTAuNTMyNzA2OTc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2MTc1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNZU0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zeXNmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvc3lzZnMvS2NvbmZpZzoyOmNvbmZpZyBTWVNGU1xcbmZzL3N5c2ZzL0tjb25maWctMy1cXHRib29sIFxcXCJzeXNmcyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTM6NTAuNjc2MzMzNjg5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNTE4MTI2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgSW50ZXJmYWNlIFNwZWVkIGFuZCBEdXBsZXggU2V0dGluZ3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgc3ltYm9scyByZWxhdGVkIHRvIG5ldHdvcmsgaW50ZXJmYWNlIHNldHRpbmdzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBzcGVlZCBhbmQgZHVwbGV4LiBJJ20gc2VlaW5nIGNoYW5nZXMgY2VudGVyZWQgYXJvdW5kIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLCB3aGljaCBpcyBtYXJrZWQgYXMgc3RhdGljLCBhbG9uZyB3aXRoIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCwgYWxzbyBzdGF0aWMgZnVuY3Rpb25zLiBJbnRyaWd1aW5nLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24uXG5cbkFoLCB0aGVyZSBpdCBpcyEgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgaXMgdGhlIGtleSDigJMgaXQncyBhbiBleHBvcnRlZCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9ldGh0b29sL2lvY3RsLmNgLCBhbmQgaXQgYXBwZWFycyB0byBiZSB3aGF0IGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGlzIGxldmVyYWdpbmcuIFNpbmNlIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgIGlzIGV4cG9ydGVkLCBpdCdzIHRoZSByZWFsIGVudHJ5IHBvaW50IEkgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvZGUgZmxvdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb250ZXh0IGFyb3VuZCBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBpbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFRoYXQncyB3aGVyZSBJIHdpbGwgZmluZCB0aGUgY2FsbGluZyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzIGFyZSBiZWluZyByZXRyaWV2ZWQgYW5kIGV4cG9zZWQsIGVzcGVjaWFsbHkgbm93IHRoYXQgdGhlIGJhY2tpbmcgZnVuY3Rpb24sIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgLCBpcyBzdGF0aWMuIFRoaXMgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nLCBtYXliZSB0byBjb25zb2xpZGF0ZSBhY2Nlc3Mgb3IgaGlkZSBzb21lIGludGVybmFsIGRldGFpbHMuIFRpbWUgdG8gZXhhbWluZSB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjU2LjcyODE0ODUzOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDIzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MzU6XFx0XFx0fSBsaW5rX21vZGVzO1xcbiA0MzY6XFx0fTtcXG4gNDM3OlxcdFxcbiA0Mzg6XFx0LyogSW50ZXJuYWwga2VybmVsIGhlbHBlciB0byBxdWVyeSBhIGRldmljZSBldGh0b29sX2xpbmtfc2V0dGluZ3MuICovXFxuIDQzOTpcXHRpbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDQ0MDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncylcXG4gNDQxOlxcdHtcXG4gNDQyOlxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0aWYgKCFkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXFxuIDQ0NTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdFxcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4gNDQ4OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0NDk6XFx0XFxuIDQ1MDpcXHRcXHRtZW1zZXQobGlua19rc2V0dGluZ3MsIDAsIHNpemVvZigqbGlua19rc2V0dGluZ3MpKTtcXG4gNDUxOlxcdFxcdHJldHVybiBkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XFxuIDQ1MjpcXHR9XFxuIDQ1MzpcXHRFWFBPUlRfU1lNQk9MKG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyk7XFxuIDQ1NDpcXHRcXG4gNDU1OlxcdC8qIENvbnZlbmllbmNlIGhlbHBlciBmb3IgY2FsbGVycyB0aGF0IGhvbGQgb25seSBydG5sX2xvY2soKS4gKi9cXG4gNDU2OlxcdGludCBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDQ1NzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxcbiA0NTg6XFx0e1xcbiA0NTk6XFx0XFx0aW50IHJldDtcXG4gNDYwOlxcdFxcbiA0NjE6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuIDQ2NDpcXHRcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XFxuIDQ2NTpcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbiA0NjY6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDY3OlxcdH1cXG4gNDY4OlxcdEVYUE9SVF9TWU1CT0woX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyk7XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdC8qIGNvbnZlcnQgZXRodG9vbF9saW5rX3VzZXR0aW5ncyBpbiB1c2VyIHNwYWNlIHRvIGEga2VybmVsIGludGVybmFsXFxuIDQ3MTpcXHQgKiBldGh0b29sX2xpbmtfa3NldHRpbmdzLiByZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBlcnJvci5cXG4gNDcyOlxcdCAqL1xcbiA0NzM6XFx0c3RhdGljIGludCBsb2FkX2xpbmtfa3NldHRpbmdzX2Zyb21fdXNlcihzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqdG8sXFxuIDQ3NDpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjEzOjU2LjcyODM5MjUxOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTk0NDM2NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgRnVuY3Rpb24gRnV6emluZyBUYXJnZXRzIGZvciBOZXR3b3JrIFN5c2ZzIEF0dHJpYnV0ZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoYXQgYHNwZWVkX3Nob3dgIGFuZCBgZHVwbGV4X3Nob3dgLCBhbmQgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLCBhbmQgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgaXMgdGhlIG5vbi1zdGF0aWMgb25lLiBMb29raW5nIGF0IHRoZSBwcm9tcHQncyBpbnN0cnVjdGlvbnMsIHNwZWNpZmljYWxseSwgaXQncyBlbXBoYXNpemluZyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBmdW5jdGlvbnMgYXJlIG9mdGVuIGlubGluZWQsIGFuZCB3ZSBuZWVkIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgZm9yIGZ1enppbmcuIFNvLCB3aGlsZSBgc3BlZWRfc2hvd2AsIGBkdXBsZXhfc2hvd2AsIGFuZCBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBhcmUgcmVsZXZhbnQgaW4gY29udGV4dCwgSSBuZWVkIHRvIHByaW9yaXRpemUgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AgZm9yIGBGb2N1c1N5bWJvbHNgLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGlzIHRhcmdldGVkLiBXaGlsZSB0aGUgc3RhdGljIG9uZXMgYXJlIGNhbGxlZCwgSSBuZWVkIHRvIGZvY3VzIHRoZSBmdXp6aW5nIHRvICpvbmx5KiB3aGF0IHRoZSBwcm9tcHQgaXMgYXNraW5nLiBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AsIGFuZCBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCBzaG91bGQgYmUgaW5jbHVkZWQsIGV2ZW4gaWYgdGhleSBhcmUgc3RhdGljIHNpbmNlIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHRoZW0uXG5cbk5vdywgd2l0aCB0aG9zZSBwcmlvcml0aWVzIGluIG1pbmQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvcnJlY3QgRW5hYmxlQ29uZmlncyBhcmUgc2V0LiBJIHNlZSBgU1lTRlNgIGFuZCBgTkVUYCwgd2hpY2ggc2VlbSBhcHByb3ByaWF0ZSwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLlxuXG5UaGUgcGF0Y2gncyBkZXNjcmlwdGlvbiBoaWdobGlnaHRzIGEgY2hhbmdlIGluIHRoZSBsb2NraW5nIG1lY2hhbmlzbSBhbmQgaGFuZGxpbmcgb2YgYGRldl9pc2FsaXZlYCBjaGVja3MgZm9yIHJlYWRpbmcgc3BlZWQgYW5kIGR1cGxleCBzeXNmcyBhdHRyaWJ1dGVzLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBuZXR3b3JrIGludGVyZmFjZSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgZnV6emluZy4gVGhpcyBzaG91bGQgZ2V0IGEgaGlnaCBwcmlvcml0eSB3aGVuIHNldHRpbmcgdXAgdGhlIGZ1enppbmcuXG5cbkknbGwgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2l0aCBgc2V0LXJlc3VsdHNgIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBpbml0aWFsIHBhc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjUwLCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjE0OjAwLjkyMjgzMjE4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzQ4NjQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1lTRlNcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGlmX2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwic3BlZWRfc2hvd1wiLFxuICAgIFwiZHVwbGV4X3Nob3dcIixcbiAgICBcInN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGxvY2tpbmcgbG9naWMgd2hlbiByZWFkaW5nIHRoZSBuZXR3b3JrIGRldmljZSAnc3BlZWQnIGFuZCAnZHVwbGV4JyBzeXNmcyBhdHRyaWJ1dGVzLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgdGhlIFJUTkwgbG9jaywgaXQgdXNlcyBwZXItZGV2aWNlIG9wcyBsb2NraW5nIChuZXRkZXZfbG9ja19vcHMpIHdoZW4gc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UsIGNoZWNrcyBkZXZfaXNhbGl2ZSwgYW5kIGNhbGxzIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpLiBUaGlzIGFmZmVjdHMgdXNlci1hY2Nlc3NpYmxlIHN5c2ZzIGVuZHBvaW50cyBhbmQgbmV0d29yayBkZXZpY2UgbG9ja2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTWVNGU1wiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJzcGVlZF9zaG93XCIsXG4gICAgXCJkdXBsZXhfc2hvd1wiLFxuICAgIFwic3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgbG9ja2luZyBsb2dpYyB3aGVuIHJlYWRpbmcgdGhlIG5ldHdvcmsgZGV2aWNlICdzcGVlZCcgYW5kICdkdXBsZXgnIHN5c2ZzIGF0dHJpYnV0ZXMuIEluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IGFjcXVpcmluZyB0aGUgUlROTCBsb2NrLCBpdCB1c2VzIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgKG5ldGRldl9sb2NrX29wcykgd2hlbiBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSwgY2hlY2tzIGRldl9pc2FsaXZlLCBhbmQgY2FsbHMgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCkuIFRoaXMgYWZmZWN0cyB1c2VyLWFjY2Vzc2libGUgc3lzZnMgZW5kcG9pbnRzIGFuZCBuZXR3b3JrIGRldmljZSBsb2NraW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxNDowMS4wNDYzMjYwNzhaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzM2MDcyMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTQ6MDEuMDQ2Nzg0MTU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDMzMzU2MDk0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgJ3NwZWVkJyBhbmQgJ2R1cGxleCcgYXR0cmlidXRlIHJlYWQgaGFuZGxlcnMgaW50byBhIGhlbHBlciBmdW5jdGlvbiAnc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCknLCBhbGxvd2luZyB0aGUgdXNlIG9mIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgKG5ldGRldl9sb2NrX29wcykgaW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIFJUTkwuXFxuXFxuVGhlIHN0YWNrLWFsbG9jYXRlZCAnc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kJyB2YXJpYWJsZSBpcyBwYXNzZWQgdG8gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCksIHdoaWNoIHplcm9lcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIG1lbXNldCgpIGJlZm9yZSBxdWVyeWluZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgZmllbGRzIGNtZC5iYXNlLnNwZWVkIGFuZCBjbWQuYmFzZS5kdXBsZXggYXJlIGFjY2Vzc2VkIG9ubHkgd2hlbiBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKSByZXR1cm5zIHN1Y2Nlc3MgKDApLCBhbmQgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgaW50byB0ZXh0IHZpYSBzeXNmc19lbWl0KCkuIExvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGFzcGVjdHMgb2YgdGhpcyBwYXRjaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGJ1aWxkcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MsIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZTM2ZjdhNTNmZDU4NmE1ZGE5YWIyYjQxY2RlNDVhZjQ1YzAwOTM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDg6MTM6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jXG5pbmRleCAzNTIxNzNkZjc1Nzg1Li4zZTAxZTdmM2NhYzc5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmNcbisrKyBiL25ldC9jb3JlL25ldC1zeXNmcy5jXG5AQCAtMTE4LDYgKzExOCw1NSBAQCBzdGF0aWMgaW50IHN5c2ZzX3J0bmxfbG9jayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qXG4rICogVXNlIHRoZSBwZXItZGV2aWNlIG9wcyBsb2NrIHdpdGhvdXQgUlROTCB3aGVuIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaXQuXG4rICogTGVnYWN5IGRldmljZXMgYW5kIGNhbGxiYWNrcyB3aGljaCBleHBsaWNpdGx5IHJlcXVpcmUgUlROTCByZXRhaW4gdGhlXG4rICogZXhpc3RpbmcgbG9ja2luZy5cbisgKi9cbitzdGF0aWMgaW50IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpO1xuK1x0aW50IHJldCA9IC1FSU5WQUw7XG4rXHRib29sIG5lZWRfcnRubDtcbitcbitcdC8qXG4rXHQgKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpOyB0aGlzIGhlbHBzXG4rXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXG4rXHQgKi9cbitcdGlmICghbmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9saW5rX2tzZXR0aW5ncylcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhuZXRkZXYpIHx8XG4rXHRcdCAgICAobmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2XG4rXHRcdCAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyk7XG4rXHRpZiAobmVlZF9ydG5sKSB7XG4rXHRcdHJldCA9IHN5c2ZzX3J0bmxfbG9jayhcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyLCBuZXRkZXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcbitcbitcdHJldCA9IC1FSU5WQUw7XG4rXHRpZiAoIWRldl9pc2FsaXZlKG5ldGRldikpIHtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdH0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEtlZXAgdGhlIHN5c2ZzIEFCSTogcmVwb3J0IGFueSBjYWxsYmFjayBlcnJvciBhcyAtRUlOVkFMXG4rXHRcdCAqIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgdGhlIGRyaXZlcidzIGVycm9yIGNvZGUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIW5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZCkpXG4rXHRcdFx0cmV0ID0gMDtcbitcdH1cbitcbitcdG5ldGRldl91bmxvY2tfb3BzKG5ldGRldik7XG4rXHRpZiAobmVlZF9ydG5sKVxuK1x0XHRydG5sX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyogdXNlIHNhbWUgbG9ja2luZyBydWxlcyBhcyBHSUYqIGlvY3RsJ3MgKi9cbiBzdGF0aWMgc3NpemVfdCBuZXRkZXZfc2hvdyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZixcbkBAIC0zMzIsMjcgKzM4MSwxMyBAQCBzdGF0aWMgREVWSUNFX0FUVFJfUlcoY2Fycmllcik7XG4gc3RhdGljIHNzaXplX3Qgc3BlZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XG4tXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi1cbi1cdC8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwc1xuLVx0ICogcmV0dXJuaW5nIGVhcmx5IHdpdGhvdXQgaGl0dGluZyB0aGUgbG9ja2luZyBzZWN0aW9uIGJlbG93LlxuLVx0ICovXG4tXHRpZiAoIW5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4rXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gLUVJTlZBTDtcbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbi1cdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuK1x0cmV0ID0gc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKGRldiwgYXR0ciwgXHUwMDI2Y21kKTtcbitcdGlmICghcmV0KVxuK1x0XHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpO1xuIFxuLVx0XHRpZiAoIV9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZjbWQpKVxuLVx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBmbXRfZGVjLCBjbWQuYmFzZS5zcGVlZCk7XG4tXHR9XG4tXHRydG5sX3VubG9jaygpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gc3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTtcbkBAIC0zNjAsNDEgKzM5NSwyNiBAQCBzdGF0aWMgREVWSUNFX0FUVFJfUk8oc3BlZWQpO1xuIHN0YXRpYyBzc2l6ZV90IGR1cGxleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XG4tXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi1cbi1cdC8qIFRoZSBjaGVjayBpcyBhbHNvIGRvbmUgaW4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nczsgdGhpcyBoZWxwc1xuLVx0ICogcmV0dXJuaW5nIGVhcmx5IHdpdGhvdXQgaGl0dGluZyB0aGUgbG9ja2luZyBzZWN0aW9uIGJlbG93LlxuLVx0ICovXG4tXHRpZiAoIW5ldGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRyZXQgPSBzeXNmc19ydG5sX2xvY2soXHUwMDI2ZGV2LVx1MDAzZWtvYmosIFx1MDAyNmF0dHItXHUwMDNlYXR0ciwgbmV0ZGV2KTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRyZXQgPSAtRUlOVkFMO1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuLVx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4tXG4tXHRcdGlmICghX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmNtZCkpIHtcbi1cdFx0XHRjb25zdCBjaGFyICpkdXBsZXg7XG4rXHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQ7XG4rXHRjb25zdCBjaGFyICpkdXBsZXg7XG4rXHRpbnQgcmV0O1xuIFxuLVx0XHRcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfSEFMRjpcbi1cdFx0XHRcdGR1cGxleCA9IFwiaGFsZlwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0Y2FzZSBEVVBMRVhfRlVMTDpcbi1cdFx0XHRcdGR1cGxleCA9IFwiZnVsbFwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0ZGVmYXVsdDpcbi1cdFx0XHRcdGR1cGxleCA9IFwidW5rbm93blwiO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHRcdHJldCA9IHN5c2ZzX2VtaXQoYnVmLCBcIiVzXFxuXCIsIGR1cGxleCk7XG4rXHRyZXQgPSBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBhdHRyLCBcdTAwMjZjbWQpO1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0c3dpdGNoIChjbWQuYmFzZS5kdXBsZXgpIHtcbitcdFx0Y2FzZSBEVVBMRVhfSEFMRjpcbitcdFx0XHRkdXBsZXggPSBcImhhbGZcIjtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBEVVBMRVhfRlVMTDpcbitcdFx0XHRkdXBsZXggPSBcImZ1bGxcIjtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRkdXBsZXggPSBcInVua25vd25cIjtcbitcdFx0XHRicmVhaztcbiBcdFx0fVxuK1x0XHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgXCIlc1xcblwiLCBkdXBsZXgpO1xuIFx0fVxuLVx0cnRubF91bmxvY2soKTtcbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhkdXBsZXgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTQ6MDEuMDQ2Nzg2ODg4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MzAwNDA5MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiAtIFBhdGNoIFNlcmllcyBSZXZpZXcqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBsb29rIGF0IGEgTGludXgga2VybmVsIHBhdGNoIHNlcmllcyBhbmQgZGVjaWRlIGlmIGl0IG5lZWRzIGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uLiBObyBwcm9ibGVtLCBsZXQncyBzdGFydCBieSBtYWtpbmcgc3VyZSBpdCdzIHNhZmUg4oCTIHN0YW5kYXJkIGRlZmVuc2l2ZSByZXZpZXcsIG5vIG1hbGljaW91cyBzdHVmZiwganVzdCBjaGVja2luZyBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIG1lbW9yeSBzYW5pdGl6ZXIgYXR0ZW50aW9uLiBUaGlzIGlzIGEgYmVuaWduIHNldmVyaXR5IGFzc2Vzc21lbnQsIHB1cmVseSBhYm91dCB0aGUgY29kZS5cblxuQWxyaWdodCwgbGV0J3MgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIHRvdWNoaW5nIGBuZXQvY29yZS9uZXQtc3lzZnMuY2AuIExldCdzIHNlZS4uLiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGhlbHBlci4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIHRoZW4gdXNlZCBpbiBgc3BlZWRfc2hvd2AgYW5kIGBkdXBsZXhfc2hvd2AsIGNhbGxpbmcgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFx1MDAyNmNtZClgLiBIbW0sIGFuZCBgY21kYCBpcyBhbiAqdW5pbml0aWFsaXplZCogYHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtgIG9uIHRoZSBzdGFjay4gTm93IHRoYXQgY2F0Y2hlcyBteSBleWUuIElzIGBjbWRgIHByb3Blcmx5IGluaXRpYWxpemVkIGluc2lkZSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCB0byBzZWUuIEknbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGF0IG91dCwgYXMgd2VsbCBhcyBgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5nc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQgbG9jYWwgdmFyaWFibGUgYGNtZGAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0J3MgdXNlZC4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBLTVNBTiBtaWdodCBuZWVkIHRvIGxvb2sgYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxNDoxNS4zNDcxOTg2NzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDAxMzM5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0zMjY9X19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTMyNy1cXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncyk7XFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6MzI4OmludCBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0zMjktXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqbGlua19rc2V0dGluZ3MpO1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz00Mjk9c3RydWN0IGV0aHRvb2xfbGlua191c2V0dGluZ3Mge1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy00MzgtLyogSW50ZXJuYWwga2VybmVsIGhlbHBlciB0byBxdWVyeSBhIGRldmljZSBldGh0b29sX2xpbmtfc2V0dGluZ3MuICovXFxubmV0L2V0aHRvb2wvaW9jdGwuYzo0Mzk6aW50IG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9ldGh0b29sL2lvY3RsLmMtNDQwLVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxNDoxNy42ODczNDg2MzJaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYxNzI3ODg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEV0aHRvb2wgQ29kZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBldGh0b29sJ3MgaGFuZGxpbmcgb2YgY2VydGFpbiBjb25maWd1cmF0aW9ucyB3b3Jrcy4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC9ldGh0b29sL2lvY3RsLmNgIGFyb3VuZCBsaW5lIDQzOS4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBpb2N0bCBoYW5kbGluZyBsb2dpYyByZXNpZGVzLCB3aGljaCBzaG91bGQgYmUgaW50ZXJlc3RpbmcuIFRoZW4sIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgZXRodG9vbCB1c2VzLCBJJ2xsIG5lZWQgdG8gcmVmZXJlbmNlIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYXJvdW5kIGxpbmUgMzI2LiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgc3RydWN0dXJlcyBsaWtlIGBldGh0b29sX2dzZXRfdGAgb3Igc2ltaWxhci4gSSdsbCBuZWVkIHRvIHZlcmlmeSBob3cgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgYWNjZXNzZWQgc28gSSBjYW4gY29tcHJlaGVuZCB0aGUgZGF0YSBmbG93IGFuZCBhbnkgZGF0YSB2YWxpZGF0aW9uLiBMZXQncyBzZWUgaWYgdGhpcyBzdGFydGluZyBwb2ludCBoZWxwcyBjbGFyaWZ5IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2VyLXNwYWNlIGV0aHRvb2wgdXRpbGl0eSBhbmQgdGhlIGtlcm5lbCdzIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxNDoyMi4zMDQ2MzAwNTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDMwOlxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfc2V0dGluZ3MgYmFzZTtcXG4gNDMxOlxcdFxcdHN0cnVjdCB7XFxuIDQzMjpcXHRcXHRcXHRfX3UzMiBzdXBwb3J0ZWRbX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05VMzJdO1xcbiA0MzM6XFx0XFx0XFx0X191MzIgYWR2ZXJ0aXNpbmdbX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05VMzJdO1xcbiA0MzQ6XFx0XFx0XFx0X191MzIgbHBfYWR2ZXJ0aXNpbmdbX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05VMzJdO1xcbiA0MzU6XFx0XFx0fSBsaW5rX21vZGVzO1xcbiA0MzY6XFx0fTtcXG4gNDM3OlxcdFxcbiA0Mzg6XFx0LyogSW50ZXJuYWwga2VybmVsIGhlbHBlciB0byBxdWVyeSBhIGRldmljZSBldGh0b29sX2xpbmtfc2V0dGluZ3MuICovXFxuIDQzOTpcXHRpbnQgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDQ0MDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpsaW5rX2tzZXR0aW5ncylcXG4gNDQxOlxcdHtcXG4gNDQyOlxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0aWYgKCFkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MpXFxuIDQ0NTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdFxcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4gNDQ4OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0NDk6XFx0XFxuIDQ1MDpcXHRcXHRtZW1zZXQobGlua19rc2V0dGluZ3MsIDAsIHNpemVvZigqbGlua19rc2V0dGluZ3MpKTtcXG4gNDUxOlxcdFxcdHJldHVybiBkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XFxuIDQ1MjpcXHR9XFxuIDQ1MzpcXHRFWFBPUlRfU1lNQk9MKG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyk7XFxuIDQ1NDpcXHRcXG4gNDU1OlxcdC8qIENvbnZlbmllbmNlIGhlbHBlciBmb3IgY2FsbGVycyB0aGF0IGhvbGQgb25seSBydG5sX2xvY2soKS4gKi9cXG4gNDU2OlxcdGludCBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDQ1NzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmxpbmtfa3NldHRpbmdzKVxcbiA0NTg6XFx0e1xcbiA0NTk6XFx0XFx0aW50IHJldDtcXG4gNDYwOlxcdFxcbiA0NjE6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuIDQ2NDpcXHRcXHRyZXQgPSBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoZGV2LCBsaW5rX2tzZXR0aW5ncyk7XFxuIDQ2NTpcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbiA0NjY6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDY3OlxcdH1cXG4gNDY4OlxcdEVYUE9SVF9TWU1CT0woX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyk7XFxuIDQ2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTQ6MjIuMzA0OTk0MTk5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyMjU0NzE0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZXQgc3lzZnMgc3BlZWQvZHVwbGV4IGltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIGZ1bmN0aW9uIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggYG5ldGlmX2dldF9saW5rX2tzZXR0aW5nc2AsIGBzcGVlZF9zaG93YCwgYW5kIGBkdXBsZXhfc2hvd2AuIFRoZSBgbWVtc2V0YCBpbiBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBpcyBpbW1lZGlhdGVseSBhcHBhcmVudCDigJMgdGhlIGNvZGUgaXMgemVyb2luZyBvdXQgdGhlIGBsaW5rX2tzZXR0aW5nc2Agc3RydWN0dXJlIGJlZm9yZSBjYWxsaW5nIHRoZSBkcml2ZXIncyBgZ2V0X2xpbmtfa3NldHRpbmdzYCBmdW5jdGlvbiB2aWEgYGRldi1cdTAwM2VldGh0b29sX29wc2AuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgdG8gaW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlLCBlbGltaW5hdGluZyB0aGUgcmlzayBvZiB1bmRlZmluZWQgYmVoYXZpb3IgaWYgdGhlIGRyaXZlciBkb2Vzbid0IHBvcHVsYXRlIGV2ZXJ5IGZpZWxkLlxuXG5Ob3csIGxvb2tpbmcgYXQgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AsIGl0IHNlZW1zIHdlJ3ZlIGdvdCBhIGxheWVyZWQgYXBwcm9hY2ggdG8gb2J0YWluaW5nIHRoZSBsaW5rIHNldHRpbmdzLiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIGRyaXZlciBhY3R1YWxseSAqaGFzKiBhIGBnZXRfbGlua19rc2V0dGluZ3NgIG9wZXJhdGlvbiBkZWZpbmVkLiBJZiBub3QsIGl0IGJhaWxzIG91dCBlYXJseSB3aXRoIGAtRUlOVkFMYC4gVGhlbiB0aGVyZSdzIHRoZSBjb25kaXRpb25hbCBsb2NraW5nIHNlY3Rpb24uIEl0IGludGVsbGlnZW50bHkgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSBgcnRubF9sb2NrYCBvciBhIHBlci1kZXZpY2UgYG5ldGRldl9sb2NrX29wc2AgYmFzZWQgb24gdGhlIG5lZWQgZm9yIFJUTkwgY29udGV4dCBmb3IgdGhlIGRyaXZlcidzIG9wZXJhdGlvbi4gQWZ0ZXIgdGhlIGxvY2tpbmcgaXMgaGFuZGxlZCwgdGhlcmUncyBhIHNhZmV0eSBjaGVjazogYGRldl9pc2FsaXZlYCBhbmQgYG5ldGlmX3J1bm5pbmdgLiBJZiB0aGUgZGV2aWNlIGlzbid0IGFsaXZlLCBvciBpcyBub3QgcnVubmluZyBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBjYWxsIHRvIGBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3NgLiBJZiAqdGhhdCogc3VjY2VlZHMgKHJldHVybnMgMCksIHRoZSBmdW5jdGlvbiBwcm9jZWVkcy4gT3RoZXJ3aXNlLCBpdCByZXBvcnRzIGAtRUlOVkFMYC4gRmluYWxseSwgdGhlIGxvY2sgaXMgcmVsZWFzZWQuXG5cbkluc3BlY3RpbmcgYHNwZWVkX3Nob3dgIHJlaW5mb3JjZXMgdGhhdCB0aGUgYGNtZGAgc3RydWN0dXJlIGlzIG9ubHkgYWNjZXNzZWQgaWYgYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2Agc3VjY2VlZHMuIFNvLCBpdCdzIGNsZWFyIHRoYXQgaXQgaXMgcHJvdGVjdGVkIGZyb20gcG90ZW50aWFsIGdhcmJhZ2UgZGF0YSwgd2hpY2ggSSd2ZSBzZWVuIGJlZm9yZSBpZiB0aGUgZHJpdmVyIGRvZXMgbm90IGluaXRpYWxpemUgdGhlIGBldGh0b29sX2xpbmtfa3NldHRpbmdzYC4gVGhlIHNhbWUgbG9naWMgYXBwbGllcyB0byBgZHVwbGV4X3Nob3dgIHNpbmNlIGl0IGZ1bmN0aW9ucyBpZGVudGljYWxseS5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGEgcmVmYWN0b3JpbmcgYW5kIG9wdGltaXphdGlvbiBlZmZvcnQuIFRoZSBwcmV2aW91cyBjb2RlIGRpcmVjdGx5IGFjcXVpcmVkIHRoZSBSVE5MIGxvY2ssIHRoZW4gY2FsbGVkIGBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzYC4gVGhlIHJldmlzZWQgdmVyc2lvbiBleHRyYWN0cyB0aGUgY29tbW9uIGxvY2tpbmcgYW5kIHF1ZXJ5IGxvZ2ljIGludG8gYHN5c2ZzX2dldF9saW5rX2tzZXR0aW5nc2AuIFRoaXMgY2VudHJhbGl6YXRpb24gaXMgZ29vZCwgYW5kIHRoZSBjb25kaXRpb25hbCBsb2NraW5nIGJhc2VkIG9uIGBuZXRkZXZfbmVlZF9vcHNfbG9ja2AgaXMgYSBkZWZpbml0ZSBpbXByb3ZlbWVudC4gSXQgYWxsb3dzIGxvY2tsZXNzIG9yIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgd2hlbiBwb3NzaWJsZSwgcmVkdWNpbmcgdGhlIHNjb3BlIG9mIHRoZSBSVE5MIGxvY2suIEluIGVzc2VuY2UsIGl0J3MgYWJvdXQgcmVkdWNpbmcgY29udGVudGlvbiBhbmQgaW1wcm92aW5nIGNvbmN1cnJlbmN5IGluIHRoZSBrZXJuZWwuXG5cbkknbGwgbm93IG5lZWQgdG8gdmVyaWZ5IHRoZXJlIGFyZW4ndCBhbnkgc3VidGxlIGdvdGNoYXMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBlbHNld2hlcmUuIEkgbmVlZCB0byBjb21iIHRocm91Z2ggYG5ldC9jb3JlL25ldC1zeXNmcy5jYCBhcm91bmQgbGluZXMgMTE4IHRvIDQwMC4gRW5zdXJlIG5vIG90aGVyIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvciBvciBsZWF2ZSBkYXRhIHVuaW5pdGlhbGl6ZWQsIHdoaWNoIGNhbiBsZWFkIHRvIHRyaWNreSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzY0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjE0OjMwLjUzMDQ2OTIwOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0LXN5c2ZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEwOlxcdFxcdCAqIFRoZXJlJ3Mgbm8gbmVlZCB0byBrZWVwIHVuYnJlYWtpbmcgdGhlIHN5c2ZzIHByb3RlY3Rpb24gbm9yIHRvIGhvbGRcXG4gMTExOlxcdFxcdCAqIGEgbmV0IGRldmljZSByZWZlcmVuY2UgZnJvbSB0aGF0IHBvaW50OyB0aGF0IHdhcyBvbmx5IG5lZWRlZCB0byB0YWtlXFxuIDExMjpcXHRcXHQgKiB0aGUgcnRubCBsb2NrLlxcbiAxMTM6XFx0XFx0ICovXFxuIDExNDpcXHR1bmJyZWFrOlxcbiAxMTU6XFx0XFx0c3lzZnNfdW5icmVha19hY3RpdmVfcHJvdGVjdGlvbihrbik7XFxuIDExNjpcXHRcXHRkZXZfcHV0KG5kZXYpO1xcbiAxMTc6XFx0XFxuIDExODpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMTk6XFx0fVxcbiAxMjA6XFx0XFxuIDEyMTpcXHQvKlxcbiAxMjI6XFx0ICogVXNlIHRoZSBwZXItZGV2aWNlIG9wcyBsb2NrIHdpdGhvdXQgUlROTCB3aGVuIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaXQuXFxuIDEyMzpcXHQgKiBMZWdhY3kgZGV2aWNlcyBhbmQgY2FsbGJhY2tzIHdoaWNoIGV4cGxpY2l0bHkgcmVxdWlyZSBSVE5MIHJldGFpbiB0aGVcXG4gMTI0OlxcdCAqIGV4aXN0aW5nIGxvY2tpbmcuXFxuIDEyNTpcXHQgKi9cXG4gMTI2OlxcdHN0YXRpYyBpbnQgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMTI3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4gMTI4OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbiAxMjk6XFx0e1xcbiAxMzA6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHRvX25ldF9kZXYoZGV2KTtcXG4gMTMxOlxcdFxcdGludCByZXQgPSAtRUlOVkFMO1xcbiAxMzI6XFx0XFx0Ym9vbCBuZWVkX3J0bmw7XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdC8qXFxuIDEzNTpcXHRcXHQgKiBUaGUgY2hlY2sgaXMgYWxzbyBkb25lIGluIG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncygpOyB0aGlzIGhlbHBzXFxuIDEzNjpcXHRcXHQgKiByZXR1cm5pbmcgZWFybHkgd2l0aG91dCBoaXR0aW5nIHRoZSBsb2NraW5nIHNlY3Rpb24gYmVsb3cuXFxuIDEzNzpcXHRcXHQgKi9cXG4gMTM4OlxcdFxcdGlmICghbmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2xpbmtfa3NldHRpbmdzKVxcbiAxMzk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKG5ldGRldikgfHxcXG4gMTQyOlxcdFxcdFxcdCAgICAobmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2XFxuIDE0MzpcXHRcXHRcXHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MpO1xcbiAxNDQ6XFx0XFx0aWYgKG5lZWRfcnRubCkge1xcbiAxNDU6XFx0XFx0XFx0cmV0ID0gc3lzZnNfcnRubF9sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWtvYmosIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyLCBuZXRkZXYpO1xcbiAxNDY6XFx0XFx0XFx0aWYgKHJldClcXG4gMTQ3OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE0ODpcXHRcXHR9XFxuIDE0OTpcXHRcXHRuZXRkZXZfbG9ja19vcHMobmV0ZGV2KTtcXG4gMTUwOlxcdFxcbiAxNTE6XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gMTUyOlxcdFxcdGlmICghZGV2X2lzYWxpdmUobmV0ZGV2KSkge1xcbiAxNTM6XFx0XFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4gMTU0OlxcdFxcdH0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuIDE1NTpcXHRcXHRcXHQvKlxcbiAxNTY6XFx0XFx0XFx0ICogS2VlcCB0aGUgc3lzZnMgQUJJOiByZXBvcnQgYW55IGNhbGxiYWNrIGVycm9yIGFzIC1FSU5WQUxcXG4gMTU3OlxcdFxcdFxcdCAqIGluc3RlYWQgb2YgcHJvcGFnYXRpbmcgdGhlIGRyaXZlcidzIGVycm9yIGNvZGUuXFxuIDE1ODpcXHRcXHRcXHQgKi9cXG4gMTU5OlxcdFxcdFxcdGlmICghbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgY21kKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDg6MTQ6MzAuNTMwNzM5Nzk4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzQwMzEzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBhbHJlYWR5IGxvb2tlZCBhdCB0aGUgY29yZSBsb2dpYywgYW5kIEknbSBmYWlybHkgY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQgdGhlcmUuIE5vdywgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIHRha2UgYSBnb29kIGhhcmQgbG9vayBhdCB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgLSBzcGVjaWZpY2FsbHksIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZWdyYXRlLCB3aGF0IGFzc3VtcHRpb25zIHRoZXkgbWFrZSBhYm91dCB0aGUgZGF0YSwgYW5kIGlmIHRoZXkgaW50cm9kdWNlIGFueSBlZGdlLWNhc2UgdnVsbmVyYWJpbGl0aWVzIG9yIGluZWZmaWNpZW5jaWVzIGludG8gdGhlIGxhcmdlciBwcm9jZXNzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgdHlwZXMgdGhleSBoYW5kbGUsIHBvdGVudGlhbCBvdmVyZmxvdyBpc3N1ZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBpZiB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBzaGFyZWQgcmVzb3VyY2VzLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGVpciBpbXBsZW1lbnRhdGlvbiBpbnRyb2R1Y2VzIGFueSBzdWJ0bGUgYnVncyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aGljaCBjb3VsZCBjYXNjYWRlIHVwd2FyZHMuIEknbSBsb29raW5nIGZvciBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgY29tcG9uZW50cyBhbmQgdGhlaXIgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODkwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxNDozMi45NjQ3NzM4NzdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldC1zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3NSxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3NTpcXHRcXG4gMzc2OlxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuIDM3NzpcXHRcXHRyZXR1cm4gcmV0O1xcbiAzNzg6XFx0fVxcbiAzNzk6XFx0c3RhdGljIERFVklDRV9BVFRSX1JXKGNhcnJpZXIpO1xcbiAzODA6XFx0XFxuIDM4MTpcXHRzdGF0aWMgc3NpemVfdCBzcGVlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4gMzgyOlxcdFxcdFxcdFxcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4gMzgzOlxcdHtcXG4gMzg0OlxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcXG4gMzg1OlxcdFxcdGludCByZXQ7XFxuIDM4NjpcXHRcXG4gMzg3OlxcdFxcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFxcdTAwMjZjbWQpO1xcbiAzODg6XFx0XFx0aWYgKCFyZXQpXFxuIDM4OTpcXHRcXHRcXHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgZm10X2RlYywgY21kLmJhc2Uuc3BlZWQpO1xcbiAzOTA6XFx0XFxuIDM5MTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAzOTI6XFx0fVxcbiAzOTM6XFx0c3RhdGljIERFVklDRV9BVFRSX1JPKHNwZWVkKTtcXG4gMzk0OlxcdFxcbiAzOTU6XFx0c3RhdGljIHNzaXplX3QgZHVwbGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiAzOTY6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4gMzk3OlxcdHtcXG4gMzk4OlxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcXG4gMzk5OlxcdFxcdGNvbnN0IGNoYXIgKmR1cGxleDtcXG4gNDAwOlxcdFxcdGludCByZXQ7XFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdHJldCA9IHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncyhkZXYsIGF0dHIsIFxcdTAwMjZjbWQpO1xcbiA0MDM6XFx0XFx0aWYgKCFyZXQpIHtcXG4gNDA0OlxcdFxcdFxcdHN3aXRjaCAoY21kLmJhc2UuZHVwbGV4KSB7XFxuIDQwNTpcXHRcXHRcXHRjYXNlIERVUExFWF9IQUxGOlxcbiA0MDY6XFx0XFx0XFx0XFx0ZHVwbGV4ID0gXFxcImhhbGZcXFwiO1xcbiA0MDc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQwODpcXHRcXHRcXHRjYXNlIERVUExFWF9GVUxMOlxcbiA0MDk6XFx0XFx0XFx0XFx0ZHVwbGV4ID0gXFxcImZ1bGxcXFwiO1xcbiA0MTA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQxMTpcXHRcXHRcXHRkZWZhdWx0OlxcbiA0MTI6XFx0XFx0XFx0XFx0ZHVwbGV4ID0gXFxcInVua25vd25cXFwiO1xcbiA0MTM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQxNDpcXHRcXHRcXHR9XFxuIDQxNTpcXHRcXHRcXHRyZXQgPSBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVzXFxcXG5cXFwiLCBkdXBsZXgpO1xcbiA0MTY6XFx0XFx0fVxcbiA0MTc6XFx0XFxuIDQxODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MTk6XFx0fVxcbiA0MjA6XFx0c3RhdGljIERFVklDRV9BVFRSX1JPKGR1cGxleCk7XFxuIDQyMTpcXHRcXG4gNDIyOlxcdHN0YXRpYyBzc2l6ZV90IHRlc3Rpbmdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIDQyMzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4gNDI0OlxcdHtcXG4gNDI1OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7XFxuIDQyNjpcXHRcXG4gNDI3OlxcdFxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIDQyODpcXHRcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIGZtdF9kZWMsICEhbmV0aWZfdGVzdGluZyhuZXRkZXYpKTtcXG4gNDI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwODoxNDozMi45NjUwNDY4MzdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE0MTczMTgyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSd2ZSBiZWVuIGNhcmVmdWxseSByZXZpZXdpbmcgdGhlc2UgY2hhbmdlcyBhbmQgSSdtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC5cblxuRmlyc3QsIEkgc2VlIHRoZSByZWZhY3RvcmluZyB0byBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYC4gSXQgdGFrZXMgYSBgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZGAsIHdoaWNoIGlzIHN0YW5kYXJkLiBJbXBvcnRhbnRseSwgaW4gdGhlIGBzcGVlZF9zaG93YCBhbmQgYGR1cGxleF9zaG93YCBmdW5jdGlvbnMsIGBjbWRgIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suIE5vdywgaWYgYG5ldGlmX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIGNtZClgIHJldHVybnMgc3VjY2VzcyAoMCksIHdoaWNoIGlzIGtleSwgdGhlbiBgY21kYCBnZXRzIHplcm9lZCBvdXQgKmJlZm9yZSogdGhlIGRyaXZlciBjYWxsYmFjayBwb3B1bGF0ZXMgaXQuIFRoaXMgaXMgaGFuZGxlZCBieSBhIGBtZW1zZXQoKWAgd2l0aGluIHRoZSBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKClgIGZ1bmN0aW9uLiBgc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzYCB0aGVuIHNldHMgYHJldCA9IDBgLiBJZiBgbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzYCBmYWlscyBmb3IgYW55IHJlYXNvbiAoZGV2aWNlIG5vdCBydW5uaW5nLCBlcnJvciwgZXRjLiksIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3NgIHJldHVybnMgYW4gZXJyb3IgY29kZSwgbGlrZSBgLUVJTlZBTGAgb3IgYC1FTk9ERVZgLlxuXG5UaGUgaW1wb3J0YW50IGJpdCBpcyB0aGF0IHRoZSBgY21kYCBmaWVsZHMgKGxpa2UgYGNtZC5iYXNlLnNwZWVkYCBhbmQgYGNtZC5iYXNlLmR1cGxleGApIGFyZSAqb25seSogYWNjZXNzZWQgaWYgYHJldCA9PSAwYCBpLmUuIHdoZW4gaXQgd2FzIGEgc3VjY2Vzc2Z1bCByZXR1cm4gY29kZS4gSSBhcHByZWNpYXRlIHRoaXMgZGVmZW5zaXZlIHByb2dyYW1taW5nLiBGdXJ0aGVybW9yZSwgdGhlIGBzeXNmc19lbWl0YCBmdW5jdGlvbiBhY3R1YWxseSBmb3JtYXRzIHRoZSBkYXRhIGludG8gc3RyaW5ncy9udW1iZXJzIGZvciB0aGUgdXNlciBzcGFjZSwgbm90IGRpcmVjdCBjb3BpZXMgb2Yga2VybmVsIHN0cnVjdHVyZXMuIFRoaXMgcHJldmVudHMgYW55IHJhdyBrZXJuZWwgZGF0YSBiZWluZyBzZW50IG91dC5cblxuQ3J1Y2lhbGx5LCB0aGUgbG9ja2luZyBjaGFuZ2VzIGFyZSB1c2luZyB0aGUgcGVyLWRldmljZSBvcHMgbG9jayAoYG5ldGRldl9sb2NrX29wc2ApIHdoZXJlIGFwcHJvcHJpYXRlIGluc3RlYWQgb2YgcmVseWluZyBzb2xlbHkgb24gUlROTC4gSSdtIGNvbWZvcnRhYmxlIHdpdGggdGhpcy4gTE9DS0RFUCBhbmQgdGhlIHN0YW5kYXJkIGNvbmN1cnJlbmN5IGNoZWNrcyBpbiBLQVNBTiBrZXJuZWwgYnVpbGRzIHdpbGwgY2F0Y2ggYW55IGlzc3VlcyBoZXJlLCBhcyBpcyBzdGFuZGFyZCBwcmFjdGljZS5cblxuVGhlcmVmb3JlLCBnaXZlbiBhbGwgdGhlc2UgZmFjdG9ycywgSSBhbSBjZXJ0YWluIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzLiBObyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLlxuXG5JbiBzdW1tYXJ5OlxuXG4qICAgVGhlIHBhdGNoIGVtcGxveXMgYSBzaGFyZWQgaGVscGVyIGZ1bmN0aW9uIGBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKWAgZm9yIHJlYWRpbmcgdGhlIGBzcGVlZGAgYW5kIGBkdXBsZXhgIGF0dHJpYnV0ZXMgb2YgdGhlIHN5c2ZzLlxuKiAgIFRoaXMgdXNlcyBwZXItZGV2aWNlIGxvY2tpbmcgd2hlcmUgcG9zc2libGUsIHJlZHVjaW5nIHRoZSByZWxpYW5jZSBvbiBSVE5MLlxuKiAgIFRoZSBgZXRodG9vbF9saW5rX2tzZXR0aW5nc2Agc3RydWN0dXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2ssIHdoaWNoIGlzIHplcm9lZCB3aXRoIGBtZW1zZXQoKWAgYmVmb3JlIHRoZSBkcml2ZXIgY2FsbGJhY2sgcG9wdWxhdGVzIGl0LlxuKiAgIFRoZSBjb2RlIG9ubHkgYWNjZXNzZXMgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlIGlmIHRoZSByZXR1cm4gY29kZSBpcyBzdWNjZXNzZnVsLlxuKiAgIFRoZSBvdXRwdXQgdG8gdXNlcnNwYWNlIGlzIGhhbmRsZWQgYnkgdGhlIGBzeXNmc19lbWl0KClgIGZ1bmN0aW9uLCBmb3JtYXR0aW5nIHRoZSBkYXRhIGluc3RlYWQgb2YgcmF3IG1lbW9yeSBjb3BpZXMuXG4qICAgU3RhbmRhcmQgdG9vbHMgc3VjaCBhcyBMT0NLREVQIGFuZCBLQVNBTiBzaG91bGQgaGFuZGxlIGFueSByZWZhY3RvcmluZyBpbnRyb2R1Y2VkIGlzc3VlcyBmcm9tIHRoZSBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24uXG4qICAgVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mb3JtYXRpb24gbGVhaywgaGVuY2UgS01TQU4gaXMgbm90IG5lZWRlZC5cblxuTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODcwLCJPdXRwdXRUb2tlbnMiOjIxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA4OjE0OjQ0LjM4MjM2Nzg0OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBzeXNmcyAnc3BlZWQnIGFuZCAnZHVwbGV4JyBhdHRyaWJ1dGUgcmVhZCBoYW5kbGVycyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uICdzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKScsIGFsbG93aW5nIHRoZSB1c2Ugb2YgcGVyLWRldmljZSBvcHMgbG9ja2luZyAobmV0ZGV2X2xvY2tfb3BzKSBpbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgUlROTC5cXG5cXG5UaGUgc3RhY2stYWxsb2NhdGVkICdzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBjbWQnIHZhcmlhYmxlIGlzIHBhc3NlZCB0byBuZXRpZl9nZXRfbGlua19rc2V0dGluZ3MoKSwgd2hpY2ggemVyb2VzIHRoZSBlbnRpcmUgc3RydWN0dXJlIHdpdGggbWVtc2V0KCkgYmVmb3JlIHF1ZXJ5aW5nIHRoZSBkcml2ZXIgY2FsbGJhY2suIFRoZSBmaWVsZHMgY21kLmJhc2Uuc3BlZWQgYW5kIGNtZC5iYXNlLmR1cGxleCBhcmUgYWNjZXNzZWQgb25seSB3aGVuIHN5c2ZzX2dldF9saW5rX2tzZXR0aW5ncygpIHJldHVybnMgc3VjY2VzcyAoMCksIGFuZCB2YWx1ZXMgYXJlIGZvcm1hdHRlZCBpbnRvIHRleHQgdmlhIHN5c2ZzX2VtaXQoKS4gTG9ja2luZyBhbmQgY29uY3VycmVuY3kgYXNwZWN0cyBvZiB0aGlzIHBhdGNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVhayByaXNrcywgc28gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgc3lzZnMgJ3NwZWVkJyBhbmQgJ2R1cGxleCcgYXR0cmlidXRlIHJlYWQgaGFuZGxlcnMgaW50byBhIGhlbHBlciBmdW5jdGlvbiAnc3lzZnNfZ2V0X2xpbmtfa3NldHRpbmdzKCknLCBhbGxvd2luZyB0aGUgdXNlIG9mIHBlci1kZXZpY2Ugb3BzIGxvY2tpbmcgKG5ldGRldl9sb2NrX29wcykgaW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIFJUTkwuXFxuXFxuVGhlIHN0YWNrLWFsbG9jYXRlZCAnc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kJyB2YXJpYWJsZSBpcyBwYXNzZWQgdG8gbmV0aWZfZ2V0X2xpbmtfa3NldHRpbmdzKCksIHdoaWNoIHplcm9lcyB0aGUgZW50aXJlIHN0cnVjdHVyZSB3aXRoIG1lbXNldCgpIGJlZm9yZSBxdWVyeWluZyB0aGUgZHJpdmVyIGNhbGxiYWNrLiBUaGUgZmllbGRzIGNtZC5iYXNlLnNwZWVkIGFuZCBjbWQuYmFzZS5kdXBsZXggYXJlIGFjY2Vzc2VkIG9ubHkgd2hlbiBzeXNmc19nZXRfbGlua19rc2V0dGluZ3MoKSByZXR1cm5zIHN1Y2Nlc3MgKDApLCBhbmQgdmFsdWVzIGFyZSBmb3JtYXR0ZWQgaW50byB0ZXh0IHZpYSBzeXNmc19lbWl0KCkuIExvY2tpbmcgYW5kIGNvbmN1cnJlbmN5IGFzcGVjdHMgb2YgdGhpcyBwYXRjaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIGJ1aWxkcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWsgcmlza3MsIHNvIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow7c6zc[1] Phase: Succeeded StartedAt: 2026-08-31 08:14:56 +0000 UTC FinishedAt: 2026-08-31 08:14:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 08:14:56 +0000 UTC FinishedAt: 2026-08-31 08:14:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2] Phase: Succeeded StartedAt: 2026-08-31 08:14:56 +0000 UTC FinishedAt: 2026-08-31 12:07:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 08:14:56 +0000 UTC FinishedAt: 2026-08-31 12:07:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 08:14:56 +0000 UTC FinishedAt: 2026-08-31 08:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 08:14:56 +0000 UTC FinishedAt: 2026-08-31 08:15:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7c6zc/series-workflow7c6zc-convert-artifact-2270068838/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 08:15:06 +0000 UTC FinishedAt: 2026-08-31 08:34:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 08:15:06 +0000 UTC FinishedAt: 2026-08-31 08:34:13 +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:*f21c8a76-29bd-4c5a-817b-ca2314f45a47,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-workflow7c6zc/series-workflow7c6zc-convert-artifact-2270068838/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": "4b649fc5-66a3-433d-bb6d-cacb9284daf5", "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-workflow7c6zc/series-workflow7c6zc-build-action-1599021052/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 08:15:06 +0000 UTC FinishedAt: 2026-08-31 08:34:00 +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:*f21c8a76-29bd-4c5a-817b-ca2314f45a47,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-workflow7c6zc/series-workflow7c6zc-convert-artifact-2270068838/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": "4b649fc5-66a3-433d-bb6d-cacb9284daf5", "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-workflow7c6zc/series-workflow7c6zc-build-action-1599021052/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 08:34:13 +0000 UTC FinishedAt: 2026-08-31 08:34:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 08:34:13 +0000 UTC FinishedAt: 2026-08-31 08:34:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 08:34:13 +0000 UTC FinishedAt: 2026-08-31 08:34:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 08:34:13 +0000 UTC FinishedAt: 2026-08-31 08:34:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7c6zc/series-workflow7c6zc-convert-artifact-2187004089/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 08:34:24 +0000 UTC FinishedAt: 2026-08-31 08:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 08:34:24 +0000 UTC FinishedAt: 2026-08-31 08:35:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4b649fc5-66a3-433d-bb6d-cacb9284daf5,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-workflow7c6zc/series-workflow7c6zc-build-action-1599021052/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-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 08:36:12 +0000 UTC FinishedAt: 2026-08-31 08:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 08:36:12 +0000 UTC FinishedAt: 2026-08-31 08:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 08:36:12 +0000 UTC FinishedAt: 2026-08-31 08:59:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 08:36:12 +0000 UTC FinishedAt: 2026-08-31 08:59:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f21c8a76-29bd-4c5a-817b-ca2314f45a47,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-workflow7c6zc/series-workflow7c6zc-convert-artifact-2187004089/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": "1f7aa7ae-20be-4f72-b4e3-be7c78b97554", "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-workflow7c6zc/series-workflow7c6zc-build-action-1192681877/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 08:36:12 +0000 UTC FinishedAt: 2026-08-31 08:59:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f21c8a76-29bd-4c5a-817b-ca2314f45a47,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-workflow7c6zc/series-workflow7c6zc-convert-artifact-2187004089/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": "1f7aa7ae-20be-4f72-b4e3-be7c78b97554", "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-workflow7c6zc/series-workflow7c6zc-build-action-1192681877/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 08:59:32 +0000 UTC FinishedAt: 2026-08-31 08:59:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 08:59:32 +0000 UTC FinishedAt: 2026-08-31 08:59:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 08:59:32 +0000 UTC FinishedAt: 2026-08-31 09:01:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 08:59:32 +0000 UTC FinishedAt: 2026-08-31 09:01:27 +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:*1f7aa7ae-20be-4f72-b4e3-be7c78b97554,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-workflow7c6zc/series-workflow7c6zc-build-action-1192681877/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-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 09:01:37 +0000 UTC FinishedAt: 2026-08-31 12:07:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 09:01:37 +0000 UTC FinishedAt: 2026-08-31 12:07:25 +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":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"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:*4b649fc5-66a3-433d-bb6d-cacb9284daf5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1f7aa7ae-20be-4f72-b4e3-be7c78b97554,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-workflow7c6zc/series-workflow7c6zc-build-action-1599021052/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-workflow7c6zc/series-workflow7c6zc-build-action-1192681877/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 09:01:37 +0000 UTC FinishedAt: 2026-08-31 09:01:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 09:01:37 +0000 UTC FinishedAt: 2026-08-31 09:01:47 +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":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"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-workflow7c6zc/series-workflow7c6zc-convert-artifact-1398447662/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 09:01:37 +0000 UTC FinishedAt: 2026-08-31 09:01:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 09:01:37 +0000 UTC FinishedAt: 2026-08-31 09:01:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 09:01:37 +0000 UTC FinishedAt: 2026-08-31 09:01:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 09:01:57 +0000 UTC FinishedAt: 2026-08-31 12:07:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7c6zc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netif_get_link_ksettings","speed_show","duplex_show","sysfs_get_link_ksettings"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1bb784eb6e38fd73143f021608e4ef3095d0c0d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SYSFS","NET"],"series_id":"b09daea7-2916-44de-800b-e07d85254391","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 09:01:57 +0000 UTC FinishedAt: 2026-08-31 12:07:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4b649fc5-66a3-433d-bb6d-cacb9284daf5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1f7aa7ae-20be-4f72-b4e3-be7c78b97554,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-workflow7c6zc/series-workflow7c6zc-build-action-1599021052/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-workflow7c6zc/series-workflow7c6zc-build-action-1192681877/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-workflow7c6zc/series-workflow7c6zc-convert-artifact-1398447662/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,}