Name: series-workflow759nq Phase: Succeeded StartedAt: 2026-07-11 18:14:59 +0000 UTC FinishedAt: 2026-07-11 22:37:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[0] Phase: Succeeded StartedAt: 2026-07-11 18:14:59 +0000 UTC FinishedAt: 2026-07-11 18:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 18:14:59 +0000 UTC FinishedAt: 2026-07-11 18:27:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1354afac14579ad38279f12d660df961b5f20246", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LIVEUPDATE", "PCI_LIVEUPDATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1354afac14579ad38279f12d660df961b5f20246", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LIVEUPDATE", "PCI_LIVEUPDATE" ], "series_id": "dbf7326a-98e2-481e-adf8-a51a51c012bb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "pci_liveupdate_setup_device", "pci_liveupdate_cleanup_device", "pci_liveupdate_freeze", "pci_liveupdate_scan_bridge_begin", "pci_liveupdate_scan_bridge_end", "pci_liveupdate_init_acs", "pci_liveupdate_enable_acs", "pci_liveupdate_configure_ari", "pci_liveupdate_preserve", "pci_liveupdate_unpreserve", "pci_liveupdate_finish", "pci_liveupdate_register_flb", "pci_liveupdate_unregister_flb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE4OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xJVkVVUERBVEUmIzM0OywKICAgICYjMzQ7UENJX0xJVkVVUERBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2UmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2UmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfZnJlZXplJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZCYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9pbml0X2FjcyYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfcHJlc2VydmUmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9maW5pc2gmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgUENJIExpdmUgVXBkYXRlIHN1cHBvcnQsIHdoaWNoIG1vZGlmaWVzIGNvcmUgUENJIGVudW1lcmF0aW9uLCBzaHV0ZG93biwgYW5kIGNhcGFiaWxpdHkgY29uZmlndXJhdGlvbiBwYXRocyAoZS5nLiwgQUNTLCBBUkkpLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZHVyaW5nIFBDSSBkZXZpY2UgcHJvYmUsIHJlbW92YWwsIGFuZCBzeXN0ZW0gc2h1dGRvd24va2V4ZWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgcGNpX2xpdmV1cGRhdGVfKiBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZXkgaGFuZGxlIHZhcmlvdXMgUENJIHRvcG9sb2dpZXMgYW5kIHN0YXRlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTg6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNmIzMGFiMjc5ZmIwZWYwNTc4N2Q1NmUzM2U1NzQzNmFiNmM4OGU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTg6MjY6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9QQ0kvaW5kZXgucnN0XG5pbmRleCA1ZDcyMGQyYTQxNWUwMS4uMjNmYjczN2FjOTY5ZWEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vUENJL2luZGV4LnJzdFxuQEAgLTIwLDMgJiM0MzsyMCw0IEBAIFBDSSBCdXMgU3Vic3lzdGVtXG4gICAgY29udHJvbGxlci9pbmRleFxuICAgIGJvb3QtaW50ZXJydXB0c1xuICAgIHRwaFxuJiM0MzsgICBsaXZldXBkYXRlXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvbGl2ZXVwZGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lYmE1NWY4YTkyYWUxMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9QQ0kvbGl2ZXVwZGF0ZS5yc3RcbkBAIC0wLDAgJiM0MzsxLDI5IEBAXG4mIzQzOy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzO1xuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7UENJIFN1cHBvcnQgZm9yIExpdmUgVXBkYXRlXG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY1xuJiM0MzsgICA6ZG9jOiBQQ0kgTGl2ZSBVcGRhdGVcbiYjNDM7XG4mIzQzO0RyaXZlciBBUElcbiYjNDM7PT09PT09PT09PVxuJiM0MztcbiYjNDM7Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY1xuJiM0MzsgICA6ZXhwb3J0OlxuJiM0MztcbiYjNDM7TGl2ZSBVcGRhdGUgQUJJXG4mIzQzOz09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7Li4ga2VybmVsLWRvYzo6IGluY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxuJiM0MzsgICA6ZG9jOiBQQ0kgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgTGl2ZSBVcGRhdGUgQUJJXG4mIzQzO1xuJiM0MzsuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9saW51eC9raG8vYWJpL3BjaS5oXG4mIzQzOyAgIDppbnRlcm5hbDpcbiYjNDM7XG4mIzQzO1NlZSBBbHNvXG4mIzQzOz09PT09PT09XG4mIzQzO1xuJiM0MzsgKiA6ZG9jOmAvY29yZS1hcGkvbGl2ZXVwZGF0ZWBcbiYjNDM7ICogOmRvYzpgL2NvcmUtYXBpL2toby9pbmRleGBcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA0ZjY1YjJhMzc1MjEwMi4uZWQ5ZWVmOGRlNjRjZDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC01MTA1LDcgJiM0Mzs1MTA1LDExIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0XHRleHBsaWNpdGx5IHdoaWNoIG9uZXMgdGhleSBhcmUuXG4gXHRcdGFzc2lnbi1idXNzZXNcdFtYODZdIEFsd2F5cyBhc3NpZ24gYWxsIFBDSSBidXNcbiBcdFx0XHRcdG51bWJlcnMgb3Vyc2VsdmVzLCBvdmVycmlkaW5nXG4tXHRcdFx0XHR3aGF0ZXZlciB0aGUgZmlybXdhcmUgbWF5IGhhdmUgZG9uZS5cbiYjNDM7XHRcdFx0XHR3aGF0ZXZlciB0aGUgZmlybXdhcmUgbWF5IGhhdmUgZG9uZS4gSWdub3JlZFxuJiM0MztcdFx0XHRcdGR1cmluZyBhIExpdmUgVXBkYXRlLCB3aGVyZSB0aGUga2VybmVsIG11c3RcbiYjNDM7XHRcdFx0XHRpbmhlcml0IHRoZSBQQ0kgdG9wb2xvZ3kgKGluY2x1ZGluZyBidXMgbnVtYmVycylcbiYjNDM7XHRcdFx0XHR0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb25nb2luZyBtZW1vcnlcbiYjNDM7XHRcdFx0XHR0cmFuc2FjdGlvbnMgb2YgcHJlc2VydmVkIGRldmljZXMuXG4gXHRcdHVzZXBpcnFtYXNrXHRbWDg2XSBIb25vciB0aGUgcG9zc2libGUgSVJRIG1hc2sgc3RvcmVkXG4gXHRcdFx0XHRpbiB0aGUgQklPUyAkUElSIHRhYmxlLiBUaGlzIGlzIG5lZWRlZCBvblxuIFx0XHRcdFx0c29tZSBzeXN0ZW1zIHdpdGggYnJva2VuIEJJT1Nlcywgbm90YWJseVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbGl2ZXVwZGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0XG5pbmRleCA1YTI5MmQwZjM3MDY0ZC4uMmJjZTI2NDRlYmEyMjMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0XG5AQCAtMSw1ICYjNDM7MSw3IEBAXG4gLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBcbiYjNDM7Li4gX2x1bzpcbiYjNDM7XG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gTGl2ZSBVcGRhdGUgT3JjaGVzdHJhdG9yXG4gPT09PT09PT09PT09PT09PT09PT09PT09XG5AQCAtMTgsNiAmIzQzOzIwLDggQEAgTFVPIFByZXNlcnZpbmcgRmlsZSBEZXNjcmlwdG9yc1xuIC4uIGtlcm5lbC1kb2M6OiBrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jXG4gICAgOmRvYzogTFVPIEZpbGUgRGVzY3JpcHRvcnNcbiBcbiYjNDM7Li4gX2ZsYjpcbiYjNDM7XG4gTFVPIEZpbGUgTGlmZWN5Y2xlIEJvdW5kIEdsb2JhbCBEYXRhXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gLi4ga2VybmVsLWRvYzo6IGtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuY1xuQEAgLTcwLDMgJiM0Mzs3NCw0IEBAIFNlZSBBbHNvXG4gXG4gLSA6ZG9jOmBMaXZlIFVwZGF0ZSB1QVBJIFx1MDAzYy91c2Vyc3BhY2UtYXBpL2xpdmV1cGRhdGVcdTAwM2VgXG4gLSA6ZG9jOmAvY29yZS1hcGkva2hvL2luZGV4YFxuJiM0MzstIDpkb2M6YFBDSSBcdTAwM2MvUENJL2xpdmV1cGRhdGVcdTAwM2VgXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYTNlZDMzN2U4MjdkODYuLjM0N2M0MzVjYTQwNDdjIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMjA4MjQsNiAmIzQzOzIwODI0LDIxIEBAIEw6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4gUzpcdFN1cHBvcnRlZFxuIEY6XHREb2N1bWVudGF0aW9uL1BDSS9wY2ktZXJyb3ItcmVjb3ZlcnkucnN0XG4gXG4mIzQzO1BDSSBMSVZFIFVQREFURVxuJiM0MztNOlx0RGF2aWQgTWF0bGFjayBcdTAwM2NkbWF0bGFja0Bnb29nbGUuY29tXHUwMDNlXG4mIzQzO1I6XHRQYXNoYSBUYXRhc2hpbiBcdTAwM2NwYXNoYS50YXRhc2hpbkBzb2xlZW4uY29tXHUwMDNlXG4mIzQzO1I6XHRNaWtlIFJhcG9wb3J0IFx1MDAzY3JwcHRAa2VybmVsLm9yZ1x1MDAzZVxuJiM0MztSOlx0UHJhdHl1c2ggWWFkYXYgXHUwMDNjcHJhdHl1c2hAa2VybmVsLm9yZ1x1MDAzZVxuJiM0MztMOlx0a2V4ZWNAbGlzdHMuaW5mcmFkZWFkLm9yZ1xuJiM0MztMOlx0bGludXgtcGNpQHZnZXIua2VybmVsLm9yZ1xuJiM0MztTOlx0TWFpbnRhaW5lZFxuJiM0MztUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saXZldXBkYXRlL2xpbnV4LmdpdFxuJiM0MztGOlx0RG9jdW1lbnRhdGlvbi9QQ0kvbGl2ZXVwZGF0ZS5yc3RcbiYjNDM7RjpcdGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY1xuJiM0MztGOlx0ZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oXG4mIzQzO0Y6XHRpbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmhcbiYjNDM7RjpcdGluY2x1ZGUvbGludXgvcGNpX2xpdmV1cGRhdGUuaFxuJiM0MztcbiBQQ0kgTVNJIERSSVZFUiBGT1IgQUxURVJBIE1TSSBJUFxuIEw6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4gUzpcdE9ycGhhblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5pbmRleCAwYzc0MDg1MDliYTI0Yi4uMTZmYmQ0MjEyZTBmNTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5AQCAtMjcxLDYgJiM0MzsyNzEsMjEgQEAgY29uZmlnIFZHQV9BUkJfTUFYX0dQVVNcbiBcdCAgUmVzZXJ2ZXMgc3BhY2UgaW4gdGhlIGtlcm5lbCB0byBtYWludGFpbiByZXNvdXJjZSBsb2NraW5nIGZvclxuIFx0ICBtdWx0aXBsZSBHUFVTLiAgVGhlIG92ZXJoZWFkIGZvciBlYWNoIEdQVSBpcyB2ZXJ5IHNtYWxsLlxuIFxuJiM0Mztjb25maWcgUENJX0xJVkVVUERBVEVcbiYjNDM7XHRib29sIFwmIzM0O1BDSSBMaXZlIFVwZGF0ZSBTdXBwb3J0XCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IExJVkVVUERBVEUgXHUwMDI2XHUwMDI2IDY0QklUIFx1MDAyNlx1MDAyNiAhQ0FSREJVU1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIEVuYWJsZSBQQ0kgY29yZSBzdXBwb3J0IGZvciBwcmVzZXJ2aW5nIFBDSSBkZXZpY2VzIGFjcm9zcyBMaXZlXG4mIzQzO1x0ICBVcGRhdGUuIFRoaXMsIGluIGNvbWJpbmF0aW9uIHdpdGggc3VwcG9ydCBpbiBhIGRldmljZSYjMzk7cyBkcml2ZXIsXG4mIzQzO1x0ICBlbmFibGVzIFBDSSBkZXZpY2VzIHRvIHJ1biBhbmQgcGVyZm9ybSBtZW1vcnkgdHJhbnNhY3Rpb25zXG4mIzQzO1x0ICB1bmludGVycnVwdGVkIGR1cmluZyBhIGtleGVjIGZvciBMaXZlIFVwZGF0ZS5cbiYjNDM7XG4mIzQzO1x0ICBUaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSBlbmFibGVkIGJ5IHVzZXJzIHdobyBwbGFuIHRvIHVzZSBMaXZlXG4mIzQzO1x0ICBVcGRhdGUgZm9yIGtlcm5lbCB1cGdyYWRlcyBhbmQgcmVxdWlyZSBwcmVzZXJ2aW5nIFBDSSBkZXZpY2VzIGR1cmluZ1xuJiM0MztcdCAgdGhvc2UgdXBncmFkZXMuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjNDM7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZ1wmIzM0O1xuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9wY2kvZW5kcG9pbnQvS2NvbmZpZ1wmIzM0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGVcbmluZGV4IDQxZWJjM2I5YTUxODI0Li5lOGQwMDNjYjY3NTc2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZVxuQEAgLTE2LDYgJiM0MzsxNiw3IEBAIG9iai0kKENPTkZJR19QUk9DX0ZTKVx0XHQmIzQzOz0gcHJvYy5vXG4gb2JqLSQoQ09ORklHX1NZU0ZTKVx0XHQmIzQzOz0gcGNpLXN5c2ZzLm8gc2xvdC5vXG4gb2JqLSQoQ09ORklHX0FDUEkpXHRcdCYjNDM7PSBwY2ktYWNwaS5vXG4gb2JqLSQoQ09ORklHX0dFTkVSSUNfUENJX0lPTUFQKSAmIzQzOz0gaW9tYXAub1xuJiM0MztvYmotJChDT05GSUdfUENJX0xJVkVVUERBVEUpXHQmIzQzOz0gbGl2ZXVwZGF0ZS5vXG4gZW5kaWZcbiBcbiBvYmotJChDT05GSUdfT0YpXHRcdCYjNDM7PSBvZi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jIGIvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU5MzVlODhkZTA3M2RjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcbkBAIC0wLDAgJiM0MzsxLDkxMCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2LCBHb29nbGUgTExDLlxuJiM0MzsgKiBEYXZpZCBNYXRsYWNrIFx1MDAzY2RtYXRsYWNrQGdvb2dsZS5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogRE9DOiBQQ0kgTGl2ZSBVcGRhdGVcbiYjNDM7ICpcbiYjNDM7ICogVGhlIFBDSSBzdWJzeXN0ZW0gcGFydGljaXBhdGVzIGluIHRoZSBMaXZlIFVwZGF0ZSBwcm9jZXNzIHRvIGVuYWJsZSBkcml2ZXJzXG4mIzQzOyAqIHRvIHByZXNlcnZlIHRoZWlyIFBDSSBkZXZpY2VzIGFjcm9zcyBrZXhlYy5cbiYjNDM7ICpcbiYjNDM7ICogOnJlZjpgRkxCIFx1MDAzY2ZsYlx1MDAzZWAgRGF0YVxuJiM0MzsgKiA9PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7ICpcbiYjNDM7ICogUENJIGRldmljZSBwcmVzZXJ2YXRpb24gYWNyb3NzIExpdmUgVXBkYXRlIGlzIGJ1aWx0IG9uIHRvcCBvZiB0aGVcbiYjNDM7ICogOnJlZjpgTFVPIFx1MDAzY2x1b1x1MDAzZWAgc3VwcG9ydCBmb3IgZmlsZSBwcmVzZXJ2YXRpb24gYWNyb3NzIGtleGVjLiBEcml2ZXJzIGFyZVxuJiM0MzsgKiBleHBlY3RlZCB0byBleHBvc2UgYSBmaWxlIHRvIHJlcHJlc2VudCBhIHNpbmdsZSBQQ0kgZGV2aWNlIGFuZCBzdXBwb3J0XG4mIzQzOyAqIHByZXNlcnZhdGlvbiBvZiB0aGF0IGZpbGUgd2l0aCBgYGlvY3RsKExJVkVVUERBVEVfU0VTU0lPTl9QUkVTRVJWRV9GRClgYC5cbiYjNDM7ICogVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIGNvbnRyb2wgdGhlIHByZXNlcnZhdGlvbiBvZiBkZXZpY2VzIGFuZCBlbnN1cmVcbiYjNDM7ICogcHJvcGVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHdoaWxlIGEgZGV2aWNlIGlzIHByZXNlcnZlZC4gVGhlIGZpcnN0IGludGVuZGVkXG4mIzQzOyAqIHVzZS1jYXNlIGlzIHByZXNlcnZpbmcgdmZpby1wY2kgZGV2aWNlIGZpbGVzLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENJIGNvcmUgbWFpbnRhaW5zIGl0cyBvd24gc3RhdGUgYWJvdXQgd2hhdCBkZXZpY2VzIGFyZSBiZWluZyBwcmVzZXJ2ZWRcbiYjNDM7ICogYWNyb3NzIExpdmUgVXBkYXRlIHVzaW5nIEZMQiBkYXRhIGluIExVTy4gRXNzZW50aWFsbHksIHRoaXMgYWxsb3dzIHRoZSBQQ0lcbiYjNDM7ICogY29yZSB0byBhbGxvY2F0ZSBzdHJ1Y3QgcGNpX3NlciB3aGVuIHRoZSBmaXJzdCBkZXZpY2UgKGZpbGUpIGlzIHByZXNlcnZlZFxuJiM0MzsgKiBhbmQgZnJlZSBpdCB3aGVuIHRoZSBsYXN0IGRldmljZSAoZmlsZSkgaXMgdW5wcmVzZXJ2ZWQuIEFmdGVyIGtleGVjLCB0aGVcbiYjNDM7ICogUENJIGNvcmUgY2FuIGZldGNoIHRoZSBzdHJ1Y3QgcGNpX3NlciAod2hpY2ggd2FzIGNvbnN0cnVjdGVkIGJ5IHRoZSBwcmV2aW91c1xuJiM0MzsgKiBrZXJuZWwpIGZyb20gTFVPIGF0IGFueSB0aW1lIChlLmcuIGR1cmluZyBlbnVtZXJhdGlvbikgc28gdGhhdCBpdCBrbm93c1xuJiM0MzsgKiB3aGljaCBkZXZpY2VzIHdlcmUgcHJlc2VydmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUbyBlbmFibGUgdGhlIFBDSSBjb3JlIHRvIGJlIG5vdGlmaWVkIHdoZW5ldmVyIGEgZmlsZSByZXByZXNlbnRpbmcgYSBkZXZpY2VcbiYjNDM7ICogaXMgcHJlc2VydmVkLCBkcml2ZXJzIG11c3QgcmVnaXN0ZXIgdGhlaXIgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIHdpdGhcbiYjNDM7ICogdGhlIFBDSSBjb3JlIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgQVBJczpcbiYjNDM7ICpcbiYjNDM7ICogICogYGBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoZHJpdmVyX2ZpbGVfaGFuZGxlcilgYFxuJiM0MzsgKiAgKiBgYHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKGRyaXZlcl9maWxlX2hhbmRsZXIpYGBcbiYjNDM7ICpcbiYjNDM7ICogRGV2aWNlIFRyYWNraW5nXG4mIzQzOyAqID09PT09PT09PT09PT09PVxuJiM0MzsgKlxuJiM0MzsgKiBEcml2ZXJzIG11c3Qgbm90aWZ5IHRoZSBQQ0kgY29yZSB3aGVuIHNwZWNpZmljIGRldmljZXMgYXJlIHByZXNlcnZlZCBvclxuJiM0MzsgKiB1bnByZXNlcnZlZCB3aXRoIHRoZSBmb2xsb3dpbmcgQVBJczpcbiYjNDM7ICpcbiYjNDM7ICogICogYGBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZShwY2lfZGV2KWBgXG4mIzQzOyAqICAqIGBgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShwY2lfZGV2KWBgXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgYWxsb3dzIHRoZSBQQ0kgY29yZSB0byBrZWVwIGl0cyBGTEIgZGF0YSAoc3RydWN0IHBjaV9zZXIpIHVwIHRvIGRhdGVcbiYjNDM7ICogd2l0aCB0aGUgbGlzdCBvZiAqKm91dGdvaW5nKiogcHJlc2VydmVkIGRldmljZXMgZm9yIHRoZSBuZXh0IGtlcm5lbC5cbiYjNDM7ICpcbiYjNDM7ICogQWZ0ZXIga2V4ZWMsIHdoZW5ldmVyIGEgZGV2aWNlIGlzIGVudW1lcmF0ZWQsIHRoZSBQQ0kgY29yZSB3aWxsIGNoZWNrIGlmIGl0XG4mIzQzOyAqIGlzIGFuICoqaW5jb21pbmcqKiBwcmVzZXJ2ZWQgZGV2aWNlIChpLmUuIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXMga2VybmVsKVxuJiM0MzsgKiBieSBjaGVja2luZyB0aGUgaW5jb21pbmcgRkxCIGRhdGEgKHN0cnVjdCBwY2lfc2VyKS5cbiYjNDM7ICpcbiYjNDM7ICogRHJpdmVycyBtdXN0IG5vdGlmeSB0aGUgUENJIGNvcmUgd2hlbiBhbiAqKmluY29taW5nKiogZGV2aWNlIGlzIGRvbmVcbiYjNDM7ICogcGFydGljaXBhdGluZyBpbiB0aGUgaW5jb21pbmcgTGl2ZSBVcGRhdGUgd2l0aCB0aGUgZm9sbG93aW5nIEFQSTpcbiYjNDM7ICpcbiYjNDM7ICogICogYGBwY2lfbGl2ZXVwZGF0ZV9maW5pc2gocGNpX2RldilgYFxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENJIGNvcmUgZG9lcyBub3QgZW5mb3JjZSBhbnkgb3JkZXJpbmcgb2YgYGBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKWBgIGFuZFxuJiM0MzsgKiBgYHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKClgYC4gaS5lLiBBIFBDSSBkZXZpY2UgY2FuIGJlICoqb3V0Z29pbmcqKlxuJiM0MzsgKiAocHJlc2VydmVkIGZvciBuZXh0IGtlcm5lbCkgYW5kICoqaW5jb21pbmcqKiAocHJlc2VydmVkIGJ5IHByZXZpb3VzIGtlcm5lbClcbiYjNDM7ICogYXQgdGhlIHNhbWUgdGltZS5cbiYjNDM7ICpcbiYjNDM7ICogUmVzdHJpY3Rpb25zXG4mIzQzOyAqID09PT09PT09PT09PVxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENJIGNvcmUgZW5mb3JjZXMgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgb24gd2hpY2ggZGV2aWNlcyBjYW4gYmVcbiYjNDM7ICogcHJlc2VydmVkLiBUaGVzZSBtYXkgYmUgcmVsYXhlZCBpbiB0aGUgZnV0dXJlOlxuJiM0MzsgKlxuJiM0MzsgKiAgKiBUaGUgZGV2aWNlIGNhbm5vdCBiZSBhIFZpcnR1YWwgRnVuY3Rpb24gKFZGKS5cbiYjNDM7ICpcbiYjNDM7ICogICogVGhlIGRldmljZSBjYW5ub3QgcmVxdWlyZSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIHRvIGVuYWJsZSBBY2Nlc3NcbiYjNDM7ICogICAgQ29udHJvbCBTZXJ2aWNlcyAoQUNTKS5cbiYjNDM7ICpcbiYjNDM7ICogRHJpdmVyIEJpbmRpbmdcbiYjNDM7ICogPT09PT09PT09PT09PT1cbiYjNDM7ICpcbiYjNDM7ICogSW4gdGhlIG91dGdvaW5nIGtlcm5lbCwgaXQgaXMgdGhlIGRyaXZlciYjMzk7cyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBpdFxuJiM0MzsgKiBkb2VzIG5vdCByZWxlYXNlIGEgZGV2aWNlIGJldHdlZW4gcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSBhbmRcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpLlxuJiM0MzsgKlxuJiM0MzsgKiBJbiB0aGUgaW5jb21pbmcga2VybmVsLCBpdCBpcyB0aGUgZHJpdmVyJiMzOTtzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGl0XG4mIzQzOyAqIGRvZXMgbm90IHJlbGVhc2UgYSBwcmVzZXJ2ZWQgZGV2aWNlIGJldHdlZW4gcHJvYmUoKSBhbmRcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkuXG4mIzQzOyAqXG4mIzQzOyAqIEl0IGlzIHRoZSB1c2VyJiMzOTtzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGluY29taW5nIHByZXNlcnZlZCBkZXZpY2VzIGFyZVxuJiM0MzsgKiBib3VuZCB0byB0aGUgY29ycmVjdCBkcml2ZXIuIGkuZS4gVGhlIFBDSSBjb3JlIGRvZXMgbm90IHByb3RlY3QgYWdhaW5zdCBhXG4mIzQzOyAqIGRldmljZSBnZXR0aW5nIHByZXNlcnZlZCBieSBkcml2ZXIgQSBpbiB0aGUgb3V0Z29pbmcga2VybmVsIGFuZCB0aGVuIGdldHRpbmdcbiYjNDM7ICogYm91bmQgdG8gZHJpdmVyIEIgaW4gdGhlIGluY29taW5nIGtlcm5lbC4gVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG4mIzQzOyAqXG4mIzQzOyAqIEJERiBTdGFiaWxpdHlcbiYjNDM7ICogPT09PT09PT09PT09PVxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENJIGNvcmUgZ3VhcmFudGVlcyB0aGF0IHByZXNlcnZlZCBkZXZpY2VzIGNhbiBiZSBpZGVudGlmaWVkIGJ5IHRoZSBzYW1lXG4mIzQzOyAqIGJ1cywgZGV2aWNlLCBhbmQgZnVuY3Rpb24gbnVtYmVycyBmb3IgYXMgbG9uZyBhcyB0aGV5IGFyZSBwcmVzZXJ2ZWRcbiYjNDM7ICogKGluY2x1ZGluZyBhY3Jvc3Mga2V4ZWMpLiBUbyBhY2NvbXBsaXNoIHRoaXMsIHRoZSBQQ0kgY29yZSBhbHdheXMgaW5oZXJpdHNcbiYjNDM7ICogdGhlIHNlY29uZGFyeSBhbmQgc3Vib3JkaW5hdGUgYnVzIG51bWJlcnMgYXNzaWduZWQgdG8gYnJpZGdlcyBkdXJpbmcgc2Nhbm5pbmdcbiYjNDM7ICogaWYgYW55IGRldmljZSBpcyBwcmVzZXJ2ZWQuIFRoaXMgaXMgdHJ1ZSBldmVuIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBhbHdheXNcbiYjNDM7ICogYXNzaWduIG5ldyBidXMgbnVtYmVycyBkdXJpbmcgc2Nhbm5pbmcuIFRoZSBrZXJuZWwgYXNzdW1lcyB0aGUgcHJldmlvdXNcbiYjNDM7ICoga2VybmVsIGVzdGFibGlzaGVkIGEgc2FuZSBidXMgdG9wb2xvZ3kgYWNyb3NzIGtleGVjLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiBhIG1pc2NvbmZpZ3VyZWQgb3IgdW5jb25maWd1cmVkIGJyaWRnZSBpcyBlbmNvdW50ZXJlZCBkdXJpbmcgZW51bWVyYXRpb25cbiYjNDM7ICogd2hpbGUgdGhlcmUgYXJlIHByZXNlcnZlZCBkZXZpY2VzLCBpdHMgc2Vjb25kYXJ5IGFuZCBzdWJvcmRpbmF0ZSBidXMgbnVtYmVyc1xuJiM0MzsgKiB3aWxsIGJlIGNsZWFyZWQgYW5kIGRldmljZXMgYmVsb3cgaXQgd2lsbCBub3QgYmUgZW51bWVyYXRlZC5cbiYjNDM7ICpcbiYjNDM7ICogUENJLXRvLVBDSSBCcmlkZ2VzXG4mIzQzOyAqID09PT09PT09PT09PT09PT09PVxuJiM0MzsgKlxuJiM0MzsgKiBBbnkgUENJLXRvLVBDSSBicmlkZ2VzIHVwc3RyZWFtIG9mIGEgcHJlc2VydmVkIGRldmljZSBhcmUgYXV0b21hdGljYWxseVxuJiM0MzsgKiBwcmVzZXJ2ZWQgd2hlbiB0aGUgZGV2aWNlIGlzIHByZXNlcnZlZC4gVGhlIFBDSSBjb3JlIGtlZXBzIHRyYWNrIG9mIHRoZVxuJiM0MzsgKiBudW1iZXIgb2YgZG93bnN0cmVhbSBkZXZpY2VzIHRoYXQgYXJlIHByZXNlcnZlZCB1bmRlciBhIGJyaWRnZSBzbyB0aGF0IHRoZVxuJiM0MzsgKiBicmlkZ2UgaXMgb25seSB1bnByZXNlcnZlZCBvbmNlIGFsbCBkb3duc3RyZWFtIGRldmljZXMgYXJlIHVucHJlc2VydmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGVuYWJsZXMgdGhlIFBDSSBjb3JlIGFuZCBhbnkgZHJpdmVycyBib3VuZCB0byB0aGUgYnJpZGdlIHRvIHBhcnRpY2lwYXRlXG4mIzQzOyAqIGluIHRoZSBMaXZlIFVwZGF0ZSBzbyB0aGF0IHByZXNlcnZlZCBlbmRwb2ludHMgY2FuIGNvbnRpbnVlIGlzc3VpbmcgbWVtb3J5XG4mIzQzOyAqIHRyYW5zYWN0aW9ucyBkdXJpbmcgdGhlIExpdmUgVXBkYXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBIYW5kbGluZyBQcmVzZXJ2ZWQgRGV2aWNlc1xuJiM0MzsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENJIGNvcmUgdHJlYXRzIHByZXNlcnZlZCBkZXZpY2VzIGRpZmZlcmVudGx5IHRoYW4gbm9uLXByZXNlcnZlZCBkZXZpY2VzLlxuJiM0MzsgKiBUaGlzIHNlY3Rpb24gZW51bWVyYXRlcyB0aG9zZSBkaWZmZXJlbmNlcy5cbiYjNDM7ICpcbiYjNDM7ICogICogVGhlIFBDSSBjb3JlIGluaGVyaXRzIGFsbCBBQ1MgZmxhZ3MgZW5hYmxlZCBvbiBpbmNvbWluZyBwcmVzZXJ2ZWQgZGV2aWNlc1xuJiM0MzsgKiAgICByYXRoZXIgdGhhbiBhc3NpZ25pbmcgbmV3IG9uZXMuIFRoaXMgZW5zdXJlcyB0aGF0IFRMUHMgYXJlIHJvdXRlZCB0aGUgc2FtZVxuJiM0MzsgKiAgICB3YXkgYWZ0ZXIgTGl2ZSBVcGRhdGUgYW5kIGVuc3VyZXMgdGhhdCBJT01NVSBncm91cHMgZG8gbm90IGNoYW5nZS4gTm90ZVxuJiM0MzsgKiAgICB0aGF0IGEgZGV2aWNlIHdpbGwgdXNlIGl0cyBpbmhlcml0ZWQgQUNTIGZsYWdzIGZvciB0aGUgbGlmZXRpbWUgb2YgaXRzXG4mIzQzOyAqICAgIHN0cnVjdCBwY2lfZGV2IChpLmUuIGV2ZW4gYWZ0ZXIgcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkpLlxuJiM0MzsgKlxuJiM0MzsgKiAgKiBUaGUgUENJIGNvcmUgaW5oZXJpdHMgQVJJIEZvcndhcmRpbmcgRW5hYmxlIG9uIGFsbCBicmlkZ2VzIHdpdGggZG93bnN0cmVhbVxuJiM0MzsgKiAgICBwcmVzZXJ2ZWQgZGV2aWNlcyB0byBlbnN1cmUgdGhhdCBhbGwgcHJlc2VydmVkIGRldmljZXMgb24gdGhlIGJyaWRnZSYjMzk7c1xuJiM0MzsgKiAgICBzZWNvbmRhcnkgYnVzIGFyZSBhZGRyZXNzYWJsZSBhZnRlciB0aGUgTGl2ZSBVcGRhdGUuXG4mIzQzOyAqXG4mIzQzOyAqICAqIFRoZSBQQ0kgY29yZSBkb2VzIG5vdCBkaXNhYmxlIGJ1cyBtYXN0ZXJpbmcgb24gb3V0Z29pbmcgcHJlc2VydmVkIGRldmljZXNcbiYjNDM7ICogICAgZHVyaW5nIGtleGVjLiBUaGlzIGFsbG93cyBwcmVzZXJ2ZWQgZGV2aWNlcyB0byBpc3N1ZSBtZW1vcnkgdHJhbnNhY3Rpb25zXG4mIzQzOyAqICAgIHRocm91Z2hvdXQgdGhlIExpdmUgVXBkYXRlLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7UENJOiBcJiMzNDsgS0JVSUxEX0JBU0VOQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGl2ZXVwZGF0ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2hvX2Jsb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xpdmV1cGRhdGUuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtwY2kuaFwmIzM0O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwgLSBHbG9iYWwgc3RhdGUgZm9yIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0XG4mIzQzOyAqIEByd3NlbTogUmVhZGVyL3dyaXRlciBzZW1hcGhvcmUgdXNlZCB0byBwcm90ZWN0IHRoZSBpbmNvbWluZyBhbmQgb3V0Z29pbmdcbiYjNDM7ICogICAgICAgICBGTEJzLCBhbmQgdGhlIHJlZmVyZW5jZXMgdG8gdGhlbSBpbiBzdHJ1Y3QgcGNpX2Rldi5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwge1xuJiM0MztcdHN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9saXZldXBkYXRlX2dsb2JhbCBwY2lfbGl2ZXVwZGF0ZSA9IHtcbiYjNDM7XHQucndzZW0gPSBfX1JXU0VNX0lOSVRJQUxJWkVSKHBjaV9saXZldXBkYXRlLnJ3c2VtKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAtIE91dGdvaW5nIFBDSSBGTEIgb2JqZWN0XG4mIzQzOyAqIEBzZXI6IFBvaW50ZXIgdG8gdGhlIHByZXNlcnZlZCBzdHJ1Y3QgcGNpX3Nlci5cbiYjNDM7ICogQGJsb2NrX3NldDogVGhlIEtITyBibG9jayBzZXQgaG9sZGluZyB0aGUgb3V0Z29pbmcgZGV2aWNlcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIHJ1bnRpbWUgc3RhdGUgZm9yIHRoZSBvdXRnb2luZyBQQ0kgTGl2ZSBVcGRhdGVcbiYjNDM7ICogc3RhdGUuIEl0IHdyYXBzIHRoZSBzZXJpYWxpemVkIHBjaV9zZXIgYW5kIHRoZSBibG9ja19zZXQgdXNlZCB0byBtYW5hZ2VcbiYjNDM7ICogdGhlIHNlcmlhbGl6ZWQgZW50cmllcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwY2lfZmxiX291dGdvaW5nIHtcbiYjNDM7XHRzdHJ1Y3QgcGNpX3NlciAqc2VyO1xuJiM0MztcdHN0cnVjdCBraG9fYmxvY2tfc2V0IGJsb2NrX3NldDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAtIEluY29taW5nIFBDSSBGTEIgb2JqZWN0XG4mIzQzOyAqIEBzZXI6IFRoZSBpbmNvbWluZyBzdHJ1Y3QgcGNpX3NlciBmcm9tIHRoZSBwcmV2aW91cyBrZXJuZWwuXG4mIzQzOyAqIEB4YTogWGFycmF5IHVzZWQgdG8gcXVpY2tseSBsb29rdXAgZGV2aWNlcyBpbiBAc2VyLlxuJiM0MzsgKiBAYmxvY2tfc2V0OiBUaGUgS0hPIGJsb2NrIHNldCBob2xkaW5nIHRoZSBpbmNvbWluZyBkZXZpY2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgcnVudGltZSBzdGF0ZSBmb3IgdGhlIGluY29taW5nIFBDSSBMaXZlIFVwZGF0ZVxuJiM0MzsgKiBzdGF0ZS4gSXQgd3JhcHMgdGhlIHNlcmlhbGl6ZWQgcGNpX3NlciwgdGhlIGJsb2NrX3NldCB1c2VkIHRvIHJlc3RvcmVcbiYjNDM7ICogdGhlIHNlcmlhbGl6ZWQgZW50cmllcywgYW5kIGFuIHhhcnJheSBmb3IgZmFzdCBsb29rdXBzLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBjaV9mbGJfaW5jb21pbmcge1xuJiM0MztcdHN0cnVjdCBwY2lfc2VyICpzZXI7XG4mIzQzO1x0c3RydWN0IHhhcnJheSB4YTtcbiYjNDM7XHRzdHJ1Y3Qga2hvX2Jsb2NrX3NldCBibG9ja19zZXQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwY2lfc2VyX3hhX2tleSh1MzIgZG9tYWluLCB1MTYgYmRmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKWRvbWFpbiBcdTAwM2NcdTAwM2MgMTYgfCBiZGY7XG4mIzQzO31cbiYjNDM7c3RhdGljIGludCBwY2lfZmxiX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nO1xuJiM0MztcdHN0cnVjdCBwY2lfc2VyICpzZXI7XG4mIzQzO1xuJiM0MztcdG91dGdvaW5nID0ga3phbGxvY19vYmooKm91dGdvaW5nKTtcbiYjNDM7XHRpZiAoIW91dGdvaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHNlciA9IGtob19hbGxvY19wcmVzZXJ2ZShzaXplb2YoKnNlcikpO1xuJiM0MztcdGlmIChJU19FUlIoc2VyKSkge1xuJiM0MztcdFx0a2ZyZWUob3V0Z29pbmcpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoc2VyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNlci1cdTAwM2Vucl9kZXZpY2VzID0gMDtcbiYjNDM7XHRzZXItXHUwMDNlZGV2aWNlcyA9IDA7XG4mIzQzO1xuJiM0MztcdG91dGdvaW5nLVx1MDAzZXNlciA9IHNlcjtcbiYjNDM7XHRraG9fYmxvY2tfc2V0X2luaXQoXHUwMDI2b3V0Z29pbmctXHUwMDNlYmxvY2tfc2V0LCBzaXplb2Yoc3RydWN0IHBjaV9kZXZfc2VyKSk7XG4mIzQzO1xuJiM0MztcdGFyZ3MtXHUwMDNlb2JqID0gb3V0Z29pbmc7XG4mIzQzO1x0YXJncy1cdTAwM2VkYXRhID0gdmlydF90b19waHlzKHNlcik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBjaV9mbGJfdW5wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BfYXJncyAqYXJncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZyA9IGFyZ3MtXHUwMDNlb2JqO1xuJiM0MztcbiYjNDM7XHRXQVJOX09OKG91dGdvaW5nLVx1MDAzZXNlci1cdTAwM2Vucl9kZXZpY2VzKTtcbiYjNDM7XHRraG9fYmxvY2tfc2V0X2Rlc3Ryb3koXHUwMDI2b3V0Z29pbmctXHUwMDNlYmxvY2tfc2V0KTtcbiYjNDM7XHRraG9fdW5wcmVzZXJ2ZV9mcmVlKG91dGdvaW5nLVx1MDAzZXNlcik7XG4mIzQzO1x0a2ZyZWUob3V0Z29pbmcpO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O1VucHJlc2VydmVkIHN0cnVjdCBwY2lfc2VyXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwY2lfZmxiX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9zZXIgKnNlciA9IHBoeXNfdG9fdmlydChhcmdzLVx1MDAzZWRhdGEpO1xuJiM0MztcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbiYjNDM7XHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXI7XG4mIzQzO1x0c3RydWN0IGtob19ibG9ja19zZXRfaXQgaXQ7XG4mIzQzO1x0aW50IHJldCA9IC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGluY29taW5nID0ga3phbGxvY19vYmooKmluY29taW5nKTtcbiYjNDM7XHRpZiAoIWluY29taW5nKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9mcmVlO1xuJiM0MztcbiYjNDM7XHRpbmNvbWluZy1cdTAwM2VzZXIgPSBzZXI7XG4mIzQzO1x0eGFfaW5pdChcdTAwMjZpbmNvbWluZy1cdTAwM2V4YSk7XG4mIzQzO1xuJiM0MztcdGtob19ibG9ja19zZXRfaW5pdChcdTAwMjZpbmNvbWluZy1cdTAwM2VibG9ja19zZXQsIHNpemVvZihzdHJ1Y3QgcGNpX2Rldl9zZXIpKTtcbiYjNDM7XHRyZXQgPSBraG9fYmxvY2tfc2V0X3Jlc3RvcmUoXHUwMDI2aW5jb21pbmctXHUwMDNlYmxvY2tfc2V0LCBzZXItXHUwMDNlZGV2aWNlcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfaW5jb21pbmc7XG4mIzQzO1xuJiM0MztcdGtob19ibG9ja19zZXRfaXRfaW5pdChcdTAwMjZpdCwgXHUwMDI2aW5jb21pbmctXHUwMDNlYmxvY2tfc2V0KTtcbiYjNDM7XHR3aGlsZSAoKGRldl9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3JlYWRfZW50cnkoXHUwMDI2aXQpKSkge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBrZXk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFkZXZfc2VyLVx1MDAzZXJlZmNvdW50KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRrZXkgPSBwY2lfc2VyX3hhX2tleShkZXZfc2VyLVx1MDAzZWRvbWFpbiwgZGV2X3Nlci1cdTAwM2ViZGYpO1xuJiM0MztcdFx0cmV0ID0geGFfaW5zZXJ0KFx1MDAyNmluY29taW5nLVx1MDAzZXhhLCBrZXksIGRldl9zZXIsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBlcnJfYmxvY2tfc2V0X2Rlc3Ryb3k7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhcmdzLVx1MDAzZW9iaiA9IGluY29taW5nO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2Jsb2NrX3NldF9kZXN0cm95OlxuJiM0MztcdGtob19ibG9ja19zZXRfZGVzdHJveShcdTAwMjZpbmNvbWluZy1cdTAwM2VibG9ja19zZXQpO1xuJiM0MztlcnJfZnJlZV9pbmNvbWluZzpcbiYjNDM7XHR4YV9kZXN0cm95KFx1MDAyNmluY29taW5nLVx1MDAzZXhhKTtcbiYjNDM7XHRrZnJlZShpbmNvbWluZyk7XG4mIzQzO2Vycl9yZXN0b3JlX2ZyZWU6XG4mIzQzO1x0a2hvX3Jlc3RvcmVfZnJlZShzZXIpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBjaV9mbGJfZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKmluY29taW5nID0gYXJncy1cdTAwM2VvYmo7XG4mIzQzO1xuJiM0MztcdHhhX2Rlc3Ryb3koXHUwMDI2aW5jb21pbmctXHUwMDNleGEpO1xuJiM0MztcdGtob19ibG9ja19zZXRfZGVzdHJveShcdTAwMjZpbmNvbWluZy1cdTAwM2VibG9ja19zZXQpO1xuJiM0MztcdGtob19yZXN0b3JlX2ZyZWUoaW5jb21pbmctXHUwMDNlc2VyKTtcbiYjNDM7XHRrZnJlZShpbmNvbWluZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BzIHBjaV9saXZldXBkYXRlX2ZsYl9vcHMgPSB7XG4mIzQzO1x0LnByZXNlcnZlID0gcGNpX2ZsYl9wcmVzZXJ2ZSxcbiYjNDM7XHQudW5wcmVzZXJ2ZSA9IHBjaV9mbGJfdW5wcmVzZXJ2ZSxcbiYjNDM7XHQucmV0cmlldmUgPSBwY2lfZmxiX3JldHJpZXZlLFxuJiM0MztcdC5maW5pc2ggPSBwY2lfZmxiX2ZpbmlzaCxcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgcGNpX2xpdmV1cGRhdGVfZmxiID0ge1xuJiM0MztcdC5vcHMgPSBcdTAwMjZwY2lfbGl2ZXVwZGF0ZV9mbGJfb3BzLFxuJiM0MztcdC5jb21wYXRpYmxlID0gUENJX0xVT19GTEJfQ09NUEFUSUJMRSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBsaXZldXBkYXRlX2ZsYl9nZXRfb3V0Z29pbmcoXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiLCAodm9pZCAqKilcdTAwMjZvdXRnb2luZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdGlmICghb3V0Z29pbmcpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG91dGdvaW5nO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kZXZfc2VyICpwY2lfZ2V0X2VtcHR5X29yX2FwcGVuZChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXIsICpmb3VuZCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGtob19ibG9ja19zZXRfaXQgaXQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHR1MzIgY291bnQgPSAwO1xuJiM0MztcbiYjNDM7XHRraG9fYmxvY2tfc2V0X2l0X2luaXQoXHUwMDI2aXQsIFx1MDAyNm91dGdvaW5nLVx1MDAzZWJsb2NrX3NldCk7XG4mIzQzO1x0d2hpbGUgKChkZXZfc2VyID0ga2hvX2Jsb2NrX3NldF9pdF9yZWFkX2VudHJ5KFx1MDAyNml0KSkpIHtcbiYjNDM7XHRcdGNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChkZXZfc2VyLVx1MDAzZXJlZmNvdW50ID09IDAgXHUwMDI2XHUwMDI2ICFmb3VuZClcbiYjNDM7XHRcdFx0Zm91bmQgPSBkZXZfc2VyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGZvdW5kKVxuJiM0MztcdFx0cmV0dXJuIGZvdW5kO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBraG9fYmxvY2tfc2V0X2dyb3coXHUwMDI2b3V0Z29pbmctXHUwMDNlYmxvY2tfc2V0LCBjb3VudCAmIzQzOyAxKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvdW50ID09IDApXG4mIzQzO1x0XHRraG9fYmxvY2tfc2V0X2l0X2luaXQoXHUwMDI2aXQsIFx1MDAyNm91dGdvaW5nLVx1MDAzZWJsb2NrX3NldCk7XG4mIzQzO1xuJiM0MztcdGRldl9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3Jlc2VydmVfZW50cnkoXHUwMDI2aXQpO1xuJiM0MztcdGlmICghZGV2X3NlcilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGV2X3NlcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX2RldmljZShzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsIHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXIgPSBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZztcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VsaXZldXBkYXRlLmZyb3plbikge1xuJiM0MztcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2UgYWZ0ZXIgaXQgaXMgZnJvemVuIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZGV2X3Nlcikge1xuJiM0MztcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2UgdGhhdCBpcyBub3QgcHJlc2VydmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXZfc2VyLVx1MDAzZXJlZmNvdW50KSB7XG4mIzQzO1x0XHRwY2lfV0FSTihkZXYsIDEsIFwmIzM0O1ByZXNlcnZlZCBkZXZpY2UgaGFzIGEgMCByZWZjb3VudCFcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoLS1kZXZfc2VyLVx1MDAzZXJlZmNvdW50KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBjaV9pbmZvKGRldiwgXCYjMzQ7RGV2aWNlIHdpbGwgbm8gbG9uZ2VyIGJlIHByZXNlcnZlZCBhY3Jvc3MgbmV4dCBMaXZlIFVwZGF0ZVxcblwmIzM0Oyk7XG4mIzQzO1x0b3V0Z29pbmctXHUwMDNlc2VyLVx1MDAzZW5yX2RldmljZXMtLTtcbiYjNDM7XHRtZW1zZXQoZGV2X3NlciwgMCwgc2l6ZW9mKCpkZXZfc2VyKSk7XG4mIzQzO1x0ZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmcgPSBOVUxMO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZV9hZ2FpbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZy1cdTAwM2VyZWZjb3VudCkge1xuJiM0MztcdFx0cGNpX1dBUk4oZGV2LCAxLCBcJiMzNDtQcmVzZXJ2ZWQgZGV2aWNlIHdpdGggMCByZWZjb3VudCFcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuZHBvaW50IGRldmljZXMgc2hvdWxkIG5vdCBiZSBwcmVzZXJ2ZWQgbW9yZSB0aGFuIG9uY2UuIEJyaWRnZXMgYXJlXG4mIzQzO1x0ICogcHJlc2VydmVkIG9uY2UgZm9yIGV2ZXJ5IGRvd25zdHJlYW0gZGV2aWNlIHRoYXQgaXMgcHJlc2VydmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZGV2LVx1MDAzZXN1Ym9yZGluYXRlKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmctXHUwMDNlcmVmY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfZGV2aWNlKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywgc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2X3NlciAqZGV2X3NlcjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEbyBub3QgcHJlc2VydmUgZGV2aWNlcyB0aGF0IHJlbHkgb24gZGV2aWNlLXNwZWNpZmljIEFDUyBlcXVpdmFsZW50c1xuJiM0MztcdCAqIChmb3Igbm93KSBzaW5jZSB0aGF0IHdvdWxkIGNvbXBsaWNhdGUga2VlcGluZyBBQ1MgY29uc3RhbnQgYWNyb3NzXG4mIzQzO1x0ICogTGl2ZSBVcGRhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHtcbiYjNDM7XHRcdHBjaV93YXJuKGRldiwgXCYjMzQ7UmVmdXNpbmcgdG8gcHJlc2VydmUgZGV2aWNlIHRoYXQgcmVsaWVzIG9uIEFDUyBxdWlya3NcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZfc2VyID0gcGNpX2dldF9lbXB0eV9vcl9hcHBlbmQob3V0Z29pbmcpO1xuJiM0MztcdGlmIChJU19FUlIoZGV2X3NlcikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihkZXZfc2VyKTtcbiYjNDM7XG4mIzQzO1x0cGNpX2luZm8oZGV2LCBcJiMzNDtEZXZpY2Ugd2lsbCBiZSBwcmVzZXJ2ZWQgYWNyb3NzIG5leHQgTGl2ZSBVcGRhdGVcXG5cJiMzNDspO1xuJiM0MztcdG91dGdvaW5nLVx1MDAzZXNlci1cdTAwM2Vucl9kZXZpY2VzJiM0MzsmIzQzOztcbiYjNDM7XHRvdXRnb2luZy1cdTAwM2VzZXItXHUwMDNlZGV2aWNlcyA9IGtob19ibG9ja19zZXRfaGVhZF9wYShcdTAwMjZvdXRnb2luZy1cdTAwM2VibG9ja19zZXQpO1xuJiM0MztcbiYjNDM7XHRkZXZfc2VyLVx1MDAzZWRvbWFpbiA9IHBjaV9kb21haW5fbnIoZGV2LVx1MDAzZWJ1cyk7XG4mIzQzO1x0ZGV2X3Nlci1cdTAwM2ViZGYgPSBwY2lfZGV2X2lkKGRldik7XG4mIzQzO1x0ZGV2X3Nlci1cdTAwM2VyZWZjb3VudCA9IDE7XG4mIzQzO1xuJiM0MztcdGRldi1cdTAwM2VsaXZldXBkYXRlLm91dGdvaW5nID0gZGV2X3NlcjtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2Uoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VsaXZldXBkYXRlLmZyb3plbikge1xuJiM0MztcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtDYW5ub3QgcHJlc2VydmUgZGV2aWNlIGFmdGVyIGl0IGlzIGZyb3plbiFcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmcpXG4mIzQzO1x0XHRyZXR1cm4gcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfZGV2aWNlX2FnYWluKGRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZShvdXRnb2luZywgZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBmb3JfZWFjaF9wY2lfZGV2X2luX3BhdGgoX2QsIF9zdGFydCwgX2VuZCkgXFxcbiYjNDM7XHRmb3IgKChfZCkgPSAoX3N0YXJ0KTsgKF9kKSAhPSAoX2VuZCk7IChfZCkgPSAoX2QpLVx1MDAzZWJ1cy1cdTAwM2VzZWxmKVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19wY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX3BhdGgoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBwY2lfZGV2ICplbmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqZGV2O1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9wY2lfZGV2X2luX3BhdGgoZGV2LCBzdGFydCwgZW5kKSB7XG4mIzQzO1x0XHRpZiAocGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9kZXZpY2Uob3V0Z29pbmcsIGRldikpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXG4mIzQzO3tcbiYjNDM7XHRfX3BjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChvdXRnb2luZywgc3RhcnQsIC8qZW5kPSovTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfcGF0aChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqZGV2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7XG4mIzQzO1x0XHRyZXQgPSBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2Uob3V0Z29pbmcsIGRldik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdF9fcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBzdGFydCwgZGV2KTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSAtIFByZXNlcnZlIGEgUENJIGRldmljZSBhY3Jvc3MgTGl2ZSBVcGRhdGVcbiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2UgdG8gcHJlc2VydmUuXG4mIzQzOyAqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgbm90aWZpZXMgdGhlIFBDSSBjb3JlIHRoYXQgYSBQQ0kgZGV2aWNlIHNob3VsZCBiZVxuJiM0MzsgKiBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBuZXh0IExpdmUgVXBkYXRlLiBEcml2ZXJzIGFyZSBleHBlY3RlZCB0byBjYWxsXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgZnJvbSB0aGVpciBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXJcbiYjNDM7ICogcHJlc2VydmUoKSBjYWxsYmFjayB0byBlbnN1cmUgdGhlIG91dGdvaW5nIHN0cnVjdCBwY2lfc2VyIGlzIGFscmVhZHkgc2V0IHVwLlxuJiM0MzsgKlxuJiM0MzsgKiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSgpIGF1dG9tYXRpY2FsbHkgcHJlc2VydmVzIGFsbCBicmlkZ2VzIHVwc3RyZWFtIG9mXG4mIzQzOyAqIEBkZXYuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZWlzX3ZpcnRmbilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xuJiM0MztcbiYjNDM7XHRvdXRnb2luZyA9IHBjaV9saXZldXBkYXRlX2ZsYl9nZXRfb3V0Z29pbmcoKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG91dGdvaW5nKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKG91dGdvaW5nKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX3BhdGgob3V0Z29pbmcsIGRldik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfcHJlc2VydmUpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSAtIENhbmNlbCBwcmVzZXJ2YXRpb24gb2YgYSBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIHVucHJlc2VydmUuXG4mIzQzOyAqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSBub3RpZmllcyB0aGUgUENJIGNvcmUgdGhhdCBhIFBDSSBkZXZpY2Ugc2hvdWxkIG5vXG4mIzQzOyAqIGxvbmdlciBiZSBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBuZXh0IExpdmUgVXBkYXRlLiBEcml2ZXJzIGFyZSBleHBlY3RlZCB0byBjYWxsXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSBmcm9tIHRoZWlyIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlclxuJiM0MzsgKiB1bnByZXNlcnZlKCkgY2FsbGJhY2sgdG8gZW5zdXJlIHRoZSBvdXRnb2luZyBzdHJ1Y3QgcGNpX3NlciBpcyBhbHJlYWR5IHNldFxuJiM0MzsgKiB1cC5cbiYjNDM7ICpcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpIGF1dG9tYXRpY2FsbHkgdW5wcmVzZXJ2ZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2ZcbiYjNDM7ICogQGRldi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbiYjNDM7XG4mIzQzO1x0b3V0Z29pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X291dGdvaW5nKCk7XG4mIzQzO1x0aWYgKElTX0VSUihvdXRnb2luZykpIHtcbiYjNDM7XHRcdHBjaV93YXJuKGRldiwgXCYjMzQ7Q2Fubm90IHVucHJlc2VydmUgZGV2aWNlIHdpdGhvdXQgb3V0Z29pbmcgTGl2ZSBVcGRhdGUgc3RhdGVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBkZXYpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwY2lfZmxiX2luY29taW5nICpwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAqaW5jb21pbmcgPSBOVUxMO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGxpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZyhcdTAwMjZwY2lfbGl2ZXVwZGF0ZV9mbGIsICh2b2lkICoqKVx1MDAyNmluY29taW5nKTtcbiYjNDM7XG4mIzQzO1x0LyogTGl2ZSBVcGRhdGUgaXMgbm90IGVuYWJsZWQuICovXG4mIzQzO1x0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHQvKiBMaXZlIFVwZGF0ZSBpcyBlbmFibGVkLCBidXQgdGhlcmUgaXMgbm8gaW5jb21pbmcgRkxCIGRhdGEuICovXG4mIzQzO1x0aWYgKHJldCA9PSAtRU5PREFUQSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIExpdmUgVXBkYXRlIGlzIGVuYWJsZWQgYW5kIHRoZXJlIGlzIGluY29taW5nIEZMQiBkYXRhLCBidXQgbm9uZSBvZiBpdFxuJiM0MztcdCAqIG1hdGNoZXMgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGUuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIGNvdWxkIG1lYW4gdGhhdCBubyBQQ0kgRkxCIGRhdGEgd2FzIHBhc3NlZCBieSB0aGUgcHJldmlvdXNcbiYjNDM7XHQgKiBrZXJuZWwsIGJ1dCBpdCBjb3VsZCBhbHNvIG1lYW4gdGhlIHByZXZpb3VzIGtlcm5lbCB1c2VkIGEgZGlmZmVyZW50XG4mIzQzO1x0ICogY29tcGF0aWJpbGl0eSBzdHJpbmcgKGkuZS4gYSBkaWZmZXJlbnQgQUJJKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmV0ID09IC1FTk9FTlQpIHtcbiYjNDM7XHRcdHByX2luZm9fb25jZShcJiMzNDtObyBpbmNvbWluZyBGTEIgbWF0Y2hlZCAlc1xcblwmIzM0OywgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGUpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZXJlIGlzIGluY29taW5nIEZMQiBkYXRhIHRoYXQgbWF0Y2hlcyBwY2lfbGl2ZXVwZGF0ZV9mbGIuY29tcGF0aWJsZVxuJiM0MztcdCAqIGJ1dCBpdCBjYW5ub3QgYmUgcmV0cmlldmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRwYW5pYyhcJiMzNDtGYWlsZWQgdG8gcmV0cmlldmUgaW5jb21pbmcgRkxCIGRhdGEgKCVkKVxcblwmIzM0OywgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGluY29taW5nO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRsaXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luKCkgLSBEZXRlcm1pbmUgaWYgYSBicmlkZ2Ugc2hvdWxkIGluaGVyaXQgYnVzIG51bWJlcnNcbiYjNDM7ICogQGJ1czogVGhlIHBhcmVudCBidXMgb2YgdGhlIGJyaWRnZS5cbiYjNDM7ICogQGRldjogVGhlIFBDSSBicmlkZ2UgZGV2aWNlLlxuJiM0MzsgKiBAcGFzczogVGhlIHNjYW4gcGFzcyAoMCBmb3IgZmlyc3QgcGFzcywgMSBmb3Igc2Vjb25kIHBhc3MpLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUENJIGNvcmUgd2hlbiBpdCBiZWdpbnMgc2Nhbm5pbmcgYSBicmlkZ2UuXG4mIzQzOyAqIEl0IGRldGVybWluZXMgd2hldGhlciB0aGUgYnJpZGdlIHNob3VsZCBpbmhlcml0IHRoZSBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlXG4mIzQzOyAqIGJ1cyBudW1iZXJzIGFzc2lnbmVkIHRvIGl0IGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvXG4mIzQzOyAqIGtlZXAgYnVzIG51bWJlcnMgY29uc3RhbnQgZm9yIHByZXNlcnZlZCBkZXZpY2VzIGRvd25zdHJlYW0gb2YgdGhlIGJyaWRnZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBUcnVlIGlmIGJ1cyBudW1iZXJzIHNob3VsZCBiZSBpbmhlcml0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBpbnQgcGFzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwYXJlbnQgPSBidXMtXHUwMDNlc2VsZjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbiB0aGUgc2Vjb25kIHBhc3MsIHJldXNlIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQgb24gdGhlIGZpcnN0IHBhc3NcbiYjNDM7XHQgKiBzbyB0aGF0IHRoZSBwYXNzZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCBvbmUgYW5vdGhlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGFzcylcbiYjNDM7XHRcdHJldHVybiBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmhlcml0X2J1c2VzO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBwYXJlbnQgYnJpZGdlIGlzIGJlaW5nIGZvcmNlZCB0byBpbmhlcml0IGl0cyBidXMgbnVtYmVyc1xuJiM0MztcdCAqIGR1cmluZyB0aGlzIHNjYW4gdGhlbiB0aGlzIGJyaWRnZSBtdXN0IGFzIHdlbGwsIG90aGVyd2lzZSB0aGUgUENJXG4mIzQzO1x0ICogY29yZSBjb3VsZCBleHBhbmQgdGhpcyBicmlkZ2UmIzM5O3MgcmVzZXJ2YXRpb24gYmV5b25kIGl0cyBwYXJlbnQgKHdoaWNoXG4mIzQzO1x0ICogY2Fubm90IGV4cGFuZCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBhcmVudCBcdTAwMjZcdTAwMjYgcGFyZW50LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcykge1xuJiM0MztcdFx0ZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9IHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgYW55IGluY29taW5nIHByZXNlcnZlZCBkZXZpY2VzLCBmb3JjZSB0aGVcbiYjNDM7XHQgKiBidXMgbnVtYmVycyB0byBiZSBpbmhlcml0ZWQgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIGJ1cyBudW1iZXJzXG4mIzQzO1x0ICogYXNzaWduZWQgdG8gdGhvc2UgZGV2aWNlcyBkdXJpbmcgZW51bWVyYXRpb24uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUbyBrZWVwIHRoaW5ncyBzaW1wbGUsIGluaGVyaXQgYnVzIG51bWJlcnMgb24gYWxsIGJyaWRnZXMgaWYgYW55IFBDSVxuJiM0MztcdCAqIGRldmljZXMgYXJlIGluY29taW5nLCB0byBlbnN1cmUgdGhhdCBubyBicmlkZ2UmIzM5O3MgcmVzZXJ2YXRpb24gaXNcbiYjNDM7XHQgKiBleHBhbmRlZCB0byBvdmVybGFwIHdpdGggYSBwcmVzZXJ2ZWQgZGV2aWNlIGRvd25zdHJlYW0gb2YgYSBkaWZmZXJlbnRcbiYjNDM7XHQgKiBicmlkZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAqaW5jb21pbmc7XG4mIzQzO1xuJiM0MztcdFx0aW5jb21pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKCk7XG4mIzQzO1x0XHRpZiAoIWluY29taW5nKSB7XG4mIzQzO1x0XHRcdGRldi1cdTAwM2VsaXZldXBkYXRlLmluaGVyaXRfYnVzZXMgPSBmYWxzZTtcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJdCBpcyBzYWZlIHRvIHNhbXBsZSBpbmNvbWluZy1cdTAwM2VzZXItXHUwMDNlbnJfZGV2aWNlcyBhbmQgdGhlblxuJiM0MztcdFx0ICogZHJvcCB0aGUgcndzZW0gc2luY2UgbnJfZGV2aWNlcyB3aWxsIG9ubHkgZGVjcmVhc2UuIFRodXMgdGhlXG4mIzQzO1x0XHQgKiBvbmx5IFwmIzM0O3JhY2VcJiMzNDsgaXMgdGhhdCB0aGUgY3VycmVudCBzY2FuIHdpbGwgYmUgb3Zlcmx5XG4mIzQzO1x0XHQgKiBjb25zZXJ2YXRpdmUgYW5kIGZvcmNlIGJ1cyBpbmhlcml0YW5jZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9ICEhaW5jb21pbmctXHUwMDNlc2VyLVx1MDAzZW5yX2RldmljZXM7XG4mIzQzO1x0XHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZCgpIC0gRmluaXNoIHNjYW5uaW5nIGEgUENJIGJyaWRnZVxuJiM0MzsgKiBAZGV2OiBUaGUgUENJIGJyaWRnZSBkZXZpY2UuXG4mIzQzOyAqIEBwYXNzOiBUaGUgc2NhbiBwYXNzICgwIGZvciBmaXJzdCBwYXNzLCAxIGZvciBzZWNvbmQgcGFzcykuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBQQ0kgY29yZSB3aGVuIGl0IGZpbmlzaGVzIHNjYW5uaW5nIGEgYnJpZGdlLlxuJiM0MzsgKiBJdCBjbGVhcnMgdGhlIGluaGVyaXRhbmNlIHN0YXR1cyBhZnRlciB0aGUgc2Vjb25kIHBhc3Mgc28gaXQgY2FuIGJlXG4mIzQzOyAqIHJlLWV2YWx1YXRlZCBvbiBmdXR1cmUgc2NhbnMuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2xlYXIgaW5oZXJpdF9idXNlcyBhZnRlciB0aGUgc2Vjb25kIHBhc3Mgc28gaXQgY2FuIGJlIHJlLWV2YWx1YXRlZFxuJiM0MztcdCAqIG9uIGZ1dHVyZSBzY2Fucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGFzcylcbiYjNDM7XHRcdGRldi1cdTAwM2VsaXZldXBkYXRlLmluaGVyaXRfYnVzZXMgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbiYjNDM7XHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBrZXk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7XG4mIzQzO1xuJiM0MztcdGluY29taW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZygpO1xuJiM0MztcdGlmICghaW5jb21pbmcpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGtleSA9IHBjaV9zZXJfeGFfa2V5KHBjaV9kb21haW5fbnIoZGV2LVx1MDAzZWJ1cyksIHBjaV9kZXZfaWQoZGV2KSk7XG4mIzQzO1x0ZGV2X3NlciA9IHhhX2xvYWQoXHUwMDI2aW5jb21pbmctXHUwMDNleGEsIGtleSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBkZXZpY2Ugd2FzIG5vdCBwcmVzZXJ2ZWQgYWNyb3NzIExpdmUgVXBkYXRlLCBvciBpdCB3YXMgcHJlc2VydmVkXG4mIzQzO1x0ICogYnV0IGhhcyBhbHJlYWR5IGJlZW4gcHJvYmVkIGFuZCBnb25lIHRocm91Z2ggcGNpX2xpdmV1cGRhdGVfZmluaXNoKCksXG4mIzQzO1x0ICogZS5nLiBkdWUgdG8gcmVtb3ZpbmcgYW5kIHJlLWFkZGluZyB0aGUgZGV2aWNlLiBFaXRoZXIgd2F5LCBpdCYjMzk7cyBub3RcbiYjNDM7XHQgKiB0cmVhdGVkIGFzIGluY29taW5nLXByZXNlcnZlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWRldl9zZXIgfHwgIWRldl9zZXItXHUwMDNlcmVmY291bnQpIHtcbiYjNDM7XHRcdHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcbiYjNDM7XHRwY2lfaW5mbyhkZXYsIFwmIzM0O0RldmljZSB3YXMgcHJlc2VydmVkIGJ5IHByZXZpb3VzIGtlcm5lbCBhY3Jvc3MgTGl2ZSBVcGRhdGVcXG5cJiMzNDspO1xuJiM0MztcdGRldi1cdTAwM2VsaXZldXBkYXRlLmluY29taW5nID0gZGV2X3NlcjtcbiYjNDM7XHRkZXYtXHUwMDNlbGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIb2xkIHRoZSByZWYgb24gdGhlIGluY29taW5nIEZMQiB1bnRpbCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSBzb1xuJiM0MztcdCAqIHRoYXQgZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcgY2Fubm90IGdldCBmcmVlZCB3aGlsZSB0aGUgUENJIGNvcmVcbiYjNDM7XHQgKiBoYXMgYSBwb2ludGVyIHRvIGl0LiBJdCYjMzk7cyBiZXR0ZXIgdG8gbGVhayB0aGUgaW5jb21pbmcgRkxCIHRoYW4gZG8gYVxuJiM0MztcdCAqIHVzZS1hZnRlci1mcmVlIGlmIGRyaXZlciBkb2VzIG5vdCBjYWxsIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpLlxuJiM0MztcdCAqL1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEl0IHNob3VsZCBiZSBzYWZlIHRvIFJFQURfT05DRSgpIG91dHNpZGUgb2YgdGhlIHJ3c2VtIGR1cmluZyBjbGVhbnVwXG4mIzQzO1x0ICogc2luY2UgdGhlcmUgc2hvdWxkIG5vIGxvbmdlciBiZSBhbnkgcmVmZXJlbmNlcyB0byBAZGV2IG9uIHRoZSBzeXN0ZW0uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gcHJhY3RpY2UuIERyaXZlcnMgc2hvdWxkIGJsb2NrIHJlbW92YWxcbiYjNDM7XHQgKiB3aGlsZSBhIGRldmljZSBpcyBwcmVzZXJ2ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFJFQURfT05DRShkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZykpXG4mIzQzO1x0XHRwY2lfV0FSTihkZXYsIDEsIFwmIzM0O0Rlc3Ryb3lpbmcgb3V0Z29pbmctcHJlc2VydmVkIGRldmljZSFcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKGRldi1cdTAwM2VsaXZldXBkYXRlLmluY29taW5nKSkge1xuJiM0MztcdFx0cGNpX1dBUk4oZGV2LCAxLCBcJiMzNDtEZXN0cm95aW5nIGluY29taW5nLXByZXNlcnZlZCBkZXZpY2UhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xuJiM0MztcdGRldi1cdTAwM2VsaXZldXBkYXRlLmZyb3plbiA9IDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfZmluaXNoX2RldmljZShzdHJ1Y3QgcGNpX3NlciAqc2VyLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZykge1xuJiM0MztcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtDYW5ub3QgZmluaXNoIHByZXNlcnZpbmcgYW4gdW5wcmVzZXJ2ZWQgZGV2aWNlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZy1cdTAwM2VyZWZjb3VudCkge1xuJiM0MztcdFx0cGNpX1dBUk4oZGV2LCAxLCBcJiMzNDtQcmVzZXJ2ZWQgZGV2aWNlIGhhcyBhIDAgcmVmY291bnQhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEZWNyZW1lbnQgdGhlIHJlZmNvdW50IHNvIHRoaXMgZGV2aWNlIGRvZXMgbm90IGdldCB0cmVhdGVkIGFzIGFuXG4mIzQzO1x0ICogaW5jb21pbmcgZGV2aWNlIGFnYWluLCBlLmcuIGluIGNhc2UgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKClcbiYjNDM7XHQgKiBnZXRzIGNhbGxlZCBhZ2FpbiBiZWNhdXNlIHRoZSBkZXZpY2UgaXMgaG90LXBsdWdnZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKC0tZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmctXHUwMDNlcmVmY291bnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cGNpX2luZm8oZGV2LCBcJiMzNDtEZXZpY2UgaXMgZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiBMaXZlIFVwZGF0ZVxcblwmIzM0Oyk7XG4mIzQzO1x0ZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcgPSBOVUxMO1xuJiM0MztcdHNlci1cdTAwM2Vucl9kZXZpY2VzLS07XG4mIzQzO1x0cGNpX2xpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZygpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2hfcGF0aChzdHJ1Y3QgcGNpX3NlciAqc2VyLCBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqZGV2O1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9wY2lfZGV2X2luX3BhdGgoZGV2LCBzdGFydCwgTlVMTCkge1xuJiM0MztcdFx0aWYgKHBjaV9saXZldXBkYXRlX2ZpbmlzaF9kZXZpY2Uoc2VyLCBkZXYpKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkgLSBGaW5pc2ggdGhlIHByZXNlcnZhdGlvbiBvZiBhIFBDSSBkZXZpY2VcbiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkgbm90aWZpZXMgdGhlIFBDSSBjb3JlIHRoYXQgYSBQQ0kgZGV2aWNlIHRoYXQgd2FzXG4mIzQzOyAqIHByZXNlcnZlZCBhY3Jvc3MgdGhlIHByZXZpb3VzIExpdmUgVXBkYXRlIGhhcyBmaW5pc2hlZCBwYXJ0aWNpcGF0aW5nIGluIExpdmVcbiYjNDM7ICogVXBkYXRlLiBEcml2ZXJzIG11c3QgY2FsbCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSBmcm9tIHRoZWlyIHN0cnVjdFxuJiM0MzsgKiBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciBmaW5pc2goKSBjYWxsYmFjayB0byBlbnN1cmUgdGhlIGluY29taW5nIHN0cnVjdFxuJiM0MzsgKiBwY2lfc2VyIGlzIGFsbG9jYXRlZC5cbiYjNDM7ICpcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkgYXV0b21hdGljYWxseSBmaW5pc2hlcyBhbGwgYnJpZGdlcyB1cHN0cmVhbSBvZiBAZGV2LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbiYjNDM7XG4mIzQzO1x0aW5jb21pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKCk7XG4mIzQzO1x0aWYgKCFpbmNvbWluZykge1xuJiM0MztcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtDYW5ub3QgZmluaXNoIHByZXNlcnZpbmcgZGV2aWNlIHdpdGhvdXQgaW5jb21pbmcgRkxCXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBjaV9saXZldXBkYXRlX2ZpbmlzaF9wYXRoKGluY29taW5nLVx1MDAzZXNlciwgZGV2KTtcbiYjNDM7XHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfZmluaXNoKTtcbiYjNDM7XG4mIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfaW5pdF9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlYWNzX2NhcCB8fCAhZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZGV2LVx1MDAzZWFjc19jYXAgJiM0MzsgUENJX0FDU19DVFJMLCBcdTAwMjZkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5hY3NfY3RybCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MTYgYWNzX2N0cmwgPSBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5hY3NfY3RybDtcbiYjNDM7XHR1MTYgYWNzX2NhcCA9IGRldi1cdTAwM2VhY3NfY2FwO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSBsaXZldXBkYXRlLndhc19wcmVzZXJ2ZWQgaW5zdGVhZCBvZiBsaXZldXBkYXRlLmluY29taW5nIHNpbmNlIHRoZVxuJiM0MztcdCAqIGRldmljZSYjMzk7cyBBQ1MgY29udHJvbHMgc2hvdWxkIG5vdCBjaGFuZ2UgZXZlbiBhZnRlciB0aGUgZGV2aWNlIGlzXG4mIzQzO1x0ICogZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiB0aGUgTGl2ZSBVcGRhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHByZXZpb3VzIGtlcm5lbCBzaG91bGQgbm90IGhhdmUgcHJlc2VydmVkIGFueSBkZXZpY2VzIHRoYXRcbiYjNDM7XHQgKiByZXF1aXJlIGRldmljZS1zcGVjaWZpYyBxdWlya3MgdG8gZW5hYmxlIEFDUywgYnV0IGlmIHN1Y2ggYSBkZXZpY2UgaXNcbiYjNDM7XHQgKiBkZXRlY3RlZCAoZS5nLiBuZXcgZGV2aWNlLXNwZWNpZmljIEFDUyBxdWlyayBpbiB0aGUgY3VycmVudCBrZXJuZWwpLFxuJiM0MztcdCAqIGxvZyBhIGJpZyB3YXJuaW5nIGFuZCBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBlbmFibGUgQUNTIHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHtcbiYjNDM7XHRcdHBjaV93YXJuKGRldiwgXCYjMzQ7RGV2aWNlLXNwZWNpZmljIHF1aXJrIHJlcXVpcmVkIHRvIGVuYWJsZSBBQ1MhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRSh0cnVlKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGFjc19jYXApXG4mIzQzO1x0XHRwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBhY3NfY2FwICYjNDM7IFBDSV9BQ1NfQ1RSTCwgYWNzX2N0cmwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHUxNiB2YWw7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGRldiwgUENJX0VYUF9ERVZDVEwyLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGRldi1cdTAwM2VhcmlfZW5hYmxlZCA9ICEhKHZhbCBcdTAwMjYgUENJX0VYUF9ERVZDVEwyX0FSSSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfb3V0Z29pbmcoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbiYjNDM7XHRwY2lfV0FSTl9PTkNFKGRldiwgIWRldi1cdTAwM2VsaXZldXBkYXRlLmZyb3plbiwgXCYjMzQ7UHJlc2VydmF0aW9uIHN0YXR1cyBpcyB1bnN0YWJsZSFcXG5cJiMzNDspO1xuJiM0MztcdHJldHVybiBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKCkgLSBDaGVjayBpZiBhIGRldmljZSBpcyBpbmNvbWluZy1wcmVzZXJ2ZWRcbiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2UgdG8gY2hlY2tcbiYjNDM7ICpcbiYjNDM7ICogQ2hlY2sgaWYgYSBkZXZpY2Ugd2FzIHByZXNlcnZlZCBhY3Jvc3MgTGl2ZSBVcGRhdGUgYnkgdGhlIHByZXZpb3VzIGtlcm5lbCxcbiYjNDM7ICogaS5lLiB0aGUgZGV2aWNlIGlzIGluY29taW5nLXByZXNlcnZlZC4gTm90ZSB0aGF0IGEgZGV2aWNlIGlzIG9ubHkgY29uc2lkZXJlZFxuJiM0MzsgKiBpbmNvbWluZy1wcmVzZXJ2ZWQgcHJpb3IgdG8gcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkuIEl0IGlzIHVwIHRvIGRyaXZlcnMgdG9cbiYjNDM7ICogc3luY2hyb25pemUgdXNhZ2Ugb2YgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoKSB3aXRoIHRoZWlyIG93biBjYWxsIHRvXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIHRvIGF2b2lkIGFjdGluZyBvbiBzdGFsZSBkYXRhLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiBUcnVlIGlmIHRoZSBkZXZpY2UgaXMgaW5jb21pbmctcHJlc2VydmVkLCBmYWxzZSBvdGhlcndpc2UuXG4mIzQzOyAqL1xuJiM0Mztib29sIHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7XG4mIzQzO1x0cmV0dXJuIGRldi1cdTAwM2VsaXZldXBkYXRlLmluY29taW5nO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoKSAtIFJlZ2lzdGVyIGEgZmlsZSBoYW5kbGVyIHdpdGggdGhlIFBDSSBjb3JlXG4mIzQzOyAqIEBmaDogVGhlIGZpbGUgaGFuZGxlciB0byByZWdpc3Rlci5cbiYjNDM7ICpcbiYjNDM7ICogRHJpdmVycyBzaG91bGQgY2FsbCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoKSB0byByZWdpc3RlciB0aGVpclxuJiM0MzsgKiBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgd2l0aCB0aGUgUENJIGNvcmUuIFRoaXMgZW5hYmxlcyB0aGUgUENJIGNvcmVcbiYjNDM7ICogdG8gYWxsb2NhdGUgaXRzIG91dGdvaW5nIHN0cnVjdCBwY2lfc2VyIHdoZW5ldmVyIHRoZSBmaXJzdCBkZXZpY2UgaXNcbiYjNDM7ICogcHJlc2VydmVkLCBhbmQgZnJlZSBpdCB3aGVuIHRoZSBsYXN0IGRldmljZSBpcyB1bnByZXNlcnZlZC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbiYjNDM7e1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O1JlZ2lzdGVyaW5nIGZpbGUgaGFuZGxlciBcXFwmIzM0OyVzXFxcJiMzNDtcXG5cJiMzNDssIGZoLVx1MDAzZWNvbXBhdGlibGUpO1xuJiM0MztcdHJldHVybiBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihmaCwgXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKCkgLSBVbnJlZ2lzdGVyIGEgZmlsZSBoYW5kbGVyIHdpdGggdGhlIFBDSSBjb3JlXG4mIzQzOyAqIEBmaDogVGhlIGZpbGUgaGFuZGxlciB0byB1bnJlZ2lzdGVyLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxuJiM0Mzt7XG4mIzQzO1x0cHJfZGVidWcoXCYjMzQ7VW5yZWdpc3RlcmluZyBmaWxlIGhhbmRsZXIgXFxcJiMzNDslc1xcXCYjMzQ7XFxuXCYjMzQ7LCBmaC1cdTAwM2Vjb21wYXRpYmxlKTtcbiYjNDM7XHRsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKGZoLCBcdTAwMjZwY2lfbGl2ZXVwZGF0ZV9mbGIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9saXZldXBkYXRlLmggYi9kcml2ZXJzL3BjaS9saXZldXBkYXRlLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjI2NjQwNmFhYWM4MGRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaFxuQEAgLTAsMCAmIzQzOzEsNjggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogUENJIExpdmUgVXBkYXRlIHN1cHBvcnQgKGNvcmUgQVBJKVxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIEdvb2dsZSBMTEMuXG4mIzQzOyAqIERhdmlkIE1hdGxhY2sgXHUwMDNjZG1hdGxhY2tAZ29vZ2xlLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7I2lmbmRlZiBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0hcbiYjNDM7I2RlZmluZSBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFXG4mIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2ZyZWV6ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjNDM7Ym9vbCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIGludCBwYXNzKTtcbiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBhc3MpO1xuJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuJiM0MztpbnQgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjNDM7aW50IHBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldik7XG4mIzQzO2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfb3V0Z29pbmcoc3RydWN0IHBjaV9kZXYgKmRldik7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luKHN0cnVjdCBwY2lfYnVzICpidXMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgaW50IHBhc3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBhc3MpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2xpdmV1cGRhdGVfaXNfb3V0Z29pbmcoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmNcbmluZGV4IGYzNjc3OGU2MmFjMWE1Li40N2NiM2RjYWE5Mjc4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jXG5AQCAtMjEsNiAmIzQzOzIxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwLW9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtsaXZldXBkYXRlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtwY2kuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3BjaWUvcG9ydGRydi5oXCYjMzQ7XG4gXG5AQCAtNTM2LDYgJiM0Mzs1MzcsNyBAQCBzdGF0aWMgdm9pZCBwY2lfZGV2aWNlX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpO1xuIFx0c3RydWN0IHBjaV9kcml2ZXIgKmRydiA9IHBjaV9kZXYtXHUwMDNlZHJpdmVyO1xuIFxuJiM0MztcdHBjaV9saXZldXBkYXRlX2ZyZWV6ZShwY2lfZGV2KTtcbiBcdHBtX3J1bnRpbWVfcmVzdW1lKGRldik7XG4gXG4gXHRpZiAoZHJ2IFx1MDAyNlx1MDAyNiBkcnYtXHUwMDNlc2h1dGRvd24pXG5AQCAtNTQ0LDExICYjNDM7NTQ2LDE0IEBAIHN0YXRpYyB2b2lkIHBjaV9kZXZpY2Vfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KVxuIFx0LypcbiBcdCAqIElmIHRoaXMgaXMgYSBrZXhlYyByZWJvb3QsIHR1cm4gb2ZmIEJ1cyBNYXN0ZXIgYml0IG9uIHRoZVxuIFx0ICogZGV2aWNlIHRvIHRlbGwgaXQgdG8gbm90IGNvbnRpbnVlIHRvIGRvIERNQS4gRG9uJiMzOTt0IHRvdWNoXG4tXHQgKiBkZXZpY2VzIGluIEQzY29sZCBvciB1bmtub3duIHN0YXRlcy5cbiYjNDM7XHQgKiBkZXZpY2VzIGJlaW5nIHByZXNlcnZlZCBmb3IgTGl2ZSBVcGRhdGUgb3IgaW4gRDNjb2xkIG9yXG4mIzQzO1x0ICogdW5rbm93biBzdGF0ZXMuXG4mIzQzO1x0ICpcbiBcdCAqIElmIGl0IGlzIG5vdCBhIGtleGVjIHJlYm9vdCwgZmlybXdhcmUgd2lsbCBoaXQgdGhlIFBDSVxuIFx0ICogZGV2aWNlcyB3aXRoIGJpZyBoYW1tZXIgYW5kIHN0b3AgdGhlaXIgRE1BIGFueSB3YXkuXG4gXHQgKi9cbi1cdGlmIChrZXhlY19pbl9wcm9ncmVzcyBcdTAwMjZcdTAwMjYgKHBjaV9kZXYtXHUwMDNlY3VycmVudF9zdGF0ZSBcdTAwM2M9IFBDSV9EM2hvdCkpXG4mIzQzO1x0aWYgKGtleGVjX2luX3Byb2dyZXNzIFx1MDAyNlx1MDAyNiAhcGNpX2xpdmV1cGRhdGVfaXNfb3V0Z29pbmcocGNpX2RldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBjaV9kZXYtXHUwMDNlY3VycmVudF9zdGF0ZSBcdTAwM2M9IFBDSV9EM2hvdClcbiBcdFx0cGNpX2NsZWFyX21hc3RlcihwY2lfZGV2KTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuY1xuaW5kZXggNzdiMTdiMTNlZTYxNTQuLmUwYzEzM2I2NmEzNTkyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS5jXG5AQCAtMzQsNiAmIzQzOzM0LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xpdmV1cGRhdGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3BjaS5oXCYjMzQ7XG4gXG4gREVGSU5FX01VVEVYKHBjaV9zbG90X211dGV4KTtcbkBAIC0xMDA4LDYgJiM0MzsxMDEwLDkgQEAgdm9pZCBwY2lfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0Ym9vbCBlbmFibGVfYWNzID0gZmFsc2U7XG4gXHRpbnQgcG9zO1xuIFxuJiM0MztcdGlmICghcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qIElmIGFuIGlvbW11IGlzIHByZXNlbnQgd2Ugc3RhcnQgd2l0aCBrZXJuZWwgZGVmYXVsdCBjYXBzICovXG4gXHRpZiAocGNpX2Fjc19lbmFibGUpIHtcbiBcdFx0aWYgKHBjaV9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhkZXYpKVxuQEAgLTM1MjMsNyAmIzQzOzM1MjgsNyBAQCB2b2lkIHBjaV9jb25maWd1cmVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gXHR1MzIgY2FwO1xuIFx0c3RydWN0IHBjaV9kZXYgKmJyaWRnZTtcbiBcbi1cdGlmIChwY2llX2FyaV9kaXNhYmxlZCB8fCAhcGNpX2lzX3BjaWUoZGV2KSB8fCBkZXYtXHUwMDNlZGV2Zm4pXG4mIzQzO1x0aWYgKCFwY2lfaXNfcGNpZShkZXYpIHx8IGRldi1cdTAwM2VkZXZmbilcbiBcdFx0cmV0dXJuO1xuIFxuIFx0YnJpZGdlID0gZGV2LVx1MDAzZWJ1cy1cdTAwM2VzZWxmO1xuQEAgLTM1MzQsNiAmIzQzOzM1MzksMTIgQEAgdm9pZCBwY2lfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aWYgKCEoY2FwIFx1MDAyNiBQQ0lfRVhQX0RFVkNBUDJfQVJJKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICghcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaShicmlkZ2UpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAocGNpZV9hcmlfZGlzYWJsZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfQVJJKSkge1xuIFx0XHRwY2llX2NhcGFiaWxpdHlfc2V0X3dvcmQoYnJpZGdlLCBQQ0lfRVhQX0RFVkNUTDIsXG4gXHRcdFx0XHRcdCBQQ0lfRVhQX0RFVkNUTDJfQVJJKTtcbkBAIC0zNjg5LDYgJiM0MzszNzAwLDcgQEAgdm9pZCBwY2lfYWNzX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldilcbiBcbiBcdHBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICYjNDM7IFBDSV9BQ1NfQ0FQLCBcdTAwMjZkZXYtXHUwMDNlYWNzX2NhcGFiaWxpdGllcyk7XG4gXHRwY2lfZGlzYWJsZV9icm9rZW5fYWNzX2NhcChkZXYpO1xuJiM0MztcdHBjaV9saXZldXBkYXRlX2luaXRfYWNzKGRldik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcbmluZGV4IDQ0NjllMWE3N2YzYzEzLi45ODhhMThiMzIwNGFmNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2kuaFxuQEAgLTEwNDcsNiAmIzQzOzEwNDcsNyBAQCB2b2lkIHBjaV9hY3NfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB2b2lkIHBjaV9lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuICNpZmRlZiBDT05GSUdfUENJX1FVSVJLU1xuIGludCBwY2lfZGV2X3NwZWNpZmljX2Fjc19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBhY3NfZmxhZ3MpO1xuJiM0Mztib29sIHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaV9kZXZfc3BlY2lmaWNfZGlzYWJsZV9hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gdm9pZCBwY2lfZGlzYWJsZV9icm9rZW5fYWNzX2NhcChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG5AQCAtMTA1Nyw2ICYjNDM7MTA1OCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2lfZGV2X3NwZWNpZmljX2Fjc19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4ge1xuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpX25lZWRfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIHtcbiBcdHJldHVybiAtRU5PVFRZO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2JlLmMgYi9kcml2ZXJzL3BjaS9wcm9iZS5jXG5pbmRleCBkZDBhYmJjNjNlMThkMS4uMTY1OTczYmM5MmFhYmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wcm9iZS5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xpdmV1cGRhdGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3BjaS5oXCYjMzQ7XG4gXG4gc3RhdGljIHN0cnVjdCByZXNvdXJjZSBidXNuX3Jlc291cmNlID0ge1xuQEAgLTEzOTYsNiAmIzQzOzEzOTcsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0XHRcdCAgaW50IG1heCwgdW5zaWduZWQgaW50IGF2YWlsYWJsZV9idXNlcyxcbiBcdFx0XHRcdCAgaW50IHBhc3MpXG4ge1xuJiM0MztcdGJvb2wgbGl2ZXVwZGF0ZSwgYXNzaWduX25ld19idXNlcyA9IHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKTtcbiBcdHN0cnVjdCBwY2lfYnVzICpjaGlsZDtcbiBcdHUzMiBidXNlcztcbiBcdHUxNiBiY3RsO1xuQEAgLTE0MDUsNiAmIzQzOzE0MDcsMTAgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHR1OCBmaXhlZF9zZWMsIGZpeGVkX3N1YjtcbiBcdGludCBuZXh0X2J1c25yO1xuIFxuJiM0MztcdGxpdmV1cGRhdGUgPSBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbihidXMsIGRldiwgcGFzcyk7XG4mIzQzO1x0aWYgKGxpdmV1cGRhdGUpXG4mIzQzO1x0XHRhc3NpZ25fbmV3X2J1c2VzID0gZmFsc2U7XG4mIzQzO1xuIFx0LypcbiBcdCAqIE1ha2Ugc3VyZSB0aGUgYnJpZGdlIGlzIHBvd2VyZWQgb24gdG8gYmUgYWJsZSB0byBhY2Nlc3MgY29uZmlnXG4gXHQgKiBzcGFjZSBvZiBkZXZpY2VzIGJlbG93IGl0LlxuQEAgLTE0NDgsOCAmIzQzOzE0NTQsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoKHNlY29uZGFyeSB8fCBzdWJvcmRpbmF0ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIXBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSBcdTAwMjZcdTAwMjYgIWJyb2tlbikge1xuJiM0MztcdGlmICgoc2Vjb25kYXJ5IHx8IHN1Ym9yZGluYXRlKSBcdTAwMjZcdTAwMjYgIWFzc2lnbl9uZXdfYnVzZXMgXHUwMDI2XHUwMDI2ICFicm9rZW4pIHtcbiBcdFx0dW5zaWduZWQgaW50IGNtYXgsIGJ1c2VzO1xuIFxuIFx0XHQvKlxuQEAgLTE0OTEsOCAmIzQzOzE0OTYsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0ICogZG8gaW4gdGhlIHNlY29uZCBwYXNzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFwYXNzKSB7XG4tXHRcdFx0aWYgKHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSB8fCBicm9rZW4pXG4tXG4mIzQzO1x0XHRcdGlmIChhc3NpZ25fbmV3X2J1c2VzIHx8IGJyb2tlbilcbiBcdFx0XHRcdC8qXG4gXHRcdFx0XHQgKiBUZW1wb3JhcmlseSBkaXNhYmxlIGZvcndhcmRpbmcgb2YgdGhlXG4gXHRcdFx0XHQgKiBjb25maWd1cmF0aW9uIGN5Y2xlcyBvbiBhbGwgYnJpZGdlcyBpblxuQEAgLTE1MDYsNiAmIzQzOzE1MTAsMTEgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdGlmIChsaXZldXBkYXRlKSB7XG4mIzQzO1x0XHRcdHBjaV9lcnIoZGV2LCBcJiMzNDtDYW5ub3QgcmVjb25maWd1cmUgYnJpZGdlIGR1cmluZyBMaXZlIFVwZGF0ZSwgc2tpcHBpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIENsZWFyIGVycm9ycyAqL1xuIFx0XHRwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfU1RBVFVTLCAweGZmZmYpO1xuIFxuQEAgLTE1NjYsNiAmIzQzOzE1NzUsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgYmN0bCk7XG4gXG4gXHRwbV9ydW50aW1lX3B1dChcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQoZGV2LCBwYXNzKTtcbiBcbiBcdHJldHVybiBtYXg7XG4gfVxuQEAgLTIwNjQsNiAmIzQzOzIwNzQsOCBAQCBpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aWYgKHBjaV9lYXJseV9kdW1wKVxuIFx0XHRlYXJseV9kdW1wX3BjaV9kZXZpY2UoZGV2KTtcbiBcbiYjNDM7XHRwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2UoZGV2KTtcbiYjNDM7XG4gXHQvKiBOZWVkIHRvIGhhdmUgZGV2LVx1MDAzZWNsYXNzIHJlYWR5ICovXG4gXHRkZXYtXHUwMDNlY2ZnX3NpemUgPSBwY2lfY2ZnX3NwYWNlX3NpemUoZGV2KTtcbiBcbkBAIC0yMTg3LDYgJiM0MzsyMTk5LDcgQEAgaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdGRlZmF1bHQ6XHRcdFx0XHQgICAgLyogdW5rbm93biBoZWFkZXIgKi9cbiBcdFx0cGNpX2VycihkZXYsIFwmIzM0O3Vua25vd24gaGVhZGVyIHR5cGUgJTAyeCwgaWdub3JpbmcgZGV2aWNlXFxuXCYjMzQ7LFxuIFx0XHRcdGRldi1cdTAwM2VoZHJfdHlwZSk7XG4mIzQzO1x0XHRwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShkZXYpO1xuIFx0XHRwY2lfcmVsZWFzZV9vZl9ub2RlKGRldik7XG4gXHRcdHJldHVybiAtRUlPO1xuIFxuQEAgLTI0ODUsNiAmIzQzOzI0OTgsNyBAQCBzdGF0aWMgdm9pZCBwY2lfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KVxuIFxuIFx0cGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTtcbiBcdHBjaV9yZWxlYXNlX2NhcGFiaWxpdGllcyhwY2lfZGV2KTtcbiYjNDM7XHRwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShwY2lfZGV2KTtcbiBcdHBjaV9yZWxlYXNlX29mX25vZGUocGNpX2Rldik7XG4gXHRwY2liaW9zX3JlbGVhc2VfZGV2aWNlKHBjaV9kZXYpO1xuIFx0cGNpX2J1c19wdXQocGNpX2Rldi1cdTAwM2VidXMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmNcbmluZGV4IGIwOWYyN2Y3ODQ2ZmNkLi45OWI4MTlmMzhlNDljMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9xdWlya3MuY1xuQEAgLTUzNzQsOSAmIzQzOzUzNzQsNiBAQCBzdGF0aWMgdm9pZCBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3JwX21wY19hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbiAgKi9cbiBzdGF0aWMgaW50IHBjaV9xdWlya19lbmFibGVfaW50ZWxfcGNoX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIHtcbi1cdGlmICghcGNpX3F1aXJrX2ludGVsX3BjaF9hY3NfbWF0Y2goZGV2KSlcbi1cdFx0cmV0dXJuIC1FTk9UVFk7XG4tXG4gXHRpZiAocGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9scGNfYWNzKGRldikpIHtcbiBcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gZW5hYmxlIEludGVsIFBDSCBBQ1MgcXVpcmtcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC01Mzk2LDkgJiM0Mzs1MzkzLDYgQEAgc3RhdGljIGludCBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3NwdF9wY2hfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gXHRpbnQgcG9zO1xuIFx0dTMyIGNhcCwgY3RybDtcbiBcbi1cdGlmICghcGNpX3F1aXJrX2ludGVsX3NwdF9wY2hfYWNzX21hdGNoKGRldikpXG4tXHRcdHJldHVybiAtRU5PVFRZO1xuLVxuIFx0cG9zID0gZGV2LVx1MDAzZWFjc19jYXA7XG4gXHRpZiAoIXBvcylcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG5AQCAtNTQyNiw5ICYjNDM7NTQyMCw2IEBAIHN0YXRpYyBpbnQgcGNpX3F1aXJrX2Rpc2FibGVfaW50ZWxfc3B0X3BjaF9hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdGludCBwb3M7XG4gXHR1MzIgY2FwLCBjdHJsO1xuIFxuLVx0aWYgKCFwY2lfcXVpcmtfaW50ZWxfc3B0X3BjaF9hY3NfbWF0Y2goZGV2KSlcbi1cdFx0cmV0dXJuIC1FTk9UVFk7XG4tXG4gXHRwb3MgPSBkZXYtXHUwMDNlYWNzX2NhcDtcbiBcdGlmICghcG9zKVxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbkBAIC01NDQ4LDU2ICYjNDM7NTQzOSw2MyBAQCBzdGF0aWMgaW50IHBjaV9xdWlya19kaXNhYmxlX2ludGVsX3NwdF9wY2hfYWNzX3JlZGlyKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMge1xuIFx0dTE2IHZlbmRvcjtcbiBcdHUxNiBkZXZpY2U7XG4mIzQzO1x0Ym9vbCAoKm1hdGNoKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBcdGludCAoKmVuYWJsZV9hY3MpKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIFx0aW50ICgqZGlzYWJsZV9hY3NfcmVkaXIpKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIH0gcGNpX2Rldl9hY3Nfb3BzW10gPSB7XG4gXHR7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9BTllfSUQsXG4mIzQzO1x0ICAgIC5tYXRjaCA9IHBjaV9xdWlya19pbnRlbF9wY2hfYWNzX21hdGNoLFxuIFx0ICAgIC5lbmFibGVfYWNzID0gcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9wY2hfYWNzLFxuIFx0fSxcbiBcdHsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0FOWV9JRCxcbiYjNDM7XHQgICAgLm1hdGNoID0gcGNpX3F1aXJrX2ludGVsX3NwdF9wY2hfYWNzX21hdGNoLFxuIFx0ICAgIC5lbmFibGVfYWNzID0gcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9zcHRfcGNoX2FjcyxcbiBcdCAgICAuZGlzYWJsZV9hY3NfcmVkaXIgPSBwY2lfcXVpcmtfZGlzYWJsZV9pbnRlbF9zcHRfcGNoX2Fjc19yZWRpcixcbiBcdH0sXG4gfTtcbiBcbi1pbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwY2lfZGV2X2Fjc19vcHNfZ2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcDtcbi1cdGludCBpLCByZXQ7XG4mIzQzO1x0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBjaV9kZXZfYWNzX29wcyk7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHAgPSBcdTAwMjZwY2lfZGV2X2Fjc19vcHNbaV07XG4gXHRcdGlmICgocC1cdTAwM2V2ZW5kb3IgPT0gZGV2LVx1MDAzZXZlbmRvciB8fFxuIFx0XHQgICAgIHAtXHUwMDNldmVuZG9yID09ICh1MTYpUENJX0FOWV9JRCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAocC1cdTAwM2VkZXZpY2UgPT0gZGV2LVx1MDAzZWRldmljZSB8fFxuLVx0XHQgICAgIHAtXHUwMDNlZGV2aWNlID09ICh1MTYpUENJX0FOWV9JRCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBwLVx1MDAzZWVuYWJsZV9hY3MpIHtcbi1cdFx0XHRyZXQgPSBwLVx1MDAzZWVuYWJsZV9hY3MoZGV2KTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzZT0gMClcbi1cdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQgICAgIHAtXHUwMDNlZGV2aWNlID09ICh1MTYpUENJX0FOWV9JRCkpIHtcbiYjNDM7XHRcdFx0aWYgKCFwLVx1MDAzZW1hdGNoIHx8IHAtXHUwMDNlbWF0Y2goZGV2KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcDtcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztib29sIHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcCBcdTAwMjZcdTAwMjYgcC1cdTAwM2VlbmFibGVfYWNzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocCBcdTAwMjZcdTAwMjYgcC1cdTAwM2VlbmFibGVfYWNzKVxuJiM0MztcdFx0cmV0dXJuIHAtXHUwMDNlZW5hYmxlX2FjcyhkZXYpO1xuJiM0MztcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbiBcbiBpbnQgcGNpX2Rldl9zcGVjaWZpY19kaXNhYmxlX2Fjc19yZWRpcihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnA7XG4tXHRpbnQgaSwgcmV0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnAgPSBwY2lfZGV2X2Fjc19vcHNfZ2V0KGRldik7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBjaV9kZXZfYWNzX29wcyk7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHAgPSBcdTAwMjZwY2lfZGV2X2Fjc19vcHNbaV07XG4tXHRcdGlmICgocC1cdTAwM2V2ZW5kb3IgPT0gZGV2LVx1MDAzZXZlbmRvciB8fFxuLVx0XHQgICAgIHAtXHUwMDNldmVuZG9yID09ICh1MTYpUENJX0FOWV9JRCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAocC1cdTAwM2VkZXZpY2UgPT0gZGV2LVx1MDAzZWRldmljZSB8fFxuLVx0XHQgICAgIHAtXHUwMDNlZGV2aWNlID09ICh1MTYpUENJX0FOWV9JRCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBwLVx1MDAzZWRpc2FibGVfYWNzX3JlZGlyKSB7XG4tXHRcdFx0cmV0ID0gcC1cdTAwM2VkaXNhYmxlX2Fjc19yZWRpcihkZXYpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNlPSAwKVxuLVx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdGlmIChwIFx1MDAyNlx1MDAyNiBwLVx1MDAzZWRpc2FibGVfYWNzX3JlZGlyKVxuJiM0MztcdFx0cmV0dXJuIHAtXHUwMDNlZGlzYWJsZV9hY3NfcmVkaXIoZGV2KTtcbiBcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmggYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWNmMWIzOGRmZjAyNGFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxuQEAgLTAsMCAmIzQzOzEsNTkgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiwgR29vZ2xlIExMQy5cbiYjNDM7ICogRGF2aWQgTWF0bGFjayBcdTAwM2NkbWF0bGFja0Bnb29nbGUuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfTElOVVhfS0hPX0FCSV9QQ0lfSFxuJiM0MzsjZGVmaW5lIF9MSU5VWF9LSE9fQUJJX1BDSV9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBET0M6IFBDSSBGaWxlLUxpZmVjeWNsZSBCb3VuZCAoRkxCKSBMaXZlIFVwZGF0ZSBBQklcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBoZWFkZXIgZGVmaW5lcyB0aGUgQUJJIGZvciBwcmVzZXJ2aW5nIGNvcmUgUENJIHN0YXRlIGFjcm9zcyBrZXhlYyB1c2luZ1xuJiM0MzsgKiBMaXZlIFVwZGF0ZSBGaWxlLUxpZmVjeWNsZSBCb3VuZCAoRkxCKSBkYXRhLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGludGVyZmFjZSBpcyBhIGNvbnRyYWN0LiBBbnkgbW9kaWZpY2F0aW9uIHRvIGFueSBvZiB0aGUgc2VyaWFsaXphdGlvblxuJiM0MzsgKiBzdHJ1Y3RzIGRlZmluZWQgaGVyZSBjb25zdGl0dXRlcyBhIGJyZWFraW5nIGNoYW5nZS4gU3VjaCBjaGFuZ2VzIHJlcXVpcmVcbiYjNDM7ICogaW5jcmVtZW50aW5nIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgUENJX0xVT19GTEJfQ09NUEFUSUJMRSBzdHJpbmcuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBQQ0lfTFVPX0ZMQl9DT01QQVRJQkxFIFwmIzM0O3BjaS12MlwmIzM0O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwY2lfZGV2X3NlciAtIFNlcmlhbGl6ZWQgc3RhdGUgYWJvdXQgYSBzaW5nbGUgUENJIGRldmljZS5cbiYjNDM7ICpcbiYjNDM7ICogQGRvbWFpbjogVGhlIGRldmljZSYjMzk7cyBQQ0kgZG9tYWluIG51bWJlciAoc2VnbWVudCkuXG4mIzQzOyAqIEBiZGY6IFRoZSBkZXZpY2UmIzM5O3MgUENJIGJ1cywgZGV2aWNlLCBhbmQgZnVuY3Rpb24gbnVtYmVyLlxuJiM0MzsgKiBAcmVmY291bnQ6IFJlZmVyZW5jZSBjb3VudCB1c2VkIGJ5IHRoZSBQQ0kgY29yZSB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgaXRcbiYjNDM7ICogICAgICAgICAgICBpcyBkb25lIHVzaW5nIGEgZGV2aWNlJiMzOTtzIHN0cnVjdCBwY2lfZGV2X3Nlci4gVGhlIHZhbHVlIG9mIHRoZVxuJiM0MzsgKiAgICAgICAgICAgIHJlZmNvdW50IGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgcHJlc2VydmVkIGRldmljZXMgYXQgb3IgYmVsb3dcbiYjNDM7ICogICAgICAgICAgICBpdCBpbiB0aGUgUENJIGhpZXJhcmNoeSB3aGVuIHRoZSBzdHJ1Y3QgcGNpX2Rldl9zZXIgaXMgaW4gdXNlLCBhbmRcbiYjNDM7ICogICAgICAgICAgICAwIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwY2lfZGV2X3NlciB7XG4mIzQzO1x0dTMyIGRvbWFpbjtcbiYjNDM7XHR1MTYgYmRmO1xuJiM0MztcdHUxNiByZWZjb3VudDtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGNpX3NlciAtIFBDSSBTdWJzeXN0ZW0gTGl2ZSBVcGRhdGUgU3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBzdHJ1Y3QgdHJhY2tzIHN0YXRlIGFib3V0IGFsbCBkZXZpY2VzIHRoYXQgYXJlIGJlaW5nIHByZXNlcnZlZCBhY3Jvc3NcbiYjNDM7ICogYSBMaXZlIFVwZGF0ZSBmb3IgdGhlIG5leHQga2VybmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBAbnJfZGV2aWNlczogVGhlIG51bWJlciBvZiBkZXZpY2VzIHRoYXQgd2VyZSBwcmVzZXJ2ZWQuXG4mIzQzOyAqIEBkZXZpY2VzOiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBLSE8gYmxvY2sgY29udGFpbmluZyBwY2lfZGV2X3Nlci5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwY2lfc2VyIHtcbiYjNDM7XHR1MzIgbnJfZGV2aWNlcztcbiYjNDM7XHR1NjQgZGV2aWNlcztcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfTElOVVhfS0hPX0FCSV9QQ0lfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5pbmRleCBlYmI1YjlkNzYzNjA5ZS4uYjQxZGQ1NzJhMmQ2YjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3BjaS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX2lkcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9saXZldXBkYXRlLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFBDSV9TVEFUVVNfRVJST1JfQklUUyAoUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkgIHwgXFxcbiBcdFx0XHQgICAgICAgUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SIHwgXFxcbkBAIC01OTIsNiAmIzQzOzU5Myw5IEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHU4XHRcdHRwaF9tb2RlO1x0LyogVFBIIG1vZGUgKi9cbiBcdHU4XHRcdHRwaF9yZXFfdHlwZTtcdC8qIFRQSCByZXF1ZXN0ZXIgdHlwZSAqL1xuICNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFXG4mIzQzO1x0c3RydWN0IHBjaV9saXZldXBkYXRlIGxpdmV1cGRhdGU7XG4mIzQzOyNlbmRpZlxuIH07XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqcGNpX3BoeXNmbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2xpdmV1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcGNpX2xpdmV1cGRhdGUuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNTA5OTM0MDU3NTRiYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY2lfbGl2ZXVwZGF0ZS5oXG5AQCAtMCwwICYjNDM7MSw3NyBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsvKlxuJiM0MzsgKiBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCAoUHVibGljL0RyaXZlciBBUEkpXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiwgR29vZ2xlIExMQy5cbiYjNDM7ICogRGF2aWQgTWF0bGFjayBcdTAwM2NkbWF0bGFja0Bnb29nbGUuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MzsjaWZuZGVmIExJTlVYX1BDSV9MSVZFVVBEQVRFX0hcbiYjNDM7I2RlZmluZSBMSU5VWF9QQ0lfTElWRVVQREFURV9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9raG8vYWJpL3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpdmV1cGRhdGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrX3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGNpX2xpdmV1cGRhdGUgLSBQQ0kgTGl2ZSBVcGRhdGUgc3RhdGUgZm9yIGEgc3RydWN0IHBjaV9kZXZcbiYjNDM7ICogQG91dGdvaW5nOiBTdGF0ZSBwcmVzZXJ2ZWQgZm9yIHRoZSBuZXh0IGtlcm5lbC5cbiYjNDM7ICogQGluY29taW5nOiBTdGF0ZSBwcmVzZXJ2ZWQgYnkgdGhlIHByZXZpb3VzIGtlcm5lbC5cbiYjNDM7ICogQGFjc19jdHJsOiBBQ1MgZmVhdHVyZXMgZXN0YWJsaXNoZWQgYnkgdGhlIHByZXZpb3VzIGtlcm5lbC5cbiYjNDM7ICogQGluaGVyaXRfYnVzZXM6IFRydWUgaWYgdGhlIFBDSSBjb3JlIHNob3VsZCBpbmhlcml0IHRoZSBzZWNvbmRhcnkgYW5kXG4mIzQzOyAqICAgICAgICAgICAgICAgICBzdWJvcmRpbmF0ZSBidXMgbnVtYmVycyBhc3NpZ25lZCB0byB0aGlzIGRldmljZSBkdWUgdG9cbiYjNDM7ICogICAgICAgICAgICAgICAgIGFuIG9uZ29pbmcgTGl2ZSBVcGRhdGUuXG4mIzQzOyAqIEB3YXNfcHJlc2VydmVkOiBUcnVlIGlmIHRoaXMgc3RydWN0IHBjaV9kZXYgd2FzIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXNcbiYjNDM7ICogICAgICAgICAgICAgICAgIGtlcm5lbC4gVW5saWtlIEBpbmNvbWluZywgdGhpcyBmaWVsZCBpcyBub3QgY2xlYXJlZCBhZnRlclxuJiM0MzsgKiAgICAgICAgICAgICAgICAgdGhlIGRldmljZSBpcyBmaW5pc2hlZCBwYXJ0aWNpcGF0aW5nIGluIExpdmUgVXBkYXRlLlxuJiM0MzsgKiBAZnJvemVuOiBUcnVlIGlmIHRoZSBvdXRnb2luZyBwcmVzZXJ2YXRpb24gc3RhdHVzIG9mIHRoaXMgZGV2aWNlIGlzIGZyb3plblxuJiM0MzsgKiAgICAgICAgICBhbmQgdGh1cyBjYW5ub3QgYmUgY2hhbmdlZC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZSB7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXZfc2VyICpvdXRnb2luZztcbiYjNDM7XHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmluY29taW5nO1xuJiM0MztcdHUxNiBhY3NfY3RybDtcbiYjNDM7XHRib29sIGluaGVyaXRfYnVzZXM7XG4mIzQzO1x0Ym9vbCB3YXNfcHJlc2VydmVkO1xuJiM0MztcdGJvb2wgZnJvemVuO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHBjaV9kZXY7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFXG4mIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCk7XG4mIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCk7XG4mIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjNDM7Ym9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIExJTlVYX1BDSV9MSVZFVVBEQVRFX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxODoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMSVZFVVBEQVRFJiMzNDssCiAgICAmIzM0O1BDSV9MSVZFVVBEQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2ZyZWV6ZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbiYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfaW5pdF9hY3MmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3ByZXNlcnZlJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3VucHJlc2VydmUmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfZmluaXNoJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYiYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0LCB3aGljaCBtb2RpZmllcyBjb3JlIFBDSSBlbnVtZXJhdGlvbiwgc2h1dGRvd24sIGFuZCBjYXBhYmlsaXR5IGNvbmZpZ3VyYXRpb24gcGF0aHMgKGUuZy4sIEFDUywgQVJJKS4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGR1cmluZyBQQ0kgZGV2aWNlIHByb2JlLCByZW1vdmFsLCBhbmQgc3lzdGVtIHNodXRkb3duL2tleGVjLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IHBjaV9saXZldXBkYXRlXyogZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIFBDSSB0b3BvbG9naWVzIGFuZCBzdGF0ZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNmIzMGFiMjc5ZmIwZWYwNTc4N2Q1NmUzM2U1NzQzNmFiNmM4OGU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMTg6MjY6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3QKaW5kZXggNWQ3MjBkMmE0MTVlMDEuLjIzZmI3MzdhYzk2OWVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9QQ0kvaW5kZXgucnN0CkBAIC0yMCwzICYjNDM7MjAsNCBAQCBQQ0kgQnVzIFN1YnN5c3RlbQogICAgY29udHJvbGxlci9pbmRleAogICAgYm9vdC1pbnRlcnJ1cHRzCiAgICB0cGgKJiM0MzsgICBsaXZldXBkYXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdCBiL0RvY3VtZW50YXRpb24vUENJL2xpdmV1cGRhdGUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lYmE1NWY4YTkyYWUxMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vUENJL2xpdmV1cGRhdGUucnN0CkBAIC0wLDAgJiM0MzsxLDI5IEBACiYjNDM7Li4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MztQQ0kgU3VwcG9ydCBmb3IgTGl2ZSBVcGRhdGUKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MzsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jCiYjNDM7ICAgOmRvYzogUENJIExpdmUgVXBkYXRlCiYjNDM7CiYjNDM7RHJpdmVyIEFQSQomIzQzOz09PT09PT09PT0KJiM0MzsKJiM0MzsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jCiYjNDM7ICAgOmV4cG9ydDoKJiM0MzsKJiM0MztMaXZlIFVwZGF0ZSBBQkkKJiM0Mzs9PT09PT09PT09PT09PT0KJiM0MzsKJiM0MzsuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9saW51eC9raG8vYWJpL3BjaS5oCiYjNDM7ICAgOmRvYzogUENJIEZpbGUtTGlmZWN5Y2xlIEJvdW5kIChGTEIpIExpdmUgVXBkYXRlIEFCSQomIzQzOwomIzQzOy4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmgKJiM0MzsgICA6aW50ZXJuYWw6CiYjNDM7CiYjNDM7U2VlIEFsc28KJiM0Mzs9PT09PT09PQomIzQzOwomIzQzOyAqIDpkb2M6YC9jb3JlLWFwaS9saXZldXBkYXRlYAomIzQzOyAqIDpkb2M6YC9jb3JlLWFwaS9raG8vaW5kZXhgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDRmNjViMmEzNzUyMTAyLi5lZDllZWY4ZGU2NGNkMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTUxMDUsNyAmIzQzOzUxMDUsMTEgQEAgS2VybmVsIHBhcmFtZXRlcnMKIAkJCQlleHBsaWNpdGx5IHdoaWNoIG9uZXMgdGhleSBhcmUuCiAJCWFzc2lnbi1idXNzZXMJW1g4Nl0gQWx3YXlzIGFzc2lnbiBhbGwgUENJIGJ1cwogCQkJCW51bWJlcnMgb3Vyc2VsdmVzLCBvdmVycmlkaW5nCi0JCQkJd2hhdGV2ZXIgdGhlIGZpcm13YXJlIG1heSBoYXZlIGRvbmUuCiYjNDM7CQkJCXdoYXRldmVyIHRoZSBmaXJtd2FyZSBtYXkgaGF2ZSBkb25lLiBJZ25vcmVkCiYjNDM7CQkJCWR1cmluZyBhIExpdmUgVXBkYXRlLCB3aGVyZSB0aGUga2VybmVsIG11c3QKJiM0MzsJCQkJaW5oZXJpdCB0aGUgUENJIHRvcG9sb2d5IChpbmNsdWRpbmcgYnVzIG51bWJlcnMpCiYjNDM7CQkJCXRvIGF2b2lkIGludGVycnVwdGluZyBvbmdvaW5nIG1lbW9yeQomIzQzOwkJCQl0cmFuc2FjdGlvbnMgb2YgcHJlc2VydmVkIGRldmljZXMuCiAJCXVzZXBpcnFtYXNrCVtYODZdIEhvbm9yIHRoZSBwb3NzaWJsZSBJUlEgbWFzayBzdG9yZWQKIAkJCQlpbiB0aGUgQklPUyAkUElSIHRhYmxlLiBUaGlzIGlzIG5lZWRlZCBvbgogCQkJCXNvbWUgc3lzdGVtcyB3aXRoIGJyb2tlbiBCSU9TZXMsIG5vdGFibHkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbGl2ZXVwZGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0CmluZGV4IDVhMjkyZDBmMzcwNjRkLi4yYmNlMjY0NGViYTIyMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXZldXBkYXRlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0CkBAIC0xLDUgJiM0MzsxLDcgQEAKIC4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAKJiM0MzsuLiBfbHVvOgomIzQzOwogPT09PT09PT09PT09PT09PT09PT09PT09CiBMaXZlIFVwZGF0ZSBPcmNoZXN0cmF0b3IKID09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTgsNiAmIzQzOzIwLDggQEAgTFVPIFByZXNlcnZpbmcgRmlsZSBEZXNjcmlwdG9ycwogLi4ga2VybmVsLWRvYzo6IGtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMKICAgIDpkb2M6IExVTyBGaWxlIERlc2NyaXB0b3JzCiAKJiM0MzsuLiBfZmxiOgomIzQzOwogTFVPIEZpbGUgTGlmZWN5Y2xlIEJvdW5kIEdsb2JhbCBEYXRhCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC4uIGtlcm5lbC1kb2M6OiBrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMKQEAgLTcwLDMgJiM0Mzs3NCw0IEBAIFNlZSBBbHNvCiAKIC0gOmRvYzpgTGl2ZSBVcGRhdGUgdUFQSSAmbHQ7L3VzZXJzcGFjZS1hcGkvbGl2ZXVwZGF0ZSZndDtgCiAtIDpkb2M6YC9jb3JlLWFwaS9raG8vaW5kZXhgCiYjNDM7LSA6ZG9jOmBQQ0kgJmx0Oy9QQ0kvbGl2ZXVwZGF0ZSZndDtgCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGEzZWQzMzdlODI3ZDg2Li4zNDdjNDM1Y2E0MDQ3YyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTIwODI0LDYgJiM0MzsyMDgyNCwyMSBAQCBMOglsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vUENJL3BjaS1lcnJvci1yZWNvdmVyeS5yc3QKIAomIzQzO1BDSSBMSVZFIFVQREFURQomIzQzO006CURhdmlkIE1hdGxhY2sgJmx0O2RtYXRsYWNrQGdvb2dsZS5jb20mZ3Q7CiYjNDM7UjoJUGFzaGEgVGF0YXNoaW4gJmx0O3Bhc2hhLnRhdGFzaGluQHNvbGVlbi5jb20mZ3Q7CiYjNDM7UjoJTWlrZSBSYXBvcG9ydCAmbHQ7cnBwdEBrZXJuZWwub3JnJmd0OwomIzQzO1I6CVByYXR5dXNoIFlhZGF2ICZsdDtwcmF0eXVzaEBrZXJuZWwub3JnJmd0OwomIzQzO0w6CWtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKJiM0MztMOglsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJTWFpbnRhaW5lZAomIzQzO1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGl2ZXVwZGF0ZS9saW51eC5naXQKJiM0MztGOglEb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdAomIzQzO0Y6CWRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuYwomIzQzO0Y6CWRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaAomIzQzO0Y6CWluY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaAomIzQzO0Y6CWluY2x1ZGUvbGludXgvcGNpX2xpdmV1cGRhdGUuaAomIzQzOwogUENJIE1TSSBEUklWRVIgRk9SIEFMVEVSQSBNU0kgSVAKIEw6CWxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmcKIFM6CU9ycGhhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKaW5kZXggMGM3NDA4NTA5YmEyNGIuLjE2ZmJkNDIxMmUwZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL0tjb25maWcKQEAgLTI3MSw2ICYjNDM7MjcxLDIxIEBAIGNvbmZpZyBWR0FfQVJCX01BWF9HUFVTCiAJICBSZXNlcnZlcyBzcGFjZSBpbiB0aGUga2VybmVsIHRvIG1haW50YWluIHJlc291cmNlIGxvY2tpbmcgZm9yCiAJICBtdWx0aXBsZSBHUFVTLiAgVGhlIG92ZXJoZWFkIGZvciBlYWNoIEdQVSBpcyB2ZXJ5IHNtYWxsLgogCiYjNDM7Y29uZmlnIFBDSV9MSVZFVVBEQVRFCiYjNDM7CWJvb2wgJiMzNDtQQ0kgTGl2ZSBVcGRhdGUgU3VwcG9ydCYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gUENJICZhbXA7JmFtcDsgTElWRVVQREFURSAmYW1wOyZhbXA7IDY0QklUICZhbXA7JmFtcDsgIUNBUkRCVVMKJiM0MzsJaGVscAomIzQzOwkgIEVuYWJsZSBQQ0kgY29yZSBzdXBwb3J0IGZvciBwcmVzZXJ2aW5nIFBDSSBkZXZpY2VzIGFjcm9zcyBMaXZlCiYjNDM7CSAgVXBkYXRlLiBUaGlzLCBpbiBjb21iaW5hdGlvbiB3aXRoIHN1cHBvcnQgaW4gYSBkZXZpY2UmIzM5O3MgZHJpdmVyLAomIzQzOwkgIGVuYWJsZXMgUENJIGRldmljZXMgdG8gcnVuIGFuZCBwZXJmb3JtIG1lbW9yeSB0cmFuc2FjdGlvbnMKJiM0MzsJICB1bmludGVycnVwdGVkIGR1cmluZyBhIGtleGVjIGZvciBMaXZlIFVwZGF0ZS4KJiM0MzsKJiM0MzsJICBUaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSBlbmFibGVkIGJ5IHVzZXJzIHdobyBwbGFuIHRvIHVzZSBMaXZlCiYjNDM7CSAgVXBkYXRlIGZvciBrZXJuZWwgdXBncmFkZXMgYW5kIHJlcXVpcmUgcHJlc2VydmluZyBQQ0kgZGV2aWNlcyBkdXJpbmcKJiM0MzsJICB0aG9zZSB1cGdyYWRlcy4KJiM0MzsKJiM0MzsJICBJZiB1bnN1cmUsIHNheSBOLgomIzQzOwogc291cmNlICYjMzQ7ZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZyYjMzQ7CiBzb3VyY2UgJiMzNDtkcml2ZXJzL3BjaS9lbmRwb2ludC9LY29uZmlnJiMzNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKaW5kZXggNDFlYmMzYjlhNTE4MjQuLmU4ZDAwM2NiNjc1NzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQpAQCAtMTYsNiAmIzQzOzE2LDcgQEAgb2JqLSQoQ09ORklHX1BST0NfRlMpCQkmIzQzOz0gcHJvYy5vCiBvYmotJChDT05GSUdfU1lTRlMpCQkmIzQzOz0gcGNpLXN5c2ZzLm8gc2xvdC5vCiBvYmotJChDT05GSUdfQUNQSSkJCSYjNDM7PSBwY2ktYWNwaS5vCiBvYmotJChDT05GSUdfR0VORVJJQ19QQ0lfSU9NQVApICYjNDM7PSBpb21hcC5vCiYjNDM7b2JqLSQoQ09ORklHX1BDSV9MSVZFVVBEQVRFKQkmIzQzOz0gbGl2ZXVwZGF0ZS5vCiBlbmRpZgogCiBvYmotJChDT05GSUdfT0YpCQkmIzQzOz0gb2YubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jIGIvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi41OTM1ZTg4ZGUwNzNkYwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuYwpAQCAtMCwwICYjNDM7MSw5MTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2LCBHb29nbGUgTExDLgomIzQzOyAqIERhdmlkIE1hdGxhY2sgJmx0O2RtYXRsYWNrQGdvb2dsZS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogRE9DOiBQQ0kgTGl2ZSBVcGRhdGUKJiM0MzsgKgomIzQzOyAqIFRoZSBQQ0kgc3Vic3lzdGVtIHBhcnRpY2lwYXRlcyBpbiB0aGUgTGl2ZSBVcGRhdGUgcHJvY2VzcyB0byBlbmFibGUgZHJpdmVycwomIzQzOyAqIHRvIHByZXNlcnZlIHRoZWlyIFBDSSBkZXZpY2VzIGFjcm9zcyBrZXhlYy4KJiM0MzsgKgomIzQzOyAqIDpyZWY6YEZMQiAmbHQ7ZmxiJmd0O2AgRGF0YQomIzQzOyAqID09PT09PT09PT09PT09PT09PT09PQomIzQzOyAqCiYjNDM7ICogUENJIGRldmljZSBwcmVzZXJ2YXRpb24gYWNyb3NzIExpdmUgVXBkYXRlIGlzIGJ1aWx0IG9uIHRvcCBvZiB0aGUKJiM0MzsgKiA6cmVmOmBMVU8gJmx0O2x1byZndDtgIHN1cHBvcnQgZm9yIGZpbGUgcHJlc2VydmF0aW9uIGFjcm9zcyBrZXhlYy4gRHJpdmVycyBhcmUKJiM0MzsgKiBleHBlY3RlZCB0byBleHBvc2UgYSBmaWxlIHRvIHJlcHJlc2VudCBhIHNpbmdsZSBQQ0kgZGV2aWNlIGFuZCBzdXBwb3J0CiYjNDM7ICogcHJlc2VydmF0aW9uIG9mIHRoYXQgZmlsZSB3aXRoIGBgaW9jdGwoTElWRVVQREFURV9TRVNTSU9OX1BSRVNFUlZFX0ZEKWBgLgomIzQzOyAqIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBjb250cm9sIHRoZSBwcmVzZXJ2YXRpb24gb2YgZGV2aWNlcyBhbmQgZW5zdXJlCiYjNDM7ICogcHJvcGVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHdoaWxlIGEgZGV2aWNlIGlzIHByZXNlcnZlZC4gVGhlIGZpcnN0IGludGVuZGVkCiYjNDM7ICogdXNlLWNhc2UgaXMgcHJlc2VydmluZyB2ZmlvLXBjaSBkZXZpY2UgZmlsZXMuCiYjNDM7ICoKJiM0MzsgKiBUaGUgUENJIGNvcmUgbWFpbnRhaW5zIGl0cyBvd24gc3RhdGUgYWJvdXQgd2hhdCBkZXZpY2VzIGFyZSBiZWluZyBwcmVzZXJ2ZWQKJiM0MzsgKiBhY3Jvc3MgTGl2ZSBVcGRhdGUgdXNpbmcgRkxCIGRhdGEgaW4gTFVPLiBFc3NlbnRpYWxseSwgdGhpcyBhbGxvd3MgdGhlIFBDSQomIzQzOyAqIGNvcmUgdG8gYWxsb2NhdGUgc3RydWN0IHBjaV9zZXIgd2hlbiB0aGUgZmlyc3QgZGV2aWNlIChmaWxlKSBpcyBwcmVzZXJ2ZWQKJiM0MzsgKiBhbmQgZnJlZSBpdCB3aGVuIHRoZSBsYXN0IGRldmljZSAoZmlsZSkgaXMgdW5wcmVzZXJ2ZWQuIEFmdGVyIGtleGVjLCB0aGUKJiM0MzsgKiBQQ0kgY29yZSBjYW4gZmV0Y2ggdGhlIHN0cnVjdCBwY2lfc2VyICh3aGljaCB3YXMgY29uc3RydWN0ZWQgYnkgdGhlIHByZXZpb3VzCiYjNDM7ICoga2VybmVsKSBmcm9tIExVTyBhdCBhbnkgdGltZSAoZS5nLiBkdXJpbmcgZW51bWVyYXRpb24pIHNvIHRoYXQgaXQga25vd3MKJiM0MzsgKiB3aGljaCBkZXZpY2VzIHdlcmUgcHJlc2VydmVkLgomIzQzOyAqCiYjNDM7ICogVG8gZW5hYmxlIHRoZSBQQ0kgY29yZSB0byBiZSBub3RpZmllZCB3aGVuZXZlciBhIGZpbGUgcmVwcmVzZW50aW5nIGEgZGV2aWNlCiYjNDM7ICogaXMgcHJlc2VydmVkLCBkcml2ZXJzIG11c3QgcmVnaXN0ZXIgdGhlaXIgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIHdpdGgKJiM0MzsgKiB0aGUgUENJIGNvcmUgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBBUElzOgomIzQzOyAqCiYjNDM7ICogICogYGBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoZHJpdmVyX2ZpbGVfaGFuZGxlcilgYAomIzQzOyAqICAqIGBgcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoZHJpdmVyX2ZpbGVfaGFuZGxlcilgYAomIzQzOyAqCiYjNDM7ICogRGV2aWNlIFRyYWNraW5nCiYjNDM7ICogPT09PT09PT09PT09PT09CiYjNDM7ICoKJiM0MzsgKiBEcml2ZXJzIG11c3Qgbm90aWZ5IHRoZSBQQ0kgY29yZSB3aGVuIHNwZWNpZmljIGRldmljZXMgYXJlIHByZXNlcnZlZCBvcgomIzQzOyAqIHVucHJlc2VydmVkIHdpdGggdGhlIGZvbGxvd2luZyBBUElzOgomIzQzOyAqCiYjNDM7ICogICogYGBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZShwY2lfZGV2KWBgCiYjNDM7ICogICogYGBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHBjaV9kZXYpYGAKJiM0MzsgKgomIzQzOyAqIFRoaXMgYWxsb3dzIHRoZSBQQ0kgY29yZSB0byBrZWVwIGl0cyBGTEIgZGF0YSAoc3RydWN0IHBjaV9zZXIpIHVwIHRvIGRhdGUKJiM0MzsgKiB3aXRoIHRoZSBsaXN0IG9mICoqb3V0Z29pbmcqKiBwcmVzZXJ2ZWQgZGV2aWNlcyBmb3IgdGhlIG5leHQga2VybmVsLgomIzQzOyAqCiYjNDM7ICogQWZ0ZXIga2V4ZWMsIHdoZW5ldmVyIGEgZGV2aWNlIGlzIGVudW1lcmF0ZWQsIHRoZSBQQ0kgY29yZSB3aWxsIGNoZWNrIGlmIGl0CiYjNDM7ICogaXMgYW4gKippbmNvbWluZyoqIHByZXNlcnZlZCBkZXZpY2UgKGkuZS4gcHJlc2VydmVkIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwpCiYjNDM7ICogYnkgY2hlY2tpbmcgdGhlIGluY29taW5nIEZMQiBkYXRhIChzdHJ1Y3QgcGNpX3NlcikuCiYjNDM7ICoKJiM0MzsgKiBEcml2ZXJzIG11c3Qgbm90aWZ5IHRoZSBQQ0kgY29yZSB3aGVuIGFuICoqaW5jb21pbmcqKiBkZXZpY2UgaXMgZG9uZQomIzQzOyAqIHBhcnRpY2lwYXRpbmcgaW4gdGhlIGluY29taW5nIExpdmUgVXBkYXRlIHdpdGggdGhlIGZvbGxvd2luZyBBUEk6CiYjNDM7ICoKJiM0MzsgKiAgKiBgYHBjaV9saXZldXBkYXRlX2ZpbmlzaChwY2lfZGV2KWBgCiYjNDM7ICoKJiM0MzsgKiBUaGUgUENJIGNvcmUgZG9lcyBub3QgZW5mb3JjZSBhbnkgb3JkZXJpbmcgb2YgYGBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKWBgIGFuZAomIzQzOyAqIGBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKWBgLiBpLmUuIEEgUENJIGRldmljZSBjYW4gYmUgKipvdXRnb2luZyoqCiYjNDM7ICogKHByZXNlcnZlZCBmb3IgbmV4dCBrZXJuZWwpIGFuZCAqKmluY29taW5nKiogKHByZXNlcnZlZCBieSBwcmV2aW91cyBrZXJuZWwpCiYjNDM7ICogYXQgdGhlIHNhbWUgdGltZS4KJiM0MzsgKgomIzQzOyAqIFJlc3RyaWN0aW9ucwomIzQzOyAqID09PT09PT09PT09PQomIzQzOyAqCiYjNDM7ICogVGhlIFBDSSBjb3JlIGVuZm9yY2VzIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIG9uIHdoaWNoIGRldmljZXMgY2FuIGJlCiYjNDM7ICogcHJlc2VydmVkLiBUaGVzZSBtYXkgYmUgcmVsYXhlZCBpbiB0aGUgZnV0dXJlOgomIzQzOyAqCiYjNDM7ICogICogVGhlIGRldmljZSBjYW5ub3QgYmUgYSBWaXJ0dWFsIEZ1bmN0aW9uIChWRikuCiYjNDM7ICoKJiM0MzsgKiAgKiBUaGUgZGV2aWNlIGNhbm5vdCByZXF1aXJlIGRldmljZS1zcGVjaWZpYyBxdWlya3MgdG8gZW5hYmxlIEFjY2VzcwomIzQzOyAqICAgIENvbnRyb2wgU2VydmljZXMgKEFDUykuCiYjNDM7ICoKJiM0MzsgKiBEcml2ZXIgQmluZGluZwomIzQzOyAqID09PT09PT09PT09PT09CiYjNDM7ICoKJiM0MzsgKiBJbiB0aGUgb3V0Z29pbmcga2VybmVsLCBpdCBpcyB0aGUgZHJpdmVyJiMzOTtzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGl0CiYjNDM7ICogZG9lcyBub3QgcmVsZWFzZSBhIGRldmljZSBiZXR3ZWVuIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgYW5kCiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpLgomIzQzOyAqCiYjNDM7ICogSW4gdGhlIGluY29taW5nIGtlcm5lbCwgaXQgaXMgdGhlIGRyaXZlciYjMzk7cyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBpdAomIzQzOyAqIGRvZXMgbm90IHJlbGVhc2UgYSBwcmVzZXJ2ZWQgZGV2aWNlIGJldHdlZW4gcHJvYmUoKSBhbmQKJiM0MzsgKiBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKS4KJiM0MzsgKgomIzQzOyAqIEl0IGlzIHRoZSB1c2VyJiMzOTtzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGluY29taW5nIHByZXNlcnZlZCBkZXZpY2VzIGFyZQomIzQzOyAqIGJvdW5kIHRvIHRoZSBjb3JyZWN0IGRyaXZlci4gaS5lLiBUaGUgUENJIGNvcmUgZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IGEKJiM0MzsgKiBkZXZpY2UgZ2V0dGluZyBwcmVzZXJ2ZWQgYnkgZHJpdmVyIEEgaW4gdGhlIG91dGdvaW5nIGtlcm5lbCBhbmQgdGhlbiBnZXR0aW5nCiYjNDM7ICogYm91bmQgdG8gZHJpdmVyIEIgaW4gdGhlIGluY29taW5nIGtlcm5lbC4gVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuCiYjNDM7ICoKJiM0MzsgKiBCREYgU3RhYmlsaXR5CiYjNDM7ICogPT09PT09PT09PT09PQomIzQzOyAqCiYjNDM7ICogVGhlIFBDSSBjb3JlIGd1YXJhbnRlZXMgdGhhdCBwcmVzZXJ2ZWQgZGV2aWNlcyBjYW4gYmUgaWRlbnRpZmllZCBieSB0aGUgc2FtZQomIzQzOyAqIGJ1cywgZGV2aWNlLCBhbmQgZnVuY3Rpb24gbnVtYmVycyBmb3IgYXMgbG9uZyBhcyB0aGV5IGFyZSBwcmVzZXJ2ZWQKJiM0MzsgKiAoaW5jbHVkaW5nIGFjcm9zcyBrZXhlYykuIFRvIGFjY29tcGxpc2ggdGhpcywgdGhlIFBDSSBjb3JlIGFsd2F5cyBpbmhlcml0cwomIzQzOyAqIHRoZSBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlIGJ1cyBudW1iZXJzIGFzc2lnbmVkIHRvIGJyaWRnZXMgZHVyaW5nIHNjYW5uaW5nCiYjNDM7ICogaWYgYW55IGRldmljZSBpcyBwcmVzZXJ2ZWQuIFRoaXMgaXMgdHJ1ZSBldmVuIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBhbHdheXMKJiM0MzsgKiBhc3NpZ24gbmV3IGJ1cyBudW1iZXJzIGR1cmluZyBzY2FubmluZy4gVGhlIGtlcm5lbCBhc3N1bWVzIHRoZSBwcmV2aW91cwomIzQzOyAqIGtlcm5lbCBlc3RhYmxpc2hlZCBhIHNhbmUgYnVzIHRvcG9sb2d5IGFjcm9zcyBrZXhlYy4KJiM0MzsgKgomIzQzOyAqIElmIGEgbWlzY29uZmlndXJlZCBvciB1bmNvbmZpZ3VyZWQgYnJpZGdlIGlzIGVuY291bnRlcmVkIGR1cmluZyBlbnVtZXJhdGlvbgomIzQzOyAqIHdoaWxlIHRoZXJlIGFyZSBwcmVzZXJ2ZWQgZGV2aWNlcywgaXRzIHNlY29uZGFyeSBhbmQgc3Vib3JkaW5hdGUgYnVzIG51bWJlcnMKJiM0MzsgKiB3aWxsIGJlIGNsZWFyZWQgYW5kIGRldmljZXMgYmVsb3cgaXQgd2lsbCBub3QgYmUgZW51bWVyYXRlZC4KJiM0MzsgKgomIzQzOyAqIFBDSS10by1QQ0kgQnJpZGdlcwomIzQzOyAqID09PT09PT09PT09PT09PT09PQomIzQzOyAqCiYjNDM7ICogQW55IFBDSS10by1QQ0kgYnJpZGdlcyB1cHN0cmVhbSBvZiBhIHByZXNlcnZlZCBkZXZpY2UgYXJlIGF1dG9tYXRpY2FsbHkKJiM0MzsgKiBwcmVzZXJ2ZWQgd2hlbiB0aGUgZGV2aWNlIGlzIHByZXNlcnZlZC4gVGhlIFBDSSBjb3JlIGtlZXBzIHRyYWNrIG9mIHRoZQomIzQzOyAqIG51bWJlciBvZiBkb3duc3RyZWFtIGRldmljZXMgdGhhdCBhcmUgcHJlc2VydmVkIHVuZGVyIGEgYnJpZGdlIHNvIHRoYXQgdGhlCiYjNDM7ICogYnJpZGdlIGlzIG9ubHkgdW5wcmVzZXJ2ZWQgb25jZSBhbGwgZG93bnN0cmVhbSBkZXZpY2VzIGFyZSB1bnByZXNlcnZlZC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZW5hYmxlcyB0aGUgUENJIGNvcmUgYW5kIGFueSBkcml2ZXJzIGJvdW5kIHRvIHRoZSBicmlkZ2UgdG8gcGFydGljaXBhdGUKJiM0MzsgKiBpbiB0aGUgTGl2ZSBVcGRhdGUgc28gdGhhdCBwcmVzZXJ2ZWQgZW5kcG9pbnRzIGNhbiBjb250aW51ZSBpc3N1aW5nIG1lbW9yeQomIzQzOyAqIHRyYW5zYWN0aW9ucyBkdXJpbmcgdGhlIExpdmUgVXBkYXRlLgomIzQzOyAqCiYjNDM7ICogSGFuZGxpbmcgUHJlc2VydmVkIERldmljZXMKJiM0MzsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyAqCiYjNDM7ICogVGhlIFBDSSBjb3JlIHRyZWF0cyBwcmVzZXJ2ZWQgZGV2aWNlcyBkaWZmZXJlbnRseSB0aGFuIG5vbi1wcmVzZXJ2ZWQgZGV2aWNlcy4KJiM0MzsgKiBUaGlzIHNlY3Rpb24gZW51bWVyYXRlcyB0aG9zZSBkaWZmZXJlbmNlcy4KJiM0MzsgKgomIzQzOyAqICAqIFRoZSBQQ0kgY29yZSBpbmhlcml0cyBhbGwgQUNTIGZsYWdzIGVuYWJsZWQgb24gaW5jb21pbmcgcHJlc2VydmVkIGRldmljZXMKJiM0MzsgKiAgICByYXRoZXIgdGhhbiBhc3NpZ25pbmcgbmV3IG9uZXMuIFRoaXMgZW5zdXJlcyB0aGF0IFRMUHMgYXJlIHJvdXRlZCB0aGUgc2FtZQomIzQzOyAqICAgIHdheSBhZnRlciBMaXZlIFVwZGF0ZSBhbmQgZW5zdXJlcyB0aGF0IElPTU1VIGdyb3VwcyBkbyBub3QgY2hhbmdlLiBOb3RlCiYjNDM7ICogICAgdGhhdCBhIGRldmljZSB3aWxsIHVzZSBpdHMgaW5oZXJpdGVkIEFDUyBmbGFncyBmb3IgdGhlIGxpZmV0aW1lIG9mIGl0cwomIzQzOyAqICAgIHN0cnVjdCBwY2lfZGV2IChpLmUuIGV2ZW4gYWZ0ZXIgcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkpLgomIzQzOyAqCiYjNDM7ICogICogVGhlIFBDSSBjb3JlIGluaGVyaXRzIEFSSSBGb3J3YXJkaW5nIEVuYWJsZSBvbiBhbGwgYnJpZGdlcyB3aXRoIGRvd25zdHJlYW0KJiM0MzsgKiAgICBwcmVzZXJ2ZWQgZGV2aWNlcyB0byBlbnN1cmUgdGhhdCBhbGwgcHJlc2VydmVkIGRldmljZXMgb24gdGhlIGJyaWRnZSYjMzk7cwomIzQzOyAqICAgIHNlY29uZGFyeSBidXMgYXJlIGFkZHJlc3NhYmxlIGFmdGVyIHRoZSBMaXZlIFVwZGF0ZS4KJiM0MzsgKgomIzQzOyAqICAqIFRoZSBQQ0kgY29yZSBkb2VzIG5vdCBkaXNhYmxlIGJ1cyBtYXN0ZXJpbmcgb24gb3V0Z29pbmcgcHJlc2VydmVkIGRldmljZXMKJiM0MzsgKiAgICBkdXJpbmcga2V4ZWMuIFRoaXMgYWxsb3dzIHByZXNlcnZlZCBkZXZpY2VzIHRvIGlzc3VlIG1lbW9yeSB0cmFuc2FjdGlvbnMKJiM0MzsgKiAgICB0aHJvdWdob3V0IHRoZSBMaXZlIFVwZGF0ZS4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpICYjMzQ7UENJOiAmIzM0OyBLQlVJTERfQkFTRU5BTUUgJiMzNDs6ICYjMzQ7IGZtdAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXhlY19oYW5kb3Zlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9raG8vYWJpL3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXZldXBkYXRlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tob19ibG9jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7bGl2ZXVwZGF0ZS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3BjaS5oJiMzNDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGNpX2xpdmV1cGRhdGVfZ2xvYmFsIC0gR2xvYmFsIHN0YXRlIGZvciBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydAomIzQzOyAqIEByd3NlbTogUmVhZGVyL3dyaXRlciBzZW1hcGhvcmUgdXNlZCB0byBwcm90ZWN0IHRoZSBpbmNvbWluZyBhbmQgb3V0Z29pbmcKJiM0MzsgKiAgICAgICAgIEZMQnMsIGFuZCB0aGUgcmVmZXJlbmNlcyB0byB0aGVtIGluIHN0cnVjdCBwY2lfZGV2LgomIzQzOyAqLwomIzQzO3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwgewomIzQzOwlzdHJ1Y3Qgcndfc2VtYXBob3JlIHJ3c2VtOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwgcGNpX2xpdmV1cGRhdGUgPSB7CiYjNDM7CS5yd3NlbSA9IF9fUldTRU1fSU5JVElBTElaRVIocGNpX2xpdmV1cGRhdGUucndzZW0pLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgLSBPdXRnb2luZyBQQ0kgRkxCIG9iamVjdAomIzQzOyAqIEBzZXI6IFBvaW50ZXIgdG8gdGhlIHByZXNlcnZlZCBzdHJ1Y3QgcGNpX3Nlci4KJiM0MzsgKiBAYmxvY2tfc2V0OiBUaGUgS0hPIGJsb2NrIHNldCBob2xkaW5nIHRoZSBvdXRnb2luZyBkZXZpY2VzLgomIzQzOyAqCiYjNDM7ICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIHJ1bnRpbWUgc3RhdGUgZm9yIHRoZSBvdXRnb2luZyBQQ0kgTGl2ZSBVcGRhdGUKJiM0MzsgKiBzdGF0ZS4gSXQgd3JhcHMgdGhlIHNlcmlhbGl6ZWQgcGNpX3NlciBhbmQgdGhlIGJsb2NrX3NldCB1c2VkIHRvIG1hbmFnZQomIzQzOyAqIHRoZSBzZXJpYWxpemVkIGVudHJpZXMuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgewomIzQzOwlzdHJ1Y3QgcGNpX3NlciAqc2VyOwomIzQzOwlzdHJ1Y3Qga2hvX2Jsb2NrX3NldCBibG9ja19zZXQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAtIEluY29taW5nIFBDSSBGTEIgb2JqZWN0CiYjNDM7ICogQHNlcjogVGhlIGluY29taW5nIHN0cnVjdCBwY2lfc2VyIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbC4KJiM0MzsgKiBAeGE6IFhhcnJheSB1c2VkIHRvIHF1aWNrbHkgbG9va3VwIGRldmljZXMgaW4gQHNlci4KJiM0MzsgKiBAYmxvY2tfc2V0OiBUaGUgS0hPIGJsb2NrIHNldCBob2xkaW5nIHRoZSBpbmNvbWluZyBkZXZpY2VzLgomIzQzOyAqCiYjNDM7ICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIHJ1bnRpbWUgc3RhdGUgZm9yIHRoZSBpbmNvbWluZyBQQ0kgTGl2ZSBVcGRhdGUKJiM0MzsgKiBzdGF0ZS4gSXQgd3JhcHMgdGhlIHNlcmlhbGl6ZWQgcGNpX3NlciwgdGhlIGJsb2NrX3NldCB1c2VkIHRvIHJlc3RvcmUKJiM0MzsgKiB0aGUgc2VyaWFsaXplZCBlbnRyaWVzLCBhbmQgYW4geGFycmF5IGZvciBmYXN0IGxvb2t1cHMuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBjaV9mbGJfaW5jb21pbmcgewomIzQzOwlzdHJ1Y3QgcGNpX3NlciAqc2VyOwomIzQzOwlzdHJ1Y3QgeGFycmF5IHhhOwomIzQzOwlzdHJ1Y3Qga2hvX2Jsb2NrX3NldCBibG9ja19zZXQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwY2lfc2VyX3hhX2tleSh1MzIgZG9tYWluLCB1MTYgYmRmKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nKWRvbWFpbiAmbHQ7Jmx0OyAxNiB8IGJkZjsKJiM0Mzt9CiYjNDM7c3RhdGljIGludCBwY2lfZmxiX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nOwomIzQzOwlzdHJ1Y3QgcGNpX3NlciAqc2VyOwomIzQzOwomIzQzOwlvdXRnb2luZyA9IGt6YWxsb2Nfb2JqKCpvdXRnb2luZyk7CiYjNDM7CWlmICghb3V0Z29pbmcpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJc2VyID0ga2hvX2FsbG9jX3ByZXNlcnZlKHNpemVvZigqc2VyKSk7CiYjNDM7CWlmIChJU19FUlIoc2VyKSkgewomIzQzOwkJa2ZyZWUob3V0Z29pbmcpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIoc2VyKTsKJiM0MzsJfQomIzQzOwomIzQzOwlzZXItJmd0O25yX2RldmljZXMgPSAwOwomIzQzOwlzZXItJmd0O2RldmljZXMgPSAwOwomIzQzOwomIzQzOwlvdXRnb2luZy0mZ3Q7c2VyID0gc2VyOwomIzQzOwlraG9fYmxvY2tfc2V0X2luaXQoJmFtcDtvdXRnb2luZy0mZ3Q7YmxvY2tfc2V0LCBzaXplb2Yoc3RydWN0IHBjaV9kZXZfc2VyKSk7CiYjNDM7CiYjNDM7CWFyZ3MtJmd0O29iaiA9IG91dGdvaW5nOwomIzQzOwlhcmdzLSZndDtkYXRhID0gdmlydF90b19waHlzKHNlcik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwY2lfZmxiX3VucHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmxiX29wX2FyZ3MgKmFyZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcgPSBhcmdzLSZndDtvYmo7CiYjNDM7CiYjNDM7CVdBUk5fT04ob3V0Z29pbmctJmd0O3Nlci0mZ3Q7bnJfZGV2aWNlcyk7CiYjNDM7CWtob19ibG9ja19zZXRfZGVzdHJveSgmYW1wO291dGdvaW5nLSZndDtibG9ja19zZXQpOwomIzQzOwlraG9fdW5wcmVzZXJ2ZV9mcmVlKG91dGdvaW5nLSZndDtzZXIpOwomIzQzOwlrZnJlZShvdXRnb2luZyk7CiYjNDM7CXByX2RlYnVnKCYjMzQ7VW5wcmVzZXJ2ZWQgc3RydWN0IHBjaV9zZXJcbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwY2lfZmxiX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9zZXIgKnNlciA9IHBoeXNfdG9fdmlydChhcmdzLSZndDtkYXRhKTsKJiM0MzsJc3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKmluY29taW5nOwomIzQzOwlzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXI7CiYjNDM7CXN0cnVjdCBraG9fYmxvY2tfc2V0X2l0IGl0OwomIzQzOwlpbnQgcmV0ID0gLUVOT01FTTsKJiM0MzsKJiM0MzsJaW5jb21pbmcgPSBremFsbG9jX29iaigqaW5jb21pbmcpOwomIzQzOwlpZiAoIWluY29taW5nKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9mcmVlOwomIzQzOwomIzQzOwlpbmNvbWluZy0mZ3Q7c2VyID0gc2VyOwomIzQzOwl4YV9pbml0KCZhbXA7aW5jb21pbmctJmd0O3hhKTsKJiM0MzsKJiM0MzsJa2hvX2Jsb2NrX3NldF9pbml0KCZhbXA7aW5jb21pbmctJmd0O2Jsb2NrX3NldCwgc2l6ZW9mKHN0cnVjdCBwY2lfZGV2X3NlcikpOwomIzQzOwlyZXQgPSBraG9fYmxvY2tfc2V0X3Jlc3RvcmUoJmFtcDtpbmNvbWluZy0mZ3Q7YmxvY2tfc2V0LCBzZXItJmd0O2RldmljZXMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZnJlZV9pbmNvbWluZzsKJiM0MzsKJiM0MzsJa2hvX2Jsb2NrX3NldF9pdF9pbml0KCZhbXA7aXQsICZhbXA7aW5jb21pbmctJmd0O2Jsb2NrX3NldCk7CiYjNDM7CXdoaWxlICgoZGV2X3NlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeSgmYW1wO2l0KSkpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcga2V5OwomIzQzOwomIzQzOwkJaWYgKCFkZXZfc2VyLSZndDtyZWZjb3VudCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWtleSA9IHBjaV9zZXJfeGFfa2V5KGRldl9zZXItJmd0O2RvbWFpbiwgZGV2X3Nlci0mZ3Q7YmRmKTsKJiM0MzsJCXJldCA9IHhhX2luc2VydCgmYW1wO2luY29taW5nLSZndDt4YSwga2V5LCBkZXZfc2VyLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBlcnJfYmxvY2tfc2V0X2Rlc3Ryb3k7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYXJncy0mZ3Q7b2JqID0gaW5jb21pbmc7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9ibG9ja19zZXRfZGVzdHJveToKJiM0MzsJa2hvX2Jsb2NrX3NldF9kZXN0cm95KCZhbXA7aW5jb21pbmctJmd0O2Jsb2NrX3NldCk7CiYjNDM7ZXJyX2ZyZWVfaW5jb21pbmc6CiYjNDM7CXhhX2Rlc3Ryb3koJmFtcDtpbmNvbWluZy0mZ3Q7eGEpOwomIzQzOwlrZnJlZShpbmNvbWluZyk7CiYjNDM7ZXJyX3Jlc3RvcmVfZnJlZToKJiM0MzsJa2hvX3Jlc3RvcmVfZnJlZShzZXIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwY2lfZmxiX2ZpbmlzaChzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BfYXJncyAqYXJncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZyA9IGFyZ3MtJmd0O29iajsKJiM0MzsKJiM0MzsJeGFfZGVzdHJveSgmYW1wO2luY29taW5nLSZndDt4YSk7CiYjNDM7CWtob19ibG9ja19zZXRfZGVzdHJveSgmYW1wO2luY29taW5nLSZndDtibG9ja19zZXQpOwomIzQzOwlraG9fcmVzdG9yZV9mcmVlKGluY29taW5nLSZndDtzZXIpOwomIzQzOwlrZnJlZShpbmNvbWluZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BzIHBjaV9saXZldXBkYXRlX2ZsYl9vcHMgPSB7CiYjNDM7CS5wcmVzZXJ2ZSA9IHBjaV9mbGJfcHJlc2VydmUsCiYjNDM7CS51bnByZXNlcnZlID0gcGNpX2ZsYl91bnByZXNlcnZlLAomIzQzOwkucmV0cmlldmUgPSBwY2lfZmxiX3JldHJpZXZlLAomIzQzOwkuZmluaXNoID0gcGNpX2ZsYl9maW5pc2gsCiYjNDM7CS5vd25lciA9IFRISVNfTU9EVUxFLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiBwY2lfbGl2ZXVwZGF0ZV9mbGIgPSB7CiYjNDM7CS5vcHMgPSAmYW1wO3BjaV9saXZldXBkYXRlX2ZsYl9vcHMsCiYjNDM7CS5jb21wYXRpYmxlID0gUENJX0xVT19GTEJfQ09NUEFUSUJMRSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbGl2ZXVwZGF0ZV9mbGJfZ2V0X291dGdvaW5nKCZhbXA7cGNpX2xpdmV1cGRhdGVfZmxiLCAodm9pZCAqKikmYW1wO291dGdvaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CiYjNDM7CWlmICghb3V0Z29pbmcpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG91dGdvaW5nOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kZXZfc2VyICpwY2lfZ2V0X2VtcHR5X29yX2FwcGVuZChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXIsICpmb3VuZCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBraG9fYmxvY2tfc2V0X2l0IGl0OwomIzQzOwlpbnQgZXJyOwomIzQzOwl1MzIgY291bnQgPSAwOwomIzQzOwomIzQzOwlraG9fYmxvY2tfc2V0X2l0X2luaXQoJmFtcDtpdCwgJmFtcDtvdXRnb2luZy0mZ3Q7YmxvY2tfc2V0KTsKJiM0MzsJd2hpbGUgKChkZXZfc2VyID0ga2hvX2Jsb2NrX3NldF9pdF9yZWFkX2VudHJ5KCZhbXA7aXQpKSkgewomIzQzOwkJY291bnQmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGRldl9zZXItJmd0O3JlZmNvdW50ID09IDAgJmFtcDsmYW1wOyAhZm91bmQpCiYjNDM7CQkJZm91bmQgPSBkZXZfc2VyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChmb3VuZCkKJiM0MzsJCXJldHVybiBmb3VuZDsKJiM0MzsKJiM0MzsJZXJyID0ga2hvX2Jsb2NrX3NldF9ncm93KCZhbXA7b3V0Z29pbmctJmd0O2Jsb2NrX3NldCwgY291bnQgJiM0MzsgMSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwomIzQzOwlpZiAoY291bnQgPT0gMCkKJiM0MzsJCWtob19ibG9ja19zZXRfaXRfaW5pdCgmYW1wO2l0LCAmYW1wO291dGdvaW5nLSZndDtibG9ja19zZXQpOwomIzQzOwomIzQzOwlkZXZfc2VyID0ga2hvX2Jsb2NrX3NldF9pdF9yZXNlcnZlX2VudHJ5KCZhbXA7aXQpOwomIzQzOwlpZiAoIWRldl9zZXIpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldl9zZXI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9kZXZpY2Uoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXZfc2VyICpkZXZfc2VyID0gZGV2LSZndDtsaXZldXBkYXRlLm91dGdvaW5nOwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDtsaXZldXBkYXRlLmZyb3plbikgewomIzQzOwkJcGNpX3dhcm4oZGV2LCAmIzM0O0Nhbm5vdCB1bnByZXNlcnZlIGRldmljZSBhZnRlciBpdCBpcyBmcm96ZW4hXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWRldl9zZXIpIHsKJiM0MzsJCXBjaV93YXJuKGRldiwgJiMzNDtDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2UgdGhhdCBpcyBub3QgcHJlc2VydmVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWRldl9zZXItJmd0O3JlZmNvdW50KSB7CiYjNDM7CQlwY2lfV0FSTihkZXYsIDEsICYjMzQ7UHJlc2VydmVkIGRldmljZSBoYXMgYSAwIHJlZmNvdW50IVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKC0tZGV2X3Nlci0mZ3Q7cmVmY291bnQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcGNpX2luZm8oZGV2LCAmIzM0O0RldmljZSB3aWxsIG5vIGxvbmdlciBiZSBwcmVzZXJ2ZWQgYWNyb3NzIG5leHQgTGl2ZSBVcGRhdGVcbiYjMzQ7KTsKJiM0MzsJb3V0Z29pbmctJmd0O3Nlci0mZ3Q7bnJfZGV2aWNlcy0tOwomIzQzOwltZW1zZXQoZGV2X3NlciwgMCwgc2l6ZW9mKCpkZXZfc2VyKSk7CiYjNDM7CWRldi0mZ3Q7bGl2ZXVwZGF0ZS5vdXRnb2luZyA9IE5VTEw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZV9hZ2FpbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJaWYgKCFkZXYtJmd0O2xpdmV1cGRhdGUub3V0Z29pbmctJmd0O3JlZmNvdW50KSB7CiYjNDM7CQlwY2lfV0FSTihkZXYsIDEsICYjMzQ7UHJlc2VydmVkIGRldmljZSB3aXRoIDAgcmVmY291bnQhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbmRwb2ludCBkZXZpY2VzIHNob3VsZCBub3QgYmUgcHJlc2VydmVkIG1vcmUgdGhhbiBvbmNlLiBCcmlkZ2VzIGFyZQomIzQzOwkgKiBwcmVzZXJ2ZWQgb25jZSBmb3IgZXZlcnkgZG93bnN0cmVhbSBkZXZpY2UgdGhhdCBpcyBwcmVzZXJ2ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWRldi0mZ3Q7c3Vib3JkaW5hdGUpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlkZXYtJmd0O2xpdmV1cGRhdGUub3V0Z29pbmctJmd0O3JlZmNvdW50JiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19wY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2Uoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXZfc2VyICpkZXZfc2VyOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEbyBub3QgcHJlc2VydmUgZGV2aWNlcyB0aGF0IHJlbHkgb24gZGV2aWNlLXNwZWNpZmljIEFDUyBlcXVpdmFsZW50cwomIzQzOwkgKiAoZm9yIG5vdykgc2luY2UgdGhhdCB3b3VsZCBjb21wbGljYXRlIGtlZXBpbmcgQUNTIGNvbnN0YW50IGFjcm9zcwomIzQzOwkgKiBMaXZlIFVwZGF0ZS4KJiM0MzsJICovCiYjNDM7CWlmIChwY2lfbmVlZF9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhkZXYpKSB7CiYjNDM7CQlwY2lfd2FybihkZXYsICYjMzQ7UmVmdXNpbmcgdG8gcHJlc2VydmUgZGV2aWNlIHRoYXQgcmVsaWVzIG9uIEFDUyBxdWlya3NcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldl9zZXIgPSBwY2lfZ2V0X2VtcHR5X29yX2FwcGVuZChvdXRnb2luZyk7CiYjNDM7CWlmIChJU19FUlIoZGV2X3NlcikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkZXZfc2VyKTsKJiM0MzsKJiM0MzsJcGNpX2luZm8oZGV2LCAmIzM0O0RldmljZSB3aWxsIGJlIHByZXNlcnZlZCBhY3Jvc3MgbmV4dCBMaXZlIFVwZGF0ZVxuJiMzNDspOwomIzQzOwlvdXRnb2luZy0mZ3Q7c2VyLSZndDtucl9kZXZpY2VzJiM0MzsmIzQzOzsKJiM0MzsJb3V0Z29pbmctJmd0O3Nlci0mZ3Q7ZGV2aWNlcyA9IGtob19ibG9ja19zZXRfaGVhZF9wYSgmYW1wO291dGdvaW5nLSZndDtibG9ja19zZXQpOwomIzQzOwomIzQzOwlkZXZfc2VyLSZndDtkb21haW4gPSBwY2lfZG9tYWluX25yKGRldi0mZ3Q7YnVzKTsKJiM0MzsJZGV2X3Nlci0mZ3Q7YmRmID0gcGNpX2Rldl9pZChkZXYpOwomIzQzOwlkZXZfc2VyLSZndDtyZWZjb3VudCA9IDE7CiYjNDM7CiYjNDM7CWRldi0mZ3Q7bGl2ZXVwZGF0ZS5vdXRnb2luZyA9IGRldl9zZXI7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZShzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlpZiAoZGV2LSZndDtsaXZldXBkYXRlLmZyb3plbikgewomIzQzOwkJcGNpX3dhcm4oZGV2LCAmIzM0O0Nhbm5vdCBwcmVzZXJ2ZSBkZXZpY2UgYWZ0ZXIgaXQgaXMgZnJvemVuIVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7bGl2ZXVwZGF0ZS5vdXRnb2luZykKJiM0MzsJCXJldHVybiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2VfYWdhaW4oZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfZGV2aWNlKG91dGdvaW5nLCBkZXYpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChfZCwgX3N0YXJ0LCBfZW5kKSBcCiYjNDM7CWZvciAoKF9kKSA9IChfc3RhcnQpOyAoX2QpICE9IChfZW5kKTsgKF9kKSA9IChfZCktJmd0O2J1cy0mZ3Q7c2VsZikKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX3BjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpzdGFydCwKJiM0MzsJCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKmVuZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpkZXY7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBlbmQpIHsKJiM0MzsJCWlmIChwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX2RldmljZShvdXRnb2luZywgZGV2KSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywKJiM0MzsJCQkJCSAgIHN0cnVjdCBwY2lfZGV2ICpzdGFydCkKJiM0Mzt7CiYjNDM7CV9fcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBzdGFydCwgLyplbmQ9Ki9OVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9wYXRoKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywKJiM0MzsJCQkJCXN0cnVjdCBwY2lfZGV2ICpzdGFydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpkZXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7CiYjNDM7CQlyZXQgPSBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2Uob3V0Z29pbmcsIGRldik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJX19wY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX3BhdGgob3V0Z29pbmcsIHN0YXJ0LCBkZXYpOwomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgLSBQcmVzZXJ2ZSBhIFBDSSBkZXZpY2UgYWNyb3NzIExpdmUgVXBkYXRlCiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2UgdG8gcHJlc2VydmUuCiYjNDM7ICoKJiM0MzsgKiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSgpIG5vdGlmaWVzIHRoZSBQQ0kgY29yZSB0aGF0IGEgUENJIGRldmljZSBzaG91bGQgYmUKJiM0MzsgKiBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBuZXh0IExpdmUgVXBkYXRlLiBEcml2ZXJzIGFyZSBleHBlY3RlZCB0byBjYWxsCiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSBmcm9tIHRoZWlyIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlcgomIzQzOyAqIHByZXNlcnZlKCkgY2FsbGJhY2sgdG8gZW5zdXJlIHRoZSBvdXRnb2luZyBzdHJ1Y3QgcGNpX3NlciBpcyBhbHJlYWR5IHNldCB1cC4KJiM0MzsgKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgYXV0b21hdGljYWxseSBwcmVzZXJ2ZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2YKJiM0MzsgKiBAZGV2LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7aXNfdmlydGZuKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWd1YXJkKHJ3c2VtX3dyaXRlKSgmYW1wO3BjaV9saXZldXBkYXRlLnJ3c2VtKTsKJiM0MzsKJiM0MzsJb3V0Z29pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X291dGdvaW5nKCk7CiYjNDM7CWlmIChJU19FUlIob3V0Z29pbmcpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIob3V0Z29pbmcpOwomIzQzOwomIzQzOwlyZXR1cm4gcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfcGF0aChvdXRnb2luZywgZGV2KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfcHJlc2VydmUpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSAtIENhbmNlbCBwcmVzZXJ2YXRpb24gb2YgYSBQQ0kgZGV2aWNlCiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2UgdG8gdW5wcmVzZXJ2ZS4KJiM0MzsgKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSBub3RpZmllcyB0aGUgUENJIGNvcmUgdGhhdCBhIFBDSSBkZXZpY2Ugc2hvdWxkIG5vCiYjNDM7ICogbG9uZ2VyIGJlIHByZXNlcnZlZCBhY3Jvc3MgdGhlIG5leHQgTGl2ZSBVcGRhdGUuIERyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIGNhbGwKJiM0MzsgKiBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKCkgZnJvbSB0aGVpciBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIKJiM0MzsgKiB1bnByZXNlcnZlKCkgY2FsbGJhY2sgdG8gZW5zdXJlIHRoZSBvdXRnb2luZyBzdHJ1Y3QgcGNpX3NlciBpcyBhbHJlYWR5IHNldAomIzQzOyAqIHVwLgomIzQzOyAqCiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpIGF1dG9tYXRpY2FsbHkgdW5wcmVzZXJ2ZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2YKJiM0MzsgKiBAZGV2LgomIzQzOyAqLwomIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDsKJiM0MzsKJiM0MzsJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7cGNpX2xpdmV1cGRhdGUucndzZW0pOwomIzQzOwomIzQzOwlvdXRnb2luZyA9IHBjaV9saXZldXBkYXRlX2ZsYl9nZXRfb3V0Z29pbmcoKTsKJiM0MzsJaWYgKElTX0VSUihvdXRnb2luZykpIHsKJiM0MzsJCXBjaV93YXJuKGRldiwgJiMzNDtDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2Ugd2l0aG91dCBvdXRnb2luZyBMaXZlIFVwZGF0ZSBzdGF0ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChvdXRnb2luZywgZGV2KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwY2lfZmxiX2luY29taW5nICpwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAqaW5jb21pbmcgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBsaXZldXBkYXRlX2ZsYl9nZXRfaW5jb21pbmcoJmFtcDtwY2lfbGl2ZXVwZGF0ZV9mbGIsICh2b2lkICoqKSZhbXA7aW5jb21pbmcpOwomIzQzOwomIzQzOwkvKiBMaXZlIFVwZGF0ZSBpcyBub3QgZW5hYmxlZC4gKi8KJiM0MzsJaWYgKHJldCA9PSAtRU9QTk9UU1VQUCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwkvKiBMaXZlIFVwZGF0ZSBpcyBlbmFibGVkLCBidXQgdGhlcmUgaXMgbm8gaW5jb21pbmcgRkxCIGRhdGEuICovCiYjNDM7CWlmIChyZXQgPT0gLUVOT0RBVEEpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTGl2ZSBVcGRhdGUgaXMgZW5hYmxlZCBhbmQgdGhlcmUgaXMgaW5jb21pbmcgRkxCIGRhdGEsIGJ1dCBub25lIG9mIGl0CiYjNDM7CSAqIG1hdGNoZXMgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGUuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgY291bGQgbWVhbiB0aGF0IG5vIFBDSSBGTEIgZGF0YSB3YXMgcGFzc2VkIGJ5IHRoZSBwcmV2aW91cwomIzQzOwkgKiBrZXJuZWwsIGJ1dCBpdCBjb3VsZCBhbHNvIG1lYW4gdGhlIHByZXZpb3VzIGtlcm5lbCB1c2VkIGEgZGlmZmVyZW50CiYjNDM7CSAqIGNvbXBhdGliaWxpdHkgc3RyaW5nIChpLmUuIGEgZGlmZmVyZW50IEFCSSkuCiYjNDM7CSAqLwomIzQzOwlpZiAocmV0ID09IC1FTk9FTlQpIHsKJiM0MzsJCXByX2luZm9fb25jZSgmIzM0O05vIGluY29taW5nIEZMQiBtYXRjaGVkICVzXG4mIzM0OywgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGUpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlcmUgaXMgaW5jb21pbmcgRkxCIGRhdGEgdGhhdCBtYXRjaGVzIHBjaV9saXZldXBkYXRlX2ZsYi5jb21wYXRpYmxlCiYjNDM7CSAqIGJ1dCBpdCBjYW5ub3QgYmUgcmV0cmlldmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJldCkKJiM0MzsJCXBhbmljKCYjMzQ7RmFpbGVkIHRvIHJldHJpZXZlIGluY29taW5nIEZMQiBkYXRhICglZClcbiYjMzQ7LCByZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gaW5jb21pbmc7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcodm9pZCkKJiM0Mzt7CiYjNDM7CWxpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZygmYW1wO3BjaV9saXZldXBkYXRlX2ZsYik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luKCkgLSBEZXRlcm1pbmUgaWYgYSBicmlkZ2Ugc2hvdWxkIGluaGVyaXQgYnVzIG51bWJlcnMKJiM0MzsgKiBAYnVzOiBUaGUgcGFyZW50IGJ1cyBvZiB0aGUgYnJpZGdlLgomIzQzOyAqIEBkZXY6IFRoZSBQQ0kgYnJpZGdlIGRldmljZS4KJiM0MzsgKiBAcGFzczogVGhlIHNjYW4gcGFzcyAoMCBmb3IgZmlyc3QgcGFzcywgMSBmb3Igc2Vjb25kIHBhc3MpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIFBDSSBjb3JlIHdoZW4gaXQgYmVnaW5zIHNjYW5uaW5nIGEgYnJpZGdlLgomIzQzOyAqIEl0IGRldGVybWluZXMgd2hldGhlciB0aGUgYnJpZGdlIHNob3VsZCBpbmhlcml0IHRoZSBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlCiYjNDM7ICogYnVzIG51bWJlcnMgYXNzaWduZWQgdG8gaXQgYnkgdGhlIHByZXZpb3VzIGtlcm5lbC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8KJiM0MzsgKiBrZWVwIGJ1cyBudW1iZXJzIGNvbnN0YW50IGZvciBwcmVzZXJ2ZWQgZGV2aWNlcyBkb3duc3RyZWFtIG9mIHRoZSBicmlkZ2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRydWUgaWYgYnVzIG51bWJlcnMgc2hvdWxkIGJlIGluaGVyaXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2Jvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldiwKJiM0MzsJCQkJICAgICAgaW50IHBhc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGFyZW50ID0gYnVzLSZndDtzZWxmOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPbiB0aGUgc2Vjb25kIHBhc3MsIHJldXNlIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQgb24gdGhlIGZpcnN0IHBhc3MKJiM0MzsJICogc28gdGhhdCB0aGUgcGFzc2VzIGFyZSBjb25zaXN0ZW50IHdpdGggb25lIGFub3RoZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocGFzcykKJiM0MzsJCXJldHVybiBkZXYtJmd0O2xpdmV1cGRhdGUuaW5oZXJpdF9idXNlczsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIHBhcmVudCBicmlkZ2UgaXMgYmVpbmcgZm9yY2VkIHRvIGluaGVyaXQgaXRzIGJ1cyBudW1iZXJzCiYjNDM7CSAqIGR1cmluZyB0aGlzIHNjYW4gdGhlbiB0aGlzIGJyaWRnZSBtdXN0IGFzIHdlbGwsIG90aGVyd2lzZSB0aGUgUENJCiYjNDM7CSAqIGNvcmUgY291bGQgZXhwYW5kIHRoaXMgYnJpZGdlJiMzOTtzIHJlc2VydmF0aW9uIGJleW9uZCBpdHMgcGFyZW50ICh3aGljaAomIzQzOwkgKiBjYW5ub3QgZXhwYW5kKS4KJiM0MzsJICovCiYjNDM7CWlmIChwYXJlbnQgJmFtcDsmYW1wOyBwYXJlbnQtJmd0O2xpdmV1cGRhdGUuaW5oZXJpdF9idXNlcykgewomIzQzOwkJZGV2LSZndDtsaXZldXBkYXRlLmluaGVyaXRfYnVzZXMgPSB0cnVlOwomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgYW55IGluY29taW5nIHByZXNlcnZlZCBkZXZpY2VzLCBmb3JjZSB0aGUKJiM0MzsJICogYnVzIG51bWJlcnMgdG8gYmUgaW5oZXJpdGVkIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBidXMgbnVtYmVycwomIzQzOwkgKiBhc3NpZ25lZCB0byB0aG9zZSBkZXZpY2VzIGR1cmluZyBlbnVtZXJhdGlvbi4KJiM0MzsJICoKJiM0MzsJICogVG8ga2VlcCB0aGluZ3Mgc2ltcGxlLCBpbmhlcml0IGJ1cyBudW1iZXJzIG9uIGFsbCBicmlkZ2VzIGlmIGFueSBQQ0kKJiM0MzsJICogZGV2aWNlcyBhcmUgaW5jb21pbmcsIHRvIGVuc3VyZSB0aGF0IG5vIGJyaWRnZSYjMzk7cyByZXNlcnZhdGlvbiBpcwomIzQzOwkgKiBleHBhbmRlZCB0byBvdmVybGFwIHdpdGggYSBwcmVzZXJ2ZWQgZGV2aWNlIGRvd25zdHJlYW0gb2YgYSBkaWZmZXJlbnQKJiM0MzsJICogYnJpZGdlLgomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsICZhbXA7cGNpX2xpdmV1cGRhdGUucndzZW0pIHsKJiM0MzsJCXN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZzsKJiM0MzsKJiM0MzsJCWluY29taW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZygpOwomIzQzOwkJaWYgKCFpbmNvbWluZykgewomIzQzOwkJCWRldi0mZ3Q7bGl2ZXVwZGF0ZS5pbmhlcml0X2J1c2VzID0gZmFsc2U7CiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEl0IGlzIHNhZmUgdG8gc2FtcGxlIGluY29taW5nLSZndDtzZXItJmd0O25yX2RldmljZXMgYW5kIHRoZW4KJiM0MzsJCSAqIGRyb3AgdGhlIHJ3c2VtIHNpbmNlIG5yX2RldmljZXMgd2lsbCBvbmx5IGRlY3JlYXNlLiBUaHVzIHRoZQomIzQzOwkJICogb25seSAmIzM0O3JhY2UmIzM0OyBpcyB0aGF0IHRoZSBjdXJyZW50IHNjYW4gd2lsbCBiZSBvdmVybHkKJiM0MzsJCSAqIGNvbnNlcnZhdGl2ZSBhbmQgZm9yY2UgYnVzIGluaGVyaXRhbmNlLgomIzQzOwkJICovCiYjNDM7CQlkZXYtJmd0O2xpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9ICEhaW5jb21pbmctJmd0O3Nlci0mZ3Q7bnJfZGV2aWNlczsKJiM0MzsJCXBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZGV2LSZndDtsaXZldXBkYXRlLmluaGVyaXRfYnVzZXM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZCgpIC0gRmluaXNoIHNjYW5uaW5nIGEgUENJIGJyaWRnZQomIzQzOyAqIEBkZXY6IFRoZSBQQ0kgYnJpZGdlIGRldmljZS4KJiM0MzsgKiBAcGFzczogVGhlIHNjYW4gcGFzcyAoMCBmb3IgZmlyc3QgcGFzcywgMSBmb3Igc2Vjb25kIHBhc3MpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIFBDSSBjb3JlIHdoZW4gaXQgZmluaXNoZXMgc2Nhbm5pbmcgYSBicmlkZ2UuCiYjNDM7ICogSXQgY2xlYXJzIHRoZSBpbmhlcml0YW5jZSBzdGF0dXMgYWZ0ZXIgdGhlIHNlY29uZCBwYXNzIHNvIGl0IGNhbiBiZQomIzQzOyAqIHJlLWV2YWx1YXRlZCBvbiBmdXR1cmUgc2NhbnMuCiYjNDM7ICovCiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBhc3MpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBDbGVhciBpbmhlcml0X2J1c2VzIGFmdGVyIHRoZSBzZWNvbmQgcGFzcyBzbyBpdCBjYW4gYmUgcmUtZXZhbHVhdGVkCiYjNDM7CSAqIG9uIGZ1dHVyZSBzY2Fucy4KJiM0MzsJICovCiYjNDM7CWlmIChwYXNzKQomIzQzOwkJZGV2LSZndDtsaXZldXBkYXRlLmluaGVyaXRfYnVzZXMgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZzsKJiM0MzsJc3RydWN0IHBjaV9kZXZfc2VyICpkZXZfc2VyOwomIzQzOwl1bnNpZ25lZCBsb25nIGtleTsKJiM0MzsKJiM0MzsJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7cGNpX2xpdmV1cGRhdGUucndzZW0pOwomIzQzOwomIzQzOwlpbmNvbWluZyA9IHBjaV9saXZldXBkYXRlX2ZsYl9nZXRfaW5jb21pbmcoKTsKJiM0MzsJaWYgKCFpbmNvbWluZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJa2V5ID0gcGNpX3Nlcl94YV9rZXkocGNpX2RvbWFpbl9ucihkZXYtJmd0O2J1cyksIHBjaV9kZXZfaWQoZGV2KSk7CiYjNDM7CWRldl9zZXIgPSB4YV9sb2FkKCZhbXA7aW5jb21pbmctJmd0O3hhLCBrZXkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGRldmljZSB3YXMgbm90IHByZXNlcnZlZCBhY3Jvc3MgTGl2ZSBVcGRhdGUsIG9yIGl0IHdhcyBwcmVzZXJ2ZWQKJiM0MzsJICogYnV0IGhhcyBhbHJlYWR5IGJlZW4gcHJvYmVkIGFuZCBnb25lIHRocm91Z2ggcGNpX2xpdmV1cGRhdGVfZmluaXNoKCksCiYjNDM7CSAqIGUuZy4gZHVlIHRvIHJlbW92aW5nIGFuZCByZS1hZGRpbmcgdGhlIGRldmljZS4gRWl0aGVyIHdheSwgaXQmIzM5O3Mgbm90CiYjNDM7CSAqIHRyZWF0ZWQgYXMgaW5jb21pbmctcHJlc2VydmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFkZXZfc2VyIHx8ICFkZXZfc2VyLSZndDtyZWZjb3VudCkgewomIzQzOwkJcGNpX2xpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZygpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CiYjNDM7CXBjaV9pbmZvKGRldiwgJiMzNDtEZXZpY2Ugd2FzIHByZXNlcnZlZCBieSBwcmV2aW91cyBrZXJuZWwgYWNyb3NzIExpdmUgVXBkYXRlXG4mIzM0Oyk7CiYjNDM7CWRldi0mZ3Q7bGl2ZXVwZGF0ZS5pbmNvbWluZyA9IGRldl9zZXI7CiYjNDM7CWRldi0mZ3Q7bGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSG9sZCB0aGUgcmVmIG9uIHRoZSBpbmNvbWluZyBGTEIgdW50aWwgcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkgc28KJiM0MzsJICogdGhhdCBkZXYtJmd0O2xpdmV1cGRhdGUuaW5jb21pbmcgY2Fubm90IGdldCBmcmVlZCB3aGlsZSB0aGUgUENJIGNvcmUKJiM0MzsJICogaGFzIGEgcG9pbnRlciB0byBpdC4gSXQmIzM5O3MgYmV0dGVyIHRvIGxlYWsgdGhlIGluY29taW5nIEZMQiB0aGFuIGRvIGEKJiM0MzsJICogdXNlLWFmdGVyLWZyZWUgaWYgZHJpdmVyIGRvZXMgbm90IGNhbGwgcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkuCiYjNDM7CSAqLwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBJdCBzaG91bGQgYmUgc2FmZSB0byBSRUFEX09OQ0UoKSBvdXRzaWRlIG9mIHRoZSByd3NlbSBkdXJpbmcgY2xlYW51cAomIzQzOwkgKiBzaW5jZSB0aGVyZSBzaG91bGQgbm8gbG9uZ2VyIGJlIGFueSByZWZlcmVuY2VzIHRvIEBkZXYgb24gdGhlIHN5c3RlbS4KJiM0MzsJICoKJiM0MzsJICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIHByYWN0aWNlLiBEcml2ZXJzIHNob3VsZCBibG9jayByZW1vdmFsCiYjNDM7CSAqIHdoaWxlIGEgZGV2aWNlIGlzIHByZXNlcnZlZC4KJiM0MzsJICovCiYjNDM7CWlmIChSRUFEX09OQ0UoZGV2LSZndDtsaXZldXBkYXRlLm91dGdvaW5nKSkKJiM0MzsJCXBjaV9XQVJOKGRldiwgMSwgJiMzNDtEZXN0cm95aW5nIG91dGdvaW5nLXByZXNlcnZlZCBkZXZpY2UhXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChSRUFEX09OQ0UoZGV2LSZndDtsaXZldXBkYXRlLmluY29taW5nKSkgewomIzQzOwkJcGNpX1dBUk4oZGV2LCAxLCAmIzM0O0Rlc3Ryb3lpbmcgaW5jb21pbmctcHJlc2VydmVkIGRldmljZSFcbiYjMzQ7KTsKJiM0MzsJCXBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2ZyZWV6ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7cGNpX2xpdmV1cGRhdGUucndzZW0pOwomIzQzOwlkZXYtJmd0O2xpdmV1cGRhdGUuZnJvemVuID0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2hfZGV2aWNlKHN0cnVjdCBwY2lfc2VyICpzZXIsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlpZiAoIWRldi0mZ3Q7bGl2ZXVwZGF0ZS5pbmNvbWluZykgewomIzQzOwkJcGNpX3dhcm4oZGV2LCAmIzM0O0Nhbm5vdCBmaW5pc2ggcHJlc2VydmluZyBhbiB1bnByZXNlcnZlZCBkZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtsaXZldXBkYXRlLmluY29taW5nLSZndDtyZWZjb3VudCkgewomIzQzOwkJcGNpX1dBUk4oZGV2LCAxLCAmIzM0O1ByZXNlcnZlZCBkZXZpY2UgaGFzIGEgMCByZWZjb3VudCFcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERlY3JlbWVudCB0aGUgcmVmY291bnQgc28gdGhpcyBkZXZpY2UgZG9lcyBub3QgZ2V0IHRyZWF0ZWQgYXMgYW4KJiM0MzsJICogaW5jb21pbmcgZGV2aWNlIGFnYWluLCBlLmcuIGluIGNhc2UgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKCkKJiM0MzsJICogZ2V0cyBjYWxsZWQgYWdhaW4gYmVjYXVzZSB0aGUgZGV2aWNlIGlzIGhvdC1wbHVnZ2VkLgomIzQzOwkgKi8KJiM0MzsJaWYgKC0tZGV2LSZndDtsaXZldXBkYXRlLmluY29taW5nLSZndDtyZWZjb3VudCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwY2lfaW5mbyhkZXYsICYjMzQ7RGV2aWNlIGlzIGZpbmlzaGVkIHBhcnRpY2lwYXRpbmcgaW4gTGl2ZSBVcGRhdGVcbiYjMzQ7KTsKJiM0MzsJZGV2LSZndDtsaXZldXBkYXRlLmluY29taW5nID0gTlVMTDsKJiM0MzsJc2VyLSZndDtucl9kZXZpY2VzLS07CiYjNDM7CXBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaF9wYXRoKHN0cnVjdCBwY2lfc2VyICpzZXIsIHN0cnVjdCBwY2lfZGV2ICpzdGFydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpkZXY7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7CiYjNDM7CQlpZiAocGNpX2xpdmV1cGRhdGVfZmluaXNoX2RldmljZShzZXIsIGRldikpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIC0gRmluaXNoIHRoZSBwcmVzZXJ2YXRpb24gb2YgYSBQQ0kgZGV2aWNlCiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIG5vdGlmaWVzIHRoZSBQQ0kgY29yZSB0aGF0IGEgUENJIGRldmljZSB0aGF0IHdhcwomIzQzOyAqIHByZXNlcnZlZCBhY3Jvc3MgdGhlIHByZXZpb3VzIExpdmUgVXBkYXRlIGhhcyBmaW5pc2hlZCBwYXJ0aWNpcGF0aW5nIGluIExpdmUKJiM0MzsgKiBVcGRhdGUuIERyaXZlcnMgbXVzdCBjYWxsIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIGZyb20gdGhlaXIgc3RydWN0CiYjNDM7ICogbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgZmluaXNoKCkgY2FsbGJhY2sgdG8gZW5zdXJlIHRoZSBpbmNvbWluZyBzdHJ1Y3QKJiM0MzsgKiBwY2lfc2VyIGlzIGFsbG9jYXRlZC4KJiM0MzsgKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIGF1dG9tYXRpY2FsbHkgZmluaXNoZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2YgQGRldi4KJiM0MzsgKi8KJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKmluY29taW5nOwomIzQzOwomIzQzOwlndWFyZChyd3NlbV93cml0ZSkoJmFtcDtwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7CiYjNDM7CiYjNDM7CWluY29taW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZygpOwomIzQzOwlpZiAoIWluY29taW5nKSB7CiYjNDM7CQlwY2lfd2FybihkZXYsICYjMzQ7Q2Fubm90IGZpbmlzaCBwcmVzZXJ2aW5nIGRldmljZSB3aXRob3V0IGluY29taW5nIEZMQlxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjaV9saXZldXBkYXRlX2ZpbmlzaF9wYXRoKGluY29taW5nLSZndDtzZXIsIGRldik7CiYjNDM7CXBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfZmluaXNoKTsKJiM0MzsKJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlndWFyZChyd3NlbV9yZWFkKSgmYW1wO3BjaV9saXZldXBkYXRlLnJ3c2VtKTsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O2Fjc19jYXAgfHwgIWRldi0mZ3Q7bGl2ZXVwZGF0ZS5pbmNvbWluZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBkZXYtJmd0O2Fjc19jYXAgJiM0MzsgUENJX0FDU19DVFJMLCAmYW1wO2Rldi0mZ3Q7bGl2ZXVwZGF0ZS5hY3NfY3RybCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwl1MTYgYWNzX2N0cmwgPSBkZXYtJmd0O2xpdmV1cGRhdGUuYWNzX2N0cmw7CiYjNDM7CXUxNiBhY3NfY2FwID0gZGV2LSZndDthY3NfY2FwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgbGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkIGluc3RlYWQgb2YgbGl2ZXVwZGF0ZS5pbmNvbWluZyBzaW5jZSB0aGUKJiM0MzsJICogZGV2aWNlJiMzOTtzIEFDUyBjb250cm9scyBzaG91bGQgbm90IGNoYW5nZSBldmVuIGFmdGVyIHRoZSBkZXZpY2UgaXMKJiM0MzsJICogZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiB0aGUgTGl2ZSBVcGRhdGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWRldi0mZ3Q7bGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwcmV2aW91cyBrZXJuZWwgc2hvdWxkIG5vdCBoYXZlIHByZXNlcnZlZCBhbnkgZGV2aWNlcyB0aGF0CiYjNDM7CSAqIHJlcXVpcmUgZGV2aWNlLXNwZWNpZmljIHF1aXJrcyB0byBlbmFibGUgQUNTLCBidXQgaWYgc3VjaCBhIGRldmljZSBpcwomIzQzOwkgKiBkZXRlY3RlZCAoZS5nLiBuZXcgZGV2aWNlLXNwZWNpZmljIEFDUyBxdWlyayBpbiB0aGUgY3VycmVudCBrZXJuZWwpLAomIzQzOwkgKiBsb2cgYSBiaWcgd2FybmluZyBhbmQgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgZW5hYmxlIEFDUyBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHsKJiM0MzsJCXBjaV93YXJuKGRldiwgJiMzNDtEZXZpY2Utc3BlY2lmaWMgcXVpcmsgcmVxdWlyZWQgdG8gZW5hYmxlIEFDUyFcbiYjMzQ7KTsKJiM0MzsJCVdBUk5fT05fT05DRSh0cnVlKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChhY3NfY2FwKQomIzQzOwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgYWNzX2NhcCAmIzQzOyBQQ0lfQUNTX0NUUkwsIGFjc19jdHJsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwl1MTYgdmFsOwomIzQzOwomIzQzOwlndWFyZChyd3NlbV9yZWFkKSgmYW1wO3BjaV9saXZldXBkYXRlLnJ3c2VtKTsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O2xpdmV1cGRhdGUuaW5jb21pbmcpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChkZXYsIFBDSV9FWFBfREVWQ1RMMiwgJmFtcDt2YWwpOwomIzQzOwlkZXYtJmd0O2FyaV9lbmFibGVkID0gISEodmFsICZhbXA7IFBDSV9FWFBfREVWQ1RMMl9BUkkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fcmVhZCkoJmFtcDtwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7CiYjNDM7CXBjaV9XQVJOX09OQ0UoZGV2LCAhZGV2LSZndDtsaXZldXBkYXRlLmZyb3plbiwgJiMzNDtQcmVzZXJ2YXRpb24gc3RhdHVzIGlzIHVuc3RhYmxlIVxuJiMzNDspOwomIzQzOwlyZXR1cm4gZGV2LSZndDtsaXZldXBkYXRlLm91dGdvaW5nOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZygpIC0gQ2hlY2sgaWYgYSBkZXZpY2UgaXMgaW5jb21pbmctcHJlc2VydmVkCiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2UgdG8gY2hlY2sKJiM0MzsgKgomIzQzOyAqIENoZWNrIGlmIGEgZGV2aWNlIHdhcyBwcmVzZXJ2ZWQgYWNyb3NzIExpdmUgVXBkYXRlIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwsCiYjNDM7ICogaS5lLiB0aGUgZGV2aWNlIGlzIGluY29taW5nLXByZXNlcnZlZC4gTm90ZSB0aGF0IGEgZGV2aWNlIGlzIG9ubHkgY29uc2lkZXJlZAomIzQzOyAqIGluY29taW5nLXByZXNlcnZlZCBwcmlvciB0byBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKS4gSXQgaXMgdXAgdG8gZHJpdmVycyB0bwomIzQzOyAqIHN5bmNocm9uaXplIHVzYWdlIG9mIHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKCkgd2l0aCB0aGVpciBvd24gY2FsbCB0bwomIzQzOyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIHRvIGF2b2lkIGFjdGluZyBvbiBzdGFsZSBkYXRhLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogVHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGluY29taW5nLXByZXNlcnZlZCwgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoc3RydWN0IHBjaV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CWd1YXJkKHJ3c2VtX3JlYWQpKCZhbXA7cGNpX2xpdmV1cGRhdGUucndzZW0pOwomIzQzOwlyZXR1cm4gZGV2LSZndDtsaXZldXBkYXRlLmluY29taW5nOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZyk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKCkgLSBSZWdpc3RlciBhIGZpbGUgaGFuZGxlciB3aXRoIHRoZSBQQ0kgY29yZQomIzQzOyAqIEBmaDogVGhlIGZpbGUgaGFuZGxlciB0byByZWdpc3Rlci4KJiM0MzsgKgomIzQzOyAqIERyaXZlcnMgc2hvdWxkIGNhbGwgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKCkgdG8gcmVnaXN0ZXIgdGhlaXIKJiM0MzsgKiBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgd2l0aCB0aGUgUENJIGNvcmUuIFRoaXMgZW5hYmxlcyB0aGUgUENJIGNvcmUKJiM0MzsgKiB0byBhbGxvY2F0ZSBpdHMgb3V0Z29pbmcgc3RydWN0IHBjaV9zZXIgd2hlbmV2ZXIgdGhlIGZpcnN0IGRldmljZSBpcwomIzQzOyAqIHByZXNlcnZlZCwgYW5kIGZyZWUgaXQgd2hlbiB0aGUgbGFzdCBkZXZpY2UgaXMgdW5wcmVzZXJ2ZWQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpCiYjNDM7ewomIzQzOwlwcl9kZWJ1ZygmIzM0O1JlZ2lzdGVyaW5nIGZpbGUgaGFuZGxlciBcJiMzNDslc1wmIzM0O1xuJiMzNDssIGZoLSZndDtjb21wYXRpYmxlKTsKJiM0MzsJcmV0dXJuIGxpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKGZoLCAmYW1wO3BjaV9saXZldXBkYXRlX2ZsYik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoKSAtIFVucmVnaXN0ZXIgYSBmaWxlIGhhbmRsZXIgd2l0aCB0aGUgUENJIGNvcmUKJiM0MzsgKiBAZmg6IFRoZSBmaWxlIGhhbmRsZXIgdG8gdW5yZWdpc3Rlci4KJiM0MzsgKi8KJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpCiYjNDM7ewomIzQzOwlwcl9kZWJ1ZygmIzM0O1VucmVnaXN0ZXJpbmcgZmlsZSBoYW5kbGVyIFwmIzM0OyVzXCYjMzQ7XG4mIzM0OywgZmgtJmd0O2NvbXBhdGlibGUpOwomIzQzOwlsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKGZoLCAmYW1wO3BjaV9saXZldXBkYXRlX2ZsYik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaCBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYjI2NjQwNmFhYWM4MGQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9saXZldXBkYXRlLmgKQEAgLTAsMCAmIzQzOzEsNjggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qCiYjNDM7ICogUENJIExpdmUgVXBkYXRlIHN1cHBvcnQgKGNvcmUgQVBJKQomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2LCBHb29nbGUgTExDLgomIzQzOyAqIERhdmlkIE1hdGxhY2sgJmx0O2RtYXRsYWNrQGdvb2dsZS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7I2lmbmRlZiBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0gKJiM0MzsjZGVmaW5lIERSSVZFUlNfUENJX0xJVkVVUERBVEVfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFCiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2ZyZWV6ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKJiM0Mztib29sIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCiYjNDM7CQkJCSAgICAgIGludCBwYXNzKTsKJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcyk7CiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9pbml0X2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKJiM0MztpbnQgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKJiM0MztpbnQgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKJiM0Mztib29sIHBjaV9saXZldXBkYXRlX2lzX291dGdvaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cywKJiM0MzsJCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmRldiwKJiM0MzsJCQkJCQkgICAgaW50IHBhc3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBhc3MpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfaW5pdF9hY3Moc3RydWN0IHBjaV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVJTlZBTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaV9saXZldXBkYXRlX2lzX291dGdvaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZiAvKiBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCBmMzY3NzhlNjJhYzFhNS4uNDdjYjNkY2FhOTI3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXAtb3BzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW9tbXUuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xpdmV1cGRhdGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3BjaS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cGNpZS9wb3J0ZHJ2LmgmIzM0OwogCkBAIC01MzYsNiAmIzQzOzUzNyw3IEBAIHN0YXRpYyB2b2lkIHBjaV9kZXZpY2Vfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBwY2lfZHJpdmVyICpkcnYgPSBwY2lfZGV2LSZndDtkcml2ZXI7CiAKJiM0MzsJcGNpX2xpdmV1cGRhdGVfZnJlZXplKHBjaV9kZXYpOwogCXBtX3J1bnRpbWVfcmVzdW1lKGRldik7CiAKIAlpZiAoZHJ2ICZhbXA7JmFtcDsgZHJ2LSZndDtzaHV0ZG93bikKQEAgLTU0NCwxMSAmIzQzOzU0NiwxNCBAQCBzdGF0aWMgdm9pZCBwY2lfZGV2aWNlX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKIAkvKgogCSAqIElmIHRoaXMgaXMgYSBrZXhlYyByZWJvb3QsIHR1cm4gb2ZmIEJ1cyBNYXN0ZXIgYml0IG9uIHRoZQogCSAqIGRldmljZSB0byB0ZWxsIGl0IHRvIG5vdCBjb250aW51ZSB0byBkbyBETUEuIERvbiYjMzk7dCB0b3VjaAotCSAqIGRldmljZXMgaW4gRDNjb2xkIG9yIHVua25vd24gc3RhdGVzLgomIzQzOwkgKiBkZXZpY2VzIGJlaW5nIHByZXNlcnZlZCBmb3IgTGl2ZSBVcGRhdGUgb3IgaW4gRDNjb2xkIG9yCiYjNDM7CSAqIHVua25vd24gc3RhdGVzLgomIzQzOwkgKgogCSAqIElmIGl0IGlzIG5vdCBhIGtleGVjIHJlYm9vdCwgZmlybXdhcmUgd2lsbCBoaXQgdGhlIFBDSQogCSAqIGRldmljZXMgd2l0aCBiaWcgaGFtbWVyIGFuZCBzdG9wIHRoZWlyIERNQSBhbnkgd2F5LgogCSAqLwotCWlmIChrZXhlY19pbl9wcm9ncmVzcyAmYW1wOyZhbXA7IChwY2lfZGV2LSZndDtjdXJyZW50X3N0YXRlICZsdDs9IFBDSV9EM2hvdCkpCiYjNDM7CWlmIChrZXhlY19pbl9wcm9ncmVzcyAmYW1wOyZhbXA7ICFwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhwY2lfZGV2KSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwY2lfZGV2LSZndDtjdXJyZW50X3N0YXRlICZsdDs9IFBDSV9EM2hvdCkKIAkJcGNpX2NsZWFyX21hc3RlcihwY2lfZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCA3N2IxN2IxM2VlNjE1NC4uZTBjMTMzYjY2YTM1OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0zNCw2ICYjNDM7MzQsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Flci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3VzcGVuZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7bGl2ZXVwZGF0ZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cGNpLmgmIzM0OwogCiBERUZJTkVfTVVURVgocGNpX3Nsb3RfbXV0ZXgpOwpAQCAtMTAwOCw2ICYjNDM7MTAxMCw5IEBAIHZvaWQgcGNpX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldikKIAlib29sIGVuYWJsZV9hY3MgPSBmYWxzZTsKIAlpbnQgcG9zOwogCiYjNDM7CWlmICghcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qIElmIGFuIGlvbW11IGlzIHByZXNlbnQgd2Ugc3RhcnQgd2l0aCBrZXJuZWwgZGVmYXVsdCBjYXBzICovCiAJaWYgKHBjaV9hY3NfZW5hYmxlKSB7CiAJCWlmIChwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3MoZGV2KSkKQEAgLTM1MjMsNyAmIzQzOzM1MjgsNyBAQCB2b2lkIHBjaV9jb25maWd1cmVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJdTMyIGNhcDsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlOwogCi0JaWYgKHBjaWVfYXJpX2Rpc2FibGVkIHx8ICFwY2lfaXNfcGNpZShkZXYpIHx8IGRldi0mZ3Q7ZGV2Zm4pCiYjNDM7CWlmICghcGNpX2lzX3BjaWUoZGV2KSB8fCBkZXYtJmd0O2RldmZuKQogCQlyZXR1cm47CiAKIAlicmlkZ2UgPSBkZXYtJmd0O2J1cy0mZ3Q7c2VsZjsKQEAgLTM1MzQsNiAmIzQzOzM1MzksMTIgQEAgdm9pZCBwY2lfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogCWlmICghKGNhcCAmYW1wOyBQQ0lfRVhQX0RFVkNBUDJfQVJJKSkKIAkJcmV0dXJuOwogCiYjNDM7CWlmICghcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaShicmlkZ2UpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocGNpZV9hcmlfZGlzYWJsZWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJaWYgKHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfQVJJKSkgewogCQlwY2llX2NhcGFiaWxpdHlfc2V0X3dvcmQoYnJpZGdlLCBQQ0lfRVhQX0RFVkNUTDIsCiAJCQkJCSBQQ0lfRVhQX0RFVkNUTDJfQVJJKTsKQEAgLTM2ODksNiAmIzQzOzM3MDAsNyBAQCB2b2lkIHBjaV9hY3NfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgJiM0MzsgUENJX0FDU19DQVAsICZhbXA7ZGV2LSZndDthY3NfY2FwYWJpbGl0aWVzKTsKIAlwY2lfZGlzYWJsZV9icm9rZW5fYWNzX2NhcChkZXYpOwomIzQzOwlwY2lfbGl2ZXVwZGF0ZV9pbml0X2FjcyhkZXYpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggNDQ2OWUxYTc3ZjNjMTMuLjk4OGExOGIzMjA0YWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMTA0Nyw2ICYjNDM7MTA0Nyw3IEBAIHZvaWQgcGNpX2Fjc19pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBwY2lfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKICNpZmRlZiBDT05GSUdfUENJX1FVSVJLUwogaW50IHBjaV9kZXZfc3BlY2lmaWNfYWNzX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IGFjc19mbGFncyk7CiYjNDM7Ym9vbCBwY2lfbmVlZF9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX2Rldl9zcGVjaWZpY19kaXNhYmxlX2Fjc19yZWRpcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpX2Rpc2FibGVfYnJva2VuX2Fjc19jYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwpAQCAtMTA1Nyw2ICYjNDM7MTA1OCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2lfZGV2X3NwZWNpZmljX2Fjc19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiB7CiAJcmV0dXJuIC1FTk9UVFk7CiB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQogc3RhdGljIGlubGluZSBpbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJcmV0dXJuIC1FTk9UVFk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYwppbmRleCBkZDBhYmJjNjNlMThkMS4uMTY1OTczYmM5MmFhYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcHJvYmUuYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wbV9ydW50aW1lLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtsaXZldXBkYXRlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwY2kuaCYjMzQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYnVzbl9yZXNvdXJjZSA9IHsKQEAgLTEzOTYsNiAmIzQzOzEzOTcsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkgIGludCBtYXgsIHVuc2lnbmVkIGludCBhdmFpbGFibGVfYnVzZXMsCiAJCQkJICBpbnQgcGFzcykKIHsKJiM0MzsJYm9vbCBsaXZldXBkYXRlLCBhc3NpZ25fbmV3X2J1c2VzID0gcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpOwogCXN0cnVjdCBwY2lfYnVzICpjaGlsZDsKIAl1MzIgYnVzZXM7CiAJdTE2IGJjdGw7CkBAIC0xNDA1LDYgJiM0MzsxNDA3LDEwIEBAIHN0YXRpYyBpbnQgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCXU4IGZpeGVkX3NlYywgZml4ZWRfc3ViOwogCWludCBuZXh0X2J1c25yOwogCiYjNDM7CWxpdmV1cGRhdGUgPSBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbihidXMsIGRldiwgcGFzcyk7CiYjNDM7CWlmIChsaXZldXBkYXRlKQomIzQzOwkJYXNzaWduX25ld19idXNlcyA9IGZhbHNlOwomIzQzOwogCS8qCiAJICogTWFrZSBzdXJlIHRoZSBicmlkZ2UgaXMgcG93ZXJlZCBvbiB0byBiZSBhYmxlIHRvIGFjY2VzcyBjb25maWcKIAkgKiBzcGFjZSBvZiBkZXZpY2VzIGJlbG93IGl0LgpAQCAtMTQ0OCw4ICYjNDM7MTQ1NCw3IEBAIHN0YXRpYyBpbnQgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoKHNlY29uZGFyeSB8fCBzdWJvcmRpbmF0ZSkgJmFtcDsmYW1wOwotCSAgICAhcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpICZhbXA7JmFtcDsgIWJyb2tlbikgewomIzQzOwlpZiAoKHNlY29uZGFyeSB8fCBzdWJvcmRpbmF0ZSkgJmFtcDsmYW1wOyAhYXNzaWduX25ld19idXNlcyAmYW1wOyZhbXA7ICFicm9rZW4pIHsKIAkJdW5zaWduZWQgaW50IGNtYXgsIGJ1c2VzOwogCiAJCS8qCkBAIC0xNDkxLDggJiM0MzsxNDk2LDcgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCSAqIGRvIGluIHRoZSBzZWNvbmQgcGFzcy4KIAkJICovCiAJCWlmICghcGFzcykgewotCQkJaWYgKHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSB8fCBicm9rZW4pCi0KJiM0MzsJCQlpZiAoYXNzaWduX25ld19idXNlcyB8fCBicm9rZW4pCiAJCQkJLyoKIAkJCQkgKiBUZW1wb3JhcmlseSBkaXNhYmxlIGZvcndhcmRpbmcgb2YgdGhlCiAJCQkJICogY29uZmlndXJhdGlvbiBjeWNsZXMgb24gYWxsIGJyaWRnZXMgaW4KQEAgLTE1MDYsNiAmIzQzOzE1MTAsMTEgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQlnb3RvIG91dDsKIAkJfQogCiYjNDM7CQlpZiAobGl2ZXVwZGF0ZSkgewomIzQzOwkJCXBjaV9lcnIoZGV2LCAmIzM0O0Nhbm5vdCByZWNvbmZpZ3VyZSBicmlkZ2UgZHVyaW5nIExpdmUgVXBkYXRlLCBza2lwcGluZ1xuJiMzNDspOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwogCQkvKiBDbGVhciBlcnJvcnMgKi8KIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX1NUQVRVUywgMHhmZmZmKTsKIApAQCAtMTU2Niw2ICYjNDM7MTU3NSw3IEBAIHN0YXRpYyBpbnQgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgYmN0bCk7CiAKIAlwbV9ydW50aW1lX3B1dCgmYW1wO2Rldi0mZ3Q7ZGV2KTsKJiM0MzsJcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kKGRldiwgcGFzcyk7CiAKIAlyZXR1cm4gbWF4OwogfQpAQCAtMjA2NCw2ICYjNDM7MjA3NCw4IEBAIGludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJaWYgKHBjaV9lYXJseV9kdW1wKQogCQllYXJseV9kdW1wX3BjaV9kZXZpY2UoZGV2KTsKIAomIzQzOwlwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2UoZGV2KTsKJiM0MzsKIAkvKiBOZWVkIHRvIGhhdmUgZGV2LSZndDtjbGFzcyByZWFkeSAqLwogCWRldi0mZ3Q7Y2ZnX3NpemUgPSBwY2lfY2ZnX3NwYWNlX3NpemUoZGV2KTsKIApAQCAtMjE4Nyw2ICYjNDM7MjE5OSw3IEBAIGludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJZGVmYXVsdDoJCQkJICAgIC8qIHVua25vd24gaGVhZGVyICovCiAJCXBjaV9lcnIoZGV2LCAmIzM0O3Vua25vd24gaGVhZGVyIHR5cGUgJTAyeCwgaWdub3JpbmcgZGV2aWNlXG4mIzM0OywKIAkJCWRldi0mZ3Q7aGRyX3R5cGUpOwomIzQzOwkJcGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2UoZGV2KTsKIAkJcGNpX3JlbGVhc2Vfb2Zfbm9kZShkZXYpOwogCQlyZXR1cm4gLUVJTzsKIApAQCAtMjQ4NSw2ICYjNDM7MjQ5OCw3IEBAIHN0YXRpYyB2b2lkIHBjaV9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCiAKIAlwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXBjaV9yZWxlYXNlX2NhcGFiaWxpdGllcyhwY2lfZGV2KTsKJiM0MzsJcGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2UocGNpX2Rldik7CiAJcGNpX3JlbGVhc2Vfb2Zfbm9kZShwY2lfZGV2KTsKIAlwY2liaW9zX3JlbGVhc2VfZGV2aWNlKHBjaV9kZXYpOwogCXBjaV9idXNfcHV0KHBjaV9kZXYtJmd0O2J1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGIwOWYyN2Y3ODQ2ZmNkLi45OWI4MTlmMzhlNDljMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTUzNzQsOSAmIzQzOzUzNzQsNiBAQCBzdGF0aWMgdm9pZCBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3JwX21wY19hY3Moc3RydWN0IHBjaV9kZXYgKmRldikKICAqLwogc3RhdGljIGludCBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3BjaF9hY3Moc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlpZiAoIXBjaV9xdWlya19pbnRlbF9wY2hfYWNzX21hdGNoKGRldikpCi0JCXJldHVybiAtRU5PVFRZOwotCiAJaWYgKHBjaV9xdWlya19lbmFibGVfaW50ZWxfbHBjX2FjcyhkZXYpKSB7CiAJCXBjaV93YXJuKGRldiwgJiMzNDtGYWlsZWQgdG8gZW5hYmxlIEludGVsIFBDSCBBQ1MgcXVpcmtcbiYjMzQ7KTsKIAkJcmV0dXJuIDA7CkBAIC01Mzk2LDkgJiM0Mzs1MzkzLDYgQEAgc3RhdGljIGludCBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3NwdF9wY2hfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJaW50IHBvczsKIAl1MzIgY2FwLCBjdHJsOwogCi0JaWYgKCFwY2lfcXVpcmtfaW50ZWxfc3B0X3BjaF9hY3NfbWF0Y2goZGV2KSkKLQkJcmV0dXJuIC1FTk9UVFk7Ci0KIAlwb3MgPSBkZXYtJmd0O2Fjc19jYXA7CiAJaWYgKCFwb3MpCiAJCXJldHVybiAtRU5PVFRZOwpAQCAtNTQyNiw5ICYjNDM7NTQyMCw2IEBAIHN0YXRpYyBpbnQgcGNpX3F1aXJrX2Rpc2FibGVfaW50ZWxfc3B0X3BjaF9hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKmRldikKIAlpbnQgcG9zOwogCXUzMiBjYXAsIGN0cmw7CiAKLQlpZiAoIXBjaV9xdWlya19pbnRlbF9zcHRfcGNoX2Fjc19tYXRjaChkZXYpKQotCQlyZXR1cm4gLUVOT1RUWTsKLQogCXBvcyA9IGRldi0mZ3Q7YWNzX2NhcDsKIAlpZiAoIXBvcykKIAkJcmV0dXJuIC1FTk9UVFk7CkBAIC01NDQ4LDU2ICYjNDM7NTQzOSw2MyBAQCBzdGF0aWMgaW50IHBjaV9xdWlya19kaXNhYmxlX2ludGVsX3NwdF9wY2hfYWNzX3JlZGlyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyB7CiAJdTE2IHZlbmRvcjsKIAl1MTYgZGV2aWNlOwomIzQzOwlib29sICgqbWF0Y2gpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCWludCAoKmVuYWJsZV9hY3MpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCWludCAoKmRpc2FibGVfYWNzX3JlZGlyKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIH0gcGNpX2Rldl9hY3Nfb3BzW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfQU5ZX0lELAomIzQzOwkgICAgLm1hdGNoID0gcGNpX3F1aXJrX2ludGVsX3BjaF9hY3NfbWF0Y2gsCiAJICAgIC5lbmFibGVfYWNzID0gcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9wY2hfYWNzLAogCX0sCiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfQU5ZX0lELAomIzQzOwkgICAgLm1hdGNoID0gcGNpX3F1aXJrX2ludGVsX3NwdF9wY2hfYWNzX21hdGNoLAogCSAgICAuZW5hYmxlX2FjcyA9IHBjaV9xdWlya19lbmFibGVfaW50ZWxfc3B0X3BjaF9hY3MsCiAJICAgIC5kaXNhYmxlX2Fjc19yZWRpciA9IHBjaV9xdWlya19kaXNhYmxlX2ludGVsX3NwdF9wY2hfYWNzX3JlZGlyLAogCX0sCiB9OwogCi1pbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnBjaV9kZXZfYWNzX29wc19nZXQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAljb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwOwotCWludCBpLCByZXQ7CiYjNDM7CWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocGNpX2Rldl9hY3Nfb3BzKTsgaSYjNDM7JiM0MzspIHsKIAkJcCA9ICZhbXA7cGNpX2Rldl9hY3Nfb3BzW2ldOwogCQlpZiAoKHAtJmd0O3ZlbmRvciA9PSBkZXYtJmd0O3ZlbmRvciB8fAogCQkgICAgIHAtJmd0O3ZlbmRvciA9PSAodTE2KVBDSV9BTllfSUQpICZhbXA7JmFtcDsKIAkJICAgIChwLSZndDtkZXZpY2UgPT0gZGV2LSZndDtkZXZpY2UgfHwKLQkJICAgICBwLSZndDtkZXZpY2UgPT0gKHUxNilQQ0lfQU5ZX0lEKSAmYW1wOyZhbXA7Ci0JCSAgICBwLSZndDtlbmFibGVfYWNzKSB7Ci0JCQlyZXQgPSBwLSZndDtlbmFibGVfYWNzKGRldik7Ci0JCQlpZiAocmV0ICZndDs9IDApCi0JCQkJcmV0dXJuIHJldDsKJiM0MzsJCSAgICAgcC0mZ3Q7ZGV2aWNlID09ICh1MTYpUENJX0FOWV9JRCkpIHsKJiM0MzsJCQlpZiAoIXAtJmd0O21hdGNoIHx8IHAtJmd0O21hdGNoKGRldikpCiYjNDM7CQkJCXJldHVybiBwOwogCQl9CiAJfQogCiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0Mztib29sIHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcCAmYW1wOyZhbXA7IHAtJmd0O2VuYWJsZV9hY3M7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnAgPSBwY2lfZGV2X2Fjc19vcHNfZ2V0KGRldik7CiYjNDM7CiYjNDM7CWlmIChwICZhbXA7JmFtcDsgcC0mZ3Q7ZW5hYmxlX2FjcykKJiM0MzsJCXJldHVybiBwLSZndDtlbmFibGVfYWNzKGRldik7CiYjNDM7CiAJcmV0dXJuIC1FTk9UVFk7CiB9CiAKIGludCBwY2lfZGV2X3NwZWNpZmljX2Rpc2FibGVfYWNzX3JlZGlyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcDsKLQlpbnQgaSwgcmV0OwomIzQzOwljb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocGNpX2Rldl9hY3Nfb3BzKTsgaSYjNDM7JiM0MzspIHsKLQkJcCA9ICZhbXA7cGNpX2Rldl9hY3Nfb3BzW2ldOwotCQlpZiAoKHAtJmd0O3ZlbmRvciA9PSBkZXYtJmd0O3ZlbmRvciB8fAotCQkgICAgIHAtJmd0O3ZlbmRvciA9PSAodTE2KVBDSV9BTllfSUQpICZhbXA7JmFtcDsKLQkJICAgIChwLSZndDtkZXZpY2UgPT0gZGV2LSZndDtkZXZpY2UgfHwKLQkJICAgICBwLSZndDtkZXZpY2UgPT0gKHUxNilQQ0lfQU5ZX0lEKSAmYW1wOyZhbXA7Ci0JCSAgICBwLSZndDtkaXNhYmxlX2Fjc19yZWRpcikgewotCQkJcmV0ID0gcC0mZ3Q7ZGlzYWJsZV9hY3NfcmVkaXIoZGV2KTsKLQkJCWlmIChyZXQgJmd0Oz0gMCkKLQkJCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQomIzQzOwlpZiAocCAmYW1wOyZhbXA7IHAtJmd0O2Rpc2FibGVfYWNzX3JlZGlyKQomIzQzOwkJcmV0dXJuIHAtJmd0O2Rpc2FibGVfYWNzX3JlZGlyKGRldik7CiAKIAlyZXR1cm4gLUVOT1RUWTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYWNmMWIzOGRmZjAyNGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmgKQEAgLTAsMCAmIzQzOzEsNTkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2LCBHb29nbGUgTExDLgomIzQzOyAqIERhdmlkIE1hdGxhY2sgJmx0O2RtYXRsYWNrQGdvb2dsZS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfTElOVVhfS0hPX0FCSV9QQ0lfSAomIzQzOyNkZWZpbmUgX0xJTlVYX0tIT19BQklfUENJX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogRE9DOiBQQ0kgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgTGl2ZSBVcGRhdGUgQUJJCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGhlYWRlciBkZWZpbmVzIHRoZSBBQkkgZm9yIHByZXNlcnZpbmcgY29yZSBQQ0kgc3RhdGUgYWNyb3NzIGtleGVjIHVzaW5nCiYjNDM7ICogTGl2ZSBVcGRhdGUgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgZGF0YS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgaW50ZXJmYWNlIGlzIGEgY29udHJhY3QuIEFueSBtb2RpZmljYXRpb24gdG8gYW55IG9mIHRoZSBzZXJpYWxpemF0aW9uCiYjNDM7ICogc3RydWN0cyBkZWZpbmVkIGhlcmUgY29uc3RpdHV0ZXMgYSBicmVha2luZyBjaGFuZ2UuIFN1Y2ggY2hhbmdlcyByZXF1aXJlCiYjNDM7ICogaW5jcmVtZW50aW5nIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgUENJX0xVT19GTEJfQ09NUEFUSUJMRSBzdHJpbmcuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2RlZmluZSBQQ0lfTFVPX0ZMQl9DT01QQVRJQkxFICYjMzQ7cGNpLXYyJiMzNDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGNpX2Rldl9zZXIgLSBTZXJpYWxpemVkIHN0YXRlIGFib3V0IGEgc2luZ2xlIFBDSSBkZXZpY2UuCiYjNDM7ICoKJiM0MzsgKiBAZG9tYWluOiBUaGUgZGV2aWNlJiMzOTtzIFBDSSBkb21haW4gbnVtYmVyIChzZWdtZW50KS4KJiM0MzsgKiBAYmRmOiBUaGUgZGV2aWNlJiMzOTtzIFBDSSBidXMsIGRldmljZSwgYW5kIGZ1bmN0aW9uIG51bWJlci4KJiM0MzsgKiBAcmVmY291bnQ6IFJlZmVyZW5jZSBjb3VudCB1c2VkIGJ5IHRoZSBQQ0kgY29yZSB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgaXQKJiM0MzsgKiAgICAgICAgICAgIGlzIGRvbmUgdXNpbmcgYSBkZXZpY2UmIzM5O3Mgc3RydWN0IHBjaV9kZXZfc2VyLiBUaGUgdmFsdWUgb2YgdGhlCiYjNDM7ICogICAgICAgICAgICByZWZjb3VudCBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIHByZXNlcnZlZCBkZXZpY2VzIGF0IG9yIGJlbG93CiYjNDM7ICogICAgICAgICAgICBpdCBpbiB0aGUgUENJIGhpZXJhcmNoeSB3aGVuIHRoZSBzdHJ1Y3QgcGNpX2Rldl9zZXIgaXMgaW4gdXNlLCBhbmQKJiM0MzsgKiAgICAgICAgICAgIDAgb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwY2lfZGV2X3NlciB7CiYjNDM7CXUzMiBkb21haW47CiYjNDM7CXUxNiBiZGY7CiYjNDM7CXUxNiByZWZjb3VudDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwY2lfc2VyIC0gUENJIFN1YnN5c3RlbSBMaXZlIFVwZGF0ZSBTdGF0ZQomIzQzOyAqCiYjNDM7ICogVGhpcyBzdHJ1Y3QgdHJhY2tzIHN0YXRlIGFib3V0IGFsbCBkZXZpY2VzIHRoYXQgYXJlIGJlaW5nIHByZXNlcnZlZCBhY3Jvc3MKJiM0MzsgKiBhIExpdmUgVXBkYXRlIGZvciB0aGUgbmV4dCBrZXJuZWwuCiYjNDM7ICoKJiM0MzsgKiBAbnJfZGV2aWNlczogVGhlIG51bWJlciBvZiBkZXZpY2VzIHRoYXQgd2VyZSBwcmVzZXJ2ZWQuCiYjNDM7ICogQGRldmljZXM6IFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IEtITyBibG9jayBjb250YWluaW5nIHBjaV9kZXZfc2VyLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwY2lfc2VyIHsKJiM0MzsJdTMyIG5yX2RldmljZXM7CiYjNDM7CXU2NCBkZXZpY2VzOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9MSU5VWF9LSE9fQUJJX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCBlYmI1YjlkNzYzNjA5ZS4uYjQxZGQ1NzJhMmQ2YjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtNDMsNiAmIzQzOzQzLDcgQEAKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L3BjaS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2lfbGl2ZXVwZGF0ZS5oJmd0OwogCiAjZGVmaW5lIFBDSV9TVEFUVVNfRVJST1JfQklUUyAoUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkgIHwgXAogCQkJICAgICAgIFBDSV9TVEFUVVNfU0lHX1NZU1RFTV9FUlJPUiB8IFwKQEAgLTU5Miw2ICYjNDM7NTkzLDkgQEAgc3RydWN0IHBjaV9kZXYgewogCXU4CQl0cGhfbW9kZTsJLyogVFBIIG1vZGUgKi8KIAl1OAkJdHBoX3JlcV90eXBlOwkvKiBUUEggcmVxdWVzdGVyIHR5cGUgKi8KICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfUENJX0xJVkVVUERBVEUKJiM0MzsJc3RydWN0IHBjaV9saXZldXBkYXRlIGxpdmV1cGRhdGU7CiYjNDM7I2VuZGlmCiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpwY2lfcGh5c2ZuKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9saXZldXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9saXZldXBkYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1MDk5MzQwNTc1NGJhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY2lfbGl2ZXVwZGF0ZS5oCkBAIC0wLDAgJiM0MzsxLDc3IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0IChQdWJsaWMvRHJpdmVyIEFQSSkKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiwgR29vZ2xlIExMQy4KJiM0MzsgKiBEYXZpZCBNYXRsYWNrICZsdDtkbWF0bGFja0Bnb29nbGUuY29tJmd0OwomIzQzOyAqLwomIzQzOyNpZm5kZWYgTElOVVhfUENJX0xJVkVVUERBVEVfSAomIzQzOyNkZWZpbmUgTElOVVhfUENJX0xJVkVVUERBVEVfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9raG8vYWJpL3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXZldXBkYXRlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrX3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBjaV9saXZldXBkYXRlIC0gUENJIExpdmUgVXBkYXRlIHN0YXRlIGZvciBhIHN0cnVjdCBwY2lfZGV2CiYjNDM7ICogQG91dGdvaW5nOiBTdGF0ZSBwcmVzZXJ2ZWQgZm9yIHRoZSBuZXh0IGtlcm5lbC4KJiM0MzsgKiBAaW5jb21pbmc6IFN0YXRlIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXMga2VybmVsLgomIzQzOyAqIEBhY3NfY3RybDogQUNTIGZlYXR1cmVzIGVzdGFibGlzaGVkIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwuCiYjNDM7ICogQGluaGVyaXRfYnVzZXM6IFRydWUgaWYgdGhlIFBDSSBjb3JlIHNob3VsZCBpbmhlcml0IHRoZSBzZWNvbmRhcnkgYW5kCiYjNDM7ICogICAgICAgICAgICAgICAgIHN1Ym9yZGluYXRlIGJ1cyBudW1iZXJzIGFzc2lnbmVkIHRvIHRoaXMgZGV2aWNlIGR1ZSB0bwomIzQzOyAqICAgICAgICAgICAgICAgICBhbiBvbmdvaW5nIExpdmUgVXBkYXRlLgomIzQzOyAqIEB3YXNfcHJlc2VydmVkOiBUcnVlIGlmIHRoaXMgc3RydWN0IHBjaV9kZXYgd2FzIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXMKJiM0MzsgKiAgICAgICAgICAgICAgICAga2VybmVsLiBVbmxpa2UgQGluY29taW5nLCB0aGlzIGZpZWxkIGlzIG5vdCBjbGVhcmVkIGFmdGVyCiYjNDM7ICogICAgICAgICAgICAgICAgIHRoZSBkZXZpY2UgaXMgZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiBMaXZlIFVwZGF0ZS4KJiM0MzsgKiBAZnJvemVuOiBUcnVlIGlmIHRoZSBvdXRnb2luZyBwcmVzZXJ2YXRpb24gc3RhdHVzIG9mIHRoaXMgZGV2aWNlIGlzIGZyb3plbgomIzQzOyAqICAgICAgICAgIGFuZCB0aHVzIGNhbm5vdCBiZSBjaGFuZ2VkLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZSB7CiYjNDM7CXN0cnVjdCBwY2lfZGV2X3NlciAqb3V0Z29pbmc7CiYjNDM7CXN0cnVjdCBwY2lfZGV2X3NlciAqaW5jb21pbmc7CiYjNDM7CXUxNiBhY3NfY3RybDsKJiM0MzsJYm9vbCBpbmhlcml0X2J1c2VzOwomIzQzOwlib29sIHdhc19wcmVzZXJ2ZWQ7CiYjNDM7CWJvb2wgZnJvemVuOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHBjaV9kZXY7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19QQ0lfTElWRVVQREFURQomIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCk7CiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTsKJiM0MztpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoc3RydWN0IHBjaV9kZXYgKmRldik7CiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwomIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfZmluaXNoKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwomIzQzO2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoc3RydWN0IHBjaV9kZXYgKmRldik7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZiAvKiBMSU5VWF9QQ0lfTElWRVVQREFURV9IICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTUyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBDSSBMaXZlIFVwZGF0ZSBJbXBsZW1lbnRhdGlvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGl0JiMzOTtzIGludHJvZHVjaW5nIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0IOKAkyBpbnRlcmVzdGluZy4gU2VlbXMgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBQQ0kgc3Vic3lzdGVtLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIG5ldyBgZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jYCBmaWxlLCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZWAsIGBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlYCwgYHBjaV9saXZldXBkYXRlX2ZpbmlzaGAsIGFuZCBzbyBvbi4gUHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciBwcmVzZXJ2aW5nIGFuZCByZXN0b3JpbmcgZGV2aWNlIHN0YXRlIGR1cmluZyBhIGhvdCB1cGRhdGUuIExvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHBjaS1kcml2ZXIuY2AsIGBwY2kuY2AsIGBwcm9iZS5jYCwgYW5kIGBxdWlya3MuY2AgYXJlIHdoZXJlIHRoZSBpbnRlZ3JhdGlvbiBwb2ludHMgYXJlLiBgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZGAgaXMgZ2V0dGluZyBjYWxscyB0byBiZWdpbiBhbmQgZW5kIHRoZSBzY2FuLCBgcGNpX3NldHVwX2RldmljZWAgaXMgaW50ZWdyYXRpbmcgdGhlIHNldHVwLCBhbmQgYHBjaV9kZXZpY2Vfc2h1dGRvd25gIGlzIGZyZWV6aW5nIHRoZSBkZXZpY2Ugc3RhdGUuCgpOb3csIGEga2V5IHF1ZXN0aW9uIGZvciBtZSBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gUENJIGRldmljZXMgKmFyZSogcHJlc2VudCBpbiB0aGluZ3MgbGlrZSBRRU1VIGFuZCBHQ0UsIHNvIHRoYXQmIzM5O3MgYSBwb3NpdGl2ZSBzdGFydC4gQnV0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgaXMgd2hhdCBJIG5lZWQgdG8gZGlnIGludG8uIFRoZSBgQ09ORklHX1BDSV9MSVZFVVBEQVRFYCBpcyBjb250aW5nZW50IG9uIGBQQ0kgJmFtcDsmYW1wOyBMSVZFVVBEQVRFICZhbXA7JmFtcDsgNjRCSVQgJmFtcDsmYW1wOyAhQ0FSREJVU2AuIFNvLCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgUENJX0xJVkVVUERBVEVgLCB3aGljaCBwcm9iYWJseSBtZWFucyBJJiMzOTtsbCBhbHNvIG5lZWQgdG8gZW5hYmxlIGBMSVZFVVBEQVRFYCBmaXJzdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgY29uZmlnIG5hbWUgZm9yIGBMSVZFVVBEQVRFYCB0byBiZSBzdXJlLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb25maWcgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTElWRVVQREFURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnPTM4PWNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNTEtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjUyOmNvbmZpZyBMSVZFVVBEQVRFXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtMaXZlIFVwZGF0ZSBPcmNoZXN0cmF0b3JcJiMzNDtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTcyLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo3Mzpjb25maWcgTElWRVVQREFURV9NRU1GRFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7TGl2ZSB1cGRhdGUgc3VwcG9ydCBmb3IgbWVtZmRcJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0yOTAxPWNvbmZpZyBDT05URVhUX0FOQUxZU0lTX1RFU1Rcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0yOTE0LVxubGliL0tjb25maWcuZGVidWc6MjkxNTpjb25maWcgTElWRVVQREFURV9URVNUXG5saWIvS2NvbmZpZy5kZWJ1Zy0yOTE2LVx0Ym9vbCBcJiMzNDtMaXZlIFVwZGF0ZSBLZXJuZWwgVGVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDk2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUENJIExpdmUgVXBkYXRlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBMSVZFVVBEQVRFYCBjb25maWcsIGFuZCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgUENJX0xJVkVVUERBVEVgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzPyBJIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHBvdGVudGlhbCB0YXJnZXRzLiBUaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zOiBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVgLCBgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZWAsIGBwY2lfbGl2ZXVwZGF0ZV9maW5pc2hgLCBgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmdgLCBgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiYCwgYW5kIGBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYmAuIEJ1dCB3YWl0LCB0aG9zZSBhcmUgZXhwb3J0ZWQgZm9yICpkcml2ZXJzKiB0byB1c2UuIEhtbW0sIGFyZSBhbnkgZHJpdmVycyBhY3R1YWxseSB1c2luZyB0aGVtIGluICp0aGlzKiBwYXRjaD8gTm8sIGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdC4KCkFscmlnaHQsIHdoYXQgYWJvdXQgdGhlIGludGVybmFsIFBDSSBjb3JlIGZ1bmN0aW9ucz8gQWhhISBgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlYCwgYHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlYCwgYHBjaV9saXZldXBkYXRlX2ZyZWV6ZWAsIGBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbmAsIGBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmRgLCBgcGNpX2xpdmV1cGRhdGVfaW5pdF9hY3NgLCBgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2Fjc2AsIGFuZCBgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaWAgYXJlIGFsbCBjYWxsZWQgZnJvbSB0aGUgUENJIGNvcmUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiB0cmFjZSB0aGVpciBjYWxsIGNoYWlucy4KCmBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2VgIGlzIGNhbGxlZCBmcm9tIGBwY2lfc2V0dXBfZGV2aWNlYC4gR29vZC4gVGhlbiBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW5gIGlzIGNhbGxlZCBmcm9tIGBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kYC4gYHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlYCBpcyBjYWxsZWQgZnJvbSBgcGNpX3JlbGVhc2VfZGV2YC4gYHBjaV9saXZldXBkYXRlX2ZyZWV6ZWAgaXMgY2FsbGVkIGZyb20gYHBjaV9kZXZpY2Vfc2h1dGRvd25gLiBgcGNpX2xpdmV1cGRhdGVfaW5pdF9hY3NgIGlzIGNhbGxlZCBmcm9tIGBwY2lfYWNzX2luaXRgLiBBbmQgYHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3NgIGlzIGNhbGxlZCBmcm9tIGBwY2lfZW5hYmxlX2Fjc2AuIEZpbmFsbHksIGBwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpYCBpcyBjYWxsZWQgZnJvbSBgcGNpX2NvbmZpZ3VyZV9hcmlgLgoKU28sIGl0JiMzOTtzIHRob3NlIGNvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIHRoZSByZWFsIHRhcmdldHMuIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gYHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZWAsIGFuZCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBpdHMgaW1wbGVtZW50YXRpb24gaW4gYGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY2AuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jPTY2Mz12b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcylcbi0tXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmMtNjcyLVxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jOjY3Mzp2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jLTY3NC17XG4tLVxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jPTczNj1zdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX2ZpbmlzaF9kZXZpY2Uoc3RydWN0IHBjaV9zZXIgKnNlciwgc3RydWN0IHBjaV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmMtNzQ5LVx0ICogRGVjcmVtZW50IHRoZSByZWZjb3VudCBzbyB0aGlzIGRldmljZSBkb2VzIG5vdCBnZXQgdHJlYXRlZCBhcyBhblxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jOjc1MDpcdCAqIGluY29taW5nIGRldmljZSBhZ2FpbiwgZS5nLiBpbiBjYXNlIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZSgpXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmMtNzUxLVx0ICogZ2V0cyBjYWxsZWQgYWdhaW4gYmVjYXVzZSB0aGUgZGV2aWNlIGlzIGhvdC1wbHVnZ2VkLlxuLS1cbmRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaC0xMy0jaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmg6MTQ6dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7XG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmgtMTUtdm9pZCBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbi0tXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmg9MjM9Ym9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbmRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaC0yNC0jZWxzZVxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oOjI1OnN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcbmRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaC0yNi17XG4tLVxuZHJpdmVycy9wY2kvcHJvYmUuYz0yMDI2PWludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9wY2kvcHJvYmUuYy0yMDc2LVxuZHJpdmVycy9wY2kvcHJvYmUuYzoyMDc3Olx0cGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKGRldik7XG5kcml2ZXJzL3BjaS9wcm9iZS5jLTIwNzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTg6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUENJIExpdmUgVXBkYXRlIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBzb21lIGZyZXNoIGZ1bmN0aW9uYWxpdHkgZm9yIFBDSSBsaXZlIHVwZGF0ZSwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNvcmUgUENJIGVudW1lcmF0aW9uIGFuZCBzaHV0ZG93biBwYXRocywgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgc3R1ZmYgaGVyZS4gVGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgZ2V0IGEgZnV6emluZyBjYW1wYWlnbiBzZXQgdXAgZm9yIHRoaXMuCgpGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHBhdGNoIG1lbnRpb25zIGBQQ0lfTElWRVVQREFURWAgYW5kIGBMSVZFVVBEQVRFYCBhcyB0aGUga2V5IGVuYWJsZXJzLiBDaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzLCBgUENJX0xJVkVVUERBVEVgIHJlbGllcyBvbiBgUENJICZhbXA7JmFtcDsgTElWRVVQREFURSAmYW1wOyZhbXA7IDY0QklUICZhbXA7JmFtcDsgIUNBUkRCVVNgLCBzbyB3ZSBkZWZpbml0ZWx5IG5lZWQgdG8gZW5zdXJlIHRob3NlIGFyZSBzZXQuIFNvLCBgUENJX0xJVkVVUERBVEVgIGFuZCBgTElWRVVQREFURWAgYXJlIHRoZSBjb25maWdzIHRvIGVuYWJsZS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBCYXNlZCBvbiB0aGUgcGF0Y2gsIHRoZSBtb3N0IHByb21pc2luZyBlbnRyeSBwb2ludHMgc2VlbSB0byBiZTogYHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZWAsIGBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZWAsIGBwY2lfbGl2ZXVwZGF0ZV9mcmVlemVgLCBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW5gLCBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kYCwgYHBjaV9saXZldXBkYXRlX2luaXRfYWNzYCwgYHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3NgLCBgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaWAsIGBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZWAsIGBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlYCwgYHBjaV9saXZldXBkYXRlX2ZpbmlzaGAsIGBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGJgLCBhbmQgYHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiYC4gVGhlc2Ugc2hvdWxkIGJlIHRoZSBvbmVzIHdlIHByaW9yaXRpemUuCgpOZXh0LCBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgcmVhY2hhYmlsaXR5LiBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIGFjY2Vzc2libGUgdG8gZHJpdmVycywgYnV0IGlmIG5vIGRyaXZlcnMgKmNhbGwqIGl0LCB3ZSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQmIzM5O3MgcmVhY2hhYmxlIGF0IGFsbCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSBjYWxsIGFyYml0cmFyeSBleHBvcnRlZCBmdW5jdGlvbnMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3lzY2FsbCBpbnRlcmZhY2UuIEhvd2V2ZXIsIHRoZSBnb29kIG5ld3MgaXMgdGhhdCBzeW1ib2xzIGxpa2UgYHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZWAgYW5kIG90aGVycyBhcmUgY2FsbGVkIGZyb20gdGhlIFBDSSBjb3JlIGl0c2VsZi4gQW5kLCBzaW5jZSB0aGUgUENJIGNvcmUgaXMgaW52b2x2ZWQgZHVyaW5nIGJvdGggYm9vdCBhbmQgaG90cGx1ZyBldmVudHMsIHdlIGtub3cgdGhvc2UgY29yZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUsIHdoaWNoIGlzIGEgYmlnIHdpbi4KClNvLCB0byBzdW1tYXJpemUgZm9yIHRoZSBmdXp6aW5nIHNldHVwLCB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGVzZSBjb25maWdzOgoKKiAgIGBMSVZFVVBEQVRFYAoqICAgYFBDSV9MSVZFVVBEQVRFYAoKQW5kIHRoZSBrZXkgZm9jdXMgc3ltYm9scyBhcmU6CgoqICAgYHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZWAKKiAgIGBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZWAKKiAgIGBwY2lfbGl2ZXVwZGF0ZV9mcmVlemVgCiogICBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW5gCiogICBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kYAoqICAgYHBjaV9saXZldXBkYXRlX2luaXRfYWNzYAoqICAgYHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3NgCiogICBgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaWAKKiAgIGBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZWAKKiAgIGBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlYAoqICAgYHBjaV9saXZldXBkYXRlX2ZpbmlzaGAKKiAgIGBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGJgCiogICBgcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGJgCgpBbmQganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgdGhlcmUgYXJlICpubyogb3RoZXIgcmVsZXZhbnQgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUENJX0xJVkVVUERBVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvS2NvbmZpZz0yNjY9Y29uZmlnIFZHQV9BUkJfTUFYX0dQVVNcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTI3My1cbmRyaXZlcnMvcGNpL0tjb25maWc6Mjc0OmNvbmZpZyBQQ0lfTElWRVVQREFURVxuZHJpdmVycy9wY2kvS2NvbmZpZy0yNzUtXHRib29sIFwmIzM0O1BDSSBMaXZlIFVwZGF0ZSBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTg6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MDYKCQkJCQkJCW91dHB1dDogMjcxCgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgcHJvY2Vzcywgd2l0aCBhIGZvY3VzIG9uIFBDSSBMaXZlIFVwZGF0ZToKCioqUENJIExpdmUgVXBkYXRlIEZ1enppbmcgU3RyYXRlZ3kqKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoaXMgYFBDSV9MSVZFVVBEQVRFYCB0aGluZy4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbGl0eSBzcGVjaWZpY2FsbHkgYXJvdW5kIFBDSSBMaXZlIFVwZGF0ZSwgYW5kIHRoYXQgbWVhbnMgaXTigJlzIGFsdGVyaW5nIHRoZSBjb3JlIHJvdXRpbmVzIGludm9sdmVkIGluIFBDSSBlbnVtZXJhdGlvbiwgaG93IGRldmljZXMgc2h1dCBkb3duLCBhbmQgaG93IHdlIGNvbmZpZ3VyZSBQQ0kgY2FwYWJpbGl0aWVzLCBwYXJ0aWN1bGFybHkgdGhpbmdzIGxpa2UgQUNTIGFuZCBBUkkuIFRoZXNlIGFyZW4mIzM5O3QganVzdCB0aGVvcmV0aWNhbCBjaGFuZ2VzOyB0aGV5JiMzOTtyZSAqcmVhY2hhYmxlKi4gVGhleSYjMzk7cmUgZ29pbmcgdG8gYmUgaGl0IGR1cmluZyBkZXZpY2UgcHJvYmluZywgd2hlbiBhIGRldmljZSBpcyByZW1vdmVkLCBhbmQgZHVyaW5nIHN5c3RlbSBzaHV0ZG93biBvciBrZXhlYy4KClRoZSBjcml0aWNhbCBmb2N1cyBmb3IgZnV6emluZywgdGhlcmVmb3JlLCBoYXMgdG8gYmUgdGhlIG5ldyBgcGNpX2xpdmV1cGRhdGVfKmAgZnVuY3Rpb25zLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBuZXcgZnVuY3Rpb25zLCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBleGlzdGluZyBjb2RlLCBjYW4gaGFuZGxlIGEgd2lkZSB2YXJpZXR5IG9mIFBDSSB0b3BvbG9naWVzIGFuZCBkZXZpY2Ugc3RhdGVzIGZsYXdsZXNzbHkuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgY29tcHJlaGVuc2l2ZSBhcHByb2FjaC4gV2UgbmVlZCB0byBleHBsb3JlIGFsbCB0aGUgcG90ZW50aWFsIGVkZ2UgY2FzZXM6IHdoYXQgaGFwcGVucyB3aGVuIHRoaW5ncyBhcmVuJiMzOTt0IGFzIGV4cGVjdGVkLCB3aGF0IGhhcHBlbnMgd2l0aCBob3QtcGx1ZywgY29sZC1wbHVnLCBhbmQgZXZlcnl0aGluZyBpbiBiZXR3ZWVuPyBBbmQgaG93IGRvIHdlIGFjY291bnQgZm9yIHRoZSBwb3NzaWJpbGl0eSBvZiBhIGRldmljZSBnb2luZyBpbnRvIGEgd2VpcmQgc3RhdGUgYWZ0ZXIgYW4gdXBkYXRlPwoKT2theSwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIHN0cmF0ZWd5IGlzIHByb3Blcmx5IGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TElWRVVQREFURSYjMzQ7LAogICAgJiMzNDtQQ0lfTElWRVVQREFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3NldHVwX2RldmljZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9mcmVlemUmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4mIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2luaXRfYWNzJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2VuYWJsZV9hY3MmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2ZpbmlzaCYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGImIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCwgd2hpY2ggbW9kaWZpZXMgY29yZSBQQ0kgZW51bWVyYXRpb24sIHNodXRkb3duLCBhbmQgY2FwYWJpbGl0eSBjb25maWd1cmF0aW9uIHBhdGhzIChlLmcuLCBBQ1MsIEFSSSkuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgUENJIGRldmljZSBwcm9iZSwgcmVtb3ZhbCwgYW5kIHN5c3RlbSBzaHV0ZG93bi9rZXhlYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBwY2lfbGl2ZXVwZGF0ZV8qIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBQQ0kgdG9wb2xvZ2llcyBhbmQgc3RhdGVzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TElWRVVQREFURSYjMzQ7LAogICAgJiMzNDtQQ0lfTElWRVVQREFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3NldHVwX2RldmljZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9mcmVlemUmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4mIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2luaXRfYWNzJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2VuYWJsZV9hY3MmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2ZpbmlzaCYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGImIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCwgd2hpY2ggbW9kaWZpZXMgY29yZSBQQ0kgZW51bWVyYXRpb24sIHNodXRkb3duLCBhbmQgY2FwYWJpbGl0eSBjb25maWd1cmF0aW9uIHBhdGhzIChlLmcuLCBBQ1MsIEFSSSkuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgUENJIGRldmljZSBwcm9iZSwgcmVtb3ZhbCwgYW5kIHN5c3RlbSBzaHV0ZG93bi9rZXhlYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBwY2lfbGl2ZXVwZGF0ZV8qIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBQQ0kgdG9wb2xvZ2llcyBhbmQgc3RhdGVzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE4OjI2OjQwLjAyNjAxMTc1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDkzNTUwNDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxJVkVVUERBVEVcIixcbiAgICBcIlBDSV9MSVZFVVBEQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfZnJlZXplXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpblwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9pbml0X2Fjc1wiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfZW5hYmxlX2Fjc1wiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfcHJlc2VydmVcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3VucHJlc2VydmVcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2ZpbmlzaFwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgUENJIExpdmUgVXBkYXRlIHN1cHBvcnQsIHdoaWNoIG1vZGlmaWVzIGNvcmUgUENJIGVudW1lcmF0aW9uLCBzaHV0ZG93biwgYW5kIGNhcGFiaWxpdHkgY29uZmlndXJhdGlvbiBwYXRocyAoZS5nLiwgQUNTLCBBUkkpLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZHVyaW5nIFBDSSBkZXZpY2UgcHJvYmUsIHJlbW92YWwsIGFuZCBzeXN0ZW0gc2h1dGRvd24va2V4ZWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgcGNpX2xpdmV1cGRhdGVfKiBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZXkgaGFuZGxlIHZhcmlvdXMgUENJIHRvcG9sb2dpZXMgYW5kIHN0YXRlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE4OjI2OjQwLjAyNjAxNzk5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0NDA1OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDZiMzBhYjI3OWZiMGVmMDU3ODdkNTZlMzNlNTc0MzZhYjZjODhlNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAxODoyNjozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3RcXG5pbmRleCA1ZDcyMGQyYTQxNWUwMS4uMjNmYjczN2FjOTY5ZWEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9QQ0kvaW5kZXgucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvaW5kZXgucnN0XFxuQEAgLTIwLDMgKzIwLDQgQEAgUENJIEJ1cyBTdWJzeXN0ZW1cXG4gICAgY29udHJvbGxlci9pbmRleFxcbiAgICBib290LWludGVycnVwdHNcXG4gICAgdHBoXFxuKyAgIGxpdmV1cGRhdGVcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvbGl2ZXVwZGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmViYTU1ZjhhOTJhZTEyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vUENJL2xpdmV1cGRhdGUucnN0XFxuQEAgLTAsMCArMSwyOSBAQFxcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbitcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1BDSSBTdXBwb3J0IGZvciBMaXZlIFVwZGF0ZVxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcXG4rICAgOmRvYzogUENJIExpdmUgVXBkYXRlXFxuK1xcbitEcml2ZXIgQVBJXFxuKz09PT09PT09PT1cXG4rXFxuKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcXG4rICAgOmV4cG9ydDpcXG4rXFxuK0xpdmUgVXBkYXRlIEFCSVxcbis9PT09PT09PT09PT09PT1cXG4rXFxuKy4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmhcXG4rICAgOmRvYzogUENJIEZpbGUtTGlmZWN5Y2xlIEJvdW5kIChGTEIpIExpdmUgVXBkYXRlIEFCSVxcbitcXG4rLi4ga2VybmVsLWRvYzo6IGluY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxcbisgICA6aW50ZXJuYWw6XFxuK1xcbitTZWUgQWxzb1xcbis9PT09PT09PVxcbitcXG4rICogOmRvYzpgL2NvcmUtYXBpL2xpdmV1cGRhdGVgXFxuKyAqIDpkb2M6YC9jb3JlLWFwaS9raG8vaW5kZXhgXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG5pbmRleCA0ZjY1YjJhMzc1MjEwMi4uZWQ5ZWVmOGRlNjRjZDMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbkBAIC01MTA1LDcgKzUxMDUsMTEgQEAgS2VybmVsIHBhcmFtZXRlcnNcXG4gXFx0XFx0XFx0XFx0ZXhwbGljaXRseSB3aGljaCBvbmVzIHRoZXkgYXJlLlxcbiBcXHRcXHRhc3NpZ24tYnVzc2VzXFx0W1g4Nl0gQWx3YXlzIGFzc2lnbiBhbGwgUENJIGJ1c1xcbiBcXHRcXHRcXHRcXHRudW1iZXJzIG91cnNlbHZlcywgb3ZlcnJpZGluZ1xcbi1cXHRcXHRcXHRcXHR3aGF0ZXZlciB0aGUgZmlybXdhcmUgbWF5IGhhdmUgZG9uZS5cXG4rXFx0XFx0XFx0XFx0d2hhdGV2ZXIgdGhlIGZpcm13YXJlIG1heSBoYXZlIGRvbmUuIElnbm9yZWRcXG4rXFx0XFx0XFx0XFx0ZHVyaW5nIGEgTGl2ZSBVcGRhdGUsIHdoZXJlIHRoZSBrZXJuZWwgbXVzdFxcbitcXHRcXHRcXHRcXHRpbmhlcml0IHRoZSBQQ0kgdG9wb2xvZ3kgKGluY2x1ZGluZyBidXMgbnVtYmVycylcXG4rXFx0XFx0XFx0XFx0dG8gYXZvaWQgaW50ZXJydXB0aW5nIG9uZ29pbmcgbWVtb3J5XFxuK1xcdFxcdFxcdFxcdHRyYW5zYWN0aW9ucyBvZiBwcmVzZXJ2ZWQgZGV2aWNlcy5cXG4gXFx0XFx0dXNlcGlycW1hc2tcXHRbWDg2XSBIb25vciB0aGUgcG9zc2libGUgSVJRIG1hc2sgc3RvcmVkXFxuIFxcdFxcdFxcdFxcdGluIHRoZSBCSU9TICRQSVIgdGFibGUuIFRoaXMgaXMgbmVlZGVkIG9uXFxuIFxcdFxcdFxcdFxcdHNvbWUgc3lzdGVtcyB3aXRoIGJyb2tlbiBCSU9TZXMsIG5vdGFibHlcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXZldXBkYXRlLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbGl2ZXVwZGF0ZS5yc3RcXG5pbmRleCA1YTI5MmQwZjM3MDY0ZC4uMmJjZTI2NDRlYmEyMjMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXZldXBkYXRlLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbGl2ZXVwZGF0ZS5yc3RcXG5AQCAtMSw1ICsxLDcgQEBcXG4gLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gXFxuKy4uIF9sdW86XFxuK1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT1cXG4gTGl2ZSBVcGRhdGUgT3JjaGVzdHJhdG9yXFxuID09PT09PT09PT09PT09PT09PT09PT09PVxcbkBAIC0xOCw2ICsyMCw4IEBAIExVTyBQcmVzZXJ2aW5nIEZpbGUgRGVzY3JpcHRvcnNcXG4gLi4ga2VybmVsLWRvYzo6IGtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmNcXG4gICAgOmRvYzogTFVPIEZpbGUgRGVzY3JpcHRvcnNcXG4gXFxuKy4uIF9mbGI6XFxuK1xcbiBMVU8gRmlsZSBMaWZlY3ljbGUgQm91bmQgR2xvYmFsIERhdGFcXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIC4uIGtlcm5lbC1kb2M6OiBrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmNcXG5AQCAtNzAsMyArNzQsNCBAQCBTZWUgQWxzb1xcbiBcXG4gLSA6ZG9jOmBMaXZlIFVwZGF0ZSB1QVBJIFxcdTAwM2MvdXNlcnNwYWNlLWFwaS9saXZldXBkYXRlXFx1MDAzZWBcXG4gLSA6ZG9jOmAvY29yZS1hcGkva2hvL2luZGV4YFxcbistIDpkb2M6YFBDSSBcXHUwMDNjL1BDSS9saXZldXBkYXRlXFx1MDAzZWBcXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IGEzZWQzMzdlODI3ZDg2Li4zNDdjNDM1Y2E0MDQ3YyAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTIwODI0LDYgKzIwODI0LDIxIEBAIEw6XFx0bGludXgtcGNpQHZnZXIua2VybmVsLm9yZ1xcbiBTOlxcdFN1cHBvcnRlZFxcbiBGOlxcdERvY3VtZW50YXRpb24vUENJL3BjaS1lcnJvci1yZWNvdmVyeS5yc3RcXG4gXFxuK1BDSSBMSVZFIFVQREFURVxcbitNOlxcdERhdmlkIE1hdGxhY2sgXFx1MDAzY2RtYXRsYWNrQGdvb2dsZS5jb21cXHUwMDNlXFxuK1I6XFx0UGFzaGEgVGF0YXNoaW4gXFx1MDAzY3Bhc2hhLnRhdGFzaGluQHNvbGVlbi5jb21cXHUwMDNlXFxuK1I6XFx0TWlrZSBSYXBvcG9ydCBcXHUwMDNjcnBwdEBrZXJuZWwub3JnXFx1MDAzZVxcbitSOlxcdFByYXR5dXNoIFlhZGF2IFxcdTAwM2NwcmF0eXVzaEBrZXJuZWwub3JnXFx1MDAzZVxcbitMOlxcdGtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmdcXG4rTDpcXHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXFxuK1M6XFx0TWFpbnRhaW5lZFxcbitUOlxcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGl2ZXVwZGF0ZS9saW51eC5naXRcXG4rRjpcXHREb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdFxcbitGOlxcdGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY1xcbitGOlxcdGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaFxcbitGOlxcdGluY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxcbitGOlxcdGluY2x1ZGUvbGludXgvcGNpX2xpdmV1cGRhdGUuaFxcbitcXG4gUENJIE1TSSBEUklWRVIgRk9SIEFMVEVSQSBNU0kgSVBcXG4gTDpcXHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXFxuIFM6XFx0T3JwaGFuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnXFxuaW5kZXggMGM3NDA4NTA5YmEyNGIuLjE2ZmJkNDIxMmUwZjU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnXFxuQEAgLTI3MSw2ICsyNzEsMjEgQEAgY29uZmlnIFZHQV9BUkJfTUFYX0dQVVNcXG4gXFx0ICBSZXNlcnZlcyBzcGFjZSBpbiB0aGUga2VybmVsIHRvIG1haW50YWluIHJlc291cmNlIGxvY2tpbmcgZm9yXFxuIFxcdCAgbXVsdGlwbGUgR1BVUy4gIFRoZSBvdmVyaGVhZCBmb3IgZWFjaCBHUFUgaXMgdmVyeSBzbWFsbC5cXG4gXFxuK2NvbmZpZyBQQ0lfTElWRVVQREFURVxcbitcXHRib29sIFxcXCJQQ0kgTGl2ZSBVcGRhdGUgU3VwcG9ydFxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgTElWRVVQREFURSBcXHUwMDI2XFx1MDAyNiA2NEJJVCBcXHUwMDI2XFx1MDAyNiAhQ0FSREJVU1xcbitcXHRoZWxwXFxuK1xcdCAgRW5hYmxlIFBDSSBjb3JlIHN1cHBvcnQgZm9yIHByZXNlcnZpbmcgUENJIGRldmljZXMgYWNyb3NzIExpdmVcXG4rXFx0ICBVcGRhdGUuIFRoaXMsIGluIGNvbWJpbmF0aW9uIHdpdGggc3VwcG9ydCBpbiBhIGRldmljZSdzIGRyaXZlcixcXG4rXFx0ICBlbmFibGVzIFBDSSBkZXZpY2VzIHRvIHJ1biBhbmQgcGVyZm9ybSBtZW1vcnkgdHJhbnNhY3Rpb25zXFxuK1xcdCAgdW5pbnRlcnJ1cHRlZCBkdXJpbmcgYSBrZXhlYyBmb3IgTGl2ZSBVcGRhdGUuXFxuK1xcbitcXHQgIFRoaXMgb3B0aW9uIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgYnkgdXNlcnMgd2hvIHBsYW4gdG8gdXNlIExpdmVcXG4rXFx0ICBVcGRhdGUgZm9yIGtlcm5lbCB1cGdyYWRlcyBhbmQgcmVxdWlyZSBwcmVzZXJ2aW5nIFBDSSBkZXZpY2VzIGR1cmluZ1xcbitcXHQgIHRob3NlIHVwZ3JhZGVzLlxcbitcXG4rXFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbitcXG4gc291cmNlIFxcXCJkcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImRyaXZlcnMvcGNpL2VuZHBvaW50L0tjb25maWdcXFwiXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGVcXG5pbmRleCA0MWViYzNiOWE1MTgyNC4uZThkMDAzY2I2NzU3NjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZVxcbkBAIC0xNiw2ICsxNiw3IEBAIG9iai0kKENPTkZJR19QUk9DX0ZTKVxcdFxcdCs9IHByb2Mub1xcbiBvYmotJChDT05GSUdfU1lTRlMpXFx0XFx0Kz0gcGNpLXN5c2ZzLm8gc2xvdC5vXFxuIG9iai0kKENPTkZJR19BQ1BJKVxcdFxcdCs9IHBjaS1hY3BpLm9cXG4gb2JqLSQoQ09ORklHX0dFTkVSSUNfUENJX0lPTUFQKSArPSBpb21hcC5vXFxuK29iai0kKENPTkZJR19QQ0lfTElWRVVQREFURSlcXHQrPSBsaXZldXBkYXRlLm9cXG4gZW5kaWZcXG4gXFxuIG9iai0kKENPTkZJR19PRilcXHRcXHQrPSBvZi5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuYyBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU5MzVlODhkZTA3M2RjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY1xcbkBAIC0wLDAgKzEsOTEwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIEdvb2dsZSBMTEMuXFxuKyAqIERhdmlkIE1hdGxhY2sgXFx1MDAzY2RtYXRsYWNrQGdvb2dsZS5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rLyoqXFxuKyAqIERPQzogUENJIExpdmUgVXBkYXRlXFxuKyAqXFxuKyAqIFRoZSBQQ0kgc3Vic3lzdGVtIHBhcnRpY2lwYXRlcyBpbiB0aGUgTGl2ZSBVcGRhdGUgcHJvY2VzcyB0byBlbmFibGUgZHJpdmVyc1xcbisgKiB0byBwcmVzZXJ2ZSB0aGVpciBQQ0kgZGV2aWNlcyBhY3Jvc3Mga2V4ZWMuXFxuKyAqXFxuKyAqIDpyZWY6YEZMQiBcXHUwMDNjZmxiXFx1MDAzZWAgRGF0YVxcbisgKiA9PT09PT09PT09PT09PT09PT09PT1cXG4rICpcXG4rICogUENJIGRldmljZSBwcmVzZXJ2YXRpb24gYWNyb3NzIExpdmUgVXBkYXRlIGlzIGJ1aWx0IG9uIHRvcCBvZiB0aGVcXG4rICogOnJlZjpgTFVPIFxcdTAwM2NsdW9cXHUwMDNlYCBzdXBwb3J0IGZvciBmaWxlIHByZXNlcnZhdGlvbiBhY3Jvc3Mga2V4ZWMuIERyaXZlcnMgYXJlXFxuKyAqIGV4cGVjdGVkIHRvIGV4cG9zZSBhIGZpbGUgdG8gcmVwcmVzZW50IGEgc2luZ2xlIFBDSSBkZXZpY2UgYW5kIHN1cHBvcnRcXG4rICogcHJlc2VydmF0aW9uIG9mIHRoYXQgZmlsZSB3aXRoIGBgaW9jdGwoTElWRVVQREFURV9TRVNTSU9OX1BSRVNFUlZFX0ZEKWBgLlxcbisgKiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gY29udHJvbCB0aGUgcHJlc2VydmF0aW9uIG9mIGRldmljZXMgYW5kIGVuc3VyZVxcbisgKiBwcm9wZXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgd2hpbGUgYSBkZXZpY2UgaXMgcHJlc2VydmVkLiBUaGUgZmlyc3QgaW50ZW5kZWRcXG4rICogdXNlLWNhc2UgaXMgcHJlc2VydmluZyB2ZmlvLXBjaSBkZXZpY2UgZmlsZXMuXFxuKyAqXFxuKyAqIFRoZSBQQ0kgY29yZSBtYWludGFpbnMgaXRzIG93biBzdGF0ZSBhYm91dCB3aGF0IGRldmljZXMgYXJlIGJlaW5nIHByZXNlcnZlZFxcbisgKiBhY3Jvc3MgTGl2ZSBVcGRhdGUgdXNpbmcgRkxCIGRhdGEgaW4gTFVPLiBFc3NlbnRpYWxseSwgdGhpcyBhbGxvd3MgdGhlIFBDSVxcbisgKiBjb3JlIHRvIGFsbG9jYXRlIHN0cnVjdCBwY2lfc2VyIHdoZW4gdGhlIGZpcnN0IGRldmljZSAoZmlsZSkgaXMgcHJlc2VydmVkXFxuKyAqIGFuZCBmcmVlIGl0IHdoZW4gdGhlIGxhc3QgZGV2aWNlIChmaWxlKSBpcyB1bnByZXNlcnZlZC4gQWZ0ZXIga2V4ZWMsIHRoZVxcbisgKiBQQ0kgY29yZSBjYW4gZmV0Y2ggdGhlIHN0cnVjdCBwY2lfc2VyICh3aGljaCB3YXMgY29uc3RydWN0ZWQgYnkgdGhlIHByZXZpb3VzXFxuKyAqIGtlcm5lbCkgZnJvbSBMVU8gYXQgYW55IHRpbWUgKGUuZy4gZHVyaW5nIGVudW1lcmF0aW9uKSBzbyB0aGF0IGl0IGtub3dzXFxuKyAqIHdoaWNoIGRldmljZXMgd2VyZSBwcmVzZXJ2ZWQuXFxuKyAqXFxuKyAqIFRvIGVuYWJsZSB0aGUgUENJIGNvcmUgdG8gYmUgbm90aWZpZWQgd2hlbmV2ZXIgYSBmaWxlIHJlcHJlc2VudGluZyBhIGRldmljZVxcbisgKiBpcyBwcmVzZXJ2ZWQsIGRyaXZlcnMgbXVzdCByZWdpc3RlciB0aGVpciBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgd2l0aFxcbisgKiB0aGUgUENJIGNvcmUgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBBUElzOlxcbisgKlxcbisgKiAgKiBgYHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihkcml2ZXJfZmlsZV9oYW5kbGVyKWBgXFxuKyAqICAqIGBgcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoZHJpdmVyX2ZpbGVfaGFuZGxlcilgYFxcbisgKlxcbisgKiBEZXZpY2UgVHJhY2tpbmdcXG4rICogPT09PT09PT09PT09PT09XFxuKyAqXFxuKyAqIERyaXZlcnMgbXVzdCBub3RpZnkgdGhlIFBDSSBjb3JlIHdoZW4gc3BlY2lmaWMgZGV2aWNlcyBhcmUgcHJlc2VydmVkIG9yXFxuKyAqIHVucHJlc2VydmVkIHdpdGggdGhlIGZvbGxvd2luZyBBUElzOlxcbisgKlxcbisgKiAgKiBgYHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKHBjaV9kZXYpYGBcXG4rICogICogYGBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHBjaV9kZXYpYGBcXG4rICpcXG4rICogVGhpcyBhbGxvd3MgdGhlIFBDSSBjb3JlIHRvIGtlZXAgaXRzIEZMQiBkYXRhIChzdHJ1Y3QgcGNpX3NlcikgdXAgdG8gZGF0ZVxcbisgKiB3aXRoIHRoZSBsaXN0IG9mICoqb3V0Z29pbmcqKiBwcmVzZXJ2ZWQgZGV2aWNlcyBmb3IgdGhlIG5leHQga2VybmVsLlxcbisgKlxcbisgKiBBZnRlciBrZXhlYywgd2hlbmV2ZXIgYSBkZXZpY2UgaXMgZW51bWVyYXRlZCwgdGhlIFBDSSBjb3JlIHdpbGwgY2hlY2sgaWYgaXRcXG4rICogaXMgYW4gKippbmNvbWluZyoqIHByZXNlcnZlZCBkZXZpY2UgKGkuZS4gcHJlc2VydmVkIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwpXFxuKyAqIGJ5IGNoZWNraW5nIHRoZSBpbmNvbWluZyBGTEIgZGF0YSAoc3RydWN0IHBjaV9zZXIpLlxcbisgKlxcbisgKiBEcml2ZXJzIG11c3Qgbm90aWZ5IHRoZSBQQ0kgY29yZSB3aGVuIGFuICoqaW5jb21pbmcqKiBkZXZpY2UgaXMgZG9uZVxcbisgKiBwYXJ0aWNpcGF0aW5nIGluIHRoZSBpbmNvbWluZyBMaXZlIFVwZGF0ZSB3aXRoIHRoZSBmb2xsb3dpbmcgQVBJOlxcbisgKlxcbisgKiAgKiBgYHBjaV9saXZldXBkYXRlX2ZpbmlzaChwY2lfZGV2KWBgXFxuKyAqXFxuKyAqIFRoZSBQQ0kgY29yZSBkb2VzIG5vdCBlbmZvcmNlIGFueSBvcmRlcmluZyBvZiBgYHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpYGAgYW5kXFxuKyAqIGBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKWBgLiBpLmUuIEEgUENJIGRldmljZSBjYW4gYmUgKipvdXRnb2luZyoqXFxuKyAqIChwcmVzZXJ2ZWQgZm9yIG5leHQga2VybmVsKSBhbmQgKippbmNvbWluZyoqIChwcmVzZXJ2ZWQgYnkgcHJldmlvdXMga2VybmVsKVxcbisgKiBhdCB0aGUgc2FtZSB0aW1lLlxcbisgKlxcbisgKiBSZXN0cmljdGlvbnNcXG4rICogPT09PT09PT09PT09XFxuKyAqXFxuKyAqIFRoZSBQQ0kgY29yZSBlbmZvcmNlcyB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBvbiB3aGljaCBkZXZpY2VzIGNhbiBiZVxcbisgKiBwcmVzZXJ2ZWQuIFRoZXNlIG1heSBiZSByZWxheGVkIGluIHRoZSBmdXR1cmU6XFxuKyAqXFxuKyAqICAqIFRoZSBkZXZpY2UgY2Fubm90IGJlIGEgVmlydHVhbCBGdW5jdGlvbiAoVkYpLlxcbisgKlxcbisgKiAgKiBUaGUgZGV2aWNlIGNhbm5vdCByZXF1aXJlIGRldmljZS1zcGVjaWZpYyBxdWlya3MgdG8gZW5hYmxlIEFjY2Vzc1xcbisgKiAgICBDb250cm9sIFNlcnZpY2VzIChBQ1MpLlxcbisgKlxcbisgKiBEcml2ZXIgQmluZGluZ1xcbisgKiA9PT09PT09PT09PT09PVxcbisgKlxcbisgKiBJbiB0aGUgb3V0Z29pbmcga2VybmVsLCBpdCBpcyB0aGUgZHJpdmVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgaXRcXG4rICogZG9lcyBub3QgcmVsZWFzZSBhIGRldmljZSBiZXR3ZWVuIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgYW5kXFxuKyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKS5cXG4rICpcXG4rICogSW4gdGhlIGluY29taW5nIGtlcm5lbCwgaXQgaXMgdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGl0XFxuKyAqIGRvZXMgbm90IHJlbGVhc2UgYSBwcmVzZXJ2ZWQgZGV2aWNlIGJldHdlZW4gcHJvYmUoKSBhbmRcXG4rICogcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkuXFxuKyAqXFxuKyAqIEl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgaW5jb21pbmcgcHJlc2VydmVkIGRldmljZXMgYXJlXFxuKyAqIGJvdW5kIHRvIHRoZSBjb3JyZWN0IGRyaXZlci4gaS5lLiBUaGUgUENJIGNvcmUgZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IGFcXG4rICogZGV2aWNlIGdldHRpbmcgcHJlc2VydmVkIGJ5IGRyaXZlciBBIGluIHRoZSBvdXRnb2luZyBrZXJuZWwgYW5kIHRoZW4gZ2V0dGluZ1xcbisgKiBib3VuZCB0byBkcml2ZXIgQiBpbiB0aGUgaW5jb21pbmcga2VybmVsLiBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cXG4rICpcXG4rICogQkRGIFN0YWJpbGl0eVxcbisgKiA9PT09PT09PT09PT09XFxuKyAqXFxuKyAqIFRoZSBQQ0kgY29yZSBndWFyYW50ZWVzIHRoYXQgcHJlc2VydmVkIGRldmljZXMgY2FuIGJlIGlkZW50aWZpZWQgYnkgdGhlIHNhbWVcXG4rICogYnVzLCBkZXZpY2UsIGFuZCBmdW5jdGlvbiBudW1iZXJzIGZvciBhcyBsb25nIGFzIHRoZXkgYXJlIHByZXNlcnZlZFxcbisgKiAoaW5jbHVkaW5nIGFjcm9zcyBrZXhlYykuIFRvIGFjY29tcGxpc2ggdGhpcywgdGhlIFBDSSBjb3JlIGFsd2F5cyBpbmhlcml0c1xcbisgKiB0aGUgc2Vjb25kYXJ5IGFuZCBzdWJvcmRpbmF0ZSBidXMgbnVtYmVycyBhc3NpZ25lZCB0byBicmlkZ2VzIGR1cmluZyBzY2FubmluZ1xcbisgKiBpZiBhbnkgZGV2aWNlIGlzIHByZXNlcnZlZC4gVGhpcyBpcyB0cnVlIGV2ZW4gb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGFsd2F5c1xcbisgKiBhc3NpZ24gbmV3IGJ1cyBudW1iZXJzIGR1cmluZyBzY2FubmluZy4gVGhlIGtlcm5lbCBhc3N1bWVzIHRoZSBwcmV2aW91c1xcbisgKiBrZXJuZWwgZXN0YWJsaXNoZWQgYSBzYW5lIGJ1cyB0b3BvbG9neSBhY3Jvc3Mga2V4ZWMuXFxuKyAqXFxuKyAqIElmIGEgbWlzY29uZmlndXJlZCBvciB1bmNvbmZpZ3VyZWQgYnJpZGdlIGlzIGVuY291bnRlcmVkIGR1cmluZyBlbnVtZXJhdGlvblxcbisgKiB3aGlsZSB0aGVyZSBhcmUgcHJlc2VydmVkIGRldmljZXMsIGl0cyBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlIGJ1cyBudW1iZXJzXFxuKyAqIHdpbGwgYmUgY2xlYXJlZCBhbmQgZGV2aWNlcyBiZWxvdyBpdCB3aWxsIG5vdCBiZSBlbnVtZXJhdGVkLlxcbisgKlxcbisgKiBQQ0ktdG8tUENJIEJyaWRnZXNcXG4rICogPT09PT09PT09PT09PT09PT09XFxuKyAqXFxuKyAqIEFueSBQQ0ktdG8tUENJIGJyaWRnZXMgdXBzdHJlYW0gb2YgYSBwcmVzZXJ2ZWQgZGV2aWNlIGFyZSBhdXRvbWF0aWNhbGx5XFxuKyAqIHByZXNlcnZlZCB3aGVuIHRoZSBkZXZpY2UgaXMgcHJlc2VydmVkLiBUaGUgUENJIGNvcmUga2VlcHMgdHJhY2sgb2YgdGhlXFxuKyAqIG51bWJlciBvZiBkb3duc3RyZWFtIGRldmljZXMgdGhhdCBhcmUgcHJlc2VydmVkIHVuZGVyIGEgYnJpZGdlIHNvIHRoYXQgdGhlXFxuKyAqIGJyaWRnZSBpcyBvbmx5IHVucHJlc2VydmVkIG9uY2UgYWxsIGRvd25zdHJlYW0gZGV2aWNlcyBhcmUgdW5wcmVzZXJ2ZWQuXFxuKyAqXFxuKyAqIFRoaXMgZW5hYmxlcyB0aGUgUENJIGNvcmUgYW5kIGFueSBkcml2ZXJzIGJvdW5kIHRvIHRoZSBicmlkZ2UgdG8gcGFydGljaXBhdGVcXG4rICogaW4gdGhlIExpdmUgVXBkYXRlIHNvIHRoYXQgcHJlc2VydmVkIGVuZHBvaW50cyBjYW4gY29udGludWUgaXNzdWluZyBtZW1vcnlcXG4rICogdHJhbnNhY3Rpb25zIGR1cmluZyB0aGUgTGl2ZSBVcGRhdGUuXFxuKyAqXFxuKyAqIEhhbmRsaW5nIFByZXNlcnZlZCBEZXZpY2VzXFxuKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyAqXFxuKyAqIFRoZSBQQ0kgY29yZSB0cmVhdHMgcHJlc2VydmVkIGRldmljZXMgZGlmZmVyZW50bHkgdGhhbiBub24tcHJlc2VydmVkIGRldmljZXMuXFxuKyAqIFRoaXMgc2VjdGlvbiBlbnVtZXJhdGVzIHRob3NlIGRpZmZlcmVuY2VzLlxcbisgKlxcbisgKiAgKiBUaGUgUENJIGNvcmUgaW5oZXJpdHMgYWxsIEFDUyBmbGFncyBlbmFibGVkIG9uIGluY29taW5nIHByZXNlcnZlZCBkZXZpY2VzXFxuKyAqICAgIHJhdGhlciB0aGFuIGFzc2lnbmluZyBuZXcgb25lcy4gVGhpcyBlbnN1cmVzIHRoYXQgVExQcyBhcmUgcm91dGVkIHRoZSBzYW1lXFxuKyAqICAgIHdheSBhZnRlciBMaXZlIFVwZGF0ZSBhbmQgZW5zdXJlcyB0aGF0IElPTU1VIGdyb3VwcyBkbyBub3QgY2hhbmdlLiBOb3RlXFxuKyAqICAgIHRoYXQgYSBkZXZpY2Ugd2lsbCB1c2UgaXRzIGluaGVyaXRlZCBBQ1MgZmxhZ3MgZm9yIHRoZSBsaWZldGltZSBvZiBpdHNcXG4rICogICAgc3RydWN0IHBjaV9kZXYgKGkuZS4gZXZlbiBhZnRlciBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSkuXFxuKyAqXFxuKyAqICAqIFRoZSBQQ0kgY29yZSBpbmhlcml0cyBBUkkgRm9yd2FyZGluZyBFbmFibGUgb24gYWxsIGJyaWRnZXMgd2l0aCBkb3duc3RyZWFtXFxuKyAqICAgIHByZXNlcnZlZCBkZXZpY2VzIHRvIGVuc3VyZSB0aGF0IGFsbCBwcmVzZXJ2ZWQgZGV2aWNlcyBvbiB0aGUgYnJpZGdlJ3NcXG4rICogICAgc2Vjb25kYXJ5IGJ1cyBhcmUgYWRkcmVzc2FibGUgYWZ0ZXIgdGhlIExpdmUgVXBkYXRlLlxcbisgKlxcbisgKiAgKiBUaGUgUENJIGNvcmUgZG9lcyBub3QgZGlzYWJsZSBidXMgbWFzdGVyaW5nIG9uIG91dGdvaW5nIHByZXNlcnZlZCBkZXZpY2VzXFxuKyAqICAgIGR1cmluZyBrZXhlYy4gVGhpcyBhbGxvd3MgcHJlc2VydmVkIGRldmljZXMgdG8gaXNzdWUgbWVtb3J5IHRyYW5zYWN0aW9uc1xcbisgKiAgICB0aHJvdWdob3V0IHRoZSBMaXZlIFVwZGF0ZS5cXG4rICovXFxuK1xcbisjZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJQQ0k6IFxcXCIgS0JVSUxEX0JBU0VOQU1FIFxcXCI6IFxcXCIgZm10XFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9raG8vYWJpL3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGl2ZXVwZGF0ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tob19ibG9jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImxpdmV1cGRhdGUuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInBjaS5oXFxcIlxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwgLSBHbG9iYWwgc3RhdGUgZm9yIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0XFxuKyAqIEByd3NlbTogUmVhZGVyL3dyaXRlciBzZW1hcGhvcmUgdXNlZCB0byBwcm90ZWN0IHRoZSBpbmNvbWluZyBhbmQgb3V0Z29pbmdcXG4rICogICAgICAgICBGTEJzLCBhbmQgdGhlIHJlZmVyZW5jZXMgdG8gdGhlbSBpbiBzdHJ1Y3QgcGNpX2Rldi5cXG4rICovXFxuK3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwge1xcbitcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHJ3c2VtO1xcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwgcGNpX2xpdmV1cGRhdGUgPSB7XFxuK1xcdC5yd3NlbSA9IF9fUldTRU1fSU5JVElBTElaRVIocGNpX2xpdmV1cGRhdGUucndzZW0pLFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwY2lfZmxiX291dGdvaW5nIC0gT3V0Z29pbmcgUENJIEZMQiBvYmplY3RcXG4rICogQHNlcjogUG9pbnRlciB0byB0aGUgcHJlc2VydmVkIHN0cnVjdCBwY2lfc2VyLlxcbisgKiBAYmxvY2tfc2V0OiBUaGUgS0hPIGJsb2NrIHNldCBob2xkaW5nIHRoZSBvdXRnb2luZyBkZXZpY2VzLlxcbisgKlxcbisgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgcnVudGltZSBzdGF0ZSBmb3IgdGhlIG91dGdvaW5nIFBDSSBMaXZlIFVwZGF0ZVxcbisgKiBzdGF0ZS4gSXQgd3JhcHMgdGhlIHNlcmlhbGl6ZWQgcGNpX3NlciBhbmQgdGhlIGJsb2NrX3NldCB1c2VkIHRvIG1hbmFnZVxcbisgKiB0aGUgc2VyaWFsaXplZCBlbnRyaWVzLlxcbisgKi9cXG4rc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcge1xcbitcXHRzdHJ1Y3QgcGNpX3NlciAqc2VyO1xcbitcXHRzdHJ1Y3Qga2hvX2Jsb2NrX3NldCBibG9ja19zZXQ7XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBjaV9mbGJfaW5jb21pbmcgLSBJbmNvbWluZyBQQ0kgRkxCIG9iamVjdFxcbisgKiBAc2VyOiBUaGUgaW5jb21pbmcgc3RydWN0IHBjaV9zZXIgZnJvbSB0aGUgcHJldmlvdXMga2VybmVsLlxcbisgKiBAeGE6IFhhcnJheSB1c2VkIHRvIHF1aWNrbHkgbG9va3VwIGRldmljZXMgaW4gQHNlci5cXG4rICogQGJsb2NrX3NldDogVGhlIEtITyBibG9jayBzZXQgaG9sZGluZyB0aGUgaW5jb21pbmcgZGV2aWNlcy5cXG4rICpcXG4rICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIHJ1bnRpbWUgc3RhdGUgZm9yIHRoZSBpbmNvbWluZyBQQ0kgTGl2ZSBVcGRhdGVcXG4rICogc3RhdGUuIEl0IHdyYXBzIHRoZSBzZXJpYWxpemVkIHBjaV9zZXIsIHRoZSBibG9ja19zZXQgdXNlZCB0byByZXN0b3JlXFxuKyAqIHRoZSBzZXJpYWxpemVkIGVudHJpZXMsIGFuZCBhbiB4YXJyYXkgZm9yIGZhc3QgbG9va3Vwcy5cXG4rICovXFxuK3N0cnVjdCBwY2lfZmxiX2luY29taW5nIHtcXG4rXFx0c3RydWN0IHBjaV9zZXIgKnNlcjtcXG4rXFx0c3RydWN0IHhhcnJheSB4YTtcXG4rXFx0c3RydWN0IGtob19ibG9ja19zZXQgYmxvY2tfc2V0O1xcbit9O1xcbitcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcGNpX3Nlcl94YV9rZXkodTMyIGRvbWFpbiwgdTE2IGJkZilcXG4re1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZG9tYWluIFxcdTAwM2NcXHUwMDNjIDE2IHwgYmRmO1xcbit9XFxuK3N0YXRpYyBpbnQgcGNpX2ZsYl9wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BfYXJncyAqYXJncylcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmc7XFxuK1xcdHN0cnVjdCBwY2lfc2VyICpzZXI7XFxuK1xcbitcXHRvdXRnb2luZyA9IGt6YWxsb2Nfb2JqKCpvdXRnb2luZyk7XFxuK1xcdGlmICghb3V0Z29pbmcpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0c2VyID0ga2hvX2FsbG9jX3ByZXNlcnZlKHNpemVvZigqc2VyKSk7XFxuK1xcdGlmIChJU19FUlIoc2VyKSkge1xcbitcXHRcXHRrZnJlZShvdXRnb2luZyk7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHNlcik7XFxuK1xcdH1cXG4rXFxuK1xcdHNlci1cXHUwMDNlbnJfZGV2aWNlcyA9IDA7XFxuK1xcdHNlci1cXHUwMDNlZGV2aWNlcyA9IDA7XFxuK1xcbitcXHRvdXRnb2luZy1cXHUwMDNlc2VyID0gc2VyO1xcbitcXHRraG9fYmxvY2tfc2V0X2luaXQoXFx1MDAyNm91dGdvaW5nLVxcdTAwM2VibG9ja19zZXQsIHNpemVvZihzdHJ1Y3QgcGNpX2Rldl9zZXIpKTtcXG4rXFxuK1xcdGFyZ3MtXFx1MDAzZW9iaiA9IG91dGdvaW5nO1xcbitcXHRhcmdzLVxcdTAwM2VkYXRhID0gdmlydF90b19waHlzKHNlcik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwY2lfZmxiX3VucHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmxiX29wX2FyZ3MgKmFyZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gYXJncy1cXHUwMDNlb2JqO1xcbitcXG4rXFx0V0FSTl9PTihvdXRnb2luZy1cXHUwMDNlc2VyLVxcdTAwM2Vucl9kZXZpY2VzKTtcXG4rXFx0a2hvX2Jsb2NrX3NldF9kZXN0cm95KFxcdTAwMjZvdXRnb2luZy1cXHUwMDNlYmxvY2tfc2V0KTtcXG4rXFx0a2hvX3VucHJlc2VydmVfZnJlZShvdXRnb2luZy1cXHUwMDNlc2VyKTtcXG4rXFx0a2ZyZWUob3V0Z29pbmcpO1xcbitcXHRwcl9kZWJ1ZyhcXFwiVW5wcmVzZXJ2ZWQgc3RydWN0IHBjaV9zZXJcXFxcblxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBjaV9mbGJfcmV0cmlldmUoc3RydWN0IGxpdmV1cGRhdGVfZmxiX29wX2FyZ3MgKmFyZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9zZXIgKnNlciA9IHBoeXNfdG9fdmlydChhcmdzLVxcdTAwM2VkYXRhKTtcXG4rXFx0c3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKmluY29taW5nO1xcbitcXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXI7XFxuK1xcdHN0cnVjdCBraG9fYmxvY2tfc2V0X2l0IGl0O1xcbitcXHRpbnQgcmV0ID0gLUVOT01FTTtcXG4rXFxuK1xcdGluY29taW5nID0ga3phbGxvY19vYmooKmluY29taW5nKTtcXG4rXFx0aWYgKCFpbmNvbWluZylcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9mcmVlO1xcbitcXG4rXFx0aW5jb21pbmctXFx1MDAzZXNlciA9IHNlcjtcXG4rXFx0eGFfaW5pdChcXHUwMDI2aW5jb21pbmctXFx1MDAzZXhhKTtcXG4rXFxuK1xcdGtob19ibG9ja19zZXRfaW5pdChcXHUwMDI2aW5jb21pbmctXFx1MDAzZWJsb2NrX3NldCwgc2l6ZW9mKHN0cnVjdCBwY2lfZGV2X3NlcikpO1xcbitcXHRyZXQgPSBraG9fYmxvY2tfc2V0X3Jlc3RvcmUoXFx1MDAyNmluY29taW5nLVxcdTAwM2VibG9ja19zZXQsIHNlci1cXHUwMDNlZGV2aWNlcyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfaW5jb21pbmc7XFxuK1xcbitcXHRraG9fYmxvY2tfc2V0X2l0X2luaXQoXFx1MDAyNml0LCBcXHUwMDI2aW5jb21pbmctXFx1MDAzZWJsb2NrX3NldCk7XFxuK1xcdHdoaWxlICgoZGV2X3NlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeShcXHUwMDI2aXQpKSkge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGtleTtcXG4rXFxuK1xcdFxcdGlmICghZGV2X3Nlci1cXHUwMDNlcmVmY291bnQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0a2V5ID0gcGNpX3Nlcl94YV9rZXkoZGV2X3Nlci1cXHUwMDNlZG9tYWluLCBkZXZfc2VyLVxcdTAwM2ViZGYpO1xcbitcXHRcXHRyZXQgPSB4YV9pbnNlcnQoXFx1MDAyNmluY29taW5nLVxcdTAwM2V4YSwga2V5LCBkZXZfc2VyLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBlcnJfYmxvY2tfc2V0X2Rlc3Ryb3k7XFxuK1xcdH1cXG4rXFxuK1xcdGFyZ3MtXFx1MDAzZW9iaiA9IGluY29taW5nO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9ibG9ja19zZXRfZGVzdHJveTpcXG4rXFx0a2hvX2Jsb2NrX3NldF9kZXN0cm95KFxcdTAwMjZpbmNvbWluZy1cXHUwMDNlYmxvY2tfc2V0KTtcXG4rZXJyX2ZyZWVfaW5jb21pbmc6XFxuK1xcdHhhX2Rlc3Ryb3koXFx1MDAyNmluY29taW5nLVxcdTAwM2V4YSk7XFxuK1xcdGtmcmVlKGluY29taW5nKTtcXG4rZXJyX3Jlc3RvcmVfZnJlZTpcXG4rXFx0a2hvX3Jlc3RvcmVfZnJlZShzZXIpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwY2lfZmxiX2ZpbmlzaChzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BfYXJncyAqYXJncylcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAqaW5jb21pbmcgPSBhcmdzLVxcdTAwM2VvYmo7XFxuK1xcbitcXHR4YV9kZXN0cm95KFxcdTAwMjZpbmNvbWluZy1cXHUwMDNleGEpO1xcbitcXHRraG9fYmxvY2tfc2V0X2Rlc3Ryb3koXFx1MDAyNmluY29taW5nLVxcdTAwM2VibG9ja19zZXQpO1xcbitcXHRraG9fcmVzdG9yZV9mcmVlKGluY29taW5nLVxcdTAwM2VzZXIpO1xcbitcXHRrZnJlZShpbmNvbWluZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BzIHBjaV9saXZldXBkYXRlX2ZsYl9vcHMgPSB7XFxuK1xcdC5wcmVzZXJ2ZSA9IHBjaV9mbGJfcHJlc2VydmUsXFxuK1xcdC51bnByZXNlcnZlID0gcGNpX2ZsYl91bnByZXNlcnZlLFxcbitcXHQucmV0cmlldmUgPSBwY2lfZmxiX3JldHJpZXZlLFxcbitcXHQuZmluaXNoID0gcGNpX2ZsYl9maW5pc2gsXFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiBwY2lfbGl2ZXVwZGF0ZV9mbGIgPSB7XFxuK1xcdC5vcHMgPSBcXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiX29wcyxcXG4rXFx0LmNvbXBhdGlibGUgPSBQQ0lfTFVPX0ZMQl9DT01QQVRJQkxFLFxcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X291dGdvaW5nKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGxpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZyhcXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiLCAodm9pZCAqKilcXHUwMDI2b3V0Z29pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXG4rXFx0aWYgKCFvdXRnb2luZylcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuK1xcbitcXHRyZXR1cm4gb3V0Z29pbmc7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGNpX2Rldl9zZXIgKnBjaV9nZXRfZW1wdHlfb3JfYXBwZW5kKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZylcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXIsICpmb3VuZCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBraG9fYmxvY2tfc2V0X2l0IGl0O1xcbitcXHRpbnQgZXJyO1xcbitcXHR1MzIgY291bnQgPSAwO1xcbitcXG4rXFx0a2hvX2Jsb2NrX3NldF9pdF9pbml0KFxcdTAwMjZpdCwgXFx1MDAyNm91dGdvaW5nLVxcdTAwM2VibG9ja19zZXQpO1xcbitcXHR3aGlsZSAoKGRldl9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3JlYWRfZW50cnkoXFx1MDAyNml0KSkpIHtcXG4rXFx0XFx0Y291bnQrKztcXG4rXFx0XFx0aWYgKGRldl9zZXItXFx1MDAzZXJlZmNvdW50ID09IDAgXFx1MDAyNlxcdTAwMjYgIWZvdW5kKVxcbitcXHRcXHRcXHRmb3VuZCA9IGRldl9zZXI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChmb3VuZClcXG4rXFx0XFx0cmV0dXJuIGZvdW5kO1xcbitcXG4rXFx0ZXJyID0ga2hvX2Jsb2NrX3NldF9ncm93KFxcdTAwMjZvdXRnb2luZy1cXHUwMDNlYmxvY2tfc2V0LCBjb3VudCArIDEpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXG4rXFx0aWYgKGNvdW50ID09IDApXFxuK1xcdFxcdGtob19ibG9ja19zZXRfaXRfaW5pdChcXHUwMDI2aXQsIFxcdTAwMjZvdXRnb2luZy1cXHUwMDNlYmxvY2tfc2V0KTtcXG4rXFxuK1xcdGRldl9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3Jlc2VydmVfZW50cnkoXFx1MDAyNml0KTtcXG4rXFx0aWYgKCFkZXZfc2VyKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcXG4rXFxuK1xcdHJldHVybiBkZXZfc2VyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX3VucHJlc2VydmVfZGV2aWNlKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywgc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXIgPSBkZXYtXFx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmc7XFxuK1xcbitcXHRpZiAoZGV2LVxcdTAwM2VsaXZldXBkYXRlLmZyb3plbikge1xcbitcXHRcXHRwY2lfd2FybihkZXYsIFxcXCJDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2UgYWZ0ZXIgaXQgaXMgZnJvemVuIVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWRldl9zZXIpIHtcXG4rXFx0XFx0cGNpX3dhcm4oZGV2LCBcXFwiQ2Fubm90IHVucHJlc2VydmUgZGV2aWNlIHRoYXQgaXMgbm90IHByZXNlcnZlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWRldl9zZXItXFx1MDAzZXJlZmNvdW50KSB7XFxuK1xcdFxcdHBjaV9XQVJOKGRldiwgMSwgXFxcIlByZXNlcnZlZCBkZXZpY2UgaGFzIGEgMCByZWZjb3VudCFcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKC0tZGV2X3Nlci1cXHUwMDNlcmVmY291bnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cGNpX2luZm8oZGV2LCBcXFwiRGV2aWNlIHdpbGwgbm8gbG9uZ2VyIGJlIHByZXNlcnZlZCBhY3Jvc3MgbmV4dCBMaXZlIFVwZGF0ZVxcXFxuXFxcIik7XFxuK1xcdG91dGdvaW5nLVxcdTAwM2VzZXItXFx1MDAzZW5yX2RldmljZXMtLTtcXG4rXFx0bWVtc2V0KGRldl9zZXIsIDAsIHNpemVvZigqZGV2X3NlcikpO1xcbitcXHRkZXYtXFx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmcgPSBOVUxMO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2VfYWdhaW4oc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRpZiAoIWRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZy1cXHUwMDNlcmVmY291bnQpIHtcXG4rXFx0XFx0cGNpX1dBUk4oZGV2LCAxLCBcXFwiUHJlc2VydmVkIGRldmljZSB3aXRoIDAgcmVmY291bnQhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuZHBvaW50IGRldmljZXMgc2hvdWxkIG5vdCBiZSBwcmVzZXJ2ZWQgbW9yZSB0aGFuIG9uY2UuIEJyaWRnZXMgYXJlXFxuK1xcdCAqIHByZXNlcnZlZCBvbmNlIGZvciBldmVyeSBkb3duc3RyZWFtIGRldmljZSB0aGF0IGlzIHByZXNlcnZlZC5cXG4rXFx0ICovXFxuK1xcdGlmICghZGV2LVxcdTAwM2VzdWJvcmRpbmF0ZSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZy1cXHUwMDNlcmVmY291bnQrKztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19wY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2Uoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2X3NlciAqZGV2X3NlcjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERvIG5vdCBwcmVzZXJ2ZSBkZXZpY2VzIHRoYXQgcmVseSBvbiBkZXZpY2Utc3BlY2lmaWMgQUNTIGVxdWl2YWxlbnRzXFxuK1xcdCAqIChmb3Igbm93KSBzaW5jZSB0aGF0IHdvdWxkIGNvbXBsaWNhdGUga2VlcGluZyBBQ1MgY29uc3RhbnQgYWNyb3NzXFxuK1xcdCAqIExpdmUgVXBkYXRlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHtcXG4rXFx0XFx0cGNpX3dhcm4oZGV2LCBcXFwiUmVmdXNpbmcgdG8gcHJlc2VydmUgZGV2aWNlIHRoYXQgcmVsaWVzIG9uIEFDUyBxdWlya3NcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2X3NlciA9IHBjaV9nZXRfZW1wdHlfb3JfYXBwZW5kKG91dGdvaW5nKTtcXG4rXFx0aWYgKElTX0VSUihkZXZfc2VyKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoZGV2X3Nlcik7XFxuK1xcbitcXHRwY2lfaW5mbyhkZXYsIFxcXCJEZXZpY2Ugd2lsbCBiZSBwcmVzZXJ2ZWQgYWNyb3NzIG5leHQgTGl2ZSBVcGRhdGVcXFxcblxcXCIpO1xcbitcXHRvdXRnb2luZy1cXHUwMDNlc2VyLVxcdTAwM2Vucl9kZXZpY2VzKys7XFxuK1xcdG91dGdvaW5nLVxcdTAwM2VzZXItXFx1MDAzZWRldmljZXMgPSBraG9fYmxvY2tfc2V0X2hlYWRfcGEoXFx1MDAyNm91dGdvaW5nLVxcdTAwM2VibG9ja19zZXQpO1xcbitcXG4rXFx0ZGV2X3Nlci1cXHUwMDNlZG9tYWluID0gcGNpX2RvbWFpbl9ucihkZXYtXFx1MDAzZWJ1cyk7XFxuK1xcdGRldl9zZXItXFx1MDAzZWJkZiA9IHBjaV9kZXZfaWQoZGV2KTtcXG4rXFx0ZGV2X3Nlci1cXHUwMDNlcmVmY291bnQgPSAxO1xcbitcXG4rXFx0ZGV2LVxcdTAwM2VsaXZldXBkYXRlLm91dGdvaW5nID0gZGV2X3NlcjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfZGV2aWNlKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywgc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRpZiAoZGV2LVxcdTAwM2VsaXZldXBkYXRlLmZyb3plbikge1xcbitcXHRcXHRwY2lfd2FybihkZXYsIFxcXCJDYW5ub3QgcHJlc2VydmUgZGV2aWNlIGFmdGVyIGl0IGlzIGZyb3plbiFcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZylcXG4rXFx0XFx0cmV0dXJuIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZV9hZ2FpbihkZXYpO1xcbitcXG4rXFx0cmV0dXJuIF9fcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfZGV2aWNlKG91dGdvaW5nLCBkZXYpO1xcbit9XFxuK1xcbisjZGVmaW5lIGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChfZCwgX3N0YXJ0LCBfZW5kKSBcXFxcXFxuK1xcdGZvciAoKF9kKSA9IChfc3RhcnQpOyAoX2QpICE9IChfZW5kKTsgKF9kKSA9IChfZCktXFx1MDAzZWJ1cy1cXHUwMDNlc2VsZilcXG4rXFxuK3N0YXRpYyB2b2lkIF9fcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHBjaV9kZXYgKmVuZClcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqZGV2O1xcbitcXG4rXFx0Zm9yX2VhY2hfcGNpX2Rldl9pbl9wYXRoKGRldiwgc3RhcnQsIGVuZCkge1xcbitcXHRcXHRpZiAocGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9kZXZpY2Uob3V0Z29pbmcsIGRldikpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX3BhdGgoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXFxuK3tcXG4rXFx0X19wY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX3BhdGgob3V0Z29pbmcsIHN0YXJ0LCAvKmVuZD0qL05VTEwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX3BhdGgoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKmRldjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7XFxuK1xcdFxcdHJldCA9IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZShvdXRnb2luZywgZGV2KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRfX3BjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChvdXRnb2luZywgc3RhcnQsIGRldik7XFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSgpIC0gUHJlc2VydmUgYSBQQ0kgZGV2aWNlIGFjcm9zcyBMaXZlIFVwZGF0ZVxcbisgKiBAZGV2OiBUaGUgUENJIGRldmljZSB0byBwcmVzZXJ2ZS5cXG4rICpcXG4rICogcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSBub3RpZmllcyB0aGUgUENJIGNvcmUgdGhhdCBhIFBDSSBkZXZpY2Ugc2hvdWxkIGJlXFxuKyAqIHByZXNlcnZlZCBhY3Jvc3MgdGhlIG5leHQgTGl2ZSBVcGRhdGUuIERyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIGNhbGxcXG4rICogcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSBmcm9tIHRoZWlyIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlclxcbisgKiBwcmVzZXJ2ZSgpIGNhbGxiYWNrIHRvIGVuc3VyZSB0aGUgb3V0Z29pbmcgc3RydWN0IHBjaV9zZXIgaXMgYWxyZWFkeSBzZXQgdXAuXFxuKyAqXFxuKyAqIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgYXV0b21hdGljYWxseSBwcmVzZXJ2ZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2ZcXG4rICogQGRldi5cXG4rICpcXG4rICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDtcXG4rXFxuK1xcdGlmIChkZXYtXFx1MDAzZWlzX3ZpcnRmbilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcXG4rXFxuK1xcdG91dGdvaW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZygpO1xcbitcXHRpZiAoSVNfRVJSKG91dGdvaW5nKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIob3V0Z29pbmcpO1xcbitcXG4rXFx0cmV0dXJuIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX3BhdGgob3V0Z29pbmcsIGRldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfcHJlc2VydmUpO1xcbitcXG4rLyoqXFxuKyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSAtIENhbmNlbCBwcmVzZXJ2YXRpb24gb2YgYSBQQ0kgZGV2aWNlXFxuKyAqIEBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIHVucHJlc2VydmUuXFxuKyAqXFxuKyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSBub3RpZmllcyB0aGUgUENJIGNvcmUgdGhhdCBhIFBDSSBkZXZpY2Ugc2hvdWxkIG5vXFxuKyAqIGxvbmdlciBiZSBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBuZXh0IExpdmUgVXBkYXRlLiBEcml2ZXJzIGFyZSBleHBlY3RlZCB0byBjYWxsXFxuKyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSBmcm9tIHRoZWlyIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlclxcbisgKiB1bnByZXNlcnZlKCkgY2FsbGJhY2sgdG8gZW5zdXJlIHRoZSBvdXRnb2luZyBzdHJ1Y3QgcGNpX3NlciBpcyBhbHJlYWR5IHNldFxcbisgKiB1cC5cXG4rICpcXG4rICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpIGF1dG9tYXRpY2FsbHkgdW5wcmVzZXJ2ZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2ZcXG4rICogQGRldi5cXG4rICovXFxuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZyA9IE5VTEw7XFxuK1xcbitcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcXG4rXFxuK1xcdG91dGdvaW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZygpO1xcbitcXHRpZiAoSVNfRVJSKG91dGdvaW5nKSkge1xcbitcXHRcXHRwY2lfd2FybihkZXYsIFxcXCJDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2Ugd2l0aG91dCBvdXRnb2luZyBMaXZlIFVwZGF0ZSBzdGF0ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBkZXYpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBwY2lfZmxiX2luY29taW5nICpwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKmluY29taW5nID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGxpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZyhcXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiLCAodm9pZCAqKilcXHUwMDI2aW5jb21pbmcpO1xcbitcXG4rXFx0LyogTGl2ZSBVcGRhdGUgaXMgbm90IGVuYWJsZWQuICovXFxuK1xcdGlmIChyZXQgPT0gLUVPUE5PVFNVUFApXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0LyogTGl2ZSBVcGRhdGUgaXMgZW5hYmxlZCwgYnV0IHRoZXJlIGlzIG5vIGluY29taW5nIEZMQiBkYXRhLiAqL1xcbitcXHRpZiAocmV0ID09IC1FTk9EQVRBKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIExpdmUgVXBkYXRlIGlzIGVuYWJsZWQgYW5kIHRoZXJlIGlzIGluY29taW5nIEZMQiBkYXRhLCBidXQgbm9uZSBvZiBpdFxcbitcXHQgKiBtYXRjaGVzIHBjaV9saXZldXBkYXRlX2ZsYi5jb21wYXRpYmxlLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIGNvdWxkIG1lYW4gdGhhdCBubyBQQ0kgRkxCIGRhdGEgd2FzIHBhc3NlZCBieSB0aGUgcHJldmlvdXNcXG4rXFx0ICoga2VybmVsLCBidXQgaXQgY291bGQgYWxzbyBtZWFuIHRoZSBwcmV2aW91cyBrZXJuZWwgdXNlZCBhIGRpZmZlcmVudFxcbitcXHQgKiBjb21wYXRpYmlsaXR5IHN0cmluZyAoaS5lLiBhIGRpZmZlcmVudCBBQkkpLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJldCA9PSAtRU5PRU5UKSB7XFxuK1xcdFxcdHByX2luZm9fb25jZShcXFwiTm8gaW5jb21pbmcgRkxCIG1hdGNoZWQgJXNcXFxcblxcXCIsIHBjaV9saXZldXBkYXRlX2ZsYi5jb21wYXRpYmxlKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZXJlIGlzIGluY29taW5nIEZMQiBkYXRhIHRoYXQgbWF0Y2hlcyBwY2lfbGl2ZXVwZGF0ZV9mbGIuY29tcGF0aWJsZVxcbitcXHQgKiBidXQgaXQgY2Fubm90IGJlIHJldHJpZXZlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHBhbmljKFxcXCJGYWlsZWQgdG8gcmV0cmlldmUgaW5jb21pbmcgRkxCIGRhdGEgKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG4rXFxuK1xcdHJldHVybiBpbmNvbWluZztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGNpX2xpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZyh2b2lkKVxcbit7XFxuK1xcdGxpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZyhcXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luKCkgLSBEZXRlcm1pbmUgaWYgYSBicmlkZ2Ugc2hvdWxkIGluaGVyaXQgYnVzIG51bWJlcnNcXG4rICogQGJ1czogVGhlIHBhcmVudCBidXMgb2YgdGhlIGJyaWRnZS5cXG4rICogQGRldjogVGhlIFBDSSBicmlkZ2UgZGV2aWNlLlxcbisgKiBAcGFzczogVGhlIHNjYW4gcGFzcyAoMCBmb3IgZmlyc3QgcGFzcywgMSBmb3Igc2Vjb25kIHBhc3MpLlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUENJIGNvcmUgd2hlbiBpdCBiZWdpbnMgc2Nhbm5pbmcgYSBicmlkZ2UuXFxuKyAqIEl0IGRldGVybWluZXMgd2hldGhlciB0aGUgYnJpZGdlIHNob3VsZCBpbmhlcml0IHRoZSBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlXFxuKyAqIGJ1cyBudW1iZXJzIGFzc2lnbmVkIHRvIGl0IGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvXFxuKyAqIGtlZXAgYnVzIG51bWJlcnMgY29uc3RhbnQgZm9yIHByZXNlcnZlZCBkZXZpY2VzIGRvd25zdHJlYW0gb2YgdGhlIGJyaWRnZS5cXG4rICpcXG4rICogUmV0dXJuOiBUcnVlIGlmIGJ1cyBudW1iZXJzIHNob3VsZCBiZSBpbmhlcml0ZWQsIGZhbHNlIG90aGVyd2lzZS5cXG4rICovXFxuK2Jvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgaW50IHBhc3MpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IGJ1cy1cXHUwMDNlc2VsZjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9uIHRoZSBzZWNvbmQgcGFzcywgcmV1c2UgdGhlIHZhbHVlIHRoYXQgd2FzIHNldCBvbiB0aGUgZmlyc3QgcGFzc1xcbitcXHQgKiBzbyB0aGF0IHRoZSBwYXNzZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCBvbmUgYW5vdGhlci5cXG4rXFx0ICovXFxuK1xcdGlmIChwYXNzKVxcbitcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VsaXZldXBkYXRlLmluaGVyaXRfYnVzZXM7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgcGFyZW50IGJyaWRnZSBpcyBiZWluZyBmb3JjZWQgdG8gaW5oZXJpdCBpdHMgYnVzIG51bWJlcnNcXG4rXFx0ICogZHVyaW5nIHRoaXMgc2NhbiB0aGVuIHRoaXMgYnJpZGdlIG11c3QgYXMgd2VsbCwgb3RoZXJ3aXNlIHRoZSBQQ0lcXG4rXFx0ICogY29yZSBjb3VsZCBleHBhbmQgdGhpcyBicmlkZ2UncyByZXNlcnZhdGlvbiBiZXlvbmQgaXRzIHBhcmVudCAod2hpY2hcXG4rXFx0ICogY2Fubm90IGV4cGFuZCkuXFxuK1xcdCAqL1xcbitcXHRpZiAocGFyZW50IFxcdTAwMjZcXHUwMDI2IHBhcmVudC1cXHUwMDNlbGl2ZXVwZGF0ZS5pbmhlcml0X2J1c2VzKSB7XFxuK1xcdFxcdGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5pbmhlcml0X2J1c2VzID0gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGFueSBpbmNvbWluZyBwcmVzZXJ2ZWQgZGV2aWNlcywgZm9yY2UgdGhlXFxuK1xcdCAqIGJ1cyBudW1iZXJzIHRvIGJlIGluaGVyaXRlZCB0byBhdm9pZCBjaGFuZ2luZyB0aGUgYnVzIG51bWJlcnNcXG4rXFx0ICogYXNzaWduZWQgdG8gdGhvc2UgZGV2aWNlcyBkdXJpbmcgZW51bWVyYXRpb24uXFxuK1xcdCAqXFxuK1xcdCAqIFRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgaW5oZXJpdCBidXMgbnVtYmVycyBvbiBhbGwgYnJpZGdlcyBpZiBhbnkgUENJXFxuK1xcdCAqIGRldmljZXMgYXJlIGluY29taW5nLCB0byBlbnN1cmUgdGhhdCBubyBicmlkZ2UncyByZXNlcnZhdGlvbiBpc1xcbitcXHQgKiBleHBhbmRlZCB0byBvdmVybGFwIHdpdGggYSBwcmVzZXJ2ZWQgZGV2aWNlIGRvd25zdHJlYW0gb2YgYSBkaWZmZXJlbnRcXG4rXFx0ICogYnJpZGdlLlxcbitcXHQgKi9cXG4rXFx0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFxcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSkge1xcbitcXHRcXHRzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAqaW5jb21pbmc7XFxuK1xcbitcXHRcXHRpbmNvbWluZyA9IHBjaV9saXZldXBkYXRlX2ZsYl9nZXRfaW5jb21pbmcoKTtcXG4rXFx0XFx0aWYgKCFpbmNvbWluZykge1xcbitcXHRcXHRcXHRkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9IGZhbHNlO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEl0IGlzIHNhZmUgdG8gc2FtcGxlIGluY29taW5nLVxcdTAwM2VzZXItXFx1MDAzZW5yX2RldmljZXMgYW5kIHRoZW5cXG4rXFx0XFx0ICogZHJvcCB0aGUgcndzZW0gc2luY2UgbnJfZGV2aWNlcyB3aWxsIG9ubHkgZGVjcmVhc2UuIFRodXMgdGhlXFxuK1xcdFxcdCAqIG9ubHkgXFxcInJhY2VcXFwiIGlzIHRoYXQgdGhlIGN1cnJlbnQgc2NhbiB3aWxsIGJlIG92ZXJseVxcbitcXHRcXHQgKiBjb25zZXJ2YXRpdmUgYW5kIGZvcmNlIGJ1cyBpbmhlcml0YW5jZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5pbmhlcml0X2J1c2VzID0gISFpbmNvbWluZy1cXHUwMDNlc2VyLVxcdTAwM2Vucl9kZXZpY2VzO1xcbitcXHRcXHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZCgpIC0gRmluaXNoIHNjYW5uaW5nIGEgUENJIGJyaWRnZVxcbisgKiBAZGV2OiBUaGUgUENJIGJyaWRnZSBkZXZpY2UuXFxuKyAqIEBwYXNzOiBUaGUgc2NhbiBwYXNzICgwIGZvciBmaXJzdCBwYXNzLCAxIGZvciBzZWNvbmQgcGFzcykuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBQQ0kgY29yZSB3aGVuIGl0IGZpbmlzaGVzIHNjYW5uaW5nIGEgYnJpZGdlLlxcbisgKiBJdCBjbGVhcnMgdGhlIGluaGVyaXRhbmNlIHN0YXR1cyBhZnRlciB0aGUgc2Vjb25kIHBhc3Mgc28gaXQgY2FuIGJlXFxuKyAqIHJlLWV2YWx1YXRlZCBvbiBmdXR1cmUgc2NhbnMuXFxuKyAqL1xcbit2b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBDbGVhciBpbmhlcml0X2J1c2VzIGFmdGVyIHRoZSBzZWNvbmQgcGFzcyBzbyBpdCBjYW4gYmUgcmUtZXZhbHVhdGVkXFxuK1xcdCAqIG9uIGZ1dHVyZSBzY2Fucy5cXG4rXFx0ICovXFxuK1xcdGlmIChwYXNzKVxcbitcXHRcXHRkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9IGZhbHNlO1xcbit9XFxuK1xcbit2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcXG4rXFx0c3RydWN0IHBjaV9kZXZfc2VyICpkZXZfc2VyO1xcbitcXHR1bnNpZ25lZCBsb25nIGtleTtcXG4rXFxuK1xcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xcbitcXG4rXFx0aW5jb21pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKCk7XFxuK1xcdGlmICghaW5jb21pbmcpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGtleSA9IHBjaV9zZXJfeGFfa2V5KHBjaV9kb21haW5fbnIoZGV2LVxcdTAwM2VidXMpLCBwY2lfZGV2X2lkKGRldikpO1xcbitcXHRkZXZfc2VyID0geGFfbG9hZChcXHUwMDI2aW5jb21pbmctXFx1MDAzZXhhLCBrZXkpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBkZXZpY2Ugd2FzIG5vdCBwcmVzZXJ2ZWQgYWNyb3NzIExpdmUgVXBkYXRlLCBvciBpdCB3YXMgcHJlc2VydmVkXFxuK1xcdCAqIGJ1dCBoYXMgYWxyZWFkeSBiZWVuIHByb2JlZCBhbmQgZ29uZSB0aHJvdWdoIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpLFxcbitcXHQgKiBlLmcuIGR1ZSB0byByZW1vdmluZyBhbmQgcmUtYWRkaW5nIHRoZSBkZXZpY2UuIEVpdGhlciB3YXksIGl0J3Mgbm90XFxuK1xcdCAqIHRyZWF0ZWQgYXMgaW5jb21pbmctcHJlc2VydmVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFkZXZfc2VyIHx8ICFkZXZfc2VyLVxcdTAwM2VyZWZjb3VudCkge1xcbitcXHRcXHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFxuK1xcdHBjaV9pbmZvKGRldiwgXFxcIkRldmljZSB3YXMgcHJlc2VydmVkIGJ5IHByZXZpb3VzIGtlcm5lbCBhY3Jvc3MgTGl2ZSBVcGRhdGVcXFxcblxcXCIpO1xcbitcXHRkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcgPSBkZXZfc2VyO1xcbitcXHRkZXYtXFx1MDAzZWxpdmV1cGRhdGUud2FzX3ByZXNlcnZlZCA9IHRydWU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBIb2xkIHRoZSByZWYgb24gdGhlIGluY29taW5nIEZMQiB1bnRpbCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSBzb1xcbitcXHQgKiB0aGF0IGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZyBjYW5ub3QgZ2V0IGZyZWVkIHdoaWxlIHRoZSBQQ0kgY29yZVxcbitcXHQgKiBoYXMgYSBwb2ludGVyIHRvIGl0LiBJdCdzIGJldHRlciB0byBsZWFrIHRoZSBpbmNvbWluZyBGTEIgdGhhbiBkbyBhXFxuK1xcdCAqIHVzZS1hZnRlci1mcmVlIGlmIGRyaXZlciBkb2VzIG5vdCBjYWxsIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpLlxcbitcXHQgKi9cXG4rfVxcbitcXG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIEl0IHNob3VsZCBiZSBzYWZlIHRvIFJFQURfT05DRSgpIG91dHNpZGUgb2YgdGhlIHJ3c2VtIGR1cmluZyBjbGVhbnVwXFxuK1xcdCAqIHNpbmNlIHRoZXJlIHNob3VsZCBubyBsb25nZXIgYmUgYW55IHJlZmVyZW5jZXMgdG8gQGRldiBvbiB0aGUgc3lzdGVtLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gcHJhY3RpY2UuIERyaXZlcnMgc2hvdWxkIGJsb2NrIHJlbW92YWxcXG4rXFx0ICogd2hpbGUgYSBkZXZpY2UgaXMgcHJlc2VydmVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKFJFQURfT05DRShkZXYtXFx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmcpKVxcbitcXHRcXHRwY2lfV0FSTihkZXYsIDEsIFxcXCJEZXN0cm95aW5nIG91dGdvaW5nLXByZXNlcnZlZCBkZXZpY2UhXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChSRUFEX09OQ0UoZGV2LVxcdTAwM2VsaXZldXBkYXRlLmluY29taW5nKSkge1xcbitcXHRcXHRwY2lfV0FSTihkZXYsIDEsIFxcXCJEZXN0cm95aW5nIGluY29taW5nLXByZXNlcnZlZCBkZXZpY2UhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cGNpX2xpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZygpO1xcbitcXHR9XFxuK31cXG4rXFxuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rXFx0Z3VhcmQocndzZW1fd3JpdGUpKFxcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7XFxuK1xcdGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5mcm96ZW4gPSAxO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX2ZpbmlzaF9kZXZpY2Uoc3RydWN0IHBjaV9zZXIgKnNlciwgc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRpZiAoIWRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZykge1xcbitcXHRcXHRwY2lfd2FybihkZXYsIFxcXCJDYW5ub3QgZmluaXNoIHByZXNlcnZpbmcgYW4gdW5wcmVzZXJ2ZWQgZGV2aWNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VsaXZldXBkYXRlLmluY29taW5nLVxcdTAwM2VyZWZjb3VudCkge1xcbitcXHRcXHRwY2lfV0FSTihkZXYsIDEsIFxcXCJQcmVzZXJ2ZWQgZGV2aWNlIGhhcyBhIDAgcmVmY291bnQhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERlY3JlbWVudCB0aGUgcmVmY291bnQgc28gdGhpcyBkZXZpY2UgZG9lcyBub3QgZ2V0IHRyZWF0ZWQgYXMgYW5cXG4rXFx0ICogaW5jb21pbmcgZGV2aWNlIGFnYWluLCBlLmcuIGluIGNhc2UgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKClcXG4rXFx0ICogZ2V0cyBjYWxsZWQgYWdhaW4gYmVjYXVzZSB0aGUgZGV2aWNlIGlzIGhvdC1wbHVnZ2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKC0tZGV2LVxcdTAwM2VsaXZldXBkYXRlLmluY29taW5nLVxcdTAwM2VyZWZjb3VudClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwY2lfaW5mbyhkZXYsIFxcXCJEZXZpY2UgaXMgZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiBMaXZlIFVwZGF0ZVxcXFxuXFxcIik7XFxuK1xcdGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZyA9IE5VTEw7XFxuK1xcdHNlci1cXHUwMDNlbnJfZGV2aWNlcy0tO1xcbitcXHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2hfcGF0aChzdHJ1Y3QgcGNpX3NlciAqc2VyLCBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKmRldjtcXG4rXFxuK1xcdGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7XFxuK1xcdFxcdGlmIChwY2lfbGl2ZXVwZGF0ZV9maW5pc2hfZGV2aWNlKHNlciwgZGV2KSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSAtIEZpbmlzaCB0aGUgcHJlc2VydmF0aW9uIG9mIGEgUENJIGRldmljZVxcbisgKiBAZGV2OiBUaGUgUENJIGRldmljZVxcbisgKlxcbisgKiBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSBub3RpZmllcyB0aGUgUENJIGNvcmUgdGhhdCBhIFBDSSBkZXZpY2UgdGhhdCB3YXNcXG4rICogcHJlc2VydmVkIGFjcm9zcyB0aGUgcHJldmlvdXMgTGl2ZSBVcGRhdGUgaGFzIGZpbmlzaGVkIHBhcnRpY2lwYXRpbmcgaW4gTGl2ZVxcbisgKiBVcGRhdGUuIERyaXZlcnMgbXVzdCBjYWxsIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIGZyb20gdGhlaXIgc3RydWN0XFxuKyAqIGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIGZpbmlzaCgpIGNhbGxiYWNrIHRvIGVuc3VyZSB0aGUgaW5jb21pbmcgc3RydWN0XFxuKyAqIHBjaV9zZXIgaXMgYWxsb2NhdGVkLlxcbisgKlxcbisgKiBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSBhdXRvbWF0aWNhbGx5IGZpbmlzaGVzIGFsbCBicmlkZ2VzIHVwc3RyZWFtIG9mIEBkZXYuXFxuKyAqL1xcbit2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcXG4rXFxuK1xcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xcbitcXG4rXFx0aW5jb21pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKCk7XFxuK1xcdGlmICghaW5jb21pbmcpIHtcXG4rXFx0XFx0cGNpX3dhcm4oZGV2LCBcXFwiQ2Fubm90IGZpbmlzaCBwcmVzZXJ2aW5nIGRldmljZSB3aXRob3V0IGluY29taW5nIEZMQlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cGNpX2xpdmV1cGRhdGVfZmluaXNoX3BhdGgoaW5jb21pbmctXFx1MDAzZXNlciwgZGV2KTtcXG4rXFx0cGNpX2xpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZygpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX2ZpbmlzaCk7XFxuK1xcbit2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rXFx0Z3VhcmQocndzZW1fcmVhZCkoXFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VhY3NfY2FwIHx8ICFkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZGV2LVxcdTAwM2VhY3NfY2FwICsgUENJX0FDU19DVFJMLCBcXHUwMDI2ZGV2LVxcdTAwM2VsaXZldXBkYXRlLmFjc19jdHJsKTtcXG4rfVxcbitcXG4raW50IHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHR1MTYgYWNzX2N0cmwgPSBkZXYtXFx1MDAzZWxpdmV1cGRhdGUuYWNzX2N0cmw7XFxuK1xcdHUxNiBhY3NfY2FwID0gZGV2LVxcdTAwM2VhY3NfY2FwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIGxpdmV1cGRhdGUud2FzX3ByZXNlcnZlZCBpbnN0ZWFkIG9mIGxpdmV1cGRhdGUuaW5jb21pbmcgc2luY2UgdGhlXFxuK1xcdCAqIGRldmljZSdzIEFDUyBjb250cm9scyBzaG91bGQgbm90IGNoYW5nZSBldmVuIGFmdGVyIHRoZSBkZXZpY2UgaXNcXG4rXFx0ICogZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiB0aGUgTGl2ZSBVcGRhdGUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWRldi1cXHUwMDNlbGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBwcmV2aW91cyBrZXJuZWwgc2hvdWxkIG5vdCBoYXZlIHByZXNlcnZlZCBhbnkgZGV2aWNlcyB0aGF0XFxuK1xcdCAqIHJlcXVpcmUgZGV2aWNlLXNwZWNpZmljIHF1aXJrcyB0byBlbmFibGUgQUNTLCBidXQgaWYgc3VjaCBhIGRldmljZSBpc1xcbitcXHQgKiBkZXRlY3RlZCAoZS5nLiBuZXcgZGV2aWNlLXNwZWNpZmljIEFDUyBxdWlyayBpbiB0aGUgY3VycmVudCBrZXJuZWwpLFxcbitcXHQgKiBsb2cgYSBiaWcgd2FybmluZyBhbmQgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgZW5hYmxlIEFDUyBwYXRoLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHtcXG4rXFx0XFx0cGNpX3dhcm4oZGV2LCBcXFwiRGV2aWNlLXNwZWNpZmljIHF1aXJrIHJlcXVpcmVkIHRvIGVuYWJsZSBBQ1MhXFxcXG5cXFwiKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKHRydWUpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGFjc19jYXApXFxuK1xcdFxcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGFjc19jYXAgKyBQQ0lfQUNTX0NUUkwsIGFjc19jdHJsKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHUxNiB2YWw7XFxuK1xcbitcXHRndWFyZChyd3NlbV9yZWFkKShcXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xcbitcXG4rXFx0aWYgKCFkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChkZXYsIFBDSV9FWFBfREVWQ1RMMiwgXFx1MDAyNnZhbCk7XFxuK1xcdGRldi1cXHUwMDNlYXJpX2VuYWJsZWQgPSAhISh2YWwgXFx1MDAyNiBQQ0lfRVhQX0RFVkNUTDJfQVJJKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfb3V0Z29pbmcoc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRndWFyZChyd3NlbV9yZWFkKShcXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xcbitcXHRwY2lfV0FSTl9PTkNFKGRldiwgIWRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5mcm96ZW4sIFxcXCJQcmVzZXJ2YXRpb24gc3RhdHVzIGlzIHVuc3RhYmxlIVxcXFxuXFxcIik7XFxuK1xcdHJldHVybiBkZXYtXFx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmc7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZygpIC0gQ2hlY2sgaWYgYSBkZXZpY2UgaXMgaW5jb21pbmctcHJlc2VydmVkXFxuKyAqIEBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIGNoZWNrXFxuKyAqXFxuKyAqIENoZWNrIGlmIGEgZGV2aWNlIHdhcyBwcmVzZXJ2ZWQgYWNyb3NzIExpdmUgVXBkYXRlIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwsXFxuKyAqIGkuZS4gdGhlIGRldmljZSBpcyBpbmNvbWluZy1wcmVzZXJ2ZWQuIE5vdGUgdGhhdCBhIGRldmljZSBpcyBvbmx5IGNvbnNpZGVyZWRcXG4rICogaW5jb21pbmctcHJlc2VydmVkIHByaW9yIHRvIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpLiBJdCBpcyB1cCB0byBkcml2ZXJzIHRvXFxuKyAqIHN5bmNocm9uaXplIHVzYWdlIG9mIHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKCkgd2l0aCB0aGVpciBvd24gY2FsbCB0b1xcbisgKiBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSB0byBhdm9pZCBhY3Rpbmcgb24gc3RhbGUgZGF0YS5cXG4rICpcXG4rICogUmV0dXJuczogVHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGluY29taW5nLXByZXNlcnZlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbisgKi9cXG4rYm9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7XFxuK1xcdHJldHVybiBkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmc7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcpO1xcbitcXG4rLyoqXFxuKyAqIHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYigpIC0gUmVnaXN0ZXIgYSBmaWxlIGhhbmRsZXIgd2l0aCB0aGUgUENJIGNvcmVcXG4rICogQGZoOiBUaGUgZmlsZSBoYW5kbGVyIHRvIHJlZ2lzdGVyLlxcbisgKlxcbisgKiBEcml2ZXJzIHNob3VsZCBjYWxsIHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYigpIHRvIHJlZ2lzdGVyIHRoZWlyXFxuKyAqIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciB3aXRoIHRoZSBQQ0kgY29yZS4gVGhpcyBlbmFibGVzIHRoZSBQQ0kgY29yZVxcbisgKiB0byBhbGxvY2F0ZSBpdHMgb3V0Z29pbmcgc3RydWN0IHBjaV9zZXIgd2hlbmV2ZXIgdGhlIGZpcnN0IGRldmljZSBpc1xcbisgKiBwcmVzZXJ2ZWQsIGFuZCBmcmVlIGl0IHdoZW4gdGhlIGxhc3QgZGV2aWNlIGlzIHVucHJlc2VydmVkLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcXG4re1xcbitcXHRwcl9kZWJ1ZyhcXFwiUmVnaXN0ZXJpbmcgZmlsZSBoYW5kbGVyIFxcXFxcXFwiJXNcXFxcXFxcIlxcXFxuXFxcIiwgZmgtXFx1MDAzZWNvbXBhdGlibGUpO1xcbitcXHRyZXR1cm4gbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoZmgsIFxcdTAwMjZwY2lfbGl2ZXVwZGF0ZV9mbGIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYik7XFxuK1xcbisvKipcXG4rICogcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoKSAtIFVucmVnaXN0ZXIgYSBmaWxlIGhhbmRsZXIgd2l0aCB0aGUgUENJIGNvcmVcXG4rICogQGZoOiBUaGUgZmlsZSBoYW5kbGVyIHRvIHVucmVnaXN0ZXIuXFxuKyAqL1xcbit2b2lkIHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXFxuK3tcXG4rXFx0cHJfZGVidWcoXFxcIlVucmVnaXN0ZXJpbmcgZmlsZSBoYW5kbGVyIFxcXFxcXFwiJXNcXFxcXFxcIlxcXFxuXFxcIiwgZmgtXFx1MDAzZWNvbXBhdGlibGUpO1xcbitcXHRsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKGZoLCBcXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaCBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIyNjY0MDZhYWFjODBkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaFxcbkBAIC0wLDAgKzEsNjggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogUENJIExpdmUgVXBkYXRlIHN1cHBvcnQgKGNvcmUgQVBJKVxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIEdvb2dsZSBMTEMuXFxuKyAqIERhdmlkIE1hdGxhY2sgXFx1MDAzY2RtYXRsYWNrQGdvb2dsZS5jb21cXHUwMDNlXFxuKyAqL1xcbisjaWZuZGVmIERSSVZFUlNfUENJX0xJVkVVUERBVEVfSFxcbisjZGVmaW5lIERSSVZFUlNfUENJX0xJVkVVUERBVEVfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbitcXG4rI2lmZGVmIENPTkZJR19QQ0lfTElWRVVQREFURVxcbit2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV9mcmVlemUoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuK2Jvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgaW50IHBhc3MpO1xcbit2b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcyk7XFxuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfaW5pdF9hY3Moc3RydWN0IHBjaV9kZXYgKmRldik7XFxuK2ludCBwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbitpbnQgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4rYm9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9mcmVlemUoc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBpbnQgcGFzcylcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBhc3MpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNlbmRpZiAvKiBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jXFxuaW5kZXggZjM2Nzc4ZTYyYWMxYTUuLjQ3Y2IzZGNhYTkyNzgyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xcbkBAIC0yMSw2ICsyMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hY3BpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtbWFwLW9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tbXUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImxpdmV1cGRhdGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInBjaS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicGNpZS9wb3J0ZHJ2LmhcXFwiXFxuIFxcbkBAIC01MzYsNiArNTM3LDcgQEAgc3RhdGljIHZvaWQgcGNpX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpO1xcbiBcXHRzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2ID0gcGNpX2Rldi1cXHUwMDNlZHJpdmVyO1xcbiBcXG4rXFx0cGNpX2xpdmV1cGRhdGVfZnJlZXplKHBjaV9kZXYpO1xcbiBcXHRwbV9ydW50aW1lX3Jlc3VtZShkZXYpO1xcbiBcXG4gXFx0aWYgKGRydiBcXHUwMDI2XFx1MDAyNiBkcnYtXFx1MDAzZXNodXRkb3duKVxcbkBAIC01NDQsMTEgKzU0NiwxNCBAQCBzdGF0aWMgdm9pZCBwY2lfZGV2aWNlX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0LypcXG4gXFx0ICogSWYgdGhpcyBpcyBhIGtleGVjIHJlYm9vdCwgdHVybiBvZmYgQnVzIE1hc3RlciBiaXQgb24gdGhlXFxuIFxcdCAqIGRldmljZSB0byB0ZWxsIGl0IHRvIG5vdCBjb250aW51ZSB0byBkbyBETUEuIERvbid0IHRvdWNoXFxuLVxcdCAqIGRldmljZXMgaW4gRDNjb2xkIG9yIHVua25vd24gc3RhdGVzLlxcbitcXHQgKiBkZXZpY2VzIGJlaW5nIHByZXNlcnZlZCBmb3IgTGl2ZSBVcGRhdGUgb3IgaW4gRDNjb2xkIG9yXFxuK1xcdCAqIHVua25vd24gc3RhdGVzLlxcbitcXHQgKlxcbiBcXHQgKiBJZiBpdCBpcyBub3QgYSBrZXhlYyByZWJvb3QsIGZpcm13YXJlIHdpbGwgaGl0IHRoZSBQQ0lcXG4gXFx0ICogZGV2aWNlcyB3aXRoIGJpZyBoYW1tZXIgYW5kIHN0b3AgdGhlaXIgRE1BIGFueSB3YXkuXFxuIFxcdCAqL1xcbi1cXHRpZiAoa2V4ZWNfaW5fcHJvZ3Jlc3MgXFx1MDAyNlxcdTAwMjYgKHBjaV9kZXYtXFx1MDAzZWN1cnJlbnRfc3RhdGUgXFx1MDAzYz0gUENJX0QzaG90KSlcXG4rXFx0aWYgKGtleGVjX2luX3Byb2dyZXNzIFxcdTAwMjZcXHUwMDI2ICFwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhwY2lfZGV2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGNpX2Rldi1cXHUwMDNlY3VycmVudF9zdGF0ZSBcXHUwMDNjPSBQQ0lfRDNob3QpXFxuIFxcdFxcdHBjaV9jbGVhcl9tYXN0ZXIocGNpX2Rldik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmNcXG5pbmRleCA3N2IxN2IxM2VlNjE1NC4uZTBjMTMzYjY2YTM1OTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLmNcXG4rKysgYi9kcml2ZXJzL3BjaS9wY2kuY1xcbkBAIC0zNCw2ICszNCw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdXNwZW5kLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwibGl2ZXVwZGF0ZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicGNpLmhcXFwiXFxuIFxcbiBERUZJTkVfTVVURVgocGNpX3Nsb3RfbXV0ZXgpO1xcbkBAIC0xMDA4LDYgKzEwMTAsOSBAQCB2b2lkIHBjaV9lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuIFxcdGJvb2wgZW5hYmxlX2FjcyA9IGZhbHNlO1xcbiBcXHRpbnQgcG9zO1xcbiBcXG4rXFx0aWYgKCFwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzKGRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qIElmIGFuIGlvbW11IGlzIHByZXNlbnQgd2Ugc3RhcnQgd2l0aCBrZXJuZWwgZGVmYXVsdCBjYXBzICovXFxuIFxcdGlmIChwY2lfYWNzX2VuYWJsZSkge1xcbiBcXHRcXHRpZiAocGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpXFxuQEAgLTM1MjMsNyArMzUyOCw3IEBAIHZvaWQgcGNpX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldilcXG4gXFx0dTMyIGNhcDtcXG4gXFx0c3RydWN0IHBjaV9kZXYgKmJyaWRnZTtcXG4gXFxuLVxcdGlmIChwY2llX2FyaV9kaXNhYmxlZCB8fCAhcGNpX2lzX3BjaWUoZGV2KSB8fCBkZXYtXFx1MDAzZWRldmZuKVxcbitcXHRpZiAoIXBjaV9pc19wY2llKGRldikgfHwgZGV2LVxcdTAwM2VkZXZmbilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0YnJpZGdlID0gZGV2LVxcdTAwM2VidXMtXFx1MDAzZXNlbGY7XFxuQEAgLTM1MzQsNiArMzUzOSwxMiBAQCB2b2lkIHBjaV9jb25maWd1cmVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuIFxcdGlmICghKGNhcCBcXHUwMDI2IFBDSV9FWFBfREVWQ0FQMl9BUkkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRpZiAoIXBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkoYnJpZGdlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHBjaWVfYXJpX2Rpc2FibGVkKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAocGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9BUkkpKSB7XFxuIFxcdFxcdHBjaWVfY2FwYWJpbGl0eV9zZXRfd29yZChicmlkZ2UsIFBDSV9FWFBfREVWQ1RMMixcXG4gXFx0XFx0XFx0XFx0XFx0IFBDSV9FWFBfREVWQ1RMMl9BUkkpO1xcbkBAIC0zNjg5LDYgKzM3MDAsNyBAQCB2b2lkIHBjaV9hY3NfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXG4gXFx0cGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfQUNTX0NBUCwgXFx1MDAyNmRldi1cXHUwMDNlYWNzX2NhcGFiaWxpdGllcyk7XFxuIFxcdHBjaV9kaXNhYmxlX2Jyb2tlbl9hY3NfY2FwKGRldik7XFxuK1xcdHBjaV9saXZldXBkYXRlX2luaXRfYWNzKGRldik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oXFxuaW5kZXggNDQ2OWUxYTc3ZjNjMTMuLjk4OGExOGIzMjA0YWY1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oXFxuKysrIGIvZHJpdmVycy9wY2kvcGNpLmhcXG5AQCAtMTA0Nyw2ICsxMDQ3LDcgQEAgdm9pZCBwY2lfYWNzX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIHZvaWQgcGNpX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldik7XFxuICNpZmRlZiBDT05GSUdfUENJX1FVSVJLU1xcbiBpbnQgcGNpX2Rldl9zcGVjaWZpY19hY3NfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgYWNzX2ZsYWdzKTtcXG4rYm9vbCBwY2lfbmVlZF9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gaW50IHBjaV9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gaW50IHBjaV9kZXZfc3BlY2lmaWNfZGlzYWJsZV9hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIHZvaWQgcGNpX2Rpc2FibGVfYnJva2VuX2Fjc19jYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbkBAIC0xMDU3LDYgKzEwNTgsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcGNpX2Rldl9zcGVjaWZpY19hY3NfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbiB7XFxuIFxcdHJldHVybiAtRU5PVFRZO1xcbiB9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfbmVlZF9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbiBzdGF0aWMgaW5saW5lIGludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcXG4ge1xcbiBcXHRyZXR1cm4gLUVOT1RUWTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmNcXG5pbmRleCBkZDBhYmJjNjNlMThkMS4uMTY1OTczYmM5MmFhYmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuY1xcbisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmNcXG5AQCAtMjQsNiArMjQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fcnVudGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImxpdmV1cGRhdGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInBjaS5oXFxcIlxcbiBcXG4gc3RhdGljIHN0cnVjdCByZXNvdXJjZSBidXNuX3Jlc291cmNlID0ge1xcbkBAIC0xMzk2LDYgKzEzOTcsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcXG4gXFx0XFx0XFx0XFx0ICBpbnQgbWF4LCB1bnNpZ25lZCBpbnQgYXZhaWxhYmxlX2J1c2VzLFxcbiBcXHRcXHRcXHRcXHQgIGludCBwYXNzKVxcbiB7XFxuK1xcdGJvb2wgbGl2ZXVwZGF0ZSwgYXNzaWduX25ld19idXNlcyA9IHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKTtcXG4gXFx0c3RydWN0IHBjaV9idXMgKmNoaWxkO1xcbiBcXHR1MzIgYnVzZXM7XFxuIFxcdHUxNiBiY3RsO1xcbkBAIC0xNDA1LDYgKzE0MDcsMTAgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuIFxcdHU4IGZpeGVkX3NlYywgZml4ZWRfc3ViO1xcbiBcXHRpbnQgbmV4dF9idXNucjtcXG4gXFxuK1xcdGxpdmV1cGRhdGUgPSBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbihidXMsIGRldiwgcGFzcyk7XFxuK1xcdGlmIChsaXZldXBkYXRlKVxcbitcXHRcXHRhc3NpZ25fbmV3X2J1c2VzID0gZmFsc2U7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBNYWtlIHN1cmUgdGhlIGJyaWRnZSBpcyBwb3dlcmVkIG9uIHRvIGJlIGFibGUgdG8gYWNjZXNzIGNvbmZpZ1xcbiBcXHQgKiBzcGFjZSBvZiBkZXZpY2VzIGJlbG93IGl0LlxcbkBAIC0xNDQ4LDggKzE0NTQsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICgoc2Vjb25kYXJ5IHx8IHN1Ym9yZGluYXRlKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIXBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSBcXHUwMDI2XFx1MDAyNiAhYnJva2VuKSB7XFxuK1xcdGlmICgoc2Vjb25kYXJ5IHx8IHN1Ym9yZGluYXRlKSBcXHUwMDI2XFx1MDAyNiAhYXNzaWduX25ld19idXNlcyBcXHUwMDI2XFx1MDAyNiAhYnJva2VuKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBjbWF4LCBidXNlcztcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTE0OTEsOCArMTQ5Niw3IEBAIHN0YXRpYyBpbnQgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbiBcXHRcXHQgKiBkbyBpbiB0aGUgc2Vjb25kIHBhc3MuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIXBhc3MpIHtcXG4tXFx0XFx0XFx0aWYgKHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSB8fCBicm9rZW4pXFxuLVxcbitcXHRcXHRcXHRpZiAoYXNzaWduX25ld19idXNlcyB8fCBicm9rZW4pXFxuIFxcdFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdFxcdCAqIFRlbXBvcmFyaWx5IGRpc2FibGUgZm9yd2FyZGluZyBvZiB0aGVcXG4gXFx0XFx0XFx0XFx0ICogY29uZmlndXJhdGlvbiBjeWNsZXMgb24gYWxsIGJyaWRnZXMgaW5cXG5AQCAtMTUwNiw2ICsxNTEwLDExIEBAIHN0YXRpYyBpbnQgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0aWYgKGxpdmV1cGRhdGUpIHtcXG4rXFx0XFx0XFx0cGNpX2VycihkZXYsIFxcXCJDYW5ub3QgcmVjb25maWd1cmUgYnJpZGdlIGR1cmluZyBMaXZlIFVwZGF0ZSwgc2tpcHBpbmdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LyogQ2xlYXIgZXJyb3JzICovXFxuIFxcdFxcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9TVEFUVVMsIDB4ZmZmZik7XFxuIFxcbkBAIC0xNTY2LDYgKzE1NzUsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcXG4gXFx0cGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0JSSURHRV9DT05UUk9MLCBiY3RsKTtcXG4gXFxuIFxcdHBtX3J1bnRpbWVfcHV0KFxcdTAwMjZkZXYtXFx1MDAzZWRldik7XFxuK1xcdHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChkZXYsIHBhc3MpO1xcbiBcXG4gXFx0cmV0dXJuIG1heDtcXG4gfVxcbkBAIC0yMDY0LDYgKzIwNzQsOCBAQCBpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXHRpZiAocGNpX2Vhcmx5X2R1bXApXFxuIFxcdFxcdGVhcmx5X2R1bXBfcGNpX2RldmljZShkZXYpO1xcbiBcXG4rXFx0cGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKGRldik7XFxuK1xcbiBcXHQvKiBOZWVkIHRvIGhhdmUgZGV2LVxcdTAwM2VjbGFzcyByZWFkeSAqL1xcbiBcXHRkZXYtXFx1MDAzZWNmZ19zaXplID0gcGNpX2NmZ19zcGFjZV9zaXplKGRldik7XFxuIFxcbkBAIC0yMTg3LDYgKzIxOTksNyBAQCBpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXHRkZWZhdWx0OlxcdFxcdFxcdFxcdCAgICAvKiB1bmtub3duIGhlYWRlciAqL1xcbiBcXHRcXHRwY2lfZXJyKGRldiwgXFxcInVua25vd24gaGVhZGVyIHR5cGUgJTAyeCwgaWdub3JpbmcgZGV2aWNlXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRkZXYtXFx1MDAzZWhkcl90eXBlKTtcXG4rXFx0XFx0cGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2UoZGV2KTtcXG4gXFx0XFx0cGNpX3JlbGVhc2Vfb2Zfbm9kZShkZXYpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuQEAgLTI0ODUsNiArMjQ5OCw3IEBAIHN0YXRpYyB2b2lkIHBjaV9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcbiBcXHRwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpO1xcbiBcXHRwY2lfcmVsZWFzZV9jYXBhYmlsaXRpZXMocGNpX2Rldik7XFxuK1xcdHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHBjaV9kZXYpO1xcbiBcXHRwY2lfcmVsZWFzZV9vZl9ub2RlKHBjaV9kZXYpO1xcbiBcXHRwY2liaW9zX3JlbGVhc2VfZGV2aWNlKHBjaV9kZXYpO1xcbiBcXHRwY2lfYnVzX3B1dChwY2lfZGV2LVxcdTAwM2VidXMpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jXFxuaW5kZXggYjA5ZjI3Zjc4NDZmY2QuLjk5YjgxOWYzOGU0OWMyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jXFxuKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmNcXG5AQCAtNTM3NCw5ICs1Mzc0LDYgQEAgc3RhdGljIHZvaWQgcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9ycF9tcGNfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuICAqL1xcbiBzdGF0aWMgaW50IHBjaV9xdWlya19lbmFibGVfaW50ZWxfcGNoX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiB7XFxuLVxcdGlmICghcGNpX3F1aXJrX2ludGVsX3BjaF9hY3NfbWF0Y2goZGV2KSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuLVxcbiBcXHRpZiAocGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9scGNfYWNzKGRldikpIHtcXG4gXFx0XFx0cGNpX3dhcm4oZGV2LCBcXFwiRmFpbGVkIHRvIGVuYWJsZSBJbnRlbCBQQ0ggQUNTIHF1aXJrXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTUzOTYsOSArNTM5Myw2IEBAIHN0YXRpYyBpbnQgcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9zcHRfcGNoX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXHRpbnQgcG9zO1xcbiBcXHR1MzIgY2FwLCBjdHJsO1xcbiBcXG4tXFx0aWYgKCFwY2lfcXVpcmtfaW50ZWxfc3B0X3BjaF9hY3NfbWF0Y2goZGV2KSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuLVxcbiBcXHRwb3MgPSBkZXYtXFx1MDAzZWFjc19jYXA7XFxuIFxcdGlmICghcG9zKVxcbiBcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG5AQCAtNTQyNiw5ICs1NDIwLDYgQEAgc3RhdGljIGludCBwY2lfcXVpcmtfZGlzYWJsZV9pbnRlbF9zcHRfcGNoX2Fjc19yZWRpcihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXHRpbnQgcG9zO1xcbiBcXHR1MzIgY2FwLCBjdHJsO1xcbiBcXG4tXFx0aWYgKCFwY2lfcXVpcmtfaW50ZWxfc3B0X3BjaF9hY3NfbWF0Y2goZGV2KSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuLVxcbiBcXHRwb3MgPSBkZXYtXFx1MDAzZWFjc19jYXA7XFxuIFxcdGlmICghcG9zKVxcbiBcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG5AQCAtNTQ0OCw1NiArNTQzOSw2MyBAQCBzdGF0aWMgaW50IHBjaV9xdWlya19kaXNhYmxlX2ludGVsX3NwdF9wY2hfYWNzX3JlZGlyKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzIHtcXG4gXFx0dTE2IHZlbmRvcjtcXG4gXFx0dTE2IGRldmljZTtcXG4rXFx0Ym9vbCAoKm1hdGNoKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gXFx0aW50ICgqZW5hYmxlX2Fjcykoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIFxcdGludCAoKmRpc2FibGVfYWNzX3JlZGlyKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gfSBwY2lfZGV2X2Fjc19vcHNbXSA9IHtcXG4gXFx0eyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfQU5ZX0lELFxcbitcXHQgICAgLm1hdGNoID0gcGNpX3F1aXJrX2ludGVsX3BjaF9hY3NfbWF0Y2gsXFxuIFxcdCAgICAuZW5hYmxlX2FjcyA9IHBjaV9xdWlya19lbmFibGVfaW50ZWxfcGNoX2FjcyxcXG4gXFx0fSxcXG4gXFx0eyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfQU5ZX0lELFxcbitcXHQgICAgLm1hdGNoID0gcGNpX3F1aXJrX2ludGVsX3NwdF9wY2hfYWNzX21hdGNoLFxcbiBcXHQgICAgLmVuYWJsZV9hY3MgPSBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3NwdF9wY2hfYWNzLFxcbiBcXHQgICAgLmRpc2FibGVfYWNzX3JlZGlyID0gcGNpX3F1aXJrX2Rpc2FibGVfaW50ZWxfc3B0X3BjaF9hY3NfcmVkaXIsXFxuIFxcdH0sXFxuIH07XFxuIFxcbi1pbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwY2lfZGV2X2Fjc19vcHNfZ2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcDtcXG4tXFx0aW50IGksIHJldDtcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwY2lfZGV2X2Fjc19vcHMpOyBpKyspIHtcXG4gXFx0XFx0cCA9IFxcdTAwMjZwY2lfZGV2X2Fjc19vcHNbaV07XFxuIFxcdFxcdGlmICgocC1cXHUwMDNldmVuZG9yID09IGRldi1cXHUwMDNldmVuZG9yIHx8XFxuIFxcdFxcdCAgICAgcC1cXHUwMDNldmVuZG9yID09ICh1MTYpUENJX0FOWV9JRCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIChwLVxcdTAwM2VkZXZpY2UgPT0gZGV2LVxcdTAwM2VkZXZpY2UgfHxcXG4tXFx0XFx0ICAgICBwLVxcdTAwM2VkZXZpY2UgPT0gKHUxNilQQ0lfQU5ZX0lEKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgcC1cXHUwMDNlZW5hYmxlX2Fjcykge1xcbi1cXHRcXHRcXHRyZXQgPSBwLVxcdTAwM2VlbmFibGVfYWNzKGRldik7XFxuLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0ICAgICBwLVxcdTAwM2VkZXZpY2UgPT0gKHUxNilQQ0lfQU5ZX0lEKSkge1xcbitcXHRcXHRcXHRpZiAoIXAtXFx1MDAzZW1hdGNoIHx8IHAtXFx1MDAzZW1hdGNoKGRldikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBwO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitib29sIHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcCA9IHBjaV9kZXZfYWNzX29wc19nZXQoZGV2KTtcXG4rXFxuK1xcdHJldHVybiBwIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZWVuYWJsZV9hY3M7XFxuK31cXG4rXFxuK2ludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpO1xcbitcXG4rXFx0aWYgKHAgXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNlZW5hYmxlX2FjcylcXG4rXFx0XFx0cmV0dXJuIHAtXFx1MDAzZWVuYWJsZV9hY3MoZGV2KTtcXG4rXFxuIFxcdHJldHVybiAtRU5PVFRZO1xcbiB9XFxuIFxcbiBpbnQgcGNpX2Rldl9zcGVjaWZpY19kaXNhYmxlX2Fjc19yZWRpcihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiB7XFxuLVxcdGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnA7XFxuLVxcdGludCBpLCByZXQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnAgPSBwY2lfZGV2X2Fjc19vcHNfZ2V0KGRldik7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwY2lfZGV2X2Fjc19vcHMpOyBpKyspIHtcXG4tXFx0XFx0cCA9IFxcdTAwMjZwY2lfZGV2X2Fjc19vcHNbaV07XFxuLVxcdFxcdGlmICgocC1cXHUwMDNldmVuZG9yID09IGRldi1cXHUwMDNldmVuZG9yIHx8XFxuLVxcdFxcdCAgICAgcC1cXHUwMDNldmVuZG9yID09ICh1MTYpUENJX0FOWV9JRCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIChwLVxcdTAwM2VkZXZpY2UgPT0gZGV2LVxcdTAwM2VkZXZpY2UgfHxcXG4tXFx0XFx0ICAgICBwLVxcdTAwM2VkZXZpY2UgPT0gKHUxNilQQ0lfQU5ZX0lEKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgcC1cXHUwMDNlZGlzYWJsZV9hY3NfcmVkaXIpIHtcXG4tXFx0XFx0XFx0cmV0ID0gcC1cXHUwMDNlZGlzYWJsZV9hY3NfcmVkaXIoZGV2KTtcXG4tXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0aWYgKHAgXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNlZGlzYWJsZV9hY3NfcmVkaXIpXFxuK1xcdFxcdHJldHVybiBwLVxcdTAwM2VkaXNhYmxlX2Fjc19yZWRpcihkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIC1FTk9UVFk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9raG8vYWJpL3BjaS5oIGIvaW5jbHVkZS9saW51eC9raG8vYWJpL3BjaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWNmMWIzOGRmZjAyNGFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9saW51eC9raG8vYWJpL3BjaS5oXFxuQEAgLTAsMCArMSw1OSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbitcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2LCBHb29nbGUgTExDLlxcbisgKiBEYXZpZCBNYXRsYWNrIFxcdTAwM2NkbWF0bGFja0Bnb29nbGUuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX0xJTlVYX0tIT19BQklfUENJX0hcXG4rI2RlZmluZSBfTElOVVhfS0hPX0FCSV9QQ0lfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogRE9DOiBQQ0kgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgTGl2ZSBVcGRhdGUgQUJJXFxuKyAqXFxuKyAqIFRoaXMgaGVhZGVyIGRlZmluZXMgdGhlIEFCSSBmb3IgcHJlc2VydmluZyBjb3JlIFBDSSBzdGF0ZSBhY3Jvc3Mga2V4ZWMgdXNpbmdcXG4rICogTGl2ZSBVcGRhdGUgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgZGF0YS5cXG4rICpcXG4rICogVGhpcyBpbnRlcmZhY2UgaXMgYSBjb250cmFjdC4gQW55IG1vZGlmaWNhdGlvbiB0byBhbnkgb2YgdGhlIHNlcmlhbGl6YXRpb25cXG4rICogc3RydWN0cyBkZWZpbmVkIGhlcmUgY29uc3RpdHV0ZXMgYSBicmVha2luZyBjaGFuZ2UuIFN1Y2ggY2hhbmdlcyByZXF1aXJlXFxuKyAqIGluY3JlbWVudGluZyB0aGUgdmVyc2lvbiBudW1iZXIgaW4gdGhlIFBDSV9MVU9fRkxCX0NPTVBBVElCTEUgc3RyaW5nLlxcbisgKi9cXG4rXFxuKyNkZWZpbmUgUENJX0xVT19GTEJfQ09NUEFUSUJMRSBcXFwicGNpLXYyXFxcIlxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwY2lfZGV2X3NlciAtIFNlcmlhbGl6ZWQgc3RhdGUgYWJvdXQgYSBzaW5nbGUgUENJIGRldmljZS5cXG4rICpcXG4rICogQGRvbWFpbjogVGhlIGRldmljZSdzIFBDSSBkb21haW4gbnVtYmVyIChzZWdtZW50KS5cXG4rICogQGJkZjogVGhlIGRldmljZSdzIFBDSSBidXMsIGRldmljZSwgYW5kIGZ1bmN0aW9uIG51bWJlci5cXG4rICogQHJlZmNvdW50OiBSZWZlcmVuY2UgY291bnQgdXNlZCBieSB0aGUgUENJIGNvcmUgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGl0XFxuKyAqICAgICAgICAgICAgaXMgZG9uZSB1c2luZyBhIGRldmljZSdzIHN0cnVjdCBwY2lfZGV2X3Nlci4gVGhlIHZhbHVlIG9mIHRoZVxcbisgKiAgICAgICAgICAgIHJlZmNvdW50IGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgcHJlc2VydmVkIGRldmljZXMgYXQgb3IgYmVsb3dcXG4rICogICAgICAgICAgICBpdCBpbiB0aGUgUENJIGhpZXJhcmNoeSB3aGVuIHRoZSBzdHJ1Y3QgcGNpX2Rldl9zZXIgaXMgaW4gdXNlLCBhbmRcXG4rICogICAgICAgICAgICAwIG90aGVyd2lzZS5cXG4rICovXFxuK3N0cnVjdCBwY2lfZGV2X3NlciB7XFxuK1xcdHUzMiBkb21haW47XFxuK1xcdHUxNiBiZGY7XFxuK1xcdHUxNiByZWZjb3VudDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGNpX3NlciAtIFBDSSBTdWJzeXN0ZW0gTGl2ZSBVcGRhdGUgU3RhdGVcXG4rICpcXG4rICogVGhpcyBzdHJ1Y3QgdHJhY2tzIHN0YXRlIGFib3V0IGFsbCBkZXZpY2VzIHRoYXQgYXJlIGJlaW5nIHByZXNlcnZlZCBhY3Jvc3NcXG4rICogYSBMaXZlIFVwZGF0ZSBmb3IgdGhlIG5leHQga2VybmVsLlxcbisgKlxcbisgKiBAbnJfZGV2aWNlczogVGhlIG51bWJlciBvZiBkZXZpY2VzIHRoYXQgd2VyZSBwcmVzZXJ2ZWQuXFxuKyAqIEBkZXZpY2VzOiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBLSE8gYmxvY2sgY29udGFpbmluZyBwY2lfZGV2X3Nlci5cXG4rICovXFxuK3N0cnVjdCBwY2lfc2VyIHtcXG4rXFx0dTMyIG5yX2RldmljZXM7XFxuK1xcdHU2NCBkZXZpY2VzO1xcbit9IF9fcGFja2VkO1xcbitcXG4rI2VuZGlmIC8qIF9MSU5VWF9LSE9fQUJJX1BDSV9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuaW5kZXggZWJiNWI5ZDc2MzYwOWUuLmI0MWRkNTcyYTJkNmIzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuQEAgLTQzLDYgKzQzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvcGNpLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpX2lkcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpX2xpdmV1cGRhdGUuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgUENJX1NUQVRVU19FUlJPUl9CSVRTIChQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSAgfCBcXFxcXFxuIFxcdFxcdFxcdCAgICAgICBQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IgfCBcXFxcXFxuQEAgLTU5Miw2ICs1OTMsOSBAQCBzdHJ1Y3QgcGNpX2RldiB7XFxuIFxcdHU4XFx0XFx0dHBoX21vZGU7XFx0LyogVFBIIG1vZGUgKi9cXG4gXFx0dThcXHRcXHR0cGhfcmVxX3R5cGU7XFx0LyogVFBIIHJlcXVlc3RlciB0eXBlICovXFxuICNlbmRpZlxcbisjaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFXFxuK1xcdHN0cnVjdCBwY2lfbGl2ZXVwZGF0ZSBsaXZldXBkYXRlO1xcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKnBjaV9waHlzZm4oc3RydWN0IHBjaV9kZXYgKmRldilcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfbGl2ZXVwZGF0ZS5oIGIvaW5jbHVkZS9saW51eC9wY2lfbGl2ZXVwZGF0ZS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTUwOTkzNDA1NzU0YmFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2lfbGl2ZXVwZGF0ZS5oXFxuQEAgLTAsMCArMSw3NyBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCAoUHVibGljL0RyaXZlciBBUEkpXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiwgR29vZ2xlIExMQy5cXG4rICogRGF2aWQgTWF0bGFjayBcXHUwMDNjZG1hdGxhY2tAZ29vZ2xlLmNvbVxcdTAwM2VcXG4rICovXFxuKyNpZm5kZWYgTElOVVhfUENJX0xJVkVVUERBVEVfSFxcbisjZGVmaW5lIExJTlVYX1BDSV9MSVZFVVBEQVRFX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9raG8vYWJpL3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGl2ZXVwZGF0ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrX3R5cGVzLmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogc3RydWN0IHBjaV9saXZldXBkYXRlIC0gUENJIExpdmUgVXBkYXRlIHN0YXRlIGZvciBhIHN0cnVjdCBwY2lfZGV2XFxuKyAqIEBvdXRnb2luZzogU3RhdGUgcHJlc2VydmVkIGZvciB0aGUgbmV4dCBrZXJuZWwuXFxuKyAqIEBpbmNvbWluZzogU3RhdGUgcHJlc2VydmVkIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwuXFxuKyAqIEBhY3NfY3RybDogQUNTIGZlYXR1cmVzIGVzdGFibGlzaGVkIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwuXFxuKyAqIEBpbmhlcml0X2J1c2VzOiBUcnVlIGlmIHRoZSBQQ0kgY29yZSBzaG91bGQgaW5oZXJpdCB0aGUgc2Vjb25kYXJ5IGFuZFxcbisgKiAgICAgICAgICAgICAgICAgc3Vib3JkaW5hdGUgYnVzIG51bWJlcnMgYXNzaWduZWQgdG8gdGhpcyBkZXZpY2UgZHVlIHRvXFxuKyAqICAgICAgICAgICAgICAgICBhbiBvbmdvaW5nIExpdmUgVXBkYXRlLlxcbisgKiBAd2FzX3ByZXNlcnZlZDogVHJ1ZSBpZiB0aGlzIHN0cnVjdCBwY2lfZGV2IHdhcyBwcmVzZXJ2ZWQgYnkgdGhlIHByZXZpb3VzXFxuKyAqICAgICAgICAgICAgICAgICBrZXJuZWwuIFVubGlrZSBAaW5jb21pbmcsIHRoaXMgZmllbGQgaXMgbm90IGNsZWFyZWQgYWZ0ZXJcXG4rICogICAgICAgICAgICAgICAgIHRoZSBkZXZpY2UgaXMgZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiBMaXZlIFVwZGF0ZS5cXG4rICogQGZyb3plbjogVHJ1ZSBpZiB0aGUgb3V0Z29pbmcgcHJlc2VydmF0aW9uIHN0YXR1cyBvZiB0aGlzIGRldmljZSBpcyBmcm96ZW5cXG4rICogICAgICAgICAgYW5kIHRodXMgY2Fubm90IGJlIGNoYW5nZWQuXFxuKyAqL1xcbitzdHJ1Y3QgcGNpX2xpdmV1cGRhdGUge1xcbitcXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKm91dGdvaW5nO1xcbitcXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmluY29taW5nO1xcbitcXHR1MTYgYWNzX2N0cmw7XFxuK1xcdGJvb2wgaW5oZXJpdF9idXNlcztcXG4rXFx0Ym9vbCB3YXNfcHJlc2VydmVkO1xcbitcXHRib29sIGZyb3plbjtcXG4rfTtcXG4rXFxuK3N0cnVjdCBwY2lfZGV2O1xcbitcXG4rI2lmZGVmIENPTkZJR19QQ0lfTElWRVVQREFURVxcbitpbnQgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xcbit2b2lkIHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xcbitpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goc3RydWN0IHBjaV9kZXYgKmRldik7XFxuK2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNlbmRpZiAvKiBMSU5VWF9QQ0lfTElWRVVQREFURV9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE4OjI2OjQwLjgzMjcxMzQ5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyODY4MzQ3MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTElWRVVQREFURVwiLFxuICAgIFwiUENJX0xJVkVVUERBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2VcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9mcmVlemVcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmRcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2luaXRfYWNzXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfZmluaXNoXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGJcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCwgd2hpY2ggbW9kaWZpZXMgY29yZSBQQ0kgZW51bWVyYXRpb24sIHNodXRkb3duLCBhbmQgY2FwYWJpbGl0eSBjb25maWd1cmF0aW9uIHBhdGhzIChlLmcuLCBBQ1MsIEFSSSkuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgUENJIGRldmljZSBwcm9iZSwgcmVtb3ZhbCwgYW5kIHN5c3RlbSBzaHV0ZG93bi9rZXhlYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBwY2lfbGl2ZXVwZGF0ZV8qIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBQQ0kgdG9wb2xvZ2llcyBhbmQgc3RhdGVzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkNmIzMGFiMjc5ZmIwZWYwNTc4N2Q1NmUzM2U1NzQzNmFiNmM4OGU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTg6MjY6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3RcbmluZGV4IDVkNzIwZDJhNDE1ZTAxLi4yM2ZiNzM3YWM5NjllYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vUENJL2luZGV4LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvaW5kZXgucnN0XG5AQCAtMjAsMyArMjAsNCBAQCBQQ0kgQnVzIFN1YnN5c3RlbVxuICAgIGNvbnRyb2xsZXIvaW5kZXhcbiAgICBib290LWludGVycnVwdHNcbiAgICB0cGhcbisgICBsaXZldXBkYXRlXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvbGl2ZXVwZGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lYmE1NWY4YTkyYWUxMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvbGl2ZXVwZGF0ZS5yc3RcbkBAIC0wLDAgKzEsMjkgQEBcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuK1xuKz09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1BDSSBTdXBwb3J0IGZvciBMaXZlIFVwZGF0ZVxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcbisgICA6ZG9jOiBQQ0kgTGl2ZSBVcGRhdGVcbitcbitEcml2ZXIgQVBJXG4rPT09PT09PT09PVxuK1xuKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcbisgICA6ZXhwb3J0OlxuK1xuK0xpdmUgVXBkYXRlIEFCSVxuKz09PT09PT09PT09PT09PVxuK1xuKy4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmhcbisgICA6ZG9jOiBQQ0kgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgTGl2ZSBVcGRhdGUgQUJJXG4rXG4rLi4ga2VybmVsLWRvYzo6IGluY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxuKyAgIDppbnRlcm5hbDpcbitcbitTZWUgQWxzb1xuKz09PT09PT09XG4rXG4rICogOmRvYzpgL2NvcmUtYXBpL2xpdmV1cGRhdGVgXG4rICogOmRvYzpgL2NvcmUtYXBpL2toby9pbmRleGBcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA0ZjY1YjJhMzc1MjEwMi4uZWQ5ZWVmOGRlNjRjZDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC01MTA1LDcgKzUxMDUsMTEgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHRcdGV4cGxpY2l0bHkgd2hpY2ggb25lcyB0aGV5IGFyZS5cbiBcdFx0YXNzaWduLWJ1c3Nlc1x0W1g4Nl0gQWx3YXlzIGFzc2lnbiBhbGwgUENJIGJ1c1xuIFx0XHRcdFx0bnVtYmVycyBvdXJzZWx2ZXMsIG92ZXJyaWRpbmdcbi1cdFx0XHRcdHdoYXRldmVyIHRoZSBmaXJtd2FyZSBtYXkgaGF2ZSBkb25lLlxuK1x0XHRcdFx0d2hhdGV2ZXIgdGhlIGZpcm13YXJlIG1heSBoYXZlIGRvbmUuIElnbm9yZWRcbitcdFx0XHRcdGR1cmluZyBhIExpdmUgVXBkYXRlLCB3aGVyZSB0aGUga2VybmVsIG11c3RcbitcdFx0XHRcdGluaGVyaXQgdGhlIFBDSSB0b3BvbG9neSAoaW5jbHVkaW5nIGJ1cyBudW1iZXJzKVxuK1x0XHRcdFx0dG8gYXZvaWQgaW50ZXJydXB0aW5nIG9uZ29pbmcgbWVtb3J5XG4rXHRcdFx0XHR0cmFuc2FjdGlvbnMgb2YgcHJlc2VydmVkIGRldmljZXMuXG4gXHRcdHVzZXBpcnFtYXNrXHRbWDg2XSBIb25vciB0aGUgcG9zc2libGUgSVJRIG1hc2sgc3RvcmVkXG4gXHRcdFx0XHRpbiB0aGUgQklPUyAkUElSIHRhYmxlLiBUaGlzIGlzIG5lZWRlZCBvblxuIFx0XHRcdFx0c29tZSBzeXN0ZW1zIHdpdGggYnJva2VuIEJJT1Nlcywgbm90YWJseVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbGl2ZXVwZGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0XG5pbmRleCA1YTI5MmQwZjM3MDY0ZC4uMmJjZTI2NDRlYmEyMjMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0XG5AQCAtMSw1ICsxLDcgQEBcbiAuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuKy4uIF9sdW86XG4rXG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gTGl2ZSBVcGRhdGUgT3JjaGVzdHJhdG9yXG4gPT09PT09PT09PT09PT09PT09PT09PT09XG5AQCAtMTgsNiArMjAsOCBAQCBMVU8gUHJlc2VydmluZyBGaWxlIERlc2NyaXB0b3JzXG4gLi4ga2VybmVsLWRvYzo6IGtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmNcbiAgICA6ZG9jOiBMVU8gRmlsZSBEZXNjcmlwdG9yc1xuIFxuKy4uIF9mbGI6XG4rXG4gTFVPIEZpbGUgTGlmZWN5Y2xlIEJvdW5kIEdsb2JhbCBEYXRhXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gLi4ga2VybmVsLWRvYzo6IGtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuY1xuQEAgLTcwLDMgKzc0LDQgQEAgU2VlIEFsc29cbiBcbiAtIDpkb2M6YExpdmUgVXBkYXRlIHVBUEkgXHUwMDNjL3VzZXJzcGFjZS1hcGkvbGl2ZXVwZGF0ZVx1MDAzZWBcbiAtIDpkb2M6YC9jb3JlLWFwaS9raG8vaW5kZXhgXG4rLSA6ZG9jOmBQQ0kgXHUwMDNjL1BDSS9saXZldXBkYXRlXHUwMDNlYFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGEzZWQzMzdlODI3ZDg2Li4zNDdjNDM1Y2E0MDQ3YyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTIwODI0LDYgKzIwODI0LDIxIEBAIEw6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4gUzpcdFN1cHBvcnRlZFxuIEY6XHREb2N1bWVudGF0aW9uL1BDSS9wY2ktZXJyb3ItcmVjb3ZlcnkucnN0XG4gXG4rUENJIExJVkUgVVBEQVRFXG4rTTpcdERhdmlkIE1hdGxhY2sgXHUwMDNjZG1hdGxhY2tAZ29vZ2xlLmNvbVx1MDAzZVxuK1I6XHRQYXNoYSBUYXRhc2hpbiBcdTAwM2NwYXNoYS50YXRhc2hpbkBzb2xlZW4uY29tXHUwMDNlXG4rUjpcdE1pa2UgUmFwb3BvcnQgXHUwMDNjcnBwdEBrZXJuZWwub3JnXHUwMDNlXG4rUjpcdFByYXR5dXNoIFlhZGF2IFx1MDAzY3ByYXR5dXNoQGtlcm5lbC5vcmdcdTAwM2VcbitMOlx0a2V4ZWNAbGlzdHMuaW5mcmFkZWFkLm9yZ1xuK0w6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4rUzpcdE1haW50YWluZWRcbitUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saXZldXBkYXRlL2xpbnV4LmdpdFxuK0Y6XHREb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdFxuK0Y6XHRkcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcbitGOlx0ZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oXG4rRjpcdGluY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxuK0Y6XHRpbmNsdWRlL2xpbnV4L3BjaV9saXZldXBkYXRlLmhcbitcbiBQQ0kgTVNJIERSSVZFUiBGT1IgQUxURVJBIE1TSSBJUFxuIEw6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4gUzpcdE9ycGhhblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5pbmRleCAwYzc0MDg1MDliYTI0Yi4uMTZmYmQ0MjEyZTBmNTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5AQCAtMjcxLDYgKzI3MSwyMSBAQCBjb25maWcgVkdBX0FSQl9NQVhfR1BVU1xuIFx0ICBSZXNlcnZlcyBzcGFjZSBpbiB0aGUga2VybmVsIHRvIG1haW50YWluIHJlc291cmNlIGxvY2tpbmcgZm9yXG4gXHQgIG11bHRpcGxlIEdQVVMuICBUaGUgb3ZlcmhlYWQgZm9yIGVhY2ggR1BVIGlzIHZlcnkgc21hbGwuXG4gXG4rY29uZmlnIFBDSV9MSVZFVVBEQVRFXG4rXHRib29sIFwiUENJIExpdmUgVXBkYXRlIFN1cHBvcnRcIlxuK1x0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IExJVkVVUERBVEUgXHUwMDI2XHUwMDI2IDY0QklUIFx1MDAyNlx1MDAyNiAhQ0FSREJVU1xuK1x0aGVscFxuK1x0ICBFbmFibGUgUENJIGNvcmUgc3VwcG9ydCBmb3IgcHJlc2VydmluZyBQQ0kgZGV2aWNlcyBhY3Jvc3MgTGl2ZVxuK1x0ICBVcGRhdGUuIFRoaXMsIGluIGNvbWJpbmF0aW9uIHdpdGggc3VwcG9ydCBpbiBhIGRldmljZSdzIGRyaXZlcixcbitcdCAgZW5hYmxlcyBQQ0kgZGV2aWNlcyB0byBydW4gYW5kIHBlcmZvcm0gbWVtb3J5IHRyYW5zYWN0aW9uc1xuK1x0ICB1bmludGVycnVwdGVkIGR1cmluZyBhIGtleGVjIGZvciBMaXZlIFVwZGF0ZS5cbitcbitcdCAgVGhpcyBvcHRpb24gc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBieSB1c2VycyB3aG8gcGxhbiB0byB1c2UgTGl2ZVxuK1x0ICBVcGRhdGUgZm9yIGtlcm5lbCB1cGdyYWRlcyBhbmQgcmVxdWlyZSBwcmVzZXJ2aW5nIFBDSSBkZXZpY2VzIGR1cmluZ1xuK1x0ICB0aG9zZSB1cGdyYWRlcy5cbitcbitcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbitcbiBzb3VyY2UgXCJkcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWdcIlxuIHNvdXJjZSBcImRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZ1wiXG4gc291cmNlIFwiZHJpdmVycy9wY2kvZW5kcG9pbnQvS2NvbmZpZ1wiXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZVxuaW5kZXggNDFlYmMzYjlhNTE4MjQuLmU4ZDAwM2NiNjc1NzYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlXG5AQCAtMTYsNiArMTYsNyBAQCBvYmotJChDT05GSUdfUFJPQ19GUylcdFx0Kz0gcHJvYy5vXG4gb2JqLSQoQ09ORklHX1NZU0ZTKVx0XHQrPSBwY2ktc3lzZnMubyBzbG90Lm9cbiBvYmotJChDT05GSUdfQUNQSSlcdFx0Kz0gcGNpLWFjcGkub1xuIG9iai0kKENPTkZJR19HRU5FUklDX1BDSV9JT01BUCkgKz0gaW9tYXAub1xuK29iai0kKENPTkZJR19QQ0lfTElWRVVQREFURSlcdCs9IGxpdmV1cGRhdGUub1xuIGVuZGlmXG4gXG4gb2JqLSQoQ09ORklHX09GKVx0XHQrPSBvZi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jIGIvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU5MzVlODhkZTA3M2RjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcbkBAIC0wLDAgKzEsOTEwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiwgR29vZ2xlIExMQy5cbisgKiBEYXZpZCBNYXRsYWNrIFx1MDAzY2RtYXRsYWNrQGdvb2dsZS5jb21cdTAwM2VcbisgKi9cbitcbisvKipcbisgKiBET0M6IFBDSSBMaXZlIFVwZGF0ZVxuKyAqXG4rICogVGhlIFBDSSBzdWJzeXN0ZW0gcGFydGljaXBhdGVzIGluIHRoZSBMaXZlIFVwZGF0ZSBwcm9jZXNzIHRvIGVuYWJsZSBkcml2ZXJzXG4rICogdG8gcHJlc2VydmUgdGhlaXIgUENJIGRldmljZXMgYWNyb3NzIGtleGVjLlxuKyAqXG4rICogOnJlZjpgRkxCIFx1MDAzY2ZsYlx1MDAzZWAgRGF0YVxuKyAqID09PT09PT09PT09PT09PT09PT09PVxuKyAqXG4rICogUENJIGRldmljZSBwcmVzZXJ2YXRpb24gYWNyb3NzIExpdmUgVXBkYXRlIGlzIGJ1aWx0IG9uIHRvcCBvZiB0aGVcbisgKiA6cmVmOmBMVU8gXHUwMDNjbHVvXHUwMDNlYCBzdXBwb3J0IGZvciBmaWxlIHByZXNlcnZhdGlvbiBhY3Jvc3Mga2V4ZWMuIERyaXZlcnMgYXJlXG4rICogZXhwZWN0ZWQgdG8gZXhwb3NlIGEgZmlsZSB0byByZXByZXNlbnQgYSBzaW5nbGUgUENJIGRldmljZSBhbmQgc3VwcG9ydFxuKyAqIHByZXNlcnZhdGlvbiBvZiB0aGF0IGZpbGUgd2l0aCBgYGlvY3RsKExJVkVVUERBVEVfU0VTU0lPTl9QUkVTRVJWRV9GRClgYC5cbisgKiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gY29udHJvbCB0aGUgcHJlc2VydmF0aW9uIG9mIGRldmljZXMgYW5kIGVuc3VyZVxuKyAqIHByb3BlciBsaWZlY3ljbGUgbWFuYWdlbWVudCB3aGlsZSBhIGRldmljZSBpcyBwcmVzZXJ2ZWQuIFRoZSBmaXJzdCBpbnRlbmRlZFxuKyAqIHVzZS1jYXNlIGlzIHByZXNlcnZpbmcgdmZpby1wY2kgZGV2aWNlIGZpbGVzLlxuKyAqXG4rICogVGhlIFBDSSBjb3JlIG1haW50YWlucyBpdHMgb3duIHN0YXRlIGFib3V0IHdoYXQgZGV2aWNlcyBhcmUgYmVpbmcgcHJlc2VydmVkXG4rICogYWNyb3NzIExpdmUgVXBkYXRlIHVzaW5nIEZMQiBkYXRhIGluIExVTy4gRXNzZW50aWFsbHksIHRoaXMgYWxsb3dzIHRoZSBQQ0lcbisgKiBjb3JlIHRvIGFsbG9jYXRlIHN0cnVjdCBwY2lfc2VyIHdoZW4gdGhlIGZpcnN0IGRldmljZSAoZmlsZSkgaXMgcHJlc2VydmVkXG4rICogYW5kIGZyZWUgaXQgd2hlbiB0aGUgbGFzdCBkZXZpY2UgKGZpbGUpIGlzIHVucHJlc2VydmVkLiBBZnRlciBrZXhlYywgdGhlXG4rICogUENJIGNvcmUgY2FuIGZldGNoIHRoZSBzdHJ1Y3QgcGNpX3NlciAod2hpY2ggd2FzIGNvbnN0cnVjdGVkIGJ5IHRoZSBwcmV2aW91c1xuKyAqIGtlcm5lbCkgZnJvbSBMVU8gYXQgYW55IHRpbWUgKGUuZy4gZHVyaW5nIGVudW1lcmF0aW9uKSBzbyB0aGF0IGl0IGtub3dzXG4rICogd2hpY2ggZGV2aWNlcyB3ZXJlIHByZXNlcnZlZC5cbisgKlxuKyAqIFRvIGVuYWJsZSB0aGUgUENJIGNvcmUgdG8gYmUgbm90aWZpZWQgd2hlbmV2ZXIgYSBmaWxlIHJlcHJlc2VudGluZyBhIGRldmljZVxuKyAqIGlzIHByZXNlcnZlZCwgZHJpdmVycyBtdXN0IHJlZ2lzdGVyIHRoZWlyIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciB3aXRoXG4rICogdGhlIFBDSSBjb3JlIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgQVBJczpcbisgKlxuKyAqICAqIGBgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKGRyaXZlcl9maWxlX2hhbmRsZXIpYGBcbisgKiAgKiBgYHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKGRyaXZlcl9maWxlX2hhbmRsZXIpYGBcbisgKlxuKyAqIERldmljZSBUcmFja2luZ1xuKyAqID09PT09PT09PT09PT09PVxuKyAqXG4rICogRHJpdmVycyBtdXN0IG5vdGlmeSB0aGUgUENJIGNvcmUgd2hlbiBzcGVjaWZpYyBkZXZpY2VzIGFyZSBwcmVzZXJ2ZWQgb3JcbisgKiB1bnByZXNlcnZlZCB3aXRoIHRoZSBmb2xsb3dpbmcgQVBJczpcbisgKlxuKyAqICAqIGBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUocGNpX2RldilgYFxuKyAqICAqIGBgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShwY2lfZGV2KWBgXG4rICpcbisgKiBUaGlzIGFsbG93cyB0aGUgUENJIGNvcmUgdG8ga2VlcCBpdHMgRkxCIGRhdGEgKHN0cnVjdCBwY2lfc2VyKSB1cCB0byBkYXRlXG4rICogd2l0aCB0aGUgbGlzdCBvZiAqKm91dGdvaW5nKiogcHJlc2VydmVkIGRldmljZXMgZm9yIHRoZSBuZXh0IGtlcm5lbC5cbisgKlxuKyAqIEFmdGVyIGtleGVjLCB3aGVuZXZlciBhIGRldmljZSBpcyBlbnVtZXJhdGVkLCB0aGUgUENJIGNvcmUgd2lsbCBjaGVjayBpZiBpdFxuKyAqIGlzIGFuICoqaW5jb21pbmcqKiBwcmVzZXJ2ZWQgZGV2aWNlIChpLmUuIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXMga2VybmVsKVxuKyAqIGJ5IGNoZWNraW5nIHRoZSBpbmNvbWluZyBGTEIgZGF0YSAoc3RydWN0IHBjaV9zZXIpLlxuKyAqXG4rICogRHJpdmVycyBtdXN0IG5vdGlmeSB0aGUgUENJIGNvcmUgd2hlbiBhbiAqKmluY29taW5nKiogZGV2aWNlIGlzIGRvbmVcbisgKiBwYXJ0aWNpcGF0aW5nIGluIHRoZSBpbmNvbWluZyBMaXZlIFVwZGF0ZSB3aXRoIHRoZSBmb2xsb3dpbmcgQVBJOlxuKyAqXG4rICogICogYGBwY2lfbGl2ZXVwZGF0ZV9maW5pc2gocGNpX2RldilgYFxuKyAqXG4rICogVGhlIFBDSSBjb3JlIGRvZXMgbm90IGVuZm9yY2UgYW55IG9yZGVyaW5nIG9mIGBgcGNpX2xpdmV1cGRhdGVfZmluaXNoKClgYCBhbmRcbisgKiBgYHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKClgYC4gaS5lLiBBIFBDSSBkZXZpY2UgY2FuIGJlICoqb3V0Z29pbmcqKlxuKyAqIChwcmVzZXJ2ZWQgZm9yIG5leHQga2VybmVsKSBhbmQgKippbmNvbWluZyoqIChwcmVzZXJ2ZWQgYnkgcHJldmlvdXMga2VybmVsKVxuKyAqIGF0IHRoZSBzYW1lIHRpbWUuXG4rICpcbisgKiBSZXN0cmljdGlvbnNcbisgKiA9PT09PT09PT09PT1cbisgKlxuKyAqIFRoZSBQQ0kgY29yZSBlbmZvcmNlcyB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBvbiB3aGljaCBkZXZpY2VzIGNhbiBiZVxuKyAqIHByZXNlcnZlZC4gVGhlc2UgbWF5IGJlIHJlbGF4ZWQgaW4gdGhlIGZ1dHVyZTpcbisgKlxuKyAqICAqIFRoZSBkZXZpY2UgY2Fubm90IGJlIGEgVmlydHVhbCBGdW5jdGlvbiAoVkYpLlxuKyAqXG4rICogICogVGhlIGRldmljZSBjYW5ub3QgcmVxdWlyZSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIHRvIGVuYWJsZSBBY2Nlc3NcbisgKiAgICBDb250cm9sIFNlcnZpY2VzIChBQ1MpLlxuKyAqXG4rICogRHJpdmVyIEJpbmRpbmdcbisgKiA9PT09PT09PT09PT09PVxuKyAqXG4rICogSW4gdGhlIG91dGdvaW5nIGtlcm5lbCwgaXQgaXMgdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGl0XG4rICogZG9lcyBub3QgcmVsZWFzZSBhIGRldmljZSBiZXR3ZWVuIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgYW5kXG4rICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpLlxuKyAqXG4rICogSW4gdGhlIGluY29taW5nIGtlcm5lbCwgaXQgaXMgdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGl0XG4rICogZG9lcyBub3QgcmVsZWFzZSBhIHByZXNlcnZlZCBkZXZpY2UgYmV0d2VlbiBwcm9iZSgpIGFuZFxuKyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpLlxuKyAqXG4rICogSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBpbmNvbWluZyBwcmVzZXJ2ZWQgZGV2aWNlcyBhcmVcbisgKiBib3VuZCB0byB0aGUgY29ycmVjdCBkcml2ZXIuIGkuZS4gVGhlIFBDSSBjb3JlIGRvZXMgbm90IHByb3RlY3QgYWdhaW5zdCBhXG4rICogZGV2aWNlIGdldHRpbmcgcHJlc2VydmVkIGJ5IGRyaXZlciBBIGluIHRoZSBvdXRnb2luZyBrZXJuZWwgYW5kIHRoZW4gZ2V0dGluZ1xuKyAqIGJvdW5kIHRvIGRyaXZlciBCIGluIHRoZSBpbmNvbWluZyBrZXJuZWwuIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuKyAqXG4rICogQkRGIFN0YWJpbGl0eVxuKyAqID09PT09PT09PT09PT1cbisgKlxuKyAqIFRoZSBQQ0kgY29yZSBndWFyYW50ZWVzIHRoYXQgcHJlc2VydmVkIGRldmljZXMgY2FuIGJlIGlkZW50aWZpZWQgYnkgdGhlIHNhbWVcbisgKiBidXMsIGRldmljZSwgYW5kIGZ1bmN0aW9uIG51bWJlcnMgZm9yIGFzIGxvbmcgYXMgdGhleSBhcmUgcHJlc2VydmVkXG4rICogKGluY2x1ZGluZyBhY3Jvc3Mga2V4ZWMpLiBUbyBhY2NvbXBsaXNoIHRoaXMsIHRoZSBQQ0kgY29yZSBhbHdheXMgaW5oZXJpdHNcbisgKiB0aGUgc2Vjb25kYXJ5IGFuZCBzdWJvcmRpbmF0ZSBidXMgbnVtYmVycyBhc3NpZ25lZCB0byBicmlkZ2VzIGR1cmluZyBzY2FubmluZ1xuKyAqIGlmIGFueSBkZXZpY2UgaXMgcHJlc2VydmVkLiBUaGlzIGlzIHRydWUgZXZlbiBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgYWx3YXlzXG4rICogYXNzaWduIG5ldyBidXMgbnVtYmVycyBkdXJpbmcgc2Nhbm5pbmcuIFRoZSBrZXJuZWwgYXNzdW1lcyB0aGUgcHJldmlvdXNcbisgKiBrZXJuZWwgZXN0YWJsaXNoZWQgYSBzYW5lIGJ1cyB0b3BvbG9neSBhY3Jvc3Mga2V4ZWMuXG4rICpcbisgKiBJZiBhIG1pc2NvbmZpZ3VyZWQgb3IgdW5jb25maWd1cmVkIGJyaWRnZSBpcyBlbmNvdW50ZXJlZCBkdXJpbmcgZW51bWVyYXRpb25cbisgKiB3aGlsZSB0aGVyZSBhcmUgcHJlc2VydmVkIGRldmljZXMsIGl0cyBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlIGJ1cyBudW1iZXJzXG4rICogd2lsbCBiZSBjbGVhcmVkIGFuZCBkZXZpY2VzIGJlbG93IGl0IHdpbGwgbm90IGJlIGVudW1lcmF0ZWQuXG4rICpcbisgKiBQQ0ktdG8tUENJIEJyaWRnZXNcbisgKiA9PT09PT09PT09PT09PT09PT1cbisgKlxuKyAqIEFueSBQQ0ktdG8tUENJIGJyaWRnZXMgdXBzdHJlYW0gb2YgYSBwcmVzZXJ2ZWQgZGV2aWNlIGFyZSBhdXRvbWF0aWNhbGx5XG4rICogcHJlc2VydmVkIHdoZW4gdGhlIGRldmljZSBpcyBwcmVzZXJ2ZWQuIFRoZSBQQ0kgY29yZSBrZWVwcyB0cmFjayBvZiB0aGVcbisgKiBudW1iZXIgb2YgZG93bnN0cmVhbSBkZXZpY2VzIHRoYXQgYXJlIHByZXNlcnZlZCB1bmRlciBhIGJyaWRnZSBzbyB0aGF0IHRoZVxuKyAqIGJyaWRnZSBpcyBvbmx5IHVucHJlc2VydmVkIG9uY2UgYWxsIGRvd25zdHJlYW0gZGV2aWNlcyBhcmUgdW5wcmVzZXJ2ZWQuXG4rICpcbisgKiBUaGlzIGVuYWJsZXMgdGhlIFBDSSBjb3JlIGFuZCBhbnkgZHJpdmVycyBib3VuZCB0byB0aGUgYnJpZGdlIHRvIHBhcnRpY2lwYXRlXG4rICogaW4gdGhlIExpdmUgVXBkYXRlIHNvIHRoYXQgcHJlc2VydmVkIGVuZHBvaW50cyBjYW4gY29udGludWUgaXNzdWluZyBtZW1vcnlcbisgKiB0cmFuc2FjdGlvbnMgZHVyaW5nIHRoZSBMaXZlIFVwZGF0ZS5cbisgKlxuKyAqIEhhbmRsaW5nIFByZXNlcnZlZCBEZXZpY2VzXG4rICogPT09PT09PT09PT09PT09PT09PT09PT09PT1cbisgKlxuKyAqIFRoZSBQQ0kgY29yZSB0cmVhdHMgcHJlc2VydmVkIGRldmljZXMgZGlmZmVyZW50bHkgdGhhbiBub24tcHJlc2VydmVkIGRldmljZXMuXG4rICogVGhpcyBzZWN0aW9uIGVudW1lcmF0ZXMgdGhvc2UgZGlmZmVyZW5jZXMuXG4rICpcbisgKiAgKiBUaGUgUENJIGNvcmUgaW5oZXJpdHMgYWxsIEFDUyBmbGFncyBlbmFibGVkIG9uIGluY29taW5nIHByZXNlcnZlZCBkZXZpY2VzXG4rICogICAgcmF0aGVyIHRoYW4gYXNzaWduaW5nIG5ldyBvbmVzLiBUaGlzIGVuc3VyZXMgdGhhdCBUTFBzIGFyZSByb3V0ZWQgdGhlIHNhbWVcbisgKiAgICB3YXkgYWZ0ZXIgTGl2ZSBVcGRhdGUgYW5kIGVuc3VyZXMgdGhhdCBJT01NVSBncm91cHMgZG8gbm90IGNoYW5nZS4gTm90ZVxuKyAqICAgIHRoYXQgYSBkZXZpY2Ugd2lsbCB1c2UgaXRzIGluaGVyaXRlZCBBQ1MgZmxhZ3MgZm9yIHRoZSBsaWZldGltZSBvZiBpdHNcbisgKiAgICBzdHJ1Y3QgcGNpX2RldiAoaS5lLiBldmVuIGFmdGVyIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpKS5cbisgKlxuKyAqICAqIFRoZSBQQ0kgY29yZSBpbmhlcml0cyBBUkkgRm9yd2FyZGluZyBFbmFibGUgb24gYWxsIGJyaWRnZXMgd2l0aCBkb3duc3RyZWFtXG4rICogICAgcHJlc2VydmVkIGRldmljZXMgdG8gZW5zdXJlIHRoYXQgYWxsIHByZXNlcnZlZCBkZXZpY2VzIG9uIHRoZSBicmlkZ2Unc1xuKyAqICAgIHNlY29uZGFyeSBidXMgYXJlIGFkZHJlc3NhYmxlIGFmdGVyIHRoZSBMaXZlIFVwZGF0ZS5cbisgKlxuKyAqICAqIFRoZSBQQ0kgY29yZSBkb2VzIG5vdCBkaXNhYmxlIGJ1cyBtYXN0ZXJpbmcgb24gb3V0Z29pbmcgcHJlc2VydmVkIGRldmljZXNcbisgKiAgICBkdXJpbmcga2V4ZWMuIFRoaXMgYWxsb3dzIHByZXNlcnZlZCBkZXZpY2VzIHRvIGlzc3VlIG1lbW9yeSB0cmFuc2FjdGlvbnNcbisgKiAgICB0aHJvdWdob3V0IHRoZSBMaXZlIFVwZGF0ZS5cbisgKi9cbitcbisjZGVmaW5lIHByX2ZtdChmbXQpIFwiUENJOiBcIiBLQlVJTERfQkFTRU5BTUUgXCI6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2hvL2FiaS9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpdmV1cGRhdGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9raG9fYmxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwibGl2ZXVwZGF0ZS5oXCJcbisjaW5jbHVkZSBcInBjaS5oXCJcbitcbisvKipcbisgKiBzdHJ1Y3QgcGNpX2xpdmV1cGRhdGVfZ2xvYmFsIC0gR2xvYmFsIHN0YXRlIGZvciBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydFxuKyAqIEByd3NlbTogUmVhZGVyL3dyaXRlciBzZW1hcGhvcmUgdXNlZCB0byBwcm90ZWN0IHRoZSBpbmNvbWluZyBhbmQgb3V0Z29pbmdcbisgKiAgICAgICAgIEZMQnMsIGFuZCB0aGUgcmVmZXJlbmNlcyB0byB0aGVtIGluIHN0cnVjdCBwY2lfZGV2LlxuKyAqL1xuK3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwge1xuK1x0c3RydWN0IHJ3X3NlbWFwaG9yZSByd3NlbTtcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcGNpX2xpdmV1cGRhdGVfZ2xvYmFsIHBjaV9saXZldXBkYXRlID0ge1xuK1x0LnJ3c2VtID0gX19SV1NFTV9JTklUSUFMSVpFUihwY2lfbGl2ZXVwZGF0ZS5yd3NlbSksXG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAtIE91dGdvaW5nIFBDSSBGTEIgb2JqZWN0XG4rICogQHNlcjogUG9pbnRlciB0byB0aGUgcHJlc2VydmVkIHN0cnVjdCBwY2lfc2VyLlxuKyAqIEBibG9ja19zZXQ6IFRoZSBLSE8gYmxvY2sgc2V0IGhvbGRpbmcgdGhlIG91dGdvaW5nIGRldmljZXMuXG4rICpcbisgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgcnVudGltZSBzdGF0ZSBmb3IgdGhlIG91dGdvaW5nIFBDSSBMaXZlIFVwZGF0ZVxuKyAqIHN0YXRlLiBJdCB3cmFwcyB0aGUgc2VyaWFsaXplZCBwY2lfc2VyIGFuZCB0aGUgYmxvY2tfc2V0IHVzZWQgdG8gbWFuYWdlXG4rICogdGhlIHNlcmlhbGl6ZWQgZW50cmllcy5cbisgKi9cbitzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyB7XG4rXHRzdHJ1Y3QgcGNpX3NlciAqc2VyO1xuK1x0c3RydWN0IGtob19ibG9ja19zZXQgYmxvY2tfc2V0O1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBjaV9mbGJfaW5jb21pbmcgLSBJbmNvbWluZyBQQ0kgRkxCIG9iamVjdFxuKyAqIEBzZXI6IFRoZSBpbmNvbWluZyBzdHJ1Y3QgcGNpX3NlciBmcm9tIHRoZSBwcmV2aW91cyBrZXJuZWwuXG4rICogQHhhOiBYYXJyYXkgdXNlZCB0byBxdWlja2x5IGxvb2t1cCBkZXZpY2VzIGluIEBzZXIuXG4rICogQGJsb2NrX3NldDogVGhlIEtITyBibG9jayBzZXQgaG9sZGluZyB0aGUgaW5jb21pbmcgZGV2aWNlcy5cbisgKlxuKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBydW50aW1lIHN0YXRlIGZvciB0aGUgaW5jb21pbmcgUENJIExpdmUgVXBkYXRlXG4rICogc3RhdGUuIEl0IHdyYXBzIHRoZSBzZXJpYWxpemVkIHBjaV9zZXIsIHRoZSBibG9ja19zZXQgdXNlZCB0byByZXN0b3JlXG4rICogdGhlIHNlcmlhbGl6ZWQgZW50cmllcywgYW5kIGFuIHhhcnJheSBmb3IgZmFzdCBsb29rdXBzLlxuKyAqL1xuK3N0cnVjdCBwY2lfZmxiX2luY29taW5nIHtcbitcdHN0cnVjdCBwY2lfc2VyICpzZXI7XG4rXHRzdHJ1Y3QgeGFycmF5IHhhO1xuK1x0c3RydWN0IGtob19ibG9ja19zZXQgYmxvY2tfc2V0O1xuK307XG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcGNpX3Nlcl94YV9rZXkodTMyIGRvbWFpbiwgdTE2IGJkZilcbit7XG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZG9tYWluIFx1MDAzY1x1MDAzYyAxNiB8IGJkZjtcbit9XG4rc3RhdGljIGludCBwY2lfZmxiX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKVxuK3tcbitcdHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZztcbitcdHN0cnVjdCBwY2lfc2VyICpzZXI7XG4rXG4rXHRvdXRnb2luZyA9IGt6YWxsb2Nfb2JqKCpvdXRnb2luZyk7XG4rXHRpZiAoIW91dGdvaW5nKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHNlciA9IGtob19hbGxvY19wcmVzZXJ2ZShzaXplb2YoKnNlcikpO1xuK1x0aWYgKElTX0VSUihzZXIpKSB7XG4rXHRcdGtmcmVlKG91dGdvaW5nKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIoc2VyKTtcbitcdH1cbitcbitcdHNlci1cdTAwM2Vucl9kZXZpY2VzID0gMDtcbitcdHNlci1cdTAwM2VkZXZpY2VzID0gMDtcbitcbitcdG91dGdvaW5nLVx1MDAzZXNlciA9IHNlcjtcbitcdGtob19ibG9ja19zZXRfaW5pdChcdTAwMjZvdXRnb2luZy1cdTAwM2VibG9ja19zZXQsIHNpemVvZihzdHJ1Y3QgcGNpX2Rldl9zZXIpKTtcbitcbitcdGFyZ3MtXHUwMDNlb2JqID0gb3V0Z29pbmc7XG4rXHRhcmdzLVx1MDAzZWRhdGEgPSB2aXJ0X3RvX3BoeXMoc2VyKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBwY2lfZmxiX3VucHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmxiX29wX2FyZ3MgKmFyZ3MpXG4re1xuK1x0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gYXJncy1cdTAwM2VvYmo7XG4rXG4rXHRXQVJOX09OKG91dGdvaW5nLVx1MDAzZXNlci1cdTAwM2Vucl9kZXZpY2VzKTtcbitcdGtob19ibG9ja19zZXRfZGVzdHJveShcdTAwMjZvdXRnb2luZy1cdTAwM2VibG9ja19zZXQpO1xuK1x0a2hvX3VucHJlc2VydmVfZnJlZShvdXRnb2luZy1cdTAwM2VzZXIpO1xuK1x0a2ZyZWUob3V0Z29pbmcpO1xuK1x0cHJfZGVidWcoXCJVbnByZXNlcnZlZCBzdHJ1Y3QgcGNpX3NlclxcblwiKTtcbit9XG4rXG4rc3RhdGljIGludCBwY2lfZmxiX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKVxuK3tcbitcdHN0cnVjdCBwY2lfc2VyICpzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cdTAwM2VkYXRhKTtcbitcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbitcdHN0cnVjdCBwY2lfZGV2X3NlciAqZGV2X3NlcjtcbitcdHN0cnVjdCBraG9fYmxvY2tfc2V0X2l0IGl0O1xuK1x0aW50IHJldCA9IC1FTk9NRU07XG4rXG4rXHRpbmNvbWluZyA9IGt6YWxsb2Nfb2JqKCppbmNvbWluZyk7XG4rXHRpZiAoIWluY29taW5nKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX2ZyZWU7XG4rXG4rXHRpbmNvbWluZy1cdTAwM2VzZXIgPSBzZXI7XG4rXHR4YV9pbml0KFx1MDAyNmluY29taW5nLVx1MDAzZXhhKTtcbitcbitcdGtob19ibG9ja19zZXRfaW5pdChcdTAwMjZpbmNvbWluZy1cdTAwM2VibG9ja19zZXQsIHNpemVvZihzdHJ1Y3QgcGNpX2Rldl9zZXIpKTtcbitcdHJldCA9IGtob19ibG9ja19zZXRfcmVzdG9yZShcdTAwMjZpbmNvbWluZy1cdTAwM2VibG9ja19zZXQsIHNlci1cdTAwM2VkZXZpY2VzKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfaW5jb21pbmc7XG4rXG4rXHRraG9fYmxvY2tfc2V0X2l0X2luaXQoXHUwMDI2aXQsIFx1MDAyNmluY29taW5nLVx1MDAzZWJsb2NrX3NldCk7XG4rXHR3aGlsZSAoKGRldl9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3JlYWRfZW50cnkoXHUwMDI2aXQpKSkge1xuK1x0XHR1bnNpZ25lZCBsb25nIGtleTtcbitcbitcdFx0aWYgKCFkZXZfc2VyLVx1MDAzZXJlZmNvdW50KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRrZXkgPSBwY2lfc2VyX3hhX2tleShkZXZfc2VyLVx1MDAzZWRvbWFpbiwgZGV2X3Nlci1cdTAwM2ViZGYpO1xuK1x0XHRyZXQgPSB4YV9pbnNlcnQoXHUwMDI2aW5jb21pbmctXHUwMDNleGEsIGtleSwgZGV2X3NlciwgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBlcnJfYmxvY2tfc2V0X2Rlc3Ryb3k7XG4rXHR9XG4rXG4rXHRhcmdzLVx1MDAzZW9iaiA9IGluY29taW5nO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2Jsb2NrX3NldF9kZXN0cm95OlxuK1x0a2hvX2Jsb2NrX3NldF9kZXN0cm95KFx1MDAyNmluY29taW5nLVx1MDAzZWJsb2NrX3NldCk7XG4rZXJyX2ZyZWVfaW5jb21pbmc6XG4rXHR4YV9kZXN0cm95KFx1MDAyNmluY29taW5nLVx1MDAzZXhhKTtcbitcdGtmcmVlKGluY29taW5nKTtcbitlcnJfcmVzdG9yZV9mcmVlOlxuK1x0a2hvX3Jlc3RvcmVfZnJlZShzZXIpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGNpX2ZsYl9maW5pc2goc3RydWN0IGxpdmV1cGRhdGVfZmxiX29wX2FyZ3MgKmFyZ3MpXG4re1xuK1x0c3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKmluY29taW5nID0gYXJncy1cdTAwM2VvYmo7XG4rXG4rXHR4YV9kZXN0cm95KFx1MDAyNmluY29taW5nLVx1MDAzZXhhKTtcbitcdGtob19ibG9ja19zZXRfZGVzdHJveShcdTAwMjZpbmNvbWluZy1cdTAwM2VibG9ja19zZXQpO1xuK1x0a2hvX3Jlc3RvcmVfZnJlZShpbmNvbWluZy1cdTAwM2VzZXIpO1xuK1x0a2ZyZWUoaW5jb21pbmcpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGxpdmV1cGRhdGVfZmxiX29wcyBwY2lfbGl2ZXVwZGF0ZV9mbGJfb3BzID0ge1xuK1x0LnByZXNlcnZlID0gcGNpX2ZsYl9wcmVzZXJ2ZSxcbitcdC51bnByZXNlcnZlID0gcGNpX2ZsYl91bnByZXNlcnZlLFxuK1x0LnJldHJpZXZlID0gcGNpX2ZsYl9yZXRyaWV2ZSxcbitcdC5maW5pc2ggPSBwY2lfZmxiX2ZpbmlzaCxcbitcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuK307XG4rXG4rc3RhdGljIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiBwY2lfbGl2ZXVwZGF0ZV9mbGIgPSB7XG4rXHQub3BzID0gXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiX29wcyxcbitcdC5jb21wYXRpYmxlID0gUENJX0xVT19GTEJfQ09NUEFUSUJMRSxcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZyh2b2lkKVxuK3tcbitcdHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZyA9IE5VTEw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gbGl2ZXVwZGF0ZV9mbGJfZ2V0X291dGdvaW5nKFx1MDAyNnBjaV9saXZldXBkYXRlX2ZsYiwgKHZvaWQgKiopXHUwMDI2b3V0Z29pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdGlmICghb3V0Z29pbmcpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0cmV0dXJuIG91dGdvaW5nO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHBjaV9kZXZfc2VyICpwY2lfZ2V0X2VtcHR5X29yX2FwcGVuZChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcpXG4re1xuK1x0c3RydWN0IHBjaV9kZXZfc2VyICpkZXZfc2VyLCAqZm91bmQgPSBOVUxMO1xuK1x0c3RydWN0IGtob19ibG9ja19zZXRfaXQgaXQ7XG4rXHRpbnQgZXJyO1xuK1x0dTMyIGNvdW50ID0gMDtcbitcbitcdGtob19ibG9ja19zZXRfaXRfaW5pdChcdTAwMjZpdCwgXHUwMDI2b3V0Z29pbmctXHUwMDNlYmxvY2tfc2V0KTtcbitcdHdoaWxlICgoZGV2X3NlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeShcdTAwMjZpdCkpKSB7XG4rXHRcdGNvdW50Kys7XG4rXHRcdGlmIChkZXZfc2VyLVx1MDAzZXJlZmNvdW50ID09IDAgXHUwMDI2XHUwMDI2ICFmb3VuZClcbitcdFx0XHRmb3VuZCA9IGRldl9zZXI7XG4rXHR9XG4rXG4rXHRpZiAoZm91bmQpXG4rXHRcdHJldHVybiBmb3VuZDtcbitcbitcdGVyciA9IGtob19ibG9ja19zZXRfZ3JvdyhcdTAwMjZvdXRnb2luZy1cdTAwM2VibG9ja19zZXQsIGNvdW50ICsgMSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1xuK1x0aWYgKGNvdW50ID09IDApXG4rXHRcdGtob19ibG9ja19zZXRfaXRfaW5pdChcdTAwMjZpdCwgXHUwMDI2b3V0Z29pbmctXHUwMDNlYmxvY2tfc2V0KTtcbitcbitcdGRldl9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3Jlc2VydmVfZW50cnkoXHUwMDI2aXQpO1xuK1x0aWYgKCFkZXZfc2VyKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbitcbitcdHJldHVybiBkZXZfc2VyO1xuK31cbitcbitzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX3VucHJlc2VydmVfZGV2aWNlKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywgc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXIgPSBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZztcbitcbitcdGlmIChkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5mcm96ZW4pIHtcbitcdFx0cGNpX3dhcm4oZGV2LCBcIkNhbm5vdCB1bnByZXNlcnZlIGRldmljZSBhZnRlciBpdCBpcyBmcm96ZW4hXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmICghZGV2X3Nlcikge1xuK1x0XHRwY2lfd2FybihkZXYsIFwiQ2Fubm90IHVucHJlc2VydmUgZGV2aWNlIHRoYXQgaXMgbm90IHByZXNlcnZlZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoIWRldl9zZXItXHUwMDNlcmVmY291bnQpIHtcbitcdFx0cGNpX1dBUk4oZGV2LCAxLCBcIlByZXNlcnZlZCBkZXZpY2UgaGFzIGEgMCByZWZjb3VudCFcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKC0tZGV2X3Nlci1cdTAwM2VyZWZjb3VudClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwY2lfaW5mbyhkZXYsIFwiRGV2aWNlIHdpbGwgbm8gbG9uZ2VyIGJlIHByZXNlcnZlZCBhY3Jvc3MgbmV4dCBMaXZlIFVwZGF0ZVxcblwiKTtcbitcdG91dGdvaW5nLVx1MDAzZXNlci1cdTAwM2Vucl9kZXZpY2VzLS07XG4rXHRtZW1zZXQoZGV2X3NlciwgMCwgc2l6ZW9mKCpkZXZfc2VyKSk7XG4rXHRkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZyA9IE5VTEw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2VfYWdhaW4oc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRpZiAoIWRldi1cdTAwM2VsaXZldXBkYXRlLm91dGdvaW5nLVx1MDAzZXJlZmNvdW50KSB7XG4rXHRcdHBjaV9XQVJOKGRldiwgMSwgXCJQcmVzZXJ2ZWQgZGV2aWNlIHdpdGggMCByZWZjb3VudCFcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEVuZHBvaW50IGRldmljZXMgc2hvdWxkIG5vdCBiZSBwcmVzZXJ2ZWQgbW9yZSB0aGFuIG9uY2UuIEJyaWRnZXMgYXJlXG4rXHQgKiBwcmVzZXJ2ZWQgb25jZSBmb3IgZXZlcnkgZG93bnN0cmVhbSBkZXZpY2UgdGhhdCBpcyBwcmVzZXJ2ZWQuXG4rXHQgKi9cbitcdGlmICghZGV2LVx1MDAzZXN1Ym9yZGluYXRlKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0ZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmctXHUwMDNlcmVmY291bnQrKztcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IF9fcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfZGV2aWNlKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywgc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXI7XG4rXG4rXHQvKlxuK1x0ICogRG8gbm90IHByZXNlcnZlIGRldmljZXMgdGhhdCByZWx5IG9uIGRldmljZS1zcGVjaWZpYyBBQ1MgZXF1aXZhbGVudHNcbitcdCAqIChmb3Igbm93KSBzaW5jZSB0aGF0IHdvdWxkIGNvbXBsaWNhdGUga2VlcGluZyBBQ1MgY29uc3RhbnQgYWNyb3NzXG4rXHQgKiBMaXZlIFVwZGF0ZS5cbitcdCAqL1xuK1x0aWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHtcbitcdFx0cGNpX3dhcm4oZGV2LCBcIlJlZnVzaW5nIHRvIHByZXNlcnZlIGRldmljZSB0aGF0IHJlbGllcyBvbiBBQ1MgcXVpcmtzXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGRldl9zZXIgPSBwY2lfZ2V0X2VtcHR5X29yX2FwcGVuZChvdXRnb2luZyk7XG4rXHRpZiAoSVNfRVJSKGRldl9zZXIpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihkZXZfc2VyKTtcbitcbitcdHBjaV9pbmZvKGRldiwgXCJEZXZpY2Ugd2lsbCBiZSBwcmVzZXJ2ZWQgYWNyb3NzIG5leHQgTGl2ZSBVcGRhdGVcXG5cIik7XG4rXHRvdXRnb2luZy1cdTAwM2VzZXItXHUwMDNlbnJfZGV2aWNlcysrO1xuK1x0b3V0Z29pbmctXHUwMDNlc2VyLVx1MDAzZWRldmljZXMgPSBraG9fYmxvY2tfc2V0X2hlYWRfcGEoXHUwMDI2b3V0Z29pbmctXHUwMDNlYmxvY2tfc2V0KTtcbitcbitcdGRldl9zZXItXHUwMDNlZG9tYWluID0gcGNpX2RvbWFpbl9ucihkZXYtXHUwMDNlYnVzKTtcbitcdGRldl9zZXItXHUwMDNlYmRmID0gcGNpX2Rldl9pZChkZXYpO1xuK1x0ZGV2X3Nlci1cdTAwM2VyZWZjb3VudCA9IDE7XG4rXG4rXHRkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZyA9IGRldl9zZXI7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2Uoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdGlmIChkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5mcm96ZW4pIHtcbitcdFx0cGNpX3dhcm4oZGV2LCBcIkNhbm5vdCBwcmVzZXJ2ZSBkZXZpY2UgYWZ0ZXIgaXQgaXMgZnJvemVuIVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmcpXG4rXHRcdHJldHVybiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2VfYWdhaW4oZGV2KTtcbitcbitcdHJldHVybiBfX3BjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZShvdXRnb2luZywgZGV2KTtcbit9XG4rXG4rI2RlZmluZSBmb3JfZWFjaF9wY2lfZGV2X2luX3BhdGgoX2QsIF9zdGFydCwgX2VuZCkgXFxcbitcdGZvciAoKF9kKSA9IChfc3RhcnQpOyAoX2QpICE9IChfZW5kKTsgKF9kKSA9IChfZCktXHUwMDNlYnVzLVx1MDAzZXNlbGYpXG4rXG4rc3RhdGljIHZvaWQgX19wY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX3BhdGgoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBwY2lfZGV2ICpzdGFydCxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGNpX2RldiAqZW5kKVxuK3tcbitcdHN0cnVjdCBwY2lfZGV2ICpkZXY7XG4rXG4rXHRmb3JfZWFjaF9wY2lfZGV2X2luX3BhdGgoZGV2LCBzdGFydCwgZW5kKSB7XG4rXHRcdGlmIChwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX2RldmljZShvdXRnb2luZywgZGV2KSlcbitcdFx0XHRyZXR1cm47XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBwY2lfZGV2ICpzdGFydClcbit7XG4rXHRfX3BjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChvdXRnb2luZywgc3RhcnQsIC8qZW5kPSovTlVMTCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfcGF0aChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsXG4rXHRcdFx0XHRcdHN0cnVjdCBwY2lfZGV2ICpzdGFydClcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqZGV2O1xuK1x0aW50IHJldDtcbitcbitcdGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7XG4rXHRcdHJldCA9IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZShvdXRnb2luZywgZGV2KTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdF9fcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBzdGFydCwgZGV2KTtcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSAtIFByZXNlcnZlIGEgUENJIGRldmljZSBhY3Jvc3MgTGl2ZSBVcGRhdGVcbisgKiBAZGV2OiBUaGUgUENJIGRldmljZSB0byBwcmVzZXJ2ZS5cbisgKlxuKyAqIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgbm90aWZpZXMgdGhlIFBDSSBjb3JlIHRoYXQgYSBQQ0kgZGV2aWNlIHNob3VsZCBiZVxuKyAqIHByZXNlcnZlZCBhY3Jvc3MgdGhlIG5leHQgTGl2ZSBVcGRhdGUuIERyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIGNhbGxcbisgKiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSgpIGZyb20gdGhlaXIgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyXG4rICogcHJlc2VydmUoKSBjYWxsYmFjayB0byBlbnN1cmUgdGhlIG91dGdvaW5nIHN0cnVjdCBwY2lfc2VyIGlzIGFscmVhZHkgc2V0IHVwLlxuKyAqXG4rICogcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSBhdXRvbWF0aWNhbGx5IHByZXNlcnZlcyBhbGwgYnJpZGdlcyB1cHN0cmVhbSBvZlxuKyAqIEBkZXYuXG4rICpcbisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcgPSBOVUxMO1xuK1xuK1x0aWYgKGRldi1cdTAwM2Vpc192aXJ0Zm4pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbitcbitcdG91dGdvaW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZygpO1xuK1x0aWYgKElTX0VSUihvdXRnb2luZykpXG4rXHRcdHJldHVybiBQVFJfRVJSKG91dGdvaW5nKTtcbitcbitcdHJldHVybiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBkZXYpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSk7XG4rXG4rLyoqXG4rICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpIC0gQ2FuY2VsIHByZXNlcnZhdGlvbiBvZiBhIFBDSSBkZXZpY2VcbisgKiBAZGV2OiBUaGUgUENJIGRldmljZSB0byB1bnByZXNlcnZlLlxuKyAqXG4rICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpIG5vdGlmaWVzIHRoZSBQQ0kgY29yZSB0aGF0IGEgUENJIGRldmljZSBzaG91bGQgbm9cbisgKiBsb25nZXIgYmUgcHJlc2VydmVkIGFjcm9zcyB0aGUgbmV4dCBMaXZlIFVwZGF0ZS4gRHJpdmVycyBhcmUgZXhwZWN0ZWQgdG8gY2FsbFxuKyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSBmcm9tIHRoZWlyIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlclxuKyAqIHVucHJlc2VydmUoKSBjYWxsYmFjayB0byBlbnN1cmUgdGhlIG91dGdvaW5nIHN0cnVjdCBwY2lfc2VyIGlzIGFscmVhZHkgc2V0XG4rICogdXAuXG4rICpcbisgKiBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKCkgYXV0b21hdGljYWxseSB1bnByZXNlcnZlcyBhbGwgYnJpZGdlcyB1cHN0cmVhbSBvZlxuKyAqIEBkZXYuXG4rICovXG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDtcbitcbitcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7XG4rXG4rXHRvdXRnb2luZyA9IHBjaV9saXZldXBkYXRlX2ZsYl9nZXRfb3V0Z29pbmcoKTtcbitcdGlmIChJU19FUlIob3V0Z29pbmcpKSB7XG4rXHRcdHBjaV93YXJuKGRldiwgXCJDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2Ugd2l0aG91dCBvdXRnb2luZyBMaXZlIFVwZGF0ZSBzdGF0ZVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBkZXYpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKTtcbitcbitzdGF0aWMgc3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKnBjaV9saXZldXBkYXRlX2ZsYl9nZXRfaW5jb21pbmcodm9pZClcbit7XG4rXHRzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAqaW5jb21pbmcgPSBOVUxMO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGxpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZyhcdTAwMjZwY2lfbGl2ZXVwZGF0ZV9mbGIsICh2b2lkICoqKVx1MDAyNmluY29taW5nKTtcbitcbitcdC8qIExpdmUgVXBkYXRlIGlzIG5vdCBlbmFibGVkLiAqL1xuK1x0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHQvKiBMaXZlIFVwZGF0ZSBpcyBlbmFibGVkLCBidXQgdGhlcmUgaXMgbm8gaW5jb21pbmcgRkxCIGRhdGEuICovXG4rXHRpZiAocmV0ID09IC1FTk9EQVRBKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdC8qXG4rXHQgKiBMaXZlIFVwZGF0ZSBpcyBlbmFibGVkIGFuZCB0aGVyZSBpcyBpbmNvbWluZyBGTEIgZGF0YSwgYnV0IG5vbmUgb2YgaXRcbitcdCAqIG1hdGNoZXMgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGUuXG4rXHQgKlxuK1x0ICogVGhpcyBjb3VsZCBtZWFuIHRoYXQgbm8gUENJIEZMQiBkYXRhIHdhcyBwYXNzZWQgYnkgdGhlIHByZXZpb3VzXG4rXHQgKiBrZXJuZWwsIGJ1dCBpdCBjb3VsZCBhbHNvIG1lYW4gdGhlIHByZXZpb3VzIGtlcm5lbCB1c2VkIGEgZGlmZmVyZW50XG4rXHQgKiBjb21wYXRpYmlsaXR5IHN0cmluZyAoaS5lLiBhIGRpZmZlcmVudCBBQkkpLlxuK1x0ICovXG4rXHRpZiAocmV0ID09IC1FTk9FTlQpIHtcbitcdFx0cHJfaW5mb19vbmNlKFwiTm8gaW5jb21pbmcgRkxCIG1hdGNoZWQgJXNcXG5cIiwgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGUpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGVyZSBpcyBpbmNvbWluZyBGTEIgZGF0YSB0aGF0IG1hdGNoZXMgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGVcbitcdCAqIGJ1dCBpdCBjYW5ub3QgYmUgcmV0cmlldmVkLlxuK1x0ICovXG4rXHRpZiAocmV0KVxuK1x0XHRwYW5pYyhcIkZhaWxlZCB0byByZXRyaWV2ZSBpbmNvbWluZyBGTEIgZGF0YSAoJWQpXFxuXCIsIHJldCk7XG4rXG4rXHRyZXR1cm4gaW5jb21pbmc7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcodm9pZClcbit7XG4rXHRsaXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiKTtcbit9XG4rXG4rLyoqXG4rICogcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oKSAtIERldGVybWluZSBpZiBhIGJyaWRnZSBzaG91bGQgaW5oZXJpdCBidXMgbnVtYmVyc1xuKyAqIEBidXM6IFRoZSBwYXJlbnQgYnVzIG9mIHRoZSBicmlkZ2UuXG4rICogQGRldjogVGhlIFBDSSBicmlkZ2UgZGV2aWNlLlxuKyAqIEBwYXNzOiBUaGUgc2NhbiBwYXNzICgwIGZvciBmaXJzdCBwYXNzLCAxIGZvciBzZWNvbmQgcGFzcykuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUENJIGNvcmUgd2hlbiBpdCBiZWdpbnMgc2Nhbm5pbmcgYSBicmlkZ2UuXG4rICogSXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBicmlkZ2Ugc2hvdWxkIGluaGVyaXQgdGhlIHNlY29uZGFyeSBhbmQgc3Vib3JkaW5hdGVcbisgKiBidXMgbnVtYmVycyBhc3NpZ25lZCB0byBpdCBieSB0aGUgcHJldmlvdXMga2VybmVsLiBUaGlzIGlzIG5lY2Vzc2FyeSB0b1xuKyAqIGtlZXAgYnVzIG51bWJlcnMgY29uc3RhbnQgZm9yIHByZXNlcnZlZCBkZXZpY2VzIGRvd25zdHJlYW0gb2YgdGhlIGJyaWRnZS5cbisgKlxuKyAqIFJldHVybjogVHJ1ZSBpZiBidXMgbnVtYmVycyBzaG91bGQgYmUgaW5oZXJpdGVkLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rYm9vbCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuK1x0XHRcdFx0ICAgICAgaW50IHBhc3MpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IGJ1cy1cdTAwM2VzZWxmO1xuK1xuK1x0LypcbitcdCAqIE9uIHRoZSBzZWNvbmQgcGFzcywgcmV1c2UgdGhlIHZhbHVlIHRoYXQgd2FzIHNldCBvbiB0aGUgZmlyc3QgcGFzc1xuK1x0ICogc28gdGhhdCB0aGUgcGFzc2VzIGFyZSBjb25zaXN0ZW50IHdpdGggb25lIGFub3RoZXIuXG4rXHQgKi9cbitcdGlmIChwYXNzKVxuK1x0XHRyZXR1cm4gZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcztcbitcbitcdC8qXG4rXHQgKiBJZiB0aGUgcGFyZW50IGJyaWRnZSBpcyBiZWluZyBmb3JjZWQgdG8gaW5oZXJpdCBpdHMgYnVzIG51bWJlcnNcbitcdCAqIGR1cmluZyB0aGlzIHNjYW4gdGhlbiB0aGlzIGJyaWRnZSBtdXN0IGFzIHdlbGwsIG90aGVyd2lzZSB0aGUgUENJXG4rXHQgKiBjb3JlIGNvdWxkIGV4cGFuZCB0aGlzIGJyaWRnZSdzIHJlc2VydmF0aW9uIGJleW9uZCBpdHMgcGFyZW50ICh3aGljaFxuK1x0ICogY2Fubm90IGV4cGFuZCkuXG4rXHQgKi9cbitcdGlmIChwYXJlbnQgXHUwMDI2XHUwMDI2IHBhcmVudC1cdTAwM2VsaXZldXBkYXRlLmluaGVyaXRfYnVzZXMpIHtcbitcdFx0ZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9IHRydWU7XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGFueSBpbmNvbWluZyBwcmVzZXJ2ZWQgZGV2aWNlcywgZm9yY2UgdGhlXG4rXHQgKiBidXMgbnVtYmVycyB0byBiZSBpbmhlcml0ZWQgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIGJ1cyBudW1iZXJzXG4rXHQgKiBhc3NpZ25lZCB0byB0aG9zZSBkZXZpY2VzIGR1cmluZyBlbnVtZXJhdGlvbi5cbitcdCAqXG4rXHQgKiBUbyBrZWVwIHRoaW5ncyBzaW1wbGUsIGluaGVyaXQgYnVzIG51bWJlcnMgb24gYWxsIGJyaWRnZXMgaWYgYW55IFBDSVxuK1x0ICogZGV2aWNlcyBhcmUgaW5jb21pbmcsIHRvIGVuc3VyZSB0aGF0IG5vIGJyaWRnZSdzIHJlc2VydmF0aW9uIGlzXG4rXHQgKiBleHBhbmRlZCB0byBvdmVybGFwIHdpdGggYSBwcmVzZXJ2ZWQgZGV2aWNlIGRvd25zdHJlYW0gb2YgYSBkaWZmZXJlbnRcbitcdCAqIGJyaWRnZS5cbitcdCAqL1xuK1x0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKSB7XG4rXHRcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbitcbitcdFx0aW5jb21pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKCk7XG4rXHRcdGlmICghaW5jb21pbmcpIHtcbitcdFx0XHRkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmhlcml0X2J1c2VzID0gZmFsc2U7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEl0IGlzIHNhZmUgdG8gc2FtcGxlIGluY29taW5nLVx1MDAzZXNlci1cdTAwM2Vucl9kZXZpY2VzIGFuZCB0aGVuXG4rXHRcdCAqIGRyb3AgdGhlIHJ3c2VtIHNpbmNlIG5yX2RldmljZXMgd2lsbCBvbmx5IGRlY3JlYXNlLiBUaHVzIHRoZVxuK1x0XHQgKiBvbmx5IFwicmFjZVwiIGlzIHRoYXQgdGhlIGN1cnJlbnQgc2NhbiB3aWxsIGJlIG92ZXJseVxuK1x0XHQgKiBjb25zZXJ2YXRpdmUgYW5kIGZvcmNlIGJ1cyBpbmhlcml0YW5jZS5cbitcdFx0ICovXG4rXHRcdGRldi1cdTAwM2VsaXZldXBkYXRlLmluaGVyaXRfYnVzZXMgPSAhIWluY29taW5nLVx1MDAzZXNlci1cdTAwM2Vucl9kZXZpY2VzO1xuK1x0XHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcztcbit9XG4rXG4rLyoqXG4rICogcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kKCkgLSBGaW5pc2ggc2Nhbm5pbmcgYSBQQ0kgYnJpZGdlXG4rICogQGRldjogVGhlIFBDSSBicmlkZ2UgZGV2aWNlLlxuKyAqIEBwYXNzOiBUaGUgc2NhbiBwYXNzICgwIGZvciBmaXJzdCBwYXNzLCAxIGZvciBzZWNvbmQgcGFzcykuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUENJIGNvcmUgd2hlbiBpdCBmaW5pc2hlcyBzY2FubmluZyBhIGJyaWRnZS5cbisgKiBJdCBjbGVhcnMgdGhlIGluaGVyaXRhbmNlIHN0YXR1cyBhZnRlciB0aGUgc2Vjb25kIHBhc3Mgc28gaXQgY2FuIGJlXG4rICogcmUtZXZhbHVhdGVkIG9uIGZ1dHVyZSBzY2Fucy5cbisgKi9cbit2b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcylcbit7XG4rXHQvKlxuK1x0ICogQ2xlYXIgaW5oZXJpdF9idXNlcyBhZnRlciB0aGUgc2Vjb25kIHBhc3Mgc28gaXQgY2FuIGJlIHJlLWV2YWx1YXRlZFxuK1x0ICogb24gZnV0dXJlIHNjYW5zLlxuK1x0ICovXG4rXHRpZiAocGFzcylcbitcdFx0ZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9IGZhbHNlO1xuK31cbitcbit2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbitcdHN0cnVjdCBwY2lfZGV2X3NlciAqZGV2X3NlcjtcbitcdHVuc2lnbmVkIGxvbmcga2V5O1xuK1xuK1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbitcbitcdGluY29taW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZygpO1xuK1x0aWYgKCFpbmNvbWluZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0a2V5ID0gcGNpX3Nlcl94YV9rZXkocGNpX2RvbWFpbl9ucihkZXYtXHUwMDNlYnVzKSwgcGNpX2Rldl9pZChkZXYpKTtcbitcdGRldl9zZXIgPSB4YV9sb2FkKFx1MDAyNmluY29taW5nLVx1MDAzZXhhLCBrZXkpO1xuK1xuK1x0LypcbitcdCAqIFRoaXMgZGV2aWNlIHdhcyBub3QgcHJlc2VydmVkIGFjcm9zcyBMaXZlIFVwZGF0ZSwgb3IgaXQgd2FzIHByZXNlcnZlZFxuK1x0ICogYnV0IGhhcyBhbHJlYWR5IGJlZW4gcHJvYmVkIGFuZCBnb25lIHRocm91Z2ggcGNpX2xpdmV1cGRhdGVfZmluaXNoKCksXG4rXHQgKiBlLmcuIGR1ZSB0byByZW1vdmluZyBhbmQgcmUtYWRkaW5nIHRoZSBkZXZpY2UuIEVpdGhlciB3YXksIGl0J3Mgbm90XG4rXHQgKiB0cmVhdGVkIGFzIGluY29taW5nLXByZXNlcnZlZC5cbitcdCAqL1xuK1x0aWYgKCFkZXZfc2VyIHx8ICFkZXZfc2VyLVx1MDAzZXJlZmNvdW50KSB7XG4rXHRcdHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1xuK1x0cGNpX2luZm8oZGV2LCBcIkRldmljZSB3YXMgcHJlc2VydmVkIGJ5IHByZXZpb3VzIGtlcm5lbCBhY3Jvc3MgTGl2ZSBVcGRhdGVcXG5cIik7XG4rXHRkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZyA9IGRldl9zZXI7XG4rXHRkZXYtXHUwMDNlbGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkID0gdHJ1ZTtcbitcbitcdC8qXG4rXHQgKiBIb2xkIHRoZSByZWYgb24gdGhlIGluY29taW5nIEZMQiB1bnRpbCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSBzb1xuK1x0ICogdGhhdCBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZyBjYW5ub3QgZ2V0IGZyZWVkIHdoaWxlIHRoZSBQQ0kgY29yZVxuK1x0ICogaGFzIGEgcG9pbnRlciB0byBpdC4gSXQncyBiZXR0ZXIgdG8gbGVhayB0aGUgaW5jb21pbmcgRkxCIHRoYW4gZG8gYVxuK1x0ICogdXNlLWFmdGVyLWZyZWUgaWYgZHJpdmVyIGRvZXMgbm90IGNhbGwgcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkuXG4rXHQgKi9cbit9XG4rXG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdC8qXG4rXHQgKiBJdCBzaG91bGQgYmUgc2FmZSB0byBSRUFEX09OQ0UoKSBvdXRzaWRlIG9mIHRoZSByd3NlbSBkdXJpbmcgY2xlYW51cFxuK1x0ICogc2luY2UgdGhlcmUgc2hvdWxkIG5vIGxvbmdlciBiZSBhbnkgcmVmZXJlbmNlcyB0byBAZGV2IG9uIHRoZSBzeXN0ZW0uXG4rXHQgKlxuK1x0ICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIHByYWN0aWNlLiBEcml2ZXJzIHNob3VsZCBibG9jayByZW1vdmFsXG4rXHQgKiB3aGlsZSBhIGRldmljZSBpcyBwcmVzZXJ2ZWQuXG4rXHQgKi9cbitcdGlmIChSRUFEX09OQ0UoZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmcpKVxuK1x0XHRwY2lfV0FSTihkZXYsIDEsIFwiRGVzdHJveWluZyBvdXRnb2luZy1wcmVzZXJ2ZWQgZGV2aWNlIVxcblwiKTtcbitcbitcdGlmIChSRUFEX09OQ0UoZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcpKSB7XG4rXHRcdHBjaV9XQVJOKGRldiwgMSwgXCJEZXN0cm95aW5nIGluY29taW5nLXByZXNlcnZlZCBkZXZpY2UhXFxuXCIpO1xuK1x0XHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XG4rXHR9XG4rfVxuK1xuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbitcdGRldi1cdTAwM2VsaXZldXBkYXRlLmZyb3plbiA9IDE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfZmluaXNoX2RldmljZShzdHJ1Y3QgcGNpX3NlciAqc2VyLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdGlmICghZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcpIHtcbitcdFx0cGNpX3dhcm4oZGV2LCBcIkNhbm5vdCBmaW5pc2ggcHJlc2VydmluZyBhbiB1bnByZXNlcnZlZCBkZXZpY2VcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZy1cdTAwM2VyZWZjb3VudCkge1xuK1x0XHRwY2lfV0FSTihkZXYsIDEsIFwiUHJlc2VydmVkIGRldmljZSBoYXMgYSAwIHJlZmNvdW50IVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRGVjcmVtZW50IHRoZSByZWZjb3VudCBzbyB0aGlzIGRldmljZSBkb2VzIG5vdCBnZXQgdHJlYXRlZCBhcyBhblxuK1x0ICogaW5jb21pbmcgZGV2aWNlIGFnYWluLCBlLmcuIGluIGNhc2UgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKClcbitcdCAqIGdldHMgY2FsbGVkIGFnYWluIGJlY2F1c2UgdGhlIGRldmljZSBpcyBob3QtcGx1Z2dlZC5cbitcdCAqL1xuK1x0aWYgKC0tZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmctXHUwMDNlcmVmY291bnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGNpX2luZm8oZGV2LCBcIkRldmljZSBpcyBmaW5pc2hlZCBwYXJ0aWNpcGF0aW5nIGluIExpdmUgVXBkYXRlXFxuXCIpO1xuK1x0ZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcgPSBOVUxMO1xuK1x0c2VyLVx1MDAzZW5yX2RldmljZXMtLTtcbitcdHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2hfcGF0aChzdHJ1Y3QgcGNpX3NlciAqc2VyLCBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKmRldjtcbitcbitcdGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7XG4rXHRcdGlmIChwY2lfbGl2ZXVwZGF0ZV9maW5pc2hfZGV2aWNlKHNlciwgZGV2KSlcbitcdFx0XHRyZXR1cm47XG4rXHR9XG4rfVxuK1xuKy8qKlxuKyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIC0gRmluaXNoIHRoZSBwcmVzZXJ2YXRpb24gb2YgYSBQQ0kgZGV2aWNlXG4rICogQGRldjogVGhlIFBDSSBkZXZpY2VcbisgKlxuKyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIG5vdGlmaWVzIHRoZSBQQ0kgY29yZSB0aGF0IGEgUENJIGRldmljZSB0aGF0IHdhc1xuKyAqIHByZXNlcnZlZCBhY3Jvc3MgdGhlIHByZXZpb3VzIExpdmUgVXBkYXRlIGhhcyBmaW5pc2hlZCBwYXJ0aWNpcGF0aW5nIGluIExpdmVcbisgKiBVcGRhdGUuIERyaXZlcnMgbXVzdCBjYWxsIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIGZyb20gdGhlaXIgc3RydWN0XG4rICogbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgZmluaXNoKCkgY2FsbGJhY2sgdG8gZW5zdXJlIHRoZSBpbmNvbWluZyBzdHJ1Y3RcbisgKiBwY2lfc2VyIGlzIGFsbG9jYXRlZC5cbisgKlxuKyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIGF1dG9tYXRpY2FsbHkgZmluaXNoZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2YgQGRldi5cbisgKi9cbit2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbitcbitcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7XG4rXG4rXHRpbmNvbWluZyA9IHBjaV9saXZldXBkYXRlX2ZsYl9nZXRfaW5jb21pbmcoKTtcbitcdGlmICghaW5jb21pbmcpIHtcbitcdFx0cGNpX3dhcm4oZGV2LCBcIkNhbm5vdCBmaW5pc2ggcHJlc2VydmluZyBkZXZpY2Ugd2l0aG91dCBpbmNvbWluZyBGTEJcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHBjaV9saXZldXBkYXRlX2ZpbmlzaF9wYXRoKGluY29taW5nLVx1MDAzZXNlciwgZGV2KTtcbitcdHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfZmluaXNoKTtcbitcbit2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlYWNzX2NhcCB8fCAhZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcpXG4rXHRcdHJldHVybjtcbitcbitcdHBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZGV2LVx1MDAzZWFjc19jYXAgKyBQQ0lfQUNTX0NUUkwsIFx1MDAyNmRldi1cdTAwM2VsaXZldXBkYXRlLmFjc19jdHJsKTtcbit9XG4rXG4raW50IHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHR1MTYgYWNzX2N0cmwgPSBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5hY3NfY3RybDtcbitcdHUxNiBhY3NfY2FwID0gZGV2LVx1MDAzZWFjc19jYXA7XG4rXG4rXHQvKlxuK1x0ICogVXNlIGxpdmV1cGRhdGUud2FzX3ByZXNlcnZlZCBpbnN0ZWFkIG9mIGxpdmV1cGRhdGUuaW5jb21pbmcgc2luY2UgdGhlXG4rXHQgKiBkZXZpY2UncyBBQ1MgY29udHJvbHMgc2hvdWxkIG5vdCBjaGFuZ2UgZXZlbiBhZnRlciB0aGUgZGV2aWNlIGlzXG4rXHQgKiBmaW5pc2hlZCBwYXJ0aWNpcGF0aW5nIGluIHRoZSBMaXZlIFVwZGF0ZS5cbitcdCAqL1xuK1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qXG4rXHQgKiBUaGUgcHJldmlvdXMga2VybmVsIHNob3VsZCBub3QgaGF2ZSBwcmVzZXJ2ZWQgYW55IGRldmljZXMgdGhhdFxuK1x0ICogcmVxdWlyZSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIHRvIGVuYWJsZSBBQ1MsIGJ1dCBpZiBzdWNoIGEgZGV2aWNlIGlzXG4rXHQgKiBkZXRlY3RlZCAoZS5nLiBuZXcgZGV2aWNlLXNwZWNpZmljIEFDUyBxdWlyayBpbiB0aGUgY3VycmVudCBrZXJuZWwpLFxuK1x0ICogbG9nIGEgYmlnIHdhcm5pbmcgYW5kIGZhbGwgYmFjayB0byB0aGUgbm9ybWFsIGVuYWJsZSBBQ1MgcGF0aC5cbitcdCAqL1xuK1x0aWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHtcbitcdFx0cGNpX3dhcm4oZGV2LCBcIkRldmljZS1zcGVjaWZpYyBxdWlyayByZXF1aXJlZCB0byBlbmFibGUgQUNTIVxcblwiKTtcbitcdFx0V0FSTl9PTl9PTkNFKHRydWUpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChhY3NfY2FwKVxuK1x0XHRwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBhY3NfY2FwICsgUENJX0FDU19DVFJMLCBhY3NfY3RybCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHR1MTYgdmFsO1xuK1xuK1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGRldiwgUENJX0VYUF9ERVZDVEwyLCBcdTAwMjZ2YWwpO1xuK1x0ZGV2LVx1MDAzZWFyaV9lbmFibGVkID0gISEodmFsIFx1MDAyNiBQQ0lfRVhQX0RFVkNUTDJfQVJJKTtcbitcdHJldHVybiAwO1xuK31cbitcbitib29sIHBjaV9saXZldXBkYXRlX2lzX291dGdvaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xuK1x0cGNpX1dBUk5fT05DRShkZXYsICFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5mcm96ZW4sIFwiUHJlc2VydmF0aW9uIHN0YXR1cyBpcyB1bnN0YWJsZSFcXG5cIik7XG4rXHRyZXR1cm4gZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmc7XG4rfVxuK1xuKy8qKlxuKyAqIHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKCkgLSBDaGVjayBpZiBhIGRldmljZSBpcyBpbmNvbWluZy1wcmVzZXJ2ZWRcbisgKiBAZGV2OiBUaGUgUENJIGRldmljZSB0byBjaGVja1xuKyAqXG4rICogQ2hlY2sgaWYgYSBkZXZpY2Ugd2FzIHByZXNlcnZlZCBhY3Jvc3MgTGl2ZSBVcGRhdGUgYnkgdGhlIHByZXZpb3VzIGtlcm5lbCxcbisgKiBpLmUuIHRoZSBkZXZpY2UgaXMgaW5jb21pbmctcHJlc2VydmVkLiBOb3RlIHRoYXQgYSBkZXZpY2UgaXMgb25seSBjb25zaWRlcmVkXG4rICogaW5jb21pbmctcHJlc2VydmVkIHByaW9yIHRvIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpLiBJdCBpcyB1cCB0byBkcml2ZXJzIHRvXG4rICogc3luY2hyb25pemUgdXNhZ2Ugb2YgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoKSB3aXRoIHRoZWlyIG93biBjYWxsIHRvXG4rICogcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkgdG8gYXZvaWQgYWN0aW5nIG9uIHN0YWxlIGRhdGEuXG4rICpcbisgKiBSZXR1cm5zOiBUcnVlIGlmIHRoZSBkZXZpY2UgaXMgaW5jb21pbmctcHJlc2VydmVkLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rYm9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbitcdHJldHVybiBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZztcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcpO1xuK1xuKy8qKlxuKyAqIHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYigpIC0gUmVnaXN0ZXIgYSBmaWxlIGhhbmRsZXIgd2l0aCB0aGUgUENJIGNvcmVcbisgKiBAZmg6IFRoZSBmaWxlIGhhbmRsZXIgdG8gcmVnaXN0ZXIuXG4rICpcbisgKiBEcml2ZXJzIHNob3VsZCBjYWxsIHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYigpIHRvIHJlZ2lzdGVyIHRoZWlyXG4rICogc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIHdpdGggdGhlIFBDSSBjb3JlLiBUaGlzIGVuYWJsZXMgdGhlIFBDSSBjb3JlXG4rICogdG8gYWxsb2NhdGUgaXRzIG91dGdvaW5nIHN0cnVjdCBwY2lfc2VyIHdoZW5ldmVyIHRoZSBmaXJzdCBkZXZpY2UgaXNcbisgKiBwcmVzZXJ2ZWQsIGFuZCBmcmVlIGl0IHdoZW4gdGhlIGxhc3QgZGV2aWNlIGlzIHVucHJlc2VydmVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXG4re1xuK1x0cHJfZGVidWcoXCJSZWdpc3RlcmluZyBmaWxlIGhhbmRsZXIgXFxcIiVzXFxcIlxcblwiLCBmaC1cdTAwM2Vjb21wYXRpYmxlKTtcbitcdHJldHVybiBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihmaCwgXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKTtcbitcbisvKipcbisgKiBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYigpIC0gVW5yZWdpc3RlciBhIGZpbGUgaGFuZGxlciB3aXRoIHRoZSBQQ0kgY29yZVxuKyAqIEBmaDogVGhlIGZpbGUgaGFuZGxlciB0byB1bnJlZ2lzdGVyLlxuKyAqL1xuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbit7XG4rXHRwcl9kZWJ1ZyhcIlVucmVnaXN0ZXJpbmcgZmlsZSBoYW5kbGVyIFxcXCIlc1xcXCJcXG5cIiwgZmgtXHUwMDNlY29tcGF0aWJsZSk7XG4rXHRsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKGZoLCBcdTAwMjZwY2lfbGl2ZXVwZGF0ZV9mbGIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oIGIvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIyNjY0MDZhYWFjODBkXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL3BjaS9saXZldXBkYXRlLmhcbkBAIC0wLDAgKzEsNjggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogUENJIExpdmUgVXBkYXRlIHN1cHBvcnQgKGNvcmUgQVBJKVxuKyAqXG4rICogQ29weXJpZ2h0IChjKSAyMDI2LCBHb29nbGUgTExDLlxuKyAqIERhdmlkIE1hdGxhY2sgXHUwMDNjZG1hdGxhY2tAZ29vZ2xlLmNvbVx1MDAzZVxuKyAqL1xuKyNpZm5kZWYgRFJJVkVSU19QQ0lfTElWRVVQREFURV9IXG4rI2RlZmluZSBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuK1xuKyNpZmRlZiBDT05GSUdfUENJX0xJVkVVUERBVEVcbit2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbit2b2lkIHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuK2Jvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbitcdFx0XHRcdCAgICAgIGludCBwYXNzKTtcbit2b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcyk7XG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV9pbml0X2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbitpbnQgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbitpbnQgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbitib29sIHBjaV9saXZldXBkYXRlX2lzX291dGdvaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cyxcbitcdFx0XHRcdFx0XHQgICAgc3RydWN0IHBjaV9kZXYgKmRldixcbitcdFx0XHRcdFx0XHQgICAgaW50IHBhc3MpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwYXNzKVxuK3tcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIHBjaV9saXZldXBkYXRlX2lzX291dGdvaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbisjZW5kaWZcbitcbisjZW5kaWYgLyogRFJJVkVSU19QQ0lfTElWRVVQREFURV9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jXG5pbmRleCBmMzY3NzhlNjJhYzFhNS4uNDdjYjNkY2FhOTI3ODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmNcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xuQEAgLTIxLDYgKzIxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwLW9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXUuaFx1MDAzZVxuKyNpbmNsdWRlIFwibGl2ZXVwZGF0ZS5oXCJcbiAjaW5jbHVkZSBcInBjaS5oXCJcbiAjaW5jbHVkZSBcInBjaWUvcG9ydGRydi5oXCJcbiBcbkBAIC01MzYsNiArNTM3LDcgQEAgc3RhdGljIHZvaWQgcGNpX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTtcbiBcdHN0cnVjdCBwY2lfZHJpdmVyICpkcnYgPSBwY2lfZGV2LVx1MDAzZWRyaXZlcjtcbiBcbitcdHBjaV9saXZldXBkYXRlX2ZyZWV6ZShwY2lfZGV2KTtcbiBcdHBtX3J1bnRpbWVfcmVzdW1lKGRldik7XG4gXG4gXHRpZiAoZHJ2IFx1MDAyNlx1MDAyNiBkcnYtXHUwMDNlc2h1dGRvd24pXG5AQCAtNTQ0LDExICs1NDYsMTQgQEAgc3RhdGljIHZvaWQgcGNpX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHQvKlxuIFx0ICogSWYgdGhpcyBpcyBhIGtleGVjIHJlYm9vdCwgdHVybiBvZmYgQnVzIE1hc3RlciBiaXQgb24gdGhlXG4gXHQgKiBkZXZpY2UgdG8gdGVsbCBpdCB0byBub3QgY29udGludWUgdG8gZG8gRE1BLiBEb24ndCB0b3VjaFxuLVx0ICogZGV2aWNlcyBpbiBEM2NvbGQgb3IgdW5rbm93biBzdGF0ZXMuXG4rXHQgKiBkZXZpY2VzIGJlaW5nIHByZXNlcnZlZCBmb3IgTGl2ZSBVcGRhdGUgb3IgaW4gRDNjb2xkIG9yXG4rXHQgKiB1bmtub3duIHN0YXRlcy5cbitcdCAqXG4gXHQgKiBJZiBpdCBpcyBub3QgYSBrZXhlYyByZWJvb3QsIGZpcm13YXJlIHdpbGwgaGl0IHRoZSBQQ0lcbiBcdCAqIGRldmljZXMgd2l0aCBiaWcgaGFtbWVyIGFuZCBzdG9wIHRoZWlyIERNQSBhbnkgd2F5LlxuIFx0ICovXG4tXHRpZiAoa2V4ZWNfaW5fcHJvZ3Jlc3MgXHUwMDI2XHUwMDI2IChwY2lfZGV2LVx1MDAzZWN1cnJlbnRfc3RhdGUgXHUwMDNjPSBQQ0lfRDNob3QpKVxuK1x0aWYgKGtleGVjX2luX3Byb2dyZXNzIFx1MDAyNlx1MDAyNiAhcGNpX2xpdmV1cGRhdGVfaXNfb3V0Z29pbmcocGNpX2RldikgXHUwMDI2XHUwMDI2XG4rXHQgICAgcGNpX2Rldi1cdTAwM2VjdXJyZW50X3N0YXRlIFx1MDAzYz0gUENJX0QzaG90KVxuIFx0XHRwY2lfY2xlYXJfbWFzdGVyKHBjaV9kZXYpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jXG5pbmRleCA3N2IxN2IxM2VlNjE1NC4uZTBjMTMzYjY2YTM1OTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wY2kuY1xuKysrIGIvZHJpdmVycy9wY2kvcGNpLmNcbkBAIC0zNCw2ICszNCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJsaXZldXBkYXRlLmhcIlxuICNpbmNsdWRlIFwicGNpLmhcIlxuIFxuIERFRklORV9NVVRFWChwY2lfc2xvdF9tdXRleCk7XG5AQCAtMTAwOCw2ICsxMDEwLDkgQEAgdm9pZCBwY2lfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0Ym9vbCBlbmFibGVfYWNzID0gZmFsc2U7XG4gXHRpbnQgcG9zO1xuIFxuK1x0aWYgKCFwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzKGRldikpXG4rXHRcdHJldHVybjtcbitcbiBcdC8qIElmIGFuIGlvbW11IGlzIHByZXNlbnQgd2Ugc3RhcnQgd2l0aCBrZXJuZWwgZGVmYXVsdCBjYXBzICovXG4gXHRpZiAocGNpX2Fjc19lbmFibGUpIHtcbiBcdFx0aWYgKHBjaV9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhkZXYpKVxuQEAgLTM1MjMsNyArMzUyOCw3IEBAIHZvaWQgcGNpX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdHUzMiBjYXA7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlO1xuIFxuLVx0aWYgKHBjaWVfYXJpX2Rpc2FibGVkIHx8ICFwY2lfaXNfcGNpZShkZXYpIHx8IGRldi1cdTAwM2VkZXZmbilcbitcdGlmICghcGNpX2lzX3BjaWUoZGV2KSB8fCBkZXYtXHUwMDNlZGV2Zm4pXG4gXHRcdHJldHVybjtcbiBcbiBcdGJyaWRnZSA9IGRldi1cdTAwM2VidXMtXHUwMDNlc2VsZjtcbkBAIC0zNTM0LDYgKzM1MzksMTIgQEAgdm9pZCBwY2lfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aWYgKCEoY2FwIFx1MDAyNiBQQ0lfRVhQX0RFVkNBUDJfQVJJKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKCFwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpKGJyaWRnZSkpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChwY2llX2FyaV9kaXNhYmxlZClcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfQVJJKSkge1xuIFx0XHRwY2llX2NhcGFiaWxpdHlfc2V0X3dvcmQoYnJpZGdlLCBQQ0lfRVhQX0RFVkNUTDIsXG4gXHRcdFx0XHRcdCBQQ0lfRVhQX0RFVkNUTDJfQVJJKTtcbkBAIC0zNjg5LDYgKzM3MDAsNyBAQCB2b2lkIHBjaV9hY3NfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFxuIFx0cGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfQUNTX0NBUCwgXHUwMDI2ZGV2LVx1MDAzZWFjc19jYXBhYmlsaXRpZXMpO1xuIFx0cGNpX2Rpc2FibGVfYnJva2VuX2Fjc19jYXAoZGV2KTtcbitcdHBjaV9saXZldXBkYXRlX2luaXRfYWNzKGRldik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcbmluZGV4IDQ0NjllMWE3N2YzYzEzLi45ODhhMThiMzIwNGFmNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oXG4rKysgYi9kcml2ZXJzL3BjaS9wY2kuaFxuQEAgLTEwNDcsNiArMTA0Nyw3IEBAIHZvaWQgcGNpX2Fjc19pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIHZvaWQgcGNpX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldik7XG4gI2lmZGVmIENPTkZJR19QQ0lfUVVJUktTXG4gaW50IHBjaV9kZXZfc3BlY2lmaWNfYWNzX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IGFjc19mbGFncyk7XG4rYm9vbCBwY2lfbmVlZF9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfZGV2X3NwZWNpZmljX2Rpc2FibGVfYWNzX3JlZGlyKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIHZvaWQgcGNpX2Rpc2FibGVfYnJva2VuX2Fjc19jYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuQEAgLTEwNTcsNiArMTA1OCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2lfZGV2X3NwZWNpZmljX2Fjc19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4ge1xuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfbmVlZF9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4gc3RhdGljIGlubGluZSBpbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4ge1xuIFx0cmV0dXJuIC1FTk9UVFk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmNcbmluZGV4IGRkMGFiYmM2M2UxOGQxLi4xNjU5NzNiYzkyYWFiYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmNcbisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmNcbkBAIC0yNCw2ICsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFwibGl2ZXVwZGF0ZS5oXCJcbiAjaW5jbHVkZSBcInBjaS5oXCJcbiBcbiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJ1c25fcmVzb3VyY2UgPSB7XG5AQCAtMTM5Niw2ICsxMzk3LDcgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0XHQgIGludCBtYXgsIHVuc2lnbmVkIGludCBhdmFpbGFibGVfYnVzZXMsXG4gXHRcdFx0XHQgIGludCBwYXNzKVxuIHtcbitcdGJvb2wgbGl2ZXVwZGF0ZSwgYXNzaWduX25ld19idXNlcyA9IHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKTtcbiBcdHN0cnVjdCBwY2lfYnVzICpjaGlsZDtcbiBcdHUzMiBidXNlcztcbiBcdHUxNiBiY3RsO1xuQEAgLTE0MDUsNiArMTQwNywxMCBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdHU4IGZpeGVkX3NlYywgZml4ZWRfc3ViO1xuIFx0aW50IG5leHRfYnVzbnI7XG4gXG4rXHRsaXZldXBkYXRlID0gcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oYnVzLCBkZXYsIHBhc3MpO1xuK1x0aWYgKGxpdmV1cGRhdGUpXG4rXHRcdGFzc2lnbl9uZXdfYnVzZXMgPSBmYWxzZTtcbitcbiBcdC8qXG4gXHQgKiBNYWtlIHN1cmUgdGhlIGJyaWRnZSBpcyBwb3dlcmVkIG9uIHRvIGJlIGFibGUgdG8gYWNjZXNzIGNvbmZpZ1xuIFx0ICogc3BhY2Ugb2YgZGV2aWNlcyBiZWxvdyBpdC5cbkBAIC0xNDQ4LDggKzE0NTQsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoKHNlY29uZGFyeSB8fCBzdWJvcmRpbmF0ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIXBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSBcdTAwMjZcdTAwMjYgIWJyb2tlbikge1xuK1x0aWYgKChzZWNvbmRhcnkgfHwgc3Vib3JkaW5hdGUpIFx1MDAyNlx1MDAyNiAhYXNzaWduX25ld19idXNlcyBcdTAwMjZcdTAwMjYgIWJyb2tlbikge1xuIFx0XHR1bnNpZ25lZCBpbnQgY21heCwgYnVzZXM7XG4gXG4gXHRcdC8qXG5AQCAtMTQ5MSw4ICsxNDk2LDcgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdCAqIGRvIGluIHRoZSBzZWNvbmQgcGFzcy5cbiBcdFx0ICovXG4gXHRcdGlmICghcGFzcykge1xuLVx0XHRcdGlmIChwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkgfHwgYnJva2VuKVxuLVxuK1x0XHRcdGlmIChhc3NpZ25fbmV3X2J1c2VzIHx8IGJyb2tlbilcbiBcdFx0XHRcdC8qXG4gXHRcdFx0XHQgKiBUZW1wb3JhcmlseSBkaXNhYmxlIGZvcndhcmRpbmcgb2YgdGhlXG4gXHRcdFx0XHQgKiBjb25maWd1cmF0aW9uIGN5Y2xlcyBvbiBhbGwgYnJpZGdlcyBpblxuQEAgLTE1MDYsNiArMTUxMCwxMSBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuK1x0XHRpZiAobGl2ZXVwZGF0ZSkge1xuK1x0XHRcdHBjaV9lcnIoZGV2LCBcIkNhbm5vdCByZWNvbmZpZ3VyZSBicmlkZ2UgZHVyaW5nIExpdmUgVXBkYXRlLCBza2lwcGluZ1xcblwiKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuIFx0XHQvKiBDbGVhciBlcnJvcnMgKi9cbiBcdFx0cGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX1NUQVRVUywgMHhmZmZmKTtcbiBcbkBAIC0xNTY2LDYgKzE1NzUsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgYmN0bCk7XG4gXG4gXHRwbV9ydW50aW1lX3B1dChcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbitcdHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChkZXYsIHBhc3MpO1xuIFxuIFx0cmV0dXJuIG1heDtcbiB9XG5AQCAtMjA2NCw2ICsyMDc0LDggQEAgaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdGlmIChwY2lfZWFybHlfZHVtcClcbiBcdFx0ZWFybHlfZHVtcF9wY2lfZGV2aWNlKGRldik7XG4gXG4rXHRwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2UoZGV2KTtcbitcbiBcdC8qIE5lZWQgdG8gaGF2ZSBkZXYtXHUwMDNlY2xhc3MgcmVhZHkgKi9cbiBcdGRldi1cdTAwM2VjZmdfc2l6ZSA9IHBjaV9jZmdfc3BhY2Vfc2l6ZShkZXYpO1xuIFxuQEAgLTIxODcsNiArMjE5OSw3IEBAIGludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gXHRkZWZhdWx0Olx0XHRcdFx0ICAgIC8qIHVua25vd24gaGVhZGVyICovXG4gXHRcdHBjaV9lcnIoZGV2LCBcInVua25vd24gaGVhZGVyIHR5cGUgJTAyeCwgaWdub3JpbmcgZGV2aWNlXFxuXCIsXG4gXHRcdFx0ZGV2LVx1MDAzZWhkcl90eXBlKTtcbitcdFx0cGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2UoZGV2KTtcbiBcdFx0cGNpX3JlbGVhc2Vfb2Zfbm9kZShkZXYpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcbkBAIC0yNDg1LDYgKzI0OTgsNyBAQCBzdGF0aWMgdm9pZCBwY2lfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KVxuIFxuIFx0cGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTtcbiBcdHBjaV9yZWxlYXNlX2NhcGFiaWxpdGllcyhwY2lfZGV2KTtcbitcdHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHBjaV9kZXYpO1xuIFx0cGNpX3JlbGVhc2Vfb2Zfbm9kZShwY2lfZGV2KTtcbiBcdHBjaWJpb3NfcmVsZWFzZV9kZXZpY2UocGNpX2Rldik7XG4gXHRwY2lfYnVzX3B1dChwY2lfZGV2LVx1MDAzZWJ1cyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuY1xuaW5kZXggYjA5ZjI3Zjc4NDZmY2QuLjk5YjgxOWYzOGU0OWMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmNcbisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jXG5AQCAtNTM3NCw5ICs1Mzc0LDYgQEAgc3RhdGljIHZvaWQgcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9ycF9tcGNfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gICovXG4gc3RhdGljIGludCBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3BjaF9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbiB7XG4tXHRpZiAoIXBjaV9xdWlya19pbnRlbF9wY2hfYWNzX21hdGNoKGRldikpXG4tXHRcdHJldHVybiAtRU5PVFRZO1xuLVxuIFx0aWYgKHBjaV9xdWlya19lbmFibGVfaW50ZWxfbHBjX2FjcyhkZXYpKSB7XG4gXHRcdHBjaV93YXJuKGRldiwgXCJGYWlsZWQgdG8gZW5hYmxlIEludGVsIFBDSCBBQ1MgcXVpcmtcXG5cIik7XG4gXHRcdHJldHVybiAwO1xuQEAgLTUzOTYsOSArNTM5Myw2IEBAIHN0YXRpYyBpbnQgcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9zcHRfcGNoX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aW50IHBvcztcbiBcdHUzMiBjYXAsIGN0cmw7XG4gXG4tXHRpZiAoIXBjaV9xdWlya19pbnRlbF9zcHRfcGNoX2Fjc19tYXRjaChkZXYpKVxuLVx0XHRyZXR1cm4gLUVOT1RUWTtcbi1cbiBcdHBvcyA9IGRldi1cdTAwM2VhY3NfY2FwO1xuIFx0aWYgKCFwb3MpXG4gXHRcdHJldHVybiAtRU5PVFRZO1xuQEAgLTU0MjYsOSArNTQyMCw2IEBAIHN0YXRpYyBpbnQgcGNpX3F1aXJrX2Rpc2FibGVfaW50ZWxfc3B0X3BjaF9hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdGludCBwb3M7XG4gXHR1MzIgY2FwLCBjdHJsO1xuIFxuLVx0aWYgKCFwY2lfcXVpcmtfaW50ZWxfc3B0X3BjaF9hY3NfbWF0Y2goZGV2KSlcbi1cdFx0cmV0dXJuIC1FTk9UVFk7XG4tXG4gXHRwb3MgPSBkZXYtXHUwMDNlYWNzX2NhcDtcbiBcdGlmICghcG9zKVxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbkBAIC01NDQ4LDU2ICs1NDM5LDYzIEBAIHN0YXRpYyBpbnQgcGNpX3F1aXJrX2Rpc2FibGVfaW50ZWxfc3B0X3BjaF9hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKmRldilcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyB7XG4gXHR1MTYgdmVuZG9yO1xuIFx0dTE2IGRldmljZTtcbitcdGJvb2wgKCptYXRjaCkoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gXHRpbnQgKCplbmFibGVfYWNzKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBcdGludCAoKmRpc2FibGVfYWNzX3JlZGlyKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB9IHBjaV9kZXZfYWNzX29wc1tdID0ge1xuIFx0eyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfQU5ZX0lELFxuK1x0ICAgIC5tYXRjaCA9IHBjaV9xdWlya19pbnRlbF9wY2hfYWNzX21hdGNoLFxuIFx0ICAgIC5lbmFibGVfYWNzID0gcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9wY2hfYWNzLFxuIFx0fSxcbiBcdHsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0FOWV9JRCxcbitcdCAgICAubWF0Y2ggPSBwY2lfcXVpcmtfaW50ZWxfc3B0X3BjaF9hY3NfbWF0Y2gsXG4gXHQgICAgLmVuYWJsZV9hY3MgPSBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3NwdF9wY2hfYWNzLFxuIFx0ICAgIC5kaXNhYmxlX2Fjc19yZWRpciA9IHBjaV9xdWlya19kaXNhYmxlX2ludGVsX3NwdF9wY2hfYWNzX3JlZGlyLFxuIFx0fSxcbiB9O1xuIFxuLWludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcGNpX2Rldl9hY3Nfb3BzX2dldChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnA7XG4tXHRpbnQgaSwgcmV0O1xuK1x0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBjaV9kZXZfYWNzX29wcyk7IGkrKykge1xuIFx0XHRwID0gXHUwMDI2cGNpX2Rldl9hY3Nfb3BzW2ldO1xuIFx0XHRpZiAoKHAtXHUwMDNldmVuZG9yID09IGRldi1cdTAwM2V2ZW5kb3IgfHxcbiBcdFx0ICAgICBwLVx1MDAzZXZlbmRvciA9PSAodTE2KVBDSV9BTllfSUQpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKHAtXHUwMDNlZGV2aWNlID09IGRldi1cdTAwM2VkZXZpY2UgfHxcbi1cdFx0ICAgICBwLVx1MDAzZWRldmljZSA9PSAodTE2KVBDSV9BTllfSUQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcC1cdTAwM2VlbmFibGVfYWNzKSB7XG4tXHRcdFx0cmV0ID0gcC1cdTAwM2VlbmFibGVfYWNzKGRldik7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4tXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQgICAgIHAtXHUwMDNlZGV2aWNlID09ICh1MTYpUENJX0FOWV9JRCkpIHtcbitcdFx0XHRpZiAoIXAtXHUwMDNlbWF0Y2ggfHwgcC1cdTAwM2VtYXRjaChkZXYpKVxuK1x0XHRcdFx0cmV0dXJuIHA7XG4gXHRcdH1cbiBcdH1cbiBcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitib29sIHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcCA9IHBjaV9kZXZfYWNzX29wc19nZXQoZGV2KTtcbitcbitcdHJldHVybiBwIFx1MDAyNlx1MDAyNiBwLVx1MDAzZWVuYWJsZV9hY3M7XG4rfVxuK1xuK2ludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpO1xuK1xuK1x0aWYgKHAgXHUwMDI2XHUwMDI2IHAtXHUwMDNlZW5hYmxlX2FjcylcbitcdFx0cmV0dXJuIHAtXHUwMDNlZW5hYmxlX2FjcyhkZXYpO1xuK1xuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuIFxuIGludCBwY2lfZGV2X3NwZWNpZmljX2Rpc2FibGVfYWNzX3JlZGlyKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4ge1xuLVx0Y29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcDtcbi1cdGludCBpLCByZXQ7XG4rXHRjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwY2lfZGV2X2Fjc19vcHMpOyBpKyspIHtcbi1cdFx0cCA9IFx1MDAyNnBjaV9kZXZfYWNzX29wc1tpXTtcbi1cdFx0aWYgKChwLVx1MDAzZXZlbmRvciA9PSBkZXYtXHUwMDNldmVuZG9yIHx8XG4tXHRcdCAgICAgcC1cdTAwM2V2ZW5kb3IgPT0gKHUxNilQQ0lfQU5ZX0lEKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIChwLVx1MDAzZWRldmljZSA9PSBkZXYtXHUwMDNlZGV2aWNlIHx8XG4tXHRcdCAgICAgcC1cdTAwM2VkZXZpY2UgPT0gKHUxNilQQ0lfQU5ZX0lEKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHAtXHUwMDNlZGlzYWJsZV9hY3NfcmVkaXIpIHtcbi1cdFx0XHRyZXQgPSBwLVx1MDAzZWRpc2FibGVfYWNzX3JlZGlyKGRldik7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4tXHRcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHR9XG4tXHR9XG4rXHRpZiAocCBcdTAwMjZcdTAwMjYgcC1cdTAwM2VkaXNhYmxlX2Fjc19yZWRpcilcbitcdFx0cmV0dXJuIHAtXHUwMDNlZGlzYWJsZV9hY3NfcmVkaXIoZGV2KTtcbiBcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmggYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWNmMWIzOGRmZjAyNGFcbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxuQEAgLTAsMCArMSw1OSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIEdvb2dsZSBMTEMuXG4rICogRGF2aWQgTWF0bGFjayBcdTAwM2NkbWF0bGFja0Bnb29nbGUuY29tXHUwMDNlXG4rICovXG4rXG4rI2lmbmRlZiBfTElOVVhfS0hPX0FCSV9QQ0lfSFxuKyNkZWZpbmUgX0xJTlVYX0tIT19BQklfUENJX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rLyoqXG4rICogRE9DOiBQQ0kgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgTGl2ZSBVcGRhdGUgQUJJXG4rICpcbisgKiBUaGlzIGhlYWRlciBkZWZpbmVzIHRoZSBBQkkgZm9yIHByZXNlcnZpbmcgY29yZSBQQ0kgc3RhdGUgYWNyb3NzIGtleGVjIHVzaW5nXG4rICogTGl2ZSBVcGRhdGUgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgZGF0YS5cbisgKlxuKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGEgY29udHJhY3QuIEFueSBtb2RpZmljYXRpb24gdG8gYW55IG9mIHRoZSBzZXJpYWxpemF0aW9uXG4rICogc3RydWN0cyBkZWZpbmVkIGhlcmUgY29uc3RpdHV0ZXMgYSBicmVha2luZyBjaGFuZ2UuIFN1Y2ggY2hhbmdlcyByZXF1aXJlXG4rICogaW5jcmVtZW50aW5nIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgUENJX0xVT19GTEJfQ09NUEFUSUJMRSBzdHJpbmcuXG4rICovXG4rXG4rI2RlZmluZSBQQ0lfTFVPX0ZMQl9DT01QQVRJQkxFIFwicGNpLXYyXCJcbitcbisvKipcbisgKiBzdHJ1Y3QgcGNpX2Rldl9zZXIgLSBTZXJpYWxpemVkIHN0YXRlIGFib3V0IGEgc2luZ2xlIFBDSSBkZXZpY2UuXG4rICpcbisgKiBAZG9tYWluOiBUaGUgZGV2aWNlJ3MgUENJIGRvbWFpbiBudW1iZXIgKHNlZ21lbnQpLlxuKyAqIEBiZGY6IFRoZSBkZXZpY2UncyBQQ0kgYnVzLCBkZXZpY2UsIGFuZCBmdW5jdGlvbiBudW1iZXIuXG4rICogQHJlZmNvdW50OiBSZWZlcmVuY2UgY291bnQgdXNlZCBieSB0aGUgUENJIGNvcmUgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGl0XG4rICogICAgICAgICAgICBpcyBkb25lIHVzaW5nIGEgZGV2aWNlJ3Mgc3RydWN0IHBjaV9kZXZfc2VyLiBUaGUgdmFsdWUgb2YgdGhlXG4rICogICAgICAgICAgICByZWZjb3VudCBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIHByZXNlcnZlZCBkZXZpY2VzIGF0IG9yIGJlbG93XG4rICogICAgICAgICAgICBpdCBpbiB0aGUgUENJIGhpZXJhcmNoeSB3aGVuIHRoZSBzdHJ1Y3QgcGNpX2Rldl9zZXIgaXMgaW4gdXNlLCBhbmRcbisgKiAgICAgICAgICAgIDAgb3RoZXJ3aXNlLlxuKyAqL1xuK3N0cnVjdCBwY2lfZGV2X3NlciB7XG4rXHR1MzIgZG9tYWluO1xuK1x0dTE2IGJkZjtcbitcdHUxNiByZWZjb3VudDtcbit9IF9fcGFja2VkO1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwY2lfc2VyIC0gUENJIFN1YnN5c3RlbSBMaXZlIFVwZGF0ZSBTdGF0ZVxuKyAqXG4rICogVGhpcyBzdHJ1Y3QgdHJhY2tzIHN0YXRlIGFib3V0IGFsbCBkZXZpY2VzIHRoYXQgYXJlIGJlaW5nIHByZXNlcnZlZCBhY3Jvc3NcbisgKiBhIExpdmUgVXBkYXRlIGZvciB0aGUgbmV4dCBrZXJuZWwuXG4rICpcbisgKiBAbnJfZGV2aWNlczogVGhlIG51bWJlciBvZiBkZXZpY2VzIHRoYXQgd2VyZSBwcmVzZXJ2ZWQuXG4rICogQGRldmljZXM6IFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IEtITyBibG9jayBjb250YWluaW5nIHBjaV9kZXZfc2VyLlxuKyAqL1xuK3N0cnVjdCBwY2lfc2VyIHtcbitcdHUzMiBucl9kZXZpY2VzO1xuK1x0dTY0IGRldmljZXM7XG4rfSBfX3BhY2tlZDtcbitcbisjZW5kaWYgLyogX0xJTlVYX0tIT19BQklfUENJX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxuaW5kZXggZWJiNWI5ZDc2MzYwOWUuLmI0MWRkNTcyYTJkNmIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaFxuQEAgLTQzLDYgKzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3BjaS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX2lkcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX2xpdmV1cGRhdGUuaFx1MDAzZVxuIFxuICNkZWZpbmUgUENJX1NUQVRVU19FUlJPUl9CSVRTIChQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSAgfCBcXFxuIFx0XHRcdCAgICAgICBQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IgfCBcXFxuQEAgLTU5Miw2ICs1OTMsOSBAQCBzdHJ1Y3QgcGNpX2RldiB7XG4gXHR1OFx0XHR0cGhfbW9kZTtcdC8qIFRQSCBtb2RlICovXG4gXHR1OFx0XHR0cGhfcmVxX3R5cGU7XHQvKiBUUEggcmVxdWVzdGVyIHR5cGUgKi9cbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFXG4rXHRzdHJ1Y3QgcGNpX2xpdmV1cGRhdGUgbGl2ZXVwZGF0ZTtcbisjZW5kaWZcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKnBjaV9waHlzZm4oc3RydWN0IHBjaV9kZXYgKmRldilcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9saXZldXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9saXZldXBkYXRlLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTUwOTkzNDA1NzU0YmFcbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2xpdmV1cGRhdGUuaFxuQEAgLTAsMCArMSw3NyBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCAoUHVibGljL0RyaXZlciBBUEkpXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIEdvb2dsZSBMTEMuXG4rICogRGF2aWQgTWF0bGFjayBcdTAwM2NkbWF0bGFja0Bnb29nbGUuY29tXHUwMDNlXG4rICovXG4rI2lmbmRlZiBMSU5VWF9QQ0lfTElWRVVQREFURV9IXG4rI2RlZmluZSBMSU5VWF9QQ0lfTElWRVVQREFURV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2hvL2FiaS9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpdmV1cGRhdGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9ja190eXBlcy5oXHUwMDNlXG4rXG4rLyoqXG4rICogc3RydWN0IHBjaV9saXZldXBkYXRlIC0gUENJIExpdmUgVXBkYXRlIHN0YXRlIGZvciBhIHN0cnVjdCBwY2lfZGV2XG4rICogQG91dGdvaW5nOiBTdGF0ZSBwcmVzZXJ2ZWQgZm9yIHRoZSBuZXh0IGtlcm5lbC5cbisgKiBAaW5jb21pbmc6IFN0YXRlIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXMga2VybmVsLlxuKyAqIEBhY3NfY3RybDogQUNTIGZlYXR1cmVzIGVzdGFibGlzaGVkIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwuXG4rICogQGluaGVyaXRfYnVzZXM6IFRydWUgaWYgdGhlIFBDSSBjb3JlIHNob3VsZCBpbmhlcml0IHRoZSBzZWNvbmRhcnkgYW5kXG4rICogICAgICAgICAgICAgICAgIHN1Ym9yZGluYXRlIGJ1cyBudW1iZXJzIGFzc2lnbmVkIHRvIHRoaXMgZGV2aWNlIGR1ZSB0b1xuKyAqICAgICAgICAgICAgICAgICBhbiBvbmdvaW5nIExpdmUgVXBkYXRlLlxuKyAqIEB3YXNfcHJlc2VydmVkOiBUcnVlIGlmIHRoaXMgc3RydWN0IHBjaV9kZXYgd2FzIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXNcbisgKiAgICAgICAgICAgICAgICAga2VybmVsLiBVbmxpa2UgQGluY29taW5nLCB0aGlzIGZpZWxkIGlzIG5vdCBjbGVhcmVkIGFmdGVyXG4rICogICAgICAgICAgICAgICAgIHRoZSBkZXZpY2UgaXMgZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiBMaXZlIFVwZGF0ZS5cbisgKiBAZnJvemVuOiBUcnVlIGlmIHRoZSBvdXRnb2luZyBwcmVzZXJ2YXRpb24gc3RhdHVzIG9mIHRoaXMgZGV2aWNlIGlzIGZyb3plblxuKyAqICAgICAgICAgIGFuZCB0aHVzIGNhbm5vdCBiZSBjaGFuZ2VkLlxuKyAqL1xuK3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZSB7XG4rXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKm91dGdvaW5nO1xuK1x0c3RydWN0IHBjaV9kZXZfc2VyICppbmNvbWluZztcbitcdHUxNiBhY3NfY3RybDtcbitcdGJvb2wgaW5oZXJpdF9idXNlcztcbitcdGJvb2wgd2FzX3ByZXNlcnZlZDtcbitcdGJvb2wgZnJvemVuO1xuK307XG4rXG4rc3RydWN0IHBjaV9kZXY7XG4rXG4rI2lmZGVmIENPTkZJR19QQ0lfTElWRVVQREFURVxuK2ludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCk7XG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcbitpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoc3RydWN0IHBjaV9kZXYgKmRldik7XG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfZmluaXNoKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuK2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoc3RydWN0IHBjaV9kZXYgKmRldik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxuK3tcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfZmluaXNoKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuK1xuKyNlbmRpZiAvKiBMSU5VWF9QQ0lfTElWRVVQREFURV9IICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxODoyNjo0MC44MzI3Mjg5OTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDMxODMxMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSSBMaXZlIFVwZGF0ZSBJbXBsZW1lbnRhdGlvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIGludHJvZHVjaW5nIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0IOKAkyBpbnRlcmVzdGluZy4gU2VlbXMgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBQQ0kgc3Vic3lzdGVtLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIG5ldyBgZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jYCBmaWxlLCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZWAsIGBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlYCwgYHBjaV9saXZldXBkYXRlX2ZpbmlzaGAsIGFuZCBzbyBvbi4gUHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciBwcmVzZXJ2aW5nIGFuZCByZXN0b3JpbmcgZGV2aWNlIHN0YXRlIGR1cmluZyBhIGhvdCB1cGRhdGUuIExvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHBjaS1kcml2ZXIuY2AsIGBwY2kuY2AsIGBwcm9iZS5jYCwgYW5kIGBxdWlya3MuY2AgYXJlIHdoZXJlIHRoZSBpbnRlZ3JhdGlvbiBwb2ludHMgYXJlLiBgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZGAgaXMgZ2V0dGluZyBjYWxscyB0byBiZWdpbiBhbmQgZW5kIHRoZSBzY2FuLCBgcGNpX3NldHVwX2RldmljZWAgaXMgaW50ZWdyYXRpbmcgdGhlIHNldHVwLCBhbmQgYHBjaV9kZXZpY2Vfc2h1dGRvd25gIGlzIGZyZWV6aW5nIHRoZSBkZXZpY2Ugc3RhdGUuXG5cbk5vdywgYSBrZXkgcXVlc3Rpb24gZm9yIG1lIGlzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBQQ0kgZGV2aWNlcyAqYXJlKiBwcmVzZW50IGluIHRoaW5ncyBsaWtlIFFFTVUgYW5kIEdDRSwgc28gdGhhdCdzIGEgcG9zaXRpdmUgc3RhcnQuIEJ1dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IGlzIHdoYXQgSSBuZWVkIHRvIGRpZyBpbnRvLiBUaGUgYENPTkZJR19QQ0lfTElWRVVQREFURWAgaXMgY29udGluZ2VudCBvbiBgUENJIFx1MDAyNlx1MDAyNiBMSVZFVVBEQVRFIFx1MDAyNlx1MDAyNiA2NEJJVCBcdTAwMjZcdTAwMjYgIUNBUkRCVVNgLiBTbywgSSdsbCBuZWVkIHRvIGVuYWJsZSBgUENJX0xJVkVVUERBVEVgLCB3aGljaCBwcm9iYWJseSBtZWFucyBJJ2xsIGFsc28gbmVlZCB0byBlbmFibGUgYExJVkVVUERBVEVgIGZpcnN0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGNvbmZpZyBuYW1lIGZvciBgTElWRVVQREFURWAgdG8gYmUgc3VyZS4gVGltZSB0byBkaWcgaW50byB0aGUgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTUyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTg6MjY6NDguODY0NTYyOTk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDYwMDY2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExJVkVVUERBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zOD1jb25maWcgS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNTEtXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1Mjpjb25maWcgTElWRVVQREFURVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNTMtXFx0Ym9vbCBcXFwiTGl2ZSBVcGRhdGUgT3JjaGVzdHJhdG9yXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy03Mi1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjczOmNvbmZpZyBMSVZFVVBEQVRFX01FTUZEXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy03NC1cXHRib29sIFxcXCJMaXZlIHVwZGF0ZSBzdXBwb3J0IGZvciBtZW1mZFxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTI5MDE9Y29uZmlnIENPTlRFWFRfQU5BTFlTSVNfVEVTVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMjkxNC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoyOTE1OmNvbmZpZyBMSVZFVVBEQVRFX1RFU1RcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yOTE2LVxcdGJvb2wgXFxcIkxpdmUgVXBkYXRlIEtlcm5lbCBUZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxODoyNjo1My44NzA1NzYxNDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTIzOTQzMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUENJIExpdmUgVXBkYXRlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgTElWRVVQREFURWAgY29uZmlnLCBhbmQgdGhlIHBhdGNoIGludHJvZHVjZXMgYFBDSV9MSVZFVVBEQVRFYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUncyB0aGUgYmVzdCBwbGFjZSB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzPyBJIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHBvdGVudGlhbCB0YXJnZXRzLiBUaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zOiBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVgLCBgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZWAsIGBwY2lfbGl2ZXVwZGF0ZV9maW5pc2hgLCBgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmdgLCBgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiYCwgYW5kIGBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYmAuIEJ1dCB3YWl0LCB0aG9zZSBhcmUgZXhwb3J0ZWQgZm9yICpkcml2ZXJzKiB0byB1c2UuIEhtbW0sIGFyZSBhbnkgZHJpdmVycyBhY3R1YWxseSB1c2luZyB0aGVtIGluICp0aGlzKiBwYXRjaD8gTm8sIGRvZXNuJ3QgbG9vayBsaWtlIGl0LlxuXG5BbHJpZ2h0LCB3aGF0IGFib3V0IHRoZSBpbnRlcm5hbCBQQ0kgY29yZSBmdW5jdGlvbnM/IEFoYSEgYHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZWAsIGBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZWAsIGBwY2lfbGl2ZXVwZGF0ZV9mcmVlemVgLCBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW5gLCBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kYCwgYHBjaV9saXZldXBkYXRlX2luaXRfYWNzYCwgYHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3NgLCBhbmQgYHBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmlgIGFyZSBhbGwgY2FsbGVkIGZyb20gdGhlIFBDSSBjb3JlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBzZWUgaWYgd2UgY2FuIHRyYWNlIHRoZWlyIGNhbGwgY2hhaW5zLlxuXG5gcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlYCBpcyBjYWxsZWQgZnJvbSBgcGNpX3NldHVwX2RldmljZWAuIEdvb2QuIFRoZW4gYHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luYCBpcyBjYWxsZWQgZnJvbSBgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZGAuIGBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZWAgaXMgY2FsbGVkIGZyb20gYHBjaV9yZWxlYXNlX2RldmAuIGBwY2lfbGl2ZXVwZGF0ZV9mcmVlemVgIGlzIGNhbGxlZCBmcm9tIGBwY2lfZGV2aWNlX3NodXRkb3duYC4gYHBjaV9saXZldXBkYXRlX2luaXRfYWNzYCBpcyBjYWxsZWQgZnJvbSBgcGNpX2Fjc19pbml0YC4gQW5kIGBwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzYCBpcyBjYWxsZWQgZnJvbSBgcGNpX2VuYWJsZV9hY3NgLiBGaW5hbGx5LCBgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaWAgaXMgY2FsbGVkIGZyb20gYHBjaV9jb25maWd1cmVfYXJpYC5cblxuU28sIGl0J3MgdGhvc2UgY29yZSBmdW5jdGlvbnMgdGhhdCBhcmUgdGhlIHJlYWwgdGFyZ2V0cy4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIGBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2VgLCBhbmQgSSdsbCBzdGFydCBieSBjaGVja2luZyBpdHMgaW1wbGVtZW50YXRpb24gaW4gYGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY2AuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDk2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE4OjI3OjAwLjk5NDUyMzczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA5NzU3MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9saXZldXBkYXRlLmM9NjYzPXZvaWQgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwYXNzKVxcbi0tXFxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jLTY3Mi1cXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmM6NjczOnZvaWQgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jLTY3NC17XFxuLS1cXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmM9NzM2PXN0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfZmluaXNoX2RldmljZShzdHJ1Y3QgcGNpX3NlciAqc2VyLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jLTc0OS1cXHQgKiBEZWNyZW1lbnQgdGhlIHJlZmNvdW50IHNvIHRoaXMgZGV2aWNlIGRvZXMgbm90IGdldCB0cmVhdGVkIGFzIGFuXFxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jOjc1MDpcXHQgKiBpbmNvbWluZyBkZXZpY2UgYWdhaW4sIGUuZy4gaW4gY2FzZSBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2UoKVxcbmRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuYy03NTEtXFx0ICogZ2V0cyBjYWxsZWQgYWdhaW4gYmVjYXVzZSB0aGUgZGV2aWNlIGlzIGhvdC1wbHVnZ2VkLlxcbi0tXFxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oLTEzLSNpZmRlZiBDT05GSUdfUENJX0xJVkVVUERBVEVcXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmg6MTQ6dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oLTE1LXZvaWQgcGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuLS1cXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmg9MjM9Ym9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmgtMjQtI2Vsc2VcXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmg6MjU6c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbmRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaC0yNi17XFxuLS1cXG5kcml2ZXJzL3BjaS9wcm9iZS5jPTIwMjY9aW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvcGNpL3Byb2JlLmMtMjA3Ni1cXG5kcml2ZXJzL3BjaS9wcm9iZS5jOjIwNzc6XFx0cGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKGRldik7XFxuZHJpdmVycy9wY2kvcHJvYmUuYy0yMDc4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxODoyNzowNS4yMDQyOTAwNDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTM5Mjk5MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSSBMaXZlIFVwZGF0ZSBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBzb21lIGZyZXNoIGZ1bmN0aW9uYWxpdHkgZm9yIFBDSSBsaXZlIHVwZGF0ZSwgd2hpY2ggbWVhbnMgaXQncyBkZWZpbml0ZWx5IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIG1vZGlmeWluZyBjb3JlIFBDSSBlbnVtZXJhdGlvbiBhbmQgc2h1dGRvd24gcGF0aHMsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgc3R1ZmYgaGVyZS4gVGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBnZXQgYSBmdXp6aW5nIGNhbXBhaWduIHNldCB1cCBmb3IgdGhpcy5cblxuRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBwYXRjaCBtZW50aW9ucyBgUENJX0xJVkVVUERBVEVgIGFuZCBgTElWRVVQREFURWAgYXMgdGhlIGtleSBlbmFibGVycy4gQ2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcywgYFBDSV9MSVZFVVBEQVRFYCByZWxpZXMgb24gYFBDSSBcdTAwMjZcdTAwMjYgTElWRVVQREFURSBcdTAwMjZcdTAwMjYgNjRCSVQgXHUwMDI2XHUwMDI2ICFDQVJEQlVTYCwgc28gd2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuc3VyZSB0aG9zZSBhcmUgc2V0LiBTbywgYFBDSV9MSVZFVVBEQVRFYCBhbmQgYExJVkVVUERBVEVgIGFyZSB0aGUgY29uZmlncyB0byBlbmFibGUuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gZm9jdXMgb24uIEJhc2VkIG9uIHRoZSBwYXRjaCwgdGhlIG1vc3QgcHJvbWlzaW5nIGVudHJ5IHBvaW50cyBzZWVtIHRvIGJlOiBgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlYCwgYHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlYCwgYHBjaV9saXZldXBkYXRlX2ZyZWV6ZWAsIGBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbmAsIGBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmRgLCBgcGNpX2xpdmV1cGRhdGVfaW5pdF9hY3NgLCBgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2Fjc2AsIGBwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpYCwgYHBjaV9saXZldXBkYXRlX3ByZXNlcnZlYCwgYHBjaV9saXZldXBkYXRlX3VucHJlc2VydmVgLCBgcGNpX2xpdmV1cGRhdGVfZmluaXNoYCwgYHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYmAsIGFuZCBgcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGJgLiBUaGVzZSBzaG91bGQgYmUgdGhlIG9uZXMgd2UgcHJpb3JpdGl6ZS5cblxuTmV4dCwgSSBuZWVkIHRvIHRoaW5rIGFib3V0IHJlYWNoYWJpbGl0eS4gYHBjaV9saXZldXBkYXRlX3ByZXNlcnZlYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGFjY2Vzc2libGUgdG8gZHJpdmVycywgYnV0IGlmIG5vIGRyaXZlcnMgKmNhbGwqIGl0LCB3ZSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQncyByZWFjaGFibGUgYXQgYWxsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgY2FsbCBhcmJpdHJhcnkgZXhwb3J0ZWQgZnVuY3Rpb25zIHVubGVzcyB0aGVyZSdzIGEgc3lzY2FsbCBpbnRlcmZhY2UuIEhvd2V2ZXIsIHRoZSBnb29kIG5ld3MgaXMgdGhhdCBzeW1ib2xzIGxpa2UgYHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZWAgYW5kIG90aGVycyBhcmUgY2FsbGVkIGZyb20gdGhlIFBDSSBjb3JlIGl0c2VsZi4gQW5kLCBzaW5jZSB0aGUgUENJIGNvcmUgaXMgaW52b2x2ZWQgZHVyaW5nIGJvdGggYm9vdCBhbmQgaG90cGx1ZyBldmVudHMsIHdlIGtub3cgdGhvc2UgY29yZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUsIHdoaWNoIGlzIGEgYmlnIHdpbi5cblxuU28sIHRvIHN1bW1hcml6ZSBmb3IgdGhlIGZ1enppbmcgc2V0dXAsIHdlJ3JlIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlnczpcblxuKiAgIGBMSVZFVVBEQVRFYFxuKiAgIGBQQ0lfTElWRVVQREFURWBcblxuQW5kIHRoZSBrZXkgZm9jdXMgc3ltYm9scyBhcmU6XG5cbiogICBgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlYFxuKiAgIGBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZWBcbiogICBgcGNpX2xpdmV1cGRhdGVfZnJlZXplYFxuKiAgIGBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbmBcbiogICBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kYFxuKiAgIGBwY2lfbGl2ZXVwZGF0ZV9pbml0X2Fjc2BcbiogICBgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2Fjc2BcbiogICBgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaWBcbiogICBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVgXG4qICAgYHBjaV9saXZldXBkYXRlX3VucHJlc2VydmVgXG4qICAgYHBjaV9saXZldXBkYXRlX2ZpbmlzaGBcbiogICBgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiYFxuKiAgIGBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYmBcblxuQW5kIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyBkb3VibGUgY2hlY2sgdGhlcmUgYXJlICpubyogb3RoZXIgcmVsZXZhbnQgY29uZmlncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTg6Mjc6MTQuNzQzNTkxNzY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NjAzNjI0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBDSV9MSVZFVVBEQVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWc9MjY2PWNvbmZpZyBWR0FfQVJCX01BWF9HUFVTXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTI3My1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjI3NDpjb25maWcgUENJX0xJVkVVUERBVEVcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTI3NS1cXHRib29sIFxcXCJQQ0kgTGl2ZSBVcGRhdGUgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTg6Mjc6MTguNDAzOTU5OTc2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ3MzE3MTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgcHJvY2Vzcywgd2l0aCBhIGZvY3VzIG9uIFBDSSBMaXZlIFVwZGF0ZTpcblxuKipQQ0kgTGl2ZSBVcGRhdGUgRnV6emluZyBTdHJhdGVneSoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoaXMgYFBDSV9MSVZFVVBEQVRFYCB0aGluZy4gVGhhdCdzIHRoZSBrZXkuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsaXR5IHNwZWNpZmljYWxseSBhcm91bmQgUENJIExpdmUgVXBkYXRlLCBhbmQgdGhhdCBtZWFucyBpdOKAmXMgYWx0ZXJpbmcgdGhlIGNvcmUgcm91dGluZXMgaW52b2x2ZWQgaW4gUENJIGVudW1lcmF0aW9uLCBob3cgZGV2aWNlcyBzaHV0IGRvd24sIGFuZCBob3cgd2UgY29uZmlndXJlIFBDSSBjYXBhYmlsaXRpZXMsIHBhcnRpY3VsYXJseSB0aGluZ3MgbGlrZSBBQ1MgYW5kIEFSSS4gVGhlc2UgYXJlbid0IGp1c3QgdGhlb3JldGljYWwgY2hhbmdlczsgdGhleSdyZSAqcmVhY2hhYmxlKi4gVGhleSdyZSBnb2luZyB0byBiZSBoaXQgZHVyaW5nIGRldmljZSBwcm9iaW5nLCB3aGVuIGEgZGV2aWNlIGlzIHJlbW92ZWQsIGFuZCBkdXJpbmcgc3lzdGVtIHNodXRkb3duIG9yIGtleGVjLlxuXG5UaGUgY3JpdGljYWwgZm9jdXMgZm9yIGZ1enppbmcsIHRoZXJlZm9yZSwgaGFzIHRvIGJlIHRoZSBuZXcgYHBjaV9saXZldXBkYXRlXypgIGZ1bmN0aW9ucy4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgbmV3IGZ1bmN0aW9ucywgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZXhpc3RpbmcgY29kZSwgY2FuIGhhbmRsZSBhIHdpZGUgdmFyaWV0eSBvZiBQQ0kgdG9wb2xvZ2llcyBhbmQgZGV2aWNlIHN0YXRlcyBmbGF3bGVzc2x5LiBXZSdyZSB0YWxraW5nIGFib3V0IGEgY29tcHJlaGVuc2l2ZSBhcHByb2FjaC4gV2UgbmVlZCB0byBleHBsb3JlIGFsbCB0aGUgcG90ZW50aWFsIGVkZ2UgY2FzZXM6IHdoYXQgaGFwcGVucyB3aGVuIHRoaW5ncyBhcmVuJ3QgYXMgZXhwZWN0ZWQsIHdoYXQgaGFwcGVucyB3aXRoIGhvdC1wbHVnLCBjb2xkLXBsdWcsIGFuZCBldmVyeXRoaW5nIGluIGJldHdlZW4/IEFuZCBob3cgZG8gd2UgYWNjb3VudCBmb3IgdGhlIHBvc3NpYmlsaXR5IG9mIGEgZGV2aWNlIGdvaW5nIGludG8gYSB3ZWlyZCBzdGF0ZSBhZnRlciBhbiB1cGRhdGU/XG5cbk9rYXksIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBlbnN1cmUgdGhhdCB0aGUgZnV6emluZyBzdHJhdGVneSBpcyBwcm9wZXJseSBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MDYsIk91dHB1dFRva2VucyI6MjcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE4OjI3OjI2Ljg3NzEzNTYwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjQwNDU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTElWRVVQREFURVwiLFxuICAgIFwiUENJX0xJVkVVUERBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2VcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9mcmVlemVcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmRcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2luaXRfYWNzXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfZmluaXNoXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGJcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCwgd2hpY2ggbW9kaWZpZXMgY29yZSBQQ0kgZW51bWVyYXRpb24sIHNodXRkb3duLCBhbmQgY2FwYWJpbGl0eSBjb25maWd1cmF0aW9uIHBhdGhzIChlLmcuLCBBQ1MsIEFSSSkuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgUENJIGRldmljZSBwcm9iZSwgcmVtb3ZhbCwgYW5kIHN5c3RlbSBzaHV0ZG93bi9rZXhlYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBwY2lfbGl2ZXVwZGF0ZV8qIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBQQ0kgdG9wb2xvZ2llcyBhbmQgc3RhdGVzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMSVZFVVBEQVRFXCIsXG4gICAgXCJQQ0lfTElWRVVQREFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2VcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2ZyZWV6ZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW5cIixcbiAgICBcInBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZFwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfaW5pdF9hY3NcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3NcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmlcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3ByZXNlcnZlXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9maW5pc2hcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYlwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0LCB3aGljaCBtb2RpZmllcyBjb3JlIFBDSSBlbnVtZXJhdGlvbiwgc2h1dGRvd24sIGFuZCBjYXBhYmlsaXR5IGNvbmZpZ3VyYXRpb24gcGF0aHMgKGUuZy4sIEFDUywgQVJJKS4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGR1cmluZyBQQ0kgZGV2aWNlIHByb2JlLCByZW1vdmFsLCBhbmQgc3lzdGVtIHNodXRkb3duL2tleGVjLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IHBjaV9saXZldXBkYXRlXyogZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIFBDSSB0b3BvbG9naWVzIGFuZCBzdGF0ZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow759nq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 18:14:59 +0000 UTC FinishedAt: 2026-07-11 18:27:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1354afac14579ad38279f12d660df961b5f20246", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LIVEUPDATE", "PCI_LIVEUPDATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1354afac14579ad38279f12d660df961b5f20246", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LIVEUPDATE", "PCI_LIVEUPDATE" ], "series_id": "dbf7326a-98e2-481e-adf8-a51a51c012bb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "pci_liveupdate_setup_device", "pci_liveupdate_cleanup_device", "pci_liveupdate_freeze", "pci_liveupdate_scan_bridge_begin", "pci_liveupdate_scan_bridge_end", "pci_liveupdate_init_acs", "pci_liveupdate_enable_acs", "pci_liveupdate_configure_ari", "pci_liveupdate_preserve", "pci_liveupdate_unpreserve", "pci_liveupdate_finish", "pci_liveupdate_register_flb", "pci_liveupdate_unregister_flb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE4OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xJVkVVUERBVEUmIzM0OywKICAgICYjMzQ7UENJX0xJVkVVUERBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2UmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2UmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfZnJlZXplJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZCYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9pbml0X2FjcyYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfcHJlc2VydmUmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9maW5pc2gmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgUENJIExpdmUgVXBkYXRlIHN1cHBvcnQsIHdoaWNoIG1vZGlmaWVzIGNvcmUgUENJIGVudW1lcmF0aW9uLCBzaHV0ZG93biwgYW5kIGNhcGFiaWxpdHkgY29uZmlndXJhdGlvbiBwYXRocyAoZS5nLiwgQUNTLCBBUkkpLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZHVyaW5nIFBDSSBkZXZpY2UgcHJvYmUsIHJlbW92YWwsIGFuZCBzeXN0ZW0gc2h1dGRvd24va2V4ZWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgcGNpX2xpdmV1cGRhdGVfKiBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZXkgaGFuZGxlIHZhcmlvdXMgUENJIHRvcG9sb2dpZXMgYW5kIHN0YXRlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTg6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNmIzMGFiMjc5ZmIwZWYwNTc4N2Q1NmUzM2U1NzQzNmFiNmM4OGU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTg6MjY6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9QQ0kvaW5kZXgucnN0XG5pbmRleCA1ZDcyMGQyYTQxNWUwMS4uMjNmYjczN2FjOTY5ZWEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vUENJL2luZGV4LnJzdFxuQEAgLTIwLDMgJiM0MzsyMCw0IEBAIFBDSSBCdXMgU3Vic3lzdGVtXG4gICAgY29udHJvbGxlci9pbmRleFxuICAgIGJvb3QtaW50ZXJydXB0c1xuICAgIHRwaFxuJiM0MzsgICBsaXZldXBkYXRlXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvbGl2ZXVwZGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lYmE1NWY4YTkyYWUxMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9QQ0kvbGl2ZXVwZGF0ZS5yc3RcbkBAIC0wLDAgJiM0MzsxLDI5IEBAXG4mIzQzOy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzO1xuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7UENJIFN1cHBvcnQgZm9yIExpdmUgVXBkYXRlXG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY1xuJiM0MzsgICA6ZG9jOiBQQ0kgTGl2ZSBVcGRhdGVcbiYjNDM7XG4mIzQzO0RyaXZlciBBUElcbiYjNDM7PT09PT09PT09PVxuJiM0MztcbiYjNDM7Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY1xuJiM0MzsgICA6ZXhwb3J0OlxuJiM0MztcbiYjNDM7TGl2ZSBVcGRhdGUgQUJJXG4mIzQzOz09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7Li4ga2VybmVsLWRvYzo6IGluY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxuJiM0MzsgICA6ZG9jOiBQQ0kgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgTGl2ZSBVcGRhdGUgQUJJXG4mIzQzO1xuJiM0MzsuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9saW51eC9raG8vYWJpL3BjaS5oXG4mIzQzOyAgIDppbnRlcm5hbDpcbiYjNDM7XG4mIzQzO1NlZSBBbHNvXG4mIzQzOz09PT09PT09XG4mIzQzO1xuJiM0MzsgKiA6ZG9jOmAvY29yZS1hcGkvbGl2ZXVwZGF0ZWBcbiYjNDM7ICogOmRvYzpgL2NvcmUtYXBpL2toby9pbmRleGBcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA0ZjY1YjJhMzc1MjEwMi4uZWQ5ZWVmOGRlNjRjZDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC01MTA1LDcgJiM0Mzs1MTA1LDExIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0XHRleHBsaWNpdGx5IHdoaWNoIG9uZXMgdGhleSBhcmUuXG4gXHRcdGFzc2lnbi1idXNzZXNcdFtYODZdIEFsd2F5cyBhc3NpZ24gYWxsIFBDSSBidXNcbiBcdFx0XHRcdG51bWJlcnMgb3Vyc2VsdmVzLCBvdmVycmlkaW5nXG4tXHRcdFx0XHR3aGF0ZXZlciB0aGUgZmlybXdhcmUgbWF5IGhhdmUgZG9uZS5cbiYjNDM7XHRcdFx0XHR3aGF0ZXZlciB0aGUgZmlybXdhcmUgbWF5IGhhdmUgZG9uZS4gSWdub3JlZFxuJiM0MztcdFx0XHRcdGR1cmluZyBhIExpdmUgVXBkYXRlLCB3aGVyZSB0aGUga2VybmVsIG11c3RcbiYjNDM7XHRcdFx0XHRpbmhlcml0IHRoZSBQQ0kgdG9wb2xvZ3kgKGluY2x1ZGluZyBidXMgbnVtYmVycylcbiYjNDM7XHRcdFx0XHR0byBhdm9pZCBpbnRlcnJ1cHRpbmcgb25nb2luZyBtZW1vcnlcbiYjNDM7XHRcdFx0XHR0cmFuc2FjdGlvbnMgb2YgcHJlc2VydmVkIGRldmljZXMuXG4gXHRcdHVzZXBpcnFtYXNrXHRbWDg2XSBIb25vciB0aGUgcG9zc2libGUgSVJRIG1hc2sgc3RvcmVkXG4gXHRcdFx0XHRpbiB0aGUgQklPUyAkUElSIHRhYmxlLiBUaGlzIGlzIG5lZWRlZCBvblxuIFx0XHRcdFx0c29tZSBzeXN0ZW1zIHdpdGggYnJva2VuIEJJT1Nlcywgbm90YWJseVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbGl2ZXVwZGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0XG5pbmRleCA1YTI5MmQwZjM3MDY0ZC4uMmJjZTI2NDRlYmEyMjMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0XG5AQCAtMSw1ICYjNDM7MSw3IEBAXG4gLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBcbiYjNDM7Li4gX2x1bzpcbiYjNDM7XG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gTGl2ZSBVcGRhdGUgT3JjaGVzdHJhdG9yXG4gPT09PT09PT09PT09PT09PT09PT09PT09XG5AQCAtMTgsNiAmIzQzOzIwLDggQEAgTFVPIFByZXNlcnZpbmcgRmlsZSBEZXNjcmlwdG9yc1xuIC4uIGtlcm5lbC1kb2M6OiBrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jXG4gICAgOmRvYzogTFVPIEZpbGUgRGVzY3JpcHRvcnNcbiBcbiYjNDM7Li4gX2ZsYjpcbiYjNDM7XG4gTFVPIEZpbGUgTGlmZWN5Y2xlIEJvdW5kIEdsb2JhbCBEYXRhXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gLi4ga2VybmVsLWRvYzo6IGtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuY1xuQEAgLTcwLDMgJiM0Mzs3NCw0IEBAIFNlZSBBbHNvXG4gXG4gLSA6ZG9jOmBMaXZlIFVwZGF0ZSB1QVBJIFx1MDAzYy91c2Vyc3BhY2UtYXBpL2xpdmV1cGRhdGVcdTAwM2VgXG4gLSA6ZG9jOmAvY29yZS1hcGkva2hvL2luZGV4YFxuJiM0MzstIDpkb2M6YFBDSSBcdTAwM2MvUENJL2xpdmV1cGRhdGVcdTAwM2VgXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYTNlZDMzN2U4MjdkODYuLjM0N2M0MzVjYTQwNDdjIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMjA4MjQsNiAmIzQzOzIwODI0LDIxIEBAIEw6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4gUzpcdFN1cHBvcnRlZFxuIEY6XHREb2N1bWVudGF0aW9uL1BDSS9wY2ktZXJyb3ItcmVjb3ZlcnkucnN0XG4gXG4mIzQzO1BDSSBMSVZFIFVQREFURVxuJiM0MztNOlx0RGF2aWQgTWF0bGFjayBcdTAwM2NkbWF0bGFja0Bnb29nbGUuY29tXHUwMDNlXG4mIzQzO1I6XHRQYXNoYSBUYXRhc2hpbiBcdTAwM2NwYXNoYS50YXRhc2hpbkBzb2xlZW4uY29tXHUwMDNlXG4mIzQzO1I6XHRNaWtlIFJhcG9wb3J0IFx1MDAzY3JwcHRAa2VybmVsLm9yZ1x1MDAzZVxuJiM0MztSOlx0UHJhdHl1c2ggWWFkYXYgXHUwMDNjcHJhdHl1c2hAa2VybmVsLm9yZ1x1MDAzZVxuJiM0MztMOlx0a2V4ZWNAbGlzdHMuaW5mcmFkZWFkLm9yZ1xuJiM0MztMOlx0bGludXgtcGNpQHZnZXIua2VybmVsLm9yZ1xuJiM0MztTOlx0TWFpbnRhaW5lZFxuJiM0MztUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saXZldXBkYXRlL2xpbnV4LmdpdFxuJiM0MztGOlx0RG9jdW1lbnRhdGlvbi9QQ0kvbGl2ZXVwZGF0ZS5yc3RcbiYjNDM7RjpcdGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY1xuJiM0MztGOlx0ZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oXG4mIzQzO0Y6XHRpbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmhcbiYjNDM7RjpcdGluY2x1ZGUvbGludXgvcGNpX2xpdmV1cGRhdGUuaFxuJiM0MztcbiBQQ0kgTVNJIERSSVZFUiBGT1IgQUxURVJBIE1TSSBJUFxuIEw6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4gUzpcdE9ycGhhblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5pbmRleCAwYzc0MDg1MDliYTI0Yi4uMTZmYmQ0MjEyZTBmNTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5AQCAtMjcxLDYgJiM0MzsyNzEsMjEgQEAgY29uZmlnIFZHQV9BUkJfTUFYX0dQVVNcbiBcdCAgUmVzZXJ2ZXMgc3BhY2UgaW4gdGhlIGtlcm5lbCB0byBtYWludGFpbiByZXNvdXJjZSBsb2NraW5nIGZvclxuIFx0ICBtdWx0aXBsZSBHUFVTLiAgVGhlIG92ZXJoZWFkIGZvciBlYWNoIEdQVSBpcyB2ZXJ5IHNtYWxsLlxuIFxuJiM0Mztjb25maWcgUENJX0xJVkVVUERBVEVcbiYjNDM7XHRib29sIFwmIzM0O1BDSSBMaXZlIFVwZGF0ZSBTdXBwb3J0XCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IExJVkVVUERBVEUgXHUwMDI2XHUwMDI2IDY0QklUIFx1MDAyNlx1MDAyNiAhQ0FSREJVU1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIEVuYWJsZSBQQ0kgY29yZSBzdXBwb3J0IGZvciBwcmVzZXJ2aW5nIFBDSSBkZXZpY2VzIGFjcm9zcyBMaXZlXG4mIzQzO1x0ICBVcGRhdGUuIFRoaXMsIGluIGNvbWJpbmF0aW9uIHdpdGggc3VwcG9ydCBpbiBhIGRldmljZSYjMzk7cyBkcml2ZXIsXG4mIzQzO1x0ICBlbmFibGVzIFBDSSBkZXZpY2VzIHRvIHJ1biBhbmQgcGVyZm9ybSBtZW1vcnkgdHJhbnNhY3Rpb25zXG4mIzQzO1x0ICB1bmludGVycnVwdGVkIGR1cmluZyBhIGtleGVjIGZvciBMaXZlIFVwZGF0ZS5cbiYjNDM7XG4mIzQzO1x0ICBUaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSBlbmFibGVkIGJ5IHVzZXJzIHdobyBwbGFuIHRvIHVzZSBMaXZlXG4mIzQzO1x0ICBVcGRhdGUgZm9yIGtlcm5lbCB1cGdyYWRlcyBhbmQgcmVxdWlyZSBwcmVzZXJ2aW5nIFBDSSBkZXZpY2VzIGR1cmluZ1xuJiM0MztcdCAgdGhvc2UgdXBncmFkZXMuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjNDM7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZ1wmIzM0O1xuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9wY2kvZW5kcG9pbnQvS2NvbmZpZ1wmIzM0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGVcbmluZGV4IDQxZWJjM2I5YTUxODI0Li5lOGQwMDNjYjY3NTc2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZVxuQEAgLTE2LDYgJiM0MzsxNiw3IEBAIG9iai0kKENPTkZJR19QUk9DX0ZTKVx0XHQmIzQzOz0gcHJvYy5vXG4gb2JqLSQoQ09ORklHX1NZU0ZTKVx0XHQmIzQzOz0gcGNpLXN5c2ZzLm8gc2xvdC5vXG4gb2JqLSQoQ09ORklHX0FDUEkpXHRcdCYjNDM7PSBwY2ktYWNwaS5vXG4gb2JqLSQoQ09ORklHX0dFTkVSSUNfUENJX0lPTUFQKSAmIzQzOz0gaW9tYXAub1xuJiM0MztvYmotJChDT05GSUdfUENJX0xJVkVVUERBVEUpXHQmIzQzOz0gbGl2ZXVwZGF0ZS5vXG4gZW5kaWZcbiBcbiBvYmotJChDT05GSUdfT0YpXHRcdCYjNDM7PSBvZi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jIGIvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU5MzVlODhkZTA3M2RjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcbkBAIC0wLDAgJiM0MzsxLDkxMCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2LCBHb29nbGUgTExDLlxuJiM0MzsgKiBEYXZpZCBNYXRsYWNrIFx1MDAzY2RtYXRsYWNrQGdvb2dsZS5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogRE9DOiBQQ0kgTGl2ZSBVcGRhdGVcbiYjNDM7ICpcbiYjNDM7ICogVGhlIFBDSSBzdWJzeXN0ZW0gcGFydGljaXBhdGVzIGluIHRoZSBMaXZlIFVwZGF0ZSBwcm9jZXNzIHRvIGVuYWJsZSBkcml2ZXJzXG4mIzQzOyAqIHRvIHByZXNlcnZlIHRoZWlyIFBDSSBkZXZpY2VzIGFjcm9zcyBrZXhlYy5cbiYjNDM7ICpcbiYjNDM7ICogOnJlZjpgRkxCIFx1MDAzY2ZsYlx1MDAzZWAgRGF0YVxuJiM0MzsgKiA9PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7ICpcbiYjNDM7ICogUENJIGRldmljZSBwcmVzZXJ2YXRpb24gYWNyb3NzIExpdmUgVXBkYXRlIGlzIGJ1aWx0IG9uIHRvcCBvZiB0aGVcbiYjNDM7ICogOnJlZjpgTFVPIFx1MDAzY2x1b1x1MDAzZWAgc3VwcG9ydCBmb3IgZmlsZSBwcmVzZXJ2YXRpb24gYWNyb3NzIGtleGVjLiBEcml2ZXJzIGFyZVxuJiM0MzsgKiBleHBlY3RlZCB0byBleHBvc2UgYSBmaWxlIHRvIHJlcHJlc2VudCBhIHNpbmdsZSBQQ0kgZGV2aWNlIGFuZCBzdXBwb3J0XG4mIzQzOyAqIHByZXNlcnZhdGlvbiBvZiB0aGF0IGZpbGUgd2l0aCBgYGlvY3RsKExJVkVVUERBVEVfU0VTU0lPTl9QUkVTRVJWRV9GRClgYC5cbiYjNDM7ICogVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIGNvbnRyb2wgdGhlIHByZXNlcnZhdGlvbiBvZiBkZXZpY2VzIGFuZCBlbnN1cmVcbiYjNDM7ICogcHJvcGVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHdoaWxlIGEgZGV2aWNlIGlzIHByZXNlcnZlZC4gVGhlIGZpcnN0IGludGVuZGVkXG4mIzQzOyAqIHVzZS1jYXNlIGlzIHByZXNlcnZpbmcgdmZpby1wY2kgZGV2aWNlIGZpbGVzLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENJIGNvcmUgbWFpbnRhaW5zIGl0cyBvd24gc3RhdGUgYWJvdXQgd2hhdCBkZXZpY2VzIGFyZSBiZWluZyBwcmVzZXJ2ZWRcbiYjNDM7ICogYWNyb3NzIExpdmUgVXBkYXRlIHVzaW5nIEZMQiBkYXRhIGluIExVTy4gRXNzZW50aWFsbHksIHRoaXMgYWxsb3dzIHRoZSBQQ0lcbiYjNDM7ICogY29yZSB0byBhbGxvY2F0ZSBzdHJ1Y3QgcGNpX3NlciB3aGVuIHRoZSBmaXJzdCBkZXZpY2UgKGZpbGUpIGlzIHByZXNlcnZlZFxuJiM0MzsgKiBhbmQgZnJlZSBpdCB3aGVuIHRoZSBsYXN0IGRldmljZSAoZmlsZSkgaXMgdW5wcmVzZXJ2ZWQuIEFmdGVyIGtleGVjLCB0aGVcbiYjNDM7ICogUENJIGNvcmUgY2FuIGZldGNoIHRoZSBzdHJ1Y3QgcGNpX3NlciAod2hpY2ggd2FzIGNvbnN0cnVjdGVkIGJ5IHRoZSBwcmV2aW91c1xuJiM0MzsgKiBrZXJuZWwpIGZyb20gTFVPIGF0IGFueSB0aW1lIChlLmcuIGR1cmluZyBlbnVtZXJhdGlvbikgc28gdGhhdCBpdCBrbm93c1xuJiM0MzsgKiB3aGljaCBkZXZpY2VzIHdlcmUgcHJlc2VydmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUbyBlbmFibGUgdGhlIFBDSSBjb3JlIHRvIGJlIG5vdGlmaWVkIHdoZW5ldmVyIGEgZmlsZSByZXByZXNlbnRpbmcgYSBkZXZpY2VcbiYjNDM7ICogaXMgcHJlc2VydmVkLCBkcml2ZXJzIG11c3QgcmVnaXN0ZXIgdGhlaXIgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIHdpdGhcbiYjNDM7ICogdGhlIFBDSSBjb3JlIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgQVBJczpcbiYjNDM7ICpcbiYjNDM7ICogICogYGBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoZHJpdmVyX2ZpbGVfaGFuZGxlcilgYFxuJiM0MzsgKiAgKiBgYHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKGRyaXZlcl9maWxlX2hhbmRsZXIpYGBcbiYjNDM7ICpcbiYjNDM7ICogRGV2aWNlIFRyYWNraW5nXG4mIzQzOyAqID09PT09PT09PT09PT09PVxuJiM0MzsgKlxuJiM0MzsgKiBEcml2ZXJzIG11c3Qgbm90aWZ5IHRoZSBQQ0kgY29yZSB3aGVuIHNwZWNpZmljIGRldmljZXMgYXJlIHByZXNlcnZlZCBvclxuJiM0MzsgKiB1bnByZXNlcnZlZCB3aXRoIHRoZSBmb2xsb3dpbmcgQVBJczpcbiYjNDM7ICpcbiYjNDM7ICogICogYGBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZShwY2lfZGV2KWBgXG4mIzQzOyAqICAqIGBgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShwY2lfZGV2KWBgXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgYWxsb3dzIHRoZSBQQ0kgY29yZSB0byBrZWVwIGl0cyBGTEIgZGF0YSAoc3RydWN0IHBjaV9zZXIpIHVwIHRvIGRhdGVcbiYjNDM7ICogd2l0aCB0aGUgbGlzdCBvZiAqKm91dGdvaW5nKiogcHJlc2VydmVkIGRldmljZXMgZm9yIHRoZSBuZXh0IGtlcm5lbC5cbiYjNDM7ICpcbiYjNDM7ICogQWZ0ZXIga2V4ZWMsIHdoZW5ldmVyIGEgZGV2aWNlIGlzIGVudW1lcmF0ZWQsIHRoZSBQQ0kgY29yZSB3aWxsIGNoZWNrIGlmIGl0XG4mIzQzOyAqIGlzIGFuICoqaW5jb21pbmcqKiBwcmVzZXJ2ZWQgZGV2aWNlIChpLmUuIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXMga2VybmVsKVxuJiM0MzsgKiBieSBjaGVja2luZyB0aGUgaW5jb21pbmcgRkxCIGRhdGEgKHN0cnVjdCBwY2lfc2VyKS5cbiYjNDM7ICpcbiYjNDM7ICogRHJpdmVycyBtdXN0IG5vdGlmeSB0aGUgUENJIGNvcmUgd2hlbiBhbiAqKmluY29taW5nKiogZGV2aWNlIGlzIGRvbmVcbiYjNDM7ICogcGFydGljaXBhdGluZyBpbiB0aGUgaW5jb21pbmcgTGl2ZSBVcGRhdGUgd2l0aCB0aGUgZm9sbG93aW5nIEFQSTpcbiYjNDM7ICpcbiYjNDM7ICogICogYGBwY2lfbGl2ZXVwZGF0ZV9maW5pc2gocGNpX2RldilgYFxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENJIGNvcmUgZG9lcyBub3QgZW5mb3JjZSBhbnkgb3JkZXJpbmcgb2YgYGBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKWBgIGFuZFxuJiM0MzsgKiBgYHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKClgYC4gaS5lLiBBIFBDSSBkZXZpY2UgY2FuIGJlICoqb3V0Z29pbmcqKlxuJiM0MzsgKiAocHJlc2VydmVkIGZvciBuZXh0IGtlcm5lbCkgYW5kICoqaW5jb21pbmcqKiAocHJlc2VydmVkIGJ5IHByZXZpb3VzIGtlcm5lbClcbiYjNDM7ICogYXQgdGhlIHNhbWUgdGltZS5cbiYjNDM7ICpcbiYjNDM7ICogUmVzdHJpY3Rpb25zXG4mIzQzOyAqID09PT09PT09PT09PVxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENJIGNvcmUgZW5mb3JjZXMgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgb24gd2hpY2ggZGV2aWNlcyBjYW4gYmVcbiYjNDM7ICogcHJlc2VydmVkLiBUaGVzZSBtYXkgYmUgcmVsYXhlZCBpbiB0aGUgZnV0dXJlOlxuJiM0MzsgKlxuJiM0MzsgKiAgKiBUaGUgZGV2aWNlIGNhbm5vdCBiZSBhIFZpcnR1YWwgRnVuY3Rpb24gKFZGKS5cbiYjNDM7ICpcbiYjNDM7ICogICogVGhlIGRldmljZSBjYW5ub3QgcmVxdWlyZSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIHRvIGVuYWJsZSBBY2Nlc3NcbiYjNDM7ICogICAgQ29udHJvbCBTZXJ2aWNlcyAoQUNTKS5cbiYjNDM7ICpcbiYjNDM7ICogRHJpdmVyIEJpbmRpbmdcbiYjNDM7ICogPT09PT09PT09PT09PT1cbiYjNDM7ICpcbiYjNDM7ICogSW4gdGhlIG91dGdvaW5nIGtlcm5lbCwgaXQgaXMgdGhlIGRyaXZlciYjMzk7cyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBpdFxuJiM0MzsgKiBkb2VzIG5vdCByZWxlYXNlIGEgZGV2aWNlIGJldHdlZW4gcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSBhbmRcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpLlxuJiM0MzsgKlxuJiM0MzsgKiBJbiB0aGUgaW5jb21pbmcga2VybmVsLCBpdCBpcyB0aGUgZHJpdmVyJiMzOTtzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGl0XG4mIzQzOyAqIGRvZXMgbm90IHJlbGVhc2UgYSBwcmVzZXJ2ZWQgZGV2aWNlIGJldHdlZW4gcHJvYmUoKSBhbmRcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkuXG4mIzQzOyAqXG4mIzQzOyAqIEl0IGlzIHRoZSB1c2VyJiMzOTtzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGluY29taW5nIHByZXNlcnZlZCBkZXZpY2VzIGFyZVxuJiM0MzsgKiBib3VuZCB0byB0aGUgY29ycmVjdCBkcml2ZXIuIGkuZS4gVGhlIFBDSSBjb3JlIGRvZXMgbm90IHByb3RlY3QgYWdhaW5zdCBhXG4mIzQzOyAqIGRldmljZSBnZXR0aW5nIHByZXNlcnZlZCBieSBkcml2ZXIgQSBpbiB0aGUgb3V0Z29pbmcga2VybmVsIGFuZCB0aGVuIGdldHRpbmdcbiYjNDM7ICogYm91bmQgdG8gZHJpdmVyIEIgaW4gdGhlIGluY29taW5nIGtlcm5lbC4gVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG4mIzQzOyAqXG4mIzQzOyAqIEJERiBTdGFiaWxpdHlcbiYjNDM7ICogPT09PT09PT09PT09PVxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENJIGNvcmUgZ3VhcmFudGVlcyB0aGF0IHByZXNlcnZlZCBkZXZpY2VzIGNhbiBiZSBpZGVudGlmaWVkIGJ5IHRoZSBzYW1lXG4mIzQzOyAqIGJ1cywgZGV2aWNlLCBhbmQgZnVuY3Rpb24gbnVtYmVycyBmb3IgYXMgbG9uZyBhcyB0aGV5IGFyZSBwcmVzZXJ2ZWRcbiYjNDM7ICogKGluY2x1ZGluZyBhY3Jvc3Mga2V4ZWMpLiBUbyBhY2NvbXBsaXNoIHRoaXMsIHRoZSBQQ0kgY29yZSBhbHdheXMgaW5oZXJpdHNcbiYjNDM7ICogdGhlIHNlY29uZGFyeSBhbmQgc3Vib3JkaW5hdGUgYnVzIG51bWJlcnMgYXNzaWduZWQgdG8gYnJpZGdlcyBkdXJpbmcgc2Nhbm5pbmdcbiYjNDM7ICogaWYgYW55IGRldmljZSBpcyBwcmVzZXJ2ZWQuIFRoaXMgaXMgdHJ1ZSBldmVuIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBhbHdheXNcbiYjNDM7ICogYXNzaWduIG5ldyBidXMgbnVtYmVycyBkdXJpbmcgc2Nhbm5pbmcuIFRoZSBrZXJuZWwgYXNzdW1lcyB0aGUgcHJldmlvdXNcbiYjNDM7ICoga2VybmVsIGVzdGFibGlzaGVkIGEgc2FuZSBidXMgdG9wb2xvZ3kgYWNyb3NzIGtleGVjLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiBhIG1pc2NvbmZpZ3VyZWQgb3IgdW5jb25maWd1cmVkIGJyaWRnZSBpcyBlbmNvdW50ZXJlZCBkdXJpbmcgZW51bWVyYXRpb25cbiYjNDM7ICogd2hpbGUgdGhlcmUgYXJlIHByZXNlcnZlZCBkZXZpY2VzLCBpdHMgc2Vjb25kYXJ5IGFuZCBzdWJvcmRpbmF0ZSBidXMgbnVtYmVyc1xuJiM0MzsgKiB3aWxsIGJlIGNsZWFyZWQgYW5kIGRldmljZXMgYmVsb3cgaXQgd2lsbCBub3QgYmUgZW51bWVyYXRlZC5cbiYjNDM7ICpcbiYjNDM7ICogUENJLXRvLVBDSSBCcmlkZ2VzXG4mIzQzOyAqID09PT09PT09PT09PT09PT09PVxuJiM0MzsgKlxuJiM0MzsgKiBBbnkgUENJLXRvLVBDSSBicmlkZ2VzIHVwc3RyZWFtIG9mIGEgcHJlc2VydmVkIGRldmljZSBhcmUgYXV0b21hdGljYWxseVxuJiM0MzsgKiBwcmVzZXJ2ZWQgd2hlbiB0aGUgZGV2aWNlIGlzIHByZXNlcnZlZC4gVGhlIFBDSSBjb3JlIGtlZXBzIHRyYWNrIG9mIHRoZVxuJiM0MzsgKiBudW1iZXIgb2YgZG93bnN0cmVhbSBkZXZpY2VzIHRoYXQgYXJlIHByZXNlcnZlZCB1bmRlciBhIGJyaWRnZSBzbyB0aGF0IHRoZVxuJiM0MzsgKiBicmlkZ2UgaXMgb25seSB1bnByZXNlcnZlZCBvbmNlIGFsbCBkb3duc3RyZWFtIGRldmljZXMgYXJlIHVucHJlc2VydmVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGVuYWJsZXMgdGhlIFBDSSBjb3JlIGFuZCBhbnkgZHJpdmVycyBib3VuZCB0byB0aGUgYnJpZGdlIHRvIHBhcnRpY2lwYXRlXG4mIzQzOyAqIGluIHRoZSBMaXZlIFVwZGF0ZSBzbyB0aGF0IHByZXNlcnZlZCBlbmRwb2ludHMgY2FuIGNvbnRpbnVlIGlzc3VpbmcgbWVtb3J5XG4mIzQzOyAqIHRyYW5zYWN0aW9ucyBkdXJpbmcgdGhlIExpdmUgVXBkYXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBIYW5kbGluZyBQcmVzZXJ2ZWQgRGV2aWNlc1xuJiM0MzsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENJIGNvcmUgdHJlYXRzIHByZXNlcnZlZCBkZXZpY2VzIGRpZmZlcmVudGx5IHRoYW4gbm9uLXByZXNlcnZlZCBkZXZpY2VzLlxuJiM0MzsgKiBUaGlzIHNlY3Rpb24gZW51bWVyYXRlcyB0aG9zZSBkaWZmZXJlbmNlcy5cbiYjNDM7ICpcbiYjNDM7ICogICogVGhlIFBDSSBjb3JlIGluaGVyaXRzIGFsbCBBQ1MgZmxhZ3MgZW5hYmxlZCBvbiBpbmNvbWluZyBwcmVzZXJ2ZWQgZGV2aWNlc1xuJiM0MzsgKiAgICByYXRoZXIgdGhhbiBhc3NpZ25pbmcgbmV3IG9uZXMuIFRoaXMgZW5zdXJlcyB0aGF0IFRMUHMgYXJlIHJvdXRlZCB0aGUgc2FtZVxuJiM0MzsgKiAgICB3YXkgYWZ0ZXIgTGl2ZSBVcGRhdGUgYW5kIGVuc3VyZXMgdGhhdCBJT01NVSBncm91cHMgZG8gbm90IGNoYW5nZS4gTm90ZVxuJiM0MzsgKiAgICB0aGF0IGEgZGV2aWNlIHdpbGwgdXNlIGl0cyBpbmhlcml0ZWQgQUNTIGZsYWdzIGZvciB0aGUgbGlmZXRpbWUgb2YgaXRzXG4mIzQzOyAqICAgIHN0cnVjdCBwY2lfZGV2IChpLmUuIGV2ZW4gYWZ0ZXIgcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkpLlxuJiM0MzsgKlxuJiM0MzsgKiAgKiBUaGUgUENJIGNvcmUgaW5oZXJpdHMgQVJJIEZvcndhcmRpbmcgRW5hYmxlIG9uIGFsbCBicmlkZ2VzIHdpdGggZG93bnN0cmVhbVxuJiM0MzsgKiAgICBwcmVzZXJ2ZWQgZGV2aWNlcyB0byBlbnN1cmUgdGhhdCBhbGwgcHJlc2VydmVkIGRldmljZXMgb24gdGhlIGJyaWRnZSYjMzk7c1xuJiM0MzsgKiAgICBzZWNvbmRhcnkgYnVzIGFyZSBhZGRyZXNzYWJsZSBhZnRlciB0aGUgTGl2ZSBVcGRhdGUuXG4mIzQzOyAqXG4mIzQzOyAqICAqIFRoZSBQQ0kgY29yZSBkb2VzIG5vdCBkaXNhYmxlIGJ1cyBtYXN0ZXJpbmcgb24gb3V0Z29pbmcgcHJlc2VydmVkIGRldmljZXNcbiYjNDM7ICogICAgZHVyaW5nIGtleGVjLiBUaGlzIGFsbG93cyBwcmVzZXJ2ZWQgZGV2aWNlcyB0byBpc3N1ZSBtZW1vcnkgdHJhbnNhY3Rpb25zXG4mIzQzOyAqICAgIHRocm91Z2hvdXQgdGhlIExpdmUgVXBkYXRlLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7UENJOiBcJiMzNDsgS0JVSUxEX0JBU0VOQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGl2ZXVwZGF0ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2hvX2Jsb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xpdmV1cGRhdGUuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtwY2kuaFwmIzM0O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwgLSBHbG9iYWwgc3RhdGUgZm9yIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0XG4mIzQzOyAqIEByd3NlbTogUmVhZGVyL3dyaXRlciBzZW1hcGhvcmUgdXNlZCB0byBwcm90ZWN0IHRoZSBpbmNvbWluZyBhbmQgb3V0Z29pbmdcbiYjNDM7ICogICAgICAgICBGTEJzLCBhbmQgdGhlIHJlZmVyZW5jZXMgdG8gdGhlbSBpbiBzdHJ1Y3QgcGNpX2Rldi5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwge1xuJiM0MztcdHN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9saXZldXBkYXRlX2dsb2JhbCBwY2lfbGl2ZXVwZGF0ZSA9IHtcbiYjNDM7XHQucndzZW0gPSBfX1JXU0VNX0lOSVRJQUxJWkVSKHBjaV9saXZldXBkYXRlLnJ3c2VtKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAtIE91dGdvaW5nIFBDSSBGTEIgb2JqZWN0XG4mIzQzOyAqIEBzZXI6IFBvaW50ZXIgdG8gdGhlIHByZXNlcnZlZCBzdHJ1Y3QgcGNpX3Nlci5cbiYjNDM7ICogQGJsb2NrX3NldDogVGhlIEtITyBibG9jayBzZXQgaG9sZGluZyB0aGUgb3V0Z29pbmcgZGV2aWNlcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIHJ1bnRpbWUgc3RhdGUgZm9yIHRoZSBvdXRnb2luZyBQQ0kgTGl2ZSBVcGRhdGVcbiYjNDM7ICogc3RhdGUuIEl0IHdyYXBzIHRoZSBzZXJpYWxpemVkIHBjaV9zZXIgYW5kIHRoZSBibG9ja19zZXQgdXNlZCB0byBtYW5hZ2VcbiYjNDM7ICogdGhlIHNlcmlhbGl6ZWQgZW50cmllcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwY2lfZmxiX291dGdvaW5nIHtcbiYjNDM7XHRzdHJ1Y3QgcGNpX3NlciAqc2VyO1xuJiM0MztcdHN0cnVjdCBraG9fYmxvY2tfc2V0IGJsb2NrX3NldDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAtIEluY29taW5nIFBDSSBGTEIgb2JqZWN0XG4mIzQzOyAqIEBzZXI6IFRoZSBpbmNvbWluZyBzdHJ1Y3QgcGNpX3NlciBmcm9tIHRoZSBwcmV2aW91cyBrZXJuZWwuXG4mIzQzOyAqIEB4YTogWGFycmF5IHVzZWQgdG8gcXVpY2tseSBsb29rdXAgZGV2aWNlcyBpbiBAc2VyLlxuJiM0MzsgKiBAYmxvY2tfc2V0OiBUaGUgS0hPIGJsb2NrIHNldCBob2xkaW5nIHRoZSBpbmNvbWluZyBkZXZpY2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgcnVudGltZSBzdGF0ZSBmb3IgdGhlIGluY29taW5nIFBDSSBMaXZlIFVwZGF0ZVxuJiM0MzsgKiBzdGF0ZS4gSXQgd3JhcHMgdGhlIHNlcmlhbGl6ZWQgcGNpX3NlciwgdGhlIGJsb2NrX3NldCB1c2VkIHRvIHJlc3RvcmVcbiYjNDM7ICogdGhlIHNlcmlhbGl6ZWQgZW50cmllcywgYW5kIGFuIHhhcnJheSBmb3IgZmFzdCBsb29rdXBzLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBjaV9mbGJfaW5jb21pbmcge1xuJiM0MztcdHN0cnVjdCBwY2lfc2VyICpzZXI7XG4mIzQzO1x0c3RydWN0IHhhcnJheSB4YTtcbiYjNDM7XHRzdHJ1Y3Qga2hvX2Jsb2NrX3NldCBibG9ja19zZXQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwY2lfc2VyX3hhX2tleSh1MzIgZG9tYWluLCB1MTYgYmRmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICh1bnNpZ25lZCBsb25nKWRvbWFpbiBcdTAwM2NcdTAwM2MgMTYgfCBiZGY7XG4mIzQzO31cbiYjNDM7c3RhdGljIGludCBwY2lfZmxiX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nO1xuJiM0MztcdHN0cnVjdCBwY2lfc2VyICpzZXI7XG4mIzQzO1xuJiM0MztcdG91dGdvaW5nID0ga3phbGxvY19vYmooKm91dGdvaW5nKTtcbiYjNDM7XHRpZiAoIW91dGdvaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHNlciA9IGtob19hbGxvY19wcmVzZXJ2ZShzaXplb2YoKnNlcikpO1xuJiM0MztcdGlmIChJU19FUlIoc2VyKSkge1xuJiM0MztcdFx0a2ZyZWUob3V0Z29pbmcpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoc2VyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNlci1cdTAwM2Vucl9kZXZpY2VzID0gMDtcbiYjNDM7XHRzZXItXHUwMDNlZGV2aWNlcyA9IDA7XG4mIzQzO1xuJiM0MztcdG91dGdvaW5nLVx1MDAzZXNlciA9IHNlcjtcbiYjNDM7XHRraG9fYmxvY2tfc2V0X2luaXQoXHUwMDI2b3V0Z29pbmctXHUwMDNlYmxvY2tfc2V0LCBzaXplb2Yoc3RydWN0IHBjaV9kZXZfc2VyKSk7XG4mIzQzO1xuJiM0MztcdGFyZ3MtXHUwMDNlb2JqID0gb3V0Z29pbmc7XG4mIzQzO1x0YXJncy1cdTAwM2VkYXRhID0gdmlydF90b19waHlzKHNlcik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBjaV9mbGJfdW5wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BfYXJncyAqYXJncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZyA9IGFyZ3MtXHUwMDNlb2JqO1xuJiM0MztcbiYjNDM7XHRXQVJOX09OKG91dGdvaW5nLVx1MDAzZXNlci1cdTAwM2Vucl9kZXZpY2VzKTtcbiYjNDM7XHRraG9fYmxvY2tfc2V0X2Rlc3Ryb3koXHUwMDI2b3V0Z29pbmctXHUwMDNlYmxvY2tfc2V0KTtcbiYjNDM7XHRraG9fdW5wcmVzZXJ2ZV9mcmVlKG91dGdvaW5nLVx1MDAzZXNlcik7XG4mIzQzO1x0a2ZyZWUob3V0Z29pbmcpO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O1VucHJlc2VydmVkIHN0cnVjdCBwY2lfc2VyXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwY2lfZmxiX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9zZXIgKnNlciA9IHBoeXNfdG9fdmlydChhcmdzLVx1MDAzZWRhdGEpO1xuJiM0MztcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbiYjNDM7XHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXI7XG4mIzQzO1x0c3RydWN0IGtob19ibG9ja19zZXRfaXQgaXQ7XG4mIzQzO1x0aW50IHJldCA9IC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGluY29taW5nID0ga3phbGxvY19vYmooKmluY29taW5nKTtcbiYjNDM7XHRpZiAoIWluY29taW5nKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9mcmVlO1xuJiM0MztcbiYjNDM7XHRpbmNvbWluZy1cdTAwM2VzZXIgPSBzZXI7XG4mIzQzO1x0eGFfaW5pdChcdTAwMjZpbmNvbWluZy1cdTAwM2V4YSk7XG4mIzQzO1xuJiM0MztcdGtob19ibG9ja19zZXRfaW5pdChcdTAwMjZpbmNvbWluZy1cdTAwM2VibG9ja19zZXQsIHNpemVvZihzdHJ1Y3QgcGNpX2Rldl9zZXIpKTtcbiYjNDM7XHRyZXQgPSBraG9fYmxvY2tfc2V0X3Jlc3RvcmUoXHUwMDI2aW5jb21pbmctXHUwMDNlYmxvY2tfc2V0LCBzZXItXHUwMDNlZGV2aWNlcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfaW5jb21pbmc7XG4mIzQzO1xuJiM0MztcdGtob19ibG9ja19zZXRfaXRfaW5pdChcdTAwMjZpdCwgXHUwMDI2aW5jb21pbmctXHUwMDNlYmxvY2tfc2V0KTtcbiYjNDM7XHR3aGlsZSAoKGRldl9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3JlYWRfZW50cnkoXHUwMDI2aXQpKSkge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBrZXk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFkZXZfc2VyLVx1MDAzZXJlZmNvdW50KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRrZXkgPSBwY2lfc2VyX3hhX2tleShkZXZfc2VyLVx1MDAzZWRvbWFpbiwgZGV2X3Nlci1cdTAwM2ViZGYpO1xuJiM0MztcdFx0cmV0ID0geGFfaW5zZXJ0KFx1MDAyNmluY29taW5nLVx1MDAzZXhhLCBrZXksIGRldl9zZXIsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBlcnJfYmxvY2tfc2V0X2Rlc3Ryb3k7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhcmdzLVx1MDAzZW9iaiA9IGluY29taW5nO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2Jsb2NrX3NldF9kZXN0cm95OlxuJiM0MztcdGtob19ibG9ja19zZXRfZGVzdHJveShcdTAwMjZpbmNvbWluZy1cdTAwM2VibG9ja19zZXQpO1xuJiM0MztlcnJfZnJlZV9pbmNvbWluZzpcbiYjNDM7XHR4YV9kZXN0cm95KFx1MDAyNmluY29taW5nLVx1MDAzZXhhKTtcbiYjNDM7XHRrZnJlZShpbmNvbWluZyk7XG4mIzQzO2Vycl9yZXN0b3JlX2ZyZWU6XG4mIzQzO1x0a2hvX3Jlc3RvcmVfZnJlZShzZXIpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBjaV9mbGJfZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKmluY29taW5nID0gYXJncy1cdTAwM2VvYmo7XG4mIzQzO1xuJiM0MztcdHhhX2Rlc3Ryb3koXHUwMDI2aW5jb21pbmctXHUwMDNleGEpO1xuJiM0MztcdGtob19ibG9ja19zZXRfZGVzdHJveShcdTAwMjZpbmNvbWluZy1cdTAwM2VibG9ja19zZXQpO1xuJiM0MztcdGtob19yZXN0b3JlX2ZyZWUoaW5jb21pbmctXHUwMDNlc2VyKTtcbiYjNDM7XHRrZnJlZShpbmNvbWluZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BzIHBjaV9saXZldXBkYXRlX2ZsYl9vcHMgPSB7XG4mIzQzO1x0LnByZXNlcnZlID0gcGNpX2ZsYl9wcmVzZXJ2ZSxcbiYjNDM7XHQudW5wcmVzZXJ2ZSA9IHBjaV9mbGJfdW5wcmVzZXJ2ZSxcbiYjNDM7XHQucmV0cmlldmUgPSBwY2lfZmxiX3JldHJpZXZlLFxuJiM0MztcdC5maW5pc2ggPSBwY2lfZmxiX2ZpbmlzaCxcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgcGNpX2xpdmV1cGRhdGVfZmxiID0ge1xuJiM0MztcdC5vcHMgPSBcdTAwMjZwY2lfbGl2ZXVwZGF0ZV9mbGJfb3BzLFxuJiM0MztcdC5jb21wYXRpYmxlID0gUENJX0xVT19GTEJfQ09NUEFUSUJMRSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBsaXZldXBkYXRlX2ZsYl9nZXRfb3V0Z29pbmcoXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiLCAodm9pZCAqKilcdTAwMjZvdXRnb2luZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdGlmICghb3V0Z29pbmcpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG91dGdvaW5nO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kZXZfc2VyICpwY2lfZ2V0X2VtcHR5X29yX2FwcGVuZChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXIsICpmb3VuZCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGtob19ibG9ja19zZXRfaXQgaXQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHR1MzIgY291bnQgPSAwO1xuJiM0MztcbiYjNDM7XHRraG9fYmxvY2tfc2V0X2l0X2luaXQoXHUwMDI2aXQsIFx1MDAyNm91dGdvaW5nLVx1MDAzZWJsb2NrX3NldCk7XG4mIzQzO1x0d2hpbGUgKChkZXZfc2VyID0ga2hvX2Jsb2NrX3NldF9pdF9yZWFkX2VudHJ5KFx1MDAyNml0KSkpIHtcbiYjNDM7XHRcdGNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChkZXZfc2VyLVx1MDAzZXJlZmNvdW50ID09IDAgXHUwMDI2XHUwMDI2ICFmb3VuZClcbiYjNDM7XHRcdFx0Zm91bmQgPSBkZXZfc2VyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGZvdW5kKVxuJiM0MztcdFx0cmV0dXJuIGZvdW5kO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBraG9fYmxvY2tfc2V0X2dyb3coXHUwMDI2b3V0Z29pbmctXHUwMDNlYmxvY2tfc2V0LCBjb3VudCAmIzQzOyAxKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvdW50ID09IDApXG4mIzQzO1x0XHRraG9fYmxvY2tfc2V0X2l0X2luaXQoXHUwMDI2aXQsIFx1MDAyNm91dGdvaW5nLVx1MDAzZWJsb2NrX3NldCk7XG4mIzQzO1xuJiM0MztcdGRldl9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3Jlc2VydmVfZW50cnkoXHUwMDI2aXQpO1xuJiM0MztcdGlmICghZGV2X3NlcilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGV2X3NlcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX2RldmljZShzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsIHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXIgPSBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZztcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VsaXZldXBkYXRlLmZyb3plbikge1xuJiM0MztcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2UgYWZ0ZXIgaXQgaXMgZnJvemVuIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZGV2X3Nlcikge1xuJiM0MztcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2UgdGhhdCBpcyBub3QgcHJlc2VydmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXZfc2VyLVx1MDAzZXJlZmNvdW50KSB7XG4mIzQzO1x0XHRwY2lfV0FSTihkZXYsIDEsIFwmIzM0O1ByZXNlcnZlZCBkZXZpY2UgaGFzIGEgMCByZWZjb3VudCFcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoLS1kZXZfc2VyLVx1MDAzZXJlZmNvdW50KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBjaV9pbmZvKGRldiwgXCYjMzQ7RGV2aWNlIHdpbGwgbm8gbG9uZ2VyIGJlIHByZXNlcnZlZCBhY3Jvc3MgbmV4dCBMaXZlIFVwZGF0ZVxcblwmIzM0Oyk7XG4mIzQzO1x0b3V0Z29pbmctXHUwMDNlc2VyLVx1MDAzZW5yX2RldmljZXMtLTtcbiYjNDM7XHRtZW1zZXQoZGV2X3NlciwgMCwgc2l6ZW9mKCpkZXZfc2VyKSk7XG4mIzQzO1x0ZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmcgPSBOVUxMO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZV9hZ2FpbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZy1cdTAwM2VyZWZjb3VudCkge1xuJiM0MztcdFx0cGNpX1dBUk4oZGV2LCAxLCBcJiMzNDtQcmVzZXJ2ZWQgZGV2aWNlIHdpdGggMCByZWZjb3VudCFcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuZHBvaW50IGRldmljZXMgc2hvdWxkIG5vdCBiZSBwcmVzZXJ2ZWQgbW9yZSB0aGFuIG9uY2UuIEJyaWRnZXMgYXJlXG4mIzQzO1x0ICogcHJlc2VydmVkIG9uY2UgZm9yIGV2ZXJ5IGRvd25zdHJlYW0gZGV2aWNlIHRoYXQgaXMgcHJlc2VydmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZGV2LVx1MDAzZXN1Ym9yZGluYXRlKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmctXHUwMDNlcmVmY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfZGV2aWNlKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywgc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2X3NlciAqZGV2X3NlcjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEbyBub3QgcHJlc2VydmUgZGV2aWNlcyB0aGF0IHJlbHkgb24gZGV2aWNlLXNwZWNpZmljIEFDUyBlcXVpdmFsZW50c1xuJiM0MztcdCAqIChmb3Igbm93KSBzaW5jZSB0aGF0IHdvdWxkIGNvbXBsaWNhdGUga2VlcGluZyBBQ1MgY29uc3RhbnQgYWNyb3NzXG4mIzQzO1x0ICogTGl2ZSBVcGRhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHtcbiYjNDM7XHRcdHBjaV93YXJuKGRldiwgXCYjMzQ7UmVmdXNpbmcgdG8gcHJlc2VydmUgZGV2aWNlIHRoYXQgcmVsaWVzIG9uIEFDUyBxdWlya3NcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZfc2VyID0gcGNpX2dldF9lbXB0eV9vcl9hcHBlbmQob3V0Z29pbmcpO1xuJiM0MztcdGlmIChJU19FUlIoZGV2X3NlcikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihkZXZfc2VyKTtcbiYjNDM7XG4mIzQzO1x0cGNpX2luZm8oZGV2LCBcJiMzNDtEZXZpY2Ugd2lsbCBiZSBwcmVzZXJ2ZWQgYWNyb3NzIG5leHQgTGl2ZSBVcGRhdGVcXG5cJiMzNDspO1xuJiM0MztcdG91dGdvaW5nLVx1MDAzZXNlci1cdTAwM2Vucl9kZXZpY2VzJiM0MzsmIzQzOztcbiYjNDM7XHRvdXRnb2luZy1cdTAwM2VzZXItXHUwMDNlZGV2aWNlcyA9IGtob19ibG9ja19zZXRfaGVhZF9wYShcdTAwMjZvdXRnb2luZy1cdTAwM2VibG9ja19zZXQpO1xuJiM0MztcbiYjNDM7XHRkZXZfc2VyLVx1MDAzZWRvbWFpbiA9IHBjaV9kb21haW5fbnIoZGV2LVx1MDAzZWJ1cyk7XG4mIzQzO1x0ZGV2X3Nlci1cdTAwM2ViZGYgPSBwY2lfZGV2X2lkKGRldik7XG4mIzQzO1x0ZGV2X3Nlci1cdTAwM2VyZWZjb3VudCA9IDE7XG4mIzQzO1xuJiM0MztcdGRldi1cdTAwM2VsaXZldXBkYXRlLm91dGdvaW5nID0gZGV2X3NlcjtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2Uoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VsaXZldXBkYXRlLmZyb3plbikge1xuJiM0MztcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtDYW5ub3QgcHJlc2VydmUgZGV2aWNlIGFmdGVyIGl0IGlzIGZyb3plbiFcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmcpXG4mIzQzO1x0XHRyZXR1cm4gcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfZGV2aWNlX2FnYWluKGRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3BjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZShvdXRnb2luZywgZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBmb3JfZWFjaF9wY2lfZGV2X2luX3BhdGgoX2QsIF9zdGFydCwgX2VuZCkgXFxcbiYjNDM7XHRmb3IgKChfZCkgPSAoX3N0YXJ0KTsgKF9kKSAhPSAoX2VuZCk7IChfZCkgPSAoX2QpLVx1MDAzZWJ1cy1cdTAwM2VzZWxmKVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19wY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX3BhdGgoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBwY2lfZGV2ICplbmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqZGV2O1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9wY2lfZGV2X2luX3BhdGgoZGV2LCBzdGFydCwgZW5kKSB7XG4mIzQzO1x0XHRpZiAocGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9kZXZpY2Uob3V0Z29pbmcsIGRldikpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXG4mIzQzO3tcbiYjNDM7XHRfX3BjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChvdXRnb2luZywgc3RhcnQsIC8qZW5kPSovTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfcGF0aChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqZGV2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7XG4mIzQzO1x0XHRyZXQgPSBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2Uob3V0Z29pbmcsIGRldik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdF9fcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBzdGFydCwgZGV2KTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSAtIFByZXNlcnZlIGEgUENJIGRldmljZSBhY3Jvc3MgTGl2ZSBVcGRhdGVcbiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2UgdG8gcHJlc2VydmUuXG4mIzQzOyAqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgbm90aWZpZXMgdGhlIFBDSSBjb3JlIHRoYXQgYSBQQ0kgZGV2aWNlIHNob3VsZCBiZVxuJiM0MzsgKiBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBuZXh0IExpdmUgVXBkYXRlLiBEcml2ZXJzIGFyZSBleHBlY3RlZCB0byBjYWxsXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgZnJvbSB0aGVpciBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXJcbiYjNDM7ICogcHJlc2VydmUoKSBjYWxsYmFjayB0byBlbnN1cmUgdGhlIG91dGdvaW5nIHN0cnVjdCBwY2lfc2VyIGlzIGFscmVhZHkgc2V0IHVwLlxuJiM0MzsgKlxuJiM0MzsgKiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSgpIGF1dG9tYXRpY2FsbHkgcHJlc2VydmVzIGFsbCBicmlkZ2VzIHVwc3RyZWFtIG9mXG4mIzQzOyAqIEBkZXYuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZWlzX3ZpcnRmbilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xuJiM0MztcbiYjNDM7XHRvdXRnb2luZyA9IHBjaV9saXZldXBkYXRlX2ZsYl9nZXRfb3V0Z29pbmcoKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG91dGdvaW5nKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKG91dGdvaW5nKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX3BhdGgob3V0Z29pbmcsIGRldik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfcHJlc2VydmUpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSAtIENhbmNlbCBwcmVzZXJ2YXRpb24gb2YgYSBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIHVucHJlc2VydmUuXG4mIzQzOyAqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSBub3RpZmllcyB0aGUgUENJIGNvcmUgdGhhdCBhIFBDSSBkZXZpY2Ugc2hvdWxkIG5vXG4mIzQzOyAqIGxvbmdlciBiZSBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBuZXh0IExpdmUgVXBkYXRlLiBEcml2ZXJzIGFyZSBleHBlY3RlZCB0byBjYWxsXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSBmcm9tIHRoZWlyIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlclxuJiM0MzsgKiB1bnByZXNlcnZlKCkgY2FsbGJhY2sgdG8gZW5zdXJlIHRoZSBvdXRnb2luZyBzdHJ1Y3QgcGNpX3NlciBpcyBhbHJlYWR5IHNldFxuJiM0MzsgKiB1cC5cbiYjNDM7ICpcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpIGF1dG9tYXRpY2FsbHkgdW5wcmVzZXJ2ZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2ZcbiYjNDM7ICogQGRldi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbiYjNDM7XG4mIzQzO1x0b3V0Z29pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X291dGdvaW5nKCk7XG4mIzQzO1x0aWYgKElTX0VSUihvdXRnb2luZykpIHtcbiYjNDM7XHRcdHBjaV93YXJuKGRldiwgXCYjMzQ7Q2Fubm90IHVucHJlc2VydmUgZGV2aWNlIHdpdGhvdXQgb3V0Z29pbmcgTGl2ZSBVcGRhdGUgc3RhdGVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBkZXYpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwY2lfZmxiX2luY29taW5nICpwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAqaW5jb21pbmcgPSBOVUxMO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGxpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZyhcdTAwMjZwY2lfbGl2ZXVwZGF0ZV9mbGIsICh2b2lkICoqKVx1MDAyNmluY29taW5nKTtcbiYjNDM7XG4mIzQzO1x0LyogTGl2ZSBVcGRhdGUgaXMgbm90IGVuYWJsZWQuICovXG4mIzQzO1x0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHQvKiBMaXZlIFVwZGF0ZSBpcyBlbmFibGVkLCBidXQgdGhlcmUgaXMgbm8gaW5jb21pbmcgRkxCIGRhdGEuICovXG4mIzQzO1x0aWYgKHJldCA9PSAtRU5PREFUQSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIExpdmUgVXBkYXRlIGlzIGVuYWJsZWQgYW5kIHRoZXJlIGlzIGluY29taW5nIEZMQiBkYXRhLCBidXQgbm9uZSBvZiBpdFxuJiM0MztcdCAqIG1hdGNoZXMgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGUuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIGNvdWxkIG1lYW4gdGhhdCBubyBQQ0kgRkxCIGRhdGEgd2FzIHBhc3NlZCBieSB0aGUgcHJldmlvdXNcbiYjNDM7XHQgKiBrZXJuZWwsIGJ1dCBpdCBjb3VsZCBhbHNvIG1lYW4gdGhlIHByZXZpb3VzIGtlcm5lbCB1c2VkIGEgZGlmZmVyZW50XG4mIzQzO1x0ICogY29tcGF0aWJpbGl0eSBzdHJpbmcgKGkuZS4gYSBkaWZmZXJlbnQgQUJJKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmV0ID09IC1FTk9FTlQpIHtcbiYjNDM7XHRcdHByX2luZm9fb25jZShcJiMzNDtObyBpbmNvbWluZyBGTEIgbWF0Y2hlZCAlc1xcblwmIzM0OywgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGUpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZXJlIGlzIGluY29taW5nIEZMQiBkYXRhIHRoYXQgbWF0Y2hlcyBwY2lfbGl2ZXVwZGF0ZV9mbGIuY29tcGF0aWJsZVxuJiM0MztcdCAqIGJ1dCBpdCBjYW5ub3QgYmUgcmV0cmlldmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRwYW5pYyhcJiMzNDtGYWlsZWQgdG8gcmV0cmlldmUgaW5jb21pbmcgRkxCIGRhdGEgKCVkKVxcblwmIzM0OywgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGluY29taW5nO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRsaXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luKCkgLSBEZXRlcm1pbmUgaWYgYSBicmlkZ2Ugc2hvdWxkIGluaGVyaXQgYnVzIG51bWJlcnNcbiYjNDM7ICogQGJ1czogVGhlIHBhcmVudCBidXMgb2YgdGhlIGJyaWRnZS5cbiYjNDM7ICogQGRldjogVGhlIFBDSSBicmlkZ2UgZGV2aWNlLlxuJiM0MzsgKiBAcGFzczogVGhlIHNjYW4gcGFzcyAoMCBmb3IgZmlyc3QgcGFzcywgMSBmb3Igc2Vjb25kIHBhc3MpLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUENJIGNvcmUgd2hlbiBpdCBiZWdpbnMgc2Nhbm5pbmcgYSBicmlkZ2UuXG4mIzQzOyAqIEl0IGRldGVybWluZXMgd2hldGhlciB0aGUgYnJpZGdlIHNob3VsZCBpbmhlcml0IHRoZSBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlXG4mIzQzOyAqIGJ1cyBudW1iZXJzIGFzc2lnbmVkIHRvIGl0IGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvXG4mIzQzOyAqIGtlZXAgYnVzIG51bWJlcnMgY29uc3RhbnQgZm9yIHByZXNlcnZlZCBkZXZpY2VzIGRvd25zdHJlYW0gb2YgdGhlIGJyaWRnZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBUcnVlIGlmIGJ1cyBudW1iZXJzIHNob3VsZCBiZSBpbmhlcml0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBpbnQgcGFzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwYXJlbnQgPSBidXMtXHUwMDNlc2VsZjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbiB0aGUgc2Vjb25kIHBhc3MsIHJldXNlIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQgb24gdGhlIGZpcnN0IHBhc3NcbiYjNDM7XHQgKiBzbyB0aGF0IHRoZSBwYXNzZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCBvbmUgYW5vdGhlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGFzcylcbiYjNDM7XHRcdHJldHVybiBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmhlcml0X2J1c2VzO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBwYXJlbnQgYnJpZGdlIGlzIGJlaW5nIGZvcmNlZCB0byBpbmhlcml0IGl0cyBidXMgbnVtYmVyc1xuJiM0MztcdCAqIGR1cmluZyB0aGlzIHNjYW4gdGhlbiB0aGlzIGJyaWRnZSBtdXN0IGFzIHdlbGwsIG90aGVyd2lzZSB0aGUgUENJXG4mIzQzO1x0ICogY29yZSBjb3VsZCBleHBhbmQgdGhpcyBicmlkZ2UmIzM5O3MgcmVzZXJ2YXRpb24gYmV5b25kIGl0cyBwYXJlbnQgKHdoaWNoXG4mIzQzO1x0ICogY2Fubm90IGV4cGFuZCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBhcmVudCBcdTAwMjZcdTAwMjYgcGFyZW50LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcykge1xuJiM0MztcdFx0ZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9IHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgYW55IGluY29taW5nIHByZXNlcnZlZCBkZXZpY2VzLCBmb3JjZSB0aGVcbiYjNDM7XHQgKiBidXMgbnVtYmVycyB0byBiZSBpbmhlcml0ZWQgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIGJ1cyBudW1iZXJzXG4mIzQzO1x0ICogYXNzaWduZWQgdG8gdGhvc2UgZGV2aWNlcyBkdXJpbmcgZW51bWVyYXRpb24uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUbyBrZWVwIHRoaW5ncyBzaW1wbGUsIGluaGVyaXQgYnVzIG51bWJlcnMgb24gYWxsIGJyaWRnZXMgaWYgYW55IFBDSVxuJiM0MztcdCAqIGRldmljZXMgYXJlIGluY29taW5nLCB0byBlbnN1cmUgdGhhdCBubyBicmlkZ2UmIzM5O3MgcmVzZXJ2YXRpb24gaXNcbiYjNDM7XHQgKiBleHBhbmRlZCB0byBvdmVybGFwIHdpdGggYSBwcmVzZXJ2ZWQgZGV2aWNlIGRvd25zdHJlYW0gb2YgYSBkaWZmZXJlbnRcbiYjNDM7XHQgKiBicmlkZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAqaW5jb21pbmc7XG4mIzQzO1xuJiM0MztcdFx0aW5jb21pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKCk7XG4mIzQzO1x0XHRpZiAoIWluY29taW5nKSB7XG4mIzQzO1x0XHRcdGRldi1cdTAwM2VsaXZldXBkYXRlLmluaGVyaXRfYnVzZXMgPSBmYWxzZTtcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJdCBpcyBzYWZlIHRvIHNhbXBsZSBpbmNvbWluZy1cdTAwM2VzZXItXHUwMDNlbnJfZGV2aWNlcyBhbmQgdGhlblxuJiM0MztcdFx0ICogZHJvcCB0aGUgcndzZW0gc2luY2UgbnJfZGV2aWNlcyB3aWxsIG9ubHkgZGVjcmVhc2UuIFRodXMgdGhlXG4mIzQzO1x0XHQgKiBvbmx5IFwmIzM0O3JhY2VcJiMzNDsgaXMgdGhhdCB0aGUgY3VycmVudCBzY2FuIHdpbGwgYmUgb3Zlcmx5XG4mIzQzO1x0XHQgKiBjb25zZXJ2YXRpdmUgYW5kIGZvcmNlIGJ1cyBpbmhlcml0YW5jZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9ICEhaW5jb21pbmctXHUwMDNlc2VyLVx1MDAzZW5yX2RldmljZXM7XG4mIzQzO1x0XHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZCgpIC0gRmluaXNoIHNjYW5uaW5nIGEgUENJIGJyaWRnZVxuJiM0MzsgKiBAZGV2OiBUaGUgUENJIGJyaWRnZSBkZXZpY2UuXG4mIzQzOyAqIEBwYXNzOiBUaGUgc2NhbiBwYXNzICgwIGZvciBmaXJzdCBwYXNzLCAxIGZvciBzZWNvbmQgcGFzcykuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBQQ0kgY29yZSB3aGVuIGl0IGZpbmlzaGVzIHNjYW5uaW5nIGEgYnJpZGdlLlxuJiM0MzsgKiBJdCBjbGVhcnMgdGhlIGluaGVyaXRhbmNlIHN0YXR1cyBhZnRlciB0aGUgc2Vjb25kIHBhc3Mgc28gaXQgY2FuIGJlXG4mIzQzOyAqIHJlLWV2YWx1YXRlZCBvbiBmdXR1cmUgc2NhbnMuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2xlYXIgaW5oZXJpdF9idXNlcyBhZnRlciB0aGUgc2Vjb25kIHBhc3Mgc28gaXQgY2FuIGJlIHJlLWV2YWx1YXRlZFxuJiM0MztcdCAqIG9uIGZ1dHVyZSBzY2Fucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGFzcylcbiYjNDM7XHRcdGRldi1cdTAwM2VsaXZldXBkYXRlLmluaGVyaXRfYnVzZXMgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbiYjNDM7XHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBrZXk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7XG4mIzQzO1xuJiM0MztcdGluY29taW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZygpO1xuJiM0MztcdGlmICghaW5jb21pbmcpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGtleSA9IHBjaV9zZXJfeGFfa2V5KHBjaV9kb21haW5fbnIoZGV2LVx1MDAzZWJ1cyksIHBjaV9kZXZfaWQoZGV2KSk7XG4mIzQzO1x0ZGV2X3NlciA9IHhhX2xvYWQoXHUwMDI2aW5jb21pbmctXHUwMDNleGEsIGtleSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBkZXZpY2Ugd2FzIG5vdCBwcmVzZXJ2ZWQgYWNyb3NzIExpdmUgVXBkYXRlLCBvciBpdCB3YXMgcHJlc2VydmVkXG4mIzQzO1x0ICogYnV0IGhhcyBhbHJlYWR5IGJlZW4gcHJvYmVkIGFuZCBnb25lIHRocm91Z2ggcGNpX2xpdmV1cGRhdGVfZmluaXNoKCksXG4mIzQzO1x0ICogZS5nLiBkdWUgdG8gcmVtb3ZpbmcgYW5kIHJlLWFkZGluZyB0aGUgZGV2aWNlLiBFaXRoZXIgd2F5LCBpdCYjMzk7cyBub3RcbiYjNDM7XHQgKiB0cmVhdGVkIGFzIGluY29taW5nLXByZXNlcnZlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWRldl9zZXIgfHwgIWRldl9zZXItXHUwMDNlcmVmY291bnQpIHtcbiYjNDM7XHRcdHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcbiYjNDM7XHRwY2lfaW5mbyhkZXYsIFwmIzM0O0RldmljZSB3YXMgcHJlc2VydmVkIGJ5IHByZXZpb3VzIGtlcm5lbCBhY3Jvc3MgTGl2ZSBVcGRhdGVcXG5cJiMzNDspO1xuJiM0MztcdGRldi1cdTAwM2VsaXZldXBkYXRlLmluY29taW5nID0gZGV2X3NlcjtcbiYjNDM7XHRkZXYtXHUwMDNlbGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIb2xkIHRoZSByZWYgb24gdGhlIGluY29taW5nIEZMQiB1bnRpbCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSBzb1xuJiM0MztcdCAqIHRoYXQgZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcgY2Fubm90IGdldCBmcmVlZCB3aGlsZSB0aGUgUENJIGNvcmVcbiYjNDM7XHQgKiBoYXMgYSBwb2ludGVyIHRvIGl0LiBJdCYjMzk7cyBiZXR0ZXIgdG8gbGVhayB0aGUgaW5jb21pbmcgRkxCIHRoYW4gZG8gYVxuJiM0MztcdCAqIHVzZS1hZnRlci1mcmVlIGlmIGRyaXZlciBkb2VzIG5vdCBjYWxsIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpLlxuJiM0MztcdCAqL1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEl0IHNob3VsZCBiZSBzYWZlIHRvIFJFQURfT05DRSgpIG91dHNpZGUgb2YgdGhlIHJ3c2VtIGR1cmluZyBjbGVhbnVwXG4mIzQzO1x0ICogc2luY2UgdGhlcmUgc2hvdWxkIG5vIGxvbmdlciBiZSBhbnkgcmVmZXJlbmNlcyB0byBAZGV2IG9uIHRoZSBzeXN0ZW0uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gcHJhY3RpY2UuIERyaXZlcnMgc2hvdWxkIGJsb2NrIHJlbW92YWxcbiYjNDM7XHQgKiB3aGlsZSBhIGRldmljZSBpcyBwcmVzZXJ2ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFJFQURfT05DRShkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZykpXG4mIzQzO1x0XHRwY2lfV0FSTihkZXYsIDEsIFwmIzM0O0Rlc3Ryb3lpbmcgb3V0Z29pbmctcHJlc2VydmVkIGRldmljZSFcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKGRldi1cdTAwM2VsaXZldXBkYXRlLmluY29taW5nKSkge1xuJiM0MztcdFx0cGNpX1dBUk4oZGV2LCAxLCBcJiMzNDtEZXN0cm95aW5nIGluY29taW5nLXByZXNlcnZlZCBkZXZpY2UhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xuJiM0MztcdGRldi1cdTAwM2VsaXZldXBkYXRlLmZyb3plbiA9IDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfZmluaXNoX2RldmljZShzdHJ1Y3QgcGNpX3NlciAqc2VyLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZykge1xuJiM0MztcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtDYW5ub3QgZmluaXNoIHByZXNlcnZpbmcgYW4gdW5wcmVzZXJ2ZWQgZGV2aWNlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZy1cdTAwM2VyZWZjb3VudCkge1xuJiM0MztcdFx0cGNpX1dBUk4oZGV2LCAxLCBcJiMzNDtQcmVzZXJ2ZWQgZGV2aWNlIGhhcyBhIDAgcmVmY291bnQhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEZWNyZW1lbnQgdGhlIHJlZmNvdW50IHNvIHRoaXMgZGV2aWNlIGRvZXMgbm90IGdldCB0cmVhdGVkIGFzIGFuXG4mIzQzO1x0ICogaW5jb21pbmcgZGV2aWNlIGFnYWluLCBlLmcuIGluIGNhc2UgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKClcbiYjNDM7XHQgKiBnZXRzIGNhbGxlZCBhZ2FpbiBiZWNhdXNlIHRoZSBkZXZpY2UgaXMgaG90LXBsdWdnZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKC0tZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmctXHUwMDNlcmVmY291bnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cGNpX2luZm8oZGV2LCBcJiMzNDtEZXZpY2UgaXMgZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiBMaXZlIFVwZGF0ZVxcblwmIzM0Oyk7XG4mIzQzO1x0ZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcgPSBOVUxMO1xuJiM0MztcdHNlci1cdTAwM2Vucl9kZXZpY2VzLS07XG4mIzQzO1x0cGNpX2xpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZygpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2hfcGF0aChzdHJ1Y3QgcGNpX3NlciAqc2VyLCBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqZGV2O1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9wY2lfZGV2X2luX3BhdGgoZGV2LCBzdGFydCwgTlVMTCkge1xuJiM0MztcdFx0aWYgKHBjaV9saXZldXBkYXRlX2ZpbmlzaF9kZXZpY2Uoc2VyLCBkZXYpKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkgLSBGaW5pc2ggdGhlIHByZXNlcnZhdGlvbiBvZiBhIFBDSSBkZXZpY2VcbiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkgbm90aWZpZXMgdGhlIFBDSSBjb3JlIHRoYXQgYSBQQ0kgZGV2aWNlIHRoYXQgd2FzXG4mIzQzOyAqIHByZXNlcnZlZCBhY3Jvc3MgdGhlIHByZXZpb3VzIExpdmUgVXBkYXRlIGhhcyBmaW5pc2hlZCBwYXJ0aWNpcGF0aW5nIGluIExpdmVcbiYjNDM7ICogVXBkYXRlLiBEcml2ZXJzIG11c3QgY2FsbCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSBmcm9tIHRoZWlyIHN0cnVjdFxuJiM0MzsgKiBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciBmaW5pc2goKSBjYWxsYmFjayB0byBlbnN1cmUgdGhlIGluY29taW5nIHN0cnVjdFxuJiM0MzsgKiBwY2lfc2VyIGlzIGFsbG9jYXRlZC5cbiYjNDM7ICpcbiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkgYXV0b21hdGljYWxseSBmaW5pc2hlcyBhbGwgYnJpZGdlcyB1cHN0cmVhbSBvZiBAZGV2LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbiYjNDM7XG4mIzQzO1x0aW5jb21pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKCk7XG4mIzQzO1x0aWYgKCFpbmNvbWluZykge1xuJiM0MztcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtDYW5ub3QgZmluaXNoIHByZXNlcnZpbmcgZGV2aWNlIHdpdGhvdXQgaW5jb21pbmcgRkxCXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBjaV9saXZldXBkYXRlX2ZpbmlzaF9wYXRoKGluY29taW5nLVx1MDAzZXNlciwgZGV2KTtcbiYjNDM7XHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfZmluaXNoKTtcbiYjNDM7XG4mIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfaW5pdF9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlYWNzX2NhcCB8fCAhZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZGV2LVx1MDAzZWFjc19jYXAgJiM0MzsgUENJX0FDU19DVFJMLCBcdTAwMjZkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5hY3NfY3RybCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MTYgYWNzX2N0cmwgPSBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5hY3NfY3RybDtcbiYjNDM7XHR1MTYgYWNzX2NhcCA9IGRldi1cdTAwM2VhY3NfY2FwO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSBsaXZldXBkYXRlLndhc19wcmVzZXJ2ZWQgaW5zdGVhZCBvZiBsaXZldXBkYXRlLmluY29taW5nIHNpbmNlIHRoZVxuJiM0MztcdCAqIGRldmljZSYjMzk7cyBBQ1MgY29udHJvbHMgc2hvdWxkIG5vdCBjaGFuZ2UgZXZlbiBhZnRlciB0aGUgZGV2aWNlIGlzXG4mIzQzO1x0ICogZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiB0aGUgTGl2ZSBVcGRhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHByZXZpb3VzIGtlcm5lbCBzaG91bGQgbm90IGhhdmUgcHJlc2VydmVkIGFueSBkZXZpY2VzIHRoYXRcbiYjNDM7XHQgKiByZXF1aXJlIGRldmljZS1zcGVjaWZpYyBxdWlya3MgdG8gZW5hYmxlIEFDUywgYnV0IGlmIHN1Y2ggYSBkZXZpY2UgaXNcbiYjNDM7XHQgKiBkZXRlY3RlZCAoZS5nLiBuZXcgZGV2aWNlLXNwZWNpZmljIEFDUyBxdWlyayBpbiB0aGUgY3VycmVudCBrZXJuZWwpLFxuJiM0MztcdCAqIGxvZyBhIGJpZyB3YXJuaW5nIGFuZCBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBlbmFibGUgQUNTIHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHtcbiYjNDM7XHRcdHBjaV93YXJuKGRldiwgXCYjMzQ7RGV2aWNlLXNwZWNpZmljIHF1aXJrIHJlcXVpcmVkIHRvIGVuYWJsZSBBQ1MhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRSh0cnVlKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGFjc19jYXApXG4mIzQzO1x0XHRwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBhY3NfY2FwICYjNDM7IFBDSV9BQ1NfQ1RSTCwgYWNzX2N0cmwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHUxNiB2YWw7XG4mIzQzO1xuJiM0MztcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGRldiwgUENJX0VYUF9ERVZDVEwyLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGRldi1cdTAwM2VhcmlfZW5hYmxlZCA9ICEhKHZhbCBcdTAwMjYgUENJX0VYUF9ERVZDVEwyX0FSSSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfb3V0Z29pbmcoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbiYjNDM7XHRwY2lfV0FSTl9PTkNFKGRldiwgIWRldi1cdTAwM2VsaXZldXBkYXRlLmZyb3plbiwgXCYjMzQ7UHJlc2VydmF0aW9uIHN0YXR1cyBpcyB1bnN0YWJsZSFcXG5cJiMzNDspO1xuJiM0MztcdHJldHVybiBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKCkgLSBDaGVjayBpZiBhIGRldmljZSBpcyBpbmNvbWluZy1wcmVzZXJ2ZWRcbiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2UgdG8gY2hlY2tcbiYjNDM7ICpcbiYjNDM7ICogQ2hlY2sgaWYgYSBkZXZpY2Ugd2FzIHByZXNlcnZlZCBhY3Jvc3MgTGl2ZSBVcGRhdGUgYnkgdGhlIHByZXZpb3VzIGtlcm5lbCxcbiYjNDM7ICogaS5lLiB0aGUgZGV2aWNlIGlzIGluY29taW5nLXByZXNlcnZlZC4gTm90ZSB0aGF0IGEgZGV2aWNlIGlzIG9ubHkgY29uc2lkZXJlZFxuJiM0MzsgKiBpbmNvbWluZy1wcmVzZXJ2ZWQgcHJpb3IgdG8gcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkuIEl0IGlzIHVwIHRvIGRyaXZlcnMgdG9cbiYjNDM7ICogc3luY2hyb25pemUgdXNhZ2Ugb2YgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoKSB3aXRoIHRoZWlyIG93biBjYWxsIHRvXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIHRvIGF2b2lkIGFjdGluZyBvbiBzdGFsZSBkYXRhLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiBUcnVlIGlmIHRoZSBkZXZpY2UgaXMgaW5jb21pbmctcHJlc2VydmVkLCBmYWxzZSBvdGhlcndpc2UuXG4mIzQzOyAqL1xuJiM0Mztib29sIHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7XG4mIzQzO1x0cmV0dXJuIGRldi1cdTAwM2VsaXZldXBkYXRlLmluY29taW5nO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoKSAtIFJlZ2lzdGVyIGEgZmlsZSBoYW5kbGVyIHdpdGggdGhlIFBDSSBjb3JlXG4mIzQzOyAqIEBmaDogVGhlIGZpbGUgaGFuZGxlciB0byByZWdpc3Rlci5cbiYjNDM7ICpcbiYjNDM7ICogRHJpdmVycyBzaG91bGQgY2FsbCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoKSB0byByZWdpc3RlciB0aGVpclxuJiM0MzsgKiBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgd2l0aCB0aGUgUENJIGNvcmUuIFRoaXMgZW5hYmxlcyB0aGUgUENJIGNvcmVcbiYjNDM7ICogdG8gYWxsb2NhdGUgaXRzIG91dGdvaW5nIHN0cnVjdCBwY2lfc2VyIHdoZW5ldmVyIHRoZSBmaXJzdCBkZXZpY2UgaXNcbiYjNDM7ICogcHJlc2VydmVkLCBhbmQgZnJlZSBpdCB3aGVuIHRoZSBsYXN0IGRldmljZSBpcyB1bnByZXNlcnZlZC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbiYjNDM7e1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O1JlZ2lzdGVyaW5nIGZpbGUgaGFuZGxlciBcXFwmIzM0OyVzXFxcJiMzNDtcXG5cJiMzNDssIGZoLVx1MDAzZWNvbXBhdGlibGUpO1xuJiM0MztcdHJldHVybiBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihmaCwgXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKCkgLSBVbnJlZ2lzdGVyIGEgZmlsZSBoYW5kbGVyIHdpdGggdGhlIFBDSSBjb3JlXG4mIzQzOyAqIEBmaDogVGhlIGZpbGUgaGFuZGxlciB0byB1bnJlZ2lzdGVyLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxuJiM0Mzt7XG4mIzQzO1x0cHJfZGVidWcoXCYjMzQ7VW5yZWdpc3RlcmluZyBmaWxlIGhhbmRsZXIgXFxcJiMzNDslc1xcXCYjMzQ7XFxuXCYjMzQ7LCBmaC1cdTAwM2Vjb21wYXRpYmxlKTtcbiYjNDM7XHRsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKGZoLCBcdTAwMjZwY2lfbGl2ZXVwZGF0ZV9mbGIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9saXZldXBkYXRlLmggYi9kcml2ZXJzL3BjaS9saXZldXBkYXRlLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjI2NjQwNmFhYWM4MGRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaFxuQEAgLTAsMCAmIzQzOzEsNjggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogUENJIExpdmUgVXBkYXRlIHN1cHBvcnQgKGNvcmUgQVBJKVxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIEdvb2dsZSBMTEMuXG4mIzQzOyAqIERhdmlkIE1hdGxhY2sgXHUwMDNjZG1hdGxhY2tAZ29vZ2xlLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7I2lmbmRlZiBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0hcbiYjNDM7I2RlZmluZSBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFXG4mIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2ZyZWV6ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjNDM7Ym9vbCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIGludCBwYXNzKTtcbiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBhc3MpO1xuJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuJiM0MztpbnQgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjNDM7aW50IHBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldik7XG4mIzQzO2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfb3V0Z29pbmcoc3RydWN0IHBjaV9kZXYgKmRldik7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luKHN0cnVjdCBwY2lfYnVzICpidXMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgaW50IHBhc3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBhc3MpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2xpdmV1cGRhdGVfaXNfb3V0Z29pbmcoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmNcbmluZGV4IGYzNjc3OGU2MmFjMWE1Li40N2NiM2RjYWE5Mjc4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jXG5AQCAtMjEsNiAmIzQzOzIxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwLW9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtsaXZldXBkYXRlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtwY2kuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3BjaWUvcG9ydGRydi5oXCYjMzQ7XG4gXG5AQCAtNTM2LDYgJiM0Mzs1MzcsNyBAQCBzdGF0aWMgdm9pZCBwY2lfZGV2aWNlX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpO1xuIFx0c3RydWN0IHBjaV9kcml2ZXIgKmRydiA9IHBjaV9kZXYtXHUwMDNlZHJpdmVyO1xuIFxuJiM0MztcdHBjaV9saXZldXBkYXRlX2ZyZWV6ZShwY2lfZGV2KTtcbiBcdHBtX3J1bnRpbWVfcmVzdW1lKGRldik7XG4gXG4gXHRpZiAoZHJ2IFx1MDAyNlx1MDAyNiBkcnYtXHUwMDNlc2h1dGRvd24pXG5AQCAtNTQ0LDExICYjNDM7NTQ2LDE0IEBAIHN0YXRpYyB2b2lkIHBjaV9kZXZpY2Vfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KVxuIFx0LypcbiBcdCAqIElmIHRoaXMgaXMgYSBrZXhlYyByZWJvb3QsIHR1cm4gb2ZmIEJ1cyBNYXN0ZXIgYml0IG9uIHRoZVxuIFx0ICogZGV2aWNlIHRvIHRlbGwgaXQgdG8gbm90IGNvbnRpbnVlIHRvIGRvIERNQS4gRG9uJiMzOTt0IHRvdWNoXG4tXHQgKiBkZXZpY2VzIGluIEQzY29sZCBvciB1bmtub3duIHN0YXRlcy5cbiYjNDM7XHQgKiBkZXZpY2VzIGJlaW5nIHByZXNlcnZlZCBmb3IgTGl2ZSBVcGRhdGUgb3IgaW4gRDNjb2xkIG9yXG4mIzQzO1x0ICogdW5rbm93biBzdGF0ZXMuXG4mIzQzO1x0ICpcbiBcdCAqIElmIGl0IGlzIG5vdCBhIGtleGVjIHJlYm9vdCwgZmlybXdhcmUgd2lsbCBoaXQgdGhlIFBDSVxuIFx0ICogZGV2aWNlcyB3aXRoIGJpZyBoYW1tZXIgYW5kIHN0b3AgdGhlaXIgRE1BIGFueSB3YXkuXG4gXHQgKi9cbi1cdGlmIChrZXhlY19pbl9wcm9ncmVzcyBcdTAwMjZcdTAwMjYgKHBjaV9kZXYtXHUwMDNlY3VycmVudF9zdGF0ZSBcdTAwM2M9IFBDSV9EM2hvdCkpXG4mIzQzO1x0aWYgKGtleGVjX2luX3Byb2dyZXNzIFx1MDAyNlx1MDAyNiAhcGNpX2xpdmV1cGRhdGVfaXNfb3V0Z29pbmcocGNpX2RldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBjaV9kZXYtXHUwMDNlY3VycmVudF9zdGF0ZSBcdTAwM2M9IFBDSV9EM2hvdClcbiBcdFx0cGNpX2NsZWFyX21hc3RlcihwY2lfZGV2KTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuY1xuaW5kZXggNzdiMTdiMTNlZTYxNTQuLmUwYzEzM2I2NmEzNTkyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS5jXG5AQCAtMzQsNiAmIzQzOzM0LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xpdmV1cGRhdGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3BjaS5oXCYjMzQ7XG4gXG4gREVGSU5FX01VVEVYKHBjaV9zbG90X211dGV4KTtcbkBAIC0xMDA4LDYgJiM0MzsxMDEwLDkgQEAgdm9pZCBwY2lfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0Ym9vbCBlbmFibGVfYWNzID0gZmFsc2U7XG4gXHRpbnQgcG9zO1xuIFxuJiM0MztcdGlmICghcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qIElmIGFuIGlvbW11IGlzIHByZXNlbnQgd2Ugc3RhcnQgd2l0aCBrZXJuZWwgZGVmYXVsdCBjYXBzICovXG4gXHRpZiAocGNpX2Fjc19lbmFibGUpIHtcbiBcdFx0aWYgKHBjaV9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhkZXYpKVxuQEAgLTM1MjMsNyAmIzQzOzM1MjgsNyBAQCB2b2lkIHBjaV9jb25maWd1cmVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gXHR1MzIgY2FwO1xuIFx0c3RydWN0IHBjaV9kZXYgKmJyaWRnZTtcbiBcbi1cdGlmIChwY2llX2FyaV9kaXNhYmxlZCB8fCAhcGNpX2lzX3BjaWUoZGV2KSB8fCBkZXYtXHUwMDNlZGV2Zm4pXG4mIzQzO1x0aWYgKCFwY2lfaXNfcGNpZShkZXYpIHx8IGRldi1cdTAwM2VkZXZmbilcbiBcdFx0cmV0dXJuO1xuIFxuIFx0YnJpZGdlID0gZGV2LVx1MDAzZWJ1cy1cdTAwM2VzZWxmO1xuQEAgLTM1MzQsNiAmIzQzOzM1MzksMTIgQEAgdm9pZCBwY2lfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aWYgKCEoY2FwIFx1MDAyNiBQQ0lfRVhQX0RFVkNBUDJfQVJJKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICghcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaShicmlkZ2UpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAocGNpZV9hcmlfZGlzYWJsZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfQVJJKSkge1xuIFx0XHRwY2llX2NhcGFiaWxpdHlfc2V0X3dvcmQoYnJpZGdlLCBQQ0lfRVhQX0RFVkNUTDIsXG4gXHRcdFx0XHRcdCBQQ0lfRVhQX0RFVkNUTDJfQVJJKTtcbkBAIC0zNjg5LDYgJiM0MzszNzAwLDcgQEAgdm9pZCBwY2lfYWNzX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldilcbiBcbiBcdHBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICYjNDM7IFBDSV9BQ1NfQ0FQLCBcdTAwMjZkZXYtXHUwMDNlYWNzX2NhcGFiaWxpdGllcyk7XG4gXHRwY2lfZGlzYWJsZV9icm9rZW5fYWNzX2NhcChkZXYpO1xuJiM0MztcdHBjaV9saXZldXBkYXRlX2luaXRfYWNzKGRldik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcbmluZGV4IDQ0NjllMWE3N2YzYzEzLi45ODhhMThiMzIwNGFmNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2kuaFxuQEAgLTEwNDcsNiAmIzQzOzEwNDcsNyBAQCB2b2lkIHBjaV9hY3NfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB2b2lkIHBjaV9lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuICNpZmRlZiBDT05GSUdfUENJX1FVSVJLU1xuIGludCBwY2lfZGV2X3NwZWNpZmljX2Fjc19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBhY3NfZmxhZ3MpO1xuJiM0Mztib29sIHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaV9kZXZfc3BlY2lmaWNfZGlzYWJsZV9hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gdm9pZCBwY2lfZGlzYWJsZV9icm9rZW5fYWNzX2NhcChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG5AQCAtMTA1Nyw2ICYjNDM7MTA1OCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2lfZGV2X3NwZWNpZmljX2Fjc19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4ge1xuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpX25lZWRfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIHtcbiBcdHJldHVybiAtRU5PVFRZO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2JlLmMgYi9kcml2ZXJzL3BjaS9wcm9iZS5jXG5pbmRleCBkZDBhYmJjNjNlMThkMS4uMTY1OTczYmM5MmFhYmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wcm9iZS5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xpdmV1cGRhdGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3BjaS5oXCYjMzQ7XG4gXG4gc3RhdGljIHN0cnVjdCByZXNvdXJjZSBidXNuX3Jlc291cmNlID0ge1xuQEAgLTEzOTYsNiAmIzQzOzEzOTcsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0XHRcdCAgaW50IG1heCwgdW5zaWduZWQgaW50IGF2YWlsYWJsZV9idXNlcyxcbiBcdFx0XHRcdCAgaW50IHBhc3MpXG4ge1xuJiM0MztcdGJvb2wgbGl2ZXVwZGF0ZSwgYXNzaWduX25ld19idXNlcyA9IHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKTtcbiBcdHN0cnVjdCBwY2lfYnVzICpjaGlsZDtcbiBcdHUzMiBidXNlcztcbiBcdHUxNiBiY3RsO1xuQEAgLTE0MDUsNiAmIzQzOzE0MDcsMTAgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHR1OCBmaXhlZF9zZWMsIGZpeGVkX3N1YjtcbiBcdGludCBuZXh0X2J1c25yO1xuIFxuJiM0MztcdGxpdmV1cGRhdGUgPSBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbihidXMsIGRldiwgcGFzcyk7XG4mIzQzO1x0aWYgKGxpdmV1cGRhdGUpXG4mIzQzO1x0XHRhc3NpZ25fbmV3X2J1c2VzID0gZmFsc2U7XG4mIzQzO1xuIFx0LypcbiBcdCAqIE1ha2Ugc3VyZSB0aGUgYnJpZGdlIGlzIHBvd2VyZWQgb24gdG8gYmUgYWJsZSB0byBhY2Nlc3MgY29uZmlnXG4gXHQgKiBzcGFjZSBvZiBkZXZpY2VzIGJlbG93IGl0LlxuQEAgLTE0NDgsOCAmIzQzOzE0NTQsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoKHNlY29uZGFyeSB8fCBzdWJvcmRpbmF0ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIXBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSBcdTAwMjZcdTAwMjYgIWJyb2tlbikge1xuJiM0MztcdGlmICgoc2Vjb25kYXJ5IHx8IHN1Ym9yZGluYXRlKSBcdTAwMjZcdTAwMjYgIWFzc2lnbl9uZXdfYnVzZXMgXHUwMDI2XHUwMDI2ICFicm9rZW4pIHtcbiBcdFx0dW5zaWduZWQgaW50IGNtYXgsIGJ1c2VzO1xuIFxuIFx0XHQvKlxuQEAgLTE0OTEsOCAmIzQzOzE0OTYsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0ICogZG8gaW4gdGhlIHNlY29uZCBwYXNzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFwYXNzKSB7XG4tXHRcdFx0aWYgKHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSB8fCBicm9rZW4pXG4tXG4mIzQzO1x0XHRcdGlmIChhc3NpZ25fbmV3X2J1c2VzIHx8IGJyb2tlbilcbiBcdFx0XHRcdC8qXG4gXHRcdFx0XHQgKiBUZW1wb3JhcmlseSBkaXNhYmxlIGZvcndhcmRpbmcgb2YgdGhlXG4gXHRcdFx0XHQgKiBjb25maWd1cmF0aW9uIGN5Y2xlcyBvbiBhbGwgYnJpZGdlcyBpblxuQEAgLTE1MDYsNiAmIzQzOzE1MTAsMTEgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdGlmIChsaXZldXBkYXRlKSB7XG4mIzQzO1x0XHRcdHBjaV9lcnIoZGV2LCBcJiMzNDtDYW5ub3QgcmVjb25maWd1cmUgYnJpZGdlIGR1cmluZyBMaXZlIFVwZGF0ZSwgc2tpcHBpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIENsZWFyIGVycm9ycyAqL1xuIFx0XHRwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfU1RBVFVTLCAweGZmZmYpO1xuIFxuQEAgLTE1NjYsNiAmIzQzOzE1NzUsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgYmN0bCk7XG4gXG4gXHRwbV9ydW50aW1lX3B1dChcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQoZGV2LCBwYXNzKTtcbiBcbiBcdHJldHVybiBtYXg7XG4gfVxuQEAgLTIwNjQsNiAmIzQzOzIwNzQsOCBAQCBpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aWYgKHBjaV9lYXJseV9kdW1wKVxuIFx0XHRlYXJseV9kdW1wX3BjaV9kZXZpY2UoZGV2KTtcbiBcbiYjNDM7XHRwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2UoZGV2KTtcbiYjNDM7XG4gXHQvKiBOZWVkIHRvIGhhdmUgZGV2LVx1MDAzZWNsYXNzIHJlYWR5ICovXG4gXHRkZXYtXHUwMDNlY2ZnX3NpemUgPSBwY2lfY2ZnX3NwYWNlX3NpemUoZGV2KTtcbiBcbkBAIC0yMTg3LDYgJiM0MzsyMTk5LDcgQEAgaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdGRlZmF1bHQ6XHRcdFx0XHQgICAgLyogdW5rbm93biBoZWFkZXIgKi9cbiBcdFx0cGNpX2VycihkZXYsIFwmIzM0O3Vua25vd24gaGVhZGVyIHR5cGUgJTAyeCwgaWdub3JpbmcgZGV2aWNlXFxuXCYjMzQ7LFxuIFx0XHRcdGRldi1cdTAwM2VoZHJfdHlwZSk7XG4mIzQzO1x0XHRwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShkZXYpO1xuIFx0XHRwY2lfcmVsZWFzZV9vZl9ub2RlKGRldik7XG4gXHRcdHJldHVybiAtRUlPO1xuIFxuQEAgLTI0ODUsNiAmIzQzOzI0OTgsNyBAQCBzdGF0aWMgdm9pZCBwY2lfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KVxuIFxuIFx0cGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTtcbiBcdHBjaV9yZWxlYXNlX2NhcGFiaWxpdGllcyhwY2lfZGV2KTtcbiYjNDM7XHRwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShwY2lfZGV2KTtcbiBcdHBjaV9yZWxlYXNlX29mX25vZGUocGNpX2Rldik7XG4gXHRwY2liaW9zX3JlbGVhc2VfZGV2aWNlKHBjaV9kZXYpO1xuIFx0cGNpX2J1c19wdXQocGNpX2Rldi1cdTAwM2VidXMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmNcbmluZGV4IGIwOWYyN2Y3ODQ2ZmNkLi45OWI4MTlmMzhlNDljMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9xdWlya3MuY1xuQEAgLTUzNzQsOSAmIzQzOzUzNzQsNiBAQCBzdGF0aWMgdm9pZCBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3JwX21wY19hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbiAgKi9cbiBzdGF0aWMgaW50IHBjaV9xdWlya19lbmFibGVfaW50ZWxfcGNoX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIHtcbi1cdGlmICghcGNpX3F1aXJrX2ludGVsX3BjaF9hY3NfbWF0Y2goZGV2KSlcbi1cdFx0cmV0dXJuIC1FTk9UVFk7XG4tXG4gXHRpZiAocGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9scGNfYWNzKGRldikpIHtcbiBcdFx0cGNpX3dhcm4oZGV2LCBcJiMzNDtGYWlsZWQgdG8gZW5hYmxlIEludGVsIFBDSCBBQ1MgcXVpcmtcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC01Mzk2LDkgJiM0Mzs1MzkzLDYgQEAgc3RhdGljIGludCBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3NwdF9wY2hfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gXHRpbnQgcG9zO1xuIFx0dTMyIGNhcCwgY3RybDtcbiBcbi1cdGlmICghcGNpX3F1aXJrX2ludGVsX3NwdF9wY2hfYWNzX21hdGNoKGRldikpXG4tXHRcdHJldHVybiAtRU5PVFRZO1xuLVxuIFx0cG9zID0gZGV2LVx1MDAzZWFjc19jYXA7XG4gXHRpZiAoIXBvcylcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG5AQCAtNTQyNiw5ICYjNDM7NTQyMCw2IEBAIHN0YXRpYyBpbnQgcGNpX3F1aXJrX2Rpc2FibGVfaW50ZWxfc3B0X3BjaF9hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdGludCBwb3M7XG4gXHR1MzIgY2FwLCBjdHJsO1xuIFxuLVx0aWYgKCFwY2lfcXVpcmtfaW50ZWxfc3B0X3BjaF9hY3NfbWF0Y2goZGV2KSlcbi1cdFx0cmV0dXJuIC1FTk9UVFk7XG4tXG4gXHRwb3MgPSBkZXYtXHUwMDNlYWNzX2NhcDtcbiBcdGlmICghcG9zKVxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbkBAIC01NDQ4LDU2ICYjNDM7NTQzOSw2MyBAQCBzdGF0aWMgaW50IHBjaV9xdWlya19kaXNhYmxlX2ludGVsX3NwdF9wY2hfYWNzX3JlZGlyKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMge1xuIFx0dTE2IHZlbmRvcjtcbiBcdHUxNiBkZXZpY2U7XG4mIzQzO1x0Ym9vbCAoKm1hdGNoKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBcdGludCAoKmVuYWJsZV9hY3MpKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIFx0aW50ICgqZGlzYWJsZV9hY3NfcmVkaXIpKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIH0gcGNpX2Rldl9hY3Nfb3BzW10gPSB7XG4gXHR7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9BTllfSUQsXG4mIzQzO1x0ICAgIC5tYXRjaCA9IHBjaV9xdWlya19pbnRlbF9wY2hfYWNzX21hdGNoLFxuIFx0ICAgIC5lbmFibGVfYWNzID0gcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9wY2hfYWNzLFxuIFx0fSxcbiBcdHsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0FOWV9JRCxcbiYjNDM7XHQgICAgLm1hdGNoID0gcGNpX3F1aXJrX2ludGVsX3NwdF9wY2hfYWNzX21hdGNoLFxuIFx0ICAgIC5lbmFibGVfYWNzID0gcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9zcHRfcGNoX2FjcyxcbiBcdCAgICAuZGlzYWJsZV9hY3NfcmVkaXIgPSBwY2lfcXVpcmtfZGlzYWJsZV9pbnRlbF9zcHRfcGNoX2Fjc19yZWRpcixcbiBcdH0sXG4gfTtcbiBcbi1pbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwY2lfZGV2X2Fjc19vcHNfZ2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcDtcbi1cdGludCBpLCByZXQ7XG4mIzQzO1x0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBjaV9kZXZfYWNzX29wcyk7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHAgPSBcdTAwMjZwY2lfZGV2X2Fjc19vcHNbaV07XG4gXHRcdGlmICgocC1cdTAwM2V2ZW5kb3IgPT0gZGV2LVx1MDAzZXZlbmRvciB8fFxuIFx0XHQgICAgIHAtXHUwMDNldmVuZG9yID09ICh1MTYpUENJX0FOWV9JRCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAocC1cdTAwM2VkZXZpY2UgPT0gZGV2LVx1MDAzZWRldmljZSB8fFxuLVx0XHQgICAgIHAtXHUwMDNlZGV2aWNlID09ICh1MTYpUENJX0FOWV9JRCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBwLVx1MDAzZWVuYWJsZV9hY3MpIHtcbi1cdFx0XHRyZXQgPSBwLVx1MDAzZWVuYWJsZV9hY3MoZGV2KTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzZT0gMClcbi1cdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQgICAgIHAtXHUwMDNlZGV2aWNlID09ICh1MTYpUENJX0FOWV9JRCkpIHtcbiYjNDM7XHRcdFx0aWYgKCFwLVx1MDAzZW1hdGNoIHx8IHAtXHUwMDNlbWF0Y2goZGV2KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcDtcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztib29sIHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcCBcdTAwMjZcdTAwMjYgcC1cdTAwM2VlbmFibGVfYWNzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocCBcdTAwMjZcdTAwMjYgcC1cdTAwM2VlbmFibGVfYWNzKVxuJiM0MztcdFx0cmV0dXJuIHAtXHUwMDNlZW5hYmxlX2FjcyhkZXYpO1xuJiM0MztcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbiBcbiBpbnQgcGNpX2Rldl9zcGVjaWZpY19kaXNhYmxlX2Fjc19yZWRpcihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnA7XG4tXHRpbnQgaSwgcmV0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnAgPSBwY2lfZGV2X2Fjc19vcHNfZ2V0KGRldik7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBjaV9kZXZfYWNzX29wcyk7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHAgPSBcdTAwMjZwY2lfZGV2X2Fjc19vcHNbaV07XG4tXHRcdGlmICgocC1cdTAwM2V2ZW5kb3IgPT0gZGV2LVx1MDAzZXZlbmRvciB8fFxuLVx0XHQgICAgIHAtXHUwMDNldmVuZG9yID09ICh1MTYpUENJX0FOWV9JRCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAocC1cdTAwM2VkZXZpY2UgPT0gZGV2LVx1MDAzZWRldmljZSB8fFxuLVx0XHQgICAgIHAtXHUwMDNlZGV2aWNlID09ICh1MTYpUENJX0FOWV9JRCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBwLVx1MDAzZWRpc2FibGVfYWNzX3JlZGlyKSB7XG4tXHRcdFx0cmV0ID0gcC1cdTAwM2VkaXNhYmxlX2Fjc19yZWRpcihkZXYpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNlPSAwKVxuLVx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdGlmIChwIFx1MDAyNlx1MDAyNiBwLVx1MDAzZWRpc2FibGVfYWNzX3JlZGlyKVxuJiM0MztcdFx0cmV0dXJuIHAtXHUwMDNlZGlzYWJsZV9hY3NfcmVkaXIoZGV2KTtcbiBcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmggYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWNmMWIzOGRmZjAyNGFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxuQEAgLTAsMCAmIzQzOzEsNTkgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiwgR29vZ2xlIExMQy5cbiYjNDM7ICogRGF2aWQgTWF0bGFjayBcdTAwM2NkbWF0bGFja0Bnb29nbGUuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfTElOVVhfS0hPX0FCSV9QQ0lfSFxuJiM0MzsjZGVmaW5lIF9MSU5VWF9LSE9fQUJJX1BDSV9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBET0M6IFBDSSBGaWxlLUxpZmVjeWNsZSBCb3VuZCAoRkxCKSBMaXZlIFVwZGF0ZSBBQklcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBoZWFkZXIgZGVmaW5lcyB0aGUgQUJJIGZvciBwcmVzZXJ2aW5nIGNvcmUgUENJIHN0YXRlIGFjcm9zcyBrZXhlYyB1c2luZ1xuJiM0MzsgKiBMaXZlIFVwZGF0ZSBGaWxlLUxpZmVjeWNsZSBCb3VuZCAoRkxCKSBkYXRhLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGludGVyZmFjZSBpcyBhIGNvbnRyYWN0LiBBbnkgbW9kaWZpY2F0aW9uIHRvIGFueSBvZiB0aGUgc2VyaWFsaXphdGlvblxuJiM0MzsgKiBzdHJ1Y3RzIGRlZmluZWQgaGVyZSBjb25zdGl0dXRlcyBhIGJyZWFraW5nIGNoYW5nZS4gU3VjaCBjaGFuZ2VzIHJlcXVpcmVcbiYjNDM7ICogaW5jcmVtZW50aW5nIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgUENJX0xVT19GTEJfQ09NUEFUSUJMRSBzdHJpbmcuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBQQ0lfTFVPX0ZMQl9DT01QQVRJQkxFIFwmIzM0O3BjaS12MlwmIzM0O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwY2lfZGV2X3NlciAtIFNlcmlhbGl6ZWQgc3RhdGUgYWJvdXQgYSBzaW5nbGUgUENJIGRldmljZS5cbiYjNDM7ICpcbiYjNDM7ICogQGRvbWFpbjogVGhlIGRldmljZSYjMzk7cyBQQ0kgZG9tYWluIG51bWJlciAoc2VnbWVudCkuXG4mIzQzOyAqIEBiZGY6IFRoZSBkZXZpY2UmIzM5O3MgUENJIGJ1cywgZGV2aWNlLCBhbmQgZnVuY3Rpb24gbnVtYmVyLlxuJiM0MzsgKiBAcmVmY291bnQ6IFJlZmVyZW5jZSBjb3VudCB1c2VkIGJ5IHRoZSBQQ0kgY29yZSB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgaXRcbiYjNDM7ICogICAgICAgICAgICBpcyBkb25lIHVzaW5nIGEgZGV2aWNlJiMzOTtzIHN0cnVjdCBwY2lfZGV2X3Nlci4gVGhlIHZhbHVlIG9mIHRoZVxuJiM0MzsgKiAgICAgICAgICAgIHJlZmNvdW50IGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgcHJlc2VydmVkIGRldmljZXMgYXQgb3IgYmVsb3dcbiYjNDM7ICogICAgICAgICAgICBpdCBpbiB0aGUgUENJIGhpZXJhcmNoeSB3aGVuIHRoZSBzdHJ1Y3QgcGNpX2Rldl9zZXIgaXMgaW4gdXNlLCBhbmRcbiYjNDM7ICogICAgICAgICAgICAwIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwY2lfZGV2X3NlciB7XG4mIzQzO1x0dTMyIGRvbWFpbjtcbiYjNDM7XHR1MTYgYmRmO1xuJiM0MztcdHUxNiByZWZjb3VudDtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGNpX3NlciAtIFBDSSBTdWJzeXN0ZW0gTGl2ZSBVcGRhdGUgU3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBzdHJ1Y3QgdHJhY2tzIHN0YXRlIGFib3V0IGFsbCBkZXZpY2VzIHRoYXQgYXJlIGJlaW5nIHByZXNlcnZlZCBhY3Jvc3NcbiYjNDM7ICogYSBMaXZlIFVwZGF0ZSBmb3IgdGhlIG5leHQga2VybmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBAbnJfZGV2aWNlczogVGhlIG51bWJlciBvZiBkZXZpY2VzIHRoYXQgd2VyZSBwcmVzZXJ2ZWQuXG4mIzQzOyAqIEBkZXZpY2VzOiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBLSE8gYmxvY2sgY29udGFpbmluZyBwY2lfZGV2X3Nlci5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwY2lfc2VyIHtcbiYjNDM7XHR1MzIgbnJfZGV2aWNlcztcbiYjNDM7XHR1NjQgZGV2aWNlcztcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfTElOVVhfS0hPX0FCSV9QQ0lfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5pbmRleCBlYmI1YjlkNzYzNjA5ZS4uYjQxZGQ1NzJhMmQ2YjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3BjaS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX2lkcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9saXZldXBkYXRlLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFBDSV9TVEFUVVNfRVJST1JfQklUUyAoUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkgIHwgXFxcbiBcdFx0XHQgICAgICAgUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SIHwgXFxcbkBAIC01OTIsNiAmIzQzOzU5Myw5IEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHU4XHRcdHRwaF9tb2RlO1x0LyogVFBIIG1vZGUgKi9cbiBcdHU4XHRcdHRwaF9yZXFfdHlwZTtcdC8qIFRQSCByZXF1ZXN0ZXIgdHlwZSAqL1xuICNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFXG4mIzQzO1x0c3RydWN0IHBjaV9saXZldXBkYXRlIGxpdmV1cGRhdGU7XG4mIzQzOyNlbmRpZlxuIH07XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqcGNpX3BoeXNmbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2xpdmV1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcGNpX2xpdmV1cGRhdGUuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNTA5OTM0MDU3NTRiYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY2lfbGl2ZXVwZGF0ZS5oXG5AQCAtMCwwICYjNDM7MSw3NyBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsvKlxuJiM0MzsgKiBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCAoUHVibGljL0RyaXZlciBBUEkpXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiwgR29vZ2xlIExMQy5cbiYjNDM7ICogRGF2aWQgTWF0bGFjayBcdTAwM2NkbWF0bGFja0Bnb29nbGUuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MzsjaWZuZGVmIExJTlVYX1BDSV9MSVZFVVBEQVRFX0hcbiYjNDM7I2RlZmluZSBMSU5VWF9QQ0lfTElWRVVQREFURV9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9raG8vYWJpL3BjaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpdmV1cGRhdGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrX3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGNpX2xpdmV1cGRhdGUgLSBQQ0kgTGl2ZSBVcGRhdGUgc3RhdGUgZm9yIGEgc3RydWN0IHBjaV9kZXZcbiYjNDM7ICogQG91dGdvaW5nOiBTdGF0ZSBwcmVzZXJ2ZWQgZm9yIHRoZSBuZXh0IGtlcm5lbC5cbiYjNDM7ICogQGluY29taW5nOiBTdGF0ZSBwcmVzZXJ2ZWQgYnkgdGhlIHByZXZpb3VzIGtlcm5lbC5cbiYjNDM7ICogQGFjc19jdHJsOiBBQ1MgZmVhdHVyZXMgZXN0YWJsaXNoZWQgYnkgdGhlIHByZXZpb3VzIGtlcm5lbC5cbiYjNDM7ICogQGluaGVyaXRfYnVzZXM6IFRydWUgaWYgdGhlIFBDSSBjb3JlIHNob3VsZCBpbmhlcml0IHRoZSBzZWNvbmRhcnkgYW5kXG4mIzQzOyAqICAgICAgICAgICAgICAgICBzdWJvcmRpbmF0ZSBidXMgbnVtYmVycyBhc3NpZ25lZCB0byB0aGlzIGRldmljZSBkdWUgdG9cbiYjNDM7ICogICAgICAgICAgICAgICAgIGFuIG9uZ29pbmcgTGl2ZSBVcGRhdGUuXG4mIzQzOyAqIEB3YXNfcHJlc2VydmVkOiBUcnVlIGlmIHRoaXMgc3RydWN0IHBjaV9kZXYgd2FzIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXNcbiYjNDM7ICogICAgICAgICAgICAgICAgIGtlcm5lbC4gVW5saWtlIEBpbmNvbWluZywgdGhpcyBmaWVsZCBpcyBub3QgY2xlYXJlZCBhZnRlclxuJiM0MzsgKiAgICAgICAgICAgICAgICAgdGhlIGRldmljZSBpcyBmaW5pc2hlZCBwYXJ0aWNpcGF0aW5nIGluIExpdmUgVXBkYXRlLlxuJiM0MzsgKiBAZnJvemVuOiBUcnVlIGlmIHRoZSBvdXRnb2luZyBwcmVzZXJ2YXRpb24gc3RhdHVzIG9mIHRoaXMgZGV2aWNlIGlzIGZyb3plblxuJiM0MzsgKiAgICAgICAgICBhbmQgdGh1cyBjYW5ub3QgYmUgY2hhbmdlZC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZSB7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXZfc2VyICpvdXRnb2luZztcbiYjNDM7XHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmluY29taW5nO1xuJiM0MztcdHUxNiBhY3NfY3RybDtcbiYjNDM7XHRib29sIGluaGVyaXRfYnVzZXM7XG4mIzQzO1x0Ym9vbCB3YXNfcHJlc2VydmVkO1xuJiM0MztcdGJvb2wgZnJvemVuO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHBjaV9kZXY7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFXG4mIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCk7XG4mIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCk7XG4mIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjNDM7Ym9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIExJTlVYX1BDSV9MSVZFVVBEQVRFX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxODoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMSVZFVVBEQVRFJiMzNDssCiAgICAmIzM0O1BDSV9MSVZFVVBEQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2ZyZWV6ZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbiYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfaW5pdF9hY3MmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3ByZXNlcnZlJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3VucHJlc2VydmUmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfZmluaXNoJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYiYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0LCB3aGljaCBtb2RpZmllcyBjb3JlIFBDSSBlbnVtZXJhdGlvbiwgc2h1dGRvd24sIGFuZCBjYXBhYmlsaXR5IGNvbmZpZ3VyYXRpb24gcGF0aHMgKGUuZy4sIEFDUywgQVJJKS4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGR1cmluZyBQQ0kgZGV2aWNlIHByb2JlLCByZW1vdmFsLCBhbmQgc3lzdGVtIHNodXRkb3duL2tleGVjLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IHBjaV9saXZldXBkYXRlXyogZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIFBDSSB0b3BvbG9naWVzIGFuZCBzdGF0ZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNmIzMGFiMjc5ZmIwZWYwNTc4N2Q1NmUzM2U1NzQzNmFiNmM4OGU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMTg6MjY6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3QKaW5kZXggNWQ3MjBkMmE0MTVlMDEuLjIzZmI3MzdhYzk2OWVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9QQ0kvaW5kZXgucnN0CkBAIC0yMCwzICYjNDM7MjAsNCBAQCBQQ0kgQnVzIFN1YnN5c3RlbQogICAgY29udHJvbGxlci9pbmRleAogICAgYm9vdC1pbnRlcnJ1cHRzCiAgICB0cGgKJiM0MzsgICBsaXZldXBkYXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdCBiL0RvY3VtZW50YXRpb24vUENJL2xpdmV1cGRhdGUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lYmE1NWY4YTkyYWUxMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vUENJL2xpdmV1cGRhdGUucnN0CkBAIC0wLDAgJiM0MzsxLDI5IEBACiYjNDM7Li4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MztQQ0kgU3VwcG9ydCBmb3IgTGl2ZSBVcGRhdGUKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MzsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jCiYjNDM7ICAgOmRvYzogUENJIExpdmUgVXBkYXRlCiYjNDM7CiYjNDM7RHJpdmVyIEFQSQomIzQzOz09PT09PT09PT0KJiM0MzsKJiM0MzsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jCiYjNDM7ICAgOmV4cG9ydDoKJiM0MzsKJiM0MztMaXZlIFVwZGF0ZSBBQkkKJiM0Mzs9PT09PT09PT09PT09PT0KJiM0MzsKJiM0MzsuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9saW51eC9raG8vYWJpL3BjaS5oCiYjNDM7ICAgOmRvYzogUENJIEZpbGUtTGlmZWN5Y2xlIEJvdW5kIChGTEIpIExpdmUgVXBkYXRlIEFCSQomIzQzOwomIzQzOy4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmgKJiM0MzsgICA6aW50ZXJuYWw6CiYjNDM7CiYjNDM7U2VlIEFsc28KJiM0Mzs9PT09PT09PQomIzQzOwomIzQzOyAqIDpkb2M6YC9jb3JlLWFwaS9saXZldXBkYXRlYAomIzQzOyAqIDpkb2M6YC9jb3JlLWFwaS9raG8vaW5kZXhgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDRmNjViMmEzNzUyMTAyLi5lZDllZWY4ZGU2NGNkMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTUxMDUsNyAmIzQzOzUxMDUsMTEgQEAgS2VybmVsIHBhcmFtZXRlcnMKIAkJCQlleHBsaWNpdGx5IHdoaWNoIG9uZXMgdGhleSBhcmUuCiAJCWFzc2lnbi1idXNzZXMJW1g4Nl0gQWx3YXlzIGFzc2lnbiBhbGwgUENJIGJ1cwogCQkJCW51bWJlcnMgb3Vyc2VsdmVzLCBvdmVycmlkaW5nCi0JCQkJd2hhdGV2ZXIgdGhlIGZpcm13YXJlIG1heSBoYXZlIGRvbmUuCiYjNDM7CQkJCXdoYXRldmVyIHRoZSBmaXJtd2FyZSBtYXkgaGF2ZSBkb25lLiBJZ25vcmVkCiYjNDM7CQkJCWR1cmluZyBhIExpdmUgVXBkYXRlLCB3aGVyZSB0aGUga2VybmVsIG11c3QKJiM0MzsJCQkJaW5oZXJpdCB0aGUgUENJIHRvcG9sb2d5IChpbmNsdWRpbmcgYnVzIG51bWJlcnMpCiYjNDM7CQkJCXRvIGF2b2lkIGludGVycnVwdGluZyBvbmdvaW5nIG1lbW9yeQomIzQzOwkJCQl0cmFuc2FjdGlvbnMgb2YgcHJlc2VydmVkIGRldmljZXMuCiAJCXVzZXBpcnFtYXNrCVtYODZdIEhvbm9yIHRoZSBwb3NzaWJsZSBJUlEgbWFzayBzdG9yZWQKIAkJCQlpbiB0aGUgQklPUyAkUElSIHRhYmxlLiBUaGlzIGlzIG5lZWRlZCBvbgogCQkJCXNvbWUgc3lzdGVtcyB3aXRoIGJyb2tlbiBCSU9TZXMsIG5vdGFibHkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbGl2ZXVwZGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0CmluZGV4IDVhMjkyZDBmMzcwNjRkLi4yYmNlMjY0NGViYTIyMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXZldXBkYXRlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0CkBAIC0xLDUgJiM0MzsxLDcgQEAKIC4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAKJiM0MzsuLiBfbHVvOgomIzQzOwogPT09PT09PT09PT09PT09PT09PT09PT09CiBMaXZlIFVwZGF0ZSBPcmNoZXN0cmF0b3IKID09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTgsNiAmIzQzOzIwLDggQEAgTFVPIFByZXNlcnZpbmcgRmlsZSBEZXNjcmlwdG9ycwogLi4ga2VybmVsLWRvYzo6IGtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMKICAgIDpkb2M6IExVTyBGaWxlIERlc2NyaXB0b3JzCiAKJiM0MzsuLiBfZmxiOgomIzQzOwogTFVPIEZpbGUgTGlmZWN5Y2xlIEJvdW5kIEdsb2JhbCBEYXRhCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC4uIGtlcm5lbC1kb2M6OiBrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMKQEAgLTcwLDMgJiM0Mzs3NCw0IEBAIFNlZSBBbHNvCiAKIC0gOmRvYzpgTGl2ZSBVcGRhdGUgdUFQSSAmbHQ7L3VzZXJzcGFjZS1hcGkvbGl2ZXVwZGF0ZSZndDtgCiAtIDpkb2M6YC9jb3JlLWFwaS9raG8vaW5kZXhgCiYjNDM7LSA6ZG9jOmBQQ0kgJmx0Oy9QQ0kvbGl2ZXVwZGF0ZSZndDtgCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGEzZWQzMzdlODI3ZDg2Li4zNDdjNDM1Y2E0MDQ3YyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTIwODI0LDYgJiM0MzsyMDgyNCwyMSBAQCBMOglsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vUENJL3BjaS1lcnJvci1yZWNvdmVyeS5yc3QKIAomIzQzO1BDSSBMSVZFIFVQREFURQomIzQzO006CURhdmlkIE1hdGxhY2sgJmx0O2RtYXRsYWNrQGdvb2dsZS5jb20mZ3Q7CiYjNDM7UjoJUGFzaGEgVGF0YXNoaW4gJmx0O3Bhc2hhLnRhdGFzaGluQHNvbGVlbi5jb20mZ3Q7CiYjNDM7UjoJTWlrZSBSYXBvcG9ydCAmbHQ7cnBwdEBrZXJuZWwub3JnJmd0OwomIzQzO1I6CVByYXR5dXNoIFlhZGF2ICZsdDtwcmF0eXVzaEBrZXJuZWwub3JnJmd0OwomIzQzO0w6CWtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKJiM0MztMOglsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJTWFpbnRhaW5lZAomIzQzO1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGl2ZXVwZGF0ZS9saW51eC5naXQKJiM0MztGOglEb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdAomIzQzO0Y6CWRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuYwomIzQzO0Y6CWRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaAomIzQzO0Y6CWluY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaAomIzQzO0Y6CWluY2x1ZGUvbGludXgvcGNpX2xpdmV1cGRhdGUuaAomIzQzOwogUENJIE1TSSBEUklWRVIgRk9SIEFMVEVSQSBNU0kgSVAKIEw6CWxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmcKIFM6CU9ycGhhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKaW5kZXggMGM3NDA4NTA5YmEyNGIuLjE2ZmJkNDIxMmUwZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL0tjb25maWcKQEAgLTI3MSw2ICYjNDM7MjcxLDIxIEBAIGNvbmZpZyBWR0FfQVJCX01BWF9HUFVTCiAJICBSZXNlcnZlcyBzcGFjZSBpbiB0aGUga2VybmVsIHRvIG1haW50YWluIHJlc291cmNlIGxvY2tpbmcgZm9yCiAJICBtdWx0aXBsZSBHUFVTLiAgVGhlIG92ZXJoZWFkIGZvciBlYWNoIEdQVSBpcyB2ZXJ5IHNtYWxsLgogCiYjNDM7Y29uZmlnIFBDSV9MSVZFVVBEQVRFCiYjNDM7CWJvb2wgJiMzNDtQQ0kgTGl2ZSBVcGRhdGUgU3VwcG9ydCYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gUENJICZhbXA7JmFtcDsgTElWRVVQREFURSAmYW1wOyZhbXA7IDY0QklUICZhbXA7JmFtcDsgIUNBUkRCVVMKJiM0MzsJaGVscAomIzQzOwkgIEVuYWJsZSBQQ0kgY29yZSBzdXBwb3J0IGZvciBwcmVzZXJ2aW5nIFBDSSBkZXZpY2VzIGFjcm9zcyBMaXZlCiYjNDM7CSAgVXBkYXRlLiBUaGlzLCBpbiBjb21iaW5hdGlvbiB3aXRoIHN1cHBvcnQgaW4gYSBkZXZpY2UmIzM5O3MgZHJpdmVyLAomIzQzOwkgIGVuYWJsZXMgUENJIGRldmljZXMgdG8gcnVuIGFuZCBwZXJmb3JtIG1lbW9yeSB0cmFuc2FjdGlvbnMKJiM0MzsJICB1bmludGVycnVwdGVkIGR1cmluZyBhIGtleGVjIGZvciBMaXZlIFVwZGF0ZS4KJiM0MzsKJiM0MzsJICBUaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSBlbmFibGVkIGJ5IHVzZXJzIHdobyBwbGFuIHRvIHVzZSBMaXZlCiYjNDM7CSAgVXBkYXRlIGZvciBrZXJuZWwgdXBncmFkZXMgYW5kIHJlcXVpcmUgcHJlc2VydmluZyBQQ0kgZGV2aWNlcyBkdXJpbmcKJiM0MzsJICB0aG9zZSB1cGdyYWRlcy4KJiM0MzsKJiM0MzsJICBJZiB1bnN1cmUsIHNheSBOLgomIzQzOwogc291cmNlICYjMzQ7ZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZyYjMzQ7CiBzb3VyY2UgJiMzNDtkcml2ZXJzL3BjaS9lbmRwb2ludC9LY29uZmlnJiMzNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKaW5kZXggNDFlYmMzYjlhNTE4MjQuLmU4ZDAwM2NiNjc1NzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQpAQCAtMTYsNiAmIzQzOzE2LDcgQEAgb2JqLSQoQ09ORklHX1BST0NfRlMpCQkmIzQzOz0gcHJvYy5vCiBvYmotJChDT05GSUdfU1lTRlMpCQkmIzQzOz0gcGNpLXN5c2ZzLm8gc2xvdC5vCiBvYmotJChDT05GSUdfQUNQSSkJCSYjNDM7PSBwY2ktYWNwaS5vCiBvYmotJChDT05GSUdfR0VORVJJQ19QQ0lfSU9NQVApICYjNDM7PSBpb21hcC5vCiYjNDM7b2JqLSQoQ09ORklHX1BDSV9MSVZFVVBEQVRFKQkmIzQzOz0gbGl2ZXVwZGF0ZS5vCiBlbmRpZgogCiBvYmotJChDT05GSUdfT0YpCQkmIzQzOz0gb2YubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jIGIvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi41OTM1ZTg4ZGUwNzNkYwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuYwpAQCAtMCwwICYjNDM7MSw5MTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2LCBHb29nbGUgTExDLgomIzQzOyAqIERhdmlkIE1hdGxhY2sgJmx0O2RtYXRsYWNrQGdvb2dsZS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogRE9DOiBQQ0kgTGl2ZSBVcGRhdGUKJiM0MzsgKgomIzQzOyAqIFRoZSBQQ0kgc3Vic3lzdGVtIHBhcnRpY2lwYXRlcyBpbiB0aGUgTGl2ZSBVcGRhdGUgcHJvY2VzcyB0byBlbmFibGUgZHJpdmVycwomIzQzOyAqIHRvIHByZXNlcnZlIHRoZWlyIFBDSSBkZXZpY2VzIGFjcm9zcyBrZXhlYy4KJiM0MzsgKgomIzQzOyAqIDpyZWY6YEZMQiAmbHQ7ZmxiJmd0O2AgRGF0YQomIzQzOyAqID09PT09PT09PT09PT09PT09PT09PQomIzQzOyAqCiYjNDM7ICogUENJIGRldmljZSBwcmVzZXJ2YXRpb24gYWNyb3NzIExpdmUgVXBkYXRlIGlzIGJ1aWx0IG9uIHRvcCBvZiB0aGUKJiM0MzsgKiA6cmVmOmBMVU8gJmx0O2x1byZndDtgIHN1cHBvcnQgZm9yIGZpbGUgcHJlc2VydmF0aW9uIGFjcm9zcyBrZXhlYy4gRHJpdmVycyBhcmUKJiM0MzsgKiBleHBlY3RlZCB0byBleHBvc2UgYSBmaWxlIHRvIHJlcHJlc2VudCBhIHNpbmdsZSBQQ0kgZGV2aWNlIGFuZCBzdXBwb3J0CiYjNDM7ICogcHJlc2VydmF0aW9uIG9mIHRoYXQgZmlsZSB3aXRoIGBgaW9jdGwoTElWRVVQREFURV9TRVNTSU9OX1BSRVNFUlZFX0ZEKWBgLgomIzQzOyAqIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBjb250cm9sIHRoZSBwcmVzZXJ2YXRpb24gb2YgZGV2aWNlcyBhbmQgZW5zdXJlCiYjNDM7ICogcHJvcGVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHdoaWxlIGEgZGV2aWNlIGlzIHByZXNlcnZlZC4gVGhlIGZpcnN0IGludGVuZGVkCiYjNDM7ICogdXNlLWNhc2UgaXMgcHJlc2VydmluZyB2ZmlvLXBjaSBkZXZpY2UgZmlsZXMuCiYjNDM7ICoKJiM0MzsgKiBUaGUgUENJIGNvcmUgbWFpbnRhaW5zIGl0cyBvd24gc3RhdGUgYWJvdXQgd2hhdCBkZXZpY2VzIGFyZSBiZWluZyBwcmVzZXJ2ZWQKJiM0MzsgKiBhY3Jvc3MgTGl2ZSBVcGRhdGUgdXNpbmcgRkxCIGRhdGEgaW4gTFVPLiBFc3NlbnRpYWxseSwgdGhpcyBhbGxvd3MgdGhlIFBDSQomIzQzOyAqIGNvcmUgdG8gYWxsb2NhdGUgc3RydWN0IHBjaV9zZXIgd2hlbiB0aGUgZmlyc3QgZGV2aWNlIChmaWxlKSBpcyBwcmVzZXJ2ZWQKJiM0MzsgKiBhbmQgZnJlZSBpdCB3aGVuIHRoZSBsYXN0IGRldmljZSAoZmlsZSkgaXMgdW5wcmVzZXJ2ZWQuIEFmdGVyIGtleGVjLCB0aGUKJiM0MzsgKiBQQ0kgY29yZSBjYW4gZmV0Y2ggdGhlIHN0cnVjdCBwY2lfc2VyICh3aGljaCB3YXMgY29uc3RydWN0ZWQgYnkgdGhlIHByZXZpb3VzCiYjNDM7ICoga2VybmVsKSBmcm9tIExVTyBhdCBhbnkgdGltZSAoZS5nLiBkdXJpbmcgZW51bWVyYXRpb24pIHNvIHRoYXQgaXQga25vd3MKJiM0MzsgKiB3aGljaCBkZXZpY2VzIHdlcmUgcHJlc2VydmVkLgomIzQzOyAqCiYjNDM7ICogVG8gZW5hYmxlIHRoZSBQQ0kgY29yZSB0byBiZSBub3RpZmllZCB3aGVuZXZlciBhIGZpbGUgcmVwcmVzZW50aW5nIGEgZGV2aWNlCiYjNDM7ICogaXMgcHJlc2VydmVkLCBkcml2ZXJzIG11c3QgcmVnaXN0ZXIgdGhlaXIgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIHdpdGgKJiM0MzsgKiB0aGUgUENJIGNvcmUgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBBUElzOgomIzQzOyAqCiYjNDM7ICogICogYGBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoZHJpdmVyX2ZpbGVfaGFuZGxlcilgYAomIzQzOyAqICAqIGBgcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoZHJpdmVyX2ZpbGVfaGFuZGxlcilgYAomIzQzOyAqCiYjNDM7ICogRGV2aWNlIFRyYWNraW5nCiYjNDM7ICogPT09PT09PT09PT09PT09CiYjNDM7ICoKJiM0MzsgKiBEcml2ZXJzIG11c3Qgbm90aWZ5IHRoZSBQQ0kgY29yZSB3aGVuIHNwZWNpZmljIGRldmljZXMgYXJlIHByZXNlcnZlZCBvcgomIzQzOyAqIHVucHJlc2VydmVkIHdpdGggdGhlIGZvbGxvd2luZyBBUElzOgomIzQzOyAqCiYjNDM7ICogICogYGBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZShwY2lfZGV2KWBgCiYjNDM7ICogICogYGBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHBjaV9kZXYpYGAKJiM0MzsgKgomIzQzOyAqIFRoaXMgYWxsb3dzIHRoZSBQQ0kgY29yZSB0byBrZWVwIGl0cyBGTEIgZGF0YSAoc3RydWN0IHBjaV9zZXIpIHVwIHRvIGRhdGUKJiM0MzsgKiB3aXRoIHRoZSBsaXN0IG9mICoqb3V0Z29pbmcqKiBwcmVzZXJ2ZWQgZGV2aWNlcyBmb3IgdGhlIG5leHQga2VybmVsLgomIzQzOyAqCiYjNDM7ICogQWZ0ZXIga2V4ZWMsIHdoZW5ldmVyIGEgZGV2aWNlIGlzIGVudW1lcmF0ZWQsIHRoZSBQQ0kgY29yZSB3aWxsIGNoZWNrIGlmIGl0CiYjNDM7ICogaXMgYW4gKippbmNvbWluZyoqIHByZXNlcnZlZCBkZXZpY2UgKGkuZS4gcHJlc2VydmVkIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwpCiYjNDM7ICogYnkgY2hlY2tpbmcgdGhlIGluY29taW5nIEZMQiBkYXRhIChzdHJ1Y3QgcGNpX3NlcikuCiYjNDM7ICoKJiM0MzsgKiBEcml2ZXJzIG11c3Qgbm90aWZ5IHRoZSBQQ0kgY29yZSB3aGVuIGFuICoqaW5jb21pbmcqKiBkZXZpY2UgaXMgZG9uZQomIzQzOyAqIHBhcnRpY2lwYXRpbmcgaW4gdGhlIGluY29taW5nIExpdmUgVXBkYXRlIHdpdGggdGhlIGZvbGxvd2luZyBBUEk6CiYjNDM7ICoKJiM0MzsgKiAgKiBgYHBjaV9saXZldXBkYXRlX2ZpbmlzaChwY2lfZGV2KWBgCiYjNDM7ICoKJiM0MzsgKiBUaGUgUENJIGNvcmUgZG9lcyBub3QgZW5mb3JjZSBhbnkgb3JkZXJpbmcgb2YgYGBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKWBgIGFuZAomIzQzOyAqIGBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKWBgLiBpLmUuIEEgUENJIGRldmljZSBjYW4gYmUgKipvdXRnb2luZyoqCiYjNDM7ICogKHByZXNlcnZlZCBmb3IgbmV4dCBrZXJuZWwpIGFuZCAqKmluY29taW5nKiogKHByZXNlcnZlZCBieSBwcmV2aW91cyBrZXJuZWwpCiYjNDM7ICogYXQgdGhlIHNhbWUgdGltZS4KJiM0MzsgKgomIzQzOyAqIFJlc3RyaWN0aW9ucwomIzQzOyAqID09PT09PT09PT09PQomIzQzOyAqCiYjNDM7ICogVGhlIFBDSSBjb3JlIGVuZm9yY2VzIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIG9uIHdoaWNoIGRldmljZXMgY2FuIGJlCiYjNDM7ICogcHJlc2VydmVkLiBUaGVzZSBtYXkgYmUgcmVsYXhlZCBpbiB0aGUgZnV0dXJlOgomIzQzOyAqCiYjNDM7ICogICogVGhlIGRldmljZSBjYW5ub3QgYmUgYSBWaXJ0dWFsIEZ1bmN0aW9uIChWRikuCiYjNDM7ICoKJiM0MzsgKiAgKiBUaGUgZGV2aWNlIGNhbm5vdCByZXF1aXJlIGRldmljZS1zcGVjaWZpYyBxdWlya3MgdG8gZW5hYmxlIEFjY2VzcwomIzQzOyAqICAgIENvbnRyb2wgU2VydmljZXMgKEFDUykuCiYjNDM7ICoKJiM0MzsgKiBEcml2ZXIgQmluZGluZwomIzQzOyAqID09PT09PT09PT09PT09CiYjNDM7ICoKJiM0MzsgKiBJbiB0aGUgb3V0Z29pbmcga2VybmVsLCBpdCBpcyB0aGUgZHJpdmVyJiMzOTtzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGl0CiYjNDM7ICogZG9lcyBub3QgcmVsZWFzZSBhIGRldmljZSBiZXR3ZWVuIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgYW5kCiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpLgomIzQzOyAqCiYjNDM7ICogSW4gdGhlIGluY29taW5nIGtlcm5lbCwgaXQgaXMgdGhlIGRyaXZlciYjMzk7cyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBpdAomIzQzOyAqIGRvZXMgbm90IHJlbGVhc2UgYSBwcmVzZXJ2ZWQgZGV2aWNlIGJldHdlZW4gcHJvYmUoKSBhbmQKJiM0MzsgKiBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKS4KJiM0MzsgKgomIzQzOyAqIEl0IGlzIHRoZSB1c2VyJiMzOTtzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGluY29taW5nIHByZXNlcnZlZCBkZXZpY2VzIGFyZQomIzQzOyAqIGJvdW5kIHRvIHRoZSBjb3JyZWN0IGRyaXZlci4gaS5lLiBUaGUgUENJIGNvcmUgZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IGEKJiM0MzsgKiBkZXZpY2UgZ2V0dGluZyBwcmVzZXJ2ZWQgYnkgZHJpdmVyIEEgaW4gdGhlIG91dGdvaW5nIGtlcm5lbCBhbmQgdGhlbiBnZXR0aW5nCiYjNDM7ICogYm91bmQgdG8gZHJpdmVyIEIgaW4gdGhlIGluY29taW5nIGtlcm5lbC4gVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuCiYjNDM7ICoKJiM0MzsgKiBCREYgU3RhYmlsaXR5CiYjNDM7ICogPT09PT09PT09PT09PQomIzQzOyAqCiYjNDM7ICogVGhlIFBDSSBjb3JlIGd1YXJhbnRlZXMgdGhhdCBwcmVzZXJ2ZWQgZGV2aWNlcyBjYW4gYmUgaWRlbnRpZmllZCBieSB0aGUgc2FtZQomIzQzOyAqIGJ1cywgZGV2aWNlLCBhbmQgZnVuY3Rpb24gbnVtYmVycyBmb3IgYXMgbG9uZyBhcyB0aGV5IGFyZSBwcmVzZXJ2ZWQKJiM0MzsgKiAoaW5jbHVkaW5nIGFjcm9zcyBrZXhlYykuIFRvIGFjY29tcGxpc2ggdGhpcywgdGhlIFBDSSBjb3JlIGFsd2F5cyBpbmhlcml0cwomIzQzOyAqIHRoZSBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlIGJ1cyBudW1iZXJzIGFzc2lnbmVkIHRvIGJyaWRnZXMgZHVyaW5nIHNjYW5uaW5nCiYjNDM7ICogaWYgYW55IGRldmljZSBpcyBwcmVzZXJ2ZWQuIFRoaXMgaXMgdHJ1ZSBldmVuIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBhbHdheXMKJiM0MzsgKiBhc3NpZ24gbmV3IGJ1cyBudW1iZXJzIGR1cmluZyBzY2FubmluZy4gVGhlIGtlcm5lbCBhc3N1bWVzIHRoZSBwcmV2aW91cwomIzQzOyAqIGtlcm5lbCBlc3RhYmxpc2hlZCBhIHNhbmUgYnVzIHRvcG9sb2d5IGFjcm9zcyBrZXhlYy4KJiM0MzsgKgomIzQzOyAqIElmIGEgbWlzY29uZmlndXJlZCBvciB1bmNvbmZpZ3VyZWQgYnJpZGdlIGlzIGVuY291bnRlcmVkIGR1cmluZyBlbnVtZXJhdGlvbgomIzQzOyAqIHdoaWxlIHRoZXJlIGFyZSBwcmVzZXJ2ZWQgZGV2aWNlcywgaXRzIHNlY29uZGFyeSBhbmQgc3Vib3JkaW5hdGUgYnVzIG51bWJlcnMKJiM0MzsgKiB3aWxsIGJlIGNsZWFyZWQgYW5kIGRldmljZXMgYmVsb3cgaXQgd2lsbCBub3QgYmUgZW51bWVyYXRlZC4KJiM0MzsgKgomIzQzOyAqIFBDSS10by1QQ0kgQnJpZGdlcwomIzQzOyAqID09PT09PT09PT09PT09PT09PQomIzQzOyAqCiYjNDM7ICogQW55IFBDSS10by1QQ0kgYnJpZGdlcyB1cHN0cmVhbSBvZiBhIHByZXNlcnZlZCBkZXZpY2UgYXJlIGF1dG9tYXRpY2FsbHkKJiM0MzsgKiBwcmVzZXJ2ZWQgd2hlbiB0aGUgZGV2aWNlIGlzIHByZXNlcnZlZC4gVGhlIFBDSSBjb3JlIGtlZXBzIHRyYWNrIG9mIHRoZQomIzQzOyAqIG51bWJlciBvZiBkb3duc3RyZWFtIGRldmljZXMgdGhhdCBhcmUgcHJlc2VydmVkIHVuZGVyIGEgYnJpZGdlIHNvIHRoYXQgdGhlCiYjNDM7ICogYnJpZGdlIGlzIG9ubHkgdW5wcmVzZXJ2ZWQgb25jZSBhbGwgZG93bnN0cmVhbSBkZXZpY2VzIGFyZSB1bnByZXNlcnZlZC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZW5hYmxlcyB0aGUgUENJIGNvcmUgYW5kIGFueSBkcml2ZXJzIGJvdW5kIHRvIHRoZSBicmlkZ2UgdG8gcGFydGljaXBhdGUKJiM0MzsgKiBpbiB0aGUgTGl2ZSBVcGRhdGUgc28gdGhhdCBwcmVzZXJ2ZWQgZW5kcG9pbnRzIGNhbiBjb250aW51ZSBpc3N1aW5nIG1lbW9yeQomIzQzOyAqIHRyYW5zYWN0aW9ucyBkdXJpbmcgdGhlIExpdmUgVXBkYXRlLgomIzQzOyAqCiYjNDM7ICogSGFuZGxpbmcgUHJlc2VydmVkIERldmljZXMKJiM0MzsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyAqCiYjNDM7ICogVGhlIFBDSSBjb3JlIHRyZWF0cyBwcmVzZXJ2ZWQgZGV2aWNlcyBkaWZmZXJlbnRseSB0aGFuIG5vbi1wcmVzZXJ2ZWQgZGV2aWNlcy4KJiM0MzsgKiBUaGlzIHNlY3Rpb24gZW51bWVyYXRlcyB0aG9zZSBkaWZmZXJlbmNlcy4KJiM0MzsgKgomIzQzOyAqICAqIFRoZSBQQ0kgY29yZSBpbmhlcml0cyBhbGwgQUNTIGZsYWdzIGVuYWJsZWQgb24gaW5jb21pbmcgcHJlc2VydmVkIGRldmljZXMKJiM0MzsgKiAgICByYXRoZXIgdGhhbiBhc3NpZ25pbmcgbmV3IG9uZXMuIFRoaXMgZW5zdXJlcyB0aGF0IFRMUHMgYXJlIHJvdXRlZCB0aGUgc2FtZQomIzQzOyAqICAgIHdheSBhZnRlciBMaXZlIFVwZGF0ZSBhbmQgZW5zdXJlcyB0aGF0IElPTU1VIGdyb3VwcyBkbyBub3QgY2hhbmdlLiBOb3RlCiYjNDM7ICogICAgdGhhdCBhIGRldmljZSB3aWxsIHVzZSBpdHMgaW5oZXJpdGVkIEFDUyBmbGFncyBmb3IgdGhlIGxpZmV0aW1lIG9mIGl0cwomIzQzOyAqICAgIHN0cnVjdCBwY2lfZGV2IChpLmUuIGV2ZW4gYWZ0ZXIgcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkpLgomIzQzOyAqCiYjNDM7ICogICogVGhlIFBDSSBjb3JlIGluaGVyaXRzIEFSSSBGb3J3YXJkaW5nIEVuYWJsZSBvbiBhbGwgYnJpZGdlcyB3aXRoIGRvd25zdHJlYW0KJiM0MzsgKiAgICBwcmVzZXJ2ZWQgZGV2aWNlcyB0byBlbnN1cmUgdGhhdCBhbGwgcHJlc2VydmVkIGRldmljZXMgb24gdGhlIGJyaWRnZSYjMzk7cwomIzQzOyAqICAgIHNlY29uZGFyeSBidXMgYXJlIGFkZHJlc3NhYmxlIGFmdGVyIHRoZSBMaXZlIFVwZGF0ZS4KJiM0MzsgKgomIzQzOyAqICAqIFRoZSBQQ0kgY29yZSBkb2VzIG5vdCBkaXNhYmxlIGJ1cyBtYXN0ZXJpbmcgb24gb3V0Z29pbmcgcHJlc2VydmVkIGRldmljZXMKJiM0MzsgKiAgICBkdXJpbmcga2V4ZWMuIFRoaXMgYWxsb3dzIHByZXNlcnZlZCBkZXZpY2VzIHRvIGlzc3VlIG1lbW9yeSB0cmFuc2FjdGlvbnMKJiM0MzsgKiAgICB0aHJvdWdob3V0IHRoZSBMaXZlIFVwZGF0ZS4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpICYjMzQ7UENJOiAmIzM0OyBLQlVJTERfQkFTRU5BTUUgJiMzNDs6ICYjMzQ7IGZtdAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXhlY19oYW5kb3Zlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9raG8vYWJpL3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXZldXBkYXRlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tob19ibG9jay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7bGl2ZXVwZGF0ZS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3BjaS5oJiMzNDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGNpX2xpdmV1cGRhdGVfZ2xvYmFsIC0gR2xvYmFsIHN0YXRlIGZvciBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydAomIzQzOyAqIEByd3NlbTogUmVhZGVyL3dyaXRlciBzZW1hcGhvcmUgdXNlZCB0byBwcm90ZWN0IHRoZSBpbmNvbWluZyBhbmQgb3V0Z29pbmcKJiM0MzsgKiAgICAgICAgIEZMQnMsIGFuZCB0aGUgcmVmZXJlbmNlcyB0byB0aGVtIGluIHN0cnVjdCBwY2lfZGV2LgomIzQzOyAqLwomIzQzO3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwgewomIzQzOwlzdHJ1Y3Qgcndfc2VtYXBob3JlIHJ3c2VtOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwgcGNpX2xpdmV1cGRhdGUgPSB7CiYjNDM7CS5yd3NlbSA9IF9fUldTRU1fSU5JVElBTElaRVIocGNpX2xpdmV1cGRhdGUucndzZW0pLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgLSBPdXRnb2luZyBQQ0kgRkxCIG9iamVjdAomIzQzOyAqIEBzZXI6IFBvaW50ZXIgdG8gdGhlIHByZXNlcnZlZCBzdHJ1Y3QgcGNpX3Nlci4KJiM0MzsgKiBAYmxvY2tfc2V0OiBUaGUgS0hPIGJsb2NrIHNldCBob2xkaW5nIHRoZSBvdXRnb2luZyBkZXZpY2VzLgomIzQzOyAqCiYjNDM7ICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIHJ1bnRpbWUgc3RhdGUgZm9yIHRoZSBvdXRnb2luZyBQQ0kgTGl2ZSBVcGRhdGUKJiM0MzsgKiBzdGF0ZS4gSXQgd3JhcHMgdGhlIHNlcmlhbGl6ZWQgcGNpX3NlciBhbmQgdGhlIGJsb2NrX3NldCB1c2VkIHRvIG1hbmFnZQomIzQzOyAqIHRoZSBzZXJpYWxpemVkIGVudHJpZXMuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgewomIzQzOwlzdHJ1Y3QgcGNpX3NlciAqc2VyOwomIzQzOwlzdHJ1Y3Qga2hvX2Jsb2NrX3NldCBibG9ja19zZXQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAtIEluY29taW5nIFBDSSBGTEIgb2JqZWN0CiYjNDM7ICogQHNlcjogVGhlIGluY29taW5nIHN0cnVjdCBwY2lfc2VyIGZyb20gdGhlIHByZXZpb3VzIGtlcm5lbC4KJiM0MzsgKiBAeGE6IFhhcnJheSB1c2VkIHRvIHF1aWNrbHkgbG9va3VwIGRldmljZXMgaW4gQHNlci4KJiM0MzsgKiBAYmxvY2tfc2V0OiBUaGUgS0hPIGJsb2NrIHNldCBob2xkaW5nIHRoZSBpbmNvbWluZyBkZXZpY2VzLgomIzQzOyAqCiYjNDM7ICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIHJ1bnRpbWUgc3RhdGUgZm9yIHRoZSBpbmNvbWluZyBQQ0kgTGl2ZSBVcGRhdGUKJiM0MzsgKiBzdGF0ZS4gSXQgd3JhcHMgdGhlIHNlcmlhbGl6ZWQgcGNpX3NlciwgdGhlIGJsb2NrX3NldCB1c2VkIHRvIHJlc3RvcmUKJiM0MzsgKiB0aGUgc2VyaWFsaXplZCBlbnRyaWVzLCBhbmQgYW4geGFycmF5IGZvciBmYXN0IGxvb2t1cHMuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBjaV9mbGJfaW5jb21pbmcgewomIzQzOwlzdHJ1Y3QgcGNpX3NlciAqc2VyOwomIzQzOwlzdHJ1Y3QgeGFycmF5IHhhOwomIzQzOwlzdHJ1Y3Qga2hvX2Jsb2NrX3NldCBibG9ja19zZXQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwY2lfc2VyX3hhX2tleSh1MzIgZG9tYWluLCB1MTYgYmRmKQomIzQzO3sKJiM0MzsJcmV0dXJuICh1bnNpZ25lZCBsb25nKWRvbWFpbiAmbHQ7Jmx0OyAxNiB8IGJkZjsKJiM0Mzt9CiYjNDM7c3RhdGljIGludCBwY2lfZmxiX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nOwomIzQzOwlzdHJ1Y3QgcGNpX3NlciAqc2VyOwomIzQzOwomIzQzOwlvdXRnb2luZyA9IGt6YWxsb2Nfb2JqKCpvdXRnb2luZyk7CiYjNDM7CWlmICghb3V0Z29pbmcpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJc2VyID0ga2hvX2FsbG9jX3ByZXNlcnZlKHNpemVvZigqc2VyKSk7CiYjNDM7CWlmIChJU19FUlIoc2VyKSkgewomIzQzOwkJa2ZyZWUob3V0Z29pbmcpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIoc2VyKTsKJiM0MzsJfQomIzQzOwomIzQzOwlzZXItJmd0O25yX2RldmljZXMgPSAwOwomIzQzOwlzZXItJmd0O2RldmljZXMgPSAwOwomIzQzOwomIzQzOwlvdXRnb2luZy0mZ3Q7c2VyID0gc2VyOwomIzQzOwlraG9fYmxvY2tfc2V0X2luaXQoJmFtcDtvdXRnb2luZy0mZ3Q7YmxvY2tfc2V0LCBzaXplb2Yoc3RydWN0IHBjaV9kZXZfc2VyKSk7CiYjNDM7CiYjNDM7CWFyZ3MtJmd0O29iaiA9IG91dGdvaW5nOwomIzQzOwlhcmdzLSZndDtkYXRhID0gdmlydF90b19waHlzKHNlcik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwY2lfZmxiX3VucHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmxiX29wX2FyZ3MgKmFyZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcgPSBhcmdzLSZndDtvYmo7CiYjNDM7CiYjNDM7CVdBUk5fT04ob3V0Z29pbmctJmd0O3Nlci0mZ3Q7bnJfZGV2aWNlcyk7CiYjNDM7CWtob19ibG9ja19zZXRfZGVzdHJveSgmYW1wO291dGdvaW5nLSZndDtibG9ja19zZXQpOwomIzQzOwlraG9fdW5wcmVzZXJ2ZV9mcmVlKG91dGdvaW5nLSZndDtzZXIpOwomIzQzOwlrZnJlZShvdXRnb2luZyk7CiYjNDM7CXByX2RlYnVnKCYjMzQ7VW5wcmVzZXJ2ZWQgc3RydWN0IHBjaV9zZXJcbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwY2lfZmxiX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9zZXIgKnNlciA9IHBoeXNfdG9fdmlydChhcmdzLSZndDtkYXRhKTsKJiM0MzsJc3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKmluY29taW5nOwomIzQzOwlzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXI7CiYjNDM7CXN0cnVjdCBraG9fYmxvY2tfc2V0X2l0IGl0OwomIzQzOwlpbnQgcmV0ID0gLUVOT01FTTsKJiM0MzsKJiM0MzsJaW5jb21pbmcgPSBremFsbG9jX29iaigqaW5jb21pbmcpOwomIzQzOwlpZiAoIWluY29taW5nKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9mcmVlOwomIzQzOwomIzQzOwlpbmNvbWluZy0mZ3Q7c2VyID0gc2VyOwomIzQzOwl4YV9pbml0KCZhbXA7aW5jb21pbmctJmd0O3hhKTsKJiM0MzsKJiM0MzsJa2hvX2Jsb2NrX3NldF9pbml0KCZhbXA7aW5jb21pbmctJmd0O2Jsb2NrX3NldCwgc2l6ZW9mKHN0cnVjdCBwY2lfZGV2X3NlcikpOwomIzQzOwlyZXQgPSBraG9fYmxvY2tfc2V0X3Jlc3RvcmUoJmFtcDtpbmNvbWluZy0mZ3Q7YmxvY2tfc2V0LCBzZXItJmd0O2RldmljZXMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZnJlZV9pbmNvbWluZzsKJiM0MzsKJiM0MzsJa2hvX2Jsb2NrX3NldF9pdF9pbml0KCZhbXA7aXQsICZhbXA7aW5jb21pbmctJmd0O2Jsb2NrX3NldCk7CiYjNDM7CXdoaWxlICgoZGV2X3NlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeSgmYW1wO2l0KSkpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcga2V5OwomIzQzOwomIzQzOwkJaWYgKCFkZXZfc2VyLSZndDtyZWZjb3VudCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWtleSA9IHBjaV9zZXJfeGFfa2V5KGRldl9zZXItJmd0O2RvbWFpbiwgZGV2X3Nlci0mZ3Q7YmRmKTsKJiM0MzsJCXJldCA9IHhhX2luc2VydCgmYW1wO2luY29taW5nLSZndDt4YSwga2V5LCBkZXZfc2VyLCBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBlcnJfYmxvY2tfc2V0X2Rlc3Ryb3k7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYXJncy0mZ3Q7b2JqID0gaW5jb21pbmc7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9ibG9ja19zZXRfZGVzdHJveToKJiM0MzsJa2hvX2Jsb2NrX3NldF9kZXN0cm95KCZhbXA7aW5jb21pbmctJmd0O2Jsb2NrX3NldCk7CiYjNDM7ZXJyX2ZyZWVfaW5jb21pbmc6CiYjNDM7CXhhX2Rlc3Ryb3koJmFtcDtpbmNvbWluZy0mZ3Q7eGEpOwomIzQzOwlrZnJlZShpbmNvbWluZyk7CiYjNDM7ZXJyX3Jlc3RvcmVfZnJlZToKJiM0MzsJa2hvX3Jlc3RvcmVfZnJlZShzZXIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwY2lfZmxiX2ZpbmlzaChzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BfYXJncyAqYXJncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZyA9IGFyZ3MtJmd0O29iajsKJiM0MzsKJiM0MzsJeGFfZGVzdHJveSgmYW1wO2luY29taW5nLSZndDt4YSk7CiYjNDM7CWtob19ibG9ja19zZXRfZGVzdHJveSgmYW1wO2luY29taW5nLSZndDtibG9ja19zZXQpOwomIzQzOwlraG9fcmVzdG9yZV9mcmVlKGluY29taW5nLSZndDtzZXIpOwomIzQzOwlrZnJlZShpbmNvbWluZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BzIHBjaV9saXZldXBkYXRlX2ZsYl9vcHMgPSB7CiYjNDM7CS5wcmVzZXJ2ZSA9IHBjaV9mbGJfcHJlc2VydmUsCiYjNDM7CS51bnByZXNlcnZlID0gcGNpX2ZsYl91bnByZXNlcnZlLAomIzQzOwkucmV0cmlldmUgPSBwY2lfZmxiX3JldHJpZXZlLAomIzQzOwkuZmluaXNoID0gcGNpX2ZsYl9maW5pc2gsCiYjNDM7CS5vd25lciA9IFRISVNfTU9EVUxFLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiBwY2lfbGl2ZXVwZGF0ZV9mbGIgPSB7CiYjNDM7CS5vcHMgPSAmYW1wO3BjaV9saXZldXBkYXRlX2ZsYl9vcHMsCiYjNDM7CS5jb21wYXRpYmxlID0gUENJX0xVT19GTEJfQ09NUEFUSUJMRSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbGl2ZXVwZGF0ZV9mbGJfZ2V0X291dGdvaW5nKCZhbXA7cGNpX2xpdmV1cGRhdGVfZmxiLCAodm9pZCAqKikmYW1wO291dGdvaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CiYjNDM7CWlmICghb3V0Z29pbmcpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG91dGdvaW5nOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kZXZfc2VyICpwY2lfZ2V0X2VtcHR5X29yX2FwcGVuZChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXIsICpmb3VuZCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBraG9fYmxvY2tfc2V0X2l0IGl0OwomIzQzOwlpbnQgZXJyOwomIzQzOwl1MzIgY291bnQgPSAwOwomIzQzOwomIzQzOwlraG9fYmxvY2tfc2V0X2l0X2luaXQoJmFtcDtpdCwgJmFtcDtvdXRnb2luZy0mZ3Q7YmxvY2tfc2V0KTsKJiM0MzsJd2hpbGUgKChkZXZfc2VyID0ga2hvX2Jsb2NrX3NldF9pdF9yZWFkX2VudHJ5KCZhbXA7aXQpKSkgewomIzQzOwkJY291bnQmIzQzOyYjNDM7OwomIzQzOwkJaWYgKGRldl9zZXItJmd0O3JlZmNvdW50ID09IDAgJmFtcDsmYW1wOyAhZm91bmQpCiYjNDM7CQkJZm91bmQgPSBkZXZfc2VyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChmb3VuZCkKJiM0MzsJCXJldHVybiBmb3VuZDsKJiM0MzsKJiM0MzsJZXJyID0ga2hvX2Jsb2NrX3NldF9ncm93KCZhbXA7b3V0Z29pbmctJmd0O2Jsb2NrX3NldCwgY291bnQgJiM0MzsgMSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwomIzQzOwlpZiAoY291bnQgPT0gMCkKJiM0MzsJCWtob19ibG9ja19zZXRfaXRfaW5pdCgmYW1wO2l0LCAmYW1wO291dGdvaW5nLSZndDtibG9ja19zZXQpOwomIzQzOwomIzQzOwlkZXZfc2VyID0ga2hvX2Jsb2NrX3NldF9pdF9yZXNlcnZlX2VudHJ5KCZhbXA7aXQpOwomIzQzOwlpZiAoIWRldl9zZXIpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldl9zZXI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9kZXZpY2Uoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXZfc2VyICpkZXZfc2VyID0gZGV2LSZndDtsaXZldXBkYXRlLm91dGdvaW5nOwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDtsaXZldXBkYXRlLmZyb3plbikgewomIzQzOwkJcGNpX3dhcm4oZGV2LCAmIzM0O0Nhbm5vdCB1bnByZXNlcnZlIGRldmljZSBhZnRlciBpdCBpcyBmcm96ZW4hXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWRldl9zZXIpIHsKJiM0MzsJCXBjaV93YXJuKGRldiwgJiMzNDtDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2UgdGhhdCBpcyBub3QgcHJlc2VydmVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWRldl9zZXItJmd0O3JlZmNvdW50KSB7CiYjNDM7CQlwY2lfV0FSTihkZXYsIDEsICYjMzQ7UHJlc2VydmVkIGRldmljZSBoYXMgYSAwIHJlZmNvdW50IVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKC0tZGV2X3Nlci0mZ3Q7cmVmY291bnQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcGNpX2luZm8oZGV2LCAmIzM0O0RldmljZSB3aWxsIG5vIGxvbmdlciBiZSBwcmVzZXJ2ZWQgYWNyb3NzIG5leHQgTGl2ZSBVcGRhdGVcbiYjMzQ7KTsKJiM0MzsJb3V0Z29pbmctJmd0O3Nlci0mZ3Q7bnJfZGV2aWNlcy0tOwomIzQzOwltZW1zZXQoZGV2X3NlciwgMCwgc2l6ZW9mKCpkZXZfc2VyKSk7CiYjNDM7CWRldi0mZ3Q7bGl2ZXVwZGF0ZS5vdXRnb2luZyA9IE5VTEw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZV9hZ2FpbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJaWYgKCFkZXYtJmd0O2xpdmV1cGRhdGUub3V0Z29pbmctJmd0O3JlZmNvdW50KSB7CiYjNDM7CQlwY2lfV0FSTihkZXYsIDEsICYjMzQ7UHJlc2VydmVkIGRldmljZSB3aXRoIDAgcmVmY291bnQhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbmRwb2ludCBkZXZpY2VzIHNob3VsZCBub3QgYmUgcHJlc2VydmVkIG1vcmUgdGhhbiBvbmNlLiBCcmlkZ2VzIGFyZQomIzQzOwkgKiBwcmVzZXJ2ZWQgb25jZSBmb3IgZXZlcnkgZG93bnN0cmVhbSBkZXZpY2UgdGhhdCBpcyBwcmVzZXJ2ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWRldi0mZ3Q7c3Vib3JkaW5hdGUpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlkZXYtJmd0O2xpdmV1cGRhdGUub3V0Z29pbmctJmd0O3JlZmNvdW50JiM0MzsmIzQzOzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19wY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2Uoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXZfc2VyICpkZXZfc2VyOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEbyBub3QgcHJlc2VydmUgZGV2aWNlcyB0aGF0IHJlbHkgb24gZGV2aWNlLXNwZWNpZmljIEFDUyBlcXVpdmFsZW50cwomIzQzOwkgKiAoZm9yIG5vdykgc2luY2UgdGhhdCB3b3VsZCBjb21wbGljYXRlIGtlZXBpbmcgQUNTIGNvbnN0YW50IGFjcm9zcwomIzQzOwkgKiBMaXZlIFVwZGF0ZS4KJiM0MzsJICovCiYjNDM7CWlmIChwY2lfbmVlZF9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhkZXYpKSB7CiYjNDM7CQlwY2lfd2FybihkZXYsICYjMzQ7UmVmdXNpbmcgdG8gcHJlc2VydmUgZGV2aWNlIHRoYXQgcmVsaWVzIG9uIEFDUyBxdWlya3NcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldl9zZXIgPSBwY2lfZ2V0X2VtcHR5X29yX2FwcGVuZChvdXRnb2luZyk7CiYjNDM7CWlmIChJU19FUlIoZGV2X3NlcikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkZXZfc2VyKTsKJiM0MzsKJiM0MzsJcGNpX2luZm8oZGV2LCAmIzM0O0RldmljZSB3aWxsIGJlIHByZXNlcnZlZCBhY3Jvc3MgbmV4dCBMaXZlIFVwZGF0ZVxuJiMzNDspOwomIzQzOwlvdXRnb2luZy0mZ3Q7c2VyLSZndDtucl9kZXZpY2VzJiM0MzsmIzQzOzsKJiM0MzsJb3V0Z29pbmctJmd0O3Nlci0mZ3Q7ZGV2aWNlcyA9IGtob19ibG9ja19zZXRfaGVhZF9wYSgmYW1wO291dGdvaW5nLSZndDtibG9ja19zZXQpOwomIzQzOwomIzQzOwlkZXZfc2VyLSZndDtkb21haW4gPSBwY2lfZG9tYWluX25yKGRldi0mZ3Q7YnVzKTsKJiM0MzsJZGV2X3Nlci0mZ3Q7YmRmID0gcGNpX2Rldl9pZChkZXYpOwomIzQzOwlkZXZfc2VyLSZndDtyZWZjb3VudCA9IDE7CiYjNDM7CiYjNDM7CWRldi0mZ3Q7bGl2ZXVwZGF0ZS5vdXRnb2luZyA9IGRldl9zZXI7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZShzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlpZiAoZGV2LSZndDtsaXZldXBkYXRlLmZyb3plbikgewomIzQzOwkJcGNpX3dhcm4oZGV2LCAmIzM0O0Nhbm5vdCBwcmVzZXJ2ZSBkZXZpY2UgYWZ0ZXIgaXQgaXMgZnJvemVuIVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7bGl2ZXVwZGF0ZS5vdXRnb2luZykKJiM0MzsJCXJldHVybiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2VfYWdhaW4oZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfZGV2aWNlKG91dGdvaW5nLCBkZXYpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChfZCwgX3N0YXJ0LCBfZW5kKSBcCiYjNDM7CWZvciAoKF9kKSA9IChfc3RhcnQpOyAoX2QpICE9IChfZW5kKTsgKF9kKSA9IChfZCktJmd0O2J1cy0mZ3Q7c2VsZikKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX3BjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpzdGFydCwKJiM0MzsJCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKmVuZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpkZXY7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBlbmQpIHsKJiM0MzsJCWlmIChwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX2RldmljZShvdXRnb2luZywgZGV2KSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywKJiM0MzsJCQkJCSAgIHN0cnVjdCBwY2lfZGV2ICpzdGFydCkKJiM0Mzt7CiYjNDM7CV9fcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBzdGFydCwgLyplbmQ9Ki9OVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9wYXRoKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywKJiM0MzsJCQkJCXN0cnVjdCBwY2lfZGV2ICpzdGFydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpkZXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7CiYjNDM7CQlyZXQgPSBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2Uob3V0Z29pbmcsIGRldik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJX19wY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX3BhdGgob3V0Z29pbmcsIHN0YXJ0LCBkZXYpOwomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgLSBQcmVzZXJ2ZSBhIFBDSSBkZXZpY2UgYWNyb3NzIExpdmUgVXBkYXRlCiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2UgdG8gcHJlc2VydmUuCiYjNDM7ICoKJiM0MzsgKiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSgpIG5vdGlmaWVzIHRoZSBQQ0kgY29yZSB0aGF0IGEgUENJIGRldmljZSBzaG91bGQgYmUKJiM0MzsgKiBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBuZXh0IExpdmUgVXBkYXRlLiBEcml2ZXJzIGFyZSBleHBlY3RlZCB0byBjYWxsCiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSBmcm9tIHRoZWlyIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlcgomIzQzOyAqIHByZXNlcnZlKCkgY2FsbGJhY2sgdG8gZW5zdXJlIHRoZSBvdXRnb2luZyBzdHJ1Y3QgcGNpX3NlciBpcyBhbHJlYWR5IHNldCB1cC4KJiM0MzsgKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgYXV0b21hdGljYWxseSBwcmVzZXJ2ZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2YKJiM0MzsgKiBAZGV2LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7aXNfdmlydGZuKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWd1YXJkKHJ3c2VtX3dyaXRlKSgmYW1wO3BjaV9saXZldXBkYXRlLnJ3c2VtKTsKJiM0MzsKJiM0MzsJb3V0Z29pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X291dGdvaW5nKCk7CiYjNDM7CWlmIChJU19FUlIob3V0Z29pbmcpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIob3V0Z29pbmcpOwomIzQzOwomIzQzOwlyZXR1cm4gcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfcGF0aChvdXRnb2luZywgZGV2KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfcHJlc2VydmUpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSAtIENhbmNlbCBwcmVzZXJ2YXRpb24gb2YgYSBQQ0kgZGV2aWNlCiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2UgdG8gdW5wcmVzZXJ2ZS4KJiM0MzsgKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSBub3RpZmllcyB0aGUgUENJIGNvcmUgdGhhdCBhIFBDSSBkZXZpY2Ugc2hvdWxkIG5vCiYjNDM7ICogbG9uZ2VyIGJlIHByZXNlcnZlZCBhY3Jvc3MgdGhlIG5leHQgTGl2ZSBVcGRhdGUuIERyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIGNhbGwKJiM0MzsgKiBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKCkgZnJvbSB0aGVpciBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIKJiM0MzsgKiB1bnByZXNlcnZlKCkgY2FsbGJhY2sgdG8gZW5zdXJlIHRoZSBvdXRnb2luZyBzdHJ1Y3QgcGNpX3NlciBpcyBhbHJlYWR5IHNldAomIzQzOyAqIHVwLgomIzQzOyAqCiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpIGF1dG9tYXRpY2FsbHkgdW5wcmVzZXJ2ZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2YKJiM0MzsgKiBAZGV2LgomIzQzOyAqLwomIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDsKJiM0MzsKJiM0MzsJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7cGNpX2xpdmV1cGRhdGUucndzZW0pOwomIzQzOwomIzQzOwlvdXRnb2luZyA9IHBjaV9saXZldXBkYXRlX2ZsYl9nZXRfb3V0Z29pbmcoKTsKJiM0MzsJaWYgKElTX0VSUihvdXRnb2luZykpIHsKJiM0MzsJCXBjaV93YXJuKGRldiwgJiMzNDtDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2Ugd2l0aG91dCBvdXRnb2luZyBMaXZlIFVwZGF0ZSBzdGF0ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChvdXRnb2luZywgZGV2KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwY2lfZmxiX2luY29taW5nICpwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAqaW5jb21pbmcgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBsaXZldXBkYXRlX2ZsYl9nZXRfaW5jb21pbmcoJmFtcDtwY2lfbGl2ZXVwZGF0ZV9mbGIsICh2b2lkICoqKSZhbXA7aW5jb21pbmcpOwomIzQzOwomIzQzOwkvKiBMaXZlIFVwZGF0ZSBpcyBub3QgZW5hYmxlZC4gKi8KJiM0MzsJaWYgKHJldCA9PSAtRU9QTk9UU1VQUCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwkvKiBMaXZlIFVwZGF0ZSBpcyBlbmFibGVkLCBidXQgdGhlcmUgaXMgbm8gaW5jb21pbmcgRkxCIGRhdGEuICovCiYjNDM7CWlmIChyZXQgPT0gLUVOT0RBVEEpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTGl2ZSBVcGRhdGUgaXMgZW5hYmxlZCBhbmQgdGhlcmUgaXMgaW5jb21pbmcgRkxCIGRhdGEsIGJ1dCBub25lIG9mIGl0CiYjNDM7CSAqIG1hdGNoZXMgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGUuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgY291bGQgbWVhbiB0aGF0IG5vIFBDSSBGTEIgZGF0YSB3YXMgcGFzc2VkIGJ5IHRoZSBwcmV2aW91cwomIzQzOwkgKiBrZXJuZWwsIGJ1dCBpdCBjb3VsZCBhbHNvIG1lYW4gdGhlIHByZXZpb3VzIGtlcm5lbCB1c2VkIGEgZGlmZmVyZW50CiYjNDM7CSAqIGNvbXBhdGliaWxpdHkgc3RyaW5nIChpLmUuIGEgZGlmZmVyZW50IEFCSSkuCiYjNDM7CSAqLwomIzQzOwlpZiAocmV0ID09IC1FTk9FTlQpIHsKJiM0MzsJCXByX2luZm9fb25jZSgmIzM0O05vIGluY29taW5nIEZMQiBtYXRjaGVkICVzXG4mIzM0OywgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGUpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlcmUgaXMgaW5jb21pbmcgRkxCIGRhdGEgdGhhdCBtYXRjaGVzIHBjaV9saXZldXBkYXRlX2ZsYi5jb21wYXRpYmxlCiYjNDM7CSAqIGJ1dCBpdCBjYW5ub3QgYmUgcmV0cmlldmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJldCkKJiM0MzsJCXBhbmljKCYjMzQ7RmFpbGVkIHRvIHJldHJpZXZlIGluY29taW5nIEZMQiBkYXRhICglZClcbiYjMzQ7LCByZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gaW5jb21pbmc7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcodm9pZCkKJiM0Mzt7CiYjNDM7CWxpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZygmYW1wO3BjaV9saXZldXBkYXRlX2ZsYik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luKCkgLSBEZXRlcm1pbmUgaWYgYSBicmlkZ2Ugc2hvdWxkIGluaGVyaXQgYnVzIG51bWJlcnMKJiM0MzsgKiBAYnVzOiBUaGUgcGFyZW50IGJ1cyBvZiB0aGUgYnJpZGdlLgomIzQzOyAqIEBkZXY6IFRoZSBQQ0kgYnJpZGdlIGRldmljZS4KJiM0MzsgKiBAcGFzczogVGhlIHNjYW4gcGFzcyAoMCBmb3IgZmlyc3QgcGFzcywgMSBmb3Igc2Vjb25kIHBhc3MpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIFBDSSBjb3JlIHdoZW4gaXQgYmVnaW5zIHNjYW5uaW5nIGEgYnJpZGdlLgomIzQzOyAqIEl0IGRldGVybWluZXMgd2hldGhlciB0aGUgYnJpZGdlIHNob3VsZCBpbmhlcml0IHRoZSBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlCiYjNDM7ICogYnVzIG51bWJlcnMgYXNzaWduZWQgdG8gaXQgYnkgdGhlIHByZXZpb3VzIGtlcm5lbC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8KJiM0MzsgKiBrZWVwIGJ1cyBudW1iZXJzIGNvbnN0YW50IGZvciBwcmVzZXJ2ZWQgZGV2aWNlcyBkb3duc3RyZWFtIG9mIHRoZSBicmlkZ2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRydWUgaWYgYnVzIG51bWJlcnMgc2hvdWxkIGJlIGluaGVyaXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2Jvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldiwKJiM0MzsJCQkJICAgICAgaW50IHBhc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGFyZW50ID0gYnVzLSZndDtzZWxmOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPbiB0aGUgc2Vjb25kIHBhc3MsIHJldXNlIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQgb24gdGhlIGZpcnN0IHBhc3MKJiM0MzsJICogc28gdGhhdCB0aGUgcGFzc2VzIGFyZSBjb25zaXN0ZW50IHdpdGggb25lIGFub3RoZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocGFzcykKJiM0MzsJCXJldHVybiBkZXYtJmd0O2xpdmV1cGRhdGUuaW5oZXJpdF9idXNlczsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIHBhcmVudCBicmlkZ2UgaXMgYmVpbmcgZm9yY2VkIHRvIGluaGVyaXQgaXRzIGJ1cyBudW1iZXJzCiYjNDM7CSAqIGR1cmluZyB0aGlzIHNjYW4gdGhlbiB0aGlzIGJyaWRnZSBtdXN0IGFzIHdlbGwsIG90aGVyd2lzZSB0aGUgUENJCiYjNDM7CSAqIGNvcmUgY291bGQgZXhwYW5kIHRoaXMgYnJpZGdlJiMzOTtzIHJlc2VydmF0aW9uIGJleW9uZCBpdHMgcGFyZW50ICh3aGljaAomIzQzOwkgKiBjYW5ub3QgZXhwYW5kKS4KJiM0MzsJICovCiYjNDM7CWlmIChwYXJlbnQgJmFtcDsmYW1wOyBwYXJlbnQtJmd0O2xpdmV1cGRhdGUuaW5oZXJpdF9idXNlcykgewomIzQzOwkJZGV2LSZndDtsaXZldXBkYXRlLmluaGVyaXRfYnVzZXMgPSB0cnVlOwomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgYW55IGluY29taW5nIHByZXNlcnZlZCBkZXZpY2VzLCBmb3JjZSB0aGUKJiM0MzsJICogYnVzIG51bWJlcnMgdG8gYmUgaW5oZXJpdGVkIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBidXMgbnVtYmVycwomIzQzOwkgKiBhc3NpZ25lZCB0byB0aG9zZSBkZXZpY2VzIGR1cmluZyBlbnVtZXJhdGlvbi4KJiM0MzsJICoKJiM0MzsJICogVG8ga2VlcCB0aGluZ3Mgc2ltcGxlLCBpbmhlcml0IGJ1cyBudW1iZXJzIG9uIGFsbCBicmlkZ2VzIGlmIGFueSBQQ0kKJiM0MzsJICogZGV2aWNlcyBhcmUgaW5jb21pbmcsIHRvIGVuc3VyZSB0aGF0IG5vIGJyaWRnZSYjMzk7cyByZXNlcnZhdGlvbiBpcwomIzQzOwkgKiBleHBhbmRlZCB0byBvdmVybGFwIHdpdGggYSBwcmVzZXJ2ZWQgZGV2aWNlIGRvd25zdHJlYW0gb2YgYSBkaWZmZXJlbnQKJiM0MzsJICogYnJpZGdlLgomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsICZhbXA7cGNpX2xpdmV1cGRhdGUucndzZW0pIHsKJiM0MzsJCXN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZzsKJiM0MzsKJiM0MzsJCWluY29taW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZygpOwomIzQzOwkJaWYgKCFpbmNvbWluZykgewomIzQzOwkJCWRldi0mZ3Q7bGl2ZXVwZGF0ZS5pbmhlcml0X2J1c2VzID0gZmFsc2U7CiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEl0IGlzIHNhZmUgdG8gc2FtcGxlIGluY29taW5nLSZndDtzZXItJmd0O25yX2RldmljZXMgYW5kIHRoZW4KJiM0MzsJCSAqIGRyb3AgdGhlIHJ3c2VtIHNpbmNlIG5yX2RldmljZXMgd2lsbCBvbmx5IGRlY3JlYXNlLiBUaHVzIHRoZQomIzQzOwkJICogb25seSAmIzM0O3JhY2UmIzM0OyBpcyB0aGF0IHRoZSBjdXJyZW50IHNjYW4gd2lsbCBiZSBvdmVybHkKJiM0MzsJCSAqIGNvbnNlcnZhdGl2ZSBhbmQgZm9yY2UgYnVzIGluaGVyaXRhbmNlLgomIzQzOwkJICovCiYjNDM7CQlkZXYtJmd0O2xpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9ICEhaW5jb21pbmctJmd0O3Nlci0mZ3Q7bnJfZGV2aWNlczsKJiM0MzsJCXBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZGV2LSZndDtsaXZldXBkYXRlLmluaGVyaXRfYnVzZXM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZCgpIC0gRmluaXNoIHNjYW5uaW5nIGEgUENJIGJyaWRnZQomIzQzOyAqIEBkZXY6IFRoZSBQQ0kgYnJpZGdlIGRldmljZS4KJiM0MzsgKiBAcGFzczogVGhlIHNjYW4gcGFzcyAoMCBmb3IgZmlyc3QgcGFzcywgMSBmb3Igc2Vjb25kIHBhc3MpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIFBDSSBjb3JlIHdoZW4gaXQgZmluaXNoZXMgc2Nhbm5pbmcgYSBicmlkZ2UuCiYjNDM7ICogSXQgY2xlYXJzIHRoZSBpbmhlcml0YW5jZSBzdGF0dXMgYWZ0ZXIgdGhlIHNlY29uZCBwYXNzIHNvIGl0IGNhbiBiZQomIzQzOyAqIHJlLWV2YWx1YXRlZCBvbiBmdXR1cmUgc2NhbnMuCiYjNDM7ICovCiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBhc3MpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBDbGVhciBpbmhlcml0X2J1c2VzIGFmdGVyIHRoZSBzZWNvbmQgcGFzcyBzbyBpdCBjYW4gYmUgcmUtZXZhbHVhdGVkCiYjNDM7CSAqIG9uIGZ1dHVyZSBzY2Fucy4KJiM0MzsJICovCiYjNDM7CWlmIChwYXNzKQomIzQzOwkJZGV2LSZndDtsaXZldXBkYXRlLmluaGVyaXRfYnVzZXMgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZzsKJiM0MzsJc3RydWN0IHBjaV9kZXZfc2VyICpkZXZfc2VyOwomIzQzOwl1bnNpZ25lZCBsb25nIGtleTsKJiM0MzsKJiM0MzsJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7cGNpX2xpdmV1cGRhdGUucndzZW0pOwomIzQzOwomIzQzOwlpbmNvbWluZyA9IHBjaV9saXZldXBkYXRlX2ZsYl9nZXRfaW5jb21pbmcoKTsKJiM0MzsJaWYgKCFpbmNvbWluZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJa2V5ID0gcGNpX3Nlcl94YV9rZXkocGNpX2RvbWFpbl9ucihkZXYtJmd0O2J1cyksIHBjaV9kZXZfaWQoZGV2KSk7CiYjNDM7CWRldl9zZXIgPSB4YV9sb2FkKCZhbXA7aW5jb21pbmctJmd0O3hhLCBrZXkpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGRldmljZSB3YXMgbm90IHByZXNlcnZlZCBhY3Jvc3MgTGl2ZSBVcGRhdGUsIG9yIGl0IHdhcyBwcmVzZXJ2ZWQKJiM0MzsJICogYnV0IGhhcyBhbHJlYWR5IGJlZW4gcHJvYmVkIGFuZCBnb25lIHRocm91Z2ggcGNpX2xpdmV1cGRhdGVfZmluaXNoKCksCiYjNDM7CSAqIGUuZy4gZHVlIHRvIHJlbW92aW5nIGFuZCByZS1hZGRpbmcgdGhlIGRldmljZS4gRWl0aGVyIHdheSwgaXQmIzM5O3Mgbm90CiYjNDM7CSAqIHRyZWF0ZWQgYXMgaW5jb21pbmctcHJlc2VydmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFkZXZfc2VyIHx8ICFkZXZfc2VyLSZndDtyZWZjb3VudCkgewomIzQzOwkJcGNpX2xpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZygpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CiYjNDM7CXBjaV9pbmZvKGRldiwgJiMzNDtEZXZpY2Ugd2FzIHByZXNlcnZlZCBieSBwcmV2aW91cyBrZXJuZWwgYWNyb3NzIExpdmUgVXBkYXRlXG4mIzM0Oyk7CiYjNDM7CWRldi0mZ3Q7bGl2ZXVwZGF0ZS5pbmNvbWluZyA9IGRldl9zZXI7CiYjNDM7CWRldi0mZ3Q7bGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSG9sZCB0aGUgcmVmIG9uIHRoZSBpbmNvbWluZyBGTEIgdW50aWwgcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkgc28KJiM0MzsJICogdGhhdCBkZXYtJmd0O2xpdmV1cGRhdGUuaW5jb21pbmcgY2Fubm90IGdldCBmcmVlZCB3aGlsZSB0aGUgUENJIGNvcmUKJiM0MzsJICogaGFzIGEgcG9pbnRlciB0byBpdC4gSXQmIzM5O3MgYmV0dGVyIHRvIGxlYWsgdGhlIGluY29taW5nIEZMQiB0aGFuIGRvIGEKJiM0MzsJICogdXNlLWFmdGVyLWZyZWUgaWYgZHJpdmVyIGRvZXMgbm90IGNhbGwgcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkuCiYjNDM7CSAqLwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBJdCBzaG91bGQgYmUgc2FmZSB0byBSRUFEX09OQ0UoKSBvdXRzaWRlIG9mIHRoZSByd3NlbSBkdXJpbmcgY2xlYW51cAomIzQzOwkgKiBzaW5jZSB0aGVyZSBzaG91bGQgbm8gbG9uZ2VyIGJlIGFueSByZWZlcmVuY2VzIHRvIEBkZXYgb24gdGhlIHN5c3RlbS4KJiM0MzsJICoKJiM0MzsJICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIHByYWN0aWNlLiBEcml2ZXJzIHNob3VsZCBibG9jayByZW1vdmFsCiYjNDM7CSAqIHdoaWxlIGEgZGV2aWNlIGlzIHByZXNlcnZlZC4KJiM0MzsJICovCiYjNDM7CWlmIChSRUFEX09OQ0UoZGV2LSZndDtsaXZldXBkYXRlLm91dGdvaW5nKSkKJiM0MzsJCXBjaV9XQVJOKGRldiwgMSwgJiMzNDtEZXN0cm95aW5nIG91dGdvaW5nLXByZXNlcnZlZCBkZXZpY2UhXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChSRUFEX09OQ0UoZGV2LSZndDtsaXZldXBkYXRlLmluY29taW5nKSkgewomIzQzOwkJcGNpX1dBUk4oZGV2LCAxLCAmIzM0O0Rlc3Ryb3lpbmcgaW5jb21pbmctcHJlc2VydmVkIGRldmljZSFcbiYjMzQ7KTsKJiM0MzsJCXBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2ZyZWV6ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7cGNpX2xpdmV1cGRhdGUucndzZW0pOwomIzQzOwlkZXYtJmd0O2xpdmV1cGRhdGUuZnJvemVuID0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2hfZGV2aWNlKHN0cnVjdCBwY2lfc2VyICpzZXIsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlpZiAoIWRldi0mZ3Q7bGl2ZXVwZGF0ZS5pbmNvbWluZykgewomIzQzOwkJcGNpX3dhcm4oZGV2LCAmIzM0O0Nhbm5vdCBmaW5pc2ggcHJlc2VydmluZyBhbiB1bnByZXNlcnZlZCBkZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtsaXZldXBkYXRlLmluY29taW5nLSZndDtyZWZjb3VudCkgewomIzQzOwkJcGNpX1dBUk4oZGV2LCAxLCAmIzM0O1ByZXNlcnZlZCBkZXZpY2UgaGFzIGEgMCByZWZjb3VudCFcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERlY3JlbWVudCB0aGUgcmVmY291bnQgc28gdGhpcyBkZXZpY2UgZG9lcyBub3QgZ2V0IHRyZWF0ZWQgYXMgYW4KJiM0MzsJICogaW5jb21pbmcgZGV2aWNlIGFnYWluLCBlLmcuIGluIGNhc2UgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKCkKJiM0MzsJICogZ2V0cyBjYWxsZWQgYWdhaW4gYmVjYXVzZSB0aGUgZGV2aWNlIGlzIGhvdC1wbHVnZ2VkLgomIzQzOwkgKi8KJiM0MzsJaWYgKC0tZGV2LSZndDtsaXZldXBkYXRlLmluY29taW5nLSZndDtyZWZjb3VudCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwY2lfaW5mbyhkZXYsICYjMzQ7RGV2aWNlIGlzIGZpbmlzaGVkIHBhcnRpY2lwYXRpbmcgaW4gTGl2ZSBVcGRhdGVcbiYjMzQ7KTsKJiM0MzsJZGV2LSZndDtsaXZldXBkYXRlLmluY29taW5nID0gTlVMTDsKJiM0MzsJc2VyLSZndDtucl9kZXZpY2VzLS07CiYjNDM7CXBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaF9wYXRoKHN0cnVjdCBwY2lfc2VyICpzZXIsIHN0cnVjdCBwY2lfZGV2ICpzdGFydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpkZXY7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7CiYjNDM7CQlpZiAocGNpX2xpdmV1cGRhdGVfZmluaXNoX2RldmljZShzZXIsIGRldikpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIC0gRmluaXNoIHRoZSBwcmVzZXJ2YXRpb24gb2YgYSBQQ0kgZGV2aWNlCiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIG5vdGlmaWVzIHRoZSBQQ0kgY29yZSB0aGF0IGEgUENJIGRldmljZSB0aGF0IHdhcwomIzQzOyAqIHByZXNlcnZlZCBhY3Jvc3MgdGhlIHByZXZpb3VzIExpdmUgVXBkYXRlIGhhcyBmaW5pc2hlZCBwYXJ0aWNpcGF0aW5nIGluIExpdmUKJiM0MzsgKiBVcGRhdGUuIERyaXZlcnMgbXVzdCBjYWxsIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIGZyb20gdGhlaXIgc3RydWN0CiYjNDM7ICogbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgZmluaXNoKCkgY2FsbGJhY2sgdG8gZW5zdXJlIHRoZSBpbmNvbWluZyBzdHJ1Y3QKJiM0MzsgKiBwY2lfc2VyIGlzIGFsbG9jYXRlZC4KJiM0MzsgKgomIzQzOyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIGF1dG9tYXRpY2FsbHkgZmluaXNoZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2YgQGRldi4KJiM0MzsgKi8KJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKmluY29taW5nOwomIzQzOwomIzQzOwlndWFyZChyd3NlbV93cml0ZSkoJmFtcDtwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7CiYjNDM7CiYjNDM7CWluY29taW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZygpOwomIzQzOwlpZiAoIWluY29taW5nKSB7CiYjNDM7CQlwY2lfd2FybihkZXYsICYjMzQ7Q2Fubm90IGZpbmlzaCBwcmVzZXJ2aW5nIGRldmljZSB3aXRob3V0IGluY29taW5nIEZMQlxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjaV9saXZldXBkYXRlX2ZpbmlzaF9wYXRoKGluY29taW5nLSZndDtzZXIsIGRldik7CiYjNDM7CXBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfZmluaXNoKTsKJiM0MzsKJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlndWFyZChyd3NlbV9yZWFkKSgmYW1wO3BjaV9saXZldXBkYXRlLnJ3c2VtKTsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O2Fjc19jYXAgfHwgIWRldi0mZ3Q7bGl2ZXVwZGF0ZS5pbmNvbWluZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBkZXYtJmd0O2Fjc19jYXAgJiM0MzsgUENJX0FDU19DVFJMLCAmYW1wO2Rldi0mZ3Q7bGl2ZXVwZGF0ZS5hY3NfY3RybCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwl1MTYgYWNzX2N0cmwgPSBkZXYtJmd0O2xpdmV1cGRhdGUuYWNzX2N0cmw7CiYjNDM7CXUxNiBhY3NfY2FwID0gZGV2LSZndDthY3NfY2FwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgbGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkIGluc3RlYWQgb2YgbGl2ZXVwZGF0ZS5pbmNvbWluZyBzaW5jZSB0aGUKJiM0MzsJICogZGV2aWNlJiMzOTtzIEFDUyBjb250cm9scyBzaG91bGQgbm90IGNoYW5nZSBldmVuIGFmdGVyIHRoZSBkZXZpY2UgaXMKJiM0MzsJICogZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiB0aGUgTGl2ZSBVcGRhdGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWRldi0mZ3Q7bGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwcmV2aW91cyBrZXJuZWwgc2hvdWxkIG5vdCBoYXZlIHByZXNlcnZlZCBhbnkgZGV2aWNlcyB0aGF0CiYjNDM7CSAqIHJlcXVpcmUgZGV2aWNlLXNwZWNpZmljIHF1aXJrcyB0byBlbmFibGUgQUNTLCBidXQgaWYgc3VjaCBhIGRldmljZSBpcwomIzQzOwkgKiBkZXRlY3RlZCAoZS5nLiBuZXcgZGV2aWNlLXNwZWNpZmljIEFDUyBxdWlyayBpbiB0aGUgY3VycmVudCBrZXJuZWwpLAomIzQzOwkgKiBsb2cgYSBiaWcgd2FybmluZyBhbmQgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgZW5hYmxlIEFDUyBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHsKJiM0MzsJCXBjaV93YXJuKGRldiwgJiMzNDtEZXZpY2Utc3BlY2lmaWMgcXVpcmsgcmVxdWlyZWQgdG8gZW5hYmxlIEFDUyFcbiYjMzQ7KTsKJiM0MzsJCVdBUk5fT05fT05DRSh0cnVlKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChhY3NfY2FwKQomIzQzOwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgYWNzX2NhcCAmIzQzOyBQQ0lfQUNTX0NUUkwsIGFjc19jdHJsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwl1MTYgdmFsOwomIzQzOwomIzQzOwlndWFyZChyd3NlbV9yZWFkKSgmYW1wO3BjaV9saXZldXBkYXRlLnJ3c2VtKTsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O2xpdmV1cGRhdGUuaW5jb21pbmcpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChkZXYsIFBDSV9FWFBfREVWQ1RMMiwgJmFtcDt2YWwpOwomIzQzOwlkZXYtJmd0O2FyaV9lbmFibGVkID0gISEodmFsICZhbXA7IFBDSV9FWFBfREVWQ1RMMl9BUkkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fcmVhZCkoJmFtcDtwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7CiYjNDM7CXBjaV9XQVJOX09OQ0UoZGV2LCAhZGV2LSZndDtsaXZldXBkYXRlLmZyb3plbiwgJiMzNDtQcmVzZXJ2YXRpb24gc3RhdHVzIGlzIHVuc3RhYmxlIVxuJiMzNDspOwomIzQzOwlyZXR1cm4gZGV2LSZndDtsaXZldXBkYXRlLm91dGdvaW5nOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZygpIC0gQ2hlY2sgaWYgYSBkZXZpY2UgaXMgaW5jb21pbmctcHJlc2VydmVkCiYjNDM7ICogQGRldjogVGhlIFBDSSBkZXZpY2UgdG8gY2hlY2sKJiM0MzsgKgomIzQzOyAqIENoZWNrIGlmIGEgZGV2aWNlIHdhcyBwcmVzZXJ2ZWQgYWNyb3NzIExpdmUgVXBkYXRlIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwsCiYjNDM7ICogaS5lLiB0aGUgZGV2aWNlIGlzIGluY29taW5nLXByZXNlcnZlZC4gTm90ZSB0aGF0IGEgZGV2aWNlIGlzIG9ubHkgY29uc2lkZXJlZAomIzQzOyAqIGluY29taW5nLXByZXNlcnZlZCBwcmlvciB0byBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKS4gSXQgaXMgdXAgdG8gZHJpdmVycyB0bwomIzQzOyAqIHN5bmNocm9uaXplIHVzYWdlIG9mIHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKCkgd2l0aCB0aGVpciBvd24gY2FsbCB0bwomIzQzOyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIHRvIGF2b2lkIGFjdGluZyBvbiBzdGFsZSBkYXRhLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogVHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGluY29taW5nLXByZXNlcnZlZCwgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoc3RydWN0IHBjaV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CWd1YXJkKHJ3c2VtX3JlYWQpKCZhbXA7cGNpX2xpdmV1cGRhdGUucndzZW0pOwomIzQzOwlyZXR1cm4gZGV2LSZndDtsaXZldXBkYXRlLmluY29taW5nOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZyk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKCkgLSBSZWdpc3RlciBhIGZpbGUgaGFuZGxlciB3aXRoIHRoZSBQQ0kgY29yZQomIzQzOyAqIEBmaDogVGhlIGZpbGUgaGFuZGxlciB0byByZWdpc3Rlci4KJiM0MzsgKgomIzQzOyAqIERyaXZlcnMgc2hvdWxkIGNhbGwgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKCkgdG8gcmVnaXN0ZXIgdGhlaXIKJiM0MzsgKiBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgd2l0aCB0aGUgUENJIGNvcmUuIFRoaXMgZW5hYmxlcyB0aGUgUENJIGNvcmUKJiM0MzsgKiB0byBhbGxvY2F0ZSBpdHMgb3V0Z29pbmcgc3RydWN0IHBjaV9zZXIgd2hlbmV2ZXIgdGhlIGZpcnN0IGRldmljZSBpcwomIzQzOyAqIHByZXNlcnZlZCwgYW5kIGZyZWUgaXQgd2hlbiB0aGUgbGFzdCBkZXZpY2UgaXMgdW5wcmVzZXJ2ZWQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpCiYjNDM7ewomIzQzOwlwcl9kZWJ1ZygmIzM0O1JlZ2lzdGVyaW5nIGZpbGUgaGFuZGxlciBcJiMzNDslc1wmIzM0O1xuJiMzNDssIGZoLSZndDtjb21wYXRpYmxlKTsKJiM0MzsJcmV0dXJuIGxpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKGZoLCAmYW1wO3BjaV9saXZldXBkYXRlX2ZsYik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoKSAtIFVucmVnaXN0ZXIgYSBmaWxlIGhhbmRsZXIgd2l0aCB0aGUgUENJIGNvcmUKJiM0MzsgKiBAZmg6IFRoZSBmaWxlIGhhbmRsZXIgdG8gdW5yZWdpc3Rlci4KJiM0MzsgKi8KJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpCiYjNDM7ewomIzQzOwlwcl9kZWJ1ZygmIzM0O1VucmVnaXN0ZXJpbmcgZmlsZSBoYW5kbGVyIFwmIzM0OyVzXCYjMzQ7XG4mIzM0OywgZmgtJmd0O2NvbXBhdGlibGUpOwomIzQzOwlsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKGZoLCAmYW1wO3BjaV9saXZldXBkYXRlX2ZsYik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaCBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYjI2NjQwNmFhYWM4MGQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9saXZldXBkYXRlLmgKQEAgLTAsMCAmIzQzOzEsNjggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qCiYjNDM7ICogUENJIExpdmUgVXBkYXRlIHN1cHBvcnQgKGNvcmUgQVBJKQomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2LCBHb29nbGUgTExDLgomIzQzOyAqIERhdmlkIE1hdGxhY2sgJmx0O2RtYXRsYWNrQGdvb2dsZS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7I2lmbmRlZiBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0gKJiM0MzsjZGVmaW5lIERSSVZFUlNfUENJX0xJVkVVUERBVEVfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFCiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX2ZyZWV6ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKJiM0Mztib29sIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCiYjNDM7CQkJCSAgICAgIGludCBwYXNzKTsKJiM0Mzt2b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcyk7CiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV9pbml0X2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKJiM0MztpbnQgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKJiM0MztpbnQgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKJiM0Mztib29sIHBjaV9saXZldXBkYXRlX2lzX291dGdvaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cywKJiM0MzsJCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmRldiwKJiM0MzsJCQkJCQkgICAgaW50IHBhc3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBhc3MpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfaW5pdF9hY3Moc3RydWN0IHBjaV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVJTlZBTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaV9saXZldXBkYXRlX2lzX291dGdvaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZiAvKiBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCBmMzY3NzhlNjJhYzFhNS4uNDdjYjNkY2FhOTI3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXAtb3BzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW9tbXUuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xpdmV1cGRhdGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3BjaS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cGNpZS9wb3J0ZHJ2LmgmIzM0OwogCkBAIC01MzYsNiAmIzQzOzUzNyw3IEBAIHN0YXRpYyB2b2lkIHBjaV9kZXZpY2Vfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBwY2lfZHJpdmVyICpkcnYgPSBwY2lfZGV2LSZndDtkcml2ZXI7CiAKJiM0MzsJcGNpX2xpdmV1cGRhdGVfZnJlZXplKHBjaV9kZXYpOwogCXBtX3J1bnRpbWVfcmVzdW1lKGRldik7CiAKIAlpZiAoZHJ2ICZhbXA7JmFtcDsgZHJ2LSZndDtzaHV0ZG93bikKQEAgLTU0NCwxMSAmIzQzOzU0NiwxNCBAQCBzdGF0aWMgdm9pZCBwY2lfZGV2aWNlX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKIAkvKgogCSAqIElmIHRoaXMgaXMgYSBrZXhlYyByZWJvb3QsIHR1cm4gb2ZmIEJ1cyBNYXN0ZXIgYml0IG9uIHRoZQogCSAqIGRldmljZSB0byB0ZWxsIGl0IHRvIG5vdCBjb250aW51ZSB0byBkbyBETUEuIERvbiYjMzk7dCB0b3VjaAotCSAqIGRldmljZXMgaW4gRDNjb2xkIG9yIHVua25vd24gc3RhdGVzLgomIzQzOwkgKiBkZXZpY2VzIGJlaW5nIHByZXNlcnZlZCBmb3IgTGl2ZSBVcGRhdGUgb3IgaW4gRDNjb2xkIG9yCiYjNDM7CSAqIHVua25vd24gc3RhdGVzLgomIzQzOwkgKgogCSAqIElmIGl0IGlzIG5vdCBhIGtleGVjIHJlYm9vdCwgZmlybXdhcmUgd2lsbCBoaXQgdGhlIFBDSQogCSAqIGRldmljZXMgd2l0aCBiaWcgaGFtbWVyIGFuZCBzdG9wIHRoZWlyIERNQSBhbnkgd2F5LgogCSAqLwotCWlmIChrZXhlY19pbl9wcm9ncmVzcyAmYW1wOyZhbXA7IChwY2lfZGV2LSZndDtjdXJyZW50X3N0YXRlICZsdDs9IFBDSV9EM2hvdCkpCiYjNDM7CWlmIChrZXhlY19pbl9wcm9ncmVzcyAmYW1wOyZhbXA7ICFwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhwY2lfZGV2KSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwY2lfZGV2LSZndDtjdXJyZW50X3N0YXRlICZsdDs9IFBDSV9EM2hvdCkKIAkJcGNpX2NsZWFyX21hc3RlcihwY2lfZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCA3N2IxN2IxM2VlNjE1NC4uZTBjMTMzYjY2YTM1OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0zNCw2ICYjNDM7MzQsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Flci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3VzcGVuZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7bGl2ZXVwZGF0ZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cGNpLmgmIzM0OwogCiBERUZJTkVfTVVURVgocGNpX3Nsb3RfbXV0ZXgpOwpAQCAtMTAwOCw2ICYjNDM7MTAxMCw5IEBAIHZvaWQgcGNpX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldikKIAlib29sIGVuYWJsZV9hY3MgPSBmYWxzZTsKIAlpbnQgcG9zOwogCiYjNDM7CWlmICghcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qIElmIGFuIGlvbW11IGlzIHByZXNlbnQgd2Ugc3RhcnQgd2l0aCBrZXJuZWwgZGVmYXVsdCBjYXBzICovCiAJaWYgKHBjaV9hY3NfZW5hYmxlKSB7CiAJCWlmIChwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3MoZGV2KSkKQEAgLTM1MjMsNyAmIzQzOzM1MjgsNyBAQCB2b2lkIHBjaV9jb25maWd1cmVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJdTMyIGNhcDsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlOwogCi0JaWYgKHBjaWVfYXJpX2Rpc2FibGVkIHx8ICFwY2lfaXNfcGNpZShkZXYpIHx8IGRldi0mZ3Q7ZGV2Zm4pCiYjNDM7CWlmICghcGNpX2lzX3BjaWUoZGV2KSB8fCBkZXYtJmd0O2RldmZuKQogCQlyZXR1cm47CiAKIAlicmlkZ2UgPSBkZXYtJmd0O2J1cy0mZ3Q7c2VsZjsKQEAgLTM1MzQsNiAmIzQzOzM1MzksMTIgQEAgdm9pZCBwY2lfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogCWlmICghKGNhcCAmYW1wOyBQQ0lfRVhQX0RFVkNBUDJfQVJJKSkKIAkJcmV0dXJuOwogCiYjNDM7CWlmICghcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaShicmlkZ2UpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocGNpZV9hcmlfZGlzYWJsZWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJaWYgKHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfQVJJKSkgewogCQlwY2llX2NhcGFiaWxpdHlfc2V0X3dvcmQoYnJpZGdlLCBQQ0lfRVhQX0RFVkNUTDIsCiAJCQkJCSBQQ0lfRVhQX0RFVkNUTDJfQVJJKTsKQEAgLTM2ODksNiAmIzQzOzM3MDAsNyBAQCB2b2lkIHBjaV9hY3NfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgJiM0MzsgUENJX0FDU19DQVAsICZhbXA7ZGV2LSZndDthY3NfY2FwYWJpbGl0aWVzKTsKIAlwY2lfZGlzYWJsZV9icm9rZW5fYWNzX2NhcChkZXYpOwomIzQzOwlwY2lfbGl2ZXVwZGF0ZV9pbml0X2FjcyhkZXYpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggNDQ2OWUxYTc3ZjNjMTMuLjk4OGExOGIzMjA0YWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMTA0Nyw2ICYjNDM7MTA0Nyw3IEBAIHZvaWQgcGNpX2Fjc19pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBwY2lfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKICNpZmRlZiBDT05GSUdfUENJX1FVSVJLUwogaW50IHBjaV9kZXZfc3BlY2lmaWNfYWNzX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IGFjc19mbGFncyk7CiYjNDM7Ym9vbCBwY2lfbmVlZF9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX2Rldl9zcGVjaWZpY19kaXNhYmxlX2Fjc19yZWRpcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpX2Rpc2FibGVfYnJva2VuX2Fjc19jYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwpAQCAtMTA1Nyw2ICYjNDM7MTA1OCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2lfZGV2X3NwZWNpZmljX2Fjc19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiB7CiAJcmV0dXJuIC1FTk9UVFk7CiB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQogc3RhdGljIGlubGluZSBpbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJcmV0dXJuIC1FTk9UVFk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYwppbmRleCBkZDBhYmJjNjNlMThkMS4uMTY1OTczYmM5MmFhYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcHJvYmUuYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wbV9ydW50aW1lLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtsaXZldXBkYXRlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtwY2kuaCYjMzQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYnVzbl9yZXNvdXJjZSA9IHsKQEAgLTEzOTYsNiAmIzQzOzEzOTcsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkgIGludCBtYXgsIHVuc2lnbmVkIGludCBhdmFpbGFibGVfYnVzZXMsCiAJCQkJICBpbnQgcGFzcykKIHsKJiM0MzsJYm9vbCBsaXZldXBkYXRlLCBhc3NpZ25fbmV3X2J1c2VzID0gcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpOwogCXN0cnVjdCBwY2lfYnVzICpjaGlsZDsKIAl1MzIgYnVzZXM7CiAJdTE2IGJjdGw7CkBAIC0xNDA1LDYgJiM0MzsxNDA3LDEwIEBAIHN0YXRpYyBpbnQgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCXU4IGZpeGVkX3NlYywgZml4ZWRfc3ViOwogCWludCBuZXh0X2J1c25yOwogCiYjNDM7CWxpdmV1cGRhdGUgPSBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbihidXMsIGRldiwgcGFzcyk7CiYjNDM7CWlmIChsaXZldXBkYXRlKQomIzQzOwkJYXNzaWduX25ld19idXNlcyA9IGZhbHNlOwomIzQzOwogCS8qCiAJICogTWFrZSBzdXJlIHRoZSBicmlkZ2UgaXMgcG93ZXJlZCBvbiB0byBiZSBhYmxlIHRvIGFjY2VzcyBjb25maWcKIAkgKiBzcGFjZSBvZiBkZXZpY2VzIGJlbG93IGl0LgpAQCAtMTQ0OCw4ICYjNDM7MTQ1NCw3IEBAIHN0YXRpYyBpbnQgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoKHNlY29uZGFyeSB8fCBzdWJvcmRpbmF0ZSkgJmFtcDsmYW1wOwotCSAgICAhcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpICZhbXA7JmFtcDsgIWJyb2tlbikgewomIzQzOwlpZiAoKHNlY29uZGFyeSB8fCBzdWJvcmRpbmF0ZSkgJmFtcDsmYW1wOyAhYXNzaWduX25ld19idXNlcyAmYW1wOyZhbXA7ICFicm9rZW4pIHsKIAkJdW5zaWduZWQgaW50IGNtYXgsIGJ1c2VzOwogCiAJCS8qCkBAIC0xNDkxLDggJiM0MzsxNDk2LDcgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCSAqIGRvIGluIHRoZSBzZWNvbmQgcGFzcy4KIAkJICovCiAJCWlmICghcGFzcykgewotCQkJaWYgKHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSB8fCBicm9rZW4pCi0KJiM0MzsJCQlpZiAoYXNzaWduX25ld19idXNlcyB8fCBicm9rZW4pCiAJCQkJLyoKIAkJCQkgKiBUZW1wb3JhcmlseSBkaXNhYmxlIGZvcndhcmRpbmcgb2YgdGhlCiAJCQkJICogY29uZmlndXJhdGlvbiBjeWNsZXMgb24gYWxsIGJyaWRnZXMgaW4KQEAgLTE1MDYsNiAmIzQzOzE1MTAsMTEgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQlnb3RvIG91dDsKIAkJfQogCiYjNDM7CQlpZiAobGl2ZXVwZGF0ZSkgewomIzQzOwkJCXBjaV9lcnIoZGV2LCAmIzM0O0Nhbm5vdCByZWNvbmZpZ3VyZSBicmlkZ2UgZHVyaW5nIExpdmUgVXBkYXRlLCBza2lwcGluZ1xuJiMzNDspOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwogCQkvKiBDbGVhciBlcnJvcnMgKi8KIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX1NUQVRVUywgMHhmZmZmKTsKIApAQCAtMTU2Niw2ICYjNDM7MTU3NSw3IEBAIHN0YXRpYyBpbnQgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgYmN0bCk7CiAKIAlwbV9ydW50aW1lX3B1dCgmYW1wO2Rldi0mZ3Q7ZGV2KTsKJiM0MzsJcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kKGRldiwgcGFzcyk7CiAKIAlyZXR1cm4gbWF4OwogfQpAQCAtMjA2NCw2ICYjNDM7MjA3NCw4IEBAIGludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJaWYgKHBjaV9lYXJseV9kdW1wKQogCQllYXJseV9kdW1wX3BjaV9kZXZpY2UoZGV2KTsKIAomIzQzOwlwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2UoZGV2KTsKJiM0MzsKIAkvKiBOZWVkIHRvIGhhdmUgZGV2LSZndDtjbGFzcyByZWFkeSAqLwogCWRldi0mZ3Q7Y2ZnX3NpemUgPSBwY2lfY2ZnX3NwYWNlX3NpemUoZGV2KTsKIApAQCAtMjE4Nyw2ICYjNDM7MjE5OSw3IEBAIGludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJZGVmYXVsdDoJCQkJICAgIC8qIHVua25vd24gaGVhZGVyICovCiAJCXBjaV9lcnIoZGV2LCAmIzM0O3Vua25vd24gaGVhZGVyIHR5cGUgJTAyeCwgaWdub3JpbmcgZGV2aWNlXG4mIzM0OywKIAkJCWRldi0mZ3Q7aGRyX3R5cGUpOwomIzQzOwkJcGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2UoZGV2KTsKIAkJcGNpX3JlbGVhc2Vfb2Zfbm9kZShkZXYpOwogCQlyZXR1cm4gLUVJTzsKIApAQCAtMjQ4NSw2ICYjNDM7MjQ5OCw3IEBAIHN0YXRpYyB2b2lkIHBjaV9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCiAKIAlwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXBjaV9yZWxlYXNlX2NhcGFiaWxpdGllcyhwY2lfZGV2KTsKJiM0MzsJcGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2UocGNpX2Rldik7CiAJcGNpX3JlbGVhc2Vfb2Zfbm9kZShwY2lfZGV2KTsKIAlwY2liaW9zX3JlbGVhc2VfZGV2aWNlKHBjaV9kZXYpOwogCXBjaV9idXNfcHV0KHBjaV9kZXYtJmd0O2J1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGIwOWYyN2Y3ODQ2ZmNkLi45OWI4MTlmMzhlNDljMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTUzNzQsOSAmIzQzOzUzNzQsNiBAQCBzdGF0aWMgdm9pZCBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3JwX21wY19hY3Moc3RydWN0IHBjaV9kZXYgKmRldikKICAqLwogc3RhdGljIGludCBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3BjaF9hY3Moc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlpZiAoIXBjaV9xdWlya19pbnRlbF9wY2hfYWNzX21hdGNoKGRldikpCi0JCXJldHVybiAtRU5PVFRZOwotCiAJaWYgKHBjaV9xdWlya19lbmFibGVfaW50ZWxfbHBjX2FjcyhkZXYpKSB7CiAJCXBjaV93YXJuKGRldiwgJiMzNDtGYWlsZWQgdG8gZW5hYmxlIEludGVsIFBDSCBBQ1MgcXVpcmtcbiYjMzQ7KTsKIAkJcmV0dXJuIDA7CkBAIC01Mzk2LDkgJiM0Mzs1MzkzLDYgQEAgc3RhdGljIGludCBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3NwdF9wY2hfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJaW50IHBvczsKIAl1MzIgY2FwLCBjdHJsOwogCi0JaWYgKCFwY2lfcXVpcmtfaW50ZWxfc3B0X3BjaF9hY3NfbWF0Y2goZGV2KSkKLQkJcmV0dXJuIC1FTk9UVFk7Ci0KIAlwb3MgPSBkZXYtJmd0O2Fjc19jYXA7CiAJaWYgKCFwb3MpCiAJCXJldHVybiAtRU5PVFRZOwpAQCAtNTQyNiw5ICYjNDM7NTQyMCw2IEBAIHN0YXRpYyBpbnQgcGNpX3F1aXJrX2Rpc2FibGVfaW50ZWxfc3B0X3BjaF9hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKmRldikKIAlpbnQgcG9zOwogCXUzMiBjYXAsIGN0cmw7CiAKLQlpZiAoIXBjaV9xdWlya19pbnRlbF9zcHRfcGNoX2Fjc19tYXRjaChkZXYpKQotCQlyZXR1cm4gLUVOT1RUWTsKLQogCXBvcyA9IGRldi0mZ3Q7YWNzX2NhcDsKIAlpZiAoIXBvcykKIAkJcmV0dXJuIC1FTk9UVFk7CkBAIC01NDQ4LDU2ICYjNDM7NTQzOSw2MyBAQCBzdGF0aWMgaW50IHBjaV9xdWlya19kaXNhYmxlX2ludGVsX3NwdF9wY2hfYWNzX3JlZGlyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyB7CiAJdTE2IHZlbmRvcjsKIAl1MTYgZGV2aWNlOwomIzQzOwlib29sICgqbWF0Y2gpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCWludCAoKmVuYWJsZV9hY3MpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCWludCAoKmRpc2FibGVfYWNzX3JlZGlyKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIH0gcGNpX2Rldl9hY3Nfb3BzW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfQU5ZX0lELAomIzQzOwkgICAgLm1hdGNoID0gcGNpX3F1aXJrX2ludGVsX3BjaF9hY3NfbWF0Y2gsCiAJICAgIC5lbmFibGVfYWNzID0gcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9wY2hfYWNzLAogCX0sCiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfQU5ZX0lELAomIzQzOwkgICAgLm1hdGNoID0gcGNpX3F1aXJrX2ludGVsX3NwdF9wY2hfYWNzX21hdGNoLAogCSAgICAuZW5hYmxlX2FjcyA9IHBjaV9xdWlya19lbmFibGVfaW50ZWxfc3B0X3BjaF9hY3MsCiAJICAgIC5kaXNhYmxlX2Fjc19yZWRpciA9IHBjaV9xdWlya19kaXNhYmxlX2ludGVsX3NwdF9wY2hfYWNzX3JlZGlyLAogCX0sCiB9OwogCi1pbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnBjaV9kZXZfYWNzX29wc19nZXQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAljb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwOwotCWludCBpLCByZXQ7CiYjNDM7CWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocGNpX2Rldl9hY3Nfb3BzKTsgaSYjNDM7JiM0MzspIHsKIAkJcCA9ICZhbXA7cGNpX2Rldl9hY3Nfb3BzW2ldOwogCQlpZiAoKHAtJmd0O3ZlbmRvciA9PSBkZXYtJmd0O3ZlbmRvciB8fAogCQkgICAgIHAtJmd0O3ZlbmRvciA9PSAodTE2KVBDSV9BTllfSUQpICZhbXA7JmFtcDsKIAkJICAgIChwLSZndDtkZXZpY2UgPT0gZGV2LSZndDtkZXZpY2UgfHwKLQkJICAgICBwLSZndDtkZXZpY2UgPT0gKHUxNilQQ0lfQU5ZX0lEKSAmYW1wOyZhbXA7Ci0JCSAgICBwLSZndDtlbmFibGVfYWNzKSB7Ci0JCQlyZXQgPSBwLSZndDtlbmFibGVfYWNzKGRldik7Ci0JCQlpZiAocmV0ICZndDs9IDApCi0JCQkJcmV0dXJuIHJldDsKJiM0MzsJCSAgICAgcC0mZ3Q7ZGV2aWNlID09ICh1MTYpUENJX0FOWV9JRCkpIHsKJiM0MzsJCQlpZiAoIXAtJmd0O21hdGNoIHx8IHAtJmd0O21hdGNoKGRldikpCiYjNDM7CQkJCXJldHVybiBwOwogCQl9CiAJfQogCiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0Mztib29sIHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcCAmYW1wOyZhbXA7IHAtJmd0O2VuYWJsZV9hY3M7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnAgPSBwY2lfZGV2X2Fjc19vcHNfZ2V0KGRldik7CiYjNDM7CiYjNDM7CWlmIChwICZhbXA7JmFtcDsgcC0mZ3Q7ZW5hYmxlX2FjcykKJiM0MzsJCXJldHVybiBwLSZndDtlbmFibGVfYWNzKGRldik7CiYjNDM7CiAJcmV0dXJuIC1FTk9UVFk7CiB9CiAKIGludCBwY2lfZGV2X3NwZWNpZmljX2Rpc2FibGVfYWNzX3JlZGlyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcDsKLQlpbnQgaSwgcmV0OwomIzQzOwljb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocGNpX2Rldl9hY3Nfb3BzKTsgaSYjNDM7JiM0MzspIHsKLQkJcCA9ICZhbXA7cGNpX2Rldl9hY3Nfb3BzW2ldOwotCQlpZiAoKHAtJmd0O3ZlbmRvciA9PSBkZXYtJmd0O3ZlbmRvciB8fAotCQkgICAgIHAtJmd0O3ZlbmRvciA9PSAodTE2KVBDSV9BTllfSUQpICZhbXA7JmFtcDsKLQkJICAgIChwLSZndDtkZXZpY2UgPT0gZGV2LSZndDtkZXZpY2UgfHwKLQkJICAgICBwLSZndDtkZXZpY2UgPT0gKHUxNilQQ0lfQU5ZX0lEKSAmYW1wOyZhbXA7Ci0JCSAgICBwLSZndDtkaXNhYmxlX2Fjc19yZWRpcikgewotCQkJcmV0ID0gcC0mZ3Q7ZGlzYWJsZV9hY3NfcmVkaXIoZGV2KTsKLQkJCWlmIChyZXQgJmd0Oz0gMCkKLQkJCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQomIzQzOwlpZiAocCAmYW1wOyZhbXA7IHAtJmd0O2Rpc2FibGVfYWNzX3JlZGlyKQomIzQzOwkJcmV0dXJuIHAtJmd0O2Rpc2FibGVfYWNzX3JlZGlyKGRldik7CiAKIAlyZXR1cm4gLUVOT1RUWTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYWNmMWIzOGRmZjAyNGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmgKQEAgLTAsMCAmIzQzOzEsNTkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2LCBHb29nbGUgTExDLgomIzQzOyAqIERhdmlkIE1hdGxhY2sgJmx0O2RtYXRsYWNrQGdvb2dsZS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfTElOVVhfS0hPX0FCSV9QQ0lfSAomIzQzOyNkZWZpbmUgX0xJTlVYX0tIT19BQklfUENJX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogRE9DOiBQQ0kgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgTGl2ZSBVcGRhdGUgQUJJCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGhlYWRlciBkZWZpbmVzIHRoZSBBQkkgZm9yIHByZXNlcnZpbmcgY29yZSBQQ0kgc3RhdGUgYWNyb3NzIGtleGVjIHVzaW5nCiYjNDM7ICogTGl2ZSBVcGRhdGUgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgZGF0YS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgaW50ZXJmYWNlIGlzIGEgY29udHJhY3QuIEFueSBtb2RpZmljYXRpb24gdG8gYW55IG9mIHRoZSBzZXJpYWxpemF0aW9uCiYjNDM7ICogc3RydWN0cyBkZWZpbmVkIGhlcmUgY29uc3RpdHV0ZXMgYSBicmVha2luZyBjaGFuZ2UuIFN1Y2ggY2hhbmdlcyByZXF1aXJlCiYjNDM7ICogaW5jcmVtZW50aW5nIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgUENJX0xVT19GTEJfQ09NUEFUSUJMRSBzdHJpbmcuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2RlZmluZSBQQ0lfTFVPX0ZMQl9DT01QQVRJQkxFICYjMzQ7cGNpLXYyJiMzNDsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGNpX2Rldl9zZXIgLSBTZXJpYWxpemVkIHN0YXRlIGFib3V0IGEgc2luZ2xlIFBDSSBkZXZpY2UuCiYjNDM7ICoKJiM0MzsgKiBAZG9tYWluOiBUaGUgZGV2aWNlJiMzOTtzIFBDSSBkb21haW4gbnVtYmVyIChzZWdtZW50KS4KJiM0MzsgKiBAYmRmOiBUaGUgZGV2aWNlJiMzOTtzIFBDSSBidXMsIGRldmljZSwgYW5kIGZ1bmN0aW9uIG51bWJlci4KJiM0MzsgKiBAcmVmY291bnQ6IFJlZmVyZW5jZSBjb3VudCB1c2VkIGJ5IHRoZSBQQ0kgY29yZSB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgaXQKJiM0MzsgKiAgICAgICAgICAgIGlzIGRvbmUgdXNpbmcgYSBkZXZpY2UmIzM5O3Mgc3RydWN0IHBjaV9kZXZfc2VyLiBUaGUgdmFsdWUgb2YgdGhlCiYjNDM7ICogICAgICAgICAgICByZWZjb3VudCBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIHByZXNlcnZlZCBkZXZpY2VzIGF0IG9yIGJlbG93CiYjNDM7ICogICAgICAgICAgICBpdCBpbiB0aGUgUENJIGhpZXJhcmNoeSB3aGVuIHRoZSBzdHJ1Y3QgcGNpX2Rldl9zZXIgaXMgaW4gdXNlLCBhbmQKJiM0MzsgKiAgICAgICAgICAgIDAgb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwY2lfZGV2X3NlciB7CiYjNDM7CXUzMiBkb21haW47CiYjNDM7CXUxNiBiZGY7CiYjNDM7CXUxNiByZWZjb3VudDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwY2lfc2VyIC0gUENJIFN1YnN5c3RlbSBMaXZlIFVwZGF0ZSBTdGF0ZQomIzQzOyAqCiYjNDM7ICogVGhpcyBzdHJ1Y3QgdHJhY2tzIHN0YXRlIGFib3V0IGFsbCBkZXZpY2VzIHRoYXQgYXJlIGJlaW5nIHByZXNlcnZlZCBhY3Jvc3MKJiM0MzsgKiBhIExpdmUgVXBkYXRlIGZvciB0aGUgbmV4dCBrZXJuZWwuCiYjNDM7ICoKJiM0MzsgKiBAbnJfZGV2aWNlczogVGhlIG51bWJlciBvZiBkZXZpY2VzIHRoYXQgd2VyZSBwcmVzZXJ2ZWQuCiYjNDM7ICogQGRldmljZXM6IFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IEtITyBibG9jayBjb250YWluaW5nIHBjaV9kZXZfc2VyLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwY2lfc2VyIHsKJiM0MzsJdTMyIG5yX2RldmljZXM7CiYjNDM7CXU2NCBkZXZpY2VzOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9MSU5VWF9LSE9fQUJJX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCBlYmI1YjlkNzYzNjA5ZS4uYjQxZGQ1NzJhMmQ2YjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtNDMsNiAmIzQzOzQzLDcgQEAKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L3BjaS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2lfbGl2ZXVwZGF0ZS5oJmd0OwogCiAjZGVmaW5lIFBDSV9TVEFUVVNfRVJST1JfQklUUyAoUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkgIHwgXAogCQkJICAgICAgIFBDSV9TVEFUVVNfU0lHX1NZU1RFTV9FUlJPUiB8IFwKQEAgLTU5Miw2ICYjNDM7NTkzLDkgQEAgc3RydWN0IHBjaV9kZXYgewogCXU4CQl0cGhfbW9kZTsJLyogVFBIIG1vZGUgKi8KIAl1OAkJdHBoX3JlcV90eXBlOwkvKiBUUEggcmVxdWVzdGVyIHR5cGUgKi8KICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfUENJX0xJVkVVUERBVEUKJiM0MzsJc3RydWN0IHBjaV9saXZldXBkYXRlIGxpdmV1cGRhdGU7CiYjNDM7I2VuZGlmCiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpwY2lfcGh5c2ZuKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9saXZldXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9saXZldXBkYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1MDk5MzQwNTc1NGJhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY2lfbGl2ZXVwZGF0ZS5oCkBAIC0wLDAgJiM0MzsxLDc3IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0IChQdWJsaWMvRHJpdmVyIEFQSSkKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiwgR29vZ2xlIExMQy4KJiM0MzsgKiBEYXZpZCBNYXRsYWNrICZsdDtkbWF0bGFja0Bnb29nbGUuY29tJmd0OwomIzQzOyAqLwomIzQzOyNpZm5kZWYgTElOVVhfUENJX0xJVkVVUERBVEVfSAomIzQzOyNkZWZpbmUgTElOVVhfUENJX0xJVkVVUERBVEVfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9raG8vYWJpL3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXZldXBkYXRlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrX3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBjaV9saXZldXBkYXRlIC0gUENJIExpdmUgVXBkYXRlIHN0YXRlIGZvciBhIHN0cnVjdCBwY2lfZGV2CiYjNDM7ICogQG91dGdvaW5nOiBTdGF0ZSBwcmVzZXJ2ZWQgZm9yIHRoZSBuZXh0IGtlcm5lbC4KJiM0MzsgKiBAaW5jb21pbmc6IFN0YXRlIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXMga2VybmVsLgomIzQzOyAqIEBhY3NfY3RybDogQUNTIGZlYXR1cmVzIGVzdGFibGlzaGVkIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwuCiYjNDM7ICogQGluaGVyaXRfYnVzZXM6IFRydWUgaWYgdGhlIFBDSSBjb3JlIHNob3VsZCBpbmhlcml0IHRoZSBzZWNvbmRhcnkgYW5kCiYjNDM7ICogICAgICAgICAgICAgICAgIHN1Ym9yZGluYXRlIGJ1cyBudW1iZXJzIGFzc2lnbmVkIHRvIHRoaXMgZGV2aWNlIGR1ZSB0bwomIzQzOyAqICAgICAgICAgICAgICAgICBhbiBvbmdvaW5nIExpdmUgVXBkYXRlLgomIzQzOyAqIEB3YXNfcHJlc2VydmVkOiBUcnVlIGlmIHRoaXMgc3RydWN0IHBjaV9kZXYgd2FzIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXMKJiM0MzsgKiAgICAgICAgICAgICAgICAga2VybmVsLiBVbmxpa2UgQGluY29taW5nLCB0aGlzIGZpZWxkIGlzIG5vdCBjbGVhcmVkIGFmdGVyCiYjNDM7ICogICAgICAgICAgICAgICAgIHRoZSBkZXZpY2UgaXMgZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiBMaXZlIFVwZGF0ZS4KJiM0MzsgKiBAZnJvemVuOiBUcnVlIGlmIHRoZSBvdXRnb2luZyBwcmVzZXJ2YXRpb24gc3RhdHVzIG9mIHRoaXMgZGV2aWNlIGlzIGZyb3plbgomIzQzOyAqICAgICAgICAgIGFuZCB0aHVzIGNhbm5vdCBiZSBjaGFuZ2VkLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZSB7CiYjNDM7CXN0cnVjdCBwY2lfZGV2X3NlciAqb3V0Z29pbmc7CiYjNDM7CXN0cnVjdCBwY2lfZGV2X3NlciAqaW5jb21pbmc7CiYjNDM7CXUxNiBhY3NfY3RybDsKJiM0MzsJYm9vbCBpbmhlcml0X2J1c2VzOwomIzQzOwlib29sIHdhc19wcmVzZXJ2ZWQ7CiYjNDM7CWJvb2wgZnJvemVuOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHBjaV9kZXY7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19QQ0lfTElWRVVQREFURQomIzQzO2ludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCk7CiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTsKJiM0MztpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoc3RydWN0IHBjaV9kZXYgKmRldik7CiYjNDM7dm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwomIzQzO3ZvaWQgcGNpX2xpdmV1cGRhdGVfZmluaXNoKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwomIzQzO2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoc3RydWN0IHBjaV9kZXYgKmRldik7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZiAvKiBMSU5VWF9QQ0lfTElWRVVQREFURV9IICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTUyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBDSSBMaXZlIFVwZGF0ZSBJbXBsZW1lbnRhdGlvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGl0JiMzOTtzIGludHJvZHVjaW5nIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0IOKAkyBpbnRlcmVzdGluZy4gU2VlbXMgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBQQ0kgc3Vic3lzdGVtLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIG5ldyBgZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jYCBmaWxlLCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZWAsIGBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlYCwgYHBjaV9saXZldXBkYXRlX2ZpbmlzaGAsIGFuZCBzbyBvbi4gUHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciBwcmVzZXJ2aW5nIGFuZCByZXN0b3JpbmcgZGV2aWNlIHN0YXRlIGR1cmluZyBhIGhvdCB1cGRhdGUuIExvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHBjaS1kcml2ZXIuY2AsIGBwY2kuY2AsIGBwcm9iZS5jYCwgYW5kIGBxdWlya3MuY2AgYXJlIHdoZXJlIHRoZSBpbnRlZ3JhdGlvbiBwb2ludHMgYXJlLiBgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZGAgaXMgZ2V0dGluZyBjYWxscyB0byBiZWdpbiBhbmQgZW5kIHRoZSBzY2FuLCBgcGNpX3NldHVwX2RldmljZWAgaXMgaW50ZWdyYXRpbmcgdGhlIHNldHVwLCBhbmQgYHBjaV9kZXZpY2Vfc2h1dGRvd25gIGlzIGZyZWV6aW5nIHRoZSBkZXZpY2Ugc3RhdGUuCgpOb3csIGEga2V5IHF1ZXN0aW9uIGZvciBtZSBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gUENJIGRldmljZXMgKmFyZSogcHJlc2VudCBpbiB0aGluZ3MgbGlrZSBRRU1VIGFuZCBHQ0UsIHNvIHRoYXQmIzM5O3MgYSBwb3NpdGl2ZSBzdGFydC4gQnV0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgaXMgd2hhdCBJIG5lZWQgdG8gZGlnIGludG8uIFRoZSBgQ09ORklHX1BDSV9MSVZFVVBEQVRFYCBpcyBjb250aW5nZW50IG9uIGBQQ0kgJmFtcDsmYW1wOyBMSVZFVVBEQVRFICZhbXA7JmFtcDsgNjRCSVQgJmFtcDsmYW1wOyAhQ0FSREJVU2AuIFNvLCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgUENJX0xJVkVVUERBVEVgLCB3aGljaCBwcm9iYWJseSBtZWFucyBJJiMzOTtsbCBhbHNvIG5lZWQgdG8gZW5hYmxlIGBMSVZFVVBEQVRFYCBmaXJzdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgY29uZmlnIG5hbWUgZm9yIGBMSVZFVVBEQVRFYCB0byBiZSBzdXJlLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb25maWcgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTElWRVVQREFURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnPTM4PWNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNTEtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjUyOmNvbmZpZyBMSVZFVVBEQVRFXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtMaXZlIFVwZGF0ZSBPcmNoZXN0cmF0b3JcJiMzNDtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTcyLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo3Mzpjb25maWcgTElWRVVQREFURV9NRU1GRFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7TGl2ZSB1cGRhdGUgc3VwcG9ydCBmb3IgbWVtZmRcJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0yOTAxPWNvbmZpZyBDT05URVhUX0FOQUxZU0lTX1RFU1Rcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0yOTE0LVxubGliL0tjb25maWcuZGVidWc6MjkxNTpjb25maWcgTElWRVVQREFURV9URVNUXG5saWIvS2NvbmZpZy5kZWJ1Zy0yOTE2LVx0Ym9vbCBcJiMzNDtMaXZlIFVwZGF0ZSBLZXJuZWwgVGVzdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDk2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUENJIExpdmUgVXBkYXRlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBMSVZFVVBEQVRFYCBjb25maWcsIGFuZCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgUENJX0xJVkVVUERBVEVgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzPyBJIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHBvdGVudGlhbCB0YXJnZXRzLiBUaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zOiBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVgLCBgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZWAsIGBwY2lfbGl2ZXVwZGF0ZV9maW5pc2hgLCBgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmdgLCBgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiYCwgYW5kIGBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYmAuIEJ1dCB3YWl0LCB0aG9zZSBhcmUgZXhwb3J0ZWQgZm9yICpkcml2ZXJzKiB0byB1c2UuIEhtbW0sIGFyZSBhbnkgZHJpdmVycyBhY3R1YWxseSB1c2luZyB0aGVtIGluICp0aGlzKiBwYXRjaD8gTm8sIGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdC4KCkFscmlnaHQsIHdoYXQgYWJvdXQgdGhlIGludGVybmFsIFBDSSBjb3JlIGZ1bmN0aW9ucz8gQWhhISBgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlYCwgYHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlYCwgYHBjaV9saXZldXBkYXRlX2ZyZWV6ZWAsIGBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbmAsIGBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmRgLCBgcGNpX2xpdmV1cGRhdGVfaW5pdF9hY3NgLCBgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2Fjc2AsIGFuZCBgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaWAgYXJlIGFsbCBjYWxsZWQgZnJvbSB0aGUgUENJIGNvcmUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiB0cmFjZSB0aGVpciBjYWxsIGNoYWlucy4KCmBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2VgIGlzIGNhbGxlZCBmcm9tIGBwY2lfc2V0dXBfZGV2aWNlYC4gR29vZC4gVGhlbiBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW5gIGlzIGNhbGxlZCBmcm9tIGBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kYC4gYHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlYCBpcyBjYWxsZWQgZnJvbSBgcGNpX3JlbGVhc2VfZGV2YC4gYHBjaV9saXZldXBkYXRlX2ZyZWV6ZWAgaXMgY2FsbGVkIGZyb20gYHBjaV9kZXZpY2Vfc2h1dGRvd25gLiBgcGNpX2xpdmV1cGRhdGVfaW5pdF9hY3NgIGlzIGNhbGxlZCBmcm9tIGBwY2lfYWNzX2luaXRgLiBBbmQgYHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3NgIGlzIGNhbGxlZCBmcm9tIGBwY2lfZW5hYmxlX2Fjc2AuIEZpbmFsbHksIGBwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpYCBpcyBjYWxsZWQgZnJvbSBgcGNpX2NvbmZpZ3VyZV9hcmlgLgoKU28sIGl0JiMzOTtzIHRob3NlIGNvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIHRoZSByZWFsIHRhcmdldHMuIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gYHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZWAsIGFuZCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBpdHMgaW1wbGVtZW50YXRpb24gaW4gYGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY2AuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jPTY2Mz12b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcylcbi0tXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmMtNjcyLVxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jOjY3Mzp2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jLTY3NC17XG4tLVxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jPTczNj1zdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX2ZpbmlzaF9kZXZpY2Uoc3RydWN0IHBjaV9zZXIgKnNlciwgc3RydWN0IHBjaV9kZXYgKmRldilcbi0tXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmMtNzQ5LVx0ICogRGVjcmVtZW50IHRoZSByZWZjb3VudCBzbyB0aGlzIGRldmljZSBkb2VzIG5vdCBnZXQgdHJlYXRlZCBhcyBhblxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jOjc1MDpcdCAqIGluY29taW5nIGRldmljZSBhZ2FpbiwgZS5nLiBpbiBjYXNlIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZSgpXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmMtNzUxLVx0ICogZ2V0cyBjYWxsZWQgYWdhaW4gYmVjYXVzZSB0aGUgZGV2aWNlIGlzIGhvdC1wbHVnZ2VkLlxuLS1cbmRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaC0xMy0jaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmg6MTQ6dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7XG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmgtMTUtdm9pZCBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbi0tXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmg9MjM9Ym9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbmRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaC0yNC0jZWxzZVxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oOjI1OnN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcbmRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaC0yNi17XG4tLVxuZHJpdmVycy9wY2kvcHJvYmUuYz0yMDI2PWludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9wY2kvcHJvYmUuYy0yMDc2LVxuZHJpdmVycy9wY2kvcHJvYmUuYzoyMDc3Olx0cGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKGRldik7XG5kcml2ZXJzL3BjaS9wcm9iZS5jLTIwNzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTg6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUENJIExpdmUgVXBkYXRlIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBzb21lIGZyZXNoIGZ1bmN0aW9uYWxpdHkgZm9yIFBDSSBsaXZlIHVwZGF0ZSwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNvcmUgUENJIGVudW1lcmF0aW9uIGFuZCBzaHV0ZG93biBwYXRocywgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgc3R1ZmYgaGVyZS4gVGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgZ2V0IGEgZnV6emluZyBjYW1wYWlnbiBzZXQgdXAgZm9yIHRoaXMuCgpGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHBhdGNoIG1lbnRpb25zIGBQQ0lfTElWRVVQREFURWAgYW5kIGBMSVZFVVBEQVRFYCBhcyB0aGUga2V5IGVuYWJsZXJzLiBDaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzLCBgUENJX0xJVkVVUERBVEVgIHJlbGllcyBvbiBgUENJICZhbXA7JmFtcDsgTElWRVVQREFURSAmYW1wOyZhbXA7IDY0QklUICZhbXA7JmFtcDsgIUNBUkRCVVNgLCBzbyB3ZSBkZWZpbml0ZWx5IG5lZWQgdG8gZW5zdXJlIHRob3NlIGFyZSBzZXQuIFNvLCBgUENJX0xJVkVVUERBVEVgIGFuZCBgTElWRVVQREFURWAgYXJlIHRoZSBjb25maWdzIHRvIGVuYWJsZS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBCYXNlZCBvbiB0aGUgcGF0Y2gsIHRoZSBtb3N0IHByb21pc2luZyBlbnRyeSBwb2ludHMgc2VlbSB0byBiZTogYHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZWAsIGBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZWAsIGBwY2lfbGl2ZXVwZGF0ZV9mcmVlemVgLCBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW5gLCBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kYCwgYHBjaV9saXZldXBkYXRlX2luaXRfYWNzYCwgYHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3NgLCBgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaWAsIGBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZWAsIGBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlYCwgYHBjaV9saXZldXBkYXRlX2ZpbmlzaGAsIGBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGJgLCBhbmQgYHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiYC4gVGhlc2Ugc2hvdWxkIGJlIHRoZSBvbmVzIHdlIHByaW9yaXRpemUuCgpOZXh0LCBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgcmVhY2hhYmlsaXR5LiBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIGFjY2Vzc2libGUgdG8gZHJpdmVycywgYnV0IGlmIG5vIGRyaXZlcnMgKmNhbGwqIGl0LCB3ZSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQmIzM5O3MgcmVhY2hhYmxlIGF0IGFsbCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSBjYWxsIGFyYml0cmFyeSBleHBvcnRlZCBmdW5jdGlvbnMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3lzY2FsbCBpbnRlcmZhY2UuIEhvd2V2ZXIsIHRoZSBnb29kIG5ld3MgaXMgdGhhdCBzeW1ib2xzIGxpa2UgYHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZWAgYW5kIG90aGVycyBhcmUgY2FsbGVkIGZyb20gdGhlIFBDSSBjb3JlIGl0c2VsZi4gQW5kLCBzaW5jZSB0aGUgUENJIGNvcmUgaXMgaW52b2x2ZWQgZHVyaW5nIGJvdGggYm9vdCBhbmQgaG90cGx1ZyBldmVudHMsIHdlIGtub3cgdGhvc2UgY29yZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUsIHdoaWNoIGlzIGEgYmlnIHdpbi4KClNvLCB0byBzdW1tYXJpemUgZm9yIHRoZSBmdXp6aW5nIHNldHVwLCB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGVzZSBjb25maWdzOgoKKiAgIGBMSVZFVVBEQVRFYAoqICAgYFBDSV9MSVZFVVBEQVRFYAoKQW5kIHRoZSBrZXkgZm9jdXMgc3ltYm9scyBhcmU6CgoqICAgYHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZWAKKiAgIGBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZWAKKiAgIGBwY2lfbGl2ZXVwZGF0ZV9mcmVlemVgCiogICBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW5gCiogICBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kYAoqICAgYHBjaV9saXZldXBkYXRlX2luaXRfYWNzYAoqICAgYHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3NgCiogICBgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaWAKKiAgIGBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZWAKKiAgIGBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlYAoqICAgYHBjaV9saXZldXBkYXRlX2ZpbmlzaGAKKiAgIGBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGJgCiogICBgcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGJgCgpBbmQganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgdGhlcmUgYXJlICpubyogb3RoZXIgcmVsZXZhbnQgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUENJX0xJVkVVUERBVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvS2NvbmZpZz0yNjY9Y29uZmlnIFZHQV9BUkJfTUFYX0dQVVNcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTI3My1cbmRyaXZlcnMvcGNpL0tjb25maWc6Mjc0OmNvbmZpZyBQQ0lfTElWRVVQREFURVxuZHJpdmVycy9wY2kvS2NvbmZpZy0yNzUtXHRib29sIFwmIzM0O1BDSSBMaXZlIFVwZGF0ZSBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTg6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MDYKCQkJCQkJCW91dHB1dDogMjcxCgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgcHJvY2Vzcywgd2l0aCBhIGZvY3VzIG9uIFBDSSBMaXZlIFVwZGF0ZToKCioqUENJIExpdmUgVXBkYXRlIEZ1enppbmcgU3RyYXRlZ3kqKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoaXMgYFBDSV9MSVZFVVBEQVRFYCB0aGluZy4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbGl0eSBzcGVjaWZpY2FsbHkgYXJvdW5kIFBDSSBMaXZlIFVwZGF0ZSwgYW5kIHRoYXQgbWVhbnMgaXTigJlzIGFsdGVyaW5nIHRoZSBjb3JlIHJvdXRpbmVzIGludm9sdmVkIGluIFBDSSBlbnVtZXJhdGlvbiwgaG93IGRldmljZXMgc2h1dCBkb3duLCBhbmQgaG93IHdlIGNvbmZpZ3VyZSBQQ0kgY2FwYWJpbGl0aWVzLCBwYXJ0aWN1bGFybHkgdGhpbmdzIGxpa2UgQUNTIGFuZCBBUkkuIFRoZXNlIGFyZW4mIzM5O3QganVzdCB0aGVvcmV0aWNhbCBjaGFuZ2VzOyB0aGV5JiMzOTtyZSAqcmVhY2hhYmxlKi4gVGhleSYjMzk7cmUgZ29pbmcgdG8gYmUgaGl0IGR1cmluZyBkZXZpY2UgcHJvYmluZywgd2hlbiBhIGRldmljZSBpcyByZW1vdmVkLCBhbmQgZHVyaW5nIHN5c3RlbSBzaHV0ZG93biBvciBrZXhlYy4KClRoZSBjcml0aWNhbCBmb2N1cyBmb3IgZnV6emluZywgdGhlcmVmb3JlLCBoYXMgdG8gYmUgdGhlIG5ldyBgcGNpX2xpdmV1cGRhdGVfKmAgZnVuY3Rpb25zLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBuZXcgZnVuY3Rpb25zLCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBleGlzdGluZyBjb2RlLCBjYW4gaGFuZGxlIGEgd2lkZSB2YXJpZXR5IG9mIFBDSSB0b3BvbG9naWVzIGFuZCBkZXZpY2Ugc3RhdGVzIGZsYXdsZXNzbHkuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgY29tcHJlaGVuc2l2ZSBhcHByb2FjaC4gV2UgbmVlZCB0byBleHBsb3JlIGFsbCB0aGUgcG90ZW50aWFsIGVkZ2UgY2FzZXM6IHdoYXQgaGFwcGVucyB3aGVuIHRoaW5ncyBhcmVuJiMzOTt0IGFzIGV4cGVjdGVkLCB3aGF0IGhhcHBlbnMgd2l0aCBob3QtcGx1ZywgY29sZC1wbHVnLCBhbmQgZXZlcnl0aGluZyBpbiBiZXR3ZWVuPyBBbmQgaG93IGRvIHdlIGFjY291bnQgZm9yIHRoZSBwb3NzaWJpbGl0eSBvZiBhIGRldmljZSBnb2luZyBpbnRvIGEgd2VpcmQgc3RhdGUgYWZ0ZXIgYW4gdXBkYXRlPwoKT2theSwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGVuc3VyZSB0aGF0IHRoZSBmdXp6aW5nIHN0cmF0ZWd5IGlzIHByb3Blcmx5IGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TElWRVVQREFURSYjMzQ7LAogICAgJiMzNDtQQ0lfTElWRVVQREFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3NldHVwX2RldmljZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9mcmVlemUmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4mIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2luaXRfYWNzJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2VuYWJsZV9hY3MmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2ZpbmlzaCYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGImIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCwgd2hpY2ggbW9kaWZpZXMgY29yZSBQQ0kgZW51bWVyYXRpb24sIHNodXRkb3duLCBhbmQgY2FwYWJpbGl0eSBjb25maWd1cmF0aW9uIHBhdGhzIChlLmcuLCBBQ1MsIEFSSSkuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgUENJIGRldmljZSBwcm9iZSwgcmVtb3ZhbCwgYW5kIHN5c3RlbSBzaHV0ZG93bi9rZXhlYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBwY2lfbGl2ZXVwZGF0ZV8qIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBQQ0kgdG9wb2xvZ2llcyBhbmQgc3RhdGVzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TElWRVVQREFURSYjMzQ7LAogICAgJiMzNDtQQ0lfTElWRVVQREFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX3NldHVwX2RldmljZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9mcmVlemUmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4mIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2luaXRfYWNzJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2VuYWJsZV9hY3MmIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlJiMzNDssCiAgICAmIzM0O3BjaV9saXZldXBkYXRlX2ZpbmlzaCYjMzQ7LAogICAgJiMzNDtwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGImIzM0OywKICAgICYjMzQ7cGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCwgd2hpY2ggbW9kaWZpZXMgY29yZSBQQ0kgZW51bWVyYXRpb24sIHNodXRkb3duLCBhbmQgY2FwYWJpbGl0eSBjb25maWd1cmF0aW9uIHBhdGhzIChlLmcuLCBBQ1MsIEFSSSkuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgUENJIGRldmljZSBwcm9iZSwgcmVtb3ZhbCwgYW5kIHN5c3RlbSBzaHV0ZG93bi9rZXhlYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBwY2lfbGl2ZXVwZGF0ZV8qIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBQQ0kgdG9wb2xvZ2llcyBhbmQgc3RhdGVzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE4OjI2OjQwLjAyNjAxMTc1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDkzNTUwNDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxJVkVVUERBVEVcIixcbiAgICBcIlBDSV9MSVZFVVBEQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfZnJlZXplXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpblwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9pbml0X2Fjc1wiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfZW5hYmxlX2Fjc1wiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfcHJlc2VydmVcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3VucHJlc2VydmVcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2ZpbmlzaFwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgUENJIExpdmUgVXBkYXRlIHN1cHBvcnQsIHdoaWNoIG1vZGlmaWVzIGNvcmUgUENJIGVudW1lcmF0aW9uLCBzaHV0ZG93biwgYW5kIGNhcGFiaWxpdHkgY29uZmlndXJhdGlvbiBwYXRocyAoZS5nLiwgQUNTLCBBUkkpLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZHVyaW5nIFBDSSBkZXZpY2UgcHJvYmUsIHJlbW92YWwsIGFuZCBzeXN0ZW0gc2h1dGRvd24va2V4ZWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXcgcGNpX2xpdmV1cGRhdGVfKiBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoZXkgaGFuZGxlIHZhcmlvdXMgUENJIHRvcG9sb2dpZXMgYW5kIHN0YXRlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE4OjI2OjQwLjAyNjAxNzk5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0NDA1OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDZiMzBhYjI3OWZiMGVmMDU3ODdkNTZlMzNlNTc0MzZhYjZjODhlNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAxODoyNjozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3RcXG5pbmRleCA1ZDcyMGQyYTQxNWUwMS4uMjNmYjczN2FjOTY5ZWEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9QQ0kvaW5kZXgucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvaW5kZXgucnN0XFxuQEAgLTIwLDMgKzIwLDQgQEAgUENJIEJ1cyBTdWJzeXN0ZW1cXG4gICAgY29udHJvbGxlci9pbmRleFxcbiAgICBib290LWludGVycnVwdHNcXG4gICAgdHBoXFxuKyAgIGxpdmV1cGRhdGVcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvbGl2ZXVwZGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmViYTU1ZjhhOTJhZTEyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vUENJL2xpdmV1cGRhdGUucnN0XFxuQEAgLTAsMCArMSwyOSBAQFxcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbitcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1BDSSBTdXBwb3J0IGZvciBMaXZlIFVwZGF0ZVxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcXG4rICAgOmRvYzogUENJIExpdmUgVXBkYXRlXFxuK1xcbitEcml2ZXIgQVBJXFxuKz09PT09PT09PT1cXG4rXFxuKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcXG4rICAgOmV4cG9ydDpcXG4rXFxuK0xpdmUgVXBkYXRlIEFCSVxcbis9PT09PT09PT09PT09PT1cXG4rXFxuKy4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmhcXG4rICAgOmRvYzogUENJIEZpbGUtTGlmZWN5Y2xlIEJvdW5kIChGTEIpIExpdmUgVXBkYXRlIEFCSVxcbitcXG4rLi4ga2VybmVsLWRvYzo6IGluY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxcbisgICA6aW50ZXJuYWw6XFxuK1xcbitTZWUgQWxzb1xcbis9PT09PT09PVxcbitcXG4rICogOmRvYzpgL2NvcmUtYXBpL2xpdmV1cGRhdGVgXFxuKyAqIDpkb2M6YC9jb3JlLWFwaS9raG8vaW5kZXhgXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG5pbmRleCA0ZjY1YjJhMzc1MjEwMi4uZWQ5ZWVmOGRlNjRjZDMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbkBAIC01MTA1LDcgKzUxMDUsMTEgQEAgS2VybmVsIHBhcmFtZXRlcnNcXG4gXFx0XFx0XFx0XFx0ZXhwbGljaXRseSB3aGljaCBvbmVzIHRoZXkgYXJlLlxcbiBcXHRcXHRhc3NpZ24tYnVzc2VzXFx0W1g4Nl0gQWx3YXlzIGFzc2lnbiBhbGwgUENJIGJ1c1xcbiBcXHRcXHRcXHRcXHRudW1iZXJzIG91cnNlbHZlcywgb3ZlcnJpZGluZ1xcbi1cXHRcXHRcXHRcXHR3aGF0ZXZlciB0aGUgZmlybXdhcmUgbWF5IGhhdmUgZG9uZS5cXG4rXFx0XFx0XFx0XFx0d2hhdGV2ZXIgdGhlIGZpcm13YXJlIG1heSBoYXZlIGRvbmUuIElnbm9yZWRcXG4rXFx0XFx0XFx0XFx0ZHVyaW5nIGEgTGl2ZSBVcGRhdGUsIHdoZXJlIHRoZSBrZXJuZWwgbXVzdFxcbitcXHRcXHRcXHRcXHRpbmhlcml0IHRoZSBQQ0kgdG9wb2xvZ3kgKGluY2x1ZGluZyBidXMgbnVtYmVycylcXG4rXFx0XFx0XFx0XFx0dG8gYXZvaWQgaW50ZXJydXB0aW5nIG9uZ29pbmcgbWVtb3J5XFxuK1xcdFxcdFxcdFxcdHRyYW5zYWN0aW9ucyBvZiBwcmVzZXJ2ZWQgZGV2aWNlcy5cXG4gXFx0XFx0dXNlcGlycW1hc2tcXHRbWDg2XSBIb25vciB0aGUgcG9zc2libGUgSVJRIG1hc2sgc3RvcmVkXFxuIFxcdFxcdFxcdFxcdGluIHRoZSBCSU9TICRQSVIgdGFibGUuIFRoaXMgaXMgbmVlZGVkIG9uXFxuIFxcdFxcdFxcdFxcdHNvbWUgc3lzdGVtcyB3aXRoIGJyb2tlbiBCSU9TZXMsIG5vdGFibHlcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXZldXBkYXRlLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbGl2ZXVwZGF0ZS5yc3RcXG5pbmRleCA1YTI5MmQwZjM3MDY0ZC4uMmJjZTI2NDRlYmEyMjMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXZldXBkYXRlLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbGl2ZXVwZGF0ZS5yc3RcXG5AQCAtMSw1ICsxLDcgQEBcXG4gLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gXFxuKy4uIF9sdW86XFxuK1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT1cXG4gTGl2ZSBVcGRhdGUgT3JjaGVzdHJhdG9yXFxuID09PT09PT09PT09PT09PT09PT09PT09PVxcbkBAIC0xOCw2ICsyMCw4IEBAIExVTyBQcmVzZXJ2aW5nIEZpbGUgRGVzY3JpcHRvcnNcXG4gLi4ga2VybmVsLWRvYzo6IGtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmNcXG4gICAgOmRvYzogTFVPIEZpbGUgRGVzY3JpcHRvcnNcXG4gXFxuKy4uIF9mbGI6XFxuK1xcbiBMVU8gRmlsZSBMaWZlY3ljbGUgQm91bmQgR2xvYmFsIERhdGFcXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIC4uIGtlcm5lbC1kb2M6OiBrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmNcXG5AQCAtNzAsMyArNzQsNCBAQCBTZWUgQWxzb1xcbiBcXG4gLSA6ZG9jOmBMaXZlIFVwZGF0ZSB1QVBJIFxcdTAwM2MvdXNlcnNwYWNlLWFwaS9saXZldXBkYXRlXFx1MDAzZWBcXG4gLSA6ZG9jOmAvY29yZS1hcGkva2hvL2luZGV4YFxcbistIDpkb2M6YFBDSSBcXHUwMDNjL1BDSS9saXZldXBkYXRlXFx1MDAzZWBcXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IGEzZWQzMzdlODI3ZDg2Li4zNDdjNDM1Y2E0MDQ3YyAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTIwODI0LDYgKzIwODI0LDIxIEBAIEw6XFx0bGludXgtcGNpQHZnZXIua2VybmVsLm9yZ1xcbiBTOlxcdFN1cHBvcnRlZFxcbiBGOlxcdERvY3VtZW50YXRpb24vUENJL3BjaS1lcnJvci1yZWNvdmVyeS5yc3RcXG4gXFxuK1BDSSBMSVZFIFVQREFURVxcbitNOlxcdERhdmlkIE1hdGxhY2sgXFx1MDAzY2RtYXRsYWNrQGdvb2dsZS5jb21cXHUwMDNlXFxuK1I6XFx0UGFzaGEgVGF0YXNoaW4gXFx1MDAzY3Bhc2hhLnRhdGFzaGluQHNvbGVlbi5jb21cXHUwMDNlXFxuK1I6XFx0TWlrZSBSYXBvcG9ydCBcXHUwMDNjcnBwdEBrZXJuZWwub3JnXFx1MDAzZVxcbitSOlxcdFByYXR5dXNoIFlhZGF2IFxcdTAwM2NwcmF0eXVzaEBrZXJuZWwub3JnXFx1MDAzZVxcbitMOlxcdGtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmdcXG4rTDpcXHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXFxuK1M6XFx0TWFpbnRhaW5lZFxcbitUOlxcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGl2ZXVwZGF0ZS9saW51eC5naXRcXG4rRjpcXHREb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdFxcbitGOlxcdGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY1xcbitGOlxcdGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaFxcbitGOlxcdGluY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxcbitGOlxcdGluY2x1ZGUvbGludXgvcGNpX2xpdmV1cGRhdGUuaFxcbitcXG4gUENJIE1TSSBEUklWRVIgRk9SIEFMVEVSQSBNU0kgSVBcXG4gTDpcXHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXFxuIFM6XFx0T3JwaGFuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnXFxuaW5kZXggMGM3NDA4NTA5YmEyNGIuLjE2ZmJkNDIxMmUwZjU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnXFxuQEAgLTI3MSw2ICsyNzEsMjEgQEAgY29uZmlnIFZHQV9BUkJfTUFYX0dQVVNcXG4gXFx0ICBSZXNlcnZlcyBzcGFjZSBpbiB0aGUga2VybmVsIHRvIG1haW50YWluIHJlc291cmNlIGxvY2tpbmcgZm9yXFxuIFxcdCAgbXVsdGlwbGUgR1BVUy4gIFRoZSBvdmVyaGVhZCBmb3IgZWFjaCBHUFUgaXMgdmVyeSBzbWFsbC5cXG4gXFxuK2NvbmZpZyBQQ0lfTElWRVVQREFURVxcbitcXHRib29sIFxcXCJQQ0kgTGl2ZSBVcGRhdGUgU3VwcG9ydFxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgTElWRVVQREFURSBcXHUwMDI2XFx1MDAyNiA2NEJJVCBcXHUwMDI2XFx1MDAyNiAhQ0FSREJVU1xcbitcXHRoZWxwXFxuK1xcdCAgRW5hYmxlIFBDSSBjb3JlIHN1cHBvcnQgZm9yIHByZXNlcnZpbmcgUENJIGRldmljZXMgYWNyb3NzIExpdmVcXG4rXFx0ICBVcGRhdGUuIFRoaXMsIGluIGNvbWJpbmF0aW9uIHdpdGggc3VwcG9ydCBpbiBhIGRldmljZSdzIGRyaXZlcixcXG4rXFx0ICBlbmFibGVzIFBDSSBkZXZpY2VzIHRvIHJ1biBhbmQgcGVyZm9ybSBtZW1vcnkgdHJhbnNhY3Rpb25zXFxuK1xcdCAgdW5pbnRlcnJ1cHRlZCBkdXJpbmcgYSBrZXhlYyBmb3IgTGl2ZSBVcGRhdGUuXFxuK1xcbitcXHQgIFRoaXMgb3B0aW9uIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgYnkgdXNlcnMgd2hvIHBsYW4gdG8gdXNlIExpdmVcXG4rXFx0ICBVcGRhdGUgZm9yIGtlcm5lbCB1cGdyYWRlcyBhbmQgcmVxdWlyZSBwcmVzZXJ2aW5nIFBDSSBkZXZpY2VzIGR1cmluZ1xcbitcXHQgIHRob3NlIHVwZ3JhZGVzLlxcbitcXG4rXFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbitcXG4gc291cmNlIFxcXCJkcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImRyaXZlcnMvcGNpL2VuZHBvaW50L0tjb25maWdcXFwiXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGVcXG5pbmRleCA0MWViYzNiOWE1MTgyNC4uZThkMDAzY2I2NzU3NjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZVxcbkBAIC0xNiw2ICsxNiw3IEBAIG9iai0kKENPTkZJR19QUk9DX0ZTKVxcdFxcdCs9IHByb2Mub1xcbiBvYmotJChDT05GSUdfU1lTRlMpXFx0XFx0Kz0gcGNpLXN5c2ZzLm8gc2xvdC5vXFxuIG9iai0kKENPTkZJR19BQ1BJKVxcdFxcdCs9IHBjaS1hY3BpLm9cXG4gb2JqLSQoQ09ORklHX0dFTkVSSUNfUENJX0lPTUFQKSArPSBpb21hcC5vXFxuK29iai0kKENPTkZJR19QQ0lfTElWRVVQREFURSlcXHQrPSBsaXZldXBkYXRlLm9cXG4gZW5kaWZcXG4gXFxuIG9iai0kKENPTkZJR19PRilcXHRcXHQrPSBvZi5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuYyBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU5MzVlODhkZTA3M2RjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY1xcbkBAIC0wLDAgKzEsOTEwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIEdvb2dsZSBMTEMuXFxuKyAqIERhdmlkIE1hdGxhY2sgXFx1MDAzY2RtYXRsYWNrQGdvb2dsZS5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rLyoqXFxuKyAqIERPQzogUENJIExpdmUgVXBkYXRlXFxuKyAqXFxuKyAqIFRoZSBQQ0kgc3Vic3lzdGVtIHBhcnRpY2lwYXRlcyBpbiB0aGUgTGl2ZSBVcGRhdGUgcHJvY2VzcyB0byBlbmFibGUgZHJpdmVyc1xcbisgKiB0byBwcmVzZXJ2ZSB0aGVpciBQQ0kgZGV2aWNlcyBhY3Jvc3Mga2V4ZWMuXFxuKyAqXFxuKyAqIDpyZWY6YEZMQiBcXHUwMDNjZmxiXFx1MDAzZWAgRGF0YVxcbisgKiA9PT09PT09PT09PT09PT09PT09PT1cXG4rICpcXG4rICogUENJIGRldmljZSBwcmVzZXJ2YXRpb24gYWNyb3NzIExpdmUgVXBkYXRlIGlzIGJ1aWx0IG9uIHRvcCBvZiB0aGVcXG4rICogOnJlZjpgTFVPIFxcdTAwM2NsdW9cXHUwMDNlYCBzdXBwb3J0IGZvciBmaWxlIHByZXNlcnZhdGlvbiBhY3Jvc3Mga2V4ZWMuIERyaXZlcnMgYXJlXFxuKyAqIGV4cGVjdGVkIHRvIGV4cG9zZSBhIGZpbGUgdG8gcmVwcmVzZW50IGEgc2luZ2xlIFBDSSBkZXZpY2UgYW5kIHN1cHBvcnRcXG4rICogcHJlc2VydmF0aW9uIG9mIHRoYXQgZmlsZSB3aXRoIGBgaW9jdGwoTElWRVVQREFURV9TRVNTSU9OX1BSRVNFUlZFX0ZEKWBgLlxcbisgKiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gY29udHJvbCB0aGUgcHJlc2VydmF0aW9uIG9mIGRldmljZXMgYW5kIGVuc3VyZVxcbisgKiBwcm9wZXIgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgd2hpbGUgYSBkZXZpY2UgaXMgcHJlc2VydmVkLiBUaGUgZmlyc3QgaW50ZW5kZWRcXG4rICogdXNlLWNhc2UgaXMgcHJlc2VydmluZyB2ZmlvLXBjaSBkZXZpY2UgZmlsZXMuXFxuKyAqXFxuKyAqIFRoZSBQQ0kgY29yZSBtYWludGFpbnMgaXRzIG93biBzdGF0ZSBhYm91dCB3aGF0IGRldmljZXMgYXJlIGJlaW5nIHByZXNlcnZlZFxcbisgKiBhY3Jvc3MgTGl2ZSBVcGRhdGUgdXNpbmcgRkxCIGRhdGEgaW4gTFVPLiBFc3NlbnRpYWxseSwgdGhpcyBhbGxvd3MgdGhlIFBDSVxcbisgKiBjb3JlIHRvIGFsbG9jYXRlIHN0cnVjdCBwY2lfc2VyIHdoZW4gdGhlIGZpcnN0IGRldmljZSAoZmlsZSkgaXMgcHJlc2VydmVkXFxuKyAqIGFuZCBmcmVlIGl0IHdoZW4gdGhlIGxhc3QgZGV2aWNlIChmaWxlKSBpcyB1bnByZXNlcnZlZC4gQWZ0ZXIga2V4ZWMsIHRoZVxcbisgKiBQQ0kgY29yZSBjYW4gZmV0Y2ggdGhlIHN0cnVjdCBwY2lfc2VyICh3aGljaCB3YXMgY29uc3RydWN0ZWQgYnkgdGhlIHByZXZpb3VzXFxuKyAqIGtlcm5lbCkgZnJvbSBMVU8gYXQgYW55IHRpbWUgKGUuZy4gZHVyaW5nIGVudW1lcmF0aW9uKSBzbyB0aGF0IGl0IGtub3dzXFxuKyAqIHdoaWNoIGRldmljZXMgd2VyZSBwcmVzZXJ2ZWQuXFxuKyAqXFxuKyAqIFRvIGVuYWJsZSB0aGUgUENJIGNvcmUgdG8gYmUgbm90aWZpZWQgd2hlbmV2ZXIgYSBmaWxlIHJlcHJlc2VudGluZyBhIGRldmljZVxcbisgKiBpcyBwcmVzZXJ2ZWQsIGRyaXZlcnMgbXVzdCByZWdpc3RlciB0aGVpciBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgd2l0aFxcbisgKiB0aGUgUENJIGNvcmUgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBBUElzOlxcbisgKlxcbisgKiAgKiBgYHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihkcml2ZXJfZmlsZV9oYW5kbGVyKWBgXFxuKyAqICAqIGBgcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoZHJpdmVyX2ZpbGVfaGFuZGxlcilgYFxcbisgKlxcbisgKiBEZXZpY2UgVHJhY2tpbmdcXG4rICogPT09PT09PT09PT09PT09XFxuKyAqXFxuKyAqIERyaXZlcnMgbXVzdCBub3RpZnkgdGhlIFBDSSBjb3JlIHdoZW4gc3BlY2lmaWMgZGV2aWNlcyBhcmUgcHJlc2VydmVkIG9yXFxuKyAqIHVucHJlc2VydmVkIHdpdGggdGhlIGZvbGxvd2luZyBBUElzOlxcbisgKlxcbisgKiAgKiBgYHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKHBjaV9kZXYpYGBcXG4rICogICogYGBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHBjaV9kZXYpYGBcXG4rICpcXG4rICogVGhpcyBhbGxvd3MgdGhlIFBDSSBjb3JlIHRvIGtlZXAgaXRzIEZMQiBkYXRhIChzdHJ1Y3QgcGNpX3NlcikgdXAgdG8gZGF0ZVxcbisgKiB3aXRoIHRoZSBsaXN0IG9mICoqb3V0Z29pbmcqKiBwcmVzZXJ2ZWQgZGV2aWNlcyBmb3IgdGhlIG5leHQga2VybmVsLlxcbisgKlxcbisgKiBBZnRlciBrZXhlYywgd2hlbmV2ZXIgYSBkZXZpY2UgaXMgZW51bWVyYXRlZCwgdGhlIFBDSSBjb3JlIHdpbGwgY2hlY2sgaWYgaXRcXG4rICogaXMgYW4gKippbmNvbWluZyoqIHByZXNlcnZlZCBkZXZpY2UgKGkuZS4gcHJlc2VydmVkIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwpXFxuKyAqIGJ5IGNoZWNraW5nIHRoZSBpbmNvbWluZyBGTEIgZGF0YSAoc3RydWN0IHBjaV9zZXIpLlxcbisgKlxcbisgKiBEcml2ZXJzIG11c3Qgbm90aWZ5IHRoZSBQQ0kgY29yZSB3aGVuIGFuICoqaW5jb21pbmcqKiBkZXZpY2UgaXMgZG9uZVxcbisgKiBwYXJ0aWNpcGF0aW5nIGluIHRoZSBpbmNvbWluZyBMaXZlIFVwZGF0ZSB3aXRoIHRoZSBmb2xsb3dpbmcgQVBJOlxcbisgKlxcbisgKiAgKiBgYHBjaV9saXZldXBkYXRlX2ZpbmlzaChwY2lfZGV2KWBgXFxuKyAqXFxuKyAqIFRoZSBQQ0kgY29yZSBkb2VzIG5vdCBlbmZvcmNlIGFueSBvcmRlcmluZyBvZiBgYHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpYGAgYW5kXFxuKyAqIGBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKWBgLiBpLmUuIEEgUENJIGRldmljZSBjYW4gYmUgKipvdXRnb2luZyoqXFxuKyAqIChwcmVzZXJ2ZWQgZm9yIG5leHQga2VybmVsKSBhbmQgKippbmNvbWluZyoqIChwcmVzZXJ2ZWQgYnkgcHJldmlvdXMga2VybmVsKVxcbisgKiBhdCB0aGUgc2FtZSB0aW1lLlxcbisgKlxcbisgKiBSZXN0cmljdGlvbnNcXG4rICogPT09PT09PT09PT09XFxuKyAqXFxuKyAqIFRoZSBQQ0kgY29yZSBlbmZvcmNlcyB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBvbiB3aGljaCBkZXZpY2VzIGNhbiBiZVxcbisgKiBwcmVzZXJ2ZWQuIFRoZXNlIG1heSBiZSByZWxheGVkIGluIHRoZSBmdXR1cmU6XFxuKyAqXFxuKyAqICAqIFRoZSBkZXZpY2UgY2Fubm90IGJlIGEgVmlydHVhbCBGdW5jdGlvbiAoVkYpLlxcbisgKlxcbisgKiAgKiBUaGUgZGV2aWNlIGNhbm5vdCByZXF1aXJlIGRldmljZS1zcGVjaWZpYyBxdWlya3MgdG8gZW5hYmxlIEFjY2Vzc1xcbisgKiAgICBDb250cm9sIFNlcnZpY2VzIChBQ1MpLlxcbisgKlxcbisgKiBEcml2ZXIgQmluZGluZ1xcbisgKiA9PT09PT09PT09PT09PVxcbisgKlxcbisgKiBJbiB0aGUgb3V0Z29pbmcga2VybmVsLCBpdCBpcyB0aGUgZHJpdmVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgaXRcXG4rICogZG9lcyBub3QgcmVsZWFzZSBhIGRldmljZSBiZXR3ZWVuIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgYW5kXFxuKyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKS5cXG4rICpcXG4rICogSW4gdGhlIGluY29taW5nIGtlcm5lbCwgaXQgaXMgdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGl0XFxuKyAqIGRvZXMgbm90IHJlbGVhc2UgYSBwcmVzZXJ2ZWQgZGV2aWNlIGJldHdlZW4gcHJvYmUoKSBhbmRcXG4rICogcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkuXFxuKyAqXFxuKyAqIEl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgaW5jb21pbmcgcHJlc2VydmVkIGRldmljZXMgYXJlXFxuKyAqIGJvdW5kIHRvIHRoZSBjb3JyZWN0IGRyaXZlci4gaS5lLiBUaGUgUENJIGNvcmUgZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IGFcXG4rICogZGV2aWNlIGdldHRpbmcgcHJlc2VydmVkIGJ5IGRyaXZlciBBIGluIHRoZSBvdXRnb2luZyBrZXJuZWwgYW5kIHRoZW4gZ2V0dGluZ1xcbisgKiBib3VuZCB0byBkcml2ZXIgQiBpbiB0aGUgaW5jb21pbmcga2VybmVsLiBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cXG4rICpcXG4rICogQkRGIFN0YWJpbGl0eVxcbisgKiA9PT09PT09PT09PT09XFxuKyAqXFxuKyAqIFRoZSBQQ0kgY29yZSBndWFyYW50ZWVzIHRoYXQgcHJlc2VydmVkIGRldmljZXMgY2FuIGJlIGlkZW50aWZpZWQgYnkgdGhlIHNhbWVcXG4rICogYnVzLCBkZXZpY2UsIGFuZCBmdW5jdGlvbiBudW1iZXJzIGZvciBhcyBsb25nIGFzIHRoZXkgYXJlIHByZXNlcnZlZFxcbisgKiAoaW5jbHVkaW5nIGFjcm9zcyBrZXhlYykuIFRvIGFjY29tcGxpc2ggdGhpcywgdGhlIFBDSSBjb3JlIGFsd2F5cyBpbmhlcml0c1xcbisgKiB0aGUgc2Vjb25kYXJ5IGFuZCBzdWJvcmRpbmF0ZSBidXMgbnVtYmVycyBhc3NpZ25lZCB0byBicmlkZ2VzIGR1cmluZyBzY2FubmluZ1xcbisgKiBpZiBhbnkgZGV2aWNlIGlzIHByZXNlcnZlZC4gVGhpcyBpcyB0cnVlIGV2ZW4gb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGFsd2F5c1xcbisgKiBhc3NpZ24gbmV3IGJ1cyBudW1iZXJzIGR1cmluZyBzY2FubmluZy4gVGhlIGtlcm5lbCBhc3N1bWVzIHRoZSBwcmV2aW91c1xcbisgKiBrZXJuZWwgZXN0YWJsaXNoZWQgYSBzYW5lIGJ1cyB0b3BvbG9neSBhY3Jvc3Mga2V4ZWMuXFxuKyAqXFxuKyAqIElmIGEgbWlzY29uZmlndXJlZCBvciB1bmNvbmZpZ3VyZWQgYnJpZGdlIGlzIGVuY291bnRlcmVkIGR1cmluZyBlbnVtZXJhdGlvblxcbisgKiB3aGlsZSB0aGVyZSBhcmUgcHJlc2VydmVkIGRldmljZXMsIGl0cyBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlIGJ1cyBudW1iZXJzXFxuKyAqIHdpbGwgYmUgY2xlYXJlZCBhbmQgZGV2aWNlcyBiZWxvdyBpdCB3aWxsIG5vdCBiZSBlbnVtZXJhdGVkLlxcbisgKlxcbisgKiBQQ0ktdG8tUENJIEJyaWRnZXNcXG4rICogPT09PT09PT09PT09PT09PT09XFxuKyAqXFxuKyAqIEFueSBQQ0ktdG8tUENJIGJyaWRnZXMgdXBzdHJlYW0gb2YgYSBwcmVzZXJ2ZWQgZGV2aWNlIGFyZSBhdXRvbWF0aWNhbGx5XFxuKyAqIHByZXNlcnZlZCB3aGVuIHRoZSBkZXZpY2UgaXMgcHJlc2VydmVkLiBUaGUgUENJIGNvcmUga2VlcHMgdHJhY2sgb2YgdGhlXFxuKyAqIG51bWJlciBvZiBkb3duc3RyZWFtIGRldmljZXMgdGhhdCBhcmUgcHJlc2VydmVkIHVuZGVyIGEgYnJpZGdlIHNvIHRoYXQgdGhlXFxuKyAqIGJyaWRnZSBpcyBvbmx5IHVucHJlc2VydmVkIG9uY2UgYWxsIGRvd25zdHJlYW0gZGV2aWNlcyBhcmUgdW5wcmVzZXJ2ZWQuXFxuKyAqXFxuKyAqIFRoaXMgZW5hYmxlcyB0aGUgUENJIGNvcmUgYW5kIGFueSBkcml2ZXJzIGJvdW5kIHRvIHRoZSBicmlkZ2UgdG8gcGFydGljaXBhdGVcXG4rICogaW4gdGhlIExpdmUgVXBkYXRlIHNvIHRoYXQgcHJlc2VydmVkIGVuZHBvaW50cyBjYW4gY29udGludWUgaXNzdWluZyBtZW1vcnlcXG4rICogdHJhbnNhY3Rpb25zIGR1cmluZyB0aGUgTGl2ZSBVcGRhdGUuXFxuKyAqXFxuKyAqIEhhbmRsaW5nIFByZXNlcnZlZCBEZXZpY2VzXFxuKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyAqXFxuKyAqIFRoZSBQQ0kgY29yZSB0cmVhdHMgcHJlc2VydmVkIGRldmljZXMgZGlmZmVyZW50bHkgdGhhbiBub24tcHJlc2VydmVkIGRldmljZXMuXFxuKyAqIFRoaXMgc2VjdGlvbiBlbnVtZXJhdGVzIHRob3NlIGRpZmZlcmVuY2VzLlxcbisgKlxcbisgKiAgKiBUaGUgUENJIGNvcmUgaW5oZXJpdHMgYWxsIEFDUyBmbGFncyBlbmFibGVkIG9uIGluY29taW5nIHByZXNlcnZlZCBkZXZpY2VzXFxuKyAqICAgIHJhdGhlciB0aGFuIGFzc2lnbmluZyBuZXcgb25lcy4gVGhpcyBlbnN1cmVzIHRoYXQgVExQcyBhcmUgcm91dGVkIHRoZSBzYW1lXFxuKyAqICAgIHdheSBhZnRlciBMaXZlIFVwZGF0ZSBhbmQgZW5zdXJlcyB0aGF0IElPTU1VIGdyb3VwcyBkbyBub3QgY2hhbmdlLiBOb3RlXFxuKyAqICAgIHRoYXQgYSBkZXZpY2Ugd2lsbCB1c2UgaXRzIGluaGVyaXRlZCBBQ1MgZmxhZ3MgZm9yIHRoZSBsaWZldGltZSBvZiBpdHNcXG4rICogICAgc3RydWN0IHBjaV9kZXYgKGkuZS4gZXZlbiBhZnRlciBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSkuXFxuKyAqXFxuKyAqICAqIFRoZSBQQ0kgY29yZSBpbmhlcml0cyBBUkkgRm9yd2FyZGluZyBFbmFibGUgb24gYWxsIGJyaWRnZXMgd2l0aCBkb3duc3RyZWFtXFxuKyAqICAgIHByZXNlcnZlZCBkZXZpY2VzIHRvIGVuc3VyZSB0aGF0IGFsbCBwcmVzZXJ2ZWQgZGV2aWNlcyBvbiB0aGUgYnJpZGdlJ3NcXG4rICogICAgc2Vjb25kYXJ5IGJ1cyBhcmUgYWRkcmVzc2FibGUgYWZ0ZXIgdGhlIExpdmUgVXBkYXRlLlxcbisgKlxcbisgKiAgKiBUaGUgUENJIGNvcmUgZG9lcyBub3QgZGlzYWJsZSBidXMgbWFzdGVyaW5nIG9uIG91dGdvaW5nIHByZXNlcnZlZCBkZXZpY2VzXFxuKyAqICAgIGR1cmluZyBrZXhlYy4gVGhpcyBhbGxvd3MgcHJlc2VydmVkIGRldmljZXMgdG8gaXNzdWUgbWVtb3J5IHRyYW5zYWN0aW9uc1xcbisgKiAgICB0aHJvdWdob3V0IHRoZSBMaXZlIFVwZGF0ZS5cXG4rICovXFxuK1xcbisjZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJQQ0k6IFxcXCIgS0JVSUxEX0JBU0VOQU1FIFxcXCI6IFxcXCIgZm10XFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9raG8vYWJpL3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGl2ZXVwZGF0ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tob19ibG9jay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImxpdmV1cGRhdGUuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInBjaS5oXFxcIlxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwgLSBHbG9iYWwgc3RhdGUgZm9yIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0XFxuKyAqIEByd3NlbTogUmVhZGVyL3dyaXRlciBzZW1hcGhvcmUgdXNlZCB0byBwcm90ZWN0IHRoZSBpbmNvbWluZyBhbmQgb3V0Z29pbmdcXG4rICogICAgICAgICBGTEJzLCBhbmQgdGhlIHJlZmVyZW5jZXMgdG8gdGhlbSBpbiBzdHJ1Y3QgcGNpX2Rldi5cXG4rICovXFxuK3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwge1xcbitcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHJ3c2VtO1xcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwgcGNpX2xpdmV1cGRhdGUgPSB7XFxuK1xcdC5yd3NlbSA9IF9fUldTRU1fSU5JVElBTElaRVIocGNpX2xpdmV1cGRhdGUucndzZW0pLFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwY2lfZmxiX291dGdvaW5nIC0gT3V0Z29pbmcgUENJIEZMQiBvYmplY3RcXG4rICogQHNlcjogUG9pbnRlciB0byB0aGUgcHJlc2VydmVkIHN0cnVjdCBwY2lfc2VyLlxcbisgKiBAYmxvY2tfc2V0OiBUaGUgS0hPIGJsb2NrIHNldCBob2xkaW5nIHRoZSBvdXRnb2luZyBkZXZpY2VzLlxcbisgKlxcbisgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgcnVudGltZSBzdGF0ZSBmb3IgdGhlIG91dGdvaW5nIFBDSSBMaXZlIFVwZGF0ZVxcbisgKiBzdGF0ZS4gSXQgd3JhcHMgdGhlIHNlcmlhbGl6ZWQgcGNpX3NlciBhbmQgdGhlIGJsb2NrX3NldCB1c2VkIHRvIG1hbmFnZVxcbisgKiB0aGUgc2VyaWFsaXplZCBlbnRyaWVzLlxcbisgKi9cXG4rc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcge1xcbitcXHRzdHJ1Y3QgcGNpX3NlciAqc2VyO1xcbitcXHRzdHJ1Y3Qga2hvX2Jsb2NrX3NldCBibG9ja19zZXQ7XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBjaV9mbGJfaW5jb21pbmcgLSBJbmNvbWluZyBQQ0kgRkxCIG9iamVjdFxcbisgKiBAc2VyOiBUaGUgaW5jb21pbmcgc3RydWN0IHBjaV9zZXIgZnJvbSB0aGUgcHJldmlvdXMga2VybmVsLlxcbisgKiBAeGE6IFhhcnJheSB1c2VkIHRvIHF1aWNrbHkgbG9va3VwIGRldmljZXMgaW4gQHNlci5cXG4rICogQGJsb2NrX3NldDogVGhlIEtITyBibG9jayBzZXQgaG9sZGluZyB0aGUgaW5jb21pbmcgZGV2aWNlcy5cXG4rICpcXG4rICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIHJ1bnRpbWUgc3RhdGUgZm9yIHRoZSBpbmNvbWluZyBQQ0kgTGl2ZSBVcGRhdGVcXG4rICogc3RhdGUuIEl0IHdyYXBzIHRoZSBzZXJpYWxpemVkIHBjaV9zZXIsIHRoZSBibG9ja19zZXQgdXNlZCB0byByZXN0b3JlXFxuKyAqIHRoZSBzZXJpYWxpemVkIGVudHJpZXMsIGFuZCBhbiB4YXJyYXkgZm9yIGZhc3QgbG9va3Vwcy5cXG4rICovXFxuK3N0cnVjdCBwY2lfZmxiX2luY29taW5nIHtcXG4rXFx0c3RydWN0IHBjaV9zZXIgKnNlcjtcXG4rXFx0c3RydWN0IHhhcnJheSB4YTtcXG4rXFx0c3RydWN0IGtob19ibG9ja19zZXQgYmxvY2tfc2V0O1xcbit9O1xcbitcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcGNpX3Nlcl94YV9rZXkodTMyIGRvbWFpbiwgdTE2IGJkZilcXG4re1xcbitcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZG9tYWluIFxcdTAwM2NcXHUwMDNjIDE2IHwgYmRmO1xcbit9XFxuK3N0YXRpYyBpbnQgcGNpX2ZsYl9wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BfYXJncyAqYXJncylcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmc7XFxuK1xcdHN0cnVjdCBwY2lfc2VyICpzZXI7XFxuK1xcbitcXHRvdXRnb2luZyA9IGt6YWxsb2Nfb2JqKCpvdXRnb2luZyk7XFxuK1xcdGlmICghb3V0Z29pbmcpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0c2VyID0ga2hvX2FsbG9jX3ByZXNlcnZlKHNpemVvZigqc2VyKSk7XFxuK1xcdGlmIChJU19FUlIoc2VyKSkge1xcbitcXHRcXHRrZnJlZShvdXRnb2luZyk7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHNlcik7XFxuK1xcdH1cXG4rXFxuK1xcdHNlci1cXHUwMDNlbnJfZGV2aWNlcyA9IDA7XFxuK1xcdHNlci1cXHUwMDNlZGV2aWNlcyA9IDA7XFxuK1xcbitcXHRvdXRnb2luZy1cXHUwMDNlc2VyID0gc2VyO1xcbitcXHRraG9fYmxvY2tfc2V0X2luaXQoXFx1MDAyNm91dGdvaW5nLVxcdTAwM2VibG9ja19zZXQsIHNpemVvZihzdHJ1Y3QgcGNpX2Rldl9zZXIpKTtcXG4rXFxuK1xcdGFyZ3MtXFx1MDAzZW9iaiA9IG91dGdvaW5nO1xcbitcXHRhcmdzLVxcdTAwM2VkYXRhID0gdmlydF90b19waHlzKHNlcik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwY2lfZmxiX3VucHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmxiX29wX2FyZ3MgKmFyZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gYXJncy1cXHUwMDNlb2JqO1xcbitcXG4rXFx0V0FSTl9PTihvdXRnb2luZy1cXHUwMDNlc2VyLVxcdTAwM2Vucl9kZXZpY2VzKTtcXG4rXFx0a2hvX2Jsb2NrX3NldF9kZXN0cm95KFxcdTAwMjZvdXRnb2luZy1cXHUwMDNlYmxvY2tfc2V0KTtcXG4rXFx0a2hvX3VucHJlc2VydmVfZnJlZShvdXRnb2luZy1cXHUwMDNlc2VyKTtcXG4rXFx0a2ZyZWUob3V0Z29pbmcpO1xcbitcXHRwcl9kZWJ1ZyhcXFwiVW5wcmVzZXJ2ZWQgc3RydWN0IHBjaV9zZXJcXFxcblxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBjaV9mbGJfcmV0cmlldmUoc3RydWN0IGxpdmV1cGRhdGVfZmxiX29wX2FyZ3MgKmFyZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9zZXIgKnNlciA9IHBoeXNfdG9fdmlydChhcmdzLVxcdTAwM2VkYXRhKTtcXG4rXFx0c3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKmluY29taW5nO1xcbitcXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXI7XFxuK1xcdHN0cnVjdCBraG9fYmxvY2tfc2V0X2l0IGl0O1xcbitcXHRpbnQgcmV0ID0gLUVOT01FTTtcXG4rXFxuK1xcdGluY29taW5nID0ga3phbGxvY19vYmooKmluY29taW5nKTtcXG4rXFx0aWYgKCFpbmNvbWluZylcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9mcmVlO1xcbitcXG4rXFx0aW5jb21pbmctXFx1MDAzZXNlciA9IHNlcjtcXG4rXFx0eGFfaW5pdChcXHUwMDI2aW5jb21pbmctXFx1MDAzZXhhKTtcXG4rXFxuK1xcdGtob19ibG9ja19zZXRfaW5pdChcXHUwMDI2aW5jb21pbmctXFx1MDAzZWJsb2NrX3NldCwgc2l6ZW9mKHN0cnVjdCBwY2lfZGV2X3NlcikpO1xcbitcXHRyZXQgPSBraG9fYmxvY2tfc2V0X3Jlc3RvcmUoXFx1MDAyNmluY29taW5nLVxcdTAwM2VibG9ja19zZXQsIHNlci1cXHUwMDNlZGV2aWNlcyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfaW5jb21pbmc7XFxuK1xcbitcXHRraG9fYmxvY2tfc2V0X2l0X2luaXQoXFx1MDAyNml0LCBcXHUwMDI2aW5jb21pbmctXFx1MDAzZWJsb2NrX3NldCk7XFxuK1xcdHdoaWxlICgoZGV2X3NlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeShcXHUwMDI2aXQpKSkge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGtleTtcXG4rXFxuK1xcdFxcdGlmICghZGV2X3Nlci1cXHUwMDNlcmVmY291bnQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0a2V5ID0gcGNpX3Nlcl94YV9rZXkoZGV2X3Nlci1cXHUwMDNlZG9tYWluLCBkZXZfc2VyLVxcdTAwM2ViZGYpO1xcbitcXHRcXHRyZXQgPSB4YV9pbnNlcnQoXFx1MDAyNmluY29taW5nLVxcdTAwM2V4YSwga2V5LCBkZXZfc2VyLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBlcnJfYmxvY2tfc2V0X2Rlc3Ryb3k7XFxuK1xcdH1cXG4rXFxuK1xcdGFyZ3MtXFx1MDAzZW9iaiA9IGluY29taW5nO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9ibG9ja19zZXRfZGVzdHJveTpcXG4rXFx0a2hvX2Jsb2NrX3NldF9kZXN0cm95KFxcdTAwMjZpbmNvbWluZy1cXHUwMDNlYmxvY2tfc2V0KTtcXG4rZXJyX2ZyZWVfaW5jb21pbmc6XFxuK1xcdHhhX2Rlc3Ryb3koXFx1MDAyNmluY29taW5nLVxcdTAwM2V4YSk7XFxuK1xcdGtmcmVlKGluY29taW5nKTtcXG4rZXJyX3Jlc3RvcmVfZnJlZTpcXG4rXFx0a2hvX3Jlc3RvcmVfZnJlZShzZXIpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwY2lfZmxiX2ZpbmlzaChzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BfYXJncyAqYXJncylcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAqaW5jb21pbmcgPSBhcmdzLVxcdTAwM2VvYmo7XFxuK1xcbitcXHR4YV9kZXN0cm95KFxcdTAwMjZpbmNvbWluZy1cXHUwMDNleGEpO1xcbitcXHRraG9fYmxvY2tfc2V0X2Rlc3Ryb3koXFx1MDAyNmluY29taW5nLVxcdTAwM2VibG9ja19zZXQpO1xcbitcXHRraG9fcmVzdG9yZV9mcmVlKGluY29taW5nLVxcdTAwM2VzZXIpO1xcbitcXHRrZnJlZShpbmNvbWluZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGJfb3BzIHBjaV9saXZldXBkYXRlX2ZsYl9vcHMgPSB7XFxuK1xcdC5wcmVzZXJ2ZSA9IHBjaV9mbGJfcHJlc2VydmUsXFxuK1xcdC51bnByZXNlcnZlID0gcGNpX2ZsYl91bnByZXNlcnZlLFxcbitcXHQucmV0cmlldmUgPSBwY2lfZmxiX3JldHJpZXZlLFxcbitcXHQuZmluaXNoID0gcGNpX2ZsYl9maW5pc2gsXFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiBwY2lfbGl2ZXVwZGF0ZV9mbGIgPSB7XFxuK1xcdC5vcHMgPSBcXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiX29wcyxcXG4rXFx0LmNvbXBhdGlibGUgPSBQQ0lfTFVPX0ZMQl9DT01QQVRJQkxFLFxcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X291dGdvaW5nKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGxpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZyhcXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiLCAodm9pZCAqKilcXHUwMDI2b3V0Z29pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXG4rXFx0aWYgKCFvdXRnb2luZylcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuK1xcbitcXHRyZXR1cm4gb3V0Z29pbmc7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGNpX2Rldl9zZXIgKnBjaV9nZXRfZW1wdHlfb3JfYXBwZW5kKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZylcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXIsICpmb3VuZCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBraG9fYmxvY2tfc2V0X2l0IGl0O1xcbitcXHRpbnQgZXJyO1xcbitcXHR1MzIgY291bnQgPSAwO1xcbitcXG4rXFx0a2hvX2Jsb2NrX3NldF9pdF9pbml0KFxcdTAwMjZpdCwgXFx1MDAyNm91dGdvaW5nLVxcdTAwM2VibG9ja19zZXQpO1xcbitcXHR3aGlsZSAoKGRldl9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3JlYWRfZW50cnkoXFx1MDAyNml0KSkpIHtcXG4rXFx0XFx0Y291bnQrKztcXG4rXFx0XFx0aWYgKGRldl9zZXItXFx1MDAzZXJlZmNvdW50ID09IDAgXFx1MDAyNlxcdTAwMjYgIWZvdW5kKVxcbitcXHRcXHRcXHRmb3VuZCA9IGRldl9zZXI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChmb3VuZClcXG4rXFx0XFx0cmV0dXJuIGZvdW5kO1xcbitcXG4rXFx0ZXJyID0ga2hvX2Jsb2NrX3NldF9ncm93KFxcdTAwMjZvdXRnb2luZy1cXHUwMDNlYmxvY2tfc2V0LCBjb3VudCArIDEpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXG4rXFx0aWYgKGNvdW50ID09IDApXFxuK1xcdFxcdGtob19ibG9ja19zZXRfaXRfaW5pdChcXHUwMDI2aXQsIFxcdTAwMjZvdXRnb2luZy1cXHUwMDNlYmxvY2tfc2V0KTtcXG4rXFxuK1xcdGRldl9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3Jlc2VydmVfZW50cnkoXFx1MDAyNml0KTtcXG4rXFx0aWYgKCFkZXZfc2VyKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcXG4rXFxuK1xcdHJldHVybiBkZXZfc2VyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX3VucHJlc2VydmVfZGV2aWNlKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywgc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXIgPSBkZXYtXFx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmc7XFxuK1xcbitcXHRpZiAoZGV2LVxcdTAwM2VsaXZldXBkYXRlLmZyb3plbikge1xcbitcXHRcXHRwY2lfd2FybihkZXYsIFxcXCJDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2UgYWZ0ZXIgaXQgaXMgZnJvemVuIVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWRldl9zZXIpIHtcXG4rXFx0XFx0cGNpX3dhcm4oZGV2LCBcXFwiQ2Fubm90IHVucHJlc2VydmUgZGV2aWNlIHRoYXQgaXMgbm90IHByZXNlcnZlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWRldl9zZXItXFx1MDAzZXJlZmNvdW50KSB7XFxuK1xcdFxcdHBjaV9XQVJOKGRldiwgMSwgXFxcIlByZXNlcnZlZCBkZXZpY2UgaGFzIGEgMCByZWZjb3VudCFcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKC0tZGV2X3Nlci1cXHUwMDNlcmVmY291bnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cGNpX2luZm8oZGV2LCBcXFwiRGV2aWNlIHdpbGwgbm8gbG9uZ2VyIGJlIHByZXNlcnZlZCBhY3Jvc3MgbmV4dCBMaXZlIFVwZGF0ZVxcXFxuXFxcIik7XFxuK1xcdG91dGdvaW5nLVxcdTAwM2VzZXItXFx1MDAzZW5yX2RldmljZXMtLTtcXG4rXFx0bWVtc2V0KGRldl9zZXIsIDAsIHNpemVvZigqZGV2X3NlcikpO1xcbitcXHRkZXYtXFx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmcgPSBOVUxMO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2VfYWdhaW4oc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRpZiAoIWRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZy1cXHUwMDNlcmVmY291bnQpIHtcXG4rXFx0XFx0cGNpX1dBUk4oZGV2LCAxLCBcXFwiUHJlc2VydmVkIGRldmljZSB3aXRoIDAgcmVmY291bnQhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuZHBvaW50IGRldmljZXMgc2hvdWxkIG5vdCBiZSBwcmVzZXJ2ZWQgbW9yZSB0aGFuIG9uY2UuIEJyaWRnZXMgYXJlXFxuK1xcdCAqIHByZXNlcnZlZCBvbmNlIGZvciBldmVyeSBkb3duc3RyZWFtIGRldmljZSB0aGF0IGlzIHByZXNlcnZlZC5cXG4rXFx0ICovXFxuK1xcdGlmICghZGV2LVxcdTAwM2VzdWJvcmRpbmF0ZSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZy1cXHUwMDNlcmVmY291bnQrKztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19wY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2Uoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2X3NlciAqZGV2X3NlcjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERvIG5vdCBwcmVzZXJ2ZSBkZXZpY2VzIHRoYXQgcmVseSBvbiBkZXZpY2Utc3BlY2lmaWMgQUNTIGVxdWl2YWxlbnRzXFxuK1xcdCAqIChmb3Igbm93KSBzaW5jZSB0aGF0IHdvdWxkIGNvbXBsaWNhdGUga2VlcGluZyBBQ1MgY29uc3RhbnQgYWNyb3NzXFxuK1xcdCAqIExpdmUgVXBkYXRlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHtcXG4rXFx0XFx0cGNpX3dhcm4oZGV2LCBcXFwiUmVmdXNpbmcgdG8gcHJlc2VydmUgZGV2aWNlIHRoYXQgcmVsaWVzIG9uIEFDUyBxdWlya3NcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2X3NlciA9IHBjaV9nZXRfZW1wdHlfb3JfYXBwZW5kKG91dGdvaW5nKTtcXG4rXFx0aWYgKElTX0VSUihkZXZfc2VyKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoZGV2X3Nlcik7XFxuK1xcbitcXHRwY2lfaW5mbyhkZXYsIFxcXCJEZXZpY2Ugd2lsbCBiZSBwcmVzZXJ2ZWQgYWNyb3NzIG5leHQgTGl2ZSBVcGRhdGVcXFxcblxcXCIpO1xcbitcXHRvdXRnb2luZy1cXHUwMDNlc2VyLVxcdTAwM2Vucl9kZXZpY2VzKys7XFxuK1xcdG91dGdvaW5nLVxcdTAwM2VzZXItXFx1MDAzZWRldmljZXMgPSBraG9fYmxvY2tfc2V0X2hlYWRfcGEoXFx1MDAyNm91dGdvaW5nLVxcdTAwM2VibG9ja19zZXQpO1xcbitcXG4rXFx0ZGV2X3Nlci1cXHUwMDNlZG9tYWluID0gcGNpX2RvbWFpbl9ucihkZXYtXFx1MDAzZWJ1cyk7XFxuK1xcdGRldl9zZXItXFx1MDAzZWJkZiA9IHBjaV9kZXZfaWQoZGV2KTtcXG4rXFx0ZGV2X3Nlci1cXHUwMDNlcmVmY291bnQgPSAxO1xcbitcXG4rXFx0ZGV2LVxcdTAwM2VsaXZldXBkYXRlLm91dGdvaW5nID0gZGV2X3NlcjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfZGV2aWNlKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywgc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRpZiAoZGV2LVxcdTAwM2VsaXZldXBkYXRlLmZyb3plbikge1xcbitcXHRcXHRwY2lfd2FybihkZXYsIFxcXCJDYW5ub3QgcHJlc2VydmUgZGV2aWNlIGFmdGVyIGl0IGlzIGZyb3plbiFcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZylcXG4rXFx0XFx0cmV0dXJuIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZV9hZ2FpbihkZXYpO1xcbitcXG4rXFx0cmV0dXJuIF9fcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfZGV2aWNlKG91dGdvaW5nLCBkZXYpO1xcbit9XFxuK1xcbisjZGVmaW5lIGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChfZCwgX3N0YXJ0LCBfZW5kKSBcXFxcXFxuK1xcdGZvciAoKF9kKSA9IChfc3RhcnQpOyAoX2QpICE9IChfZW5kKTsgKF9kKSA9IChfZCktXFx1MDAzZWJ1cy1cXHUwMDNlc2VsZilcXG4rXFxuK3N0YXRpYyB2b2lkIF9fcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHBjaV9kZXYgKmVuZClcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqZGV2O1xcbitcXG4rXFx0Zm9yX2VhY2hfcGNpX2Rldl9pbl9wYXRoKGRldiwgc3RhcnQsIGVuZCkge1xcbitcXHRcXHRpZiAocGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9kZXZpY2Uob3V0Z29pbmcsIGRldikpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX3BhdGgoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXFxuK3tcXG4rXFx0X19wY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX3BhdGgob3V0Z29pbmcsIHN0YXJ0LCAvKmVuZD0qL05VTEwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX3BhdGgoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKmRldjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7XFxuK1xcdFxcdHJldCA9IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZShvdXRnb2luZywgZGV2KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRfX3BjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChvdXRnb2luZywgc3RhcnQsIGRldik7XFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSgpIC0gUHJlc2VydmUgYSBQQ0kgZGV2aWNlIGFjcm9zcyBMaXZlIFVwZGF0ZVxcbisgKiBAZGV2OiBUaGUgUENJIGRldmljZSB0byBwcmVzZXJ2ZS5cXG4rICpcXG4rICogcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSBub3RpZmllcyB0aGUgUENJIGNvcmUgdGhhdCBhIFBDSSBkZXZpY2Ugc2hvdWxkIGJlXFxuKyAqIHByZXNlcnZlZCBhY3Jvc3MgdGhlIG5leHQgTGl2ZSBVcGRhdGUuIERyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIGNhbGxcXG4rICogcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSBmcm9tIHRoZWlyIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlclxcbisgKiBwcmVzZXJ2ZSgpIGNhbGxiYWNrIHRvIGVuc3VyZSB0aGUgb3V0Z29pbmcgc3RydWN0IHBjaV9zZXIgaXMgYWxyZWFkeSBzZXQgdXAuXFxuKyAqXFxuKyAqIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgYXV0b21hdGljYWxseSBwcmVzZXJ2ZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2ZcXG4rICogQGRldi5cXG4rICpcXG4rICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDtcXG4rXFxuK1xcdGlmIChkZXYtXFx1MDAzZWlzX3ZpcnRmbilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcXG4rXFxuK1xcdG91dGdvaW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZygpO1xcbitcXHRpZiAoSVNfRVJSKG91dGdvaW5nKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIob3V0Z29pbmcpO1xcbitcXG4rXFx0cmV0dXJuIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX3BhdGgob3V0Z29pbmcsIGRldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfcHJlc2VydmUpO1xcbitcXG4rLyoqXFxuKyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSAtIENhbmNlbCBwcmVzZXJ2YXRpb24gb2YgYSBQQ0kgZGV2aWNlXFxuKyAqIEBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIHVucHJlc2VydmUuXFxuKyAqXFxuKyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSBub3RpZmllcyB0aGUgUENJIGNvcmUgdGhhdCBhIFBDSSBkZXZpY2Ugc2hvdWxkIG5vXFxuKyAqIGxvbmdlciBiZSBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBuZXh0IExpdmUgVXBkYXRlLiBEcml2ZXJzIGFyZSBleHBlY3RlZCB0byBjYWxsXFxuKyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSBmcm9tIHRoZWlyIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlclxcbisgKiB1bnByZXNlcnZlKCkgY2FsbGJhY2sgdG8gZW5zdXJlIHRoZSBvdXRnb2luZyBzdHJ1Y3QgcGNpX3NlciBpcyBhbHJlYWR5IHNldFxcbisgKiB1cC5cXG4rICpcXG4rICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpIGF1dG9tYXRpY2FsbHkgdW5wcmVzZXJ2ZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2ZcXG4rICogQGRldi5cXG4rICovXFxuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZyA9IE5VTEw7XFxuK1xcbitcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcXG4rXFxuK1xcdG91dGdvaW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZygpO1xcbitcXHRpZiAoSVNfRVJSKG91dGdvaW5nKSkge1xcbitcXHRcXHRwY2lfd2FybihkZXYsIFxcXCJDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2Ugd2l0aG91dCBvdXRnb2luZyBMaXZlIFVwZGF0ZSBzdGF0ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBkZXYpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBwY2lfZmxiX2luY29taW5nICpwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKmluY29taW5nID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGxpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZyhcXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiLCAodm9pZCAqKilcXHUwMDI2aW5jb21pbmcpO1xcbitcXG4rXFx0LyogTGl2ZSBVcGRhdGUgaXMgbm90IGVuYWJsZWQuICovXFxuK1xcdGlmIChyZXQgPT0gLUVPUE5PVFNVUFApXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0LyogTGl2ZSBVcGRhdGUgaXMgZW5hYmxlZCwgYnV0IHRoZXJlIGlzIG5vIGluY29taW5nIEZMQiBkYXRhLiAqL1xcbitcXHRpZiAocmV0ID09IC1FTk9EQVRBKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIExpdmUgVXBkYXRlIGlzIGVuYWJsZWQgYW5kIHRoZXJlIGlzIGluY29taW5nIEZMQiBkYXRhLCBidXQgbm9uZSBvZiBpdFxcbitcXHQgKiBtYXRjaGVzIHBjaV9saXZldXBkYXRlX2ZsYi5jb21wYXRpYmxlLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIGNvdWxkIG1lYW4gdGhhdCBubyBQQ0kgRkxCIGRhdGEgd2FzIHBhc3NlZCBieSB0aGUgcHJldmlvdXNcXG4rXFx0ICoga2VybmVsLCBidXQgaXQgY291bGQgYWxzbyBtZWFuIHRoZSBwcmV2aW91cyBrZXJuZWwgdXNlZCBhIGRpZmZlcmVudFxcbitcXHQgKiBjb21wYXRpYmlsaXR5IHN0cmluZyAoaS5lLiBhIGRpZmZlcmVudCBBQkkpLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJldCA9PSAtRU5PRU5UKSB7XFxuK1xcdFxcdHByX2luZm9fb25jZShcXFwiTm8gaW5jb21pbmcgRkxCIG1hdGNoZWQgJXNcXFxcblxcXCIsIHBjaV9saXZldXBkYXRlX2ZsYi5jb21wYXRpYmxlKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZXJlIGlzIGluY29taW5nIEZMQiBkYXRhIHRoYXQgbWF0Y2hlcyBwY2lfbGl2ZXVwZGF0ZV9mbGIuY29tcGF0aWJsZVxcbitcXHQgKiBidXQgaXQgY2Fubm90IGJlIHJldHJpZXZlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHBhbmljKFxcXCJGYWlsZWQgdG8gcmV0cmlldmUgaW5jb21pbmcgRkxCIGRhdGEgKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG4rXFxuK1xcdHJldHVybiBpbmNvbWluZztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGNpX2xpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZyh2b2lkKVxcbit7XFxuK1xcdGxpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZyhcXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luKCkgLSBEZXRlcm1pbmUgaWYgYSBicmlkZ2Ugc2hvdWxkIGluaGVyaXQgYnVzIG51bWJlcnNcXG4rICogQGJ1czogVGhlIHBhcmVudCBidXMgb2YgdGhlIGJyaWRnZS5cXG4rICogQGRldjogVGhlIFBDSSBicmlkZ2UgZGV2aWNlLlxcbisgKiBAcGFzczogVGhlIHNjYW4gcGFzcyAoMCBmb3IgZmlyc3QgcGFzcywgMSBmb3Igc2Vjb25kIHBhc3MpLlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUENJIGNvcmUgd2hlbiBpdCBiZWdpbnMgc2Nhbm5pbmcgYSBicmlkZ2UuXFxuKyAqIEl0IGRldGVybWluZXMgd2hldGhlciB0aGUgYnJpZGdlIHNob3VsZCBpbmhlcml0IHRoZSBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlXFxuKyAqIGJ1cyBudW1iZXJzIGFzc2lnbmVkIHRvIGl0IGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvXFxuKyAqIGtlZXAgYnVzIG51bWJlcnMgY29uc3RhbnQgZm9yIHByZXNlcnZlZCBkZXZpY2VzIGRvd25zdHJlYW0gb2YgdGhlIGJyaWRnZS5cXG4rICpcXG4rICogUmV0dXJuOiBUcnVlIGlmIGJ1cyBudW1iZXJzIHNob3VsZCBiZSBpbmhlcml0ZWQsIGZhbHNlIG90aGVyd2lzZS5cXG4rICovXFxuK2Jvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgaW50IHBhc3MpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IGJ1cy1cXHUwMDNlc2VsZjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9uIHRoZSBzZWNvbmQgcGFzcywgcmV1c2UgdGhlIHZhbHVlIHRoYXQgd2FzIHNldCBvbiB0aGUgZmlyc3QgcGFzc1xcbitcXHQgKiBzbyB0aGF0IHRoZSBwYXNzZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCBvbmUgYW5vdGhlci5cXG4rXFx0ICovXFxuK1xcdGlmIChwYXNzKVxcbitcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VsaXZldXBkYXRlLmluaGVyaXRfYnVzZXM7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgcGFyZW50IGJyaWRnZSBpcyBiZWluZyBmb3JjZWQgdG8gaW5oZXJpdCBpdHMgYnVzIG51bWJlcnNcXG4rXFx0ICogZHVyaW5nIHRoaXMgc2NhbiB0aGVuIHRoaXMgYnJpZGdlIG11c3QgYXMgd2VsbCwgb3RoZXJ3aXNlIHRoZSBQQ0lcXG4rXFx0ICogY29yZSBjb3VsZCBleHBhbmQgdGhpcyBicmlkZ2UncyByZXNlcnZhdGlvbiBiZXlvbmQgaXRzIHBhcmVudCAod2hpY2hcXG4rXFx0ICogY2Fubm90IGV4cGFuZCkuXFxuK1xcdCAqL1xcbitcXHRpZiAocGFyZW50IFxcdTAwMjZcXHUwMDI2IHBhcmVudC1cXHUwMDNlbGl2ZXVwZGF0ZS5pbmhlcml0X2J1c2VzKSB7XFxuK1xcdFxcdGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5pbmhlcml0X2J1c2VzID0gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGFueSBpbmNvbWluZyBwcmVzZXJ2ZWQgZGV2aWNlcywgZm9yY2UgdGhlXFxuK1xcdCAqIGJ1cyBudW1iZXJzIHRvIGJlIGluaGVyaXRlZCB0byBhdm9pZCBjaGFuZ2luZyB0aGUgYnVzIG51bWJlcnNcXG4rXFx0ICogYXNzaWduZWQgdG8gdGhvc2UgZGV2aWNlcyBkdXJpbmcgZW51bWVyYXRpb24uXFxuK1xcdCAqXFxuK1xcdCAqIFRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgaW5oZXJpdCBidXMgbnVtYmVycyBvbiBhbGwgYnJpZGdlcyBpZiBhbnkgUENJXFxuK1xcdCAqIGRldmljZXMgYXJlIGluY29taW5nLCB0byBlbnN1cmUgdGhhdCBubyBicmlkZ2UncyByZXNlcnZhdGlvbiBpc1xcbitcXHQgKiBleHBhbmRlZCB0byBvdmVybGFwIHdpdGggYSBwcmVzZXJ2ZWQgZGV2aWNlIGRvd25zdHJlYW0gb2YgYSBkaWZmZXJlbnRcXG4rXFx0ICogYnJpZGdlLlxcbitcXHQgKi9cXG4rXFx0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFxcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSkge1xcbitcXHRcXHRzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAqaW5jb21pbmc7XFxuK1xcbitcXHRcXHRpbmNvbWluZyA9IHBjaV9saXZldXBkYXRlX2ZsYl9nZXRfaW5jb21pbmcoKTtcXG4rXFx0XFx0aWYgKCFpbmNvbWluZykge1xcbitcXHRcXHRcXHRkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9IGZhbHNlO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEl0IGlzIHNhZmUgdG8gc2FtcGxlIGluY29taW5nLVxcdTAwM2VzZXItXFx1MDAzZW5yX2RldmljZXMgYW5kIHRoZW5cXG4rXFx0XFx0ICogZHJvcCB0aGUgcndzZW0gc2luY2UgbnJfZGV2aWNlcyB3aWxsIG9ubHkgZGVjcmVhc2UuIFRodXMgdGhlXFxuK1xcdFxcdCAqIG9ubHkgXFxcInJhY2VcXFwiIGlzIHRoYXQgdGhlIGN1cnJlbnQgc2NhbiB3aWxsIGJlIG92ZXJseVxcbitcXHRcXHQgKiBjb25zZXJ2YXRpdmUgYW5kIGZvcmNlIGJ1cyBpbmhlcml0YW5jZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5pbmhlcml0X2J1c2VzID0gISFpbmNvbWluZy1cXHUwMDNlc2VyLVxcdTAwM2Vucl9kZXZpY2VzO1xcbitcXHRcXHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZCgpIC0gRmluaXNoIHNjYW5uaW5nIGEgUENJIGJyaWRnZVxcbisgKiBAZGV2OiBUaGUgUENJIGJyaWRnZSBkZXZpY2UuXFxuKyAqIEBwYXNzOiBUaGUgc2NhbiBwYXNzICgwIGZvciBmaXJzdCBwYXNzLCAxIGZvciBzZWNvbmQgcGFzcykuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBQQ0kgY29yZSB3aGVuIGl0IGZpbmlzaGVzIHNjYW5uaW5nIGEgYnJpZGdlLlxcbisgKiBJdCBjbGVhcnMgdGhlIGluaGVyaXRhbmNlIHN0YXR1cyBhZnRlciB0aGUgc2Vjb25kIHBhc3Mgc28gaXQgY2FuIGJlXFxuKyAqIHJlLWV2YWx1YXRlZCBvbiBmdXR1cmUgc2NhbnMuXFxuKyAqL1xcbit2b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBDbGVhciBpbmhlcml0X2J1c2VzIGFmdGVyIHRoZSBzZWNvbmQgcGFzcyBzbyBpdCBjYW4gYmUgcmUtZXZhbHVhdGVkXFxuK1xcdCAqIG9uIGZ1dHVyZSBzY2Fucy5cXG4rXFx0ICovXFxuK1xcdGlmIChwYXNzKVxcbitcXHRcXHRkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9IGZhbHNlO1xcbit9XFxuK1xcbit2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcXG4rXFx0c3RydWN0IHBjaV9kZXZfc2VyICpkZXZfc2VyO1xcbitcXHR1bnNpZ25lZCBsb25nIGtleTtcXG4rXFxuK1xcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xcbitcXG4rXFx0aW5jb21pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKCk7XFxuK1xcdGlmICghaW5jb21pbmcpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGtleSA9IHBjaV9zZXJfeGFfa2V5KHBjaV9kb21haW5fbnIoZGV2LVxcdTAwM2VidXMpLCBwY2lfZGV2X2lkKGRldikpO1xcbitcXHRkZXZfc2VyID0geGFfbG9hZChcXHUwMDI2aW5jb21pbmctXFx1MDAzZXhhLCBrZXkpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBkZXZpY2Ugd2FzIG5vdCBwcmVzZXJ2ZWQgYWNyb3NzIExpdmUgVXBkYXRlLCBvciBpdCB3YXMgcHJlc2VydmVkXFxuK1xcdCAqIGJ1dCBoYXMgYWxyZWFkeSBiZWVuIHByb2JlZCBhbmQgZ29uZSB0aHJvdWdoIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpLFxcbitcXHQgKiBlLmcuIGR1ZSB0byByZW1vdmluZyBhbmQgcmUtYWRkaW5nIHRoZSBkZXZpY2UuIEVpdGhlciB3YXksIGl0J3Mgbm90XFxuK1xcdCAqIHRyZWF0ZWQgYXMgaW5jb21pbmctcHJlc2VydmVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFkZXZfc2VyIHx8ICFkZXZfc2VyLVxcdTAwM2VyZWZjb3VudCkge1xcbitcXHRcXHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFxuK1xcdHBjaV9pbmZvKGRldiwgXFxcIkRldmljZSB3YXMgcHJlc2VydmVkIGJ5IHByZXZpb3VzIGtlcm5lbCBhY3Jvc3MgTGl2ZSBVcGRhdGVcXFxcblxcXCIpO1xcbitcXHRkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcgPSBkZXZfc2VyO1xcbitcXHRkZXYtXFx1MDAzZWxpdmV1cGRhdGUud2FzX3ByZXNlcnZlZCA9IHRydWU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBIb2xkIHRoZSByZWYgb24gdGhlIGluY29taW5nIEZMQiB1bnRpbCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSBzb1xcbitcXHQgKiB0aGF0IGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZyBjYW5ub3QgZ2V0IGZyZWVkIHdoaWxlIHRoZSBQQ0kgY29yZVxcbitcXHQgKiBoYXMgYSBwb2ludGVyIHRvIGl0LiBJdCdzIGJldHRlciB0byBsZWFrIHRoZSBpbmNvbWluZyBGTEIgdGhhbiBkbyBhXFxuK1xcdCAqIHVzZS1hZnRlci1mcmVlIGlmIGRyaXZlciBkb2VzIG5vdCBjYWxsIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpLlxcbitcXHQgKi9cXG4rfVxcbitcXG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIEl0IHNob3VsZCBiZSBzYWZlIHRvIFJFQURfT05DRSgpIG91dHNpZGUgb2YgdGhlIHJ3c2VtIGR1cmluZyBjbGVhbnVwXFxuK1xcdCAqIHNpbmNlIHRoZXJlIHNob3VsZCBubyBsb25nZXIgYmUgYW55IHJlZmVyZW5jZXMgdG8gQGRldiBvbiB0aGUgc3lzdGVtLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gcHJhY3RpY2UuIERyaXZlcnMgc2hvdWxkIGJsb2NrIHJlbW92YWxcXG4rXFx0ICogd2hpbGUgYSBkZXZpY2UgaXMgcHJlc2VydmVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKFJFQURfT05DRShkZXYtXFx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmcpKVxcbitcXHRcXHRwY2lfV0FSTihkZXYsIDEsIFxcXCJEZXN0cm95aW5nIG91dGdvaW5nLXByZXNlcnZlZCBkZXZpY2UhXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChSRUFEX09OQ0UoZGV2LVxcdTAwM2VsaXZldXBkYXRlLmluY29taW5nKSkge1xcbitcXHRcXHRwY2lfV0FSTihkZXYsIDEsIFxcXCJEZXN0cm95aW5nIGluY29taW5nLXByZXNlcnZlZCBkZXZpY2UhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cGNpX2xpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZygpO1xcbitcXHR9XFxuK31cXG4rXFxuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rXFx0Z3VhcmQocndzZW1fd3JpdGUpKFxcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7XFxuK1xcdGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5mcm96ZW4gPSAxO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX2ZpbmlzaF9kZXZpY2Uoc3RydWN0IHBjaV9zZXIgKnNlciwgc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRpZiAoIWRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZykge1xcbitcXHRcXHRwY2lfd2FybihkZXYsIFxcXCJDYW5ub3QgZmluaXNoIHByZXNlcnZpbmcgYW4gdW5wcmVzZXJ2ZWQgZGV2aWNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VsaXZldXBkYXRlLmluY29taW5nLVxcdTAwM2VyZWZjb3VudCkge1xcbitcXHRcXHRwY2lfV0FSTihkZXYsIDEsIFxcXCJQcmVzZXJ2ZWQgZGV2aWNlIGhhcyBhIDAgcmVmY291bnQhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERlY3JlbWVudCB0aGUgcmVmY291bnQgc28gdGhpcyBkZXZpY2UgZG9lcyBub3QgZ2V0IHRyZWF0ZWQgYXMgYW5cXG4rXFx0ICogaW5jb21pbmcgZGV2aWNlIGFnYWluLCBlLmcuIGluIGNhc2UgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKClcXG4rXFx0ICogZ2V0cyBjYWxsZWQgYWdhaW4gYmVjYXVzZSB0aGUgZGV2aWNlIGlzIGhvdC1wbHVnZ2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKC0tZGV2LVxcdTAwM2VsaXZldXBkYXRlLmluY29taW5nLVxcdTAwM2VyZWZjb3VudClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwY2lfaW5mbyhkZXYsIFxcXCJEZXZpY2UgaXMgZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiBMaXZlIFVwZGF0ZVxcXFxuXFxcIik7XFxuK1xcdGRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZyA9IE5VTEw7XFxuK1xcdHNlci1cXHUwMDNlbnJfZGV2aWNlcy0tO1xcbitcXHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2hfcGF0aChzdHJ1Y3QgcGNpX3NlciAqc2VyLCBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKmRldjtcXG4rXFxuK1xcdGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7XFxuK1xcdFxcdGlmIChwY2lfbGl2ZXVwZGF0ZV9maW5pc2hfZGV2aWNlKHNlciwgZGV2KSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSAtIEZpbmlzaCB0aGUgcHJlc2VydmF0aW9uIG9mIGEgUENJIGRldmljZVxcbisgKiBAZGV2OiBUaGUgUENJIGRldmljZVxcbisgKlxcbisgKiBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSBub3RpZmllcyB0aGUgUENJIGNvcmUgdGhhdCBhIFBDSSBkZXZpY2UgdGhhdCB3YXNcXG4rICogcHJlc2VydmVkIGFjcm9zcyB0aGUgcHJldmlvdXMgTGl2ZSBVcGRhdGUgaGFzIGZpbmlzaGVkIHBhcnRpY2lwYXRpbmcgaW4gTGl2ZVxcbisgKiBVcGRhdGUuIERyaXZlcnMgbXVzdCBjYWxsIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIGZyb20gdGhlaXIgc3RydWN0XFxuKyAqIGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIGZpbmlzaCgpIGNhbGxiYWNrIHRvIGVuc3VyZSB0aGUgaW5jb21pbmcgc3RydWN0XFxuKyAqIHBjaV9zZXIgaXMgYWxsb2NhdGVkLlxcbisgKlxcbisgKiBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSBhdXRvbWF0aWNhbGx5IGZpbmlzaGVzIGFsbCBicmlkZ2VzIHVwc3RyZWFtIG9mIEBkZXYuXFxuKyAqL1xcbit2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcXG4rXFxuK1xcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xcbitcXG4rXFx0aW5jb21pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKCk7XFxuK1xcdGlmICghaW5jb21pbmcpIHtcXG4rXFx0XFx0cGNpX3dhcm4oZGV2LCBcXFwiQ2Fubm90IGZpbmlzaCBwcmVzZXJ2aW5nIGRldmljZSB3aXRob3V0IGluY29taW5nIEZMQlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cGNpX2xpdmV1cGRhdGVfZmluaXNoX3BhdGgoaW5jb21pbmctXFx1MDAzZXNlciwgZGV2KTtcXG4rXFx0cGNpX2xpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZygpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX2ZpbmlzaCk7XFxuK1xcbit2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rXFx0Z3VhcmQocndzZW1fcmVhZCkoXFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VhY3NfY2FwIHx8ICFkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZGV2LVxcdTAwM2VhY3NfY2FwICsgUENJX0FDU19DVFJMLCBcXHUwMDI2ZGV2LVxcdTAwM2VsaXZldXBkYXRlLmFjc19jdHJsKTtcXG4rfVxcbitcXG4raW50IHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHR1MTYgYWNzX2N0cmwgPSBkZXYtXFx1MDAzZWxpdmV1cGRhdGUuYWNzX2N0cmw7XFxuK1xcdHUxNiBhY3NfY2FwID0gZGV2LVxcdTAwM2VhY3NfY2FwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIGxpdmV1cGRhdGUud2FzX3ByZXNlcnZlZCBpbnN0ZWFkIG9mIGxpdmV1cGRhdGUuaW5jb21pbmcgc2luY2UgdGhlXFxuK1xcdCAqIGRldmljZSdzIEFDUyBjb250cm9scyBzaG91bGQgbm90IGNoYW5nZSBldmVuIGFmdGVyIHRoZSBkZXZpY2UgaXNcXG4rXFx0ICogZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiB0aGUgTGl2ZSBVcGRhdGUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWRldi1cXHUwMDNlbGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBwcmV2aW91cyBrZXJuZWwgc2hvdWxkIG5vdCBoYXZlIHByZXNlcnZlZCBhbnkgZGV2aWNlcyB0aGF0XFxuK1xcdCAqIHJlcXVpcmUgZGV2aWNlLXNwZWNpZmljIHF1aXJrcyB0byBlbmFibGUgQUNTLCBidXQgaWYgc3VjaCBhIGRldmljZSBpc1xcbitcXHQgKiBkZXRlY3RlZCAoZS5nLiBuZXcgZGV2aWNlLXNwZWNpZmljIEFDUyBxdWlyayBpbiB0aGUgY3VycmVudCBrZXJuZWwpLFxcbitcXHQgKiBsb2cgYSBiaWcgd2FybmluZyBhbmQgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgZW5hYmxlIEFDUyBwYXRoLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHtcXG4rXFx0XFx0cGNpX3dhcm4oZGV2LCBcXFwiRGV2aWNlLXNwZWNpZmljIHF1aXJrIHJlcXVpcmVkIHRvIGVuYWJsZSBBQ1MhXFxcXG5cXFwiKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKHRydWUpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGFjc19jYXApXFxuK1xcdFxcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGFjc19jYXAgKyBQQ0lfQUNTX0NUUkwsIGFjc19jdHJsKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHUxNiB2YWw7XFxuK1xcbitcXHRndWFyZChyd3NlbV9yZWFkKShcXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xcbitcXG4rXFx0aWYgKCFkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChkZXYsIFBDSV9FWFBfREVWQ1RMMiwgXFx1MDAyNnZhbCk7XFxuK1xcdGRldi1cXHUwMDNlYXJpX2VuYWJsZWQgPSAhISh2YWwgXFx1MDAyNiBQQ0lfRVhQX0RFVkNUTDJfQVJJKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfb3V0Z29pbmcoc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRndWFyZChyd3NlbV9yZWFkKShcXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xcbitcXHRwY2lfV0FSTl9PTkNFKGRldiwgIWRldi1cXHUwMDNlbGl2ZXVwZGF0ZS5mcm96ZW4sIFxcXCJQcmVzZXJ2YXRpb24gc3RhdHVzIGlzIHVuc3RhYmxlIVxcXFxuXFxcIik7XFxuK1xcdHJldHVybiBkZXYtXFx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmc7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZygpIC0gQ2hlY2sgaWYgYSBkZXZpY2UgaXMgaW5jb21pbmctcHJlc2VydmVkXFxuKyAqIEBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIGNoZWNrXFxuKyAqXFxuKyAqIENoZWNrIGlmIGEgZGV2aWNlIHdhcyBwcmVzZXJ2ZWQgYWNyb3NzIExpdmUgVXBkYXRlIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwsXFxuKyAqIGkuZS4gdGhlIGRldmljZSBpcyBpbmNvbWluZy1wcmVzZXJ2ZWQuIE5vdGUgdGhhdCBhIGRldmljZSBpcyBvbmx5IGNvbnNpZGVyZWRcXG4rICogaW5jb21pbmctcHJlc2VydmVkIHByaW9yIHRvIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpLiBJdCBpcyB1cCB0byBkcml2ZXJzIHRvXFxuKyAqIHN5bmNocm9uaXplIHVzYWdlIG9mIHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKCkgd2l0aCB0aGVpciBvd24gY2FsbCB0b1xcbisgKiBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSB0byBhdm9pZCBhY3Rpbmcgb24gc3RhbGUgZGF0YS5cXG4rICpcXG4rICogUmV0dXJuczogVHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGluY29taW5nLXByZXNlcnZlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbisgKi9cXG4rYm9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7XFxuK1xcdHJldHVybiBkZXYtXFx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmc7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcpO1xcbitcXG4rLyoqXFxuKyAqIHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYigpIC0gUmVnaXN0ZXIgYSBmaWxlIGhhbmRsZXIgd2l0aCB0aGUgUENJIGNvcmVcXG4rICogQGZoOiBUaGUgZmlsZSBoYW5kbGVyIHRvIHJlZ2lzdGVyLlxcbisgKlxcbisgKiBEcml2ZXJzIHNob3VsZCBjYWxsIHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYigpIHRvIHJlZ2lzdGVyIHRoZWlyXFxuKyAqIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciB3aXRoIHRoZSBQQ0kgY29yZS4gVGhpcyBlbmFibGVzIHRoZSBQQ0kgY29yZVxcbisgKiB0byBhbGxvY2F0ZSBpdHMgb3V0Z29pbmcgc3RydWN0IHBjaV9zZXIgd2hlbmV2ZXIgdGhlIGZpcnN0IGRldmljZSBpc1xcbisgKiBwcmVzZXJ2ZWQsIGFuZCBmcmVlIGl0IHdoZW4gdGhlIGxhc3QgZGV2aWNlIGlzIHVucHJlc2VydmVkLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcXG4re1xcbitcXHRwcl9kZWJ1ZyhcXFwiUmVnaXN0ZXJpbmcgZmlsZSBoYW5kbGVyIFxcXFxcXFwiJXNcXFxcXFxcIlxcXFxuXFxcIiwgZmgtXFx1MDAzZWNvbXBhdGlibGUpO1xcbitcXHRyZXR1cm4gbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoZmgsIFxcdTAwMjZwY2lfbGl2ZXVwZGF0ZV9mbGIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYik7XFxuK1xcbisvKipcXG4rICogcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoKSAtIFVucmVnaXN0ZXIgYSBmaWxlIGhhbmRsZXIgd2l0aCB0aGUgUENJIGNvcmVcXG4rICogQGZoOiBUaGUgZmlsZSBoYW5kbGVyIHRvIHVucmVnaXN0ZXIuXFxuKyAqL1xcbit2b2lkIHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXFxuK3tcXG4rXFx0cHJfZGVidWcoXFxcIlVucmVnaXN0ZXJpbmcgZmlsZSBoYW5kbGVyIFxcXFxcXFwiJXNcXFxcXFxcIlxcXFxuXFxcIiwgZmgtXFx1MDAzZWNvbXBhdGlibGUpO1xcbitcXHRsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKGZoLCBcXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaCBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIyNjY0MDZhYWFjODBkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaFxcbkBAIC0wLDAgKzEsNjggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogUENJIExpdmUgVXBkYXRlIHN1cHBvcnQgKGNvcmUgQVBJKVxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIEdvb2dsZSBMTEMuXFxuKyAqIERhdmlkIE1hdGxhY2sgXFx1MDAzY2RtYXRsYWNrQGdvb2dsZS5jb21cXHUwMDNlXFxuKyAqL1xcbisjaWZuZGVmIERSSVZFUlNfUENJX0xJVkVVUERBVEVfSFxcbisjZGVmaW5lIERSSVZFUlNfUENJX0xJVkVVUERBVEVfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbitcXG4rI2lmZGVmIENPTkZJR19QQ0lfTElWRVVQREFURVxcbit2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV9mcmVlemUoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuK2Jvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgaW50IHBhc3MpO1xcbit2b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcyk7XFxuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfaW5pdF9hY3Moc3RydWN0IHBjaV9kZXYgKmRldik7XFxuK2ludCBwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbitpbnQgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4rYm9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9mcmVlemUoc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBpbnQgcGFzcylcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBhc3MpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNlbmRpZiAvKiBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jXFxuaW5kZXggZjM2Nzc4ZTYyYWMxYTUuLjQ3Y2IzZGNhYTkyNzgyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xcbkBAIC0yMSw2ICsyMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hY3BpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtbWFwLW9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tbXUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImxpdmV1cGRhdGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInBjaS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicGNpZS9wb3J0ZHJ2LmhcXFwiXFxuIFxcbkBAIC01MzYsNiArNTM3LDcgQEAgc3RhdGljIHZvaWQgcGNpX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpO1xcbiBcXHRzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2ID0gcGNpX2Rldi1cXHUwMDNlZHJpdmVyO1xcbiBcXG4rXFx0cGNpX2xpdmV1cGRhdGVfZnJlZXplKHBjaV9kZXYpO1xcbiBcXHRwbV9ydW50aW1lX3Jlc3VtZShkZXYpO1xcbiBcXG4gXFx0aWYgKGRydiBcXHUwMDI2XFx1MDAyNiBkcnYtXFx1MDAzZXNodXRkb3duKVxcbkBAIC01NDQsMTEgKzU0NiwxNCBAQCBzdGF0aWMgdm9pZCBwY2lfZGV2aWNlX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0LypcXG4gXFx0ICogSWYgdGhpcyBpcyBhIGtleGVjIHJlYm9vdCwgdHVybiBvZmYgQnVzIE1hc3RlciBiaXQgb24gdGhlXFxuIFxcdCAqIGRldmljZSB0byB0ZWxsIGl0IHRvIG5vdCBjb250aW51ZSB0byBkbyBETUEuIERvbid0IHRvdWNoXFxuLVxcdCAqIGRldmljZXMgaW4gRDNjb2xkIG9yIHVua25vd24gc3RhdGVzLlxcbitcXHQgKiBkZXZpY2VzIGJlaW5nIHByZXNlcnZlZCBmb3IgTGl2ZSBVcGRhdGUgb3IgaW4gRDNjb2xkIG9yXFxuK1xcdCAqIHVua25vd24gc3RhdGVzLlxcbitcXHQgKlxcbiBcXHQgKiBJZiBpdCBpcyBub3QgYSBrZXhlYyByZWJvb3QsIGZpcm13YXJlIHdpbGwgaGl0IHRoZSBQQ0lcXG4gXFx0ICogZGV2aWNlcyB3aXRoIGJpZyBoYW1tZXIgYW5kIHN0b3AgdGhlaXIgRE1BIGFueSB3YXkuXFxuIFxcdCAqL1xcbi1cXHRpZiAoa2V4ZWNfaW5fcHJvZ3Jlc3MgXFx1MDAyNlxcdTAwMjYgKHBjaV9kZXYtXFx1MDAzZWN1cnJlbnRfc3RhdGUgXFx1MDAzYz0gUENJX0QzaG90KSlcXG4rXFx0aWYgKGtleGVjX2luX3Byb2dyZXNzIFxcdTAwMjZcXHUwMDI2ICFwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhwY2lfZGV2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGNpX2Rldi1cXHUwMDNlY3VycmVudF9zdGF0ZSBcXHUwMDNjPSBQQ0lfRDNob3QpXFxuIFxcdFxcdHBjaV9jbGVhcl9tYXN0ZXIocGNpX2Rldik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmNcXG5pbmRleCA3N2IxN2IxM2VlNjE1NC4uZTBjMTMzYjY2YTM1OTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLmNcXG4rKysgYi9kcml2ZXJzL3BjaS9wY2kuY1xcbkBAIC0zNCw2ICszNCw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdXNwZW5kLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwibGl2ZXVwZGF0ZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicGNpLmhcXFwiXFxuIFxcbiBERUZJTkVfTVVURVgocGNpX3Nsb3RfbXV0ZXgpO1xcbkBAIC0xMDA4LDYgKzEwMTAsOSBAQCB2b2lkIHBjaV9lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuIFxcdGJvb2wgZW5hYmxlX2FjcyA9IGZhbHNlO1xcbiBcXHRpbnQgcG9zO1xcbiBcXG4rXFx0aWYgKCFwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzKGRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qIElmIGFuIGlvbW11IGlzIHByZXNlbnQgd2Ugc3RhcnQgd2l0aCBrZXJuZWwgZGVmYXVsdCBjYXBzICovXFxuIFxcdGlmIChwY2lfYWNzX2VuYWJsZSkge1xcbiBcXHRcXHRpZiAocGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpXFxuQEAgLTM1MjMsNyArMzUyOCw3IEBAIHZvaWQgcGNpX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldilcXG4gXFx0dTMyIGNhcDtcXG4gXFx0c3RydWN0IHBjaV9kZXYgKmJyaWRnZTtcXG4gXFxuLVxcdGlmIChwY2llX2FyaV9kaXNhYmxlZCB8fCAhcGNpX2lzX3BjaWUoZGV2KSB8fCBkZXYtXFx1MDAzZWRldmZuKVxcbitcXHRpZiAoIXBjaV9pc19wY2llKGRldikgfHwgZGV2LVxcdTAwM2VkZXZmbilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0YnJpZGdlID0gZGV2LVxcdTAwM2VidXMtXFx1MDAzZXNlbGY7XFxuQEAgLTM1MzQsNiArMzUzOSwxMiBAQCB2b2lkIHBjaV9jb25maWd1cmVfYXJpKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuIFxcdGlmICghKGNhcCBcXHUwMDI2IFBDSV9FWFBfREVWQ0FQMl9BUkkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRpZiAoIXBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkoYnJpZGdlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHBjaWVfYXJpX2Rpc2FibGVkKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAocGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9BUkkpKSB7XFxuIFxcdFxcdHBjaWVfY2FwYWJpbGl0eV9zZXRfd29yZChicmlkZ2UsIFBDSV9FWFBfREVWQ1RMMixcXG4gXFx0XFx0XFx0XFx0XFx0IFBDSV9FWFBfREVWQ1RMMl9BUkkpO1xcbkBAIC0zNjg5LDYgKzM3MDAsNyBAQCB2b2lkIHBjaV9hY3NfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXG4gXFx0cGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfQUNTX0NBUCwgXFx1MDAyNmRldi1cXHUwMDNlYWNzX2NhcGFiaWxpdGllcyk7XFxuIFxcdHBjaV9kaXNhYmxlX2Jyb2tlbl9hY3NfY2FwKGRldik7XFxuK1xcdHBjaV9saXZldXBkYXRlX2luaXRfYWNzKGRldik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oXFxuaW5kZXggNDQ2OWUxYTc3ZjNjMTMuLjk4OGExOGIzMjA0YWY1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oXFxuKysrIGIvZHJpdmVycy9wY2kvcGNpLmhcXG5AQCAtMTA0Nyw2ICsxMDQ3LDcgQEAgdm9pZCBwY2lfYWNzX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIHZvaWQgcGNpX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldik7XFxuICNpZmRlZiBDT05GSUdfUENJX1FVSVJLU1xcbiBpbnQgcGNpX2Rldl9zcGVjaWZpY19hY3NfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgYWNzX2ZsYWdzKTtcXG4rYm9vbCBwY2lfbmVlZF9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gaW50IHBjaV9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gaW50IHBjaV9kZXZfc3BlY2lmaWNfZGlzYWJsZV9hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIHZvaWQgcGNpX2Rpc2FibGVfYnJva2VuX2Fjc19jYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbkBAIC0xMDU3LDYgKzEwNTgsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcGNpX2Rldl9zcGVjaWZpY19hY3NfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbiB7XFxuIFxcdHJldHVybiAtRU5PVFRZO1xcbiB9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfbmVlZF9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbiBzdGF0aWMgaW5saW5lIGludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcXG4ge1xcbiBcXHRyZXR1cm4gLUVOT1RUWTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmNcXG5pbmRleCBkZDBhYmJjNjNlMThkMS4uMTY1OTczYmM5MmFhYmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuY1xcbisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmNcXG5AQCAtMjQsNiArMjQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fcnVudGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImxpdmV1cGRhdGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInBjaS5oXFxcIlxcbiBcXG4gc3RhdGljIHN0cnVjdCByZXNvdXJjZSBidXNuX3Jlc291cmNlID0ge1xcbkBAIC0xMzk2LDYgKzEzOTcsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcXG4gXFx0XFx0XFx0XFx0ICBpbnQgbWF4LCB1bnNpZ25lZCBpbnQgYXZhaWxhYmxlX2J1c2VzLFxcbiBcXHRcXHRcXHRcXHQgIGludCBwYXNzKVxcbiB7XFxuK1xcdGJvb2wgbGl2ZXVwZGF0ZSwgYXNzaWduX25ld19idXNlcyA9IHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKTtcXG4gXFx0c3RydWN0IHBjaV9idXMgKmNoaWxkO1xcbiBcXHR1MzIgYnVzZXM7XFxuIFxcdHUxNiBiY3RsO1xcbkBAIC0xNDA1LDYgKzE0MDcsMTAgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuIFxcdHU4IGZpeGVkX3NlYywgZml4ZWRfc3ViO1xcbiBcXHRpbnQgbmV4dF9idXNucjtcXG4gXFxuK1xcdGxpdmV1cGRhdGUgPSBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbihidXMsIGRldiwgcGFzcyk7XFxuK1xcdGlmIChsaXZldXBkYXRlKVxcbitcXHRcXHRhc3NpZ25fbmV3X2J1c2VzID0gZmFsc2U7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBNYWtlIHN1cmUgdGhlIGJyaWRnZSBpcyBwb3dlcmVkIG9uIHRvIGJlIGFibGUgdG8gYWNjZXNzIGNvbmZpZ1xcbiBcXHQgKiBzcGFjZSBvZiBkZXZpY2VzIGJlbG93IGl0LlxcbkBAIC0xNDQ4LDggKzE0NTQsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICgoc2Vjb25kYXJ5IHx8IHN1Ym9yZGluYXRlKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIXBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSBcXHUwMDI2XFx1MDAyNiAhYnJva2VuKSB7XFxuK1xcdGlmICgoc2Vjb25kYXJ5IHx8IHN1Ym9yZGluYXRlKSBcXHUwMDI2XFx1MDAyNiAhYXNzaWduX25ld19idXNlcyBcXHUwMDI2XFx1MDAyNiAhYnJva2VuKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBjbWF4LCBidXNlcztcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTE0OTEsOCArMTQ5Niw3IEBAIHN0YXRpYyBpbnQgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbiBcXHRcXHQgKiBkbyBpbiB0aGUgc2Vjb25kIHBhc3MuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIXBhc3MpIHtcXG4tXFx0XFx0XFx0aWYgKHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSB8fCBicm9rZW4pXFxuLVxcbitcXHRcXHRcXHRpZiAoYXNzaWduX25ld19idXNlcyB8fCBicm9rZW4pXFxuIFxcdFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdFxcdCAqIFRlbXBvcmFyaWx5IGRpc2FibGUgZm9yd2FyZGluZyBvZiB0aGVcXG4gXFx0XFx0XFx0XFx0ICogY29uZmlndXJhdGlvbiBjeWNsZXMgb24gYWxsIGJyaWRnZXMgaW5cXG5AQCAtMTUwNiw2ICsxNTEwLDExIEBAIHN0YXRpYyBpbnQgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0aWYgKGxpdmV1cGRhdGUpIHtcXG4rXFx0XFx0XFx0cGNpX2VycihkZXYsIFxcXCJDYW5ub3QgcmVjb25maWd1cmUgYnJpZGdlIGR1cmluZyBMaXZlIFVwZGF0ZSwgc2tpcHBpbmdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LyogQ2xlYXIgZXJyb3JzICovXFxuIFxcdFxcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9TVEFUVVMsIDB4ZmZmZik7XFxuIFxcbkBAIC0xNTY2LDYgKzE1NzUsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcXG4gXFx0cGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0JSSURHRV9DT05UUk9MLCBiY3RsKTtcXG4gXFxuIFxcdHBtX3J1bnRpbWVfcHV0KFxcdTAwMjZkZXYtXFx1MDAzZWRldik7XFxuK1xcdHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChkZXYsIHBhc3MpO1xcbiBcXG4gXFx0cmV0dXJuIG1heDtcXG4gfVxcbkBAIC0yMDY0LDYgKzIwNzQsOCBAQCBpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXHRpZiAocGNpX2Vhcmx5X2R1bXApXFxuIFxcdFxcdGVhcmx5X2R1bXBfcGNpX2RldmljZShkZXYpO1xcbiBcXG4rXFx0cGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKGRldik7XFxuK1xcbiBcXHQvKiBOZWVkIHRvIGhhdmUgZGV2LVxcdTAwM2VjbGFzcyByZWFkeSAqL1xcbiBcXHRkZXYtXFx1MDAzZWNmZ19zaXplID0gcGNpX2NmZ19zcGFjZV9zaXplKGRldik7XFxuIFxcbkBAIC0yMTg3LDYgKzIxOTksNyBAQCBpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXHRkZWZhdWx0OlxcdFxcdFxcdFxcdCAgICAvKiB1bmtub3duIGhlYWRlciAqL1xcbiBcXHRcXHRwY2lfZXJyKGRldiwgXFxcInVua25vd24gaGVhZGVyIHR5cGUgJTAyeCwgaWdub3JpbmcgZGV2aWNlXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRkZXYtXFx1MDAzZWhkcl90eXBlKTtcXG4rXFx0XFx0cGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2UoZGV2KTtcXG4gXFx0XFx0cGNpX3JlbGVhc2Vfb2Zfbm9kZShkZXYpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuQEAgLTI0ODUsNiArMjQ5OCw3IEBAIHN0YXRpYyB2b2lkIHBjaV9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcbiBcXHRwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpO1xcbiBcXHRwY2lfcmVsZWFzZV9jYXBhYmlsaXRpZXMocGNpX2Rldik7XFxuK1xcdHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHBjaV9kZXYpO1xcbiBcXHRwY2lfcmVsZWFzZV9vZl9ub2RlKHBjaV9kZXYpO1xcbiBcXHRwY2liaW9zX3JlbGVhc2VfZGV2aWNlKHBjaV9kZXYpO1xcbiBcXHRwY2lfYnVzX3B1dChwY2lfZGV2LVxcdTAwM2VidXMpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jXFxuaW5kZXggYjA5ZjI3Zjc4NDZmY2QuLjk5YjgxOWYzOGU0OWMyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jXFxuKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmNcXG5AQCAtNTM3NCw5ICs1Mzc0LDYgQEAgc3RhdGljIHZvaWQgcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9ycF9tcGNfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuICAqL1xcbiBzdGF0aWMgaW50IHBjaV9xdWlya19lbmFibGVfaW50ZWxfcGNoX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiB7XFxuLVxcdGlmICghcGNpX3F1aXJrX2ludGVsX3BjaF9hY3NfbWF0Y2goZGV2KSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuLVxcbiBcXHRpZiAocGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9scGNfYWNzKGRldikpIHtcXG4gXFx0XFx0cGNpX3dhcm4oZGV2LCBcXFwiRmFpbGVkIHRvIGVuYWJsZSBJbnRlbCBQQ0ggQUNTIHF1aXJrXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTUzOTYsOSArNTM5Myw2IEBAIHN0YXRpYyBpbnQgcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9zcHRfcGNoX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXHRpbnQgcG9zO1xcbiBcXHR1MzIgY2FwLCBjdHJsO1xcbiBcXG4tXFx0aWYgKCFwY2lfcXVpcmtfaW50ZWxfc3B0X3BjaF9hY3NfbWF0Y2goZGV2KSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuLVxcbiBcXHRwb3MgPSBkZXYtXFx1MDAzZWFjc19jYXA7XFxuIFxcdGlmICghcG9zKVxcbiBcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG5AQCAtNTQyNiw5ICs1NDIwLDYgQEAgc3RhdGljIGludCBwY2lfcXVpcmtfZGlzYWJsZV9pbnRlbF9zcHRfcGNoX2Fjc19yZWRpcihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXHRpbnQgcG9zO1xcbiBcXHR1MzIgY2FwLCBjdHJsO1xcbiBcXG4tXFx0aWYgKCFwY2lfcXVpcmtfaW50ZWxfc3B0X3BjaF9hY3NfbWF0Y2goZGV2KSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuLVxcbiBcXHRwb3MgPSBkZXYtXFx1MDAzZWFjc19jYXA7XFxuIFxcdGlmICghcG9zKVxcbiBcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG5AQCAtNTQ0OCw1NiArNTQzOSw2MyBAQCBzdGF0aWMgaW50IHBjaV9xdWlya19kaXNhYmxlX2ludGVsX3NwdF9wY2hfYWNzX3JlZGlyKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzIHtcXG4gXFx0dTE2IHZlbmRvcjtcXG4gXFx0dTE2IGRldmljZTtcXG4rXFx0Ym9vbCAoKm1hdGNoKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gXFx0aW50ICgqZW5hYmxlX2Fjcykoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIFxcdGludCAoKmRpc2FibGVfYWNzX3JlZGlyKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gfSBwY2lfZGV2X2Fjc19vcHNbXSA9IHtcXG4gXFx0eyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfQU5ZX0lELFxcbitcXHQgICAgLm1hdGNoID0gcGNpX3F1aXJrX2ludGVsX3BjaF9hY3NfbWF0Y2gsXFxuIFxcdCAgICAuZW5hYmxlX2FjcyA9IHBjaV9xdWlya19lbmFibGVfaW50ZWxfcGNoX2FjcyxcXG4gXFx0fSxcXG4gXFx0eyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfQU5ZX0lELFxcbitcXHQgICAgLm1hdGNoID0gcGNpX3F1aXJrX2ludGVsX3NwdF9wY2hfYWNzX21hdGNoLFxcbiBcXHQgICAgLmVuYWJsZV9hY3MgPSBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3NwdF9wY2hfYWNzLFxcbiBcXHQgICAgLmRpc2FibGVfYWNzX3JlZGlyID0gcGNpX3F1aXJrX2Rpc2FibGVfaW50ZWxfc3B0X3BjaF9hY3NfcmVkaXIsXFxuIFxcdH0sXFxuIH07XFxuIFxcbi1pbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwY2lfZGV2X2Fjc19vcHNfZ2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcDtcXG4tXFx0aW50IGksIHJldDtcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwY2lfZGV2X2Fjc19vcHMpOyBpKyspIHtcXG4gXFx0XFx0cCA9IFxcdTAwMjZwY2lfZGV2X2Fjc19vcHNbaV07XFxuIFxcdFxcdGlmICgocC1cXHUwMDNldmVuZG9yID09IGRldi1cXHUwMDNldmVuZG9yIHx8XFxuIFxcdFxcdCAgICAgcC1cXHUwMDNldmVuZG9yID09ICh1MTYpUENJX0FOWV9JRCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIChwLVxcdTAwM2VkZXZpY2UgPT0gZGV2LVxcdTAwM2VkZXZpY2UgfHxcXG4tXFx0XFx0ICAgICBwLVxcdTAwM2VkZXZpY2UgPT0gKHUxNilQQ0lfQU5ZX0lEKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgcC1cXHUwMDNlZW5hYmxlX2Fjcykge1xcbi1cXHRcXHRcXHRyZXQgPSBwLVxcdTAwM2VlbmFibGVfYWNzKGRldik7XFxuLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0ICAgICBwLVxcdTAwM2VkZXZpY2UgPT0gKHUxNilQQ0lfQU5ZX0lEKSkge1xcbitcXHRcXHRcXHRpZiAoIXAtXFx1MDAzZW1hdGNoIHx8IHAtXFx1MDAzZW1hdGNoKGRldikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBwO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitib29sIHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcCA9IHBjaV9kZXZfYWNzX29wc19nZXQoZGV2KTtcXG4rXFxuK1xcdHJldHVybiBwIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZWVuYWJsZV9hY3M7XFxuK31cXG4rXFxuK2ludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpO1xcbitcXG4rXFx0aWYgKHAgXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNlZW5hYmxlX2FjcylcXG4rXFx0XFx0cmV0dXJuIHAtXFx1MDAzZWVuYWJsZV9hY3MoZGV2KTtcXG4rXFxuIFxcdHJldHVybiAtRU5PVFRZO1xcbiB9XFxuIFxcbiBpbnQgcGNpX2Rldl9zcGVjaWZpY19kaXNhYmxlX2Fjc19yZWRpcihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiB7XFxuLVxcdGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnA7XFxuLVxcdGludCBpLCByZXQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnAgPSBwY2lfZGV2X2Fjc19vcHNfZ2V0KGRldik7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwY2lfZGV2X2Fjc19vcHMpOyBpKyspIHtcXG4tXFx0XFx0cCA9IFxcdTAwMjZwY2lfZGV2X2Fjc19vcHNbaV07XFxuLVxcdFxcdGlmICgocC1cXHUwMDNldmVuZG9yID09IGRldi1cXHUwMDNldmVuZG9yIHx8XFxuLVxcdFxcdCAgICAgcC1cXHUwMDNldmVuZG9yID09ICh1MTYpUENJX0FOWV9JRCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIChwLVxcdTAwM2VkZXZpY2UgPT0gZGV2LVxcdTAwM2VkZXZpY2UgfHxcXG4tXFx0XFx0ICAgICBwLVxcdTAwM2VkZXZpY2UgPT0gKHUxNilQQ0lfQU5ZX0lEKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgcC1cXHUwMDNlZGlzYWJsZV9hY3NfcmVkaXIpIHtcXG4tXFx0XFx0XFx0cmV0ID0gcC1cXHUwMDNlZGlzYWJsZV9hY3NfcmVkaXIoZGV2KTtcXG4tXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0aWYgKHAgXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNlZGlzYWJsZV9hY3NfcmVkaXIpXFxuK1xcdFxcdHJldHVybiBwLVxcdTAwM2VkaXNhYmxlX2Fjc19yZWRpcihkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIC1FTk9UVFk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9raG8vYWJpL3BjaS5oIGIvaW5jbHVkZS9saW51eC9raG8vYWJpL3BjaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWNmMWIzOGRmZjAyNGFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9saW51eC9raG8vYWJpL3BjaS5oXFxuQEAgLTAsMCArMSw1OSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbitcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2LCBHb29nbGUgTExDLlxcbisgKiBEYXZpZCBNYXRsYWNrIFxcdTAwM2NkbWF0bGFja0Bnb29nbGUuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX0xJTlVYX0tIT19BQklfUENJX0hcXG4rI2RlZmluZSBfTElOVVhfS0hPX0FCSV9QQ0lfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogRE9DOiBQQ0kgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgTGl2ZSBVcGRhdGUgQUJJXFxuKyAqXFxuKyAqIFRoaXMgaGVhZGVyIGRlZmluZXMgdGhlIEFCSSBmb3IgcHJlc2VydmluZyBjb3JlIFBDSSBzdGF0ZSBhY3Jvc3Mga2V4ZWMgdXNpbmdcXG4rICogTGl2ZSBVcGRhdGUgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgZGF0YS5cXG4rICpcXG4rICogVGhpcyBpbnRlcmZhY2UgaXMgYSBjb250cmFjdC4gQW55IG1vZGlmaWNhdGlvbiB0byBhbnkgb2YgdGhlIHNlcmlhbGl6YXRpb25cXG4rICogc3RydWN0cyBkZWZpbmVkIGhlcmUgY29uc3RpdHV0ZXMgYSBicmVha2luZyBjaGFuZ2UuIFN1Y2ggY2hhbmdlcyByZXF1aXJlXFxuKyAqIGluY3JlbWVudGluZyB0aGUgdmVyc2lvbiBudW1iZXIgaW4gdGhlIFBDSV9MVU9fRkxCX0NPTVBBVElCTEUgc3RyaW5nLlxcbisgKi9cXG4rXFxuKyNkZWZpbmUgUENJX0xVT19GTEJfQ09NUEFUSUJMRSBcXFwicGNpLXYyXFxcIlxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwY2lfZGV2X3NlciAtIFNlcmlhbGl6ZWQgc3RhdGUgYWJvdXQgYSBzaW5nbGUgUENJIGRldmljZS5cXG4rICpcXG4rICogQGRvbWFpbjogVGhlIGRldmljZSdzIFBDSSBkb21haW4gbnVtYmVyIChzZWdtZW50KS5cXG4rICogQGJkZjogVGhlIGRldmljZSdzIFBDSSBidXMsIGRldmljZSwgYW5kIGZ1bmN0aW9uIG51bWJlci5cXG4rICogQHJlZmNvdW50OiBSZWZlcmVuY2UgY291bnQgdXNlZCBieSB0aGUgUENJIGNvcmUgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGl0XFxuKyAqICAgICAgICAgICAgaXMgZG9uZSB1c2luZyBhIGRldmljZSdzIHN0cnVjdCBwY2lfZGV2X3Nlci4gVGhlIHZhbHVlIG9mIHRoZVxcbisgKiAgICAgICAgICAgIHJlZmNvdW50IGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgcHJlc2VydmVkIGRldmljZXMgYXQgb3IgYmVsb3dcXG4rICogICAgICAgICAgICBpdCBpbiB0aGUgUENJIGhpZXJhcmNoeSB3aGVuIHRoZSBzdHJ1Y3QgcGNpX2Rldl9zZXIgaXMgaW4gdXNlLCBhbmRcXG4rICogICAgICAgICAgICAwIG90aGVyd2lzZS5cXG4rICovXFxuK3N0cnVjdCBwY2lfZGV2X3NlciB7XFxuK1xcdHUzMiBkb21haW47XFxuK1xcdHUxNiBiZGY7XFxuK1xcdHUxNiByZWZjb3VudDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGNpX3NlciAtIFBDSSBTdWJzeXN0ZW0gTGl2ZSBVcGRhdGUgU3RhdGVcXG4rICpcXG4rICogVGhpcyBzdHJ1Y3QgdHJhY2tzIHN0YXRlIGFib3V0IGFsbCBkZXZpY2VzIHRoYXQgYXJlIGJlaW5nIHByZXNlcnZlZCBhY3Jvc3NcXG4rICogYSBMaXZlIFVwZGF0ZSBmb3IgdGhlIG5leHQga2VybmVsLlxcbisgKlxcbisgKiBAbnJfZGV2aWNlczogVGhlIG51bWJlciBvZiBkZXZpY2VzIHRoYXQgd2VyZSBwcmVzZXJ2ZWQuXFxuKyAqIEBkZXZpY2VzOiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBLSE8gYmxvY2sgY29udGFpbmluZyBwY2lfZGV2X3Nlci5cXG4rICovXFxuK3N0cnVjdCBwY2lfc2VyIHtcXG4rXFx0dTMyIG5yX2RldmljZXM7XFxuK1xcdHU2NCBkZXZpY2VzO1xcbit9IF9fcGFja2VkO1xcbitcXG4rI2VuZGlmIC8qIF9MSU5VWF9LSE9fQUJJX1BDSV9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuaW5kZXggZWJiNWI5ZDc2MzYwOWUuLmI0MWRkNTcyYTJkNmIzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuQEAgLTQzLDYgKzQzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvcGNpLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpX2lkcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpX2xpdmV1cGRhdGUuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgUENJX1NUQVRVU19FUlJPUl9CSVRTIChQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSAgfCBcXFxcXFxuIFxcdFxcdFxcdCAgICAgICBQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IgfCBcXFxcXFxuQEAgLTU5Miw2ICs1OTMsOSBAQCBzdHJ1Y3QgcGNpX2RldiB7XFxuIFxcdHU4XFx0XFx0dHBoX21vZGU7XFx0LyogVFBIIG1vZGUgKi9cXG4gXFx0dThcXHRcXHR0cGhfcmVxX3R5cGU7XFx0LyogVFBIIHJlcXVlc3RlciB0eXBlICovXFxuICNlbmRpZlxcbisjaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFXFxuK1xcdHN0cnVjdCBwY2lfbGl2ZXVwZGF0ZSBsaXZldXBkYXRlO1xcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKnBjaV9waHlzZm4oc3RydWN0IHBjaV9kZXYgKmRldilcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfbGl2ZXVwZGF0ZS5oIGIvaW5jbHVkZS9saW51eC9wY2lfbGl2ZXVwZGF0ZS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTUwOTkzNDA1NzU0YmFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2lfbGl2ZXVwZGF0ZS5oXFxuQEAgLTAsMCArMSw3NyBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCAoUHVibGljL0RyaXZlciBBUEkpXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiwgR29vZ2xlIExMQy5cXG4rICogRGF2aWQgTWF0bGFjayBcXHUwMDNjZG1hdGxhY2tAZ29vZ2xlLmNvbVxcdTAwM2VcXG4rICovXFxuKyNpZm5kZWYgTElOVVhfUENJX0xJVkVVUERBVEVfSFxcbisjZGVmaW5lIExJTlVYX1BDSV9MSVZFVVBEQVRFX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9raG8vYWJpL3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGl2ZXVwZGF0ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrX3R5cGVzLmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogc3RydWN0IHBjaV9saXZldXBkYXRlIC0gUENJIExpdmUgVXBkYXRlIHN0YXRlIGZvciBhIHN0cnVjdCBwY2lfZGV2XFxuKyAqIEBvdXRnb2luZzogU3RhdGUgcHJlc2VydmVkIGZvciB0aGUgbmV4dCBrZXJuZWwuXFxuKyAqIEBpbmNvbWluZzogU3RhdGUgcHJlc2VydmVkIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwuXFxuKyAqIEBhY3NfY3RybDogQUNTIGZlYXR1cmVzIGVzdGFibGlzaGVkIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwuXFxuKyAqIEBpbmhlcml0X2J1c2VzOiBUcnVlIGlmIHRoZSBQQ0kgY29yZSBzaG91bGQgaW5oZXJpdCB0aGUgc2Vjb25kYXJ5IGFuZFxcbisgKiAgICAgICAgICAgICAgICAgc3Vib3JkaW5hdGUgYnVzIG51bWJlcnMgYXNzaWduZWQgdG8gdGhpcyBkZXZpY2UgZHVlIHRvXFxuKyAqICAgICAgICAgICAgICAgICBhbiBvbmdvaW5nIExpdmUgVXBkYXRlLlxcbisgKiBAd2FzX3ByZXNlcnZlZDogVHJ1ZSBpZiB0aGlzIHN0cnVjdCBwY2lfZGV2IHdhcyBwcmVzZXJ2ZWQgYnkgdGhlIHByZXZpb3VzXFxuKyAqICAgICAgICAgICAgICAgICBrZXJuZWwuIFVubGlrZSBAaW5jb21pbmcsIHRoaXMgZmllbGQgaXMgbm90IGNsZWFyZWQgYWZ0ZXJcXG4rICogICAgICAgICAgICAgICAgIHRoZSBkZXZpY2UgaXMgZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiBMaXZlIFVwZGF0ZS5cXG4rICogQGZyb3plbjogVHJ1ZSBpZiB0aGUgb3V0Z29pbmcgcHJlc2VydmF0aW9uIHN0YXR1cyBvZiB0aGlzIGRldmljZSBpcyBmcm96ZW5cXG4rICogICAgICAgICAgYW5kIHRodXMgY2Fubm90IGJlIGNoYW5nZWQuXFxuKyAqL1xcbitzdHJ1Y3QgcGNpX2xpdmV1cGRhdGUge1xcbitcXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKm91dGdvaW5nO1xcbitcXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmluY29taW5nO1xcbitcXHR1MTYgYWNzX2N0cmw7XFxuK1xcdGJvb2wgaW5oZXJpdF9idXNlcztcXG4rXFx0Ym9vbCB3YXNfcHJlc2VydmVkO1xcbitcXHRib29sIGZyb3plbjtcXG4rfTtcXG4rXFxuK3N0cnVjdCBwY2lfZGV2O1xcbitcXG4rI2lmZGVmIENPTkZJR19QQ0lfTElWRVVQREFURVxcbitpbnQgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xcbit2b2lkIHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xcbitpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goc3RydWN0IHBjaV9kZXYgKmRldik7XFxuK2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoc3RydWN0IHBjaV9kZXYgKmRldilcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuKyNlbmRpZiAvKiBMSU5VWF9QQ0lfTElWRVVQREFURV9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE4OjI2OjQwLjgzMjcxMzQ5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyODY4MzQ3MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTElWRVVQREFURVwiLFxuICAgIFwiUENJX0xJVkVVUERBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2VcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9mcmVlemVcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmRcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2luaXRfYWNzXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfZmluaXNoXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGJcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCwgd2hpY2ggbW9kaWZpZXMgY29yZSBQQ0kgZW51bWVyYXRpb24sIHNodXRkb3duLCBhbmQgY2FwYWJpbGl0eSBjb25maWd1cmF0aW9uIHBhdGhzIChlLmcuLCBBQ1MsIEFSSSkuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgUENJIGRldmljZSBwcm9iZSwgcmVtb3ZhbCwgYW5kIHN5c3RlbSBzaHV0ZG93bi9rZXhlYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBwY2lfbGl2ZXVwZGF0ZV8qIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBQQ0kgdG9wb2xvZ2llcyBhbmQgc3RhdGVzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkNmIzMGFiMjc5ZmIwZWYwNTc4N2Q1NmUzM2U1NzQzNmFiNmM4OGU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTg6MjY6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL1BDSS9pbmRleC5yc3RcbmluZGV4IDVkNzIwZDJhNDE1ZTAxLi4yM2ZiNzM3YWM5NjllYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vUENJL2luZGV4LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvaW5kZXgucnN0XG5AQCAtMjAsMyArMjAsNCBAQCBQQ0kgQnVzIFN1YnN5c3RlbVxuICAgIGNvbnRyb2xsZXIvaW5kZXhcbiAgICBib290LWludGVycnVwdHNcbiAgICB0cGhcbisgICBsaXZldXBkYXRlXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvbGl2ZXVwZGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lYmE1NWY4YTkyYWUxMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvbGl2ZXVwZGF0ZS5yc3RcbkBAIC0wLDAgKzEsMjkgQEBcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuK1xuKz09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1BDSSBTdXBwb3J0IGZvciBMaXZlIFVwZGF0ZVxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcbisgICA6ZG9jOiBQQ0kgTGl2ZSBVcGRhdGVcbitcbitEcml2ZXIgQVBJXG4rPT09PT09PT09PVxuK1xuKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcbisgICA6ZXhwb3J0OlxuK1xuK0xpdmUgVXBkYXRlIEFCSVxuKz09PT09PT09PT09PT09PVxuK1xuKy4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmhcbisgICA6ZG9jOiBQQ0kgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgTGl2ZSBVcGRhdGUgQUJJXG4rXG4rLi4ga2VybmVsLWRvYzo6IGluY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxuKyAgIDppbnRlcm5hbDpcbitcbitTZWUgQWxzb1xuKz09PT09PT09XG4rXG4rICogOmRvYzpgL2NvcmUtYXBpL2xpdmV1cGRhdGVgXG4rICogOmRvYzpgL2NvcmUtYXBpL2toby9pbmRleGBcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA0ZjY1YjJhMzc1MjEwMi4uZWQ5ZWVmOGRlNjRjZDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC01MTA1LDcgKzUxMDUsMTEgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHRcdGV4cGxpY2l0bHkgd2hpY2ggb25lcyB0aGV5IGFyZS5cbiBcdFx0YXNzaWduLWJ1c3Nlc1x0W1g4Nl0gQWx3YXlzIGFzc2lnbiBhbGwgUENJIGJ1c1xuIFx0XHRcdFx0bnVtYmVycyBvdXJzZWx2ZXMsIG92ZXJyaWRpbmdcbi1cdFx0XHRcdHdoYXRldmVyIHRoZSBmaXJtd2FyZSBtYXkgaGF2ZSBkb25lLlxuK1x0XHRcdFx0d2hhdGV2ZXIgdGhlIGZpcm13YXJlIG1heSBoYXZlIGRvbmUuIElnbm9yZWRcbitcdFx0XHRcdGR1cmluZyBhIExpdmUgVXBkYXRlLCB3aGVyZSB0aGUga2VybmVsIG11c3RcbitcdFx0XHRcdGluaGVyaXQgdGhlIFBDSSB0b3BvbG9neSAoaW5jbHVkaW5nIGJ1cyBudW1iZXJzKVxuK1x0XHRcdFx0dG8gYXZvaWQgaW50ZXJydXB0aW5nIG9uZ29pbmcgbWVtb3J5XG4rXHRcdFx0XHR0cmFuc2FjdGlvbnMgb2YgcHJlc2VydmVkIGRldmljZXMuXG4gXHRcdHVzZXBpcnFtYXNrXHRbWDg2XSBIb25vciB0aGUgcG9zc2libGUgSVJRIG1hc2sgc3RvcmVkXG4gXHRcdFx0XHRpbiB0aGUgQklPUyAkUElSIHRhYmxlLiBUaGlzIGlzIG5lZWRlZCBvblxuIFx0XHRcdFx0c29tZSBzeXN0ZW1zIHdpdGggYnJva2VuIEJJT1Nlcywgbm90YWJseVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbGl2ZXVwZGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0XG5pbmRleCA1YTI5MmQwZjM3MDY0ZC4uMmJjZTI2NDRlYmEyMjMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpdmV1cGRhdGUucnN0XG5AQCAtMSw1ICsxLDcgQEBcbiAuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuKy4uIF9sdW86XG4rXG4gPT09PT09PT09PT09PT09PT09PT09PT09XG4gTGl2ZSBVcGRhdGUgT3JjaGVzdHJhdG9yXG4gPT09PT09PT09PT09PT09PT09PT09PT09XG5AQCAtMTgsNiArMjAsOCBAQCBMVU8gUHJlc2VydmluZyBGaWxlIERlc2NyaXB0b3JzXG4gLi4ga2VybmVsLWRvYzo6IGtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmNcbiAgICA6ZG9jOiBMVU8gRmlsZSBEZXNjcmlwdG9yc1xuIFxuKy4uIF9mbGI6XG4rXG4gTFVPIEZpbGUgTGlmZWN5Y2xlIEJvdW5kIEdsb2JhbCBEYXRhXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gLi4ga2VybmVsLWRvYzo6IGtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuY1xuQEAgLTcwLDMgKzc0LDQgQEAgU2VlIEFsc29cbiBcbiAtIDpkb2M6YExpdmUgVXBkYXRlIHVBUEkgXHUwMDNjL3VzZXJzcGFjZS1hcGkvbGl2ZXVwZGF0ZVx1MDAzZWBcbiAtIDpkb2M6YC9jb3JlLWFwaS9raG8vaW5kZXhgXG4rLSA6ZG9jOmBQQ0kgXHUwMDNjL1BDSS9saXZldXBkYXRlXHUwMDNlYFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGEzZWQzMzdlODI3ZDg2Li4zNDdjNDM1Y2E0MDQ3YyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTIwODI0LDYgKzIwODI0LDIxIEBAIEw6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4gUzpcdFN1cHBvcnRlZFxuIEY6XHREb2N1bWVudGF0aW9uL1BDSS9wY2ktZXJyb3ItcmVjb3ZlcnkucnN0XG4gXG4rUENJIExJVkUgVVBEQVRFXG4rTTpcdERhdmlkIE1hdGxhY2sgXHUwMDNjZG1hdGxhY2tAZ29vZ2xlLmNvbVx1MDAzZVxuK1I6XHRQYXNoYSBUYXRhc2hpbiBcdTAwM2NwYXNoYS50YXRhc2hpbkBzb2xlZW4uY29tXHUwMDNlXG4rUjpcdE1pa2UgUmFwb3BvcnQgXHUwMDNjcnBwdEBrZXJuZWwub3JnXHUwMDNlXG4rUjpcdFByYXR5dXNoIFlhZGF2IFx1MDAzY3ByYXR5dXNoQGtlcm5lbC5vcmdcdTAwM2VcbitMOlx0a2V4ZWNAbGlzdHMuaW5mcmFkZWFkLm9yZ1xuK0w6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4rUzpcdE1haW50YWluZWRcbitUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saXZldXBkYXRlL2xpbnV4LmdpdFxuK0Y6XHREb2N1bWVudGF0aW9uL1BDSS9saXZldXBkYXRlLnJzdFxuK0Y6XHRkcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcbitGOlx0ZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oXG4rRjpcdGluY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxuK0Y6XHRpbmNsdWRlL2xpbnV4L3BjaV9saXZldXBkYXRlLmhcbitcbiBQQ0kgTVNJIERSSVZFUiBGT1IgQUxURVJBIE1TSSBJUFxuIEw6XHRsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnXG4gUzpcdE9ycGhhblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5pbmRleCAwYzc0MDg1MDliYTI0Yi4uMTZmYmQ0MjEyZTBmNTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5AQCAtMjcxLDYgKzI3MSwyMSBAQCBjb25maWcgVkdBX0FSQl9NQVhfR1BVU1xuIFx0ICBSZXNlcnZlcyBzcGFjZSBpbiB0aGUga2VybmVsIHRvIG1haW50YWluIHJlc291cmNlIGxvY2tpbmcgZm9yXG4gXHQgIG11bHRpcGxlIEdQVVMuICBUaGUgb3ZlcmhlYWQgZm9yIGVhY2ggR1BVIGlzIHZlcnkgc21hbGwuXG4gXG4rY29uZmlnIFBDSV9MSVZFVVBEQVRFXG4rXHRib29sIFwiUENJIExpdmUgVXBkYXRlIFN1cHBvcnRcIlxuK1x0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IExJVkVVUERBVEUgXHUwMDI2XHUwMDI2IDY0QklUIFx1MDAyNlx1MDAyNiAhQ0FSREJVU1xuK1x0aGVscFxuK1x0ICBFbmFibGUgUENJIGNvcmUgc3VwcG9ydCBmb3IgcHJlc2VydmluZyBQQ0kgZGV2aWNlcyBhY3Jvc3MgTGl2ZVxuK1x0ICBVcGRhdGUuIFRoaXMsIGluIGNvbWJpbmF0aW9uIHdpdGggc3VwcG9ydCBpbiBhIGRldmljZSdzIGRyaXZlcixcbitcdCAgZW5hYmxlcyBQQ0kgZGV2aWNlcyB0byBydW4gYW5kIHBlcmZvcm0gbWVtb3J5IHRyYW5zYWN0aW9uc1xuK1x0ICB1bmludGVycnVwdGVkIGR1cmluZyBhIGtleGVjIGZvciBMaXZlIFVwZGF0ZS5cbitcbitcdCAgVGhpcyBvcHRpb24gc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBieSB1c2VycyB3aG8gcGxhbiB0byB1c2UgTGl2ZVxuK1x0ICBVcGRhdGUgZm9yIGtlcm5lbCB1cGdyYWRlcyBhbmQgcmVxdWlyZSBwcmVzZXJ2aW5nIFBDSSBkZXZpY2VzIGR1cmluZ1xuK1x0ICB0aG9zZSB1cGdyYWRlcy5cbitcbitcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbitcbiBzb3VyY2UgXCJkcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWdcIlxuIHNvdXJjZSBcImRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZ1wiXG4gc291cmNlIFwiZHJpdmVycy9wY2kvZW5kcG9pbnQvS2NvbmZpZ1wiXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZVxuaW5kZXggNDFlYmMzYjlhNTE4MjQuLmU4ZDAwM2NiNjc1NzYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlXG5AQCAtMTYsNiArMTYsNyBAQCBvYmotJChDT05GSUdfUFJPQ19GUylcdFx0Kz0gcHJvYy5vXG4gb2JqLSQoQ09ORklHX1NZU0ZTKVx0XHQrPSBwY2ktc3lzZnMubyBzbG90Lm9cbiBvYmotJChDT05GSUdfQUNQSSlcdFx0Kz0gcGNpLWFjcGkub1xuIG9iai0kKENPTkZJR19HRU5FUklDX1BDSV9JT01BUCkgKz0gaW9tYXAub1xuK29iai0kKENPTkZJR19QQ0lfTElWRVVQREFURSlcdCs9IGxpdmV1cGRhdGUub1xuIGVuZGlmXG4gXG4gb2JqLSQoQ09ORklHX09GKVx0XHQrPSBvZi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jIGIvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjU5MzVlODhkZTA3M2RjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL3BjaS9saXZldXBkYXRlLmNcbkBAIC0wLDAgKzEsOTEwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiwgR29vZ2xlIExMQy5cbisgKiBEYXZpZCBNYXRsYWNrIFx1MDAzY2RtYXRsYWNrQGdvb2dsZS5jb21cdTAwM2VcbisgKi9cbitcbisvKipcbisgKiBET0M6IFBDSSBMaXZlIFVwZGF0ZVxuKyAqXG4rICogVGhlIFBDSSBzdWJzeXN0ZW0gcGFydGljaXBhdGVzIGluIHRoZSBMaXZlIFVwZGF0ZSBwcm9jZXNzIHRvIGVuYWJsZSBkcml2ZXJzXG4rICogdG8gcHJlc2VydmUgdGhlaXIgUENJIGRldmljZXMgYWNyb3NzIGtleGVjLlxuKyAqXG4rICogOnJlZjpgRkxCIFx1MDAzY2ZsYlx1MDAzZWAgRGF0YVxuKyAqID09PT09PT09PT09PT09PT09PT09PVxuKyAqXG4rICogUENJIGRldmljZSBwcmVzZXJ2YXRpb24gYWNyb3NzIExpdmUgVXBkYXRlIGlzIGJ1aWx0IG9uIHRvcCBvZiB0aGVcbisgKiA6cmVmOmBMVU8gXHUwMDNjbHVvXHUwMDNlYCBzdXBwb3J0IGZvciBmaWxlIHByZXNlcnZhdGlvbiBhY3Jvc3Mga2V4ZWMuIERyaXZlcnMgYXJlXG4rICogZXhwZWN0ZWQgdG8gZXhwb3NlIGEgZmlsZSB0byByZXByZXNlbnQgYSBzaW5nbGUgUENJIGRldmljZSBhbmQgc3VwcG9ydFxuKyAqIHByZXNlcnZhdGlvbiBvZiB0aGF0IGZpbGUgd2l0aCBgYGlvY3RsKExJVkVVUERBVEVfU0VTU0lPTl9QUkVTRVJWRV9GRClgYC5cbisgKiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gY29udHJvbCB0aGUgcHJlc2VydmF0aW9uIG9mIGRldmljZXMgYW5kIGVuc3VyZVxuKyAqIHByb3BlciBsaWZlY3ljbGUgbWFuYWdlbWVudCB3aGlsZSBhIGRldmljZSBpcyBwcmVzZXJ2ZWQuIFRoZSBmaXJzdCBpbnRlbmRlZFxuKyAqIHVzZS1jYXNlIGlzIHByZXNlcnZpbmcgdmZpby1wY2kgZGV2aWNlIGZpbGVzLlxuKyAqXG4rICogVGhlIFBDSSBjb3JlIG1haW50YWlucyBpdHMgb3duIHN0YXRlIGFib3V0IHdoYXQgZGV2aWNlcyBhcmUgYmVpbmcgcHJlc2VydmVkXG4rICogYWNyb3NzIExpdmUgVXBkYXRlIHVzaW5nIEZMQiBkYXRhIGluIExVTy4gRXNzZW50aWFsbHksIHRoaXMgYWxsb3dzIHRoZSBQQ0lcbisgKiBjb3JlIHRvIGFsbG9jYXRlIHN0cnVjdCBwY2lfc2VyIHdoZW4gdGhlIGZpcnN0IGRldmljZSAoZmlsZSkgaXMgcHJlc2VydmVkXG4rICogYW5kIGZyZWUgaXQgd2hlbiB0aGUgbGFzdCBkZXZpY2UgKGZpbGUpIGlzIHVucHJlc2VydmVkLiBBZnRlciBrZXhlYywgdGhlXG4rICogUENJIGNvcmUgY2FuIGZldGNoIHRoZSBzdHJ1Y3QgcGNpX3NlciAod2hpY2ggd2FzIGNvbnN0cnVjdGVkIGJ5IHRoZSBwcmV2aW91c1xuKyAqIGtlcm5lbCkgZnJvbSBMVU8gYXQgYW55IHRpbWUgKGUuZy4gZHVyaW5nIGVudW1lcmF0aW9uKSBzbyB0aGF0IGl0IGtub3dzXG4rICogd2hpY2ggZGV2aWNlcyB3ZXJlIHByZXNlcnZlZC5cbisgKlxuKyAqIFRvIGVuYWJsZSB0aGUgUENJIGNvcmUgdG8gYmUgbm90aWZpZWQgd2hlbmV2ZXIgYSBmaWxlIHJlcHJlc2VudGluZyBhIGRldmljZVxuKyAqIGlzIHByZXNlcnZlZCwgZHJpdmVycyBtdXN0IHJlZ2lzdGVyIHRoZWlyIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciB3aXRoXG4rICogdGhlIFBDSSBjb3JlIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgQVBJczpcbisgKlxuKyAqICAqIGBgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKGRyaXZlcl9maWxlX2hhbmRsZXIpYGBcbisgKiAgKiBgYHBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKGRyaXZlcl9maWxlX2hhbmRsZXIpYGBcbisgKlxuKyAqIERldmljZSBUcmFja2luZ1xuKyAqID09PT09PT09PT09PT09PVxuKyAqXG4rICogRHJpdmVycyBtdXN0IG5vdGlmeSB0aGUgUENJIGNvcmUgd2hlbiBzcGVjaWZpYyBkZXZpY2VzIGFyZSBwcmVzZXJ2ZWQgb3JcbisgKiB1bnByZXNlcnZlZCB3aXRoIHRoZSBmb2xsb3dpbmcgQVBJczpcbisgKlxuKyAqICAqIGBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUocGNpX2RldilgYFxuKyAqICAqIGBgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZShwY2lfZGV2KWBgXG4rICpcbisgKiBUaGlzIGFsbG93cyB0aGUgUENJIGNvcmUgdG8ga2VlcCBpdHMgRkxCIGRhdGEgKHN0cnVjdCBwY2lfc2VyKSB1cCB0byBkYXRlXG4rICogd2l0aCB0aGUgbGlzdCBvZiAqKm91dGdvaW5nKiogcHJlc2VydmVkIGRldmljZXMgZm9yIHRoZSBuZXh0IGtlcm5lbC5cbisgKlxuKyAqIEFmdGVyIGtleGVjLCB3aGVuZXZlciBhIGRldmljZSBpcyBlbnVtZXJhdGVkLCB0aGUgUENJIGNvcmUgd2lsbCBjaGVjayBpZiBpdFxuKyAqIGlzIGFuICoqaW5jb21pbmcqKiBwcmVzZXJ2ZWQgZGV2aWNlIChpLmUuIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXMga2VybmVsKVxuKyAqIGJ5IGNoZWNraW5nIHRoZSBpbmNvbWluZyBGTEIgZGF0YSAoc3RydWN0IHBjaV9zZXIpLlxuKyAqXG4rICogRHJpdmVycyBtdXN0IG5vdGlmeSB0aGUgUENJIGNvcmUgd2hlbiBhbiAqKmluY29taW5nKiogZGV2aWNlIGlzIGRvbmVcbisgKiBwYXJ0aWNpcGF0aW5nIGluIHRoZSBpbmNvbWluZyBMaXZlIFVwZGF0ZSB3aXRoIHRoZSBmb2xsb3dpbmcgQVBJOlxuKyAqXG4rICogICogYGBwY2lfbGl2ZXVwZGF0ZV9maW5pc2gocGNpX2RldilgYFxuKyAqXG4rICogVGhlIFBDSSBjb3JlIGRvZXMgbm90IGVuZm9yY2UgYW55IG9yZGVyaW5nIG9mIGBgcGNpX2xpdmV1cGRhdGVfZmluaXNoKClgYCBhbmRcbisgKiBgYHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKClgYC4gaS5lLiBBIFBDSSBkZXZpY2UgY2FuIGJlICoqb3V0Z29pbmcqKlxuKyAqIChwcmVzZXJ2ZWQgZm9yIG5leHQga2VybmVsKSBhbmQgKippbmNvbWluZyoqIChwcmVzZXJ2ZWQgYnkgcHJldmlvdXMga2VybmVsKVxuKyAqIGF0IHRoZSBzYW1lIHRpbWUuXG4rICpcbisgKiBSZXN0cmljdGlvbnNcbisgKiA9PT09PT09PT09PT1cbisgKlxuKyAqIFRoZSBQQ0kgY29yZSBlbmZvcmNlcyB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBvbiB3aGljaCBkZXZpY2VzIGNhbiBiZVxuKyAqIHByZXNlcnZlZC4gVGhlc2UgbWF5IGJlIHJlbGF4ZWQgaW4gdGhlIGZ1dHVyZTpcbisgKlxuKyAqICAqIFRoZSBkZXZpY2UgY2Fubm90IGJlIGEgVmlydHVhbCBGdW5jdGlvbiAoVkYpLlxuKyAqXG4rICogICogVGhlIGRldmljZSBjYW5ub3QgcmVxdWlyZSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIHRvIGVuYWJsZSBBY2Nlc3NcbisgKiAgICBDb250cm9sIFNlcnZpY2VzIChBQ1MpLlxuKyAqXG4rICogRHJpdmVyIEJpbmRpbmdcbisgKiA9PT09PT09PT09PT09PVxuKyAqXG4rICogSW4gdGhlIG91dGdvaW5nIGtlcm5lbCwgaXQgaXMgdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGl0XG4rICogZG9lcyBub3QgcmVsZWFzZSBhIGRldmljZSBiZXR3ZWVuIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgYW5kXG4rICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpLlxuKyAqXG4rICogSW4gdGhlIGluY29taW5nIGtlcm5lbCwgaXQgaXMgdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGl0XG4rICogZG9lcyBub3QgcmVsZWFzZSBhIHByZXNlcnZlZCBkZXZpY2UgYmV0d2VlbiBwcm9iZSgpIGFuZFxuKyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpLlxuKyAqXG4rICogSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBpbmNvbWluZyBwcmVzZXJ2ZWQgZGV2aWNlcyBhcmVcbisgKiBib3VuZCB0byB0aGUgY29ycmVjdCBkcml2ZXIuIGkuZS4gVGhlIFBDSSBjb3JlIGRvZXMgbm90IHByb3RlY3QgYWdhaW5zdCBhXG4rICogZGV2aWNlIGdldHRpbmcgcHJlc2VydmVkIGJ5IGRyaXZlciBBIGluIHRoZSBvdXRnb2luZyBrZXJuZWwgYW5kIHRoZW4gZ2V0dGluZ1xuKyAqIGJvdW5kIHRvIGRyaXZlciBCIGluIHRoZSBpbmNvbWluZyBrZXJuZWwuIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuKyAqXG4rICogQkRGIFN0YWJpbGl0eVxuKyAqID09PT09PT09PT09PT1cbisgKlxuKyAqIFRoZSBQQ0kgY29yZSBndWFyYW50ZWVzIHRoYXQgcHJlc2VydmVkIGRldmljZXMgY2FuIGJlIGlkZW50aWZpZWQgYnkgdGhlIHNhbWVcbisgKiBidXMsIGRldmljZSwgYW5kIGZ1bmN0aW9uIG51bWJlcnMgZm9yIGFzIGxvbmcgYXMgdGhleSBhcmUgcHJlc2VydmVkXG4rICogKGluY2x1ZGluZyBhY3Jvc3Mga2V4ZWMpLiBUbyBhY2NvbXBsaXNoIHRoaXMsIHRoZSBQQ0kgY29yZSBhbHdheXMgaW5oZXJpdHNcbisgKiB0aGUgc2Vjb25kYXJ5IGFuZCBzdWJvcmRpbmF0ZSBidXMgbnVtYmVycyBhc3NpZ25lZCB0byBicmlkZ2VzIGR1cmluZyBzY2FubmluZ1xuKyAqIGlmIGFueSBkZXZpY2UgaXMgcHJlc2VydmVkLiBUaGlzIGlzIHRydWUgZXZlbiBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgYWx3YXlzXG4rICogYXNzaWduIG5ldyBidXMgbnVtYmVycyBkdXJpbmcgc2Nhbm5pbmcuIFRoZSBrZXJuZWwgYXNzdW1lcyB0aGUgcHJldmlvdXNcbisgKiBrZXJuZWwgZXN0YWJsaXNoZWQgYSBzYW5lIGJ1cyB0b3BvbG9neSBhY3Jvc3Mga2V4ZWMuXG4rICpcbisgKiBJZiBhIG1pc2NvbmZpZ3VyZWQgb3IgdW5jb25maWd1cmVkIGJyaWRnZSBpcyBlbmNvdW50ZXJlZCBkdXJpbmcgZW51bWVyYXRpb25cbisgKiB3aGlsZSB0aGVyZSBhcmUgcHJlc2VydmVkIGRldmljZXMsIGl0cyBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlIGJ1cyBudW1iZXJzXG4rICogd2lsbCBiZSBjbGVhcmVkIGFuZCBkZXZpY2VzIGJlbG93IGl0IHdpbGwgbm90IGJlIGVudW1lcmF0ZWQuXG4rICpcbisgKiBQQ0ktdG8tUENJIEJyaWRnZXNcbisgKiA9PT09PT09PT09PT09PT09PT1cbisgKlxuKyAqIEFueSBQQ0ktdG8tUENJIGJyaWRnZXMgdXBzdHJlYW0gb2YgYSBwcmVzZXJ2ZWQgZGV2aWNlIGFyZSBhdXRvbWF0aWNhbGx5XG4rICogcHJlc2VydmVkIHdoZW4gdGhlIGRldmljZSBpcyBwcmVzZXJ2ZWQuIFRoZSBQQ0kgY29yZSBrZWVwcyB0cmFjayBvZiB0aGVcbisgKiBudW1iZXIgb2YgZG93bnN0cmVhbSBkZXZpY2VzIHRoYXQgYXJlIHByZXNlcnZlZCB1bmRlciBhIGJyaWRnZSBzbyB0aGF0IHRoZVxuKyAqIGJyaWRnZSBpcyBvbmx5IHVucHJlc2VydmVkIG9uY2UgYWxsIGRvd25zdHJlYW0gZGV2aWNlcyBhcmUgdW5wcmVzZXJ2ZWQuXG4rICpcbisgKiBUaGlzIGVuYWJsZXMgdGhlIFBDSSBjb3JlIGFuZCBhbnkgZHJpdmVycyBib3VuZCB0byB0aGUgYnJpZGdlIHRvIHBhcnRpY2lwYXRlXG4rICogaW4gdGhlIExpdmUgVXBkYXRlIHNvIHRoYXQgcHJlc2VydmVkIGVuZHBvaW50cyBjYW4gY29udGludWUgaXNzdWluZyBtZW1vcnlcbisgKiB0cmFuc2FjdGlvbnMgZHVyaW5nIHRoZSBMaXZlIFVwZGF0ZS5cbisgKlxuKyAqIEhhbmRsaW5nIFByZXNlcnZlZCBEZXZpY2VzXG4rICogPT09PT09PT09PT09PT09PT09PT09PT09PT1cbisgKlxuKyAqIFRoZSBQQ0kgY29yZSB0cmVhdHMgcHJlc2VydmVkIGRldmljZXMgZGlmZmVyZW50bHkgdGhhbiBub24tcHJlc2VydmVkIGRldmljZXMuXG4rICogVGhpcyBzZWN0aW9uIGVudW1lcmF0ZXMgdGhvc2UgZGlmZmVyZW5jZXMuXG4rICpcbisgKiAgKiBUaGUgUENJIGNvcmUgaW5oZXJpdHMgYWxsIEFDUyBmbGFncyBlbmFibGVkIG9uIGluY29taW5nIHByZXNlcnZlZCBkZXZpY2VzXG4rICogICAgcmF0aGVyIHRoYW4gYXNzaWduaW5nIG5ldyBvbmVzLiBUaGlzIGVuc3VyZXMgdGhhdCBUTFBzIGFyZSByb3V0ZWQgdGhlIHNhbWVcbisgKiAgICB3YXkgYWZ0ZXIgTGl2ZSBVcGRhdGUgYW5kIGVuc3VyZXMgdGhhdCBJT01NVSBncm91cHMgZG8gbm90IGNoYW5nZS4gTm90ZVxuKyAqICAgIHRoYXQgYSBkZXZpY2Ugd2lsbCB1c2UgaXRzIGluaGVyaXRlZCBBQ1MgZmxhZ3MgZm9yIHRoZSBsaWZldGltZSBvZiBpdHNcbisgKiAgICBzdHJ1Y3QgcGNpX2RldiAoaS5lLiBldmVuIGFmdGVyIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpKS5cbisgKlxuKyAqICAqIFRoZSBQQ0kgY29yZSBpbmhlcml0cyBBUkkgRm9yd2FyZGluZyBFbmFibGUgb24gYWxsIGJyaWRnZXMgd2l0aCBkb3duc3RyZWFtXG4rICogICAgcHJlc2VydmVkIGRldmljZXMgdG8gZW5zdXJlIHRoYXQgYWxsIHByZXNlcnZlZCBkZXZpY2VzIG9uIHRoZSBicmlkZ2Unc1xuKyAqICAgIHNlY29uZGFyeSBidXMgYXJlIGFkZHJlc3NhYmxlIGFmdGVyIHRoZSBMaXZlIFVwZGF0ZS5cbisgKlxuKyAqICAqIFRoZSBQQ0kgY29yZSBkb2VzIG5vdCBkaXNhYmxlIGJ1cyBtYXN0ZXJpbmcgb24gb3V0Z29pbmcgcHJlc2VydmVkIGRldmljZXNcbisgKiAgICBkdXJpbmcga2V4ZWMuIFRoaXMgYWxsb3dzIHByZXNlcnZlZCBkZXZpY2VzIHRvIGlzc3VlIG1lbW9yeSB0cmFuc2FjdGlvbnNcbisgKiAgICB0aHJvdWdob3V0IHRoZSBMaXZlIFVwZGF0ZS5cbisgKi9cbitcbisjZGVmaW5lIHByX2ZtdChmbXQpIFwiUENJOiBcIiBLQlVJTERfQkFTRU5BTUUgXCI6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXhlY19oYW5kb3Zlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2hvL2FiaS9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpdmV1cGRhdGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9raG9fYmxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwibGl2ZXVwZGF0ZS5oXCJcbisjaW5jbHVkZSBcInBjaS5oXCJcbitcbisvKipcbisgKiBzdHJ1Y3QgcGNpX2xpdmV1cGRhdGVfZ2xvYmFsIC0gR2xvYmFsIHN0YXRlIGZvciBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydFxuKyAqIEByd3NlbTogUmVhZGVyL3dyaXRlciBzZW1hcGhvcmUgdXNlZCB0byBwcm90ZWN0IHRoZSBpbmNvbWluZyBhbmQgb3V0Z29pbmdcbisgKiAgICAgICAgIEZMQnMsIGFuZCB0aGUgcmVmZXJlbmNlcyB0byB0aGVtIGluIHN0cnVjdCBwY2lfZGV2LlxuKyAqL1xuK3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZV9nbG9iYWwge1xuK1x0c3RydWN0IHJ3X3NlbWFwaG9yZSByd3NlbTtcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcGNpX2xpdmV1cGRhdGVfZ2xvYmFsIHBjaV9saXZldXBkYXRlID0ge1xuK1x0LnJ3c2VtID0gX19SV1NFTV9JTklUSUFMSVpFUihwY2lfbGl2ZXVwZGF0ZS5yd3NlbSksXG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAtIE91dGdvaW5nIFBDSSBGTEIgb2JqZWN0XG4rICogQHNlcjogUG9pbnRlciB0byB0aGUgcHJlc2VydmVkIHN0cnVjdCBwY2lfc2VyLlxuKyAqIEBibG9ja19zZXQ6IFRoZSBLSE8gYmxvY2sgc2V0IGhvbGRpbmcgdGhlIG91dGdvaW5nIGRldmljZXMuXG4rICpcbisgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUgcnVudGltZSBzdGF0ZSBmb3IgdGhlIG91dGdvaW5nIFBDSSBMaXZlIFVwZGF0ZVxuKyAqIHN0YXRlLiBJdCB3cmFwcyB0aGUgc2VyaWFsaXplZCBwY2lfc2VyIGFuZCB0aGUgYmxvY2tfc2V0IHVzZWQgdG8gbWFuYWdlXG4rICogdGhlIHNlcmlhbGl6ZWQgZW50cmllcy5cbisgKi9cbitzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyB7XG4rXHRzdHJ1Y3QgcGNpX3NlciAqc2VyO1xuK1x0c3RydWN0IGtob19ibG9ja19zZXQgYmxvY2tfc2V0O1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBjaV9mbGJfaW5jb21pbmcgLSBJbmNvbWluZyBQQ0kgRkxCIG9iamVjdFxuKyAqIEBzZXI6IFRoZSBpbmNvbWluZyBzdHJ1Y3QgcGNpX3NlciBmcm9tIHRoZSBwcmV2aW91cyBrZXJuZWwuXG4rICogQHhhOiBYYXJyYXkgdXNlZCB0byBxdWlja2x5IGxvb2t1cCBkZXZpY2VzIGluIEBzZXIuXG4rICogQGJsb2NrX3NldDogVGhlIEtITyBibG9jayBzZXQgaG9sZGluZyB0aGUgaW5jb21pbmcgZGV2aWNlcy5cbisgKlxuKyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBydW50aW1lIHN0YXRlIGZvciB0aGUgaW5jb21pbmcgUENJIExpdmUgVXBkYXRlXG4rICogc3RhdGUuIEl0IHdyYXBzIHRoZSBzZXJpYWxpemVkIHBjaV9zZXIsIHRoZSBibG9ja19zZXQgdXNlZCB0byByZXN0b3JlXG4rICogdGhlIHNlcmlhbGl6ZWQgZW50cmllcywgYW5kIGFuIHhhcnJheSBmb3IgZmFzdCBsb29rdXBzLlxuKyAqL1xuK3N0cnVjdCBwY2lfZmxiX2luY29taW5nIHtcbitcdHN0cnVjdCBwY2lfc2VyICpzZXI7XG4rXHRzdHJ1Y3QgeGFycmF5IHhhO1xuK1x0c3RydWN0IGtob19ibG9ja19zZXQgYmxvY2tfc2V0O1xuK307XG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcGNpX3Nlcl94YV9rZXkodTMyIGRvbWFpbiwgdTE2IGJkZilcbit7XG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZG9tYWluIFx1MDAzY1x1MDAzYyAxNiB8IGJkZjtcbit9XG4rc3RhdGljIGludCBwY2lfZmxiX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKVxuK3tcbitcdHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZztcbitcdHN0cnVjdCBwY2lfc2VyICpzZXI7XG4rXG4rXHRvdXRnb2luZyA9IGt6YWxsb2Nfb2JqKCpvdXRnb2luZyk7XG4rXHRpZiAoIW91dGdvaW5nKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHNlciA9IGtob19hbGxvY19wcmVzZXJ2ZShzaXplb2YoKnNlcikpO1xuK1x0aWYgKElTX0VSUihzZXIpKSB7XG4rXHRcdGtmcmVlKG91dGdvaW5nKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIoc2VyKTtcbitcdH1cbitcbitcdHNlci1cdTAwM2Vucl9kZXZpY2VzID0gMDtcbitcdHNlci1cdTAwM2VkZXZpY2VzID0gMDtcbitcbitcdG91dGdvaW5nLVx1MDAzZXNlciA9IHNlcjtcbitcdGtob19ibG9ja19zZXRfaW5pdChcdTAwMjZvdXRnb2luZy1cdTAwM2VibG9ja19zZXQsIHNpemVvZihzdHJ1Y3QgcGNpX2Rldl9zZXIpKTtcbitcbitcdGFyZ3MtXHUwMDNlb2JqID0gb3V0Z29pbmc7XG4rXHRhcmdzLVx1MDAzZWRhdGEgPSB2aXJ0X3RvX3BoeXMoc2VyKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBwY2lfZmxiX3VucHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmxiX29wX2FyZ3MgKmFyZ3MpXG4re1xuK1x0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gYXJncy1cdTAwM2VvYmo7XG4rXG4rXHRXQVJOX09OKG91dGdvaW5nLVx1MDAzZXNlci1cdTAwM2Vucl9kZXZpY2VzKTtcbitcdGtob19ibG9ja19zZXRfZGVzdHJveShcdTAwMjZvdXRnb2luZy1cdTAwM2VibG9ja19zZXQpO1xuK1x0a2hvX3VucHJlc2VydmVfZnJlZShvdXRnb2luZy1cdTAwM2VzZXIpO1xuK1x0a2ZyZWUob3V0Z29pbmcpO1xuK1x0cHJfZGVidWcoXCJVbnByZXNlcnZlZCBzdHJ1Y3QgcGNpX3NlclxcblwiKTtcbit9XG4rXG4rc3RhdGljIGludCBwY2lfZmxiX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZsYl9vcF9hcmdzICphcmdzKVxuK3tcbitcdHN0cnVjdCBwY2lfc2VyICpzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cdTAwM2VkYXRhKTtcbitcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbitcdHN0cnVjdCBwY2lfZGV2X3NlciAqZGV2X3NlcjtcbitcdHN0cnVjdCBraG9fYmxvY2tfc2V0X2l0IGl0O1xuK1x0aW50IHJldCA9IC1FTk9NRU07XG4rXG4rXHRpbmNvbWluZyA9IGt6YWxsb2Nfb2JqKCppbmNvbWluZyk7XG4rXHRpZiAoIWluY29taW5nKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX2ZyZWU7XG4rXG4rXHRpbmNvbWluZy1cdTAwM2VzZXIgPSBzZXI7XG4rXHR4YV9pbml0KFx1MDAyNmluY29taW5nLVx1MDAzZXhhKTtcbitcbitcdGtob19ibG9ja19zZXRfaW5pdChcdTAwMjZpbmNvbWluZy1cdTAwM2VibG9ja19zZXQsIHNpemVvZihzdHJ1Y3QgcGNpX2Rldl9zZXIpKTtcbitcdHJldCA9IGtob19ibG9ja19zZXRfcmVzdG9yZShcdTAwMjZpbmNvbWluZy1cdTAwM2VibG9ja19zZXQsIHNlci1cdTAwM2VkZXZpY2VzKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfaW5jb21pbmc7XG4rXG4rXHRraG9fYmxvY2tfc2V0X2l0X2luaXQoXHUwMDI2aXQsIFx1MDAyNmluY29taW5nLVx1MDAzZWJsb2NrX3NldCk7XG4rXHR3aGlsZSAoKGRldl9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3JlYWRfZW50cnkoXHUwMDI2aXQpKSkge1xuK1x0XHR1bnNpZ25lZCBsb25nIGtleTtcbitcbitcdFx0aWYgKCFkZXZfc2VyLVx1MDAzZXJlZmNvdW50KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRrZXkgPSBwY2lfc2VyX3hhX2tleShkZXZfc2VyLVx1MDAzZWRvbWFpbiwgZGV2X3Nlci1cdTAwM2ViZGYpO1xuK1x0XHRyZXQgPSB4YV9pbnNlcnQoXHUwMDI2aW5jb21pbmctXHUwMDNleGEsIGtleSwgZGV2X3NlciwgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBlcnJfYmxvY2tfc2V0X2Rlc3Ryb3k7XG4rXHR9XG4rXG4rXHRhcmdzLVx1MDAzZW9iaiA9IGluY29taW5nO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2Jsb2NrX3NldF9kZXN0cm95OlxuK1x0a2hvX2Jsb2NrX3NldF9kZXN0cm95KFx1MDAyNmluY29taW5nLVx1MDAzZWJsb2NrX3NldCk7XG4rZXJyX2ZyZWVfaW5jb21pbmc6XG4rXHR4YV9kZXN0cm95KFx1MDAyNmluY29taW5nLVx1MDAzZXhhKTtcbitcdGtmcmVlKGluY29taW5nKTtcbitlcnJfcmVzdG9yZV9mcmVlOlxuK1x0a2hvX3Jlc3RvcmVfZnJlZShzZXIpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGNpX2ZsYl9maW5pc2goc3RydWN0IGxpdmV1cGRhdGVfZmxiX29wX2FyZ3MgKmFyZ3MpXG4re1xuK1x0c3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKmluY29taW5nID0gYXJncy1cdTAwM2VvYmo7XG4rXG4rXHR4YV9kZXN0cm95KFx1MDAyNmluY29taW5nLVx1MDAzZXhhKTtcbitcdGtob19ibG9ja19zZXRfZGVzdHJveShcdTAwMjZpbmNvbWluZy1cdTAwM2VibG9ja19zZXQpO1xuK1x0a2hvX3Jlc3RvcmVfZnJlZShpbmNvbWluZy1cdTAwM2VzZXIpO1xuK1x0a2ZyZWUoaW5jb21pbmcpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGxpdmV1cGRhdGVfZmxiX29wcyBwY2lfbGl2ZXVwZGF0ZV9mbGJfb3BzID0ge1xuK1x0LnByZXNlcnZlID0gcGNpX2ZsYl9wcmVzZXJ2ZSxcbitcdC51bnByZXNlcnZlID0gcGNpX2ZsYl91bnByZXNlcnZlLFxuK1x0LnJldHJpZXZlID0gcGNpX2ZsYl9yZXRyaWV2ZSxcbitcdC5maW5pc2ggPSBwY2lfZmxiX2ZpbmlzaCxcbitcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuK307XG4rXG4rc3RhdGljIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiBwY2lfbGl2ZXVwZGF0ZV9mbGIgPSB7XG4rXHQub3BzID0gXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiX29wcyxcbitcdC5jb21wYXRpYmxlID0gUENJX0xVT19GTEJfQ09NUEFUSUJMRSxcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZyh2b2lkKVxuK3tcbitcdHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZyA9IE5VTEw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gbGl2ZXVwZGF0ZV9mbGJfZ2V0X291dGdvaW5nKFx1MDAyNnBjaV9saXZldXBkYXRlX2ZsYiwgKHZvaWQgKiopXHUwMDI2b3V0Z29pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdGlmICghb3V0Z29pbmcpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0cmV0dXJuIG91dGdvaW5nO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHBjaV9kZXZfc2VyICpwY2lfZ2V0X2VtcHR5X29yX2FwcGVuZChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcpXG4re1xuK1x0c3RydWN0IHBjaV9kZXZfc2VyICpkZXZfc2VyLCAqZm91bmQgPSBOVUxMO1xuK1x0c3RydWN0IGtob19ibG9ja19zZXRfaXQgaXQ7XG4rXHRpbnQgZXJyO1xuK1x0dTMyIGNvdW50ID0gMDtcbitcbitcdGtob19ibG9ja19zZXRfaXRfaW5pdChcdTAwMjZpdCwgXHUwMDI2b3V0Z29pbmctXHUwMDNlYmxvY2tfc2V0KTtcbitcdHdoaWxlICgoZGV2X3NlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeShcdTAwMjZpdCkpKSB7XG4rXHRcdGNvdW50Kys7XG4rXHRcdGlmIChkZXZfc2VyLVx1MDAzZXJlZmNvdW50ID09IDAgXHUwMDI2XHUwMDI2ICFmb3VuZClcbitcdFx0XHRmb3VuZCA9IGRldl9zZXI7XG4rXHR9XG4rXG4rXHRpZiAoZm91bmQpXG4rXHRcdHJldHVybiBmb3VuZDtcbitcbitcdGVyciA9IGtob19ibG9ja19zZXRfZ3JvdyhcdTAwMjZvdXRnb2luZy1cdTAwM2VibG9ja19zZXQsIGNvdW50ICsgMSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1xuK1x0aWYgKGNvdW50ID09IDApXG4rXHRcdGtob19ibG9ja19zZXRfaXRfaW5pdChcdTAwMjZpdCwgXHUwMDI2b3V0Z29pbmctXHUwMDNlYmxvY2tfc2V0KTtcbitcbitcdGRldl9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3Jlc2VydmVfZW50cnkoXHUwMDI2aXQpO1xuK1x0aWYgKCFkZXZfc2VyKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcbitcbitcdHJldHVybiBkZXZfc2VyO1xuK31cbitcbitzdGF0aWMgaW50IHBjaV9saXZldXBkYXRlX3VucHJlc2VydmVfZGV2aWNlKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywgc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXIgPSBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZztcbitcbitcdGlmIChkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5mcm96ZW4pIHtcbitcdFx0cGNpX3dhcm4oZGV2LCBcIkNhbm5vdCB1bnByZXNlcnZlIGRldmljZSBhZnRlciBpdCBpcyBmcm96ZW4hXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmICghZGV2X3Nlcikge1xuK1x0XHRwY2lfd2FybihkZXYsIFwiQ2Fubm90IHVucHJlc2VydmUgZGV2aWNlIHRoYXQgaXMgbm90IHByZXNlcnZlZFxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoIWRldl9zZXItXHUwMDNlcmVmY291bnQpIHtcbitcdFx0cGNpX1dBUk4oZGV2LCAxLCBcIlByZXNlcnZlZCBkZXZpY2UgaGFzIGEgMCByZWZjb3VudCFcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKC0tZGV2X3Nlci1cdTAwM2VyZWZjb3VudClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwY2lfaW5mbyhkZXYsIFwiRGV2aWNlIHdpbGwgbm8gbG9uZ2VyIGJlIHByZXNlcnZlZCBhY3Jvc3MgbmV4dCBMaXZlIFVwZGF0ZVxcblwiKTtcbitcdG91dGdvaW5nLVx1MDAzZXNlci1cdTAwM2Vucl9kZXZpY2VzLS07XG4rXHRtZW1zZXQoZGV2X3NlciwgMCwgc2l6ZW9mKCpkZXZfc2VyKSk7XG4rXHRkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZyA9IE5VTEw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2VfYWdhaW4oc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRpZiAoIWRldi1cdTAwM2VsaXZldXBkYXRlLm91dGdvaW5nLVx1MDAzZXJlZmNvdW50KSB7XG4rXHRcdHBjaV9XQVJOKGRldiwgMSwgXCJQcmVzZXJ2ZWQgZGV2aWNlIHdpdGggMCByZWZjb3VudCFcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEVuZHBvaW50IGRldmljZXMgc2hvdWxkIG5vdCBiZSBwcmVzZXJ2ZWQgbW9yZSB0aGFuIG9uY2UuIEJyaWRnZXMgYXJlXG4rXHQgKiBwcmVzZXJ2ZWQgb25jZSBmb3IgZXZlcnkgZG93bnN0cmVhbSBkZXZpY2UgdGhhdCBpcyBwcmVzZXJ2ZWQuXG4rXHQgKi9cbitcdGlmICghZGV2LVx1MDAzZXN1Ym9yZGluYXRlKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0ZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmctXHUwMDNlcmVmY291bnQrKztcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IF9fcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfZGV2aWNlKHN0cnVjdCBwY2lfZmxiX291dGdvaW5nICpvdXRnb2luZywgc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKmRldl9zZXI7XG4rXG4rXHQvKlxuK1x0ICogRG8gbm90IHByZXNlcnZlIGRldmljZXMgdGhhdCByZWx5IG9uIGRldmljZS1zcGVjaWZpYyBBQ1MgZXF1aXZhbGVudHNcbitcdCAqIChmb3Igbm93KSBzaW5jZSB0aGF0IHdvdWxkIGNvbXBsaWNhdGUga2VlcGluZyBBQ1MgY29uc3RhbnQgYWNyb3NzXG4rXHQgKiBMaXZlIFVwZGF0ZS5cbitcdCAqL1xuK1x0aWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHtcbitcdFx0cGNpX3dhcm4oZGV2LCBcIlJlZnVzaW5nIHRvIHByZXNlcnZlIGRldmljZSB0aGF0IHJlbGllcyBvbiBBQ1MgcXVpcmtzXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGRldl9zZXIgPSBwY2lfZ2V0X2VtcHR5X29yX2FwcGVuZChvdXRnb2luZyk7XG4rXHRpZiAoSVNfRVJSKGRldl9zZXIpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihkZXZfc2VyKTtcbitcbitcdHBjaV9pbmZvKGRldiwgXCJEZXZpY2Ugd2lsbCBiZSBwcmVzZXJ2ZWQgYWNyb3NzIG5leHQgTGl2ZSBVcGRhdGVcXG5cIik7XG4rXHRvdXRnb2luZy1cdTAwM2VzZXItXHUwMDNlbnJfZGV2aWNlcysrO1xuK1x0b3V0Z29pbmctXHUwMDNlc2VyLVx1MDAzZWRldmljZXMgPSBraG9fYmxvY2tfc2V0X2hlYWRfcGEoXHUwMDI2b3V0Z29pbmctXHUwMDNlYmxvY2tfc2V0KTtcbitcbitcdGRldl9zZXItXHUwMDNlZG9tYWluID0gcGNpX2RvbWFpbl9ucihkZXYtXHUwMDNlYnVzKTtcbitcdGRldl9zZXItXHUwMDNlYmRmID0gcGNpX2Rldl9pZChkZXYpO1xuK1x0ZGV2X3Nlci1cdTAwM2VyZWZjb3VudCA9IDE7XG4rXG4rXHRkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5vdXRnb2luZyA9IGRldl9zZXI7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2Uoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdGlmIChkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5mcm96ZW4pIHtcbitcdFx0cGNpX3dhcm4oZGV2LCBcIkNhbm5vdCBwcmVzZXJ2ZSBkZXZpY2UgYWZ0ZXIgaXQgaXMgZnJvemVuIVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAoZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmcpXG4rXHRcdHJldHVybiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9kZXZpY2VfYWdhaW4oZGV2KTtcbitcbitcdHJldHVybiBfX3BjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZShvdXRnb2luZywgZGV2KTtcbit9XG4rXG4rI2RlZmluZSBmb3JfZWFjaF9wY2lfZGV2X2luX3BhdGgoX2QsIF9zdGFydCwgX2VuZCkgXFxcbitcdGZvciAoKF9kKSA9IChfc3RhcnQpOyAoX2QpICE9IChfZW5kKTsgKF9kKSA9IChfZCktXHUwMDNlYnVzLVx1MDAzZXNlbGYpXG4rXG4rc3RhdGljIHZvaWQgX19wY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX3BhdGgoc3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBwY2lfZGV2ICpzdGFydCxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGNpX2RldiAqZW5kKVxuK3tcbitcdHN0cnVjdCBwY2lfZGV2ICpkZXY7XG4rXG4rXHRmb3JfZWFjaF9wY2lfZGV2X2luX3BhdGgoZGV2LCBzdGFydCwgZW5kKSB7XG4rXHRcdGlmIChwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlX2RldmljZShvdXRnb2luZywgZGV2KSlcbitcdFx0XHRyZXR1cm47XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBwY2lfZGV2ICpzdGFydClcbit7XG4rXHRfX3BjaV9saXZldXBkYXRlX3VucHJlc2VydmVfcGF0aChvdXRnb2luZywgc3RhcnQsIC8qZW5kPSovTlVMTCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVfcGF0aChzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcsXG4rXHRcdFx0XHRcdHN0cnVjdCBwY2lfZGV2ICpzdGFydClcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqZGV2O1xuK1x0aW50IHJldDtcbitcbitcdGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7XG4rXHRcdHJldCA9IHBjaV9saXZldXBkYXRlX3ByZXNlcnZlX2RldmljZShvdXRnb2luZywgZGV2KTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdF9fcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBzdGFydCwgZGV2KTtcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSAtIFByZXNlcnZlIGEgUENJIGRldmljZSBhY3Jvc3MgTGl2ZSBVcGRhdGVcbisgKiBAZGV2OiBUaGUgUENJIGRldmljZSB0byBwcmVzZXJ2ZS5cbisgKlxuKyAqIHBjaV9saXZldXBkYXRlX3ByZXNlcnZlKCkgbm90aWZpZXMgdGhlIFBDSSBjb3JlIHRoYXQgYSBQQ0kgZGV2aWNlIHNob3VsZCBiZVxuKyAqIHByZXNlcnZlZCBhY3Jvc3MgdGhlIG5leHQgTGl2ZSBVcGRhdGUuIERyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIGNhbGxcbisgKiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSgpIGZyb20gdGhlaXIgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyXG4rICogcHJlc2VydmUoKSBjYWxsYmFjayB0byBlbnN1cmUgdGhlIG91dGdvaW5nIHN0cnVjdCBwY2lfc2VyIGlzIGFscmVhZHkgc2V0IHVwLlxuKyAqXG4rICogcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoKSBhdXRvbWF0aWNhbGx5IHByZXNlcnZlcyBhbGwgYnJpZGdlcyB1cHN0cmVhbSBvZlxuKyAqIEBkZXYuXG4rICpcbisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgcGNpX2ZsYl9vdXRnb2luZyAqb3V0Z29pbmcgPSBOVUxMO1xuK1xuK1x0aWYgKGRldi1cdTAwM2Vpc192aXJ0Zm4pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbitcbitcdG91dGdvaW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9vdXRnb2luZygpO1xuK1x0aWYgKElTX0VSUihvdXRnb2luZykpXG4rXHRcdHJldHVybiBQVFJfRVJSKG91dGdvaW5nKTtcbitcbitcdHJldHVybiBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBkZXYpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZSk7XG4rXG4rLyoqXG4rICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpIC0gQ2FuY2VsIHByZXNlcnZhdGlvbiBvZiBhIFBDSSBkZXZpY2VcbisgKiBAZGV2OiBUaGUgUENJIGRldmljZSB0byB1bnByZXNlcnZlLlxuKyAqXG4rICogcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZSgpIG5vdGlmaWVzIHRoZSBQQ0kgY29yZSB0aGF0IGEgUENJIGRldmljZSBzaG91bGQgbm9cbisgKiBsb25nZXIgYmUgcHJlc2VydmVkIGFjcm9zcyB0aGUgbmV4dCBMaXZlIFVwZGF0ZS4gRHJpdmVycyBhcmUgZXhwZWN0ZWQgdG8gY2FsbFxuKyAqIHBjaV9saXZldXBkYXRlX3VucHJlc2VydmUoKSBmcm9tIHRoZWlyIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlclxuKyAqIHVucHJlc2VydmUoKSBjYWxsYmFjayB0byBlbnN1cmUgdGhlIG91dGdvaW5nIHN0cnVjdCBwY2lfc2VyIGlzIGFscmVhZHkgc2V0XG4rICogdXAuXG4rICpcbisgKiBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKCkgYXV0b21hdGljYWxseSB1bnByZXNlcnZlcyBhbGwgYnJpZGdlcyB1cHN0cmVhbSBvZlxuKyAqIEBkZXYuXG4rICovXG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0c3RydWN0IHBjaV9mbGJfb3V0Z29pbmcgKm91dGdvaW5nID0gTlVMTDtcbitcbitcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7XG4rXG4rXHRvdXRnb2luZyA9IHBjaV9saXZldXBkYXRlX2ZsYl9nZXRfb3V0Z29pbmcoKTtcbitcdGlmIChJU19FUlIob3V0Z29pbmcpKSB7XG4rXHRcdHBjaV93YXJuKGRldiwgXCJDYW5ub3QgdW5wcmVzZXJ2ZSBkZXZpY2Ugd2l0aG91dCBvdXRnb2luZyBMaXZlIFVwZGF0ZSBzdGF0ZVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZV9wYXRoKG91dGdvaW5nLCBkZXYpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKTtcbitcbitzdGF0aWMgc3RydWN0IHBjaV9mbGJfaW5jb21pbmcgKnBjaV9saXZldXBkYXRlX2ZsYl9nZXRfaW5jb21pbmcodm9pZClcbit7XG4rXHRzdHJ1Y3QgcGNpX2ZsYl9pbmNvbWluZyAqaW5jb21pbmcgPSBOVUxMO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGxpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZyhcdTAwMjZwY2lfbGl2ZXVwZGF0ZV9mbGIsICh2b2lkICoqKVx1MDAyNmluY29taW5nKTtcbitcbitcdC8qIExpdmUgVXBkYXRlIGlzIG5vdCBlbmFibGVkLiAqL1xuK1x0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHQvKiBMaXZlIFVwZGF0ZSBpcyBlbmFibGVkLCBidXQgdGhlcmUgaXMgbm8gaW5jb21pbmcgRkxCIGRhdGEuICovXG4rXHRpZiAocmV0ID09IC1FTk9EQVRBKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdC8qXG4rXHQgKiBMaXZlIFVwZGF0ZSBpcyBlbmFibGVkIGFuZCB0aGVyZSBpcyBpbmNvbWluZyBGTEIgZGF0YSwgYnV0IG5vbmUgb2YgaXRcbitcdCAqIG1hdGNoZXMgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGUuXG4rXHQgKlxuK1x0ICogVGhpcyBjb3VsZCBtZWFuIHRoYXQgbm8gUENJIEZMQiBkYXRhIHdhcyBwYXNzZWQgYnkgdGhlIHByZXZpb3VzXG4rXHQgKiBrZXJuZWwsIGJ1dCBpdCBjb3VsZCBhbHNvIG1lYW4gdGhlIHByZXZpb3VzIGtlcm5lbCB1c2VkIGEgZGlmZmVyZW50XG4rXHQgKiBjb21wYXRpYmlsaXR5IHN0cmluZyAoaS5lLiBhIGRpZmZlcmVudCBBQkkpLlxuK1x0ICovXG4rXHRpZiAocmV0ID09IC1FTk9FTlQpIHtcbitcdFx0cHJfaW5mb19vbmNlKFwiTm8gaW5jb21pbmcgRkxCIG1hdGNoZWQgJXNcXG5cIiwgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGUpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGVyZSBpcyBpbmNvbWluZyBGTEIgZGF0YSB0aGF0IG1hdGNoZXMgcGNpX2xpdmV1cGRhdGVfZmxiLmNvbXBhdGlibGVcbitcdCAqIGJ1dCBpdCBjYW5ub3QgYmUgcmV0cmlldmVkLlxuK1x0ICovXG4rXHRpZiAocmV0KVxuK1x0XHRwYW5pYyhcIkZhaWxlZCB0byByZXRyaWV2ZSBpbmNvbWluZyBGTEIgZGF0YSAoJWQpXFxuXCIsIHJldCk7XG4rXG4rXHRyZXR1cm4gaW5jb21pbmc7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcodm9pZClcbit7XG4rXHRsaXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiKTtcbit9XG4rXG4rLyoqXG4rICogcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oKSAtIERldGVybWluZSBpZiBhIGJyaWRnZSBzaG91bGQgaW5oZXJpdCBidXMgbnVtYmVyc1xuKyAqIEBidXM6IFRoZSBwYXJlbnQgYnVzIG9mIHRoZSBicmlkZ2UuXG4rICogQGRldjogVGhlIFBDSSBicmlkZ2UgZGV2aWNlLlxuKyAqIEBwYXNzOiBUaGUgc2NhbiBwYXNzICgwIGZvciBmaXJzdCBwYXNzLCAxIGZvciBzZWNvbmQgcGFzcykuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUENJIGNvcmUgd2hlbiBpdCBiZWdpbnMgc2Nhbm5pbmcgYSBicmlkZ2UuXG4rICogSXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBicmlkZ2Ugc2hvdWxkIGluaGVyaXQgdGhlIHNlY29uZGFyeSBhbmQgc3Vib3JkaW5hdGVcbisgKiBidXMgbnVtYmVycyBhc3NpZ25lZCB0byBpdCBieSB0aGUgcHJldmlvdXMga2VybmVsLiBUaGlzIGlzIG5lY2Vzc2FyeSB0b1xuKyAqIGtlZXAgYnVzIG51bWJlcnMgY29uc3RhbnQgZm9yIHByZXNlcnZlZCBkZXZpY2VzIGRvd25zdHJlYW0gb2YgdGhlIGJyaWRnZS5cbisgKlxuKyAqIFJldHVybjogVHJ1ZSBpZiBidXMgbnVtYmVycyBzaG91bGQgYmUgaW5oZXJpdGVkLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rYm9vbCBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuK1x0XHRcdFx0ICAgICAgaW50IHBhc3MpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IGJ1cy1cdTAwM2VzZWxmO1xuK1xuK1x0LypcbitcdCAqIE9uIHRoZSBzZWNvbmQgcGFzcywgcmV1c2UgdGhlIHZhbHVlIHRoYXQgd2FzIHNldCBvbiB0aGUgZmlyc3QgcGFzc1xuK1x0ICogc28gdGhhdCB0aGUgcGFzc2VzIGFyZSBjb25zaXN0ZW50IHdpdGggb25lIGFub3RoZXIuXG4rXHQgKi9cbitcdGlmIChwYXNzKVxuK1x0XHRyZXR1cm4gZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcztcbitcbitcdC8qXG4rXHQgKiBJZiB0aGUgcGFyZW50IGJyaWRnZSBpcyBiZWluZyBmb3JjZWQgdG8gaW5oZXJpdCBpdHMgYnVzIG51bWJlcnNcbitcdCAqIGR1cmluZyB0aGlzIHNjYW4gdGhlbiB0aGlzIGJyaWRnZSBtdXN0IGFzIHdlbGwsIG90aGVyd2lzZSB0aGUgUENJXG4rXHQgKiBjb3JlIGNvdWxkIGV4cGFuZCB0aGlzIGJyaWRnZSdzIHJlc2VydmF0aW9uIGJleW9uZCBpdHMgcGFyZW50ICh3aGljaFxuK1x0ICogY2Fubm90IGV4cGFuZCkuXG4rXHQgKi9cbitcdGlmIChwYXJlbnQgXHUwMDI2XHUwMDI2IHBhcmVudC1cdTAwM2VsaXZldXBkYXRlLmluaGVyaXRfYnVzZXMpIHtcbitcdFx0ZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9IHRydWU7XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGFueSBpbmNvbWluZyBwcmVzZXJ2ZWQgZGV2aWNlcywgZm9yY2UgdGhlXG4rXHQgKiBidXMgbnVtYmVycyB0byBiZSBpbmhlcml0ZWQgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIGJ1cyBudW1iZXJzXG4rXHQgKiBhc3NpZ25lZCB0byB0aG9zZSBkZXZpY2VzIGR1cmluZyBlbnVtZXJhdGlvbi5cbitcdCAqXG4rXHQgKiBUbyBrZWVwIHRoaW5ncyBzaW1wbGUsIGluaGVyaXQgYnVzIG51bWJlcnMgb24gYWxsIGJyaWRnZXMgaWYgYW55IFBDSVxuK1x0ICogZGV2aWNlcyBhcmUgaW5jb21pbmcsIHRvIGVuc3VyZSB0aGF0IG5vIGJyaWRnZSdzIHJlc2VydmF0aW9uIGlzXG4rXHQgKiBleHBhbmRlZCB0byBvdmVybGFwIHdpdGggYSBwcmVzZXJ2ZWQgZGV2aWNlIGRvd25zdHJlYW0gb2YgYSBkaWZmZXJlbnRcbitcdCAqIGJyaWRnZS5cbitcdCAqL1xuK1x0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKSB7XG4rXHRcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbitcbitcdFx0aW5jb21pbmcgPSBwY2lfbGl2ZXVwZGF0ZV9mbGJfZ2V0X2luY29taW5nKCk7XG4rXHRcdGlmICghaW5jb21pbmcpIHtcbitcdFx0XHRkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmhlcml0X2J1c2VzID0gZmFsc2U7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEl0IGlzIHNhZmUgdG8gc2FtcGxlIGluY29taW5nLVx1MDAzZXNlci1cdTAwM2Vucl9kZXZpY2VzIGFuZCB0aGVuXG4rXHRcdCAqIGRyb3AgdGhlIHJ3c2VtIHNpbmNlIG5yX2RldmljZXMgd2lsbCBvbmx5IGRlY3JlYXNlLiBUaHVzIHRoZVxuK1x0XHQgKiBvbmx5IFwicmFjZVwiIGlzIHRoYXQgdGhlIGN1cnJlbnQgc2NhbiB3aWxsIGJlIG92ZXJseVxuK1x0XHQgKiBjb25zZXJ2YXRpdmUgYW5kIGZvcmNlIGJ1cyBpbmhlcml0YW5jZS5cbitcdFx0ICovXG4rXHRcdGRldi1cdTAwM2VsaXZldXBkYXRlLmluaGVyaXRfYnVzZXMgPSAhIWluY29taW5nLVx1MDAzZXNlci1cdTAwM2Vucl9kZXZpY2VzO1xuK1x0XHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcztcbit9XG4rXG4rLyoqXG4rICogcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kKCkgLSBGaW5pc2ggc2Nhbm5pbmcgYSBQQ0kgYnJpZGdlXG4rICogQGRldjogVGhlIFBDSSBicmlkZ2UgZGV2aWNlLlxuKyAqIEBwYXNzOiBUaGUgc2NhbiBwYXNzICgwIGZvciBmaXJzdCBwYXNzLCAxIGZvciBzZWNvbmQgcGFzcykuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUENJIGNvcmUgd2hlbiBpdCBmaW5pc2hlcyBzY2FubmluZyBhIGJyaWRnZS5cbisgKiBJdCBjbGVhcnMgdGhlIGluaGVyaXRhbmNlIHN0YXR1cyBhZnRlciB0aGUgc2Vjb25kIHBhc3Mgc28gaXQgY2FuIGJlXG4rICogcmUtZXZhbHVhdGVkIG9uIGZ1dHVyZSBzY2Fucy5cbisgKi9cbit2b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcylcbit7XG4rXHQvKlxuK1x0ICogQ2xlYXIgaW5oZXJpdF9idXNlcyBhZnRlciB0aGUgc2Vjb25kIHBhc3Mgc28gaXQgY2FuIGJlIHJlLWV2YWx1YXRlZFxuK1x0ICogb24gZnV0dXJlIHNjYW5zLlxuK1x0ICovXG4rXHRpZiAocGFzcylcbitcdFx0ZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5oZXJpdF9idXNlcyA9IGZhbHNlO1xuK31cbitcbit2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbitcdHN0cnVjdCBwY2lfZGV2X3NlciAqZGV2X3NlcjtcbitcdHVuc2lnbmVkIGxvbmcga2V5O1xuK1xuK1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbitcbitcdGluY29taW5nID0gcGNpX2xpdmV1cGRhdGVfZmxiX2dldF9pbmNvbWluZygpO1xuK1x0aWYgKCFpbmNvbWluZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0a2V5ID0gcGNpX3Nlcl94YV9rZXkocGNpX2RvbWFpbl9ucihkZXYtXHUwMDNlYnVzKSwgcGNpX2Rldl9pZChkZXYpKTtcbitcdGRldl9zZXIgPSB4YV9sb2FkKFx1MDAyNmluY29taW5nLVx1MDAzZXhhLCBrZXkpO1xuK1xuK1x0LypcbitcdCAqIFRoaXMgZGV2aWNlIHdhcyBub3QgcHJlc2VydmVkIGFjcm9zcyBMaXZlIFVwZGF0ZSwgb3IgaXQgd2FzIHByZXNlcnZlZFxuK1x0ICogYnV0IGhhcyBhbHJlYWR5IGJlZW4gcHJvYmVkIGFuZCBnb25lIHRocm91Z2ggcGNpX2xpdmV1cGRhdGVfZmluaXNoKCksXG4rXHQgKiBlLmcuIGR1ZSB0byByZW1vdmluZyBhbmQgcmUtYWRkaW5nIHRoZSBkZXZpY2UuIEVpdGhlciB3YXksIGl0J3Mgbm90XG4rXHQgKiB0cmVhdGVkIGFzIGluY29taW5nLXByZXNlcnZlZC5cbitcdCAqL1xuK1x0aWYgKCFkZXZfc2VyIHx8ICFkZXZfc2VyLVx1MDAzZXJlZmNvdW50KSB7XG4rXHRcdHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1xuK1x0cGNpX2luZm8oZGV2LCBcIkRldmljZSB3YXMgcHJlc2VydmVkIGJ5IHByZXZpb3VzIGtlcm5lbCBhY3Jvc3MgTGl2ZSBVcGRhdGVcXG5cIik7XG4rXHRkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZyA9IGRldl9zZXI7XG4rXHRkZXYtXHUwMDNlbGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkID0gdHJ1ZTtcbitcbitcdC8qXG4rXHQgKiBIb2xkIHRoZSByZWYgb24gdGhlIGluY29taW5nIEZMQiB1bnRpbCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2goKSBzb1xuK1x0ICogdGhhdCBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZyBjYW5ub3QgZ2V0IGZyZWVkIHdoaWxlIHRoZSBQQ0kgY29yZVxuK1x0ICogaGFzIGEgcG9pbnRlciB0byBpdC4gSXQncyBiZXR0ZXIgdG8gbGVhayB0aGUgaW5jb21pbmcgRkxCIHRoYW4gZG8gYVxuK1x0ICogdXNlLWFmdGVyLWZyZWUgaWYgZHJpdmVyIGRvZXMgbm90IGNhbGwgcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkuXG4rXHQgKi9cbit9XG4rXG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdC8qXG4rXHQgKiBJdCBzaG91bGQgYmUgc2FmZSB0byBSRUFEX09OQ0UoKSBvdXRzaWRlIG9mIHRoZSByd3NlbSBkdXJpbmcgY2xlYW51cFxuK1x0ICogc2luY2UgdGhlcmUgc2hvdWxkIG5vIGxvbmdlciBiZSBhbnkgcmVmZXJlbmNlcyB0byBAZGV2IG9uIHRoZSBzeXN0ZW0uXG4rXHQgKlxuK1x0ICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIHByYWN0aWNlLiBEcml2ZXJzIHNob3VsZCBibG9jayByZW1vdmFsXG4rXHQgKiB3aGlsZSBhIGRldmljZSBpcyBwcmVzZXJ2ZWQuXG4rXHQgKi9cbitcdGlmIChSRUFEX09OQ0UoZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmcpKVxuK1x0XHRwY2lfV0FSTihkZXYsIDEsIFwiRGVzdHJveWluZyBvdXRnb2luZy1wcmVzZXJ2ZWQgZGV2aWNlIVxcblwiKTtcbitcbitcdGlmIChSRUFEX09OQ0UoZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcpKSB7XG4rXHRcdHBjaV9XQVJOKGRldiwgMSwgXCJEZXN0cm95aW5nIGluY29taW5nLXByZXNlcnZlZCBkZXZpY2UhXFxuXCIpO1xuK1x0XHRwY2lfbGl2ZXVwZGF0ZV9mbGJfcHV0X2luY29taW5nKCk7XG4rXHR9XG4rfVxuK1xuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbitcdGRldi1cdTAwM2VsaXZldXBkYXRlLmZyb3plbiA9IDE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfZmluaXNoX2RldmljZShzdHJ1Y3QgcGNpX3NlciAqc2VyLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdGlmICghZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcpIHtcbitcdFx0cGNpX3dhcm4oZGV2LCBcIkNhbm5vdCBmaW5pc2ggcHJlc2VydmluZyBhbiB1bnByZXNlcnZlZCBkZXZpY2VcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZy1cdTAwM2VyZWZjb3VudCkge1xuK1x0XHRwY2lfV0FSTihkZXYsIDEsIFwiUHJlc2VydmVkIGRldmljZSBoYXMgYSAwIHJlZmNvdW50IVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRGVjcmVtZW50IHRoZSByZWZjb3VudCBzbyB0aGlzIGRldmljZSBkb2VzIG5vdCBnZXQgdHJlYXRlZCBhcyBhblxuK1x0ICogaW5jb21pbmcgZGV2aWNlIGFnYWluLCBlLmcuIGluIGNhc2UgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKClcbitcdCAqIGdldHMgY2FsbGVkIGFnYWluIGJlY2F1c2UgdGhlIGRldmljZSBpcyBob3QtcGx1Z2dlZC5cbitcdCAqL1xuK1x0aWYgKC0tZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmctXHUwMDNlcmVmY291bnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGNpX2luZm8oZGV2LCBcIkRldmljZSBpcyBmaW5pc2hlZCBwYXJ0aWNpcGF0aW5nIGluIExpdmUgVXBkYXRlXFxuXCIpO1xuK1x0ZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcgPSBOVUxMO1xuK1x0c2VyLVx1MDAzZW5yX2RldmljZXMtLTtcbitcdHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBwY2lfbGl2ZXVwZGF0ZV9maW5pc2hfcGF0aChzdHJ1Y3QgcGNpX3NlciAqc2VyLCBzdHJ1Y3QgcGNpX2RldiAqc3RhcnQpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKmRldjtcbitcbitcdGZvcl9lYWNoX3BjaV9kZXZfaW5fcGF0aChkZXYsIHN0YXJ0LCBOVUxMKSB7XG4rXHRcdGlmIChwY2lfbGl2ZXVwZGF0ZV9maW5pc2hfZGV2aWNlKHNlciwgZGV2KSlcbitcdFx0XHRyZXR1cm47XG4rXHR9XG4rfVxuK1xuKy8qKlxuKyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIC0gRmluaXNoIHRoZSBwcmVzZXJ2YXRpb24gb2YgYSBQQ0kgZGV2aWNlXG4rICogQGRldjogVGhlIFBDSSBkZXZpY2VcbisgKlxuKyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIG5vdGlmaWVzIHRoZSBQQ0kgY29yZSB0aGF0IGEgUENJIGRldmljZSB0aGF0IHdhc1xuKyAqIHByZXNlcnZlZCBhY3Jvc3MgdGhlIHByZXZpb3VzIExpdmUgVXBkYXRlIGhhcyBmaW5pc2hlZCBwYXJ0aWNpcGF0aW5nIGluIExpdmVcbisgKiBVcGRhdGUuIERyaXZlcnMgbXVzdCBjYWxsIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIGZyb20gdGhlaXIgc3RydWN0XG4rICogbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgZmluaXNoKCkgY2FsbGJhY2sgdG8gZW5zdXJlIHRoZSBpbmNvbWluZyBzdHJ1Y3RcbisgKiBwY2lfc2VyIGlzIGFsbG9jYXRlZC5cbisgKlxuKyAqIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpIGF1dG9tYXRpY2FsbHkgZmluaXNoZXMgYWxsIGJyaWRnZXMgdXBzdHJlYW0gb2YgQGRldi5cbisgKi9cbit2b2lkIHBjaV9saXZldXBkYXRlX2ZpbmlzaChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBwY2lfZmxiX2luY29taW5nICppbmNvbWluZztcbitcbitcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZwY2lfbGl2ZXVwZGF0ZS5yd3NlbSk7XG4rXG4rXHRpbmNvbWluZyA9IHBjaV9saXZldXBkYXRlX2ZsYl9nZXRfaW5jb21pbmcoKTtcbitcdGlmICghaW5jb21pbmcpIHtcbitcdFx0cGNpX3dhcm4oZGV2LCBcIkNhbm5vdCBmaW5pc2ggcHJlc2VydmluZyBkZXZpY2Ugd2l0aG91dCBpbmNvbWluZyBGTEJcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHBjaV9saXZldXBkYXRlX2ZpbmlzaF9wYXRoKGluY29taW5nLVx1MDAzZXNlciwgZGV2KTtcbitcdHBjaV9saXZldXBkYXRlX2ZsYl9wdXRfaW5jb21pbmcoKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfZmluaXNoKTtcbitcbit2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlYWNzX2NhcCB8fCAhZGV2LVx1MDAzZWxpdmV1cGRhdGUuaW5jb21pbmcpXG4rXHRcdHJldHVybjtcbitcbitcdHBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZGV2LVx1MDAzZWFjc19jYXAgKyBQQ0lfQUNTX0NUUkwsIFx1MDAyNmRldi1cdTAwM2VsaXZldXBkYXRlLmFjc19jdHJsKTtcbit9XG4rXG4raW50IHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHR1MTYgYWNzX2N0cmwgPSBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5hY3NfY3RybDtcbitcdHUxNiBhY3NfY2FwID0gZGV2LVx1MDAzZWFjc19jYXA7XG4rXG4rXHQvKlxuK1x0ICogVXNlIGxpdmV1cGRhdGUud2FzX3ByZXNlcnZlZCBpbnN0ZWFkIG9mIGxpdmV1cGRhdGUuaW5jb21pbmcgc2luY2UgdGhlXG4rXHQgKiBkZXZpY2UncyBBQ1MgY29udHJvbHMgc2hvdWxkIG5vdCBjaGFuZ2UgZXZlbiBhZnRlciB0aGUgZGV2aWNlIGlzXG4rXHQgKiBmaW5pc2hlZCBwYXJ0aWNpcGF0aW5nIGluIHRoZSBMaXZlIFVwZGF0ZS5cbitcdCAqL1xuK1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS53YXNfcHJlc2VydmVkKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qXG4rXHQgKiBUaGUgcHJldmlvdXMga2VybmVsIHNob3VsZCBub3QgaGF2ZSBwcmVzZXJ2ZWQgYW55IGRldmljZXMgdGhhdFxuK1x0ICogcmVxdWlyZSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIHRvIGVuYWJsZSBBQ1MsIGJ1dCBpZiBzdWNoIGEgZGV2aWNlIGlzXG4rXHQgKiBkZXRlY3RlZCAoZS5nLiBuZXcgZGV2aWNlLXNwZWNpZmljIEFDUyBxdWlyayBpbiB0aGUgY3VycmVudCBrZXJuZWwpLFxuK1x0ICogbG9nIGEgYmlnIHdhcm5pbmcgYW5kIGZhbGwgYmFjayB0byB0aGUgbm9ybWFsIGVuYWJsZSBBQ1MgcGF0aC5cbitcdCAqL1xuK1x0aWYgKHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKGRldikpIHtcbitcdFx0cGNpX3dhcm4oZGV2LCBcIkRldmljZS1zcGVjaWZpYyBxdWlyayByZXF1aXJlZCB0byBlbmFibGUgQUNTIVxcblwiKTtcbitcdFx0V0FSTl9PTl9PTkNFKHRydWUpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChhY3NfY2FwKVxuK1x0XHRwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBhY3NfY2FwICsgUENJX0FDU19DVFJMLCBhY3NfY3RybCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHR1MTYgdmFsO1xuK1xuK1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGRldiwgUENJX0VYUF9ERVZDVEwyLCBcdTAwMjZ2YWwpO1xuK1x0ZGV2LVx1MDAzZWFyaV9lbmFibGVkID0gISEodmFsIFx1MDAyNiBQQ0lfRVhQX0RFVkNUTDJfQVJJKTtcbitcdHJldHVybiAwO1xuK31cbitcbitib29sIHBjaV9saXZldXBkYXRlX2lzX291dGdvaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2cGNpX2xpdmV1cGRhdGUucndzZW0pO1xuK1x0cGNpX1dBUk5fT05DRShkZXYsICFkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5mcm96ZW4sIFwiUHJlc2VydmF0aW9uIHN0YXR1cyBpcyB1bnN0YWJsZSFcXG5cIik7XG4rXHRyZXR1cm4gZGV2LVx1MDAzZWxpdmV1cGRhdGUub3V0Z29pbmc7XG4rfVxuK1xuKy8qKlxuKyAqIHBjaV9saXZldXBkYXRlX2lzX2luY29taW5nKCkgLSBDaGVjayBpZiBhIGRldmljZSBpcyBpbmNvbWluZy1wcmVzZXJ2ZWRcbisgKiBAZGV2OiBUaGUgUENJIGRldmljZSB0byBjaGVja1xuKyAqXG4rICogQ2hlY2sgaWYgYSBkZXZpY2Ugd2FzIHByZXNlcnZlZCBhY3Jvc3MgTGl2ZSBVcGRhdGUgYnkgdGhlIHByZXZpb3VzIGtlcm5lbCxcbisgKiBpLmUuIHRoZSBkZXZpY2UgaXMgaW5jb21pbmctcHJlc2VydmVkLiBOb3RlIHRoYXQgYSBkZXZpY2UgaXMgb25seSBjb25zaWRlcmVkXG4rICogaW5jb21pbmctcHJlc2VydmVkIHByaW9yIHRvIHBjaV9saXZldXBkYXRlX2ZpbmlzaCgpLiBJdCBpcyB1cCB0byBkcml2ZXJzIHRvXG4rICogc3luY2hyb25pemUgdXNhZ2Ugb2YgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoKSB3aXRoIHRoZWlyIG93biBjYWxsIHRvXG4rICogcGNpX2xpdmV1cGRhdGVfZmluaXNoKCkgdG8gYXZvaWQgYWN0aW5nIG9uIHN0YWxlIGRhdGEuXG4rICpcbisgKiBSZXR1cm5zOiBUcnVlIGlmIHRoZSBkZXZpY2UgaXMgaW5jb21pbmctcHJlc2VydmVkLCBmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rYm9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19pbmNvbWluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNnBjaV9saXZldXBkYXRlLnJ3c2VtKTtcbitcdHJldHVybiBkZXYtXHUwMDNlbGl2ZXVwZGF0ZS5pbmNvbWluZztcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcpO1xuK1xuKy8qKlxuKyAqIHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYigpIC0gUmVnaXN0ZXIgYSBmaWxlIGhhbmRsZXIgd2l0aCB0aGUgUENJIGNvcmVcbisgKiBAZmg6IFRoZSBmaWxlIGhhbmRsZXIgdG8gcmVnaXN0ZXIuXG4rICpcbisgKiBEcml2ZXJzIHNob3VsZCBjYWxsIHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYigpIHRvIHJlZ2lzdGVyIHRoZWlyXG4rICogc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIHdpdGggdGhlIFBDSSBjb3JlLiBUaGlzIGVuYWJsZXMgdGhlIFBDSSBjb3JlXG4rICogdG8gYWxsb2NhdGUgaXRzIG91dGdvaW5nIHN0cnVjdCBwY2lfc2VyIHdoZW5ldmVyIHRoZSBmaXJzdCBkZXZpY2UgaXNcbisgKiBwcmVzZXJ2ZWQsIGFuZCBmcmVlIGl0IHdoZW4gdGhlIGxhc3QgZGV2aWNlIGlzIHVucHJlc2VydmVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXG4re1xuK1x0cHJfZGVidWcoXCJSZWdpc3RlcmluZyBmaWxlIGhhbmRsZXIgXFxcIiVzXFxcIlxcblwiLCBmaC1cdTAwM2Vjb21wYXRpYmxlKTtcbitcdHJldHVybiBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihmaCwgXHUwMDI2cGNpX2xpdmV1cGRhdGVfZmxiKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKTtcbitcbisvKipcbisgKiBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYigpIC0gVW5yZWdpc3RlciBhIGZpbGUgaGFuZGxlciB3aXRoIHRoZSBQQ0kgY29yZVxuKyAqIEBmaDogVGhlIGZpbGUgaGFuZGxlciB0byB1bnJlZ2lzdGVyLlxuKyAqL1xuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbit7XG4rXHRwcl9kZWJ1ZyhcIlVucmVnaXN0ZXJpbmcgZmlsZSBoYW5kbGVyIFxcXCIlc1xcXCJcXG5cIiwgZmgtXHUwMDNlY29tcGF0aWJsZSk7XG4rXHRsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKGZoLCBcdTAwMjZwY2lfbGl2ZXVwZGF0ZV9mbGIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oIGIvZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIyNjY0MDZhYWFjODBkXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL3BjaS9saXZldXBkYXRlLmhcbkBAIC0wLDAgKzEsNjggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogUENJIExpdmUgVXBkYXRlIHN1cHBvcnQgKGNvcmUgQVBJKVxuKyAqXG4rICogQ29weXJpZ2h0IChjKSAyMDI2LCBHb29nbGUgTExDLlxuKyAqIERhdmlkIE1hdGxhY2sgXHUwMDNjZG1hdGxhY2tAZ29vZ2xlLmNvbVx1MDAzZVxuKyAqL1xuKyNpZm5kZWYgRFJJVkVSU19QQ0lfTElWRVVQREFURV9IXG4rI2RlZmluZSBEUklWRVJTX1BDSV9MSVZFVVBEQVRFX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuK1xuKyNpZmRlZiBDT05GSUdfUENJX0xJVkVVUERBVEVcbit2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbit2b2lkIHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuK2Jvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbitcdFx0XHRcdCAgICAgIGludCBwYXNzKTtcbit2b2lkIHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcGFzcyk7XG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV9pbml0X2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbitpbnQgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbitpbnQgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbitib29sIHBjaV9saXZldXBkYXRlX2lzX291dGdvaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfZnJlZXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oc3RydWN0IHBjaV9idXMgKmJ1cyxcbitcdFx0XHRcdFx0XHQgICAgc3RydWN0IHBjaV9kZXYgKmRldixcbitcdFx0XHRcdFx0XHQgICAgaW50IHBhc3MpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwYXNzKVxuK3tcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX2luaXRfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIHBjaV9saXZldXBkYXRlX2lzX291dGdvaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbisjZW5kaWZcbitcbisjZW5kaWYgLyogRFJJVkVSU19QQ0lfTElWRVVQREFURV9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jXG5pbmRleCBmMzY3NzhlNjJhYzFhNS4uNDdjYjNkY2FhOTI3ODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmNcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xuQEAgLTIxLDYgKzIxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwLW9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXUuaFx1MDAzZVxuKyNpbmNsdWRlIFwibGl2ZXVwZGF0ZS5oXCJcbiAjaW5jbHVkZSBcInBjaS5oXCJcbiAjaW5jbHVkZSBcInBjaWUvcG9ydGRydi5oXCJcbiBcbkBAIC01MzYsNiArNTM3LDcgQEAgc3RhdGljIHZvaWQgcGNpX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTtcbiBcdHN0cnVjdCBwY2lfZHJpdmVyICpkcnYgPSBwY2lfZGV2LVx1MDAzZWRyaXZlcjtcbiBcbitcdHBjaV9saXZldXBkYXRlX2ZyZWV6ZShwY2lfZGV2KTtcbiBcdHBtX3J1bnRpbWVfcmVzdW1lKGRldik7XG4gXG4gXHRpZiAoZHJ2IFx1MDAyNlx1MDAyNiBkcnYtXHUwMDNlc2h1dGRvd24pXG5AQCAtNTQ0LDExICs1NDYsMTQgQEAgc3RhdGljIHZvaWQgcGNpX2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHQvKlxuIFx0ICogSWYgdGhpcyBpcyBhIGtleGVjIHJlYm9vdCwgdHVybiBvZmYgQnVzIE1hc3RlciBiaXQgb24gdGhlXG4gXHQgKiBkZXZpY2UgdG8gdGVsbCBpdCB0byBub3QgY29udGludWUgdG8gZG8gRE1BLiBEb24ndCB0b3VjaFxuLVx0ICogZGV2aWNlcyBpbiBEM2NvbGQgb3IgdW5rbm93biBzdGF0ZXMuXG4rXHQgKiBkZXZpY2VzIGJlaW5nIHByZXNlcnZlZCBmb3IgTGl2ZSBVcGRhdGUgb3IgaW4gRDNjb2xkIG9yXG4rXHQgKiB1bmtub3duIHN0YXRlcy5cbitcdCAqXG4gXHQgKiBJZiBpdCBpcyBub3QgYSBrZXhlYyByZWJvb3QsIGZpcm13YXJlIHdpbGwgaGl0IHRoZSBQQ0lcbiBcdCAqIGRldmljZXMgd2l0aCBiaWcgaGFtbWVyIGFuZCBzdG9wIHRoZWlyIERNQSBhbnkgd2F5LlxuIFx0ICovXG4tXHRpZiAoa2V4ZWNfaW5fcHJvZ3Jlc3MgXHUwMDI2XHUwMDI2IChwY2lfZGV2LVx1MDAzZWN1cnJlbnRfc3RhdGUgXHUwMDNjPSBQQ0lfRDNob3QpKVxuK1x0aWYgKGtleGVjX2luX3Byb2dyZXNzIFx1MDAyNlx1MDAyNiAhcGNpX2xpdmV1cGRhdGVfaXNfb3V0Z29pbmcocGNpX2RldikgXHUwMDI2XHUwMDI2XG4rXHQgICAgcGNpX2Rldi1cdTAwM2VjdXJyZW50X3N0YXRlIFx1MDAzYz0gUENJX0QzaG90KVxuIFx0XHRwY2lfY2xlYXJfbWFzdGVyKHBjaV9kZXYpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jXG5pbmRleCA3N2IxN2IxM2VlNjE1NC4uZTBjMTMzYjY2YTM1OTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wY2kuY1xuKysrIGIvZHJpdmVycy9wY2kvcGNpLmNcbkBAIC0zNCw2ICszNCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJsaXZldXBkYXRlLmhcIlxuICNpbmNsdWRlIFwicGNpLmhcIlxuIFxuIERFRklORV9NVVRFWChwY2lfc2xvdF9tdXRleCk7XG5AQCAtMTAwOCw2ICsxMDEwLDkgQEAgdm9pZCBwY2lfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0Ym9vbCBlbmFibGVfYWNzID0gZmFsc2U7XG4gXHRpbnQgcG9zO1xuIFxuK1x0aWYgKCFwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzKGRldikpXG4rXHRcdHJldHVybjtcbitcbiBcdC8qIElmIGFuIGlvbW11IGlzIHByZXNlbnQgd2Ugc3RhcnQgd2l0aCBrZXJuZWwgZGVmYXVsdCBjYXBzICovXG4gXHRpZiAocGNpX2Fjc19lbmFibGUpIHtcbiBcdFx0aWYgKHBjaV9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhkZXYpKVxuQEAgLTM1MjMsNyArMzUyOCw3IEBAIHZvaWQgcGNpX2NvbmZpZ3VyZV9hcmkoc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdHUzMiBjYXA7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlO1xuIFxuLVx0aWYgKHBjaWVfYXJpX2Rpc2FibGVkIHx8ICFwY2lfaXNfcGNpZShkZXYpIHx8IGRldi1cdTAwM2VkZXZmbilcbitcdGlmICghcGNpX2lzX3BjaWUoZGV2KSB8fCBkZXYtXHUwMDNlZGV2Zm4pXG4gXHRcdHJldHVybjtcbiBcbiBcdGJyaWRnZSA9IGRldi1cdTAwM2VidXMtXHUwMDNlc2VsZjtcbkBAIC0zNTM0LDYgKzM1MzksMTIgQEAgdm9pZCBwY2lfY29uZmlndXJlX2FyaShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aWYgKCEoY2FwIFx1MDAyNiBQQ0lfRVhQX0RFVkNBUDJfQVJJKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKCFwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpKGJyaWRnZSkpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChwY2llX2FyaV9kaXNhYmxlZClcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfQVJJKSkge1xuIFx0XHRwY2llX2NhcGFiaWxpdHlfc2V0X3dvcmQoYnJpZGdlLCBQQ0lfRVhQX0RFVkNUTDIsXG4gXHRcdFx0XHRcdCBQQ0lfRVhQX0RFVkNUTDJfQVJJKTtcbkBAIC0zNjg5LDYgKzM3MDAsNyBAQCB2b2lkIHBjaV9hY3NfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFxuIFx0cGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfQUNTX0NBUCwgXHUwMDI2ZGV2LVx1MDAzZWFjc19jYXBhYmlsaXRpZXMpO1xuIFx0cGNpX2Rpc2FibGVfYnJva2VuX2Fjc19jYXAoZGV2KTtcbitcdHBjaV9saXZldXBkYXRlX2luaXRfYWNzKGRldik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcbmluZGV4IDQ0NjllMWE3N2YzYzEzLi45ODhhMThiMzIwNGFmNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oXG4rKysgYi9kcml2ZXJzL3BjaS9wY2kuaFxuQEAgLTEwNDcsNiArMTA0Nyw3IEBAIHZvaWQgcGNpX2Fjc19pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIHZvaWQgcGNpX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldik7XG4gI2lmZGVmIENPTkZJR19QQ0lfUVVJUktTXG4gaW50IHBjaV9kZXZfc3BlY2lmaWNfYWNzX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IGFjc19mbGFncyk7XG4rYm9vbCBwY2lfbmVlZF9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfZGV2X3NwZWNpZmljX2Rpc2FibGVfYWNzX3JlZGlyKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIHZvaWQgcGNpX2Rpc2FibGVfYnJva2VuX2Fjc19jYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuQEAgLTEwNTcsNiArMTA1OCwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2lfZGV2X3NwZWNpZmljX2Fjc19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4ge1xuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfbmVlZF9kZXZfc3BlY2lmaWNfZW5hYmxlX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4gc3RhdGljIGlubGluZSBpbnQgcGNpX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4ge1xuIFx0cmV0dXJuIC1FTk9UVFk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmNcbmluZGV4IGRkMGFiYmM2M2UxOGQxLi4xNjU5NzNiYzkyYWFiYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmNcbisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmNcbkBAIC0yNCw2ICsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFwibGl2ZXVwZGF0ZS5oXCJcbiAjaW5jbHVkZSBcInBjaS5oXCJcbiBcbiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJ1c25fcmVzb3VyY2UgPSB7XG5AQCAtMTM5Niw2ICsxMzk3LDcgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0XHQgIGludCBtYXgsIHVuc2lnbmVkIGludCBhdmFpbGFibGVfYnVzZXMsXG4gXHRcdFx0XHQgIGludCBwYXNzKVxuIHtcbitcdGJvb2wgbGl2ZXVwZGF0ZSwgYXNzaWduX25ld19idXNlcyA9IHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKTtcbiBcdHN0cnVjdCBwY2lfYnVzICpjaGlsZDtcbiBcdHUzMiBidXNlcztcbiBcdHUxNiBiY3RsO1xuQEAgLTE0MDUsNiArMTQwNywxMCBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdHU4IGZpeGVkX3NlYywgZml4ZWRfc3ViO1xuIFx0aW50IG5leHRfYnVzbnI7XG4gXG4rXHRsaXZldXBkYXRlID0gcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW4oYnVzLCBkZXYsIHBhc3MpO1xuK1x0aWYgKGxpdmV1cGRhdGUpXG4rXHRcdGFzc2lnbl9uZXdfYnVzZXMgPSBmYWxzZTtcbitcbiBcdC8qXG4gXHQgKiBNYWtlIHN1cmUgdGhlIGJyaWRnZSBpcyBwb3dlcmVkIG9uIHRvIGJlIGFibGUgdG8gYWNjZXNzIGNvbmZpZ1xuIFx0ICogc3BhY2Ugb2YgZGV2aWNlcyBiZWxvdyBpdC5cbkBAIC0xNDQ4LDggKzE0NTQsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoKHNlY29uZGFyeSB8fCBzdWJvcmRpbmF0ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIXBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSBcdTAwMjZcdTAwMjYgIWJyb2tlbikge1xuK1x0aWYgKChzZWNvbmRhcnkgfHwgc3Vib3JkaW5hdGUpIFx1MDAyNlx1MDAyNiAhYXNzaWduX25ld19idXNlcyBcdTAwMjZcdTAwMjYgIWJyb2tlbikge1xuIFx0XHR1bnNpZ25lZCBpbnQgY21heCwgYnVzZXM7XG4gXG4gXHRcdC8qXG5AQCAtMTQ5MSw4ICsxNDk2LDcgQEAgc3RhdGljIGludCBwY2lfc2Nhbl9icmlkZ2VfZXh0ZW5kKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdCAqIGRvIGluIHRoZSBzZWNvbmQgcGFzcy5cbiBcdFx0ICovXG4gXHRcdGlmICghcGFzcykge1xuLVx0XHRcdGlmIChwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkgfHwgYnJva2VuKVxuLVxuK1x0XHRcdGlmIChhc3NpZ25fbmV3X2J1c2VzIHx8IGJyb2tlbilcbiBcdFx0XHRcdC8qXG4gXHRcdFx0XHQgKiBUZW1wb3JhcmlseSBkaXNhYmxlIGZvcndhcmRpbmcgb2YgdGhlXG4gXHRcdFx0XHQgKiBjb25maWd1cmF0aW9uIGN5Y2xlcyBvbiBhbGwgYnJpZGdlcyBpblxuQEAgLTE1MDYsNiArMTUxMCwxMSBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuK1x0XHRpZiAobGl2ZXVwZGF0ZSkge1xuK1x0XHRcdHBjaV9lcnIoZGV2LCBcIkNhbm5vdCByZWNvbmZpZ3VyZSBicmlkZ2UgZHVyaW5nIExpdmUgVXBkYXRlLCBza2lwcGluZ1xcblwiKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuIFx0XHQvKiBDbGVhciBlcnJvcnMgKi9cbiBcdFx0cGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX1NUQVRVUywgMHhmZmZmKTtcbiBcbkBAIC0xNTY2LDYgKzE1NzUsNyBAQCBzdGF0aWMgaW50IHBjaV9zY2FuX2JyaWRnZV9leHRlbmQoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgYmN0bCk7XG4gXG4gXHRwbV9ydW50aW1lX3B1dChcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbitcdHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZChkZXYsIHBhc3MpO1xuIFxuIFx0cmV0dXJuIG1heDtcbiB9XG5AQCAtMjA2NCw2ICsyMDc0LDggQEAgaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdGlmIChwY2lfZWFybHlfZHVtcClcbiBcdFx0ZWFybHlfZHVtcF9wY2lfZGV2aWNlKGRldik7XG4gXG4rXHRwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2UoZGV2KTtcbitcbiBcdC8qIE5lZWQgdG8gaGF2ZSBkZXYtXHUwMDNlY2xhc3MgcmVhZHkgKi9cbiBcdGRldi1cdTAwM2VjZmdfc2l6ZSA9IHBjaV9jZmdfc3BhY2Vfc2l6ZShkZXYpO1xuIFxuQEAgLTIxODcsNiArMjE5OSw3IEBAIGludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gXHRkZWZhdWx0Olx0XHRcdFx0ICAgIC8qIHVua25vd24gaGVhZGVyICovXG4gXHRcdHBjaV9lcnIoZGV2LCBcInVua25vd24gaGVhZGVyIHR5cGUgJTAyeCwgaWdub3JpbmcgZGV2aWNlXFxuXCIsXG4gXHRcdFx0ZGV2LVx1MDAzZWhkcl90eXBlKTtcbitcdFx0cGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2UoZGV2KTtcbiBcdFx0cGNpX3JlbGVhc2Vfb2Zfbm9kZShkZXYpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcbkBAIC0yNDg1LDYgKzI0OTgsNyBAQCBzdGF0aWMgdm9pZCBwY2lfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KVxuIFxuIFx0cGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTtcbiBcdHBjaV9yZWxlYXNlX2NhcGFiaWxpdGllcyhwY2lfZGV2KTtcbitcdHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlKHBjaV9kZXYpO1xuIFx0cGNpX3JlbGVhc2Vfb2Zfbm9kZShwY2lfZGV2KTtcbiBcdHBjaWJpb3NfcmVsZWFzZV9kZXZpY2UocGNpX2Rldik7XG4gXHRwY2lfYnVzX3B1dChwY2lfZGV2LVx1MDAzZWJ1cyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuY1xuaW5kZXggYjA5ZjI3Zjc4NDZmY2QuLjk5YjgxOWYzOGU0OWMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmNcbisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jXG5AQCAtNTM3NCw5ICs1Mzc0LDYgQEAgc3RhdGljIHZvaWQgcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9ycF9tcGNfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gICovXG4gc3RhdGljIGludCBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3BjaF9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbiB7XG4tXHRpZiAoIXBjaV9xdWlya19pbnRlbF9wY2hfYWNzX21hdGNoKGRldikpXG4tXHRcdHJldHVybiAtRU5PVFRZO1xuLVxuIFx0aWYgKHBjaV9xdWlya19lbmFibGVfaW50ZWxfbHBjX2FjcyhkZXYpKSB7XG4gXHRcdHBjaV93YXJuKGRldiwgXCJGYWlsZWQgdG8gZW5hYmxlIEludGVsIFBDSCBBQ1MgcXVpcmtcXG5cIik7XG4gXHRcdHJldHVybiAwO1xuQEAgLTUzOTYsOSArNTM5Myw2IEBAIHN0YXRpYyBpbnQgcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9zcHRfcGNoX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aW50IHBvcztcbiBcdHUzMiBjYXAsIGN0cmw7XG4gXG4tXHRpZiAoIXBjaV9xdWlya19pbnRlbF9zcHRfcGNoX2Fjc19tYXRjaChkZXYpKVxuLVx0XHRyZXR1cm4gLUVOT1RUWTtcbi1cbiBcdHBvcyA9IGRldi1cdTAwM2VhY3NfY2FwO1xuIFx0aWYgKCFwb3MpXG4gXHRcdHJldHVybiAtRU5PVFRZO1xuQEAgLTU0MjYsOSArNTQyMCw2IEBAIHN0YXRpYyBpbnQgcGNpX3F1aXJrX2Rpc2FibGVfaW50ZWxfc3B0X3BjaF9hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdGludCBwb3M7XG4gXHR1MzIgY2FwLCBjdHJsO1xuIFxuLVx0aWYgKCFwY2lfcXVpcmtfaW50ZWxfc3B0X3BjaF9hY3NfbWF0Y2goZGV2KSlcbi1cdFx0cmV0dXJuIC1FTk9UVFk7XG4tXG4gXHRwb3MgPSBkZXYtXHUwMDNlYWNzX2NhcDtcbiBcdGlmICghcG9zKVxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbkBAIC01NDQ4LDU2ICs1NDM5LDYzIEBAIHN0YXRpYyBpbnQgcGNpX3F1aXJrX2Rpc2FibGVfaW50ZWxfc3B0X3BjaF9hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKmRldilcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyB7XG4gXHR1MTYgdmVuZG9yO1xuIFx0dTE2IGRldmljZTtcbitcdGJvb2wgKCptYXRjaCkoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gXHRpbnQgKCplbmFibGVfYWNzKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBcdGludCAoKmRpc2FibGVfYWNzX3JlZGlyKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB9IHBjaV9kZXZfYWNzX29wc1tdID0ge1xuIFx0eyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfQU5ZX0lELFxuK1x0ICAgIC5tYXRjaCA9IHBjaV9xdWlya19pbnRlbF9wY2hfYWNzX21hdGNoLFxuIFx0ICAgIC5lbmFibGVfYWNzID0gcGNpX3F1aXJrX2VuYWJsZV9pbnRlbF9wY2hfYWNzLFxuIFx0fSxcbiBcdHsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0FOWV9JRCxcbitcdCAgICAubWF0Y2ggPSBwY2lfcXVpcmtfaW50ZWxfc3B0X3BjaF9hY3NfbWF0Y2gsXG4gXHQgICAgLmVuYWJsZV9hY3MgPSBwY2lfcXVpcmtfZW5hYmxlX2ludGVsX3NwdF9wY2hfYWNzLFxuIFx0ICAgIC5kaXNhYmxlX2Fjc19yZWRpciA9IHBjaV9xdWlya19kaXNhYmxlX2ludGVsX3NwdF9wY2hfYWNzX3JlZGlyLFxuIFx0fSxcbiB9O1xuIFxuLWludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcGNpX2Rldl9hY3Nfb3BzX2dldChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBwY2lfZGV2X2Fjc19vcHMgKnA7XG4tXHRpbnQgaSwgcmV0O1xuK1x0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBjaV9kZXZfYWNzX29wcyk7IGkrKykge1xuIFx0XHRwID0gXHUwMDI2cGNpX2Rldl9hY3Nfb3BzW2ldO1xuIFx0XHRpZiAoKHAtXHUwMDNldmVuZG9yID09IGRldi1cdTAwM2V2ZW5kb3IgfHxcbiBcdFx0ICAgICBwLVx1MDAzZXZlbmRvciA9PSAodTE2KVBDSV9BTllfSUQpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKHAtXHUwMDNlZGV2aWNlID09IGRldi1cdTAwM2VkZXZpY2UgfHxcbi1cdFx0ICAgICBwLVx1MDAzZWRldmljZSA9PSAodTE2KVBDSV9BTllfSUQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcC1cdTAwM2VlbmFibGVfYWNzKSB7XG4tXHRcdFx0cmV0ID0gcC1cdTAwM2VlbmFibGVfYWNzKGRldik7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4tXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQgICAgIHAtXHUwMDNlZGV2aWNlID09ICh1MTYpUENJX0FOWV9JRCkpIHtcbitcdFx0XHRpZiAoIXAtXHUwMDNlbWF0Y2ggfHwgcC1cdTAwM2VtYXRjaChkZXYpKVxuK1x0XHRcdFx0cmV0dXJuIHA7XG4gXHRcdH1cbiBcdH1cbiBcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitib29sIHBjaV9uZWVkX2Rldl9zcGVjaWZpY19lbmFibGVfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcCA9IHBjaV9kZXZfYWNzX29wc19nZXQoZGV2KTtcbitcbitcdHJldHVybiBwIFx1MDAyNlx1MDAyNiBwLVx1MDAzZWVuYWJsZV9hY3M7XG4rfVxuK1xuK2ludCBwY2lfZGV2X3NwZWNpZmljX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpO1xuK1xuK1x0aWYgKHAgXHUwMDI2XHUwMDI2IHAtXHUwMDNlZW5hYmxlX2FjcylcbitcdFx0cmV0dXJuIHAtXHUwMDNlZW5hYmxlX2FjcyhkZXYpO1xuK1xuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuIFxuIGludCBwY2lfZGV2X3NwZWNpZmljX2Rpc2FibGVfYWNzX3JlZGlyKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4ge1xuLVx0Y29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX29wcyAqcDtcbi1cdGludCBpLCByZXQ7XG4rXHRjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3Nfb3BzICpwID0gcGNpX2Rldl9hY3Nfb3BzX2dldChkZXYpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwY2lfZGV2X2Fjc19vcHMpOyBpKyspIHtcbi1cdFx0cCA9IFx1MDAyNnBjaV9kZXZfYWNzX29wc1tpXTtcbi1cdFx0aWYgKChwLVx1MDAzZXZlbmRvciA9PSBkZXYtXHUwMDNldmVuZG9yIHx8XG4tXHRcdCAgICAgcC1cdTAwM2V2ZW5kb3IgPT0gKHUxNilQQ0lfQU5ZX0lEKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIChwLVx1MDAzZWRldmljZSA9PSBkZXYtXHUwMDNlZGV2aWNlIHx8XG4tXHRcdCAgICAgcC1cdTAwM2VkZXZpY2UgPT0gKHUxNilQQ0lfQU5ZX0lEKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHAtXHUwMDNlZGlzYWJsZV9hY3NfcmVkaXIpIHtcbi1cdFx0XHRyZXQgPSBwLVx1MDAzZWRpc2FibGVfYWNzX3JlZGlyKGRldik7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4tXHRcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHR9XG4tXHR9XG4rXHRpZiAocCBcdTAwMjZcdTAwMjYgcC1cdTAwM2VkaXNhYmxlX2Fjc19yZWRpcilcbitcdFx0cmV0dXJuIHAtXHUwMDNlZGlzYWJsZV9hY3NfcmVkaXIoZGV2KTtcbiBcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmggYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvcGNpLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWNmMWIzOGRmZjAyNGFcbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9wY2kuaFxuQEAgLTAsMCArMSw1OSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIEdvb2dsZSBMTEMuXG4rICogRGF2aWQgTWF0bGFjayBcdTAwM2NkbWF0bGFja0Bnb29nbGUuY29tXHUwMDNlXG4rICovXG4rXG4rI2lmbmRlZiBfTElOVVhfS0hPX0FCSV9QQ0lfSFxuKyNkZWZpbmUgX0xJTlVYX0tIT19BQklfUENJX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rLyoqXG4rICogRE9DOiBQQ0kgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgTGl2ZSBVcGRhdGUgQUJJXG4rICpcbisgKiBUaGlzIGhlYWRlciBkZWZpbmVzIHRoZSBBQkkgZm9yIHByZXNlcnZpbmcgY29yZSBQQ0kgc3RhdGUgYWNyb3NzIGtleGVjIHVzaW5nXG4rICogTGl2ZSBVcGRhdGUgRmlsZS1MaWZlY3ljbGUgQm91bmQgKEZMQikgZGF0YS5cbisgKlxuKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGEgY29udHJhY3QuIEFueSBtb2RpZmljYXRpb24gdG8gYW55IG9mIHRoZSBzZXJpYWxpemF0aW9uXG4rICogc3RydWN0cyBkZWZpbmVkIGhlcmUgY29uc3RpdHV0ZXMgYSBicmVha2luZyBjaGFuZ2UuIFN1Y2ggY2hhbmdlcyByZXF1aXJlXG4rICogaW5jcmVtZW50aW5nIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgUENJX0xVT19GTEJfQ09NUEFUSUJMRSBzdHJpbmcuXG4rICovXG4rXG4rI2RlZmluZSBQQ0lfTFVPX0ZMQl9DT01QQVRJQkxFIFwicGNpLXYyXCJcbitcbisvKipcbisgKiBzdHJ1Y3QgcGNpX2Rldl9zZXIgLSBTZXJpYWxpemVkIHN0YXRlIGFib3V0IGEgc2luZ2xlIFBDSSBkZXZpY2UuXG4rICpcbisgKiBAZG9tYWluOiBUaGUgZGV2aWNlJ3MgUENJIGRvbWFpbiBudW1iZXIgKHNlZ21lbnQpLlxuKyAqIEBiZGY6IFRoZSBkZXZpY2UncyBQQ0kgYnVzLCBkZXZpY2UsIGFuZCBmdW5jdGlvbiBudW1iZXIuXG4rICogQHJlZmNvdW50OiBSZWZlcmVuY2UgY291bnQgdXNlZCBieSB0aGUgUENJIGNvcmUgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGl0XG4rICogICAgICAgICAgICBpcyBkb25lIHVzaW5nIGEgZGV2aWNlJ3Mgc3RydWN0IHBjaV9kZXZfc2VyLiBUaGUgdmFsdWUgb2YgdGhlXG4rICogICAgICAgICAgICByZWZjb3VudCBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIHByZXNlcnZlZCBkZXZpY2VzIGF0IG9yIGJlbG93XG4rICogICAgICAgICAgICBpdCBpbiB0aGUgUENJIGhpZXJhcmNoeSB3aGVuIHRoZSBzdHJ1Y3QgcGNpX2Rldl9zZXIgaXMgaW4gdXNlLCBhbmRcbisgKiAgICAgICAgICAgIDAgb3RoZXJ3aXNlLlxuKyAqL1xuK3N0cnVjdCBwY2lfZGV2X3NlciB7XG4rXHR1MzIgZG9tYWluO1xuK1x0dTE2IGJkZjtcbitcdHUxNiByZWZjb3VudDtcbit9IF9fcGFja2VkO1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwY2lfc2VyIC0gUENJIFN1YnN5c3RlbSBMaXZlIFVwZGF0ZSBTdGF0ZVxuKyAqXG4rICogVGhpcyBzdHJ1Y3QgdHJhY2tzIHN0YXRlIGFib3V0IGFsbCBkZXZpY2VzIHRoYXQgYXJlIGJlaW5nIHByZXNlcnZlZCBhY3Jvc3NcbisgKiBhIExpdmUgVXBkYXRlIGZvciB0aGUgbmV4dCBrZXJuZWwuXG4rICpcbisgKiBAbnJfZGV2aWNlczogVGhlIG51bWJlciBvZiBkZXZpY2VzIHRoYXQgd2VyZSBwcmVzZXJ2ZWQuXG4rICogQGRldmljZXM6IFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IEtITyBibG9jayBjb250YWluaW5nIHBjaV9kZXZfc2VyLlxuKyAqL1xuK3N0cnVjdCBwY2lfc2VyIHtcbitcdHUzMiBucl9kZXZpY2VzO1xuK1x0dTY0IGRldmljZXM7XG4rfSBfX3BhY2tlZDtcbitcbisjZW5kaWYgLyogX0xJTlVYX0tIT19BQklfUENJX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxuaW5kZXggZWJiNWI5ZDc2MzYwOWUuLmI0MWRkNTcyYTJkNmIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaFxuQEAgLTQzLDYgKzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3BjaS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX2lkcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX2xpdmV1cGRhdGUuaFx1MDAzZVxuIFxuICNkZWZpbmUgUENJX1NUQVRVU19FUlJPUl9CSVRTIChQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSAgfCBcXFxuIFx0XHRcdCAgICAgICBQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IgfCBcXFxuQEAgLTU5Miw2ICs1OTMsOSBAQCBzdHJ1Y3QgcGNpX2RldiB7XG4gXHR1OFx0XHR0cGhfbW9kZTtcdC8qIFRQSCBtb2RlICovXG4gXHR1OFx0XHR0cGhfcmVxX3R5cGU7XHQvKiBUUEggcmVxdWVzdGVyIHR5cGUgKi9cbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX1BDSV9MSVZFVVBEQVRFXG4rXHRzdHJ1Y3QgcGNpX2xpdmV1cGRhdGUgbGl2ZXVwZGF0ZTtcbisjZW5kaWZcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKnBjaV9waHlzZm4oc3RydWN0IHBjaV9kZXYgKmRldilcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9saXZldXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9saXZldXBkYXRlLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTUwOTkzNDA1NzU0YmFcbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2xpdmV1cGRhdGUuaFxuQEAgLTAsMCArMSw3NyBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCAoUHVibGljL0RyaXZlciBBUEkpXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIEdvb2dsZSBMTEMuXG4rICogRGF2aWQgTWF0bGFjayBcdTAwM2NkbWF0bGFja0Bnb29nbGUuY29tXHUwMDNlXG4rICovXG4rI2lmbmRlZiBMSU5VWF9QQ0lfTElWRVVQREFURV9IXG4rI2RlZmluZSBMSU5VWF9QQ0lfTElWRVVQREFURV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2hvL2FiaS9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpdmV1cGRhdGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9ja190eXBlcy5oXHUwMDNlXG4rXG4rLyoqXG4rICogc3RydWN0IHBjaV9saXZldXBkYXRlIC0gUENJIExpdmUgVXBkYXRlIHN0YXRlIGZvciBhIHN0cnVjdCBwY2lfZGV2XG4rICogQG91dGdvaW5nOiBTdGF0ZSBwcmVzZXJ2ZWQgZm9yIHRoZSBuZXh0IGtlcm5lbC5cbisgKiBAaW5jb21pbmc6IFN0YXRlIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXMga2VybmVsLlxuKyAqIEBhY3NfY3RybDogQUNTIGZlYXR1cmVzIGVzdGFibGlzaGVkIGJ5IHRoZSBwcmV2aW91cyBrZXJuZWwuXG4rICogQGluaGVyaXRfYnVzZXM6IFRydWUgaWYgdGhlIFBDSSBjb3JlIHNob3VsZCBpbmhlcml0IHRoZSBzZWNvbmRhcnkgYW5kXG4rICogICAgICAgICAgICAgICAgIHN1Ym9yZGluYXRlIGJ1cyBudW1iZXJzIGFzc2lnbmVkIHRvIHRoaXMgZGV2aWNlIGR1ZSB0b1xuKyAqICAgICAgICAgICAgICAgICBhbiBvbmdvaW5nIExpdmUgVXBkYXRlLlxuKyAqIEB3YXNfcHJlc2VydmVkOiBUcnVlIGlmIHRoaXMgc3RydWN0IHBjaV9kZXYgd2FzIHByZXNlcnZlZCBieSB0aGUgcHJldmlvdXNcbisgKiAgICAgICAgICAgICAgICAga2VybmVsLiBVbmxpa2UgQGluY29taW5nLCB0aGlzIGZpZWxkIGlzIG5vdCBjbGVhcmVkIGFmdGVyXG4rICogICAgICAgICAgICAgICAgIHRoZSBkZXZpY2UgaXMgZmluaXNoZWQgcGFydGljaXBhdGluZyBpbiBMaXZlIFVwZGF0ZS5cbisgKiBAZnJvemVuOiBUcnVlIGlmIHRoZSBvdXRnb2luZyBwcmVzZXJ2YXRpb24gc3RhdHVzIG9mIHRoaXMgZGV2aWNlIGlzIGZyb3plblxuKyAqICAgICAgICAgIGFuZCB0aHVzIGNhbm5vdCBiZSBjaGFuZ2VkLlxuKyAqL1xuK3N0cnVjdCBwY2lfbGl2ZXVwZGF0ZSB7XG4rXHRzdHJ1Y3QgcGNpX2Rldl9zZXIgKm91dGdvaW5nO1xuK1x0c3RydWN0IHBjaV9kZXZfc2VyICppbmNvbWluZztcbitcdHUxNiBhY3NfY3RybDtcbitcdGJvb2wgaW5oZXJpdF9idXNlcztcbitcdGJvb2wgd2FzX3ByZXNlcnZlZDtcbitcdGJvb2wgZnJvemVuO1xuK307XG4rXG4rc3RydWN0IHBjaV9kZXY7XG4rXG4rI2lmZGVmIENPTkZJR19QQ0lfTElWRVVQREFURVxuK2ludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCk7XG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcbitpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoc3RydWN0IHBjaV9kZXYgKmRldik7XG4rdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuK3ZvaWQgcGNpX2xpdmV1cGRhdGVfZmluaXNoKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuK2Jvb2wgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoc3RydWN0IHBjaV9kZXYgKmRldik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxuK3tcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmUoc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2xpdmV1cGRhdGVfZmluaXNoKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmcoc3RydWN0IHBjaV9kZXYgKmRldilcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuK1xuKyNlbmRpZiAvKiBMSU5VWF9QQ0lfTElWRVVQREFURV9IICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxODoyNjo0MC44MzI3Mjg5OTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDMxODMxMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSSBMaXZlIFVwZGF0ZSBJbXBsZW1lbnRhdGlvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIGludHJvZHVjaW5nIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0IOKAkyBpbnRlcmVzdGluZy4gU2VlbXMgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBQQ0kgc3Vic3lzdGVtLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBjZW50ZXJlZCBhcm91bmQgdGhlIG5ldyBgZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jYCBmaWxlLCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZWAsIGBwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlYCwgYHBjaV9saXZldXBkYXRlX2ZpbmlzaGAsIGFuZCBzbyBvbi4gUHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciBwcmVzZXJ2aW5nIGFuZCByZXN0b3JpbmcgZGV2aWNlIHN0YXRlIGR1cmluZyBhIGhvdCB1cGRhdGUuIExvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHBjaS1kcml2ZXIuY2AsIGBwY2kuY2AsIGBwcm9iZS5jYCwgYW5kIGBxdWlya3MuY2AgYXJlIHdoZXJlIHRoZSBpbnRlZ3JhdGlvbiBwb2ludHMgYXJlLiBgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZGAgaXMgZ2V0dGluZyBjYWxscyB0byBiZWdpbiBhbmQgZW5kIHRoZSBzY2FuLCBgcGNpX3NldHVwX2RldmljZWAgaXMgaW50ZWdyYXRpbmcgdGhlIHNldHVwLCBhbmQgYHBjaV9kZXZpY2Vfc2h1dGRvd25gIGlzIGZyZWV6aW5nIHRoZSBkZXZpY2Ugc3RhdGUuXG5cbk5vdywgYSBrZXkgcXVlc3Rpb24gZm9yIG1lIGlzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBQQ0kgZGV2aWNlcyAqYXJlKiBwcmVzZW50IGluIHRoaW5ncyBsaWtlIFFFTVUgYW5kIEdDRSwgc28gdGhhdCdzIGEgcG9zaXRpdmUgc3RhcnQuIEJ1dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IGlzIHdoYXQgSSBuZWVkIHRvIGRpZyBpbnRvLiBUaGUgYENPTkZJR19QQ0lfTElWRVVQREFURWAgaXMgY29udGluZ2VudCBvbiBgUENJIFx1MDAyNlx1MDAyNiBMSVZFVVBEQVRFIFx1MDAyNlx1MDAyNiA2NEJJVCBcdTAwMjZcdTAwMjYgIUNBUkRCVVNgLiBTbywgSSdsbCBuZWVkIHRvIGVuYWJsZSBgUENJX0xJVkVVUERBVEVgLCB3aGljaCBwcm9iYWJseSBtZWFucyBJJ2xsIGFsc28gbmVlZCB0byBlbmFibGUgYExJVkVVUERBVEVgIGZpcnN0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGNvbmZpZyBuYW1lIGZvciBgTElWRVVQREFURWAgdG8gYmUgc3VyZS4gVGltZSB0byBkaWcgaW50byB0aGUgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTUyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTg6MjY6NDguODY0NTYyOTk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDYwMDY2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExJVkVVUERBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zOD1jb25maWcgS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNTEtXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1Mjpjb25maWcgTElWRVVQREFURVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNTMtXFx0Ym9vbCBcXFwiTGl2ZSBVcGRhdGUgT3JjaGVzdHJhdG9yXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy03Mi1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjczOmNvbmZpZyBMSVZFVVBEQVRFX01FTUZEXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy03NC1cXHRib29sIFxcXCJMaXZlIHVwZGF0ZSBzdXBwb3J0IGZvciBtZW1mZFxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTI5MDE9Y29uZmlnIENPTlRFWFRfQU5BTFlTSVNfVEVTVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMjkxNC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoyOTE1OmNvbmZpZyBMSVZFVVBEQVRFX1RFU1RcXG5saWIvS2NvbmZpZy5kZWJ1Zy0yOTE2LVxcdGJvb2wgXFxcIkxpdmUgVXBkYXRlIEtlcm5lbCBUZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxODoyNjo1My44NzA1NzYxNDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTIzOTQzMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUENJIExpdmUgVXBkYXRlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgTElWRVVQREFURWAgY29uZmlnLCBhbmQgdGhlIHBhdGNoIGludHJvZHVjZXMgYFBDSV9MSVZFVVBEQVRFYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUncyB0aGUgYmVzdCBwbGFjZSB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzPyBJIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHBvdGVudGlhbCB0YXJnZXRzLiBUaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zOiBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVgLCBgcGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZWAsIGBwY2lfbGl2ZXVwZGF0ZV9maW5pc2hgLCBgcGNpX2xpdmV1cGRhdGVfaXNfaW5jb21pbmdgLCBgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiYCwgYW5kIGBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYmAuIEJ1dCB3YWl0LCB0aG9zZSBhcmUgZXhwb3J0ZWQgZm9yICpkcml2ZXJzKiB0byB1c2UuIEhtbW0sIGFyZSBhbnkgZHJpdmVycyBhY3R1YWxseSB1c2luZyB0aGVtIGluICp0aGlzKiBwYXRjaD8gTm8sIGRvZXNuJ3QgbG9vayBsaWtlIGl0LlxuXG5BbHJpZ2h0LCB3aGF0IGFib3V0IHRoZSBpbnRlcm5hbCBQQ0kgY29yZSBmdW5jdGlvbnM/IEFoYSEgYHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZWAsIGBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZWAsIGBwY2lfbGl2ZXVwZGF0ZV9mcmVlemVgLCBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW5gLCBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kYCwgYHBjaV9saXZldXBkYXRlX2luaXRfYWNzYCwgYHBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3NgLCBhbmQgYHBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmlgIGFyZSBhbGwgY2FsbGVkIGZyb20gdGhlIFBDSSBjb3JlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBzZWUgaWYgd2UgY2FuIHRyYWNlIHRoZWlyIGNhbGwgY2hhaW5zLlxuXG5gcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlYCBpcyBjYWxsZWQgZnJvbSBgcGNpX3NldHVwX2RldmljZWAuIEdvb2QuIFRoZW4gYHBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luYCBpcyBjYWxsZWQgZnJvbSBgcGNpX3NjYW5fYnJpZGdlX2V4dGVuZGAuIGBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZWAgaXMgY2FsbGVkIGZyb20gYHBjaV9yZWxlYXNlX2RldmAuIGBwY2lfbGl2ZXVwZGF0ZV9mcmVlemVgIGlzIGNhbGxlZCBmcm9tIGBwY2lfZGV2aWNlX3NodXRkb3duYC4gYHBjaV9saXZldXBkYXRlX2luaXRfYWNzYCBpcyBjYWxsZWQgZnJvbSBgcGNpX2Fjc19pbml0YC4gQW5kIGBwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzYCBpcyBjYWxsZWQgZnJvbSBgcGNpX2VuYWJsZV9hY3NgLiBGaW5hbGx5LCBgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaWAgaXMgY2FsbGVkIGZyb20gYHBjaV9jb25maWd1cmVfYXJpYC5cblxuU28sIGl0J3MgdGhvc2UgY29yZSBmdW5jdGlvbnMgdGhhdCBhcmUgdGhlIHJlYWwgdGFyZ2V0cy4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIGBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2VgLCBhbmQgSSdsbCBzdGFydCBieSBjaGVja2luZyBpdHMgaW1wbGVtZW50YXRpb24gaW4gYGRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuY2AuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDk2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE4OjI3OjAwLjk5NDUyMzczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjA5NzU3MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9saXZldXBkYXRlLmM9NjYzPXZvaWQgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwYXNzKVxcbi0tXFxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jLTY3Mi1cXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmM6NjczOnZvaWQgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jLTY3NC17XFxuLS1cXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmM9NzM2PXN0YXRpYyBpbnQgcGNpX2xpdmV1cGRhdGVfZmluaXNoX2RldmljZShzdHJ1Y3QgcGNpX3NlciAqc2VyLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jLTc0OS1cXHQgKiBEZWNyZW1lbnQgdGhlIHJlZmNvdW50IHNvIHRoaXMgZGV2aWNlIGRvZXMgbm90IGdldCB0cmVhdGVkIGFzIGFuXFxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5jOjc1MDpcXHQgKiBpbmNvbWluZyBkZXZpY2UgYWdhaW4sIGUuZy4gaW4gY2FzZSBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2UoKVxcbmRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuYy03NTEtXFx0ICogZ2V0cyBjYWxsZWQgYWdhaW4gYmVjYXVzZSB0aGUgZGV2aWNlIGlzIGhvdC1wbHVnZ2VkLlxcbi0tXFxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oLTEzLSNpZmRlZiBDT05GSUdfUENJX0xJVkVVUERBVEVcXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmg6MTQ6dm9pZCBwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuZHJpdmVycy9wY2kvbGl2ZXVwZGF0ZS5oLTE1LXZvaWQgcGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuLS1cXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmg9MjM9Ym9vbCBwY2lfbGl2ZXVwZGF0ZV9pc19vdXRnb2luZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmgtMjQtI2Vsc2VcXG5kcml2ZXJzL3BjaS9saXZldXBkYXRlLmg6MjU6c3RhdGljIGlubGluZSB2b2lkIHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbmRyaXZlcnMvcGNpL2xpdmV1cGRhdGUuaC0yNi17XFxuLS1cXG5kcml2ZXJzL3BjaS9wcm9iZS5jPTIwMjY9aW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvcGNpL3Byb2JlLmMtMjA3Ni1cXG5kcml2ZXJzL3BjaS9wcm9iZS5jOjIwNzc6XFx0cGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlKGRldik7XFxuZHJpdmVycy9wY2kvcHJvYmUuYy0yMDc4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxODoyNzowNS4yMDQyOTAwNDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTM5Mjk5MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSSBMaXZlIFVwZGF0ZSBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBzb21lIGZyZXNoIGZ1bmN0aW9uYWxpdHkgZm9yIFBDSSBsaXZlIHVwZGF0ZSwgd2hpY2ggbWVhbnMgaXQncyBkZWZpbml0ZWx5IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIG1vZGlmeWluZyBjb3JlIFBDSSBlbnVtZXJhdGlvbiBhbmQgc2h1dGRvd24gcGF0aHMsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgc3R1ZmYgaGVyZS4gVGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBnZXQgYSBmdXp6aW5nIGNhbXBhaWduIHNldCB1cCBmb3IgdGhpcy5cblxuRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBwYXRjaCBtZW50aW9ucyBgUENJX0xJVkVVUERBVEVgIGFuZCBgTElWRVVQREFURWAgYXMgdGhlIGtleSBlbmFibGVycy4gQ2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcywgYFBDSV9MSVZFVVBEQVRFYCByZWxpZXMgb24gYFBDSSBcdTAwMjZcdTAwMjYgTElWRVVQREFURSBcdTAwMjZcdTAwMjYgNjRCSVQgXHUwMDI2XHUwMDI2ICFDQVJEQlVTYCwgc28gd2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuc3VyZSB0aG9zZSBhcmUgc2V0LiBTbywgYFBDSV9MSVZFVVBEQVRFYCBhbmQgYExJVkVVUERBVEVgIGFyZSB0aGUgY29uZmlncyB0byBlbmFibGUuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gZm9jdXMgb24uIEJhc2VkIG9uIHRoZSBwYXRjaCwgdGhlIG1vc3QgcHJvbWlzaW5nIGVudHJ5IHBvaW50cyBzZWVtIHRvIGJlOiBgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlYCwgYHBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlYCwgYHBjaV9saXZldXBkYXRlX2ZyZWV6ZWAsIGBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbmAsIGBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmRgLCBgcGNpX2xpdmV1cGRhdGVfaW5pdF9hY3NgLCBgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2Fjc2AsIGBwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpYCwgYHBjaV9saXZldXBkYXRlX3ByZXNlcnZlYCwgYHBjaV9saXZldXBkYXRlX3VucHJlc2VydmVgLCBgcGNpX2xpdmV1cGRhdGVfZmluaXNoYCwgYHBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYmAsIGFuZCBgcGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGJgLiBUaGVzZSBzaG91bGQgYmUgdGhlIG9uZXMgd2UgcHJpb3JpdGl6ZS5cblxuTmV4dCwgSSBuZWVkIHRvIHRoaW5rIGFib3V0IHJlYWNoYWJpbGl0eS4gYHBjaV9saXZldXBkYXRlX3ByZXNlcnZlYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGFjY2Vzc2libGUgdG8gZHJpdmVycywgYnV0IGlmIG5vIGRyaXZlcnMgKmNhbGwqIGl0LCB3ZSBoYXZlIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQncyByZWFjaGFibGUgYXQgYWxsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgY2FsbCBhcmJpdHJhcnkgZXhwb3J0ZWQgZnVuY3Rpb25zIHVubGVzcyB0aGVyZSdzIGEgc3lzY2FsbCBpbnRlcmZhY2UuIEhvd2V2ZXIsIHRoZSBnb29kIG5ld3MgaXMgdGhhdCBzeW1ib2xzIGxpa2UgYHBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZWAgYW5kIG90aGVycyBhcmUgY2FsbGVkIGZyb20gdGhlIFBDSSBjb3JlIGl0c2VsZi4gQW5kLCBzaW5jZSB0aGUgUENJIGNvcmUgaXMgaW52b2x2ZWQgZHVyaW5nIGJvdGggYm9vdCBhbmQgaG90cGx1ZyBldmVudHMsIHdlIGtub3cgdGhvc2UgY29yZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUsIHdoaWNoIGlzIGEgYmlnIHdpbi5cblxuU28sIHRvIHN1bW1hcml6ZSBmb3IgdGhlIGZ1enppbmcgc2V0dXAsIHdlJ3JlIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlnczpcblxuKiAgIGBMSVZFVVBEQVRFYFxuKiAgIGBQQ0lfTElWRVVQREFURWBcblxuQW5kIHRoZSBrZXkgZm9jdXMgc3ltYm9scyBhcmU6XG5cbiogICBgcGNpX2xpdmV1cGRhdGVfc2V0dXBfZGV2aWNlYFxuKiAgIGBwY2lfbGl2ZXVwZGF0ZV9jbGVhbnVwX2RldmljZWBcbiogICBgcGNpX2xpdmV1cGRhdGVfZnJlZXplYFxuKiAgIGBwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9iZWdpbmBcbiogICBgcGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfZW5kYFxuKiAgIGBwY2lfbGl2ZXVwZGF0ZV9pbml0X2Fjc2BcbiogICBgcGNpX2xpdmV1cGRhdGVfZW5hYmxlX2Fjc2BcbiogICBgcGNpX2xpdmV1cGRhdGVfY29uZmlndXJlX2FyaWBcbiogICBgcGNpX2xpdmV1cGRhdGVfcHJlc2VydmVgXG4qICAgYHBjaV9saXZldXBkYXRlX3VucHJlc2VydmVgXG4qICAgYHBjaV9saXZldXBkYXRlX2ZpbmlzaGBcbiogICBgcGNpX2xpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiYFxuKiAgIGBwY2lfbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYmBcblxuQW5kIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyBkb3VibGUgY2hlY2sgdGhlcmUgYXJlICpubyogb3RoZXIgcmVsZXZhbnQgY29uZmlncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTg6Mjc6MTQuNzQzNTkxNzY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NjAzNjI0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBDSV9MSVZFVVBEQVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWc9MjY2PWNvbmZpZyBWR0FfQVJCX01BWF9HUFVTXFxuLS1cXG5kcml2ZXJzL3BjaS9LY29uZmlnLTI3My1cXG5kcml2ZXJzL3BjaS9LY29uZmlnOjI3NDpjb25maWcgUENJX0xJVkVVUERBVEVcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTI3NS1cXHRib29sIFxcXCJQQ0kgTGl2ZSBVcGRhdGUgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTg6Mjc6MTguNDAzOTU5OTc2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ3MzE3MTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgcHJvY2Vzcywgd2l0aCBhIGZvY3VzIG9uIFBDSSBMaXZlIFVwZGF0ZTpcblxuKipQQ0kgTGl2ZSBVcGRhdGUgRnV6emluZyBTdHJhdGVneSoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoaXMgYFBDSV9MSVZFVVBEQVRFYCB0aGluZy4gVGhhdCdzIHRoZSBrZXkuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsaXR5IHNwZWNpZmljYWxseSBhcm91bmQgUENJIExpdmUgVXBkYXRlLCBhbmQgdGhhdCBtZWFucyBpdOKAmXMgYWx0ZXJpbmcgdGhlIGNvcmUgcm91dGluZXMgaW52b2x2ZWQgaW4gUENJIGVudW1lcmF0aW9uLCBob3cgZGV2aWNlcyBzaHV0IGRvd24sIGFuZCBob3cgd2UgY29uZmlndXJlIFBDSSBjYXBhYmlsaXRpZXMsIHBhcnRpY3VsYXJseSB0aGluZ3MgbGlrZSBBQ1MgYW5kIEFSSS4gVGhlc2UgYXJlbid0IGp1c3QgdGhlb3JldGljYWwgY2hhbmdlczsgdGhleSdyZSAqcmVhY2hhYmxlKi4gVGhleSdyZSBnb2luZyB0byBiZSBoaXQgZHVyaW5nIGRldmljZSBwcm9iaW5nLCB3aGVuIGEgZGV2aWNlIGlzIHJlbW92ZWQsIGFuZCBkdXJpbmcgc3lzdGVtIHNodXRkb3duIG9yIGtleGVjLlxuXG5UaGUgY3JpdGljYWwgZm9jdXMgZm9yIGZ1enppbmcsIHRoZXJlZm9yZSwgaGFzIHRvIGJlIHRoZSBuZXcgYHBjaV9saXZldXBkYXRlXypgIGZ1bmN0aW9ucy4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgbmV3IGZ1bmN0aW9ucywgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZXhpc3RpbmcgY29kZSwgY2FuIGhhbmRsZSBhIHdpZGUgdmFyaWV0eSBvZiBQQ0kgdG9wb2xvZ2llcyBhbmQgZGV2aWNlIHN0YXRlcyBmbGF3bGVzc2x5LiBXZSdyZSB0YWxraW5nIGFib3V0IGEgY29tcHJlaGVuc2l2ZSBhcHByb2FjaC4gV2UgbmVlZCB0byBleHBsb3JlIGFsbCB0aGUgcG90ZW50aWFsIGVkZ2UgY2FzZXM6IHdoYXQgaGFwcGVucyB3aGVuIHRoaW5ncyBhcmVuJ3QgYXMgZXhwZWN0ZWQsIHdoYXQgaGFwcGVucyB3aXRoIGhvdC1wbHVnLCBjb2xkLXBsdWcsIGFuZCBldmVyeXRoaW5nIGluIGJldHdlZW4/IEFuZCBob3cgZG8gd2UgYWNjb3VudCBmb3IgdGhlIHBvc3NpYmlsaXR5IG9mIGEgZGV2aWNlIGdvaW5nIGludG8gYSB3ZWlyZCBzdGF0ZSBhZnRlciBhbiB1cGRhdGU/XG5cbk9rYXksIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBlbnN1cmUgdGhhdCB0aGUgZnV6emluZyBzdHJhdGVneSBpcyBwcm9wZXJseSBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MDYsIk91dHB1dFRva2VucyI6MjcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE4OjI3OjI2Ljg3NzEzNTYwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjQwNDU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTElWRVVQREFURVwiLFxuICAgIFwiUENJX0xJVkVVUERBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9zZXR1cF9kZXZpY2VcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2NsZWFudXBfZGV2aWNlXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9mcmVlemVcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2JlZ2luXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9zY2FuX2JyaWRnZV9lbmRcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2luaXRfYWNzXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9lbmFibGVfYWNzXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9jb25maWd1cmVfYXJpXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9wcmVzZXJ2ZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfdW5wcmVzZXJ2ZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfZmluaXNoXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGJcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBQQ0kgTGl2ZSBVcGRhdGUgc3VwcG9ydCwgd2hpY2ggbW9kaWZpZXMgY29yZSBQQ0kgZW51bWVyYXRpb24sIHNodXRkb3duLCBhbmQgY2FwYWJpbGl0eSBjb25maWd1cmF0aW9uIHBhdGhzIChlLmcuLCBBQ1MsIEFSSSkuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgUENJIGRldmljZSBwcm9iZSwgcmVtb3ZhbCwgYW5kIHN5c3RlbSBzaHV0ZG93bi9rZXhlYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldyBwY2lfbGl2ZXVwZGF0ZV8qIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhleSBoYW5kbGUgdmFyaW91cyBQQ0kgdG9wb2xvZ2llcyBhbmQgc3RhdGVzIGNvcnJlY3RseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMSVZFVVBEQVRFXCIsXG4gICAgXCJQQ0lfTElWRVVQREFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBjaV9saXZldXBkYXRlX3NldHVwX2RldmljZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfY2xlYW51cF9kZXZpY2VcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2ZyZWV6ZVwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfc2Nhbl9icmlkZ2VfYmVnaW5cIixcbiAgICBcInBjaV9saXZldXBkYXRlX3NjYW5fYnJpZGdlX2VuZFwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfaW5pdF9hY3NcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2VuYWJsZV9hY3NcIixcbiAgICBcInBjaV9saXZldXBkYXRlX2NvbmZpZ3VyZV9hcmlcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3ByZXNlcnZlXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV91bnByZXNlcnZlXCIsXG4gICAgXCJwY2lfbGl2ZXVwZGF0ZV9maW5pc2hcIixcbiAgICBcInBjaV9saXZldXBkYXRlX3JlZ2lzdGVyX2ZsYlwiLFxuICAgIFwicGNpX2xpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIFBDSSBMaXZlIFVwZGF0ZSBzdXBwb3J0LCB3aGljaCBtb2RpZmllcyBjb3JlIFBDSSBlbnVtZXJhdGlvbiwgc2h1dGRvd24sIGFuZCBjYXBhYmlsaXR5IGNvbmZpZ3VyYXRpb24gcGF0aHMgKGUuZy4sIEFDUywgQVJJKS4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGR1cmluZyBQQ0kgZGV2aWNlIHByb2JlLCByZW1vdmFsLCBhbmQgc3lzdGVtIHNodXRkb3duL2tleGVjLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3IHBjaV9saXZldXBkYXRlXyogZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGV5IGhhbmRsZSB2YXJpb3VzIFBDSSB0b3BvbG9naWVzIGFuZCBzdGF0ZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow759nq[1] Phase: Succeeded StartedAt: 2026-07-11 18:27:40 +0000 UTC FinishedAt: 2026-07-11 18:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 18:27:40 +0000 UTC FinishedAt: 2026-07-11 18:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2] Phase: Succeeded StartedAt: 2026-07-11 18:27:40 +0000 UTC FinishedAt: 2026-07-11 22:37:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-11 18:27:40 +0000 UTC FinishedAt: 2026-07-11 22:37:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-11 18:27:40 +0000 UTC FinishedAt: 2026-07-11 18:28:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-11 18:27:40 +0000 UTC FinishedAt: 2026-07-11 18:28:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow759nq/series-workflow759nq-convert-artifact-503909725/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-11 18:28:13 +0000 UTC FinishedAt: 2026-07-11 18:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-11 18:28:14 +0000 UTC FinishedAt: 2026-07-11 18:56:18 +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:*64121bc8-77c1-41ae-abf2-3fcd2a6cb296,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-workflow759nq/series-workflow759nq-convert-artifact-503909725/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": "76a5764a-d104-4397-bd84-4db5e99af5b3", "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-workflow759nq/series-workflow759nq-build-action-713810067/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-11 18:28:14 +0000 UTC FinishedAt: 2026-07-11 18:56:08 +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:*64121bc8-77c1-41ae-abf2-3fcd2a6cb296,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-workflow759nq/series-workflow759nq-convert-artifact-503909725/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": "76a5764a-d104-4397-bd84-4db5e99af5b3", "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-workflow759nq/series-workflow759nq-build-action-713810067/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-11 18:56:18 +0000 UTC FinishedAt: 2026-07-11 18:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-11 18:56:18 +0000 UTC FinishedAt: 2026-07-11 18:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-11 18:56:18 +0000 UTC FinishedAt: 2026-07-11 18:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-11 18:56:18 +0000 UTC FinishedAt: 2026-07-11 18:56:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow759nq/series-workflow759nq-convert-artifact-1816015928/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-11 18:56:28 +0000 UTC FinishedAt: 2026-07-11 18:58:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-11 18:56:28 +0000 UTC FinishedAt: 2026-07-11 18:58:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76a5764a-d104-4397-bd84-4db5e99af5b3,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-workflow759nq/series-workflow759nq-build-action-713810067/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-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-11 18:58:25 +0000 UTC FinishedAt: 2026-07-11 18:58:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-11 18:58:25 +0000 UTC FinishedAt: 2026-07-11 18:58:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-11 18:58:25 +0000 UTC FinishedAt: 2026-07-11 19:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-11 18:58:25 +0000 UTC FinishedAt: 2026-07-11 19:30:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*64121bc8-77c1-41ae-abf2-3fcd2a6cb296,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-workflow759nq/series-workflow759nq-convert-artifact-1816015928/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": "e07712bc-2365-4d0e-a2ca-dc61e9426fdb", "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-workflow759nq/series-workflow759nq-build-action-441601316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-11 18:58:25 +0000 UTC FinishedAt: 2026-07-11 19:30:12 +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:*64121bc8-77c1-41ae-abf2-3fcd2a6cb296,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-workflow759nq/series-workflow759nq-convert-artifact-1816015928/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": "e07712bc-2365-4d0e-a2ca-dc61e9426fdb", "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-workflow759nq/series-workflow759nq-build-action-441601316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-11 19:30:22 +0000 UTC FinishedAt: 2026-07-11 19:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-11 19:30:22 +0000 UTC FinishedAt: 2026-07-11 19:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-11 19:30:22 +0000 UTC FinishedAt: 2026-07-11 19:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-11 19:30:22 +0000 UTC FinishedAt: 2026-07-11 19:32:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e07712bc-2365-4d0e-a2ca-dc61e9426fdb,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-workflow759nq/series-workflow759nq-build-action-441601316/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-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-11 19:32:23 +0000 UTC FinishedAt: 2026-07-11 22:37:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-11 19:32:23 +0000 UTC FinishedAt: 2026-07-11 22:37:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},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:*76a5764a-d104-4397-bd84-4db5e99af5b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e07712bc-2365-4d0e-a2ca-dc61e9426fdb,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-workflow759nq/series-workflow759nq-build-action-713810067/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-workflow759nq/series-workflow759nq-build-action-441601316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-11 19:32:23 +0000 UTC FinishedAt: 2026-07-11 19:32:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-11 19:32:23 +0000 UTC FinishedAt: 2026-07-11 19:32:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},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-workflow759nq/series-workflow759nq-convert-artifact-3199614097/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-11 19:32:23 +0000 UTC FinishedAt: 2026-07-11 19:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-11 19:32:23 +0000 UTC FinishedAt: 2026-07-11 19:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-11 19:32:23 +0000 UTC FinishedAt: 2026-07-11 19:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-11 19:32:33 +0000 UTC FinishedAt: 2026-07-11 22:37:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow759nq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pci_liveupdate_setup_device","pci_liveupdate_cleanup_device","pci_liveupdate_freeze","pci_liveupdate_scan_bridge_begin","pci_liveupdate_scan_bridge_end","pci_liveupdate_init_acs","pci_liveupdate_enable_acs","pci_liveupdate_configure_ari","pci_liveupdate_preserve","pci_liveupdate_unpreserve","pci_liveupdate_finish","pci_liveupdate_register_flb","pci_liveupdate_unregister_flb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1354afac14579ad38279f12d660df961b5f20246","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIVEUPDATE","PCI_LIVEUPDATE"],"series_id":"dbf7326a-98e2-481e-adf8-a51a51c012bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-11 19:32:33 +0000 UTC FinishedAt: 2026-07-11 22:37:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76a5764a-d104-4397-bd84-4db5e99af5b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e07712bc-2365-4d0e-a2ca-dc61e9426fdb,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-workflow759nq/series-workflow759nq-build-action-713810067/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-workflow759nq/series-workflow759nq-build-action-441601316/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-workflow759nq/series-workflow759nq-convert-artifact-3199614097/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,}