Name: series-workflowcdv9b Phase: Succeeded StartedAt: 2026-08-01 17:44:13 +0000 UTC FinishedAt: 2026-08-01 21:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[0] Phase: Succeeded StartedAt: 2026-08-01 17:44:13 +0000 UTC FinishedAt: 2026-08-01 18:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 17:44:13 +0000 UTC FinishedAt: 2026-08-01 18:07:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "c91e80ab-050e-47ba-89c4-067e835c87c6" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nbd_ioctl", "nbd_genl_connect", "nbd_genl_reconfigure", "nbd_genl_disconnect", "nbd_xmit_timeout" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfZGlzY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfeG1pdF90aW1lb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gcHJvcGVybHkgaGFuZGxlIHBhcnRpYWwgc2VuZHMgYW5kIGRlYWQgc29ja2V0cywgcHJldmVudGluZyBzb2NrZXQgcmV1c2Ugd2hlbiBhIHJlcXVlc3QgaXMgcGFydGlhbGx5IHRyYW5zbWl0dGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBkcml2ZXIgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2ZlZDgwNGQ1YjViZWY5MjJkZmQ5NTBjZDUyMDEwY2FiZWMwNGI4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTg6MDU6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjcuLjdhNDYyYTYyNjMwNmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMzI3LDggJiM0MzszMjcsOCBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXG4gXHRcdH1cbiBcdH1cbiBcdG5zb2NrLVx1MDAzZWRlYWQgPSB0cnVlO1xuLVx0bnNvY2stXHUwMDNlcGVuZGluZyA9IE5VTEw7XG4tXHRuc29jay1cdTAwM2VzZW50ID0gMDtcbiYjNDM7XHRpZiAoIW5zb2NrLVx1MDAzZXBlbmRpbmcpXG4mIzQzO1x0XHRuc29jay1cdTAwM2VzZW50ID0gMDtcbiB9XG4gXG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbkBAIC03OTMsOCAmIzQzOzc5MywxMCBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG5iZF9zZW5kX2NtZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX2NtZCAqY21kLFxuIFx0ICpcbiBcdCAqIFdlIG11c3QgcnVuIGZyb20gcGVuZGluZyB3b3JrIGZ1bmN0aW9uLlxuIFx0ICogKi9cbi1cdGlmICh0ZXN0X2JpdChOQkRfQ01EX1BBUlRJQUxfU0VORCwgXHUwMDI2Y21kLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRpZiAodGVzdF9iaXQoTkJEX0NNRF9QQVJUSUFMX1NFTkQsIFx1MDAyNmNtZC1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdG5iZF9tYXJrX25zb2NrX2RlYWQobmJkLCBuc29jaywgMSk7XG4gXHRcdHJldHVybiBCTEtfU1RTX09LO1xuJiM0MztcdH1cbiBcbiBcdC8qIHJldHJ5IG9uIGEgZGlmZmVyZW50IHNvY2tldCAqL1xuIFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG5AQCAtODI2LDggJiM0Mzs4MjgsMTggQEAgc3RhdGljIHZvaWQgbmJkX3BlbmRpbmdfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRpZiAoIW5zb2NrLVx1MDAzZXBlbmRpbmcpXG4gXHRcdFx0YnJlYWs7XG4gXG4mIzQzO1x0XHRpZiAobnNvY2stXHUwMDNlZGVhZClcbiYjNDM7XHRcdFx0Z290byBkZWFkO1xuJiM0MztcbiBcdFx0LyogZG9uJiMzOTt0IGJvdGhlciB0aW1lb3V0IGhhbmRsZXIgZm9yIHBhcnRpYWwgc2VuZGluZyAqL1xuIFx0XHRpZiAoUkVBRF9PTkNFKGppZmZpZXMpICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMod2FpdF9tcykgXHUwMDNlPSBkZWFkbGluZSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBUaGUgc29ja2V0IGNvbnRhaW5zIGEgcGFydGlhbGx5IHRyYW5zbWl0dGVkIHJlcXVlc3RcbiYjNDM7XHRcdFx0ICogYW5kIGNhbm5vdCBiZSByZXVzZWQgZm9yIGFub3RoZXIgTkJEIHJlcXVlc3QuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpO1xuJiM0MztcdFx0XHRuc29jay1cdTAwM2VwZW5kaW5nID0gTlVMTDtcbiYjNDM7XHRcdFx0bnNvY2stXHUwMDNlc2VudCA9IDA7XG4gXHRcdFx0Y21kLVx1MDAzZXN0YXR1cyA9IEJMS19TVFNfSU9FUlI7XG4gXHRcdFx0YmxrX21xX2NvbXBsZXRlX3JlcXVlc3QocmVxKTtcbiBcdFx0XHRicmVhaztcbkBAIC04NDAsNiAmIzQzOzg1MiwxOCBAQCBzdGF0aWMgdm9pZCBuYmRfcGVuZGluZ19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNtZC1cdTAwM2Vsb2NrKTtcbiBcdG5iZF9jb25maWdfcHV0KG5iZCk7XG4mIzQzO1x0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBDb21wbGV0ZSB0aGUgcmVxdWVzdCBoZXJlOyBuYmRfY2xlYXJfcmVxKCkgd2lsbCBub3QgaGFuZGxlIGl0LiAqL1xuJiM0MztkZWFkOlxuJiM0MztcdG5zb2NrLVx1MDAzZXBlbmRpbmcgPSBOVUxMO1xuJiM0MztcdG5zb2NrLVx1MDAzZXNlbnQgPSAwO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuc29jay1cdTAwM2V0eF9sb2NrKTtcbiYjNDM7XHRjbGVhcl9iaXQoTkJEX0NNRF9QQVJUSUFMX1NFTkQsIFx1MDAyNmNtZC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Y21kLVx1MDAzZXN0YXR1cyA9IEJMS19TVFNfSU9FUlI7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmNtZC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRibGtfbXFfY29tcGxldGVfcmVxdWVzdChyZXEpO1xuJiM0MztcdG5iZF9jb25maWdfcHV0KG5iZCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmJkX3JlYWRfcmVwbHkoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IHNvY2tldCAqc29jayxcbkBAIC0xMzc2LDYgJiM0MzsxNDAwLDEwIEBAIHN0YXRpYyBpbnQgbmJkX3JlY29ubmVjdF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5zb2NrLVx1MDAzZXR4X2xvY2spO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4mIzQzO1x0XHRpZiAobnNvY2stXHUwMDNlcGVuZGluZykge1xuJiM0MztcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bnNvY2stXHUwMDNldHhfbG9jayk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuIFx0XHRza19zZXRfbWVtYWxsb2Moc29jay1cdTAwM2Vzayk7XG4gXHRcdGlmIChuYmQtXHUwMDNldGFnX3NldC50aW1lb3V0KVxuIFx0XHRcdHNvY2stXHUwMDNlc2stXHUwMDNlc2tfc25kdGltZW8gPSBuYmQtXHUwMDNldGFnX3NldC50aW1lb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Rpc2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX3htaXRfdGltZW91dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIHByb3Blcmx5IGhhbmRsZSBwYXJ0aWFsIHNlbmRzIGFuZCBkZWFkIHNvY2tldHMsIHByZXZlbnRpbmcgc29ja2V0IHJldXNlIHdoZW4gYSByZXF1ZXN0IGlzIHBhcnRpYWxseSB0cmFuc21pdHRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNmZWQ4MDRkNWI1YmVmOTIyZGZkOTUwY2Q1MjAxMGNhYmVjMDRiOGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDE4OjA1OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggOGYxMDc2MmU5MGVmNy4uN2E0NjJhNjI2MzA2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0zMjcsOCAmIzQzOzMyNyw4IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jaywKIAkJfQogCX0KIAluc29jay0mZ3Q7ZGVhZCA9IHRydWU7Ci0JbnNvY2stJmd0O3BlbmRpbmcgPSBOVUxMOwotCW5zb2NrLSZndDtzZW50ID0gMDsKJiM0MzsJaWYgKCFuc29jay0mZ3Q7cGVuZGluZykKJiM0MzsJCW5zb2NrLSZndDtzZW50ID0gMDsKIH0KIAogc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSkKQEAgLTc5Myw4ICYjNDM7NzkzLDEwIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX3NlbmRfY21kKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfY21kICpjbWQsCiAJICoKIAkgKiBXZSBtdXN0IHJ1biBmcm9tIHBlbmRpbmcgd29yayBmdW5jdGlvbi4KIAkgKiAqLwotCWlmICh0ZXN0X2JpdChOQkRfQ01EX1BBUlRJQUxfU0VORCwgJmFtcDtjbWQtJmd0O2ZsYWdzKSkKJiM0MzsJaWYgKHRlc3RfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCAmYW1wO2NtZC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQluYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpOwogCQlyZXR1cm4gQkxLX1NUU19PSzsKJiM0MzsJfQogCiAJLyogcmV0cnkgb24gYSBkaWZmZXJlbnQgc29ja2V0ICovCiAJZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtJmd0O2Rpc2spLApAQCAtODI2LDggJiM0Mzs4MjgsMTggQEAgc3RhdGljIHZvaWQgbmJkX3BlbmRpbmdfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlpZiAoIW5zb2NrLSZndDtwZW5kaW5nKQogCQkJYnJlYWs7CiAKJiM0MzsJCWlmIChuc29jay0mZ3Q7ZGVhZCkKJiM0MzsJCQlnb3RvIGRlYWQ7CiYjNDM7CiAJCS8qIGRvbiYjMzk7dCBib3RoZXIgdGltZW91dCBoYW5kbGVyIGZvciBwYXJ0aWFsIHNlbmRpbmcgKi8KIAkJaWYgKFJFQURfT05DRShqaWZmaWVzKSAmIzQzOyBtc2Vjc190b19qaWZmaWVzKHdhaXRfbXMpICZndDs9IGRlYWRsaW5lKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUaGUgc29ja2V0IGNvbnRhaW5zIGEgcGFydGlhbGx5IHRyYW5zbWl0dGVkIHJlcXVlc3QKJiM0MzsJCQkgKiBhbmQgY2Fubm90IGJlIHJldXNlZCBmb3IgYW5vdGhlciBOQkQgcmVxdWVzdC4KJiM0MzsJCQkgKi8KJiM0MzsJCQluYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpOwomIzQzOwkJCW5zb2NrLSZndDtwZW5kaW5nID0gTlVMTDsKJiM0MzsJCQluc29jay0mZ3Q7c2VudCA9IDA7CiAJCQljbWQtJmd0O3N0YXR1cyA9IEJMS19TVFNfSU9FUlI7CiAJCQlibGtfbXFfY29tcGxldGVfcmVxdWVzdChyZXEpOwogCQkJYnJlYWs7CkBAIC04NDAsNiAmIzQzOzg1MiwxOCBAQCBzdGF0aWMgdm9pZCBuYmRfcGVuZGluZ19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Y21kLSZndDtsb2NrKTsKIAluYmRfY29uZmlnX3B1dChuYmQpOwomIzQzOwlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIENvbXBsZXRlIHRoZSByZXF1ZXN0IGhlcmU7IG5iZF9jbGVhcl9yZXEoKSB3aWxsIG5vdCBoYW5kbGUgaXQuICovCiYjNDM7ZGVhZDoKJiM0MzsJbnNvY2stJmd0O3BlbmRpbmcgPSBOVUxMOwomIzQzOwluc29jay0mZ3Q7c2VudCA9IDA7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25zb2NrLSZndDt0eF9sb2NrKTsKJiM0MzsJY2xlYXJfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCAmYW1wO2NtZC0mZ3Q7ZmxhZ3MpOwomIzQzOwljbWQtJmd0O3N0YXR1cyA9IEJMS19TVFNfSU9FUlI7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2NtZC0mZ3Q7bG9jayk7CiYjNDM7CWJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KHJlcSk7CiYjNDM7CW5iZF9jb25maWdfcHV0KG5iZCk7CiB9CiAKIHN0YXRpYyBpbnQgbmJkX3JlYWRfcmVwbHkoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IHNvY2tldCAqc29jaywKQEAgLTEzNzYsNiAmIzQzOzE0MDAsMTAgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJCW11dGV4X3VubG9jaygmYW1wO25zb2NrLSZndDt0eF9sb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiYjNDM7CQlpZiAobnNvY2stJmd0O3BlbmRpbmcpIHsKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDtuc29jay0mZ3Q7dHhfbG9jayk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiAJCXNrX3NldF9tZW1hbGxvYyhzb2NrLSZndDtzayk7CiAJCWlmIChuYmQtJmd0O3RhZ19zZXQudGltZW91dCkKIAkJCXNvY2stJmd0O3NrLSZndDtza19zbmR0aW1lbyA9IG5iZC0mZ3Q7dGFnX3NldC50aW1lb3V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCwgYXMgYW4gZXhwZXJ0IGluIGJsb2NrIGRldmljZSBkcml2ZXJzLCBmb2N1c2luZyBvbiBOQkQ6CgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTkJEIFBhdGNoKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgdGhlIGhlYXJ0IG9mIHRoZSBOQkQgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHksIGBkcml2ZXJzL2Jsb2NrL25iZC5jYC4gVGhlIGZhY3QgdGhhdCBpdCBtb2RpZmllcyBgbmJkX21hcmtfbnNvY2tfZGVhZGAsIGBuYmRfc2VuZF9jbWRgLCBgbmJkX3BlbmRpbmdfY21kX3dvcmtgLCBhbmQgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggc29tZSBsb3ctbGV2ZWwgbmV0d29yayBpbnRlcmFjdGlvbnMgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgTkJEIHByb3RvY29sLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgaG93IHRoZSBkcml2ZXIgY29wZXMgd2l0aCBwYXJ0aWFsIHNlbmRzIGFuZCBwb3RlbnRpYWxseSBkZWFkIG9yIGZsYWt5IHNvY2tldHMuIFRoaXMga2luZCBvZiBjb2RlIGlzIGFsd2F5cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIG5ldHdvcmsgaW50ZXJhY3Rpb25zIGFyZSBpbmhlcmVudGx5IGNvbXBsZXgsIGFuZCBzdWJ0bGUgdGltaW5nIGlzc3VlcyBvciBtYWxmb3JtZWQgZGF0YSBjYW4gbGVhZCB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3Igc3VidGxlIGRhdGEgY29ycnVwdGlvbi4KCkdpdmVuIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYXJlYXMgcmVsYXRlZCB0byBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIGNvbW1hbmQgdHJhbnNtaXNzaW9uLCBhbmQgcmUtZXN0YWJsaXNobWVudCBvZiBjb21tdW5pY2F0aW9uIGFmdGVyIGFuIGVycm9yLiBUaGF0IG1lYW5zIEkmIzM5O20gZ29pbmcgdG8gYmUgcGF5aW5nIHZlcnkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyBpdCBoYW5kbGVzIGVkZ2UgY2FzZXMsIGVycm9yIGNvbmRpdGlvbnMsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoZSBmYWNlIG9mIHRoZXNlIGNoYW5nZXMuCgpOZXh0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBOQkQgY29uZmlndXJhdGlvbiB0byBzZWUgaG93IHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZpcnN0IHBsYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gY2hlY2sgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZGlyZWN0bHksIG9yIGFsdGVybmF0aXZlbHksIEkgY291bGQganVzdCBncmVwIGZvciBzb21ldGhpbmcgbGlrZSBgbmJkLm9gIGluIGBkcml2ZXJzL2Jsb2NrL01ha2VmaWxlYCB0byBmaW5kIGFueSByZWxldmFudCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzLiBUaGlzIHdheSwgSSBjYW4gcXVpY2tseSB2ZXJpZnkgd2hldGhlciBOQkQgaXMgZW5hYmxlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgdG8gY29udHJvbCBpdHMgYmVoYXZpb3IgZHVyaW5nIHRlc3RpbmcuIFRoaXMgaXMgY3J1Y2lhbCBmb3Igc2V0dGluZyB1cCB0aGUgcmlnaHQgdGVzdCBlbnZpcm9ubWVudCBmb3IgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19TVU5WREMpXHRcdCYjNDM7PSBzdW52ZGMub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0yNC1cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JMS19ERVZfTkJEKVx0JiM0Mzs9IG5iZC5vXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19WSVJUSU9fQkxLKVx0JiM0Mzs9IHZpcnRpb19ibGsub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjb25maWcgb3B0aW9uIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBCTEtfREVWX05CRGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzLCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYmxvY2sgZGV2aWNlIHN1YnN5c3RlbS4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGJsb2NrIGRldmljZSBkcml2ZXJzIGFyZSBkZWZpbmVkLCBhbG9uZyB3aXRoIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgZmVhdHVyZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoYXQgZmlsZSB0byBzZWUgd2hhdCB0aGlzIGBCTEtfREVWX05CRGAgZGVwZW5kcyBvbiBhbmQgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgZWxzZSBJIHNob3VsZCBiZSBhd2FyZSBvZi4gS25vd2luZyBpdHMgY29udGV4dCB3aWxsIGdpdmUgbWUgYSBoZWFkIHN0YXJ0IGluIHVuZGVyc3RhbmRpbmcgd2h5IGl0JiMzOTtzIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9OQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODU0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYXQgcGxheS4gSXQmIzM5O3MgYSBjcml0aWNhbCBpbml0aWFsIGFzc2Vzc21lbnQuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IG1hcCBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZWxlbWVudHMgaW52b2x2ZWQuIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBleHRlcm5hbCBzeXN0ZW1zIGRvZXMgdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudCByZWx5IG9uPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGZhY3RvcnMgb3IgZG93bnN0cmVhbSBpbXBsaWNhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBjb25zaWRlcmF0aW9uPyBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gYmUgY2F1Z2h0IG9mZiBndWFyZCBieSBhIGNhc2NhZGluZyBmYWlsdXJlIG9yIGluY29tcGF0aWJpbGl0eSBpc3N1ZSBmdXJ0aGVyIGRvd24gdGhlIGxpbmUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHRob3JvdWdoIGRlcGVuZGVuY3kgc2NhbiBhbmQgbWFwcGluZyB0byBidWlsZCBhIHJvYnVzdCBtb2RlbCBiZWZvcmUgbW92aW5nIG9uLiBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHJlcXVpcmUgYSByZS13cml0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9OQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTgxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQmxvY2sgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBibG9jayBkcml2ZXIgY29uZmlndXJhdGlvbnMsIHNvIGxldCYjMzk7cyBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTYuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBob3cgdGhlIHZhcmlvdXMgb3B0aW9ucyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdHMgYXJlIGluIHBsYXkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzZWxlY3Rpb24gb2YgZGlmZmVyZW50IGJsb2NrIGRyaXZlcnMsIHRoZWlyIGZlYXR1cmVzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBUaGlzIHNob3VsZCBwcm92aWRlIGNvbnRleHQgZm9yIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0IGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHQgIFRoZSBoaXN0b3JpYyBkZWZhdWx0IGlzIDguIElmIGEgbGF0ZSAyMDExIHZlcnNpb24gb2YgbG9zZXR1cCg4KVxuIDE5MTpcdFx0ICBpcyB1c2VkLCBpdCBjYW4gYmUgc2V0IHRvIDAsIHNpbmNlIG5lZWRlZCBsb29wIGRldmljZXMgY2FuIGJlXG4gMTkyOlx0XHQgIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB3aXRoIHRoZSAvZGV2L2xvb3AtY29udHJvbCBpbnRlcmZhY2UuXG4gMTkzOlx0XG4gMTk0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG4gMTk1Olx0XG4gMTk2Olx0Y29uZmlnIEJMS19ERVZfTkJEXG4gMTk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMTk4Olx0XHRkZXBlbmRzIG9uIE5FVFxuIDE5OTpcdFx0aGVscFxuIDIwMDpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91ciBjb21wdXRlciB0byBiZSBhIGNsaWVudCBmb3IgbmV0d29ya1xuIDIwMTpcdFx0ICBibG9jayBkZXZpY2VzLCBpLmUuIGl0IHdpbGwgYmUgYWJsZSB0byB1c2UgYmxvY2sgZGV2aWNlcyBleHBvcnRlZCBieVxuIDIwMjpcdFx0ICBzZXJ2ZXJzIChtb3VudCBmaWxlIHN5c3RlbXMgb24gdGhlbSBldGMuKS4gQ29tbXVuaWNhdGlvbiBiZXR3ZWVuXG4gMjAzOlx0XHQgIGNsaWVudCBhbmQgc2VydmVyIHdvcmtzIG92ZXIgVENQL0lQIG5ldHdvcmtpbmcsIGJ1dCB0byB0aGUgY2xpZW50XG4gMjA0Olx0XHQgIHByb2dyYW0gdGhpcyBpcyBoaWRkZW46IGl0IGxvb2tzIGxpa2UgYSByZWd1bGFyIGxvY2FsIGZpbGUgYWNjZXNzIHRvXG4gMjA1Olx0XHQgIGEgYmxvY2sgZGV2aWNlIHNwZWNpYWwgZmlsZSBzdWNoIGFzIC9kZXYvbmQwLlxuIDIwNjpcdFxuIDIwNzpcdFx0ICBOZXR3b3JrIGJsb2NrIGRldmljZXMgYWxzbyBhbGxvd3MgeW91IHRvIHJ1biBhIGJsb2NrLWRldmljZSBpblxuIDIwODpcdFx0ICB1c2VybGFuZCAobWFraW5nIHNlcnZlciBhbmQgY2xpZW50IHBoeXNpY2FsbHkgdGhlIHNhbWUgY29tcHV0ZXIsXG4gMjA5Olx0XHQgIGNvbW11bmljYXRpbmcgdXNpbmcgdGhlIGxvb3BiYWNrIG5ldHdvcmsgZGV2aWNlKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5CRCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IG9uIGBORVRgLiAgVGhhdCB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgYmxvY2sgZGV2aWNlcywgc3BlY2lmaWNhbGx5LCB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgY29uZmlnLCB3aGljaCBpcyBgQkxLX0RFVl9OQkRgLiBHb29kIHRvIGhhdmUgdGhhdCBjb25maXJtZWQgcmlnaHQgYXdheS4KCk5vdywgbXkgZm9jdXMgaXMgdGhlIHN5bWJvbHMgYmVpbmcgbW9kaWZpZWQuIFRoZSBwYXRjaCB0b3VjaGVzOiBgbmJkX21hcmtfbnNvY2tfZGVhZGAsIGBuYmRfc2V0X3NpemVgLCBgbmJkX3NlbmRfY21kYCwgYG5iZF9wZW5kaW5nX2NtZF93b3JrYCwgYG5iZF9yZWFkX3JlcGx5YCwgYW5kIGBuYmRfcmVjb25uZWN0X3NvY2tldGAuIEhtbSwgc29tZXRoaW5nIGp1bXBzIG91dCDigJMgKmFsbCogb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEl0IG1lYW5zIHRoZXkmIzM5O3JlIG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbnRleHQuIFdoYXQgY2FsbHMgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucz8gT3IsIHB1dCBhbm90aGVyIHdheSwgd2hhdCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGRyaXZlcnMvYmxvY2svbmJkLmNgIG1pZ2h0IGJlIHRoZSBlbnRyeSBwb2ludHMgb3Iga2V5IGludGVyZmFjZXMgdGhhdCAqZG8qIGNhbGwgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucz8gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBvZiB0aGUgcGF0Y2ggbGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX3JlY29ubmVjdF9zb2NrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTMwMT1zdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM3My1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTM3NDpzdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzc1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIzNzU9c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5NS1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ5NjpcdFx0XHRyZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5Ny1cdFx0XHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0OgoKKipNeSBCcmFpbiYjMzk7cyBUcmFjZSBUaHJvdWdoIHRoZSBOQkQgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGRyaXZlciBwZXJzcGVjdGl2ZS4gSSBzZWUgdGhhdCB0aGUgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCBmdW5jdGlvbiBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gIFRoYXQmIzM5O3MgbXkgaW5pdGlhbCBlbnRyeSBwb2ludCBmb3Igc29ja2V0IHJlY29ubmVjdGlvbiwgaW5pdGlhdGVkIGJ5IGEgY29uZmlndXJhdGlvbiBjaGFuZ2UgdGhyb3VnaCBHZW5lcmljIE5ldGxpbmsuIFRoZW4sIGBuYmRfcGVuZGluZ19jbWRfd29ya2AgZ2V0cyBpbnZva2VkIGFzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uLiBUaGlzIGxpa2VseSBoYW5kbGVzIGFzeW5jaHJvbm91cyBjb21tYW5kIHByb2Nlc3Npbmcgb3IgY29tcGxldGlvbiBhZnRlciB0aGF0IGNvbmZpZ3VyYXRpb24gY2hhbmdlIGhhcHBlbnMuIEZyb20gbXkgZXhwZXJpZW5jZSwgd29ya3F1ZXVlcyBhcmUgZXNzZW50aWFsIGZvciBkZWZlcnJpbmcgc29tZSBvZiB0aG9zZSBibG9ja2luZyBvcGVyYXRpb25zIHRvIHByZXZlbnQga2VybmVsIHRocmVhZCBzdGFydmF0aW9uLiBMYXN0bHksIHRoZSBjb21tYW5kIGZsb3cgbG9va3MgbGlrZSBgbmJkX3NlbmRfY21kYCBpcyBkaXJlY3RseSBjYWxsZWQgYnkgYG5iZF9xdWV1ZV9ycWAuIFNvLCBjb21tYW5kcyBhcmUgYmVpbmcgc2VudCB0aHJvdWdoIHRoZSBuZXR3b3JrIGZyb20gdGhlIHJlcXVlc3QgcXVldWUuIFRoaXMgd29ya2Zsb3cgbWFrZXMgc2Vuc2U6IHJlY29uZmlndXJlIHRyaWdnZXJzIGEgc29ja2V0IHJlY29ubmVjdDsgdGhlIHdvcmtxdWV1ZSBoYW5kbGVzIHBlbmRpbmcgY29tbWFuZHMgYWZ0ZXIgYW55IHNvY2tldCBjaGFuZ2UgaGFwcGVucywgYW5kIGZpbmFsbHksIGNvbW1hbmRzIGFyZSBkaXNwYXRjaGVkIHRvIHRoZSBzb2NrZXQgZnJvbSB0aGUgcmVxdWVzdCBxdWV1ZS4gVGhpcyBpcyBhIHZlcnkgc3RhbmRhcmQgbmV0d29yayBibG9jayBkZXZpY2UgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9zZW5kX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz02MjU9c3RhdGljIHZvaWQgbmJkX3NjaGVkX3BlbmRpbmdfd29yayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtNjQ0LSAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzo2NDU6c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfc2VuZF9jbWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNjQ2LVx0XHRcdFx0IGludCBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTgxMD1zdGF0aWMgdm9pZCBuYmRfcGVuZGluZ19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy04MjYtXHR3aGlsZSAodHJ1ZSkge1xuZHJpdmVycy9ibG9jay9uYmQuYzo4Mjc6XHRcdG5iZF9zZW5kX2NtZChuYmQsIGNtZCwgY21kLVx1MDAzZWluZGV4KTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtODI4LVx0XHRpZiAoIW5zb2NrLVx1MDAzZXBlbmRpbmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xMTQxPXN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX2hhbmRsZV9jbWQoc3RydWN0IG5iZF9jbWQgKmNtZCwgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTIwMC1cdH1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTIwMTpcdHJldCA9IG5iZF9zZW5kX2NtZChuYmQsIGNtZCwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xMjAyLW91dDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mIGEgbmV0d29yayBibG9jayBkZXZpY2UgZHJpdmVyOgoKKipVbmRlcnN0YW5kaW5nIHRoZSBDb21tYW5kIFBhdGgqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29yZSBjb21tYW5kIGhhbmRsaW5nIHdpdGhpbiB0aGUgTkJEIGRyaXZlci4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUgaXMgYG5iZF9oYW5kbGVfY21kYCwgYW5kIEkmIzM5O20gaW1tZWRpYXRlbHkgcmVjb2duaXppbmcgdGhhdCBpdHMgcHJpbWFyeSBmdW5jdGlvbiBpcyB0byBzaGVwaGVyZCBjb21tYW5kcyB0byB0aGVpciB1bHRpbWF0ZSBkZXN0aW5hdGlvbiwgdGhlIG5ldHdvcmsuIFRoZSB2ZXJ5IG5leHQgZnVuY3Rpb24gaW4gdGhlIHByb2Nlc3MgaXMgYG5iZF9zZW5kX2NtZGAuIFNvLCBgbmJkX2hhbmRsZV9jbWRgIGlzIGxpa2UgdGhlIG9yY2hlc3RyYXRvciwgYW5kIGl0IGtub3dzIHRoZSBmdW5jdGlvbiBpdCYjMzk7cyBnb2luZyB0byB1c2UuIEl0IG1ha2VzIHNlbnNlLCBgbmJkX3NlbmRfY21kYCBtdXN0IGhhbmRsZSB0aGUgdGFzayBvZiBhY3R1YWxseSB0cmFuc21pdHRpbmcgdGhlIGNvbW1hbmQgb3ZlciB0aGUgbmV0d29yay4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgZm9ybWF0dGluZyB0aGUgY29tbWFuZCBpbnRvIHRoZSBjb3JyZWN0IE5CRCBwcm90b2NvbCBwYWNrZXRzLCBoYW5kbGluZyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBwcm9jZXNzLCBhbmQgZW5zdXJpbmcgcmVsaWFibGUgZGVsaXZlcnkgdG8gdGhlIHJlbW90ZSBlbmQuIFNvLCBgbmJkX2hhbmRsZV9jbWRgIGlzIHNldHRpbmcgdXAgdGhlIHBpZWNlcywgYW5kIHRoZW4gYG5iZF9zZW5kX2NtZGAgaXMgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcgb2Ygc2VuZGluZyB0aGUgZGF0YSBvdmVyIHRoZSB3aXJlLiBUaGlzIHNlcGFyYXRpb24gb2YgY29uY2VybnMgZmVlbHMgcmlnaHQgZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZHJpdmVyLiBJdOKAmXMgYSBjbGVhbiBhbmQgZWZmaWNpZW50IGRlc2lnbiwgZnJvbSB3aGF0IEkgdW5kZXJzdGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2hhbmRsZV9jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTEyNT1zdGF0aWMgaW50IHdhaXRfZm9yX3JlY29ubmVjdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTE0MC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTE0MTpzdGF0aWMgYmxrX3N0YXR1c190IG5iZF9oYW5kbGVfY21kKHN0cnVjdCBuYmRfY21kICpjbWQsIGludCBpbmRleClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTE0Mi17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xMjA4PXN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTIzMC1cdCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoxMjMxOlx0cmV0ID0gbmJkX2hhbmRsZV9jbWQoY21kLCBoY3R4LVx1MDAzZXF1ZXVlX251bSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyMzItXHRtdXRleF91bmxvY2soXHUwMDI2Y21kLVx1MDAzZWxvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQ4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTkJEIFJlcXVlc3QgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgbmJkX3F1ZXVlX3JxYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIHJlcXVlc3RzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgYWZ0ZXIgYSByZXF1ZXN0IGlzIHF1ZXVlZC4gVGhlIGZsb3cgbG9va3MgbGlrZSBpdCB0aGVuIGNhbGxzIGBuYmRfaGFuZGxlX2NtZGAuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhY3R1YWwgY29tbWFuZCBwcm9jZXNzaW5nIHdpbGwgb2NjdXIuIE15IG5leHQgcXVlc3Rpb24gaXM6IHdoYXQga2luZCBvZiBzb2NrZXQgaXNzdWVzIG1heSBiZSBoYXBwZW5pbmcgYXQgdGhpcyBwb2ludD8gTGV0JiMzOTtzIGNoZWNrIGBuYmRfbWFya19uc29ja19kZWFkYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGVhZCBuZXR3b3JrIHNvY2tldHMuIFVuZGVyc3RhbmRpbmcgdGhhdCB3aWxsIGJlIGtleSBpbiBkaWFnbm9zaW5nIGNvbm5lY3Rpb24gaXNzdWVzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9tYXJrX25zb2NrX2RlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9Mjk5PXN0YXRpYyBpbnQgbmJkX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzA0LVxuZHJpdmVycy9ibG9jay9uYmQuYzozMDU6c3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDYtXHRcdFx0XHRpbnQgbm90aWZ5KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9Mzk4PXN0YXRpYyB2b2lkIHNvY2tfc2h1dGRvd24oc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTQxMC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZuc29jay1cdTAwM2V0eF9sb2NrKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6NDExOlx0XHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDApO1xuZHJpdmVycy9ibG9jay9uYmQuYy00MTItXHRcdG11dGV4X3VubG9jayhcdTAwMjZuc29jay1cdTAwM2V0eF9sb2NrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTQ1MT1zdGF0aWMgZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIG5iZF94bWl0X3RpbWVvdXQoc3RydWN0IHJlcXVlc3QgKnJlcSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTUwMi1cdFx0XHRcdGlmIChjbWQtXHUwMDNlY29va2llID09IG5zb2NrLVx1MDAzZWNvb2tpZSlcbmRyaXZlcnMvYmxvY2svbmJkLmM6NTAzOlx0XHRcdFx0XHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpO1xuZHJpdmVycy9ibG9jay9uYmQuYy01MDQtXHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bnNvY2stXHUwMDNldHhfbG9jayk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz02NDU9c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfc2VuZF9jbWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9jbWQgKmNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTc5Ni1cdGlmICh0ZXN0X2JpdChOQkRfQ01EX1BBUlRJQUxfU0VORCwgXHUwMDI2Y21kLVx1MDAzZWZsYWdzKSkge1xuZHJpdmVycy9ibG9jay9uYmQuYzo3OTc6XHRcdG5iZF9tYXJrX25zb2NrX2RlYWQobmJkLCBuc29jaywgMSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTc5OC1cdFx0cmV0dXJuIEJMS19TVFNfT0s7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy04MDMtXHRcdFx0ICAgIFwmIzM0O1JlcXVlc3Qgc2VuZCBmYWlsZWQsIHJlcXVldWVpbmdcXG5cJiMzNDspO1xuZHJpdmVycy9ibG9jay9uYmQuYzo4MDQ6XHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpO1xuZHJpdmVycy9ibG9jay9uYmQuYy04MDUtXHRuYmRfcmVxdWV1ZV9jbWQoY21kKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTgxMD1zdGF0aWMgdm9pZCBuYmRfcGVuZGluZ19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy04MzktXHRcdFx0ICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjg0MDpcdFx0XHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpO1xuZHJpdmVycy9ibG9jay9uYmQuYy04NDEtXHRcdFx0bnNvY2stXHUwMDNlcGVuZGluZyA9IE5VTEw7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz05OTQ9c3RhdGljIHZvaWQgcmVjdl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEwNDQtXHRtdXRleF9sb2NrKFx1MDAyNm5zb2NrLVx1MDAzZXR4X2xvY2spO1xuZHJpdmVycy9ibG9jay9uYmQuYzoxMDQ1Olx0bmJkX21hcmtfbnNvY2tfZGVhZChuYmQsIG5zb2NrLCAxKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTA0Ni1cdG11dGV4X3VubG9jayhcdTAwMjZuc29jay1cdTAwM2V0eF9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBmb3IgVGVzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRvIGZvY3VzIG91ciB0ZXN0aW5nIGVmZm9ydHMgaW4gdGhlIE5CRCBkcml2ZXIsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIGVudHJ5IHBvaW50cyB3ZSBjYW4gdGFyZ2V0LiBJIG5lZWQgdG8gYXZvaWQgdGhlIHR5cGljYWwsIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBvdGhlcndpc2UsIHRoZSB0ZXN0cyB3aWxsIGJlIHNrZXdlZC4gSSBzaG91bGQgYmUgcHJpb3JpdGl6aW5nIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLCBidXQgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgpSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYSBmZXcgcHJvbWlzaW5nIGNhbmRpZGF0ZXM6IGBuYmRfcXVldWVfcnFgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF94bWl0X3RpbWVvdXRgLCBhbmQgb2YgY291cnNlLCBgcmVjdl93b3JrYC4gQWN0dWFsbHksIHdhaXQsIGByZWN2X3dvcmtgIGlzIHBhcnQgb2YgYSB3b3JrcXVldWUuLi4gbWF5YmUgdGhlIGNvbm5lY3Rpb24gb3IgaW9jdGwgcGF0aHMgYXJlIGFzc29jaWF0ZWQuIGBuYmRfaW9jdGxgIG9yIGBuYmRfZ2VubF9jb25uZWN0YCB3b3VsZCBiZSBtb3JlIGRpcmVjdCwgSSB0aGluay4KCmBuYmRfcXVldWVfcnFgIGNhdGNoZXMgbXkgZXllIGZpcnN0LiBJdCYjMzk7cyB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgcXVldWUgcmVxdWVzdCBjYWxsYmFjayDigJMgZGVmaW5pdGVseSBhIGhvdCBwYXRoISBEYW1uLiBHaXZlbiB0aGUgcHJvbXB0LCBJIHNob3VsZCBwcm9iYWJseSBhdm9pZCBpdCB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEl0JiMzOTtzIHRlbXB0aW5nLCBidXQgbGV0JiMzOTtzIHN0aWNrIHRvIHRoZSBwcm9tcHQuCgpOb3csIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgc2VlbXMgbW9yZSBwcm9taXNpbmcuIEFoLCBpdCYjMzk7cyBhIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVyLiBUaGF0IGZlZWxzIGxpa2UgYSBiZXR0ZXIgZml0LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgbmJkLmNgIGFuZCBzZWUgd2hhdCBuZXRsaW5rIGNvbW1hbmRzIGFyZSBhdmFpbGFibGUuIFRoYXQmIzM5O2xsIGhlbHAgbmFycm93IGRvd24gdGhlIHRlc3Rpbmcgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9nZW5sXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNzQ9c3RhdGljIHZvaWQgbmJkX2Nvbm5lY3RfcmVwbHkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IGluZGV4KTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc1OnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNzYtc3RhdGljIHZvaWQgbmJkX2RlYWRfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yMTE2PW5iZF9kZXZpY2VfcG9saWN5W05CRF9ERVZJQ0VfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIwLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTIxOnN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEyMi17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTM3LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTM4OnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTM5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyMTYtXHRzZXRfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYzoyMjE3Olx0cmV0ID0gbmJkX2dlbmxfc2l6ZV9zZXQoaW5mbywgbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjIxOC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yMzE5PXN0YXRpYyB2b2lkIG5iZF9kaXNjb25uZWN0X2FuZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzMzktXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzNDA6c3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNDEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM3NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjM3NTpzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNzYte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQzNy1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQzODpcdHJldCA9IG5iZF9nZW5sX3NpemVfc2V0KGluZm8sIG5iZCk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0MzktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjUxND1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5iZF9jb25uZWN0X2dlbmxfb3BzW10gPSB7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTE3LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1MTg6XHRcdC5kb2l0XHQ9IG5iZF9nZW5sX2Nvbm5lY3QsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTktXHR9LFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUyMi1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTIzOlx0XHQuZG9pdFx0PSBuYmRfZ2VubF9kaXNjb25uZWN0LFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTI0LVx0fSxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MjctXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUyODpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfcmVjb25maWd1cmUsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MjktXHR9LFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUzMi1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTMzOlx0XHQuZG9pdFx0PSBuYmRfZ2VubF9zdGF0dXMsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MzQtXHR9LFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjUzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5iZF9tY2FzdF9ncnBzW10gPSB7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTQwLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTQxOnN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgbmJkX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU0Mi1cdC5oZHJzaXplXHQ9IDAsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTg2PXN0YXRpYyBpbnQgc3RhdHVzX2NiKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU5MS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjU5MjpzdGF0aWMgaW50IG5iZF9nZW5sX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTkzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2MTItXHRcdGdvdG8gb3V0O1xuZHJpdmVycy9ibG9jay9uYmQuYzoyNjEzOlx0cmVwbHlfaGVhZCA9IGdlbmxtc2dfcHV0X3JlcGx5KHJlcGx5LCBpbmZvLCBcdTAwMjZuYmRfZ2VubF9mYW1pbHksIDAsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2MTQtXHRcdFx0XHQgICAgICAgTkJEX0NNRF9TVEFUVVMpO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjY1Mj1zdGF0aWMgdm9pZCBuYmRfY29ubmVjdF9yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjYwLVx0XHRyZXR1cm47XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI2NjE6XHRtc2dfaGVhZCA9IGdlbmxtc2dfcHV0X3JlcGx5KHNrYiwgaW5mbywgXHUwMDI2bmJkX2dlbmxfZmFtaWx5LCAwLFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjYyLVx0XHRcdFx0ICAgICBOQkRfQ01EX0NPTk5FQ1QpO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjY3Nj1zdGF0aWMgdm9pZCBuYmRfbWNhc3RfaW5kZXgoaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY4NC1cdFx0cmV0dXJuO1xuZHJpdmVycy9ibG9jay9uYmQuYzoyNjg1Olx0bXNnX2hlYWQgPSBnZW5sbXNnX3B1dChza2IsIDAsIDAsIFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgMCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY4Ni1cdFx0XHRcdCAgICAgTkJEX0NNRF9MSU5LX0RFQUQpO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY5Ni1cdGdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWQpO1xuZHJpdmVycy9ibG9jay9uYmQuYzoyNjk3Olx0Z2VubG1zZ19tdWx0aWNhc3QoXHUwMDI2bmJkX2dlbmxfZmFtaWx5LCBza2IsIDAsIDAsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yNjk4LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI3MDg9c3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NDk6XHRpZiAoZ2VubF9yZWdpc3Rlcl9mYW1pbHkoXHUwMDI2bmJkX2dlbmxfZmFtaWx5KSkge1xuZHJpdmVycy9ibG9jay9uYmQuYy0yNzUwLVx0XHRkZXN0cm95X3dvcmtxdWV1ZShuYmRfZGVsX3dxKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI3NzM9c3RhdGljIHZvaWQgX19leGl0IG5iZF9jbGVhbnVwKHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzgxLVx0ICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3ODI6XHRnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KFx1MDAyNm5iZF9nZW5sX2ZhbWlseSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3ODMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTgwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipSZXZpZXdpbmcgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIEludGVyZmFjZSBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgbmV0d29yayBibG9jayBkZXZpY2UgaW50ZXJhY3Rpb24gbWV0aG9kcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb250cm9sIHBsYW5lIG9wdGlvbnMuIEkgc2VlIHdlIGhhdmUgdGhlIGBuYmRfZ2VubGAgY29tbWFuZHM6IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9nZW5sX3N0YXR1c2AuIFRoZXNlIGhhbmRsZSB0aGUgbWFuYWdlbWVudCBhbmQgY29uZmlndXJhdGlvbiBhc3BlY3QuIE5hdHVyYWxseSwgc2luY2UgdGhpcyBpcyBhIGJsb2NrIGRldmljZSwgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBhY2Nlc3MgcGF0aHMuIE5vdyBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGBuYmRfaW9jdGxgIGlzIHRoZSBzdGFuZGFyZCBmb3IgdGhlIGRhdGEgcGxhbmUsIG9yIGlmIHdlIGhhdmUgc29tZXRoaW5nIGVsc2UuIExldCYjMzk7cyBzZWUgaG93IHRob3NlIHdvcmsgdG9nZXRoZXIuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTE2NDg9c3RhdGljIHZvaWQgbmJkX3NldF9jbWRfdGltZW91dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1NjQgdGltZW91dClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NTctLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBjb25maWdfbG9jayBoZWxkICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2NTg6c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjU5LVx0XHQgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzA0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA1OnN0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwNi1cdFx0ICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MjctXHQgICAgKGNtZCA9PSBOQkRfRElTQ09OTkVDVCB8fCBjbWQgPT0gTkJEX0NMRUFSX1NPQ0spKVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzI4Olx0XHRlcnJvciA9IF9fbmJkX2lvY3RsKGJkZXYsIG5iZCwgY21kLCBhcmcpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNzI5LVx0ZWxzZVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MzYtXHQucmVsZWFzZSA9XHRuYmRfcmVsZWFzZSxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgzNzpcdC5pb2N0bCA9XHRuYmRfaW9jdGwsXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4Mzg6XHQuY29tcGF0X2lvY3RsID1cdG5iZF9pb2N0bCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgzOS1cdC5mcmVlX2Rpc2sgPVx0bmJkX2ZyZWVfZGlzayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gS2V5IE5CRCBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2dlbmxfZGlzY29ubmVjdGAgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlLiBUaGV5IHJlcHJlc2VudCB0aGUgY29yZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgTkJEIGRyaXZlci4gSSBicmllZmx5IGNvbnNpZGVyZWQgYG5iZF9xdWV1ZV9ycWAsIHNpbmNlIGl0JiMzOTtzIHRoZSBibG9jayBsYXllciBxdWV1ZSByZXF1ZXN0IGNhbGxiYWNrIGFuZCBhIGRlZmluaXRlIGhvdCBwYXRoLCBidXQgdGhlIHByb21wdCYjMzk7cyBhZHZpY2UgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdCBkaXN0cmlidXRpb25zIGZyb20gc2tld2luZyBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgb21pdCBpdCBmb3Igbm93IGFuZCBzdGljayB3aXRoIHRoZSBpb2N0bCBhbmQgbmV0bGluayBoYW5kbGVycy4KCkhvbGQgb24gYSBzZWNvbmQuLi4gYG5iZF94bWl0X3RpbWVvdXRgIGlzIGFsc28gYSBjcml0aWNhbCBlbnRyeSBwb2ludCByZWxhdGVkIHRvIHRpbWVvdXRzISBBbmQgbXkgcGF0Y2ggKmRvZXMqIG1vZGlmeSB0aW1lb3V0IGhhbmRsaW5nIGluIGBuYmRfcGVuZGluZ19jbWRfd29ya2AsIGRvZXNuJiMzOTt0IGl0PyBUaGF0JiMzOTtzIGRlZmluaXRlbHkgcmVsZXZhbnQuIEkgbmVlZCB0byBpbmNsdWRlIHRoYXQgb25lLiBPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuYmRfeG1pdF90aW1lb3V0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX3htaXRfdGltZW91dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz00MzU9c3RhdGljIHN0cnVjdCBuYmRfY29uZmlnICpuYmRfZ2V0X2NvbmZpZ191bmxvY2tlZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtNDUwLVxuZHJpdmVycy9ibG9jay9uYmQuYzo0NTE6c3RhdGljIGVudW0gYmxrX2VoX3RpbWVyX3JldHVybiBuYmRfeG1pdF90aW1lb3V0KHN0cnVjdCByZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTQ1Mi17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xOTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBuYmRfbXFfb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk2OC1cdC5pbml0X3JlcXVlc3RcdD0gbmJkX2luaXRfcmVxdWVzdCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTk2OTpcdC50aW1lb3V0XHQ9IG5iZF94bWl0X3RpbWVvdXQsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NzAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgUmVsZXZhbnQgTkJEIFN5bWJvbHMqKgoKUmlnaHQsIHNvIGBuYmRfeG1pdF90aW1lb3V0YCBsb29rcyBsaWtlIGEga2V5IHBpZWNlIGhlcmUsIHRoYXQmIzM5O3MgZ29vZCB0byBzZWUuIEkgbmVlZCB0byBzdW1tYXJpemUgdGhlIGNvcmUgc3ltYm9scyB0aGF0IGFyZSB1bmRlciBjb25zaWRlcmF0aW9uIGFuZCBzZWUgaG93IHRoZXkgd29yayB0b2dldGhlci4gSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgbmJkX2lvY3RsYCAtIHByb2JhYmx5IHRoZSBlbnRyeSBwb2ludCBmb3IgZGlyZWN0IGRldmljZSBpbnRlcmFjdGlvbnMuCiogICBgbmJkX2dlbmxfY29ubmVjdGAgLSBsaWtlbHkgaGFuZGxlcyB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHdpdGggdGhlIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2UuCiogICBgbmJkX2dlbmxfcmVjb25maWd1cmVgIC0gc291bmRzIGxpa2UgdGhlIHdheSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIG1vZGlmaWVkIHZpYSBuZXRsaW5rLgoqICAgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgIC0gcHJlc3VtYWJseSBob3cgY29ubmVjdGlvbnMgYXJlIGNsb3NlZC4KKiAgIGBuYmRfeG1pdF90aW1lb3V0YCAtIHRoZSB0aW1lb3V0IGZ1bmN0aW9uLCBpbXBvcnRhbnQgZm9yIHRoaXMgYW5hbHlzaXMuCgpOb3csIGEgY3JpdGljYWwgcG9pbnQg4oCTIHRoZSBwYXRjaCB0b3VjaGVzIGBuYmRfcGVuZGluZ19jbWRfd29ya2AuIEhtbSwgdGhhdCYjMzk7cyBhICp3b3JrcXVldWUqIGZ1bmN0aW9uLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBob3cgaXQgZ2V0cyB0cmlnZ2VyZWQuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEhvdyBpcyB0aGlzIHdvcmtxdWV1ZSBhY3R1YWxseSAqc2NoZWR1bGVkKj8gQSBxdWljayBsb29rIHJldmVhbHMgdGhhdCBgbmJkX3NjaGVkX3BlbmRpbmdfd29ya2AgaXMgdGhlIHNjaGVkdWxpbmcgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGxpbmsuIFRoYXQgdGVsbHMgbWUgd2hhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkIHRvIGV4YW1pbmUgaG93IHRoZSB3b3JrIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9zY2hlZF9wZW5kaW5nX3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9NjEyPXN0YXRpYyBpbmxpbmUgaW50IHdhc19pbnRlcnJ1cHRlZChpbnQgcmVzdWx0KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtNjI0LSAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzo2MjU6c3RhdGljIHZvaWQgbmJkX3NjaGVkX3BlbmRpbmdfd29yayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuZHJpdmVycy9ibG9jay9uYmQuYy02MjYtXHRcdFx0XHQgICBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9NjQ1PXN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX3NlbmRfY21kKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy03MjUtXHRcdFx0aWYgKHNlbnQpIHtcbmRyaXZlcnMvYmxvY2svbmJkLmM6NzI2Olx0XHRcdFx0bmJkX3NjaGVkX3BlbmRpbmdfd29yayhuYmQsIG5zb2NrLCBjbWQsIHNlbnQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy03MjctXHRcdFx0XHRyZXR1cm4gQkxLX1NUU19PSztcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTc2My1cdFx0XHRcdGlmICh3YXNfaW50ZXJydXB0ZWQocmVzdWx0KSkge1xuZHJpdmVycy9ibG9jay9uYmQuYzo3NjQ6XHRcdFx0XHRcdG5iZF9zY2hlZF9wZW5kaW5nX3dvcmsobmJkLCBuc29jaywgY21kLCBzZW50KTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtNzY1LVx0XHRcdFx0XHRyZXR1cm4gQkxLX1NUU19PSztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5CRCBOZXR3b3JrIEJsb2NrIERldmljZSBQYXJ0aWFsIFNlbmRzIGFuZCBSZWNvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYG5iZF9zY2hlZF9wZW5kaW5nX3dvcmtgIGlzIHRyaWdnZXJlZCBieSBwYXJ0aWFsIHNlbmRzLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHJlZmluaW5nIGBuYmRfcGVuZGluZ19jbWRfd29ya2AgdG8gZ3JhY2VmdWxseSBtYW5hZ2UgdGhlc2UgcGFydGlhbCBzZW5kcyBhbmQgYWxzbyBkZWFsIHdpdGggcG90ZW50aWFsbHkgZGVhZCBzb2NrZXRzLiBUaGUgY2hhbmdlcyB0byBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIGFyZSBpbXBvcnRhbnQgdG9vLCBlc3BlY2lhbGx5IHRoZSBuZXcgY2hlY2sgZm9yIGBuc29jay0mZ3Q7cGVuZGluZ2AuIFNpbmNlIGBuYmRfcmVjb25uZWN0X3NvY2tldGAgaXMgY2FsbGVkIGJ5IGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIHRoYXQgbGF0dGVyIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgYSBrZXkgYXJlYSB0byBzY3J1dGluaXplLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGZvY3VzIG9uIHRoYXQuCgpOb3csIEkgbmVlZCB0byBjb25zaWRlciBhbnkgb3RoZXIgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBXZSBrbm93IGBCTEtfREVWX05CRGAgcmVxdWlyZXMgYE5FVGAsIGJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkmIzM5O2xsIHJlLWV4YW1pbmUgdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUganVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbC4gQmVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX05CRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk0PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5NS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgxOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRG91YmxlLUNoZWNraW5nIHRoZSBEYXRhOiBBIFBydWRlbnQgUmUtcmVhZCoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBmaW5hbGl6ZSBhbnkgY29uY2x1c2lvbnMgb3IgbW92ZSBmb3J3YXJkIHdpdGggZnVydGhlciBhbmFseXNpcywgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbW9tZW50LiBHaXZlbiB0aGUgbnVhbmNlcyBhbmQgcG90ZW50aWFsIGNvbXBsZXhpdGllcyBpbmhlcmVudCBpbiB0aGlzIGRhdGEsIGEgcXVpY2sgcmUtcmVhZCBvZiB0aGUgZmlsZSBzZWVtcyBwcnVkZW50LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgdGhhdCBvZnRlbiBzYXZlcyB0aW1lIGRvd24gdGhlIGxpbmUuIEkgd2FudCB0byBlbnN1cmUgbXkgaW5pdGlhbCBpbnRlcnByZXRhdGlvbiBob2xkcyB1cCB1bmRlciBhIGZyZXNoIGxvb2sgYW5kIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHN1YnRsZSBidXQgY3JpdGljYWwgZGV0YWlscyB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLiBObyBwb2ludCBpbiBwcm9jZWVkaW5nIG9uIGEgc2hha3kgZm91bmRhdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk2Olx0Y29uZmlnIEJMS19ERVZfTkJEXG4gMTk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMTk4Olx0XHRkZXBlbmRzIG9uIE5FVFxuIDE5OTpcdFx0aGVscFxuIDIwMDpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91ciBjb21wdXRlciB0byBiZSBhIGNsaWVudCBmb3IgbmV0d29ya1xuIDIwMTpcdFx0ICBibG9jayBkZXZpY2VzLCBpLmUuIGl0IHdpbGwgYmUgYWJsZSB0byB1c2UgYmxvY2sgZGV2aWNlcyBleHBvcnRlZCBieVxuIDIwMjpcdFx0ICBzZXJ2ZXJzIChtb3VudCBmaWxlIHN5c3RlbXMgb24gdGhlbSBldGMuKS4gQ29tbXVuaWNhdGlvbiBiZXR3ZWVuXG4gMjAzOlx0XHQgIGNsaWVudCBhbmQgc2VydmVyIHdvcmtzIG92ZXIgVENQL0lQIG5ldHdvcmtpbmcsIGJ1dCB0byB0aGUgY2xpZW50XG4gMjA0Olx0XHQgIHByb2dyYW0gdGhpcyBpcyBoaWRkZW46IGl0IGxvb2tzIGxpa2UgYSByZWd1bGFyIGxvY2FsIGZpbGUgYWNjZXNzIHRvXG4gMjA1Olx0XHQgIGEgYmxvY2sgZGV2aWNlIHNwZWNpYWwgZmlsZSBzdWNoIGFzIC9kZXYvbmQwLlxuIDIwNjpcdFxuIDIwNzpcdFx0ICBOZXR3b3JrIGJsb2NrIGRldmljZXMgYWxzbyBhbGxvd3MgeW91IHRvIHJ1biBhIGJsb2NrLWRldmljZSBpblxuIDIwODpcdFx0ICB1c2VybGFuZCAobWFraW5nIHNlcnZlciBhbmQgY2xpZW50IHBoeXNpY2FsbHkgdGhlIHNhbWUgY29tcHV0ZXIsXG4gMjA5Olx0XHQgIGNvbW11bmljYXRpbmcgdXNpbmcgdGhlIGxvb3BiYWNrIG5ldHdvcmsgZGV2aWNlKS5cbiAyMTA6XHRcbiAyMTE6XHRcdCAgUmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvbmJkLnJzdFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbixcbiAyMTI6XHRcdCAgZXNwZWNpYWxseSBhYm91dCB3aGVyZSB0byBmaW5kIHRoZSBzZXJ2ZXIgY29kZSwgd2hpY2ggcnVucyBpbiB1c2VyXG4gMjEzOlx0XHQgIHNwYWNlIGFuZCBkb2VzIG5vdCBuZWVkIHNwZWNpYWwga2VybmVsIHN1cHBvcnQuXG4gMjE0Olx0XG4gMjE1Olx0XHQgIE5vdGUgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIE5GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM3NwoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggYEJMS19ERVZfTkJEYCBhbmQgYE5FVGAgY29uZmlndXJhdGlvbnMuIGBORVRgIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4sIGEgc3RhbmRhcmQgcGFydCBvZiB0aGluZ3MsIGJ1dCBpdCYjMzk7cyB3b3J0aCBpbmNsdWRpbmcgaXQgYW55d2F5IGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IEkgbmVlZCB0byBjaGVjayB0aGUgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgd2l0aGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIGB2bWxpbnV4YC4gVGhleSB3YW50IHRoZW0gbGlzdGVkIGluIHRoZSBgRW5hYmxlQ29uZmlnc2Agb3V0cHV0IGFycmF5LCBhbmQgaW1wb3J0YW50bHksIHRoZXkgd2FudCBtZSB0byBsZWF2ZSBvZmYgdGhlICYjMzQ7Q09ORklHXyYjMzQ7IHByZWZpeC4gU28sIGBORVRgIGlzIHByb2JhYmx5IGZpbmUgdG8gaW5jbHVkZSwgYW5kIEkmIzM5O2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgQkxLX0RFVl9OQkRgLgoKTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55ICpvdGhlciogY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50Li4uIE5vcGUsIG5vdGhpbmcgZWxzZSBqdW1wcyBvdXQuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGZvY3VzIHN5bWJvbHMgdG8gc2VlIGlmIHRoZXkgYXJlIHN0YXRpYzoKKiAgIGBuYmRfaW9jdGxgCiogICBgbmJkX2dlbmxfY29ubmVjdGAKKiAgIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAKKiAgIGBuYmRfZ2VubF9kaXNjb25uZWN0YAoqICAgYG5iZF94bWl0X3RpbWVvdXRgCgpgbmJkX2dlbmxfcmVjb25maWd1cmVgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZCwgYnV0IGl0JiMzOTtzIGFuIGVudHJ5IHBvaW50IGZvciBuZXRsaW5rLiBgbmJkX2lvY3RsYCBpcyBhbHNvIHN0YXRpYy4gV2FpdCBhIG1pbnV0ZSEgSXQgaXMgc3RhdGljIGluIGBkcml2ZXJzL2Jsb2NrL25iZC5jYC4gUmlnaHQsIHNvIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMgd2l0aGluIGBuYmQuY2Agd2hpY2ggSSBoYXZlbiYjMzk7dCBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBuYmRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTU1PXN0YXRpYyBpbnQgbmJkX3RvdGFsX2RldmljZXMgPSAwO1xuZHJpdmVycy9ibG9jay9uYmQuYy01Ni1cbmRyaXZlcnMvYmxvY2svbmJkLmM6NTc6c3RydWN0IG5iZF9zb2NrIHtcbmRyaXZlcnMvYmxvY2svbmJkLmMtNTgtXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9NzU9c3RydWN0IGxpbmtfZGVhZF9hcmdzIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTkxLVxuZHJpdmVycy9ibG9jay9uYmQuYzo5MjpzdHJ1Y3QgbmJkX2NvbmZpZyB7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTkzLVx0dTMyIGZsYWdzO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTExPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5iZF9ibGtzaXplKHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMTUtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjExNjpzdHJ1Y3QgbmJkX2RldmljZSB7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTExNy1cdHN0cnVjdCBibGtfbXFfdGFnX3NldCB0YWdfc2V0O1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ3LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNDg6c3RydWN0IG5iZF9jbWQge1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNDktXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQwMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSWRlbnRpZnlpbmcgRHluYW1pYyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhcyB3aGVyZSB0aGUgYmVoYXZpb3IgaXMgKm5vdCogZml4ZWQsIHRoZSBhc3BlY3RzIHRoYXQgYXJlLCBmb3IgbGFjayBvZiBhIGJldHRlciB0ZXJtLCAmIzM0O2FsaXZlLiYjMzQ7IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBmaXJzdCBzdGVwLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGZpbHRlcjsgSSB3YW50IHRvIGN1dCB0aHJvdWdoIHRoZSBub2lzZSBvZiBwdXJlbHkgaW5mcmFzdHJ1Y3R1cmFsIG9yIGRhdGEtaG9sZGluZyBwYXJ0cyBvZiB0aGUgY29kZSB0byBmaW5kIHRoZSBzZWN0aW9ucyB0aGF0ICpkbyogc29tZXRoaW5nLCB0aGF0IGFyZSBjYXBhYmxlIG9mIGNoYW5naW5nIHN0YXRlLCByZXNwb25kaW5nIHRvIGlucHV0LCBhbmQgZHJpdmluZyBwcm9ncmFtIGZsb3cuIFRoaXMgaW5pdGlhbCBxdWVyeSBnaXZlcyBtZSBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gZmluZCB0aGUgZHluYW1pYyBlbGVtZW50cyBpbiB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBuYmRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkluaXRpYWwgVGhvdWdodHMgb24gYG5iZC5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5iZC5jYCBmaWxlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBhbG1vc3QgZXZlcnl0aGluZyBoZXJlIGlzIGxpa2VseSBnb2luZyB0byBiZSBzdGF0aWMuIEkmIzM5O2Qgd2FnZXIgdGhhdCB0aGUgdmFzdCBtYWpvcml0eSBvZiBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZSBhcmUgZGVzaWduZWQgZm9yIGludGVybmFsIHVzZSwgaGlkZGVuIGZyb20gdGhlIG91dHNpZGUgd29ybGQuIEkmIzM5O20gdGhpbmtpbmcsIG1vc3QgbGlrZWx5LCBvbmx5IGBuYmRfaW5pdGAgYW5kIGBuYmRfY2xlYW51cGAgYXJlIGdvaW5nIHRvIGJlIGV4cG9zZWQgYXMgZW50cnkgcG9pbnRzIHRvIHRoZSBmdW5jdGlvbmFsaXR5IHRoaXMgZmlsZSBwcm92aWRlcy4gRXZlcnl0aGluZyBlbHNlLi4uIHRoZSBpbnRyaWNhdGUgZGV0YWlscyBvZiBob3cgaXQgaGFuZGxlcyByZXF1ZXN0cywgbWFuYWdlcyBjb25uZWN0aW9ucywgdGFsa3MgdG8gdGhlIGtlcm5lbCwgdGhhdCYjMzk7cyBhbGwgaW50ZXJuYWwuIEFuZCB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7ZCBleHBlY3Q7IGl0IG1ha2VzIGZvciBjbGVhbmVyLCBtb3JlIG1haW50YWluYWJsZSBjb2RlLiBOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgZGV0YWlscyB0byBzZWUgaWYgbXkgZ3Vlc3MgaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbnQgbmJkXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz01ND1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5iZF9kZWxfd3E7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjU1OnN0YXRpYyBpbnQgbmJkX3RvdGFsX2RldmljZXMgPSAwO1xuZHJpdmVycy9ibG9jay9uYmQuYy01Ni1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE2OT1zdGF0aWMgaW50IHBhcnRfc2hpZnQ7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTcxOnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcyLXN0YXRpYyB2b2lkIG5iZF9kZXZfZGJnX2Nsb3NlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTc0PXN0YXRpYyB2b2lkIG5iZF9jb25uZWN0X3JlcGx5KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NTpzdGF0aWMgaW50IG5iZF9nZW5sX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc2LXN0YXRpYyB2b2lkIG5iZF9kZWFkX2xpbmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9Mjg3PXN0YXRpYyB2b2lkIG5iZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI5OC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjk5OnN0YXRpYyBpbnQgbmJkX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnKVxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDAte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MzA1PXN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTMzMy1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MzM0OnN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTMzNS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz04MTA9c3RhdGljIHZvaWQgbmJkX3BlbmRpbmdfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtODY4LVxuZHJpdmVycy9ibG9jay9uYmQuYzo4Njk6c3RhdGljIGludCBuYmRfcmVhZF9yZXBseShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuZHJpdmVycy9ibG9jay9uYmQuYy04NzAtXHRcdFx0ICBzdHJ1Y3QgbmJkX3JlcGx5ICpyZXBseSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEyOTg9c3RhdGljIGlubGluZSB2b2lkIG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrKSB7fVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTMwMC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTMwMTpzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzAyLVx0XHRcdCAgYm9vbCBuZXRsaW5rKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM3My1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTM3NDpzdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzc1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE0NTU9c3RhdGljIHZvaWQgc2VuZF9kaXNjb25uZWN0cyhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ3OC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQ3OTpzdGF0aWMgaW50IG5iZF9kaXNjb25uZWN0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0ODAte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTQ5Nz1zdGF0aWMgdm9pZCBuYmRfY29uZmlnX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTUzNS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTUzNjpzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTUzNy17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjA3LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjA4OnN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZV9pb2N0bChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjA5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE2NTg9c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwNC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTcwNTpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDYtXHRcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzM0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzM1OnN0YXRpYyBpbnQgbmJkX2FsbG9jX2FuZF9pbml0X2NvbmZpZyhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzM2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3NjktXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NzA6c3RhdGljIGludCBuYmRfb3BlbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzcxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MzI9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODQzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODQ0OnN0YXRpYyBpbnQgbmJkX2RiZ190YXNrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODQ1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4NTQ9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfdGFza3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xODU1LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODU2OnN0YXRpYyBpbnQgbmJkX2RiZ19mbGFnc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODU3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4ODM9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xODg0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODg1OnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODg2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE5MTA9c3RhdGljIHZvaWQgbmJkX2Rldl9kYmdfY2xvc2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MTQtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5MTU6c3RhdGljIGludCBuYmRfZGJnX2luaXQodm9pZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkxNi17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xOTI4PXN0YXRpYyB2b2lkIG5iZF9kYmdfY2xvc2Uodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MzQtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5MzU6c3RhdGljIGludCBuYmRfZGV2X2RiZ19pbml0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MzYte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTk0MD1zdGF0aWMgdm9pZCBuYmRfZGV2X2RiZ19jbG9zZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk0My1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTk0NDpzdGF0aWMgaW50IG5iZF9kYmdfaW5pdCh2b2lkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTQ1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE5NDk9c3RhdGljIHZvaWQgbmJkX2RiZ19jbG9zZSh2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk1NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTk1NTpzdGF0aWMgaW50IG5iZF9pbml0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCByZXF1ZXN0ICpycSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk1Ni1cdFx0XHQgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4LCBpbnQgbnVtYV9ub2RlKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjExNj1uYmRfZGV2aWNlX3BvbGljeVtOQkRfREVWSUNFX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEyMC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjEyMTpzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxMjIte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEzNy1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjEzODpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEzOS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yMzE5PXN0YXRpYyB2b2lkIG5iZF9kaXNjb25uZWN0X2FuZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzMzktXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzNDA6c3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNDEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM3NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjM3NTpzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNzYte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjU4Nj1zdGF0aWMgaW50IHN0YXR1c19jYihpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1OTEtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1OTI6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU5My17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNzA4PXN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzYwLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzYxOnN0YXRpYyBpbnQgbmJkX2V4aXRfY2IoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQzOQoJCQkJCQkJb3V0cHV0OiAxMzMKCQkJCQkJCXRob3VnaHRzOiAzOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkJEIERyaXZlciBBUEkgRW50cnkgUG9pbnRzIGFuZCBGdXp6aW5nIFRhcmdldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIEFQSSBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIEkmIzM5O20gZ29pbmcgd2l0aCBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2dlbmxfZGlzY29ubmVjdGAsIGFuZCBgbmJkX3htaXRfdGltZW91dGAuIFRoZXNlIGFyZSBhbGwgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgZ2F2ZSBtZSBwYXVzZSBnaXZlbiB0aGUgcHJvbXB0JiMzOTtzIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gSG93ZXZlciwgdGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGEgc3RydWN0dXJlIChlLmcuLCBgLmlvY3RsID0gbmJkX2lvY3RsYCkuIFRoaXMgbWVhbnMgdGhleSAqYXJlbiYjMzk7dCogaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIHRoZXJlZm9yZSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIG1ha2luZyB0aGVtIHBlcmZlY3RseSB2YWxpZCBlbnRyeSBwb2ludHMuIFRoYXQmIzM5O3MgZ29vZC4KCk5vdywgbGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZiB0byBkZXRlcm1pbmUgaWYgaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gYG5iZF9zZW5kX2NtZGAgYW5kIGBuYmRfcGVuZGluZ19jbWRfd29ya2AsIHBhcnRpY3VsYXJseSBob3cgcGFydGlhbCBzZW5kcyBhcmUgbWFuYWdlZC4gVGhlIHBhdGNoIHNlZW1zIHRvIG1hcmsgdGhlIHNvY2tldCBhcyBkZWFkIGlmIGEgcGFydGlhbCBzZW5kIGhhcHBlbnMsIHdoaWNoIHNob3VsZCBjbGVhciBgbnNvY2stJmd0O3BlbmRpbmdgIGFuZCBgbnNvY2stJmd0O3NlbnRgLiBJdCBhbHNvIGFkZHMgYSBjaGVjayBpbiBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIGZvciBgbnNvY2stJmd0O3BlbmRpbmdgIGFuZCBza2lwcyBpZiBzZXQuIFRoaXMgaXMgZnVuY3Rpb25hbCwgYWRkcmVzc2luZyBhIGJ1ZyBhc3NvY2lhdGVkIHdpdGggcGFydGlhbCBzZW5kcyBhbmQgcG90ZW50aWFsIHNvY2tldCByZXVzZSBpc3N1ZXMuIFllcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5leHQsIEkgbmVlZCB0byBkZWZpbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgb2J2aW91cyBvbmUgaGVyZSBpcyBgQkxLX0RFVl9OQkRgLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgZGVwZW5kZW5jaWVzLiBgQkxLX0RFVl9OQkRgIGRlcGVuZHMgb24gYE5FVGAsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgZWxzZSByZWxldmFudCBoZXJlLiBTbywgYEJMS19ERVZfTkJEYCBpcyB0aGUgcHJpbWFyeSBjb25maWcuCgpUaGVyZWZvcmUsIGZvciBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSB3aWxsIGluY2x1ZGUgYEJMS19ERVZfTkJEYCwgYW5kIGZvciBmb2N1cyBzeW1ib2xzLCBJIGhhdmUgdGhlIGVudHJ5IHBvaW50czogYG5iZF9pb2N0bGAsIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBhbmQgYG5iZF94bWl0X3RpbWVvdXRgLiBJIGFtIG5vdyByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Rpc2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX3htaXRfdGltZW91dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIHByb3Blcmx5IGhhbmRsZSBwYXJ0aWFsIHNlbmRzIGFuZCBkZWFkIHNvY2tldHMsIHByZXZlbnRpbmcgc29ja2V0IHJldXNlIHdoZW4gYSByZXF1ZXN0IGlzIHBhcnRpYWxseSB0cmFuc21pdHRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF94bWl0X3RpbWVvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBzZW5kcyBhbmQgZGVhZCBzb2NrZXRzLCBwcmV2ZW50aW5nIHNvY2tldCByZXVzZSB3aGVuIGEgcmVxdWVzdCBpcyBwYXJ0aWFsbHkgdHJhbnNtaXR0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNTowOS42ODEyNzAyNzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk2MTU5MTkwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfZ2VubF9kaXNjb25uZWN0XCIsXG4gICAgXCJuYmRfeG1pdF90aW1lb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBzZW5kcyBhbmQgZGVhZCBzb2NrZXRzLCBwcmV2ZW50aW5nIHNvY2tldCByZXVzZSB3aGVuIGEgcmVxdWVzdCBpcyBwYXJ0aWFsbHkgdHJhbnNtaXR0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjA5LjY4MTI3NzA4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExNDU1MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2ZlZDgwNGQ1YjViZWY5MjJkZmQ5NTBjZDUyMDEwY2FiZWMwNGI4Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDE4OjA1OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuaW5kZXggOGYxMDc2MmU5MGVmNy4uN2E0NjJhNjI2MzA2YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay9uYmQuY1xcbkBAIC0zMjcsOCArMzI3LDggQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0bnNvY2stXFx1MDAzZWRlYWQgPSB0cnVlO1xcbi1cXHRuc29jay1cXHUwMDNlcGVuZGluZyA9IE5VTEw7XFxuLVxcdG5zb2NrLVxcdTAwM2VzZW50ID0gMDtcXG4rXFx0aWYgKCFuc29jay1cXHUwMDNlcGVuZGluZylcXG4rXFx0XFx0bnNvY2stXFx1MDAzZXNlbnQgPSAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbkBAIC03OTMsOCArNzkzLDEwIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX3NlbmRfY21kKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfY21kICpjbWQsXFxuIFxcdCAqXFxuIFxcdCAqIFdlIG11c3QgcnVuIGZyb20gcGVuZGluZyB3b3JrIGZ1bmN0aW9uLlxcbiBcXHQgKiAqL1xcbi1cXHRpZiAodGVzdF9iaXQoTkJEX0NNRF9QQVJUSUFMX1NFTkQsIFxcdTAwMjZjbWQtXFx1MDAzZWZsYWdzKSlcXG4rXFx0aWYgKHRlc3RfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCBcXHUwMDI2Y21kLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0bmJkX21hcmtfbnNvY2tfZGVhZChuYmQsIG5zb2NrLCAxKTtcXG4gXFx0XFx0cmV0dXJuIEJMS19TVFNfT0s7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIHJldHJ5IG9uIGEgZGlmZmVyZW50IHNvY2tldCAqL1xcbiBcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cXHUwMDNlZGlzayksXFxuQEAgLTgyNiw4ICs4MjgsMTggQEAgc3RhdGljIHZvaWQgbmJkX3BlbmRpbmdfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRcXHRpZiAoIW5zb2NrLVxcdTAwM2VwZW5kaW5nKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuK1xcdFxcdGlmIChuc29jay1cXHUwMDNlZGVhZClcXG4rXFx0XFx0XFx0Z290byBkZWFkO1xcbitcXG4gXFx0XFx0LyogZG9uJ3QgYm90aGVyIHRpbWVvdXQgaGFuZGxlciBmb3IgcGFydGlhbCBzZW5kaW5nICovXFxuIFxcdFxcdGlmIChSRUFEX09OQ0UoamlmZmllcykgKyBtc2Vjc190b19qaWZmaWVzKHdhaXRfbXMpIFxcdTAwM2U9IGRlYWRsaW5lKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFRoZSBzb2NrZXQgY29udGFpbnMgYSBwYXJ0aWFsbHkgdHJhbnNtaXR0ZWQgcmVxdWVzdFxcbitcXHRcXHRcXHQgKiBhbmQgY2Fubm90IGJlIHJldXNlZCBmb3IgYW5vdGhlciBOQkQgcmVxdWVzdC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG5iZF9tYXJrX25zb2NrX2RlYWQobmJkLCBuc29jaywgMSk7XFxuK1xcdFxcdFxcdG5zb2NrLVxcdTAwM2VwZW5kaW5nID0gTlVMTDtcXG4rXFx0XFx0XFx0bnNvY2stXFx1MDAzZXNlbnQgPSAwO1xcbiBcXHRcXHRcXHRjbWQtXFx1MDAzZXN0YXR1cyA9IEJMS19TVFNfSU9FUlI7XFxuIFxcdFxcdFxcdGJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KHJlcSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC04NDAsNiArODUyLDE4IEBAIHN0YXRpYyB2b2lkIG5iZF9wZW5kaW5nX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gb3V0OlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmNtZC1cXHUwMDNlbG9jayk7XFxuIFxcdG5iZF9jb25maWdfcHV0KG5iZCk7XFxuK1xcdHJldHVybjtcXG4rXFxuK1xcdC8qIENvbXBsZXRlIHRoZSByZXF1ZXN0IGhlcmU7IG5iZF9jbGVhcl9yZXEoKSB3aWxsIG5vdCBoYW5kbGUgaXQuICovXFxuK2RlYWQ6XFxuK1xcdG5zb2NrLVxcdTAwM2VwZW5kaW5nID0gTlVMTDtcXG4rXFx0bnNvY2stXFx1MDAzZXNlbnQgPSAwO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm5zb2NrLVxcdTAwM2V0eF9sb2NrKTtcXG4rXFx0Y2xlYXJfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCBcXHUwMDI2Y21kLVxcdTAwM2VmbGFncyk7XFxuK1xcdGNtZC1cXHUwMDNlc3RhdHVzID0gQkxLX1NUU19JT0VSUjtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjbWQtXFx1MDAzZWxvY2spO1xcbitcXHRibGtfbXFfY29tcGxldGVfcmVxdWVzdChyZXEpO1xcbitcXHRuYmRfY29uZmlnX3B1dChuYmQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG5iZF9yZWFkX3JlcGx5KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuQEAgLTEzNzYsNiArMTQwMCwxMCBAQCBzdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5zb2NrLVxcdTAwM2V0eF9sb2NrKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4rXFx0XFx0aWYgKG5zb2NrLVxcdTAwM2VwZW5kaW5nKSB7XFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bnNvY2stXFx1MDAzZXR4X2xvY2spO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRza19zZXRfbWVtYWxsb2Moc29jay1cXHUwMDNlc2spO1xcbiBcXHRcXHRpZiAobmJkLVxcdTAwM2V0YWdfc2V0LnRpbWVvdXQpXFxuIFxcdFxcdFxcdHNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19zbmR0aW1lbyA9IG5iZC1cXHUwMDNldGFnX3NldC50aW1lb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNToxMC4wOTMzODcyNzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDkyMDM3OTAyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfZ2VubF9kaXNjb25uZWN0XCIsXG4gICAgXCJuYmRfeG1pdF90aW1lb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBzZW5kcyBhbmQgZGVhZCBzb2NrZXRzLCBwcmV2ZW50aW5nIHNvY2tldCByZXVzZSB3aGVuIGEgcmVxdWVzdCBpcyBwYXJ0aWFsbHkgdHJhbnNtaXR0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNmZWQ4MDRkNWI1YmVmOTIyZGZkOTUwY2Q1MjAxMGNhYmVjMDRiOGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDE4OjA1OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjcuLjdhNDYyYTYyNjMwNmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMzI3LDggKzMyNyw4IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcbiBcdFx0fVxuIFx0fVxuIFx0bnNvY2stXHUwMDNlZGVhZCA9IHRydWU7XG4tXHRuc29jay1cdTAwM2VwZW5kaW5nID0gTlVMTDtcbi1cdG5zb2NrLVx1MDAzZXNlbnQgPSAwO1xuK1x0aWYgKCFuc29jay1cdTAwM2VwZW5kaW5nKVxuK1x0XHRuc29jay1cdTAwM2VzZW50ID0gMDtcbiB9XG4gXG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbkBAIC03OTMsOCArNzkzLDEwIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX3NlbmRfY21kKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfY21kICpjbWQsXG4gXHQgKlxuIFx0ICogV2UgbXVzdCBydW4gZnJvbSBwZW5kaW5nIHdvcmsgZnVuY3Rpb24uXG4gXHQgKiAqL1xuLVx0aWYgKHRlc3RfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCBcdTAwMjZjbWQtXHUwMDNlZmxhZ3MpKVxuK1x0aWYgKHRlc3RfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCBcdTAwMjZjbWQtXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdG5iZF9tYXJrX25zb2NrX2RlYWQobmJkLCBuc29jaywgMSk7XG4gXHRcdHJldHVybiBCTEtfU1RTX09LO1xuK1x0fVxuIFxuIFx0LyogcmV0cnkgb24gYSBkaWZmZXJlbnQgc29ja2V0ICovXG4gXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbkBAIC04MjYsOCArODI4LDE4IEBAIHN0YXRpYyB2b2lkIG5iZF9wZW5kaW5nX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0aWYgKCFuc29jay1cdTAwM2VwZW5kaW5nKVxuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRpZiAobnNvY2stXHUwMDNlZGVhZClcbitcdFx0XHRnb3RvIGRlYWQ7XG4rXG4gXHRcdC8qIGRvbid0IGJvdGhlciB0aW1lb3V0IGhhbmRsZXIgZm9yIHBhcnRpYWwgc2VuZGluZyAqL1xuIFx0XHRpZiAoUkVBRF9PTkNFKGppZmZpZXMpICsgbXNlY3NfdG9famlmZmllcyh3YWl0X21zKSBcdTAwM2U9IGRlYWRsaW5lKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgc29ja2V0IGNvbnRhaW5zIGEgcGFydGlhbGx5IHRyYW5zbWl0dGVkIHJlcXVlc3RcbitcdFx0XHQgKiBhbmQgY2Fubm90IGJlIHJldXNlZCBmb3IgYW5vdGhlciBOQkQgcmVxdWVzdC5cbitcdFx0XHQgKi9cbitcdFx0XHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpO1xuK1x0XHRcdG5zb2NrLVx1MDAzZXBlbmRpbmcgPSBOVUxMO1xuK1x0XHRcdG5zb2NrLVx1MDAzZXNlbnQgPSAwO1xuIFx0XHRcdGNtZC1cdTAwM2VzdGF0dXMgPSBCTEtfU1RTX0lPRVJSO1xuIFx0XHRcdGJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KHJlcSk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtODQwLDYgKzg1MiwxOCBAQCBzdGF0aWMgdm9pZCBuYmRfcGVuZGluZ19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNtZC1cdTAwM2Vsb2NrKTtcbiBcdG5iZF9jb25maWdfcHV0KG5iZCk7XG4rXHRyZXR1cm47XG4rXG4rXHQvKiBDb21wbGV0ZSB0aGUgcmVxdWVzdCBoZXJlOyBuYmRfY2xlYXJfcmVxKCkgd2lsbCBub3QgaGFuZGxlIGl0LiAqL1xuK2RlYWQ6XG4rXHRuc29jay1cdTAwM2VwZW5kaW5nID0gTlVMTDtcbitcdG5zb2NrLVx1MDAzZXNlbnQgPSAwO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5zb2NrLVx1MDAzZXR4X2xvY2spO1xuK1x0Y2xlYXJfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCBcdTAwMjZjbWQtXHUwMDNlZmxhZ3MpO1xuK1x0Y21kLVx1MDAzZXN0YXR1cyA9IEJMS19TVFNfSU9FUlI7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Y21kLVx1MDAzZWxvY2spO1xuK1x0YmxrX21xX2NvbXBsZXRlX3JlcXVlc3QocmVxKTtcbitcdG5iZF9jb25maWdfcHV0KG5iZCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmJkX3JlYWRfcmVwbHkoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IHNvY2tldCAqc29jayxcbkBAIC0xMzc2LDYgKzE0MDAsMTAgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bnNvY2stXHUwMDNldHhfbG9jayk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbitcdFx0aWYgKG5zb2NrLVx1MDAzZXBlbmRpbmcpIHtcbitcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bnNvY2stXHUwMDNldHhfbG9jayk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcdFx0c2tfc2V0X21lbWFsbG9jKHNvY2stXHUwMDNlc2spO1xuIFx0XHRpZiAobmJkLVx1MDAzZXRhZ19zZXQudGltZW91dClcbiBcdFx0XHRzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3NuZHRpbWVvID0gbmJkLVx1MDAzZXRhZ19zZXQudGltZW91dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjEwLjA5MzM4OTI0OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4OTM2NTAzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2gsIGFzIGFuIGV4cGVydCBpbiBibG9jayBkZXZpY2UgZHJpdmVycywgZm9jdXNpbmcgb24gTkJEOlxuXG4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTkJEIFBhdGNoKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgdGhlIGhlYXJ0IG9mIHRoZSBOQkQgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHksIGBkcml2ZXJzL2Jsb2NrL25iZC5jYC4gVGhlIGZhY3QgdGhhdCBpdCBtb2RpZmllcyBgbmJkX21hcmtfbnNvY2tfZGVhZGAsIGBuYmRfc2VuZF9jbWRgLCBgbmJkX3BlbmRpbmdfY21kX3dvcmtgLCBhbmQgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGRlYWxpbmcgd2l0aCBzb21lIGxvdy1sZXZlbCBuZXR3b3JrIGludGVyYWN0aW9ucyBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBOQkQgcHJvdG9jb2wuIEl0IHNlZW1zIGxpa2UgaXQncyBhZGRyZXNzaW5nIGhvdyB0aGUgZHJpdmVyIGNvcGVzIHdpdGggcGFydGlhbCBzZW5kcyBhbmQgcG90ZW50aWFsbHkgZGVhZCBvciBmbGFreSBzb2NrZXRzLiBUaGlzIGtpbmQgb2YgY29kZSBpcyBhbHdheXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBuZXR3b3JrIGludGVyYWN0aW9ucyBhcmUgaW5oZXJlbnRseSBjb21wbGV4LCBhbmQgc3VidGxlIHRpbWluZyBpc3N1ZXMgb3IgbWFsZm9ybWVkIGRhdGEgY2FuIGxlYWQgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIG9yIHN1YnRsZSBkYXRhIGNvcnJ1cHRpb24uXG5cbkdpdmVuIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBhcmVhcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gbWFuYWdlbWVudCwgY29tbWFuZCB0cmFuc21pc3Npb24sIGFuZCByZS1lc3RhYmxpc2htZW50IG9mIGNvbW11bmljYXRpb24gYWZ0ZXIgYW4gZXJyb3IuIFRoYXQgbWVhbnMgSSdtIGdvaW5nIHRvIGJlIHBheWluZyB2ZXJ5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgaXQgaGFuZGxlcyBlZGdlIGNhc2VzLCBlcnJvciBjb25kaXRpb25zLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgZmFjZSBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5OZXh0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBOQkQgY29uZmlndXJhdGlvbiB0byBzZWUgaG93IHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZpcnN0IHBsYWNlLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0byBjaGVjayBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBkaXJlY3RseSwgb3IgYWx0ZXJuYXRpdmVseSwgSSBjb3VsZCBqdXN0IGdyZXAgZm9yIHNvbWV0aGluZyBsaWtlIGBuYmQub2AgaW4gYGRyaXZlcnMvYmxvY2svTWFrZWZpbGVgIHRvIGZpbmQgYW55IHJlbGV2YW50IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIFRoaXMgd2F5LCBJIGNhbiBxdWlja2x5IHZlcmlmeSB3aGV0aGVyIE5CRCBpcyBlbmFibGVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBjb250cm9sIGl0cyBiZWhhdmlvciBkdXJpbmcgdGVzdGluZy4gVGhpcyBpcyBjcnVjaWFsIGZvciBzZXR0aW5nIHVwIHRoZSByaWdodCB0ZXN0IGVudmlyb25tZW50IGZvciB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDU6MTguOTg3MDQxOTM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDMwMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1NVTlZEQylcXHRcXHQrPSBzdW52ZGMub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMjQtXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQkxLX0RFVl9OQkQpXFx0Kz0gbmJkLm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19WSVJUSU9fQkxLKVxcdCs9IHZpcnRpb19ibGsub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNToxOS4wNDg0NzgyNTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM5NjA0MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29uZmlnIG9wdGlvbiBJJ20gd29ya2luZyB3aXRoIGlzIGBCTEtfREVWX05CRGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzLCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBrZXJuZWwncyBibG9jayBkZXZpY2Ugc3Vic3lzdGVtLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBibG9jayBkZXZpY2UgZHJpdmVycyBhcmUgZGVmaW5lZCwgYWxvbmcgd2l0aCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIG90aGVyIGZlYXR1cmVzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoYXQgZmlsZSB0byBzZWUgd2hhdCB0aGlzIGBCTEtfREVWX05CRGAgZGVwZW5kcyBvbiBhbmQgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBLbm93aW5nIGl0cyBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBhIGhlYWQgc3RhcnQgaW4gdW5kZXJzdGFuZGluZyB3aHkgaXQncyBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNToyMi44ODgwODY0NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NDY2NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX05CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNToyMi45OTM1NTczOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzkwMzYxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhdCBwbGF5LiBJdCdzIGEgY3JpdGljYWwgaW5pdGlhbCBhc3Nlc3NtZW50LiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IG1hcCBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZWxlbWVudHMgaW52b2x2ZWQuIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBleHRlcm5hbCBzeXN0ZW1zIGRvZXMgdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudCByZWx5IG9uPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGZhY3RvcnMgb3IgZG93bnN0cmVhbSBpbXBsaWNhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBjb25zaWRlcmF0aW9uPyBJIGNhbid0IGFmZm9yZCB0byBiZSBjYXVnaHQgb2ZmIGd1YXJkIGJ5IGEgY2FzY2FkaW5nIGZhaWx1cmUgb3IgaW5jb21wYXRpYmlsaXR5IGlzc3VlIGZ1cnRoZXIgZG93biB0aGUgbGluZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBkZXBlbmRlbmN5IHNjYW4gYW5kIG1hcHBpbmcgdG8gYnVpbGQgYSByb2J1c3QgbW9kZWwgYmVmb3JlIG1vdmluZyBvbi4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHJlcXVpcmUgYSByZS13cml0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjI2LjUzMjU5NjU4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjQ4NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX05CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNToyNi42MDU4NDg1MDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTc0OTQ5OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBCbG9jayBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYmxvY2sgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLCBzbyBsZXQncyBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTYuIEknbSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgdmFyaW91cyBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBvciBkZWZhdWx0cyBhcmUgaW4gcGxheS4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgc2VsZWN0aW9uIG9mIGRpZmZlcmVudCBibG9jayBkcml2ZXJzLCB0aGVpciBmZWF0dXJlcywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gVGhpcyBzaG91bGQgcHJvdmlkZSBjb250ZXh0IGZvciB3aGF0IEknbSBsb29raW5nIGF0IGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTgxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDU6MzUuNzgwODAxNTEzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcdCAgVGhlIGhpc3RvcmljIGRlZmF1bHQgaXMgOC4gSWYgYSBsYXRlIDIwMTEgdmVyc2lvbiBvZiBsb3NldHVwKDgpXFxuIDE5MTpcXHRcXHQgIGlzIHVzZWQsIGl0IGNhbiBiZSBzZXQgdG8gMCwgc2luY2UgbmVlZGVkIGxvb3AgZGV2aWNlcyBjYW4gYmVcXG4gMTkyOlxcdFxcdCAgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHdpdGggdGhlIC9kZXYvbG9vcC1jb250cm9sIGludGVyZmFjZS5cXG4gMTkzOlxcdFxcbiAxOTQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1xcXCJcXG4gMTk1OlxcdFxcbiAxOTY6XFx0Y29uZmlnIEJMS19ERVZfTkJEXFxuIDE5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gMTk4OlxcdFxcdGRlcGVuZHMgb24gTkVUXFxuIDE5OTpcXHRcXHRoZWxwXFxuIDIwMDpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3VyIGNvbXB1dGVyIHRvIGJlIGEgY2xpZW50IGZvciBuZXR3b3JrXFxuIDIwMTpcXHRcXHQgIGJsb2NrIGRldmljZXMsIGkuZS4gaXQgd2lsbCBiZSBhYmxlIHRvIHVzZSBibG9jayBkZXZpY2VzIGV4cG9ydGVkIGJ5XFxuIDIwMjpcXHRcXHQgIHNlcnZlcnMgKG1vdW50IGZpbGUgc3lzdGVtcyBvbiB0aGVtIGV0Yy4pLiBDb21tdW5pY2F0aW9uIGJldHdlZW5cXG4gMjAzOlxcdFxcdCAgY2xpZW50IGFuZCBzZXJ2ZXIgd29ya3Mgb3ZlciBUQ1AvSVAgbmV0d29ya2luZywgYnV0IHRvIHRoZSBjbGllbnRcXG4gMjA0OlxcdFxcdCAgcHJvZ3JhbSB0aGlzIGlzIGhpZGRlbjogaXQgbG9va3MgbGlrZSBhIHJlZ3VsYXIgbG9jYWwgZmlsZSBhY2Nlc3MgdG9cXG4gMjA1OlxcdFxcdCAgYSBibG9jayBkZXZpY2Ugc3BlY2lhbCBmaWxlIHN1Y2ggYXMgL2Rldi9uZDAuXFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdCAgTmV0d29yayBibG9jayBkZXZpY2VzIGFsc28gYWxsb3dzIHlvdSB0byBydW4gYSBibG9jay1kZXZpY2UgaW5cXG4gMjA4OlxcdFxcdCAgdXNlcmxhbmQgKG1ha2luZyBzZXJ2ZXIgYW5kIGNsaWVudCBwaHlzaWNhbGx5IHRoZSBzYW1lIGNvbXB1dGVyLFxcbiAyMDk6XFx0XFx0ICBjb21tdW5pY2F0aW5nIHVzaW5nIHRoZSBsb29wYmFjayBuZXR3b3JrIGRldmljZSkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjM1Ljc4MDkwNjM4M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzEyNzgyMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTkJEIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IG9uIGBORVRgLiAgVGhhdCB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggbmV0d29yayBibG9jayBkZXZpY2VzLCBzcGVjaWZpY2FsbHksIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSBjb25maWcsIHdoaWNoIGlzIGBCTEtfREVWX05CRGAuIEdvb2QgdG8gaGF2ZSB0aGF0IGNvbmZpcm1lZCByaWdodCBhd2F5LlxuXG5Ob3csIG15IGZvY3VzIGlzIHRoZSBzeW1ib2xzIGJlaW5nIG1vZGlmaWVkLiBUaGUgcGF0Y2ggdG91Y2hlczogYG5iZF9tYXJrX25zb2NrX2RlYWRgLCBgbmJkX3NldF9zaXplYCwgYG5iZF9zZW5kX2NtZGAsIGBuYmRfcGVuZGluZ19jbWRfd29ya2AsIGBuYmRfcmVhZF9yZXBseWAsIGFuZCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgLiBIbW0sIHNvbWV0aGluZyBqdW1wcyBvdXQg4oCTICphbGwqIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBpbXBvcnRhbnQuIEl0IG1lYW5zIHRoZXkncmUgbm90IGRpcmVjdGx5IGV4cG9zZWQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC5cblxuVGhlcmVmb3JlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0LiBXaGF0IGNhbGxzIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnM/IE9yLCBwdXQgYW5vdGhlciB3YXksIHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBkcml2ZXJzL2Jsb2NrL25iZC5jYCBtaWdodCBiZSB0aGUgZW50cnkgcG9pbnRzIG9yIGtleSBpbnRlcmZhY2VzIHRoYXQgKmRvKiBjYWxsIHRob3NlIHN0YXRpYyBmdW5jdGlvbnM/IFRoYXQncyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBvZiB0aGUgcGF0Y2ggbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDczNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjQyLjA5MzY5MTM4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1NzkwNTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9yZWNvbm5lY3Rfc29ja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xMzAxPXN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEzNzMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMzc0OnN0YXRpYyBpbnQgbmJkX3JlY29ubmVjdF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzc1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjM3NT1zdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0OTUtXFx0XFx0XFx0ZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNDk2OlxcdFxcdFxcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5Ny1cXHRcXHRcXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjQyLjMyOTQ4Nzc2MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ2MTYyNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipNeSBCcmFpbidzIFRyYWNlIFRocm91Z2ggdGhlIE5CRCBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGRyaXZlciBwZXJzcGVjdGl2ZS4gSSBzZWUgdGhhdCB0aGUgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCBmdW5jdGlvbiBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gIFRoYXQncyBteSBpbml0aWFsIGVudHJ5IHBvaW50IGZvciBzb2NrZXQgcmVjb25uZWN0aW9uLCBpbml0aWF0ZWQgYnkgYSBjb25maWd1cmF0aW9uIGNoYW5nZSB0aHJvdWdoIEdlbmVyaWMgTmV0bGluay4gVGhlbiwgYG5iZF9wZW5kaW5nX2NtZF93b3JrYCBnZXRzIGludm9rZWQgYXMgYSB3b3JrcXVldWUgZnVuY3Rpb24uIFRoaXMgbGlrZWx5IGhhbmRsZXMgYXN5bmNocm9ub3VzIGNvbW1hbmQgcHJvY2Vzc2luZyBvciBjb21wbGV0aW9uIGFmdGVyIHRoYXQgY29uZmlndXJhdGlvbiBjaGFuZ2UgaGFwcGVucy4gRnJvbSBteSBleHBlcmllbmNlLCB3b3JrcXVldWVzIGFyZSBlc3NlbnRpYWwgZm9yIGRlZmVycmluZyBzb21lIG9mIHRob3NlIGJsb2NraW5nIG9wZXJhdGlvbnMgdG8gcHJldmVudCBrZXJuZWwgdGhyZWFkIHN0YXJ2YXRpb24uIExhc3RseSwgdGhlIGNvbW1hbmQgZmxvdyBsb29rcyBsaWtlIGBuYmRfc2VuZF9jbWRgIGlzIGRpcmVjdGx5IGNhbGxlZCBieSBgbmJkX3F1ZXVlX3JxYC4gU28sIGNvbW1hbmRzIGFyZSBiZWluZyBzZW50IHRocm91Z2ggdGhlIG5ldHdvcmsgZnJvbSB0aGUgcmVxdWVzdCBxdWV1ZS4gVGhpcyB3b3JrZmxvdyBtYWtlcyBzZW5zZTogcmVjb25maWd1cmUgdHJpZ2dlcnMgYSBzb2NrZXQgcmVjb25uZWN0OyB0aGUgd29ya3F1ZXVlIGhhbmRsZXMgcGVuZGluZyBjb21tYW5kcyBhZnRlciBhbnkgc29ja2V0IGNoYW5nZSBoYXBwZW5zLCBhbmQgZmluYWxseSwgY29tbWFuZHMgYXJlIGRpc3BhdGNoZWQgdG8gdGhlIHNvY2tldCBmcm9tIHRoZSByZXF1ZXN0IHF1ZXVlLiBUaGlzIGlzIGEgdmVyeSBzdGFuZGFyZCBuZXR3b3JrIGJsb2NrIGRldmljZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjQ2LjI3NTY1MzEzNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNDgxMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9zZW5kX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9NjI1PXN0YXRpYyB2b2lkIG5iZF9zY2hlZF9wZW5kaW5nX3dvcmsoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNjQ0LSAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6NjQ1OnN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX3NlbmRfY21kKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay9uYmQuYy02NDYtXFx0XFx0XFx0XFx0IGludCBpbmRleClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9ODEwPXN0YXRpYyB2b2lkIG5iZF9wZW5kaW5nX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODI2LVxcdHdoaWxlICh0cnVlKSB7XFxuZHJpdmVycy9ibG9jay9uYmQuYzo4Mjc6XFx0XFx0bmJkX3NlbmRfY21kKG5iZCwgY21kLCBjbWQtXFx1MDAzZWluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTgyOC1cXHRcXHRpZiAoIW5zb2NrLVxcdTAwM2VwZW5kaW5nKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xMTQxPXN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX2hhbmRsZV9jbWQoc3RydWN0IG5iZF9jbWQgKmNtZCwgaW50IGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjAwLVxcdH1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyMDE6XFx0cmV0ID0gbmJkX3NlbmRfY21kKG5iZCwgY21kLCBpbmRleCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjAyLW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDU6NDYuNDg2MTQzMzUxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODg2OTI2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mIGEgbmV0d29yayBibG9jayBkZXZpY2UgZHJpdmVyOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIENvbW1hbmQgUGF0aCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29yZSBjb21tYW5kIGhhbmRsaW5nIHdpdGhpbiB0aGUgTkJEIGRyaXZlci4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUgaXMgYG5iZF9oYW5kbGVfY21kYCwgYW5kIEknbSBpbW1lZGlhdGVseSByZWNvZ25pemluZyB0aGF0IGl0cyBwcmltYXJ5IGZ1bmN0aW9uIGlzIHRvIHNoZXBoZXJkIGNvbW1hbmRzIHRvIHRoZWlyIHVsdGltYXRlIGRlc3RpbmF0aW9uLCB0aGUgbmV0d29yay4gVGhlIHZlcnkgbmV4dCBmdW5jdGlvbiBpbiB0aGUgcHJvY2VzcyBpcyBgbmJkX3NlbmRfY21kYC4gU28sIGBuYmRfaGFuZGxlX2NtZGAgaXMgbGlrZSB0aGUgb3JjaGVzdHJhdG9yLCBhbmQgaXQga25vd3MgdGhlIGZ1bmN0aW9uIGl0J3MgZ29pbmcgdG8gdXNlLiBJdCBtYWtlcyBzZW5zZSwgYG5iZF9zZW5kX2NtZGAgbXVzdCBoYW5kbGUgdGhlIHRhc2sgb2YgYWN0dWFsbHkgdHJhbnNtaXR0aW5nIHRoZSBjb21tYW5kIG92ZXIgdGhlIG5ldHdvcmsuIFRoaXMgbGlrZWx5IGludm9sdmVzIGZvcm1hdHRpbmcgdGhlIGNvbW1hbmQgaW50byB0aGUgY29ycmVjdCBOQkQgcHJvdG9jb2wgcGFja2V0cywgaGFuZGxpbmcgcG90ZW50aWFsIGVycm9ycyBpbiB0aGUgcHJvY2VzcywgYW5kIGVuc3VyaW5nIHJlbGlhYmxlIGRlbGl2ZXJ5IHRvIHRoZSByZW1vdGUgZW5kLiBTbywgYG5iZF9oYW5kbGVfY21kYCBpcyBzZXR0aW5nIHVwIHRoZSBwaWVjZXMsIGFuZCB0aGVuIGBuYmRfc2VuZF9jbWRgIGlzIGRvaW5nIHRoZSBoZWF2eSBsaWZ0aW5nIG9mIHNlbmRpbmcgdGhlIGRhdGEgb3ZlciB0aGUgd2lyZS4gVGhpcyBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zIGZlZWxzIHJpZ2h0IGZvciB0aGlzIGtpbmQgb2YgbG93LWxldmVsIGRyaXZlci4gSXTigJlzIGEgY2xlYW4gYW5kIGVmZmljaWVudCBkZXNpZ24sIGZyb20gd2hhdCBJIHVuZGVyc3RhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwOTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNTo1MC4xNzQ4Mzk0MTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NzYwMjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9oYW5kbGVfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xMTI1PXN0YXRpYyBpbnQgd2FpdF9mb3JfcmVjb25uZWN0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTExNDAtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMTQxOnN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX2hhbmRsZV9jbWQoc3RydWN0IG5iZF9jbWQgKmNtZCwgaW50IGluZGV4KVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTE0Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEyMDg9c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyMzAtXFx0ICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMjMxOlxcdHJldCA9IG5iZF9oYW5kbGVfY21kKGNtZCwgaGN0eC1cXHUwMDNlcXVldWVfbnVtKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyMzItXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjbWQtXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNTo1MC4yNDk2MDgxNDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2MjI1NTUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTkJEIFJlcXVlc3QgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYG5iZF9xdWV1ZV9ycWAgZnVuY3Rpb24uIFRoYXQncyB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIHJlcXVlc3RzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgYWZ0ZXIgYSByZXF1ZXN0IGlzIHF1ZXVlZC4gVGhlIGZsb3cgbG9va3MgbGlrZSBpdCB0aGVuIGNhbGxzIGBuYmRfaGFuZGxlX2NtZGAuIE1ha2VzIHNlbnNlLCB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBjb21tYW5kIHByb2Nlc3Npbmcgd2lsbCBvY2N1ci4gTXkgbmV4dCBxdWVzdGlvbiBpczogd2hhdCBraW5kIG9mIHNvY2tldCBpc3N1ZXMgbWF5IGJlIGhhcHBlbmluZyBhdCB0aGlzIHBvaW50PyBMZXQncyBjaGVjayBgbmJkX21hcmtfbnNvY2tfZGVhZGAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRlYWQgbmV0d29yayBzb2NrZXRzLiBVbmRlcnN0YW5kaW5nIHRoYXQgd2lsbCBiZSBrZXkgaW4gZGlhZ25vc2luZyBjb25uZWN0aW9uIGlzc3VlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjQ4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDU6NTMuOTExODY2Mjk1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njc0OTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfbWFya19uc29ja19kZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0yOTk9c3RhdGljIGludCBuYmRfZGlzY29ubmVjdGVkKHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTMwNC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjMwNTpzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDYtXFx0XFx0XFx0XFx0aW50IG5vdGlmeSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9Mzk4PXN0YXRpYyB2b2lkIHNvY2tfc2h1dGRvd24oc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNDEwLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm5zb2NrLVxcdTAwM2V0eF9sb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjQxMTpcXHRcXHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDApO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtNDEyLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bnNvY2stXFx1MDAzZXR4X2xvY2spO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz00NTE9c3RhdGljIGVudW0gYmxrX2VoX3RpbWVyX3JldHVybiBuYmRfeG1pdF90aW1lb3V0KHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTUwMi1cXHRcXHRcXHRcXHRpZiAoY21kLVxcdTAwM2Vjb29raWUgPT0gbnNvY2stXFx1MDAzZWNvb2tpZSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjUwMzpcXHRcXHRcXHRcXHRcXHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtNTA0LVxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bnNvY2stXFx1MDAzZXR4X2xvY2spO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz02NDU9c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfc2VuZF9jbWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9jbWQgKmNtZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNzk2LVxcdGlmICh0ZXN0X2JpdChOQkRfQ01EX1BBUlRJQUxfU0VORCwgXFx1MDAyNmNtZC1cXHUwMDNlZmxhZ3MpKSB7XFxuZHJpdmVycy9ibG9jay9uYmQuYzo3OTc6XFx0XFx0bmJkX21hcmtfbnNvY2tfZGVhZChuYmQsIG5zb2NrLCAxKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTc5OC1cXHRcXHRyZXR1cm4gQkxLX1NUU19PSztcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODAzLVxcdFxcdFxcdCAgICBcXFwiUmVxdWVzdCBzZW5kIGZhaWxlZCwgcmVxdWV1ZWluZ1xcXFxuXFxcIik7XFxuZHJpdmVycy9ibG9jay9uYmQuYzo4MDQ6XFx0bmJkX21hcmtfbnNvY2tfZGVhZChuYmQsIG5zb2NrLCAxKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTgwNS1cXHRuYmRfcmVxdWV1ZV9jbWQoY21kKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9ODEwPXN0YXRpYyB2b2lkIG5iZF9wZW5kaW5nX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODM5LVxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6ODQwOlxcdFxcdFxcdG5iZF9tYXJrX25zb2NrX2RlYWQobmJkLCBuc29jaywgMSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy04NDEtXFx0XFx0XFx0bnNvY2stXFx1MDAzZXBlbmRpbmcgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz05OTQ9c3RhdGljIHZvaWQgcmVjdl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTA0NC1cXHRtdXRleF9sb2NrKFxcdTAwMjZuc29jay1cXHUwMDNldHhfbG9jayk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMDQ1OlxcdG5iZF9tYXJrX25zb2NrX2RlYWQobmJkLCBuc29jaywgMSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMDQ2LVxcdG11dGV4X3VubG9jayhcXHUwMDI2bnNvY2stXFx1MDAzZXR4X2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNTo1My45OTg2MjE2OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQyODE4NjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBmb3IgVGVzdGluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0byBmb2N1cyBvdXIgdGVzdGluZyBlZmZvcnRzIGluIHRoZSBOQkQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhvc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZSBlbnRyeSBwb2ludHMgd2UgY2FuIHRhcmdldC4gSSBuZWVkIHRvIGF2b2lkIHRoZSB0eXBpY2FsLCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgb3RoZXJ3aXNlLCB0aGUgdGVzdHMgd2lsbCBiZSBza2V3ZWQuIEkgc2hvdWxkIGJlIHByaW9yaXRpemluZyBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVycywgYnV0IGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgZmV3IHByb21pc2luZyBjYW5kaWRhdGVzOiBgbmJkX3F1ZXVlX3JxYCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYW5kIGBuYmRfeG1pdF90aW1lb3V0YCwgYW5kIG9mIGNvdXJzZSwgYHJlY3Zfd29ya2AuIEFjdHVhbGx5LCB3YWl0LCBgcmVjdl93b3JrYCBpcyBwYXJ0IG9mIGEgd29ya3F1ZXVlLi4uIG1heWJlIHRoZSBjb25uZWN0aW9uIG9yIGlvY3RsIHBhdGhzIGFyZSBhc3NvY2lhdGVkLiBgbmJkX2lvY3RsYCBvciBgbmJkX2dlbmxfY29ubmVjdGAgd291bGQgYmUgbW9yZSBkaXJlY3QsIEkgdGhpbmsuXG5cbmBuYmRfcXVldWVfcnFgIGNhdGNoZXMgbXkgZXllIGZpcnN0LiBJdCdzIHRoZSBibG9jayBsYXllcidzIHF1ZXVlIHJlcXVlc3QgY2FsbGJhY2sg4oCTIGRlZmluaXRlbHkgYSBob3QgcGF0aCEgRGFtbi4gR2l2ZW4gdGhlIHByb21wdCwgSSBzaG91bGQgcHJvYmFibHkgYXZvaWQgaXQgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBJdCdzIHRlbXB0aW5nLCBidXQgbGV0J3Mgc3RpY2sgdG8gdGhlIHByb21wdC5cblxuTm93LCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIHNlZW1zIG1vcmUgcHJvbWlzaW5nLiBBaCwgaXQncyBhIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVyLiBUaGF0IGZlZWxzIGxpa2UgYSBiZXR0ZXIgZml0LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgbmJkLmNgIGFuZCBzZWUgd2hhdCBuZXRsaW5rIGNvbW1hbmRzIGFyZSBhdmFpbGFibGUuIFRoYXQnbGwgaGVscCBuYXJyb3cgZG93biB0aGUgdGVzdGluZyBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjowMy40MjY4MTE3ODRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODM2Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9nZW5sX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTc0PXN0YXRpYyB2b2lkIG5iZF9jb25uZWN0X3JlcGx5KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBpbmRleCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzU6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzYtc3RhdGljIHZvaWQgbmJkX2RlYWRfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIxMTY9bmJkX2RldmljZV9wb2xpY3lbTkJEX0RFVklDRV9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjEyMTpzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEzNy1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxMzg6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTM5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjIxNi1cXHRzZXRfYml0KE5CRF9SVF9CT1VORCwgXFx1MDAyNmNvbmZpZy1cXHUwMDNlcnVudGltZV9mbGFncyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMjE3OlxcdHJldCA9IG5iZF9nZW5sX3NpemVfc2V0KGluZm8sIG5iZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjE4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIzMTk9c3RhdGljIHZvaWQgbmJkX2Rpc2Nvbm5lY3RfYW5kX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzM5LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjM0MDpzdGF0aWMgaW50IG5iZF9nZW5sX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNDEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzc0LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjM3NTpzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzc2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQzNy1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI0Mzg6XFx0cmV0ID0gbmJkX2dlbmxfc2l6ZV9zZXQoaW5mbywgbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0MzktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjUxND1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5iZF9jb25uZWN0X2dlbmxfb3BzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTctXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUxODpcXHRcXHQuZG9pdFxcdD0gbmJkX2dlbmxfY29ubmVjdCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTktXFx0fSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUyMi1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTIzOlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9kaXNjb25uZWN0LFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUyNC1cXHR9LFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTI3LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1Mjg6XFx0XFx0LmRvaXRcXHQ9IG5iZF9nZW5sX3JlY29uZmlndXJlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUyOS1cXHR9LFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTMyLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1MzM6XFx0XFx0LmRvaXRcXHQ9IG5iZF9nZW5sX3N0YXR1cyxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MzQtXFx0fSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjUzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5iZF9tY2FzdF9ncnBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1NDAtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTQxOnN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgbmJkX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1NDItXFx0LmhkcnNpemVcXHQ9IDAsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1ODY9c3RhdGljIGludCBzdGF0dXNfY2IoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1OTEtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTkyOnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTkzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjYxMi1cXHRcXHRnb3RvIG91dDtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI2MTM6XFx0cmVwbHlfaGVhZCA9IGdlbmxtc2dfcHV0X3JlcGx5KHJlcGx5LCBpbmZvLCBcXHUwMDI2bmJkX2dlbmxfZmFtaWx5LCAwLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjYxNC1cXHRcXHRcXHRcXHQgICAgICAgTkJEX0NNRF9TVEFUVVMpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNjUyPXN0YXRpYyB2b2lkIG5iZF9jb25uZWN0X3JlcGx5KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBpbmRleClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY2MC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNjYxOlxcdG1zZ19oZWFkID0gZ2VubG1zZ19wdXRfcmVwbHkoc2tiLCBpbmZvLCBcXHUwMDI2bmJkX2dlbmxfZmFtaWx5LCAwLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY2Mi1cXHRcXHRcXHRcXHQgICAgIE5CRF9DTURfQ09OTkVDVCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2NzY9c3RhdGljIHZvaWQgbmJkX21jYXN0X2luZGV4KGludCBpbmRleClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY4NC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNjg1OlxcdG1zZ19oZWFkID0gZ2VubG1zZ19wdXQoc2tiLCAwLCAwLCBcXHUwMDI2bmJkX2dlbmxfZmFtaWx5LCAwLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY4Ni1cXHRcXHRcXHRcXHQgICAgIE5CRF9DTURfTElOS19ERUFEKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY5Ni1cXHRnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI2OTc6XFx0Z2VubG1zZ19tdWx0aWNhc3QoXFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgc2tiLCAwLCAwLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2OTgtfVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNzA4PXN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzQ5OlxcdGlmIChnZW5sX3JlZ2lzdGVyX2ZhbWlseShcXHUwMDI2bmJkX2dlbmxfZmFtaWx5KSkge1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc1MC1cXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShuYmRfZGVsX3dxKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9Mjc3Mz1zdGF0aWMgdm9pZCBfX2V4aXQgbmJkX2NsZWFudXAodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc4MS1cXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3ODI6XFx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcXHUwMDI2bmJkX2dlbmxfZmFtaWx5KTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3ODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA2OjAzLjUwMTY1MjE2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM3NDYyMjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlJldmlld2luZyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgSW50ZXJmYWNlIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgbmV0d29yayBibG9jayBkZXZpY2UgaW50ZXJhY3Rpb24gbWV0aG9kcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb250cm9sIHBsYW5lIG9wdGlvbnMuIEkgc2VlIHdlIGhhdmUgdGhlIGBuYmRfZ2VubGAgY29tbWFuZHM6IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9nZW5sX3N0YXR1c2AuIFRoZXNlIGhhbmRsZSB0aGUgbWFuYWdlbWVudCBhbmQgY29uZmlndXJhdGlvbiBhc3BlY3QuIE5hdHVyYWxseSwgc2luY2UgdGhpcyBpcyBhIGJsb2NrIGRldmljZSwgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBhY2Nlc3MgcGF0aHMuIE5vdyBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgYG5iZF9pb2N0bGAgaXMgdGhlIHN0YW5kYXJkIGZvciB0aGUgZGF0YSBwbGFuZSwgb3IgaWYgd2UgaGF2ZSBzb21ldGhpbmcgZWxzZS4gTGV0J3Mgc2VlIGhvdyB0aG9zZSB3b3JrIHRvZ2V0aGVyLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDY6MDcuNTM5MTE3MjQ0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc3MzA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTE2NDg9c3RhdGljIHZvaWQgbmJkX3NldF9jbWRfdGltZW91dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1NjQgdGltZW91dClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY1Ny0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2NTg6c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY1OS1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA1OnN0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDYtXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcyNy1cXHQgICAgKGNtZCA9PSBOQkRfRElTQ09OTkVDVCB8fCBjbWQgPT0gTkJEX0NMRUFSX1NPQ0spKVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTcyODpcXHRcXHRlcnJvciA9IF9fbmJkX2lvY3RsKGJkZXYsIG5iZCwgY21kLCBhcmcpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcyOS1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MzI9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MzYtXFx0LnJlbGVhc2UgPVxcdG5iZF9yZWxlYXNlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgzNzpcXHQuaW9jdGwgPVxcdG5iZF9pb2N0bCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4Mzg6XFx0LmNvbXBhdF9pb2N0bCA9XFx0bmJkX2lvY3RsLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgzOS1cXHQuZnJlZV9kaXNrID1cXHRuYmRfZnJlZV9kaXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjowNy42MDc4OTQzNDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMzI5MjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgTkJEIFN5bWJvbHMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2dlbmxfZGlzY29ubmVjdGAgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlLiBUaGV5IHJlcHJlc2VudCB0aGUgY29yZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgTkJEIGRyaXZlci4gSSBicmllZmx5IGNvbnNpZGVyZWQgYG5iZF9xdWV1ZV9ycWAsIHNpbmNlIGl0J3MgdGhlIGJsb2NrIGxheWVyIHF1ZXVlIHJlcXVlc3QgY2FsbGJhY2sgYW5kIGEgZGVmaW5pdGUgaG90IHBhdGgsIGJ1dCB0aGUgcHJvbXB0J3MgYWR2aWNlIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3QgZGlzdHJpYnV0aW9ucyBmcm9tIHNrZXdpbmcgbWFrZXMgc2Vuc2UuIEknbGwgb21pdCBpdCBmb3Igbm93IGFuZCBzdGljayB3aXRoIHRoZSBpb2N0bCBhbmQgbmV0bGluayBoYW5kbGVycy5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgbmJkX3htaXRfdGltZW91dGAgaXMgYWxzbyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IHJlbGF0ZWQgdG8gdGltZW91dHMhIEFuZCBteSBwYXRjaCAqZG9lcyogbW9kaWZ5IHRpbWVvdXQgaGFuZGxpbmcgaW4gYG5iZF9wZW5kaW5nX2NtZF93b3JrYCwgZG9lc24ndCBpdD8gVGhhdCdzIGRlZmluaXRlbHkgcmVsZXZhbnQuIEkgbmVlZCB0byBpbmNsdWRlIHRoYXQgb25lLiBPa2F5LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG5iZF94bWl0X3RpbWVvdXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg5MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjoxMi42MTExODk0MThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTk3Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF94bWl0X3RpbWVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTQzNT1zdGF0aWMgc3RydWN0IG5iZF9jb25maWcgKm5iZF9nZXRfY29uZmlnX3VubG9ja2VkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTQ1MC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjQ1MTpzdGF0aWMgZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIG5iZF94bWl0X3RpbWVvdXQoc3RydWN0IHJlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTQ1Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE5NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NjgtXFx0LmluaXRfcmVxdWVzdFxcdD0gbmJkX2luaXRfcmVxdWVzdCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5Njk6XFx0LnRpbWVvdXRcXHQ9IG5iZF94bWl0X3RpbWVvdXQsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTcwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA2OjEyLjcwNDc5MTM1N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg4ODQ1MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBOQkQgU3ltYm9scyoqXG5cblJpZ2h0LCBzbyBgbmJkX3htaXRfdGltZW91dGAgbG9va3MgbGlrZSBhIGtleSBwaWVjZSBoZXJlLCB0aGF0J3MgZ29vZCB0byBzZWUuIEkgbmVlZCB0byBzdW1tYXJpemUgdGhlIGNvcmUgc3ltYm9scyB0aGF0IGFyZSB1bmRlciBjb25zaWRlcmF0aW9uIGFuZCBzZWUgaG93IHRoZXkgd29yayB0b2dldGhlci4gSSdtIGZvY3VzaW5nIG9uOlxuXG4qICAgYG5iZF9pb2N0bGAgLSBwcm9iYWJseSB0aGUgZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBkZXZpY2UgaW50ZXJhY3Rpb25zLlxuKiAgIGBuYmRfZ2VubF9jb25uZWN0YCAtIGxpa2VseSBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgd2l0aCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZS5cbiogICBgbmJkX2dlbmxfcmVjb25maWd1cmVgIC0gc291bmRzIGxpa2UgdGhlIHdheSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIG1vZGlmaWVkIHZpYSBuZXRsaW5rLlxuKiAgIGBuYmRfZ2VubF9kaXNjb25uZWN0YCAtIHByZXN1bWFibHkgaG93IGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQuXG4qICAgYG5iZF94bWl0X3RpbWVvdXRgIC0gdGhlIHRpbWVvdXQgZnVuY3Rpb24sIGltcG9ydGFudCBmb3IgdGhpcyBhbmFseXNpcy5cblxuTm93LCBhIGNyaXRpY2FsIHBvaW50IOKAkyB0aGUgcGF0Y2ggdG91Y2hlcyBgbmJkX3BlbmRpbmdfY21kX3dvcmtgLiBIbW0sIHRoYXQncyBhICp3b3JrcXVldWUqIGZ1bmN0aW9uLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBob3cgaXQgZ2V0cyB0cmlnZ2VyZWQuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEhvdyBpcyB0aGlzIHdvcmtxdWV1ZSBhY3R1YWxseSAqc2NoZWR1bGVkKj8gQSBxdWljayBsb29rIHJldmVhbHMgdGhhdCBgbmJkX3NjaGVkX3BlbmRpbmdfd29ya2AgaXMgdGhlIHNjaGVkdWxpbmcgZnVuY3Rpb24uIFRoYXQncyB0aGUgbGluay4gVGhhdCB0ZWxscyBtZSB3aGF0IG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgdG8gZXhhbWluZSBob3cgdGhlIHdvcmsgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDY6MTcuMDkzNjM5MDE0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ4NjU3NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX3NjaGVkX3BlbmRpbmdfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9NjEyPXN0YXRpYyBpbmxpbmUgaW50IHdhc19pbnRlcnJ1cHRlZChpbnQgcmVzdWx0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy02MjQtICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzo2MjU6c3RhdGljIHZvaWQgbmJkX3NjaGVkX3BlbmRpbmdfd29yayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNjI2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTY0NT1zdGF0aWMgYmxrX3N0YXR1c190IG5iZF9zZW5kX2NtZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX2NtZCAqY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy03MjUtXFx0XFx0XFx0aWYgKHNlbnQpIHtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjcyNjpcXHRcXHRcXHRcXHRuYmRfc2NoZWRfcGVuZGluZ193b3JrKG5iZCwgbnNvY2ssIGNtZCwgc2VudCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy03MjctXFx0XFx0XFx0XFx0cmV0dXJuIEJMS19TVFNfT0s7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTc2My1cXHRcXHRcXHRcXHRpZiAod2FzX2ludGVycnVwdGVkKHJlc3VsdCkpIHtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjc2NDpcXHRcXHRcXHRcXHRcXHRuYmRfc2NoZWRfcGVuZGluZ193b3JrKG5iZCwgbnNvY2ssIGNtZCwgc2VudCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy03NjUtXFx0XFx0XFx0XFx0XFx0cmV0dXJuIEJMS19TVFNfT0s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA2OjE3LjE5ODUwOTY2MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTkxNTk4NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOQkQgTmV0d29yayBCbG9jayBEZXZpY2UgUGFydGlhbCBTZW5kcyBhbmQgUmVjb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYG5iZF9zY2hlZF9wZW5kaW5nX3dvcmtgIGlzIHRyaWdnZXJlZCBieSBwYXJ0aWFsIHNlbmRzLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHJlZmluaW5nIGBuYmRfcGVuZGluZ19jbWRfd29ya2AgdG8gZ3JhY2VmdWxseSBtYW5hZ2UgdGhlc2UgcGFydGlhbCBzZW5kcyBhbmQgYWxzbyBkZWFsIHdpdGggcG90ZW50aWFsbHkgZGVhZCBzb2NrZXRzLiBUaGUgY2hhbmdlcyB0byBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIGFyZSBpbXBvcnRhbnQgdG9vLCBlc3BlY2lhbGx5IHRoZSBuZXcgY2hlY2sgZm9yIGBuc29jay1cdTAwM2VwZW5kaW5nYC4gU2luY2UgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCBpcyBjYWxsZWQgYnkgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgdGhhdCBsYXR0ZXIgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBhIGtleSBhcmVhIHRvIHNjcnV0aW5pemUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBmb2N1cyBvbiB0aGF0LlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBhbnkgb3RoZXIgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBXZSBrbm93IGBCTEtfREVWX05CRGAgcmVxdWlyZXMgYE5FVGAsIGJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEknbGwgcmUtZXhhbWluZSB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZSBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2ggYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwuIEJlc3QgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMxNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjoyMi4xOTAxMTE0MzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzY5NzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9OQkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDY6MjIuMjk3ODEzMjI3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjY2MDQzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRG91YmxlLUNoZWNraW5nIHRoZSBEYXRhOiBBIFBydWRlbnQgUmUtcmVhZCoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGZpbmFsaXplIGFueSBjb25jbHVzaW9ucyBvciBtb3ZlIGZvcndhcmQgd2l0aCBmdXJ0aGVyIGFuYWx5c2lzLCBJJ20gZ29pbmcgdG8gdGFrZSBhIG1vbWVudC4gR2l2ZW4gdGhlIG51YW5jZXMgYW5kIHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaW5oZXJlbnQgaW4gdGhpcyBkYXRhLCBhIHF1aWNrIHJlLXJlYWQgb2YgdGhlIGZpbGUgc2VlbXMgcHJ1ZGVudC4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgdGhhdCBvZnRlbiBzYXZlcyB0aW1lIGRvd24gdGhlIGxpbmUuIEkgd2FudCB0byBlbnN1cmUgbXkgaW5pdGlhbCBpbnRlcnByZXRhdGlvbiBob2xkcyB1cCB1bmRlciBhIGZyZXNoIGxvb2sgYW5kIHRoYXQgSSBoYXZlbid0IG1pc3NlZCBhbnkgc3VidGxlIGJ1dCBjcml0aWNhbCBkZXRhaWxzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2guIE5vIHBvaW50IGluIHByb2NlZWRpbmcgb24gYSBzaGFreSBmb3VuZGF0aW9uLiBMZXQncyBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBvcmRlciBiZWZvcmUgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjoyNS45MjQ0MjA4OTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NjpcXHRjb25maWcgQkxLX0RFVl9OQkRcXG4gMTk3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAxOTg6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gMTk5OlxcdFxcdGhlbHBcXG4gMjAwOlxcdFxcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdXIgY29tcHV0ZXIgdG8gYmUgYSBjbGllbnQgZm9yIG5ldHdvcmtcXG4gMjAxOlxcdFxcdCAgYmxvY2sgZGV2aWNlcywgaS5lLiBpdCB3aWxsIGJlIGFibGUgdG8gdXNlIGJsb2NrIGRldmljZXMgZXhwb3J0ZWQgYnlcXG4gMjAyOlxcdFxcdCAgc2VydmVycyAobW91bnQgZmlsZSBzeXN0ZW1zIG9uIHRoZW0gZXRjLikuIENvbW11bmljYXRpb24gYmV0d2VlblxcbiAyMDM6XFx0XFx0ICBjbGllbnQgYW5kIHNlcnZlciB3b3JrcyBvdmVyIFRDUC9JUCBuZXR3b3JraW5nLCBidXQgdG8gdGhlIGNsaWVudFxcbiAyMDQ6XFx0XFx0ICBwcm9ncmFtIHRoaXMgaXMgaGlkZGVuOiBpdCBsb29rcyBsaWtlIGEgcmVndWxhciBsb2NhbCBmaWxlIGFjY2VzcyB0b1xcbiAyMDU6XFx0XFx0ICBhIGJsb2NrIGRldmljZSBzcGVjaWFsIGZpbGUgc3VjaCBhcyAvZGV2L25kMC5cXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0ICBOZXR3b3JrIGJsb2NrIGRldmljZXMgYWxzbyBhbGxvd3MgeW91IHRvIHJ1biBhIGJsb2NrLWRldmljZSBpblxcbiAyMDg6XFx0XFx0ICB1c2VybGFuZCAobWFraW5nIHNlcnZlciBhbmQgY2xpZW50IHBoeXNpY2FsbHkgdGhlIHNhbWUgY29tcHV0ZXIsXFxuIDIwOTpcXHRcXHQgIGNvbW11bmljYXRpbmcgdXNpbmcgdGhlIGxvb3BiYWNrIG5ldHdvcmsgZGV2aWNlKS5cXG4gMjEwOlxcdFxcbiAyMTE6XFx0XFx0ICBSZWFkIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvbmJkLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24sXFxuIDIxMjpcXHRcXHQgIGVzcGVjaWFsbHkgYWJvdXQgd2hlcmUgdG8gZmluZCB0aGUgc2VydmVyIGNvZGUsIHdoaWNoIHJ1bnMgaW4gdXNlclxcbiAyMTM6XFx0XFx0ICBzcGFjZSBhbmQgZG9lcyBub3QgbmVlZCBzcGVjaWFsIGtlcm5lbCBzdXBwb3J0LlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIE5GU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjoyNS45MjQ1MjI5ODNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQyMTE0ODg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIGBCTEtfREVWX05CRGAgYW5kIGBORVRgIGNvbmZpZ3VyYXRpb25zLiBgTkVUYCBpcyBwcmV0dHkgbXVjaCBhIGdpdmVuLCBhIHN0YW5kYXJkIHBhcnQgb2YgdGhpbmdzLCBidXQgaXQncyB3b3J0aCBpbmNsdWRpbmcgaXQgYW55d2F5IGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IEkgbmVlZCB0byBjaGVjayB0aGUgXCJkZXBlbmRzIG9uXCIgbGluZXMgd2l0aGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIGB2bWxpbnV4YC4gVGhleSB3YW50IHRoZW0gbGlzdGVkIGluIHRoZSBgRW5hYmxlQ29uZmlnc2Agb3V0cHV0IGFycmF5LCBhbmQgaW1wb3J0YW50bHksIHRoZXkgd2FudCBtZSB0byBsZWF2ZSBvZmYgdGhlIFwiQ09ORklHX1wiIHByZWZpeC4gU28sIGBORVRgIGlzIHByb2JhYmx5IGZpbmUgdG8gaW5jbHVkZSwgYW5kIEknbGwgZGVmaW5pdGVseSBpbmNsdWRlIGBCTEtfREVWX05CRGAuXG5cbkxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSByZWxldmFudC4uLiBOb3BlLCBub3RoaW5nIGVsc2UganVtcHMgb3V0LlxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgZm9jdXMgc3ltYm9scyB0byBzZWUgaWYgdGhleSBhcmUgc3RhdGljOlxuKiAgIGBuYmRfaW9jdGxgXG4qICAgYG5iZF9nZW5sX2Nvbm5lY3RgXG4qICAgYG5iZF9nZW5sX3JlY29uZmlndXJlYFxuKiAgIGBuYmRfZ2VubF9kaXNjb25uZWN0YFxuKiAgIGBuYmRfeG1pdF90aW1lb3V0YFxuXG5gbmJkX2dlbmxfcmVjb25maWd1cmVgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZCwgYnV0IGl0J3MgYW4gZW50cnkgcG9pbnQgZm9yIG5ldGxpbmsuIGBuYmRfaW9jdGxgIGlzIGFsc28gc3RhdGljLiBXYWl0IGEgbWludXRlISBJdCBpcyBzdGF0aWMgaW4gYGRyaXZlcnMvYmxvY2svbmJkLmNgLiBSaWdodCwgc28gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB3aXRoaW4gYG5iZC5jYCB3aGljaCBJIGhhdmVuJ3QgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNzcsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjozNS4zNDU2NzU4MTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzM3MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIG5iZF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTU1PXN0YXRpYyBpbnQgbmJkX3RvdGFsX2RldmljZXMgPSAwO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtNTYtXFxuZHJpdmVycy9ibG9jay9uYmQuYzo1NzpzdHJ1Y3QgbmJkX3NvY2sge1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtNTgtXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9NzU9c3RydWN0IGxpbmtfZGVhZF9hcmdzIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtOTEtXFxuZHJpdmVycy9ibG9jay9uYmQuYzo5MjpzdHJ1Y3QgbmJkX2NvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9uYmQuYy05My1cXHR1MzIgZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTExMT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuYmRfYmxrc2l6ZShzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMTUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMTY6c3RydWN0IG5iZF9kZXZpY2Uge1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTE3LVxcdHN0cnVjdCBibGtfbXFfdGFnX3NldCB0YWdfc2V0O1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDctXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNDg6c3RydWN0IG5iZF9jbWQge1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ5LVxcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA2OjM1LjQwOTAxNzUyMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODE4NTA1MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKklkZW50aWZ5aW5nIER5bmFtaWMgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhcyB3aGVyZSB0aGUgYmVoYXZpb3IgaXMgKm5vdCogZml4ZWQsIHRoZSBhc3BlY3RzIHRoYXQgYXJlLCBmb3IgbGFjayBvZiBhIGJldHRlciB0ZXJtLCBcImFsaXZlLlwiIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0J3MgYSByZWFzb25hYmxlIGZpcnN0IHN0ZXAuIEl0J3MgYSBmdW5kYW1lbnRhbCBmaWx0ZXI7IEkgd2FudCB0byBjdXQgdGhyb3VnaCB0aGUgbm9pc2Ugb2YgcHVyZWx5IGluZnJhc3RydWN0dXJhbCBvciBkYXRhLWhvbGRpbmcgcGFydHMgb2YgdGhlIGNvZGUgdG8gZmluZCB0aGUgc2VjdGlvbnMgdGhhdCAqZG8qIHNvbWV0aGluZywgdGhhdCBhcmUgY2FwYWJsZSBvZiBjaGFuZ2luZyBzdGF0ZSwgcmVzcG9uZGluZyB0byBpbnB1dCwgYW5kIGRyaXZpbmcgcHJvZ3JhbSBmbG93LiBUaGlzIGluaXRpYWwgcXVlcnkgZ2l2ZXMgbWUgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIGZpbmQgdGhlIGR5bmFtaWMgZWxlbWVudHMgaW4gdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA2OjQ0LjIyNzUyNjAzMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwMzE4NDk2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IG5iZF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDY6NDQuNDk3ODU0NDA3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDcwMDMwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipJbml0aWFsIFRob3VnaHRzIG9uIGBuYmQuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmJkLmNgIGZpbGUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGFsbW9zdCBldmVyeXRoaW5nIGhlcmUgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIHN0YXRpYy4gSSdkIHdhZ2VyIHRoYXQgdGhlIHZhc3QgbWFqb3JpdHkgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgYXJlIGRlc2lnbmVkIGZvciBpbnRlcm5hbCB1c2UsIGhpZGRlbiBmcm9tIHRoZSBvdXRzaWRlIHdvcmxkLiBJJ20gdGhpbmtpbmcsIG1vc3QgbGlrZWx5LCBvbmx5IGBuYmRfaW5pdGAgYW5kIGBuYmRfY2xlYW51cGAgYXJlIGdvaW5nIHRvIGJlIGV4cG9zZWQgYXMgZW50cnkgcG9pbnRzIHRvIHRoZSBmdW5jdGlvbmFsaXR5IHRoaXMgZmlsZSBwcm92aWRlcy4gRXZlcnl0aGluZyBlbHNlLi4uIHRoZSBpbnRyaWNhdGUgZGV0YWlscyBvZiBob3cgaXQgaGFuZGxlcyByZXF1ZXN0cywgbWFuYWdlcyBjb25uZWN0aW9ucywgdGFsa3MgdG8gdGhlIGtlcm5lbCwgdGhhdCdzIGFsbCBpbnRlcm5hbC4gQW5kIHRoYXQncyB3aGF0IEknZCBleHBlY3Q7IGl0IG1ha2VzIGZvciBjbGVhbmVyLCBtb3JlIG1haW50YWluYWJsZSBjb2RlLiBOb3csIGxldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHNlZSBpZiBteSBndWVzcyBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA2OjQ4LjQ0NDg2MDA2N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MDY4Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IG5iZF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTU0PXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmJkX2RlbF93cTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjU1OnN0YXRpYyBpbnQgbmJkX3RvdGFsX2RldmljZXMgPSAwO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtNTYtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE2OT1zdGF0aWMgaW50IHBhcnRfc2hpZnQ7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzAtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzE6c3RhdGljIGludCBuYmRfZGV2X2RiZ19pbml0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcyLXN0YXRpYyB2b2lkIG5iZF9kZXZfZGJnX2Nsb3NlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xNzQ9c3RhdGljIHZvaWQgbmJkX2Nvbm5lY3RfcmVwbHkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NTpzdGF0aWMgaW50IG5iZF9nZW5sX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3Ni1zdGF0aWMgdm9pZCBuYmRfZGVhZF9saW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9Mjg3PXN0YXRpYyB2b2lkIG5iZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjk4LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjk5OnN0YXRpYyBpbnQgbmJkX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzAwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MzA1PXN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzMzLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MzM0OnN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMzUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz04MTA9c3RhdGljIHZvaWQgbmJkX3BlbmRpbmdfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy04NjgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzo4Njk6c3RhdGljIGludCBuYmRfcmVhZF9yZXBseShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODcwLVxcdFxcdFxcdCAgc3RydWN0IG5iZF9yZXBseSAqcmVwbHkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEyOTg9c3RhdGljIGlubGluZSB2b2lkIG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrKSB7fVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzAwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTMwMTpzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTMwMi1cXHRcXHRcXHQgIGJvb2wgbmV0bGluaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM3My1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEzNzQ6c3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEzNzUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xNDU1PXN0YXRpYyB2b2lkIHNlbmRfZGlzY29ubmVjdHMoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ3OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE0Nzk6c3RhdGljIGludCBuYmRfZGlzY29ubmVjdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ4MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE0OTc9c3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTUzNS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE1MzY6c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNTM3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYwNy1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2MDg6c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjA5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTY1OD1zdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA1OnN0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDYtXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTczNC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3MzU6c3RhdGljIGludCBuYmRfYWxsb2NfYW5kX2luaXRfY29uZmlnKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzM2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc2OS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NzA6c3RhdGljIGludCBuYmRfb3BlbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc3MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MzI9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4NDMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODQ0OnN0YXRpYyBpbnQgbmJkX2RiZ190YXNrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg0NS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4NTQ9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfdGFza3MpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg1NS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4NTY6c3RhdGljIGludCBuYmRfZGJnX2ZsYWdzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODU3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTg4Mz1ERUZJTkVfU0hPV19BVFRSSUJVVEUobmJkX2RiZ19mbGFncyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODg0LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTg4NTpzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4ODYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xOTEwPXN0YXRpYyB2b2lkIG5iZF9kZXZfZGJnX2Nsb3NlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MTQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTE1OnN0YXRpYyBpbnQgbmJkX2RiZ19pbml0KHZvaWQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTE2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTkyOD1zdGF0aWMgdm9pZCBuYmRfZGJnX2Nsb3NlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MzQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTM1OnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkzNi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE5NDA9c3RhdGljIHZvaWQgbmJkX2Rldl9kYmdfY2xvc2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk0My1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5NDQ6c3RhdGljIGludCBuYmRfZGJnX2luaXQodm9pZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xOTQ5PXN0YXRpYyB2b2lkIG5iZF9kYmdfY2xvc2Uodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk1NC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5NTU6c3RhdGljIGludCBuYmRfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTU2LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgaGN0eF9pZHgsIGludCBudW1hX25vZGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIxMTY9bmJkX2RldmljZV9wb2xpY3lbTkJEX0RFVklDRV9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjEyMTpzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEzNy1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxMzg6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTM5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjMxOT1zdGF0aWMgdm9pZCBuYmRfZGlzY29ubmVjdF9hbmRfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzMzktXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzQwOnN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM0MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNzQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzc1OnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNzYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTg2PXN0YXRpYyBpbnQgc3RhdHVzX2NiKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTkxLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjU5MjpzdGF0aWMgaW50IG5iZF9nZW5sX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU5My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI3MDg9c3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc2MC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NjE6c3RhdGljIGludCBuYmRfZXhpdF9jYihpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjo0OC42MTg5MzM0MjVaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1OTQxNzY0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkJEIERyaXZlciBBUEkgRW50cnkgUG9pbnRzIGFuZCBGdXp6aW5nIFRhcmdldCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBBUEkgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBJJ20gZ29pbmcgd2l0aCBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2dlbmxfZGlzY29ubmVjdGAsIGFuZCBgbmJkX3htaXRfdGltZW91dGAuIFRoZXNlIGFyZSBhbGwgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgZ2F2ZSBtZSBwYXVzZSBnaXZlbiB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB0aGV5IGFyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYSBzdHJ1Y3R1cmUgKGUuZy4sIGAuaW9jdGwgPSBuYmRfaW9jdGxgKS4gVGhpcyBtZWFucyB0aGV5ICphcmVuJ3QqIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCB0aGVyZWZvcmUgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBtYWtpbmcgdGhlbSBwZXJmZWN0bHkgdmFsaWQgZW50cnkgcG9pbnRzLiBUaGF0J3MgZ29vZC5cblxuTm93LCBsZXQncyByZS1leGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHdvcnRoIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBuYmRfc2VuZF9jbWRgIGFuZCBgbmJkX3BlbmRpbmdfY21kX3dvcmtgLCBwYXJ0aWN1bGFybHkgaG93IHBhcnRpYWwgc2VuZHMgYXJlIG1hbmFnZWQuIFRoZSBwYXRjaCBzZWVtcyB0byBtYXJrIHRoZSBzb2NrZXQgYXMgZGVhZCBpZiBhIHBhcnRpYWwgc2VuZCBoYXBwZW5zLCB3aGljaCBzaG91bGQgY2xlYXIgYG5zb2NrLVx1MDAzZXBlbmRpbmdgIGFuZCBgbnNvY2stXHUwMDNlc2VudGAuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGluIGBuYmRfcmVjb25uZWN0X3NvY2tldGAgZm9yIGBuc29jay1cdTAwM2VwZW5kaW5nYCBhbmQgc2tpcHMgaWYgc2V0LiBUaGlzIGlzIGZ1bmN0aW9uYWwsIGFkZHJlc3NpbmcgYSBidWcgYXNzb2NpYXRlZCB3aXRoIHBhcnRpYWwgc2VuZHMgYW5kIHBvdGVudGlhbCBzb2NrZXQgcmV1c2UgaXNzdWVzLiBZZXMsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5leHQsIEkgbmVlZCB0byBkZWZpbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgb2J2aW91cyBvbmUgaGVyZSBpcyBgQkxLX0RFVl9OQkRgLiBJJ2xsIGRvdWJsZS1jaGVjayBkZXBlbmRlbmNpZXMuIGBCTEtfREVWX05CRGAgZGVwZW5kcyBvbiBgTkVUYCwgYW5kIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgaGVyZS4gU28sIGBCTEtfREVWX05CRGAgaXMgdGhlIHByaW1hcnkgY29uZmlnLlxuXG5UaGVyZWZvcmUsIGZvciBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSB3aWxsIGluY2x1ZGUgYEJMS19ERVZfTkJEYCwgYW5kIGZvciBmb2N1cyBzeW1ib2xzLCBJIGhhdmUgdGhlIGVudHJ5IHBvaW50czogYG5iZF9pb2N0bGAsIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBhbmQgYG5iZF94bWl0X3RpbWVvdXRgLiBJIGFtIG5vdyByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDM5LCJPdXRwdXRUb2tlbnMiOjEzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjo1OS4yMTMxMTI3MTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDA2MDU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfZ2VubF9kaXNjb25uZWN0XCIsXG4gICAgXCJuYmRfeG1pdF90aW1lb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBzZW5kcyBhbmQgZGVhZCBzb2NrZXRzLCBwcmV2ZW50aW5nIHNvY2tldCByZXVzZSB3aGVuIGEgcmVxdWVzdCBpcyBwYXJ0aWFsbHkgdHJhbnNtaXR0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfZ2VubF9kaXNjb25uZWN0XCIsXG4gICAgXCJuYmRfeG1pdF90aW1lb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBzZW5kcyBhbmQgZGVhZCBzb2NrZXRzLCBwcmV2ZW50aW5nIHNvY2tldCByZXVzZSB3aGVuIGEgcmVxdWVzdCBpcyBwYXJ0aWFsbHkgdHJhbnNtaXR0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdv9b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 17:44:13 +0000 UTC FinishedAt: 2026-08-01 18:07:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "c91e80ab-050e-47ba-89c4-067e835c87c6" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nbd_ioctl", "nbd_genl_connect", "nbd_genl_reconfigure", "nbd_genl_disconnect", "nbd_xmit_timeout" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfZGlzY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfeG1pdF90aW1lb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBkcml2ZXIgdG8gcHJvcGVybHkgaGFuZGxlIHBhcnRpYWwgc2VuZHMgYW5kIGRlYWQgc29ja2V0cywgcHJldmVudGluZyBzb2NrZXQgcmV1c2Ugd2hlbiBhIHJlcXVlc3QgaXMgcGFydGlhbGx5IHRyYW5zbWl0dGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBkcml2ZXIgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2ZlZDgwNGQ1YjViZWY5MjJkZmQ5NTBjZDUyMDEwY2FiZWMwNGI4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTg6MDU6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjcuLjdhNDYyYTYyNjMwNmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMzI3LDggJiM0MzszMjcsOCBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXG4gXHRcdH1cbiBcdH1cbiBcdG5zb2NrLVx1MDAzZWRlYWQgPSB0cnVlO1xuLVx0bnNvY2stXHUwMDNlcGVuZGluZyA9IE5VTEw7XG4tXHRuc29jay1cdTAwM2VzZW50ID0gMDtcbiYjNDM7XHRpZiAoIW5zb2NrLVx1MDAzZXBlbmRpbmcpXG4mIzQzO1x0XHRuc29jay1cdTAwM2VzZW50ID0gMDtcbiB9XG4gXG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbkBAIC03OTMsOCAmIzQzOzc5MywxMCBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG5iZF9zZW5kX2NtZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX2NtZCAqY21kLFxuIFx0ICpcbiBcdCAqIFdlIG11c3QgcnVuIGZyb20gcGVuZGluZyB3b3JrIGZ1bmN0aW9uLlxuIFx0ICogKi9cbi1cdGlmICh0ZXN0X2JpdChOQkRfQ01EX1BBUlRJQUxfU0VORCwgXHUwMDI2Y21kLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRpZiAodGVzdF9iaXQoTkJEX0NNRF9QQVJUSUFMX1NFTkQsIFx1MDAyNmNtZC1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdG5iZF9tYXJrX25zb2NrX2RlYWQobmJkLCBuc29jaywgMSk7XG4gXHRcdHJldHVybiBCTEtfU1RTX09LO1xuJiM0MztcdH1cbiBcbiBcdC8qIHJldHJ5IG9uIGEgZGlmZmVyZW50IHNvY2tldCAqL1xuIFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtXHUwMDNlZGlzayksXG5AQCAtODI2LDggJiM0Mzs4MjgsMTggQEAgc3RhdGljIHZvaWQgbmJkX3BlbmRpbmdfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRpZiAoIW5zb2NrLVx1MDAzZXBlbmRpbmcpXG4gXHRcdFx0YnJlYWs7XG4gXG4mIzQzO1x0XHRpZiAobnNvY2stXHUwMDNlZGVhZClcbiYjNDM7XHRcdFx0Z290byBkZWFkO1xuJiM0MztcbiBcdFx0LyogZG9uJiMzOTt0IGJvdGhlciB0aW1lb3V0IGhhbmRsZXIgZm9yIHBhcnRpYWwgc2VuZGluZyAqL1xuIFx0XHRpZiAoUkVBRF9PTkNFKGppZmZpZXMpICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMod2FpdF9tcykgXHUwMDNlPSBkZWFkbGluZSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBUaGUgc29ja2V0IGNvbnRhaW5zIGEgcGFydGlhbGx5IHRyYW5zbWl0dGVkIHJlcXVlc3RcbiYjNDM7XHRcdFx0ICogYW5kIGNhbm5vdCBiZSByZXVzZWQgZm9yIGFub3RoZXIgTkJEIHJlcXVlc3QuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpO1xuJiM0MztcdFx0XHRuc29jay1cdTAwM2VwZW5kaW5nID0gTlVMTDtcbiYjNDM7XHRcdFx0bnNvY2stXHUwMDNlc2VudCA9IDA7XG4gXHRcdFx0Y21kLVx1MDAzZXN0YXR1cyA9IEJMS19TVFNfSU9FUlI7XG4gXHRcdFx0YmxrX21xX2NvbXBsZXRlX3JlcXVlc3QocmVxKTtcbiBcdFx0XHRicmVhaztcbkBAIC04NDAsNiAmIzQzOzg1MiwxOCBAQCBzdGF0aWMgdm9pZCBuYmRfcGVuZGluZ19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNtZC1cdTAwM2Vsb2NrKTtcbiBcdG5iZF9jb25maWdfcHV0KG5iZCk7XG4mIzQzO1x0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBDb21wbGV0ZSB0aGUgcmVxdWVzdCBoZXJlOyBuYmRfY2xlYXJfcmVxKCkgd2lsbCBub3QgaGFuZGxlIGl0LiAqL1xuJiM0MztkZWFkOlxuJiM0MztcdG5zb2NrLVx1MDAzZXBlbmRpbmcgPSBOVUxMO1xuJiM0MztcdG5zb2NrLVx1MDAzZXNlbnQgPSAwO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuc29jay1cdTAwM2V0eF9sb2NrKTtcbiYjNDM7XHRjbGVhcl9iaXQoTkJEX0NNRF9QQVJUSUFMX1NFTkQsIFx1MDAyNmNtZC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Y21kLVx1MDAzZXN0YXR1cyA9IEJMS19TVFNfSU9FUlI7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmNtZC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRibGtfbXFfY29tcGxldGVfcmVxdWVzdChyZXEpO1xuJiM0MztcdG5iZF9jb25maWdfcHV0KG5iZCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmJkX3JlYWRfcmVwbHkoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IHNvY2tldCAqc29jayxcbkBAIC0xMzc2LDYgJiM0MzsxNDAwLDEwIEBAIHN0YXRpYyBpbnQgbmJkX3JlY29ubmVjdF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5zb2NrLVx1MDAzZXR4X2xvY2spO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4mIzQzO1x0XHRpZiAobnNvY2stXHUwMDNlcGVuZGluZykge1xuJiM0MztcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bnNvY2stXHUwMDNldHhfbG9jayk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuIFx0XHRza19zZXRfbWVtYWxsb2Moc29jay1cdTAwM2Vzayk7XG4gXHRcdGlmIChuYmQtXHUwMDNldGFnX3NldC50aW1lb3V0KVxuIFx0XHRcdHNvY2stXHUwMDNlc2stXHUwMDNlc2tfc25kdGltZW8gPSBuYmQtXHUwMDNldGFnX3NldC50aW1lb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Rpc2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX3htaXRfdGltZW91dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIHByb3Blcmx5IGhhbmRsZSBwYXJ0aWFsIHNlbmRzIGFuZCBkZWFkIHNvY2tldHMsIHByZXZlbnRpbmcgc29ja2V0IHJldXNlIHdoZW4gYSByZXF1ZXN0IGlzIHBhcnRpYWxseSB0cmFuc21pdHRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNmZWQ4MDRkNWI1YmVmOTIyZGZkOTUwY2Q1MjAxMGNhYmVjMDRiOGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDE4OjA1OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggOGYxMDc2MmU5MGVmNy4uN2E0NjJhNjI2MzA2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0zMjcsOCAmIzQzOzMyNyw4IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jaywKIAkJfQogCX0KIAluc29jay0mZ3Q7ZGVhZCA9IHRydWU7Ci0JbnNvY2stJmd0O3BlbmRpbmcgPSBOVUxMOwotCW5zb2NrLSZndDtzZW50ID0gMDsKJiM0MzsJaWYgKCFuc29jay0mZ3Q7cGVuZGluZykKJiM0MzsJCW5zb2NrLSZndDtzZW50ID0gMDsKIH0KIAogc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSkKQEAgLTc5Myw4ICYjNDM7NzkzLDEwIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX3NlbmRfY21kKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfY21kICpjbWQsCiAJICoKIAkgKiBXZSBtdXN0IHJ1biBmcm9tIHBlbmRpbmcgd29yayBmdW5jdGlvbi4KIAkgKiAqLwotCWlmICh0ZXN0X2JpdChOQkRfQ01EX1BBUlRJQUxfU0VORCwgJmFtcDtjbWQtJmd0O2ZsYWdzKSkKJiM0MzsJaWYgKHRlc3RfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCAmYW1wO2NtZC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQluYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpOwogCQlyZXR1cm4gQkxLX1NUU19PSzsKJiM0MzsJfQogCiAJLyogcmV0cnkgb24gYSBkaWZmZXJlbnQgc29ja2V0ICovCiAJZGV2X2Vycl9yYXRlbGltaXRlZChkaXNrX3RvX2RldihuYmQtJmd0O2Rpc2spLApAQCAtODI2LDggJiM0Mzs4MjgsMTggQEAgc3RhdGljIHZvaWQgbmJkX3BlbmRpbmdfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlpZiAoIW5zb2NrLSZndDtwZW5kaW5nKQogCQkJYnJlYWs7CiAKJiM0MzsJCWlmIChuc29jay0mZ3Q7ZGVhZCkKJiM0MzsJCQlnb3RvIGRlYWQ7CiYjNDM7CiAJCS8qIGRvbiYjMzk7dCBib3RoZXIgdGltZW91dCBoYW5kbGVyIGZvciBwYXJ0aWFsIHNlbmRpbmcgKi8KIAkJaWYgKFJFQURfT05DRShqaWZmaWVzKSAmIzQzOyBtc2Vjc190b19qaWZmaWVzKHdhaXRfbXMpICZndDs9IGRlYWRsaW5lKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUaGUgc29ja2V0IGNvbnRhaW5zIGEgcGFydGlhbGx5IHRyYW5zbWl0dGVkIHJlcXVlc3QKJiM0MzsJCQkgKiBhbmQgY2Fubm90IGJlIHJldXNlZCBmb3IgYW5vdGhlciBOQkQgcmVxdWVzdC4KJiM0MzsJCQkgKi8KJiM0MzsJCQluYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpOwomIzQzOwkJCW5zb2NrLSZndDtwZW5kaW5nID0gTlVMTDsKJiM0MzsJCQluc29jay0mZ3Q7c2VudCA9IDA7CiAJCQljbWQtJmd0O3N0YXR1cyA9IEJMS19TVFNfSU9FUlI7CiAJCQlibGtfbXFfY29tcGxldGVfcmVxdWVzdChyZXEpOwogCQkJYnJlYWs7CkBAIC04NDAsNiAmIzQzOzg1MiwxOCBAQCBzdGF0aWMgdm9pZCBuYmRfcGVuZGluZ19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Y21kLSZndDtsb2NrKTsKIAluYmRfY29uZmlnX3B1dChuYmQpOwomIzQzOwlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIENvbXBsZXRlIHRoZSByZXF1ZXN0IGhlcmU7IG5iZF9jbGVhcl9yZXEoKSB3aWxsIG5vdCBoYW5kbGUgaXQuICovCiYjNDM7ZGVhZDoKJiM0MzsJbnNvY2stJmd0O3BlbmRpbmcgPSBOVUxMOwomIzQzOwluc29jay0mZ3Q7c2VudCA9IDA7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25zb2NrLSZndDt0eF9sb2NrKTsKJiM0MzsJY2xlYXJfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCAmYW1wO2NtZC0mZ3Q7ZmxhZ3MpOwomIzQzOwljbWQtJmd0O3N0YXR1cyA9IEJMS19TVFNfSU9FUlI7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2NtZC0mZ3Q7bG9jayk7CiYjNDM7CWJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KHJlcSk7CiYjNDM7CW5iZF9jb25maWdfcHV0KG5iZCk7CiB9CiAKIHN0YXRpYyBpbnQgbmJkX3JlYWRfcmVwbHkoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IHNvY2tldCAqc29jaywKQEAgLTEzNzYsNiAmIzQzOzE0MDAsMTAgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJCW11dGV4X3VubG9jaygmYW1wO25zb2NrLSZndDt0eF9sb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiYjNDM7CQlpZiAobnNvY2stJmd0O3BlbmRpbmcpIHsKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDtuc29jay0mZ3Q7dHhfbG9jayk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiAJCXNrX3NldF9tZW1hbGxvYyhzb2NrLSZndDtzayk7CiAJCWlmIChuYmQtJmd0O3RhZ19zZXQudGltZW91dCkKIAkJCXNvY2stJmd0O3NrLSZndDtza19zbmR0aW1lbyA9IG5iZC0mZ3Q7dGFnX3NldC50aW1lb3V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCwgYXMgYW4gZXhwZXJ0IGluIGJsb2NrIGRldmljZSBkcml2ZXJzLCBmb2N1c2luZyBvbiBOQkQ6CgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTkJEIFBhdGNoKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgdGhlIGhlYXJ0IG9mIHRoZSBOQkQgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHksIGBkcml2ZXJzL2Jsb2NrL25iZC5jYC4gVGhlIGZhY3QgdGhhdCBpdCBtb2RpZmllcyBgbmJkX21hcmtfbnNvY2tfZGVhZGAsIGBuYmRfc2VuZF9jbWRgLCBgbmJkX3BlbmRpbmdfY21kX3dvcmtgLCBhbmQgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggc29tZSBsb3ctbGV2ZWwgbmV0d29yayBpbnRlcmFjdGlvbnMgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgTkJEIHByb3RvY29sLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgaG93IHRoZSBkcml2ZXIgY29wZXMgd2l0aCBwYXJ0aWFsIHNlbmRzIGFuZCBwb3RlbnRpYWxseSBkZWFkIG9yIGZsYWt5IHNvY2tldHMuIFRoaXMga2luZCBvZiBjb2RlIGlzIGFsd2F5cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIG5ldHdvcmsgaW50ZXJhY3Rpb25zIGFyZSBpbmhlcmVudGx5IGNvbXBsZXgsIGFuZCBzdWJ0bGUgdGltaW5nIGlzc3VlcyBvciBtYWxmb3JtZWQgZGF0YSBjYW4gbGVhZCB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3Igc3VidGxlIGRhdGEgY29ycnVwdGlvbi4KCkdpdmVuIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYXJlYXMgcmVsYXRlZCB0byBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIGNvbW1hbmQgdHJhbnNtaXNzaW9uLCBhbmQgcmUtZXN0YWJsaXNobWVudCBvZiBjb21tdW5pY2F0aW9uIGFmdGVyIGFuIGVycm9yLiBUaGF0IG1lYW5zIEkmIzM5O20gZ29pbmcgdG8gYmUgcGF5aW5nIHZlcnkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyBpdCBoYW5kbGVzIGVkZ2UgY2FzZXMsIGVycm9yIGNvbmRpdGlvbnMsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoZSBmYWNlIG9mIHRoZXNlIGNoYW5nZXMuCgpOZXh0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBOQkQgY29uZmlndXJhdGlvbiB0byBzZWUgaG93IHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZpcnN0IHBsYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gY2hlY2sgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZGlyZWN0bHksIG9yIGFsdGVybmF0aXZlbHksIEkgY291bGQganVzdCBncmVwIGZvciBzb21ldGhpbmcgbGlrZSBgbmJkLm9gIGluIGBkcml2ZXJzL2Jsb2NrL01ha2VmaWxlYCB0byBmaW5kIGFueSByZWxldmFudCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzLiBUaGlzIHdheSwgSSBjYW4gcXVpY2tseSB2ZXJpZnkgd2hldGhlciBOQkQgaXMgZW5hYmxlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgdG8gY29udHJvbCBpdHMgYmVoYXZpb3IgZHVyaW5nIHRlc3RpbmcuIFRoaXMgaXMgY3J1Y2lhbCBmb3Igc2V0dGluZyB1cCB0aGUgcmlnaHQgdGVzdCBlbnZpcm9ubWVudCBmb3IgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19TVU5WREMpXHRcdCYjNDM7PSBzdW52ZGMub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0yNC1cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0JMS19ERVZfTkJEKVx0JiM0Mzs9IG5iZC5vXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19WSVJUSU9fQkxLKVx0JiM0Mzs9IHZpcnRpb19ibGsub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjb25maWcgb3B0aW9uIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBCTEtfREVWX05CRGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzLCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYmxvY2sgZGV2aWNlIHN1YnN5c3RlbS4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGJsb2NrIGRldmljZSBkcml2ZXJzIGFyZSBkZWZpbmVkLCBhbG9uZyB3aXRoIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgZmVhdHVyZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoYXQgZmlsZSB0byBzZWUgd2hhdCB0aGlzIGBCTEtfREVWX05CRGAgZGVwZW5kcyBvbiBhbmQgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgZWxzZSBJIHNob3VsZCBiZSBhd2FyZSBvZi4gS25vd2luZyBpdHMgY29udGV4dCB3aWxsIGdpdmUgbWUgYSBoZWFkIHN0YXJ0IGluIHVuZGVyc3RhbmRpbmcgd2h5IGl0JiMzOTtzIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9OQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODU0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYXQgcGxheS4gSXQmIzM5O3MgYSBjcml0aWNhbCBpbml0aWFsIGFzc2Vzc21lbnQuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IG1hcCBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZWxlbWVudHMgaW52b2x2ZWQuIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBleHRlcm5hbCBzeXN0ZW1zIGRvZXMgdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudCByZWx5IG9uPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGZhY3RvcnMgb3IgZG93bnN0cmVhbSBpbXBsaWNhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBjb25zaWRlcmF0aW9uPyBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gYmUgY2F1Z2h0IG9mZiBndWFyZCBieSBhIGNhc2NhZGluZyBmYWlsdXJlIG9yIGluY29tcGF0aWJpbGl0eSBpc3N1ZSBmdXJ0aGVyIGRvd24gdGhlIGxpbmUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHRob3JvdWdoIGRlcGVuZGVuY3kgc2NhbiBhbmQgbWFwcGluZyB0byBidWlsZCBhIHJvYnVzdCBtb2RlbCBiZWZvcmUgbW92aW5nIG9uLiBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHJlcXVpcmUgYSByZS13cml0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9OQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTgxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQmxvY2sgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBibG9jayBkcml2ZXIgY29uZmlndXJhdGlvbnMsIHNvIGxldCYjMzk7cyBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTYuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBob3cgdGhlIHZhcmlvdXMgb3B0aW9ucyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdHMgYXJlIGluIHBsYXkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzZWxlY3Rpb24gb2YgZGlmZmVyZW50IGJsb2NrIGRyaXZlcnMsIHRoZWlyIGZlYXR1cmVzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBUaGlzIHNob3VsZCBwcm92aWRlIGNvbnRleHQgZm9yIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0IGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHQgIFRoZSBoaXN0b3JpYyBkZWZhdWx0IGlzIDguIElmIGEgbGF0ZSAyMDExIHZlcnNpb24gb2YgbG9zZXR1cCg4KVxuIDE5MTpcdFx0ICBpcyB1c2VkLCBpdCBjYW4gYmUgc2V0IHRvIDAsIHNpbmNlIG5lZWRlZCBsb29wIGRldmljZXMgY2FuIGJlXG4gMTkyOlx0XHQgIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB3aXRoIHRoZSAvZGV2L2xvb3AtY29udHJvbCBpbnRlcmZhY2UuXG4gMTkzOlx0XG4gMTk0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG4gMTk1Olx0XG4gMTk2Olx0Y29uZmlnIEJMS19ERVZfTkJEXG4gMTk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMTk4Olx0XHRkZXBlbmRzIG9uIE5FVFxuIDE5OTpcdFx0aGVscFxuIDIwMDpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91ciBjb21wdXRlciB0byBiZSBhIGNsaWVudCBmb3IgbmV0d29ya1xuIDIwMTpcdFx0ICBibG9jayBkZXZpY2VzLCBpLmUuIGl0IHdpbGwgYmUgYWJsZSB0byB1c2UgYmxvY2sgZGV2aWNlcyBleHBvcnRlZCBieVxuIDIwMjpcdFx0ICBzZXJ2ZXJzIChtb3VudCBmaWxlIHN5c3RlbXMgb24gdGhlbSBldGMuKS4gQ29tbXVuaWNhdGlvbiBiZXR3ZWVuXG4gMjAzOlx0XHQgIGNsaWVudCBhbmQgc2VydmVyIHdvcmtzIG92ZXIgVENQL0lQIG5ldHdvcmtpbmcsIGJ1dCB0byB0aGUgY2xpZW50XG4gMjA0Olx0XHQgIHByb2dyYW0gdGhpcyBpcyBoaWRkZW46IGl0IGxvb2tzIGxpa2UgYSByZWd1bGFyIGxvY2FsIGZpbGUgYWNjZXNzIHRvXG4gMjA1Olx0XHQgIGEgYmxvY2sgZGV2aWNlIHNwZWNpYWwgZmlsZSBzdWNoIGFzIC9kZXYvbmQwLlxuIDIwNjpcdFxuIDIwNzpcdFx0ICBOZXR3b3JrIGJsb2NrIGRldmljZXMgYWxzbyBhbGxvd3MgeW91IHRvIHJ1biBhIGJsb2NrLWRldmljZSBpblxuIDIwODpcdFx0ICB1c2VybGFuZCAobWFraW5nIHNlcnZlciBhbmQgY2xpZW50IHBoeXNpY2FsbHkgdGhlIHNhbWUgY29tcHV0ZXIsXG4gMjA5Olx0XHQgIGNvbW11bmljYXRpbmcgdXNpbmcgdGhlIGxvb3BiYWNrIG5ldHdvcmsgZGV2aWNlKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5CRCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IG9uIGBORVRgLiAgVGhhdCB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgYmxvY2sgZGV2aWNlcywgc3BlY2lmaWNhbGx5LCB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgY29uZmlnLCB3aGljaCBpcyBgQkxLX0RFVl9OQkRgLiBHb29kIHRvIGhhdmUgdGhhdCBjb25maXJtZWQgcmlnaHQgYXdheS4KCk5vdywgbXkgZm9jdXMgaXMgdGhlIHN5bWJvbHMgYmVpbmcgbW9kaWZpZWQuIFRoZSBwYXRjaCB0b3VjaGVzOiBgbmJkX21hcmtfbnNvY2tfZGVhZGAsIGBuYmRfc2V0X3NpemVgLCBgbmJkX3NlbmRfY21kYCwgYG5iZF9wZW5kaW5nX2NtZF93b3JrYCwgYG5iZF9yZWFkX3JlcGx5YCwgYW5kIGBuYmRfcmVjb25uZWN0X3NvY2tldGAuIEhtbSwgc29tZXRoaW5nIGp1bXBzIG91dCDigJMgKmFsbCogb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEl0IG1lYW5zIHRoZXkmIzM5O3JlIG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuCgpUaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbnRleHQuIFdoYXQgY2FsbHMgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucz8gT3IsIHB1dCBhbm90aGVyIHdheSwgd2hhdCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYGRyaXZlcnMvYmxvY2svbmJkLmNgIG1pZ2h0IGJlIHRoZSBlbnRyeSBwb2ludHMgb3Iga2V5IGludGVyZmFjZXMgdGhhdCAqZG8qIGNhbGwgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucz8gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBvZiB0aGUgcGF0Y2ggbGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX3JlY29ubmVjdF9zb2NrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTMwMT1zdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM3My1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTM3NDpzdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzc1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIzNzU9c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5NS1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ5NjpcdFx0XHRyZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5Ny1cdFx0XHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0OgoKKipNeSBCcmFpbiYjMzk7cyBUcmFjZSBUaHJvdWdoIHRoZSBOQkQgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGRyaXZlciBwZXJzcGVjdGl2ZS4gSSBzZWUgdGhhdCB0aGUgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCBmdW5jdGlvbiBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gIFRoYXQmIzM5O3MgbXkgaW5pdGlhbCBlbnRyeSBwb2ludCBmb3Igc29ja2V0IHJlY29ubmVjdGlvbiwgaW5pdGlhdGVkIGJ5IGEgY29uZmlndXJhdGlvbiBjaGFuZ2UgdGhyb3VnaCBHZW5lcmljIE5ldGxpbmsuIFRoZW4sIGBuYmRfcGVuZGluZ19jbWRfd29ya2AgZ2V0cyBpbnZva2VkIGFzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uLiBUaGlzIGxpa2VseSBoYW5kbGVzIGFzeW5jaHJvbm91cyBjb21tYW5kIHByb2Nlc3Npbmcgb3IgY29tcGxldGlvbiBhZnRlciB0aGF0IGNvbmZpZ3VyYXRpb24gY2hhbmdlIGhhcHBlbnMuIEZyb20gbXkgZXhwZXJpZW5jZSwgd29ya3F1ZXVlcyBhcmUgZXNzZW50aWFsIGZvciBkZWZlcnJpbmcgc29tZSBvZiB0aG9zZSBibG9ja2luZyBvcGVyYXRpb25zIHRvIHByZXZlbnQga2VybmVsIHRocmVhZCBzdGFydmF0aW9uLiBMYXN0bHksIHRoZSBjb21tYW5kIGZsb3cgbG9va3MgbGlrZSBgbmJkX3NlbmRfY21kYCBpcyBkaXJlY3RseSBjYWxsZWQgYnkgYG5iZF9xdWV1ZV9ycWAuIFNvLCBjb21tYW5kcyBhcmUgYmVpbmcgc2VudCB0aHJvdWdoIHRoZSBuZXR3b3JrIGZyb20gdGhlIHJlcXVlc3QgcXVldWUuIFRoaXMgd29ya2Zsb3cgbWFrZXMgc2Vuc2U6IHJlY29uZmlndXJlIHRyaWdnZXJzIGEgc29ja2V0IHJlY29ubmVjdDsgdGhlIHdvcmtxdWV1ZSBoYW5kbGVzIHBlbmRpbmcgY29tbWFuZHMgYWZ0ZXIgYW55IHNvY2tldCBjaGFuZ2UgaGFwcGVucywgYW5kIGZpbmFsbHksIGNvbW1hbmRzIGFyZSBkaXNwYXRjaGVkIHRvIHRoZSBzb2NrZXQgZnJvbSB0aGUgcmVxdWVzdCBxdWV1ZS4gVGhpcyBpcyBhIHZlcnkgc3RhbmRhcmQgbmV0d29yayBibG9jayBkZXZpY2UgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9zZW5kX2NtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz02MjU9c3RhdGljIHZvaWQgbmJkX3NjaGVkX3BlbmRpbmdfd29yayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtNjQ0LSAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzo2NDU6c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfc2VuZF9jbWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNjQ2LVx0XHRcdFx0IGludCBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTgxMD1zdGF0aWMgdm9pZCBuYmRfcGVuZGluZ19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy04MjYtXHR3aGlsZSAodHJ1ZSkge1xuZHJpdmVycy9ibG9jay9uYmQuYzo4Mjc6XHRcdG5iZF9zZW5kX2NtZChuYmQsIGNtZCwgY21kLVx1MDAzZWluZGV4KTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtODI4LVx0XHRpZiAoIW5zb2NrLVx1MDAzZXBlbmRpbmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xMTQxPXN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX2hhbmRsZV9jbWQoc3RydWN0IG5iZF9jbWQgKmNtZCwgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTIwMC1cdH1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTIwMTpcdHJldCA9IG5iZF9zZW5kX2NtZChuYmQsIGNtZCwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xMjAyLW91dDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mIGEgbmV0d29yayBibG9jayBkZXZpY2UgZHJpdmVyOgoKKipVbmRlcnN0YW5kaW5nIHRoZSBDb21tYW5kIFBhdGgqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29yZSBjb21tYW5kIGhhbmRsaW5nIHdpdGhpbiB0aGUgTkJEIGRyaXZlci4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUgaXMgYG5iZF9oYW5kbGVfY21kYCwgYW5kIEkmIzM5O20gaW1tZWRpYXRlbHkgcmVjb2duaXppbmcgdGhhdCBpdHMgcHJpbWFyeSBmdW5jdGlvbiBpcyB0byBzaGVwaGVyZCBjb21tYW5kcyB0byB0aGVpciB1bHRpbWF0ZSBkZXN0aW5hdGlvbiwgdGhlIG5ldHdvcmsuIFRoZSB2ZXJ5IG5leHQgZnVuY3Rpb24gaW4gdGhlIHByb2Nlc3MgaXMgYG5iZF9zZW5kX2NtZGAuIFNvLCBgbmJkX2hhbmRsZV9jbWRgIGlzIGxpa2UgdGhlIG9yY2hlc3RyYXRvciwgYW5kIGl0IGtub3dzIHRoZSBmdW5jdGlvbiBpdCYjMzk7cyBnb2luZyB0byB1c2UuIEl0IG1ha2VzIHNlbnNlLCBgbmJkX3NlbmRfY21kYCBtdXN0IGhhbmRsZSB0aGUgdGFzayBvZiBhY3R1YWxseSB0cmFuc21pdHRpbmcgdGhlIGNvbW1hbmQgb3ZlciB0aGUgbmV0d29yay4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgZm9ybWF0dGluZyB0aGUgY29tbWFuZCBpbnRvIHRoZSBjb3JyZWN0IE5CRCBwcm90b2NvbCBwYWNrZXRzLCBoYW5kbGluZyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBwcm9jZXNzLCBhbmQgZW5zdXJpbmcgcmVsaWFibGUgZGVsaXZlcnkgdG8gdGhlIHJlbW90ZSBlbmQuIFNvLCBgbmJkX2hhbmRsZV9jbWRgIGlzIHNldHRpbmcgdXAgdGhlIHBpZWNlcywgYW5kIHRoZW4gYG5iZF9zZW5kX2NtZGAgaXMgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcgb2Ygc2VuZGluZyB0aGUgZGF0YSBvdmVyIHRoZSB3aXJlLiBUaGlzIHNlcGFyYXRpb24gb2YgY29uY2VybnMgZmVlbHMgcmlnaHQgZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZHJpdmVyLiBJdOKAmXMgYSBjbGVhbiBhbmQgZWZmaWNpZW50IGRlc2lnbiwgZnJvbSB3aGF0IEkgdW5kZXJzdGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2hhbmRsZV9jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MTEyNT1zdGF0aWMgaW50IHdhaXRfZm9yX3JlY29ubmVjdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTE0MC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTE0MTpzdGF0aWMgYmxrX3N0YXR1c190IG5iZF9oYW5kbGVfY21kKHN0cnVjdCBuYmRfY21kICpjbWQsIGludCBpbmRleClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTE0Mi17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xMjA4PXN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTIzMC1cdCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoxMjMxOlx0cmV0ID0gbmJkX2hhbmRsZV9jbWQoY21kLCBoY3R4LVx1MDAzZXF1ZXVlX251bSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyMzItXHRtdXRleF91bmxvY2soXHUwMDI2Y21kLVx1MDAzZWxvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQ4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTkJEIFJlcXVlc3QgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgbmJkX3F1ZXVlX3JxYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIHJlcXVlc3RzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgYWZ0ZXIgYSByZXF1ZXN0IGlzIHF1ZXVlZC4gVGhlIGZsb3cgbG9va3MgbGlrZSBpdCB0aGVuIGNhbGxzIGBuYmRfaGFuZGxlX2NtZGAuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhY3R1YWwgY29tbWFuZCBwcm9jZXNzaW5nIHdpbGwgb2NjdXIuIE15IG5leHQgcXVlc3Rpb24gaXM6IHdoYXQga2luZCBvZiBzb2NrZXQgaXNzdWVzIG1heSBiZSBoYXBwZW5pbmcgYXQgdGhpcyBwb2ludD8gTGV0JiMzOTtzIGNoZWNrIGBuYmRfbWFya19uc29ja19kZWFkYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGVhZCBuZXR3b3JrIHNvY2tldHMuIFVuZGVyc3RhbmRpbmcgdGhhdCB3aWxsIGJlIGtleSBpbiBkaWFnbm9zaW5nIGNvbm5lY3Rpb24gaXNzdWVzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9tYXJrX25zb2NrX2RlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9Mjk5PXN0YXRpYyBpbnQgbmJkX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzA0LVxuZHJpdmVycy9ibG9jay9uYmQuYzozMDU6c3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDYtXHRcdFx0XHRpbnQgbm90aWZ5KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9Mzk4PXN0YXRpYyB2b2lkIHNvY2tfc2h1dGRvd24oc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTQxMC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZuc29jay1cdTAwM2V0eF9sb2NrKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6NDExOlx0XHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDApO1xuZHJpdmVycy9ibG9jay9uYmQuYy00MTItXHRcdG11dGV4X3VubG9jayhcdTAwMjZuc29jay1cdTAwM2V0eF9sb2NrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTQ1MT1zdGF0aWMgZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIG5iZF94bWl0X3RpbWVvdXQoc3RydWN0IHJlcXVlc3QgKnJlcSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTUwMi1cdFx0XHRcdGlmIChjbWQtXHUwMDNlY29va2llID09IG5zb2NrLVx1MDAzZWNvb2tpZSlcbmRyaXZlcnMvYmxvY2svbmJkLmM6NTAzOlx0XHRcdFx0XHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpO1xuZHJpdmVycy9ibG9jay9uYmQuYy01MDQtXHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bnNvY2stXHUwMDNldHhfbG9jayk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz02NDU9c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfc2VuZF9jbWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9jbWQgKmNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTc5Ni1cdGlmICh0ZXN0X2JpdChOQkRfQ01EX1BBUlRJQUxfU0VORCwgXHUwMDI2Y21kLVx1MDAzZWZsYWdzKSkge1xuZHJpdmVycy9ibG9jay9uYmQuYzo3OTc6XHRcdG5iZF9tYXJrX25zb2NrX2RlYWQobmJkLCBuc29jaywgMSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTc5OC1cdFx0cmV0dXJuIEJMS19TVFNfT0s7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy04MDMtXHRcdFx0ICAgIFwmIzM0O1JlcXVlc3Qgc2VuZCBmYWlsZWQsIHJlcXVldWVpbmdcXG5cJiMzNDspO1xuZHJpdmVycy9ibG9jay9uYmQuYzo4MDQ6XHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpO1xuZHJpdmVycy9ibG9jay9uYmQuYy04MDUtXHRuYmRfcmVxdWV1ZV9jbWQoY21kKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTgxMD1zdGF0aWMgdm9pZCBuYmRfcGVuZGluZ19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy04MzktXHRcdFx0ICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjg0MDpcdFx0XHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpO1xuZHJpdmVycy9ibG9jay9uYmQuYy04NDEtXHRcdFx0bnNvY2stXHUwMDNlcGVuZGluZyA9IE5VTEw7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz05OTQ9c3RhdGljIHZvaWQgcmVjdl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEwNDQtXHRtdXRleF9sb2NrKFx1MDAyNm5zb2NrLVx1MDAzZXR4X2xvY2spO1xuZHJpdmVycy9ibG9jay9uYmQuYzoxMDQ1Olx0bmJkX21hcmtfbnNvY2tfZGVhZChuYmQsIG5zb2NrLCAxKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTA0Ni1cdG11dGV4X3VubG9jayhcdTAwMjZuc29jay1cdTAwM2V0eF9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBmb3IgVGVzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRvIGZvY3VzIG91ciB0ZXN0aW5nIGVmZm9ydHMgaW4gdGhlIE5CRCBkcml2ZXIsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIGVudHJ5IHBvaW50cyB3ZSBjYW4gdGFyZ2V0LiBJIG5lZWQgdG8gYXZvaWQgdGhlIHR5cGljYWwsIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBvdGhlcndpc2UsIHRoZSB0ZXN0cyB3aWxsIGJlIHNrZXdlZC4gSSBzaG91bGQgYmUgcHJpb3JpdGl6aW5nIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLCBidXQgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgpSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYSBmZXcgcHJvbWlzaW5nIGNhbmRpZGF0ZXM6IGBuYmRfcXVldWVfcnFgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF94bWl0X3RpbWVvdXRgLCBhbmQgb2YgY291cnNlLCBgcmVjdl93b3JrYC4gQWN0dWFsbHksIHdhaXQsIGByZWN2X3dvcmtgIGlzIHBhcnQgb2YgYSB3b3JrcXVldWUuLi4gbWF5YmUgdGhlIGNvbm5lY3Rpb24gb3IgaW9jdGwgcGF0aHMgYXJlIGFzc29jaWF0ZWQuIGBuYmRfaW9jdGxgIG9yIGBuYmRfZ2VubF9jb25uZWN0YCB3b3VsZCBiZSBtb3JlIGRpcmVjdCwgSSB0aGluay4KCmBuYmRfcXVldWVfcnFgIGNhdGNoZXMgbXkgZXllIGZpcnN0LiBJdCYjMzk7cyB0aGUgYmxvY2sgbGF5ZXImIzM5O3MgcXVldWUgcmVxdWVzdCBjYWxsYmFjayDigJMgZGVmaW5pdGVseSBhIGhvdCBwYXRoISBEYW1uLiBHaXZlbiB0aGUgcHJvbXB0LCBJIHNob3VsZCBwcm9iYWJseSBhdm9pZCBpdCB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEl0JiMzOTtzIHRlbXB0aW5nLCBidXQgbGV0JiMzOTtzIHN0aWNrIHRvIHRoZSBwcm9tcHQuCgpOb3csIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgc2VlbXMgbW9yZSBwcm9taXNpbmcuIEFoLCBpdCYjMzk7cyBhIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVyLiBUaGF0IGZlZWxzIGxpa2UgYSBiZXR0ZXIgZml0LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgbmJkLmNgIGFuZCBzZWUgd2hhdCBuZXRsaW5rIGNvbW1hbmRzIGFyZSBhdmFpbGFibGUuIFRoYXQmIzM5O2xsIGhlbHAgbmFycm93IGRvd24gdGhlIHRlc3Rpbmcgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9nZW5sXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNzQ9c3RhdGljIHZvaWQgbmJkX2Nvbm5lY3RfcmVwbHkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IGluZGV4KTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc1OnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNzYtc3RhdGljIHZvaWQgbmJkX2RlYWRfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yMTE2PW5iZF9kZXZpY2VfcG9saWN5W05CRF9ERVZJQ0VfQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIwLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTIxOnN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEyMi17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTM3LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyMTM4OnN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTM5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIyMTYtXHRzZXRfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYzoyMjE3Olx0cmV0ID0gbmJkX2dlbmxfc2l6ZV9zZXQoaW5mbywgbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjIxOC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yMzE5PXN0YXRpYyB2b2lkIG5iZF9kaXNjb25uZWN0X2FuZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzMzktXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzNDA6c3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNDEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM3NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjM3NTpzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNzYte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQzNy1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQzODpcdHJldCA9IG5iZF9nZW5sX3NpemVfc2V0KGluZm8sIG5iZCk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0MzktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjUxND1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5iZF9jb25uZWN0X2dlbmxfb3BzW10gPSB7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTE3LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1MTg6XHRcdC5kb2l0XHQ9IG5iZF9nZW5sX2Nvbm5lY3QsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTktXHR9LFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUyMi1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTIzOlx0XHQuZG9pdFx0PSBuYmRfZ2VubF9kaXNjb25uZWN0LFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTI0LVx0fSxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MjctXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUyODpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfcmVjb25maWd1cmUsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MjktXHR9LFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUzMi1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTMzOlx0XHQuZG9pdFx0PSBuYmRfZ2VubF9zdGF0dXMsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MzQtXHR9LFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjUzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5iZF9tY2FzdF9ncnBzW10gPSB7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTQwLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTQxOnN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgbmJkX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU0Mi1cdC5oZHJzaXplXHQ9IDAsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTg2PXN0YXRpYyBpbnQgc3RhdHVzX2NiKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU5MS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjU5MjpzdGF0aWMgaW50IG5iZF9nZW5sX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTkzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2MTItXHRcdGdvdG8gb3V0O1xuZHJpdmVycy9ibG9jay9uYmQuYzoyNjEzOlx0cmVwbHlfaGVhZCA9IGdlbmxtc2dfcHV0X3JlcGx5KHJlcGx5LCBpbmZvLCBcdTAwMjZuYmRfZ2VubF9mYW1pbHksIDAsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2MTQtXHRcdFx0XHQgICAgICAgTkJEX0NNRF9TVEFUVVMpO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjY1Mj1zdGF0aWMgdm9pZCBuYmRfY29ubmVjdF9yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBpbnQgaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjYwLVx0XHRyZXR1cm47XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI2NjE6XHRtc2dfaGVhZCA9IGdlbmxtc2dfcHV0X3JlcGx5KHNrYiwgaW5mbywgXHUwMDI2bmJkX2dlbmxfZmFtaWx5LCAwLFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNjYyLVx0XHRcdFx0ICAgICBOQkRfQ01EX0NPTk5FQ1QpO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjY3Nj1zdGF0aWMgdm9pZCBuYmRfbWNhc3RfaW5kZXgoaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY4NC1cdFx0cmV0dXJuO1xuZHJpdmVycy9ibG9jay9uYmQuYzoyNjg1Olx0bXNnX2hlYWQgPSBnZW5sbXNnX3B1dChza2IsIDAsIDAsIFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgMCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY4Ni1cdFx0XHRcdCAgICAgTkJEX0NNRF9MSU5LX0RFQUQpO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY5Ni1cdGdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWQpO1xuZHJpdmVycy9ibG9jay9uYmQuYzoyNjk3Olx0Z2VubG1zZ19tdWx0aWNhc3QoXHUwMDI2bmJkX2dlbmxfZmFtaWx5LCBza2IsIDAsIDAsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yNjk4LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI3MDg9c3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NDk6XHRpZiAoZ2VubF9yZWdpc3Rlcl9mYW1pbHkoXHUwMDI2bmJkX2dlbmxfZmFtaWx5KSkge1xuZHJpdmVycy9ibG9jay9uYmQuYy0yNzUwLVx0XHRkZXN0cm95X3dvcmtxdWV1ZShuYmRfZGVsX3dxKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI3NzM9c3RhdGljIHZvaWQgX19leGl0IG5iZF9jbGVhbnVwKHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzgxLVx0ICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3ODI6XHRnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KFx1MDAyNm5iZF9nZW5sX2ZhbWlseSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3ODMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTgwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipSZXZpZXdpbmcgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIEludGVyZmFjZSBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgbmV0d29yayBibG9jayBkZXZpY2UgaW50ZXJhY3Rpb24gbWV0aG9kcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb250cm9sIHBsYW5lIG9wdGlvbnMuIEkgc2VlIHdlIGhhdmUgdGhlIGBuYmRfZ2VubGAgY29tbWFuZHM6IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9nZW5sX3N0YXR1c2AuIFRoZXNlIGhhbmRsZSB0aGUgbWFuYWdlbWVudCBhbmQgY29uZmlndXJhdGlvbiBhc3BlY3QuIE5hdHVyYWxseSwgc2luY2UgdGhpcyBpcyBhIGJsb2NrIGRldmljZSwgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBhY2Nlc3MgcGF0aHMuIE5vdyBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGBuYmRfaW9jdGxgIGlzIHRoZSBzdGFuZGFyZCBmb3IgdGhlIGRhdGEgcGxhbmUsIG9yIGlmIHdlIGhhdmUgc29tZXRoaW5nIGVsc2UuIExldCYjMzk7cyBzZWUgaG93IHRob3NlIHdvcmsgdG9nZXRoZXIuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTE2NDg9c3RhdGljIHZvaWQgbmJkX3NldF9jbWRfdGltZW91dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1NjQgdGltZW91dClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NTctLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBjb25maWdfbG9jayBoZWxkICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2NTg6c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjU5LVx0XHQgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzA0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA1OnN0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwNi1cdFx0ICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MjctXHQgICAgKGNtZCA9PSBOQkRfRElTQ09OTkVDVCB8fCBjbWQgPT0gTkJEX0NMRUFSX1NPQ0spKVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzI4Olx0XHRlcnJvciA9IF9fbmJkX2lvY3RsKGJkZXYsIG5iZCwgY21kLCBhcmcpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNzI5LVx0ZWxzZVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MzYtXHQucmVsZWFzZSA9XHRuYmRfcmVsZWFzZSxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgzNzpcdC5pb2N0bCA9XHRuYmRfaW9jdGwsXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4Mzg6XHQuY29tcGF0X2lvY3RsID1cdG5iZF9pb2N0bCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgzOS1cdC5mcmVlX2Rpc2sgPVx0bmJkX2ZyZWVfZGlzayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gS2V5IE5CRCBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2dlbmxfZGlzY29ubmVjdGAgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlLiBUaGV5IHJlcHJlc2VudCB0aGUgY29yZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgTkJEIGRyaXZlci4gSSBicmllZmx5IGNvbnNpZGVyZWQgYG5iZF9xdWV1ZV9ycWAsIHNpbmNlIGl0JiMzOTtzIHRoZSBibG9jayBsYXllciBxdWV1ZSByZXF1ZXN0IGNhbGxiYWNrIGFuZCBhIGRlZmluaXRlIGhvdCBwYXRoLCBidXQgdGhlIHByb21wdCYjMzk7cyBhZHZpY2UgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdCBkaXN0cmlidXRpb25zIGZyb20gc2tld2luZyBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgb21pdCBpdCBmb3Igbm93IGFuZCBzdGljayB3aXRoIHRoZSBpb2N0bCBhbmQgbmV0bGluayBoYW5kbGVycy4KCkhvbGQgb24gYSBzZWNvbmQuLi4gYG5iZF94bWl0X3RpbWVvdXRgIGlzIGFsc28gYSBjcml0aWNhbCBlbnRyeSBwb2ludCByZWxhdGVkIHRvIHRpbWVvdXRzISBBbmQgbXkgcGF0Y2ggKmRvZXMqIG1vZGlmeSB0aW1lb3V0IGhhbmRsaW5nIGluIGBuYmRfcGVuZGluZ19jbWRfd29ya2AsIGRvZXNuJiMzOTt0IGl0PyBUaGF0JiMzOTtzIGRlZmluaXRlbHkgcmVsZXZhbnQuIEkgbmVlZCB0byBpbmNsdWRlIHRoYXQgb25lLiBPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuYmRfeG1pdF90aW1lb3V0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX3htaXRfdGltZW91dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz00MzU9c3RhdGljIHN0cnVjdCBuYmRfY29uZmlnICpuYmRfZ2V0X2NvbmZpZ191bmxvY2tlZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtNDUwLVxuZHJpdmVycy9ibG9jay9uYmQuYzo0NTE6c3RhdGljIGVudW0gYmxrX2VoX3RpbWVyX3JldHVybiBuYmRfeG1pdF90aW1lb3V0KHN0cnVjdCByZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTQ1Mi17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xOTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBuYmRfbXFfb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk2OC1cdC5pbml0X3JlcXVlc3RcdD0gbmJkX2luaXRfcmVxdWVzdCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTk2OTpcdC50aW1lb3V0XHQ9IG5iZF94bWl0X3RpbWVvdXQsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NzAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgUmVsZXZhbnQgTkJEIFN5bWJvbHMqKgoKUmlnaHQsIHNvIGBuYmRfeG1pdF90aW1lb3V0YCBsb29rcyBsaWtlIGEga2V5IHBpZWNlIGhlcmUsIHRoYXQmIzM5O3MgZ29vZCB0byBzZWUuIEkgbmVlZCB0byBzdW1tYXJpemUgdGhlIGNvcmUgc3ltYm9scyB0aGF0IGFyZSB1bmRlciBjb25zaWRlcmF0aW9uIGFuZCBzZWUgaG93IHRoZXkgd29yayB0b2dldGhlci4gSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgbmJkX2lvY3RsYCAtIHByb2JhYmx5IHRoZSBlbnRyeSBwb2ludCBmb3IgZGlyZWN0IGRldmljZSBpbnRlcmFjdGlvbnMuCiogICBgbmJkX2dlbmxfY29ubmVjdGAgLSBsaWtlbHkgaGFuZGxlcyB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHdpdGggdGhlIGdlbmVyaWMgbmV0bGluayBpbnRlcmZhY2UuCiogICBgbmJkX2dlbmxfcmVjb25maWd1cmVgIC0gc291bmRzIGxpa2UgdGhlIHdheSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIG1vZGlmaWVkIHZpYSBuZXRsaW5rLgoqICAgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgIC0gcHJlc3VtYWJseSBob3cgY29ubmVjdGlvbnMgYXJlIGNsb3NlZC4KKiAgIGBuYmRfeG1pdF90aW1lb3V0YCAtIHRoZSB0aW1lb3V0IGZ1bmN0aW9uLCBpbXBvcnRhbnQgZm9yIHRoaXMgYW5hbHlzaXMuCgpOb3csIGEgY3JpdGljYWwgcG9pbnQg4oCTIHRoZSBwYXRjaCB0b3VjaGVzIGBuYmRfcGVuZGluZ19jbWRfd29ya2AuIEhtbSwgdGhhdCYjMzk7cyBhICp3b3JrcXVldWUqIGZ1bmN0aW9uLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBob3cgaXQgZ2V0cyB0cmlnZ2VyZWQuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEhvdyBpcyB0aGlzIHdvcmtxdWV1ZSBhY3R1YWxseSAqc2NoZWR1bGVkKj8gQSBxdWljayBsb29rIHJldmVhbHMgdGhhdCBgbmJkX3NjaGVkX3BlbmRpbmdfd29ya2AgaXMgdGhlIHNjaGVkdWxpbmcgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGxpbmsuIFRoYXQgdGVsbHMgbWUgd2hhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkIHRvIGV4YW1pbmUgaG93IHRoZSB3b3JrIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9zY2hlZF9wZW5kaW5nX3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9NjEyPXN0YXRpYyBpbmxpbmUgaW50IHdhc19pbnRlcnJ1cHRlZChpbnQgcmVzdWx0KVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtNjI0LSAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzo2MjU6c3RhdGljIHZvaWQgbmJkX3NjaGVkX3BlbmRpbmdfd29yayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuZHJpdmVycy9ibG9jay9uYmQuYy02MjYtXHRcdFx0XHQgICBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9NjQ1PXN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX3NlbmRfY21kKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy03MjUtXHRcdFx0aWYgKHNlbnQpIHtcbmRyaXZlcnMvYmxvY2svbmJkLmM6NzI2Olx0XHRcdFx0bmJkX3NjaGVkX3BlbmRpbmdfd29yayhuYmQsIG5zb2NrLCBjbWQsIHNlbnQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy03MjctXHRcdFx0XHRyZXR1cm4gQkxLX1NUU19PSztcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTc2My1cdFx0XHRcdGlmICh3YXNfaW50ZXJydXB0ZWQocmVzdWx0KSkge1xuZHJpdmVycy9ibG9jay9uYmQuYzo3NjQ6XHRcdFx0XHRcdG5iZF9zY2hlZF9wZW5kaW5nX3dvcmsobmJkLCBuc29jaywgY21kLCBzZW50KTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtNzY1LVx0XHRcdFx0XHRyZXR1cm4gQkxLX1NUU19PSztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5CRCBOZXR3b3JrIEJsb2NrIERldmljZSBQYXJ0aWFsIFNlbmRzIGFuZCBSZWNvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYG5iZF9zY2hlZF9wZW5kaW5nX3dvcmtgIGlzIHRyaWdnZXJlZCBieSBwYXJ0aWFsIHNlbmRzLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHJlZmluaW5nIGBuYmRfcGVuZGluZ19jbWRfd29ya2AgdG8gZ3JhY2VmdWxseSBtYW5hZ2UgdGhlc2UgcGFydGlhbCBzZW5kcyBhbmQgYWxzbyBkZWFsIHdpdGggcG90ZW50aWFsbHkgZGVhZCBzb2NrZXRzLiBUaGUgY2hhbmdlcyB0byBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIGFyZSBpbXBvcnRhbnQgdG9vLCBlc3BlY2lhbGx5IHRoZSBuZXcgY2hlY2sgZm9yIGBuc29jay0mZ3Q7cGVuZGluZ2AuIFNpbmNlIGBuYmRfcmVjb25uZWN0X3NvY2tldGAgaXMgY2FsbGVkIGJ5IGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIHRoYXQgbGF0dGVyIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgYSBrZXkgYXJlYSB0byBzY3J1dGluaXplLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGZvY3VzIG9uIHRoYXQuCgpOb3csIEkgbmVlZCB0byBjb25zaWRlciBhbnkgb3RoZXIgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBXZSBrbm93IGBCTEtfREVWX05CRGAgcmVxdWlyZXMgYE5FVGAsIGJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkmIzM5O2xsIHJlLWV4YW1pbmUgdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUganVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbC4gQmVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX05CRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk0PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5NS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgxOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRG91YmxlLUNoZWNraW5nIHRoZSBEYXRhOiBBIFBydWRlbnQgUmUtcmVhZCoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBmaW5hbGl6ZSBhbnkgY29uY2x1c2lvbnMgb3IgbW92ZSBmb3J3YXJkIHdpdGggZnVydGhlciBhbmFseXNpcywgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbW9tZW50LiBHaXZlbiB0aGUgbnVhbmNlcyBhbmQgcG90ZW50aWFsIGNvbXBsZXhpdGllcyBpbmhlcmVudCBpbiB0aGlzIGRhdGEsIGEgcXVpY2sgcmUtcmVhZCBvZiB0aGUgZmlsZSBzZWVtcyBwcnVkZW50LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgdGhhdCBvZnRlbiBzYXZlcyB0aW1lIGRvd24gdGhlIGxpbmUuIEkgd2FudCB0byBlbnN1cmUgbXkgaW5pdGlhbCBpbnRlcnByZXRhdGlvbiBob2xkcyB1cCB1bmRlciBhIGZyZXNoIGxvb2sgYW5kIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHN1YnRsZSBidXQgY3JpdGljYWwgZGV0YWlscyB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLiBObyBwb2ludCBpbiBwcm9jZWVkaW5nIG9uIGEgc2hha3kgZm91bmRhdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk2Olx0Y29uZmlnIEJMS19ERVZfTkJEXG4gMTk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMTk4Olx0XHRkZXBlbmRzIG9uIE5FVFxuIDE5OTpcdFx0aGVscFxuIDIwMDpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91ciBjb21wdXRlciB0byBiZSBhIGNsaWVudCBmb3IgbmV0d29ya1xuIDIwMTpcdFx0ICBibG9jayBkZXZpY2VzLCBpLmUuIGl0IHdpbGwgYmUgYWJsZSB0byB1c2UgYmxvY2sgZGV2aWNlcyBleHBvcnRlZCBieVxuIDIwMjpcdFx0ICBzZXJ2ZXJzIChtb3VudCBmaWxlIHN5c3RlbXMgb24gdGhlbSBldGMuKS4gQ29tbXVuaWNhdGlvbiBiZXR3ZWVuXG4gMjAzOlx0XHQgIGNsaWVudCBhbmQgc2VydmVyIHdvcmtzIG92ZXIgVENQL0lQIG5ldHdvcmtpbmcsIGJ1dCB0byB0aGUgY2xpZW50XG4gMjA0Olx0XHQgIHByb2dyYW0gdGhpcyBpcyBoaWRkZW46IGl0IGxvb2tzIGxpa2UgYSByZWd1bGFyIGxvY2FsIGZpbGUgYWNjZXNzIHRvXG4gMjA1Olx0XHQgIGEgYmxvY2sgZGV2aWNlIHNwZWNpYWwgZmlsZSBzdWNoIGFzIC9kZXYvbmQwLlxuIDIwNjpcdFxuIDIwNzpcdFx0ICBOZXR3b3JrIGJsb2NrIGRldmljZXMgYWxzbyBhbGxvd3MgeW91IHRvIHJ1biBhIGJsb2NrLWRldmljZSBpblxuIDIwODpcdFx0ICB1c2VybGFuZCAobWFraW5nIHNlcnZlciBhbmQgY2xpZW50IHBoeXNpY2FsbHkgdGhlIHNhbWUgY29tcHV0ZXIsXG4gMjA5Olx0XHQgIGNvbW11bmljYXRpbmcgdXNpbmcgdGhlIGxvb3BiYWNrIG5ldHdvcmsgZGV2aWNlKS5cbiAyMTA6XHRcbiAyMTE6XHRcdCAgUmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvbmJkLnJzdFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbixcbiAyMTI6XHRcdCAgZXNwZWNpYWxseSBhYm91dCB3aGVyZSB0byBmaW5kIHRoZSBzZXJ2ZXIgY29kZSwgd2hpY2ggcnVucyBpbiB1c2VyXG4gMjEzOlx0XHQgIHNwYWNlIGFuZCBkb2VzIG5vdCBuZWVkIHNwZWNpYWwga2VybmVsIHN1cHBvcnQuXG4gMjE0Olx0XG4gMjE1Olx0XHQgIE5vdGUgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIE5GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM3NwoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggYEJMS19ERVZfTkJEYCBhbmQgYE5FVGAgY29uZmlndXJhdGlvbnMuIGBORVRgIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4sIGEgc3RhbmRhcmQgcGFydCBvZiB0aGluZ3MsIGJ1dCBpdCYjMzk7cyB3b3J0aCBpbmNsdWRpbmcgaXQgYW55d2F5IGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IEkgbmVlZCB0byBjaGVjayB0aGUgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgd2l0aGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIGB2bWxpbnV4YC4gVGhleSB3YW50IHRoZW0gbGlzdGVkIGluIHRoZSBgRW5hYmxlQ29uZmlnc2Agb3V0cHV0IGFycmF5LCBhbmQgaW1wb3J0YW50bHksIHRoZXkgd2FudCBtZSB0byBsZWF2ZSBvZmYgdGhlICYjMzQ7Q09ORklHXyYjMzQ7IHByZWZpeC4gU28sIGBORVRgIGlzIHByb2JhYmx5IGZpbmUgdG8gaW5jbHVkZSwgYW5kIEkmIzM5O2xsIGRlZmluaXRlbHkgaW5jbHVkZSBgQkxLX0RFVl9OQkRgLgoKTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55ICpvdGhlciogY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50Li4uIE5vcGUsIG5vdGhpbmcgZWxzZSBqdW1wcyBvdXQuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGZvY3VzIHN5bWJvbHMgdG8gc2VlIGlmIHRoZXkgYXJlIHN0YXRpYzoKKiAgIGBuYmRfaW9jdGxgCiogICBgbmJkX2dlbmxfY29ubmVjdGAKKiAgIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAKKiAgIGBuYmRfZ2VubF9kaXNjb25uZWN0YAoqICAgYG5iZF94bWl0X3RpbWVvdXRgCgpgbmJkX2dlbmxfcmVjb25maWd1cmVgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZCwgYnV0IGl0JiMzOTtzIGFuIGVudHJ5IHBvaW50IGZvciBuZXRsaW5rLiBgbmJkX2lvY3RsYCBpcyBhbHNvIHN0YXRpYy4gV2FpdCBhIG1pbnV0ZSEgSXQgaXMgc3RhdGljIGluIGBkcml2ZXJzL2Jsb2NrL25iZC5jYC4gUmlnaHQsIHNvIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMgd2l0aGluIGBuYmQuY2Agd2hpY2ggSSBoYXZlbiYjMzk7dCBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBuYmRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTU1PXN0YXRpYyBpbnQgbmJkX3RvdGFsX2RldmljZXMgPSAwO1xuZHJpdmVycy9ibG9jay9uYmQuYy01Ni1cbmRyaXZlcnMvYmxvY2svbmJkLmM6NTc6c3RydWN0IG5iZF9zb2NrIHtcbmRyaXZlcnMvYmxvY2svbmJkLmMtNTgtXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9NzU9c3RydWN0IGxpbmtfZGVhZF9hcmdzIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTkxLVxuZHJpdmVycy9ibG9jay9uYmQuYzo5MjpzdHJ1Y3QgbmJkX2NvbmZpZyB7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTkzLVx0dTMyIGZsYWdzO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTExPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5iZF9ibGtzaXplKHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMTUtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjExNjpzdHJ1Y3QgbmJkX2RldmljZSB7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTExNy1cdHN0cnVjdCBibGtfbXFfdGFnX3NldCB0YWdfc2V0O1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ3LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNDg6c3RydWN0IG5iZF9jbWQge1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNDktXHRzdHJ1Y3QgbmJkX2RldmljZSAqbmJkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQwMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSWRlbnRpZnlpbmcgRHluYW1pYyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhcyB3aGVyZSB0aGUgYmVoYXZpb3IgaXMgKm5vdCogZml4ZWQsIHRoZSBhc3BlY3RzIHRoYXQgYXJlLCBmb3IgbGFjayBvZiBhIGJldHRlciB0ZXJtLCAmIzM0O2FsaXZlLiYjMzQ7IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBmaXJzdCBzdGVwLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGZpbHRlcjsgSSB3YW50IHRvIGN1dCB0aHJvdWdoIHRoZSBub2lzZSBvZiBwdXJlbHkgaW5mcmFzdHJ1Y3R1cmFsIG9yIGRhdGEtaG9sZGluZyBwYXJ0cyBvZiB0aGUgY29kZSB0byBmaW5kIHRoZSBzZWN0aW9ucyB0aGF0ICpkbyogc29tZXRoaW5nLCB0aGF0IGFyZSBjYXBhYmxlIG9mIGNoYW5naW5nIHN0YXRlLCByZXNwb25kaW5nIHRvIGlucHV0LCBhbmQgZHJpdmluZyBwcm9ncmFtIGZsb3cuIFRoaXMgaW5pdGlhbCBxdWVyeSBnaXZlcyBtZSBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gZmluZCB0aGUgZHluYW1pYyBlbGVtZW50cyBpbiB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBuYmRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkluaXRpYWwgVGhvdWdodHMgb24gYG5iZC5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5iZC5jYCBmaWxlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBhbG1vc3QgZXZlcnl0aGluZyBoZXJlIGlzIGxpa2VseSBnb2luZyB0byBiZSBzdGF0aWMuIEkmIzM5O2Qgd2FnZXIgdGhhdCB0aGUgdmFzdCBtYWpvcml0eSBvZiBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZSBhcmUgZGVzaWduZWQgZm9yIGludGVybmFsIHVzZSwgaGlkZGVuIGZyb20gdGhlIG91dHNpZGUgd29ybGQuIEkmIzM5O20gdGhpbmtpbmcsIG1vc3QgbGlrZWx5LCBvbmx5IGBuYmRfaW5pdGAgYW5kIGBuYmRfY2xlYW51cGAgYXJlIGdvaW5nIHRvIGJlIGV4cG9zZWQgYXMgZW50cnkgcG9pbnRzIHRvIHRoZSBmdW5jdGlvbmFsaXR5IHRoaXMgZmlsZSBwcm92aWRlcy4gRXZlcnl0aGluZyBlbHNlLi4uIHRoZSBpbnRyaWNhdGUgZGV0YWlscyBvZiBob3cgaXQgaGFuZGxlcyByZXF1ZXN0cywgbWFuYWdlcyBjb25uZWN0aW9ucywgdGFsa3MgdG8gdGhlIGtlcm5lbCwgdGhhdCYjMzk7cyBhbGwgaW50ZXJuYWwuIEFuZCB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7ZCBleHBlY3Q7IGl0IG1ha2VzIGZvciBjbGVhbmVyLCBtb3JlIG1haW50YWluYWJsZSBjb2RlLiBOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgZGV0YWlscyB0byBzZWUgaWYgbXkgZ3Vlc3MgaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbnQgbmJkXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz01ND1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5iZF9kZWxfd3E7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjU1OnN0YXRpYyBpbnQgbmJkX3RvdGFsX2RldmljZXMgPSAwO1xuZHJpdmVycy9ibG9jay9uYmQuYy01Ni1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE2OT1zdGF0aWMgaW50IHBhcnRfc2hpZnQ7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTcxOnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcyLXN0YXRpYyB2b2lkIG5iZF9kZXZfZGJnX2Nsb3NlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTc0PXN0YXRpYyB2b2lkIG5iZF9jb25uZWN0X3JlcGx5KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NTpzdGF0aWMgaW50IG5iZF9nZW5sX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc2LXN0YXRpYyB2b2lkIG5iZF9kZWFkX2xpbmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9Mjg3PXN0YXRpYyB2b2lkIG5iZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI5OC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjk5OnN0YXRpYyBpbnQgbmJkX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnKVxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDAte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MzA1PXN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTMzMy1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MzM0OnN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTMzNS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz04MTA9c3RhdGljIHZvaWQgbmJkX3BlbmRpbmdfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtODY4LVxuZHJpdmVycy9ibG9jay9uYmQuYzo4Njk6c3RhdGljIGludCBuYmRfcmVhZF9yZXBseShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuZHJpdmVycy9ibG9jay9uYmQuYy04NzAtXHRcdFx0ICBzdHJ1Y3QgbmJkX3JlcGx5ICpyZXBseSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEyOTg9c3RhdGljIGlubGluZSB2b2lkIG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrKSB7fVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTMwMC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTMwMTpzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzAyLVx0XHRcdCAgYm9vbCBuZXRsaW5rKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM3My1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTM3NDpzdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzc1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE0NTU9c3RhdGljIHZvaWQgc2VuZF9kaXNjb25uZWN0cyhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ3OC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTQ3OTpzdGF0aWMgaW50IG5iZF9kaXNjb25uZWN0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE0ODAte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTQ5Nz1zdGF0aWMgdm9pZCBuYmRfY29uZmlnX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTUzNS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTUzNjpzdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTUzNy17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjA3LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjA4OnN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZV9pb2N0bChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjA5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE2NTg9c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcwNC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTcwNTpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDYtXHRcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzM0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzM1OnN0YXRpYyBpbnQgbmJkX2FsbG9jX2FuZF9pbml0X2NvbmZpZyhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzM2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3NjktXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NzA6c3RhdGljIGludCBuYmRfb3BlbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzcxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MzI9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODQzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODQ0OnN0YXRpYyBpbnQgbmJkX2RiZ190YXNrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODQ1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4NTQ9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfdGFza3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xODU1LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODU2OnN0YXRpYyBpbnQgbmJkX2RiZ19mbGFnc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODU3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4ODM9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xODg0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODg1OnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODg2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE5MTA9c3RhdGljIHZvaWQgbmJkX2Rldl9kYmdfY2xvc2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MTQtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5MTU6c3RhdGljIGludCBuYmRfZGJnX2luaXQodm9pZClcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkxNi17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xOTI4PXN0YXRpYyB2b2lkIG5iZF9kYmdfY2xvc2Uodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MzQtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5MzU6c3RhdGljIGludCBuYmRfZGV2X2RiZ19pbml0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MzYte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTk0MD1zdGF0aWMgdm9pZCBuYmRfZGV2X2RiZ19jbG9zZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk0My1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTk0NDpzdGF0aWMgaW50IG5iZF9kYmdfaW5pdCh2b2lkKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTQ1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE5NDk9c3RhdGljIHZvaWQgbmJkX2RiZ19jbG9zZSh2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk1NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTk1NTpzdGF0aWMgaW50IG5iZF9pbml0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQsIHN0cnVjdCByZXF1ZXN0ICpycSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk1Ni1cdFx0XHQgICAgdW5zaWduZWQgaW50IGhjdHhfaWR4LCBpbnQgbnVtYV9ub2RlKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjExNj1uYmRfZGV2aWNlX3BvbGljeVtOQkRfREVWSUNFX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEyMC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjEyMTpzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxMjIte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEzNy1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjEzODpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEzOS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yMzE5PXN0YXRpYyB2b2lkIG5iZF9kaXNjb25uZWN0X2FuZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzMzktXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzNDA6c3RhdGljIGludCBuYmRfZ2VubF9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNDEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM3NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjM3NTpzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNzYte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjU4Nj1zdGF0aWMgaW50IHN0YXR1c19jYihpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1OTEtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1OTI6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU5My17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNzA4PXN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzYwLVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzYxOnN0YXRpYyBpbnQgbmJkX2V4aXRfY2IoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQzOQoJCQkJCQkJb3V0cHV0OiAxMzMKCQkJCQkJCXRob3VnaHRzOiAzOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkJEIERyaXZlciBBUEkgRW50cnkgUG9pbnRzIGFuZCBGdXp6aW5nIFRhcmdldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIEFQSSBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIEkmIzM5O20gZ29pbmcgd2l0aCBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2dlbmxfZGlzY29ubmVjdGAsIGFuZCBgbmJkX3htaXRfdGltZW91dGAuIFRoZXNlIGFyZSBhbGwgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgZ2F2ZSBtZSBwYXVzZSBnaXZlbiB0aGUgcHJvbXB0JiMzOTtzIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gSG93ZXZlciwgdGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGEgc3RydWN0dXJlIChlLmcuLCBgLmlvY3RsID0gbmJkX2lvY3RsYCkuIFRoaXMgbWVhbnMgdGhleSAqYXJlbiYjMzk7dCogaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIHRoZXJlZm9yZSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIG1ha2luZyB0aGVtIHBlcmZlY3RseSB2YWxpZCBlbnRyeSBwb2ludHMuIFRoYXQmIzM5O3MgZ29vZC4KCk5vdywgbGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZiB0byBkZXRlcm1pbmUgaWYgaXQgaXMgd29ydGggZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gYG5iZF9zZW5kX2NtZGAgYW5kIGBuYmRfcGVuZGluZ19jbWRfd29ya2AsIHBhcnRpY3VsYXJseSBob3cgcGFydGlhbCBzZW5kcyBhcmUgbWFuYWdlZC4gVGhlIHBhdGNoIHNlZW1zIHRvIG1hcmsgdGhlIHNvY2tldCBhcyBkZWFkIGlmIGEgcGFydGlhbCBzZW5kIGhhcHBlbnMsIHdoaWNoIHNob3VsZCBjbGVhciBgbnNvY2stJmd0O3BlbmRpbmdgIGFuZCBgbnNvY2stJmd0O3NlbnRgLiBJdCBhbHNvIGFkZHMgYSBjaGVjayBpbiBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIGZvciBgbnNvY2stJmd0O3BlbmRpbmdgIGFuZCBza2lwcyBpZiBzZXQuIFRoaXMgaXMgZnVuY3Rpb25hbCwgYWRkcmVzc2luZyBhIGJ1ZyBhc3NvY2lhdGVkIHdpdGggcGFydGlhbCBzZW5kcyBhbmQgcG90ZW50aWFsIHNvY2tldCByZXVzZSBpc3N1ZXMuIFllcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5leHQsIEkgbmVlZCB0byBkZWZpbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgb2J2aW91cyBvbmUgaGVyZSBpcyBgQkxLX0RFVl9OQkRgLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgZGVwZW5kZW5jaWVzLiBgQkxLX0RFVl9OQkRgIGRlcGVuZHMgb24gYE5FVGAsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgZWxzZSByZWxldmFudCBoZXJlLiBTbywgYEJMS19ERVZfTkJEYCBpcyB0aGUgcHJpbWFyeSBjb25maWcuCgpUaGVyZWZvcmUsIGZvciBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSB3aWxsIGluY2x1ZGUgYEJMS19ERVZfTkJEYCwgYW5kIGZvciBmb2N1cyBzeW1ib2xzLCBJIGhhdmUgdGhlIGVudHJ5IHBvaW50czogYG5iZF9pb2N0bGAsIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBhbmQgYG5iZF94bWl0X3RpbWVvdXRgLiBJIGFtIG5vdyByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE4OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Rpc2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX3htaXRfdGltZW91dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgKE5CRCkgZHJpdmVyIHRvIHByb3Blcmx5IGhhbmRsZSBwYXJ0aWFsIHNlbmRzIGFuZCBkZWFkIHNvY2tldHMsIHByZXZlbnRpbmcgc29ja2V0IHJldXNlIHdoZW4gYSByZXF1ZXN0IGlzIHBhcnRpYWxseSB0cmFuc21pdHRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF94bWl0X3RpbWVvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBzZW5kcyBhbmQgZGVhZCBzb2NrZXRzLCBwcmV2ZW50aW5nIHNvY2tldCByZXVzZSB3aGVuIGEgcmVxdWVzdCBpcyBwYXJ0aWFsbHkgdHJhbnNtaXR0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNTowOS42ODEyNzAyNzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk2MTU5MTkwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfZ2VubF9kaXNjb25uZWN0XCIsXG4gICAgXCJuYmRfeG1pdF90aW1lb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBzZW5kcyBhbmQgZGVhZCBzb2NrZXRzLCBwcmV2ZW50aW5nIHNvY2tldCByZXVzZSB3aGVuIGEgcmVxdWVzdCBpcyBwYXJ0aWFsbHkgdHJhbnNtaXR0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjA5LjY4MTI3NzA4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExNDU1MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2ZlZDgwNGQ1YjViZWY5MjJkZmQ5NTBjZDUyMDEwY2FiZWMwNGI4Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDE4OjA1OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuaW5kZXggOGYxMDc2MmU5MGVmNy4uN2E0NjJhNjI2MzA2YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay9uYmQuY1xcbkBAIC0zMjcsOCArMzI3LDggQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0bnNvY2stXFx1MDAzZWRlYWQgPSB0cnVlO1xcbi1cXHRuc29jay1cXHUwMDNlcGVuZGluZyA9IE5VTEw7XFxuLVxcdG5zb2NrLVxcdTAwM2VzZW50ID0gMDtcXG4rXFx0aWYgKCFuc29jay1cXHUwMDNlcGVuZGluZylcXG4rXFx0XFx0bnNvY2stXFx1MDAzZXNlbnQgPSAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbkBAIC03OTMsOCArNzkzLDEwIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX3NlbmRfY21kKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfY21kICpjbWQsXFxuIFxcdCAqXFxuIFxcdCAqIFdlIG11c3QgcnVuIGZyb20gcGVuZGluZyB3b3JrIGZ1bmN0aW9uLlxcbiBcXHQgKiAqL1xcbi1cXHRpZiAodGVzdF9iaXQoTkJEX0NNRF9QQVJUSUFMX1NFTkQsIFxcdTAwMjZjbWQtXFx1MDAzZWZsYWdzKSlcXG4rXFx0aWYgKHRlc3RfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCBcXHUwMDI2Y21kLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0bmJkX21hcmtfbnNvY2tfZGVhZChuYmQsIG5zb2NrLCAxKTtcXG4gXFx0XFx0cmV0dXJuIEJMS19TVFNfT0s7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIHJldHJ5IG9uIGEgZGlmZmVyZW50IHNvY2tldCAqL1xcbiBcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cXHUwMDNlZGlzayksXFxuQEAgLTgyNiw4ICs4MjgsMTggQEAgc3RhdGljIHZvaWQgbmJkX3BlbmRpbmdfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRcXHRpZiAoIW5zb2NrLVxcdTAwM2VwZW5kaW5nKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuK1xcdFxcdGlmIChuc29jay1cXHUwMDNlZGVhZClcXG4rXFx0XFx0XFx0Z290byBkZWFkO1xcbitcXG4gXFx0XFx0LyogZG9uJ3QgYm90aGVyIHRpbWVvdXQgaGFuZGxlciBmb3IgcGFydGlhbCBzZW5kaW5nICovXFxuIFxcdFxcdGlmIChSRUFEX09OQ0UoamlmZmllcykgKyBtc2Vjc190b19qaWZmaWVzKHdhaXRfbXMpIFxcdTAwM2U9IGRlYWRsaW5lKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFRoZSBzb2NrZXQgY29udGFpbnMgYSBwYXJ0aWFsbHkgdHJhbnNtaXR0ZWQgcmVxdWVzdFxcbitcXHRcXHRcXHQgKiBhbmQgY2Fubm90IGJlIHJldXNlZCBmb3IgYW5vdGhlciBOQkQgcmVxdWVzdC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG5iZF9tYXJrX25zb2NrX2RlYWQobmJkLCBuc29jaywgMSk7XFxuK1xcdFxcdFxcdG5zb2NrLVxcdTAwM2VwZW5kaW5nID0gTlVMTDtcXG4rXFx0XFx0XFx0bnNvY2stXFx1MDAzZXNlbnQgPSAwO1xcbiBcXHRcXHRcXHRjbWQtXFx1MDAzZXN0YXR1cyA9IEJMS19TVFNfSU9FUlI7XFxuIFxcdFxcdFxcdGJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KHJlcSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC04NDAsNiArODUyLDE4IEBAIHN0YXRpYyB2b2lkIG5iZF9wZW5kaW5nX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gb3V0OlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmNtZC1cXHUwMDNlbG9jayk7XFxuIFxcdG5iZF9jb25maWdfcHV0KG5iZCk7XFxuK1xcdHJldHVybjtcXG4rXFxuK1xcdC8qIENvbXBsZXRlIHRoZSByZXF1ZXN0IGhlcmU7IG5iZF9jbGVhcl9yZXEoKSB3aWxsIG5vdCBoYW5kbGUgaXQuICovXFxuK2RlYWQ6XFxuK1xcdG5zb2NrLVxcdTAwM2VwZW5kaW5nID0gTlVMTDtcXG4rXFx0bnNvY2stXFx1MDAzZXNlbnQgPSAwO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm5zb2NrLVxcdTAwM2V0eF9sb2NrKTtcXG4rXFx0Y2xlYXJfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCBcXHUwMDI2Y21kLVxcdTAwM2VmbGFncyk7XFxuK1xcdGNtZC1cXHUwMDNlc3RhdHVzID0gQkxLX1NUU19JT0VSUjtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjbWQtXFx1MDAzZWxvY2spO1xcbitcXHRibGtfbXFfY29tcGxldGVfcmVxdWVzdChyZXEpO1xcbitcXHRuYmRfY29uZmlnX3B1dChuYmQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG5iZF9yZWFkX3JlcGx5KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuQEAgLTEzNzYsNiArMTQwMCwxMCBAQCBzdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5zb2NrLVxcdTAwM2V0eF9sb2NrKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4rXFx0XFx0aWYgKG5zb2NrLVxcdTAwM2VwZW5kaW5nKSB7XFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bnNvY2stXFx1MDAzZXR4X2xvY2spO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRza19zZXRfbWVtYWxsb2Moc29jay1cXHUwMDNlc2spO1xcbiBcXHRcXHRpZiAobmJkLVxcdTAwM2V0YWdfc2V0LnRpbWVvdXQpXFxuIFxcdFxcdFxcdHNvY2stXFx1MDAzZXNrLVxcdTAwM2Vza19zbmR0aW1lbyA9IG5iZC1cXHUwMDNldGFnX3NldC50aW1lb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNToxMC4wOTMzODcyNzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDkyMDM3OTAyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfZ2VubF9kaXNjb25uZWN0XCIsXG4gICAgXCJuYmRfeG1pdF90aW1lb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBzZW5kcyBhbmQgZGVhZCBzb2NrZXRzLCBwcmV2ZW50aW5nIHNvY2tldCByZXVzZSB3aGVuIGEgcmVxdWVzdCBpcyBwYXJ0aWFsbHkgdHJhbnNtaXR0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNmZWQ4MDRkNWI1YmVmOTIyZGZkOTUwY2Q1MjAxMGNhYmVjMDRiOGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDE4OjA1OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjcuLjdhNDYyYTYyNjMwNmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMzI3LDggKzMyNyw4IEBAIHN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcbiBcdFx0fVxuIFx0fVxuIFx0bnNvY2stXHUwMDNlZGVhZCA9IHRydWU7XG4tXHRuc29jay1cdTAwM2VwZW5kaW5nID0gTlVMTDtcbi1cdG5zb2NrLVx1MDAzZXNlbnQgPSAwO1xuK1x0aWYgKCFuc29jay1cdTAwM2VwZW5kaW5nKVxuK1x0XHRuc29jay1cdTAwM2VzZW50ID0gMDtcbiB9XG4gXG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbkBAIC03OTMsOCArNzkzLDEwIEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX3NlbmRfY21kKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfY21kICpjbWQsXG4gXHQgKlxuIFx0ICogV2UgbXVzdCBydW4gZnJvbSBwZW5kaW5nIHdvcmsgZnVuY3Rpb24uXG4gXHQgKiAqL1xuLVx0aWYgKHRlc3RfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCBcdTAwMjZjbWQtXHUwMDNlZmxhZ3MpKVxuK1x0aWYgKHRlc3RfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCBcdTAwMjZjbWQtXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdG5iZF9tYXJrX25zb2NrX2RlYWQobmJkLCBuc29jaywgMSk7XG4gXHRcdHJldHVybiBCTEtfU1RTX09LO1xuK1x0fVxuIFxuIFx0LyogcmV0cnkgb24gYSBkaWZmZXJlbnQgc29ja2V0ICovXG4gXHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRpc2tfdG9fZGV2KG5iZC1cdTAwM2VkaXNrKSxcbkBAIC04MjYsOCArODI4LDE4IEBAIHN0YXRpYyB2b2lkIG5iZF9wZW5kaW5nX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0aWYgKCFuc29jay1cdTAwM2VwZW5kaW5nKVxuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRpZiAobnNvY2stXHUwMDNlZGVhZClcbitcdFx0XHRnb3RvIGRlYWQ7XG4rXG4gXHRcdC8qIGRvbid0IGJvdGhlciB0aW1lb3V0IGhhbmRsZXIgZm9yIHBhcnRpYWwgc2VuZGluZyAqL1xuIFx0XHRpZiAoUkVBRF9PTkNFKGppZmZpZXMpICsgbXNlY3NfdG9famlmZmllcyh3YWl0X21zKSBcdTAwM2U9IGRlYWRsaW5lKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgc29ja2V0IGNvbnRhaW5zIGEgcGFydGlhbGx5IHRyYW5zbWl0dGVkIHJlcXVlc3RcbitcdFx0XHQgKiBhbmQgY2Fubm90IGJlIHJldXNlZCBmb3IgYW5vdGhlciBOQkQgcmVxdWVzdC5cbitcdFx0XHQgKi9cbitcdFx0XHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpO1xuK1x0XHRcdG5zb2NrLVx1MDAzZXBlbmRpbmcgPSBOVUxMO1xuK1x0XHRcdG5zb2NrLVx1MDAzZXNlbnQgPSAwO1xuIFx0XHRcdGNtZC1cdTAwM2VzdGF0dXMgPSBCTEtfU1RTX0lPRVJSO1xuIFx0XHRcdGJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KHJlcSk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtODQwLDYgKzg1MiwxOCBAQCBzdGF0aWMgdm9pZCBuYmRfcGVuZGluZ19jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gb3V0OlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNtZC1cdTAwM2Vsb2NrKTtcbiBcdG5iZF9jb25maWdfcHV0KG5iZCk7XG4rXHRyZXR1cm47XG4rXG4rXHQvKiBDb21wbGV0ZSB0aGUgcmVxdWVzdCBoZXJlOyBuYmRfY2xlYXJfcmVxKCkgd2lsbCBub3QgaGFuZGxlIGl0LiAqL1xuK2RlYWQ6XG4rXHRuc29jay1cdTAwM2VwZW5kaW5nID0gTlVMTDtcbitcdG5zb2NrLVx1MDAzZXNlbnQgPSAwO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5zb2NrLVx1MDAzZXR4X2xvY2spO1xuK1x0Y2xlYXJfYml0KE5CRF9DTURfUEFSVElBTF9TRU5ELCBcdTAwMjZjbWQtXHUwMDNlZmxhZ3MpO1xuK1x0Y21kLVx1MDAzZXN0YXR1cyA9IEJMS19TVFNfSU9FUlI7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Y21kLVx1MDAzZWxvY2spO1xuK1x0YmxrX21xX2NvbXBsZXRlX3JlcXVlc3QocmVxKTtcbitcdG5iZF9jb25maWdfcHV0KG5iZCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmJkX3JlYWRfcmVwbHkoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IHNvY2tldCAqc29jayxcbkBAIC0xMzc2LDYgKzE0MDAsMTAgQEAgc3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bnNvY2stXHUwMDNldHhfbG9jayk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbitcdFx0aWYgKG5zb2NrLVx1MDAzZXBlbmRpbmcpIHtcbitcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bnNvY2stXHUwMDNldHhfbG9jayk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcdFx0c2tfc2V0X21lbWFsbG9jKHNvY2stXHUwMDNlc2spO1xuIFx0XHRpZiAobmJkLVx1MDAzZXRhZ19zZXQudGltZW91dClcbiBcdFx0XHRzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3NuZHRpbWVvID0gbmJkLVx1MDAzZXRhZ19zZXQudGltZW91dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjEwLjA5MzM4OTI0OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4OTM2NTAzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2gsIGFzIGFuIGV4cGVydCBpbiBibG9jayBkZXZpY2UgZHJpdmVycywgZm9jdXNpbmcgb24gTkJEOlxuXG4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTkJEIFBhdGNoKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hpbmcgdGhlIGhlYXJ0IG9mIHRoZSBOQkQgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHksIGBkcml2ZXJzL2Jsb2NrL25iZC5jYC4gVGhlIGZhY3QgdGhhdCBpdCBtb2RpZmllcyBgbmJkX21hcmtfbnNvY2tfZGVhZGAsIGBuYmRfc2VuZF9jbWRgLCBgbmJkX3BlbmRpbmdfY21kX3dvcmtgLCBhbmQgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGRlYWxpbmcgd2l0aCBzb21lIGxvdy1sZXZlbCBuZXR3b3JrIGludGVyYWN0aW9ucyBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBOQkQgcHJvdG9jb2wuIEl0IHNlZW1zIGxpa2UgaXQncyBhZGRyZXNzaW5nIGhvdyB0aGUgZHJpdmVyIGNvcGVzIHdpdGggcGFydGlhbCBzZW5kcyBhbmQgcG90ZW50aWFsbHkgZGVhZCBvciBmbGFreSBzb2NrZXRzLiBUaGlzIGtpbmQgb2YgY29kZSBpcyBhbHdheXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBuZXR3b3JrIGludGVyYWN0aW9ucyBhcmUgaW5oZXJlbnRseSBjb21wbGV4LCBhbmQgc3VidGxlIHRpbWluZyBpc3N1ZXMgb3IgbWFsZm9ybWVkIGRhdGEgY2FuIGxlYWQgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIG9yIHN1YnRsZSBkYXRhIGNvcnJ1cHRpb24uXG5cbkdpdmVuIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBhcmVhcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gbWFuYWdlbWVudCwgY29tbWFuZCB0cmFuc21pc3Npb24sIGFuZCByZS1lc3RhYmxpc2htZW50IG9mIGNvbW11bmljYXRpb24gYWZ0ZXIgYW4gZXJyb3IuIFRoYXQgbWVhbnMgSSdtIGdvaW5nIHRvIGJlIHBheWluZyB2ZXJ5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgaXQgaGFuZGxlcyBlZGdlIGNhc2VzLCBlcnJvciBjb25kaXRpb25zLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgZmFjZSBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5OZXh0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBOQkQgY29uZmlndXJhdGlvbiB0byBzZWUgaG93IHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZpcnN0IHBsYWNlLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0byBjaGVjayBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBkaXJlY3RseSwgb3IgYWx0ZXJuYXRpdmVseSwgSSBjb3VsZCBqdXN0IGdyZXAgZm9yIHNvbWV0aGluZyBsaWtlIGBuYmQub2AgaW4gYGRyaXZlcnMvYmxvY2svTWFrZWZpbGVgIHRvIGZpbmQgYW55IHJlbGV2YW50IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIFRoaXMgd2F5LCBJIGNhbiBxdWlja2x5IHZlcmlmeSB3aGV0aGVyIE5CRCBpcyBlbmFibGVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBjb250cm9sIGl0cyBiZWhhdmlvciBkdXJpbmcgdGVzdGluZy4gVGhpcyBpcyBjcnVjaWFsIGZvciBzZXR0aW5nIHVwIHRoZSByaWdodCB0ZXN0IGVudmlyb25tZW50IGZvciB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDU6MTguOTg3MDQxOTM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDMwMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1NVTlZEQylcXHRcXHQrPSBzdW52ZGMub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMjQtXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfQkxLX0RFVl9OQkQpXFx0Kz0gbmJkLm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19WSVJUSU9fQkxLKVxcdCs9IHZpcnRpb19ibGsub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNToxOS4wNDg0NzgyNTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM5NjA0MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29uZmlnIG9wdGlvbiBJJ20gd29ya2luZyB3aXRoIGlzIGBCTEtfREVWX05CRGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzLCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBrZXJuZWwncyBibG9jayBkZXZpY2Ugc3Vic3lzdGVtLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBibG9jayBkZXZpY2UgZHJpdmVycyBhcmUgZGVmaW5lZCwgYWxvbmcgd2l0aCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIG90aGVyIGZlYXR1cmVzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoYXQgZmlsZSB0byBzZWUgd2hhdCB0aGlzIGBCTEtfREVWX05CRGAgZGVwZW5kcyBvbiBhbmQgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBLbm93aW5nIGl0cyBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBhIGhlYWQgc3RhcnQgaW4gdW5kZXJzdGFuZGluZyB3aHkgaXQncyBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNToyMi44ODgwODY0NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NDY2NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX05CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNToyMi45OTM1NTczOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzkwMzYxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhdCBwbGF5LiBJdCdzIGEgY3JpdGljYWwgaW5pdGlhbCBhc3Nlc3NtZW50LiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IG1hcCBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZWxlbWVudHMgaW52b2x2ZWQuIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBleHRlcm5hbCBzeXN0ZW1zIGRvZXMgdGhpcyBwYXJ0aWN1bGFyIGNvbXBvbmVudCByZWx5IG9uPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGZhY3RvcnMgb3IgZG93bnN0cmVhbSBpbXBsaWNhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBjb25zaWRlcmF0aW9uPyBJIGNhbid0IGFmZm9yZCB0byBiZSBjYXVnaHQgb2ZmIGd1YXJkIGJ5IGEgY2FzY2FkaW5nIGZhaWx1cmUgb3IgaW5jb21wYXRpYmlsaXR5IGlzc3VlIGZ1cnRoZXIgZG93biB0aGUgbGluZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBkZXBlbmRlbmN5IHNjYW4gYW5kIG1hcHBpbmcgdG8gYnVpbGQgYSByb2J1c3QgbW9kZWwgYmVmb3JlIG1vdmluZyBvbi4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHJlcXVpcmUgYSByZS13cml0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjI2LjUzMjU5NjU4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjQ4NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX05CRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE5ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNToyNi42MDU4NDg1MDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTc0OTQ5OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBCbG9jayBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYmxvY2sgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLCBzbyBsZXQncyBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTYuIEknbSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgdmFyaW91cyBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBvciBkZWZhdWx0cyBhcmUgaW4gcGxheS4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgc2VsZWN0aW9uIG9mIGRpZmZlcmVudCBibG9jayBkcml2ZXJzLCB0aGVpciBmZWF0dXJlcywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gVGhpcyBzaG91bGQgcHJvdmlkZSBjb250ZXh0IGZvciB3aGF0IEknbSBsb29raW5nIGF0IGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTgxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDU6MzUuNzgwODAxNTEzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcdCAgVGhlIGhpc3RvcmljIGRlZmF1bHQgaXMgOC4gSWYgYSBsYXRlIDIwMTEgdmVyc2lvbiBvZiBsb3NldHVwKDgpXFxuIDE5MTpcXHRcXHQgIGlzIHVzZWQsIGl0IGNhbiBiZSBzZXQgdG8gMCwgc2luY2UgbmVlZGVkIGxvb3AgZGV2aWNlcyBjYW4gYmVcXG4gMTkyOlxcdFxcdCAgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHdpdGggdGhlIC9kZXYvbG9vcC1jb250cm9sIGludGVyZmFjZS5cXG4gMTkzOlxcdFxcbiAxOTQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1xcXCJcXG4gMTk1OlxcdFxcbiAxOTY6XFx0Y29uZmlnIEJMS19ERVZfTkJEXFxuIDE5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gMTk4OlxcdFxcdGRlcGVuZHMgb24gTkVUXFxuIDE5OTpcXHRcXHRoZWxwXFxuIDIwMDpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3VyIGNvbXB1dGVyIHRvIGJlIGEgY2xpZW50IGZvciBuZXR3b3JrXFxuIDIwMTpcXHRcXHQgIGJsb2NrIGRldmljZXMsIGkuZS4gaXQgd2lsbCBiZSBhYmxlIHRvIHVzZSBibG9jayBkZXZpY2VzIGV4cG9ydGVkIGJ5XFxuIDIwMjpcXHRcXHQgIHNlcnZlcnMgKG1vdW50IGZpbGUgc3lzdGVtcyBvbiB0aGVtIGV0Yy4pLiBDb21tdW5pY2F0aW9uIGJldHdlZW5cXG4gMjAzOlxcdFxcdCAgY2xpZW50IGFuZCBzZXJ2ZXIgd29ya3Mgb3ZlciBUQ1AvSVAgbmV0d29ya2luZywgYnV0IHRvIHRoZSBjbGllbnRcXG4gMjA0OlxcdFxcdCAgcHJvZ3JhbSB0aGlzIGlzIGhpZGRlbjogaXQgbG9va3MgbGlrZSBhIHJlZ3VsYXIgbG9jYWwgZmlsZSBhY2Nlc3MgdG9cXG4gMjA1OlxcdFxcdCAgYSBibG9jayBkZXZpY2Ugc3BlY2lhbCBmaWxlIHN1Y2ggYXMgL2Rldi9uZDAuXFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdCAgTmV0d29yayBibG9jayBkZXZpY2VzIGFsc28gYWxsb3dzIHlvdSB0byBydW4gYSBibG9jay1kZXZpY2UgaW5cXG4gMjA4OlxcdFxcdCAgdXNlcmxhbmQgKG1ha2luZyBzZXJ2ZXIgYW5kIGNsaWVudCBwaHlzaWNhbGx5IHRoZSBzYW1lIGNvbXB1dGVyLFxcbiAyMDk6XFx0XFx0ICBjb21tdW5pY2F0aW5nIHVzaW5nIHRoZSBsb29wYmFjayBuZXR3b3JrIGRldmljZSkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjM1Ljc4MDkwNjM4M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzEyNzgyMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTkJEIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IG9uIGBORVRgLiAgVGhhdCB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggbmV0d29yayBibG9jayBkZXZpY2VzLCBzcGVjaWZpY2FsbHksIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSBjb25maWcsIHdoaWNoIGlzIGBCTEtfREVWX05CRGAuIEdvb2QgdG8gaGF2ZSB0aGF0IGNvbmZpcm1lZCByaWdodCBhd2F5LlxuXG5Ob3csIG15IGZvY3VzIGlzIHRoZSBzeW1ib2xzIGJlaW5nIG1vZGlmaWVkLiBUaGUgcGF0Y2ggdG91Y2hlczogYG5iZF9tYXJrX25zb2NrX2RlYWRgLCBgbmJkX3NldF9zaXplYCwgYG5iZF9zZW5kX2NtZGAsIGBuYmRfcGVuZGluZ19jbWRfd29ya2AsIGBuYmRfcmVhZF9yZXBseWAsIGFuZCBgbmJkX3JlY29ubmVjdF9zb2NrZXRgLiBIbW0sIHNvbWV0aGluZyBqdW1wcyBvdXQg4oCTICphbGwqIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBpbXBvcnRhbnQuIEl0IG1lYW5zIHRoZXkncmUgbm90IGRpcmVjdGx5IGV4cG9zZWQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC5cblxuVGhlcmVmb3JlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0LiBXaGF0IGNhbGxzIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnM/IE9yLCBwdXQgYW5vdGhlciB3YXksIHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBkcml2ZXJzL2Jsb2NrL25iZC5jYCBtaWdodCBiZSB0aGUgZW50cnkgcG9pbnRzIG9yIGtleSBpbnRlcmZhY2VzIHRoYXQgKmRvKiBjYWxsIHRob3NlIHN0YXRpYyBmdW5jdGlvbnM/IFRoYXQncyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBvZiB0aGUgcGF0Y2ggbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDczNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjQyLjA5MzY5MTM4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1NzkwNTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9yZWNvbm5lY3Rfc29ja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xMzAxPXN0YXRpYyBpbnQgbmJkX2FkZF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEzNzMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMzc0OnN0YXRpYyBpbnQgbmJkX3JlY29ubmVjdF9zb2NrZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzc1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjM3NT1zdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0OTUtXFx0XFx0XFx0ZmQgPSAoaW50KW5sYV9nZXRfdTMyKHNvY2tzW05CRF9TT0NLX0ZEXSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNDk2OlxcdFxcdFxcdHJldCA9IG5iZF9yZWNvbm5lY3Rfc29ja2V0KG5iZCwgZmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ5Ny1cXHRcXHRcXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjQyLjMyOTQ4Nzc2MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ2MTYyNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipNeSBCcmFpbidzIFRyYWNlIFRocm91Z2ggdGhlIE5CRCBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGRyaXZlciBwZXJzcGVjdGl2ZS4gSSBzZWUgdGhhdCB0aGUgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCBmdW5jdGlvbiBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gIFRoYXQncyBteSBpbml0aWFsIGVudHJ5IHBvaW50IGZvciBzb2NrZXQgcmVjb25uZWN0aW9uLCBpbml0aWF0ZWQgYnkgYSBjb25maWd1cmF0aW9uIGNoYW5nZSB0aHJvdWdoIEdlbmVyaWMgTmV0bGluay4gVGhlbiwgYG5iZF9wZW5kaW5nX2NtZF93b3JrYCBnZXRzIGludm9rZWQgYXMgYSB3b3JrcXVldWUgZnVuY3Rpb24uIFRoaXMgbGlrZWx5IGhhbmRsZXMgYXN5bmNocm9ub3VzIGNvbW1hbmQgcHJvY2Vzc2luZyBvciBjb21wbGV0aW9uIGFmdGVyIHRoYXQgY29uZmlndXJhdGlvbiBjaGFuZ2UgaGFwcGVucy4gRnJvbSBteSBleHBlcmllbmNlLCB3b3JrcXVldWVzIGFyZSBlc3NlbnRpYWwgZm9yIGRlZmVycmluZyBzb21lIG9mIHRob3NlIGJsb2NraW5nIG9wZXJhdGlvbnMgdG8gcHJldmVudCBrZXJuZWwgdGhyZWFkIHN0YXJ2YXRpb24uIExhc3RseSwgdGhlIGNvbW1hbmQgZmxvdyBsb29rcyBsaWtlIGBuYmRfc2VuZF9jbWRgIGlzIGRpcmVjdGx5IGNhbGxlZCBieSBgbmJkX3F1ZXVlX3JxYC4gU28sIGNvbW1hbmRzIGFyZSBiZWluZyBzZW50IHRocm91Z2ggdGhlIG5ldHdvcmsgZnJvbSB0aGUgcmVxdWVzdCBxdWV1ZS4gVGhpcyB3b3JrZmxvdyBtYWtlcyBzZW5zZTogcmVjb25maWd1cmUgdHJpZ2dlcnMgYSBzb2NrZXQgcmVjb25uZWN0OyB0aGUgd29ya3F1ZXVlIGhhbmRsZXMgcGVuZGluZyBjb21tYW5kcyBhZnRlciBhbnkgc29ja2V0IGNoYW5nZSBoYXBwZW5zLCBhbmQgZmluYWxseSwgY29tbWFuZHMgYXJlIGRpc3BhdGNoZWQgdG8gdGhlIHNvY2tldCBmcm9tIHRoZSByZXF1ZXN0IHF1ZXVlLiBUaGlzIGlzIGEgdmVyeSBzdGFuZGFyZCBuZXR3b3JrIGJsb2NrIGRldmljZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA1OjQ2LjI3NTY1MzEzNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNDgxMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9zZW5kX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9NjI1PXN0YXRpYyB2b2lkIG5iZF9zY2hlZF9wZW5kaW5nX3dvcmsoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNjQ0LSAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6NjQ1OnN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX3NlbmRfY21kKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay9uYmQuYy02NDYtXFx0XFx0XFx0XFx0IGludCBpbmRleClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9ODEwPXN0YXRpYyB2b2lkIG5iZF9wZW5kaW5nX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODI2LVxcdHdoaWxlICh0cnVlKSB7XFxuZHJpdmVycy9ibG9jay9uYmQuYzo4Mjc6XFx0XFx0bmJkX3NlbmRfY21kKG5iZCwgY21kLCBjbWQtXFx1MDAzZWluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTgyOC1cXHRcXHRpZiAoIW5zb2NrLVxcdTAwM2VwZW5kaW5nKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xMTQxPXN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX2hhbmRsZV9jbWQoc3RydWN0IG5iZF9jbWQgKmNtZCwgaW50IGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjAwLVxcdH1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEyMDE6XFx0cmV0ID0gbmJkX3NlbmRfY21kKG5iZCwgY21kLCBpbmRleCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMjAyLW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDU6NDYuNDg2MTQzMzUxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODg2OTI2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mIGEgbmV0d29yayBibG9jayBkZXZpY2UgZHJpdmVyOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIENvbW1hbmQgUGF0aCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29yZSBjb21tYW5kIGhhbmRsaW5nIHdpdGhpbiB0aGUgTkJEIGRyaXZlci4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUgaXMgYG5iZF9oYW5kbGVfY21kYCwgYW5kIEknbSBpbW1lZGlhdGVseSByZWNvZ25pemluZyB0aGF0IGl0cyBwcmltYXJ5IGZ1bmN0aW9uIGlzIHRvIHNoZXBoZXJkIGNvbW1hbmRzIHRvIHRoZWlyIHVsdGltYXRlIGRlc3RpbmF0aW9uLCB0aGUgbmV0d29yay4gVGhlIHZlcnkgbmV4dCBmdW5jdGlvbiBpbiB0aGUgcHJvY2VzcyBpcyBgbmJkX3NlbmRfY21kYC4gU28sIGBuYmRfaGFuZGxlX2NtZGAgaXMgbGlrZSB0aGUgb3JjaGVzdHJhdG9yLCBhbmQgaXQga25vd3MgdGhlIGZ1bmN0aW9uIGl0J3MgZ29pbmcgdG8gdXNlLiBJdCBtYWtlcyBzZW5zZSwgYG5iZF9zZW5kX2NtZGAgbXVzdCBoYW5kbGUgdGhlIHRhc2sgb2YgYWN0dWFsbHkgdHJhbnNtaXR0aW5nIHRoZSBjb21tYW5kIG92ZXIgdGhlIG5ldHdvcmsuIFRoaXMgbGlrZWx5IGludm9sdmVzIGZvcm1hdHRpbmcgdGhlIGNvbW1hbmQgaW50byB0aGUgY29ycmVjdCBOQkQgcHJvdG9jb2wgcGFja2V0cywgaGFuZGxpbmcgcG90ZW50aWFsIGVycm9ycyBpbiB0aGUgcHJvY2VzcywgYW5kIGVuc3VyaW5nIHJlbGlhYmxlIGRlbGl2ZXJ5IHRvIHRoZSByZW1vdGUgZW5kLiBTbywgYG5iZF9oYW5kbGVfY21kYCBpcyBzZXR0aW5nIHVwIHRoZSBwaWVjZXMsIGFuZCB0aGVuIGBuYmRfc2VuZF9jbWRgIGlzIGRvaW5nIHRoZSBoZWF2eSBsaWZ0aW5nIG9mIHNlbmRpbmcgdGhlIGRhdGEgb3ZlciB0aGUgd2lyZS4gVGhpcyBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zIGZlZWxzIHJpZ2h0IGZvciB0aGlzIGtpbmQgb2YgbG93LWxldmVsIGRyaXZlci4gSXTigJlzIGEgY2xlYW4gYW5kIGVmZmljaWVudCBkZXNpZ24sIGZyb20gd2hhdCBJIHVuZGVyc3RhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwOTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNTo1MC4xNzQ4Mzk0MTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NzYwMjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9oYW5kbGVfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xMTI1PXN0YXRpYyBpbnQgd2FpdF9mb3JfcmVjb25uZWN0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTExNDAtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMTQxOnN0YXRpYyBibGtfc3RhdHVzX3QgbmJkX2hhbmRsZV9jbWQoc3RydWN0IG5iZF9jbWQgKmNtZCwgaW50IGluZGV4KVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTE0Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEyMDg9c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyMzAtXFx0ICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMjMxOlxcdHJldCA9IG5iZF9oYW5kbGVfY21kKGNtZCwgaGN0eC1cXHUwMDNlcXVldWVfbnVtKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEyMzItXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjbWQtXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNTo1MC4yNDk2MDgxNDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2MjI1NTUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTkJEIFJlcXVlc3QgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYG5iZF9xdWV1ZV9ycWAgZnVuY3Rpb24uIFRoYXQncyB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIHJlcXVlc3RzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgYWZ0ZXIgYSByZXF1ZXN0IGlzIHF1ZXVlZC4gVGhlIGZsb3cgbG9va3MgbGlrZSBpdCB0aGVuIGNhbGxzIGBuYmRfaGFuZGxlX2NtZGAuIE1ha2VzIHNlbnNlLCB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBjb21tYW5kIHByb2Nlc3Npbmcgd2lsbCBvY2N1ci4gTXkgbmV4dCBxdWVzdGlvbiBpczogd2hhdCBraW5kIG9mIHNvY2tldCBpc3N1ZXMgbWF5IGJlIGhhcHBlbmluZyBhdCB0aGlzIHBvaW50PyBMZXQncyBjaGVjayBgbmJkX21hcmtfbnNvY2tfZGVhZGAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRlYWQgbmV0d29yayBzb2NrZXRzLiBVbmRlcnN0YW5kaW5nIHRoYXQgd2lsbCBiZSBrZXkgaW4gZGlhZ25vc2luZyBjb25uZWN0aW9uIGlzc3VlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjQ4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDU6NTMuOTExODY2Mjk1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njc0OTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfbWFya19uc29ja19kZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0yOTk9c3RhdGljIGludCBuYmRfZGlzY29ubmVjdGVkKHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTMwNC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjMwNTpzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMDYtXFx0XFx0XFx0XFx0aW50IG5vdGlmeSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9Mzk4PXN0YXRpYyB2b2lkIHNvY2tfc2h1dGRvd24oc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNDEwLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm5zb2NrLVxcdTAwM2V0eF9sb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjQxMTpcXHRcXHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDApO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtNDEyLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bnNvY2stXFx1MDAzZXR4X2xvY2spO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz00NTE9c3RhdGljIGVudW0gYmxrX2VoX3RpbWVyX3JldHVybiBuYmRfeG1pdF90aW1lb3V0KHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTUwMi1cXHRcXHRcXHRcXHRpZiAoY21kLVxcdTAwM2Vjb29raWUgPT0gbnNvY2stXFx1MDAzZWNvb2tpZSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjUwMzpcXHRcXHRcXHRcXHRcXHRuYmRfbWFya19uc29ja19kZWFkKG5iZCwgbnNvY2ssIDEpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtNTA0LVxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bnNvY2stXFx1MDAzZXR4X2xvY2spO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz02NDU9c3RhdGljIGJsa19zdGF0dXNfdCBuYmRfc2VuZF9jbWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9jbWQgKmNtZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNzk2LVxcdGlmICh0ZXN0X2JpdChOQkRfQ01EX1BBUlRJQUxfU0VORCwgXFx1MDAyNmNtZC1cXHUwMDNlZmxhZ3MpKSB7XFxuZHJpdmVycy9ibG9jay9uYmQuYzo3OTc6XFx0XFx0bmJkX21hcmtfbnNvY2tfZGVhZChuYmQsIG5zb2NrLCAxKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTc5OC1cXHRcXHRyZXR1cm4gQkxLX1NUU19PSztcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODAzLVxcdFxcdFxcdCAgICBcXFwiUmVxdWVzdCBzZW5kIGZhaWxlZCwgcmVxdWV1ZWluZ1xcXFxuXFxcIik7XFxuZHJpdmVycy9ibG9jay9uYmQuYzo4MDQ6XFx0bmJkX21hcmtfbnNvY2tfZGVhZChuYmQsIG5zb2NrLCAxKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTgwNS1cXHRuYmRfcmVxdWV1ZV9jbWQoY21kKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9ODEwPXN0YXRpYyB2b2lkIG5iZF9wZW5kaW5nX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODM5LVxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6ODQwOlxcdFxcdFxcdG5iZF9tYXJrX25zb2NrX2RlYWQobmJkLCBuc29jaywgMSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy04NDEtXFx0XFx0XFx0bnNvY2stXFx1MDAzZXBlbmRpbmcgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz05OTQ9c3RhdGljIHZvaWQgcmVjdl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTA0NC1cXHRtdXRleF9sb2NrKFxcdTAwMjZuc29jay1cXHUwMDNldHhfbG9jayk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMDQ1OlxcdG5iZF9tYXJrX25zb2NrX2RlYWQobmJkLCBuc29jaywgMSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMDQ2LVxcdG11dGV4X3VubG9jayhcXHUwMDI2bnNvY2stXFx1MDAzZXR4X2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNTo1My45OTg2MjE2OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQyODE4NjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBmb3IgVGVzdGluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0byBmb2N1cyBvdXIgdGVzdGluZyBlZmZvcnRzIGluIHRoZSBOQkQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhvc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZSBlbnRyeSBwb2ludHMgd2UgY2FuIHRhcmdldC4gSSBuZWVkIHRvIGF2b2lkIHRoZSB0eXBpY2FsLCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgb3RoZXJ3aXNlLCB0aGUgdGVzdHMgd2lsbCBiZSBza2V3ZWQuIEkgc2hvdWxkIGJlIHByaW9yaXRpemluZyBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVycywgYnV0IGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgZmV3IHByb21pc2luZyBjYW5kaWRhdGVzOiBgbmJkX3F1ZXVlX3JxYCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYW5kIGBuYmRfeG1pdF90aW1lb3V0YCwgYW5kIG9mIGNvdXJzZSwgYHJlY3Zfd29ya2AuIEFjdHVhbGx5LCB3YWl0LCBgcmVjdl93b3JrYCBpcyBwYXJ0IG9mIGEgd29ya3F1ZXVlLi4uIG1heWJlIHRoZSBjb25uZWN0aW9uIG9yIGlvY3RsIHBhdGhzIGFyZSBhc3NvY2lhdGVkLiBgbmJkX2lvY3RsYCBvciBgbmJkX2dlbmxfY29ubmVjdGAgd291bGQgYmUgbW9yZSBkaXJlY3QsIEkgdGhpbmsuXG5cbmBuYmRfcXVldWVfcnFgIGNhdGNoZXMgbXkgZXllIGZpcnN0LiBJdCdzIHRoZSBibG9jayBsYXllcidzIHF1ZXVlIHJlcXVlc3QgY2FsbGJhY2sg4oCTIGRlZmluaXRlbHkgYSBob3QgcGF0aCEgRGFtbi4gR2l2ZW4gdGhlIHByb21wdCwgSSBzaG91bGQgcHJvYmFibHkgYXZvaWQgaXQgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBJdCdzIHRlbXB0aW5nLCBidXQgbGV0J3Mgc3RpY2sgdG8gdGhlIHByb21wdC5cblxuTm93LCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIHNlZW1zIG1vcmUgcHJvbWlzaW5nLiBBaCwgaXQncyBhIG5ldGxpbmsgY29tbWFuZCBoYW5kbGVyLiBUaGF0IGZlZWxzIGxpa2UgYSBiZXR0ZXIgZml0LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgbmJkLmNgIGFuZCBzZWUgd2hhdCBuZXRsaW5rIGNvbW1hbmRzIGFyZSBhdmFpbGFibGUuIFRoYXQnbGwgaGVscCBuYXJyb3cgZG93biB0aGUgdGVzdGluZyBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjowMy40MjY4MTE3ODRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODM2Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9nZW5sX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTc0PXN0YXRpYyB2b2lkIG5iZF9jb25uZWN0X3JlcGx5KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBpbmRleCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzU6c3RhdGljIGludCBuYmRfZ2VubF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzYtc3RhdGljIHZvaWQgbmJkX2RlYWRfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIxMTY9bmJkX2RldmljZV9wb2xpY3lbTkJEX0RFVklDRV9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjEyMTpzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEzNy1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxMzg6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTM5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjIxNi1cXHRzZXRfYml0KE5CRF9SVF9CT1VORCwgXFx1MDAyNmNvbmZpZy1cXHUwMDNlcnVudGltZV9mbGFncyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMjE3OlxcdHJldCA9IG5iZF9nZW5sX3NpemVfc2V0KGluZm8sIG5iZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMjE4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIzMTk9c3RhdGljIHZvaWQgbmJkX2Rpc2Nvbm5lY3RfYW5kX3B1dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzM5LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjM0MDpzdGF0aWMgaW50IG5iZF9nZW5sX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNDEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzc0LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjM3NTpzdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMzc2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQzNy1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI0Mzg6XFx0cmV0ID0gbmJkX2dlbmxfc2l6ZV9zZXQoaW5mbywgbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0MzktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjUxND1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5iZF9jb25uZWN0X2dlbmxfb3BzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTctXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUxODpcXHRcXHQuZG9pdFxcdD0gbmJkX2dlbmxfY29ubmVjdCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MTktXFx0fSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUyMi1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTIzOlxcdFxcdC5kb2l0XFx0PSBuYmRfZ2VubF9kaXNjb25uZWN0LFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUyNC1cXHR9LFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTI3LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1Mjg6XFx0XFx0LmRvaXRcXHQ9IG5iZF9nZW5sX3JlY29uZmlndXJlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUyOS1cXHR9LFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTMyLVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1MzM6XFx0XFx0LmRvaXRcXHQ9IG5iZF9nZW5sX3N0YXR1cyxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1MzQtXFx0fSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjUzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5iZF9tY2FzdF9ncnBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1NDAtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTQxOnN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgbmJkX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1NDItXFx0LmhkcnNpemVcXHQ9IDAsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI1ODY9c3RhdGljIGludCBzdGF0dXNfY2IoaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI1OTEtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNTkyOnN0YXRpYyBpbnQgbmJkX2dlbmxfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTkzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjYxMi1cXHRcXHRnb3RvIG91dDtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI2MTM6XFx0cmVwbHlfaGVhZCA9IGdlbmxtc2dfcHV0X3JlcGx5KHJlcGx5LCBpbmZvLCBcXHUwMDI2bmJkX2dlbmxfZmFtaWx5LCAwLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjYxNC1cXHRcXHRcXHRcXHQgICAgICAgTkJEX0NNRF9TVEFUVVMpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNjUyPXN0YXRpYyB2b2lkIG5iZF9jb25uZWN0X3JlcGx5KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBpbmRleClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY2MC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNjYxOlxcdG1zZ19oZWFkID0gZ2VubG1zZ19wdXRfcmVwbHkoc2tiLCBpbmZvLCBcXHUwMDI2bmJkX2dlbmxfZmFtaWx5LCAwLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY2Mi1cXHRcXHRcXHRcXHQgICAgIE5CRF9DTURfQ09OTkVDVCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI2NzY9c3RhdGljIHZvaWQgbmJkX21jYXN0X2luZGV4KGludCBpbmRleClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY4NC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNjg1OlxcdG1zZ19oZWFkID0gZ2VubG1zZ19wdXQoc2tiLCAwLCAwLCBcXHUwMDI2bmJkX2dlbmxfZmFtaWx5LCAwLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY4Ni1cXHRcXHRcXHRcXHQgICAgIE5CRF9DTURfTElOS19ERUFEKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjY5Ni1cXHRnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI2OTc6XFx0Z2VubG1zZ19tdWx0aWNhc3QoXFx1MDAyNm5iZF9nZW5sX2ZhbWlseSwgc2tiLCAwLCAwLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI2OTgtfVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNzA4PXN0YXRpYyBpbnQgX19pbml0IG5iZF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NDgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzQ5OlxcdGlmIChnZW5sX3JlZ2lzdGVyX2ZhbWlseShcXHUwMDI2bmJkX2dlbmxfZmFtaWx5KSkge1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc1MC1cXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShuYmRfZGVsX3dxKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9Mjc3Mz1zdGF0aWMgdm9pZCBfX2V4aXQgbmJkX2NsZWFudXAodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc4MS1cXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3ODI6XFx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcXHUwMDI2bmJkX2dlbmxfZmFtaWx5KTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3ODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA2OjAzLjUwMTY1MjE2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM3NDYyMjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlJldmlld2luZyB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UgSW50ZXJmYWNlIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgbmV0d29yayBibG9jayBkZXZpY2UgaW50ZXJhY3Rpb24gbWV0aG9kcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb250cm9sIHBsYW5lIG9wdGlvbnMuIEkgc2VlIHdlIGhhdmUgdGhlIGBuYmRfZ2VubGAgY29tbWFuZHM6IGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9nZW5sX3N0YXR1c2AuIFRoZXNlIGhhbmRsZSB0aGUgbWFuYWdlbWVudCBhbmQgY29uZmlndXJhdGlvbiBhc3BlY3QuIE5hdHVyYWxseSwgc2luY2UgdGhpcyBpcyBhIGJsb2NrIGRldmljZSwgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBhY2Nlc3MgcGF0aHMuIE5vdyBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgYG5iZF9pb2N0bGAgaXMgdGhlIHN0YW5kYXJkIGZvciB0aGUgZGF0YSBwbGFuZSwgb3IgaWYgd2UgaGF2ZSBzb21ldGhpbmcgZWxzZS4gTGV0J3Mgc2VlIGhvdyB0aG9zZSB3b3JrIHRvZ2V0aGVyLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDY6MDcuNTM5MTE3MjQ0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc3MzA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTE2NDg9c3RhdGljIHZvaWQgbmJkX3NldF9jbWRfdGltZW91dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1NjQgdGltZW91dClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY1Ny0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2NTg6c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY1OS1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA1OnN0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDYtXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcyNy1cXHQgICAgKGNtZCA9PSBOQkRfRElTQ09OTkVDVCB8fCBjbWQgPT0gTkJEX0NMRUFSX1NPQ0spKVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTcyODpcXHRcXHRlcnJvciA9IF9fbmJkX2lvY3RsKGJkZXYsIG5iZCwgY21kLCBhcmcpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcyOS1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MzI9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MzYtXFx0LnJlbGVhc2UgPVxcdG5iZF9yZWxlYXNlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgzNzpcXHQuaW9jdGwgPVxcdG5iZF9pb2N0bCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4Mzg6XFx0LmNvbXBhdF9pb2N0bCA9XFx0bmJkX2lvY3RsLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgzOS1cXHQuZnJlZV9kaXNrID1cXHRuYmRfZnJlZV9kaXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjowNy42MDc4OTQzNDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMzI5MjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgTkJEIFN5bWJvbHMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2dlbmxfZGlzY29ubmVjdGAgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlLiBUaGV5IHJlcHJlc2VudCB0aGUgY29yZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgTkJEIGRyaXZlci4gSSBicmllZmx5IGNvbnNpZGVyZWQgYG5iZF9xdWV1ZV9ycWAsIHNpbmNlIGl0J3MgdGhlIGJsb2NrIGxheWVyIHF1ZXVlIHJlcXVlc3QgY2FsbGJhY2sgYW5kIGEgZGVmaW5pdGUgaG90IHBhdGgsIGJ1dCB0aGUgcHJvbXB0J3MgYWR2aWNlIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3QgZGlzdHJpYnV0aW9ucyBmcm9tIHNrZXdpbmcgbWFrZXMgc2Vuc2UuIEknbGwgb21pdCBpdCBmb3Igbm93IGFuZCBzdGljayB3aXRoIHRoZSBpb2N0bCBhbmQgbmV0bGluayBoYW5kbGVycy5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgbmJkX3htaXRfdGltZW91dGAgaXMgYWxzbyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IHJlbGF0ZWQgdG8gdGltZW91dHMhIEFuZCBteSBwYXRjaCAqZG9lcyogbW9kaWZ5IHRpbWVvdXQgaGFuZGxpbmcgaW4gYG5iZF9wZW5kaW5nX2NtZF93b3JrYCwgZG9lc24ndCBpdD8gVGhhdCdzIGRlZmluaXRlbHkgcmVsZXZhbnQuIEkgbmVlZCB0byBpbmNsdWRlIHRoYXQgb25lLiBPa2F5LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG5iZF94bWl0X3RpbWVvdXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg5MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjoxMi42MTExODk0MThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTk3Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF94bWl0X3RpbWVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTQzNT1zdGF0aWMgc3RydWN0IG5iZF9jb25maWcgKm5iZF9nZXRfY29uZmlnX3VubG9ja2VkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTQ1MC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjQ1MTpzdGF0aWMgZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIG5iZF94bWl0X3RpbWVvdXQoc3RydWN0IHJlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTQ1Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE5NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG5iZF9tcV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NjgtXFx0LmluaXRfcmVxdWVzdFxcdD0gbmJkX2luaXRfcmVxdWVzdCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5Njk6XFx0LnRpbWVvdXRcXHQ9IG5iZF94bWl0X3RpbWVvdXQsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTcwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA2OjEyLjcwNDc5MTM1N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg4ODQ1MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBOQkQgU3ltYm9scyoqXG5cblJpZ2h0LCBzbyBgbmJkX3htaXRfdGltZW91dGAgbG9va3MgbGlrZSBhIGtleSBwaWVjZSBoZXJlLCB0aGF0J3MgZ29vZCB0byBzZWUuIEkgbmVlZCB0byBzdW1tYXJpemUgdGhlIGNvcmUgc3ltYm9scyB0aGF0IGFyZSB1bmRlciBjb25zaWRlcmF0aW9uIGFuZCBzZWUgaG93IHRoZXkgd29yayB0b2dldGhlci4gSSdtIGZvY3VzaW5nIG9uOlxuXG4qICAgYG5iZF9pb2N0bGAgLSBwcm9iYWJseSB0aGUgZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBkZXZpY2UgaW50ZXJhY3Rpb25zLlxuKiAgIGBuYmRfZ2VubF9jb25uZWN0YCAtIGxpa2VseSBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgd2l0aCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGludGVyZmFjZS5cbiogICBgbmJkX2dlbmxfcmVjb25maWd1cmVgIC0gc291bmRzIGxpa2UgdGhlIHdheSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXJlIG1vZGlmaWVkIHZpYSBuZXRsaW5rLlxuKiAgIGBuYmRfZ2VubF9kaXNjb25uZWN0YCAtIHByZXN1bWFibHkgaG93IGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQuXG4qICAgYG5iZF94bWl0X3RpbWVvdXRgIC0gdGhlIHRpbWVvdXQgZnVuY3Rpb24sIGltcG9ydGFudCBmb3IgdGhpcyBhbmFseXNpcy5cblxuTm93LCBhIGNyaXRpY2FsIHBvaW50IOKAkyB0aGUgcGF0Y2ggdG91Y2hlcyBgbmJkX3BlbmRpbmdfY21kX3dvcmtgLiBIbW0sIHRoYXQncyBhICp3b3JrcXVldWUqIGZ1bmN0aW9uLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBob3cgaXQgZ2V0cyB0cmlnZ2VyZWQuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEhvdyBpcyB0aGlzIHdvcmtxdWV1ZSBhY3R1YWxseSAqc2NoZWR1bGVkKj8gQSBxdWljayBsb29rIHJldmVhbHMgdGhhdCBgbmJkX3NjaGVkX3BlbmRpbmdfd29ya2AgaXMgdGhlIHNjaGVkdWxpbmcgZnVuY3Rpb24uIFRoYXQncyB0aGUgbGluay4gVGhhdCB0ZWxscyBtZSB3aGF0IG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgdG8gZXhhbWluZSBob3cgdGhlIHdvcmsgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDY6MTcuMDkzNjM5MDE0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ4NjU3NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX3NjaGVkX3BlbmRpbmdfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9NjEyPXN0YXRpYyBpbmxpbmUgaW50IHdhc19pbnRlcnJ1cHRlZChpbnQgcmVzdWx0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy02MjQtICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzo2MjU6c3RhdGljIHZvaWQgbmJkX3NjaGVkX3BlbmRpbmdfd29yayhzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtNjI2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTY0NT1zdGF0aWMgYmxrX3N0YXR1c190IG5iZF9zZW5kX2NtZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX2NtZCAqY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy03MjUtXFx0XFx0XFx0aWYgKHNlbnQpIHtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjcyNjpcXHRcXHRcXHRcXHRuYmRfc2NoZWRfcGVuZGluZ193b3JrKG5iZCwgbnNvY2ssIGNtZCwgc2VudCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy03MjctXFx0XFx0XFx0XFx0cmV0dXJuIEJMS19TVFNfT0s7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTc2My1cXHRcXHRcXHRcXHRpZiAod2FzX2ludGVycnVwdGVkKHJlc3VsdCkpIHtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjc2NDpcXHRcXHRcXHRcXHRcXHRuYmRfc2NoZWRfcGVuZGluZ193b3JrKG5iZCwgbnNvY2ssIGNtZCwgc2VudCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy03NjUtXFx0XFx0XFx0XFx0XFx0cmV0dXJuIEJMS19TVFNfT0s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA2OjE3LjE5ODUwOTY2MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTkxNTk4NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOQkQgTmV0d29yayBCbG9jayBEZXZpY2UgUGFydGlhbCBTZW5kcyBhbmQgUmVjb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYG5iZF9zY2hlZF9wZW5kaW5nX3dvcmtgIGlzIHRyaWdnZXJlZCBieSBwYXJ0aWFsIHNlbmRzLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHJlZmluaW5nIGBuYmRfcGVuZGluZ19jbWRfd29ya2AgdG8gZ3JhY2VmdWxseSBtYW5hZ2UgdGhlc2UgcGFydGlhbCBzZW5kcyBhbmQgYWxzbyBkZWFsIHdpdGggcG90ZW50aWFsbHkgZGVhZCBzb2NrZXRzLiBUaGUgY2hhbmdlcyB0byBgbmJkX3JlY29ubmVjdF9zb2NrZXRgIGFyZSBpbXBvcnRhbnQgdG9vLCBlc3BlY2lhbGx5IHRoZSBuZXcgY2hlY2sgZm9yIGBuc29jay1cdTAwM2VwZW5kaW5nYC4gU2luY2UgYG5iZF9yZWNvbm5lY3Rfc29ja2V0YCBpcyBjYWxsZWQgYnkgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgdGhhdCBsYXR0ZXIgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBhIGtleSBhcmVhIHRvIHNjcnV0aW5pemUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBmb2N1cyBvbiB0aGF0LlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBhbnkgb3RoZXIgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBXZSBrbm93IGBCTEtfREVWX05CRGAgcmVxdWlyZXMgYE5FVGAsIGJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEknbGwgcmUtZXhhbWluZSB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZSBqdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2ggYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwuIEJlc3QgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMxNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjoyMi4xOTAxMTE0MzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzY5NzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9OQkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDY6MjIuMjk3ODEzMjI3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjY2MDQzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRG91YmxlLUNoZWNraW5nIHRoZSBEYXRhOiBBIFBydWRlbnQgUmUtcmVhZCoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGZpbmFsaXplIGFueSBjb25jbHVzaW9ucyBvciBtb3ZlIGZvcndhcmQgd2l0aCBmdXJ0aGVyIGFuYWx5c2lzLCBJJ20gZ29pbmcgdG8gdGFrZSBhIG1vbWVudC4gR2l2ZW4gdGhlIG51YW5jZXMgYW5kIHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaW5oZXJlbnQgaW4gdGhpcyBkYXRhLCBhIHF1aWNrIHJlLXJlYWQgb2YgdGhlIGZpbGUgc2VlbXMgcHJ1ZGVudC4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgdGhhdCBvZnRlbiBzYXZlcyB0aW1lIGRvd24gdGhlIGxpbmUuIEkgd2FudCB0byBlbnN1cmUgbXkgaW5pdGlhbCBpbnRlcnByZXRhdGlvbiBob2xkcyB1cCB1bmRlciBhIGZyZXNoIGxvb2sgYW5kIHRoYXQgSSBoYXZlbid0IG1pc3NlZCBhbnkgc3VidGxlIGJ1dCBjcml0aWNhbCBkZXRhaWxzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2guIE5vIHBvaW50IGluIHByb2NlZWRpbmcgb24gYSBzaGFreSBmb3VuZGF0aW9uLiBMZXQncyBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBvcmRlciBiZWZvcmUgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjoyNS45MjQ0MjA4OTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NjpcXHRjb25maWcgQkxLX0RFVl9OQkRcXG4gMTk3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAxOTg6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gMTk5OlxcdFxcdGhlbHBcXG4gMjAwOlxcdFxcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdXIgY29tcHV0ZXIgdG8gYmUgYSBjbGllbnQgZm9yIG5ldHdvcmtcXG4gMjAxOlxcdFxcdCAgYmxvY2sgZGV2aWNlcywgaS5lLiBpdCB3aWxsIGJlIGFibGUgdG8gdXNlIGJsb2NrIGRldmljZXMgZXhwb3J0ZWQgYnlcXG4gMjAyOlxcdFxcdCAgc2VydmVycyAobW91bnQgZmlsZSBzeXN0ZW1zIG9uIHRoZW0gZXRjLikuIENvbW11bmljYXRpb24gYmV0d2VlblxcbiAyMDM6XFx0XFx0ICBjbGllbnQgYW5kIHNlcnZlciB3b3JrcyBvdmVyIFRDUC9JUCBuZXR3b3JraW5nLCBidXQgdG8gdGhlIGNsaWVudFxcbiAyMDQ6XFx0XFx0ICBwcm9ncmFtIHRoaXMgaXMgaGlkZGVuOiBpdCBsb29rcyBsaWtlIGEgcmVndWxhciBsb2NhbCBmaWxlIGFjY2VzcyB0b1xcbiAyMDU6XFx0XFx0ICBhIGJsb2NrIGRldmljZSBzcGVjaWFsIGZpbGUgc3VjaCBhcyAvZGV2L25kMC5cXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0ICBOZXR3b3JrIGJsb2NrIGRldmljZXMgYWxzbyBhbGxvd3MgeW91IHRvIHJ1biBhIGJsb2NrLWRldmljZSBpblxcbiAyMDg6XFx0XFx0ICB1c2VybGFuZCAobWFraW5nIHNlcnZlciBhbmQgY2xpZW50IHBoeXNpY2FsbHkgdGhlIHNhbWUgY29tcHV0ZXIsXFxuIDIwOTpcXHRcXHQgIGNvbW11bmljYXRpbmcgdXNpbmcgdGhlIGxvb3BiYWNrIG5ldHdvcmsgZGV2aWNlKS5cXG4gMjEwOlxcdFxcbiAyMTE6XFx0XFx0ICBSZWFkIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvbmJkLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24sXFxuIDIxMjpcXHRcXHQgIGVzcGVjaWFsbHkgYWJvdXQgd2hlcmUgdG8gZmluZCB0aGUgc2VydmVyIGNvZGUsIHdoaWNoIHJ1bnMgaW4gdXNlclxcbiAyMTM6XFx0XFx0ICBzcGFjZSBhbmQgZG9lcyBub3QgbmVlZCBzcGVjaWFsIGtlcm5lbCBzdXBwb3J0LlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIE5GU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjoyNS45MjQ1MjI5ODNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQyMTE0ODg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIGBCTEtfREVWX05CRGAgYW5kIGBORVRgIGNvbmZpZ3VyYXRpb25zLiBgTkVUYCBpcyBwcmV0dHkgbXVjaCBhIGdpdmVuLCBhIHN0YW5kYXJkIHBhcnQgb2YgdGhpbmdzLCBidXQgaXQncyB3b3J0aCBpbmNsdWRpbmcgaXQgYW55d2F5IGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IEkgbmVlZCB0byBjaGVjayB0aGUgXCJkZXBlbmRzIG9uXCIgbGluZXMgd2l0aGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIGB2bWxpbnV4YC4gVGhleSB3YW50IHRoZW0gbGlzdGVkIGluIHRoZSBgRW5hYmxlQ29uZmlnc2Agb3V0cHV0IGFycmF5LCBhbmQgaW1wb3J0YW50bHksIHRoZXkgd2FudCBtZSB0byBsZWF2ZSBvZmYgdGhlIFwiQ09ORklHX1wiIHByZWZpeC4gU28sIGBORVRgIGlzIHByb2JhYmx5IGZpbmUgdG8gaW5jbHVkZSwgYW5kIEknbGwgZGVmaW5pdGVseSBpbmNsdWRlIGBCTEtfREVWX05CRGAuXG5cbkxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSByZWxldmFudC4uLiBOb3BlLCBub3RoaW5nIGVsc2UganVtcHMgb3V0LlxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgZm9jdXMgc3ltYm9scyB0byBzZWUgaWYgdGhleSBhcmUgc3RhdGljOlxuKiAgIGBuYmRfaW9jdGxgXG4qICAgYG5iZF9nZW5sX2Nvbm5lY3RgXG4qICAgYG5iZF9nZW5sX3JlY29uZmlndXJlYFxuKiAgIGBuYmRfZ2VubF9kaXNjb25uZWN0YFxuKiAgIGBuYmRfeG1pdF90aW1lb3V0YFxuXG5gbmJkX2dlbmxfcmVjb25maWd1cmVgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZCwgYnV0IGl0J3MgYW4gZW50cnkgcG9pbnQgZm9yIG5ldGxpbmsuIGBuYmRfaW9jdGxgIGlzIGFsc28gc3RhdGljLiBXYWl0IGEgbWludXRlISBJdCBpcyBzdGF0aWMgaW4gYGRyaXZlcnMvYmxvY2svbmJkLmNgLiBSaWdodCwgc28gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB3aXRoaW4gYG5iZC5jYCB3aGljaCBJIGhhdmVuJ3QgY29uc2lkZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNzcsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjozNS4zNDU2NzU4MTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzM3MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIG5iZF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTU1PXN0YXRpYyBpbnQgbmJkX3RvdGFsX2RldmljZXMgPSAwO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtNTYtXFxuZHJpdmVycy9ibG9jay9uYmQuYzo1NzpzdHJ1Y3QgbmJkX3NvY2sge1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtNTgtXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9NzU9c3RydWN0IGxpbmtfZGVhZF9hcmdzIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtOTEtXFxuZHJpdmVycy9ibG9jay9uYmQuYzo5MjpzdHJ1Y3QgbmJkX2NvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9uYmQuYy05My1cXHR1MzIgZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTExMT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuYmRfYmxrc2l6ZShzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMTUtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxMTY6c3RydWN0IG5iZF9kZXZpY2Uge1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTE3LVxcdHN0cnVjdCBibGtfbXFfdGFnX3NldCB0YWdfc2V0O1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNDctXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNDg6c3RydWN0IG5iZF9jbWQge1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ5LVxcdHN0cnVjdCBuYmRfZGV2aWNlICpuYmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA2OjM1LjQwOTAxNzUyMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODE4NTA1MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKklkZW50aWZ5aW5nIER5bmFtaWMgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhcyB3aGVyZSB0aGUgYmVoYXZpb3IgaXMgKm5vdCogZml4ZWQsIHRoZSBhc3BlY3RzIHRoYXQgYXJlLCBmb3IgbGFjayBvZiBhIGJldHRlciB0ZXJtLCBcImFsaXZlLlwiIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0J3MgYSByZWFzb25hYmxlIGZpcnN0IHN0ZXAuIEl0J3MgYSBmdW5kYW1lbnRhbCBmaWx0ZXI7IEkgd2FudCB0byBjdXQgdGhyb3VnaCB0aGUgbm9pc2Ugb2YgcHVyZWx5IGluZnJhc3RydWN0dXJhbCBvciBkYXRhLWhvbGRpbmcgcGFydHMgb2YgdGhlIGNvZGUgdG8gZmluZCB0aGUgc2VjdGlvbnMgdGhhdCAqZG8qIHNvbWV0aGluZywgdGhhdCBhcmUgY2FwYWJsZSBvZiBjaGFuZ2luZyBzdGF0ZSwgcmVzcG9uZGluZyB0byBpbnB1dCwgYW5kIGRyaXZpbmcgcHJvZ3JhbSBmbG93LiBUaGlzIGluaXRpYWwgcXVlcnkgZ2l2ZXMgbWUgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIGZpbmQgdGhlIGR5bmFtaWMgZWxlbWVudHMgaW4gdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA2OjQ0LjIyNzUyNjAzMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcwMzE4NDk2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IG5iZF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTg6MDY6NDQuNDk3ODU0NDA3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDcwMDMwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipJbml0aWFsIFRob3VnaHRzIG9uIGBuYmQuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmJkLmNgIGZpbGUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGFsbW9zdCBldmVyeXRoaW5nIGhlcmUgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIHN0YXRpYy4gSSdkIHdhZ2VyIHRoYXQgdGhlIHZhc3QgbWFqb3JpdHkgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgYXJlIGRlc2lnbmVkIGZvciBpbnRlcm5hbCB1c2UsIGhpZGRlbiBmcm9tIHRoZSBvdXRzaWRlIHdvcmxkLiBJJ20gdGhpbmtpbmcsIG1vc3QgbGlrZWx5LCBvbmx5IGBuYmRfaW5pdGAgYW5kIGBuYmRfY2xlYW51cGAgYXJlIGdvaW5nIHRvIGJlIGV4cG9zZWQgYXMgZW50cnkgcG9pbnRzIHRvIHRoZSBmdW5jdGlvbmFsaXR5IHRoaXMgZmlsZSBwcm92aWRlcy4gRXZlcnl0aGluZyBlbHNlLi4uIHRoZSBpbnRyaWNhdGUgZGV0YWlscyBvZiBob3cgaXQgaGFuZGxlcyByZXF1ZXN0cywgbWFuYWdlcyBjb25uZWN0aW9ucywgdGFsa3MgdG8gdGhlIGtlcm5lbCwgdGhhdCdzIGFsbCBpbnRlcm5hbC4gQW5kIHRoYXQncyB3aGF0IEknZCBleHBlY3Q7IGl0IG1ha2VzIGZvciBjbGVhbmVyLCBtb3JlIG1haW50YWluYWJsZSBjb2RlLiBOb3csIGxldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIHNlZSBpZiBteSBndWVzcyBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE4OjA2OjQ4LjQ0NDg2MDA2N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MDY4Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IG5iZF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTU0PXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmJkX2RlbF93cTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjU1OnN0YXRpYyBpbnQgbmJkX3RvdGFsX2RldmljZXMgPSAwO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtNTYtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE2OT1zdGF0aWMgaW50IHBhcnRfc2hpZnQ7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzAtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzE6c3RhdGljIGludCBuYmRfZGV2X2RiZ19pbml0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTcyLXN0YXRpYyB2b2lkIG5iZF9kZXZfZGJnX2Nsb3NlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xNzQ9c3RhdGljIHZvaWQgbmJkX2Nvbm5lY3RfcmVwbHkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NTpzdGF0aWMgaW50IG5iZF9nZW5sX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3Ni1zdGF0aWMgdm9pZCBuYmRfZGVhZF9saW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9Mjg3PXN0YXRpYyB2b2lkIG5iZF9wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjk4LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjk5OnN0YXRpYyBpbnQgbmJkX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzAwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MzA1PXN0YXRpYyB2b2lkIG5iZF9tYXJrX25zb2NrX2RlYWQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgc3RydWN0IG5iZF9zb2NrICpuc29jayxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzMzLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MzM0OnN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMzUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz04MTA9c3RhdGljIHZvaWQgbmJkX3BlbmRpbmdfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy04NjgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzo4Njk6c3RhdGljIGludCBuYmRfcmVhZF9yZXBseShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtODcwLVxcdFxcdFxcdCAgc3RydWN0IG5iZF9yZXBseSAqcmVwbHkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEyOTg9c3RhdGljIGlubGluZSB2b2lkIG5iZF9yZWNsYXNzaWZ5X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrKSB7fVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzAwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTMwMTpzdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTMwMi1cXHRcXHRcXHQgIGJvb2wgbmV0bGluaylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM3My1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEzNzQ6c3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEzNzUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xNDU1PXN0YXRpYyB2b2lkIHNlbmRfZGlzY29ubmVjdHMoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ3OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE0Nzk6c3RhdGljIGludCBuYmRfZGlzY29ubmVjdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTQ4MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE0OTc9c3RhdGljIHZvaWQgbmJkX2NvbmZpZ19wdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTUzNS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE1MzY6c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNTM3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYwNy1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2MDg6c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjA5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTY1OD1zdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA1OnN0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDYtXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTczNC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3MzU6c3RhdGljIGludCBuYmRfYWxsb2NfYW5kX2luaXRfY29uZmlnKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzM2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc2OS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3NzA6c3RhdGljIGludCBuYmRfb3BlbihzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc3MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4MzI9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4NDMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODQ0OnN0YXRpYyBpbnQgbmJkX2RiZ190YXNrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg0NS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE4NTQ9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfdGFza3MpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTg1NS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4NTY6c3RhdGljIGludCBuYmRfZGJnX2ZsYWdzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODU3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTg4Mz1ERUZJTkVfU0hPV19BVFRSSUJVVEUobmJkX2RiZ19mbGFncyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODg0LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTg4NTpzdGF0aWMgaW50IG5iZF9kZXZfZGJnX2luaXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4ODYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xOTEwPXN0YXRpYyB2b2lkIG5iZF9kZXZfZGJnX2Nsb3NlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MTQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTE1OnN0YXRpYyBpbnQgbmJkX2RiZ19pbml0KHZvaWQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTE2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTkyOD1zdGF0aWMgdm9pZCBuYmRfZGJnX2Nsb3NlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5MzQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxOTM1OnN0YXRpYyBpbnQgbmJkX2Rldl9kYmdfaW5pdChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTkzNi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE5NDA9c3RhdGljIHZvaWQgbmJkX2Rldl9kYmdfY2xvc2Uoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk0My1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5NDQ6c3RhdGljIGludCBuYmRfZGJnX2luaXQodm9pZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE5NDUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xOTQ5PXN0YXRpYyB2b2lkIG5iZF9kYmdfY2xvc2Uodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTk1NC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE5NTU6c3RhdGljIGludCBuYmRfaW5pdF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xOTU2LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgaGN0eF9pZHgsIGludCBudW1hX25vZGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIxMTY9bmJkX2RldmljZV9wb2xpY3lbTkJEX0RFVklDRV9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIwLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjEyMTpzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEzNy1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxMzg6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTM5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjMxOT1zdGF0aWMgdm9pZCBuYmRfZGlzY29ubmVjdF9hbmRfcHV0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzMzktXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzQwOnN0YXRpYyBpbnQgbmJkX2dlbmxfZGlzY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjM0MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNzQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzc1OnN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzNzYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTg2PXN0YXRpYyBpbnQgc3RhdHVzX2NiKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTkxLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjU5MjpzdGF0aWMgaW50IG5iZF9nZW5sX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjU5My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI3MDg9c3RhdGljIGludCBfX2luaXQgbmJkX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc2MC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NjE6c3RhdGljIGludCBuYmRfZXhpdF9jYihpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjo0OC42MTg5MzM0MjVaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1OTQxNzY0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkJEIERyaXZlciBBUEkgRW50cnkgUG9pbnRzIGFuZCBGdXp6aW5nIFRhcmdldCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBBUEkgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBJJ20gZ29pbmcgd2l0aCBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBgbmJkX2dlbmxfZGlzY29ubmVjdGAsIGFuZCBgbmJkX3htaXRfdGltZW91dGAuIFRoZXNlIGFyZSBhbGwgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgZ2F2ZSBtZSBwYXVzZSBnaXZlbiB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB0aGV5IGFyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYSBzdHJ1Y3R1cmUgKGUuZy4sIGAuaW9jdGwgPSBuYmRfaW9jdGxgKS4gVGhpcyBtZWFucyB0aGV5ICphcmVuJ3QqIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCB0aGVyZWZvcmUgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBtYWtpbmcgdGhlbSBwZXJmZWN0bHkgdmFsaWQgZW50cnkgcG9pbnRzLiBUaGF0J3MgZ29vZC5cblxuTm93LCBsZXQncyByZS1leGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHdvcnRoIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBuYmRfc2VuZF9jbWRgIGFuZCBgbmJkX3BlbmRpbmdfY21kX3dvcmtgLCBwYXJ0aWN1bGFybHkgaG93IHBhcnRpYWwgc2VuZHMgYXJlIG1hbmFnZWQuIFRoZSBwYXRjaCBzZWVtcyB0byBtYXJrIHRoZSBzb2NrZXQgYXMgZGVhZCBpZiBhIHBhcnRpYWwgc2VuZCBoYXBwZW5zLCB3aGljaCBzaG91bGQgY2xlYXIgYG5zb2NrLVx1MDAzZXBlbmRpbmdgIGFuZCBgbnNvY2stXHUwMDNlc2VudGAuIEl0IGFsc28gYWRkcyBhIGNoZWNrIGluIGBuYmRfcmVjb25uZWN0X3NvY2tldGAgZm9yIGBuc29jay1cdTAwM2VwZW5kaW5nYCBhbmQgc2tpcHMgaWYgc2V0LiBUaGlzIGlzIGZ1bmN0aW9uYWwsIGFkZHJlc3NpbmcgYSBidWcgYXNzb2NpYXRlZCB3aXRoIHBhcnRpYWwgc2VuZHMgYW5kIHBvdGVudGlhbCBzb2NrZXQgcmV1c2UgaXNzdWVzLiBZZXMsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5leHQsIEkgbmVlZCB0byBkZWZpbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgb2J2aW91cyBvbmUgaGVyZSBpcyBgQkxLX0RFVl9OQkRgLiBJJ2xsIGRvdWJsZS1jaGVjayBkZXBlbmRlbmNpZXMuIGBCTEtfREVWX05CRGAgZGVwZW5kcyBvbiBgTkVUYCwgYW5kIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQgaGVyZS4gU28sIGBCTEtfREVWX05CRGAgaXMgdGhlIHByaW1hcnkgY29uZmlnLlxuXG5UaGVyZWZvcmUsIGZvciBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSB3aWxsIGluY2x1ZGUgYEJMS19ERVZfTkJEYCwgYW5kIGZvciBmb2N1cyBzeW1ib2xzLCBJIGhhdmUgdGhlIGVudHJ5IHBvaW50czogYG5iZF9pb2N0bGAsIGBuYmRfZ2VubF9jb25uZWN0YCwgYG5iZF9nZW5sX3JlY29uZmlndXJlYCwgYG5iZF9nZW5sX2Rpc2Nvbm5lY3RgLCBhbmQgYG5iZF94bWl0X3RpbWVvdXRgLiBJIGFtIG5vdyByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDM5LCJPdXRwdXRUb2tlbnMiOjEzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxODowNjo1OS4yMTMxMTI3MTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDA2MDU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfZ2VubF9kaXNjb25uZWN0XCIsXG4gICAgXCJuYmRfeG1pdF90aW1lb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBzZW5kcyBhbmQgZGVhZCBzb2NrZXRzLCBwcmV2ZW50aW5nIHNvY2tldCByZXVzZSB3aGVuIGEgcmVxdWVzdCBpcyBwYXJ0aWFsbHkgdHJhbnNtaXR0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCIsXG4gICAgXCJuYmRfZ2VubF9kaXNjb25uZWN0XCIsXG4gICAgXCJuYmRfeG1pdF90aW1lb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIGRyaXZlciB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBzZW5kcyBhbmQgZGVhZCBzb2NrZXRzLCBwcmV2ZW50aW5nIHNvY2tldCByZXVzZSB3aGVuIGEgcmVxdWVzdCBpcyBwYXJ0aWFsbHkgdHJhbnNtaXR0ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdv9b[1] Phase: Succeeded StartedAt: 2026-08-01 18:07:35 +0000 UTC FinishedAt: 2026-08-01 18:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 18:07:35 +0000 UTC FinishedAt: 2026-08-01 18:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2] Phase: Succeeded StartedAt: 2026-08-01 18:07:35 +0000 UTC FinishedAt: 2026-08-01 21:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 18:07:36 +0000 UTC FinishedAt: 2026-08-01 21:57:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 18:07:36 +0000 UTC FinishedAt: 2026-08-01 18:07:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 18:07:36 +0000 UTC FinishedAt: 2026-08-01 18:07:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcdv9b/series-workflowcdv9b-convert-artifact-3603860352/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 18:07:46 +0000 UTC FinishedAt: 2026-08-01 18:28:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 18:07:46 +0000 UTC FinishedAt: 2026-08-01 18:28:10 +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:*0621f23b-0662-4cc3-967f-556fa76b7261,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-workflowcdv9b/series-workflowcdv9b-convert-artifact-3603860352/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": "ddcdbacf-9f8c-4927-93d9-fc7ef791798e", "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-workflowcdv9b/series-workflowcdv9b-build-action-3034306118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 18:07:46 +0000 UTC FinishedAt: 2026-08-01 18:27:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0621f23b-0662-4cc3-967f-556fa76b7261,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-workflowcdv9b/series-workflowcdv9b-convert-artifact-3603860352/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": "ddcdbacf-9f8c-4927-93d9-fc7ef791798e", "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-workflowcdv9b/series-workflowcdv9b-build-action-3034306118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 18:28:10 +0000 UTC FinishedAt: 2026-08-01 18:28:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 18:28:10 +0000 UTC FinishedAt: 2026-08-01 18:28:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 18:28:10 +0000 UTC FinishedAt: 2026-08-01 18:28:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 18:28:10 +0000 UTC FinishedAt: 2026-08-01 18:28:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcdv9b/series-workflowcdv9b-convert-artifact-1764447783/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 18:28:45 +0000 UTC FinishedAt: 2026-08-01 18:30:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 18:28:45 +0000 UTC FinishedAt: 2026-08-01 18:30:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ddcdbacf-9f8c-4927-93d9-fc7ef791798e,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-workflowcdv9b/series-workflowcdv9b-build-action-3034306118/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-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 18:30:41 +0000 UTC FinishedAt: 2026-08-01 18:30:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 18:30:41 +0000 UTC FinishedAt: 2026-08-01 18:30:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 18:30:41 +0000 UTC FinishedAt: 2026-08-01 18:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 18:30:41 +0000 UTC FinishedAt: 2026-08-01 18:52:01 +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:*0621f23b-0662-4cc3-967f-556fa76b7261,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-workflowcdv9b/series-workflowcdv9b-convert-artifact-1764447783/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": "6a6fc246-a056-4d5f-aba1-0791c8458a1a", "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-workflowcdv9b/series-workflowcdv9b-build-action-3111897003/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 18:30:41 +0000 UTC FinishedAt: 2026-08-01 18:51:49 +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:*0621f23b-0662-4cc3-967f-556fa76b7261,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-workflowcdv9b/series-workflowcdv9b-convert-artifact-1764447783/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": "6a6fc246-a056-4d5f-aba1-0791c8458a1a", "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-workflowcdv9b/series-workflowcdv9b-build-action-3111897003/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 18:52:01 +0000 UTC FinishedAt: 2026-08-01 18:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 18:52:02 +0000 UTC FinishedAt: 2026-08-01 18:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 18:52:02 +0000 UTC FinishedAt: 2026-08-01 18:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 18:52:02 +0000 UTC FinishedAt: 2026-08-01 18:54:02 +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:*6a6fc246-a056-4d5f-aba1-0791c8458a1a,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-workflowcdv9b/series-workflowcdv9b-build-action-3111897003/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-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 18:54:11 +0000 UTC FinishedAt: 2026-08-01 21:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 18:54:11 +0000 UTC FinishedAt: 2026-08-01 21:57:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"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:*ddcdbacf-9f8c-4927-93d9-fc7ef791798e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6a6fc246-a056-4d5f-aba1-0791c8458a1a,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-workflowcdv9b/series-workflowcdv9b-build-action-3034306118/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-workflowcdv9b/series-workflowcdv9b-build-action-3111897003/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 18:54:11 +0000 UTC FinishedAt: 2026-08-01 18:54:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 18:54:11 +0000 UTC FinishedAt: 2026-08-01 18:54:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"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-workflowcdv9b/series-workflowcdv9b-convert-artifact-3659960960/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 18:54:11 +0000 UTC FinishedAt: 2026-08-01 18:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 18:54:11 +0000 UTC FinishedAt: 2026-08-01 18:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 18:54:11 +0000 UTC FinishedAt: 2026-08-01 18:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 18:54:21 +0000 UTC FinishedAt: 2026-08-01 21:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdv9b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["nbd_ioctl","nbd_genl_connect","nbd_genl_reconfigure","nbd_genl_disconnect","nbd_xmit_timeout"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b36c780ae0038c1a82c4a1eb3a4c81afc5d6312b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"c91e80ab-050e-47ba-89c4-067e835c87c6","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 18:54:21 +0000 UTC FinishedAt: 2026-08-01 21:57:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ddcdbacf-9f8c-4927-93d9-fc7ef791798e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6a6fc246-a056-4d5f-aba1-0791c8458a1a,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-workflowcdv9b/series-workflowcdv9b-build-action-3034306118/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-workflowcdv9b/series-workflowcdv9b-build-action-3111897003/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-workflowcdv9b/series-workflowcdv9b-convert-artifact-3659960960/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,}