Name: series-workflow4rx25 Phase: Succeeded StartedAt: 2026-08-06 11:45:13 +0000 UTC FinishedAt: 2026-08-06 15:34:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[0] Phase: Succeeded StartedAt: 2026-08-06 11:45:13 +0000 UTC FinishedAt: 2026-08-06 11:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 11:45:13 +0000 UTC FinishedAt: 2026-08-06 11:50:31 +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": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "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": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_NBD" ], "series_id": "a7cbc2e6-670e-4546-b232-66ca76305df2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "lo_ioctl", "nbd_ioctl" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYXJ0aXRpb24gc2Nhbm5pbmcgbG9naWMgZm9yIGxvb3AgYW5kIG5iZCBibG9jayBkZXZpY2VzIGR1cmluZyBiYWNraW5nIGZpbGUgY2hhbmdlIGFuZCBkaXNjb25uZWN0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSByZWFjaGFibGUgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgKExPT1BfQ0hBTkdFX0ZEIGFuZCBOQkRfQ0xFQVJfU09DSykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMDJkNWFiNTYzOWZmYWM3MGU0MTAwZjc3YTJlNTUxOTFhNzdlODg3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxMTo0NzoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCAxZmFlY2VmMzMwMDkyLi40MTZhOWM2NTFmOTc3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNTM4LDcgJiM0Mzs1MzgsNiBAQCBzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gXHRzdHJ1Y3QgZmlsZSAqb2xkX2ZpbGU7XG4gXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4gXHRpbnQgZXJyb3I7XG4tXHRib29sIHBhcnRzY2FuO1xuIFx0Ym9vbCBpc19sb29wO1xuIFxuIFx0aWYgKCFmaWxlKVxuQEAgLTU5Miw3ICYjNDM7NTkxLDYgQEAgc3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuIFx0bG9vcF9hc3NpZ25fYmFja2luZ19maWxlKGxvLCBmaWxlKTtcbiBcdGxvb3BfdXBkYXRlX2Rpbyhsbyk7XG4gXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUsIG1lbWZsYWdzKTtcbi1cdHBhcnRzY2FuID0gbG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2IExPX0ZMQUdTX1BBUlRTQ0FOO1xuIFx0bG9vcF9nbG9iYWxfdW5sb2NrKGxvLCBpc19sb29wKTtcbiBcbiBcdC8qXG5AQCAtNjEwLDggJiM0Mzs2MDgsMTIgQEAgc3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuIFx0ICovXG4gXHRmcHV0KG9sZF9maWxlKTtcbiBcdGRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGRpc2tfdG9fZGV2KGxvLVx1MDAzZWxvX2Rpc2spLCAwKTtcbi1cdGlmIChwYXJ0c2Nhbilcbi1cdFx0bG9vcF9yZXJlYWRfcGFydGl0aW9ucyhsbyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXNjYW4gb3IsIHdpdGhvdXQgTE9fRkxBR1NfUEFSVFNDQU4sIGp1c3QgZHJvcCB0aGUgcGFydGl0aW9ucyBvZiB0aGVcbiYjNDM7XHQgKiBvbGQgYmFja2luZyBmaWxlLiBUaGV5IGNhbiBleGlzdCB3aXRob3V0IExPX0ZMQUdTX1BBUlRTQ0FOIGFzIHRoZXkgbWF5XG4mIzQzO1x0ICogaGF2ZSBiZWVuIGFkZGVkIG1hbnVhbGx5IHdpdGggQkxLUEcuXG4mIzQzO1x0ICovXG4mIzQzO1x0bG9vcF9yZXJlYWRfcGFydGl0aW9ucyhsbyk7XG4gXG4gXHRlcnJvciA9IDA7XG4gZG9uZTpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuaW5kZXggOGYxMDc2MmU5MGVmNy4uY2RhZmU5ZDM5MzY5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbkBAIC0xNjEyLDYgJiM0MzsxNjEyLDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jbGVhcl9zb2NrX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRuYmRfY2xlYXJfc29jayhuYmQpO1xuIFx0ZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobmJkLVx1MDAzZWRpc2spO1xuIFx0bmJkX2JkZXZfcmVzZXQobmJkKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERyb3AgdGhlIHBhcnRpdGlvbnMgb2YgdGhlIGRpc2Nvbm5lY3RlZCBkZXZpY2Ugb24gdGhlIG5leHQgb3Blbi4gVGhleVxuJiM0MztcdCAqIGNhbiBleGlzdCBldmVuIHdpdGggbWF4X3BhcnQgemVybyBhcyB0aGV5IG1heSBoYXZlIGJlZW4gYWRkZWQgbWFudWFsbHlcbiYjNDM7XHQgKiB3aXRoIEJMS1BHLiBEcm9wcGluZyB0aGVtIGhlcmUgaXMgbm90IHBvc3NpYmxlIGFzIHRoYXQgbmVlZHNcbiYjNDM7XHQgKiBvcGVuX211dGV4LCB3aGljaCBuYmRfb3BlbigpIGFjcXVpcmVzIHVuZGVyIGNvbmZpZ19sb2NrLlxuJiM0MztcdCAqL1xuJiM0MztcdHNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sIFx1MDAyNm5iZC1cdTAwM2VkaXNrLVx1MDAzZXN0YXRlKTtcbiBcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkJEX1JUX0hBU19DT05GSUdfUkVGLFxuIFx0XHRcdCAgICAgICBcdTAwMjZuYmQtXHUwMDNlY29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRuYmRfY29uZmlnX3B1dChuYmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb19pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFydGl0aW9uIHNjYW5uaW5nIGxvZ2ljIGZvciBsb29wIGFuZCBuYmQgYmxvY2sgZGV2aWNlcyBkdXJpbmcgYmFja2luZyBmaWxlIGNoYW5nZSBhbmQgZGlzY29ubmVjdCBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIHZpYSBibG9jayBkZXZpY2UgaW9jdGxzIChMT09QX0NIQU5HRV9GRCBhbmQgTkJEX0NMRUFSX1NPQ0spLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTAyZDVhYjU2MzlmZmFjNzBlNDEwMGY3N2EyZTU1MTkxYTc3ZTg4NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMTE6NDc6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDFmYWVjZWYzMzAwOTIuLjQxNmE5YzY1MWY5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC01MzgsNyAmIzQzOzUzOCw2IEBAIHN0YXRpYyBpbnQgbG9vcF9jaGFuZ2VfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKIAlzdHJ1Y3QgZmlsZSAqb2xkX2ZpbGU7CiAJdW5zaWduZWQgaW50IG1lbWZsYWdzOwogCWludCBlcnJvcjsKLQlib29sIHBhcnRzY2FuOwogCWJvb2wgaXNfbG9vcDsKIAogCWlmICghZmlsZSkKQEAgLTU5Miw3ICYjNDM7NTkxLDYgQEAgc3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAogCWxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShsbywgZmlsZSk7CiAJbG9vcF91cGRhdGVfZGlvKGxvKTsKIAlibGtfbXFfdW5mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlLCBtZW1mbGFncyk7Ci0JcGFydHNjYW4gPSBsby0mZ3Q7bG9fZmxhZ3MgJmFtcDsgTE9fRkxBR1NfUEFSVFNDQU47CiAJbG9vcF9nbG9iYWxfdW5sb2NrKGxvLCBpc19sb29wKTsKIAogCS8qCkBAIC02MTAsOCAmIzQzOzYwOCwxMiBAQCBzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJICovCiAJZnB1dChvbGRfZmlsZSk7CiAJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGlza190b19kZXYobG8tJmd0O2xvX2Rpc2spLCAwKTsKLQlpZiAocGFydHNjYW4pCi0JCWxvb3BfcmVyZWFkX3BhcnRpdGlvbnMobG8pOwomIzQzOwkvKgomIzQzOwkgKiBSZXNjYW4gb3IsIHdpdGhvdXQgTE9fRkxBR1NfUEFSVFNDQU4sIGp1c3QgZHJvcCB0aGUgcGFydGl0aW9ucyBvZiB0aGUKJiM0MzsJICogb2xkIGJhY2tpbmcgZmlsZS4gVGhleSBjYW4gZXhpc3Qgd2l0aG91dCBMT19GTEFHU19QQVJUU0NBTiBhcyB0aGV5IG1heQomIzQzOwkgKiBoYXZlIGJlZW4gYWRkZWQgbWFudWFsbHkgd2l0aCBCTEtQRy4KJiM0MzsJICovCiYjNDM7CWxvb3BfcmVyZWFkX3BhcnRpdGlvbnMobG8pOwogCiAJZXJyb3IgPSAwOwogZG9uZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IDhmMTA3NjJlOTBlZjcuLmNkYWZlOWQzOTM2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9uYmQuYwpAQCAtMTYxMiw2ICYjNDM7MTYxMiwxMyBAQCBzdGF0aWMgdm9pZCBuYmRfY2xlYXJfc29ja19pb2N0bChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKQogCW5iZF9jbGVhcl9zb2NrKG5iZCk7CiAJZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobmJkLSZndDtkaXNrKTsKIAluYmRfYmRldl9yZXNldChuYmQpOwomIzQzOwkvKgomIzQzOwkgKiBEcm9wIHRoZSBwYXJ0aXRpb25zIG9mIHRoZSBkaXNjb25uZWN0ZWQgZGV2aWNlIG9uIHRoZSBuZXh0IG9wZW4uIFRoZXkKJiM0MzsJICogY2FuIGV4aXN0IGV2ZW4gd2l0aCBtYXhfcGFydCB6ZXJvIGFzIHRoZXkgbWF5IGhhdmUgYmVlbiBhZGRlZCBtYW51YWxseQomIzQzOwkgKiB3aXRoIEJMS1BHLiBEcm9wcGluZyB0aGVtIGhlcmUgaXMgbm90IHBvc3NpYmxlIGFzIHRoYXQgbmVlZHMKJiM0MzsJICogb3Blbl9tdXRleCwgd2hpY2ggbmJkX29wZW4oKSBhY3F1aXJlcyB1bmRlciBjb25maWdfbG9jay4KJiM0MzsJICovCiYjNDM7CXNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sICZhbXA7bmJkLSZndDtkaXNrLSZndDtzdGF0ZSk7CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX0NPTkZJR19SRUYsCiAJCQkgICAgICAgJmFtcDtuYmQtJmd0O2NvbmZpZy0mZ3Q7cnVudGltZV9mbGFncykpCiAJCW5iZF9jb25maWdfcHV0KG5iZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEJsb2NrIERldmljZSBEcml2ZXJzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCBzb21lIHJlY2VudCBjaGFuZ2VzIGluIHRoZSBibG9jayBkZXZpY2UgZHJpdmVycywgc3BlY2lmaWNhbGx5IGBsb29wLmNgIGFuZCBgbmJkLmNgLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBsb29wX2NoYW5nZV9mZGAgd2l0aGluIGBsb29wLmNgIHdoZXJlIGBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKGxvKWAgaXMgbm93IGFsd2F5cyBleGVjdXRlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYHBhcnRzY2FuYCBmbGFnLiBJbnRlcmVzdGluZy4uLiB0aGF0JiMzOTtzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuIEFsc28sIG92ZXIgaW4gYG5iZC5jYCwgdGhlcmUmIzM5O3MgYSBuZXcgYHNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sICZhbXA7bmJkLSZndDtkaXNrLSZndDtzdGF0ZSk7YCBjYWxsIGFkZGVkIHdpdGhpbiBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLiBBbm90aGVyIHBvaW50IG9mIGludGVyZXN0LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgYXJlIGV2ZW4gcmVhY2hhYmxlIGFuZCBpZiB0aGV5IHJlcHJlc2VudCB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldHMuIExldCYjMzk7cyBzZWUuLi4gYGxvb3BfY2hhbmdlX2ZkYCBhcHBlYXJzIHRvIGJlIHRyaWdnZXJlZCB2aWEgdGhlIGBsb29wX3NldF9mZGAgb3IgYGxvb3BfY2hhbmdlX2ZkYCBpb2N0bHMuIFRoYXQgbmFycm93cyBkb3duIG15IGZvY3VzLiBBbmQgYG5iZF9jbGVhcl9zb2NrX2lvY3RsYCwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIGlzIGNhbGxlZCB0aHJvdWdoIE5CRCBpb2N0bHMuCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBJIG5lZWQgdG8gZG8gYSBjb2RlIHNlYXJjaCB0byBpZGVudGlmeSBhbGwgaW5zdGFuY2VzIG9mIGBsb29wX2NoYW5nZV9mZGAgYW5kIGBuYmRfY2xlYXJfc29ja19pb2N0bGAgdG8gbWFwIG91dCB0aGUgY2FsbCBwYXRocyBhbmQgYnVpbGQgYSBzdHJhdGVneS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgaW9jdGxzIGlzIGtleSB0byBjcmFmdGluZyBlZmZlY3RpdmUgZnV6emluZyBpbnB1dHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX2NoYW5nZV9mZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz05NT1zdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfdmFsaWRhdGVfbXV0ZXgpO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwNi0gKiBpc19sb29wX2RldmljZSgpIGlzIHRydWUsIHdlIG5lZWQgYSBnbG9iYWwgbG9jayBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA3OiAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKS9fX2xvb3BfY2xyX2ZkKCkgY2FsbHMuXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDgtICovXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NTE1PXN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTI2LS8qXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1Mjc6ICogbG9vcF9jaGFuZ2VfZmQgc3dpdGNoZWQgdGhlIGJhY2tpbmcgc3RvcmUgb2YgYSBsb29wYmFjayBkZXZpY2UgdG9cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyOC0gKiBhIG5ldyBmaWxlLiBUaGlzIGlzIHVzZWZ1bCBmb3Igb3BlcmF0aW5nIHN5c3RlbSBpbnN0YWxsZXJzIHRvIGZyZWUgdXBcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MzMtICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MzQ6c3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTM1LVx0XHRcdCAgdW5zaWduZWQgaW50IGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMTg2PXN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTkxLVx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTkyOlx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExOTMtXHQgKlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExOTUtXHQgKiBtYWtlIHN1cmUgdGhhdCBsb29wX3ZhbGlkYXRlX2ZpbGUoKSB3aWxsIGZhaWwgaWYgdGhlIFwmIzM0O3N0cnVjdCBmaWxlXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTk2Olx0ICogd2hpY2ggbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGZvdW5kIHZpYSBmZ2V0KCkgd2FzIHRoaXNcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExOTctXHQgKiBsb29wIGRldmljZS5cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTA5PXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MzgtXHRjYXNlIExPT1BfQ0hBTkdFX0ZEOlxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUzOTpcdFx0cmV0dXJuIGxvb3BfY2hhbmdlX2ZkKGxvLCBiZGV2LCBhcmcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0MC1cdGNhc2UgTE9PUF9DTFJfRkQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgdG8gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgRmlsZSBEZXNjcmlwdG9yIE1hbmFnZW1lbnQgaW4gUmVsYXRpb24gdG8gTmV0d29yayBCbG9jayBEZXZpY2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgZmlsZSBkZXNjcmlwdG9ycyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyAoTkJEcykuIEl0IHNlZW1zIGxpa2UgdGhlIGBsb29wX2NoYW5nZV9mZGAgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGZyb20gd2l0aGluIGBsb19pb2N0bGAgd2hlbiB0aGUgYExPT1BfQ0hBTkdFX0ZEYCBvcGVyYXRpb24gaXMgcmVxdWVzdGVkLiBUaGlzIGluZGljYXRlcyBhIGNvbm5lY3Rpb24gb3IgcmUtZGlyZWN0aW9uIHJlbGF0ZWQgdG8gYSBsb29wIGRldmljZSwgbGlrZWx5IHRvIG1vZGlmeSBhbiBleGlzdGluZyBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRpb24uIEZyb20gYW4gTkJEIHBlcnNwZWN0aXZlLCBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgIGlzIHNwZWNpZmljYWxseSBjYWxsZWQgdGhyb3VnaCB0aGUgTkJEIGlvY3Rscy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXJlJiMzOTtzIGEgZmlsZSBkZXNjcmlwdG9yIGNsZWFudXAgb3IgcmVzZXQgb2NjdXJyaW5nIHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgYmxvY2sgZGV2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBoZXJlIGlzIHRoYXQgYm90aCB0aGUgbG9vcCBhbmQgTkJEIGNvZGUgY2FuIHdvcmsgd2l0aCBmaWxlIGRlc2NyaXB0b3JzLCBidXQgdGhleSBoYXZlIHRoZWlyIG93biBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4gSXQgc291bmRzIGxpa2UgdGhleSBlYWNoIGhhdmUgYSBkaXN0aW5jdCBtZXRob2Qgb2YgaGFuZGxpbmcgc29ja2V0IGNvbm5lY3Rpb25zLCBhbmQgcG90ZW50aWFsbHkgY2xlYXJpbmcgdGhlbSwgZGVwZW5kaW5nIG9uIHRoZSBvcGVyYXRpb25hbCBjb250ZXh0LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGRlZXBlciBpbnRvIGhvdyBgTE9PUF9DSEFOR0VfRkRgIGFuZCBOQkQmIzM5O3MgaW9jdGwgbWVjaGFuaXNtcyBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfY2xlYXJfc29ja19pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTE1ODA9c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjA5LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjEwOnN0YXRpYyB2b2lkIG5iZF9jbGVhcl9zb2NrX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MTEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTYzNz1zdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjQ2LVx0Y2FzZSBOQkRfQ0xFQVJfU09DSzpcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY0NzpcdFx0bmJkX2NsZWFyX3NvY2tfaW9jdGwobmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0OC1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQmxvY2sgRGV2aWNlIElPQ1RMczogTG9vcCBhbmQgTkJEKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgdHdvIGludGVyZXN0aW5nIHRhcmdldHMgaGVyZTogdGhlIGxvb3AgYW5kIE5CRCBibG9jayBkZXZpY2UgaW9jdGxzLiBEZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2ssIHByaW1lIGZ1enppbmcgY2FuZGlkYXRlcywgSSYjMzk7ZCBzYXkuIFdlIGNhbiByZWFjaCB0aGVtLCB0aGF0JiMzOTtzIHRoZSBrZXkuIE5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zOiBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfTkJEYC4gR290dGEgbWFrZSBzdXJlIHRoZXkmIzM5O3JlIGVuYWJsZWQgdG8gYWN0dWFsbHkgaGl0IHRoZXNlIGZlYXR1cmVzIGR1cmluZyB0ZXN0aW5nLiBUaW1lIHRvIHZlcmlmeSB0aG9zZSBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9MT09QJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xNDA9Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDMtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTQ0OmNvbmZpZyBCTEtfREVWX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXHR0cmlzdGF0ZSBcJiMzNDtMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNzgtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgwLVx0aW50IFwmIzM0O051bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQSBGaW5lIFN0YXJ0aW5nIFBvaW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uICYjMzQ7QW5kIE5CRCYjMzQ7IOKAkyBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBjYXN1YWwgZnJhbWluZywgYSBiaXQgbGlrZSBzYXlpbmcgJiMzNDtubyBiaWcgZGVhbC4mIzM0OyBJdCBzdWdnZXN0cyBhIGxldmVsIG9mIGNvbWZvcnQgb3IgYXNzdW1lZCBjb21tb24ga25vd2xlZGdlLiBGcm9tIGEgcHVyZWx5IHNlbWFudGljIHBlcnNwZWN0aXZlLCB0aGF0JiMzOTtzIG5vdCBleGFjdGx5IHJvYnVzdC4gSG93ZXZlciwgYXMgYW4gZXhwZXJ0LCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcHJvY2Vzc2luZyB3aGF0IGNvbnRleHQgd291bGQgbWFrZSB0aGF0IHNob3J0aGFuZCBhcHByb3ByaWF0ZS4gSXMgdGhpcyBpbnRlcm5hbCBkb2N1bWVudGF0aW9uPyBBbiBlbWFpbCB0byBjb2xsZWFndWVzPyBBIGJsb2cgcG9zdCBhaW1lZCBhdCBhIGJlZ2lubmVyIGF1ZGllbmNlPyBUaGUgZnJhbWluZyBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgYWJvdXQgdGhlIGludGVuZGVkIGF1ZGllbmNlIGFuZCBsZXZlbCBvZiBmb3JtYWxpdHkgSSBzaG91bGQgZXhwZWN0LgoKSXQgYWxzbyBzdWdnZXN0cyB0aGF0IHdoYXRldmVyIGZvbGxvd3MgaXMgbGlrZWx5IHRvIGJlLi4uIHdlbGwsIG5vdCBlYXJ0aC1zaGF0dGVyaW5nLiBNYXliZSBhIHNpbXBsZSBleHBsYW5hdGlvbiwgYSBtaW5vciBjbGFyaWZpY2F0aW9uLCBhIHJlbGF0aXZlbHkgYmFzaWMgcmVzdWx0LiBJJiMzOTttIHByaW1lZCB0byBsb29rIGZvciBzb21ldGhpbmcgdGhhdCYjMzk7cyBmb3VuZGF0aW9uYWwsIG9yIHBlcmhhcHMgYSBzdGVwcGluZyBzdG9uZSB0byBzb21ldGhpbmcgbW9yZSBjb21wbGV4LiBJdCYjMzk7cyBzZXR0aW5nIGFuIGV4cGVjdGF0aW9uIGZvciBtZSwgYW5kIEkga25vdyBmcm9tIG15IGV4cGVyaWVuY2UgdGhhdCBtYW5hZ2luZyBleHBlY3RhdGlvbnMgaXMgYSBjcml0aWNhbCBmaXJzdCBzdGVwLiBOb3csIEkgaGF2ZSB0byBzZWUgd2hhdCB0aGlzICYjMzQ7TkJEJiMzNDsgYWN0dWFsbHkgKmlzKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTkJEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOgoKKipEaWdnaW5nIGludG8gUG90ZW50aWFsIE5CRCBTb2NrZXQgQmVoYXZpb3IqKgoKUmlnaHQsIG15IG1lbnRhbCByYWRhciBpcyBwaW5naW5nIG9uIGEgY291cGxlIG9mIGludGVyZXN0aW5nIHN5bWJvbHM6IGBsb29wX2NoYW5nZV9mZGAgYW5kIGBuYmRfY2xlYXJfc29ja19pb2N0bGAuIFRob3NlIHNlZW0gbGlrZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIHNldHVwLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGZpbGUgZGVzY3JpcHRvciBtYW5pcHVsYXRpb24gYW5kIHNvY2tldCBpbnRlcmFjdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlPyYjMzQ7IEkmIzM5O20gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgYG5iZF9jbGVhcl9zb2NrX2lvY3RsYC4gSG1tbSwgdGhhdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLi4uIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHdvbmRlciBpZiBpdCYjMzk7cyBiZWluZyBhZ2dyZXNzaXZlbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIElmIGl0IGlzLCB0cmFjaW5nIGl0cyBsb2dpYyB3aWxsIGJlIG1vcmUgaW52b2x2ZWQuIFRoZSBiZXN0IG1vdmUgaXMgdG8ganVtcCBpbnRvIHRoZSBgbmJkLmNgIGZpbGUgaXRzZWxmIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRpbWUgdG8gdmVyaWZ5IGlmIG15IGh1bmNoIGFib3V0IGlubGluaW5nIGlzIGNvcnJlY3QgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYG5iZF9jbGVhcl9zb2NrX2lvY3RsYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjEwOlx0c3RhdGljIHZvaWQgbmJkX2NsZWFyX3NvY2tfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbjE2MTE6XHR7XG4xNjEyOlx0XHRuYmRfY2xlYXJfc29jayhuYmQpO1xuMTYxMzpcdFx0ZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobmJkLVx1MDAzZWRpc2spO1xuMTYxNDpcdFx0bmJkX2JkZXZfcmVzZXQobmJkKTtcbjE2MTU6XHRcdC8qXG4xNjE2Olx0XHQgKiBEcm9wIHRoZSBwYXJ0aXRpb25zIG9mIHRoZSBkaXNjb25uZWN0ZWQgZGV2aWNlIG9uIHRoZSBuZXh0IG9wZW4uIFRoZXlcbjE2MTc6XHRcdCAqIGNhbiBleGlzdCBldmVuIHdpdGggbWF4X3BhcnQgemVybyBhcyB0aGV5IG1heSBoYXZlIGJlZW4gYWRkZWQgbWFudWFsbHlcbjE2MTg6XHRcdCAqIHdpdGggQkxLUEcuIERyb3BwaW5nIHRoZW0gaGVyZSBpcyBub3QgcG9zc2libGUgYXMgdGhhdCBuZWVkc1xuMTYxOTpcdFx0ICogb3Blbl9tdXRleCwgd2hpY2ggbmJkX29wZW4oKSBhY3F1aXJlcyB1bmRlciBjb25maWdfbG9jay5cbjE2MjA6XHRcdCAqL1xuMTYyMTpcdFx0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXHUwMDI2bmJkLVx1MDAzZWRpc2stXHUwMDNlc3RhdGUpO1xuMTYyMjpcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX0NPTkZJR19SRUYsXG4xNjIzOlx0XHRcdFx0ICAgICAgIFx1MDAyNm5iZC1cdTAwM2Vjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4xNjI0Olx0XHRcdG5iZF9jb25maWdfcHV0KG5iZCk7XG4xNjI1Olx0fVxuMTYyNjpcdFxuMTYyNzpcdHN0YXRpYyB2b2lkIG5iZF9zZXRfY21kX3RpbWVvdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdTY0IHRpbWVvdXQpXG4xNjI4Olx0e1xuMTYyOTpcdFx0bmJkLVx1MDAzZXRhZ19zZXQudGltZW91dCA9IHRpbWVvdXQgKiBIWjtcbjE2MzA6XHRcdGlmICh0aW1lb3V0KVxuMTYzMTpcdFx0XHRibGtfcXVldWVfcnFfdGltZW91dChuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgdGltZW91dCAqIEhaKTtcbjE2MzI6XHRcdGVsc2VcbjE2MzM6XHRcdFx0YmxrX3F1ZXVlX3JxX3RpbWVvdXQobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIDMwICogSFopO1xuMTYzNDpcdH1cbjE2MzU6XHRcbjE2MzY6XHQvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cbjE2Mzc6XHRzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG4xNjM4Olx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbjE2Mzk6XHR7XG4xNjQwOlx0XHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVx1MDAzZWNvbmZpZztcbjE2NDE6XHRcdGxvZmZfdCBieXRlc2l6ZTtcbjE2NDI6XHRcbjE2NDM6XHRcdHN3aXRjaCAoY21kKSB7XG4xNjQ0Olx0XHRjYXNlIE5CRF9ESVNDT05ORUNUOlxuMTY0NTpcdFx0XHRyZXR1cm4gbmJkX2Rpc2Nvbm5lY3QobmJkKTtcbjE2NDY6XHRcdGNhc2UgTkJEX0NMRUFSX1NPQ0s6XG4xNjQ3Olx0XHRcdG5iZF9jbGVhcl9zb2NrX2lvY3RsKG5iZCk7XG4xNjQ4Olx0XHRcdHJldHVybiAwO1xuMTY0OTpcdFx0Y2FzZSBOQkRfU0VUX1NPQ0s6XG4xNjUwOlx0XHRcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xuMTY1MTpcdFx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XG4xNjUyOlx0XHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIGFyZyk7XG4xNjUzOlx0XHRjYXNlIE5CRF9TRVRfU0laRTpcbjE2NTQ6XHRcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSk7XG4xNjU1Olx0XHRjYXNlIE5CRF9TRVRfU0laRV9CTE9DS1M6XG4xNjU2Olx0XHRcdGlmIChjaGVja19zaGxfb3ZlcmZsb3coYXJnLCBjb25maWctXHUwMDNlYmxrc2l6ZV9iaXRzLCBcdTAwMjZieXRlc2l6ZSkpXG4xNjU3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNjU4Olx0XHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7XG4xNjU5Olx0XHRjYXNlIE5CRF9TRVRfVElNRU9VVDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI2MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU29ja2V0IENsZWFyaW5nIElPQ1RMIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBgc3RhdGljYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnIOKAkyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIG9ubHkgd2l0aGluIHRoZSBtb2R1bGUuIEFuZCB0aGUgY29tcGlsZXIgKm1pZ2h0KiBiZSBpbmxpbmluZyBpdC4gVGhhdCBtZWFucyB0cnlpbmcgdG8gdHJhY2UgaXQgZGlyZWN0bHkgaXMgcHJvYmFibHkgbGVzcyBmcnVpdGZ1bCB0aGFuIGxvb2tpbmcgaGlnaGVyIHVwIHRoZSBjYWxsIHN0YWNrLCBhdCBhIGJyb2FkZXIgZW50cnkgcG9pbnQuIFBlcmhhcHMgSSBzaG91bGQgc2hpZnQgbXkgZm9jdXMuIFRoaW5raW5nIGFib3V0IGl0LCBgX19uYmRfaW9jdGxgIHNlZW1zIGxpa2UgYSBtb3JlIHByb21pc2luZyBzeW1ib2wgdG8gZXhhbWluZSwgb3IgZXZlbiB0aGUgZXhwb3NlZCBmdW5jdGlvbiBgbmJkX2lvY3RsYC4gTGV0JiMzOTtzIGp1c3QgY2hlY2sgb3V0IGBuYmRfaW9jdGxgIGFuZCBzZWUgd2hhdCB0aGF0IGdldHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTE2Mjc9c3RhdGljIHZvaWQgbmJkX3NldF9jbWRfdGltZW91dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1NjQgdGltZW91dClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzYtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBjb25maWdfbG9jayBoZWxkICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Mzc6c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjM4LVx0XHQgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjg0OnN0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4NS1cdFx0ICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDYtXHQgICAgKGNtZCA9PSBOQkRfRElTQ09OTkVDVCB8fCBjbWQgPT0gTkJEX0NMRUFSX1NPQ0spKVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA3Olx0XHRlcnJvciA9IF9fbmJkX2lvY3RsKGJkZXYsIG5iZCwgY21kLCBhcmcpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNzA4LVx0ZWxzZVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTUtXHQucmVsZWFzZSA9XHRuYmRfcmVsZWFzZSxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxNjpcdC5pb2N0bCA9XHRuYmRfaW9jdGwsXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4MTc6XHQuY29tcGF0X2lvY3RsID1cdG5iZF9pb2N0bCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxOC1cdC5mcmVlX2Rpc2sgPVx0bmJkX2ZyZWVfZGlzayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIE1vZHVsZSYjMzk7cyBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBtb2R1bGUgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG5iZF9pb2N0bGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGludGVyYWN0aW9ucywgdGhlIGdhdGV3YXkgaWYgeW91IHdpbGwuIEkmIzM5O20gc2VlaW5nIGEgbG9vcCBzdHJ1Y3R1cmUgYW5kIHdpdGhpbiB0aGF0IGlzIGBsb29wX2NoYW5nZV9mZGAuIEl0JiMzOTtzIGRlZmluZWQgYXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGl0JiMzOTtzIGEgcmVsYXRpdmVseSBsYXJnZSBmdW5jdGlvbi4gQmVjYXVzZSBvZiBpdHMgc2l6ZSwgSSYjMzk7bSB3YWdlcmluZyB0aGF0IHRoZSBjb21waWxlciBtaWdodCBub3QgYmUgaW5saW5pbmcgaXQsIHdoaWNoIGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSBpZiBpdCYjMzk7cyBjYWxsZWQgZnJlcXVlbnRseS4gSG93ZXZlciwgaXQgc2VlbXMgdGhhdCBgbG9faW9jdGxgIGlzIHRoZSAqYWN0dWFsKiBlbnRyeSBwb2ludC4gSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgc2l6ZSBvZiBgbG9vcF9jaGFuZ2VfZmRgLiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIGJldHRlciBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgb3Igbm90IHRvIGJlIGNvbmNlcm5lZCBhYm91dCBwb3RlbnRpYWwgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIGZ1bmN0aW9uIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MzQ6XHRzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gNTM1Olx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgYXJnKVxuIDUzNjpcdHtcbiA1Mzc6XHRcdHN0cnVjdCBmaWxlICpmaWxlID0gZmdldChhcmcpO1xuIDUzODpcdFx0c3RydWN0IGZpbGUgKm9sZF9maWxlO1xuIDUzOTpcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuIDU0MDpcdFx0aW50IGVycm9yO1xuIDU0MTpcdFx0Ym9vbCBpc19sb29wO1xuIDU0MjpcdFxuIDU0MzpcdFx0aWYgKCFmaWxlKVxuIDU0NDpcdFx0XHRyZXR1cm4gLUVCQURGO1xuIDU0NTpcdFxuIDU0NjpcdFx0ZXJyb3IgPSBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShmaWxlKTtcbiA1NDc6XHRcdGlmIChlcnJvcikge1xuIDU0ODpcdFx0XHRmcHV0KGZpbGUpO1xuIDU0OTpcdFx0XHRyZXR1cm4gZXJyb3I7XG4gNTUwOlx0XHR9XG4gNTUxOlx0XG4gNTUyOlx0XHQvKiBzdXBwcmVzcyB1ZXZlbnRzIHdoaWxlIHJlY29uZmlndXJpbmcgdGhlIGRldmljZSAqL1xuIDU1MzpcdFx0ZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGlza190b19kZXYobG8tXHUwMDNlbG9fZGlzayksIDEpO1xuIDU1NDpcdFxuIDU1NTpcdFx0aXNfbG9vcCA9IGlzX2xvb3BfZGV2aWNlKGZpbGUpO1xuIDU1NjpcdFx0ZXJyb3IgPSBsb29wX2dsb2JhbF9sb2NrX2tpbGxhYmxlKGxvLCBpc19sb29wKTtcbiA1NTc6XHRcdGlmIChlcnJvcilcbiA1NTg6XHRcdFx0Z290byBvdXRfcHV0ZjtcbiA1NTk6XHRcdGVycm9yID0gLUVOWElPO1xuIDU2MDpcdFx0aWYgKGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kKVxuIDU2MTpcdFx0XHRnb3RvIG91dF9lcnI7XG4gNTYyOlx0XG4gNTYzOlx0XHQvKiB0aGUgbG9vcCBkZXZpY2UgaGFzIHRvIGJlIHJlYWQtb25seSAqL1xuIDU2NDpcdFx0ZXJyb3IgPSAtRUlOVkFMO1xuIDU2NTpcdFx0aWYgKCEobG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2IExPX0ZMQUdTX1JFQURfT05MWSkpXG4gNTY2Olx0XHRcdGdvdG8gb3V0X2VycjtcbiA1Njc6XHRcbiA1Njg6XHRcdGVycm9yID0gbG9vcF92YWxpZGF0ZV9maWxlKGZpbGUsIGJkZXYpO1xuIDU2OTpcdFx0aWYgKGVycm9yKVxuIDU3MDpcdFx0XHRnb3RvIG91dF9lcnI7XG4gNTcxOlx0XG4gNTcyOlx0XHRvbGRfZmlsZSA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiA1NzM6XHRcbiA1NzQ6XHRcdGVycm9yID0gLUVJTlZBTDtcbiA1NzU6XHRcbiA1NzY6XHRcdC8qIHNpemUgb2YgdGhlIG5ldyBiYWNraW5nIHN0b3JlIG5lZWRzIHRvIGJlIHRoZSBzYW1lICovXG4gNTc3Olx0XHRpZiAobG9fY2FsY3VsYXRlX3NpemUobG8sIGZpbGUpICE9IGxvX2NhbGN1bGF0ZV9zaXplKGxvLCBvbGRfZmlsZSkpXG4gNTc4Olx0XHRcdGdvdG8gb3V0X2VycjtcbiA1Nzk6XHRcbiA1ODA6XHRcdC8qXG4gNTgxOlx0XHQgKiBXZSBtaWdodCBzd2l0Y2ggdG8gZGlyZWN0IEkvTyBtb2RlIGZvciB0aGUgbG9vcCBkZXZpY2UsIHdyaXRlIGJhY2tcbiA1ODI6XHRcdCAqIGFsbCBkaXJ0eSBkYXRhIHRoZSBwYWdlIGNhY2hlIG5vdyB0aGF0IHNvIHRoYXQgdGhlIGluZGl2aWR1YWwgSS9PXG4gNTgzOlx0XHQgKiBvcGVyYXRpb25zIGRvbiYjMzk7dCBoYXZlIHRvIGRvIHRoYXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NDQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGtlcm5lbCBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGZ1enppbmcgc3RyYXRlZ3kuIFRoZSBmdW5jdGlvbiBgbG9vcF9jaGFuZ2VfZmRgIGlzIHRvbyBiaWcgdG8gYmUgaW5saW5lZCwgc28gdGhhdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmb2N1c2VkIGZ1enppbmcsIGJ1dCBgbG9faW9jdGxgIGlzIGZpbmUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4KClRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBtYWtpbmcgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMgZGVlcCBpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFsdGVyaW5nIGhvdyBwYXJ0aXRpb25zIGFyZSByZS1yZWFkIHdoZW4gdGhlIGJhY2tpbmcgZmlsZSBjaGFuZ2VzIGZvciBsb29wIGRldmljZXMgYW5kIGhvdyBwYXJ0aXRpb25zIGFyZSBkcm9wcGVkIHdoZW4gYW4gTkJEIGRpc2Nvbm5lY3QgaGFwcGVucy4gQm90aCBvZiB0aGVzZSBiZWhhdmlvcnMgYXJlIHRyaWdnZXJlZCBieSBpb2N0bHMgb24gYmxvY2sgZGV2aWNlcywgYm90aCBsb29wIGFuZCBOQkQgZGV2aWNlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZvY3VzIG9uIHRoZXNlIGFyZWFzLgoKVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgYEJMS19ERVZfTE9PUGAgYW5kIGBCTEtfREVWX05CRGAsIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGZvciBidWlsZCBjb25maWd1cmF0aW9ucy4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHNvbWV0aGluZyBhYm91dCBgbG9vcF9jaGFuZ2VfZmRgLiBJcyBpdCBzdGF0aWM/IFllcywgaXQgaXMuIFRoYXQmIzM5O3MgYSBnb29kIHRoaW5nIHRvIGJlIGF3YXJlIG9mLiBCZWNhdXNlIGl0JiMzOTtzIHN0YXRpYywgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSBpdCBvciBvcHRpbWl6ZSBpdCBhd2F5LCB3aGljaCBjb3VsZCBhZmZlY3QgaXRzIHN5bWJvbCBhZGRyZXNzLiBJdCYjMzk7cyBwcm9iYWJseSBiZXR0ZXIgdG8gZm9jdXMgb24gdGhlIGBsb19pb2N0bGAgZnVuY3Rpb24gaW5zdGVhZCwgYXMgdGhhdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIHRoYXQgc2VlbXMgbW9yZSByZWxpYWJsZSBmb3IgZGVidWdnaW5nIGFuZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb19pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMTg2PXN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTkwLVx0LypcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExOTE6XHQgKiBTaW5jZSBsb19pb2N0bCgpIGlzIGNhbGxlZCB3aXRob3V0IGxvY2tzIGhlbGQsIGl0IGlzIHBvc3NpYmxlIHRoYXRcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExOTItXHQgKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgYW5kIGxvb3BfY2xyX2ZkKCkgcnVuIGluIHBhcmFsbGVsLlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0ODc9c3RhdGljIGludCBsb19zaW1wbGVfaW9jdGwoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTA4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUwOTpzdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MTAtXHR1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNjczPXN0YXRpYyBpbnQgbG9fY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNjk4LVx0Y2FzZSBMT09QX1NFVF9ESVJFQ1RfSU86XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNjk5Olx0XHRlcnIgPSBsb19pb2N0bChiZGV2LCBtb2RlLCBjbWQsIGFyZyk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzAwLVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNzYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzYzLVx0LnJlbGVhc2UgPVx0bG9fcmVsZWFzZSxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3NjQ6XHQuaW9jdGwgPVx0bG9faW9jdGwsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzY1LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MjAKCQkJCQkJCW91dHB1dDogMTA1CgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJb2N0bCBGdW5jdGlvbiBDYWxscyBhbmQgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBgaW9jdGxgIGNhbGxzLCBzcGVjaWZpY2FsbHkgYGxvX2lvY3RsYCBhbmQgYG5iZF9pb2N0bGAuIEkga25vdyB0aGV5JiMzOTtyZSBib3RoIGRlY2xhcmVkIGFzIHN0YXRpYywgYnV0IHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIHRoZSBgLmlvY3RsYCBmaWVsZCBpbiBgbG9fZm9wc2AgYW5kIGBuYmRfZm9wc2AsIHJlc3BlY3RpdmVseS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCwgd2hpY2ggbWFrZXMgdGhlbSBnb29kIGZvY3VzIHBvaW50cyBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLgoKTGV0IG1lIHNlZS4uLiBJIHNob3VsZCBjaGVjayBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBaCwgeWVzLCBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfTkJEYC4gQW5kIGxldCYjMzk7cyBub3QgZm9yZ2V0IHRoZSBkZXBlbmRlbmNpZXMuIGBCTEtfREVWX0xPT1BgIGRlcGVuZHMgb24gYEJMT0NLYCwgYW5kIHNvIGRvZXMgYEJMS19ERVZfTkJEYC4gTm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBTdGFuZGFyZCBzdHVmZi4KCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIHBhdGNoIGlzIG1lc3Npbmcgd2l0aCBob3cgcGFydGl0aW9uIHNjYW5uaW5nIHdvcmtzIGZvciBsb29wIGFuZCBOQkQgYmxvY2sgZGV2aWNlcywgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGJhY2tpbmcgZmlsZSBjaGFuZ2VzIG9yIGR1cmluZyBkaXNjb25uZWN0IG9wZXJhdGlvbnMuIFRoZSBmdW5jdGlvbmFsaXR5IGJlaGluZCB0aGVzZSBjaGFuZ2VzIGlzIGludm9rZWQgdGhyb3VnaCB0aGVzZSBibG9jayBkZXZpY2UgaW9jdGxzIOKAkyBgTE9PUF9DSEFOR0VfRkRgIGFuZCBgTkJEX0NMRUFSX1NPQ0tgLiBUaGlzIGlzIGltcG9ydGFudCBjb250ZXh0IGZvciBmb3JtdWxhdGluZyB0aGUgcmlnaHQgcmVzcG9uc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb19pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFydGl0aW9uIHNjYW5uaW5nIGxvZ2ljIGZvciBsb29wIGFuZCBuYmQgYmxvY2sgZGV2aWNlcyBkdXJpbmcgYmFja2luZyBmaWxlIGNoYW5nZSBhbmQgZGlzY29ubmVjdCBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIHZpYSBibG9jayBkZXZpY2UgaW9jdGxzIChMT09QX0NIQU5HRV9GRCBhbmQgTkJEX0NMRUFSX1NPQ0spLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb19pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFydGl0aW9uIHNjYW5uaW5nIGxvZ2ljIGZvciBsb29wIGFuZCBuYmQgYmxvY2sgZGV2aWNlcyBkdXJpbmcgYmFja2luZyBmaWxlIGNoYW5nZSBhbmQgZGlzY29ubmVjdCBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIHZpYSBibG9jayBkZXZpY2UgaW9jdGxzIChMT09QX0NIQU5HRV9GRCBhbmQgTkJEX0NMRUFSX1NPQ0spLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDc6MTMuMDIxNzAzNzU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MjQ5Mzc1NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb19pb2N0bFwiLFxuICAgIFwibmJkX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFydGl0aW9uIHNjYW5uaW5nIGxvZ2ljIGZvciBsb29wIGFuZCBuYmQgYmxvY2sgZGV2aWNlcyBkdXJpbmcgYmFja2luZyBmaWxlIGNoYW5nZSBhbmQgZGlzY29ubmVjdCBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIHZpYSBibG9jayBkZXZpY2UgaW9jdGxzIChMT09QX0NIQU5HRV9GRCBhbmQgTkJEX0NMRUFSX1NPQ0spLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0NzoxMy4wMjE3MDkyNTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDM5NDY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEwMmQ1YWI1NjM5ZmZhYzcwZTQxMDBmNzdhMmU1NTE5MWE3N2U4ODdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAxMTo0NzoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuaW5kZXggMWZhZWNlZjMzMDA5Mi4uNDE2YTljNjUxZjk3NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuQEAgLTUzOCw3ICs1MzgsNiBAQCBzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuIFxcdHN0cnVjdCBmaWxlICpvbGRfZmlsZTtcXG4gXFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xcbiBcXHRpbnQgZXJyb3I7XFxuLVxcdGJvb2wgcGFydHNjYW47XFxuIFxcdGJvb2wgaXNfbG9vcDtcXG4gXFxuIFxcdGlmICghZmlsZSlcXG5AQCAtNTkyLDcgKzU5MSw2IEBAIHN0YXRpYyBpbnQgbG9vcF9jaGFuZ2VfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcXG4gXFx0bG9vcF9hc3NpZ25fYmFja2luZ19maWxlKGxvLCBmaWxlKTtcXG4gXFx0bG9vcF91cGRhdGVfZGlvKGxvKTtcXG4gXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xcbi1cXHRwYXJ0c2NhbiA9IGxvLVxcdTAwM2Vsb19mbGFncyBcXHUwMDI2IExPX0ZMQUdTX1BBUlRTQ0FOO1xcbiBcXHRsb29wX2dsb2JhbF91bmxvY2sobG8sIGlzX2xvb3ApO1xcbiBcXG4gXFx0LypcXG5AQCAtNjEwLDggKzYwOCwxMiBAQCBzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuIFxcdCAqL1xcbiBcXHRmcHV0KG9sZF9maWxlKTtcXG4gXFx0ZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGlza190b19kZXYobG8tXFx1MDAzZWxvX2Rpc2spLCAwKTtcXG4tXFx0aWYgKHBhcnRzY2FuKVxcbi1cXHRcXHRsb29wX3JlcmVhZF9wYXJ0aXRpb25zKGxvKTtcXG4rXFx0LypcXG4rXFx0ICogUmVzY2FuIG9yLCB3aXRob3V0IExPX0ZMQUdTX1BBUlRTQ0FOLCBqdXN0IGRyb3AgdGhlIHBhcnRpdGlvbnMgb2YgdGhlXFxuK1xcdCAqIG9sZCBiYWNraW5nIGZpbGUuIFRoZXkgY2FuIGV4aXN0IHdpdGhvdXQgTE9fRkxBR1NfUEFSVFNDQU4gYXMgdGhleSBtYXlcXG4rXFx0ICogaGF2ZSBiZWVuIGFkZGVkIG1hbnVhbGx5IHdpdGggQkxLUEcuXFxuK1xcdCAqL1xcbitcXHRsb29wX3JlcmVhZF9wYXJ0aXRpb25zKGxvKTtcXG4gXFxuIFxcdGVycm9yID0gMDtcXG4gZG9uZTpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcXG5pbmRleCA4ZjEwNzYyZTkwZWY3Li5jZGFmZTlkMzkzNjk4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuQEAgLTE2MTIsNiArMTYxMiwxMyBAQCBzdGF0aWMgdm9pZCBuYmRfY2xlYXJfc29ja19pb2N0bChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbiBcXHRuYmRfY2xlYXJfc29jayhuYmQpO1xcbiBcXHRkaXNrX2ZvcmNlX21lZGlhX2NoYW5nZShuYmQtXFx1MDAzZWRpc2spO1xcbiBcXHRuYmRfYmRldl9yZXNldChuYmQpO1xcbitcXHQvKlxcbitcXHQgKiBEcm9wIHRoZSBwYXJ0aXRpb25zIG9mIHRoZSBkaXNjb25uZWN0ZWQgZGV2aWNlIG9uIHRoZSBuZXh0IG9wZW4uIFRoZXlcXG4rXFx0ICogY2FuIGV4aXN0IGV2ZW4gd2l0aCBtYXhfcGFydCB6ZXJvIGFzIHRoZXkgbWF5IGhhdmUgYmVlbiBhZGRlZCBtYW51YWxseVxcbitcXHQgKiB3aXRoIEJMS1BHLiBEcm9wcGluZyB0aGVtIGhlcmUgaXMgbm90IHBvc3NpYmxlIGFzIHRoYXQgbmVlZHNcXG4rXFx0ICogb3Blbl9tdXRleCwgd2hpY2ggbmJkX29wZW4oKSBhY3F1aXJlcyB1bmRlciBjb25maWdfbG9jay5cXG4rXFx0ICovXFxuK1xcdHNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sIFxcdTAwMjZuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXN0YXRlKTtcXG4gXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX0NPTkZJR19SRUYsXFxuIFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bmJkLVxcdTAwM2Vjb25maWctXFx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxcbiBcXHRcXHRuYmRfY29uZmlnX3B1dChuYmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0NzoxMy40NzcwOTkxMzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODY3OTM5NzI0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTEtfREVWX05CRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvX2lvY3RsXCIsXG4gICAgXCJuYmRfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJ0aXRpb24gc2Nhbm5pbmcgbG9naWMgZm9yIGxvb3AgYW5kIG5iZCBibG9jayBkZXZpY2VzIGR1cmluZyBiYWNraW5nIGZpbGUgY2hhbmdlIGFuZCBkaXNjb25uZWN0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSByZWFjaGFibGUgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgKExPT1BfQ0hBTkdFX0ZEIGFuZCBOQkRfQ0xFQVJfU09DSykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEwMmQ1YWI1NjM5ZmZhYzcwZTQxMDBmNzdhMmU1NTE5MWE3N2U4ODdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDExOjQ3OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggMWZhZWNlZjMzMDA5Mi4uNDE2YTljNjUxZjk3NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTUzOCw3ICs1MzgsNiBAQCBzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gXHRzdHJ1Y3QgZmlsZSAqb2xkX2ZpbGU7XG4gXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4gXHRpbnQgZXJyb3I7XG4tXHRib29sIHBhcnRzY2FuO1xuIFx0Ym9vbCBpc19sb29wO1xuIFxuIFx0aWYgKCFmaWxlKVxuQEAgLTU5Miw3ICs1OTEsNiBAQCBzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gXHRsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUobG8sIGZpbGUpO1xuIFx0bG9vcF91cGRhdGVfZGlvKGxvKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuLVx0cGFydHNjYW4gPSBsby1cdTAwM2Vsb19mbGFncyBcdTAwMjYgTE9fRkxBR1NfUEFSVFNDQU47XG4gXHRsb29wX2dsb2JhbF91bmxvY2sobG8sIGlzX2xvb3ApO1xuIFxuIFx0LypcbkBAIC02MTAsOCArNjA4LDEyIEBAIHN0YXRpYyBpbnQgbG9vcF9jaGFuZ2VfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbiBcdCAqL1xuIFx0ZnB1dChvbGRfZmlsZSk7XG4gXHRkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKSwgMCk7XG4tXHRpZiAocGFydHNjYW4pXG4tXHRcdGxvb3BfcmVyZWFkX3BhcnRpdGlvbnMobG8pO1xuK1x0LypcbitcdCAqIFJlc2NhbiBvciwgd2l0aG91dCBMT19GTEFHU19QQVJUU0NBTiwganVzdCBkcm9wIHRoZSBwYXJ0aXRpb25zIG9mIHRoZVxuK1x0ICogb2xkIGJhY2tpbmcgZmlsZS4gVGhleSBjYW4gZXhpc3Qgd2l0aG91dCBMT19GTEFHU19QQVJUU0NBTiBhcyB0aGV5IG1heVxuK1x0ICogaGF2ZSBiZWVuIGFkZGVkIG1hbnVhbGx5IHdpdGggQkxLUEcuXG4rXHQgKi9cbitcdGxvb3BfcmVyZWFkX3BhcnRpdGlvbnMobG8pO1xuIFxuIFx0ZXJyb3IgPSAwO1xuIGRvbmU6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjcuLmNkYWZlOWQzOTM2OTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMTYxMiw2ICsxNjEyLDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jbGVhcl9zb2NrX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRuYmRfY2xlYXJfc29jayhuYmQpO1xuIFx0ZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobmJkLVx1MDAzZWRpc2spO1xuIFx0bmJkX2JkZXZfcmVzZXQobmJkKTtcbitcdC8qXG4rXHQgKiBEcm9wIHRoZSBwYXJ0aXRpb25zIG9mIHRoZSBkaXNjb25uZWN0ZWQgZGV2aWNlIG9uIHRoZSBuZXh0IG9wZW4uIFRoZXlcbitcdCAqIGNhbiBleGlzdCBldmVuIHdpdGggbWF4X3BhcnQgemVybyBhcyB0aGV5IG1heSBoYXZlIGJlZW4gYWRkZWQgbWFudWFsbHlcbitcdCAqIHdpdGggQkxLUEcuIERyb3BwaW5nIHRoZW0gaGVyZSBpcyBub3QgcG9zc2libGUgYXMgdGhhdCBuZWVkc1xuK1x0ICogb3Blbl9tdXRleCwgd2hpY2ggbmJkX29wZW4oKSBhY3F1aXJlcyB1bmRlciBjb25maWdfbG9jay5cbitcdCAqL1xuK1x0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXHUwMDI2bmJkLVx1MDAzZWRpc2stXHUwMDNlc3RhdGUpO1xuIFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX0NPTkZJR19SRUYsXG4gXHRcdFx0ICAgICAgIFx1MDAyNm5iZC1cdTAwM2Vjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdG5iZF9jb25maWdfcHV0KG5iZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0NzoxMy40NzcxMDA3NDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM2NzkyNDE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQmxvY2sgRGV2aWNlIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCBzb21lIHJlY2VudCBjaGFuZ2VzIGluIHRoZSBibG9jayBkZXZpY2UgZHJpdmVycywgc3BlY2lmaWNhbGx5IGBsb29wLmNgIGFuZCBgbmJkLmNgLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBsb29wX2NoYW5nZV9mZGAgd2l0aGluIGBsb29wLmNgIHdoZXJlIGBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKGxvKWAgaXMgbm93IGFsd2F5cyBleGVjdXRlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYHBhcnRzY2FuYCBmbGFnLiBJbnRlcmVzdGluZy4uLiB0aGF0J3MgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZy4gQWxzbywgb3ZlciBpbiBgbmJkLmNgLCB0aGVyZSdzIGEgbmV3IGBzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZuYmQtXHUwMDNlZGlzay1cdTAwM2VzdGF0ZSk7YCBjYWxsIGFkZGVkIHdpdGhpbiBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLiBBbm90aGVyIHBvaW50IG9mIGludGVyZXN0LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBhcmUgZXZlbiByZWFjaGFibGUgYW5kIGlmIHRoZXkgcmVwcmVzZW50IHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0cy4gTGV0J3Mgc2VlLi4uIGBsb29wX2NoYW5nZV9mZGAgYXBwZWFycyB0byBiZSB0cmlnZ2VyZWQgdmlhIHRoZSBgbG9vcF9zZXRfZmRgIG9yIGBsb29wX2NoYW5nZV9mZGAgaW9jdGxzLiBUaGF0IG5hcnJvd3MgZG93biBteSBmb2N1cy4gQW5kIGBuYmRfY2xlYXJfc29ja19pb2N0bGAsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBpcyBjYWxsZWQgdGhyb3VnaCBOQkQgaW9jdGxzLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBJIG5lZWQgdG8gZG8gYSBjb2RlIHNlYXJjaCB0byBpZGVudGlmeSBhbGwgaW5zdGFuY2VzIG9mIGBsb29wX2NoYW5nZV9mZGAgYW5kIGBuYmRfY2xlYXJfc29ja19pb2N0bGAgdG8gbWFwIG91dCB0aGUgY2FsbCBwYXRocyBhbmQgYnVpbGQgYSBzdHJhdGVneS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgaW9jdGxzIGlzIGtleSB0byBjcmFmdGluZyBlZmZlY3RpdmUgZnV6emluZyBpbnB1dHMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDc6NDEuODQ1MDI4NTE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDAyNTI4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF9jaGFuZ2VfZmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9OTU9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwNi0gKiBpc19sb29wX2RldmljZSgpIGlzIHRydWUsIHdlIG5lZWQgYSBnbG9iYWwgbG9jayBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwNzogKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkvX19sb29wX2Nscl9mZCgpIGNhbGxzLlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwOC0gKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTUxNT1zdGF0aWMgaW50IGxvb3BfY2hlY2tfYmFja2luZ19maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTI2LS8qXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NTI3OiAqIGxvb3BfY2hhbmdlX2ZkIHN3aXRjaGVkIHRoZSBiYWNraW5nIHN0b3JlIG9mIGEgbG9vcGJhY2sgZGV2aWNlIHRvXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTI4LSAqIGEgbmV3IGZpbGUuIFRoaXMgaXMgdXNlZnVsIGZvciBvcGVyYXRpbmcgc3lzdGVtIGluc3RhbGxlcnMgdG8gZnJlZSB1cFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTMzLSAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUzNDpzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTM1LVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTExODY9c3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE5MS1cXHQgKiBTaW5jZSBsb19pb2N0bCgpIGlzIGNhbGxlZCB3aXRob3V0IGxvY2tzIGhlbGQsIGl0IGlzIHBvc3NpYmxlIHRoYXRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTkyOlxcdCAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBhbmQgbG9vcF9jbHJfZmQoKSBydW4gaW4gcGFyYWxsZWwuXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE5My1cXHQgKlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE5NS1cXHQgKiBtYWtlIHN1cmUgdGhhdCBsb29wX3ZhbGlkYXRlX2ZpbGUoKSB3aWxsIGZhaWwgaWYgdGhlIFxcXCJzdHJ1Y3QgZmlsZVxcXCJcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTk2OlxcdCAqIHdoaWNoIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBmb3VuZCB2aWEgZmdldCgpIHdhcyB0aGlzXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE5Ny1cXHQgKiBsb29wIGRldmljZS5cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE1MDk9c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTM4LVxcdGNhc2UgTE9PUF9DSEFOR0VfRkQ6XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUzOTpcXHRcXHRyZXR1cm4gbG9vcF9jaGFuZ2VfZmQobG8sIGJkZXYsIGFyZyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0MC1cXHRjYXNlIExPT1BfQ0xSX0ZEOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0Nzo0NC4xNDUyODcwMzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzMTU1Mjk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgdG8gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBGaWxlIERlc2NyaXB0b3IgTWFuYWdlbWVudCBpbiBSZWxhdGlvbiB0byBOZXR3b3JrIEJsb2NrIERldmljZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgZmlsZSBkZXNjcmlwdG9ycyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyAoTkJEcykuIEl0IHNlZW1zIGxpa2UgdGhlIGBsb29wX2NoYW5nZV9mZGAgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGZyb20gd2l0aGluIGBsb19pb2N0bGAgd2hlbiB0aGUgYExPT1BfQ0hBTkdFX0ZEYCBvcGVyYXRpb24gaXMgcmVxdWVzdGVkLiBUaGlzIGluZGljYXRlcyBhIGNvbm5lY3Rpb24gb3IgcmUtZGlyZWN0aW9uIHJlbGF0ZWQgdG8gYSBsb29wIGRldmljZSwgbGlrZWx5IHRvIG1vZGlmeSBhbiBleGlzdGluZyBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRpb24uIEZyb20gYW4gTkJEIHBlcnNwZWN0aXZlLCBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgIGlzIHNwZWNpZmljYWxseSBjYWxsZWQgdGhyb3VnaCB0aGUgTkJEIGlvY3Rscy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXJlJ3MgYSBmaWxlIGRlc2NyaXB0b3IgY2xlYW51cCBvciByZXNldCBvY2N1cnJpbmcgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBibG9jayBkZXZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGhlcmUgaXMgdGhhdCBib3RoIHRoZSBsb29wIGFuZCBOQkQgY29kZSBjYW4gd29yayB3aXRoIGZpbGUgZGVzY3JpcHRvcnMsIGJ1dCB0aGV5IGhhdmUgdGhlaXIgb3duIGFzc29jaWF0ZWQgZnVuY3Rpb25zLiBJdCBzb3VuZHMgbGlrZSB0aGV5IGVhY2ggaGF2ZSBhIGRpc3RpbmN0IG1ldGhvZCBvZiBoYW5kbGluZyBzb2NrZXQgY29ubmVjdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBjbGVhcmluZyB0aGVtLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGlvbmFsIGNvbnRleHQuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IGBMT09QX0NIQU5HRV9GRGAgYW5kIE5CRCdzIGlvY3RsIG1lY2hhbmlzbXMgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsJ3MgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc5NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDExOjQ4OjE0LjM3Njg0MjY3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUyMzE3MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9jbGVhcl9zb2NrX2lvY3RsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTU4MD1zdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2VfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYwOS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2MTA6c3RhdGljIHZvaWQgbmJkX2NsZWFyX3NvY2tfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MTEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xNjM3PXN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0Ni1cXHRjYXNlIE5CRF9DTEVBUl9TT0NLOlxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY0NzpcXHRcXHRuYmRfY2xlYXJfc29ja19pb2N0bChuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0OC1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDg6MTYuNTI5MTcwODAzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2NjYxMjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEJsb2NrIERldmljZSBJT0NUTHM6IExvb3AgYW5kIE5CRCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCB0d28gaW50ZXJlc3RpbmcgdGFyZ2V0cyBoZXJlOiB0aGUgbG9vcCBhbmQgTkJEIGJsb2NrIGRldmljZSBpb2N0bHMuIERlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgcHJpbWUgZnV6emluZyBjYW5kaWRhdGVzLCBJJ2Qgc2F5LiBXZSBjYW4gcmVhY2ggdGhlbSwgdGhhdCdzIHRoZSBrZXkuIE5vdywgbGV0J3MganVzdCBjb25maXJtIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnM6IGBCTEtfREVWX0xPT1BgIGFuZCBgQkxLX0RFVl9OQkRgLiBHb3R0YSBtYWtlIHN1cmUgdGhleSdyZSBlbmFibGVkIHRvIGFjdHVhbGx5IGhpdCB0aGVzZSBmZWF0dXJlcyBkdXJpbmcgdGVzdGluZy4gVGltZSB0byB2ZXJpZnkgdGhvc2UgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0ODoxOS43OTU3ODYyNTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MjE5MDQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9MT09QXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xNDA9Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0My1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTQ0OmNvbmZpZyBCTEtfREVWX0xPT1BcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQ1LVxcdHRyaXN0YXRlIFxcXCJMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNzgtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE3OTpjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODAtXFx0aW50IFxcXCJOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0ODoyMS41Nzc5ODE5MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODUyODcyNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIEhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEEgRmluZSBTdGFydGluZyBQb2ludCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gXCJBbmQgTkJEXCIg4oCTIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGNhc3VhbCBmcmFtaW5nLCBhIGJpdCBsaWtlIHNheWluZyBcIm5vIGJpZyBkZWFsLlwiIEl0IHN1Z2dlc3RzIGEgbGV2ZWwgb2YgY29tZm9ydCBvciBhc3N1bWVkIGNvbW1vbiBrbm93bGVkZ2UuIEZyb20gYSBwdXJlbHkgc2VtYW50aWMgcGVyc3BlY3RpdmUsIHRoYXQncyBub3QgZXhhY3RseSByb2J1c3QuIEhvd2V2ZXIsIGFzIGFuIGV4cGVydCwgSSdtIGFscmVhZHkgbWVudGFsbHkgcHJvY2Vzc2luZyB3aGF0IGNvbnRleHQgd291bGQgbWFrZSB0aGF0IHNob3J0aGFuZCBhcHByb3ByaWF0ZS4gSXMgdGhpcyBpbnRlcm5hbCBkb2N1bWVudGF0aW9uPyBBbiBlbWFpbCB0byBjb2xsZWFndWVzPyBBIGJsb2cgcG9zdCBhaW1lZCBhdCBhIGJlZ2lubmVyIGF1ZGllbmNlPyBUaGUgZnJhbWluZyBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgYWJvdXQgdGhlIGludGVuZGVkIGF1ZGllbmNlIGFuZCBsZXZlbCBvZiBmb3JtYWxpdHkgSSBzaG91bGQgZXhwZWN0LlxuXG5JdCBhbHNvIHN1Z2dlc3RzIHRoYXQgd2hhdGV2ZXIgZm9sbG93cyBpcyBsaWtlbHkgdG8gYmUuLi4gd2VsbCwgbm90IGVhcnRoLXNoYXR0ZXJpbmcuIE1heWJlIGEgc2ltcGxlIGV4cGxhbmF0aW9uLCBhIG1pbm9yIGNsYXJpZmljYXRpb24sIGEgcmVsYXRpdmVseSBiYXNpYyByZXN1bHQuIEknbSBwcmltZWQgdG8gbG9vayBmb3Igc29tZXRoaW5nIHRoYXQncyBmb3VuZGF0aW9uYWwsIG9yIHBlcmhhcHMgYSBzdGVwcGluZyBzdG9uZSB0byBzb21ldGhpbmcgbW9yZSBjb21wbGV4LiBJdCdzIHNldHRpbmcgYW4gZXhwZWN0YXRpb24gZm9yIG1lLCBhbmQgSSBrbm93IGZyb20gbXkgZXhwZXJpZW5jZSB0aGF0IG1hbmFnaW5nIGV4cGVjdGF0aW9ucyBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAuIE5vdywgSSBoYXZlIHRvIHNlZSB3aGF0IHRoaXMgXCJOQkRcIiBhY3R1YWxseSAqaXMqLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njk2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0ODoyNS40MzA4NTcyMTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTgzMjg1MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTkJEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDg6MjcuMjQ5MTk2OTA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjc4Nzc5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkRpZ2dpbmcgaW50byBQb3RlbnRpYWwgTkJEIFNvY2tldCBCZWhhdmlvcioqXG5cblJpZ2h0LCBteSBtZW50YWwgcmFkYXIgaXMgcGluZ2luZyBvbiBhIGNvdXBsZSBvZiBpbnRlcmVzdGluZyBzeW1ib2xzOiBgbG9vcF9jaGFuZ2VfZmRgIGFuZCBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLiBUaG9zZSBzZWVtIGxpa2Uga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBzZXR1cCwgcGFydGljdWxhcmx5IGFyb3VuZCBmaWxlIGRlc2NyaXB0b3IgbWFuaXB1bGF0aW9uIGFuZCBzb2NrZXQgaW50ZXJhY3Rpb25zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlP1wiIEknbSBwYXJ0aWN1bGFybHkgY3VyaW91cyBhYm91dCBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLiBIbW1tLCB0aGF0J3MgZGVmaW5lZCBhcyBgc3RhdGljYC4uLiB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3b25kZXIgaWYgaXQncyBiZWluZyBhZ2dyZXNzaXZlbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIElmIGl0IGlzLCB0cmFjaW5nIGl0cyBsb2dpYyB3aWxsIGJlIG1vcmUgaW52b2x2ZWQuIFRoZSBiZXN0IG1vdmUgaXMgdG8ganVtcCBpbnRvIHRoZSBgbmJkLmNgIGZpbGUgaXRzZWxmIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy4gVGltZSB0byB2ZXJpZnkgaWYgbXkgaHVuY2ggYWJvdXQgaW5saW5pbmcgaXMgY29ycmVjdCBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDg6MzEuMzc3MDg4Nzc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MTA6XFx0c3RhdGljIHZvaWQgbmJkX2NsZWFyX3NvY2tfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4xNjExOlxcdHtcXG4xNjEyOlxcdFxcdG5iZF9jbGVhcl9zb2NrKG5iZCk7XFxuMTYxMzpcXHRcXHRkaXNrX2ZvcmNlX21lZGlhX2NoYW5nZShuYmQtXFx1MDAzZWRpc2spO1xcbjE2MTQ6XFx0XFx0bmJkX2JkZXZfcmVzZXQobmJkKTtcXG4xNjE1OlxcdFxcdC8qXFxuMTYxNjpcXHRcXHQgKiBEcm9wIHRoZSBwYXJ0aXRpb25zIG9mIHRoZSBkaXNjb25uZWN0ZWQgZGV2aWNlIG9uIHRoZSBuZXh0IG9wZW4uIFRoZXlcXG4xNjE3OlxcdFxcdCAqIGNhbiBleGlzdCBldmVuIHdpdGggbWF4X3BhcnQgemVybyBhcyB0aGV5IG1heSBoYXZlIGJlZW4gYWRkZWQgbWFudWFsbHlcXG4xNjE4OlxcdFxcdCAqIHdpdGggQkxLUEcuIERyb3BwaW5nIHRoZW0gaGVyZSBpcyBub3QgcG9zc2libGUgYXMgdGhhdCBuZWVkc1xcbjE2MTk6XFx0XFx0ICogb3Blbl9tdXRleCwgd2hpY2ggbmJkX29wZW4oKSBhY3F1aXJlcyB1bmRlciBjb25maWdfbG9jay5cXG4xNjIwOlxcdFxcdCAqL1xcbjE2MjE6XFx0XFx0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXFx1MDAyNm5iZC1cXHUwMDNlZGlzay1cXHUwMDNlc3RhdGUpO1xcbjE2MjI6XFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX0NPTkZJR19SRUYsXFxuMTYyMzpcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNm5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VydW50aW1lX2ZsYWdzKSlcXG4xNjI0OlxcdFxcdFxcdG5iZF9jb25maWdfcHV0KG5iZCk7XFxuMTYyNTpcXHR9XFxuMTYyNjpcXHRcXG4xNjI3OlxcdHN0YXRpYyB2b2lkIG5iZF9zZXRfY21kX3RpbWVvdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdTY0IHRpbWVvdXQpXFxuMTYyODpcXHR7XFxuMTYyOTpcXHRcXHRuYmQtXFx1MDAzZXRhZ19zZXQudGltZW91dCA9IHRpbWVvdXQgKiBIWjtcXG4xNjMwOlxcdFxcdGlmICh0aW1lb3V0KVxcbjE2MzE6XFx0XFx0XFx0YmxrX3F1ZXVlX3JxX3RpbWVvdXQobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgdGltZW91dCAqIEhaKTtcXG4xNjMyOlxcdFxcdGVsc2VcXG4xNjMzOlxcdFxcdFxcdGJsa19xdWV1ZV9ycV90aW1lb3V0KG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIDMwICogSFopO1xcbjE2MzQ6XFx0fVxcbjE2MzU6XFx0XFxuMTYzNjpcXHQvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cXG4xNjM3OlxcdHN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG4xNjM4OlxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4xNjM5OlxcdHtcXG4xNjQwOlxcdFxcdHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtXFx1MDAzZWNvbmZpZztcXG4xNjQxOlxcdFxcdGxvZmZfdCBieXRlc2l6ZTtcXG4xNjQyOlxcdFxcbjE2NDM6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG4xNjQ0OlxcdFxcdGNhc2UgTkJEX0RJU0NPTk5FQ1Q6XFxuMTY0NTpcXHRcXHRcXHRyZXR1cm4gbmJkX2Rpc2Nvbm5lY3QobmJkKTtcXG4xNjQ2OlxcdFxcdGNhc2UgTkJEX0NMRUFSX1NPQ0s6XFxuMTY0NzpcXHRcXHRcXHRuYmRfY2xlYXJfc29ja19pb2N0bChuYmQpO1xcbjE2NDg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTY0OTpcXHRcXHRjYXNlIE5CRF9TRVRfU09DSzpcXG4xNjUwOlxcdFxcdFxcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xcbjE2NTE6XFx0XFx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XFxuMTY1MjpcXHRcXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVxcdTAwM2VieXRlc2l6ZSwgYXJnKTtcXG4xNjUzOlxcdFxcdGNhc2UgTkJEX1NFVF9TSVpFOlxcbjE2NTQ6XFx0XFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSk7XFxuMTY1NTpcXHRcXHRjYXNlIE5CRF9TRVRfU0laRV9CTE9DS1M6XFxuMTY1NjpcXHRcXHRcXHRpZiAoY2hlY2tfc2hsX292ZXJmbG93KGFyZywgY29uZmlnLVxcdTAwM2VibGtzaXplX2JpdHMsIFxcdTAwMjZieXRlc2l6ZSkpXFxuMTY1NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjU4OlxcdFxcdFxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7XFxuMTY1OTpcXHRcXHRjYXNlIE5CRF9TRVRfVElNRU9VVDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDg6MzEuMzc3MjU0MzA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTY0MTQwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTb2NrZXQgQ2xlYXJpbmcgSU9DVEwgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLCBhbmQgaXQncyBmbGFnZ2VkIGFzIGBzdGF0aWNgLiBSaWdodCBhd2F5LCB0aGF0IHJhaXNlcyBhIGZsYWcg4oCTIGl0J3MgbGlrZWx5IGNhbGxlZCBvbmx5IHdpdGhpbiB0aGUgbW9kdWxlLiBBbmQgdGhlIGNvbXBpbGVyICptaWdodCogYmUgaW5saW5pbmcgaXQuIFRoYXQgbWVhbnMgdHJ5aW5nIHRvIHRyYWNlIGl0IGRpcmVjdGx5IGlzIHByb2JhYmx5IGxlc3MgZnJ1aXRmdWwgdGhhbiBsb29raW5nIGhpZ2hlciB1cCB0aGUgY2FsbCBzdGFjaywgYXQgYSBicm9hZGVyIGVudHJ5IHBvaW50LiBQZXJoYXBzIEkgc2hvdWxkIHNoaWZ0IG15IGZvY3VzLiBUaGlua2luZyBhYm91dCBpdCwgYF9fbmJkX2lvY3RsYCBzZWVtcyBsaWtlIGEgbW9yZSBwcm9taXNpbmcgc3ltYm9sIHRvIGV4YW1pbmUsIG9yIGV2ZW4gdGhlIGV4cG9zZWQgZnVuY3Rpb24gYG5iZF9pb2N0bGAuIExldCdzIGp1c3QgY2hlY2sgb3V0IGBuYmRfaW9jdGxgIGFuZCBzZWUgd2hhdCB0aGF0IGdldHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNjEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDExOjQ4OjM1LjAzMzY3MTA0NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1NTUwMzcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfaW9jdGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xNjI3PXN0YXRpYyB2b2lkIG5iZF9zZXRfY21kX3RpbWVvdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdTY0IHRpbWVvdXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzYtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBjb25maWdfbG9jayBoZWxkICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjM3OnN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzgtXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgzLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY4NDpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjg1LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDYtXFx0ICAgIChjbWQgPT0gTkJEX0RJU0NPTk5FQ1QgfHwgY21kID09IE5CRF9DTEVBUl9TT0NLKSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3MDc6XFx0XFx0ZXJyb3IgPSBfX25iZF9pb2N0bChiZGV2LCBuYmQsIGNtZCwgYXJnKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDgtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xODExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODE1LVxcdC5yZWxlYXNlID1cXHRuYmRfcmVsZWFzZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4MTY6XFx0LmlvY3RsID1cXHRuYmRfaW9jdGwsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODE3OlxcdC5jb21wYXRfaW9jdGwgPVxcdG5iZF9pb2N0bCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTgtXFx0LmZyZWVfZGlzayA9XFx0bmJkX2ZyZWVfZGlzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDg6MzcuMDg5MTgwODI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzk3NTQzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIE1vZHVsZSdzIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBtb2R1bGUgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG5iZF9pb2N0bGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGludGVyYWN0aW9ucywgdGhlIGdhdGV3YXkgaWYgeW91IHdpbGwuIEknbSBzZWVpbmcgYSBsb29wIHN0cnVjdHVyZSBhbmQgd2l0aGluIHRoYXQgaXMgYGxvb3BfY2hhbmdlX2ZkYC4gSXQncyBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCdzIGEgcmVsYXRpdmVseSBsYXJnZSBmdW5jdGlvbi4gQmVjYXVzZSBvZiBpdHMgc2l6ZSwgSSdtIHdhZ2VyaW5nIHRoYXQgdGhlIGNvbXBpbGVyIG1pZ2h0IG5vdCBiZSBpbmxpbmluZyBpdCwgd2hpY2ggY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlIGlmIGl0J3MgY2FsbGVkIGZyZXF1ZW50bHkuIEhvd2V2ZXIsIGl0IHNlZW1zIHRoYXQgYGxvX2lvY3RsYCBpcyB0aGUgKmFjdHVhbCogZW50cnkgcG9pbnQuIEkgbmVlZCB0byBiZSBzdXJlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgc2l6ZSBvZiBgbG9vcF9jaGFuZ2VfZmRgLiBJdCdsbCBnaXZlIG1lIGEgYmV0dGVyIGluZGljYXRpb24gb2Ygd2hldGhlciBvciBub3QgdG8gYmUgY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggZnVuY3Rpb24gY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0ODo1MC44ODY3MjY5NTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzNCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUzNDpcXHRzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuIDUzNTpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBhcmcpXFxuIDUzNjpcXHR7XFxuIDUzNzpcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGZnZXQoYXJnKTtcXG4gNTM4OlxcdFxcdHN0cnVjdCBmaWxlICpvbGRfZmlsZTtcXG4gNTM5OlxcdFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gNTQwOlxcdFxcdGludCBlcnJvcjtcXG4gNTQxOlxcdFxcdGJvb2wgaXNfbG9vcDtcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0aWYgKCFmaWxlKVxcbiA1NDQ6XFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0ZXJyb3IgPSBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShmaWxlKTtcXG4gNTQ3OlxcdFxcdGlmIChlcnJvcikge1xcbiA1NDg6XFx0XFx0XFx0ZnB1dChmaWxlKTtcXG4gNTQ5OlxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4gNTUwOlxcdFxcdH1cXG4gNTUxOlxcdFxcbiA1NTI6XFx0XFx0Lyogc3VwcHJlc3MgdWV2ZW50cyB3aGlsZSByZWNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UgKi9cXG4gNTUzOlxcdFxcdGRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGRpc2tfdG9fZGV2KGxvLVxcdTAwM2Vsb19kaXNrKSwgMSk7XFxuIDU1NDpcXHRcXG4gNTU1OlxcdFxcdGlzX2xvb3AgPSBpc19sb29wX2RldmljZShmaWxlKTtcXG4gNTU2OlxcdFxcdGVycm9yID0gbG9vcF9nbG9iYWxfbG9ja19raWxsYWJsZShsbywgaXNfbG9vcCk7XFxuIDU1NzpcXHRcXHRpZiAoZXJyb3IpXFxuIDU1ODpcXHRcXHRcXHRnb3RvIG91dF9wdXRmO1xcbiA1NTk6XFx0XFx0ZXJyb3IgPSAtRU5YSU87XFxuIDU2MDpcXHRcXHRpZiAobG8tXFx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kKVxcbiA1NjE6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiA1NjI6XFx0XFxuIDU2MzpcXHRcXHQvKiB0aGUgbG9vcCBkZXZpY2UgaGFzIHRvIGJlIHJlYWQtb25seSAqL1xcbiA1NjQ6XFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbiA1NjU6XFx0XFx0aWYgKCEobG8tXFx1MDAzZWxvX2ZsYWdzIFxcdTAwMjYgTE9fRkxBR1NfUkVBRF9PTkxZKSlcXG4gNTY2OlxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gNTY3OlxcdFxcbiA1Njg6XFx0XFx0ZXJyb3IgPSBsb29wX3ZhbGlkYXRlX2ZpbGUoZmlsZSwgYmRldik7XFxuIDU2OTpcXHRcXHRpZiAoZXJyb3IpXFxuIDU3MDpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuIDU3MTpcXHRcXG4gNTcyOlxcdFxcdG9sZF9maWxlID0gbG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcXG4gNTczOlxcdFxcbiA1NzQ6XFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbiA1NzU6XFx0XFxuIDU3NjpcXHRcXHQvKiBzaXplIG9mIHRoZSBuZXcgYmFja2luZyBzdG9yZSBuZWVkcyB0byBiZSB0aGUgc2FtZSAqL1xcbiA1Nzc6XFx0XFx0aWYgKGxvX2NhbGN1bGF0ZV9zaXplKGxvLCBmaWxlKSAhPSBsb19jYWxjdWxhdGVfc2l6ZShsbywgb2xkX2ZpbGUpKVxcbiA1Nzg6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiA1Nzk6XFx0XFxuIDU4MDpcXHRcXHQvKlxcbiA1ODE6XFx0XFx0ICogV2UgbWlnaHQgc3dpdGNoIHRvIGRpcmVjdCBJL08gbW9kZSBmb3IgdGhlIGxvb3AgZGV2aWNlLCB3cml0ZSBiYWNrXFxuIDU4MjpcXHRcXHQgKiBhbGwgZGlydHkgZGF0YSB0aGUgcGFnZSBjYWNoZSBub3cgdGhhdCBzbyB0aGF0IHRoZSBpbmRpdmlkdWFsIEkvT1xcbiA1ODM6XFx0XFx0ICogb3BlcmF0aW9ucyBkb24ndCBoYXZlIHRvIGRvIHRoYXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDExOjQ4OjUwLjg4NjkyNTI0OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjYwMDQ1ODQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIGtlcm5lbCBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGZ1enppbmcgc3RyYXRlZ3kuIFRoZSBmdW5jdGlvbiBgbG9vcF9jaGFuZ2VfZmRgIGlzIHRvbyBiaWcgdG8gYmUgaW5saW5lZCwgc28gdGhhdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgZnV6emluZywgYnV0IGBsb19pb2N0bGAgaXMgZmluZS4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHR3byBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi5cblxuVGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgbWFraW5nIHNvbWUgZnVuY3Rpb25hbCBjaGFuZ2VzIGRlZXAgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBpdCdzIGFsdGVyaW5nIGhvdyBwYXJ0aXRpb25zIGFyZSByZS1yZWFkIHdoZW4gdGhlIGJhY2tpbmcgZmlsZSBjaGFuZ2VzIGZvciBsb29wIGRldmljZXMgYW5kIGhvdyBwYXJ0aXRpb25zIGFyZSBkcm9wcGVkIHdoZW4gYW4gTkJEIGRpc2Nvbm5lY3QgaGFwcGVucy4gQm90aCBvZiB0aGVzZSBiZWhhdmlvcnMgYXJlIHRyaWdnZXJlZCBieSBpb2N0bHMgb24gYmxvY2sgZGV2aWNlcywgYm90aCBsb29wIGFuZCBOQkQgZGV2aWNlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZvY3VzIG9uIHRoZXNlIGFyZWFzLlxuXG5UaGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfTkJEYCwgSSdsbCBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZCBmb3IgYnVpbGQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHNvbWV0aGluZyBhYm91dCBgbG9vcF9jaGFuZ2VfZmRgLiBJcyBpdCBzdGF0aWM/IFllcywgaXQgaXMuIFRoYXQncyBhIGdvb2QgdGhpbmcgdG8gYmUgYXdhcmUgb2YuIEJlY2F1c2UgaXQncyBzdGF0aWMsIHRoZSBjb21waWxlciBtaWdodCBpbmxpbmUgaXQgb3Igb3B0aW1pemUgaXQgYXdheSwgd2hpY2ggY291bGQgYWZmZWN0IGl0cyBzeW1ib2wgYWRkcmVzcy4gSXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gZm9jdXMgb24gdGhlIGBsb19pb2N0bGAgZnVuY3Rpb24gaW5zdGVhZCwgYXMgdGhhdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBzZWVtcyBtb3JlIHJlbGlhYmxlIGZvciBkZWJ1Z2dpbmcgYW5kIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NDQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo1MDoxMy40ODczODcwNTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzE3MjAzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9faW9jdGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9MTE4Nj1zdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTkwLVxcdC8qXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTE5MTpcXHQgKiBTaW5jZSBsb19pb2N0bCgpIGlzIGNhbGxlZCB3aXRob3V0IGxvY2tzIGhlbGQsIGl0IGlzIHBvc3NpYmxlIHRoYXRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTkyLVxcdCAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBhbmQgbG9vcF9jbHJfZmQoKSBydW4gaW4gcGFyYWxsZWwuXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDg3PXN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTA4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1MDk6c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUxMC1cXHR1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE2NzM9c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTY5OC1cXHRjYXNlIExPT1BfU0VUX0RJUkVDVF9JTzpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNjk5OlxcdFxcdGVyciA9IGxvX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzAwLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTc2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzYzLVxcdC5yZWxlYXNlID1cXHRsb19yZWxlYXNlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3NjQ6XFx0LmlvY3RsID1cXHRsb19pb2N0bCxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzY1LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDExOjUwOjE1LjIxOTExNjYyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY4NzU2NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJb2N0bCBGdW5jdGlvbiBDYWxscyBhbmQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYGlvY3RsYCBjYWxscywgc3BlY2lmaWNhbGx5IGBsb19pb2N0bGAgYW5kIGBuYmRfaW9jdGxgLiBJIGtub3cgdGhleSdyZSBib3RoIGRlY2xhcmVkIGFzIHN0YXRpYywgYnV0IHRoZXkncmUgYXNzaWduZWQgdG8gdGhlIGAuaW9jdGxgIGZpZWxkIGluIGBsb19mb3BzYCBhbmQgYG5iZF9mb3BzYCwgcmVzcGVjdGl2ZWx5LiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZXkgYXJlbid0IGlubGluZWQsIHdoaWNoIG1ha2VzIHRoZW0gZ29vZCBmb2N1cyBwb2ludHMgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC5cblxuTGV0IG1lIHNlZS4uLiBJIHNob3VsZCBjaGVjayBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBaCwgeWVzLCBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfTkJEYC4gQW5kIGxldCdzIG5vdCBmb3JnZXQgdGhlIGRlcGVuZGVuY2llcy4gYEJMS19ERVZfTE9PUGAgZGVwZW5kcyBvbiBgQkxPQ0tgLCBhbmQgc28gZG9lcyBgQkxLX0RFVl9OQkRgLiBOb3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUuIFN0YW5kYXJkIHN0dWZmLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBwYXRjaCBpcyBtZXNzaW5nIHdpdGggaG93IHBhcnRpdGlvbiBzY2FubmluZyB3b3JrcyBmb3IgbG9vcCBhbmQgTkJEIGJsb2NrIGRldmljZXMsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBiYWNraW5nIGZpbGUgY2hhbmdlcyBvciBkdXJpbmcgZGlzY29ubmVjdCBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb25hbGl0eSBiZWhpbmQgdGhlc2UgY2hhbmdlcyBpcyBpbnZva2VkIHRocm91Z2ggdGhlc2UgYmxvY2sgZGV2aWNlIGlvY3RscyDigJMgYExPT1BfQ0hBTkdFX0ZEYCBhbmQgYE5CRF9DTEVBUl9TT0NLYC4gVGhpcyBpcyBpbXBvcnRhbnQgY29udGV4dCBmb3IgZm9ybXVsYXRpbmcgdGhlIHJpZ2h0IHJlc3BvbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTIwLCJPdXRwdXRUb2tlbnMiOjEwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo1MDoyMC4xODc4NzUzMTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzE5NDA1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTEtfREVWX05CRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvX2lvY3RsXCIsXG4gICAgXCJuYmRfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJ0aXRpb24gc2Nhbm5pbmcgbG9naWMgZm9yIGxvb3AgYW5kIG5iZCBibG9jayBkZXZpY2VzIGR1cmluZyBiYWNraW5nIGZpbGUgY2hhbmdlIGFuZCBkaXNjb25uZWN0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSByZWFjaGFibGUgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgKExPT1BfQ0hBTkdFX0ZEIGFuZCBOQkRfQ0xFQVJfU09DSykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTEtfREVWX05CRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvX2lvY3RsXCIsXG4gICAgXCJuYmRfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJ0aXRpb24gc2Nhbm5pbmcgbG9naWMgZm9yIGxvb3AgYW5kIG5iZCBibG9jayBkZXZpY2VzIGR1cmluZyBiYWNraW5nIGZpbGUgY2hhbmdlIGFuZCBkaXNjb25uZWN0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSByZWFjaGFibGUgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgKExPT1BfQ0hBTkdFX0ZEIGFuZCBOQkRfQ0xFQVJfU09DSykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4rx25[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 11:45:13 +0000 UTC FinishedAt: 2026-08-06 11:50:21 +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": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "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": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_NBD" ], "series_id": "a7cbc2e6-670e-4546-b232-66ca76305df2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "lo_ioctl", "nbd_ioctl" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYXJ0aXRpb24gc2Nhbm5pbmcgbG9naWMgZm9yIGxvb3AgYW5kIG5iZCBibG9jayBkZXZpY2VzIGR1cmluZyBiYWNraW5nIGZpbGUgY2hhbmdlIGFuZCBkaXNjb25uZWN0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSByZWFjaGFibGUgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgKExPT1BfQ0hBTkdFX0ZEIGFuZCBOQkRfQ0xFQVJfU09DSykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMDJkNWFiNTYzOWZmYWM3MGU0MTAwZjc3YTJlNTUxOTFhNzdlODg3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxMTo0NzoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCAxZmFlY2VmMzMwMDkyLi40MTZhOWM2NTFmOTc3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNTM4LDcgJiM0Mzs1MzgsNiBAQCBzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gXHRzdHJ1Y3QgZmlsZSAqb2xkX2ZpbGU7XG4gXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4gXHRpbnQgZXJyb3I7XG4tXHRib29sIHBhcnRzY2FuO1xuIFx0Ym9vbCBpc19sb29wO1xuIFxuIFx0aWYgKCFmaWxlKVxuQEAgLTU5Miw3ICYjNDM7NTkxLDYgQEAgc3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuIFx0bG9vcF9hc3NpZ25fYmFja2luZ19maWxlKGxvLCBmaWxlKTtcbiBcdGxvb3BfdXBkYXRlX2Rpbyhsbyk7XG4gXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUsIG1lbWZsYWdzKTtcbi1cdHBhcnRzY2FuID0gbG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2IExPX0ZMQUdTX1BBUlRTQ0FOO1xuIFx0bG9vcF9nbG9iYWxfdW5sb2NrKGxvLCBpc19sb29wKTtcbiBcbiBcdC8qXG5AQCAtNjEwLDggJiM0Mzs2MDgsMTIgQEAgc3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuIFx0ICovXG4gXHRmcHV0KG9sZF9maWxlKTtcbiBcdGRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGRpc2tfdG9fZGV2KGxvLVx1MDAzZWxvX2Rpc2spLCAwKTtcbi1cdGlmIChwYXJ0c2Nhbilcbi1cdFx0bG9vcF9yZXJlYWRfcGFydGl0aW9ucyhsbyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXNjYW4gb3IsIHdpdGhvdXQgTE9fRkxBR1NfUEFSVFNDQU4sIGp1c3QgZHJvcCB0aGUgcGFydGl0aW9ucyBvZiB0aGVcbiYjNDM7XHQgKiBvbGQgYmFja2luZyBmaWxlLiBUaGV5IGNhbiBleGlzdCB3aXRob3V0IExPX0ZMQUdTX1BBUlRTQ0FOIGFzIHRoZXkgbWF5XG4mIzQzO1x0ICogaGF2ZSBiZWVuIGFkZGVkIG1hbnVhbGx5IHdpdGggQkxLUEcuXG4mIzQzO1x0ICovXG4mIzQzO1x0bG9vcF9yZXJlYWRfcGFydGl0aW9ucyhsbyk7XG4gXG4gXHRlcnJvciA9IDA7XG4gZG9uZTpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuaW5kZXggOGYxMDc2MmU5MGVmNy4uY2RhZmU5ZDM5MzY5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbkBAIC0xNjEyLDYgJiM0MzsxNjEyLDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jbGVhcl9zb2NrX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRuYmRfY2xlYXJfc29jayhuYmQpO1xuIFx0ZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobmJkLVx1MDAzZWRpc2spO1xuIFx0bmJkX2JkZXZfcmVzZXQobmJkKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERyb3AgdGhlIHBhcnRpdGlvbnMgb2YgdGhlIGRpc2Nvbm5lY3RlZCBkZXZpY2Ugb24gdGhlIG5leHQgb3Blbi4gVGhleVxuJiM0MztcdCAqIGNhbiBleGlzdCBldmVuIHdpdGggbWF4X3BhcnQgemVybyBhcyB0aGV5IG1heSBoYXZlIGJlZW4gYWRkZWQgbWFudWFsbHlcbiYjNDM7XHQgKiB3aXRoIEJMS1BHLiBEcm9wcGluZyB0aGVtIGhlcmUgaXMgbm90IHBvc3NpYmxlIGFzIHRoYXQgbmVlZHNcbiYjNDM7XHQgKiBvcGVuX211dGV4LCB3aGljaCBuYmRfb3BlbigpIGFjcXVpcmVzIHVuZGVyIGNvbmZpZ19sb2NrLlxuJiM0MztcdCAqL1xuJiM0MztcdHNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sIFx1MDAyNm5iZC1cdTAwM2VkaXNrLVx1MDAzZXN0YXRlKTtcbiBcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkJEX1JUX0hBU19DT05GSUdfUkVGLFxuIFx0XHRcdCAgICAgICBcdTAwMjZuYmQtXHUwMDNlY29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxuIFx0XHRuYmRfY29uZmlnX3B1dChuYmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb19pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFydGl0aW9uIHNjYW5uaW5nIGxvZ2ljIGZvciBsb29wIGFuZCBuYmQgYmxvY2sgZGV2aWNlcyBkdXJpbmcgYmFja2luZyBmaWxlIGNoYW5nZSBhbmQgZGlzY29ubmVjdCBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIHZpYSBibG9jayBkZXZpY2UgaW9jdGxzIChMT09QX0NIQU5HRV9GRCBhbmQgTkJEX0NMRUFSX1NPQ0spLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTAyZDVhYjU2MzlmZmFjNzBlNDEwMGY3N2EyZTU1MTkxYTc3ZTg4NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDYgMTE6NDc6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDFmYWVjZWYzMzAwOTIuLjQxNmE5YzY1MWY5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC01MzgsNyAmIzQzOzUzOCw2IEBAIHN0YXRpYyBpbnQgbG9vcF9jaGFuZ2VfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKIAlzdHJ1Y3QgZmlsZSAqb2xkX2ZpbGU7CiAJdW5zaWduZWQgaW50IG1lbWZsYWdzOwogCWludCBlcnJvcjsKLQlib29sIHBhcnRzY2FuOwogCWJvb2wgaXNfbG9vcDsKIAogCWlmICghZmlsZSkKQEAgLTU5Miw3ICYjNDM7NTkxLDYgQEAgc3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAogCWxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShsbywgZmlsZSk7CiAJbG9vcF91cGRhdGVfZGlvKGxvKTsKIAlibGtfbXFfdW5mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlLCBtZW1mbGFncyk7Ci0JcGFydHNjYW4gPSBsby0mZ3Q7bG9fZmxhZ3MgJmFtcDsgTE9fRkxBR1NfUEFSVFNDQU47CiAJbG9vcF9nbG9iYWxfdW5sb2NrKGxvLCBpc19sb29wKTsKIAogCS8qCkBAIC02MTAsOCAmIzQzOzYwOCwxMiBAQCBzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJICovCiAJZnB1dChvbGRfZmlsZSk7CiAJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGlza190b19kZXYobG8tJmd0O2xvX2Rpc2spLCAwKTsKLQlpZiAocGFydHNjYW4pCi0JCWxvb3BfcmVyZWFkX3BhcnRpdGlvbnMobG8pOwomIzQzOwkvKgomIzQzOwkgKiBSZXNjYW4gb3IsIHdpdGhvdXQgTE9fRkxBR1NfUEFSVFNDQU4sIGp1c3QgZHJvcCB0aGUgcGFydGl0aW9ucyBvZiB0aGUKJiM0MzsJICogb2xkIGJhY2tpbmcgZmlsZS4gVGhleSBjYW4gZXhpc3Qgd2l0aG91dCBMT19GTEFHU19QQVJUU0NBTiBhcyB0aGV5IG1heQomIzQzOwkgKiBoYXZlIGJlZW4gYWRkZWQgbWFudWFsbHkgd2l0aCBCTEtQRy4KJiM0MzsJICovCiYjNDM7CWxvb3BfcmVyZWFkX3BhcnRpdGlvbnMobG8pOwogCiAJZXJyb3IgPSAwOwogZG9uZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IDhmMTA3NjJlOTBlZjcuLmNkYWZlOWQzOTM2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9uYmQuYwpAQCAtMTYxMiw2ICYjNDM7MTYxMiwxMyBAQCBzdGF0aWMgdm9pZCBuYmRfY2xlYXJfc29ja19pb2N0bChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKQogCW5iZF9jbGVhcl9zb2NrKG5iZCk7CiAJZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobmJkLSZndDtkaXNrKTsKIAluYmRfYmRldl9yZXNldChuYmQpOwomIzQzOwkvKgomIzQzOwkgKiBEcm9wIHRoZSBwYXJ0aXRpb25zIG9mIHRoZSBkaXNjb25uZWN0ZWQgZGV2aWNlIG9uIHRoZSBuZXh0IG9wZW4uIFRoZXkKJiM0MzsJICogY2FuIGV4aXN0IGV2ZW4gd2l0aCBtYXhfcGFydCB6ZXJvIGFzIHRoZXkgbWF5IGhhdmUgYmVlbiBhZGRlZCBtYW51YWxseQomIzQzOwkgKiB3aXRoIEJMS1BHLiBEcm9wcGluZyB0aGVtIGhlcmUgaXMgbm90IHBvc3NpYmxlIGFzIHRoYXQgbmVlZHMKJiM0MzsJICogb3Blbl9tdXRleCwgd2hpY2ggbmJkX29wZW4oKSBhY3F1aXJlcyB1bmRlciBjb25maWdfbG9jay4KJiM0MzsJICovCiYjNDM7CXNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sICZhbXA7bmJkLSZndDtkaXNrLSZndDtzdGF0ZSk7CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX0NPTkZJR19SRUYsCiAJCQkgICAgICAgJmFtcDtuYmQtJmd0O2NvbmZpZy0mZ3Q7cnVudGltZV9mbGFncykpCiAJCW5iZF9jb25maWdfcHV0KG5iZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEJsb2NrIERldmljZSBEcml2ZXJzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCBzb21lIHJlY2VudCBjaGFuZ2VzIGluIHRoZSBibG9jayBkZXZpY2UgZHJpdmVycywgc3BlY2lmaWNhbGx5IGBsb29wLmNgIGFuZCBgbmJkLmNgLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBsb29wX2NoYW5nZV9mZGAgd2l0aGluIGBsb29wLmNgIHdoZXJlIGBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKGxvKWAgaXMgbm93IGFsd2F5cyBleGVjdXRlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYHBhcnRzY2FuYCBmbGFnLiBJbnRlcmVzdGluZy4uLiB0aGF0JiMzOTtzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuIEFsc28sIG92ZXIgaW4gYG5iZC5jYCwgdGhlcmUmIzM5O3MgYSBuZXcgYHNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sICZhbXA7bmJkLSZndDtkaXNrLSZndDtzdGF0ZSk7YCBjYWxsIGFkZGVkIHdpdGhpbiBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLiBBbm90aGVyIHBvaW50IG9mIGludGVyZXN0LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgYXJlIGV2ZW4gcmVhY2hhYmxlIGFuZCBpZiB0aGV5IHJlcHJlc2VudCB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldHMuIExldCYjMzk7cyBzZWUuLi4gYGxvb3BfY2hhbmdlX2ZkYCBhcHBlYXJzIHRvIGJlIHRyaWdnZXJlZCB2aWEgdGhlIGBsb29wX3NldF9mZGAgb3IgYGxvb3BfY2hhbmdlX2ZkYCBpb2N0bHMuIFRoYXQgbmFycm93cyBkb3duIG15IGZvY3VzLiBBbmQgYG5iZF9jbGVhcl9zb2NrX2lvY3RsYCwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIGlzIGNhbGxlZCB0aHJvdWdoIE5CRCBpb2N0bHMuCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBJIG5lZWQgdG8gZG8gYSBjb2RlIHNlYXJjaCB0byBpZGVudGlmeSBhbGwgaW5zdGFuY2VzIG9mIGBsb29wX2NoYW5nZV9mZGAgYW5kIGBuYmRfY2xlYXJfc29ja19pb2N0bGAgdG8gbWFwIG91dCB0aGUgY2FsbCBwYXRocyBhbmQgYnVpbGQgYSBzdHJhdGVneS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgaW9jdGxzIGlzIGtleSB0byBjcmFmdGluZyBlZmZlY3RpdmUgZnV6emluZyBpbnB1dHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX2NoYW5nZV9mZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz05NT1zdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfdmFsaWRhdGVfbXV0ZXgpO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwNi0gKiBpc19sb29wX2RldmljZSgpIGlzIHRydWUsIHdlIG5lZWQgYSBnbG9iYWwgbG9jayBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA3OiAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKS9fX2xvb3BfY2xyX2ZkKCkgY2FsbHMuXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDgtICovXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NTE1PXN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTI2LS8qXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1Mjc6ICogbG9vcF9jaGFuZ2VfZmQgc3dpdGNoZWQgdGhlIGJhY2tpbmcgc3RvcmUgb2YgYSBsb29wYmFjayBkZXZpY2UgdG9cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyOC0gKiBhIG5ldyBmaWxlLiBUaGlzIGlzIHVzZWZ1bCBmb3Igb3BlcmF0aW5nIHN5c3RlbSBpbnN0YWxsZXJzIHRvIGZyZWUgdXBcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MzMtICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MzQ6c3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTM1LVx0XHRcdCAgdW5zaWduZWQgaW50IGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMTg2PXN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTkxLVx0ICogU2luY2UgbG9faW9jdGwoKSBpcyBjYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkLCBpdCBpcyBwb3NzaWJsZSB0aGF0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTkyOlx0ICogbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGFuZCBsb29wX2Nscl9mZCgpIHJ1biBpbiBwYXJhbGxlbC5cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExOTMtXHQgKlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExOTUtXHQgKiBtYWtlIHN1cmUgdGhhdCBsb29wX3ZhbGlkYXRlX2ZpbGUoKSB3aWxsIGZhaWwgaWYgdGhlIFwmIzM0O3N0cnVjdCBmaWxlXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTk2Olx0ICogd2hpY2ggbG9vcF9jb25maWd1cmUoKS9sb29wX2NoYW5nZV9mZCgpIGZvdW5kIHZpYSBmZ2V0KCkgd2FzIHRoaXNcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExOTctXHQgKiBsb29wIGRldmljZS5cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTA5PXN0YXRpYyBpbnQgbG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MzgtXHRjYXNlIExPT1BfQ0hBTkdFX0ZEOlxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUzOTpcdFx0cmV0dXJuIGxvb3BfY2hhbmdlX2ZkKGxvLCBiZGV2LCBhcmcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0MC1cdGNhc2UgTE9PUF9DTFJfRkQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgdG8gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgRmlsZSBEZXNjcmlwdG9yIE1hbmFnZW1lbnQgaW4gUmVsYXRpb24gdG8gTmV0d29yayBCbG9jayBEZXZpY2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgZmlsZSBkZXNjcmlwdG9ycyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyAoTkJEcykuIEl0IHNlZW1zIGxpa2UgdGhlIGBsb29wX2NoYW5nZV9mZGAgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGZyb20gd2l0aGluIGBsb19pb2N0bGAgd2hlbiB0aGUgYExPT1BfQ0hBTkdFX0ZEYCBvcGVyYXRpb24gaXMgcmVxdWVzdGVkLiBUaGlzIGluZGljYXRlcyBhIGNvbm5lY3Rpb24gb3IgcmUtZGlyZWN0aW9uIHJlbGF0ZWQgdG8gYSBsb29wIGRldmljZSwgbGlrZWx5IHRvIG1vZGlmeSBhbiBleGlzdGluZyBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRpb24uIEZyb20gYW4gTkJEIHBlcnNwZWN0aXZlLCBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgIGlzIHNwZWNpZmljYWxseSBjYWxsZWQgdGhyb3VnaCB0aGUgTkJEIGlvY3Rscy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXJlJiMzOTtzIGEgZmlsZSBkZXNjcmlwdG9yIGNsZWFudXAgb3IgcmVzZXQgb2NjdXJyaW5nIHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgYmxvY2sgZGV2aWNlcy4gVGhlIHJlbGF0aW9uc2hpcCBoZXJlIGlzIHRoYXQgYm90aCB0aGUgbG9vcCBhbmQgTkJEIGNvZGUgY2FuIHdvcmsgd2l0aCBmaWxlIGRlc2NyaXB0b3JzLCBidXQgdGhleSBoYXZlIHRoZWlyIG93biBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4gSXQgc291bmRzIGxpa2UgdGhleSBlYWNoIGhhdmUgYSBkaXN0aW5jdCBtZXRob2Qgb2YgaGFuZGxpbmcgc29ja2V0IGNvbm5lY3Rpb25zLCBhbmQgcG90ZW50aWFsbHkgY2xlYXJpbmcgdGhlbSwgZGVwZW5kaW5nIG9uIHRoZSBvcGVyYXRpb25hbCBjb250ZXh0LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGRlZXBlciBpbnRvIGhvdyBgTE9PUF9DSEFOR0VfRkRgIGFuZCBOQkQmIzM5O3MgaW9jdGwgbWVjaGFuaXNtcyBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfY2xlYXJfc29ja19pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTE1ODA9c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjA5LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjEwOnN0YXRpYyB2b2lkIG5iZF9jbGVhcl9zb2NrX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MTEte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTYzNz1zdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjQ2LVx0Y2FzZSBOQkRfQ0xFQVJfU09DSzpcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY0NzpcdFx0bmJkX2NsZWFyX3NvY2tfaW9jdGwobmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0OC1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQmxvY2sgRGV2aWNlIElPQ1RMczogTG9vcCBhbmQgTkJEKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgdHdvIGludGVyZXN0aW5nIHRhcmdldHMgaGVyZTogdGhlIGxvb3AgYW5kIE5CRCBibG9jayBkZXZpY2UgaW9jdGxzLiBEZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2ssIHByaW1lIGZ1enppbmcgY2FuZGlkYXRlcywgSSYjMzk7ZCBzYXkuIFdlIGNhbiByZWFjaCB0aGVtLCB0aGF0JiMzOTtzIHRoZSBrZXkuIE5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zOiBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfTkJEYC4gR290dGEgbWFrZSBzdXJlIHRoZXkmIzM5O3JlIGVuYWJsZWQgdG8gYWN0dWFsbHkgaGl0IHRoZXNlIGZlYXR1cmVzIGR1cmluZyB0ZXN0aW5nLiBUaW1lIHRvIHZlcmlmeSB0aG9zZSBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9MT09QJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xNDA9Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDMtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTQ0OmNvbmZpZyBCTEtfREVWX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXHR0cmlzdGF0ZSBcJiMzNDtMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNzgtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgwLVx0aW50IFwmIzM0O051bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njk2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQSBGaW5lIFN0YXJ0aW5nIFBvaW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uICYjMzQ7QW5kIE5CRCYjMzQ7IOKAkyBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBjYXN1YWwgZnJhbWluZywgYSBiaXQgbGlrZSBzYXlpbmcgJiMzNDtubyBiaWcgZGVhbC4mIzM0OyBJdCBzdWdnZXN0cyBhIGxldmVsIG9mIGNvbWZvcnQgb3IgYXNzdW1lZCBjb21tb24ga25vd2xlZGdlLiBGcm9tIGEgcHVyZWx5IHNlbWFudGljIHBlcnNwZWN0aXZlLCB0aGF0JiMzOTtzIG5vdCBleGFjdGx5IHJvYnVzdC4gSG93ZXZlciwgYXMgYW4gZXhwZXJ0LCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcHJvY2Vzc2luZyB3aGF0IGNvbnRleHQgd291bGQgbWFrZSB0aGF0IHNob3J0aGFuZCBhcHByb3ByaWF0ZS4gSXMgdGhpcyBpbnRlcm5hbCBkb2N1bWVudGF0aW9uPyBBbiBlbWFpbCB0byBjb2xsZWFndWVzPyBBIGJsb2cgcG9zdCBhaW1lZCBhdCBhIGJlZ2lubmVyIGF1ZGllbmNlPyBUaGUgZnJhbWluZyBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgYWJvdXQgdGhlIGludGVuZGVkIGF1ZGllbmNlIGFuZCBsZXZlbCBvZiBmb3JtYWxpdHkgSSBzaG91bGQgZXhwZWN0LgoKSXQgYWxzbyBzdWdnZXN0cyB0aGF0IHdoYXRldmVyIGZvbGxvd3MgaXMgbGlrZWx5IHRvIGJlLi4uIHdlbGwsIG5vdCBlYXJ0aC1zaGF0dGVyaW5nLiBNYXliZSBhIHNpbXBsZSBleHBsYW5hdGlvbiwgYSBtaW5vciBjbGFyaWZpY2F0aW9uLCBhIHJlbGF0aXZlbHkgYmFzaWMgcmVzdWx0LiBJJiMzOTttIHByaW1lZCB0byBsb29rIGZvciBzb21ldGhpbmcgdGhhdCYjMzk7cyBmb3VuZGF0aW9uYWwsIG9yIHBlcmhhcHMgYSBzdGVwcGluZyBzdG9uZSB0byBzb21ldGhpbmcgbW9yZSBjb21wbGV4LiBJdCYjMzk7cyBzZXR0aW5nIGFuIGV4cGVjdGF0aW9uIGZvciBtZSwgYW5kIEkga25vdyBmcm9tIG15IGV4cGVyaWVuY2UgdGhhdCBtYW5hZ2luZyBleHBlY3RhdGlvbnMgaXMgYSBjcml0aWNhbCBmaXJzdCBzdGVwLiBOb3csIEkgaGF2ZSB0byBzZWUgd2hhdCB0aGlzICYjMzQ7TkJEJiMzNDsgYWN0dWFsbHkgKmlzKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTkJEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOgoKKipEaWdnaW5nIGludG8gUG90ZW50aWFsIE5CRCBTb2NrZXQgQmVoYXZpb3IqKgoKUmlnaHQsIG15IG1lbnRhbCByYWRhciBpcyBwaW5naW5nIG9uIGEgY291cGxlIG9mIGludGVyZXN0aW5nIHN5bWJvbHM6IGBsb29wX2NoYW5nZV9mZGAgYW5kIGBuYmRfY2xlYXJfc29ja19pb2N0bGAuIFRob3NlIHNlZW0gbGlrZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIChOQkQpIHNldHVwLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGZpbGUgZGVzY3JpcHRvciBtYW5pcHVsYXRpb24gYW5kIHNvY2tldCBpbnRlcmFjdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlPyYjMzQ7IEkmIzM5O20gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgYG5iZF9jbGVhcl9zb2NrX2lvY3RsYC4gSG1tbSwgdGhhdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLi4uIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHdvbmRlciBpZiBpdCYjMzk7cyBiZWluZyBhZ2dyZXNzaXZlbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIElmIGl0IGlzLCB0cmFjaW5nIGl0cyBsb2dpYyB3aWxsIGJlIG1vcmUgaW52b2x2ZWQuIFRoZSBiZXN0IG1vdmUgaXMgdG8ganVtcCBpbnRvIHRoZSBgbmJkLmNgIGZpbGUgaXRzZWxmIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRpbWUgdG8gdmVyaWZ5IGlmIG15IGh1bmNoIGFib3V0IGlubGluaW5nIGlzIGNvcnJlY3QgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYG5iZF9jbGVhcl9zb2NrX2lvY3RsYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjEwOlx0c3RhdGljIHZvaWQgbmJkX2NsZWFyX3NvY2tfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbjE2MTE6XHR7XG4xNjEyOlx0XHRuYmRfY2xlYXJfc29jayhuYmQpO1xuMTYxMzpcdFx0ZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobmJkLVx1MDAzZWRpc2spO1xuMTYxNDpcdFx0bmJkX2JkZXZfcmVzZXQobmJkKTtcbjE2MTU6XHRcdC8qXG4xNjE2Olx0XHQgKiBEcm9wIHRoZSBwYXJ0aXRpb25zIG9mIHRoZSBkaXNjb25uZWN0ZWQgZGV2aWNlIG9uIHRoZSBuZXh0IG9wZW4uIFRoZXlcbjE2MTc6XHRcdCAqIGNhbiBleGlzdCBldmVuIHdpdGggbWF4X3BhcnQgemVybyBhcyB0aGV5IG1heSBoYXZlIGJlZW4gYWRkZWQgbWFudWFsbHlcbjE2MTg6XHRcdCAqIHdpdGggQkxLUEcuIERyb3BwaW5nIHRoZW0gaGVyZSBpcyBub3QgcG9zc2libGUgYXMgdGhhdCBuZWVkc1xuMTYxOTpcdFx0ICogb3Blbl9tdXRleCwgd2hpY2ggbmJkX29wZW4oKSBhY3F1aXJlcyB1bmRlciBjb25maWdfbG9jay5cbjE2MjA6XHRcdCAqL1xuMTYyMTpcdFx0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXHUwMDI2bmJkLVx1MDAzZWRpc2stXHUwMDNlc3RhdGUpO1xuMTYyMjpcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX0NPTkZJR19SRUYsXG4xNjIzOlx0XHRcdFx0ICAgICAgIFx1MDAyNm5iZC1cdTAwM2Vjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4xNjI0Olx0XHRcdG5iZF9jb25maWdfcHV0KG5iZCk7XG4xNjI1Olx0fVxuMTYyNjpcdFxuMTYyNzpcdHN0YXRpYyB2b2lkIG5iZF9zZXRfY21kX3RpbWVvdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdTY0IHRpbWVvdXQpXG4xNjI4Olx0e1xuMTYyOTpcdFx0bmJkLVx1MDAzZXRhZ19zZXQudGltZW91dCA9IHRpbWVvdXQgKiBIWjtcbjE2MzA6XHRcdGlmICh0aW1lb3V0KVxuMTYzMTpcdFx0XHRibGtfcXVldWVfcnFfdGltZW91dChuYmQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgdGltZW91dCAqIEhaKTtcbjE2MzI6XHRcdGVsc2VcbjE2MzM6XHRcdFx0YmxrX3F1ZXVlX3JxX3RpbWVvdXQobmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIDMwICogSFopO1xuMTYzNDpcdH1cbjE2MzU6XHRcbjE2MzY6XHQvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cbjE2Mzc6XHRzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXG4xNjM4Olx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbjE2Mzk6XHR7XG4xNjQwOlx0XHRzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLVx1MDAzZWNvbmZpZztcbjE2NDE6XHRcdGxvZmZfdCBieXRlc2l6ZTtcbjE2NDI6XHRcbjE2NDM6XHRcdHN3aXRjaCAoY21kKSB7XG4xNjQ0Olx0XHRjYXNlIE5CRF9ESVNDT05ORUNUOlxuMTY0NTpcdFx0XHRyZXR1cm4gbmJkX2Rpc2Nvbm5lY3QobmJkKTtcbjE2NDY6XHRcdGNhc2UgTkJEX0NMRUFSX1NPQ0s6XG4xNjQ3Olx0XHRcdG5iZF9jbGVhcl9zb2NrX2lvY3RsKG5iZCk7XG4xNjQ4Olx0XHRcdHJldHVybiAwO1xuMTY0OTpcdFx0Y2FzZSBOQkRfU0VUX1NPQ0s6XG4xNjUwOlx0XHRcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xuMTY1MTpcdFx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XG4xNjUyOlx0XHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIGFyZyk7XG4xNjUzOlx0XHRjYXNlIE5CRF9TRVRfU0laRTpcbjE2NTQ6XHRcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSk7XG4xNjU1Olx0XHRjYXNlIE5CRF9TRVRfU0laRV9CTE9DS1M6XG4xNjU2Olx0XHRcdGlmIChjaGVja19zaGxfb3ZlcmZsb3coYXJnLCBjb25maWctXHUwMDNlYmxrc2l6ZV9iaXRzLCBcdTAwMjZieXRlc2l6ZSkpXG4xNjU3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNjU4Olx0XHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7XG4xNjU5Olx0XHRjYXNlIE5CRF9TRVRfVElNRU9VVDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI2MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU29ja2V0IENsZWFyaW5nIElPQ1RMIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBgc3RhdGljYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnIOKAkyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIG9ubHkgd2l0aGluIHRoZSBtb2R1bGUuIEFuZCB0aGUgY29tcGlsZXIgKm1pZ2h0KiBiZSBpbmxpbmluZyBpdC4gVGhhdCBtZWFucyB0cnlpbmcgdG8gdHJhY2UgaXQgZGlyZWN0bHkgaXMgcHJvYmFibHkgbGVzcyBmcnVpdGZ1bCB0aGFuIGxvb2tpbmcgaGlnaGVyIHVwIHRoZSBjYWxsIHN0YWNrLCBhdCBhIGJyb2FkZXIgZW50cnkgcG9pbnQuIFBlcmhhcHMgSSBzaG91bGQgc2hpZnQgbXkgZm9jdXMuIFRoaW5raW5nIGFib3V0IGl0LCBgX19uYmRfaW9jdGxgIHNlZW1zIGxpa2UgYSBtb3JlIHByb21pc2luZyBzeW1ib2wgdG8gZXhhbWluZSwgb3IgZXZlbiB0aGUgZXhwb3NlZCBmdW5jdGlvbiBgbmJkX2lvY3RsYC4gTGV0JiMzOTtzIGp1c3QgY2hlY2sgb3V0IGBuYmRfaW9jdGxgIGFuZCBzZWUgd2hhdCB0aGF0IGdldHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTE2Mjc9c3RhdGljIHZvaWQgbmJkX3NldF9jbWRfdGltZW91dChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1NjQgdGltZW91dClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzYtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBjb25maWdfbG9jayBoZWxkICovXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Mzc6c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjM4LVx0XHQgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgzLVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjg0OnN0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4NS1cdFx0ICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDYtXHQgICAgKGNtZCA9PSBOQkRfRElTQ09OTkVDVCB8fCBjbWQgPT0gTkJEX0NMRUFSX1NPQ0spKVxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzA3Olx0XHRlcnJvciA9IF9fbmJkX2lvY3RsKGJkZXYsIG5iZCwgY21kLCBhcmcpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNzA4LVx0ZWxzZVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTUtXHQucmVsZWFzZSA9XHRuYmRfcmVsZWFzZSxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgxNjpcdC5pb2N0bCA9XHRuYmRfaW9jdGwsXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4MTc6XHQuY29tcGF0X2lvY3RsID1cdG5iZF9pb2N0bCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgxOC1cdC5mcmVlX2Rpc2sgPVx0bmJkX2ZyZWVfZGlzayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIE1vZHVsZSYjMzk7cyBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBtb2R1bGUgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG5iZF9pb2N0bGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGludGVyYWN0aW9ucywgdGhlIGdhdGV3YXkgaWYgeW91IHdpbGwuIEkmIzM5O20gc2VlaW5nIGEgbG9vcCBzdHJ1Y3R1cmUgYW5kIHdpdGhpbiB0aGF0IGlzIGBsb29wX2NoYW5nZV9mZGAuIEl0JiMzOTtzIGRlZmluZWQgYXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGl0JiMzOTtzIGEgcmVsYXRpdmVseSBsYXJnZSBmdW5jdGlvbi4gQmVjYXVzZSBvZiBpdHMgc2l6ZSwgSSYjMzk7bSB3YWdlcmluZyB0aGF0IHRoZSBjb21waWxlciBtaWdodCBub3QgYmUgaW5saW5pbmcgaXQsIHdoaWNoIGNvdWxkIGltcGFjdCBwZXJmb3JtYW5jZSBpZiBpdCYjMzk7cyBjYWxsZWQgZnJlcXVlbnRseS4gSG93ZXZlciwgaXQgc2VlbXMgdGhhdCBgbG9faW9jdGxgIGlzIHRoZSAqYWN0dWFsKiBlbnRyeSBwb2ludC4gSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgc2l6ZSBvZiBgbG9vcF9jaGFuZ2VfZmRgLiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIGJldHRlciBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgb3Igbm90IHRvIGJlIGNvbmNlcm5lZCBhYm91dCBwb3RlbnRpYWwgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIGZ1bmN0aW9uIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MzQ6XHRzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gNTM1Olx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgYXJnKVxuIDUzNjpcdHtcbiA1Mzc6XHRcdHN0cnVjdCBmaWxlICpmaWxlID0gZmdldChhcmcpO1xuIDUzODpcdFx0c3RydWN0IGZpbGUgKm9sZF9maWxlO1xuIDUzOTpcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuIDU0MDpcdFx0aW50IGVycm9yO1xuIDU0MTpcdFx0Ym9vbCBpc19sb29wO1xuIDU0MjpcdFxuIDU0MzpcdFx0aWYgKCFmaWxlKVxuIDU0NDpcdFx0XHRyZXR1cm4gLUVCQURGO1xuIDU0NTpcdFxuIDU0NjpcdFx0ZXJyb3IgPSBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShmaWxlKTtcbiA1NDc6XHRcdGlmIChlcnJvcikge1xuIDU0ODpcdFx0XHRmcHV0KGZpbGUpO1xuIDU0OTpcdFx0XHRyZXR1cm4gZXJyb3I7XG4gNTUwOlx0XHR9XG4gNTUxOlx0XG4gNTUyOlx0XHQvKiBzdXBwcmVzcyB1ZXZlbnRzIHdoaWxlIHJlY29uZmlndXJpbmcgdGhlIGRldmljZSAqL1xuIDU1MzpcdFx0ZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGlza190b19kZXYobG8tXHUwMDNlbG9fZGlzayksIDEpO1xuIDU1NDpcdFxuIDU1NTpcdFx0aXNfbG9vcCA9IGlzX2xvb3BfZGV2aWNlKGZpbGUpO1xuIDU1NjpcdFx0ZXJyb3IgPSBsb29wX2dsb2JhbF9sb2NrX2tpbGxhYmxlKGxvLCBpc19sb29wKTtcbiA1NTc6XHRcdGlmIChlcnJvcilcbiA1NTg6XHRcdFx0Z290byBvdXRfcHV0ZjtcbiA1NTk6XHRcdGVycm9yID0gLUVOWElPO1xuIDU2MDpcdFx0aWYgKGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kKVxuIDU2MTpcdFx0XHRnb3RvIG91dF9lcnI7XG4gNTYyOlx0XG4gNTYzOlx0XHQvKiB0aGUgbG9vcCBkZXZpY2UgaGFzIHRvIGJlIHJlYWQtb25seSAqL1xuIDU2NDpcdFx0ZXJyb3IgPSAtRUlOVkFMO1xuIDU2NTpcdFx0aWYgKCEobG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2IExPX0ZMQUdTX1JFQURfT05MWSkpXG4gNTY2Olx0XHRcdGdvdG8gb3V0X2VycjtcbiA1Njc6XHRcbiA1Njg6XHRcdGVycm9yID0gbG9vcF92YWxpZGF0ZV9maWxlKGZpbGUsIGJkZXYpO1xuIDU2OTpcdFx0aWYgKGVycm9yKVxuIDU3MDpcdFx0XHRnb3RvIG91dF9lcnI7XG4gNTcxOlx0XG4gNTcyOlx0XHRvbGRfZmlsZSA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiA1NzM6XHRcbiA1NzQ6XHRcdGVycm9yID0gLUVJTlZBTDtcbiA1NzU6XHRcbiA1NzY6XHRcdC8qIHNpemUgb2YgdGhlIG5ldyBiYWNraW5nIHN0b3JlIG5lZWRzIHRvIGJlIHRoZSBzYW1lICovXG4gNTc3Olx0XHRpZiAobG9fY2FsY3VsYXRlX3NpemUobG8sIGZpbGUpICE9IGxvX2NhbGN1bGF0ZV9zaXplKGxvLCBvbGRfZmlsZSkpXG4gNTc4Olx0XHRcdGdvdG8gb3V0X2VycjtcbiA1Nzk6XHRcbiA1ODA6XHRcdC8qXG4gNTgxOlx0XHQgKiBXZSBtaWdodCBzd2l0Y2ggdG8gZGlyZWN0IEkvTyBtb2RlIGZvciB0aGUgbG9vcCBkZXZpY2UsIHdyaXRlIGJhY2tcbiA1ODI6XHRcdCAqIGFsbCBkaXJ0eSBkYXRhIHRoZSBwYWdlIGNhY2hlIG5vdyB0aGF0IHNvIHRoYXQgdGhlIGluZGl2aWR1YWwgSS9PXG4gNTgzOlx0XHQgKiBvcGVyYXRpb25zIGRvbiYjMzk7dCBoYXZlIHRvIGRvIHRoYXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NDQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGtlcm5lbCBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGZ1enppbmcgc3RyYXRlZ3kuIFRoZSBmdW5jdGlvbiBgbG9vcF9jaGFuZ2VfZmRgIGlzIHRvbyBiaWcgdG8gYmUgaW5saW5lZCwgc28gdGhhdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmb2N1c2VkIGZ1enppbmcsIGJ1dCBgbG9faW9jdGxgIGlzIGZpbmUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4KClRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBtYWtpbmcgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMgZGVlcCBpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFsdGVyaW5nIGhvdyBwYXJ0aXRpb25zIGFyZSByZS1yZWFkIHdoZW4gdGhlIGJhY2tpbmcgZmlsZSBjaGFuZ2VzIGZvciBsb29wIGRldmljZXMgYW5kIGhvdyBwYXJ0aXRpb25zIGFyZSBkcm9wcGVkIHdoZW4gYW4gTkJEIGRpc2Nvbm5lY3QgaGFwcGVucy4gQm90aCBvZiB0aGVzZSBiZWhhdmlvcnMgYXJlIHRyaWdnZXJlZCBieSBpb2N0bHMgb24gYmxvY2sgZGV2aWNlcywgYm90aCBsb29wIGFuZCBOQkQgZGV2aWNlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZvY3VzIG9uIHRoZXNlIGFyZWFzLgoKVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgYEJMS19ERVZfTE9PUGAgYW5kIGBCTEtfREVWX05CRGAsIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGZvciBidWlsZCBjb25maWd1cmF0aW9ucy4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHNvbWV0aGluZyBhYm91dCBgbG9vcF9jaGFuZ2VfZmRgLiBJcyBpdCBzdGF0aWM/IFllcywgaXQgaXMuIFRoYXQmIzM5O3MgYSBnb29kIHRoaW5nIHRvIGJlIGF3YXJlIG9mLiBCZWNhdXNlIGl0JiMzOTtzIHN0YXRpYywgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSBpdCBvciBvcHRpbWl6ZSBpdCBhd2F5LCB3aGljaCBjb3VsZCBhZmZlY3QgaXRzIHN5bWJvbCBhZGRyZXNzLiBJdCYjMzk7cyBwcm9iYWJseSBiZXR0ZXIgdG8gZm9jdXMgb24gdGhlIGBsb19pb2N0bGAgZnVuY3Rpb24gaW5zdGVhZCwgYXMgdGhhdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIHRoYXQgc2VlbXMgbW9yZSByZWxpYWJsZSBmb3IgZGVidWdnaW5nIGFuZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb19pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMTg2PXN0YXRpYyBpbnQgbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTkwLVx0LypcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExOTE6XHQgKiBTaW5jZSBsb19pb2N0bCgpIGlzIGNhbGxlZCB3aXRob3V0IGxvY2tzIGhlbGQsIGl0IGlzIHBvc3NpYmxlIHRoYXRcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExOTItXHQgKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkgYW5kIGxvb3BfY2xyX2ZkKCkgcnVuIGluIHBhcmFsbGVsLlxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0ODc9c3RhdGljIGludCBsb19zaW1wbGVfaW9jdGwoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTA4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUwOTpzdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MTAtXHR1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNjczPXN0YXRpYyBpbnQgbG9fY29tcGF0X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNjk4LVx0Y2FzZSBMT09QX1NFVF9ESVJFQ1RfSU86XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNjk5Olx0XHRlcnIgPSBsb19pb2N0bChiZGV2LCBtb2RlLCBjbWQsIGFyZyk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzAwLVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNzYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzYzLVx0LnJlbGVhc2UgPVx0bG9fcmVsZWFzZSxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3NjQ6XHQuaW9jdGwgPVx0bG9faW9jdGwsXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzY1LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MjAKCQkJCQkJCW91dHB1dDogMTA1CgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJb2N0bCBGdW5jdGlvbiBDYWxscyBhbmQgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBgaW9jdGxgIGNhbGxzLCBzcGVjaWZpY2FsbHkgYGxvX2lvY3RsYCBhbmQgYG5iZF9pb2N0bGAuIEkga25vdyB0aGV5JiMzOTtyZSBib3RoIGRlY2xhcmVkIGFzIHN0YXRpYywgYnV0IHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIHRoZSBgLmlvY3RsYCBmaWVsZCBpbiBgbG9fZm9wc2AgYW5kIGBuYmRfZm9wc2AsIHJlc3BlY3RpdmVseS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCwgd2hpY2ggbWFrZXMgdGhlbSBnb29kIGZvY3VzIHBvaW50cyBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLgoKTGV0IG1lIHNlZS4uLiBJIHNob3VsZCBjaGVjayBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBaCwgeWVzLCBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfTkJEYC4gQW5kIGxldCYjMzk7cyBub3QgZm9yZ2V0IHRoZSBkZXBlbmRlbmNpZXMuIGBCTEtfREVWX0xPT1BgIGRlcGVuZHMgb24gYEJMT0NLYCwgYW5kIHNvIGRvZXMgYEJMS19ERVZfTkJEYC4gTm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBTdGFuZGFyZCBzdHVmZi4KCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIHBhdGNoIGlzIG1lc3Npbmcgd2l0aCBob3cgcGFydGl0aW9uIHNjYW5uaW5nIHdvcmtzIGZvciBsb29wIGFuZCBOQkQgYmxvY2sgZGV2aWNlcywgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGJhY2tpbmcgZmlsZSBjaGFuZ2VzIG9yIGR1cmluZyBkaXNjb25uZWN0IG9wZXJhdGlvbnMuIFRoZSBmdW5jdGlvbmFsaXR5IGJlaGluZCB0aGVzZSBjaGFuZ2VzIGlzIGludm9rZWQgdGhyb3VnaCB0aGVzZSBibG9jayBkZXZpY2UgaW9jdGxzIOKAkyBgTE9PUF9DSEFOR0VfRkRgIGFuZCBgTkJEX0NMRUFSX1NPQ0tgLiBUaGlzIGlzIGltcG9ydGFudCBjb250ZXh0IGZvciBmb3JtdWxhdGluZyB0aGUgcmlnaHQgcmVzcG9uc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb19pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFydGl0aW9uIHNjYW5uaW5nIGxvZ2ljIGZvciBsb29wIGFuZCBuYmQgYmxvY2sgZGV2aWNlcyBkdXJpbmcgYmFja2luZyBmaWxlIGNoYW5nZSBhbmQgZGlzY29ubmVjdCBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIHZpYSBibG9jayBkZXZpY2UgaW9jdGxzIChMT09QX0NIQU5HRV9GRCBhbmQgTkJEX0NMRUFSX1NPQ0spLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb19pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFydGl0aW9uIHNjYW5uaW5nIGxvZ2ljIGZvciBsb29wIGFuZCBuYmQgYmxvY2sgZGV2aWNlcyBkdXJpbmcgYmFja2luZyBmaWxlIGNoYW5nZSBhbmQgZGlzY29ubmVjdCBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIHZpYSBibG9jayBkZXZpY2UgaW9jdGxzIChMT09QX0NIQU5HRV9GRCBhbmQgTkJEX0NMRUFSX1NPQ0spLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDc6MTMuMDIxNzAzNzU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MjQ5Mzc1NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb19pb2N0bFwiLFxuICAgIFwibmJkX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFydGl0aW9uIHNjYW5uaW5nIGxvZ2ljIGZvciBsb29wIGFuZCBuYmQgYmxvY2sgZGV2aWNlcyBkdXJpbmcgYmFja2luZyBmaWxlIGNoYW5nZSBhbmQgZGlzY29ubmVjdCBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIHZpYSBibG9jayBkZXZpY2UgaW9jdGxzIChMT09QX0NIQU5HRV9GRCBhbmQgTkJEX0NMRUFSX1NPQ0spLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0NzoxMy4wMjE3MDkyNTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDM5NDY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEwMmQ1YWI1NjM5ZmZhYzcwZTQxMDBmNzdhMmU1NTE5MWE3N2U4ODdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAxMTo0NzoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuaW5kZXggMWZhZWNlZjMzMDA5Mi4uNDE2YTljNjUxZjk3NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuQEAgLTUzOCw3ICs1MzgsNiBAQCBzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuIFxcdHN0cnVjdCBmaWxlICpvbGRfZmlsZTtcXG4gXFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xcbiBcXHRpbnQgZXJyb3I7XFxuLVxcdGJvb2wgcGFydHNjYW47XFxuIFxcdGJvb2wgaXNfbG9vcDtcXG4gXFxuIFxcdGlmICghZmlsZSlcXG5AQCAtNTkyLDcgKzU5MSw2IEBAIHN0YXRpYyBpbnQgbG9vcF9jaGFuZ2VfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcXG4gXFx0bG9vcF9hc3NpZ25fYmFja2luZ19maWxlKGxvLCBmaWxlKTtcXG4gXFx0bG9vcF91cGRhdGVfZGlvKGxvKTtcXG4gXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xcbi1cXHRwYXJ0c2NhbiA9IGxvLVxcdTAwM2Vsb19mbGFncyBcXHUwMDI2IExPX0ZMQUdTX1BBUlRTQ0FOO1xcbiBcXHRsb29wX2dsb2JhbF91bmxvY2sobG8sIGlzX2xvb3ApO1xcbiBcXG4gXFx0LypcXG5AQCAtNjEwLDggKzYwOCwxMiBAQCBzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuIFxcdCAqL1xcbiBcXHRmcHV0KG9sZF9maWxlKTtcXG4gXFx0ZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGlza190b19kZXYobG8tXFx1MDAzZWxvX2Rpc2spLCAwKTtcXG4tXFx0aWYgKHBhcnRzY2FuKVxcbi1cXHRcXHRsb29wX3JlcmVhZF9wYXJ0aXRpb25zKGxvKTtcXG4rXFx0LypcXG4rXFx0ICogUmVzY2FuIG9yLCB3aXRob3V0IExPX0ZMQUdTX1BBUlRTQ0FOLCBqdXN0IGRyb3AgdGhlIHBhcnRpdGlvbnMgb2YgdGhlXFxuK1xcdCAqIG9sZCBiYWNraW5nIGZpbGUuIFRoZXkgY2FuIGV4aXN0IHdpdGhvdXQgTE9fRkxBR1NfUEFSVFNDQU4gYXMgdGhleSBtYXlcXG4rXFx0ICogaGF2ZSBiZWVuIGFkZGVkIG1hbnVhbGx5IHdpdGggQkxLUEcuXFxuK1xcdCAqL1xcbitcXHRsb29wX3JlcmVhZF9wYXJ0aXRpb25zKGxvKTtcXG4gXFxuIFxcdGVycm9yID0gMDtcXG4gZG9uZTpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcXG5pbmRleCA4ZjEwNzYyZTkwZWY3Li5jZGFmZTlkMzkzNjk4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXFxuQEAgLTE2MTIsNiArMTYxMiwxMyBAQCBzdGF0aWMgdm9pZCBuYmRfY2xlYXJfc29ja19pb2N0bChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbiBcXHRuYmRfY2xlYXJfc29jayhuYmQpO1xcbiBcXHRkaXNrX2ZvcmNlX21lZGlhX2NoYW5nZShuYmQtXFx1MDAzZWRpc2spO1xcbiBcXHRuYmRfYmRldl9yZXNldChuYmQpO1xcbitcXHQvKlxcbitcXHQgKiBEcm9wIHRoZSBwYXJ0aXRpb25zIG9mIHRoZSBkaXNjb25uZWN0ZWQgZGV2aWNlIG9uIHRoZSBuZXh0IG9wZW4uIFRoZXlcXG4rXFx0ICogY2FuIGV4aXN0IGV2ZW4gd2l0aCBtYXhfcGFydCB6ZXJvIGFzIHRoZXkgbWF5IGhhdmUgYmVlbiBhZGRlZCBtYW51YWxseVxcbitcXHQgKiB3aXRoIEJMS1BHLiBEcm9wcGluZyB0aGVtIGhlcmUgaXMgbm90IHBvc3NpYmxlIGFzIHRoYXQgbmVlZHNcXG4rXFx0ICogb3Blbl9tdXRleCwgd2hpY2ggbmJkX29wZW4oKSBhY3F1aXJlcyB1bmRlciBjb25maWdfbG9jay5cXG4rXFx0ICovXFxuK1xcdHNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sIFxcdTAwMjZuYmQtXFx1MDAzZWRpc2stXFx1MDAzZXN0YXRlKTtcXG4gXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX0NPTkZJR19SRUYsXFxuIFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bmJkLVxcdTAwM2Vjb25maWctXFx1MDAzZXJ1bnRpbWVfZmxhZ3MpKVxcbiBcXHRcXHRuYmRfY29uZmlnX3B1dChuYmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0NzoxMy40NzcwOTkxMzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODY3OTM5NzI0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTEtfREVWX05CRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvX2lvY3RsXCIsXG4gICAgXCJuYmRfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJ0aXRpb24gc2Nhbm5pbmcgbG9naWMgZm9yIGxvb3AgYW5kIG5iZCBibG9jayBkZXZpY2VzIGR1cmluZyBiYWNraW5nIGZpbGUgY2hhbmdlIGFuZCBkaXNjb25uZWN0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSByZWFjaGFibGUgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgKExPT1BfQ0hBTkdFX0ZEIGFuZCBOQkRfQ0xFQVJfU09DSykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEwMmQ1YWI1NjM5ZmZhYzcwZTQxMDBmNzdhMmU1NTE5MWE3N2U4ODdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDExOjQ3OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggMWZhZWNlZjMzMDA5Mi4uNDE2YTljNjUxZjk3NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTUzOCw3ICs1MzgsNiBAQCBzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gXHRzdHJ1Y3QgZmlsZSAqb2xkX2ZpbGU7XG4gXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4gXHRpbnQgZXJyb3I7XG4tXHRib29sIHBhcnRzY2FuO1xuIFx0Ym9vbCBpc19sb29wO1xuIFxuIFx0aWYgKCFmaWxlKVxuQEAgLTU5Miw3ICs1OTEsNiBAQCBzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4gXHRsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUobG8sIGZpbGUpO1xuIFx0bG9vcF91cGRhdGVfZGlvKGxvKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuLVx0cGFydHNjYW4gPSBsby1cdTAwM2Vsb19mbGFncyBcdTAwMjYgTE9fRkxBR1NfUEFSVFNDQU47XG4gXHRsb29wX2dsb2JhbF91bmxvY2sobG8sIGlzX2xvb3ApO1xuIFxuIFx0LypcbkBAIC02MTAsOCArNjA4LDEyIEBAIHN0YXRpYyBpbnQgbG9vcF9jaGFuZ2VfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbiBcdCAqL1xuIFx0ZnB1dChvbGRfZmlsZSk7XG4gXHRkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKSwgMCk7XG4tXHRpZiAocGFydHNjYW4pXG4tXHRcdGxvb3BfcmVyZWFkX3BhcnRpdGlvbnMobG8pO1xuK1x0LypcbitcdCAqIFJlc2NhbiBvciwgd2l0aG91dCBMT19GTEFHU19QQVJUU0NBTiwganVzdCBkcm9wIHRoZSBwYXJ0aXRpb25zIG9mIHRoZVxuK1x0ICogb2xkIGJhY2tpbmcgZmlsZS4gVGhleSBjYW4gZXhpc3Qgd2l0aG91dCBMT19GTEFHU19QQVJUU0NBTiBhcyB0aGV5IG1heVxuK1x0ICogaGF2ZSBiZWVuIGFkZGVkIG1hbnVhbGx5IHdpdGggQkxLUEcuXG4rXHQgKi9cbitcdGxvb3BfcmVyZWFkX3BhcnRpdGlvbnMobG8pO1xuIFxuIFx0ZXJyb3IgPSAwO1xuIGRvbmU6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcbmluZGV4IDhmMTA3NjJlOTBlZjcuLmNkYWZlOWQzOTM2OTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMTYxMiw2ICsxNjEyLDEzIEBAIHN0YXRpYyB2b2lkIG5iZF9jbGVhcl9zb2NrX2lvY3RsKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4gXHRuYmRfY2xlYXJfc29jayhuYmQpO1xuIFx0ZGlza19mb3JjZV9tZWRpYV9jaGFuZ2UobmJkLVx1MDAzZWRpc2spO1xuIFx0bmJkX2JkZXZfcmVzZXQobmJkKTtcbitcdC8qXG4rXHQgKiBEcm9wIHRoZSBwYXJ0aXRpb25zIG9mIHRoZSBkaXNjb25uZWN0ZWQgZGV2aWNlIG9uIHRoZSBuZXh0IG9wZW4uIFRoZXlcbitcdCAqIGNhbiBleGlzdCBldmVuIHdpdGggbWF4X3BhcnQgemVybyBhcyB0aGV5IG1heSBoYXZlIGJlZW4gYWRkZWQgbWFudWFsbHlcbitcdCAqIHdpdGggQkxLUEcuIERyb3BwaW5nIHRoZW0gaGVyZSBpcyBub3QgcG9zc2libGUgYXMgdGhhdCBuZWVkc1xuK1x0ICogb3Blbl9tdXRleCwgd2hpY2ggbmJkX29wZW4oKSBhY3F1aXJlcyB1bmRlciBjb25maWdfbG9jay5cbitcdCAqL1xuK1x0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXHUwMDI2bmJkLVx1MDAzZWRpc2stXHUwMDNlc3RhdGUpO1xuIFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX0NPTkZJR19SRUYsXG4gXHRcdFx0ICAgICAgIFx1MDAyNm5iZC1cdTAwM2Vjb25maWctXHUwMDNlcnVudGltZV9mbGFncykpXG4gXHRcdG5iZF9jb25maWdfcHV0KG5iZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0NzoxMy40NzcxMDA3NDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM2NzkyNDE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQmxvY2sgRGV2aWNlIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCBzb21lIHJlY2VudCBjaGFuZ2VzIGluIHRoZSBibG9jayBkZXZpY2UgZHJpdmVycywgc3BlY2lmaWNhbGx5IGBsb29wLmNgIGFuZCBgbmJkLmNgLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBsb29wX2NoYW5nZV9mZGAgd2l0aGluIGBsb29wLmNgIHdoZXJlIGBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKGxvKWAgaXMgbm93IGFsd2F5cyBleGVjdXRlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYHBhcnRzY2FuYCBmbGFnLiBJbnRlcmVzdGluZy4uLiB0aGF0J3MgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZy4gQWxzbywgb3ZlciBpbiBgbmJkLmNgLCB0aGVyZSdzIGEgbmV3IGBzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZuYmQtXHUwMDNlZGlzay1cdTAwM2VzdGF0ZSk7YCBjYWxsIGFkZGVkIHdpdGhpbiBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLiBBbm90aGVyIHBvaW50IG9mIGludGVyZXN0LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBhcmUgZXZlbiByZWFjaGFibGUgYW5kIGlmIHRoZXkgcmVwcmVzZW50IHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0cy4gTGV0J3Mgc2VlLi4uIGBsb29wX2NoYW5nZV9mZGAgYXBwZWFycyB0byBiZSB0cmlnZ2VyZWQgdmlhIHRoZSBgbG9vcF9zZXRfZmRgIG9yIGBsb29wX2NoYW5nZV9mZGAgaW9jdGxzLiBUaGF0IG5hcnJvd3MgZG93biBteSBmb2N1cy4gQW5kIGBuYmRfY2xlYXJfc29ja19pb2N0bGAsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBpcyBjYWxsZWQgdGhyb3VnaCBOQkQgaW9jdGxzLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBJIG5lZWQgdG8gZG8gYSBjb2RlIHNlYXJjaCB0byBpZGVudGlmeSBhbGwgaW5zdGFuY2VzIG9mIGBsb29wX2NoYW5nZV9mZGAgYW5kIGBuYmRfY2xlYXJfc29ja19pb2N0bGAgdG8gbWFwIG91dCB0aGUgY2FsbCBwYXRocyBhbmQgYnVpbGQgYSBzdHJhdGVneS4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgaW9jdGxzIGlzIGtleSB0byBjcmFmdGluZyBlZmZlY3RpdmUgZnV6emluZyBpbnB1dHMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDc6NDEuODQ1MDI4NTE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDAyNTI4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF9jaGFuZ2VfZmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9OTU9c3RhdGljIERFRklORV9NVVRFWChsb29wX3ZhbGlkYXRlX211dGV4KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwNi0gKiBpc19sb29wX2RldmljZSgpIGlzIHRydWUsIHdlIG5lZWQgYSBnbG9iYWwgbG9jayBmb3Igc2VyaWFsaXppbmcgY29uY3VycmVudFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwNzogKiBsb29wX2NvbmZpZ3VyZSgpL2xvb3BfY2hhbmdlX2ZkKCkvX19sb29wX2Nscl9mZCgpIGNhbGxzLlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTEwOC0gKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTUxNT1zdGF0aWMgaW50IGxvb3BfY2hlY2tfYmFja2luZ19maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTI2LS8qXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NTI3OiAqIGxvb3BfY2hhbmdlX2ZkIHN3aXRjaGVkIHRoZSBiYWNraW5nIHN0b3JlIG9mIGEgbG9vcGJhY2sgZGV2aWNlIHRvXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTI4LSAqIGEgbmV3IGZpbGUuIFRoaXMgaXMgdXNlZnVsIGZvciBvcGVyYXRpbmcgc3lzdGVtIGluc3RhbGxlcnMgdG8gZnJlZSB1cFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTMzLSAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUzNDpzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTM1LVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTExODY9c3RhdGljIGludCBsb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE5MS1cXHQgKiBTaW5jZSBsb19pb2N0bCgpIGlzIGNhbGxlZCB3aXRob3V0IGxvY2tzIGhlbGQsIGl0IGlzIHBvc3NpYmxlIHRoYXRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTkyOlxcdCAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBhbmQgbG9vcF9jbHJfZmQoKSBydW4gaW4gcGFyYWxsZWwuXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE5My1cXHQgKlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE5NS1cXHQgKiBtYWtlIHN1cmUgdGhhdCBsb29wX3ZhbGlkYXRlX2ZpbGUoKSB3aWxsIGZhaWwgaWYgdGhlIFxcXCJzdHJ1Y3QgZmlsZVxcXCJcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTk2OlxcdCAqIHdoaWNoIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBmb3VuZCB2aWEgZmdldCgpIHdhcyB0aGlzXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE5Ny1cXHQgKiBsb29wIGRldmljZS5cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE1MDk9c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTM4LVxcdGNhc2UgTE9PUF9DSEFOR0VfRkQ6XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUzOTpcXHRcXHRyZXR1cm4gbG9vcF9jaGFuZ2VfZmQobG8sIGJkZXYsIGFyZyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTU0MC1cXHRjYXNlIExPT1BfQ0xSX0ZEOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0Nzo0NC4xNDUyODcwMzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzMTU1Mjk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgdG8gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBGaWxlIERlc2NyaXB0b3IgTWFuYWdlbWVudCBpbiBSZWxhdGlvbiB0byBOZXR3b3JrIEJsb2NrIERldmljZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgZmlsZSBkZXNjcmlwdG9ycyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIG5ldHdvcmsgYmxvY2sgZGV2aWNlcyAoTkJEcykuIEl0IHNlZW1zIGxpa2UgdGhlIGBsb29wX2NoYW5nZV9mZGAgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGZyb20gd2l0aGluIGBsb19pb2N0bGAgd2hlbiB0aGUgYExPT1BfQ0hBTkdFX0ZEYCBvcGVyYXRpb24gaXMgcmVxdWVzdGVkLiBUaGlzIGluZGljYXRlcyBhIGNvbm5lY3Rpb24gb3IgcmUtZGlyZWN0aW9uIHJlbGF0ZWQgdG8gYSBsb29wIGRldmljZSwgbGlrZWx5IHRvIG1vZGlmeSBhbiBleGlzdGluZyBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRpb24uIEZyb20gYW4gTkJEIHBlcnNwZWN0aXZlLCBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgIGlzIHNwZWNpZmljYWxseSBjYWxsZWQgdGhyb3VnaCB0aGUgTkJEIGlvY3Rscy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXJlJ3MgYSBmaWxlIGRlc2NyaXB0b3IgY2xlYW51cCBvciByZXNldCBvY2N1cnJpbmcgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBibG9jayBkZXZpY2VzLiBUaGUgcmVsYXRpb25zaGlwIGhlcmUgaXMgdGhhdCBib3RoIHRoZSBsb29wIGFuZCBOQkQgY29kZSBjYW4gd29yayB3aXRoIGZpbGUgZGVzY3JpcHRvcnMsIGJ1dCB0aGV5IGhhdmUgdGhlaXIgb3duIGFzc29jaWF0ZWQgZnVuY3Rpb25zLiBJdCBzb3VuZHMgbGlrZSB0aGV5IGVhY2ggaGF2ZSBhIGRpc3RpbmN0IG1ldGhvZCBvZiBoYW5kbGluZyBzb2NrZXQgY29ubmVjdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBjbGVhcmluZyB0aGVtLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGlvbmFsIGNvbnRleHQuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IGBMT09QX0NIQU5HRV9GRGAgYW5kIE5CRCdzIGlvY3RsIG1lY2hhbmlzbXMgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsJ3MgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc5NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDExOjQ4OjE0LjM3Njg0MjY3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUyMzE3MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9jbGVhcl9zb2NrX2lvY3RsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTU4MD1zdGF0aWMgaW50IG5iZF9zdGFydF9kZXZpY2VfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYwOS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2MTA6c3RhdGljIHZvaWQgbmJkX2NsZWFyX3NvY2tfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MTEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xNjM3PXN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0Ni1cXHRjYXNlIE5CRF9DTEVBUl9TT0NLOlxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY0NzpcXHRcXHRuYmRfY2xlYXJfc29ja19pb2N0bChuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY0OC1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDg6MTYuNTI5MTcwODAzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2NjYxMjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEJsb2NrIERldmljZSBJT0NUTHM6IExvb3AgYW5kIE5CRCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCB0d28gaW50ZXJlc3RpbmcgdGFyZ2V0cyBoZXJlOiB0aGUgbG9vcCBhbmQgTkJEIGJsb2NrIGRldmljZSBpb2N0bHMuIERlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgcHJpbWUgZnV6emluZyBjYW5kaWRhdGVzLCBJJ2Qgc2F5LiBXZSBjYW4gcmVhY2ggdGhlbSwgdGhhdCdzIHRoZSBrZXkuIE5vdywgbGV0J3MganVzdCBjb25maXJtIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnM6IGBCTEtfREVWX0xPT1BgIGFuZCBgQkxLX0RFVl9OQkRgLiBHb3R0YSBtYWtlIHN1cmUgdGhleSdyZSBlbmFibGVkIHRvIGFjdHVhbGx5IGhpdCB0aGVzZSBmZWF0dXJlcyBkdXJpbmcgdGVzdGluZy4gVGltZSB0byB2ZXJpZnkgdGhvc2UgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0ODoxOS43OTU3ODYyNTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MjE5MDQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9MT09QXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xNDA9Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0My1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTQ0OmNvbmZpZyBCTEtfREVWX0xPT1BcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQ1LVxcdHRyaXN0YXRlIFxcXCJMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNzgtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE3OTpjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODAtXFx0aW50IFxcXCJOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0ODoyMS41Nzc5ODE5MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODUyODcyNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIEhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEEgRmluZSBTdGFydGluZyBQb2ludCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gXCJBbmQgTkJEXCIg4oCTIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGNhc3VhbCBmcmFtaW5nLCBhIGJpdCBsaWtlIHNheWluZyBcIm5vIGJpZyBkZWFsLlwiIEl0IHN1Z2dlc3RzIGEgbGV2ZWwgb2YgY29tZm9ydCBvciBhc3N1bWVkIGNvbW1vbiBrbm93bGVkZ2UuIEZyb20gYSBwdXJlbHkgc2VtYW50aWMgcGVyc3BlY3RpdmUsIHRoYXQncyBub3QgZXhhY3RseSByb2J1c3QuIEhvd2V2ZXIsIGFzIGFuIGV4cGVydCwgSSdtIGFscmVhZHkgbWVudGFsbHkgcHJvY2Vzc2luZyB3aGF0IGNvbnRleHQgd291bGQgbWFrZSB0aGF0IHNob3J0aGFuZCBhcHByb3ByaWF0ZS4gSXMgdGhpcyBpbnRlcm5hbCBkb2N1bWVudGF0aW9uPyBBbiBlbWFpbCB0byBjb2xsZWFndWVzPyBBIGJsb2cgcG9zdCBhaW1lZCBhdCBhIGJlZ2lubmVyIGF1ZGllbmNlPyBUaGUgZnJhbWluZyBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgYWJvdXQgdGhlIGludGVuZGVkIGF1ZGllbmNlIGFuZCBsZXZlbCBvZiBmb3JtYWxpdHkgSSBzaG91bGQgZXhwZWN0LlxuXG5JdCBhbHNvIHN1Z2dlc3RzIHRoYXQgd2hhdGV2ZXIgZm9sbG93cyBpcyBsaWtlbHkgdG8gYmUuLi4gd2VsbCwgbm90IGVhcnRoLXNoYXR0ZXJpbmcuIE1heWJlIGEgc2ltcGxlIGV4cGxhbmF0aW9uLCBhIG1pbm9yIGNsYXJpZmljYXRpb24sIGEgcmVsYXRpdmVseSBiYXNpYyByZXN1bHQuIEknbSBwcmltZWQgdG8gbG9vayBmb3Igc29tZXRoaW5nIHRoYXQncyBmb3VuZGF0aW9uYWwsIG9yIHBlcmhhcHMgYSBzdGVwcGluZyBzdG9uZSB0byBzb21ldGhpbmcgbW9yZSBjb21wbGV4LiBJdCdzIHNldHRpbmcgYW4gZXhwZWN0YXRpb24gZm9yIG1lLCBhbmQgSSBrbm93IGZyb20gbXkgZXhwZXJpZW5jZSB0aGF0IG1hbmFnaW5nIGV4cGVjdGF0aW9ucyBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAuIE5vdywgSSBoYXZlIHRvIHNlZSB3aGF0IHRoaXMgXCJOQkRcIiBhY3R1YWxseSAqaXMqLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njk2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0ODoyNS40MzA4NTcyMTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTgzMjg1MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTkJEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTY6Y29uZmlnIEJMS19ERVZfTkJEXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDg6MjcuMjQ5MTk2OTA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjc4Nzc5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkRpZ2dpbmcgaW50byBQb3RlbnRpYWwgTkJEIFNvY2tldCBCZWhhdmlvcioqXG5cblJpZ2h0LCBteSBtZW50YWwgcmFkYXIgaXMgcGluZ2luZyBvbiBhIGNvdXBsZSBvZiBpbnRlcmVzdGluZyBzeW1ib2xzOiBgbG9vcF9jaGFuZ2VfZmRgIGFuZCBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLiBUaG9zZSBzZWVtIGxpa2Uga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZSAoTkJEKSBzZXR1cCwgcGFydGljdWxhcmx5IGFyb3VuZCBmaWxlIGRlc2NyaXB0b3IgbWFuaXB1bGF0aW9uIGFuZCBzb2NrZXQgaW50ZXJhY3Rpb25zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlP1wiIEknbSBwYXJ0aWN1bGFybHkgY3VyaW91cyBhYm91dCBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLiBIbW1tLCB0aGF0J3MgZGVmaW5lZCBhcyBgc3RhdGljYC4uLiB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3b25kZXIgaWYgaXQncyBiZWluZyBhZ2dyZXNzaXZlbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIElmIGl0IGlzLCB0cmFjaW5nIGl0cyBsb2dpYyB3aWxsIGJlIG1vcmUgaW52b2x2ZWQuIFRoZSBiZXN0IG1vdmUgaXMgdG8ganVtcCBpbnRvIHRoZSBgbmJkLmNgIGZpbGUgaXRzZWxmIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy4gVGltZSB0byB2ZXJpZnkgaWYgbXkgaHVuY2ggYWJvdXQgaW5saW5pbmcgaXMgY29ycmVjdCBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDg6MzEuMzc3MDg4Nzc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MTA6XFx0c3RhdGljIHZvaWQgbmJkX2NsZWFyX3NvY2tfaW9jdGwoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4xNjExOlxcdHtcXG4xNjEyOlxcdFxcdG5iZF9jbGVhcl9zb2NrKG5iZCk7XFxuMTYxMzpcXHRcXHRkaXNrX2ZvcmNlX21lZGlhX2NoYW5nZShuYmQtXFx1MDAzZWRpc2spO1xcbjE2MTQ6XFx0XFx0bmJkX2JkZXZfcmVzZXQobmJkKTtcXG4xNjE1OlxcdFxcdC8qXFxuMTYxNjpcXHRcXHQgKiBEcm9wIHRoZSBwYXJ0aXRpb25zIG9mIHRoZSBkaXNjb25uZWN0ZWQgZGV2aWNlIG9uIHRoZSBuZXh0IG9wZW4uIFRoZXlcXG4xNjE3OlxcdFxcdCAqIGNhbiBleGlzdCBldmVuIHdpdGggbWF4X3BhcnQgemVybyBhcyB0aGV5IG1heSBoYXZlIGJlZW4gYWRkZWQgbWFudWFsbHlcXG4xNjE4OlxcdFxcdCAqIHdpdGggQkxLUEcuIERyb3BwaW5nIHRoZW0gaGVyZSBpcyBub3QgcG9zc2libGUgYXMgdGhhdCBuZWVkc1xcbjE2MTk6XFx0XFx0ICogb3Blbl9tdXRleCwgd2hpY2ggbmJkX29wZW4oKSBhY3F1aXJlcyB1bmRlciBjb25maWdfbG9jay5cXG4xNjIwOlxcdFxcdCAqL1xcbjE2MjE6XFx0XFx0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXFx1MDAyNm5iZC1cXHUwMDNlZGlzay1cXHUwMDNlc3RhdGUpO1xcbjE2MjI6XFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOQkRfUlRfSEFTX0NPTkZJR19SRUYsXFxuMTYyMzpcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNm5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VydW50aW1lX2ZsYWdzKSlcXG4xNjI0OlxcdFxcdFxcdG5iZF9jb25maWdfcHV0KG5iZCk7XFxuMTYyNTpcXHR9XFxuMTYyNjpcXHRcXG4xNjI3OlxcdHN0YXRpYyB2b2lkIG5iZF9zZXRfY21kX3RpbWVvdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdTY0IHRpbWVvdXQpXFxuMTYyODpcXHR7XFxuMTYyOTpcXHRcXHRuYmQtXFx1MDAzZXRhZ19zZXQudGltZW91dCA9IHRpbWVvdXQgKiBIWjtcXG4xNjMwOlxcdFxcdGlmICh0aW1lb3V0KVxcbjE2MzE6XFx0XFx0XFx0YmxrX3F1ZXVlX3JxX3RpbWVvdXQobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgdGltZW91dCAqIEhaKTtcXG4xNjMyOlxcdFxcdGVsc2VcXG4xNjMzOlxcdFxcdFxcdGJsa19xdWV1ZV9ycV90aW1lb3V0KG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIDMwICogSFopO1xcbjE2MzQ6XFx0fVxcbjE2MzU6XFx0XFxuMTYzNjpcXHQvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNvbmZpZ19sb2NrIGhlbGQgKi9cXG4xNjM3OlxcdHN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG4xNjM4OlxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4xNjM5OlxcdHtcXG4xNjQwOlxcdFxcdHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtXFx1MDAzZWNvbmZpZztcXG4xNjQxOlxcdFxcdGxvZmZfdCBieXRlc2l6ZTtcXG4xNjQyOlxcdFxcbjE2NDM6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG4xNjQ0OlxcdFxcdGNhc2UgTkJEX0RJU0NPTk5FQ1Q6XFxuMTY0NTpcXHRcXHRcXHRyZXR1cm4gbmJkX2Rpc2Nvbm5lY3QobmJkKTtcXG4xNjQ2OlxcdFxcdGNhc2UgTkJEX0NMRUFSX1NPQ0s6XFxuMTY0NzpcXHRcXHRcXHRuYmRfY2xlYXJfc29ja19pb2N0bChuYmQpO1xcbjE2NDg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTY0OTpcXHRcXHRjYXNlIE5CRF9TRVRfU09DSzpcXG4xNjUwOlxcdFxcdFxcdHJldHVybiBuYmRfYWRkX3NvY2tldChuYmQsIGFyZywgZmFsc2UpO1xcbjE2NTE6XFx0XFx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XFxuMTY1MjpcXHRcXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVxcdTAwM2VieXRlc2l6ZSwgYXJnKTtcXG4xNjUzOlxcdFxcdGNhc2UgTkJEX1NFVF9TSVpFOlxcbjE2NTQ6XFx0XFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSk7XFxuMTY1NTpcXHRcXHRjYXNlIE5CRF9TRVRfU0laRV9CTE9DS1M6XFxuMTY1NjpcXHRcXHRcXHRpZiAoY2hlY2tfc2hsX292ZXJmbG93KGFyZywgY29uZmlnLVxcdTAwM2VibGtzaXplX2JpdHMsIFxcdTAwMjZieXRlc2l6ZSkpXFxuMTY1NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjU4OlxcdFxcdFxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7XFxuMTY1OTpcXHRcXHRjYXNlIE5CRF9TRVRfVElNRU9VVDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDg6MzEuMzc3MjU0MzA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTY0MTQwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTb2NrZXQgQ2xlYXJpbmcgSU9DVEwgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmJkX2NsZWFyX3NvY2tfaW9jdGxgLCBhbmQgaXQncyBmbGFnZ2VkIGFzIGBzdGF0aWNgLiBSaWdodCBhd2F5LCB0aGF0IHJhaXNlcyBhIGZsYWcg4oCTIGl0J3MgbGlrZWx5IGNhbGxlZCBvbmx5IHdpdGhpbiB0aGUgbW9kdWxlLiBBbmQgdGhlIGNvbXBpbGVyICptaWdodCogYmUgaW5saW5pbmcgaXQuIFRoYXQgbWVhbnMgdHJ5aW5nIHRvIHRyYWNlIGl0IGRpcmVjdGx5IGlzIHByb2JhYmx5IGxlc3MgZnJ1aXRmdWwgdGhhbiBsb29raW5nIGhpZ2hlciB1cCB0aGUgY2FsbCBzdGFjaywgYXQgYSBicm9hZGVyIGVudHJ5IHBvaW50LiBQZXJoYXBzIEkgc2hvdWxkIHNoaWZ0IG15IGZvY3VzLiBUaGlua2luZyBhYm91dCBpdCwgYF9fbmJkX2lvY3RsYCBzZWVtcyBsaWtlIGEgbW9yZSBwcm9taXNpbmcgc3ltYm9sIHRvIGV4YW1pbmUsIG9yIGV2ZW4gdGhlIGV4cG9zZWQgZnVuY3Rpb24gYG5iZF9pb2N0bGAuIExldCdzIGp1c3QgY2hlY2sgb3V0IGBuYmRfaW9jdGxgIGFuZCBzZWUgd2hhdCB0aGF0IGdldHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNjEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDExOjQ4OjM1LjAzMzY3MTA0NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1NTUwMzcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfaW9jdGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xNjI3PXN0YXRpYyB2b2lkIG5iZF9zZXRfY21kX3RpbWVvdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdTY0IHRpbWVvdXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzYtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBjb25maWdfbG9jayBoZWxkICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjM3OnN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzgtXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgzLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY4NDpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjg1LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDYtXFx0ICAgIChjbWQgPT0gTkJEX0RJU0NPTk5FQ1QgfHwgY21kID09IE5CRF9DTEVBUl9TT0NLKSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3MDc6XFx0XFx0ZXJyb3IgPSBfX25iZF9pb2N0bChiZGV2LCBuYmQsIGNtZCwgYXJnKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3MDgtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xODExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODE1LVxcdC5yZWxlYXNlID1cXHRuYmRfcmVsZWFzZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4MTY6XFx0LmlvY3RsID1cXHRuYmRfaW9jdGwsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODE3OlxcdC5jb21wYXRfaW9jdGwgPVxcdG5iZF9pb2N0bCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MTgtXFx0LmZyZWVfZGlzayA9XFx0bmJkX2ZyZWVfZGlzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTE6NDg6MzcuMDg5MTgwODI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzk3NTQzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIE1vZHVsZSdzIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBtb2R1bGUgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYG5iZF9pb2N0bGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIGludGVyYWN0aW9ucywgdGhlIGdhdGV3YXkgaWYgeW91IHdpbGwuIEknbSBzZWVpbmcgYSBsb29wIHN0cnVjdHVyZSBhbmQgd2l0aGluIHRoYXQgaXMgYGxvb3BfY2hhbmdlX2ZkYC4gSXQncyBkZWZpbmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCdzIGEgcmVsYXRpdmVseSBsYXJnZSBmdW5jdGlvbi4gQmVjYXVzZSBvZiBpdHMgc2l6ZSwgSSdtIHdhZ2VyaW5nIHRoYXQgdGhlIGNvbXBpbGVyIG1pZ2h0IG5vdCBiZSBpbmxpbmluZyBpdCwgd2hpY2ggY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlIGlmIGl0J3MgY2FsbGVkIGZyZXF1ZW50bHkuIEhvd2V2ZXIsIGl0IHNlZW1zIHRoYXQgYGxvX2lvY3RsYCBpcyB0aGUgKmFjdHVhbCogZW50cnkgcG9pbnQuIEkgbmVlZCB0byBiZSBzdXJlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgc2l6ZSBvZiBgbG9vcF9jaGFuZ2VfZmRgLiBJdCdsbCBnaXZlIG1lIGEgYmV0dGVyIGluZGljYXRpb24gb2Ygd2hldGhlciBvciBub3QgdG8gYmUgY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggZnVuY3Rpb24gY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo0ODo1MC44ODY3MjY5NTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzNCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUzNDpcXHRzdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuIDUzNTpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBhcmcpXFxuIDUzNjpcXHR7XFxuIDUzNzpcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGZnZXQoYXJnKTtcXG4gNTM4OlxcdFxcdHN0cnVjdCBmaWxlICpvbGRfZmlsZTtcXG4gNTM5OlxcdFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4gNTQwOlxcdFxcdGludCBlcnJvcjtcXG4gNTQxOlxcdFxcdGJvb2wgaXNfbG9vcDtcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0aWYgKCFmaWxlKVxcbiA1NDQ6XFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0ZXJyb3IgPSBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShmaWxlKTtcXG4gNTQ3OlxcdFxcdGlmIChlcnJvcikge1xcbiA1NDg6XFx0XFx0XFx0ZnB1dChmaWxlKTtcXG4gNTQ5OlxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4gNTUwOlxcdFxcdH1cXG4gNTUxOlxcdFxcbiA1NTI6XFx0XFx0Lyogc3VwcHJlc3MgdWV2ZW50cyB3aGlsZSByZWNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UgKi9cXG4gNTUzOlxcdFxcdGRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGRpc2tfdG9fZGV2KGxvLVxcdTAwM2Vsb19kaXNrKSwgMSk7XFxuIDU1NDpcXHRcXG4gNTU1OlxcdFxcdGlzX2xvb3AgPSBpc19sb29wX2RldmljZShmaWxlKTtcXG4gNTU2OlxcdFxcdGVycm9yID0gbG9vcF9nbG9iYWxfbG9ja19raWxsYWJsZShsbywgaXNfbG9vcCk7XFxuIDU1NzpcXHRcXHRpZiAoZXJyb3IpXFxuIDU1ODpcXHRcXHRcXHRnb3RvIG91dF9wdXRmO1xcbiA1NTk6XFx0XFx0ZXJyb3IgPSAtRU5YSU87XFxuIDU2MDpcXHRcXHRpZiAobG8tXFx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kKVxcbiA1NjE6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiA1NjI6XFx0XFxuIDU2MzpcXHRcXHQvKiB0aGUgbG9vcCBkZXZpY2UgaGFzIHRvIGJlIHJlYWQtb25seSAqL1xcbiA1NjQ6XFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbiA1NjU6XFx0XFx0aWYgKCEobG8tXFx1MDAzZWxvX2ZsYWdzIFxcdTAwMjYgTE9fRkxBR1NfUkVBRF9PTkxZKSlcXG4gNTY2OlxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gNTY3OlxcdFxcbiA1Njg6XFx0XFx0ZXJyb3IgPSBsb29wX3ZhbGlkYXRlX2ZpbGUoZmlsZSwgYmRldik7XFxuIDU2OTpcXHRcXHRpZiAoZXJyb3IpXFxuIDU3MDpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuIDU3MTpcXHRcXG4gNTcyOlxcdFxcdG9sZF9maWxlID0gbG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcXG4gNTczOlxcdFxcbiA1NzQ6XFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbiA1NzU6XFx0XFxuIDU3NjpcXHRcXHQvKiBzaXplIG9mIHRoZSBuZXcgYmFja2luZyBzdG9yZSBuZWVkcyB0byBiZSB0aGUgc2FtZSAqL1xcbiA1Nzc6XFx0XFx0aWYgKGxvX2NhbGN1bGF0ZV9zaXplKGxvLCBmaWxlKSAhPSBsb19jYWxjdWxhdGVfc2l6ZShsbywgb2xkX2ZpbGUpKVxcbiA1Nzg6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiA1Nzk6XFx0XFxuIDU4MDpcXHRcXHQvKlxcbiA1ODE6XFx0XFx0ICogV2UgbWlnaHQgc3dpdGNoIHRvIGRpcmVjdCBJL08gbW9kZSBmb3IgdGhlIGxvb3AgZGV2aWNlLCB3cml0ZSBiYWNrXFxuIDU4MjpcXHRcXHQgKiBhbGwgZGlydHkgZGF0YSB0aGUgcGFnZSBjYWNoZSBub3cgdGhhdCBzbyB0aGF0IHRoZSBpbmRpdmlkdWFsIEkvT1xcbiA1ODM6XFx0XFx0ICogb3BlcmF0aW9ucyBkb24ndCBoYXZlIHRvIGRvIHRoYXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDExOjQ4OjUwLjg4NjkyNTI0OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjYwMDQ1ODQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIGtlcm5lbCBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGZ1enppbmcgc3RyYXRlZ3kuIFRoZSBmdW5jdGlvbiBgbG9vcF9jaGFuZ2VfZmRgIGlzIHRvbyBiaWcgdG8gYmUgaW5saW5lZCwgc28gdGhhdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgZnV6emluZywgYnV0IGBsb19pb2N0bGAgaXMgZmluZS4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHR3byBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi5cblxuVGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgbWFraW5nIHNvbWUgZnVuY3Rpb25hbCBjaGFuZ2VzIGRlZXAgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBpdCdzIGFsdGVyaW5nIGhvdyBwYXJ0aXRpb25zIGFyZSByZS1yZWFkIHdoZW4gdGhlIGJhY2tpbmcgZmlsZSBjaGFuZ2VzIGZvciBsb29wIGRldmljZXMgYW5kIGhvdyBwYXJ0aXRpb25zIGFyZSBkcm9wcGVkIHdoZW4gYW4gTkJEIGRpc2Nvbm5lY3QgaGFwcGVucy4gQm90aCBvZiB0aGVzZSBiZWhhdmlvcnMgYXJlIHRyaWdnZXJlZCBieSBpb2N0bHMgb24gYmxvY2sgZGV2aWNlcywgYm90aCBsb29wIGFuZCBOQkQgZGV2aWNlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZvY3VzIG9uIHRoZXNlIGFyZWFzLlxuXG5UaGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfTkJEYCwgSSdsbCBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZCBmb3IgYnVpbGQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHNvbWV0aGluZyBhYm91dCBgbG9vcF9jaGFuZ2VfZmRgLiBJcyBpdCBzdGF0aWM/IFllcywgaXQgaXMuIFRoYXQncyBhIGdvb2QgdGhpbmcgdG8gYmUgYXdhcmUgb2YuIEJlY2F1c2UgaXQncyBzdGF0aWMsIHRoZSBjb21waWxlciBtaWdodCBpbmxpbmUgaXQgb3Igb3B0aW1pemUgaXQgYXdheSwgd2hpY2ggY291bGQgYWZmZWN0IGl0cyBzeW1ib2wgYWRkcmVzcy4gSXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gZm9jdXMgb24gdGhlIGBsb19pb2N0bGAgZnVuY3Rpb24gaW5zdGVhZCwgYXMgdGhhdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBzZWVtcyBtb3JlIHJlbGlhYmxlIGZvciBkZWJ1Z2dpbmcgYW5kIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NDQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo1MDoxMy40ODczODcwNTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzE3MjAzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9faW9jdGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9MTE4Nj1zdGF0aWMgaW50IGxvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTkwLVxcdC8qXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTE5MTpcXHQgKiBTaW5jZSBsb19pb2N0bCgpIGlzIGNhbGxlZCB3aXRob3V0IGxvY2tzIGhlbGQsIGl0IGlzIHBvc3NpYmxlIHRoYXRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTkyLVxcdCAqIGxvb3BfY29uZmlndXJlKCkvbG9vcF9jaGFuZ2VfZmQoKSBhbmQgbG9vcF9jbHJfZmQoKSBydW4gaW4gcGFyYWxsZWwuXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDg3PXN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTA4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1MDk6c3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUxMC1cXHR1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE2NzM9c3RhdGljIGludCBsb19jb21wYXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTY5OC1cXHRjYXNlIExPT1BfU0VUX0RJUkVDVF9JTzpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNjk5OlxcdFxcdGVyciA9IGxvX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgYXJnKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzAwLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTc2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGxvX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzYzLVxcdC5yZWxlYXNlID1cXHRsb19yZWxlYXNlLFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE3NjQ6XFx0LmlvY3RsID1cXHRsb19pb2N0bCxcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNzY1LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDExOjUwOjE1LjIxOTExNjYyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY4NzU2NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJb2N0bCBGdW5jdGlvbiBDYWxscyBhbmQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYGlvY3RsYCBjYWxscywgc3BlY2lmaWNhbGx5IGBsb19pb2N0bGAgYW5kIGBuYmRfaW9jdGxgLiBJIGtub3cgdGhleSdyZSBib3RoIGRlY2xhcmVkIGFzIHN0YXRpYywgYnV0IHRoZXkncmUgYXNzaWduZWQgdG8gdGhlIGAuaW9jdGxgIGZpZWxkIGluIGBsb19mb3BzYCBhbmQgYG5iZF9mb3BzYCwgcmVzcGVjdGl2ZWx5LiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZXkgYXJlbid0IGlubGluZWQsIHdoaWNoIG1ha2VzIHRoZW0gZ29vZCBmb2N1cyBwb2ludHMgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC5cblxuTGV0IG1lIHNlZS4uLiBJIHNob3VsZCBjaGVjayBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBaCwgeWVzLCBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfTkJEYC4gQW5kIGxldCdzIG5vdCBmb3JnZXQgdGhlIGRlcGVuZGVuY2llcy4gYEJMS19ERVZfTE9PUGAgZGVwZW5kcyBvbiBgQkxPQ0tgLCBhbmQgc28gZG9lcyBgQkxLX0RFVl9OQkRgLiBOb3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUuIFN0YW5kYXJkIHN0dWZmLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBwYXRjaCBpcyBtZXNzaW5nIHdpdGggaG93IHBhcnRpdGlvbiBzY2FubmluZyB3b3JrcyBmb3IgbG9vcCBhbmQgTkJEIGJsb2NrIGRldmljZXMsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBiYWNraW5nIGZpbGUgY2hhbmdlcyBvciBkdXJpbmcgZGlzY29ubmVjdCBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb25hbGl0eSBiZWhpbmQgdGhlc2UgY2hhbmdlcyBpcyBpbnZva2VkIHRocm91Z2ggdGhlc2UgYmxvY2sgZGV2aWNlIGlvY3RscyDigJMgYExPT1BfQ0hBTkdFX0ZEYCBhbmQgYE5CRF9DTEVBUl9TT0NLYC4gVGhpcyBpcyBpbXBvcnRhbnQgY29udGV4dCBmb3IgZm9ybXVsYXRpbmcgdGhlIHJpZ2h0IHJlc3BvbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTIwLCJPdXRwdXRUb2tlbnMiOjEwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMTo1MDoyMC4xODc4NzUzMTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzE5NDA1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTEtfREVWX05CRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvX2lvY3RsXCIsXG4gICAgXCJuYmRfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJ0aXRpb24gc2Nhbm5pbmcgbG9naWMgZm9yIGxvb3AgYW5kIG5iZCBibG9jayBkZXZpY2VzIGR1cmluZyBiYWNraW5nIGZpbGUgY2hhbmdlIGFuZCBkaXNjb25uZWN0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSByZWFjaGFibGUgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgKExPT1BfQ0hBTkdFX0ZEIGFuZCBOQkRfQ0xFQVJfU09DSykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTEtfREVWX05CRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvX2lvY3RsXCIsXG4gICAgXCJuYmRfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYXJ0aXRpb24gc2Nhbm5pbmcgbG9naWMgZm9yIGxvb3AgYW5kIG5iZCBibG9jayBkZXZpY2VzIGR1cmluZyBiYWNraW5nIGZpbGUgY2hhbmdlIGFuZCBkaXNjb25uZWN0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSByZWFjaGFibGUgdmlhIGJsb2NrIGRldmljZSBpb2N0bHMgKExPT1BfQ0hBTkdFX0ZEIGFuZCBOQkRfQ0xFQVJfU09DSykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4rx25[1] Phase: Succeeded StartedAt: 2026-08-06 11:50:31 +0000 UTC FinishedAt: 2026-08-06 11:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 11:50:31 +0000 UTC FinishedAt: 2026-08-06 11:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2] Phase: Succeeded StartedAt: 2026-08-06 11:50:31 +0000 UTC FinishedAt: 2026-08-06 15:34:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 11:50:31 +0000 UTC FinishedAt: 2026-08-06 15:34:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 11:50:31 +0000 UTC FinishedAt: 2026-08-06 11:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 11:50:31 +0000 UTC FinishedAt: 2026-08-06 11:50:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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-workflow4rx25/series-workflow4rx25-convert-artifact-927981984/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 11:50:41 +0000 UTC FinishedAt: 2026-08-06 12:06:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 11:50:41 +0000 UTC FinishedAt: 2026-08-06 12:06:36 +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:*e970d4e4-290e-4e1a-b7dc-48a4bd38d4df,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-workflow4rx25/series-workflow4rx25-convert-artifact-927981984/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": "ade9ff3c-5fa0-490a-ac68-9b640d0ffc7e", "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-workflow4rx25/series-workflow4rx25-build-action-1321255014/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 11:50:41 +0000 UTC FinishedAt: 2026-08-06 12:06:26 +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:*e970d4e4-290e-4e1a-b7dc-48a4bd38d4df,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-workflow4rx25/series-workflow4rx25-convert-artifact-927981984/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": "ade9ff3c-5fa0-490a-ac68-9b640d0ffc7e", "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-workflow4rx25/series-workflow4rx25-build-action-1321255014/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:06:36 +0000 UTC FinishedAt: 2026-08-06 12:06:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:06:36 +0000 UTC FinishedAt: 2026-08-06 12:06:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:06:36 +0000 UTC FinishedAt: 2026-08-06 12:06:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:06:36 +0000 UTC FinishedAt: 2026-08-06 12:06:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-workflow4rx25/series-workflow4rx25-convert-artifact-1370632391/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:06:47 +0000 UTC FinishedAt: 2026-08-06 12:08:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:06:47 +0000 UTC FinishedAt: 2026-08-06 12:08:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ade9ff3c-5fa0-490a-ac68-9b640d0ffc7e,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-workflow4rx25/series-workflow4rx25-build-action-1321255014/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-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:08:34 +0000 UTC FinishedAt: 2026-08-06 12:08:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:08:34 +0000 UTC FinishedAt: 2026-08-06 12:08:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:08:34 +0000 UTC FinishedAt: 2026-08-06 12:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:08:34 +0000 UTC FinishedAt: 2026-08-06 12:30:48 +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:*e970d4e4-290e-4e1a-b7dc-48a4bd38d4df,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-workflow4rx25/series-workflow4rx25-convert-artifact-1370632391/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": "6ba5c68e-8f42-48c3-a357-921e615f27c7", "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-workflow4rx25/series-workflow4rx25-build-action-848195659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:08:34 +0000 UTC FinishedAt: 2026-08-06 12:30:38 +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:*e970d4e4-290e-4e1a-b7dc-48a4bd38d4df,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-workflow4rx25/series-workflow4rx25-convert-artifact-1370632391/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": "6ba5c68e-8f42-48c3-a357-921e615f27c7", "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-workflow4rx25/series-workflow4rx25-build-action-848195659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:30:48 +0000 UTC FinishedAt: 2026-08-06 12:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:30:48 +0000 UTC FinishedAt: 2026-08-06 12:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:30:48 +0000 UTC FinishedAt: 2026-08-06 12:32:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:30:48 +0000 UTC FinishedAt: 2026-08-06 12:32:32 +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:*6ba5c68e-8f42-48c3-a357-921e615f27c7,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-workflow4rx25/series-workflow4rx25-build-action-848195659/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-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:32:42 +0000 UTC FinishedAt: 2026-08-06 15:34:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:32:42 +0000 UTC FinishedAt: 2026-08-06 15:34:43 +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":["lo_ioctl","nbd_ioctl"],"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:*ade9ff3c-5fa0-490a-ac68-9b640d0ffc7e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6ba5c68e-8f42-48c3-a357-921e615f27c7,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-workflow4rx25/series-workflow4rx25-build-action-1321255014/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-workflow4rx25/series-workflow4rx25-build-action-848195659/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:32:42 +0000 UTC FinishedAt: 2026-08-06 12:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:32:42 +0000 UTC FinishedAt: 2026-08-06 12:32:49 +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":["lo_ioctl","nbd_ioctl"],"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-workflow4rx25/series-workflow4rx25-convert-artifact-757352608/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:32:42 +0000 UTC FinishedAt: 2026-08-06 12:32:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:32:42 +0000 UTC FinishedAt: 2026-08-06 12:32:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:32:42 +0000 UTC FinishedAt: 2026-08-06 12:32:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:33:02 +0000 UTC FinishedAt: 2026-08-06 15:34:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4rx25[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","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":["lo_ioctl","nbd_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_NBD"],"series_id":"a7cbc2e6-670e-4546-b232-66ca76305df2","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-06 12:33:02 +0000 UTC FinishedAt: 2026-08-06 15:34:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ade9ff3c-5fa0-490a-ac68-9b640d0ffc7e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6ba5c68e-8f42-48c3-a357-921e615f27c7,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-workflow4rx25/series-workflow4rx25-build-action-1321255014/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-workflow4rx25/series-workflow4rx25-build-action-848195659/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-workflow4rx25/series-workflow4rx25-convert-artifact-757352608/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,}