Name: series-workflowm7k4t Phase: Succeeded StartedAt: 2026-09-06 05:16:13 +0000 UTC FinishedAt: 2026-09-06 09:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[0] Phase: Succeeded StartedAt: 2026-09-06 05:16:13 +0000 UTC FinishedAt: 2026-09-06 05:39:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 05:16:13 +0000 UTC FinishedAt: 2026-09-06 05:39:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "c8ce0b28-1c59-42b9-9a3c-46e7f9d61632" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netdev_work_proc", "netdev_work_run", "netdev_work_sched", "netdev_work_cancel", "netdev_work_cancel_all", "__netdev_work_core_sched", "__netdev_work_core_cancel", "netif_rx_mode_run" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGRldl93b3JrX3Byb2MmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3NjaGVkJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfd29ya19jYW5jZWxfYWxsJiMzNDssCiAgICAmIzM0O19fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZCYjMzQ7LAogICAgJiMzNDtfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsJiMzNDssCiAgICAmIzM0O25ldGlmX3J4X21vZGVfcnVuJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIG1vZGVsIGZvciBkZWZlcnJlZCBuZXRkZXYgd29yayAoYG5ldGRldl93b3JrX3Byb2NgKSBpbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AgYW5kIHVwZGF0ZXMgcmVsYXRlZCBkb2N1bWVudGF0aW9uL2hlYWRlciBjb21tZW50cy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIGBydG5sX2xvY2soKWAgZm9yIHRoZSBlbnRpcmUgbG9vcCBpbiBgbmV0ZGV2X3dvcmtfcHJvY2AsIGl0IGxvY2tzIGVhY2ggbmV0IGRldmljZSBpbmRpdmlkdWFsbHkgdXNpbmcgYG5ldGRldl9sb2NrX29wc19jb21wYXQoKWAgLyBgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KClgLlxuXG5UaGlzIGlzIGEgcHVyZSBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gY2hhbmdlLiBBbnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHJlbGF0ZSB0byBsb2NraW5nIGhpZXJhcmNoeSwgcmFjZSBjb25kaXRpb25zLCBvciBkZXZpY2UgcmVmZXJlbmNlL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIG9yIGJ1ZmZlciBib3VuZGFyeSBoYW5kbGluZy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbW9kZWwgaW4gY29yZSBuZXR3b3JraW5nJiMzOTtzIGRlZmVycmVkIHdvcmtxdWV1ZSBoYW5kbGluZyAobmV0L2NvcmUvbmV0ZGV2X3dvcmsuYykuIEl0IHJlbW92ZXMgdGhlIGdsb2JhbCBydG5sX2xvY2sgYXJvdW5kIHRoZSB3b3JrZXIgbG9vcCBhbmQgc3dpdGNoZXMgdG8gcGVyLWRldmljZSBuZXRkZXZfbG9ja19vcHNfY29tcGF0IGxvY2tpbmcgZHVyaW5nIGRlZmVycmVkIG5ldGRldiB3b3JrIGFuZCByeF9tb2RlIGV4ZWN1dGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIG5ldGRldiBzdGF0ZSBoYW5kbGluZyBhbmQgZHJpdmVyIGNhbGxiYWNrcyAoc3VjaCBhcyBWTEFOIGFuZCBhc3luYyByeCBtb2RlIHVwZGF0ZXMpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJkYzVhZDE2ZTA5YTBjNWI2ZjVhM2YxYjQ3NTE4YWE4MWM1ZTUyZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA1OjM3OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxuaW5kZXggZGI3MWQ0MjgzMDMyYS4uYWFjMzM0OTc4MTNmYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XG5AQCAtMjkyLDE1ICYjNDM7MjkyLDIxIEBAIG5kb19zZXRfcnhfbW9kZTpcbiBcdGluIHByb2Nlc3MgY29udGV4dC5cbiBcbiBuZG9fc2V0X3J4X21vZGVfYXN5bmM6XG4tXHRTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4gSW4gYWRkaXRpb24sIG5ldGRldiBpbnN0YW5jZVxuLVx0bG9jayBpZiB0aGUgZHJpdmVyIGltcGxlbWVudHMgcXVldWUgbWFuYWdlbWVudCBvciBzaGFwZXIgQVBJLlxuJiM0MztcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwmIzM0O29wcyBsb2NrZWRcJiMzNDsgZHJpdmVycyxcbiYjNDM7XHRydG5sX2xvY2soKSBzZW1hcGhvcmUgZm9yIGFsbCBvdGhlciBkcml2ZXJzLlxuIFx0Q29udGV4dDogcHJvY2VzcyAoZnJvbSBhIHdvcmsgcXVldWUpXG4gXHROb3RlczogQXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzXG4gXHRjb250ZXh0LiBSZWNlaXZlcyBzbmFwc2hvdHMgb2YgdGhlIHVuaWNhc3QgYW5kIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzLlxuIFxuIG5kb19jaGFuZ2VfcnhfZmxhZ3M6XG4tXHRTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4gSW4gYWRkaXRpb24sIG5ldGRldiBpbnN0YW5jZVxuLVx0bG9jayBpZiB0aGUgZHJpdmVyIGltcGxlbWVudHMgcXVldWUgbWFuYWdlbWVudCBvciBzaGFwZXIgQVBJLlxuJiM0MztcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwmIzM0O29wcyBsb2NrZWRcJiMzNDsgZHJpdmVycyxcbiYjNDM7XHRydG5sX2xvY2soKSBzZW1hcGhvcmUgZm9yIGFsbCBvdGhlciBkcml2ZXJzLlxuJiM0MztcbiYjNDM7bmRvX3dvcms6XG4mIzQzO1x0U3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXCYjMzQ7b3BzIGxvY2tlZFwmIzM0OyBkcml2ZXJzLFxuJiM0MztcdHJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuXG4mIzQzO1x0Q29udGV4dDogcHJvY2VzcyAoZnJvbSBhIHdvcmsgcXVldWUpXG4mIzQzO1x0Tm90ZXM6IFJ1bnMgZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZCgpLlxuIFxuIG5kb19zZXR1cF90YzpcbiBcdExvY2tpbmcgZGVwZW5kcyBvbiBgYHRjX3NldHVwX3R5cGVgYC4gRm9yIG1vc3QgdHlwZXMgdGhlIGNhbGxiYWNrXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDg0NTQ2NDZkNmE0NTQuLjE3YjhmYjhlOTRmZWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMTEzNSwxMyAmIzQzOzExMzUsMTYgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xuICAqXHRcdFx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXG4gICpcdFx0XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7XG4gICpcdEFzeW5jIHZlcnNpb24gb2YgbmRvX3NldF9yeF9tb2RlIHdoaWNoIHJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0XG4tICpcdHdpdGggcnRubF9sb2NrIGFuZCBuZXRkZXZfbG9ja19vcHMoZGV2KSBoZWxkLiBUaGUgdWMvbWMgcGFyYW1ldGVyc1xuJiM0MzsgKlx0dW5kZXIgdGhlIG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcJiMzNDtvcHMgbG9ja2VkXCYjMzQ7IGRyaXZlcnMsIG9yXG4mIzQzOyAqXHRydG5sX2xvY2sgZm9yIGFsbCBvdGhlciBkcml2ZXJzLiBUaGUgdWMvbWMgcGFyYW1ldGVyc1xuICAqXHRhcmUgc25hcHNob3RzIG9mIHRoZSBhZGRyZXNzIGxpc3RzIC0gaXRlcmF0ZSB3aXRoXG4gICpcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKS4gUmV0dXJuIDAgb24gc3VjY2VzcyBvciBhXG4gICpcdG5lZ2F0aXZlIGVycm5vIHRvIHJlcXVlc3QgYSByZXRyeSB2aWEgdGhlIGNvcmUgYmFja29mZi5cbiAgKlxuICAqIHZvaWQgKCpuZG9fd29yaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuICAqXHRSdW4gZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZChAZXZlbnRzKS5cbiYjNDM7ICpcdFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0IHVuZGVyIHRoZSBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXCYjMzQ7b3BzXG4mIzQzOyAqXHRsb2NrZWRcJiMzNDsgZHJpdmVycywgb3IgcnRubF9sb2NrIGZvciBhbGwgb3RoZXIgZHJpdmVycy5cbiAgKlxuICAqIGludCAoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpO1xuICAqXHRUaGlzIGZ1bmN0aW9uICBpcyBjYWxsZWQgd2hlbiB0aGUgTWVkaWEgQWNjZXNzIENvbnRyb2wgYWRkcmVzc1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldl93b3JrLmMgYi9uZXQvY29yZS9uZXRkZXZfd29yay5jXG5pbmRleCBlNzIxYTA2ZDU4ZGYxLi5jOTk5Njc5MDdlMTg1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xuQEAgLTMsNyAmIzQzOzMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG5AQCAtMTI5LDggJiM0MzsxMjgsNiBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4gXG4gc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0cnRubF9sb2NrKCk7XG4tXG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHR1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDAsIGNvcmUgPSAwO1xuIFx0XHRuZXRkZXZpY2VfdHJhY2tlciB0cmFja2VyO1xuQEAgLTE0MywxNiAmIzQzOzE0MCwxMCBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0fVxuIFx0XHRkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNm5ldGRldl93b3JrX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLFxuIFx0XHRcdFx0ICAgICAgIHdvcmtfbm9kZSk7XG4tXHRcdC8qIFRha2UgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHNvIEBkZXYgY2FuJiMzOTt0IGJlIGZyZWVkIHdoaWxlIHdlXG4tXHRcdCAqIGRyb3AgdGhlIGxvY2sgdG8gZ3JhYiBpdHMgb3BzIGxvY2s7IHRoZSB3b3JrIHJlZmVyZW5jZSBpc1xuLVx0XHQgKiBvbmx5IHJlbGVhc2VkIG9uY2Ugd2UgY2xhaW0gdGhlIHdvcmsgYmVsb3cuXG4tXHRcdCAqIFRoZSByZS1sb2NraW5nIGRhbmNlIGlzIHRvIGVuc3VyZSB0aGF0IG9wcyBsb2NrIGlzIGVub3VnaFxuLVx0XHQgKiB0byBlbnN1cmUgY2FuY2VsaW5nIHdvcmsgaXMgbm90IHJhY3kgd2l0aCBkZXF1ZXVlLlxuLVx0XHQgKi9cbiBcdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gXG4tXHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuJiM0MztcdFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKSkge1xuIFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSk7XG5AQCAtMTY5LDEwICYjNDM7MTYwLDggQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIFxuIFx0XHRuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpO1xuLVx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuJiM0MztcdFx0bmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KGRldik7XG4gXG4gXHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZ0cmFja2VyKTtcbiBcdH1cbi1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGRldl93b3JrX3Byb2MmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3NjaGVkJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfd29ya19jYW5jZWxfYWxsJiMzNDssCiAgICAmIzM0O19fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZCYjMzQ7LAogICAgJiMzNDtfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsJiMzNDssCiAgICAmIzM0O25ldGlmX3J4X21vZGVfcnVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbW9kZWwgaW4gY29yZSBuZXR3b3JraW5nJiMzOTtzIGRlZmVycmVkIHdvcmtxdWV1ZSBoYW5kbGluZyAobmV0L2NvcmUvbmV0ZGV2X3dvcmsuYykuIEl0IHJlbW92ZXMgdGhlIGdsb2JhbCBydG5sX2xvY2sgYXJvdW5kIHRoZSB3b3JrZXIgbG9vcCBhbmQgc3dpdGNoZXMgdG8gcGVyLWRldmljZSBuZXRkZXZfbG9ja19vcHNfY29tcGF0IGxvY2tpbmcgZHVyaW5nIGRlZmVycmVkIG5ldGRldiB3b3JrIGFuZCByeF9tb2RlIGV4ZWN1dGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIG5ldGRldiBzdGF0ZSBoYW5kbGluZyBhbmQgZHJpdmVyIGNhbGxiYWNrcyAoc3VjaCBhcyBWTEFOIGFuZCBhc3luYyByeCBtb2RlIHVwZGF0ZXMpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJkYzVhZDE2ZTA5YTBjNWI2ZjVhM2YxYjQ3NTE4YWE4MWM1ZTUyZDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDA1OjM3OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0CmluZGV4IGRiNzFkNDI4MzAzMmEuLmFhYzMzNDk3ODEzZmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QKQEAgLTI5MiwxNSAmIzQzOzI5MiwyMSBAQCBuZG9fc2V0X3J4X21vZGU6CiAJaW4gcHJvY2VzcyBjb250ZXh0LgogCiBuZG9fc2V0X3J4X21vZGVfYXN5bmM6Ci0JU3luY2hyb25pemF0aW9uOiBydG5sX2xvY2soKSBzZW1hcGhvcmUuIEluIGFkZGl0aW9uLCBuZXRkZXYgaW5zdGFuY2UKLQlsb2NrIGlmIHRoZSBkcml2ZXIgaW1wbGVtZW50cyBxdWV1ZSBtYW5hZ2VtZW50IG9yIHNoYXBlciBBUEkuCiYjNDM7CVN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yICYjMzQ7b3BzIGxvY2tlZCYjMzQ7IGRyaXZlcnMsCiYjNDM7CXJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuCiAJQ29udGV4dDogcHJvY2VzcyAoZnJvbSBhIHdvcmsgcXVldWUpCiAJTm90ZXM6IEFzeW5jIHZlcnNpb24gb2YgbmRvX3NldF9yeF9tb2RlIHdoaWNoIHJ1bnMgaW4gcHJvY2VzcwogCWNvbnRleHQuIFJlY2VpdmVzIHNuYXBzaG90cyBvZiB0aGUgdW5pY2FzdCBhbmQgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMuCiAKIG5kb19jaGFuZ2VfcnhfZmxhZ3M6Ci0JU3luY2hyb25pemF0aW9uOiBydG5sX2xvY2soKSBzZW1hcGhvcmUuIEluIGFkZGl0aW9uLCBuZXRkZXYgaW5zdGFuY2UKLQlsb2NrIGlmIHRoZSBkcml2ZXIgaW1wbGVtZW50cyBxdWV1ZSBtYW5hZ2VtZW50IG9yIHNoYXBlciBBUEkuCiYjNDM7CVN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yICYjMzQ7b3BzIGxvY2tlZCYjMzQ7IGRyaXZlcnMsCiYjNDM7CXJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuCiYjNDM7CiYjNDM7bmRvX3dvcms6CiYjNDM7CVN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yICYjMzQ7b3BzIGxvY2tlZCYjMzQ7IGRyaXZlcnMsCiYjNDM7CXJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuCiYjNDM7CUNvbnRleHQ6IHByb2Nlc3MgKGZyb20gYSB3b3JrIHF1ZXVlKQomIzQzOwlOb3RlczogUnVucyBkZWZlcnJlZCB3b3JrIHNjaGVkdWxlZCB3aXRoIG5ldGRldl93b3JrX3NjaGVkKCkuCiAKIG5kb19zZXR1cF90YzoKIAlMb2NraW5nIGRlcGVuZHMgb24gYGB0Y19zZXR1cF90eXBlYGAuIEZvciBtb3N0IHR5cGVzIHRoZSBjYWxsYmFjawpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggODQ1NDY0NmQ2YTQ1NC4uMTdiOGZiOGU5NGZlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0xMTM1LDEzICYjNDM7MTEzNSwxNiBAQCBzdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7CiAgKgkJCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsCiAgKgkJCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpOwogICoJQXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzIGNvbnRleHQKLSAqCXdpdGggcnRubF9sb2NrIGFuZCBuZXRkZXZfbG9ja19vcHMoZGV2KSBoZWxkLiBUaGUgdWMvbWMgcGFyYW1ldGVycwomIzQzOyAqCXVuZGVyIHRoZSBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgJiMzNDtvcHMgbG9ja2VkJiMzNDsgZHJpdmVycywgb3IKJiM0MzsgKglydG5sX2xvY2sgZm9yIGFsbCBvdGhlciBkcml2ZXJzLiBUaGUgdWMvbWMgcGFyYW1ldGVycwogICoJYXJlIHNuYXBzaG90cyBvZiB0aGUgYWRkcmVzcyBsaXN0cyAtIGl0ZXJhdGUgd2l0aAogICoJbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpLiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGEKICAqCW5lZ2F0aXZlIGVycm5vIHRvIHJlcXVlc3QgYSByZXRyeSB2aWEgdGhlIGNvcmUgYmFja29mZi4KICAqCiAgKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTsKICAqCVJ1biBkZWZlcnJlZCB3b3JrIHNjaGVkdWxlZCB3aXRoIG5ldGRldl93b3JrX3NjaGVkKEBldmVudHMpLgomIzQzOyAqCVJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0IHVuZGVyIHRoZSBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgJiMzNDtvcHMKJiM0MzsgKglsb2NrZWQmIzM0OyBkcml2ZXJzLCBvciBydG5sX2xvY2sgZm9yIGFsbCBvdGhlciBkcml2ZXJzLgogICoKICAqIGludCAoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpOwogICoJVGhpcyBmdW5jdGlvbiAgaXMgY2FsbGVkIHdoZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIGFkZHJlc3MKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldl93b3JrLmMgYi9uZXQvY29yZS9uZXRkZXZfd29yay5jCmluZGV4IGU3MjFhMDZkNThkZjEuLmM5OTk2NzkwN2UxODUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldGRldl93b3JrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuYwpAQCAtMyw3ICYjNDM7Myw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9sb2NrLmgmZ3Q7CkBAIC0xMjksOCAmIzQzOzEyOCw2IEBAIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cywKIAogc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JcnRubF9sb2NrKCk7Ci0KIAl3aGlsZSAodHJ1ZSkgewogCQl1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDAsIGNvcmUgPSAwOwogCQluZXRkZXZpY2VfdHJhY2tlciB0cmFja2VyOwpAQCAtMTQzLDE2ICYjNDM7MTQwLDEwIEBAIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQl9CiAJCWRldiA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDtuZXRkZXZfd29ya19saXN0LCBzdHJ1Y3QgbmV0X2RldmljZSwKIAkJCQkgICAgICAgd29ya19ub2RlKTsKLQkJLyogVGFrZSBhIHRlbXBvcmFyeSByZWZlcmVuY2Ugc28gQGRldiBjYW4mIzM5O3QgYmUgZnJlZWQgd2hpbGUgd2UKLQkJICogZHJvcCB0aGUgbG9jayB0byBncmFiIGl0cyBvcHMgbG9jazsgdGhlIHdvcmsgcmVmZXJlbmNlIGlzCi0JCSAqIG9ubHkgcmVsZWFzZWQgb25jZSB3ZSBjbGFpbSB0aGUgd29yayBiZWxvdy4KLQkJICogVGhlIHJlLWxvY2tpbmcgZGFuY2UgaXMgdG8gZW5zdXJlIHRoYXQgb3BzIGxvY2sgaXMgZW5vdWdoCi0JCSAqIHRvIGVuc3VyZSBjYW5jZWxpbmcgd29yayBpcyBub3QgcmFjeSB3aXRoIGRlcXVldWUuCi0JCSAqLwogCQluZXRkZXZfaG9sZChkZXYsICZhbXA7dHJhY2tlciwgR0ZQX0FUT01JQyk7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmV0ZGV2X3dvcmtfbG9jayk7CiAKLQkJbmV0ZGV2X2xvY2tfb3BzKGRldik7CiYjNDM7CQluZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7CiAJCXNwaW5fbG9ja19iaCgmYW1wO25ldGRldl93b3JrX2xvY2spOwogCQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtkZXYtJmd0O3dvcmtfbm9kZSkpIHsKIAkJCWxpc3RfZGVsX2luaXQoJmFtcDtkZXYtJmd0O3dvcmtfbm9kZSk7CkBAIC0xNjksMTAgJiM0MzsxNjAsOCBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZXRkZXZfd29ya19sb2NrKTsKIAogCQluZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpOwotCQluZXRkZXZfdW5sb2NrX29wcyhkZXYpOwomIzQzOwkJbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KGRldik7CiAKIAkJbmV0ZGV2X3B1dChkZXYsICZhbXA7dHJhY2tlcik7CiAJfQotCi0JcnRubF91bmxvY2soKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBFdmFsdWF0aW9uOiBTeXprYWxsZXIgRnV6emluZyBDb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gYmVpbmcgYXNrZWQgdG8gZXZhbHVhdGUgYSBMaW51eCBrZXJuZWwgcGF0Y2ggcmVsYXRlZCB0byBzeXprYWxsZXIgZnV6emluZy4gUmlnaHQgYXdheSwgSSBuZWVkIHRvIGZyYW1lIHRoaXMgd2l0aGluIHJpc2sgYW5hbHlzaXMgYW5kIHVuZGVyc3RhbmQgdGhlIHJlcXVlc3QuIEl0JiMzOTtzIGEga2VybmVsIHBhdGNoIHRyaWFnZSBzcGVjaWZpY2FsbHkgZm9yIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoaXMgaXMgYSBkZWZlbnNpdmUsIHF1YWxpdHkgYXNzdXJhbmNlIGFjdGl2aXR5LiBQdXJlbHkgYmVuaWduLCBzbyB3ZSBjYW4gcmVsYXggYSBsaXR0bGUgaGVyZSwgYXQgbGVhc3QgaW5pdGlhbGx5LgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgZmlsZXMgbW9kaWZpZWQgZ2l2ZSB1cyB0aGUgZmlyc3QgY2x1ZXM6IGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3RgLCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAsIGFuZCwgc2lnbmlmaWNhbnRseSwgYG5ldC9jb3JlL25ldGRldl93b3JrLmNgLiBNeSBzcGlkZXktc2Vuc2UgdGluZ2xlcyBzbGlnaHRseSB3aGVuIEkgc2VlIGNoYW5nZXMgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuCgpJIHdhbnQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYG5ldC9jb3JlL25ldGRldl93b3JrLmNgIHNwZWNpZmljYWxseS4gTXkgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyBgbmV0ZGV2X3dvcmtfcHJvY2AgYW5kIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBjb250ZXh0LCBhbmQgaG93IGBuZXRkZXZfd29ya19zY2hlZGAgaXMgdXNlZC4gSSYjMzk7bGwgcHJvYmFibHkgcnVuIHNvbWUgcXVpY2sgYGdyZXBgIGNvbW1hbmRzIG9yIGRpZyBhcm91bmQgd2l0aCBteSBmaWxlLXJlYWRpbmcgdG9vbHMgaW4gdGhhdCBmaWxlIGFuZCBhbHNvIGxvb2sgYXQgYG5ldC9uZXRkZXZfbG9jay5oYCwgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBUaGVuIEkgY2FuIGdldCBhIGZlZWwgZm9yIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2X3dvcmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuICAgMjpcdFxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdCNpbmNsdWRlIFwmIzM0O2Rldi5oXCYjMzQ7XG4gIDExOlx0XG4gIDEyOlx0c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuICAxMzpcdFxuICAxNDpcdC8qIEBuZXRkZXZfd29ya19sb2NrIHByb3RlY3RzOlxuICAxNTpcdCAqICAtIEBuZXRkZXZfd29ya19saXN0XG4gIDE2Olx0ICogIC0gd2l0aGluIHRoZSBsaXN0IGVudHJpZXMgKHN0cnVjdCBuZXRfZGV2aWNlIGZpZWxkcyk6XG4gIDE3Olx0ICpcdC0gd29ya19ub2RlXG4gIDE4Olx0ICpcdC0gd29ya190cmFja2VyXG4gIDE5Olx0ICpcdC0gd29ya19wZW5kaW5nXG4gIDIwOlx0ICpcdC0gd29ya19jb3JlX3BlbmRpbmdcbiAgMjE6XHQgKi9cbiAgMjI6XHRzdGF0aWMgTElTVF9IRUFEKG5ldGRldl93b3JrX2xpc3QpO1xuICAyMzpcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmV0ZGV2X3dvcmtfbG9jayk7XG4gIDI0Olx0c3RhdGljIERFQ0xBUkVfV09SSyhuZXRkZXZfd29yaywgbmV0ZGV2X3dvcmtfcHJvYyk7XG4gIDI1Olx0XG4gIDI2Olx0c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfZW5xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyxcbiAgMjc6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgY29yZSlcbiAgMjg6XHR7XG4gIDI5Olx0XHRpZiAoIWV2ZW50cyBcdTAwMjZcdTAwMjYgIWNvcmUpXG4gIDMwOlx0XHRcdHJldHVybjtcbiAgMzE6XHRcbiAgMzI6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAgMzM6XHRcdGlmICghZGV2X2lzYWxpdmUoZGV2KSkge1xuICAzNDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAgMzU6XHRcdFx0cmV0dXJuO1xuICAzNjpcdFx0fVxuICAzNzpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkpIHtcbiAgMzg6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlLCBcdTAwMjZuZXRkZXZfd29ya19saXN0KTtcbiAgMzk6XHRcdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya190cmFja2VyLCBHRlBfQVRPTUlDKTtcbiAgNDA6XHRcdH1cbiAgNDE6XHRcdGRldi1cdTAwM2V3b3JrX3BlbmRpbmcgfD0gZXZlbnRzO1xuICA0MjpcdFx0ZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nIHw9IGNvcmU7XG4gIDQzOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAgNDQ6XHRcbiAgNDU6XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bmV0ZGV2X3dvcmspO1xuICA0NjpcdH1cbiAgNDc6XHRcbiAgNDg6XHRzdGF0aWMgdW5zaWduZWQgbG9uZ1xuICA0OTpcdG5ldGRldl93b3JrX2RlcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyAqcGVuZGluZyxcbiAgNTA6XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbWFzaylcbiAgNTE6XHR7XG4gIDUyOlx0XHR1bnNpZ25lZCBsb25nIGV2ZW50cztcbiAgNTM6XHRcbiAgNTQ6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAgNTU6XHRcdGV2ZW50cyA9ICpwZW5kaW5nIFx1MDAyNiBtYXNrO1xuICA1NjpcdFx0KnBlbmRpbmcgXHUwMDI2PSB+ZXZlbnRzO1xuICA1NzpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpIFx1MDAyNlx1MDAyNlxuICA1ODpcdFx0ICAgICFkZXYtXHUwMDNld29ya19wZW5kaW5nIFx1MDAyNlx1MDAyNiAhZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nKSB7XG4gIDU5Olx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSk7XG4gIDYwOlx0XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya190cmFja2VyKTtcbiAgNjE6XHRcdH1cbiAgNjI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICA2MzpcdFxuICA2NDpcdFx0cmV0dXJuIGV2ZW50cztcbiAgNjU6XHR9XG4gIDY2Olx0XG4gIDY3Olx0dm9pZCBuZXRkZXZfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDY4Olx0e1xuICA2OTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICA3MDpcdFx0ZGV2LVx1MDAzZXdvcmtfcGVuZGluZyA9IDA7XG4gIDcxOlx0XHRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcgPSAwO1xuICA3MjpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpKSB7XG4gIDczOlx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSk7XG4gIDc0Olx0XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya190cmFja2VyKTtcbiAgNzU6XHRcdH1cbiAgNzY6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICA3NzpcdH1cbiAgNzg6XHRcbiAgNzk6XHR2b2lkIG5ldGRldl93b3JrX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxuICA4MDpcdHtcbiAgODE6XHRcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCBldmVudHMsIDApO1xuICA4MjpcdH1cbiAgODM6XHRFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTtcbiAgODQ6XHRcbiAgODU6XHQvKipcbiAgODY6XHQgKiBuZXRkZXZfd29ya19jYW5jZWwoKSAtIGNhbmNlbCBzZWxlY3RlZCB3b3JrIGZvciBhIG5ldGRldlxuICA4NzpcdCAqIEBkZXY6IG5ldF9kZXZpY2VcbiAgODg6XHQgKiBAbWFzazogZXZlbnRzIHRvIGNhbmNlbFxuICA4OTpcdCAqXG4gIDkwOlx0ICogQ2xlYXIgQG1hc2sgZnJvbSB0aGUgZGV2aWNlJiMzOTtzIHdvcmsgcGVuZGluZyBtYXNrLiBJZiBubyB3b3JrIGlzIGxlZnQgcGVuZGluZ1xuICA5MTpcdCAqIHRoZSBkZXZpY2UgaXMgZGVxdWV1ZWQgYW5kIGl0cyBuZG9fd29yayB3b24mIzM5O3QgYmUgY2FsbGVkLlxuICA5MjpcdCAqXG4gIDkzOlx0ICogTm8gZXhwZWN0YXRpb25zIG9uIGxvY2tpbmcsIGJ1dCBhbHNvIG5vIGd1YXJhbnRlZXMgcHJvdmlkZWQuIElmIHRoZSBjYWxsZXJcbiAgOTQ6XHQgKiB3YW50cyB0byB0b3VjaCBAZGV2IGFmdGVyd2FyZHMgKGUuZy4gY2FsbCB0aGUgd29yayB0aGF0IGdvdCBjYW5jZWxlZClcbiAgOTU6XHQgKiB0aGV5IGhhdmUgdG8gZW5zdXJlIEBkZXYgZG9lcyBub3QgZ2V0IGZyZWVkLlxuICA5NjpcdCAqXG4gIDk3Olx0ICogUmV0dXJuczogdGhlIHN1YnNldCBvZiBAbWFzayB0aGF0IHdhcyBhY3R1YWxseSBwZW5kaW5nLCBzbyB0aGUgY2FsbGVyIGNhbiBydW5cbiAgOTg6XHQgKiB0aG9zZSBldmVudHMgaW5saW5lLlxuICA5OTpcdCAqL1xuIDEwMDpcdHVuc2lnbmVkIGxvbmcgbmV0ZGV2X3dvcmtfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDU3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gTmV0d29yayBEZXZpY2UgV29ya3F1ZXVlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3R0ZW4gYSBnb29kIGhhbmRsZSBvbiBzb21lIG9mIHRoZSBjb3JlIGNvbmNlcHRzLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24uIE15IG5leHQgbW92ZSBpcyBjbGVhci4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIHRoZSBuZXR3b3JrIGRldmljZSB3b3JrcXVldWVzLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBpbW1lcnNlIG15c2VsZiBpbiB0aGUgY29kZSBhbmQgaG93IHRoZSBsb2NrcyBpbnRlcmFjdCB3aXRoIHRoZW0uIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgYG5ldC9jb3JlL25ldGRldl93b3JrLmNgLiBUaGlzIHdpbGwgc2hvdyBtZSBob3cgd29yayBpcyBxdWV1ZWQsIGV4ZWN1dGVkLCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBkZXZpY2VzLiBDcnVjaWFsbHksIEkmIzM5O20gYWxzbyBnb2luZyB0byBleGFtaW5lIGBpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oYC4gSSAqa25vdyogbG9ja3MgYXJlIGNyaXRpY2FsIGZvciB0aGlzIHNvcnQgb2YgY29uY3VycmVudCBhY2Nlc3MsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBsb2NrIG1lY2hhbmlzbXMgdXNlZCwgaG93IHRoZXkmIzM5O3JlIGFjcXVpcmVkIGFuZCByZWxlYXNlZCwgYW5kIHRoZWlyIHNwZWNpZmljIGJlaGF2aW9yIHJlbGF0ZWQgdG8gd29ya3F1ZXVlIGNvbnRleHQgaXMgcGFyYW1vdW50IHRvIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgY29uY3VycmVuY3kgYm90dGxlbmVja3MuIEkmIzM5O20gaG9waW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGUgd29ya3F1ZXVlIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBpZGVudGlmeSBhcmVhcyB3aGVyZSBjb250ZW50aW9uIG1pZ2h0IGFyaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2X3dvcmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0e1xuIDEwMjpcdFx0cmV0dXJuIG5ldGRldl93b3JrX2RlcXVldWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya19wZW5kaW5nLCBtYXNrKTtcbiAxMDM6XHR9XG4gMTA0Olx0RVhQT1JUX1NZTUJPTChuZXRkZXZfd29ya19jYW5jZWwpO1xuIDEwNTpcdFxuIDEwNjpcdHZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxuIDEwNzpcdHtcbiAxMDg6XHRcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCAwLCBldmVudHMpO1xuIDEwOTpcdH1cbiAxMTA6XHRcbiAxMTE6XHR1bnNpZ25lZCBsb25nXG4gMTEyOlx0X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXG4gMTEzOlx0e1xuIDExNDpcdFx0cmV0dXJuIG5ldGRldl93b3JrX2RlcXVldWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcsIG1hc2spO1xuIDExNTpcdH1cbiAxMTY6XHRcbiAxMTc6XHRzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4gMTE4Olx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgY29yZSlcbiAxMTk6XHR7XG4gMTIwOlx0XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4gMTIxOlx0XHRcdHJldHVybjtcbiAxMjI6XHRcbiAxMjM6XHRcdGlmIChjb3JlIFx1MDAyNiBORVRERVZfV09SS19SWF9NT0RFKVxuIDEyNDpcdFx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuIDEyNTpcdFx0aWYgKGV2ZW50cyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3dvcmspXG4gMTI2Olx0XHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb193b3JrKGRldiwgZXZlbnRzKTtcbiAxMjc6XHR9XG4gMTI4Olx0XG4gMTI5Olx0c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gMTMwOlx0e1xuIDEzMTpcdFx0d2hpbGUgKHRydWUpIHtcbiAxMzI6XHRcdFx0dW5zaWduZWQgbG9uZyBldmVudHMgPSAwLCBjb3JlID0gMDtcbiAxMzM6XHRcdFx0bmV0ZGV2aWNlX3RyYWNrZXIgdHJhY2tlcjtcbiAxMzQ6XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiAxMzU6XHRcbiAxMzY6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIDEzNzpcdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZuZXRkZXZfd29ya19saXN0KSkge1xuIDEzODpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIDEzOTpcdFx0XHRcdGJyZWFrO1xuIDE0MDpcdFx0XHR9XG4gMTQxOlx0XHRcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsXG4gMTQyOlx0XHRcdFx0XHQgICAgICAgd29ya19ub2RlKTtcbiAxNDM6XHRcdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcbiAxNDQ6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbiAxNDc6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIDE0ODpcdFx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkpIHtcbiAxNDk6XHRcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpO1xuIDE1MDpcdFx0XHRcdGNvcmUgPSBkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmc7XG4gMTUxOlx0XHRcdFx0ZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nID0gMDtcbiAxNTI6XHRcdFx0XHRldmVudHMgPSBkZXYtXHUwMDNld29ya19wZW5kaW5nO1xuIDE1MzpcdFx0XHRcdGRldi1cdTAwM2V3b3JrX3BlbmRpbmcgPSAwO1xuIDE1NDpcdFx0XHRcdC8qIFdlIHRvb2sgYW5vdGhlciByZWYgYWJvdmUgKi9cbiAxNTU6XHRcdFx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2LVx1MDAzZXdvcmtfdHJhY2tlcik7XG4gMTU2Olx0XG4gMTU3Olx0XHRcdFx0aWYgKCFkZXZfaXNhbGl2ZShkZXYpKVxuIDE1ODpcdFx0XHRcdFx0Y29yZSA9IGV2ZW50cyA9IDA7XG4gMTU5Olx0XHRcdH1cbiAxNjA6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gMTYxOlx0XG4gMTYyOlx0XHRcdG5ldGRldl93b3JrX3J1bihkZXYsIGV2ZW50cywgY29yZSk7XG4gMTYzOlx0XHRcdG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdChkZXYpO1xuIDE2NDpcdFxuIDE2NTpcdFx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2dHJhY2tlcik7XG4gMTY2Olx0XHR9XG4gMTY3Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IHVzZXI6CgoqKkRlZXAgRGl2ZSBpbnRvIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaXRzIGRlZmluaXRpb24uIEtub3dpbmcgdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3R1cmUsIGBpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oYCBpcyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LCBvciB3aGVyZXZlciBpdCYjMzk7cyBhY3R1YWxseSBkZWZpbmVkLCBJJiMzOTtsbCB0cmFjayBpdCBkb3duLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhIGtleSBhc3BlY3Qgb2YgaG93IG5ldHdvcmsgZGV2aWNlIGxvY2tpbmcgaXMgaGFuZGxlZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBiZWhhdmlvciB0byBlZmZlY3RpdmVseSBkaWFnbm9zZSBvciBtb2RpZnkgYW55dGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgaW50ZXJhY3Rpb25zLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfbG9ja19vcHNfY29tcGF0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9ODM9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9hc3NlcnRfbG9ja2VkX29wcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtODgtXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjg5OnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfbG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTkwLXtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTAxPV9fbmV0ZGV2X3B1dF9sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0KVxubmV0L2NvcmUvZGV2LmMtMTEwMi17XG5uZXQvY29yZS9kZXYuYzoxMTAzOlx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTEwNC1cdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlIFx1MDAzZSBORVRSRUdfUkVHSVNURVJFRCB8fFxuLS1cbm5ldC9jb3JlL2Rldi5oPTYwPURFRklORV9GUkVFKG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdCwgc3RydWN0IG5ldF9kZXZpY2UgKixcbi0tXG5uZXQvY29yZS9kZXYuaC02Mi1cbm5ldC9jb3JlL2Rldi5oOjYzOiNkZWZpbmUgZm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCB2YXJfbmFtZSwgaWZpbmRleClcdFxcXG5uZXQvY29yZS9kZXYuaC02NC1cdGZvciAoc3RydWN0IG5ldF9kZXZpY2UgKnZhcl9uYW1lIF9fZnJlZShuZXRkZXZfdW5sb2NrX29wc19jb21wYXQpID0gTlVMTDsgXFxcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTYxOD1pbnQgbmV0ZGV2X25sX3F1ZXVlX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNjM4LVx0fSBlbHNlIHtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6NjM5Olx0XHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIG5ldGRldixcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNjQwLVx0XHRcdFx0XHRcdCAgICAgICBjdHgtXHUwMDNlaWZpbmRleCkge1xuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9OTAxPWludCBuZXRkZXZfbmxfcXN0YXRzX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTkzOC1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6OTM5Olx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTk0MC1cdFx0ZXJyID0gbmV0ZGV2X25sX3FzdGF0c19nZXRfZHVtcF9vbmUobmV0ZGV2LCBzY29wZSwgc2tiLFxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM9MTI5PXN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTQ1LVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNDY6XHRcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTQ3LVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4tLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM9NTg9aW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtNzUtXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYzo3NjpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTc3LVx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYoXHUwMDI2cmVxX2luZm8sIHRiLFxuLS1cbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jPTMxOT1pbnQgZXRobmxfYWN0X2NhYmxlX3Rlc3RfdGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtMzQyLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM6MzQzOlx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtMzQ0LVx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYoXHUwMDI2cmVxX2luZm8sIHRiLFxuLS1cbm5ldC9ldGh0b29sL21vZHVsZS5jPTQxNz1pbnQgZXRobmxfYWN0X21vZHVsZV9md19mbGFzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL21vZHVsZS5jLTQzMS1cbm5ldC9ldGh0b29sL21vZHVsZS5jOjQzMjpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL21vZHVsZS5jLTQzMy1cdHJldCA9IGV0aG5sX29wc19iZWdpbihkZXYpO1xuLS1cbm5ldC9ldGh0b29sL3Jzcy5jPTQ2OD1pbnQgZXRobmxfcnNzX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2V0aHRvb2wvcnNzLmMtNDczLVxubmV0L2V0aHRvb2wvcnNzLmM6NDc0Olx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvZXRodG9vbC9yc3MuYy00NzUtXHRcdGlmIChjdHgtXHUwMDNlbWF0Y2hfaWZpbmRleCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZW1hdGNoX2lmaW5kZXggIT0gY3R4LVx1MDAzZWlmaW5kZXgpXG4tLVxubmV0L2V0aHRvb2wvcnNzLmM9MTAwMj1pbnQgZXRobmxfcnNzX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvcnNzLmMtMTAzNi1cbm5ldC9ldGh0b29sL3Jzcy5jOjEwMzc6XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG5uZXQvZXRodG9vbC9yc3MuYy0xMDM4LVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jPTExNTA9aW50IGV0aG5sX3Jzc19kZWxldGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jLTExNzctXG5uZXQvZXRodG9vbC9yc3MuYzoxMTc4Olx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvcnNzLmMtMTE3OS1cbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYz00NzM9aW50IGV0aG5sX3RzaW5mb19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4MS1cbm5ldC9ldGh0b29sL3RzaW5mby5jOjQ4MjpcdFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDgzLVx0XHRyZXQgPSBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0X3RvcG8oc2tiLCBkZXYsIGNiKTtcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYy00ODctXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODg6XHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIGRldiwgY3R4LVx1MDAzZXBvc19pZmluZGV4KSB7XG5uZXQvZXRodG9vbC90c2luZm8uYy00ODktXHRcdHJldCA9IGV0aG5sX3RzaW5mb19kdW1wX29uZV9uZXRfdG9wbyhza2IsIGRldiwgY2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXQgRGV2aWNlIExvY2tpbmcgTWVjaGFuaXNtKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIG5ldCBkZXZpY2UgbG9ja2luZy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmhgLCBzcGVjaWZpY2FsbHkgbGluZXMgODAgdGhyb3VnaCAxMjAuIEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoZSBjb3JlIGxvY2tpbmcgcHJpbWl0aXZlcy4gQXJlIHRoZXkgdXNpbmcgc3BpbmxvY2tzLCBtdXRleGVzLCBSQ1UsIG9yIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGFwcHJvYWNoPyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBjb250ZXh0OyB3aGF0IGFyZSB0aGV5IHByb3RlY3RpbmcsIGFuZCBob3cgaXMgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgZGVzaWduZWQgdG8gaW50ZXJhY3Qgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcz8gSSBhbnRpY2lwYXRlIGEgY29tYmluYXRpb24gb2YgdGVjaG5pcXVlcywgZGVwZW5kaW5nIG9uIHRoZSBmcmVxdWVuY3kgb2YgYWNjZXNzIGFuZCB0aGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGNvbW1lbnRzIGFyZSBoZWxwZnVsIGluIGNsYXJpZnlpbmcgdGhlIGludGVudC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgZGVzaWduIHBoaWxvc29waHkgYmVoaW5kIHRoaXMgY3J1Y2lhbCBsb2NraW5nIHNldHVwLiBIb3BlZnVsbHksIHRoZSBjb2RlIGNvbW1lbnRzIG9mZmVyIHNvbWUgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0XHRuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGRldik7XG4gIDgxOlx0fVxuICA4MjpcdFxuICA4MzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgODQ6XHR7XG4gIDg1Olx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAgODY6XHRcdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoZGV2KTtcbiAgODc6XHR9XG4gIDg4Olx0XG4gIDg5Olx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgOTA6XHR7XG4gIDkxOlx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAgOTI6XHRcdFx0bmV0ZGV2X2xvY2soZGV2KTtcbiAgOTM6XHRcdGVsc2VcbiAgOTQ6XHRcdFx0cnRubF9sb2NrKCk7XG4gIDk1Olx0fVxuICA5NjpcdFxuICA5NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgOTg6XHR7XG4gIDk5Olx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAxMDA6XHRcdFx0bmV0ZGV2X3VubG9jayhkZXYpO1xuIDEwMTpcdFx0ZWxzZVxuIDEwMjpcdFx0XHRydG5sX3VubG9jaygpO1xuIDEwMzpcdH1cbiAxMDQ6XHRcbiAxMDU6XHQvKiBNYXRjaGluZyBcJiMzNDtvcHMgcHJvdGVjdGVkXCYjMzQ7IGNhdGVnb3J5IGZyb20gbmV0ZGV2aWNlLmggKi9cbiAxMDY6XHRzdGF0aWMgaW5saW5lIGludCBuZXRkZXZfaXNfbG9ja2VkX29wc19jb21wYXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAxMDc6XHR7XG4gMTA4Olx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAxMDk6XHRcdFx0cmV0dXJuIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4gMTEwOlx0XHRyZXR1cm4gbG9ja2RlcF9ydG5sX2lzX2hlbGQoKTtcbiAxMTE6XHR9XG4gMTEyOlx0XG4gMTEzOlx0c3RhdGljIGlubGluZSBpbnQgbmV0ZGV2X2xvY2tfY21wX2ZuKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqYSxcbiAxMTQ6XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGxvY2tkZXBfbWFwICpiKVxuIDExNTpcdHtcbiAxMTY6XHRcdGlmIChhID09IGIpXG4gMTE3Olx0XHRcdHJldHVybiAwO1xuIDExODpcdFxuIDExOTpcdFx0LyogQWxsb3cgbG9ja2luZyBtdWx0aXBsZSBkZXZpY2VzIG9ubHkgdW5kZXIgcnRubF9sb2NrLFxuIDEyMDpcdFx0ICogdGhlIGV4YWN0IG9yZGVyIGRvZXNuJiMzOTt0IG1hdHRlci5cbiAxMjE6XHRcdCAqIE5vdGUgdGhhdCB1cHBlciBkZXZpY2VzIGRvbiYjMzk7dCBsb2NrIHRoZWlyIG9wcywgc28gbmVzdGluZ1xuIDEyMjpcdFx0ICogbW9zdGx5IGhhcHBlbnMgaW4gYmF0Y2hlZCBkZXZpY2UgcmVtb3ZhbCBmb3Igbm93LlxuIDEyMzpcdFx0ICovXG4gMTI0Olx0XHRyZXR1cm4gbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSA/IC0xIDogMTtcbiAxMjU6XHR9XG4gMTI2Olx0XG4gMTI3Olx0I2RlZmluZSBuZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3NlcyhkZXYpXHRcdFx0XHRcXFxuIDEyODpcdHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAxMjk6XHRcdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcWRpc2NfdHhfYnVzeWxvY2tfa2V5O1x0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNDUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb2NraW5nIENoYW5nZXMgaW4gYG5ldGRldl93b3JrX3Byb2NgKioKCk9rYXksIHNvIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgaW4gYG5ldGRldl93b3JrX3Byb2NgIHdpdGhpbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgcHJldHR5IGJsdW50OiBpdCB3YXMgaG9sZGluZyB0aGUgYHJ0bmxfbG9jaygpYCAqdW5jb25kaXRpb25hbGx5KiBmb3IgdGhlIGVudGlyZSBsb29wIHRoYXQgcHJvY2Vzc2VzIG5ldHdvcmsgZGV2aWNlcywgYW5kIG9uIHRvcCBvZiB0aGF0LCBpdCB3YXMgYWxzbyBhY3F1aXJpbmcgdGhlIGRldmljZS1zcGVjaWZpYyBsb2NrLCBgbmV0ZGV2X2xvY2tfb3BzKGRldilgLiBUaGF0JiMzOTtzIGEgc2VyaW91cyBwb3RlbnRpYWwgYm90dGxlbmVjaywgZXNwZWNpYWxseSBpbiBoaWdoLWNvbmN1cnJlbmN5IHNjZW5hcmlvcy4KCk5vdywgdGhpbmdzIGFyZSBzaWduaWZpY2FudGx5IGRpZmZlcmVudC4gVGhlIGBydG5sX2xvY2soKWAgaXMgKmNvbXBsZXRlbHkqIHJlbW92ZWQgZnJvbSB0aGUgb3V0ZXIgbG9vcC4gSW5zdGVhZCwgdGhlIGxvY2tpbmcgaXMgbm93IGhhbmRsZWQgcGVyLWRldmljZS4gSW5zaWRlIHRoZSBsb29wLCB0aGUgcGF0Y2ggbm93IHVzZXMgYG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtgLiBUaGlzIGNsZXZlciBmdW5jdGlvbiBhY3F1aXJlcyBlaXRoZXIgYGRldi0mZ3Q7bG9ja2AgKmlmKiB0aGUgZGV2aWNlIGFjdHVhbGx5ICpuZWVkcyogdGhhdCBsb2NrIChgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWApIG9yLCBpZiB0aGUgZGV2aWNlIGRvZXNuJiMzOTt0IHJlcXVpcmUgaXQsIGZhbGxzIGJhY2sgdG8gdXNpbmcgYHJ0bmxfbG9jaygpYC4gQWZ0ZXIgZWFjaCBkZXZpY2UmIzM5O3Mgd29yayBpcyBjb21wbGV0ZWQsIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTtgIGlzIHVzZWQuCgpUaGlzIGlzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gbG9ja2luZyBzZW1hbnRpY3MuIEJlZm9yZSwgcmVnYXJkbGVzcyBvZiB0aGUgZGV2aWNlJiMzOTtzIHNwZWNpZmljIG5lZWRzLCBldmVyeSBjYWxsIHRvIGBuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpYCDigJMgaW5jbHVkaW5nIHRob3NlIHRvIGBuZXRpZl9yeF9tb2RlX3J1bihkZXYpYCBhbmQgYGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3dvcmsoZGV2LCBldmVudHMpYCDigJMgd2FzIGV4ZWN1dGVkICp1bmRlciogYHJ0bmxfbG9jaygpYC4gTm93LCBpdCYjMzk7cyBub3QuCgpOb3csIGNydWNpYWwgYml0cywgZHJpdmVycyB0aGF0IGltcGxlbWVudCBxdWV1ZSBtYW5hZ2VtZW50IG9yIHNoYXBlciBBUElzIGFyZSBydW5uaW5nIGZ1bmN0aW9ucyBsaWtlIGBuZG9fd29ya2AgYW5kIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgICh3aGljaCBpcyBjYWxsZWQgdGhyb3VnaCBgbmV0aWZfcnhfbW9kZV9ydW5gKSAqd2l0aG91dCogYHJ0bmxfbG9jaygpYCBiZWluZyBoZWxkLiBUaGV5JiMzOTtyZSBvbmx5IHVzaW5nIHRoZSBkZXZpY2UmIzM5O3Mgb3duIGBkZXYtJmd0O2xvY2tgISBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHBlcmZvcm1hbmNlIGJlbmVmaXQgc2hvdWxkIHN1cmZhY2UuIFdlJiMzOTt2ZSBlZmZlY3RpdmVseSByZXBsYWNlZCBhIGdsb2JhbCBsb2NrIHdpdGggcGVyLWRldmljZSBsb2NrcyBpbiBtYW55IGNhc2VzLgoKTm93LCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHNlZSAqd2hvKiBpcyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgb2YgYG5ldGRldl93b3JrX3NjaGVkYCwgYF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZGAsIGFuZCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgc2V0dGluZyB0aGUgcmVjZWl2ZSBtb2RlLCBhcyB3ZWxsIGFzIGBuZG9fd29ya2AsIGFuZCBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYCB0aGVtc2VsdmVzLiBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aG9zZSBleGFjdCBmdW5jdGlvbiBuYW1lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmRvX3dvcmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTMwMT1uZG9fY2hhbmdlX3J4X2ZsYWdzOlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zMDQtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6MzA1Om5kb193b3JrOlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTMwNi1cdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwmIzM0O29wcyBsb2NrZWRcJiMzNDsgZHJpdmVycyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYz0zNDg5PXN0YXRpYyBpbnQgc21va2Vfc3VibWl0KHN0cnVjdCBwcmVlbXB0X3Ntb2tlICpzbW9rZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYy0zNTM1LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmM6MzUzNjpzdGF0aWMgdm9pZCBzbW9rZV9jcmVzY2VuZG9fd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmMtMzUzNy17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmM9MzU1Nz1zdGF0aWMgaW50IHNtb2tlX2NyZXNjZW5kbyhzdHJ1Y3QgcHJlZW1wdF9zbW9rZSAqc21va2UsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYy0zNTg1LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmM6MzU4NjpcdFx0a3RocmVhZF9pbml0X3dvcmsoXHUwMDI2YXJnW2lkXS53b3JrLCBzbW9rZV9jcmVzY2VuZG9fd29yayk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYy0zNTg3LVx0XHRrdGhyZWFkX3F1ZXVlX3dvcmsod29ya2VyW2lkXSwgXHUwMDI2YXJnW2lkXS53b3JrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTEwNzE9c3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTE0My0gKlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxMTQ0OiAqIHZvaWQgKCpuZG9fd29yaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTQ1LSAqXHRSdW4gZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZChAZXZlbnRzKS5cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE0NTg9c3RydWN0IG5ldF9kZXZpY2Vfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE0NzctXHRcdFx0XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE0Nzg6XHR2b2lkXHRcdFx0KCpuZG9fd29yaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTQ3OS1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE4MjE9ZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE5NTQtICpcdEB3b3JrX3BlbmRpbmc6XHRcdERyaXZlci1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmssIHBhc3NlZCB0b1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxOTU1OiAqXHRcdFx0XHRuZG9fd29yaygpIChzZWUgbmV0ZGV2X3dvcmtfc2NoZWQoKSlcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk1Ni0gKlx0QHdvcmtfY29yZV9wZW5kaW5nOlx0Q29yZS1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmsgKE5FVERFVl9XT1JLXyopXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTA1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDYzLVx0Lm5kb19jaGFuZ2VfcnhfZmxhZ3NcdD0gdmxhbl9kZXZfY2hhbmdlX3J4X2ZsYWdzLFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTA2NDpcdC5uZG9fd29ya1x0XHQ9IHZsYW5fZGV2X3dvcmssXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDY1LVx0Lm5kb19ldGhfaW9jdGxcdFx0PSB2bGFuX2Rldl9pb2N0bCxcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTgzPUVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtOTAtICogQ2xlYXIgQG1hc2sgZnJvbSB0aGUgZGV2aWNlJiMzOTtzIHdvcmsgcGVuZGluZyBtYXNrLiBJZiBubyB3b3JrIGlzIGxlZnQgcGVuZGluZ1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo5MTogKiB0aGUgZGV2aWNlIGlzIGRlcXVldWVkIGFuZCBpdHMgbmRvX3dvcmsgd29uJiMzOTt0IGJlIGNhbGxlZC5cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtOTItICpcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTExNz1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMjQtXHRcdG5ldGlmX3J4X21vZGVfcnVuKGRldik7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEyNTpcdGlmIChldmVudHMgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb193b3JrKVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMjY6XHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb193b3JrKGRldiwgZXZlbnRzKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTI3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzODQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRGV2aWNlIE9wZXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gYHZsYW5fbmV0ZGV2X29wc2AgbGVhbnMgb24gYG5kb193b3JrYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IG1pbmQgaXMgYWxyZWFkeSByYWNpbmcsIG5hdHVyYWxseSwgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgbmV0d29yayBkZXZpY2Ugb3BlcmF0aW9ucyB1dGlsaXplIGBuZG9fd29ya2AsIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgLCBvciBgbmV0ZGV2X3dvcmtfc2NoZWRgLiBJdCYjMzk7cyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwcyBoZXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4gVGhpcyB3aWxsIGluZm9ybSBteSBkZXNpZ24gY2hvaWNlcywgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIG9yIHNlY3VyaXR5IHJldmlldywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfd29ya19zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q9MzA1PW5kb193b3JrOlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zMDgtXHRDb250ZXh0OiBwcm9jZXNzIChmcm9tIGEgd29yayBxdWV1ZSlcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDozMDk6XHROb3RlczogUnVucyBkZWZlcnJlZCB3b3JrIHNjaGVkdWxlZCB3aXRoIG5ldGRldl93b3JrX3NjaGVkKCkuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMzEwLVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTA3MT1zdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTQ0LSAqIHZvaWQgKCpuZG9fd29yaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxMTQ1OiAqXHRSdW4gZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZChAZXZlbnRzKS5cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTE0Ni0gKlx0UnVucyBpbiBwcm9jZXNzIGNvbnRleHQgdW5kZXIgdGhlIG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcJiMzNDtvcHNcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE4MjE9ZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE5NTQtICpcdEB3b3JrX3BlbmRpbmc6XHRcdERyaXZlci1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmssIHBhc3NlZCB0b1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxOTU1OiAqXHRcdFx0XHRuZG9fd29yaygpIChzZWUgbmV0ZGV2X3dvcmtfc2NoZWQoKSlcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk1Ni0gKlx0QHdvcmtfY29yZV9wZW5kaW5nOlx0Q29yZS1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmsgKE5FVERFVl9XT1JLXyopXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD01MjE5PXZvaWQgZGV2X2dldF90c3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnMpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MjIwLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MjIxOnZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MjIyLXVuc2lnbmVkIGxvbmcgbmV0ZGV2X3dvcmtfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzayk7XG4tLVxubmV0LzgwMjFxL3ZsYW4uYz0zNjg9c3RhdGljIGludCB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5uZXQvODAyMXEvdmxhbi5jLTQyNC1cbm5ldC84MDIxcS92bGFuLmM6NDI1Olx0XHRcdG5ldGRldl93b3JrX3NjaGVkKHZsYW5kZXYsIFZMQU5fV09SS19NVFUpO1xubmV0LzgwMjFxL3ZsYW4uYy00MjYtXHRcdH1cbi0tXG5uZXQvODAyMXEvdmxhbi5jLTQzMC1cdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KVxubmV0LzgwMjFxL3ZsYW4uYzo0MzE6XHRcdFx0bmV0ZGV2X3dvcmtfc2NoZWQodmxhbmRldiwgVkxBTl9XT1JLX0ZFQVRVUkVTKTtcbm5ldC84MDIxcS92bGFuLmMtNDMyLVx0XHRicmVhaztcbi0tXG5uZXQvODAyMXEvdmxhbi5jLTQzNi1cdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KVxubmV0LzgwMjFxL3ZsYW4uYzo0Mzc6XHRcdFx0bmV0ZGV2X3dvcmtfc2NoZWQodmxhbmRldiwgVkxBTl9XT1JLX0xJTktfU1RBVEUpO1xubmV0LzgwMjFxL3ZsYW4uYy00MzgtXHRcdGJyZWFrO1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM9Njc9dm9pZCBuZXRkZXZfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy03OC1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6Nzk6dm9pZCBuZXRkZXZfd29ya19zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODAte1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODItfVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo4MzpFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTQ4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYCBmdW5jdGlvbi4gVGhpcyBuYW1lIHNjcmVhbXMgJiMzNDtuZXR3b3JrIGRldmljZSBvcGVyYXRpb24mIzM0OyBhbmQgJiMzNDthc3luY2hyb25vdXMsJiMzNDsgaW1wbHlpbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG5ldHdvcmsgZHJpdmVyIGFuZCBhIG5vbi1ibG9ja2luZyBvcGVyYXRpb24gZm9yIHNldHRpbmcgdGhlIHJlY2VpdmUgbW9kZS4gRXNzZW50aWFsbHksIGl0IGhhbmRsZXMgc2V0dGluZyB0aGUgcmVjZWl2ZSBtb2RlIGZvciBhIG5ldHdvcmsgaW50ZXJmYWNlLCBidXQgaW4gYSB3YXkgdGhhdCBkb2VzbiYjMzk7dCBoYWx0IG90aGVyIHByb2Nlc3NlcyB3aGlsZSBpdCBkb2VzIGl0cyB3b3JrLiBNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlOiB0aGlzIGlzIGEgY29yZSBmdW5jdGlvbiwgcHJvYmFibHkgaW4gdGhlIGRyaXZlciYjMzk7cyBpbnRlcmZhY2UgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0ICYjMzQ7UlggbW9kZSYjMzQ7IGVuY29tcGFzc2VzIGhlcmUgLSBpcyBpdCBtdWx0aWNhc3QsIHByb21pc2N1b3VzLCBhbGwtZnJhbWVzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byB0aGUgcGFydGljdWxhciBuZXR3b3JrIGNhcmQgaXQgdGFyZ2V0cz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSwgYW5kIHdoYXQgaXQgZG9lcyBpbnRlcm5hbGx5LiBLbm93aW5nIHRoaXMgZ2l2ZXMgdGhlIGNvbnRleHQgb2Ygd2hhdCBzcGVjaWZpYyBSWCBtb2RlcyBhcmUgaW52b2x2ZWQuIEkmIzM5O2xsIGFsc28gd2FudCB0byBzZWUgaG93IHRoZSBhc3luYyBhc3BlY3QgaXMgaW1wbGVtZW50ZWQg4oCTIGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgd29yayBxdWV1ZSwgYSBjYWxsYmFjaywgdGhyZWFkcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgc2VhcmNoIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmRvX3NldF9yeF9tb2RlX2FzeW5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0yODg9bmRvX3NldF9yeF9tb2RlOlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0yOTAtXHRDb250ZXh0OiBCSHMgZGlzYWJsZWRcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDoyOTE6XHROb3RlczogRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBuZG9fc2V0X3J4X21vZGVfYXN5bmMgd2hpY2ggcnVuc1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5Mi1cdGluIHByb2Nlc3MgY29udGV4dC5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0yOTMtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6Mjk0Om5kb19zZXRfcnhfbW9kZV9hc3luYzpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0yOTUtXHRTeW5jaHJvbml6YXRpb246IG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcJiMzNDtvcHMgbG9ja2VkXCYjMzQ7IGRyaXZlcnMsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MjE2OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwb2liX25ldGRldl9vcHNfcGYgPSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjE3Ni1cdC5uZG9fdHhfdGltZW91dFx0XHQgPSBpcG9pYl90aW1lb3V0LFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MjE3NzpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdCA9IGlwb2liX3NldF9yeF9tb2RlX2FzeW5jLFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjE3OC1cdC5uZG9fZ2V0X2lmbGlua1x0XHQgPSBpcG9pYl9nZXRfaWZsaW5rLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jPTIxOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcG9pYl9uZXRkZXZfb3BzX3ZmID0ge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIxOTktXHQubmRvX3R4X3RpbWVvdXRcdFx0ID0gaXBvaWJfdGltZW91dCxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jOjIyMDA6XHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXHQgPSBpcG9pYl9zZXRfcnhfbW9kZV9hc3luYyxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIyMDEtXHQubmRvX2dldF9pZmxpbmtcdFx0ID0gaXBvaWJfZ2V0X2lmbGluayxcbi0tXG5kcml2ZXJzL25ldC9kdW1teS5jPTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHVtbXlfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kdW1teS5jLTkyLVx0Lm5kb192YWxpZGF0ZV9hZGRyXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxuZHJpdmVycy9uZXQvZHVtbXkuYzo5MzpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gc2V0X211bHRpY2FzdF9saXN0LFxuZHJpdmVycy9uZXQvZHVtbXkuYy05NC1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYz02OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhZGluMTE0MF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTY5OC1cdC5uZG9fdmFsaWRhdGVfYWRkciA9IGV0aF92YWxpZGF0ZV9hZGRyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM6Njk5Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luYyA9IGFkaW4xMTQwX3J4X21vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy03MDAtXHQubmRvX2V0aF9pb2N0bCA9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYz0zMjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm5nZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYy0zMjc0LVx0Lm5kb19nZXRfc3RhdHM2NFx0PSBibmdlX2dldF9zdGF0czY0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jOjMyNzU6XHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXHQ9IGJuZ2Vfc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMzI3Ni1cdC5uZG9fZmVhdHVyZXNfY2hlY2tcdD0gYm5nZV9mZWF0dXJlc19jaGVjayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjE2OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJueHRfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjE3Mi1cdC5uZG9fZ2V0X3N0YXRzNjRcdD0gYm54dF9nZXRfc3RhdHM2NCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE2MTczOlx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBibnh0X3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTYxNzQtXHQubmRvX2V0aF9pb2N0bFx0XHQ9IGJueHRfaW9jdGwsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jPTU2ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVuZXRjNF9uZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtNTY5LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gZW5ldGNfcGZfc2V0X21hY19hZGRyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jOjU3MDpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gZW5ldGM0X3BmX3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTU3MS1cdC5uZG9fc2V0X2ZlYXR1cmVzXHQ9IGVuZXRjNF9wZl9zZXRfZmVhdHVyZXMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYz01MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWF2Zl9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTEzNy1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGlhdmZfeG1pdF9mcmFtZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM6NTEzODpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gaWF2Zl9zZXRfcnhfbW9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTEzOS1cdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jPTUzMjQ9Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1seDVlX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01MzMwLVx0Lm5kb19nZXRfc3RhdHM2NCAgICAgICAgID0gbWx4NWVfZ2V0X3N0YXRzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1MzMxOlx0Lm5kb19zZXRfcnhfbW9kZV9hc3luYyAgID0gbWx4NWVfc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTUzMzItXHQubmRvX3NldF9tYWNfYWRkcmVzcyAgICAgPSBtbHg1ZV9zZXRfbWFjLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmM9MTE5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1seHN3X3NwX3BvcnRfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jLTExOTYtXHQubmRvX3NldHVwX3RjICAgICAgICAgICA9IG1seHN3X3NwX3NldHVwX3RjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYzoxMTk3Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBtbHhzd19zcF9zZXRfcnhfbW9kZV9hc3luYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmMtMTE5OC1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IG1seHN3X3NwX3BvcnRfc2V0X21hY19hZGRyZXNzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM9NTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZmJuaWNfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTU2Ni1cdC5uZG9fY2hhbmdlX210dVx0XHQ9IGZibmljX2NoYW5nZV9tdHUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jOjU2NzpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gZmJuaWNfc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTU2OC1cdC5uZG9fZ2V0X3N0YXRzNjRcdD0gZmJuaWNfZ2V0X3N0YXRzNjQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbmV0ZGV2LmM9MjUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3Bhcng1X3BvcnRfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9uZXRkZXYuYy0yNTYtXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHNwYXJ4NV9wb3J0X3htaXRfaW1wbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X25ldGRldi5jOjI1NzpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmMgID0gc3Bhcng1X3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbmV0ZGV2LmMtMjU4LVx0Lm5kb19nZXRfcGh5c19wb3J0X25hbWUgPSBzcGFyeDVfcG9ydF9nZXRfcGh5c19wb3J0X25hbWUsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTYzNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy02MzctXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBuc2ltX3N0YXJ0X3htaXQsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NjM4Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBuc2ltX3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTYzOS1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9NjYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNpbV92Zl9uZXRkZXZfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTY2Mi1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IG5zaW1fc3RhcnRfeG1pdF92ZixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzo2NjM6XHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXHQ9IG5zaW1fc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNjY0LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gZXRoX21hY19hZGRyLFxuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jPTMzMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGtpdF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzNS1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IG5ldGtpdF94bWl0LFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MzM2Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBuZXRraXRfc2V0X211bHRpY2FzdCxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzNy1cdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IG5ldGtpdF9zZXRfaGVhZHJvb20sXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDcxPXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMzEtICpcdENhbm5vdCBzbGVlcCwgY2FsbGVkIHdpdGggbmV0aWZfYWRkcl9sb2NrX2JoIGhlbGQuXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMzI6ICpcdERlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgbmRvX3NldF9yeF9tb2RlX2FzeW5jLlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTMzLSAqXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMzQ6ICogaW50ICgqbmRvX3NldF9yeF9tb2RlX2FzeW5jKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTM1LSAqXHRcdFx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xNDU4PXN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xNDczLVx0dm9pZFx0XHRcdCgqbmRvX3NldF9yeF9tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTQ3NDpcdGludFx0XHRcdCgqbmRvX3NldF9yeF9tb2RlX2FzeW5jKShcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTQ3NS1cdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTM4ND1pbnQgcmVnaXN0ZXJfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTE0NDAtXHQgICAgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZGV2LmM6MTE0NDE6XHQgICAgIWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYylcbm5ldC9jb3JlL2Rldi5jOjExNDQyOlx0XHRuZXRkZXZfV0FSTihkZXYsIFwmIzM0O29wcy1sb2NrZWQgZHJpdmVycyBzaG91bGQgdXNlIG5kb19zZXRfcnhfbW9kZV9hc3luY1xcblwmIzM0Oyk7XG5uZXQvY29yZS9kZXYuYy0xMTQ0My1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEyNzc9dm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI5NC1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTI5NTpcdGlmIChvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyOTYtXHRcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMxNS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMxNjpcdGlmIChvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMTc6XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMoZGV2LCBcdTAwMjZ1Y19zbmFwLCBcdTAwMjZtY19zbmFwKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMxOC1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzNjI9dm9pZCBfX2Rldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM3My1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3NDpcdGlmIChvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jIHx8IG9wcy1cdTAwM2VuZG9fY2hhbmdlX3J4X2ZsYWdzIHx8XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNzUtXHQgICAgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkge1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTM5MD12b2lkIGRldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQwMC0gKlxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxNDAxOiAqIERyaXZlcnMgaW1wbGVtZW50aW5nIG5kb19zZXRfcnhfbW9kZV9hc3luYygpIGhhdmUgdGhlaXIgcnggbW9kZSBjYWxsYmFja1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDAyLSAqIGV4ZWN1dGVkIGZyb20gYSB3b3JrcXVldWUuIFRoaXMgYWxsb3dzIHRoZSBjYWxsYmFjayB0byBzbGVlcCwgYnV0IG1lYW5zXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NTQxPXN0YXRpYyBpbnQgZGV2X2lmc2lvYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqZGF0YSxcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01ODgtXHRjYXNlIFNJT0NBRERNVUxUSTpcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU4OTpcdFx0aWYgKCghb3BzLVx1MDAzZW5kb19zZXRfcnhfbW9kZSBcdTAwMjZcdTAwMjYgIW9wcy1cdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMpIHx8XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01OTAtXHRcdCAgICBpZnItXHUwMDNlaWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gQUZfVU5TUEVDKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwMC1cdGNhc2UgU0lPQ0RFTE1VTFRJOlxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NjAxOlx0XHRpZiAoKCFvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYykgfHxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwMi1cdFx0ICAgIGlmci1cdTAwM2VpZnJfaHdhZGRyLnNhX2ZhbWlseSAhPSBBRl9VTlNQRUMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Nzg4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIHBhdHRlcm4ganVtcHMgb3V0OiBgZHVtbXlgLCBgbmV0a2l0YCwgYG5zaW1gLCBhbmQgYHZsYW5gICg4MDIxcSkgYWxsIHJlbHkgb24gYG5kb19zZXRfcnhfbW9kZV9hc3luY2Agb3IgYG5kb193b3JrYCwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgZGVmZXJyZWQgbmV0ZGV2IHdvcmtxdWV1ZSBwcm9jZXNzaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcsIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGluZ3MuIFdoYXQmIzM5O3MgY2hhbmdlZCBpcyBob3cgdGhlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIHdvcmtzIGZvciB0aGF0IGRlZmVycmVkIHdvcmtxdWV1ZSwgcmVwbGFjaW5nIHRoZSBnbG9iYWwgYHJ0bmxfbG9jaygpYCB3aXRoIHBlci1kZXZpY2UgYG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KWAgYW5kIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KWAuCgpUaW1lIHRvIGFzc2VzcyB0aGlzIGFnYWluc3QgbXkgY3JpdGVyaWEuIEZpcnN0LCAqKnJlYWNoYWJpbGl0eSoqLiBXZSYjMzk7cmUgdGFsa2luZyBjb3JlIG5ldHdvcmtpbmcsIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gVGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgaGl0IHdoZW5ldmVyIG5ldGRldiB3b3JrIGdldHMgc2NoZWR1bGVkLCBhbmQgdGhhdCBjYW4gaGFwcGVuIHdpdGggVkxBTiBldmVudHMsIFJYIG1vZGUgY2hhbmdlcywgb3IgYW55IGtpbmQgb2YgbmV0d29yayBkZXZpY2UsIGluY2x1ZGluZyB2aXJ0dWFsIG9uZXMgbGlrZSB0aGUgZHVtbXkgaW50ZXJmYWNlLCBuZXRraXQsIG5ldGRldnNpbSwgYW5kIG9mIGNvdXJzZSBhbGwgdGhlIHJlZ3VsYXIgbmV0d29yayBpbnRlcmZhY2VzLiBHb29kIG5ld3MsIGl0JiMzOTtzIHRvdGFsbHkgcmVhY2hhYmxlIGluIFN5emthbGxlciBhbmQgYSBzdGFuZGFyZCBRRU1VIFZNIHNldHVwLCBzbyB0aGF0IGNoZWNrcyBvdXQuCgpOZXh0LCAqKldvcnRoRnV6emluZyoqLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSB0b3VjaGluZyBhIGNvcmUgc3Vic3lzdGVtIOKAkyBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2Ag4oCTIGFuZCBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIHRoZSBjb25jdXJyZW5jeSBtb2RlbCBhbmQgbG9ja2luZyBhcm91bmQgdGhlIHdvcmtxdWV1ZSBoYW5kbGVyLiBXZSYjMzk7cmUgbW92aW5nIGZyb20gYSBnbG9iYWwgbG9jayAoYHJ0bmxfbG9ja2ApIHRvIHBlci1kZXZpY2UgbG9ja3MuIFRoaXMgKnNjcmVhbXMqIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBsb2NrZGVwIHNwbGF0cy4gVGhlcmUmIzM5O3MgYWxzbyB0aGUgY2hhbmNlIG9mIHJlZ3Jlc3Npb25zIHdpdGggY29uY3VycmVudCBuZXRsaW5rIG9yIGlvY3RsIG9wZXJhdGlvbnMgd2hpbGUgbmV0ZGV2IHdvcmsgaXMgcnVubmluZy4gSSYjMzk7ZCBzYXksIHdpdGhvdXQgYSBkb3VidCwgYFdvcnRoRnV6emluZyA9IHRydWVgLiBUaGlzIGlzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgKipGb2N1c1N5bWJvbHMqKiBhbmQgKipFbmFibGVDb25maWdzKiouIFRoZSBwYXRjaCBpbXBhY3RzIHRoZXNlIGZ1bmN0aW9uczoKCjEuICBgbmV0ZGV2X3dvcmtfcHJvY2AgaW4gYG5ldC9jb3JlL25ldGRldl93b3JrLmNgICh0aGlzIGlzIHRoZSBtb2RpZmllZCB3b3JrIGhhbmRsZXIpCjIuICBGdW5jdGlvbnMgcmVsYXRlZCB0byBpdDogYG5ldGRldl93b3JrX3J1bmAsIGBuZXRkZXZfd29ya19lbnF1ZXVlYCwgYG5ldGRldl93b3JrX3NjaGVkYCwgYG5ldGlmX3J4X21vZGVfcnVuYCwgYHZsYW5fZGV2X3dvcmtgLgoKT2theSwgZGlnZ2luZyBpbnRvIHRoZSBjb2RlOiBgbmV0ZGV2X3dvcmtfcHJvY2AgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IHdvcmsgaGFuZGxlcnMgbWlnaHQgYmUgaW5saW5lZC4gYG5ldGRldl93b3JrX3J1bmAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBgbmV0ZGV2X3dvcmtfc2NoZWRgLCBgbmV0ZGV2X3dvcmtfY2FuY2VsYCwgYG5ldGRldl93b3JrX2NhbmNlbF9hbGxgLCBgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkYCwgYW5kIGBfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsYCBhcmUgZXhwb3J0ZWQvbm9uLXN0YXRpYyBzeW1ib2xzLiBgbmV0aWZfcnhfbW9kZV9ydW5gIGlzIGluIGBuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jYC4gQW5kIGB2bGFuX2Rldl93b3JrYCBpcyBvdmVyIGluIGBuZXQvODAyMXEvdmxhbl9kZXYuY2AuIFdlIG5lZWQgdG8gc2NydXRpbml6ZSBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AgZm9yIGhvdyBgbmV0aWZfcnhfbW9kZV9ydW5gIHdvcmtzIHRvby4gVGhpcyBuZWVkcyBhIGNsb3NlciBsb29rIGF0IHRoYXQgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0aWZfcnhfbW9kZV9ydW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2Lmg9MTY5PXZvaWQgbmV0aWZfcnhfbW9kZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xubmV0L2NvcmUvZGV2Lmg6MTcwOnZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvY29yZS9kZXYuaC0xNzEtdm9pZCBuZXRpZl9yeF9tb2RlX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMjcxPXZvaWQgbmV0aWZfcnhfbW9kZV9jYW5jZWxfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyNzYtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyNzc6dm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjc4LXtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTE0MDg9dm9pZCBuZXRpZl9yeF9tb2RlX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE0MTAtXHRpZiAoX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpKVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxNDExOlx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDEyLX1cbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTExNz1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMjMtXHRpZiAoY29yZSBcdTAwMjYgTkVUREVWX1dPUktfUlhfTU9ERSlcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTI0Olx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMjUtXHRpZiAoZXZlbnRzIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fd29yaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byBWTEFOIERldmljZSBXb3JrKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhlIFZMQU4gZGV2aWNlJiMzOTtzIHdvcmtpbmdzLCBhbmQgc3BlY2lmaWNhbGx5IHRoZSAmIzM0O3ZsYW5fZGV2X3dvcmsmIzM0OyBmdW5jdGlvbi4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIHByb2JsZW0sIGlzIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byBgbmV0LzgwMjFxL3ZsYW5fZGV2LmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBoZWFydCBvZiB0aGUgVkxBTiBkZXZpY2UgbG9naWMgaW4gdGhhdCBmaWxlLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyB3aGVuIHRyb3VibGVzaG9vdGluZyBvciBhbmFseXppbmcgVkxBTi1yZWxhdGVkIG9wZXJhdGlvbnMsIGFuZCBJIGFudGljaXBhdGUgdGhhdCBgdmxhbl9kZXZfd29ya2Agd2lsbCByZXZlYWwgdGhlIGtleSBhY3Rpb25zIG9yIHByb2Nlc3NlcyBiZWluZyB0cmlnZ2VyZWQgYW5kIGhhbmRsZWQgcmVsYXRlZCB0byBWTEFOIGRldmljZSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9kZXZfd29yayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvODAyMXEvdmxhbi5oPTEyNj12b2lkIHZsYW5fZmlsdGVyX2Ryb3BfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XG5uZXQvODAyMXEvdmxhbi5oLTEyNy1cbm5ldC84MDIxcS92bGFuLmg6MTI4Oi8qIG5ldGRldl93b3JrIGV2ZW50cyBwcm9wYWdhdGVkIGZyb20gdGhlIHJlYWwgZGV2aWNlLCBzZWUgdmxhbl9kZXZfd29yaygpLiAqL1xubmV0LzgwMjFxL3ZsYW4uaC0xMjktZW51bSB7XG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTAwMT1zdGF0aWMgdm9pZCB2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTAyMi1cbm5ldC84MDIxcS92bGFuX2Rldi5jOjEwMjM6c3RhdGljIHZvaWQgdmxhbl9kZXZfd29yayhzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDI0LXtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTEwNjMtXHQubmRvX2NoYW5nZV9yeF9mbGFnc1x0PSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsXG5uZXQvODAyMXEvdmxhbl9kZXYuYzoxMDY0Olx0Lm5kb193b3JrXHRcdD0gdmxhbl9kZXZfd29yayxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEwNjUtXHQubmRvX2V0aF9pb2N0bFx0XHQ9IHZsYW5fZGV2X2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIE5ldHdvcmsgQ29yZSBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHRpbWUgdG8gZ2V0IGdyYW51bGFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AgaXMgY29tcGlsZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmN5IGFuZCBidWlsZCBydWxlcyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgYXJlIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhhdCBmaWxlIHRvIHNlZSB0aGUgc3BlY2lmaWMgZmxhZ3MsIG9iamVjdCBmaWxlcywgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgdGhhdCBpbmZsdWVuY2UgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoYXQgcGFydGljdWxhciBDIGZpbGUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgYWZmZWN0IGl0cyBpbmNsdXNpb24gb3IgYmVoYXZpb3IgYmFzZWQgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgbmV0ZGV2IHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG4tLVxubmV0L2NvcmUvTWFrZWZpbGUtMTUtXHRcdFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjE2Olx0XHRcdG5ldGRldi1nZW5sLm8gbmV0ZGV2LWdlbmwtZ2VuLm8gbmV0ZGV2X3dvcmsubyBnc28ub1xubmV0L2NvcmUvTWFrZWZpbGUtMTctXG4tLVxubmV0L2NvcmUvZGV2LmM9MTI0NDE9dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyNTA4LVx0XHRkZXZfbWVtb3J5X3Byb3ZpZGVyX3VuaW5zdGFsbChkZXYpO1xubmV0L2NvcmUvZGV2LmM6MTI1MDk6XHRcdG5ldGRldl93b3JrX2NhbmNlbF9hbGwoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyNTEwLVx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5oPTE3Mj12b2lkIG5ldGlmX3J4X21vZGVfY2FuY2VsX3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5oLTE3NC0vKiBFdmVudHMgZm9yIHRoZSBhc3luYyBuZXRkZXYgd29yaywgdHJhY2tlZCBpbiBuZXRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcuICovXG5uZXQvY29yZS9kZXYuaDoxNzU6ZW51bSBuZXRkZXZfd29ya19jb3JlIHtcbm5ldC9jb3JlL2Rldi5oLTE3Ni1cdE5FVERFVl9XT1JLX1JYX01PREVcdD0gQklUKDApLFx0LyogcnVuIHRoZSByeF9tb2RlIHVwZGF0ZSAqL1xuLS1cbm5ldC9jb3JlL2Rldi5oLTE3OC1cbm5ldC9jb3JlL2Rldi5oOjE3OTp2b2lkIF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KTtcbm5ldC9jb3JlL2Rldi5oLTE4MC11bnNpZ25lZCBsb25nXG5uZXQvY29yZS9kZXYuaDoxODE6X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spO1xubmV0L2NvcmUvZGV2Lmg6MTgyOnZvaWQgbmV0ZGV2X3dvcmtfY2FuY2VsX2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbm5ldC9jb3JlL2Rldi5oLTE4My1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzMzU9c3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzM2LXtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzNzpcdF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzM4LX1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTE0MDg9dm9pZCBuZXRpZl9yeF9tb2RlX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQwOS17XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjE0MTA6XHRpZiAoX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpKVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDExLVx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTEtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEyOnN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTMtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE0Oi8qIEBuZXRkZXZfd29ya19sb2NrIHByb3RlY3RzOlxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNTogKiAgLSBAbmV0ZGV2X3dvcmtfbGlzdFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNi0gKiAgLSB3aXRoaW4gdGhlIGxpc3QgZW50cmllcyAoc3RydWN0IG5ldF9kZXZpY2UgZmllbGRzKTpcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTIxLSAqL1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoyMjpzdGF0aWMgTElTVF9IRUFEKG5ldGRldl93b3JrX2xpc3QpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoyMzpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ldGRldl93b3JrX2xvY2spO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoyNDpzdGF0aWMgREVDTEFSRV9XT1JLKG5ldGRldl93b3JrLCBuZXRkZXZfd29ya19wcm9jKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMjUtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjI2OnN0YXRpYyB2b2lkIG5ldGRldl93b3JrX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTI3LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBjb3JlKVxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMzEtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjMyOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0zMy1cdGlmICghZGV2X2lzYWxpdmUoZGV2KSkge1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzozNDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTM1LVx0XHRyZXR1cm47XG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0zNy1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpKSB7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjM4Olx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUsIFx1MDAyNm5ldGRldl93b3JrX2xpc3QpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0zOS1cdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya190cmFja2VyLCBHRlBfQVRPTUlDKTtcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTQyLVx0ZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nIHw9IGNvcmU7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjQzOlx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTQ0LVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo0NTpcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bmV0ZGV2X3dvcmspO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy00Ni19XG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYz00OD1zdGF0aWMgdW5zaWduZWQgbG9uZ1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo0OTpuZXRkZXZfd29ya19kZXF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgKnBlbmRpbmcsXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTUwLVx0XHQgICAgdW5zaWduZWQgbG9uZyBtYXNrKVxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNTMtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjU0Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy01NS1cdGV2ZW50cyA9ICpwZW5kaW5nIFx1MDAyNiBtYXNrO1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNjEtXHR9XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjYyOlx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTYzLVxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNjYtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjY3OnZvaWQgbmV0ZGV2X3dvcmtfY2FuY2VsX2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy02OC17XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjY5Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy03MC1cdGRldi1cdTAwM2V3b3JrX3BlbmRpbmcgPSAwO1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNzUtXHR9XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjc2Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTc3LX1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNzgtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjc5OnZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTgwLXtcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6ODE6XHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgZXZlbnRzLCAwKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODItfVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo4MzpFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODQtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTg1LS8qKlxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo4NjogKiBuZXRkZXZfd29ya19jYW5jZWwoKSAtIGNhbmNlbCBzZWxlY3RlZCB3b3JrIGZvciBhIG5ldGRldlxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy04Ny0gKiBAZGV2OiBuZXRfZGV2aWNlXG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy05OS0gKi9cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTAwOnVuc2lnbmVkIGxvbmcgbmV0ZGV2X3dvcmtfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzaylcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTAxLXtcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTAyOlx0cmV0dXJuIG5ldGRldl93b3JrX2RlcXVldWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya19wZW5kaW5nLCBtYXNrKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTAzLX1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTA0OkVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfY2FuY2VsKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTA1LVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMDY6dm9pZCBfX25ldGRldl93b3JrX2NvcmVfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTEwNy17XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEwODpcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCAwLCBldmVudHMpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMDktfVxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM9MTExPXVuc2lnbmVkIGxvbmdcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTEyOl9fbmV0ZGV2X3dvcmtfY29yZV9jYW5jZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMTMte1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMTQ6XHRyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX2NvcmVfcGVuZGluZywgbWFzayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTExNS19XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTExNi1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTE3OnN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTE4LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGNvcmUpXG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMjgtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEyOTpzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTMwLXtcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTEzNS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTM2Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEzNzpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCkpIHtcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTM4Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMzktXHRcdFx0YnJlYWs7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0MC1cdFx0fVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNDE6XHRcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0Mi1cdFx0XHRcdCAgICAgICB3b3JrX25vZGUpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNDMtXHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2dHJhY2tlciwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE0NDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0NS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTQ2LVx0XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE0NzpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNDgtXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKSkge1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTU5LVx0XHR9XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE2MDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE2MS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTYyOlx0XHRuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNjMtXHRcdG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdChkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYwMQoJCQkJCQkJb3V0cHV0OiAyMTMKCQkJCQkJCXRob3VnaHRzOiA2MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgbmV0L2NvcmUvbmV0ZGV2X3dvcmsubyBhbmQgQXNzb2NpYXRlZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsub2AgaXMgYnVpbHQgdW5jb25kaXRpb25hbGx5IGFzIGxvbmcgYXMgbmV0d29ya2luZyBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBjb25maXJtZWQgdGhpcyBieSBjaGVja2luZyB0aGUgYG5ldC9NYWtlZmlsZWAsIHdoZXJlIGBvYmoteWAgaW5jbHVkZXMgYGNvcmUvYCB3aGVuIGBDT05GSUdfTkVUYCBpcyBzZXQuICBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgaXMgdGhlcmUgYW55dGhpbmcgKmVsc2UqIHRoYXQgbWlnaHQgYmUgbmVlZGVkPyBObywgYENPTkZJR19ORVRgIGlzIHRoZSBiYXNlIHJlcXVpcmVtZW50LiBJIHF1aWNrbHkgY2hlY2tlZCBvdGhlciBjb21tb24gbmV0d29ya2luZyBvcHRpb25zIGxpa2UgYENPTkZJR19WTEFOXzgwMjFRYCwgYENPTkZJR19ORVRERVZTSU1gLCBhbmQgYENPTkZJR19EVU1NWWAsIGJ1dCBgQ09ORklHX05FVGAgYWxvbmUgaXMgdGhlIGtleSBlbmFibGVyIGhlcmUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgaW5jbHVkZWQ6IGBuZXRkZXZfd29ya19wcm9jYCwgYG5ldGRldl93b3JrX3J1bmAsIGBuZXRkZXZfd29ya19zY2hlZGAsIGBuZXRkZXZfd29ya19jYW5jZWxgLCBgbmV0ZGV2X3dvcmtfY2FuY2VsX2FsbGAsIGBfX25ldGRldl93b3JrX2NvcmVfc2NoZWRgLCBgX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbGAsIGFuZCBgbmV0aWZfcnhfbW9kZV9ydW5gLgoKT2theSwgSSYjMzk7dmUgZ290IHRoZSBtYWluIHdvcmtlciBmdW5jdGlvbiwgYG5ldGRldl93b3JrX3Byb2NgLCB3aGljaCBpcyB0aGUgb25lIGJlaW5nIG1vZGlmaWVkLCBhbG9uZyB3aXRoIGl0cyBleGVjdXRpb24gZnVuY3Rpb24gYG5ldGRldl93b3JrX3J1bmAsIHRoZSBBUEkgZW50cnkgcG9pbnRzIGBuZXRkZXZfd29ya19zY2hlZGAsIGBuZXRkZXZfd29ya19jYW5jZWxgLCBhbmQgYG5ldGRldl93b3JrX2NhbmNlbF9hbGxgLiBQbHVzLCB0aG9zZSBpbXBvcnRhbnQgaGVscGVycywgYF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZGAsIGFuZCB0aGUgY29yZSBSWCBtb2RlIGZ1bmN0aW9uLCBgbmV0aWZfcnhfbW9kZV9ydW5gLgoKTGV0JiMzOTtzIHJldmlldyB0aGUgRW5hYmxlQ29uZmlncy4gSXQmIzM5O3MganVzdCBgTkVUYCAoc3RhbmRhcmQgbmV0d29ya2luZykuCgpOb3cgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoaXMgcmlnaHQ6CgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7TkVUJiMzNDtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtuZXRkZXZfd29ya19wcm9jJiMzNDssICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssICYjMzQ7bmV0ZGV2X3dvcmtfc2NoZWQmIzM0OywgJiMzNDtuZXRkZXZfd29ya19jYW5jZWwmIzM0OywgJiMzNDtuZXRkZXZfd29ya19jYW5jZWxfYWxsJiMzNDssICYjMzQ7X19uZXRkZXZfd29ya19jb3JlX3NjaGVkJiMzNDssICYjMzQ7X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbCYjMzQ7LCAmIzM0O25ldGlmX3J4X21vZGVfcnVuJiMzNDtdYAoKKiAgIGBSZWFzb25pbmdgOiBPa2F5LCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGUgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgbW9kZWwgZm9yIHRoZSBkZWZlcnJlZCBuZXRkZXYgd29ya3F1ZXVlIHByb2Nlc3NpbmcgKGBuZXRkZXZfd29ya19wcm9jYCkgd2l0aGluIGNvcmUgbmV0d29ya2luZyAoYG5ldC9jb3JlL25ldGRldl93b3JrLmNgKS4gSXQmIzM5O3MgcmVwbGFjaW5nIHRoZSBnbG9iYWwgYHJ0bmxfbG9ja2Agd2l0aCBwZXItZGV2aWNlIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YC4gVGhpcyBjbGVhcmx5IGhpdHMgY29yZSBuZXR3b3JraW5nIGFuZCBuZXR3b3JrIGRyaXZlcnMgKFZMQU4sIHJ4IG1vZGUgdXBkYXRlcywgZXRjLikgYW5kIGNvdWxkIGV4cG9zZSByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2RlcCB2aW9sYXRpb25zIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gSXQmIzM5O3MgYWZmZWN0aW5nIGNvbmN1cnJlbnQgbmV0ZGV2IG9wZXJhdGlvbnMsIHNvIGZ1enppbmcgaXMganVzdGlmaWVkLgoKKiAgIGBXb3J0aEZ1enppbmdgOiB0cnVlCgpZZXMsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBhbmFseXNpcy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfd29ya19wcm9jJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3J1biYjMzQ7LAogICAgJiMzNDtuZXRkZXZfd29ya19zY2hlZCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfd29ya19jYW5jZWwmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfY2FuY2VsX2FsbCYjMzQ7LAogICAgJiMzNDtfX25ldGRldl93b3JrX2NvcmVfc2NoZWQmIzM0OywKICAgICYjMzQ7X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtuZXRpZl9yeF9tb2RlX3J1biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIG1vZGVsIGluIGNvcmUgbmV0d29ya2luZyYjMzk7cyBkZWZlcnJlZCB3b3JrcXVldWUgaGFuZGxpbmcgKG5ldC9jb3JlL25ldGRldl93b3JrLmMpLiBJdCByZW1vdmVzIHRoZSBnbG9iYWwgcnRubF9sb2NrIGFyb3VuZCB0aGUgd29ya2VyIGxvb3AgYW5kIHN3aXRjaGVzIHRvIHBlci1kZXZpY2UgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdCBsb2NraW5nIGR1cmluZyBkZWZlcnJlZCBuZXRkZXYgd29yayBhbmQgcnhfbW9kZSBleGVjdXRpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBuZXRkZXYgc3RhdGUgaGFuZGxpbmcgYW5kIGRyaXZlciBjYWxsYmFja3MgKHN1Y2ggYXMgVkxBTiBhbmQgYXN5bmMgcnggbW9kZSB1cGRhdGVzKSwgd2FycmFudGluZyBmdXp6aW5nIHRvIGRldGVjdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGRldl93b3JrX3Byb2MmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3NjaGVkJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfd29ya19jYW5jZWxfYWxsJiMzNDssCiAgICAmIzM0O19fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZCYjMzQ7LAogICAgJiMzNDtfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsJiMzNDssCiAgICAmIzM0O25ldGlmX3J4X21vZGVfcnVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbW9kZWwgaW4gY29yZSBuZXR3b3JraW5nJiMzOTtzIGRlZmVycmVkIHdvcmtxdWV1ZSBoYW5kbGluZyAobmV0L2NvcmUvbmV0ZGV2X3dvcmsuYykuIEl0IHJlbW92ZXMgdGhlIGdsb2JhbCBydG5sX2xvY2sgYXJvdW5kIHRoZSB3b3JrZXIgbG9vcCBhbmQgc3dpdGNoZXMgdG8gcGVyLWRldmljZSBuZXRkZXZfbG9ja19vcHNfY29tcGF0IGxvY2tpbmcgZHVyaW5nIGRlZmVycmVkIG5ldGRldiB3b3JrIGFuZCByeF9tb2RlIGV4ZWN1dGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIG5ldGRldiBzdGF0ZSBoYW5kbGluZyBhbmQgZHJpdmVyIGNhbGxiYWNrcyAoc3VjaCBhcyBWTEFOIGFuZCBhc3luYyByeCBtb2RlIHVwZGF0ZXMpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIHN5bmNocm9uaXphdGlvbiBtb2RlbCBmb3IgZGVmZXJyZWQgbmV0ZGV2IHdvcmsgKGBuZXRkZXZfd29ya19wcm9jYCkgaW4gYG5ldC9jb3JlL25ldGRldl93b3JrLmNgIGFuZCB1cGRhdGVzIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi9oZWFkZXIgY29tbWVudHMuIEluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IGFjcXVpcmluZyBgcnRubF9sb2NrKClgIGZvciB0aGUgZW50aXJlIGxvb3AgaW4gYG5ldGRldl93b3JrX3Byb2NgLCBpdCBsb2NrcyBlYWNoIG5ldCBkZXZpY2UgaW5kaXZpZHVhbGx5IHVzaW5nIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0KClgIC8gYG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdCgpYC5cblxuVGhpcyBpcyBhIHB1cmUgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGNoYW5nZS4gQW55IHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgbW9kaWZpY2F0aW9ucyByZWxhdGUgdG8gbG9ja2luZyBoaWVyYXJjaHksIHJhY2UgY29uZGl0aW9ucywgb3IgZGV2aWNlIHJlZmVyZW5jZS9saWZlY3ljbGUgbWFuYWdlbWVudCwgd2hpY2ggYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBhbHRlciBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBvciBidWZmZXIgYm91bmRhcnkgaGFuZGxpbmcuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmRjNWFkMTZlMDlhMGM1YjZmNWEzZjFiNDc1MThhYTgxYzVlNTJkMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDU6Mzc6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QKaW5kZXggZGI3MWQ0MjgzMDMyYS4uYWFjMzM0OTc4MTNmYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdApAQCAtMjkyLDE1ICYjNDM7MjkyLDIxIEBAIG5kb19zZXRfcnhfbW9kZToKIAlpbiBwcm9jZXNzIGNvbnRleHQuCiAKIG5kb19zZXRfcnhfbW9kZV9hc3luYzoKLQlTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4gSW4gYWRkaXRpb24sIG5ldGRldiBpbnN0YW5jZQotCWxvY2sgaWYgdGhlIGRyaXZlciBpbXBsZW1lbnRzIHF1ZXVlIG1hbmFnZW1lbnQgb3Igc2hhcGVyIEFQSS4KJiM0MzsJU3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgJiMzNDtvcHMgbG9ja2VkJiMzNDsgZHJpdmVycywKJiM0MzsJcnRubF9sb2NrKCkgc2VtYXBob3JlIGZvciBhbGwgb3RoZXIgZHJpdmVycy4KIAlDb250ZXh0OiBwcm9jZXNzIChmcm9tIGEgd29yayBxdWV1ZSkKIAlOb3RlczogQXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzCiAJY29udGV4dC4gUmVjZWl2ZXMgc25hcHNob3RzIG9mIHRoZSB1bmljYXN0IGFuZCBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cy4KIAogbmRvX2NoYW5nZV9yeF9mbGFnczoKLQlTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4gSW4gYWRkaXRpb24sIG5ldGRldiBpbnN0YW5jZQotCWxvY2sgaWYgdGhlIGRyaXZlciBpbXBsZW1lbnRzIHF1ZXVlIG1hbmFnZW1lbnQgb3Igc2hhcGVyIEFQSS4KJiM0MzsJU3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgJiMzNDtvcHMgbG9ja2VkJiMzNDsgZHJpdmVycywKJiM0MzsJcnRubF9sb2NrKCkgc2VtYXBob3JlIGZvciBhbGwgb3RoZXIgZHJpdmVycy4KJiM0MzsKJiM0MztuZG9fd29yazoKJiM0MzsJU3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgJiMzNDtvcHMgbG9ja2VkJiMzNDsgZHJpdmVycywKJiM0MzsJcnRubF9sb2NrKCkgc2VtYXBob3JlIGZvciBhbGwgb3RoZXIgZHJpdmVycy4KJiM0MzsJQ29udGV4dDogcHJvY2VzcyAoZnJvbSBhIHdvcmsgcXVldWUpCiYjNDM7CU5vdGVzOiBSdW5zIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoKS4KIAogbmRvX3NldHVwX3RjOgogCUxvY2tpbmcgZGVwZW5kcyBvbiBgYHRjX3NldHVwX3R5cGVgYC4gRm9yIG1vc3QgdHlwZXMgdGhlIGNhbGxiYWNrCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA4NDU0NjQ2ZDZhNDU0Li4xN2I4ZmI4ZTk0ZmVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTExMzUsMTMgJiM0MzsxMTM1LDE2IEBAIHN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHsKICAqCQkJCXN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YywKICAqCQkJCXN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7CiAgKglBc3luYyB2ZXJzaW9uIG9mIG5kb19zZXRfcnhfbW9kZSB3aGljaCBydW5zIGluIHByb2Nlc3MgY29udGV4dAotICoJd2l0aCBydG5sX2xvY2sgYW5kIG5ldGRldl9sb2NrX29wcyhkZXYpIGhlbGQuIFRoZSB1Yy9tYyBwYXJhbWV0ZXJzCiYjNDM7ICoJdW5kZXIgdGhlIG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciAmIzM0O29wcyBsb2NrZWQmIzM0OyBkcml2ZXJzLCBvcgomIzQzOyAqCXJ0bmxfbG9jayBmb3IgYWxsIG90aGVyIGRyaXZlcnMuIFRoZSB1Yy9tYyBwYXJhbWV0ZXJzCiAgKglhcmUgc25hcHNob3RzIG9mIHRoZSBhZGRyZXNzIGxpc3RzIC0gaXRlcmF0ZSB3aXRoCiAgKgluZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YykuIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgYQogICoJbmVnYXRpdmUgZXJybm8gdG8gcmVxdWVzdCBhIHJldHJ5IHZpYSB0aGUgY29yZSBiYWNrb2ZmLgogICoKICAqIHZvaWQgKCpuZG9fd29yaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpOwogICoJUnVuIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoQGV2ZW50cykuCiYjNDM7ICoJUnVucyBpbiBwcm9jZXNzIGNvbnRleHQgdW5kZXIgdGhlIG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciAmIzM0O29wcwomIzQzOyAqCWxvY2tlZCYjMzQ7IGRyaXZlcnMsIG9yIHJ0bmxfbG9jayBmb3IgYWxsIG90aGVyIGRyaXZlcnMuCiAgKgogICogaW50ICgqbmRvX3NldF9tYWNfYWRkcmVzcykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcik7CiAgKglUaGlzIGZ1bmN0aW9uICBpcyBjYWxsZWQgd2hlbiB0aGUgTWVkaWEgQWNjZXNzIENvbnRyb2wgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuYyBiL25ldC9jb3JlL25ldGRldl93b3JrLmMKaW5kZXggZTcyMWEwNmQ1OGRmMS4uYzk5OTY3OTA3ZTE4NSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRkZXZfd29yay5jCkBAIC0zLDcgJiM0MzszLDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZGV2X2xvY2suaCZndDsKQEAgLTEyOSw4ICYjNDM7MTI4LDYgQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLAogCiBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlydG5sX2xvY2soKTsKLQogCXdoaWxlICh0cnVlKSB7CiAJCXVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMCwgY29yZSA9IDA7CiAJCW5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7CkBAIC0xNDMsMTYgJiM0MzsxNDAsMTAgQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCX0KIAkJZGV2ID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO25ldGRldl93b3JrX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLAogCQkJCSAgICAgICB3b3JrX25vZGUpOwotCQkvKiBUYWtlIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzbyBAZGV2IGNhbiYjMzk7dCBiZSBmcmVlZCB3aGlsZSB3ZQotCQkgKiBkcm9wIHRoZSBsb2NrIHRvIGdyYWIgaXRzIG9wcyBsb2NrOyB0aGUgd29yayByZWZlcmVuY2UgaXMKLQkJICogb25seSByZWxlYXNlZCBvbmNlIHdlIGNsYWltIHRoZSB3b3JrIGJlbG93LgotCQkgKiBUaGUgcmUtbG9ja2luZyBkYW5jZSBpcyB0byBlbnN1cmUgdGhhdCBvcHMgbG9jayBpcyBlbm91Z2gKLQkJICogdG8gZW5zdXJlIGNhbmNlbGluZyB3b3JrIGlzIG5vdCByYWN5IHdpdGggZGVxdWV1ZS4KLQkJICovCiAJCW5ldGRldl9ob2xkKGRldiwgJmFtcDt0cmFja2VyLCBHRlBfQVRPTUlDKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZXRkZXZfd29ya19sb2NrKTsKIAotCQluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsJCW5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTsKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7bmV0ZGV2X3dvcmtfbG9jayk7CiAJCWlmICghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7d29ya19ub2RlKSkgewogCQkJbGlzdF9kZWxfaW5pdCgmYW1wO2Rldi0mZ3Q7d29ya19ub2RlKTsKQEAgLTE2OSwxMCAmIzQzOzE2MCw4IEBAIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlzcGluX3VubG9ja19iaCgmYW1wO25ldGRldl93b3JrX2xvY2spOwogCiAJCW5ldGRldl93b3JrX3J1bihkZXYsIGV2ZW50cywgY29yZSk7Ci0JCW5ldGRldl91bmxvY2tfb3BzKGRldik7CiYjNDM7CQluZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTsKIAogCQluZXRkZXZfcHV0KGRldiwgJmFtcDt0cmFja2VyKTsKIAl9Ci0KLQlydG5sX3VubG9jaygpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgRGV2aWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0YCwgYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgLCBhbmQgYG5ldC9jb3JlL25ldGRldl93b3JrLmNgIHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGNvcmUgZGV2aWNlIG1hbmFnZW1lbnQsIHRoZSBkZXZpY2UgZHJpdmVyIGludGVyZmFjZSwgYW5kIHF1aXRlIHBvc3NpYmx5LCB3b3JrZXIgcXVldWUgYmVoYXZpb3IuCgpNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KWAuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGNvdWxkIGJlIGNvbXBhdGliaWxpdHktcmVsYXRlZCwgb3IgYSBsb2NrIG9wZXJhdGlvbiwgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGhvdyBkZXZpY2Ugb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZCBvciBwcm90ZWN0ZWQuIAoKVG8gY2xhcmlmeSB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaCwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdGAuIEEgcXVpY2sgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHNob3VsZCBnaXZlIG1lIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYWxsIHRoZSBwbGFjZXMgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGFuZCBhbGwgZnVuY3Rpb25zIHdoaWNoIG1pZ2h0IGJlIGRlcGVuZGVudCBvbiBpdC4gVGhhdCB3aWxsIGltbWVkaWF0ZWx5IHNoZWQgbGlnaHQgb24gdGhlIGFyZWEgb2YgdGhlIHBhdGNoIHRoYXQgaGFzIHRvIGJlIGludmVzdGlnYXRlZC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoYXQgaXQmIzM5O3MgZG9pbmcgdW5kZXIgdGhlIGhvb2QsIGFuZCBob3cgdGhhdCYjMzk7cyBiZWluZyBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTgzPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTg4LVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDo4OTpzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC05MC17XG4tLVxubmV0L2NvcmUvZGV2LmM9MTEwMT1fX25ldGRldl9wdXRfbG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKm5ldClcbm5ldC9jb3JlL2Rldi5jLTExMDIte1xubmV0L2NvcmUvZGV2LmM6MTEwMzpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTExMDQtXHRpZiAoZGV2LVx1MDAzZXJlZ19zdGF0ZSBcdTAwM2UgTkVUUkVHX1JFR0lTVEVSRUQgfHxcbi0tXG5uZXQvY29yZS9kZXYuaD02MD1ERUZJTkVfRlJFRShuZXRkZXZfdW5sb2NrX29wc19jb21wYXQsIHN0cnVjdCBuZXRfZGV2aWNlICosXG4tLVxubmV0L2NvcmUvZGV2LmgtNjItXG5uZXQvY29yZS9kZXYuaDo2MzojZGVmaW5lIGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgdmFyX25hbWUsIGlmaW5kZXgpXHRcXFxubmV0L2NvcmUvZGV2LmgtNjQtXHRmb3IgKHN0cnVjdCBuZXRfZGV2aWNlICp2YXJfbmFtZSBfX2ZyZWUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KSA9IE5VTEw7IFxcXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz02MTg9aW50IG5ldGRldl9ubF9xdWV1ZV9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTYzOC1cdH0gZWxzZSB7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjYzOTpcdFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTY0MC1cdFx0XHRcdFx0XHQgICAgICAgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTkwMT1pbnQgbmV0ZGV2X25sX3FzdGF0c19nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05MzgtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjkzOTpcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgbmV0ZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05NDAtXHRcdGVyciA9IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBfb25lKG5ldGRldiwgc2NvcGUsIHNrYixcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTEyOT1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0NS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTQ2Olx0XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0Ny1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuLS1cbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jPTU4PWludCBldGhubF9hY3RfY2FibGVfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTc1LVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM6NzY6XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYy03Ny1cdHBoeWRldiA9IGV0aG5sX3JlcV9nZXRfcGh5ZGV2KFx1MDAyNnJlcV9pbmZvLCB0Yixcbi0tXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYz0zMTk9aW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0X3RkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTM0Mi1cbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jOjM0MzpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTM0NC1cdHBoeWRldiA9IGV0aG5sX3JlcV9nZXRfcGh5ZGV2KFx1MDAyNnJlcV9pbmZvLCB0Yixcbi0tXG5uZXQvZXRodG9vbC9tb2R1bGUuYz00MTc9aW50IGV0aG5sX2FjdF9tb2R1bGVfZndfZmxhc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9tb2R1bGUuYy00MzEtXG5uZXQvZXRodG9vbC9tb2R1bGUuYzo0MzI6XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG5uZXQvZXRodG9vbC9tb2R1bGUuYy00MzMtXHRyZXQgPSBldGhubF9vcHNfYmVnaW4oZGV2KTtcbi0tXG5uZXQvZXRodG9vbC9yc3MuYz00Njg9aW50IGV0aG5sX3Jzc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jLTQ3My1cbm5ldC9ldGh0b29sL3Jzcy5jOjQ3NDpcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2V0aHRvb2wvcnNzLmMtNDc1LVx0XHRpZiAoY3R4LVx1MDAzZW1hdGNoX2lmaW5kZXggXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2VtYXRjaF9pZmluZGV4ICE9IGN0eC1cdTAwM2VpZmluZGV4KVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jPTEwMDI9aW50IGV0aG5sX3Jzc19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jLTEwMzYtXG5uZXQvZXRodG9vbC9yc3MuYzoxMDM3Olx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvcnNzLmMtMTAzOC1cbi0tXG5uZXQvZXRodG9vbC9yc3MuYz0xMTUwPWludCBldGhubF9yc3NfZGVsZXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9yc3MuYy0xMTc3LVxubmV0L2V0aHRvb2wvcnNzLmM6MTE3ODpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL3Jzcy5jLTExNzktXG4tLVxubmV0L2V0aHRvb2wvdHNpbmZvLmM9NDczPWludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYy00ODEtXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODI6XHRcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4My1cdFx0cmV0ID0gZXRobmxfdHNpbmZvX2R1bXBfb25lX25ldF90b3BvKHNrYiwgZGV2LCBjYik7XG4tLVxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDg3LVxubmV0L2V0aHRvb2wvdHNpbmZvLmM6NDg4Olx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cdTAwM2Vwb3NfaWZpbmRleCkge1xubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDg5LVx0XHRyZXQgPSBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0X3RvcG8oc2tiLCBkZXYsIGNiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQzMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipEaXZpbmcgRGVlcCBpbnRvIGBuZXRkZXZfd29yay5jYCBBcm91bmQgVGhhdCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O09rYXksIGxldCYjMzk7cyBub3QganVzdCBnbGFuY2UgYXQgKnRoYXQqIHNwZWNpZmljIGZ1bmN0aW9uOyB3ZSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZSBoZXJlLiYjMzQ7IEl0JiMzOTtzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIHRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSwgYG5ldC9jb3JlL25ldGRldl93b3JrLmNgLiBJIG5lZWQgdG8gZ3Jhc3AgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgZGV2aWNlIGxheWVyIGFzIGEgd2hvbGUsIHdoYXQgdGhpcyBpcyB0cnlpbmcgdG8gYWNjb21wbGlzaC4KCkxldCYjMzk7cyBkbyBhIGNvbXBsZXRlIHJlYWQtdGhyb3VnaCBpbiBvcmRlciB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcyBhbmQgZG9lcyBub3QgZG8uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBhcmVhcyBzdWNoIGFzIGxvY2tpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoaXMgYWZmZWN0cyB0aGUgc2NoZWR1bGVyLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBjb25jdXJyZW5jeSBjb25jZXJucyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGlzIGFyZWEuIE5vIHNob3J0Y3V0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdywgaXRzIGRlcGVuZGVuY2llcywgYW5kIHdoYXQga2luZCBvZiB3b3JrIGl0IGlzIG1lYW50IHRvIHBlcmZvcm0uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGZvbGxvdyB0aGUgbG9naWMgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRkZXZfd29yay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0XG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gICA5Olx0XG4gIDEwOlx0I2luY2x1ZGUgXCYjMzQ7ZGV2LmhcJiMzNDtcbiAgMTE6XHRcbiAgMTI6XHRzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gIDEzOlx0XG4gIDE0Olx0LyogQG5ldGRldl93b3JrX2xvY2sgcHJvdGVjdHM6XG4gIDE1Olx0ICogIC0gQG5ldGRldl93b3JrX2xpc3RcbiAgMTY6XHQgKiAgLSB3aXRoaW4gdGhlIGxpc3QgZW50cmllcyAoc3RydWN0IG5ldF9kZXZpY2UgZmllbGRzKTpcbiAgMTc6XHQgKlx0LSB3b3JrX25vZGVcbiAgMTg6XHQgKlx0LSB3b3JrX3RyYWNrZXJcbiAgMTk6XHQgKlx0LSB3b3JrX3BlbmRpbmdcbiAgMjA6XHQgKlx0LSB3b3JrX2NvcmVfcGVuZGluZ1xuICAyMTpcdCAqL1xuICAyMjpcdHN0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3dvcmtfbGlzdCk7XG4gIDIzOlx0c3RhdGljIERFRklORV9TUElOTE9DSyhuZXRkZXZfd29ya19sb2NrKTtcbiAgMjQ6XHRzdGF0aWMgREVDTEFSRV9XT1JLKG5ldGRldl93b3JrLCBuZXRkZXZfd29ya19wcm9jKTtcbiAgMjU6XHRcbiAgMjY6XHRzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19lbnF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxuICAyNzpcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBjb3JlKVxuICAyODpcdHtcbiAgMjk6XHRcdGlmICghZXZlbnRzIFx1MDAyNlx1MDAyNiAhY29yZSlcbiAgMzA6XHRcdFx0cmV0dXJuO1xuICAzMTpcdFxuICAzMjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICAzMzpcdFx0aWYgKCFkZXZfaXNhbGl2ZShkZXYpKSB7XG4gIDM0Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICAzNTpcdFx0XHRyZXR1cm47XG4gIDM2Olx0XHR9XG4gIDM3Olx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKSkge1xuICAzODpcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUsIFx1MDAyNm5ldGRldl93b3JrX2xpc3QpO1xuICAzOTpcdFx0XHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuICA0MDpcdFx0fVxuICA0MTpcdFx0ZGV2LVx1MDAzZXdvcmtfcGVuZGluZyB8PSBldmVudHM7XG4gIDQyOlx0XHRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcgfD0gY29yZTtcbiAgNDM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICA0NDpcdFxuICA0NTpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZuZXRkZXZfd29yayk7XG4gIDQ2Olx0fVxuICA0NzpcdFxuICA0ODpcdHN0YXRpYyB1bnNpZ25lZCBsb25nXG4gIDQ5Olx0bmV0ZGV2X3dvcmtfZGVxdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nICpwZW5kaW5nLFxuICA1MDpcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBtYXNrKVxuICA1MTpcdHtcbiAgNTI6XHRcdHVuc2lnbmVkIGxvbmcgZXZlbnRzO1xuICA1MzpcdFxuICA1NDpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICA1NTpcdFx0ZXZlbnRzID0gKnBlbmRpbmcgXHUwMDI2IG1hc2s7XG4gIDU2Olx0XHQqcGVuZGluZyBcdTAwMjY9IH5ldmVudHM7XG4gIDU3Olx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkgXHUwMDI2XHUwMDI2XG4gIDU4Olx0XHQgICAgIWRldi1cdTAwM2V3b3JrX3BlbmRpbmcgXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcpIHtcbiAgNTk6XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKTtcbiAgNjA6XHRcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIpO1xuICA2MTpcdFx0fVxuICA2MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gIDYzOlx0XG4gIDY0Olx0XHRyZXR1cm4gZXZlbnRzO1xuICA2NTpcdH1cbiAgNjY6XHRcbiAgNjc6XHR2b2lkIG5ldGRldl93b3JrX2NhbmNlbF9hbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgNjg6XHR7XG4gIDY5Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gIDcwOlx0XHRkZXYtXHUwMDNld29ya19wZW5kaW5nID0gMDtcbiAgNzE6XHRcdGRldi1cdTAwM2V3b3JrX2NvcmVfcGVuZGluZyA9IDA7XG4gIDcyOlx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkpIHtcbiAgNzM6XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKTtcbiAgNzQ6XHRcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIpO1xuICA3NTpcdFx0fVxuICA3NjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gIDc3Olx0fVxuICA3ODpcdFxuICA3OTpcdHZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXG4gIDgwOlx0e1xuICA4MTpcdFx0bmV0ZGV2X3dvcmtfZW5xdWV1ZShkZXYsIGV2ZW50cywgMCk7XG4gIDgyOlx0fVxuICA4MzpcdEVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xuICA4NDpcdFxuICA4NTpcdC8qKlxuICA4NjpcdCAqIG5ldGRldl93b3JrX2NhbmNlbCgpIC0gY2FuY2VsIHNlbGVjdGVkIHdvcmsgZm9yIGEgbmV0ZGV2XG4gIDg3Olx0ICogQGRldjogbmV0X2RldmljZVxuICA4ODpcdCAqIEBtYXNrOiBldmVudHMgdG8gY2FuY2VsXG4gIDg5Olx0ICpcbiAgOTA6XHQgKiBDbGVhciBAbWFzayBmcm9tIHRoZSBkZXZpY2UmIzM5O3Mgd29yayBwZW5kaW5nIG1hc2suIElmIG5vIHdvcmsgaXMgbGVmdCBwZW5kaW5nXG4gIDkxOlx0ICogdGhlIGRldmljZSBpcyBkZXF1ZXVlZCBhbmQgaXRzIG5kb193b3JrIHdvbiYjMzk7dCBiZSBjYWxsZWQuXG4gIDkyOlx0ICpcbiAgOTM6XHQgKiBObyBleHBlY3RhdGlvbnMgb24gbG9ja2luZywgYnV0IGFsc28gbm8gZ3VhcmFudGVlcyBwcm92aWRlZC4gSWYgdGhlIGNhbGxlclxuICA5NDpcdCAqIHdhbnRzIHRvIHRvdWNoIEBkZXYgYWZ0ZXJ3YXJkcyAoZS5nLiBjYWxsIHRoZSB3b3JrIHRoYXQgZ290IGNhbmNlbGVkKVxuICA5NTpcdCAqIHRoZXkgaGF2ZSB0byBlbnN1cmUgQGRldiBkb2VzIG5vdCBnZXQgZnJlZWQuXG4gIDk2Olx0ICpcbiAgOTc6XHQgKiBSZXR1cm5zOiB0aGUgc3Vic2V0IG9mIEBtYXNrIHRoYXQgd2FzIGFjdHVhbGx5IHBlbmRpbmcsIHNvIHRoZSBjYWxsZXIgY2FuIHJ1blxuICA5ODpcdCAqIHRob3NlIGV2ZW50cyBpbmxpbmUuXG4gIDk5Olx0ICovXG4gMTAwOlx0dW5zaWduZWQgbG9uZyBuZXRkZXZfd29ya19jYW5jZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgbmV0ZGV2X3dvcmsuY2AgZmlsZSBmcm9tIHRoZSBgbmV0L2NvcmVgIGRpcmVjdG9yeS4KCioqRGl2aW5nIERlZXAgaW50byBgbmV0ZGV2X3dvcmsuY2AqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBncm9rIHRoZSByZXN0IG9mIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gSSBhbHJlYWR5IGhhdmUgYSBkZWNlbnQgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjayBhcmNoaXRlY3R1cmUsIHNvIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljcyBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5IG9mIHRoZSBuZXR3b3JrIGRldmljZSBvcGVyYXRpb25zIChsaWtlIGhhbmRsaW5nIHBhY2tldCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbikgd2l0aCB0aGUgd29yayBxdWV1ZSBtZWNoYW5pc20uCgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IG5ldHdvcmsgZGV2aWNlcyBlbnF1ZXVlIHdvcmsgdG8gYmUgZG9uZSBsYXRlciDigJMgdGhlIGNsYXNzaWMgZGVmZXJyZWQgcHJvY2Vzc2luZyBwYXR0ZXJuLiBMaWtlbHksIHRoaXMgaW52b2x2ZXMgaGFuZGxpbmcgaW50ZXJydXB0cywgc2NoZWR1bGluZyB0YXNrcyB0byBhdm9pZCBibG9ja2luZyBjcml0aWNhbCBwYXRocywgYW5kIG1haW50YWluaW5nIHNvbWUgc29ydCBvZiBvcmRlcmluZyBvciBwcmlvcml0aXphdGlvbi4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSBtYW5hZ2UgdGhlIGNvbnRleHQgc3dpdGNoZXMgaW52b2x2ZWQsIGVzcGVjaWFsbHkgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlciB1c2Ugb2YgcGVyLUNQVSBxdWV1ZXMgb3Igb3RoZXIgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMgZm9yIG11bHRpLWNvcmUgc3lzdGVtcy4KCkdpdmVuIHRoZSBmaWxlIG5hbWUsIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBkZWFscyB3aXRoIHRoZSB3b3JrcXVldWVzIHNwZWNpZmljYWxseSBmb3IgbmV0d29yayBkZXZpY2Ugb3BlcmF0aW9ucy4gVGhhdCBtZWFucyB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgd29yayBpcyBzdWJtaXR0ZWQsIGhvdyB0aGUgd29ya3F1ZXVlIHRocmVhZHMgYXJlIHdva2VuIHVwLCBhbmQgaG93IHRoZSBuZXR3b3JrIGRldmljZS1zcGVjaWZpYyB3b3JrIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGxpa2Ugc3BpbmxvY2tzIG9yIG11dGV4ZXMgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyBjb25jdXJyZW50IGFjY2VzcyBmcm9tIGRpZmZlcmVudCBjb250ZXh0cy4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBzcGVjaWFsIGhhbmRsaW5nIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgbmV0d29yayBkZXZpY2VzIGxpa2UgdmlydHVhbCBpbnRlcmZhY2VzLCBib25kIGludGVyZmFjZXMsIG9yIGJyaWRnaW5nIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldl93b3JrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMTpcdHtcbiAxMDI6XHRcdHJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgXHUwMDI2ZGV2LVx1MDAzZXdvcmtfcGVuZGluZywgbWFzayk7XG4gMTAzOlx0fVxuIDEwNDpcdEVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfY2FuY2VsKTtcbiAxMDU6XHRcbiAxMDY6XHR2b2lkIF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcbiAxMDc6XHR7XG4gMTA4Olx0XHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgMCwgZXZlbnRzKTtcbiAxMDk6XHR9XG4gMTEwOlx0XG4gMTExOlx0dW5zaWduZWQgbG9uZ1xuIDExMjpcdF9fbmV0ZGV2X3dvcmtfY29yZV9jYW5jZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKVxuIDExMzpcdHtcbiAxMTQ6XHRcdHJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgXHUwMDI2ZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nLCBtYXNrKTtcbiAxMTU6XHR9XG4gMTE2Olx0XG4gMTE3Olx0c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxuIDExODpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGNvcmUpXG4gMTE5Olx0e1xuIDEyMDpcdFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuIDEyMTpcdFx0XHRyZXR1cm47XG4gMTIyOlx0XG4gMTIzOlx0XHRpZiAoY29yZSBcdTAwMjYgTkVUREVWX1dPUktfUlhfTU9ERSlcbiAxMjQ6XHRcdFx0bmV0aWZfcnhfbW9kZV9ydW4oZGV2KTtcbiAxMjU6XHRcdGlmIChldmVudHMgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb193b3JrKVxuIDEyNjpcdFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fd29yayhkZXYsIGV2ZW50cyk7XG4gMTI3Olx0fVxuIDEyODpcdFxuIDEyOTpcdHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDEzMDpcdHtcbiAxMzE6XHRcdHdoaWxlICh0cnVlKSB7XG4gMTMyOlx0XHRcdHVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMCwgY29yZSA9IDA7XG4gMTMzOlx0XHRcdG5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7XG4gMTM0Olx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gMTM1Olx0XG4gMTM2Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAxMzc6XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCkpIHtcbiAxMzg6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAxMzk6XHRcdFx0XHRicmVhaztcbiAxNDA6XHRcdFx0fVxuIDE0MTpcdFx0XHRkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNm5ldGRldl93b3JrX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLFxuIDE0MjpcdFx0XHRcdFx0ICAgICAgIHdvcmtfbm9kZSk7XG4gMTQzOlx0XHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2dHJhY2tlciwgR0ZQX0FUT01JQyk7XG4gMTQ0Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIDE0NTpcdFxuIDE0NjpcdFx0XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG4gMTQ3Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAxNDg6XHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpKSB7XG4gMTQ5Olx0XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKTtcbiAxNTA6XHRcdFx0XHRjb3JlID0gZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nO1xuIDE1MTpcdFx0XHRcdGRldi1cdTAwM2V3b3JrX2NvcmVfcGVuZGluZyA9IDA7XG4gMTUyOlx0XHRcdFx0ZXZlbnRzID0gZGV2LVx1MDAzZXdvcmtfcGVuZGluZztcbiAxNTM6XHRcdFx0XHRkZXYtXHUwMDNld29ya19wZW5kaW5nID0gMDtcbiAxNTQ6XHRcdFx0XHQvKiBXZSB0b29rIGFub3RoZXIgcmVmIGFib3ZlICovXG4gMTU1Olx0XHRcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIpO1xuIDE1NjpcdFxuIDE1NzpcdFx0XHRcdGlmICghZGV2X2lzYWxpdmUoZGV2KSlcbiAxNTg6XHRcdFx0XHRcdGNvcmUgPSBldmVudHMgPSAwO1xuIDE1OTpcdFx0XHR9XG4gMTYwOlx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIDE2MTpcdFxuIDE2MjpcdFx0XHRuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpO1xuIDE2MzpcdFx0XHRuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTtcbiAxNjQ6XHRcbiAxNjU6XHRcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnRyYWNrZXIpO1xuIDE2NjpcdFx0fVxuIDE2NzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBuZXR3b3JrIGRldmljZSBkcml2ZXIgaW50ZXJuYWxzOgoKKipEaXZpbmcgaW50byB0aGUgbmV0ZGV2X2xvY2sgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYWN0dWFsIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYG5ldGRldl9sb2NrX29wc19jb21wYXRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBoZWFkIG92ZXIgdG8gYGluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGNvbXBhdGliaWxpdHkgbGF5ZXIgZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhpcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGxvY2tpbmcgbWVjaGFuaXNtcyBvZiB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyLiBXaGF0IHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgd3JhcHBlZCBvciBtb2RpZmllZCB3aXRoaW4gYG5ldGRldl9sb2NrX29wc19jb21wYXRgPyBBbmQsIHdoYXQmIzM5O3MgdGhlIHB1cnBvc2Ugb2YgaXQ/IElzIGl0IGZvciBoYW5kbGluZyBvbGRlciBkcml2ZXJzLCBvciBhY2NvbW1vZGF0aW5nIHNvbWUgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSBuZWVkPyBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9uYWxpdGllcyBwcm92aWRlZCBieSB0aGlzIHN0cnVjdHVyZSwgYW5kIGhvdyBkb2VzIGl0IGludGVncmF0ZSBpbnRvIHRoZSBsYXJnZXIgbG9ja2luZyBzY2hlbWUgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2s/IFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCBob3cgdG8gaGFuZGxlIGFueSBwb3RlbnRpYWwgaXNzdWVzLCBvciBmb3Igb3B0aW1pemluZyB0aGUgbG9ja2luZyBzdHJhdGVneSBpbiB0aGUgYnJvYWRlciBzY29wZSBvZiBuZXR3b3JrIGRyaXZlciBkZXZlbG9wbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdHtcbiAgNjE6XHRcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxuICA2MjpcdFx0XHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChkZXYpO1xuICA2MzpcdFx0ZWxzZVxuICA2NDpcdFx0XHRuZXRkZXZfdW5sb2NrKGRldik7XG4gIDY1Olx0fVxuICA2NjpcdFxuICA2NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDY4Olx0e1xuICA2OTpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gIDcwOlx0XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuICA3MTpcdFx0ZWxzZVxuICA3MjpcdFx0XHRBU1NFUlRfUlROTCgpO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHRzdGF0aWMgaW5saW5lIHZvaWRcbiAgNzY6XHRuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0X29yX2ludmlzaWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICA3NzpcdHtcbiAgNzg6XHRcdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlID09IE5FVFJFR19SRUdJU1RFUkVEIHx8XG4gIDc5Olx0XHQgICAgZGV2LVx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfVU5SRUdJU1RFUklORylcbiAgODA6XHRcdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzX2NvbXBhdChkZXYpO1xuICA4MTpcdH1cbiAgODI6XHRcbiAgODM6XHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDg0Olx0e1xuICA4NTpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gIDg2Olx0XHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XG4gIDg3Olx0fVxuICA4ODpcdFxuICA4OTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfbG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDkwOlx0e1xuICA5MTpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gIDkyOlx0XHRcdG5ldGRldl9sb2NrKGRldik7XG4gIDkzOlx0XHRlbHNlXG4gIDk0Olx0XHRcdHJ0bmxfbG9jaygpO1xuICA5NTpcdH1cbiAgOTY6XHRcbiAgOTc6XHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDk4Olx0e1xuICA5OTpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gMTAwOlx0XHRcdG5ldGRldl91bmxvY2soZGV2KTtcbiAxMDE6XHRcdGVsc2VcbiAxMDI6XHRcdFx0cnRubF91bmxvY2soKTtcbiAxMDM6XHR9XG4gMTA0Olx0XG4gMTA1Olx0LyogTWF0Y2hpbmcgXCYjMzQ7b3BzIHByb3RlY3RlZFwmIzM0OyBjYXRlZ29yeSBmcm9tIG5ldGRldmljZS5oICovXG4gMTA2Olx0c3RhdGljIGlubGluZSBpbnQgbmV0ZGV2X2lzX2xvY2tlZF9vcHNfY29tcGF0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gMTA3Olx0e1xuIDEwODpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gMTA5Olx0XHRcdHJldHVybiBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuIDExMDpcdFx0cmV0dXJuIGxvY2tkZXBfcnRubF9pc19oZWxkKCk7XG4gMTExOlx0fVxuIDExMjpcdFxuIDExMzpcdHN0YXRpYyBpbmxpbmUgaW50IG5ldGRldl9sb2NrX2NtcF9mbihjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmEsXG4gMTE0Olx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqYilcbiAxMTU6XHR7XG4gMTE2Olx0XHRpZiAoYSA9PSBiKVxuIDExNzpcdFx0XHRyZXR1cm4gMDtcbiAxMTg6XHRcbiAxMTk6XHRcdC8qIEFsbG93IGxvY2tpbmcgbXVsdGlwbGUgZGV2aWNlcyBvbmx5IHVuZGVyIHJ0bmxfbG9jayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY0NQoJCQkJCQkJb3V0cHV0OiAyMTQKCQkJCQkJCXRob3VnaHRzOiA3MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRkZXYgV29yayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCBpbnZvbHZlcyBhIGNyaXRpY2FsIGV4YW1pbmF0aW9uIG9mIGl0cyBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIGltcGFjdC4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgaXQmIzM5O3MgYSByZWZhY3RvcmluZyBvZiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIHdpdGhpbiB0aGUgYG5ldGRldl93b3JrX3Byb2NgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gQmVmb3JlLCB3ZSBoYWQgdGhlIGBydG5sX2xvY2soKWAgaGVsZCB1bmNvbmRpdGlvbmFsbHkgb3ZlciB0aGUgZW50aXJlIGxvb3AsIGFsb25nIHdpdGggcGVyLWRldmljZSBsb2NrcyBhcyBuZWVkZWQuIE5vdywgaXQmIzM5O3MgYmVlbiBjaGFuZ2VkIHRvIHVzZSBgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpYCAvIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KWAgb24gYSBwZXItZGV2aWNlIGJhc2lzIHdpdGhpbiB0aGUgbG9vcC4gVGhpcyBsb29rcyBsaWtlIGFuIGF0dGVtcHQgYXQgaW1wcm92aW5nIGNvbmN1cnJlbmN5IGJ5IHJlZHVjaW5nIHRoZSBzY29wZSBvZiB0aGUgYHJ0bmxfbG9ja2AuIFBsdXMsIHRoZXJlIGFyZSBzb21lIHVwZGF0ZXMgdG8gYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBjb21tZW50cyB0byByZWZsZWN0IHRoZSBuZXcgc3luY2hyb25pemF0aW9uIG1vZGVsIGZvciBtZXRob2RzIGxpa2UgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AuCgpOb3csIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgcmlza3MuIEZpcnN0LCB0aGUgbWVtb3J5IHNhZmV0eSBjb25jZXJuczogYW0gSSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZT8gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyBhbnkga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLCBidXQgdGhlcmUgYXJlIG5vbmUuIFNpbWlsYXJseSwgbm8gYnJhbmNoaW5nIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gYWx0ZXJhdGlvbnMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBMb29rcyBsaWtlIGFsbCBtZW1vcnktcmVsYXRlZCBhc3BlY3RzIGFyZSBjb3ZlcmVkLgoKVGhlIG1ham9yIGFyZWEgb2YgY29uY2VybiBoZXJlIGlzIHRoZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbiByZWZhY3RvciBpdHNlbGYuIENvbmN1cnJlbmN5IGlzc3VlcyBsaWtlIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBhbmQgbG9ja2RlcCB2aW9sYXRpb25zIGFyZSB0aGUgcHJpbWFyeSBwb3RlbnRpYWwgcmlza3MuIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcywganVzdCBjaGFuZ2VzIHRoZSBsb2NraW5nIHN0cmF0ZWdpZXMgZm9yIGV4aXN0aW5nIGNvZGUsIGFuZCBJIHNlZSB0aGF0IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBpZGVudGlmeSB0aG9zZSBraW5kcyBvZiBpc3N1ZXMuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgcHVyZWx5IGFib3V0IGxvY2tpbmcgY2hhbmdlcywgYW5kIHNpbmNlIG5vIG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGNvcGllcywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIHVzZXItc3BhY2UgY29waWVzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQsIEkmIzM5O20gZmFpcmx5IGNvbmZpZGVudCB0aGF0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXNuJiMzOTt0IHJlYWxseSBhcHBsaWNhYmxlIGhlcmUuIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggYXJlbiYjMzk7dCByZWFsbHkgaW4gdGhlIHNjb3BlIG9mIHRoaXMgcmVmYWN0b3JpbmcuIFNvLCBJIG5lZWQgdG8gY29udHJhc3QgS0FTQU4vTE9DS0RFUCB2ZXJzdXMgS01TQU4gaGVyZS4KClRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgSSB0aGluayB0aGlzIGFuYWx5c2lzIGlzIHNvdW5kLiBMZXQmIzM5O3MgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIG1vZGVsIGZvciBkZWZlcnJlZCBuZXRkZXYgd29yayAoYG5ldGRldl93b3JrX3Byb2NgKSBpbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AgYW5kIHVwZGF0ZXMgcmVsYXRlZCBkb2N1bWVudGF0aW9uL2hlYWRlciBjb21tZW50cy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIGBydG5sX2xvY2soKWAgZm9yIHRoZSBlbnRpcmUgbG9vcCBpbiBgbmV0ZGV2X3dvcmtfcHJvY2AsIGl0IGxvY2tzIGVhY2ggbmV0IGRldmljZSBpbmRpdmlkdWFsbHkgdXNpbmcgYG5ldGRldl9sb2NrX29wc19jb21wYXQoKWAgLyBgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KClgLlxuXG5UaGlzIGlzIGEgcHVyZSBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gY2hhbmdlLiBBbnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHJlbGF0ZSB0byBsb2NraW5nIGhpZXJhcmNoeSwgcmFjZSBjb25kaXRpb25zLCBvciBkZXZpY2UgcmVmZXJlbmNlL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIG9yIGJ1ZmZlciBib3VuZGFyeSBoYW5kbGluZy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzeW5jaHJvbml6YXRpb24gbW9kZWwgZm9yIGRlZmVycmVkIG5ldGRldiB3b3JrIChgbmV0ZGV2X3dvcmtfcHJvY2ApIGluIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYCBhbmQgdXBkYXRlcyByZWxhdGVkIGRvY3VtZW50YXRpb24vaGVhZGVyIGNvbW1lbnRzLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgYHJ0bmxfbG9jaygpYCBmb3IgdGhlIGVudGlyZSBsb29wIGluIGBuZXRkZXZfd29ya19wcm9jYCwgaXQgbG9ja3MgZWFjaCBuZXQgZGV2aWNlIGluZGl2aWR1YWxseSB1c2luZyBgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdCgpYCAvIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoKWAuXG5cblRoaXMgaXMgYSBwdXJlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBjaGFuZ2UuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIGxvY2tpbmcgaGllcmFyY2h5LCByYWNlIGNvbmRpdGlvbnMsIG9yIGRldmljZSByZWZlcmVuY2UvbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgb3IgYnVmZmVyIGJvdW5kYXJ5IGhhbmRsaW5nLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzc6NDkuMjk4NzY5NjQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MjYxMTY1Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGRldl93b3JrX3Byb2NcIixcbiAgICBcIm5ldGRldl93b3JrX3J1blwiLFxuICAgIFwibmV0ZGV2X3dvcmtfc2NoZWRcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbFwiLFxuICAgIFwibmV0ZGV2X3dvcmtfY2FuY2VsX2FsbFwiLFxuICAgIFwiX19uZXRkZXZfd29ya19jb3JlX3NjaGVkXCIsXG4gICAgXCJfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsXCIsXG4gICAgXCJuZXRpZl9yeF9tb2RlX3J1blwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIG1vZGVsIGZvciBkZWZlcnJlZCBuZXRkZXYgd29yayAoYG5ldGRldl93b3JrX3Byb2NgKSBpbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AgYW5kIHVwZGF0ZXMgcmVsYXRlZCBkb2N1bWVudGF0aW9uL2hlYWRlciBjb21tZW50cy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIGBydG5sX2xvY2soKWAgZm9yIHRoZSBlbnRpcmUgbG9vcCBpbiBgbmV0ZGV2X3dvcmtfcHJvY2AsIGl0IGxvY2tzIGVhY2ggbmV0IGRldmljZSBpbmRpdmlkdWFsbHkgdXNpbmcgYG5ldGRldl9sb2NrX29wc19jb21wYXQoKWAgLyBgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KClgLlxcblxcblRoaXMgaXMgYSBwdXJlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBjaGFuZ2UuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIGxvY2tpbmcgaGllcmFyY2h5LCByYWNlIGNvbmRpdGlvbnMsIG9yIGRldmljZSByZWZlcmVuY2UvbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgb3IgYnVmZmVyIGJvdW5kYXJ5IGhhbmRsaW5nLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIG1vZGVsIGluIGNvcmUgbmV0d29ya2luZydzIGRlZmVycmVkIHdvcmtxdWV1ZSBoYW5kbGluZyAobmV0L2NvcmUvbmV0ZGV2X3dvcmsuYykuIEl0IHJlbW92ZXMgdGhlIGdsb2JhbCBydG5sX2xvY2sgYXJvdW5kIHRoZSB3b3JrZXIgbG9vcCBhbmQgc3dpdGNoZXMgdG8gcGVyLWRldmljZSBuZXRkZXZfbG9ja19vcHNfY29tcGF0IGxvY2tpbmcgZHVyaW5nIGRlZmVycmVkIG5ldGRldiB3b3JrIGFuZCByeF9tb2RlIGV4ZWN1dGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIG5ldGRldiBzdGF0ZSBoYW5kbGluZyBhbmQgZHJpdmVyIGNhbGxiYWNrcyAoc3VjaCBhcyBWTEFOIGFuZCBhc3luYyByeCBtb2RlIHVwZGF0ZXMpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzc6NDkuMjk4Nzc2NDU1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDMzNzkzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZGM1YWQxNmUwOWEwYzViNmY1YTNmMWI0NzUxOGFhODFjNWU1MmQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDU6Mzc6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XFxuaW5kZXggZGI3MWQ0MjgzMDMyYS4uYWFjMzM0OTc4MTNmYSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3RcXG5AQCAtMjkyLDE1ICsyOTIsMjEgQEAgbmRvX3NldF9yeF9tb2RlOlxcbiBcXHRpbiBwcm9jZXNzIGNvbnRleHQuXFxuIFxcbiBuZG9fc2V0X3J4X21vZGVfYXN5bmM6XFxuLVxcdFN5bmNocm9uaXphdGlvbjogcnRubF9sb2NrKCkgc2VtYXBob3JlLiBJbiBhZGRpdGlvbiwgbmV0ZGV2IGluc3RhbmNlXFxuLVxcdGxvY2sgaWYgdGhlIGRyaXZlciBpbXBsZW1lbnRzIHF1ZXVlIG1hbmFnZW1lbnQgb3Igc2hhcGVyIEFQSS5cXG4rXFx0U3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXFxcIm9wcyBsb2NrZWRcXFwiIGRyaXZlcnMsXFxuK1xcdHJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuXFxuIFxcdENvbnRleHQ6IHByb2Nlc3MgKGZyb20gYSB3b3JrIHF1ZXVlKVxcbiBcXHROb3RlczogQXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzXFxuIFxcdGNvbnRleHQuIFJlY2VpdmVzIHNuYXBzaG90cyBvZiB0aGUgdW5pY2FzdCBhbmQgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMuXFxuIFxcbiBuZG9fY2hhbmdlX3J4X2ZsYWdzOlxcbi1cXHRTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4gSW4gYWRkaXRpb24sIG5ldGRldiBpbnN0YW5jZVxcbi1cXHRsb2NrIGlmIHRoZSBkcml2ZXIgaW1wbGVtZW50cyBxdWV1ZSBtYW5hZ2VtZW50IG9yIHNoYXBlciBBUEkuXFxuK1xcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFxcXCJvcHMgbG9ja2VkXFxcIiBkcml2ZXJzLFxcbitcXHRydG5sX2xvY2soKSBzZW1hcGhvcmUgZm9yIGFsbCBvdGhlciBkcml2ZXJzLlxcbitcXG4rbmRvX3dvcms6XFxuK1xcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFxcXCJvcHMgbG9ja2VkXFxcIiBkcml2ZXJzLFxcbitcXHRydG5sX2xvY2soKSBzZW1hcGhvcmUgZm9yIGFsbCBvdGhlciBkcml2ZXJzLlxcbitcXHRDb250ZXh0OiBwcm9jZXNzIChmcm9tIGEgd29yayBxdWV1ZSlcXG4rXFx0Tm90ZXM6IFJ1bnMgZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZCgpLlxcbiBcXG4gbmRvX3NldHVwX3RjOlxcbiBcXHRMb2NraW5nIGRlcGVuZHMgb24gYGB0Y19zZXR1cF90eXBlYGAuIEZvciBtb3N0IHR5cGVzIHRoZSBjYWxsYmFja1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDg0NTQ2NDZkNmE0NTQuLjE3YjhmYjhlOTRmZWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtMTEzNSwxMyArMTEzNSwxNiBAQCBzdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XFxuICAqXFx0XFx0XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxcbiAgKlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7XFxuICAqXFx0QXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzIGNvbnRleHRcXG4tICpcXHR3aXRoIHJ0bmxfbG9jayBhbmQgbmV0ZGV2X2xvY2tfb3BzKGRldikgaGVsZC4gVGhlIHVjL21jIHBhcmFtZXRlcnNcXG4rICpcXHR1bmRlciB0aGUgbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFxcXCJvcHMgbG9ja2VkXFxcIiBkcml2ZXJzLCBvclxcbisgKlxcdHJ0bmxfbG9jayBmb3IgYWxsIG90aGVyIGRyaXZlcnMuIFRoZSB1Yy9tYyBwYXJhbWV0ZXJzXFxuICAqXFx0YXJlIHNuYXBzaG90cyBvZiB0aGUgYWRkcmVzcyBsaXN0cyAtIGl0ZXJhdGUgd2l0aFxcbiAgKlxcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKS4gUmV0dXJuIDAgb24gc3VjY2VzcyBvciBhXFxuICAqXFx0bmVnYXRpdmUgZXJybm8gdG8gcmVxdWVzdCBhIHJldHJ5IHZpYSB0aGUgY29yZSBiYWNrb2ZmLlxcbiAgKlxcbiAgKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcXG4gICpcXHRSdW4gZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZChAZXZlbnRzKS5cXG4rICpcXHRSdW5zIGluIHByb2Nlc3MgY29udGV4dCB1bmRlciB0aGUgbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFxcXCJvcHNcXG4rICpcXHRsb2NrZWRcXFwiIGRyaXZlcnMsIG9yIHJ0bmxfbG9jayBmb3IgYWxsIG90aGVyIGRyaXZlcnMuXFxuICAqXFxuICAqIGludCAoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpO1xcbiAgKlxcdFRoaXMgZnVuY3Rpb24gIGlzIGNhbGxlZCB3aGVuIHRoZSBNZWRpYSBBY2Nlc3MgQ29udHJvbCBhZGRyZXNzXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldl93b3JrLmMgYi9uZXQvY29yZS9uZXRkZXZfd29yay5jXFxuaW5kZXggZTcyMWEwNmQ1OGRmMS4uYzk5OTY3OTA3ZTE4NSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9uZXRkZXZfd29yay5jXFxuKysrIGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xcbkBAIC0zLDcgKzMsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxuQEAgLTEyOSw4ICsxMjgsNiBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXFxuIFxcbiBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbi1cXHRydG5sX2xvY2soKTtcXG4tXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMCwgY29yZSA9IDA7XFxuIFxcdFxcdG5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7XFxuQEAgLTE0MywxNiArMTQwLDEwIEBAIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRcXHR9XFxuIFxcdFxcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNm5ldGRldl93b3JrX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgd29ya19ub2RlKTtcXG4tXFx0XFx0LyogVGFrZSBhIHRlbXBvcmFyeSByZWZlcmVuY2Ugc28gQGRldiBjYW4ndCBiZSBmcmVlZCB3aGlsZSB3ZVxcbi1cXHRcXHQgKiBkcm9wIHRoZSBsb2NrIHRvIGdyYWIgaXRzIG9wcyBsb2NrOyB0aGUgd29yayByZWZlcmVuY2UgaXNcXG4tXFx0XFx0ICogb25seSByZWxlYXNlZCBvbmNlIHdlIGNsYWltIHRoZSB3b3JrIGJlbG93Llxcbi1cXHRcXHQgKiBUaGUgcmUtbG9ja2luZyBkYW5jZSBpcyB0byBlbnN1cmUgdGhhdCBvcHMgbG9jayBpcyBlbm91Z2hcXG4tXFx0XFx0ICogdG8gZW5zdXJlIGNhbmNlbGluZyB3b3JrIGlzIG5vdCByYWN5IHdpdGggZGVxdWV1ZS5cXG4tXFx0XFx0ICovXFxuIFxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNnRyYWNrZXIsIEdGUF9BVE9NSUMpO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuIFxcbi1cXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG4rXFx0XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbiBcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiBcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKSkge1xcbiBcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSk7XFxuQEAgLTE2OSwxMCArMTYwLDggQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gXFxuIFxcdFxcdG5ldGRldl93b3JrX3J1bihkZXYsIGV2ZW50cywgY29yZSk7XFxuLVxcdFxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuK1xcdFxcdG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdChkZXYpO1xcbiBcXG4gXFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZ0cmFja2VyKTtcXG4gXFx0fVxcbi1cXG4tXFx0cnRubF91bmxvY2soKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozNzo0OS45NDMxNTU5MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc2MjgyNjQ3ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGRldl93b3JrX3Byb2NcIixcbiAgICBcIm5ldGRldl93b3JrX3J1blwiLFxuICAgIFwibmV0ZGV2X3dvcmtfc2NoZWRcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbFwiLFxuICAgIFwibmV0ZGV2X3dvcmtfY2FuY2VsX2FsbFwiLFxuICAgIFwiX19uZXRkZXZfd29ya19jb3JlX3NjaGVkXCIsXG4gICAgXCJfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsXCIsXG4gICAgXCJuZXRpZl9yeF9tb2RlX3J1blwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbW9kZWwgaW4gY29yZSBuZXR3b3JraW5nJ3MgZGVmZXJyZWQgd29ya3F1ZXVlIGhhbmRsaW5nIChuZXQvY29yZS9uZXRkZXZfd29yay5jKS4gSXQgcmVtb3ZlcyB0aGUgZ2xvYmFsIHJ0bmxfbG9jayBhcm91bmQgdGhlIHdvcmtlciBsb29wIGFuZCBzd2l0Y2hlcyB0byBwZXItZGV2aWNlIG5ldGRldl9sb2NrX29wc19jb21wYXQgbG9ja2luZyBkdXJpbmcgZGVmZXJyZWQgbmV0ZGV2IHdvcmsgYW5kIHJ4X21vZGUgZXhlY3V0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgbmV0ZGV2IHN0YXRlIGhhbmRsaW5nIGFuZCBkcml2ZXIgY2FsbGJhY2tzIChzdWNoIGFzIFZMQU4gYW5kIGFzeW5jIHJ4IG1vZGUgdXBkYXRlcyksIHdhcnJhbnRpbmcgZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJkYzVhZDE2ZTA5YTBjNWI2ZjVhM2YxYjQ3NTE4YWE4MWM1ZTUyZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA1OjM3OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XG5pbmRleCBkYjcxZDQyODMwMzJhLi5hYWMzMzQ5NzgxM2ZhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3RcbkBAIC0yOTIsMTUgKzI5MiwyMSBAQCBuZG9fc2V0X3J4X21vZGU6XG4gXHRpbiBwcm9jZXNzIGNvbnRleHQuXG4gXG4gbmRvX3NldF9yeF9tb2RlX2FzeW5jOlxuLVx0U3luY2hyb25pemF0aW9uOiBydG5sX2xvY2soKSBzZW1hcGhvcmUuIEluIGFkZGl0aW9uLCBuZXRkZXYgaW5zdGFuY2Vcbi1cdGxvY2sgaWYgdGhlIGRyaXZlciBpbXBsZW1lbnRzIHF1ZXVlIG1hbmFnZW1lbnQgb3Igc2hhcGVyIEFQSS5cbitcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwib3BzIGxvY2tlZFwiIGRyaXZlcnMsXG4rXHRydG5sX2xvY2soKSBzZW1hcGhvcmUgZm9yIGFsbCBvdGhlciBkcml2ZXJzLlxuIFx0Q29udGV4dDogcHJvY2VzcyAoZnJvbSBhIHdvcmsgcXVldWUpXG4gXHROb3RlczogQXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzXG4gXHRjb250ZXh0LiBSZWNlaXZlcyBzbmFwc2hvdHMgb2YgdGhlIHVuaWNhc3QgYW5kIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzLlxuIFxuIG5kb19jaGFuZ2VfcnhfZmxhZ3M6XG4tXHRTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4gSW4gYWRkaXRpb24sIG5ldGRldiBpbnN0YW5jZVxuLVx0bG9jayBpZiB0aGUgZHJpdmVyIGltcGxlbWVudHMgcXVldWUgbWFuYWdlbWVudCBvciBzaGFwZXIgQVBJLlxuK1x0U3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXCJvcHMgbG9ja2VkXCIgZHJpdmVycyxcbitcdHJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuXG4rXG4rbmRvX3dvcms6XG4rXHRTeW5jaHJvbml6YXRpb246IG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcIm9wcyBsb2NrZWRcIiBkcml2ZXJzLFxuK1x0cnRubF9sb2NrKCkgc2VtYXBob3JlIGZvciBhbGwgb3RoZXIgZHJpdmVycy5cbitcdENvbnRleHQ6IHByb2Nlc3MgKGZyb20gYSB3b3JrIHF1ZXVlKVxuK1x0Tm90ZXM6IFJ1bnMgZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZCgpLlxuIFxuIG5kb19zZXR1cF90YzpcbiBcdExvY2tpbmcgZGVwZW5kcyBvbiBgYHRjX3NldHVwX3R5cGVgYC4gRm9yIG1vc3QgdHlwZXMgdGhlIGNhbGxiYWNrXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDg0NTQ2NDZkNmE0NTQuLjE3YjhmYjhlOTRmZWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMTEzNSwxMyArMTEzNSwxNiBAQCBzdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XG4gICpcdFx0XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcbiAgKlx0XHRcdFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKTtcbiAgKlx0QXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzIGNvbnRleHRcbi0gKlx0d2l0aCBydG5sX2xvY2sgYW5kIG5ldGRldl9sb2NrX29wcyhkZXYpIGhlbGQuIFRoZSB1Yy9tYyBwYXJhbWV0ZXJzXG4rICpcdHVuZGVyIHRoZSBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXCJvcHMgbG9ja2VkXCIgZHJpdmVycywgb3JcbisgKlx0cnRubF9sb2NrIGZvciBhbGwgb3RoZXIgZHJpdmVycy4gVGhlIHVjL21jIHBhcmFtZXRlcnNcbiAgKlx0YXJlIHNuYXBzaG90cyBvZiB0aGUgYWRkcmVzcyBsaXN0cyAtIGl0ZXJhdGUgd2l0aFxuICAqXHRuZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YykuIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgYVxuICAqXHRuZWdhdGl2ZSBlcnJubyB0byByZXF1ZXN0IGEgcmV0cnkgdmlhIHRoZSBjb3JlIGJhY2tvZmYuXG4gICpcbiAgKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcbiAgKlx0UnVuIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoQGV2ZW50cykuXG4rICpcdFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0IHVuZGVyIHRoZSBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXCJvcHNcbisgKlx0bG9ja2VkXCIgZHJpdmVycywgb3IgcnRubF9sb2NrIGZvciBhbGwgb3RoZXIgZHJpdmVycy5cbiAgKlxuICAqIGludCAoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpO1xuICAqXHRUaGlzIGZ1bmN0aW9uICBpcyBjYWxsZWQgd2hlbiB0aGUgTWVkaWEgQWNjZXNzIENvbnRyb2wgYWRkcmVzc1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldl93b3JrLmMgYi9uZXQvY29yZS9uZXRkZXZfd29yay5jXG5pbmRleCBlNzIxYTA2ZDU4ZGYxLi5jOTk5Njc5MDdlMTg1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xuKysrIGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xuQEAgLTMsNyArMyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2VcbkBAIC0xMjksOCArMTI4LDYgQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxuIFxuIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdHJ0bmxfbG9jaygpO1xuLVxuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBldmVudHMgPSAwLCBjb3JlID0gMDtcbiBcdFx0bmV0ZGV2aWNlX3RyYWNrZXIgdHJhY2tlcjtcbkBAIC0xNDMsMTYgKzE0MCwxMCBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0fVxuIFx0XHRkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNm5ldGRldl93b3JrX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLFxuIFx0XHRcdFx0ICAgICAgIHdvcmtfbm9kZSk7XG4tXHRcdC8qIFRha2UgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHNvIEBkZXYgY2FuJ3QgYmUgZnJlZWQgd2hpbGUgd2Vcbi1cdFx0ICogZHJvcCB0aGUgbG9jayB0byBncmFiIGl0cyBvcHMgbG9jazsgdGhlIHdvcmsgcmVmZXJlbmNlIGlzXG4tXHRcdCAqIG9ubHkgcmVsZWFzZWQgb25jZSB3ZSBjbGFpbSB0aGUgd29yayBiZWxvdy5cbi1cdFx0ICogVGhlIHJlLWxvY2tpbmcgZGFuY2UgaXMgdG8gZW5zdXJlIHRoYXQgb3BzIGxvY2sgaXMgZW5vdWdoXG4tXHRcdCAqIHRvIGVuc3VyZSBjYW5jZWxpbmcgd29yayBpcyBub3QgcmFjeSB3aXRoIGRlcXVldWUuXG4tXHRcdCAqL1xuIFx0XHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNnRyYWNrZXIsIEdGUF9BVE9NSUMpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiBcbi1cdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4rXHRcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIFx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkpIHtcbiBcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpO1xuQEAgLTE2OSwxMCArMTYwLDggQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIFxuIFx0XHRuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpO1xuLVx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuK1x0XHRuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTtcbiBcbiBcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnRyYWNrZXIpO1xuIFx0fVxuLVxuLVx0cnRubF91bmxvY2soKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozNzo0OS45NDMxNTg4NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzIyMjExMTY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uOiBTeXprYWxsZXIgRnV6emluZyBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGJlaW5nIGFza2VkIHRvIGV2YWx1YXRlIGEgTGludXgga2VybmVsIHBhdGNoIHJlbGF0ZWQgdG8gc3l6a2FsbGVyIGZ1enppbmcuIFJpZ2h0IGF3YXksIEkgbmVlZCB0byBmcmFtZSB0aGlzIHdpdGhpbiByaXNrIGFuYWx5c2lzIGFuZCB1bmRlcnN0YW5kIHRoZSByZXF1ZXN0LiBJdCdzIGEga2VybmVsIHBhdGNoIHRyaWFnZSBzcGVjaWZpY2FsbHkgZm9yIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoaXMgaXMgYSBkZWZlbnNpdmUsIHF1YWxpdHkgYXNzdXJhbmNlIGFjdGl2aXR5LiBQdXJlbHkgYmVuaWduLCBzbyB3ZSBjYW4gcmVsYXggYSBsaXR0bGUgaGVyZSwgYXQgbGVhc3QgaW5pdGlhbGx5LlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gVGhlIGZpbGVzIG1vZGlmaWVkIGdpdmUgdXMgdGhlIGZpcnN0IGNsdWVzOiBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0YCwgYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgLCBhbmQsIHNpZ25pZmljYW50bHksIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gTXkgc3BpZGV5LXNlbnNlIHRpbmdsZXMgc2xpZ2h0bHkgd2hlbiBJIHNlZSBjaGFuZ2VzIGluIGNvcmUgbmV0d29ya2luZyBjb2RlLlxuXG5JIHdhbnQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2Agc3BlY2lmaWNhbGx5LiBNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IGBuZXRkZXZfd29ya19wcm9jYCBhbmQgYG5ldGRldl9sb2NrX29wc19jb21wYXRgIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IGNvbnRleHQsIGFuZCBob3cgYG5ldGRldl93b3JrX3NjaGVkYCBpcyB1c2VkLiBJJ2xsIHByb2JhYmx5IHJ1biBzb21lIHF1aWNrIGBncmVwYCBjb21tYW5kcyBvciBkaWcgYXJvdW5kIHdpdGggbXkgZmlsZS1yZWFkaW5nIHRvb2xzIGluIHRoYXQgZmlsZSBhbmQgYWxzbyBsb29rIGF0IGBuZXQvbmV0ZGV2X2xvY2suaGAsIGFuZCBnZXQgYSBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGhlbiBJIGNhbiBnZXQgYSBmZWVsIGZvciB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjAzLjE2NTI3Mzk1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRkZXZfd29yay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHRcXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4gICA5OlxcdFxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcImRldi5oXFxcIlxcbiAgMTE6XFx0XFxuICAxMjpcXHRzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuICAxMzpcXHRcXG4gIDE0OlxcdC8qIEBuZXRkZXZfd29ya19sb2NrIHByb3RlY3RzOlxcbiAgMTU6XFx0ICogIC0gQG5ldGRldl93b3JrX2xpc3RcXG4gIDE2OlxcdCAqICAtIHdpdGhpbiB0aGUgbGlzdCBlbnRyaWVzIChzdHJ1Y3QgbmV0X2RldmljZSBmaWVsZHMpOlxcbiAgMTc6XFx0ICpcXHQtIHdvcmtfbm9kZVxcbiAgMTg6XFx0ICpcXHQtIHdvcmtfdHJhY2tlclxcbiAgMTk6XFx0ICpcXHQtIHdvcmtfcGVuZGluZ1xcbiAgMjA6XFx0ICpcXHQtIHdvcmtfY29yZV9wZW5kaW5nXFxuICAyMTpcXHQgKi9cXG4gIDIyOlxcdHN0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3dvcmtfbGlzdCk7XFxuICAyMzpcXHRzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ldGRldl93b3JrX2xvY2spO1xcbiAgMjQ6XFx0c3RhdGljIERFQ0xBUkVfV09SSyhuZXRkZXZfd29yaywgbmV0ZGV2X3dvcmtfcHJvYyk7XFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXFxuICAyNzpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGNvcmUpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRpZiAoIWV2ZW50cyBcXHUwMDI2XFx1MDAyNiAhY29yZSlcXG4gIDMwOlxcdFxcdFxcdHJldHVybjtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gIDMzOlxcdFxcdGlmICghZGV2X2lzYWxpdmUoZGV2KSkge1xcbiAgMzQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAgMzU6XFx0XFx0XFx0cmV0dXJuO1xcbiAgMzY6XFx0XFx0fVxcbiAgMzc6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKSkge1xcbiAgMzg6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUsIFxcdTAwMjZuZXRkZXZfd29ya19saXN0KTtcXG4gIDM5OlxcdFxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4gIDQwOlxcdFxcdH1cXG4gIDQxOlxcdFxcdGRldi1cXHUwMDNld29ya19wZW5kaW5nIHw9IGV2ZW50cztcXG4gIDQyOlxcdFxcdGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcgfD0gY29yZTtcXG4gIDQzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bmV0ZGV2X3dvcmspO1xcbiAgNDY6XFx0fVxcbiAgNDc6XFx0XFxuICA0ODpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZ1xcbiAgNDk6XFx0bmV0ZGV2X3dvcmtfZGVxdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nICpwZW5kaW5nLFxcbiAgNTA6XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbWFzaylcXG4gIDUxOlxcdHtcXG4gIDUyOlxcdFxcdHVuc2lnbmVkIGxvbmcgZXZlbnRzO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAgNTU6XFx0XFx0ZXZlbnRzID0gKnBlbmRpbmcgXFx1MDAyNiBtYXNrO1xcbiAgNTY6XFx0XFx0KnBlbmRpbmcgXFx1MDAyNj0gfmV2ZW50cztcXG4gIDU3OlxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpIFxcdTAwMjZcXHUwMDI2XFxuICA1ODpcXHRcXHQgICAgIWRldi1cXHUwMDNld29ya19wZW5kaW5nIFxcdTAwMjZcXHUwMDI2ICFkZXYtXFx1MDAzZXdvcmtfY29yZV9wZW5kaW5nKSB7XFxuICA1OTpcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSk7XFxuICA2MDpcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyKTtcXG4gIDYxOlxcdFxcdH1cXG4gIDYyOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0cmV0dXJuIGV2ZW50cztcXG4gIDY1OlxcdH1cXG4gIDY2OlxcdFxcbiAgNjc6XFx0dm9pZCBuZXRkZXZfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA2ODpcXHR7XFxuICA2OTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAgNzA6XFx0XFx0ZGV2LVxcdTAwM2V3b3JrX3BlbmRpbmcgPSAwO1xcbiAgNzE6XFx0XFx0ZGV2LVxcdTAwM2V3b3JrX2NvcmVfcGVuZGluZyA9IDA7XFxuICA3MjpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKSkge1xcbiAgNzM6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpO1xcbiAgNzQ6XFx0XFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfdHJhY2tlcik7XFxuICA3NTpcXHRcXHR9XFxuICA3NjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuICA3NzpcXHR9XFxuICA3ODpcXHRcXG4gIDc5OlxcdHZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgZXZlbnRzLCAwKTtcXG4gIDgyOlxcdH1cXG4gIDgzOlxcdEVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xcbiAgODQ6XFx0XFxuICA4NTpcXHQvKipcXG4gIDg2OlxcdCAqIG5ldGRldl93b3JrX2NhbmNlbCgpIC0gY2FuY2VsIHNlbGVjdGVkIHdvcmsgZm9yIGEgbmV0ZGV2XFxuICA4NzpcXHQgKiBAZGV2OiBuZXRfZGV2aWNlXFxuICA4ODpcXHQgKiBAbWFzazogZXZlbnRzIHRvIGNhbmNlbFxcbiAgODk6XFx0ICpcXG4gIDkwOlxcdCAqIENsZWFyIEBtYXNrIGZyb20gdGhlIGRldmljZSdzIHdvcmsgcGVuZGluZyBtYXNrLiBJZiBubyB3b3JrIGlzIGxlZnQgcGVuZGluZ1xcbiAgOTE6XFx0ICogdGhlIGRldmljZSBpcyBkZXF1ZXVlZCBhbmQgaXRzIG5kb193b3JrIHdvbid0IGJlIGNhbGxlZC5cXG4gIDkyOlxcdCAqXFxuICA5MzpcXHQgKiBObyBleHBlY3RhdGlvbnMgb24gbG9ja2luZywgYnV0IGFsc28gbm8gZ3VhcmFudGVlcyBwcm92aWRlZC4gSWYgdGhlIGNhbGxlclxcbiAgOTQ6XFx0ICogd2FudHMgdG8gdG91Y2ggQGRldiBhZnRlcndhcmRzIChlLmcuIGNhbGwgdGhlIHdvcmsgdGhhdCBnb3QgY2FuY2VsZWQpXFxuICA5NTpcXHQgKiB0aGV5IGhhdmUgdG8gZW5zdXJlIEBkZXYgZG9lcyBub3QgZ2V0IGZyZWVkLlxcbiAgOTY6XFx0ICpcXG4gIDk3OlxcdCAqIFJldHVybnM6IHRoZSBzdWJzZXQgb2YgQG1hc2sgdGhhdCB3YXMgYWN0dWFsbHkgcGVuZGluZywgc28gdGhlIGNhbGxlciBjYW4gcnVuXFxuICA5ODpcXHQgKiB0aG9zZSBldmVudHMgaW5saW5lLlxcbiAgOTk6XFx0ICovXFxuIDEwMDpcXHR1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjAzLjE2NTM5MzQzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NjY1NDM0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGludmVzdGlnYXRpb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIE5ldHdvcmsgRGV2aWNlIFdvcmtxdWV1ZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdHRlbiBhIGdvb2QgaGFuZGxlIG9uIHNvbWUgb2YgdGhlIGNvcmUgY29uY2VwdHMsIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbi4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIG5ldHdvcmsgZGV2aWNlIHdvcmtxdWV1ZXMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGltbWVyc2UgbXlzZWxmIGluIHRoZSBjb2RlIGFuZCBob3cgdGhlIGxvY2tzIGludGVyYWN0IHdpdGggdGhlbS4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gVGhpcyB3aWxsIHNob3cgbWUgaG93IHdvcmsgaXMgcXVldWVkLCBleGVjdXRlZCwgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgZGV2aWNlcy4gQ3J1Y2lhbGx5LCBJJ20gYWxzbyBnb2luZyB0byBleGFtaW5lIGBpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oYC4gSSAqa25vdyogbG9ja3MgYXJlIGNyaXRpY2FsIGZvciB0aGlzIHNvcnQgb2YgY29uY3VycmVudCBhY2Nlc3MsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBsb2NrIG1lY2hhbmlzbXMgdXNlZCwgaG93IHRoZXkncmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkLCBhbmQgdGhlaXIgc3BlY2lmaWMgYmVoYXZpb3IgcmVsYXRlZCB0byB3b3JrcXVldWUgY29udGV4dCBpcyBwYXJhbW91bnQgdG8gdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBjb25jdXJyZW5jeSBib3R0bGVuZWNrcy4gSSdtIGhvcGluZyB0aGlzIHdpbGwgaWxsdW1pbmF0ZSBob3cgdGhlIHdvcmtxdWV1ZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgaWRlbnRpZnkgYXJlYXMgd2hlcmUgY29udGVudGlvbiBtaWdodCBhcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA1NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzg6MDUuNzMxOTM5NzMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldGRldl93b3JrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdHtcXG4gMTAyOlxcdFxcdHJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya19wZW5kaW5nLCBtYXNrKTtcXG4gMTAzOlxcdH1cXG4gMTA0OlxcdEVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfY2FuY2VsKTtcXG4gMTA1OlxcdFxcbiAxMDY6XFx0dm9pZCBfX25ldGRldl93b3JrX2NvcmVfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXFxuIDEwNzpcXHR7XFxuIDEwODpcXHRcXHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgMCwgZXZlbnRzKTtcXG4gMTA5OlxcdH1cXG4gMTEwOlxcdFxcbiAxMTE6XFx0dW5zaWduZWQgbG9uZ1xcbiAxMTI6XFx0X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXFxuIDExMzpcXHR7XFxuIDExNDpcXHRcXHRyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsIFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfY29yZV9wZW5kaW5nLCBtYXNrKTtcXG4gMTE1OlxcdH1cXG4gMTE2OlxcdFxcbiAxMTc6XFx0c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxcbiAxMTg6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgY29yZSlcXG4gMTE5OlxcdHtcXG4gMTIwOlxcdFxcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4gMTIxOlxcdFxcdFxcdHJldHVybjtcXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0aWYgKGNvcmUgXFx1MDAyNiBORVRERVZfV09SS19SWF9NT0RFKVxcbiAxMjQ6XFx0XFx0XFx0bmV0aWZfcnhfbW9kZV9ydW4oZGV2KTtcXG4gMTI1OlxcdFxcdGlmIChldmVudHMgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fd29yaylcXG4gMTI2OlxcdFxcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3dvcmsoZGV2LCBldmVudHMpO1xcbiAxMjc6XFx0fVxcbiAxMjg6XFx0XFxuIDEyOTpcXHRzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gMTMwOlxcdHtcXG4gMTMxOlxcdFxcdHdoaWxlICh0cnVlKSB7XFxuIDEzMjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDAsIGNvcmUgPSAwO1xcbiAxMzM6XFx0XFx0XFx0bmV0ZGV2aWNlX3RyYWNrZXIgdHJhY2tlcjtcXG4gMTM0OlxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuIDEzNzpcXHRcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCkpIHtcXG4gMTM4OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gMTM5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDA6XFx0XFx0XFx0fVxcbiAxNDE6XFx0XFx0XFx0ZGV2ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsXFxuIDE0MjpcXHRcXHRcXHRcXHRcXHQgICAgICAgd29ya19ub2RlKTtcXG4gMTQzOlxcdFxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNnRyYWNrZXIsIEdGUF9BVE9NSUMpO1xcbiAxNDQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAxNDU6XFx0XFxuIDE0NjpcXHRcXHRcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxuIDE0NzpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAxNDg6XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSkpIHtcXG4gMTQ5OlxcdFxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKTtcXG4gMTUwOlxcdFxcdFxcdFxcdGNvcmUgPSBkZXYtXFx1MDAzZXdvcmtfY29yZV9wZW5kaW5nO1xcbiAxNTE6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2V3b3JrX2NvcmVfcGVuZGluZyA9IDA7XFxuIDE1MjpcXHRcXHRcXHRcXHRldmVudHMgPSBkZXYtXFx1MDAzZXdvcmtfcGVuZGluZztcXG4gMTUzOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNld29ya19wZW5kaW5nID0gMDtcXG4gMTU0OlxcdFxcdFxcdFxcdC8qIFdlIHRvb2sgYW5vdGhlciByZWYgYWJvdmUgKi9cXG4gMTU1OlxcdFxcdFxcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX3RyYWNrZXIpO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHRcXHRcXHRpZiAoIWRldl9pc2FsaXZlKGRldikpXFxuIDE1ODpcXHRcXHRcXHRcXHRcXHRjb3JlID0gZXZlbnRzID0gMDtcXG4gMTU5OlxcdFxcdFxcdH1cXG4gMTYwOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gMTYxOlxcdFxcbiAxNjI6XFx0XFx0XFx0bmV0ZGV2X3dvcmtfcnVuKGRldiwgZXZlbnRzLCBjb3JlKTtcXG4gMTYzOlxcdFxcdFxcdG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdChkZXYpO1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnRyYWNrZXIpO1xcbiAxNjY6XFx0XFx0fVxcbiAxNjc6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozODowNS43MzIwNzI3ODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI4OTkxOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCB1c2VyOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBLbm93aW5nIHRoZSBrZXJuZWwncyBzdHJ1Y3R1cmUsIGBpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oYCBpcyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LCBvciB3aGVyZXZlciBpdCdzIGFjdHVhbGx5IGRlZmluZWQsIEknbGwgdHJhY2sgaXQgZG93bi4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBrZXkgYXNwZWN0IG9mIGhvdyBuZXR3b3JrIGRldmljZSBsb2NraW5nIGlzIGhhbmRsZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgYmVoYXZpb3IgdG8gZWZmZWN0aXZlbHkgZGlhZ25vc2Ugb3IgbW9kaWZ5IGFueXRoaW5nIHJlbGF0ZWQgdG8gZGV2aWNlIGludGVyYWN0aW9ucy4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjA3LjY2MTA2ODMwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzUyMDk3NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGRldl9sb2NrX29wc19jb21wYXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD04Mz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTg4LVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6ODk6c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTkwLXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExMDE9X19uZXRkZXZfcHV0X2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2NvcmUvZGV2LmMtMTEwMi17XFxubmV0L2NvcmUvZGV2LmM6MTEwMzpcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTEwNC1cXHRpZiAoZGV2LVxcdTAwM2VyZWdfc3RhdGUgXFx1MDAzZSBORVRSRUdfUkVHSVNURVJFRCB8fFxcbi0tXFxubmV0L2NvcmUvZGV2Lmg9NjA9REVGSU5FX0ZSRUUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0LCBzdHJ1Y3QgbmV0X2RldmljZSAqLFxcbi0tXFxubmV0L2NvcmUvZGV2LmgtNjItXFxubmV0L2NvcmUvZGV2Lmg6NjM6I2RlZmluZSBmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIHZhcl9uYW1lLCBpZmluZGV4KVxcdFxcXFxcXG5uZXQvY29yZS9kZXYuaC02NC1cXHRmb3IgKHN0cnVjdCBuZXRfZGV2aWNlICp2YXJfbmFtZSBfX2ZyZWUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KSA9IE5VTEw7IFxcXFxcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9NjE4PWludCBuZXRkZXZfbmxfcXVldWVfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTYzOC1cXHR9IGVsc2Uge1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6NjM5OlxcdFxcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgbmV0ZGV2LFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNjQwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9OTAxPWludCBuZXRkZXZfbmxfcXN0YXRzX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtOTM4LVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6OTM5OlxcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgbmV0ZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTk0MC1cXHRcXHRlcnIgPSBuZXRkZXZfbmxfcXN0YXRzX2dldF9kdW1wX29uZShuZXRkZXYsIHNjb3BlLCBza2IsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTEyOT1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTQ1LVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTQ2OlxcdFxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0Ny1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbi0tXFxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM9NTg9aW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYy03NS1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYzo3NjpcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtNzctXFx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYoXFx1MDAyNnJlcV9pbmZvLCB0YixcXG4tLVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jPTMxOT1pbnQgZXRobmxfYWN0X2NhYmxlX3Rlc3RfdGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYy0zNDItXFxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM6MzQzOlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYy0zNDQtXFx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYoXFx1MDAyNnJlcV9pbmZvLCB0YixcXG4tLVxcbm5ldC9ldGh0b29sL21vZHVsZS5jPTQxNz1pbnQgZXRobmxfYWN0X21vZHVsZV9md19mbGFzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtNDMxLVxcbm5ldC9ldGh0b29sL21vZHVsZS5jOjQzMjpcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtNDMzLVxcdHJldCA9IGV0aG5sX29wc19iZWdpbihkZXYpO1xcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmM9NDY4PWludCBldGhubF9yc3NfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jLTQ3My1cXG5uZXQvZXRodG9vbC9yc3MuYzo0NzQ6XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9ldGh0b29sL3Jzcy5jLTQ3NS1cXHRcXHRpZiAoY3R4LVxcdTAwM2VtYXRjaF9pZmluZGV4IFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlbWF0Y2hfaWZpbmRleCAhPSBjdHgtXFx1MDAzZWlmaW5kZXgpXFxuLS1cXG5uZXQvZXRodG9vbC9yc3MuYz0xMDAyPWludCBldGhubF9yc3NfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jLTEwMzYtXFxubmV0L2V0aHRvb2wvcnNzLmM6MTAzNzpcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2V0aHRvb2wvcnNzLmMtMTAzOC1cXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jPTExNTA9aW50IGV0aG5sX3Jzc19kZWxldGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmMtMTE3Ny1cXG5uZXQvZXRodG9vbC9yc3MuYzoxMTc4OlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9yc3MuYy0xMTc5LVxcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmM9NDczPWludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4MS1cXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODI6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4My1cXHRcXHRyZXQgPSBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0X3RvcG8oc2tiLCBkZXYsIGNiKTtcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4Ny1cXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODg6XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cXHUwMDNlcG9zX2lmaW5kZXgpIHtcXG5uZXQvZXRodG9vbC90c2luZm8uYy00ODktXFx0XFx0cmV0ID0gZXRobmxfdHNpbmZvX2R1bXBfb25lX25ldF90b3BvKHNrYiwgZGV2LCBjYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjEyLjAxMzE3MjgwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NDY0NTIwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldCBEZXZpY2UgTG9ja2luZyBNZWNoYW5pc20qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiBuZXQgZGV2aWNlIGxvY2tpbmcuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmhgLCBzcGVjaWZpY2FsbHkgbGluZXMgODAgdGhyb3VnaCAxMjAuIEkgd2FudCB0byBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlIGNvcmUgbG9ja2luZyBwcmltaXRpdmVzLiBBcmUgdGhleSB1c2luZyBzcGlubG9ja3MsIG11dGV4ZXMsIFJDVSwgb3IgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgYXBwcm9hY2g/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgY29udGV4dDsgd2hhdCBhcmUgdGhleSBwcm90ZWN0aW5nLCBhbmQgaG93IGlzIHRoZSBsb2NraW5nIHN0cmF0ZWd5IGRlc2lnbmVkIHRvIGludGVyYWN0IHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IEkgYW50aWNpcGF0ZSBhIGNvbWJpbmF0aW9uIG9mIHRlY2huaXF1ZXMsIGRlcGVuZGluZyBvbiB0aGUgZnJlcXVlbmN5IG9mIGFjY2VzcyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgY29udGVudGlvbi4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGNvbW1lbnRzIGFyZSBoZWxwZnVsIGluIGNsYXJpZnlpbmcgdGhlIGludGVudC4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBiZWhpbmQgdGhpcyBjcnVjaWFsIGxvY2tpbmcgc2V0dXAuIEhvcGVmdWxseSwgdGhlIGNvZGUgY29tbWVudHMgb2ZmZXIgc29tZSBpbnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzg6MTQuOTU5NjI5Nzk3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcXG4gIDgxOlxcdH1cXG4gIDgyOlxcdFxcbiAgODM6XFx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9hc3NlcnRfbG9ja2VkX29wcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgODQ6XFx0e1xcbiAgODU6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuICA4NjpcXHRcXHRcXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChkZXYpO1xcbiAgODc6XFx0fVxcbiAgODg6XFx0XFxuICA4OTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgOTA6XFx0e1xcbiAgOTE6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuICA5MjpcXHRcXHRcXHRuZXRkZXZfbG9jayhkZXYpO1xcbiAgOTM6XFx0XFx0ZWxzZVxcbiAgOTQ6XFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gIDk4OlxcdHtcXG4gIDk5OlxcdFxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbiAxMDA6XFx0XFx0XFx0bmV0ZGV2X3VubG9jayhkZXYpO1xcbiAxMDE6XFx0XFx0ZWxzZVxcbiAxMDI6XFx0XFx0XFx0cnRubF91bmxvY2soKTtcXG4gMTAzOlxcdH1cXG4gMTA0OlxcdFxcbiAxMDU6XFx0LyogTWF0Y2hpbmcgXFxcIm9wcyBwcm90ZWN0ZWRcXFwiIGNhdGVnb3J5IGZyb20gbmV0ZGV2aWNlLmggKi9cXG4gMTA2OlxcdHN0YXRpYyBpbmxpbmUgaW50IG5ldGRldl9pc19sb2NrZWRfb3BzX2NvbXBhdChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAxMDc6XFx0e1xcbiAxMDg6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuIDEwOTpcXHRcXHRcXHRyZXR1cm4gbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbiAxMTA6XFx0XFx0cmV0dXJuIGxvY2tkZXBfcnRubF9pc19oZWxkKCk7XFxuIDExMTpcXHR9XFxuIDExMjpcXHRcXG4gMTEzOlxcdHN0YXRpYyBpbmxpbmUgaW50IG5ldGRldl9sb2NrX2NtcF9mbihjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmEsXFxuIDExNDpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqYilcXG4gMTE1OlxcdHtcXG4gMTE2OlxcdFxcdGlmIChhID09IGIpXFxuIDExNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0LyogQWxsb3cgbG9ja2luZyBtdWx0aXBsZSBkZXZpY2VzIG9ubHkgdW5kZXIgcnRubF9sb2NrLFxcbiAxMjA6XFx0XFx0ICogdGhlIGV4YWN0IG9yZGVyIGRvZXNuJ3QgbWF0dGVyLlxcbiAxMjE6XFx0XFx0ICogTm90ZSB0aGF0IHVwcGVyIGRldmljZXMgZG9uJ3QgbG9jayB0aGVpciBvcHMsIHNvIG5lc3RpbmdcXG4gMTIyOlxcdFxcdCAqIG1vc3RseSBoYXBwZW5zIGluIGJhdGNoZWQgZGV2aWNlIHJlbW92YWwgZm9yIG5vdy5cXG4gMTIzOlxcdFxcdCAqL1xcbiAxMjQ6XFx0XFx0cmV0dXJuIGxvY2tkZXBfcnRubF9pc19oZWxkKCkgPyAtMSA6IDE7XFxuIDEyNTpcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdCNkZWZpbmUgbmV0ZGV2X2xvY2tkZXBfc2V0X2NsYXNzZXMoZGV2KVxcdFxcdFxcdFxcdFxcXFxcXG4gMTI4OlxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDEyOTpcXHRcXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHFkaXNjX3R4X2J1c3lsb2NrX2tleTtcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjE0Ljk1OTczODM5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDMxMTU4MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9ja2luZyBDaGFuZ2VzIGluIGBuZXRkZXZfd29ya19wcm9jYCoqXG5cbk9rYXksIHNvIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaGVyZSBpcyB0aGUgbG9ja2luZyBzdHJhdGVneSBpbiBgbmV0ZGV2X3dvcmtfcHJvY2Agd2l0aGluIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIHdhcyBwcmV0dHkgYmx1bnQ6IGl0IHdhcyBob2xkaW5nIHRoZSBgcnRubF9sb2NrKClgICp1bmNvbmRpdGlvbmFsbHkqIGZvciB0aGUgZW50aXJlIGxvb3AgdGhhdCBwcm9jZXNzZXMgbmV0d29yayBkZXZpY2VzLCBhbmQgb24gdG9wIG9mIHRoYXQsIGl0IHdhcyBhbHNvIGFjcXVpcmluZyB0aGUgZGV2aWNlLXNwZWNpZmljIGxvY2ssIGBuZXRkZXZfbG9ja19vcHMoZGV2KWAuIFRoYXQncyBhIHNlcmlvdXMgcG90ZW50aWFsIGJvdHRsZW5lY2ssIGVzcGVjaWFsbHkgaW4gaGlnaC1jb25jdXJyZW5jeSBzY2VuYXJpb3MuXG5cbk5vdywgdGhpbmdzIGFyZSBzaWduaWZpY2FudGx5IGRpZmZlcmVudC4gVGhlIGBydG5sX2xvY2soKWAgaXMgKmNvbXBsZXRlbHkqIHJlbW92ZWQgZnJvbSB0aGUgb3V0ZXIgbG9vcC4gSW5zdGVhZCwgdGhlIGxvY2tpbmcgaXMgbm93IGhhbmRsZWQgcGVyLWRldmljZS4gSW5zaWRlIHRoZSBsb29wLCB0aGUgcGF0Y2ggbm93IHVzZXMgYG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtgLiBUaGlzIGNsZXZlciBmdW5jdGlvbiBhY3F1aXJlcyBlaXRoZXIgYGRldi1cdTAwM2Vsb2NrYCAqaWYqIHRoZSBkZXZpY2UgYWN0dWFsbHkgKm5lZWRzKiB0aGF0IGxvY2sgKGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCkgb3IsIGlmIHRoZSBkZXZpY2UgZG9lc24ndCByZXF1aXJlIGl0LCBmYWxscyBiYWNrIHRvIHVzaW5nIGBydG5sX2xvY2soKWAuIEFmdGVyIGVhY2ggZGV2aWNlJ3Mgd29yayBpcyBjb21wbGV0ZWQsIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTtgIGlzIHVzZWQuXG5cblRoaXMgaXMgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBsb2NraW5nIHNlbWFudGljcy4gQmVmb3JlLCByZWdhcmRsZXNzIG9mIHRoZSBkZXZpY2UncyBzcGVjaWZpYyBuZWVkcywgZXZlcnkgY2FsbCB0byBgbmV0ZGV2X3dvcmtfcnVuKGRldiwgZXZlbnRzLCBjb3JlKWAg4oCTIGluY2x1ZGluZyB0aG9zZSB0byBgbmV0aWZfcnhfbW9kZV9ydW4oZGV2KWAgYW5kIGBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fd29yayhkZXYsIGV2ZW50cylgIOKAkyB3YXMgZXhlY3V0ZWQgKnVuZGVyKiBgcnRubF9sb2NrKClgLiBOb3csIGl0J3Mgbm90LlxuXG5Ob3csIGNydWNpYWwgYml0cywgZHJpdmVycyB0aGF0IGltcGxlbWVudCBxdWV1ZSBtYW5hZ2VtZW50IG9yIHNoYXBlciBBUElzIGFyZSBydW5uaW5nIGZ1bmN0aW9ucyBsaWtlIGBuZG9fd29ya2AgYW5kIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgICh3aGljaCBpcyBjYWxsZWQgdGhyb3VnaCBgbmV0aWZfcnhfbW9kZV9ydW5gKSAqd2l0aG91dCogYHJ0bmxfbG9jaygpYCBiZWluZyBoZWxkLiBUaGV5J3JlIG9ubHkgdXNpbmcgdGhlIGRldmljZSdzIG93biBgZGV2LVx1MDAzZWxvY2tgISBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHBlcmZvcm1hbmNlIGJlbmVmaXQgc2hvdWxkIHN1cmZhY2UuIFdlJ3ZlIGVmZmVjdGl2ZWx5IHJlcGxhY2VkIGEgZ2xvYmFsIGxvY2sgd2l0aCBwZXItZGV2aWNlIGxvY2tzIGluIG1hbnkgY2FzZXMuXG5cbk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBzZWUgKndobyogaXMgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIGBuZXRkZXZfd29ya19zY2hlZGAsIGBfX25ldGRldl93b3JrX2NvcmVfc2NoZWRgLCBhbmQgZXNwZWNpYWxseSB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHNldHRpbmcgdGhlIHJlY2VpdmUgbW9kZSwgYXMgd2VsbCBhcyBgbmRvX3dvcmtgLCBhbmQgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AgdGhlbXNlbHZlcy4gSSBuZWVkIHRvIHNlYXJjaCBmb3IgdGhvc2UgZXhhY3QgZnVuY3Rpb24gbmFtZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjQ1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzg6MTguOTkwOTAwOTQ0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc1NzU3MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5kb193b3JrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0zMDE9bmRvX2NoYW5nZV9yeF9mbGFnczpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zMDQtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjMwNTpuZG9fd29yazpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMzA2LVxcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFxcXCJvcHMgbG9ja2VkXFxcIiBkcml2ZXJzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmM9MzQ4OT1zdGF0aWMgaW50IHNtb2tlX3N1Ym1pdChzdHJ1Y3QgcHJlZW1wdF9zbW9rZSAqc21va2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYy0zNTM1LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jOjM1MzY6c3RhdGljIHZvaWQgc21va2VfY3Jlc2NlbmRvX3dvcmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYy0zNTM3LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jPTM1NTc9c3RhdGljIGludCBzbW9rZV9jcmVzY2VuZG8oc3RydWN0IHByZWVtcHRfc21va2UgKnNtb2tlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYy0zNTg1LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jOjM1ODY6XFx0XFx0a3RocmVhZF9pbml0X3dvcmsoXFx1MDAyNmFyZ1tpZF0ud29yaywgc21va2VfY3Jlc2NlbmRvX3dvcmspO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jLTM1ODctXFx0XFx0a3RocmVhZF9xdWV1ZV93b3JrKHdvcmtlcltpZF0sIFxcdTAwMjZhcmdbaWRdLndvcmspO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDcxPXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTE0My0gKlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTE0NDogKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExNDUtICpcXHRSdW4gZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZChAZXZlbnRzKS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTQ1OD1zdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xNDc3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNDc4OlxcdHZvaWRcXHRcXHRcXHQoKm5kb193b3JrKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTQ3OS1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBldmVudHMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xODIxPWVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE5NTQtICpcXHRAd29ya19wZW5kaW5nOlxcdFxcdERyaXZlci1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmssIHBhc3NlZCB0b1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTk1NTogKlxcdFxcdFxcdFxcdG5kb193b3JrKCkgKHNlZSBuZXRkZXZfd29ya19zY2hlZCgpKVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk1Ni0gKlxcdEB3b3JrX2NvcmVfcGVuZGluZzpcXHRDb3JlLWRlZmluZWQgcGVuZGluZyBuZXRkZXZfd29yayAoTkVUREVWX1dPUktfKilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDYzLVxcdC5uZG9fY2hhbmdlX3J4X2ZsYWdzXFx0PSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTA2NDpcXHQubmRvX3dvcmtcXHRcXHQ9IHZsYW5fZGV2X3dvcmssXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTA2NS1cXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gdmxhbl9kZXZfaW9jdGwsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTgzPUVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy05MC0gKiBDbGVhciBAbWFzayBmcm9tIHRoZSBkZXZpY2UncyB3b3JrIHBlbmRpbmcgbWFzay4gSWYgbm8gd29yayBpcyBsZWZ0IHBlbmRpbmdcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjkxOiAqIHRoZSBkZXZpY2UgaXMgZGVxdWV1ZWQgYW5kIGl0cyBuZG9fd29yayB3b24ndCBiZSBjYWxsZWQuXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy05Mi0gKlxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYz0xMTc9c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMjQtXFx0XFx0bmV0aWZfcnhfbW9kZV9ydW4oZGV2KTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEyNTpcXHRpZiAoZXZlbnRzIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3dvcmspXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMjY6XFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fd29yayhkZXYsIGV2ZW50cyk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMjctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozODoyMy45NjY2NjUyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzk1MTkyMzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRGV2aWNlIE9wZXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBgdmxhbl9uZXRkZXZfb3BzYCBsZWFucyBvbiBgbmRvX3dvcmtgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZywgbmF0dXJhbGx5LCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBuZXR3b3JrIGRldmljZSBvcGVyYXRpb25zIHV0aWxpemUgYG5kb193b3JrYCwgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AsIG9yIGBuZXRkZXZfd29ya19zY2hlZGAuIEl0J3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgaGVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIFRoaXMgd2lsbCBpbmZvcm0gbXkgZGVzaWduIGNob2ljZXMsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBvciBzZWN1cml0eSByZXZpZXcsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzODQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozODoyNS43NjE4NjA0ODlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjc4MzMyOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X3dvcmtfc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTMwNT1uZG9fd29yazpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zMDgtXFx0Q29udGV4dDogcHJvY2VzcyAoZnJvbSBhIHdvcmsgcXVldWUpXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjMwOTpcXHROb3RlczogUnVucyBkZWZlcnJlZCB3b3JrIHNjaGVkdWxlZCB3aXRoIG5ldGRldl93b3JrX3NjaGVkKCkuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTMxMC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTA3MT1zdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExNDQtICogdm9pZCAoKm5kb193b3JrKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyk7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxMTQ1OiAqXFx0UnVuIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoQGV2ZW50cykuXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTQ2LSAqXFx0UnVucyBpbiBwcm9jZXNzIGNvbnRleHQgdW5kZXIgdGhlIG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcXFwib3BzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE4MjE9ZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk1NC0gKlxcdEB3b3JrX3BlbmRpbmc6XFx0XFx0RHJpdmVyLWRlZmluZWQgcGVuZGluZyBuZXRkZXZfd29yaywgcGFzc2VkIHRvXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxOTU1OiAqXFx0XFx0XFx0XFx0bmRvX3dvcmsoKSAoc2VlIG5ldGRldl93b3JrX3NjaGVkKCkpXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xOTU2LSAqXFx0QHdvcmtfY29yZV9wZW5kaW5nOlxcdENvcmUtZGVmaW5lZCBwZW5kaW5nIG5ldGRldl93b3JrIChORVRERVZfV09SS18qKVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD01MjE5PXZvaWQgZGV2X2dldF90c3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnMpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTIyMC1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjUyMjE6dm9pZCBuZXRkZXZfd29ya19zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyk7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MjIyLXVuc2lnbmVkIGxvbmcgbmV0ZGV2X3dvcmtfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzayk7XFxuLS1cXG5uZXQvODAyMXEvdmxhbi5jPTM2OD1zdGF0aWMgaW50IHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbi0tXFxubmV0LzgwMjFxL3ZsYW4uYy00MjQtXFxubmV0LzgwMjFxL3ZsYW4uYzo0MjU6XFx0XFx0XFx0bmV0ZGV2X3dvcmtfc2NoZWQodmxhbmRldiwgVkxBTl9XT1JLX01UVSk7XFxubmV0LzgwMjFxL3ZsYW4uYy00MjYtXFx0XFx0fVxcbi0tXFxubmV0LzgwMjFxL3ZsYW4uYy00MzAtXFx0XFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KVxcbm5ldC84MDIxcS92bGFuLmM6NDMxOlxcdFxcdFxcdG5ldGRldl93b3JrX3NjaGVkKHZsYW5kZXYsIFZMQU5fV09SS19GRUFUVVJFUyk7XFxubmV0LzgwMjFxL3ZsYW4uYy00MzItXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvODAyMXEvdmxhbi5jLTQzNi1cXHRcXHR2bGFuX2dyb3VwX2Zvcl9lYWNoX2RldihncnAsIGksIHZsYW5kZXYpXFxubmV0LzgwMjFxL3ZsYW4uYzo0Mzc6XFx0XFx0XFx0bmV0ZGV2X3dvcmtfc2NoZWQodmxhbmRldiwgVkxBTl9XT1JLX0xJTktfU1RBVEUpO1xcbm5ldC84MDIxcS92bGFuLmMtNDM4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYz02Nz12b2lkIG5ldGRldl93b3JrX2NhbmNlbF9hbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNzgtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo3OTp2b2lkIG5ldGRldl93b3JrX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODAte1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy04Mi19XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo4MzpFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTg0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozODozMS4wMjk2OTk2NTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQyNTI4OTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AqKlxuXG5SaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AgZnVuY3Rpb24uIFRoaXMgbmFtZSBzY3JlYW1zIFwibmV0d29yayBkZXZpY2Ugb3BlcmF0aW9uXCIgYW5kIFwiYXN5bmNocm9ub3VzLFwiIGltcGx5aW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG5ldHdvcmsgZHJpdmVyIGFuZCBhIG5vbi1ibG9ja2luZyBvcGVyYXRpb24gZm9yIHNldHRpbmcgdGhlIHJlY2VpdmUgbW9kZS4gRXNzZW50aWFsbHksIGl0IGhhbmRsZXMgc2V0dGluZyB0aGUgcmVjZWl2ZSBtb2RlIGZvciBhIG5ldHdvcmsgaW50ZXJmYWNlLCBidXQgaW4gYSB3YXkgdGhhdCBkb2Vzbid0IGhhbHQgb3RoZXIgcHJvY2Vzc2VzIHdoaWxlIGl0IGRvZXMgaXRzIHdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmU6IHRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uLCBwcm9iYWJseSBpbiB0aGUgZHJpdmVyJ3MgaW50ZXJmYWNlIHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IFwiUlggbW9kZVwiIGVuY29tcGFzc2VzIGhlcmUgLSBpcyBpdCBtdWx0aWNhc3QsIHByb21pc2N1b3VzLCBhbGwtZnJhbWVzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byB0aGUgcGFydGljdWxhciBuZXR3b3JrIGNhcmQgaXQgdGFyZ2V0cz8gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCBhbmQgd2hhdCBpdCBkb2VzIGludGVybmFsbHkuIEtub3dpbmcgdGhpcyBnaXZlcyB0aGUgY29udGV4dCBvZiB3aGF0IHNwZWNpZmljIFJYIG1vZGVzIGFyZSBpbnZvbHZlZC4gSSdsbCBhbHNvIHdhbnQgdG8gc2VlIGhvdyB0aGUgYXN5bmMgYXNwZWN0IGlzIGltcGxlbWVudGVkIOKAkyBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHdvcmsgcXVldWUsIGEgY2FsbGJhY2ssIHRocmVhZHMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIHNlYXJjaCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTQ4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzg6MzQuNDU0OTkyNDQzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDA3MjA1NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5kb19zZXRfcnhfbW9kZV9hc3luY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q9Mjg4PW5kb19zZXRfcnhfbW9kZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0yOTAtXFx0Q29udGV4dDogQkhzIGRpc2FibGVkXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjI5MTpcXHROb3RlczogRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBuZG9fc2V0X3J4X21vZGVfYXN5bmMgd2hpY2ggcnVuc1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0yOTItXFx0aW4gcHJvY2VzcyBjb250ZXh0LlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0yOTMtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjI5NDpuZG9fc2V0X3J4X21vZGVfYXN5bmM6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5NS1cXHRTeW5jaHJvbml6YXRpb246IG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcXFwib3BzIGxvY2tlZFxcXCIgZHJpdmVycyxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jPTIxNjg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcG9pYl9uZXRkZXZfb3BzX3BmID0ge1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjE3Ni1cXHQubmRvX3R4X3RpbWVvdXRcXHRcXHQgPSBpcG9pYl90aW1lb3V0LFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jOjIxNzc6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdCA9IGlwb2liX3NldF9yeF9tb2RlX2FzeW5jLFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIxNzgtXFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0ID0gaXBvaWJfZ2V0X2lmbGluayxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jPTIxOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcG9pYl9uZXRkZXZfb3BzX3ZmID0ge1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjE5OS1cXHQubmRvX3R4X3RpbWVvdXRcXHRcXHQgPSBpcG9pYl90aW1lb3V0LFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jOjIyMDA6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdCA9IGlwb2liX3NldF9yeF9tb2RlX2FzeW5jLFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIyMDEtXFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0ID0gaXBvaWJfZ2V0X2lmbGluayxcXG4tLVxcbmRyaXZlcnMvbmV0L2R1bW15LmM9ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkdW1teV9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHVtbXkuYy05Mi1cXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbmRyaXZlcnMvbmV0L2R1bW15LmM6OTM6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gc2V0X211bHRpY2FzdF9saXN0LFxcbmRyaXZlcnMvbmV0L2R1bW15LmMtOTQtXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGV0aF9tYWNfYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jPTY5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFkaW4xMTQwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02OTgtXFx0Lm5kb192YWxpZGF0ZV9hZGRyID0gZXRoX3ZhbGlkYXRlX2FkZHIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM6Njk5OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmMgPSBhZGluMTE0MF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTcwMC1cXHQubmRvX2V0aF9pb2N0bCA9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jPTMyNzA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBibmdlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMzI3NC1cXHQubmRvX2dldF9zdGF0czY0XFx0PSBibmdlX2dldF9zdGF0czY0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYzozMjc1OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IGJuZ2Vfc2V0X3J4X21vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jLTMyNzYtXFx0Lm5kb19mZWF0dXJlc19jaGVja1xcdD0gYm5nZV9mZWF0dXJlc19jaGVjayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE2MTY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm54dF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTYxNzItXFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gYm54dF9nZXRfc3RhdHM2NCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNjE3MzpcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBibnh0X3NldF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2MTc0LVxcdC5uZG9fZXRoX2lvY3RsXFx0XFx0PSBibnh0X2lvY3RsLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jPTU2ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVuZXRjNF9uZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYy01NjktXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGVuZXRjX3BmX3NldF9tYWNfYWRkcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6NTcwOlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IGVuZXRjNF9wZl9zZXRfcnhfbW9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtNTcxLVxcdC5uZG9fc2V0X2ZlYXR1cmVzXFx0PSBlbmV0YzRfcGZfc2V0X2ZlYXR1cmVzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYz01MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWF2Zl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYy01MTM3LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaWF2Zl94bWl0X2ZyYW1lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM6NTEzODpcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBpYXZmX3NldF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTEzOS1cXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYz01MzI0PWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtbHg1ZV9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01MzMwLVxcdC5uZG9fZ2V0X3N0YXRzNjQgICAgICAgICA9IG1seDVlX2dldF9zdGF0cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jOjUzMzE6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luYyAgID0gbWx4NWVfc2V0X3J4X21vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01MzMyLVxcdC5uZG9fc2V0X21hY19hZGRyZXNzICAgICA9IG1seDVlX3NldF9tYWMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jPTExOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtbHhzd19zcF9wb3J0X25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jLTExOTYtXFx0Lm5kb19zZXR1cF90YyAgICAgICAgICAgPSBtbHhzd19zcF9zZXR1cF90YyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jOjExOTc6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gbWx4c3dfc3Bfc2V0X3J4X21vZGVfYXN5bmMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYy0xMTk4LVxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBtbHhzd19zcF9wb3J0X3NldF9tYWNfYWRkcmVzcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM9NTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZmJuaWNfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmMtNTY2LVxcdC5uZG9fY2hhbmdlX210dVxcdFxcdD0gZmJuaWNfY2hhbmdlX210dSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jOjU2NzpcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBmYm5pY19zZXRfcnhfbW9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTU2OC1cXHQubmRvX2dldF9zdGF0czY0XFx0PSBmYm5pY19nZXRfc3RhdHM2NCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X25ldGRldi5jPTI1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNwYXJ4NV9wb3J0X25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9uZXRkZXYuYy0yNTYtXFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSBzcGFyeDVfcG9ydF94bWl0X2ltcGwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbmV0ZGV2LmM6MjU3OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmMgID0gc3Bhcng1X3NldF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X25ldGRldi5jLTI1OC1cXHQubmRvX2dldF9waHlzX3BvcnRfbmFtZSA9IHNwYXJ4NV9wb3J0X2dldF9waHlzX3BvcnRfbmFtZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz02MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX25ldGRldl9vcHMgPSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTYzNy1cXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IG5zaW1fc3RhcnRfeG1pdCxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NjM4OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IG5zaW1fc2V0X3J4X21vZGUsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTYzOS1cXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gZXRoX21hY19hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTY2MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fdmZfbmV0ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNjYyLVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gbnNpbV9zdGFydF94bWl0X3ZmLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzo2NjM6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gbnNpbV9zZXRfcnhfbW9kZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNjY0LVxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBldGhfbWFjX2FkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYz0zMzE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRraXRfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzNS1cXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IG5ldGtpdF94bWl0LFxcbmRyaXZlcnMvbmV0L25ldGtpdC5jOjMzNjpcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBuZXRraXRfc2V0X211bHRpY2FzdCxcXG5kcml2ZXJzL25ldC9uZXRraXQuYy0zMzctXFx0Lm5kb19zZXRfcnhfaGVhZHJvb21cXHQ9IG5ldGtpdF9zZXRfaGVhZHJvb20sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTEwNzE9c3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTMxLSAqXFx0Q2Fubm90IHNsZWVwLCBjYWxsZWQgd2l0aCBuZXRpZl9hZGRyX2xvY2tfYmggaGVsZC5cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMzI6ICpcXHREZXByZWNhdGVkIGluIGZhdm9yIG9mIG5kb19zZXRfcnhfbW9kZV9hc3luYy5cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMzMtICpcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMzQ6ICogaW50ICgqbmRvX3NldF9yeF9tb2RlX2FzeW5jKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTEzNS0gKlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTQ1OD1zdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xNDczLVxcdHZvaWRcXHRcXHRcXHQoKm5kb19zZXRfcnhfbW9kZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNDc0OlxcdGludFxcdFxcdFxcdCgqbmRvX3NldF9yeF9tb2RlX2FzeW5jKShcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE0NzUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTExNDQwLVxcdCAgICBkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL2Rldi5jOjExNDQxOlxcdCAgICAhZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMpXFxubmV0L2NvcmUvZGV2LmM6MTE0NDI6XFx0XFx0bmV0ZGV2X1dBUk4oZGV2LCBcXFwib3BzLWxvY2tlZCBkcml2ZXJzIHNob3VsZCB1c2UgbmRvX3NldF9yeF9tb2RlX2FzeW5jXFxcXG5cXFwiKTtcXG5uZXQvY29yZS9kZXYuYy0xMTQ0My1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTI3Nz12b2lkIG5ldGlmX3J4X21vZGVfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyOTQtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjk1OlxcdGlmIChvcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYykge1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI5Ni1cXHRcXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMxNS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMTY6XFx0aWYgKG9wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMzE3OlxcdFxcdGVyciA9IG9wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKGRldiwgXFx1MDAyNnVjX3NuYXAsIFxcdTAwMjZtY19zbmFwKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzMTgtXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzNjI9dm9pZCBfX2Rldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzczLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3NDpcXHRpZiAob3BzLVxcdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMgfHwgb3BzLVxcdTAwM2VuZG9fY2hhbmdlX3J4X2ZsYWdzIHx8XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzc1LVxcdCAgICBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSB7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzOTA9dm9pZCBkZXZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQwMC0gKlxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTQwMTogKiBEcml2ZXJzIGltcGxlbWVudGluZyBuZG9fc2V0X3J4X21vZGVfYXN5bmMoKSBoYXZlIHRoZWlyIHJ4IG1vZGUgY2FsbGJhY2tcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE0MDItICogZXhlY3V0ZWQgZnJvbSBhIHdvcmtxdWV1ZS4gVGhpcyBhbGxvd3MgdGhlIGNhbGxiYWNrIHRvIHNsZWVwLCBidXQgbWVhbnNcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTU0MT1zdGF0aWMgaW50IGRldl9pZnNpb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKmRhdGEsXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01ODgtXFx0Y2FzZSBTSU9DQURETVVMVEk6XFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NTg5OlxcdFxcdGlmICgoIW9wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlIFxcdTAwMjZcXHUwMDI2ICFvcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYykgfHxcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01OTAtXFx0XFx0ICAgIGlmci1cXHUwMDNlaWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gQUZfVU5TUEVDKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNjAwLVxcdGNhc2UgU0lPQ0RFTE1VTFRJOlxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjYwMTpcXHRcXHRpZiAoKCFvcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZSBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMpIHx8XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNjAyLVxcdFxcdCAgICBpZnItXFx1MDAzZWlmcl9od2FkZHIuc2FfZmFtaWx5ICE9IEFGX1VOU1BFQylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzg6MzguNDYyMjA1ODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODI0MTQzNzEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgcGF0dGVybiBqdW1wcyBvdXQ6IGBkdW1teWAsIGBuZXRraXRgLCBgbnNpbWAsIGFuZCBgdmxhbmAgKDgwMjFxKSBhbGwgcmVseSBvbiBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYCBvciBgbmRvX3dvcmtgLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGRlZmVycmVkIG5ldGRldiB3b3JrcXVldWUgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhpbmdzLiBXaGF0J3MgY2hhbmdlZCBpcyBob3cgdGhlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIHdvcmtzIGZvciB0aGF0IGRlZmVycmVkIHdvcmtxdWV1ZSwgcmVwbGFjaW5nIHRoZSBnbG9iYWwgYHJ0bmxfbG9jaygpYCB3aXRoIHBlci1kZXZpY2UgYG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KWAgYW5kIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KWAuXG5cblRpbWUgdG8gYXNzZXNzIHRoaXMgYWdhaW5zdCBteSBjcml0ZXJpYS4gRmlyc3QsICoqcmVhY2hhYmlsaXR5KiouIFdlJ3JlIHRhbGtpbmcgY29yZSBuZXR3b3JraW5nLCBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AuIFRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IGhpdCB3aGVuZXZlciBuZXRkZXYgd29yayBnZXRzIHNjaGVkdWxlZCwgYW5kIHRoYXQgY2FuIGhhcHBlbiB3aXRoIFZMQU4gZXZlbnRzLCBSWCBtb2RlIGNoYW5nZXMsIG9yIGFueSBraW5kIG9mIG5ldHdvcmsgZGV2aWNlLCBpbmNsdWRpbmcgdmlydHVhbCBvbmVzIGxpa2UgdGhlIGR1bW15IGludGVyZmFjZSwgbmV0a2l0LCBuZXRkZXZzaW0sIGFuZCBvZiBjb3Vyc2UgYWxsIHRoZSByZWd1bGFyIG5ldHdvcmsgaW50ZXJmYWNlcy4gR29vZCBuZXdzLCBpdCdzIHRvdGFsbHkgcmVhY2hhYmxlIGluIFN5emthbGxlciBhbmQgYSBzdGFuZGFyZCBRRU1VIFZNIHNldHVwLCBzbyB0aGF0IGNoZWNrcyBvdXQuXG5cbk5leHQsICoqV29ydGhGdXp6aW5nKiouIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gV2UncmUgdG91Y2hpbmcgYSBjb3JlIHN1YnN5c3RlbSDigJMgYG5ldC9jb3JlL25ldGRldl93b3JrLmNgIOKAkyBhbmQgZnVuZGFtZW50YWxseSBjaGFuZ2luZyB0aGUgY29uY3VycmVuY3kgbW9kZWwgYW5kIGxvY2tpbmcgYXJvdW5kIHRoZSB3b3JrcXVldWUgaGFuZGxlci4gV2UncmUgbW92aW5nIGZyb20gYSBnbG9iYWwgbG9jayAoYHJ0bmxfbG9ja2ApIHRvIHBlci1kZXZpY2UgbG9ja3MuIFRoaXMgKnNjcmVhbXMqIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBsb2NrZGVwIHNwbGF0cy4gVGhlcmUncyBhbHNvIHRoZSBjaGFuY2Ugb2YgcmVncmVzc2lvbnMgd2l0aCBjb25jdXJyZW50IG5ldGxpbmsgb3IgaW9jdGwgb3BlcmF0aW9ucyB3aGlsZSBuZXRkZXYgd29yayBpcyBydW5uaW5nLiBJJ2Qgc2F5LCB3aXRob3V0IGEgZG91YnQsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gVGhpcyBpcyByaXBlIGZvciBleHBsb2l0YXRpb24uXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCAqKkZvY3VzU3ltYm9scyoqIGFuZCAqKkVuYWJsZUNvbmZpZ3MqKi4gVGhlIHBhdGNoIGltcGFjdHMgdGhlc2UgZnVuY3Rpb25zOlxuXG4xLiAgYG5ldGRldl93b3JrX3Byb2NgIGluIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYCAodGhpcyBpcyB0aGUgbW9kaWZpZWQgd29yayBoYW5kbGVyKVxuMi4gIEZ1bmN0aW9ucyByZWxhdGVkIHRvIGl0OiBgbmV0ZGV2X3dvcmtfcnVuYCwgYG5ldGRldl93b3JrX2VucXVldWVgLCBgbmV0ZGV2X3dvcmtfc2NoZWRgLCBgbmV0aWZfcnhfbW9kZV9ydW5gLCBgdmxhbl9kZXZfd29ya2AuXG5cbk9rYXksIGRpZ2dpbmcgaW50byB0aGUgY29kZTogYG5ldGRldl93b3JrX3Byb2NgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCB3b3JrIGhhbmRsZXJzIG1pZ2h0IGJlIGlubGluZWQuIGBuZXRkZXZfd29ya19ydW5gIGlzIGFsc28gc3RhdGljLCBidXQgYG5ldGRldl93b3JrX3NjaGVkYCwgYG5ldGRldl93b3JrX2NhbmNlbGAsIGBuZXRkZXZfd29ya19jYW5jZWxfYWxsYCwgYF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZGAsIGFuZCBgX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbGAgYXJlIGV4cG9ydGVkL25vbi1zdGF0aWMgc3ltYm9scy4gYG5ldGlmX3J4X21vZGVfcnVuYCBpcyBpbiBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AuIEFuZCBgdmxhbl9kZXZfd29ya2AgaXMgb3ZlciBpbiBgbmV0LzgwMjFxL3ZsYW5fZGV2LmNgLiBXZSBuZWVkIHRvIHNjcnV0aW5pemUgYG5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNgIGZvciBob3cgYG5ldGlmX3J4X21vZGVfcnVuYCB3b3JrcyB0b28uIFRoaXMgbmVlZHMgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Nzg4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjQ2LjcwMzY0Njc4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5NTUzNTM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRpZl9yeF9tb2RlX3J1blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuaD0xNjk9dm9pZCBuZXRpZl9yeF9tb2RlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L2NvcmUvZGV2Lmg6MTcwOnZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L2NvcmUvZGV2LmgtMTcxLXZvaWQgbmV0aWZfcnhfbW9kZV9zeW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMjcxPXZvaWQgbmV0aWZfcnhfbW9kZV9jYW5jZWxfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI3Ni1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyNzc6dm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI3OC17XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTE0MDg9dm9pZCBuZXRpZl9yeF9tb2RlX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQxMC1cXHRpZiAoX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpKVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTQxMTpcXHRcXHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQxMi19XFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTExNz1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTEyMy1cXHRpZiAoY29yZSBcXHUwMDI2IE5FVERFVl9XT1JLX1JYX01PREUpXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMjQ6XFx0XFx0bmV0aWZfcnhfbW9kZV9ydW4oZGV2KTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTEyNS1cXHRpZiAoZXZlbnRzIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3dvcmspXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjUxLjc5OTE4OTkyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MjE1MDU0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIFZMQU4gRGV2aWNlIFdvcmsqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhlIFZMQU4gZGV2aWNlJ3Mgd29ya2luZ3MsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIFwidmxhbl9kZXZfd29ya1wiIGZ1bmN0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgcHJvYmxlbSwgaXMgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIExldCdzIGhlYWQgc3RyYWlnaHQgdG8gYG5ldC84MDIxcS92bGFuX2Rldi5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgaGVhcnQgb2YgdGhlIFZMQU4gZGV2aWNlIGxvZ2ljIGluIHRoYXQgZmlsZS4gSXQncyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyB3aGVuIHRyb3VibGVzaG9vdGluZyBvciBhbmFseXppbmcgVkxBTi1yZWxhdGVkIG9wZXJhdGlvbnMsIGFuZCBJIGFudGljaXBhdGUgdGhhdCBgdmxhbl9kZXZfd29ya2Agd2lsbCByZXZlYWwgdGhlIGtleSBhY3Rpb25zIG9yIHByb2Nlc3NlcyBiZWluZyB0cmlnZ2VyZWQgYW5kIGhhbmRsZWQgcmVsYXRlZCB0byBWTEFOIGRldmljZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozODo1NC43MjA2OTkzMDhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODkxOTEwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmxhbl9kZXZfd29ya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvODAyMXEvdmxhbi5oPTEyNj12b2lkIHZsYW5fZmlsdGVyX2Ryb3BfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XFxubmV0LzgwMjFxL3ZsYW4uaC0xMjctXFxubmV0LzgwMjFxL3ZsYW4uaDoxMjg6LyogbmV0ZGV2X3dvcmsgZXZlbnRzIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVhbCBkZXZpY2UsIHNlZSB2bGFuX2Rldl93b3JrKCkuICovXFxubmV0LzgwMjFxL3ZsYW4uaC0xMjktZW51bSB7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDAxPXN0YXRpYyB2b2lkIHZsYW5fdHJhbnNmZXJfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEwMjItXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTAyMzpzdGF0aWMgdm9pZCB2bGFuX2Rldl93b3JrKHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDI0LXtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDYzLVxcdC5uZG9fY2hhbmdlX3J4X2ZsYWdzXFx0PSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTA2NDpcXHQubmRvX3dvcmtcXHRcXHQ9IHZsYW5fZGV2X3dvcmssXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTA2NS1cXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gdmxhbl9kZXZfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjU5LjAwOTg5NjI4NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzE3MDI3MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBOZXR3b3JrIENvcmUgQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGdyYW51bGFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AgaXMgY29tcGlsZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmN5IGFuZCBidWlsZCBydWxlcyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgYXJlIGRlZmluZWQuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGF0IGZpbGUgdG8gc2VlIHRoZSBzcGVjaWZpYyBmbGFncywgb2JqZWN0IGZpbGVzLCBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB0aGF0IGluZmx1ZW5jZSB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhhdCBwYXJ0aWN1bGFyIEMgZmlsZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGFmZmVjdCBpdHMgaW5jbHVzaW9uIG9yIGJlaGF2aW9yIGJhc2VkIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIG5ldGRldiBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzQyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MDAuNzI2OTI4NDM0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDExMTgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbi0tXFxubmV0L2NvcmUvTWFrZWZpbGUtMTUtXFx0XFx0XFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjE2OlxcdFxcdFxcdG5ldGRldi1nZW5sLm8gbmV0ZGV2LWdlbmwtZ2VuLm8gbmV0ZGV2X3dvcmsubyBnc28ub1xcbm5ldC9jb3JlL01ha2VmaWxlLTE3LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTI0NDE9dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTI1MDgtXFx0XFx0ZGV2X21lbW9yeV9wcm92aWRlcl91bmluc3RhbGwoZGV2KTtcXG5uZXQvY29yZS9kZXYuYzoxMjUwOTpcXHRcXHRuZXRkZXZfd29ya19jYW5jZWxfYWxsKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTI1MTAtXFx0XFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5oPTE3Mj12b2lkIG5ldGlmX3J4X21vZGVfY2FuY2VsX3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmgtMTc0LS8qIEV2ZW50cyBmb3IgdGhlIGFzeW5jIG5ldGRldiB3b3JrLCB0cmFja2VkIGluIG5ldGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcuICovXFxubmV0L2NvcmUvZGV2Lmg6MTc1OmVudW0gbmV0ZGV2X3dvcmtfY29yZSB7XFxubmV0L2NvcmUvZGV2LmgtMTc2LVxcdE5FVERFVl9XT1JLX1JYX01PREVcXHQ9IEJJVCgwKSxcXHQvKiBydW4gdGhlIHJ4X21vZGUgdXBkYXRlICovXFxuLS1cXG5uZXQvY29yZS9kZXYuaC0xNzgtXFxubmV0L2NvcmUvZGV2Lmg6MTc5OnZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpO1xcbm5ldC9jb3JlL2Rldi5oLTE4MC11bnNpZ25lZCBsb25nXFxubmV0L2NvcmUvZGV2Lmg6MTgxOl9fbmV0ZGV2X3dvcmtfY29yZV9jYW5jZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKTtcXG5uZXQvY29yZS9kZXYuaDoxODI6dm9pZCBuZXRkZXZfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbm5ldC9jb3JlL2Rldi5oLTE4My1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTMzNT1zdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzM2LXtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMzc6XFx0X19uZXRkZXZfd29ya19jb3JlX3NjaGVkKGRldiwgTkVUREVWX1dPUktfUlhfTU9ERSk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzM4LX1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTQwOD12b2lkIG5ldGlmX3J4X21vZGVfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQwOS17XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxNDEwOlxcdGlmIChfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsKGRldiwgTkVUREVWX1dPUktfUlhfTU9ERSkpXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDExLVxcdFxcdG5ldGlmX3J4X21vZGVfcnVuKGRldik7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTExLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTI6c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTMtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNDovKiBAbmV0ZGV2X3dvcmtfbG9jayBwcm90ZWN0czpcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE1OiAqICAtIEBuZXRkZXZfd29ya19saXN0XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNi0gKiAgLSB3aXRoaW4gdGhlIGxpc3QgZW50cmllcyAoc3RydWN0IG5ldF9kZXZpY2UgZmllbGRzKTpcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMjEtICovXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoyMjpzdGF0aWMgTElTVF9IRUFEKG5ldGRldl93b3JrX2xpc3QpO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MjM6c3RhdGljIERFRklORV9TUElOTE9DSyhuZXRkZXZfd29ya19sb2NrKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjI0OnN0YXRpYyBERUNMQVJFX1dPUksobmV0ZGV2X3dvcmssIG5ldGRldl93b3JrX3Byb2MpO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMjUtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoyNjpzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19lbnF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMjctXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjb3JlKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0zMS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjMyOlxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0zMy1cXHRpZiAoIWRldl9pc2FsaXZlKGRldikpIHtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjM0OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTM1LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMzctXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKSkge1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6Mzg6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUsIFxcdTAwMjZuZXRkZXZfd29ya19saXN0KTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTM5LVxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNDItXFx0ZGV2LVxcdTAwM2V3b3JrX2NvcmVfcGVuZGluZyB8PSBjb3JlO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6NDM6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNDQtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo0NTpcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZuZXRkZXZfd29yayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy00Ni19XFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo0OTpuZXRkZXZfd29ya19kZXF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgKnBlbmRpbmcsXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy01MC1cXHRcXHQgICAgdW5zaWduZWQgbG9uZyBtYXNrKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy01My1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjU0OlxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy01NS1cXHRldmVudHMgPSAqcGVuZGluZyBcXHUwMDI2IG1hc2s7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTYxLVxcdH1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjYyOlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTYzLVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy02Ni1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjY3OnZvaWQgbmV0ZGV2X3dvcmtfY2FuY2VsX2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNjgte1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6Njk6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTcwLVxcdGRldi1cXHUwMDNld29ya19wZW5kaW5nID0gMDtcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNzUtXFx0fVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6NzY6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNzctfVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNzgtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo3OTp2b2lkIG5ldGRldl93b3JrX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODAte1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6ODE6XFx0bmV0ZGV2X3dvcmtfZW5xdWV1ZShkZXYsIGV2ZW50cywgMCk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy04Mi19XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo4MzpFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTg0LVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODUtLyoqXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo4NjogKiBuZXRkZXZfd29ya19jYW5jZWwoKSAtIGNhbmNlbCBzZWxlY3RlZCB3b3JrIGZvciBhIG5ldGRldlxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODctICogQGRldjogbmV0X2RldmljZVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy05OS0gKi9cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEwMDp1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMDEte1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTAyOlxcdHJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya19wZW5kaW5nLCBtYXNrKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTEwMy19XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMDQ6RVhQT1JUX1NZTUJPTChuZXRkZXZfd29ya19jYW5jZWwpO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTA1LVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTA2OnZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTA3LXtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEwODpcXHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgMCwgZXZlbnRzKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTEwOS19XFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTExMT11bnNpZ25lZCBsb25nXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMTI6X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMTMte1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTE0OlxcdHJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcsIG1hc2spO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTE1LX1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTExNi1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjExNzpzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMTgtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgY29yZSlcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTI4LVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTI5OnN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTMwLXtcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTM1LVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTM2OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMzc6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm5ldGRldl93b3JrX2xpc3QpKSB7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMzg6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTM5LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTQwLVxcdFxcdH1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE0MTpcXHRcXHRkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZuZXRkZXZfd29ya19saXN0LCBzdHJ1Y3QgbmV0X2RldmljZSxcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0Mi1cXHRcXHRcXHRcXHQgICAgICAgd29ya19ub2RlKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0My1cXHRcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE0NDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNDUtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNDYtXFx0XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTQ3OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNDgtXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSkpIHtcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTU5LVxcdFxcdH1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE2MDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNjEtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNjI6XFx0XFx0bmV0ZGV2X3dvcmtfcnVuKGRldiwgZXZlbnRzLCBjb3JlKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE2My1cXHRcXHRuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MDAuODY4MDUzMDM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMzYyOTAwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgbmV0L2NvcmUvbmV0ZGV2X3dvcmsubyBhbmQgQXNzb2NpYXRlZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIGBuZXQvY29yZS9uZXRkZXZfd29yay5vYCBpcyBidWlsdCB1bmNvbmRpdGlvbmFsbHkgYXMgbG9uZyBhcyBuZXR3b3JraW5nIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGNvbmZpcm1lZCB0aGlzIGJ5IGNoZWNraW5nIHRoZSBgbmV0L01ha2VmaWxlYCwgd2hlcmUgYG9iai15YCBpbmNsdWRlcyBgY29yZS9gIHdoZW4gYENPTkZJR19ORVRgIGlzIHNldC4gIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBpcyB0aGVyZSBhbnl0aGluZyAqZWxzZSogdGhhdCBtaWdodCBiZSBuZWVkZWQ/IE5vLCBgQ09ORklHX05FVGAgaXMgdGhlIGJhc2UgcmVxdWlyZW1lbnQuIEkgcXVpY2tseSBjaGVja2VkIG90aGVyIGNvbW1vbiBuZXR3b3JraW5nIG9wdGlvbnMgbGlrZSBgQ09ORklHX1ZMQU5fODAyMVFgLCBgQ09ORklHX05FVERFVlNJTWAsIGFuZCBgQ09ORklHX0RVTU1ZYCwgYnV0IGBDT05GSUdfTkVUYCBhbG9uZSBpcyB0aGUga2V5IGVuYWJsZXIgaGVyZS5cblxuQWxyaWdodCwgbGV0J3MgbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgaW5jbHVkZWQ6IGBuZXRkZXZfd29ya19wcm9jYCwgYG5ldGRldl93b3JrX3J1bmAsIGBuZXRkZXZfd29ya19zY2hlZGAsIGBuZXRkZXZfd29ya19jYW5jZWxgLCBgbmV0ZGV2X3dvcmtfY2FuY2VsX2FsbGAsIGBfX25ldGRldl93b3JrX2NvcmVfc2NoZWRgLCBgX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbGAsIGFuZCBgbmV0aWZfcnhfbW9kZV9ydW5gLlxuXG5Pa2F5LCBJJ3ZlIGdvdCB0aGUgbWFpbiB3b3JrZXIgZnVuY3Rpb24sIGBuZXRkZXZfd29ya19wcm9jYCwgd2hpY2ggaXMgdGhlIG9uZSBiZWluZyBtb2RpZmllZCwgYWxvbmcgd2l0aCBpdHMgZXhlY3V0aW9uIGZ1bmN0aW9uIGBuZXRkZXZfd29ya19ydW5gLCB0aGUgQVBJIGVudHJ5IHBvaW50cyBgbmV0ZGV2X3dvcmtfc2NoZWRgLCBgbmV0ZGV2X3dvcmtfY2FuY2VsYCwgYW5kIGBuZXRkZXZfd29ya19jYW5jZWxfYWxsYC4gUGx1cywgdGhvc2UgaW1wb3J0YW50IGhlbHBlcnMsIGBfX25ldGRldl93b3JrX2NvcmVfc2NoZWRgLCBhbmQgdGhlIGNvcmUgUlggbW9kZSBmdW5jdGlvbiwgYG5ldGlmX3J4X21vZGVfcnVuYC5cblxuTGV0J3MgcmV2aWV3IHRoZSBFbmFibGVDb25maWdzLiBJdCdzIGp1c3QgYE5FVGAgKHN0YW5kYXJkIG5ldHdvcmtpbmcpLlxuXG5Ob3cgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhpcyByaWdodDpcblxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIk5FVFwiXWBcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcIm5ldGRldl93b3JrX3Byb2NcIiwgXCJuZXRkZXZfd29ya19ydW5cIiwgXCJuZXRkZXZfd29ya19zY2hlZFwiLCBcIm5ldGRldl93b3JrX2NhbmNlbFwiLCBcIm5ldGRldl93b3JrX2NhbmNlbF9hbGxcIiwgXCJfX25ldGRldl93b3JrX2NvcmVfc2NoZWRcIiwgXCJfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsXCIsIFwibmV0aWZfcnhfbW9kZV9ydW5cIl1gXG5cbiogICBgUmVhc29uaW5nYDogT2theSwgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIG1vZGVsIGZvciB0aGUgZGVmZXJyZWQgbmV0ZGV2IHdvcmtxdWV1ZSBwcm9jZXNzaW5nIChgbmV0ZGV2X3dvcmtfcHJvY2ApIHdpdGhpbiBjb3JlIG5ldHdvcmtpbmcgKGBuZXQvY29yZS9uZXRkZXZfd29yay5jYCkuIEl0J3MgcmVwbGFjaW5nIHRoZSBnbG9iYWwgYHJ0bmxfbG9ja2Agd2l0aCBwZXItZGV2aWNlIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YC4gVGhpcyBjbGVhcmx5IGhpdHMgY29yZSBuZXR3b3JraW5nIGFuZCBuZXR3b3JrIGRyaXZlcnMgKFZMQU4sIHJ4IG1vZGUgdXBkYXRlcywgZXRjLikgYW5kIGNvdWxkIGV4cG9zZSByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2RlcCB2aW9sYXRpb25zIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gSXQncyBhZmZlY3RpbmcgY29uY3VycmVudCBuZXRkZXYgb3BlcmF0aW9ucywgc28gZnV6emluZyBpcyBqdXN0aWZpZWQuXG5cbiogICBgV29ydGhGdXp6aW5nYDogdHJ1ZVxuXG5ZZXMsIEknbSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2MDEsIk91dHB1dFRva2VucyI6MjEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM5OjA2LjAwNDM0NzUyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNDUxNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfd29ya19wcm9jXCIsXG4gICAgXCJuZXRkZXZfd29ya19ydW5cIixcbiAgICBcIm5ldGRldl93b3JrX3NjaGVkXCIsXG4gICAgXCJuZXRkZXZfd29ya19jYW5jZWxcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbF9hbGxcIixcbiAgICBcIl9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZFwiLFxuICAgIFwiX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbFwiLFxuICAgIFwibmV0aWZfcnhfbW9kZV9ydW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIG1vZGVsIGluIGNvcmUgbmV0d29ya2luZydzIGRlZmVycmVkIHdvcmtxdWV1ZSBoYW5kbGluZyAobmV0L2NvcmUvbmV0ZGV2X3dvcmsuYykuIEl0IHJlbW92ZXMgdGhlIGdsb2JhbCBydG5sX2xvY2sgYXJvdW5kIHRoZSB3b3JrZXIgbG9vcCBhbmQgc3dpdGNoZXMgdG8gcGVyLWRldmljZSBuZXRkZXZfbG9ja19vcHNfY29tcGF0IGxvY2tpbmcgZHVyaW5nIGRlZmVycmVkIG5ldGRldiB3b3JrIGFuZCByeF9tb2RlIGV4ZWN1dGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIG5ldGRldiBzdGF0ZSBoYW5kbGluZyBhbmQgZHJpdmVyIGNhbGxiYWNrcyAoc3VjaCBhcyBWTEFOIGFuZCBhc3luYyByeCBtb2RlIHVwZGF0ZXMpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfd29ya19wcm9jXCIsXG4gICAgXCJuZXRkZXZfd29ya19ydW5cIixcbiAgICBcIm5ldGRldl93b3JrX3NjaGVkXCIsXG4gICAgXCJuZXRkZXZfd29ya19jYW5jZWxcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbF9hbGxcIixcbiAgICBcIl9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZFwiLFxuICAgIFwiX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbFwiLFxuICAgIFwibmV0aWZfcnhfbW9kZV9ydW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIG1vZGVsIGluIGNvcmUgbmV0d29ya2luZydzIGRlZmVycmVkIHdvcmtxdWV1ZSBoYW5kbGluZyAobmV0L2NvcmUvbmV0ZGV2X3dvcmsuYykuIEl0IHJlbW92ZXMgdGhlIGdsb2JhbCBydG5sX2xvY2sgYXJvdW5kIHRoZSB3b3JrZXIgbG9vcCBhbmQgc3dpdGNoZXMgdG8gcGVyLWRldmljZSBuZXRkZXZfbG9ja19vcHNfY29tcGF0IGxvY2tpbmcgZHVyaW5nIGRlZmVycmVkIG5ldGRldiB3b3JrIGFuZCByeF9tb2RlIGV4ZWN1dGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIG5ldGRldiBzdGF0ZSBoYW5kbGluZyBhbmQgZHJpdmVyIGNhbGxiYWNrcyAoc3VjaCBhcyBWTEFOIGFuZCBhc3luYyByeCBtb2RlIHVwZGF0ZXMpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MDYuMjI1ODA5NjJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzM0MTA4MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MDYuMjI3ODE3NjlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyOTMzMjA5NTEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIG1vZGVsIGZvciBkZWZlcnJlZCBuZXRkZXYgd29yayAoYG5ldGRldl93b3JrX3Byb2NgKSBpbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AgYW5kIHVwZGF0ZXMgcmVsYXRlZCBkb2N1bWVudGF0aW9uL2hlYWRlciBjb21tZW50cy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIGBydG5sX2xvY2soKWAgZm9yIHRoZSBlbnRpcmUgbG9vcCBpbiBgbmV0ZGV2X3dvcmtfcHJvY2AsIGl0IGxvY2tzIGVhY2ggbmV0IGRldmljZSBpbmRpdmlkdWFsbHkgdXNpbmcgYG5ldGRldl9sb2NrX29wc19jb21wYXQoKWAgLyBgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KClgLlxcblxcblRoaXMgaXMgYSBwdXJlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBjaGFuZ2UuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIGxvY2tpbmcgaGllcmFyY2h5LCByYWNlIGNvbmRpdGlvbnMsIG9yIGRldmljZSByZWZlcmVuY2UvbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgb3IgYnVmZmVyIGJvdW5kYXJ5IGhhbmRsaW5nLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZGM1YWQxNmUwOWEwYzViNmY1YTNmMWI0NzUxOGFhODFjNWU1MmQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTozNzo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxuaW5kZXggZGI3MWQ0MjgzMDMyYS4uYWFjMzM0OTc4MTNmYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XG5AQCAtMjkyLDE1ICsyOTIsMjEgQEAgbmRvX3NldF9yeF9tb2RlOlxuIFx0aW4gcHJvY2VzcyBjb250ZXh0LlxuIFxuIG5kb19zZXRfcnhfbW9kZV9hc3luYzpcbi1cdFN5bmNocm9uaXphdGlvbjogcnRubF9sb2NrKCkgc2VtYXBob3JlLiBJbiBhZGRpdGlvbiwgbmV0ZGV2IGluc3RhbmNlXG4tXHRsb2NrIGlmIHRoZSBkcml2ZXIgaW1wbGVtZW50cyBxdWV1ZSBtYW5hZ2VtZW50IG9yIHNoYXBlciBBUEkuXG4rXHRTeW5jaHJvbml6YXRpb246IG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcIm9wcyBsb2NrZWRcIiBkcml2ZXJzLFxuK1x0cnRubF9sb2NrKCkgc2VtYXBob3JlIGZvciBhbGwgb3RoZXIgZHJpdmVycy5cbiBcdENvbnRleHQ6IHByb2Nlc3MgKGZyb20gYSB3b3JrIHF1ZXVlKVxuIFx0Tm90ZXM6IEFzeW5jIHZlcnNpb24gb2YgbmRvX3NldF9yeF9tb2RlIHdoaWNoIHJ1bnMgaW4gcHJvY2Vzc1xuIFx0Y29udGV4dC4gUmVjZWl2ZXMgc25hcHNob3RzIG9mIHRoZSB1bmljYXN0IGFuZCBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cy5cbiBcbiBuZG9fY2hhbmdlX3J4X2ZsYWdzOlxuLVx0U3luY2hyb25pemF0aW9uOiBydG5sX2xvY2soKSBzZW1hcGhvcmUuIEluIGFkZGl0aW9uLCBuZXRkZXYgaW5zdGFuY2Vcbi1cdGxvY2sgaWYgdGhlIGRyaXZlciBpbXBsZW1lbnRzIHF1ZXVlIG1hbmFnZW1lbnQgb3Igc2hhcGVyIEFQSS5cbitcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwib3BzIGxvY2tlZFwiIGRyaXZlcnMsXG4rXHRydG5sX2xvY2soKSBzZW1hcGhvcmUgZm9yIGFsbCBvdGhlciBkcml2ZXJzLlxuK1xuK25kb193b3JrOlxuK1x0U3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXCJvcHMgbG9ja2VkXCIgZHJpdmVycyxcbitcdHJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuXG4rXHRDb250ZXh0OiBwcm9jZXNzIChmcm9tIGEgd29yayBxdWV1ZSlcbitcdE5vdGVzOiBSdW5zIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoKS5cbiBcbiBuZG9fc2V0dXBfdGM6XG4gXHRMb2NraW5nIGRlcGVuZHMgb24gYGB0Y19zZXR1cF90eXBlYGAuIEZvciBtb3N0IHR5cGVzIHRoZSBjYWxsYmFja1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA4NDU0NjQ2ZDZhNDU0Li4xN2I4ZmI4ZTk0ZmVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTExMzUsMTMgKzExMzUsMTYgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xuICAqXHRcdFx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXG4gICpcdFx0XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7XG4gICpcdEFzeW5jIHZlcnNpb24gb2YgbmRvX3NldF9yeF9tb2RlIHdoaWNoIHJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0XG4tICpcdHdpdGggcnRubF9sb2NrIGFuZCBuZXRkZXZfbG9ja19vcHMoZGV2KSBoZWxkLiBUaGUgdWMvbWMgcGFyYW1ldGVyc1xuKyAqXHR1bmRlciB0aGUgbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwib3BzIGxvY2tlZFwiIGRyaXZlcnMsIG9yXG4rICpcdHJ0bmxfbG9jayBmb3IgYWxsIG90aGVyIGRyaXZlcnMuIFRoZSB1Yy9tYyBwYXJhbWV0ZXJzXG4gICpcdGFyZSBzbmFwc2hvdHMgb2YgdGhlIGFkZHJlc3MgbGlzdHMgLSBpdGVyYXRlIHdpdGhcbiAgKlx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpLiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGFcbiAgKlx0bmVnYXRpdmUgZXJybm8gdG8gcmVxdWVzdCBhIHJldHJ5IHZpYSB0aGUgY29yZSBiYWNrb2ZmLlxuICAqXG4gICogdm9pZCAoKm5kb193b3JrKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyk7XG4gICpcdFJ1biBkZWZlcnJlZCB3b3JrIHNjaGVkdWxlZCB3aXRoIG5ldGRldl93b3JrX3NjaGVkKEBldmVudHMpLlxuKyAqXHRSdW5zIGluIHByb2Nlc3MgY29udGV4dCB1bmRlciB0aGUgbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwib3BzXG4rICpcdGxvY2tlZFwiIGRyaXZlcnMsIG9yIHJ0bmxfbG9jayBmb3IgYWxsIG90aGVyIGRyaXZlcnMuXG4gICpcbiAgKiBpbnQgKCpuZG9fc2V0X21hY19hZGRyZXNzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKTtcbiAgKlx0VGhpcyBmdW5jdGlvbiAgaXMgY2FsbGVkIHdoZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIGFkZHJlc3NcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXZfd29yay5jIGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xuaW5kZXggZTcyMWEwNmQ1OGRmMS4uYzk5OTY3OTA3ZTE4NSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldGRldl93b3JrLmNcbisrKyBiL25ldC9jb3JlL25ldGRldl93b3JrLmNcbkBAIC0zLDcgKzMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG5AQCAtMTI5LDggKzEyOCw2IEBAIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyxcbiBcbiBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4tXHRydG5sX2xvY2soKTtcbi1cbiBcdHdoaWxlICh0cnVlKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMCwgY29yZSA9IDA7XG4gXHRcdG5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7XG5AQCAtMTQzLDE2ICsxNDAsMTAgQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdH1cbiBcdFx0ZGV2ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXRkZXZfd29ya19saXN0LCBzdHJ1Y3QgbmV0X2RldmljZSxcbiBcdFx0XHRcdCAgICAgICB3b3JrX25vZGUpO1xuLVx0XHQvKiBUYWtlIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzbyBAZGV2IGNhbid0IGJlIGZyZWVkIHdoaWxlIHdlXG4tXHRcdCAqIGRyb3AgdGhlIGxvY2sgdG8gZ3JhYiBpdHMgb3BzIGxvY2s7IHRoZSB3b3JrIHJlZmVyZW5jZSBpc1xuLVx0XHQgKiBvbmx5IHJlbGVhc2VkIG9uY2Ugd2UgY2xhaW0gdGhlIHdvcmsgYmVsb3cuXG4tXHRcdCAqIFRoZSByZS1sb2NraW5nIGRhbmNlIGlzIHRvIGVuc3VyZSB0aGF0IG9wcyBsb2NrIGlzIGVub3VnaFxuLVx0XHQgKiB0byBlbnN1cmUgY2FuY2VsaW5nIHdvcmsgaXMgbm90IHJhY3kgd2l0aCBkZXF1ZXVlLlxuLVx0XHQgKi9cbiBcdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gXG4tXHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuK1x0XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiBcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpKSB7XG4gXHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKTtcbkBAIC0xNjksMTAgKzE2MCw4IEBAIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiBcbiBcdFx0bmV0ZGV2X3dvcmtfcnVuKGRldiwgZXZlbnRzLCBjb3JlKTtcbi1cdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbitcdFx0bmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KGRldik7XG4gXG4gXHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZ0cmFja2VyKTtcbiBcdH1cbi1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MDYuMjI3ODE5NjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM5MTc1NzIwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgRGV2aWNlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdGAsIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYCwgYW5kIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYCB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGNvcmUgZGV2aWNlIG1hbmFnZW1lbnQsIHRoZSBkZXZpY2UgZHJpdmVyIGludGVyZmFjZSwgYW5kIHF1aXRlIHBvc3NpYmx5LCB3b3JrZXIgcXVldWUgYmVoYXZpb3IuXG5cbk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldilgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSBjb21wYXRpYmlsaXR5LXJlbGF0ZWQsIG9yIGEgbG9jayBvcGVyYXRpb24sIHBvdGVudGlhbGx5IGltcGFjdGluZyBob3cgZGV2aWNlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQgb3IgcHJvdGVjdGVkLiBcblxuVG8gY2xhcmlmeSB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaCwgSSdsbCBxdWlja2x5IGNoZWNrIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YC4gQSBxdWljayBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kLCBtb3JlIGltcG9ydGFudGx5LCBhbGwgdGhlIHBsYWNlcyB3aGVyZSBpdCdzIGNhbGxlZCBhbmQgYWxsIGZ1bmN0aW9ucyB3aGljaCBtaWdodCBiZSBkZXBlbmRlbnQgb24gaXQuIFRoYXQgd2lsbCBpbW1lZGlhdGVseSBzaGVkIGxpZ2h0IG9uIHRoZSBhcmVhIG9mIHRoZSBwYXRjaCB0aGF0IGhhcyB0byBiZSBpbnZlc3RpZ2F0ZWQuIEknbGwgbmVlZCB0byBrbm93IHdoYXQgaXQncyBkb2luZyB1bmRlciB0aGUgaG9vZCwgYW5kIGhvdyB0aGF0J3MgYmVpbmcgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozOToxMi42MTk1ODAzMTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTIzMTQ3OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X2xvY2tfb3BzX2NvbXBhdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTgzPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtODgtXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDo4OTpzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtOTAte1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTEwMT1fX25ldGRldl9wdXRfbG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvY29yZS9kZXYuYy0xMTAyLXtcXG5uZXQvY29yZS9kZXYuYzoxMTAzOlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMTA0LVxcdGlmIChkZXYtXFx1MDAzZXJlZ19zdGF0ZSBcXHUwMDNlIE5FVFJFR19SRUdJU1RFUkVEIHx8XFxuLS1cXG5uZXQvY29yZS9kZXYuaD02MD1ERUZJTkVfRlJFRShuZXRkZXZfdW5sb2NrX29wc19jb21wYXQsIHN0cnVjdCBuZXRfZGV2aWNlICosXFxuLS1cXG5uZXQvY29yZS9kZXYuaC02Mi1cXG5uZXQvY29yZS9kZXYuaDo2MzojZGVmaW5lIGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgdmFyX25hbWUsIGlmaW5kZXgpXFx0XFxcXFxcbm5ldC9jb3JlL2Rldi5oLTY0LVxcdGZvciAoc3RydWN0IG5ldF9kZXZpY2UgKnZhcl9uYW1lIF9fZnJlZShuZXRkZXZfdW5sb2NrX29wc19jb21wYXQpID0gTlVMTDsgXFxcXFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz02MTg9aW50IG5ldGRldl9ubF9xdWV1ZV9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNjM4LVxcdH0gZWxzZSB7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzo2Mzk6XFx0XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy02NDAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz05MDE9aW50IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05MzgtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzo5Mzk6XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtOTQwLVxcdFxcdGVyciA9IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBfb25lKG5ldGRldiwgc2NvcGUsIHNrYixcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM9MTI5PXN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNDUtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNDY6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTQ3LVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuLS1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYz01OD1pbnQgZXRobmxfYWN0X2NhYmxlX3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTc1LVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jOjc2OlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYy03Ny1cXHRwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihcXHUwMDI2cmVxX2luZm8sIHRiLFxcbi0tXFxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM9MzE5PWludCBldGhubF9hY3RfY2FibGVfdGVzdF90ZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTM0Mi1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYzozNDM6XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTM0NC1cXHRwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihcXHUwMDI2cmVxX2luZm8sIHRiLFxcbi0tXFxubmV0L2V0aHRvb2wvbW9kdWxlLmM9NDE3PWludCBldGhubF9hY3RfbW9kdWxlX2Z3X2ZsYXNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9tb2R1bGUuYy00MzEtXFxubmV0L2V0aHRvb2wvbW9kdWxlLmM6NDMyOlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9tb2R1bGUuYy00MzMtXFx0cmV0ID0gZXRobmxfb3BzX2JlZ2luKGRldik7XFxuLS1cXG5uZXQvZXRodG9vbC9yc3MuYz00Njg9aW50IGV0aG5sX3Jzc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmMtNDczLVxcbm5ldC9ldGh0b29sL3Jzcy5jOjQ3NDpcXHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2V0aHRvb2wvcnNzLmMtNDc1LVxcdFxcdGlmIChjdHgtXFx1MDAzZW1hdGNoX2lmaW5kZXggXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VtYXRjaF9pZmluZGV4ICE9IGN0eC1cXHUwMDNlaWZpbmRleClcXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jPTEwMDI9aW50IGV0aG5sX3Jzc19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmMtMTAzNi1cXG5uZXQvZXRodG9vbC9yc3MuYzoxMDM3OlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9yc3MuYy0xMDM4LVxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmM9MTE1MD1pbnQgZXRobmxfcnNzX2RlbGV0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9yc3MuYy0xMTc3LVxcbm5ldC9ldGh0b29sL3Jzcy5jOjExNzg6XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9ldGh0b29sL3Jzcy5jLTExNzktXFxuLS1cXG5uZXQvZXRodG9vbC90c2luZm8uYz00NzM9aW50IGV0aG5sX3RzaW5mb19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDgxLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jOjQ4MjpcXHRcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDgzLVxcdFxcdHJldCA9IGV0aG5sX3RzaW5mb19kdW1wX29uZV9uZXRfdG9wbyhza2IsIGRldiwgY2IpO1xcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDg3LVxcbm5ldC9ldGh0b29sL3RzaW5mby5jOjQ4ODpcXHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIGRldiwgY3R4LVxcdTAwM2Vwb3NfaWZpbmRleCkge1xcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4OS1cXHRcXHRyZXQgPSBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0X3RvcG8oc2tiLCBkZXYsIGNiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MTcuMTMxOTEwOTgyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzIwOTA1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIGBuZXRkZXZfd29yay5jYCBBcm91bmQgVGhhdCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgXCJPa2F5LCBsZXQncyBub3QganVzdCBnbGFuY2UgYXQgKnRoYXQqIHNwZWNpZmljIGZ1bmN0aW9uOyB3ZSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZSBoZXJlLlwiIEl0J3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlLCBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AuIEkgbmVlZCB0byBncmFzcCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBkZXZpY2UgbGF5ZXIgYXMgYSB3aG9sZSwgd2hhdCB0aGlzIGlzIHRyeWluZyB0byBhY2NvbXBsaXNoLlxuXG5MZXQncyBkbyBhIGNvbXBsZXRlIHJlYWQtdGhyb3VnaCBpbiBvcmRlciB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcyBhbmQgZG9lcyBub3QgZG8uIEknbGwgYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGFyZWFzIHN1Y2ggYXMgbG9ja2luZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCwgZXNwZWNpYWxseSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhpcyBhZmZlY3RzIHRoZSBzY2hlZHVsZXIuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gY29uY3VycmVuY3kgY29uY2VybnMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhpcyBhcmVhLiBObyBzaG9ydGN1dHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24ncyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdywgaXRzIGRlcGVuZGVuY2llcywgYW5kIHdoYXQga2luZCBvZiB3b3JrIGl0IGlzIG1lYW50IHRvIHBlcmZvcm0uIEknbSBnb2luZyB0byBzdGFydCByZWFkaW5nIGZyb20gdGhlIGJlZ2lubmluZyBhbmQgZm9sbG93IHRoZSBsb2dpYyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDMxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MTkuNDY0MDA1NDExWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRkZXZfd29yay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHRcXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4gICA5OlxcdFxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcImRldi5oXFxcIlxcbiAgMTE6XFx0XFxuICAxMjpcXHRzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuICAxMzpcXHRcXG4gIDE0OlxcdC8qIEBuZXRkZXZfd29ya19sb2NrIHByb3RlY3RzOlxcbiAgMTU6XFx0ICogIC0gQG5ldGRldl93b3JrX2xpc3RcXG4gIDE2OlxcdCAqICAtIHdpdGhpbiB0aGUgbGlzdCBlbnRyaWVzIChzdHJ1Y3QgbmV0X2RldmljZSBmaWVsZHMpOlxcbiAgMTc6XFx0ICpcXHQtIHdvcmtfbm9kZVxcbiAgMTg6XFx0ICpcXHQtIHdvcmtfdHJhY2tlclxcbiAgMTk6XFx0ICpcXHQtIHdvcmtfcGVuZGluZ1xcbiAgMjA6XFx0ICpcXHQtIHdvcmtfY29yZV9wZW5kaW5nXFxuICAyMTpcXHQgKi9cXG4gIDIyOlxcdHN0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3dvcmtfbGlzdCk7XFxuICAyMzpcXHRzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ldGRldl93b3JrX2xvY2spO1xcbiAgMjQ6XFx0c3RhdGljIERFQ0xBUkVfV09SSyhuZXRkZXZfd29yaywgbmV0ZGV2X3dvcmtfcHJvYyk7XFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXFxuICAyNzpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGNvcmUpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRpZiAoIWV2ZW50cyBcXHUwMDI2XFx1MDAyNiAhY29yZSlcXG4gIDMwOlxcdFxcdFxcdHJldHVybjtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gIDMzOlxcdFxcdGlmICghZGV2X2lzYWxpdmUoZGV2KSkge1xcbiAgMzQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAgMzU6XFx0XFx0XFx0cmV0dXJuO1xcbiAgMzY6XFx0XFx0fVxcbiAgMzc6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKSkge1xcbiAgMzg6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUsIFxcdTAwMjZuZXRkZXZfd29ya19saXN0KTtcXG4gIDM5OlxcdFxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4gIDQwOlxcdFxcdH1cXG4gIDQxOlxcdFxcdGRldi1cXHUwMDNld29ya19wZW5kaW5nIHw9IGV2ZW50cztcXG4gIDQyOlxcdFxcdGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcgfD0gY29yZTtcXG4gIDQzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bmV0ZGV2X3dvcmspO1xcbiAgNDY6XFx0fVxcbiAgNDc6XFx0XFxuICA0ODpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZ1xcbiAgNDk6XFx0bmV0ZGV2X3dvcmtfZGVxdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nICpwZW5kaW5nLFxcbiAgNTA6XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbWFzaylcXG4gIDUxOlxcdHtcXG4gIDUyOlxcdFxcdHVuc2lnbmVkIGxvbmcgZXZlbnRzO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAgNTU6XFx0XFx0ZXZlbnRzID0gKnBlbmRpbmcgXFx1MDAyNiBtYXNrO1xcbiAgNTY6XFx0XFx0KnBlbmRpbmcgXFx1MDAyNj0gfmV2ZW50cztcXG4gIDU3OlxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpIFxcdTAwMjZcXHUwMDI2XFxuICA1ODpcXHRcXHQgICAgIWRldi1cXHUwMDNld29ya19wZW5kaW5nIFxcdTAwMjZcXHUwMDI2ICFkZXYtXFx1MDAzZXdvcmtfY29yZV9wZW5kaW5nKSB7XFxuICA1OTpcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSk7XFxuICA2MDpcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyKTtcXG4gIDYxOlxcdFxcdH1cXG4gIDYyOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0cmV0dXJuIGV2ZW50cztcXG4gIDY1OlxcdH1cXG4gIDY2OlxcdFxcbiAgNjc6XFx0dm9pZCBuZXRkZXZfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA2ODpcXHR7XFxuICA2OTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAgNzA6XFx0XFx0ZGV2LVxcdTAwM2V3b3JrX3BlbmRpbmcgPSAwO1xcbiAgNzE6XFx0XFx0ZGV2LVxcdTAwM2V3b3JrX2NvcmVfcGVuZGluZyA9IDA7XFxuICA3MjpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKSkge1xcbiAgNzM6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpO1xcbiAgNzQ6XFx0XFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfdHJhY2tlcik7XFxuICA3NTpcXHRcXHR9XFxuICA3NjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuICA3NzpcXHR9XFxuICA3ODpcXHRcXG4gIDc5OlxcdHZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgZXZlbnRzLCAwKTtcXG4gIDgyOlxcdH1cXG4gIDgzOlxcdEVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xcbiAgODQ6XFx0XFxuICA4NTpcXHQvKipcXG4gIDg2OlxcdCAqIG5ldGRldl93b3JrX2NhbmNlbCgpIC0gY2FuY2VsIHNlbGVjdGVkIHdvcmsgZm9yIGEgbmV0ZGV2XFxuICA4NzpcXHQgKiBAZGV2OiBuZXRfZGV2aWNlXFxuICA4ODpcXHQgKiBAbWFzazogZXZlbnRzIHRvIGNhbmNlbFxcbiAgODk6XFx0ICpcXG4gIDkwOlxcdCAqIENsZWFyIEBtYXNrIGZyb20gdGhlIGRldmljZSdzIHdvcmsgcGVuZGluZyBtYXNrLiBJZiBubyB3b3JrIGlzIGxlZnQgcGVuZGluZ1xcbiAgOTE6XFx0ICogdGhlIGRldmljZSBpcyBkZXF1ZXVlZCBhbmQgaXRzIG5kb193b3JrIHdvbid0IGJlIGNhbGxlZC5cXG4gIDkyOlxcdCAqXFxuICA5MzpcXHQgKiBObyBleHBlY3RhdGlvbnMgb24gbG9ja2luZywgYnV0IGFsc28gbm8gZ3VhcmFudGVlcyBwcm92aWRlZC4gSWYgdGhlIGNhbGxlclxcbiAgOTQ6XFx0ICogd2FudHMgdG8gdG91Y2ggQGRldiBhZnRlcndhcmRzIChlLmcuIGNhbGwgdGhlIHdvcmsgdGhhdCBnb3QgY2FuY2VsZWQpXFxuICA5NTpcXHQgKiB0aGV5IGhhdmUgdG8gZW5zdXJlIEBkZXYgZG9lcyBub3QgZ2V0IGZyZWVkLlxcbiAgOTY6XFx0ICpcXG4gIDk3OlxcdCAqIFJldHVybnM6IHRoZSBzdWJzZXQgb2YgQG1hc2sgdGhhdCB3YXMgYWN0dWFsbHkgcGVuZGluZywgc28gdGhlIGNhbGxlciBjYW4gcnVuXFxuICA5ODpcXHQgKiB0aG9zZSBldmVudHMgaW5saW5lLlxcbiAgOTk6XFx0ICovXFxuIDEwMDpcXHR1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM5OjE5LjQ2NDE4MTI2MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjgwOTAxMzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGBuZXRkZXZfd29yay5jYCBmaWxlIGZyb20gdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5LlxuXG4qKkRpdmluZyBEZWVwIGludG8gYG5ldGRldl93b3JrLmNgKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBncm9rIHRoZSByZXN0IG9mIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gSSBhbHJlYWR5IGhhdmUgYSBkZWNlbnQgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjayBhcmNoaXRlY3R1cmUsIHNvIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBpbnRlcnBsYXkgb2YgdGhlIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbnMgKGxpa2UgaGFuZGxpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uKSB3aXRoIHRoZSB3b3JrIHF1ZXVlIG1lY2hhbmlzbS5cblxuSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IG5ldHdvcmsgZGV2aWNlcyBlbnF1ZXVlIHdvcmsgdG8gYmUgZG9uZSBsYXRlciDigJMgdGhlIGNsYXNzaWMgZGVmZXJyZWQgcHJvY2Vzc2luZyBwYXR0ZXJuLiBMaWtlbHksIHRoaXMgaW52b2x2ZXMgaGFuZGxpbmcgaW50ZXJydXB0cywgc2NoZWR1bGluZyB0YXNrcyB0byBhdm9pZCBibG9ja2luZyBjcml0aWNhbCBwYXRocywgYW5kIG1haW50YWluaW5nIHNvbWUgc29ydCBvZiBvcmRlcmluZyBvciBwcmlvcml0aXphdGlvbi4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGV5IG1hbmFnZSB0aGUgY29udGV4dCBzd2l0Y2hlcyBpbnZvbHZlZCwgZXNwZWNpYWxseSBpZiB0aGVyZSdzIGFueSBjbGV2ZXIgdXNlIG9mIHBlci1DUFUgcXVldWVzIG9yIG90aGVyIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGZvciBtdWx0aS1jb3JlIHN5c3RlbXMuXG5cbkdpdmVuIHRoZSBmaWxlIG5hbWUsIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGRlYWxzIHdpdGggdGhlIHdvcmtxdWV1ZXMgc3BlY2lmaWNhbGx5IGZvciBuZXR3b3JrIGRldmljZSBvcGVyYXRpb25zLiBUaGF0IG1lYW5zIHVuZGVyc3RhbmRpbmcgaG93IHRoZSB3b3JrIGlzIHN1Ym1pdHRlZCwgaG93IHRoZSB3b3JrcXVldWUgdGhyZWFkcyBhcmUgd29rZW4gdXAsIGFuZCBob3cgdGhlIG5ldHdvcmsgZGV2aWNlLXNwZWNpZmljIHdvcmsgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBleGVjdXRlZC4gSSdsbCBiZSBsb29raW5nIGZvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBsaWtlIHNwaW5sb2NrcyBvciBtdXRleGVzIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgY29uY3VycmVudCBhY2Nlc3MgZnJvbSBkaWZmZXJlbnQgY29udGV4dHMuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgc3BlY2lhbCBoYW5kbGluZyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIG5ldHdvcmsgZGV2aWNlcyBsaWtlIHZpcnR1YWwgaW50ZXJmYWNlcywgYm9uZCBpbnRlcmZhY2VzLCBvciBicmlkZ2luZyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MjUuNzQ1MDg2MjA2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRkZXZfd29yay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMTpcXHR7XFxuIDEwMjpcXHRcXHRyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsIFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfcGVuZGluZywgbWFzayk7XFxuIDEwMzpcXHR9XFxuIDEwNDpcXHRFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX2NhbmNlbCk7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdHZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxcbiAxMDc6XFx0e1xcbiAxMDg6XFx0XFx0bmV0ZGV2X3dvcmtfZW5xdWV1ZShkZXYsIDAsIGV2ZW50cyk7XFxuIDEwOTpcXHR9XFxuIDExMDpcXHRcXG4gMTExOlxcdHVuc2lnbmVkIGxvbmdcXG4gMTEyOlxcdF9fbmV0ZGV2X3dvcmtfY29yZV9jYW5jZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKVxcbiAxMTM6XFx0e1xcbiAxMTQ6XFx0XFx0cmV0dXJuIG5ldGRldl93b3JrX2RlcXVldWUoZGV2LCBcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX2NvcmVfcGVuZGluZywgbWFzayk7XFxuIDExNTpcXHR9XFxuIDExNjpcXHRcXG4gMTE3OlxcdHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyxcXG4gMTE4OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGNvcmUpXFxuIDExOTpcXHR7XFxuIDEyMDpcXHRcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuIDEyMTpcXHRcXHRcXHRyZXR1cm47XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdGlmIChjb3JlIFxcdTAwMjYgTkVUREVWX1dPUktfUlhfTU9ERSlcXG4gMTI0OlxcdFxcdFxcdG5ldGlmX3J4X21vZGVfcnVuKGRldik7XFxuIDEyNTpcXHRcXHRpZiAoZXZlbnRzIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3dvcmspXFxuIDEyNjpcXHRcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb193b3JrKGRldiwgZXZlbnRzKTtcXG4gMTI3OlxcdH1cXG4gMTI4OlxcdFxcbiAxMjk6XFx0c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDEzMDpcXHR7XFxuIDEzMTpcXHRcXHR3aGlsZSAodHJ1ZSkge1xcbiAxMzI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBldmVudHMgPSAwLCBjb3JlID0gMDtcXG4gMTMzOlxcdFxcdFxcdG5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7XFxuIDEzNDpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiAxMzU6XFx0XFxuIDEzNjpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAxMzc6XFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm5ldGRldl93b3JrX2xpc3QpKSB7XFxuIDEzODpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuIDEzOTpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTQwOlxcdFxcdFxcdH1cXG4gMTQxOlxcdFxcdFxcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNm5ldGRldl93b3JrX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLFxcbiAxNDI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHdvcmtfbm9kZSk7XFxuIDE0MzpcXHRcXHRcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4gMTQ0OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbiAxNDc6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gMTQ4OlxcdFxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpKSB7XFxuIDE0OTpcXHRcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSk7XFxuIDE1MDpcXHRcXHRcXHRcXHRjb3JlID0gZGV2LVxcdTAwM2V3b3JrX2NvcmVfcGVuZGluZztcXG4gMTUxOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcgPSAwO1xcbiAxNTI6XFx0XFx0XFx0XFx0ZXZlbnRzID0gZGV2LVxcdTAwM2V3b3JrX3BlbmRpbmc7XFxuIDE1MzpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXdvcmtfcGVuZGluZyA9IDA7XFxuIDE1NDpcXHRcXHRcXHRcXHQvKiBXZSB0b29rIGFub3RoZXIgcmVmIGFib3ZlICovXFxuIDE1NTpcXHRcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyKTtcXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0XFx0XFx0aWYgKCFkZXZfaXNhbGl2ZShkZXYpKVxcbiAxNTg6XFx0XFx0XFx0XFx0XFx0Y29yZSA9IGV2ZW50cyA9IDA7XFxuIDE1OTpcXHRcXHRcXHR9XFxuIDE2MDpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdFxcdG5ldGRldl93b3JrX3J1bihkZXYsIGV2ZW50cywgY29yZSk7XFxuIDE2MzpcXHRcXHRcXHRuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTtcXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZ0cmFja2VyKTtcXG4gMTY2OlxcdFxcdH1cXG4gMTY3OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MjUuNzQ1MTkzMjk2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MjkzMDgwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBuZXR3b3JrIGRldmljZSBkcml2ZXIgaW50ZXJuYWxzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBuZXRkZXZfbG9jayBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYWN0dWFsIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYG5ldGRldl9sb2NrX29wc19jb21wYXRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBoZWFkIG92ZXIgdG8gYGluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGNvbXBhdGliaWxpdHkgbGF5ZXIgZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhpcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbG9ja2luZyBtZWNoYW5pc21zIG9mIHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIuIFdoYXQgc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBiZWluZyB3cmFwcGVkIG9yIG1vZGlmaWVkIHdpdGhpbiBgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdGA/IEFuZCwgd2hhdCdzIHRoZSBwdXJwb3NlIG9mIGl0PyBJcyBpdCBmb3IgaGFuZGxpbmcgb2xkZXIgZHJpdmVycywgb3IgYWNjb21tb2RhdGluZyBzb21lIHNwZWNpZmljIGNvbXBhdGliaWxpdHkgbmVlZD8gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbmFsaXRpZXMgcHJvdmlkZWQgYnkgdGhpcyBzdHJ1Y3R1cmUsIGFuZCBob3cgZG9lcyBpdCBpbnRlZ3JhdGUgaW50byB0aGUgbGFyZ2VyIGxvY2tpbmcgc2NoZW1lIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrPyBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBjcnVjaWFsIGZvciBmaWd1cmluZyBvdXQgaG93IHRvIGhhbmRsZSBhbnkgcG90ZW50aWFsIGlzc3Vlcywgb3IgZm9yIG9wdGltaXppbmcgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgaW4gdGhlIGJyb2FkZXIgc2NvcGUgb2YgbmV0d29yayBkcml2ZXIgZGV2ZWxvcG1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM5OjI4LjQ3NDUwNDYwNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHR7XFxuICA2MTpcXHRcXHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcXG4gIDYyOlxcdFxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XFxuICA2MzpcXHRcXHRlbHNlXFxuICA2NDpcXHRcXHRcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuICA2NTpcXHR9XFxuICA2NjpcXHRcXG4gIDY3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA2ODpcXHR7XFxuICA2OTpcXHRcXHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcXG4gIDcwOlxcdFxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuICA3MTpcXHRcXHRlbHNlXFxuICA3MjpcXHRcXHRcXHRBU1NFUlRfUlROTCgpO1xcbiAgNzM6XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4gIDc2OlxcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXRfb3JfaW52aXNpYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRpZiAoZGV2LVxcdTAwM2VyZWdfc3RhdGUgPT0gTkVUUkVHX1JFR0lTVEVSRUQgfHxcXG4gIDc5OlxcdFxcdCAgICBkZXYtXFx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfVU5SRUdJU1RFUklORylcXG4gIDgwOlxcdFxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcXG4gIDgxOlxcdH1cXG4gIDgyOlxcdFxcbiAgODM6XFx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9hc3NlcnRfbG9ja2VkX29wcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgODQ6XFx0e1xcbiAgODU6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuICA4NjpcXHRcXHRcXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChkZXYpO1xcbiAgODc6XFx0fVxcbiAgODg6XFx0XFxuICA4OTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgOTA6XFx0e1xcbiAgOTE6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuICA5MjpcXHRcXHRcXHRuZXRkZXZfbG9jayhkZXYpO1xcbiAgOTM6XFx0XFx0ZWxzZVxcbiAgOTQ6XFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gIDk4OlxcdHtcXG4gIDk5OlxcdFxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbiAxMDA6XFx0XFx0XFx0bmV0ZGV2X3VubG9jayhkZXYpO1xcbiAxMDE6XFx0XFx0ZWxzZVxcbiAxMDI6XFx0XFx0XFx0cnRubF91bmxvY2soKTtcXG4gMTAzOlxcdH1cXG4gMTA0OlxcdFxcbiAxMDU6XFx0LyogTWF0Y2hpbmcgXFxcIm9wcyBwcm90ZWN0ZWRcXFwiIGNhdGVnb3J5IGZyb20gbmV0ZGV2aWNlLmggKi9cXG4gMTA2OlxcdHN0YXRpYyBpbmxpbmUgaW50IG5ldGRldl9pc19sb2NrZWRfb3BzX2NvbXBhdChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAxMDc6XFx0e1xcbiAxMDg6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuIDEwOTpcXHRcXHRcXHRyZXR1cm4gbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbiAxMTA6XFx0XFx0cmV0dXJuIGxvY2tkZXBfcnRubF9pc19oZWxkKCk7XFxuIDExMTpcXHR9XFxuIDExMjpcXHRcXG4gMTEzOlxcdHN0YXRpYyBpbmxpbmUgaW50IG5ldGRldl9sb2NrX2NtcF9mbihjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmEsXFxuIDExNDpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqYilcXG4gMTE1OlxcdHtcXG4gMTE2OlxcdFxcdGlmIChhID09IGIpXFxuIDExNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0LyogQWxsb3cgbG9ja2luZyBtdWx0aXBsZSBkZXZpY2VzIG9ubHkgdW5kZXIgcnRubF9sb2NrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozOToyOC40NzQ2MjA3NDRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA4NTI2NDc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGRldiBXb3JrIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCBpbnZvbHZlcyBhIGNyaXRpY2FsIGV4YW1pbmF0aW9uIG9mIGl0cyBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIGltcGFjdC4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgaXQncyBhIHJlZmFjdG9yaW5nIG9mIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBgbmV0ZGV2X3dvcmtfcHJvY2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL25ldGRldl93b3JrLmNgLiBCZWZvcmUsIHdlIGhhZCB0aGUgYHJ0bmxfbG9jaygpYCBoZWxkIHVuY29uZGl0aW9uYWxseSBvdmVyIHRoZSBlbnRpcmUgbG9vcCwgYWxvbmcgd2l0aCBwZXItZGV2aWNlIGxvY2tzIGFzIG5lZWRlZC4gTm93LCBpdCdzIGJlZW4gY2hhbmdlZCB0byB1c2UgYG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KWAgLyBgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KGRldilgIG9uIGEgcGVyLWRldmljZSBiYXNpcyB3aXRoaW4gdGhlIGxvb3AuIFRoaXMgbG9va3MgbGlrZSBhbiBhdHRlbXB0IGF0IGltcHJvdmluZyBjb25jdXJyZW5jeSBieSByZWR1Y2luZyB0aGUgc2NvcGUgb2YgdGhlIGBydG5sX2xvY2tgLiBQbHVzLCB0aGVyZSBhcmUgc29tZSB1cGRhdGVzIHRvIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudHMgdG8gcmVmbGVjdCB0aGUgbmV3IHN5bmNocm9uaXphdGlvbiBtb2RlbCBmb3IgbWV0aG9kcyBsaWtlIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgLlxuXG5Ob3csIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgcmlza3MuIEZpcnN0LCB0aGUgbWVtb3J5IHNhZmV0eSBjb25jZXJuczogYW0gSSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZT8gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyBhbnkga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLCBidXQgdGhlcmUgYXJlIG5vbmUuIFNpbWlsYXJseSwgbm8gYnJhbmNoaW5nIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gYWx0ZXJhdGlvbnMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBMb29rcyBsaWtlIGFsbCBtZW1vcnktcmVsYXRlZCBhc3BlY3RzIGFyZSBjb3ZlcmVkLlxuXG5UaGUgbWFqb3IgYXJlYSBvZiBjb25jZXJuIGhlcmUgaXMgdGhlIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIHJlZmFjdG9yIGl0c2VsZi4gQ29uY3VycmVuY3kgaXNzdWVzIGxpa2UgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIGFuZCBsb2NrZGVwIHZpb2xhdGlvbnMgYXJlIHRoZSBwcmltYXJ5IHBvdGVudGlhbCByaXNrcy4gVGhlIHBhdGNoIGl0c2VsZiBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGp1c3QgY2hhbmdlcyB0aGUgbG9ja2luZyBzdHJhdGVnaWVzIGZvciBleGlzdGluZyBjb2RlLCBhbmQgSSBzZWUgdGhhdCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gaWRlbnRpZnkgdGhvc2Uga2luZHMgb2YgaXNzdWVzLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgcHVyZWx5IGFib3V0IGxvY2tpbmcgY2hhbmdlcywgYW5kIHNpbmNlIG5vIG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGNvcGllcywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIHVzZXItc3BhY2UgY29waWVzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQsIEknbSBmYWlybHkgY29uZmlkZW50IHRoYXQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc24ndCByZWFsbHkgYXBwbGljYWJsZSBoZXJlLiBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBhbmQgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGFyZW4ndCByZWFsbHkgaW4gdGhlIHNjb3BlIG9mIHRoaXMgcmVmYWN0b3JpbmcuIFNvLCBJIG5lZWQgdG8gY29udHJhc3QgS0FTQU4vTE9DS0RFUCB2ZXJzdXMgS01TQU4gaGVyZS5cblxuVGhlcmVmb3JlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nLCBJIHRoaW5rIHRoaXMgYW5hbHlzaXMgaXMgc291bmQuIExldCdzIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NDUsIk91dHB1dFRva2VucyI6MjE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MzUuNTU5ODg4ODI5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzeW5jaHJvbml6YXRpb24gbW9kZWwgZm9yIGRlZmVycmVkIG5ldGRldiB3b3JrIChgbmV0ZGV2X3dvcmtfcHJvY2ApIGluIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYCBhbmQgdXBkYXRlcyByZWxhdGVkIGRvY3VtZW50YXRpb24vaGVhZGVyIGNvbW1lbnRzLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgYHJ0bmxfbG9jaygpYCBmb3IgdGhlIGVudGlyZSBsb29wIGluIGBuZXRkZXZfd29ya19wcm9jYCwgaXQgbG9ja3MgZWFjaCBuZXQgZGV2aWNlIGluZGl2aWR1YWxseSB1c2luZyBgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdCgpYCAvIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoKWAuXFxuXFxuVGhpcyBpcyBhIHB1cmUgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGNoYW5nZS4gQW55IHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgbW9kaWZpY2F0aW9ucyByZWxhdGUgdG8gbG9ja2luZyBoaWVyYXJjaHksIHJhY2UgY29uZGl0aW9ucywgb3IgZGV2aWNlIHJlZmVyZW5jZS9saWZlY3ljbGUgbWFuYWdlbWVudCwgd2hpY2ggYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBhbHRlciBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBvciBidWZmZXIgYm91bmRhcnkgaGFuZGxpbmcuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIHN5bmNocm9uaXphdGlvbiBtb2RlbCBmb3IgZGVmZXJyZWQgbmV0ZGV2IHdvcmsgKGBuZXRkZXZfd29ya19wcm9jYCkgaW4gYG5ldC9jb3JlL25ldGRldl93b3JrLmNgIGFuZCB1cGRhdGVzIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi9oZWFkZXIgY29tbWVudHMuIEluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IGFjcXVpcmluZyBgcnRubF9sb2NrKClgIGZvciB0aGUgZW50aXJlIGxvb3AgaW4gYG5ldGRldl93b3JrX3Byb2NgLCBpdCBsb2NrcyBlYWNoIG5ldCBkZXZpY2UgaW5kaXZpZHVhbGx5IHVzaW5nIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0KClgIC8gYG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdCgpYC5cXG5cXG5UaGlzIGlzIGEgcHVyZSBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gY2hhbmdlLiBBbnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHJlbGF0ZSB0byBsb2NraW5nIGhpZXJhcmNoeSwgcmFjZSBjb25kaXRpb25zLCBvciBkZXZpY2UgcmVmZXJlbmNlL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIG9yIGJ1ZmZlciBib3VuZGFyeSBoYW5kbGluZy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7k4t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 05:16:13 +0000 UTC FinishedAt: 2026-09-06 05:39:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "c8ce0b28-1c59-42b9-9a3c-46e7f9d61632" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netdev_work_proc", "netdev_work_run", "netdev_work_sched", "netdev_work_cancel", "netdev_work_cancel_all", "__netdev_work_core_sched", "__netdev_work_core_cancel", "netif_rx_mode_run" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGRldl93b3JrX3Byb2MmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3NjaGVkJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfd29ya19jYW5jZWxfYWxsJiMzNDssCiAgICAmIzM0O19fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZCYjMzQ7LAogICAgJiMzNDtfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsJiMzNDssCiAgICAmIzM0O25ldGlmX3J4X21vZGVfcnVuJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIG1vZGVsIGZvciBkZWZlcnJlZCBuZXRkZXYgd29yayAoYG5ldGRldl93b3JrX3Byb2NgKSBpbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AgYW5kIHVwZGF0ZXMgcmVsYXRlZCBkb2N1bWVudGF0aW9uL2hlYWRlciBjb21tZW50cy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIGBydG5sX2xvY2soKWAgZm9yIHRoZSBlbnRpcmUgbG9vcCBpbiBgbmV0ZGV2X3dvcmtfcHJvY2AsIGl0IGxvY2tzIGVhY2ggbmV0IGRldmljZSBpbmRpdmlkdWFsbHkgdXNpbmcgYG5ldGRldl9sb2NrX29wc19jb21wYXQoKWAgLyBgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KClgLlxuXG5UaGlzIGlzIGEgcHVyZSBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gY2hhbmdlLiBBbnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHJlbGF0ZSB0byBsb2NraW5nIGhpZXJhcmNoeSwgcmFjZSBjb25kaXRpb25zLCBvciBkZXZpY2UgcmVmZXJlbmNlL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIG9yIGJ1ZmZlciBib3VuZGFyeSBoYW5kbGluZy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbW9kZWwgaW4gY29yZSBuZXR3b3JraW5nJiMzOTtzIGRlZmVycmVkIHdvcmtxdWV1ZSBoYW5kbGluZyAobmV0L2NvcmUvbmV0ZGV2X3dvcmsuYykuIEl0IHJlbW92ZXMgdGhlIGdsb2JhbCBydG5sX2xvY2sgYXJvdW5kIHRoZSB3b3JrZXIgbG9vcCBhbmQgc3dpdGNoZXMgdG8gcGVyLWRldmljZSBuZXRkZXZfbG9ja19vcHNfY29tcGF0IGxvY2tpbmcgZHVyaW5nIGRlZmVycmVkIG5ldGRldiB3b3JrIGFuZCByeF9tb2RlIGV4ZWN1dGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIG5ldGRldiBzdGF0ZSBoYW5kbGluZyBhbmQgZHJpdmVyIGNhbGxiYWNrcyAoc3VjaCBhcyBWTEFOIGFuZCBhc3luYyByeCBtb2RlIHVwZGF0ZXMpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJkYzVhZDE2ZTA5YTBjNWI2ZjVhM2YxYjQ3NTE4YWE4MWM1ZTUyZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA1OjM3OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxuaW5kZXggZGI3MWQ0MjgzMDMyYS4uYWFjMzM0OTc4MTNmYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XG5AQCAtMjkyLDE1ICYjNDM7MjkyLDIxIEBAIG5kb19zZXRfcnhfbW9kZTpcbiBcdGluIHByb2Nlc3MgY29udGV4dC5cbiBcbiBuZG9fc2V0X3J4X21vZGVfYXN5bmM6XG4tXHRTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4gSW4gYWRkaXRpb24sIG5ldGRldiBpbnN0YW5jZVxuLVx0bG9jayBpZiB0aGUgZHJpdmVyIGltcGxlbWVudHMgcXVldWUgbWFuYWdlbWVudCBvciBzaGFwZXIgQVBJLlxuJiM0MztcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwmIzM0O29wcyBsb2NrZWRcJiMzNDsgZHJpdmVycyxcbiYjNDM7XHRydG5sX2xvY2soKSBzZW1hcGhvcmUgZm9yIGFsbCBvdGhlciBkcml2ZXJzLlxuIFx0Q29udGV4dDogcHJvY2VzcyAoZnJvbSBhIHdvcmsgcXVldWUpXG4gXHROb3RlczogQXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzXG4gXHRjb250ZXh0LiBSZWNlaXZlcyBzbmFwc2hvdHMgb2YgdGhlIHVuaWNhc3QgYW5kIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzLlxuIFxuIG5kb19jaGFuZ2VfcnhfZmxhZ3M6XG4tXHRTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4gSW4gYWRkaXRpb24sIG5ldGRldiBpbnN0YW5jZVxuLVx0bG9jayBpZiB0aGUgZHJpdmVyIGltcGxlbWVudHMgcXVldWUgbWFuYWdlbWVudCBvciBzaGFwZXIgQVBJLlxuJiM0MztcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwmIzM0O29wcyBsb2NrZWRcJiMzNDsgZHJpdmVycyxcbiYjNDM7XHRydG5sX2xvY2soKSBzZW1hcGhvcmUgZm9yIGFsbCBvdGhlciBkcml2ZXJzLlxuJiM0MztcbiYjNDM7bmRvX3dvcms6XG4mIzQzO1x0U3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXCYjMzQ7b3BzIGxvY2tlZFwmIzM0OyBkcml2ZXJzLFxuJiM0MztcdHJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuXG4mIzQzO1x0Q29udGV4dDogcHJvY2VzcyAoZnJvbSBhIHdvcmsgcXVldWUpXG4mIzQzO1x0Tm90ZXM6IFJ1bnMgZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZCgpLlxuIFxuIG5kb19zZXR1cF90YzpcbiBcdExvY2tpbmcgZGVwZW5kcyBvbiBgYHRjX3NldHVwX3R5cGVgYC4gRm9yIG1vc3QgdHlwZXMgdGhlIGNhbGxiYWNrXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDg0NTQ2NDZkNmE0NTQuLjE3YjhmYjhlOTRmZWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMTEzNSwxMyAmIzQzOzExMzUsMTYgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xuICAqXHRcdFx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXG4gICpcdFx0XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7XG4gICpcdEFzeW5jIHZlcnNpb24gb2YgbmRvX3NldF9yeF9tb2RlIHdoaWNoIHJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0XG4tICpcdHdpdGggcnRubF9sb2NrIGFuZCBuZXRkZXZfbG9ja19vcHMoZGV2KSBoZWxkLiBUaGUgdWMvbWMgcGFyYW1ldGVyc1xuJiM0MzsgKlx0dW5kZXIgdGhlIG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcJiMzNDtvcHMgbG9ja2VkXCYjMzQ7IGRyaXZlcnMsIG9yXG4mIzQzOyAqXHRydG5sX2xvY2sgZm9yIGFsbCBvdGhlciBkcml2ZXJzLiBUaGUgdWMvbWMgcGFyYW1ldGVyc1xuICAqXHRhcmUgc25hcHNob3RzIG9mIHRoZSBhZGRyZXNzIGxpc3RzIC0gaXRlcmF0ZSB3aXRoXG4gICpcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKS4gUmV0dXJuIDAgb24gc3VjY2VzcyBvciBhXG4gICpcdG5lZ2F0aXZlIGVycm5vIHRvIHJlcXVlc3QgYSByZXRyeSB2aWEgdGhlIGNvcmUgYmFja29mZi5cbiAgKlxuICAqIHZvaWQgKCpuZG9fd29yaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuICAqXHRSdW4gZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZChAZXZlbnRzKS5cbiYjNDM7ICpcdFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0IHVuZGVyIHRoZSBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXCYjMzQ7b3BzXG4mIzQzOyAqXHRsb2NrZWRcJiMzNDsgZHJpdmVycywgb3IgcnRubF9sb2NrIGZvciBhbGwgb3RoZXIgZHJpdmVycy5cbiAgKlxuICAqIGludCAoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpO1xuICAqXHRUaGlzIGZ1bmN0aW9uICBpcyBjYWxsZWQgd2hlbiB0aGUgTWVkaWEgQWNjZXNzIENvbnRyb2wgYWRkcmVzc1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldl93b3JrLmMgYi9uZXQvY29yZS9uZXRkZXZfd29yay5jXG5pbmRleCBlNzIxYTA2ZDU4ZGYxLi5jOTk5Njc5MDdlMTg1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xuQEAgLTMsNyAmIzQzOzMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG5AQCAtMTI5LDggJiM0MzsxMjgsNiBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4gXG4gc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0cnRubF9sb2NrKCk7XG4tXG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHR1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDAsIGNvcmUgPSAwO1xuIFx0XHRuZXRkZXZpY2VfdHJhY2tlciB0cmFja2VyO1xuQEAgLTE0MywxNiAmIzQzOzE0MCwxMCBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0fVxuIFx0XHRkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNm5ldGRldl93b3JrX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLFxuIFx0XHRcdFx0ICAgICAgIHdvcmtfbm9kZSk7XG4tXHRcdC8qIFRha2UgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHNvIEBkZXYgY2FuJiMzOTt0IGJlIGZyZWVkIHdoaWxlIHdlXG4tXHRcdCAqIGRyb3AgdGhlIGxvY2sgdG8gZ3JhYiBpdHMgb3BzIGxvY2s7IHRoZSB3b3JrIHJlZmVyZW5jZSBpc1xuLVx0XHQgKiBvbmx5IHJlbGVhc2VkIG9uY2Ugd2UgY2xhaW0gdGhlIHdvcmsgYmVsb3cuXG4tXHRcdCAqIFRoZSByZS1sb2NraW5nIGRhbmNlIGlzIHRvIGVuc3VyZSB0aGF0IG9wcyBsb2NrIGlzIGVub3VnaFxuLVx0XHQgKiB0byBlbnN1cmUgY2FuY2VsaW5nIHdvcmsgaXMgbm90IHJhY3kgd2l0aCBkZXF1ZXVlLlxuLVx0XHQgKi9cbiBcdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gXG4tXHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuJiM0MztcdFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKSkge1xuIFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSk7XG5AQCAtMTY5LDEwICYjNDM7MTYwLDggQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIFxuIFx0XHRuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpO1xuLVx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuJiM0MztcdFx0bmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KGRldik7XG4gXG4gXHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZ0cmFja2VyKTtcbiBcdH1cbi1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGRldl93b3JrX3Byb2MmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3NjaGVkJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfd29ya19jYW5jZWxfYWxsJiMzNDssCiAgICAmIzM0O19fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZCYjMzQ7LAogICAgJiMzNDtfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsJiMzNDssCiAgICAmIzM0O25ldGlmX3J4X21vZGVfcnVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbW9kZWwgaW4gY29yZSBuZXR3b3JraW5nJiMzOTtzIGRlZmVycmVkIHdvcmtxdWV1ZSBoYW5kbGluZyAobmV0L2NvcmUvbmV0ZGV2X3dvcmsuYykuIEl0IHJlbW92ZXMgdGhlIGdsb2JhbCBydG5sX2xvY2sgYXJvdW5kIHRoZSB3b3JrZXIgbG9vcCBhbmQgc3dpdGNoZXMgdG8gcGVyLWRldmljZSBuZXRkZXZfbG9ja19vcHNfY29tcGF0IGxvY2tpbmcgZHVyaW5nIGRlZmVycmVkIG5ldGRldiB3b3JrIGFuZCByeF9tb2RlIGV4ZWN1dGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIG5ldGRldiBzdGF0ZSBoYW5kbGluZyBhbmQgZHJpdmVyIGNhbGxiYWNrcyAoc3VjaCBhcyBWTEFOIGFuZCBhc3luYyByeCBtb2RlIHVwZGF0ZXMpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJkYzVhZDE2ZTA5YTBjNWI2ZjVhM2YxYjQ3NTE4YWE4MWM1ZTUyZDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDA1OjM3OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0CmluZGV4IGRiNzFkNDI4MzAzMmEuLmFhYzMzNDk3ODEzZmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QKQEAgLTI5MiwxNSAmIzQzOzI5MiwyMSBAQCBuZG9fc2V0X3J4X21vZGU6CiAJaW4gcHJvY2VzcyBjb250ZXh0LgogCiBuZG9fc2V0X3J4X21vZGVfYXN5bmM6Ci0JU3luY2hyb25pemF0aW9uOiBydG5sX2xvY2soKSBzZW1hcGhvcmUuIEluIGFkZGl0aW9uLCBuZXRkZXYgaW5zdGFuY2UKLQlsb2NrIGlmIHRoZSBkcml2ZXIgaW1wbGVtZW50cyBxdWV1ZSBtYW5hZ2VtZW50IG9yIHNoYXBlciBBUEkuCiYjNDM7CVN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yICYjMzQ7b3BzIGxvY2tlZCYjMzQ7IGRyaXZlcnMsCiYjNDM7CXJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuCiAJQ29udGV4dDogcHJvY2VzcyAoZnJvbSBhIHdvcmsgcXVldWUpCiAJTm90ZXM6IEFzeW5jIHZlcnNpb24gb2YgbmRvX3NldF9yeF9tb2RlIHdoaWNoIHJ1bnMgaW4gcHJvY2VzcwogCWNvbnRleHQuIFJlY2VpdmVzIHNuYXBzaG90cyBvZiB0aGUgdW5pY2FzdCBhbmQgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMuCiAKIG5kb19jaGFuZ2VfcnhfZmxhZ3M6Ci0JU3luY2hyb25pemF0aW9uOiBydG5sX2xvY2soKSBzZW1hcGhvcmUuIEluIGFkZGl0aW9uLCBuZXRkZXYgaW5zdGFuY2UKLQlsb2NrIGlmIHRoZSBkcml2ZXIgaW1wbGVtZW50cyBxdWV1ZSBtYW5hZ2VtZW50IG9yIHNoYXBlciBBUEkuCiYjNDM7CVN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yICYjMzQ7b3BzIGxvY2tlZCYjMzQ7IGRyaXZlcnMsCiYjNDM7CXJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuCiYjNDM7CiYjNDM7bmRvX3dvcms6CiYjNDM7CVN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yICYjMzQ7b3BzIGxvY2tlZCYjMzQ7IGRyaXZlcnMsCiYjNDM7CXJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuCiYjNDM7CUNvbnRleHQ6IHByb2Nlc3MgKGZyb20gYSB3b3JrIHF1ZXVlKQomIzQzOwlOb3RlczogUnVucyBkZWZlcnJlZCB3b3JrIHNjaGVkdWxlZCB3aXRoIG5ldGRldl93b3JrX3NjaGVkKCkuCiAKIG5kb19zZXR1cF90YzoKIAlMb2NraW5nIGRlcGVuZHMgb24gYGB0Y19zZXR1cF90eXBlYGAuIEZvciBtb3N0IHR5cGVzIHRoZSBjYWxsYmFjawpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggODQ1NDY0NmQ2YTQ1NC4uMTdiOGZiOGU5NGZlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0xMTM1LDEzICYjNDM7MTEzNSwxNiBAQCBzdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7CiAgKgkJCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsCiAgKgkJCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpOwogICoJQXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzIGNvbnRleHQKLSAqCXdpdGggcnRubF9sb2NrIGFuZCBuZXRkZXZfbG9ja19vcHMoZGV2KSBoZWxkLiBUaGUgdWMvbWMgcGFyYW1ldGVycwomIzQzOyAqCXVuZGVyIHRoZSBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgJiMzNDtvcHMgbG9ja2VkJiMzNDsgZHJpdmVycywgb3IKJiM0MzsgKglydG5sX2xvY2sgZm9yIGFsbCBvdGhlciBkcml2ZXJzLiBUaGUgdWMvbWMgcGFyYW1ldGVycwogICoJYXJlIHNuYXBzaG90cyBvZiB0aGUgYWRkcmVzcyBsaXN0cyAtIGl0ZXJhdGUgd2l0aAogICoJbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpLiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGEKICAqCW5lZ2F0aXZlIGVycm5vIHRvIHJlcXVlc3QgYSByZXRyeSB2aWEgdGhlIGNvcmUgYmFja29mZi4KICAqCiAgKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTsKICAqCVJ1biBkZWZlcnJlZCB3b3JrIHNjaGVkdWxlZCB3aXRoIG5ldGRldl93b3JrX3NjaGVkKEBldmVudHMpLgomIzQzOyAqCVJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0IHVuZGVyIHRoZSBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgJiMzNDtvcHMKJiM0MzsgKglsb2NrZWQmIzM0OyBkcml2ZXJzLCBvciBydG5sX2xvY2sgZm9yIGFsbCBvdGhlciBkcml2ZXJzLgogICoKICAqIGludCAoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpOwogICoJVGhpcyBmdW5jdGlvbiAgaXMgY2FsbGVkIHdoZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIGFkZHJlc3MKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldl93b3JrLmMgYi9uZXQvY29yZS9uZXRkZXZfd29yay5jCmluZGV4IGU3MjFhMDZkNThkZjEuLmM5OTk2NzkwN2UxODUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldGRldl93b3JrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuYwpAQCAtMyw3ICYjNDM7Myw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9sb2NrLmgmZ3Q7CkBAIC0xMjksOCAmIzQzOzEyOCw2IEBAIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cywKIAogc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JcnRubF9sb2NrKCk7Ci0KIAl3aGlsZSAodHJ1ZSkgewogCQl1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDAsIGNvcmUgPSAwOwogCQluZXRkZXZpY2VfdHJhY2tlciB0cmFja2VyOwpAQCAtMTQzLDE2ICYjNDM7MTQwLDEwIEBAIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQl9CiAJCWRldiA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDtuZXRkZXZfd29ya19saXN0LCBzdHJ1Y3QgbmV0X2RldmljZSwKIAkJCQkgICAgICAgd29ya19ub2RlKTsKLQkJLyogVGFrZSBhIHRlbXBvcmFyeSByZWZlcmVuY2Ugc28gQGRldiBjYW4mIzM5O3QgYmUgZnJlZWQgd2hpbGUgd2UKLQkJICogZHJvcCB0aGUgbG9jayB0byBncmFiIGl0cyBvcHMgbG9jazsgdGhlIHdvcmsgcmVmZXJlbmNlIGlzCi0JCSAqIG9ubHkgcmVsZWFzZWQgb25jZSB3ZSBjbGFpbSB0aGUgd29yayBiZWxvdy4KLQkJICogVGhlIHJlLWxvY2tpbmcgZGFuY2UgaXMgdG8gZW5zdXJlIHRoYXQgb3BzIGxvY2sgaXMgZW5vdWdoCi0JCSAqIHRvIGVuc3VyZSBjYW5jZWxpbmcgd29yayBpcyBub3QgcmFjeSB3aXRoIGRlcXVldWUuCi0JCSAqLwogCQluZXRkZXZfaG9sZChkZXYsICZhbXA7dHJhY2tlciwgR0ZQX0FUT01JQyk7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmV0ZGV2X3dvcmtfbG9jayk7CiAKLQkJbmV0ZGV2X2xvY2tfb3BzKGRldik7CiYjNDM7CQluZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7CiAJCXNwaW5fbG9ja19iaCgmYW1wO25ldGRldl93b3JrX2xvY2spOwogCQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtkZXYtJmd0O3dvcmtfbm9kZSkpIHsKIAkJCWxpc3RfZGVsX2luaXQoJmFtcDtkZXYtJmd0O3dvcmtfbm9kZSk7CkBAIC0xNjksMTAgJiM0MzsxNjAsOCBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZXRkZXZfd29ya19sb2NrKTsKIAogCQluZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpOwotCQluZXRkZXZfdW5sb2NrX29wcyhkZXYpOwomIzQzOwkJbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KGRldik7CiAKIAkJbmV0ZGV2X3B1dChkZXYsICZhbXA7dHJhY2tlcik7CiAJfQotCi0JcnRubF91bmxvY2soKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBFdmFsdWF0aW9uOiBTeXprYWxsZXIgRnV6emluZyBDb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gYmVpbmcgYXNrZWQgdG8gZXZhbHVhdGUgYSBMaW51eCBrZXJuZWwgcGF0Y2ggcmVsYXRlZCB0byBzeXprYWxsZXIgZnV6emluZy4gUmlnaHQgYXdheSwgSSBuZWVkIHRvIGZyYW1lIHRoaXMgd2l0aGluIHJpc2sgYW5hbHlzaXMgYW5kIHVuZGVyc3RhbmQgdGhlIHJlcXVlc3QuIEl0JiMzOTtzIGEga2VybmVsIHBhdGNoIHRyaWFnZSBzcGVjaWZpY2FsbHkgZm9yIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoaXMgaXMgYSBkZWZlbnNpdmUsIHF1YWxpdHkgYXNzdXJhbmNlIGFjdGl2aXR5LiBQdXJlbHkgYmVuaWduLCBzbyB3ZSBjYW4gcmVsYXggYSBsaXR0bGUgaGVyZSwgYXQgbGVhc3QgaW5pdGlhbGx5LgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgZmlsZXMgbW9kaWZpZWQgZ2l2ZSB1cyB0aGUgZmlyc3QgY2x1ZXM6IGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3RgLCBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAsIGFuZCwgc2lnbmlmaWNhbnRseSwgYG5ldC9jb3JlL25ldGRldl93b3JrLmNgLiBNeSBzcGlkZXktc2Vuc2UgdGluZ2xlcyBzbGlnaHRseSB3aGVuIEkgc2VlIGNoYW5nZXMgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuCgpJIHdhbnQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYG5ldC9jb3JlL25ldGRldl93b3JrLmNgIHNwZWNpZmljYWxseS4gTXkgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyBgbmV0ZGV2X3dvcmtfcHJvY2AgYW5kIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBjb250ZXh0LCBhbmQgaG93IGBuZXRkZXZfd29ya19zY2hlZGAgaXMgdXNlZC4gSSYjMzk7bGwgcHJvYmFibHkgcnVuIHNvbWUgcXVpY2sgYGdyZXBgIGNvbW1hbmRzIG9yIGRpZyBhcm91bmQgd2l0aCBteSBmaWxlLXJlYWRpbmcgdG9vbHMgaW4gdGhhdCBmaWxlIGFuZCBhbHNvIGxvb2sgYXQgYG5ldC9uZXRkZXZfbG9jay5oYCwgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBUaGVuIEkgY2FuIGdldCBhIGZlZWwgZm9yIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2X3dvcmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuICAgMjpcdFxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdCNpbmNsdWRlIFwmIzM0O2Rldi5oXCYjMzQ7XG4gIDExOlx0XG4gIDEyOlx0c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuICAxMzpcdFxuICAxNDpcdC8qIEBuZXRkZXZfd29ya19sb2NrIHByb3RlY3RzOlxuICAxNTpcdCAqICAtIEBuZXRkZXZfd29ya19saXN0XG4gIDE2Olx0ICogIC0gd2l0aGluIHRoZSBsaXN0IGVudHJpZXMgKHN0cnVjdCBuZXRfZGV2aWNlIGZpZWxkcyk6XG4gIDE3Olx0ICpcdC0gd29ya19ub2RlXG4gIDE4Olx0ICpcdC0gd29ya190cmFja2VyXG4gIDE5Olx0ICpcdC0gd29ya19wZW5kaW5nXG4gIDIwOlx0ICpcdC0gd29ya19jb3JlX3BlbmRpbmdcbiAgMjE6XHQgKi9cbiAgMjI6XHRzdGF0aWMgTElTVF9IRUFEKG5ldGRldl93b3JrX2xpc3QpO1xuICAyMzpcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmV0ZGV2X3dvcmtfbG9jayk7XG4gIDI0Olx0c3RhdGljIERFQ0xBUkVfV09SSyhuZXRkZXZfd29yaywgbmV0ZGV2X3dvcmtfcHJvYyk7XG4gIDI1Olx0XG4gIDI2Olx0c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfZW5xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyxcbiAgMjc6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgY29yZSlcbiAgMjg6XHR7XG4gIDI5Olx0XHRpZiAoIWV2ZW50cyBcdTAwMjZcdTAwMjYgIWNvcmUpXG4gIDMwOlx0XHRcdHJldHVybjtcbiAgMzE6XHRcbiAgMzI6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAgMzM6XHRcdGlmICghZGV2X2lzYWxpdmUoZGV2KSkge1xuICAzNDpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAgMzU6XHRcdFx0cmV0dXJuO1xuICAzNjpcdFx0fVxuICAzNzpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkpIHtcbiAgMzg6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlLCBcdTAwMjZuZXRkZXZfd29ya19saXN0KTtcbiAgMzk6XHRcdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya190cmFja2VyLCBHRlBfQVRPTUlDKTtcbiAgNDA6XHRcdH1cbiAgNDE6XHRcdGRldi1cdTAwM2V3b3JrX3BlbmRpbmcgfD0gZXZlbnRzO1xuICA0MjpcdFx0ZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nIHw9IGNvcmU7XG4gIDQzOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAgNDQ6XHRcbiAgNDU6XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bmV0ZGV2X3dvcmspO1xuICA0NjpcdH1cbiAgNDc6XHRcbiAgNDg6XHRzdGF0aWMgdW5zaWduZWQgbG9uZ1xuICA0OTpcdG5ldGRldl93b3JrX2RlcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyAqcGVuZGluZyxcbiAgNTA6XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbWFzaylcbiAgNTE6XHR7XG4gIDUyOlx0XHR1bnNpZ25lZCBsb25nIGV2ZW50cztcbiAgNTM6XHRcbiAgNTQ6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAgNTU6XHRcdGV2ZW50cyA9ICpwZW5kaW5nIFx1MDAyNiBtYXNrO1xuICA1NjpcdFx0KnBlbmRpbmcgXHUwMDI2PSB+ZXZlbnRzO1xuICA1NzpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpIFx1MDAyNlx1MDAyNlxuICA1ODpcdFx0ICAgICFkZXYtXHUwMDNld29ya19wZW5kaW5nIFx1MDAyNlx1MDAyNiAhZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nKSB7XG4gIDU5Olx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSk7XG4gIDYwOlx0XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya190cmFja2VyKTtcbiAgNjE6XHRcdH1cbiAgNjI6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICA2MzpcdFxuICA2NDpcdFx0cmV0dXJuIGV2ZW50cztcbiAgNjU6XHR9XG4gIDY2Olx0XG4gIDY3Olx0dm9pZCBuZXRkZXZfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDY4Olx0e1xuICA2OTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICA3MDpcdFx0ZGV2LVx1MDAzZXdvcmtfcGVuZGluZyA9IDA7XG4gIDcxOlx0XHRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcgPSAwO1xuICA3MjpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpKSB7XG4gIDczOlx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSk7XG4gIDc0Olx0XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya190cmFja2VyKTtcbiAgNzU6XHRcdH1cbiAgNzY6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICA3NzpcdH1cbiAgNzg6XHRcbiAgNzk6XHR2b2lkIG5ldGRldl93b3JrX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxuICA4MDpcdHtcbiAgODE6XHRcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCBldmVudHMsIDApO1xuICA4MjpcdH1cbiAgODM6XHRFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTtcbiAgODQ6XHRcbiAgODU6XHQvKipcbiAgODY6XHQgKiBuZXRkZXZfd29ya19jYW5jZWwoKSAtIGNhbmNlbCBzZWxlY3RlZCB3b3JrIGZvciBhIG5ldGRldlxuICA4NzpcdCAqIEBkZXY6IG5ldF9kZXZpY2VcbiAgODg6XHQgKiBAbWFzazogZXZlbnRzIHRvIGNhbmNlbFxuICA4OTpcdCAqXG4gIDkwOlx0ICogQ2xlYXIgQG1hc2sgZnJvbSB0aGUgZGV2aWNlJiMzOTtzIHdvcmsgcGVuZGluZyBtYXNrLiBJZiBubyB3b3JrIGlzIGxlZnQgcGVuZGluZ1xuICA5MTpcdCAqIHRoZSBkZXZpY2UgaXMgZGVxdWV1ZWQgYW5kIGl0cyBuZG9fd29yayB3b24mIzM5O3QgYmUgY2FsbGVkLlxuICA5MjpcdCAqXG4gIDkzOlx0ICogTm8gZXhwZWN0YXRpb25zIG9uIGxvY2tpbmcsIGJ1dCBhbHNvIG5vIGd1YXJhbnRlZXMgcHJvdmlkZWQuIElmIHRoZSBjYWxsZXJcbiAgOTQ6XHQgKiB3YW50cyB0byB0b3VjaCBAZGV2IGFmdGVyd2FyZHMgKGUuZy4gY2FsbCB0aGUgd29yayB0aGF0IGdvdCBjYW5jZWxlZClcbiAgOTU6XHQgKiB0aGV5IGhhdmUgdG8gZW5zdXJlIEBkZXYgZG9lcyBub3QgZ2V0IGZyZWVkLlxuICA5NjpcdCAqXG4gIDk3Olx0ICogUmV0dXJuczogdGhlIHN1YnNldCBvZiBAbWFzayB0aGF0IHdhcyBhY3R1YWxseSBwZW5kaW5nLCBzbyB0aGUgY2FsbGVyIGNhbiBydW5cbiAgOTg6XHQgKiB0aG9zZSBldmVudHMgaW5saW5lLlxuICA5OTpcdCAqL1xuIDEwMDpcdHVuc2lnbmVkIGxvbmcgbmV0ZGV2X3dvcmtfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDU3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gTmV0d29yayBEZXZpY2UgV29ya3F1ZXVlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3R0ZW4gYSBnb29kIGhhbmRsZSBvbiBzb21lIG9mIHRoZSBjb3JlIGNvbmNlcHRzLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24uIE15IG5leHQgbW92ZSBpcyBjbGVhci4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIHRoZSBuZXR3b3JrIGRldmljZSB3b3JrcXVldWVzLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBpbW1lcnNlIG15c2VsZiBpbiB0aGUgY29kZSBhbmQgaG93IHRoZSBsb2NrcyBpbnRlcmFjdCB3aXRoIHRoZW0uIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgYG5ldC9jb3JlL25ldGRldl93b3JrLmNgLiBUaGlzIHdpbGwgc2hvdyBtZSBob3cgd29yayBpcyBxdWV1ZWQsIGV4ZWN1dGVkLCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBkZXZpY2VzLiBDcnVjaWFsbHksIEkmIzM5O20gYWxzbyBnb2luZyB0byBleGFtaW5lIGBpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oYC4gSSAqa25vdyogbG9ja3MgYXJlIGNyaXRpY2FsIGZvciB0aGlzIHNvcnQgb2YgY29uY3VycmVudCBhY2Nlc3MsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBsb2NrIG1lY2hhbmlzbXMgdXNlZCwgaG93IHRoZXkmIzM5O3JlIGFjcXVpcmVkIGFuZCByZWxlYXNlZCwgYW5kIHRoZWlyIHNwZWNpZmljIGJlaGF2aW9yIHJlbGF0ZWQgdG8gd29ya3F1ZXVlIGNvbnRleHQgaXMgcGFyYW1vdW50IHRvIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgY29uY3VycmVuY3kgYm90dGxlbmVja3MuIEkmIzM5O20gaG9waW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGUgd29ya3F1ZXVlIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBpZGVudGlmeSBhcmVhcyB3aGVyZSBjb250ZW50aW9uIG1pZ2h0IGFyaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2X3dvcmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0e1xuIDEwMjpcdFx0cmV0dXJuIG5ldGRldl93b3JrX2RlcXVldWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya19wZW5kaW5nLCBtYXNrKTtcbiAxMDM6XHR9XG4gMTA0Olx0RVhQT1JUX1NZTUJPTChuZXRkZXZfd29ya19jYW5jZWwpO1xuIDEwNTpcdFxuIDEwNjpcdHZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxuIDEwNzpcdHtcbiAxMDg6XHRcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCAwLCBldmVudHMpO1xuIDEwOTpcdH1cbiAxMTA6XHRcbiAxMTE6XHR1bnNpZ25lZCBsb25nXG4gMTEyOlx0X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXG4gMTEzOlx0e1xuIDExNDpcdFx0cmV0dXJuIG5ldGRldl93b3JrX2RlcXVldWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcsIG1hc2spO1xuIDExNTpcdH1cbiAxMTY6XHRcbiAxMTc6XHRzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4gMTE4Olx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgY29yZSlcbiAxMTk6XHR7XG4gMTIwOlx0XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4gMTIxOlx0XHRcdHJldHVybjtcbiAxMjI6XHRcbiAxMjM6XHRcdGlmIChjb3JlIFx1MDAyNiBORVRERVZfV09SS19SWF9NT0RFKVxuIDEyNDpcdFx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuIDEyNTpcdFx0aWYgKGV2ZW50cyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3dvcmspXG4gMTI2Olx0XHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb193b3JrKGRldiwgZXZlbnRzKTtcbiAxMjc6XHR9XG4gMTI4Olx0XG4gMTI5Olx0c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gMTMwOlx0e1xuIDEzMTpcdFx0d2hpbGUgKHRydWUpIHtcbiAxMzI6XHRcdFx0dW5zaWduZWQgbG9uZyBldmVudHMgPSAwLCBjb3JlID0gMDtcbiAxMzM6XHRcdFx0bmV0ZGV2aWNlX3RyYWNrZXIgdHJhY2tlcjtcbiAxMzQ6XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiAxMzU6XHRcbiAxMzY6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIDEzNzpcdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZuZXRkZXZfd29ya19saXN0KSkge1xuIDEzODpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIDEzOTpcdFx0XHRcdGJyZWFrO1xuIDE0MDpcdFx0XHR9XG4gMTQxOlx0XHRcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsXG4gMTQyOlx0XHRcdFx0XHQgICAgICAgd29ya19ub2RlKTtcbiAxNDM6XHRcdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcbiAxNDQ6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbiAxNDc6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIDE0ODpcdFx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkpIHtcbiAxNDk6XHRcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpO1xuIDE1MDpcdFx0XHRcdGNvcmUgPSBkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmc7XG4gMTUxOlx0XHRcdFx0ZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nID0gMDtcbiAxNTI6XHRcdFx0XHRldmVudHMgPSBkZXYtXHUwMDNld29ya19wZW5kaW5nO1xuIDE1MzpcdFx0XHRcdGRldi1cdTAwM2V3b3JrX3BlbmRpbmcgPSAwO1xuIDE1NDpcdFx0XHRcdC8qIFdlIHRvb2sgYW5vdGhlciByZWYgYWJvdmUgKi9cbiAxNTU6XHRcdFx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2LVx1MDAzZXdvcmtfdHJhY2tlcik7XG4gMTU2Olx0XG4gMTU3Olx0XHRcdFx0aWYgKCFkZXZfaXNhbGl2ZShkZXYpKVxuIDE1ODpcdFx0XHRcdFx0Y29yZSA9IGV2ZW50cyA9IDA7XG4gMTU5Olx0XHRcdH1cbiAxNjA6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gMTYxOlx0XG4gMTYyOlx0XHRcdG5ldGRldl93b3JrX3J1bihkZXYsIGV2ZW50cywgY29yZSk7XG4gMTYzOlx0XHRcdG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdChkZXYpO1xuIDE2NDpcdFxuIDE2NTpcdFx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2dHJhY2tlcik7XG4gMTY2Olx0XHR9XG4gMTY3Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IHVzZXI6CgoqKkRlZXAgRGl2ZSBpbnRvIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaXRzIGRlZmluaXRpb24uIEtub3dpbmcgdGhlIGtlcm5lbCYjMzk7cyBzdHJ1Y3R1cmUsIGBpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oYCBpcyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LCBvciB3aGVyZXZlciBpdCYjMzk7cyBhY3R1YWxseSBkZWZpbmVkLCBJJiMzOTtsbCB0cmFjayBpdCBkb3duLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhIGtleSBhc3BlY3Qgb2YgaG93IG5ldHdvcmsgZGV2aWNlIGxvY2tpbmcgaXMgaGFuZGxlZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBiZWhhdmlvciB0byBlZmZlY3RpdmVseSBkaWFnbm9zZSBvciBtb2RpZnkgYW55dGhpbmcgcmVsYXRlZCB0byBkZXZpY2UgaW50ZXJhY3Rpb25zLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfbG9ja19vcHNfY29tcGF0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9ODM9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9hc3NlcnRfbG9ja2VkX29wcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtODgtXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjg5OnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfbG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTkwLXtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTAxPV9fbmV0ZGV2X3B1dF9sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0KVxubmV0L2NvcmUvZGV2LmMtMTEwMi17XG5uZXQvY29yZS9kZXYuYzoxMTAzOlx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTEwNC1cdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlIFx1MDAzZSBORVRSRUdfUkVHSVNURVJFRCB8fFxuLS1cbm5ldC9jb3JlL2Rldi5oPTYwPURFRklORV9GUkVFKG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdCwgc3RydWN0IG5ldF9kZXZpY2UgKixcbi0tXG5uZXQvY29yZS9kZXYuaC02Mi1cbm5ldC9jb3JlL2Rldi5oOjYzOiNkZWZpbmUgZm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCB2YXJfbmFtZSwgaWZpbmRleClcdFxcXG5uZXQvY29yZS9kZXYuaC02NC1cdGZvciAoc3RydWN0IG5ldF9kZXZpY2UgKnZhcl9uYW1lIF9fZnJlZShuZXRkZXZfdW5sb2NrX29wc19jb21wYXQpID0gTlVMTDsgXFxcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTYxOD1pbnQgbmV0ZGV2X25sX3F1ZXVlX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNjM4LVx0fSBlbHNlIHtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6NjM5Olx0XHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIG5ldGRldixcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNjQwLVx0XHRcdFx0XHRcdCAgICAgICBjdHgtXHUwMDNlaWZpbmRleCkge1xuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9OTAxPWludCBuZXRkZXZfbmxfcXN0YXRzX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTkzOC1cbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6OTM5Olx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTk0MC1cdFx0ZXJyID0gbmV0ZGV2X25sX3FzdGF0c19nZXRfZHVtcF9vbmUobmV0ZGV2LCBzY29wZSwgc2tiLFxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM9MTI5PXN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTQ1LVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNDY6XHRcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTQ3LVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4tLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM9NTg9aW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtNzUtXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYzo3NjpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTc3LVx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYoXHUwMDI2cmVxX2luZm8sIHRiLFxuLS1cbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jPTMxOT1pbnQgZXRobmxfYWN0X2NhYmxlX3Rlc3RfdGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtMzQyLVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM6MzQzOlx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtMzQ0LVx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYoXHUwMDI2cmVxX2luZm8sIHRiLFxuLS1cbm5ldC9ldGh0b29sL21vZHVsZS5jPTQxNz1pbnQgZXRobmxfYWN0X21vZHVsZV9md19mbGFzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL21vZHVsZS5jLTQzMS1cbm5ldC9ldGh0b29sL21vZHVsZS5jOjQzMjpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL21vZHVsZS5jLTQzMy1cdHJldCA9IGV0aG5sX29wc19iZWdpbihkZXYpO1xuLS1cbm5ldC9ldGh0b29sL3Jzcy5jPTQ2OD1pbnQgZXRobmxfcnNzX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2V0aHRvb2wvcnNzLmMtNDczLVxubmV0L2V0aHRvb2wvcnNzLmM6NDc0Olx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvZXRodG9vbC9yc3MuYy00NzUtXHRcdGlmIChjdHgtXHUwMDNlbWF0Y2hfaWZpbmRleCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZW1hdGNoX2lmaW5kZXggIT0gY3R4LVx1MDAzZWlmaW5kZXgpXG4tLVxubmV0L2V0aHRvb2wvcnNzLmM9MTAwMj1pbnQgZXRobmxfcnNzX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvcnNzLmMtMTAzNi1cbm5ldC9ldGh0b29sL3Jzcy5jOjEwMzc6XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG5uZXQvZXRodG9vbC9yc3MuYy0xMDM4LVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jPTExNTA9aW50IGV0aG5sX3Jzc19kZWxldGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jLTExNzctXG5uZXQvZXRodG9vbC9yc3MuYzoxMTc4Olx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvcnNzLmMtMTE3OS1cbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYz00NzM9aW50IGV0aG5sX3RzaW5mb19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4MS1cbm5ldC9ldGh0b29sL3RzaW5mby5jOjQ4MjpcdFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDgzLVx0XHRyZXQgPSBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0X3RvcG8oc2tiLCBkZXYsIGNiKTtcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYy00ODctXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODg6XHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIGRldiwgY3R4LVx1MDAzZXBvc19pZmluZGV4KSB7XG5uZXQvZXRodG9vbC90c2luZm8uYy00ODktXHRcdHJldCA9IGV0aG5sX3RzaW5mb19kdW1wX29uZV9uZXRfdG9wbyhza2IsIGRldiwgY2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXQgRGV2aWNlIExvY2tpbmcgTWVjaGFuaXNtKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIG5ldCBkZXZpY2UgbG9ja2luZy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmhgLCBzcGVjaWZpY2FsbHkgbGluZXMgODAgdGhyb3VnaCAxMjAuIEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoZSBjb3JlIGxvY2tpbmcgcHJpbWl0aXZlcy4gQXJlIHRoZXkgdXNpbmcgc3BpbmxvY2tzLCBtdXRleGVzLCBSQ1UsIG9yIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGFwcHJvYWNoPyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBjb250ZXh0OyB3aGF0IGFyZSB0aGV5IHByb3RlY3RpbmcsIGFuZCBob3cgaXMgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgZGVzaWduZWQgdG8gaW50ZXJhY3Qgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcz8gSSBhbnRpY2lwYXRlIGEgY29tYmluYXRpb24gb2YgdGVjaG5pcXVlcywgZGVwZW5kaW5nIG9uIHRoZSBmcmVxdWVuY3kgb2YgYWNjZXNzIGFuZCB0aGUgcG90ZW50aWFsIGZvciBjb250ZW50aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGNvbW1lbnRzIGFyZSBoZWxwZnVsIGluIGNsYXJpZnlpbmcgdGhlIGludGVudC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgZGVzaWduIHBoaWxvc29waHkgYmVoaW5kIHRoaXMgY3J1Y2lhbCBsb2NraW5nIHNldHVwLiBIb3BlZnVsbHksIHRoZSBjb2RlIGNvbW1lbnRzIG9mZmVyIHNvbWUgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0XHRuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGRldik7XG4gIDgxOlx0fVxuICA4MjpcdFxuICA4MzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgODQ6XHR7XG4gIDg1Olx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAgODY6XHRcdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoZGV2KTtcbiAgODc6XHR9XG4gIDg4Olx0XG4gIDg5Olx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgOTA6XHR7XG4gIDkxOlx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAgOTI6XHRcdFx0bmV0ZGV2X2xvY2soZGV2KTtcbiAgOTM6XHRcdGVsc2VcbiAgOTQ6XHRcdFx0cnRubF9sb2NrKCk7XG4gIDk1Olx0fVxuICA5NjpcdFxuICA5NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgOTg6XHR7XG4gIDk5Olx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAxMDA6XHRcdFx0bmV0ZGV2X3VubG9jayhkZXYpO1xuIDEwMTpcdFx0ZWxzZVxuIDEwMjpcdFx0XHRydG5sX3VubG9jaygpO1xuIDEwMzpcdH1cbiAxMDQ6XHRcbiAxMDU6XHQvKiBNYXRjaGluZyBcJiMzNDtvcHMgcHJvdGVjdGVkXCYjMzQ7IGNhdGVnb3J5IGZyb20gbmV0ZGV2aWNlLmggKi9cbiAxMDY6XHRzdGF0aWMgaW5saW5lIGludCBuZXRkZXZfaXNfbG9ja2VkX29wc19jb21wYXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAxMDc6XHR7XG4gMTA4Olx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAxMDk6XHRcdFx0cmV0dXJuIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4gMTEwOlx0XHRyZXR1cm4gbG9ja2RlcF9ydG5sX2lzX2hlbGQoKTtcbiAxMTE6XHR9XG4gMTEyOlx0XG4gMTEzOlx0c3RhdGljIGlubGluZSBpbnQgbmV0ZGV2X2xvY2tfY21wX2ZuKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqYSxcbiAxMTQ6XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGxvY2tkZXBfbWFwICpiKVxuIDExNTpcdHtcbiAxMTY6XHRcdGlmIChhID09IGIpXG4gMTE3Olx0XHRcdHJldHVybiAwO1xuIDExODpcdFxuIDExOTpcdFx0LyogQWxsb3cgbG9ja2luZyBtdWx0aXBsZSBkZXZpY2VzIG9ubHkgdW5kZXIgcnRubF9sb2NrLFxuIDEyMDpcdFx0ICogdGhlIGV4YWN0IG9yZGVyIGRvZXNuJiMzOTt0IG1hdHRlci5cbiAxMjE6XHRcdCAqIE5vdGUgdGhhdCB1cHBlciBkZXZpY2VzIGRvbiYjMzk7dCBsb2NrIHRoZWlyIG9wcywgc28gbmVzdGluZ1xuIDEyMjpcdFx0ICogbW9zdGx5IGhhcHBlbnMgaW4gYmF0Y2hlZCBkZXZpY2UgcmVtb3ZhbCBmb3Igbm93LlxuIDEyMzpcdFx0ICovXG4gMTI0Olx0XHRyZXR1cm4gbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSA/IC0xIDogMTtcbiAxMjU6XHR9XG4gMTI2Olx0XG4gMTI3Olx0I2RlZmluZSBuZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3NlcyhkZXYpXHRcdFx0XHRcXFxuIDEyODpcdHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAxMjk6XHRcdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcWRpc2NfdHhfYnVzeWxvY2tfa2V5O1x0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNDUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb2NraW5nIENoYW5nZXMgaW4gYG5ldGRldl93b3JrX3Byb2NgKioKCk9rYXksIHNvIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgaW4gYG5ldGRldl93b3JrX3Byb2NgIHdpdGhpbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgcHJldHR5IGJsdW50OiBpdCB3YXMgaG9sZGluZyB0aGUgYHJ0bmxfbG9jaygpYCAqdW5jb25kaXRpb25hbGx5KiBmb3IgdGhlIGVudGlyZSBsb29wIHRoYXQgcHJvY2Vzc2VzIG5ldHdvcmsgZGV2aWNlcywgYW5kIG9uIHRvcCBvZiB0aGF0LCBpdCB3YXMgYWxzbyBhY3F1aXJpbmcgdGhlIGRldmljZS1zcGVjaWZpYyBsb2NrLCBgbmV0ZGV2X2xvY2tfb3BzKGRldilgLiBUaGF0JiMzOTtzIGEgc2VyaW91cyBwb3RlbnRpYWwgYm90dGxlbmVjaywgZXNwZWNpYWxseSBpbiBoaWdoLWNvbmN1cnJlbmN5IHNjZW5hcmlvcy4KCk5vdywgdGhpbmdzIGFyZSBzaWduaWZpY2FudGx5IGRpZmZlcmVudC4gVGhlIGBydG5sX2xvY2soKWAgaXMgKmNvbXBsZXRlbHkqIHJlbW92ZWQgZnJvbSB0aGUgb3V0ZXIgbG9vcC4gSW5zdGVhZCwgdGhlIGxvY2tpbmcgaXMgbm93IGhhbmRsZWQgcGVyLWRldmljZS4gSW5zaWRlIHRoZSBsb29wLCB0aGUgcGF0Y2ggbm93IHVzZXMgYG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtgLiBUaGlzIGNsZXZlciBmdW5jdGlvbiBhY3F1aXJlcyBlaXRoZXIgYGRldi0mZ3Q7bG9ja2AgKmlmKiB0aGUgZGV2aWNlIGFjdHVhbGx5ICpuZWVkcyogdGhhdCBsb2NrIChgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWApIG9yLCBpZiB0aGUgZGV2aWNlIGRvZXNuJiMzOTt0IHJlcXVpcmUgaXQsIGZhbGxzIGJhY2sgdG8gdXNpbmcgYHJ0bmxfbG9jaygpYC4gQWZ0ZXIgZWFjaCBkZXZpY2UmIzM5O3Mgd29yayBpcyBjb21wbGV0ZWQsIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTtgIGlzIHVzZWQuCgpUaGlzIGlzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gbG9ja2luZyBzZW1hbnRpY3MuIEJlZm9yZSwgcmVnYXJkbGVzcyBvZiB0aGUgZGV2aWNlJiMzOTtzIHNwZWNpZmljIG5lZWRzLCBldmVyeSBjYWxsIHRvIGBuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpYCDigJMgaW5jbHVkaW5nIHRob3NlIHRvIGBuZXRpZl9yeF9tb2RlX3J1bihkZXYpYCBhbmQgYGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3dvcmsoZGV2LCBldmVudHMpYCDigJMgd2FzIGV4ZWN1dGVkICp1bmRlciogYHJ0bmxfbG9jaygpYC4gTm93LCBpdCYjMzk7cyBub3QuCgpOb3csIGNydWNpYWwgYml0cywgZHJpdmVycyB0aGF0IGltcGxlbWVudCBxdWV1ZSBtYW5hZ2VtZW50IG9yIHNoYXBlciBBUElzIGFyZSBydW5uaW5nIGZ1bmN0aW9ucyBsaWtlIGBuZG9fd29ya2AgYW5kIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgICh3aGljaCBpcyBjYWxsZWQgdGhyb3VnaCBgbmV0aWZfcnhfbW9kZV9ydW5gKSAqd2l0aG91dCogYHJ0bmxfbG9jaygpYCBiZWluZyBoZWxkLiBUaGV5JiMzOTtyZSBvbmx5IHVzaW5nIHRoZSBkZXZpY2UmIzM5O3Mgb3duIGBkZXYtJmd0O2xvY2tgISBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHBlcmZvcm1hbmNlIGJlbmVmaXQgc2hvdWxkIHN1cmZhY2UuIFdlJiMzOTt2ZSBlZmZlY3RpdmVseSByZXBsYWNlZCBhIGdsb2JhbCBsb2NrIHdpdGggcGVyLWRldmljZSBsb2NrcyBpbiBtYW55IGNhc2VzLgoKTm93LCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHNlZSAqd2hvKiBpcyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgb2YgYG5ldGRldl93b3JrX3NjaGVkYCwgYF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZGAsIGFuZCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgc2V0dGluZyB0aGUgcmVjZWl2ZSBtb2RlLCBhcyB3ZWxsIGFzIGBuZG9fd29ya2AsIGFuZCBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYCB0aGVtc2VsdmVzLiBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aG9zZSBleGFjdCBmdW5jdGlvbiBuYW1lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmRvX3dvcmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTMwMT1uZG9fY2hhbmdlX3J4X2ZsYWdzOlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zMDQtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6MzA1Om5kb193b3JrOlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTMwNi1cdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwmIzM0O29wcyBsb2NrZWRcJiMzNDsgZHJpdmVycyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYz0zNDg5PXN0YXRpYyBpbnQgc21va2Vfc3VibWl0KHN0cnVjdCBwcmVlbXB0X3Ntb2tlICpzbW9rZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYy0zNTM1LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmM6MzUzNjpzdGF0aWMgdm9pZCBzbW9rZV9jcmVzY2VuZG9fd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmMtMzUzNy17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmM9MzU1Nz1zdGF0aWMgaW50IHNtb2tlX2NyZXNjZW5kbyhzdHJ1Y3QgcHJlZW1wdF9zbW9rZSAqc21va2UsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYy0zNTg1LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmM6MzU4NjpcdFx0a3RocmVhZF9pbml0X3dvcmsoXHUwMDI2YXJnW2lkXS53b3JrLCBzbW9rZV9jcmVzY2VuZG9fd29yayk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYy0zNTg3LVx0XHRrdGhyZWFkX3F1ZXVlX3dvcmsod29ya2VyW2lkXSwgXHUwMDI2YXJnW2lkXS53b3JrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTEwNzE9c3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTE0My0gKlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxMTQ0OiAqIHZvaWQgKCpuZG9fd29yaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTQ1LSAqXHRSdW4gZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZChAZXZlbnRzKS5cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE0NTg9c3RydWN0IG5ldF9kZXZpY2Vfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE0NzctXHRcdFx0XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE0Nzg6XHR2b2lkXHRcdFx0KCpuZG9fd29yaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTQ3OS1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE4MjE9ZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE5NTQtICpcdEB3b3JrX3BlbmRpbmc6XHRcdERyaXZlci1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmssIHBhc3NlZCB0b1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxOTU1OiAqXHRcdFx0XHRuZG9fd29yaygpIChzZWUgbmV0ZGV2X3dvcmtfc2NoZWQoKSlcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk1Ni0gKlx0QHdvcmtfY29yZV9wZW5kaW5nOlx0Q29yZS1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmsgKE5FVERFVl9XT1JLXyopXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTA1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDYzLVx0Lm5kb19jaGFuZ2VfcnhfZmxhZ3NcdD0gdmxhbl9kZXZfY2hhbmdlX3J4X2ZsYWdzLFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTA2NDpcdC5uZG9fd29ya1x0XHQ9IHZsYW5fZGV2X3dvcmssXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDY1LVx0Lm5kb19ldGhfaW9jdGxcdFx0PSB2bGFuX2Rldl9pb2N0bCxcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTgzPUVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtOTAtICogQ2xlYXIgQG1hc2sgZnJvbSB0aGUgZGV2aWNlJiMzOTtzIHdvcmsgcGVuZGluZyBtYXNrLiBJZiBubyB3b3JrIGlzIGxlZnQgcGVuZGluZ1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo5MTogKiB0aGUgZGV2aWNlIGlzIGRlcXVldWVkIGFuZCBpdHMgbmRvX3dvcmsgd29uJiMzOTt0IGJlIGNhbGxlZC5cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtOTItICpcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTExNz1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMjQtXHRcdG5ldGlmX3J4X21vZGVfcnVuKGRldik7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEyNTpcdGlmIChldmVudHMgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb193b3JrKVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMjY6XHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb193b3JrKGRldiwgZXZlbnRzKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTI3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzODQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRGV2aWNlIE9wZXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gYHZsYW5fbmV0ZGV2X29wc2AgbGVhbnMgb24gYG5kb193b3JrYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IG1pbmQgaXMgYWxyZWFkeSByYWNpbmcsIG5hdHVyYWxseSwgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgbmV0d29yayBkZXZpY2Ugb3BlcmF0aW9ucyB1dGlsaXplIGBuZG9fd29ya2AsIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgLCBvciBgbmV0ZGV2X3dvcmtfc2NoZWRgLiBJdCYjMzk7cyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwcyBoZXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4gVGhpcyB3aWxsIGluZm9ybSBteSBkZXNpZ24gY2hvaWNlcywgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIG9yIHNlY3VyaXR5IHJldmlldywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfd29ya19zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q9MzA1PW5kb193b3JrOlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zMDgtXHRDb250ZXh0OiBwcm9jZXNzIChmcm9tIGEgd29yayBxdWV1ZSlcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDozMDk6XHROb3RlczogUnVucyBkZWZlcnJlZCB3b3JrIHNjaGVkdWxlZCB3aXRoIG5ldGRldl93b3JrX3NjaGVkKCkuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMzEwLVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTA3MT1zdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTQ0LSAqIHZvaWQgKCpuZG9fd29yaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxMTQ1OiAqXHRSdW4gZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZChAZXZlbnRzKS5cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTE0Ni0gKlx0UnVucyBpbiBwcm9jZXNzIGNvbnRleHQgdW5kZXIgdGhlIG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcJiMzNDtvcHNcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE4MjE9ZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE5NTQtICpcdEB3b3JrX3BlbmRpbmc6XHRcdERyaXZlci1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmssIHBhc3NlZCB0b1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxOTU1OiAqXHRcdFx0XHRuZG9fd29yaygpIChzZWUgbmV0ZGV2X3dvcmtfc2NoZWQoKSlcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk1Ni0gKlx0QHdvcmtfY29yZV9wZW5kaW5nOlx0Q29yZS1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmsgKE5FVERFVl9XT1JLXyopXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD01MjE5PXZvaWQgZGV2X2dldF90c3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnMpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MjIwLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MjIxOnZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MjIyLXVuc2lnbmVkIGxvbmcgbmV0ZGV2X3dvcmtfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzayk7XG4tLVxubmV0LzgwMjFxL3ZsYW4uYz0zNjg9c3RhdGljIGludCB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5uZXQvODAyMXEvdmxhbi5jLTQyNC1cbm5ldC84MDIxcS92bGFuLmM6NDI1Olx0XHRcdG5ldGRldl93b3JrX3NjaGVkKHZsYW5kZXYsIFZMQU5fV09SS19NVFUpO1xubmV0LzgwMjFxL3ZsYW4uYy00MjYtXHRcdH1cbi0tXG5uZXQvODAyMXEvdmxhbi5jLTQzMC1cdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KVxubmV0LzgwMjFxL3ZsYW4uYzo0MzE6XHRcdFx0bmV0ZGV2X3dvcmtfc2NoZWQodmxhbmRldiwgVkxBTl9XT1JLX0ZFQVRVUkVTKTtcbm5ldC84MDIxcS92bGFuLmMtNDMyLVx0XHRicmVhaztcbi0tXG5uZXQvODAyMXEvdmxhbi5jLTQzNi1cdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KVxubmV0LzgwMjFxL3ZsYW4uYzo0Mzc6XHRcdFx0bmV0ZGV2X3dvcmtfc2NoZWQodmxhbmRldiwgVkxBTl9XT1JLX0xJTktfU1RBVEUpO1xubmV0LzgwMjFxL3ZsYW4uYy00MzgtXHRcdGJyZWFrO1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM9Njc9dm9pZCBuZXRkZXZfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy03OC1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6Nzk6dm9pZCBuZXRkZXZfd29ya19zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODAte1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODItfVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo4MzpFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTQ4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYCBmdW5jdGlvbi4gVGhpcyBuYW1lIHNjcmVhbXMgJiMzNDtuZXR3b3JrIGRldmljZSBvcGVyYXRpb24mIzM0OyBhbmQgJiMzNDthc3luY2hyb25vdXMsJiMzNDsgaW1wbHlpbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG5ldHdvcmsgZHJpdmVyIGFuZCBhIG5vbi1ibG9ja2luZyBvcGVyYXRpb24gZm9yIHNldHRpbmcgdGhlIHJlY2VpdmUgbW9kZS4gRXNzZW50aWFsbHksIGl0IGhhbmRsZXMgc2V0dGluZyB0aGUgcmVjZWl2ZSBtb2RlIGZvciBhIG5ldHdvcmsgaW50ZXJmYWNlLCBidXQgaW4gYSB3YXkgdGhhdCBkb2VzbiYjMzk7dCBoYWx0IG90aGVyIHByb2Nlc3NlcyB3aGlsZSBpdCBkb2VzIGl0cyB3b3JrLiBNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlOiB0aGlzIGlzIGEgY29yZSBmdW5jdGlvbiwgcHJvYmFibHkgaW4gdGhlIGRyaXZlciYjMzk7cyBpbnRlcmZhY2UgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0ICYjMzQ7UlggbW9kZSYjMzQ7IGVuY29tcGFzc2VzIGhlcmUgLSBpcyBpdCBtdWx0aWNhc3QsIHByb21pc2N1b3VzLCBhbGwtZnJhbWVzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byB0aGUgcGFydGljdWxhciBuZXR3b3JrIGNhcmQgaXQgdGFyZ2V0cz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSwgYW5kIHdoYXQgaXQgZG9lcyBpbnRlcm5hbGx5LiBLbm93aW5nIHRoaXMgZ2l2ZXMgdGhlIGNvbnRleHQgb2Ygd2hhdCBzcGVjaWZpYyBSWCBtb2RlcyBhcmUgaW52b2x2ZWQuIEkmIzM5O2xsIGFsc28gd2FudCB0byBzZWUgaG93IHRoZSBhc3luYyBhc3BlY3QgaXMgaW1wbGVtZW50ZWQg4oCTIGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgd29yayBxdWV1ZSwgYSBjYWxsYmFjaywgdGhyZWFkcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgc2VhcmNoIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmRvX3NldF9yeF9tb2RlX2FzeW5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0yODg9bmRvX3NldF9yeF9tb2RlOlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0yOTAtXHRDb250ZXh0OiBCSHMgZGlzYWJsZWRcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDoyOTE6XHROb3RlczogRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBuZG9fc2V0X3J4X21vZGVfYXN5bmMgd2hpY2ggcnVuc1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5Mi1cdGluIHByb2Nlc3MgY29udGV4dC5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0yOTMtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6Mjk0Om5kb19zZXRfcnhfbW9kZV9hc3luYzpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0yOTUtXHRTeW5jaHJvbml6YXRpb246IG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcJiMzNDtvcHMgbG9ja2VkXCYjMzQ7IGRyaXZlcnMsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MjE2OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwb2liX25ldGRldl9vcHNfcGYgPSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjE3Ni1cdC5uZG9fdHhfdGltZW91dFx0XHQgPSBpcG9pYl90aW1lb3V0LFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MjE3NzpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdCA9IGlwb2liX3NldF9yeF9tb2RlX2FzeW5jLFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjE3OC1cdC5uZG9fZ2V0X2lmbGlua1x0XHQgPSBpcG9pYl9nZXRfaWZsaW5rLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jPTIxOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcG9pYl9uZXRkZXZfb3BzX3ZmID0ge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIxOTktXHQubmRvX3R4X3RpbWVvdXRcdFx0ID0gaXBvaWJfdGltZW91dCxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jOjIyMDA6XHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXHQgPSBpcG9pYl9zZXRfcnhfbW9kZV9hc3luYyxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIyMDEtXHQubmRvX2dldF9pZmxpbmtcdFx0ID0gaXBvaWJfZ2V0X2lmbGluayxcbi0tXG5kcml2ZXJzL25ldC9kdW1teS5jPTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHVtbXlfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kdW1teS5jLTkyLVx0Lm5kb192YWxpZGF0ZV9hZGRyXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxuZHJpdmVycy9uZXQvZHVtbXkuYzo5MzpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gc2V0X211bHRpY2FzdF9saXN0LFxuZHJpdmVycy9uZXQvZHVtbXkuYy05NC1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYz02OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhZGluMTE0MF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTY5OC1cdC5uZG9fdmFsaWRhdGVfYWRkciA9IGV0aF92YWxpZGF0ZV9hZGRyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM6Njk5Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luYyA9IGFkaW4xMTQwX3J4X21vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy03MDAtXHQubmRvX2V0aF9pb2N0bCA9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYz0zMjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm5nZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYy0zMjc0LVx0Lm5kb19nZXRfc3RhdHM2NFx0PSBibmdlX2dldF9zdGF0czY0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jOjMyNzU6XHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXHQ9IGJuZ2Vfc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMzI3Ni1cdC5uZG9fZmVhdHVyZXNfY2hlY2tcdD0gYm5nZV9mZWF0dXJlc19jaGVjayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjE2OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJueHRfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjE3Mi1cdC5uZG9fZ2V0X3N0YXRzNjRcdD0gYm54dF9nZXRfc3RhdHM2NCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE2MTczOlx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBibnh0X3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTYxNzQtXHQubmRvX2V0aF9pb2N0bFx0XHQ9IGJueHRfaW9jdGwsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jPTU2ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVuZXRjNF9uZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtNTY5LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gZW5ldGNfcGZfc2V0X21hY19hZGRyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jOjU3MDpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gZW5ldGM0X3BmX3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTU3MS1cdC5uZG9fc2V0X2ZlYXR1cmVzXHQ9IGVuZXRjNF9wZl9zZXRfZmVhdHVyZXMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYz01MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWF2Zl9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTEzNy1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGlhdmZfeG1pdF9mcmFtZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM6NTEzODpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gaWF2Zl9zZXRfcnhfbW9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTEzOS1cdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jPTUzMjQ9Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1seDVlX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01MzMwLVx0Lm5kb19nZXRfc3RhdHM2NCAgICAgICAgID0gbWx4NWVfZ2V0X3N0YXRzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1MzMxOlx0Lm5kb19zZXRfcnhfbW9kZV9hc3luYyAgID0gbWx4NWVfc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTUzMzItXHQubmRvX3NldF9tYWNfYWRkcmVzcyAgICAgPSBtbHg1ZV9zZXRfbWFjLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmM9MTE5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1seHN3X3NwX3BvcnRfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jLTExOTYtXHQubmRvX3NldHVwX3RjICAgICAgICAgICA9IG1seHN3X3NwX3NldHVwX3RjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYzoxMTk3Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBtbHhzd19zcF9zZXRfcnhfbW9kZV9hc3luYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmMtMTE5OC1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IG1seHN3X3NwX3BvcnRfc2V0X21hY19hZGRyZXNzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM9NTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZmJuaWNfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTU2Ni1cdC5uZG9fY2hhbmdlX210dVx0XHQ9IGZibmljX2NoYW5nZV9tdHUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jOjU2NzpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gZmJuaWNfc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTU2OC1cdC5uZG9fZ2V0X3N0YXRzNjRcdD0gZmJuaWNfZ2V0X3N0YXRzNjQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbmV0ZGV2LmM9MjUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3Bhcng1X3BvcnRfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9uZXRkZXYuYy0yNTYtXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHNwYXJ4NV9wb3J0X3htaXRfaW1wbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X25ldGRldi5jOjI1NzpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmMgID0gc3Bhcng1X3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbmV0ZGV2LmMtMjU4LVx0Lm5kb19nZXRfcGh5c19wb3J0X25hbWUgPSBzcGFyeDVfcG9ydF9nZXRfcGh5c19wb3J0X25hbWUsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTYzNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy02MzctXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBuc2ltX3N0YXJ0X3htaXQsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NjM4Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBuc2ltX3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTYzOS1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9NjYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNpbV92Zl9uZXRkZXZfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTY2Mi1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IG5zaW1fc3RhcnRfeG1pdF92ZixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzo2NjM6XHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXHQ9IG5zaW1fc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNjY0LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gZXRoX21hY19hZGRyLFxuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jPTMzMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGtpdF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzNS1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IG5ldGtpdF94bWl0LFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MzM2Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBuZXRraXRfc2V0X211bHRpY2FzdCxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzNy1cdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IG5ldGtpdF9zZXRfaGVhZHJvb20sXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDcxPXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMzEtICpcdENhbm5vdCBzbGVlcCwgY2FsbGVkIHdpdGggbmV0aWZfYWRkcl9sb2NrX2JoIGhlbGQuXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMzI6ICpcdERlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgbmRvX3NldF9yeF9tb2RlX2FzeW5jLlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTMzLSAqXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMzQ6ICogaW50ICgqbmRvX3NldF9yeF9tb2RlX2FzeW5jKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTM1LSAqXHRcdFx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xNDU4PXN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xNDczLVx0dm9pZFx0XHRcdCgqbmRvX3NldF9yeF9tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTQ3NDpcdGludFx0XHRcdCgqbmRvX3NldF9yeF9tb2RlX2FzeW5jKShcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTQ3NS1cdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTM4ND1pbnQgcmVnaXN0ZXJfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTE0NDAtXHQgICAgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZGV2LmM6MTE0NDE6XHQgICAgIWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYylcbm5ldC9jb3JlL2Rldi5jOjExNDQyOlx0XHRuZXRkZXZfV0FSTihkZXYsIFwmIzM0O29wcy1sb2NrZWQgZHJpdmVycyBzaG91bGQgdXNlIG5kb19zZXRfcnhfbW9kZV9hc3luY1xcblwmIzM0Oyk7XG5uZXQvY29yZS9kZXYuYy0xMTQ0My1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEyNzc9dm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI5NC1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTI5NTpcdGlmIChvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyOTYtXHRcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMxNS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMxNjpcdGlmIChvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMTc6XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMoZGV2LCBcdTAwMjZ1Y19zbmFwLCBcdTAwMjZtY19zbmFwKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMxOC1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzNjI9dm9pZCBfX2Rldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM3My1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3NDpcdGlmIChvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jIHx8IG9wcy1cdTAwM2VuZG9fY2hhbmdlX3J4X2ZsYWdzIHx8XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNzUtXHQgICAgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkge1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTM5MD12b2lkIGRldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQwMC0gKlxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxNDAxOiAqIERyaXZlcnMgaW1wbGVtZW50aW5nIG5kb19zZXRfcnhfbW9kZV9hc3luYygpIGhhdmUgdGhlaXIgcnggbW9kZSBjYWxsYmFja1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDAyLSAqIGV4ZWN1dGVkIGZyb20gYSB3b3JrcXVldWUuIFRoaXMgYWxsb3dzIHRoZSBjYWxsYmFjayB0byBzbGVlcCwgYnV0IG1lYW5zXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NTQxPXN0YXRpYyBpbnQgZGV2X2lmc2lvYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqZGF0YSxcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01ODgtXHRjYXNlIFNJT0NBRERNVUxUSTpcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU4OTpcdFx0aWYgKCghb3BzLVx1MDAzZW5kb19zZXRfcnhfbW9kZSBcdTAwMjZcdTAwMjYgIW9wcy1cdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMpIHx8XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01OTAtXHRcdCAgICBpZnItXHUwMDNlaWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gQUZfVU5TUEVDKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwMC1cdGNhc2UgU0lPQ0RFTE1VTFRJOlxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NjAxOlx0XHRpZiAoKCFvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYykgfHxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwMi1cdFx0ICAgIGlmci1cdTAwM2VpZnJfaHdhZGRyLnNhX2ZhbWlseSAhPSBBRl9VTlNQRUMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Nzg4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIHBhdHRlcm4ganVtcHMgb3V0OiBgZHVtbXlgLCBgbmV0a2l0YCwgYG5zaW1gLCBhbmQgYHZsYW5gICg4MDIxcSkgYWxsIHJlbHkgb24gYG5kb19zZXRfcnhfbW9kZV9hc3luY2Agb3IgYG5kb193b3JrYCwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgZGVmZXJyZWQgbmV0ZGV2IHdvcmtxdWV1ZSBwcm9jZXNzaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcsIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGluZ3MuIFdoYXQmIzM5O3MgY2hhbmdlZCBpcyBob3cgdGhlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIHdvcmtzIGZvciB0aGF0IGRlZmVycmVkIHdvcmtxdWV1ZSwgcmVwbGFjaW5nIHRoZSBnbG9iYWwgYHJ0bmxfbG9jaygpYCB3aXRoIHBlci1kZXZpY2UgYG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KWAgYW5kIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KWAuCgpUaW1lIHRvIGFzc2VzcyB0aGlzIGFnYWluc3QgbXkgY3JpdGVyaWEuIEZpcnN0LCAqKnJlYWNoYWJpbGl0eSoqLiBXZSYjMzk7cmUgdGFsa2luZyBjb3JlIG5ldHdvcmtpbmcsIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gVGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgaGl0IHdoZW5ldmVyIG5ldGRldiB3b3JrIGdldHMgc2NoZWR1bGVkLCBhbmQgdGhhdCBjYW4gaGFwcGVuIHdpdGggVkxBTiBldmVudHMsIFJYIG1vZGUgY2hhbmdlcywgb3IgYW55IGtpbmQgb2YgbmV0d29yayBkZXZpY2UsIGluY2x1ZGluZyB2aXJ0dWFsIG9uZXMgbGlrZSB0aGUgZHVtbXkgaW50ZXJmYWNlLCBuZXRraXQsIG5ldGRldnNpbSwgYW5kIG9mIGNvdXJzZSBhbGwgdGhlIHJlZ3VsYXIgbmV0d29yayBpbnRlcmZhY2VzLiBHb29kIG5ld3MsIGl0JiMzOTtzIHRvdGFsbHkgcmVhY2hhYmxlIGluIFN5emthbGxlciBhbmQgYSBzdGFuZGFyZCBRRU1VIFZNIHNldHVwLCBzbyB0aGF0IGNoZWNrcyBvdXQuCgpOZXh0LCAqKldvcnRoRnV6emluZyoqLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSB0b3VjaGluZyBhIGNvcmUgc3Vic3lzdGVtIOKAkyBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2Ag4oCTIGFuZCBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIHRoZSBjb25jdXJyZW5jeSBtb2RlbCBhbmQgbG9ja2luZyBhcm91bmQgdGhlIHdvcmtxdWV1ZSBoYW5kbGVyLiBXZSYjMzk7cmUgbW92aW5nIGZyb20gYSBnbG9iYWwgbG9jayAoYHJ0bmxfbG9ja2ApIHRvIHBlci1kZXZpY2UgbG9ja3MuIFRoaXMgKnNjcmVhbXMqIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBsb2NrZGVwIHNwbGF0cy4gVGhlcmUmIzM5O3MgYWxzbyB0aGUgY2hhbmNlIG9mIHJlZ3Jlc3Npb25zIHdpdGggY29uY3VycmVudCBuZXRsaW5rIG9yIGlvY3RsIG9wZXJhdGlvbnMgd2hpbGUgbmV0ZGV2IHdvcmsgaXMgcnVubmluZy4gSSYjMzk7ZCBzYXksIHdpdGhvdXQgYSBkb3VidCwgYFdvcnRoRnV6emluZyA9IHRydWVgLiBUaGlzIGlzIHJpcGUgZm9yIGV4cGxvaXRhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgKipGb2N1c1N5bWJvbHMqKiBhbmQgKipFbmFibGVDb25maWdzKiouIFRoZSBwYXRjaCBpbXBhY3RzIHRoZXNlIGZ1bmN0aW9uczoKCjEuICBgbmV0ZGV2X3dvcmtfcHJvY2AgaW4gYG5ldC9jb3JlL25ldGRldl93b3JrLmNgICh0aGlzIGlzIHRoZSBtb2RpZmllZCB3b3JrIGhhbmRsZXIpCjIuICBGdW5jdGlvbnMgcmVsYXRlZCB0byBpdDogYG5ldGRldl93b3JrX3J1bmAsIGBuZXRkZXZfd29ya19lbnF1ZXVlYCwgYG5ldGRldl93b3JrX3NjaGVkYCwgYG5ldGlmX3J4X21vZGVfcnVuYCwgYHZsYW5fZGV2X3dvcmtgLgoKT2theSwgZGlnZ2luZyBpbnRvIHRoZSBjb2RlOiBgbmV0ZGV2X3dvcmtfcHJvY2AgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IHdvcmsgaGFuZGxlcnMgbWlnaHQgYmUgaW5saW5lZC4gYG5ldGRldl93b3JrX3J1bmAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBgbmV0ZGV2X3dvcmtfc2NoZWRgLCBgbmV0ZGV2X3dvcmtfY2FuY2VsYCwgYG5ldGRldl93b3JrX2NhbmNlbF9hbGxgLCBgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkYCwgYW5kIGBfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsYCBhcmUgZXhwb3J0ZWQvbm9uLXN0YXRpYyBzeW1ib2xzLiBgbmV0aWZfcnhfbW9kZV9ydW5gIGlzIGluIGBuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jYC4gQW5kIGB2bGFuX2Rldl93b3JrYCBpcyBvdmVyIGluIGBuZXQvODAyMXEvdmxhbl9kZXYuY2AuIFdlIG5lZWQgdG8gc2NydXRpbml6ZSBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AgZm9yIGhvdyBgbmV0aWZfcnhfbW9kZV9ydW5gIHdvcmtzIHRvby4gVGhpcyBuZWVkcyBhIGNsb3NlciBsb29rIGF0IHRoYXQgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0aWZfcnhfbW9kZV9ydW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2Lmg9MTY5PXZvaWQgbmV0aWZfcnhfbW9kZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xubmV0L2NvcmUvZGV2Lmg6MTcwOnZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5uZXQvY29yZS9kZXYuaC0xNzEtdm9pZCBuZXRpZl9yeF9tb2RlX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMjcxPXZvaWQgbmV0aWZfcnhfbW9kZV9jYW5jZWxfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyNzYtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyNzc6dm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjc4LXtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTE0MDg9dm9pZCBuZXRpZl9yeF9tb2RlX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE0MTAtXHRpZiAoX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpKVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxNDExOlx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDEyLX1cbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTExNz1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMjMtXHRpZiAoY29yZSBcdTAwMjYgTkVUREVWX1dPUktfUlhfTU9ERSlcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTI0Olx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMjUtXHRpZiAoZXZlbnRzIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fd29yaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byBWTEFOIERldmljZSBXb3JrKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhlIFZMQU4gZGV2aWNlJiMzOTtzIHdvcmtpbmdzLCBhbmQgc3BlY2lmaWNhbGx5IHRoZSAmIzM0O3ZsYW5fZGV2X3dvcmsmIzM0OyBmdW5jdGlvbi4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIHByb2JsZW0sIGlzIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byBgbmV0LzgwMjFxL3ZsYW5fZGV2LmNgLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBoZWFydCBvZiB0aGUgVkxBTiBkZXZpY2UgbG9naWMgaW4gdGhhdCBmaWxlLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyB3aGVuIHRyb3VibGVzaG9vdGluZyBvciBhbmFseXppbmcgVkxBTi1yZWxhdGVkIG9wZXJhdGlvbnMsIGFuZCBJIGFudGljaXBhdGUgdGhhdCBgdmxhbl9kZXZfd29ya2Agd2lsbCByZXZlYWwgdGhlIGtleSBhY3Rpb25zIG9yIHByb2Nlc3NlcyBiZWluZyB0cmlnZ2VyZWQgYW5kIGhhbmRsZWQgcmVsYXRlZCB0byBWTEFOIGRldmljZSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmxhbl9kZXZfd29yayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvODAyMXEvdmxhbi5oPTEyNj12b2lkIHZsYW5fZmlsdGVyX2Ryb3BfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XG5uZXQvODAyMXEvdmxhbi5oLTEyNy1cbm5ldC84MDIxcS92bGFuLmg6MTI4Oi8qIG5ldGRldl93b3JrIGV2ZW50cyBwcm9wYWdhdGVkIGZyb20gdGhlIHJlYWwgZGV2aWNlLCBzZWUgdmxhbl9kZXZfd29yaygpLiAqL1xubmV0LzgwMjFxL3ZsYW4uaC0xMjktZW51bSB7XG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTAwMT1zdGF0aWMgdm9pZCB2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTAyMi1cbm5ldC84MDIxcS92bGFuX2Rldi5jOjEwMjM6c3RhdGljIHZvaWQgdmxhbl9kZXZfd29yayhzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDI0LXtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTEwNjMtXHQubmRvX2NoYW5nZV9yeF9mbGFnc1x0PSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsXG5uZXQvODAyMXEvdmxhbl9kZXYuYzoxMDY0Olx0Lm5kb193b3JrXHRcdD0gdmxhbl9kZXZfd29yayxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEwNjUtXHQubmRvX2V0aF9pb2N0bFx0XHQ9IHZsYW5fZGV2X2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIE5ldHdvcmsgQ29yZSBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHRpbWUgdG8gZ2V0IGdyYW51bGFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AgaXMgY29tcGlsZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmN5IGFuZCBidWlsZCBydWxlcyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgYXJlIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhhdCBmaWxlIHRvIHNlZSB0aGUgc3BlY2lmaWMgZmxhZ3MsIG9iamVjdCBmaWxlcywgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgdGhhdCBpbmZsdWVuY2UgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoYXQgcGFydGljdWxhciBDIGZpbGUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgYWZmZWN0IGl0cyBpbmNsdXNpb24gb3IgYmVoYXZpb3IgYmFzZWQgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgbmV0ZGV2IHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0xMj1vYmoteVx0XHQgICAgICYjNDM7PSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG4tLVxubmV0L2NvcmUvTWFrZWZpbGUtMTUtXHRcdFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlOjE2Olx0XHRcdG5ldGRldi1nZW5sLm8gbmV0ZGV2LWdlbmwtZ2VuLm8gbmV0ZGV2X3dvcmsubyBnc28ub1xubmV0L2NvcmUvTWFrZWZpbGUtMTctXG4tLVxubmV0L2NvcmUvZGV2LmM9MTI0NDE9dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyNTA4LVx0XHRkZXZfbWVtb3J5X3Byb3ZpZGVyX3VuaW5zdGFsbChkZXYpO1xubmV0L2NvcmUvZGV2LmM6MTI1MDk6XHRcdG5ldGRldl93b3JrX2NhbmNlbF9hbGwoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTEyNTEwLVx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5oPTE3Mj12b2lkIG5ldGlmX3J4X21vZGVfY2FuY2VsX3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldi5oLTE3NC0vKiBFdmVudHMgZm9yIHRoZSBhc3luYyBuZXRkZXYgd29yaywgdHJhY2tlZCBpbiBuZXRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcuICovXG5uZXQvY29yZS9kZXYuaDoxNzU6ZW51bSBuZXRkZXZfd29ya19jb3JlIHtcbm5ldC9jb3JlL2Rldi5oLTE3Ni1cdE5FVERFVl9XT1JLX1JYX01PREVcdD0gQklUKDApLFx0LyogcnVuIHRoZSByeF9tb2RlIHVwZGF0ZSAqL1xuLS1cbm5ldC9jb3JlL2Rldi5oLTE3OC1cbm5ldC9jb3JlL2Rldi5oOjE3OTp2b2lkIF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KTtcbm5ldC9jb3JlL2Rldi5oLTE4MC11bnNpZ25lZCBsb25nXG5uZXQvY29yZS9kZXYuaDoxODE6X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spO1xubmV0L2NvcmUvZGV2Lmg6MTgyOnZvaWQgbmV0ZGV2X3dvcmtfY2FuY2VsX2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbm5ldC9jb3JlL2Rldi5oLTE4My1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzMzU9c3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzM2LXtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzNzpcdF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzM4LX1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTE0MDg9dm9pZCBuZXRpZl9yeF9tb2RlX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQwOS17XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjE0MTA6XHRpZiAoX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpKVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDExLVx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTEtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEyOnN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTMtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE0Oi8qIEBuZXRkZXZfd29ya19sb2NrIHByb3RlY3RzOlxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNTogKiAgLSBAbmV0ZGV2X3dvcmtfbGlzdFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNi0gKiAgLSB3aXRoaW4gdGhlIGxpc3QgZW50cmllcyAoc3RydWN0IG5ldF9kZXZpY2UgZmllbGRzKTpcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTIxLSAqL1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoyMjpzdGF0aWMgTElTVF9IRUFEKG5ldGRldl93b3JrX2xpc3QpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoyMzpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ldGRldl93b3JrX2xvY2spO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoyNDpzdGF0aWMgREVDTEFSRV9XT1JLKG5ldGRldl93b3JrLCBuZXRkZXZfd29ya19wcm9jKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMjUtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjI2OnN0YXRpYyB2b2lkIG5ldGRldl93b3JrX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTI3LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBjb3JlKVxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMzEtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjMyOlx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0zMy1cdGlmICghZGV2X2lzYWxpdmUoZGV2KSkge1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzozNDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTM1LVx0XHRyZXR1cm47XG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0zNy1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpKSB7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjM4Olx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUsIFx1MDAyNm5ldGRldl93b3JrX2xpc3QpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0zOS1cdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya190cmFja2VyLCBHRlBfQVRPTUlDKTtcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTQyLVx0ZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nIHw9IGNvcmU7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjQzOlx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTQ0LVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo0NTpcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bmV0ZGV2X3dvcmspO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy00Ni19XG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYz00OD1zdGF0aWMgdW5zaWduZWQgbG9uZ1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo0OTpuZXRkZXZfd29ya19kZXF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgKnBlbmRpbmcsXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTUwLVx0XHQgICAgdW5zaWduZWQgbG9uZyBtYXNrKVxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNTMtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjU0Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy01NS1cdGV2ZW50cyA9ICpwZW5kaW5nIFx1MDAyNiBtYXNrO1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNjEtXHR9XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjYyOlx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTYzLVxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNjYtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjY3OnZvaWQgbmV0ZGV2X3dvcmtfY2FuY2VsX2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy02OC17XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjY5Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy03MC1cdGRldi1cdTAwM2V3b3JrX3BlbmRpbmcgPSAwO1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNzUtXHR9XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjc2Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTc3LX1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNzgtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjc5OnZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTgwLXtcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6ODE6XHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgZXZlbnRzLCAwKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODItfVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo4MzpFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODQtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTg1LS8qKlxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo4NjogKiBuZXRkZXZfd29ya19jYW5jZWwoKSAtIGNhbmNlbCBzZWxlY3RlZCB3b3JrIGZvciBhIG5ldGRldlxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy04Ny0gKiBAZGV2OiBuZXRfZGV2aWNlXG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy05OS0gKi9cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTAwOnVuc2lnbmVkIGxvbmcgbmV0ZGV2X3dvcmtfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzaylcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTAxLXtcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTAyOlx0cmV0dXJuIG5ldGRldl93b3JrX2RlcXVldWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya19wZW5kaW5nLCBtYXNrKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTAzLX1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTA0OkVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfY2FuY2VsKTtcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTA1LVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMDY6dm9pZCBfX25ldGRldl93b3JrX2NvcmVfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTEwNy17XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEwODpcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCAwLCBldmVudHMpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMDktfVxuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM9MTExPXVuc2lnbmVkIGxvbmdcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTEyOl9fbmV0ZGV2X3dvcmtfY29yZV9jYW5jZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMTMte1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMTQ6XHRyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX2NvcmVfcGVuZGluZywgbWFzayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTExNS19XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTExNi1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTE3OnN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTE4LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGNvcmUpXG4tLVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMjgtXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEyOTpzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTMwLXtcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTEzNS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTM2Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEzNzpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCkpIHtcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTM4Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMzktXHRcdFx0YnJlYWs7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0MC1cdFx0fVxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNDE6XHRcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0Mi1cdFx0XHRcdCAgICAgICB3b3JrX25vZGUpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNDMtXHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2dHJhY2tlciwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE0NDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0NS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTQ2LVx0XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE0NzpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNDgtXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKSkge1xuLS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTU5LVx0XHR9XG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE2MDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE2MS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTYyOlx0XHRuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpO1xubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNjMtXHRcdG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdChkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYwMQoJCQkJCQkJb3V0cHV0OiAyMTMKCQkJCQkJCXRob3VnaHRzOiA2MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgbmV0L2NvcmUvbmV0ZGV2X3dvcmsubyBhbmQgQXNzb2NpYXRlZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsub2AgaXMgYnVpbHQgdW5jb25kaXRpb25hbGx5IGFzIGxvbmcgYXMgbmV0d29ya2luZyBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBjb25maXJtZWQgdGhpcyBieSBjaGVja2luZyB0aGUgYG5ldC9NYWtlZmlsZWAsIHdoZXJlIGBvYmoteWAgaW5jbHVkZXMgYGNvcmUvYCB3aGVuIGBDT05GSUdfTkVUYCBpcyBzZXQuICBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgaXMgdGhlcmUgYW55dGhpbmcgKmVsc2UqIHRoYXQgbWlnaHQgYmUgbmVlZGVkPyBObywgYENPTkZJR19ORVRgIGlzIHRoZSBiYXNlIHJlcXVpcmVtZW50LiBJIHF1aWNrbHkgY2hlY2tlZCBvdGhlciBjb21tb24gbmV0d29ya2luZyBvcHRpb25zIGxpa2UgYENPTkZJR19WTEFOXzgwMjFRYCwgYENPTkZJR19ORVRERVZTSU1gLCBhbmQgYENPTkZJR19EVU1NWWAsIGJ1dCBgQ09ORklHX05FVGAgYWxvbmUgaXMgdGhlIGtleSBlbmFibGVyIGhlcmUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgaW5jbHVkZWQ6IGBuZXRkZXZfd29ya19wcm9jYCwgYG5ldGRldl93b3JrX3J1bmAsIGBuZXRkZXZfd29ya19zY2hlZGAsIGBuZXRkZXZfd29ya19jYW5jZWxgLCBgbmV0ZGV2X3dvcmtfY2FuY2VsX2FsbGAsIGBfX25ldGRldl93b3JrX2NvcmVfc2NoZWRgLCBgX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbGAsIGFuZCBgbmV0aWZfcnhfbW9kZV9ydW5gLgoKT2theSwgSSYjMzk7dmUgZ290IHRoZSBtYWluIHdvcmtlciBmdW5jdGlvbiwgYG5ldGRldl93b3JrX3Byb2NgLCB3aGljaCBpcyB0aGUgb25lIGJlaW5nIG1vZGlmaWVkLCBhbG9uZyB3aXRoIGl0cyBleGVjdXRpb24gZnVuY3Rpb24gYG5ldGRldl93b3JrX3J1bmAsIHRoZSBBUEkgZW50cnkgcG9pbnRzIGBuZXRkZXZfd29ya19zY2hlZGAsIGBuZXRkZXZfd29ya19jYW5jZWxgLCBhbmQgYG5ldGRldl93b3JrX2NhbmNlbF9hbGxgLiBQbHVzLCB0aG9zZSBpbXBvcnRhbnQgaGVscGVycywgYF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZGAsIGFuZCB0aGUgY29yZSBSWCBtb2RlIGZ1bmN0aW9uLCBgbmV0aWZfcnhfbW9kZV9ydW5gLgoKTGV0JiMzOTtzIHJldmlldyB0aGUgRW5hYmxlQ29uZmlncy4gSXQmIzM5O3MganVzdCBgTkVUYCAoc3RhbmRhcmQgbmV0d29ya2luZykuCgpOb3cgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoaXMgcmlnaHQ6CgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7TkVUJiMzNDtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtuZXRkZXZfd29ya19wcm9jJiMzNDssICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssICYjMzQ7bmV0ZGV2X3dvcmtfc2NoZWQmIzM0OywgJiMzNDtuZXRkZXZfd29ya19jYW5jZWwmIzM0OywgJiMzNDtuZXRkZXZfd29ya19jYW5jZWxfYWxsJiMzNDssICYjMzQ7X19uZXRkZXZfd29ya19jb3JlX3NjaGVkJiMzNDssICYjMzQ7X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbCYjMzQ7LCAmIzM0O25ldGlmX3J4X21vZGVfcnVuJiMzNDtdYAoKKiAgIGBSZWFzb25pbmdgOiBPa2F5LCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGUgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgbW9kZWwgZm9yIHRoZSBkZWZlcnJlZCBuZXRkZXYgd29ya3F1ZXVlIHByb2Nlc3NpbmcgKGBuZXRkZXZfd29ya19wcm9jYCkgd2l0aGluIGNvcmUgbmV0d29ya2luZyAoYG5ldC9jb3JlL25ldGRldl93b3JrLmNgKS4gSXQmIzM5O3MgcmVwbGFjaW5nIHRoZSBnbG9iYWwgYHJ0bmxfbG9ja2Agd2l0aCBwZXItZGV2aWNlIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YC4gVGhpcyBjbGVhcmx5IGhpdHMgY29yZSBuZXR3b3JraW5nIGFuZCBuZXR3b3JrIGRyaXZlcnMgKFZMQU4sIHJ4IG1vZGUgdXBkYXRlcywgZXRjLikgYW5kIGNvdWxkIGV4cG9zZSByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2RlcCB2aW9sYXRpb25zIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gSXQmIzM5O3MgYWZmZWN0aW5nIGNvbmN1cnJlbnQgbmV0ZGV2IG9wZXJhdGlvbnMsIHNvIGZ1enppbmcgaXMganVzdGlmaWVkLgoKKiAgIGBXb3J0aEZ1enppbmdgOiB0cnVlCgpZZXMsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBhbmFseXNpcy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfd29ya19wcm9jJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3J1biYjMzQ7LAogICAgJiMzNDtuZXRkZXZfd29ya19zY2hlZCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfd29ya19jYW5jZWwmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfY2FuY2VsX2FsbCYjMzQ7LAogICAgJiMzNDtfX25ldGRldl93b3JrX2NvcmVfc2NoZWQmIzM0OywKICAgICYjMzQ7X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtuZXRpZl9yeF9tb2RlX3J1biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIG1vZGVsIGluIGNvcmUgbmV0d29ya2luZyYjMzk7cyBkZWZlcnJlZCB3b3JrcXVldWUgaGFuZGxpbmcgKG5ldC9jb3JlL25ldGRldl93b3JrLmMpLiBJdCByZW1vdmVzIHRoZSBnbG9iYWwgcnRubF9sb2NrIGFyb3VuZCB0aGUgd29ya2VyIGxvb3AgYW5kIHN3aXRjaGVzIHRvIHBlci1kZXZpY2UgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdCBsb2NraW5nIGR1cmluZyBkZWZlcnJlZCBuZXRkZXYgd29yayBhbmQgcnhfbW9kZSBleGVjdXRpb25zLiBUaGlzIGFmZmVjdHMgY29yZSBuZXRkZXYgc3RhdGUgaGFuZGxpbmcgYW5kIGRyaXZlciBjYWxsYmFja3MgKHN1Y2ggYXMgVkxBTiBhbmQgYXN5bmMgcnggbW9kZSB1cGRhdGVzKSwgd2FycmFudGluZyBmdXp6aW5nIHRvIGRldGVjdCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGRldl93b3JrX3Byb2MmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3NjaGVkJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfd29ya19jYW5jZWxfYWxsJiMzNDssCiAgICAmIzM0O19fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZCYjMzQ7LAogICAgJiMzNDtfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsJiMzNDssCiAgICAmIzM0O25ldGlmX3J4X21vZGVfcnVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbW9kZWwgaW4gY29yZSBuZXR3b3JraW5nJiMzOTtzIGRlZmVycmVkIHdvcmtxdWV1ZSBoYW5kbGluZyAobmV0L2NvcmUvbmV0ZGV2X3dvcmsuYykuIEl0IHJlbW92ZXMgdGhlIGdsb2JhbCBydG5sX2xvY2sgYXJvdW5kIHRoZSB3b3JrZXIgbG9vcCBhbmQgc3dpdGNoZXMgdG8gcGVyLWRldmljZSBuZXRkZXZfbG9ja19vcHNfY29tcGF0IGxvY2tpbmcgZHVyaW5nIGRlZmVycmVkIG5ldGRldiB3b3JrIGFuZCByeF9tb2RlIGV4ZWN1dGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIG5ldGRldiBzdGF0ZSBoYW5kbGluZyBhbmQgZHJpdmVyIGNhbGxiYWNrcyAoc3VjaCBhcyBWTEFOIGFuZCBhc3luYyByeCBtb2RlIHVwZGF0ZXMpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIHN5bmNocm9uaXphdGlvbiBtb2RlbCBmb3IgZGVmZXJyZWQgbmV0ZGV2IHdvcmsgKGBuZXRkZXZfd29ya19wcm9jYCkgaW4gYG5ldC9jb3JlL25ldGRldl93b3JrLmNgIGFuZCB1cGRhdGVzIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi9oZWFkZXIgY29tbWVudHMuIEluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IGFjcXVpcmluZyBgcnRubF9sb2NrKClgIGZvciB0aGUgZW50aXJlIGxvb3AgaW4gYG5ldGRldl93b3JrX3Byb2NgLCBpdCBsb2NrcyBlYWNoIG5ldCBkZXZpY2UgaW5kaXZpZHVhbGx5IHVzaW5nIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0KClgIC8gYG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdCgpYC5cblxuVGhpcyBpcyBhIHB1cmUgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGNoYW5nZS4gQW55IHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgbW9kaWZpY2F0aW9ucyByZWxhdGUgdG8gbG9ja2luZyBoaWVyYXJjaHksIHJhY2UgY29uZGl0aW9ucywgb3IgZGV2aWNlIHJlZmVyZW5jZS9saWZlY3ljbGUgbWFuYWdlbWVudCwgd2hpY2ggYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBhbHRlciBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBvciBidWZmZXIgYm91bmRhcnkgaGFuZGxpbmcuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmRjNWFkMTZlMDlhMGM1YjZmNWEzZjFiNDc1MThhYTgxYzVlNTJkMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDU6Mzc6NDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QKaW5kZXggZGI3MWQ0MjgzMDMyYS4uYWFjMzM0OTc4MTNmYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdApAQCAtMjkyLDE1ICYjNDM7MjkyLDIxIEBAIG5kb19zZXRfcnhfbW9kZToKIAlpbiBwcm9jZXNzIGNvbnRleHQuCiAKIG5kb19zZXRfcnhfbW9kZV9hc3luYzoKLQlTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4gSW4gYWRkaXRpb24sIG5ldGRldiBpbnN0YW5jZQotCWxvY2sgaWYgdGhlIGRyaXZlciBpbXBsZW1lbnRzIHF1ZXVlIG1hbmFnZW1lbnQgb3Igc2hhcGVyIEFQSS4KJiM0MzsJU3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgJiMzNDtvcHMgbG9ja2VkJiMzNDsgZHJpdmVycywKJiM0MzsJcnRubF9sb2NrKCkgc2VtYXBob3JlIGZvciBhbGwgb3RoZXIgZHJpdmVycy4KIAlDb250ZXh0OiBwcm9jZXNzIChmcm9tIGEgd29yayBxdWV1ZSkKIAlOb3RlczogQXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzCiAJY29udGV4dC4gUmVjZWl2ZXMgc25hcHNob3RzIG9mIHRoZSB1bmljYXN0IGFuZCBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cy4KIAogbmRvX2NoYW5nZV9yeF9mbGFnczoKLQlTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4gSW4gYWRkaXRpb24sIG5ldGRldiBpbnN0YW5jZQotCWxvY2sgaWYgdGhlIGRyaXZlciBpbXBsZW1lbnRzIHF1ZXVlIG1hbmFnZW1lbnQgb3Igc2hhcGVyIEFQSS4KJiM0MzsJU3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgJiMzNDtvcHMgbG9ja2VkJiMzNDsgZHJpdmVycywKJiM0MzsJcnRubF9sb2NrKCkgc2VtYXBob3JlIGZvciBhbGwgb3RoZXIgZHJpdmVycy4KJiM0MzsKJiM0MztuZG9fd29yazoKJiM0MzsJU3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgJiMzNDtvcHMgbG9ja2VkJiMzNDsgZHJpdmVycywKJiM0MzsJcnRubF9sb2NrKCkgc2VtYXBob3JlIGZvciBhbGwgb3RoZXIgZHJpdmVycy4KJiM0MzsJQ29udGV4dDogcHJvY2VzcyAoZnJvbSBhIHdvcmsgcXVldWUpCiYjNDM7CU5vdGVzOiBSdW5zIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoKS4KIAogbmRvX3NldHVwX3RjOgogCUxvY2tpbmcgZGVwZW5kcyBvbiBgYHRjX3NldHVwX3R5cGVgYC4gRm9yIG1vc3QgdHlwZXMgdGhlIGNhbGxiYWNrCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA4NDU0NjQ2ZDZhNDU0Li4xN2I4ZmI4ZTk0ZmVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTExMzUsMTMgJiM0MzsxMTM1LDE2IEBAIHN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHsKICAqCQkJCXN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YywKICAqCQkJCXN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7CiAgKglBc3luYyB2ZXJzaW9uIG9mIG5kb19zZXRfcnhfbW9kZSB3aGljaCBydW5zIGluIHByb2Nlc3MgY29udGV4dAotICoJd2l0aCBydG5sX2xvY2sgYW5kIG5ldGRldl9sb2NrX29wcyhkZXYpIGhlbGQuIFRoZSB1Yy9tYyBwYXJhbWV0ZXJzCiYjNDM7ICoJdW5kZXIgdGhlIG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciAmIzM0O29wcyBsb2NrZWQmIzM0OyBkcml2ZXJzLCBvcgomIzQzOyAqCXJ0bmxfbG9jayBmb3IgYWxsIG90aGVyIGRyaXZlcnMuIFRoZSB1Yy9tYyBwYXJhbWV0ZXJzCiAgKglhcmUgc25hcHNob3RzIG9mIHRoZSBhZGRyZXNzIGxpc3RzIC0gaXRlcmF0ZSB3aXRoCiAgKgluZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YykuIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgYQogICoJbmVnYXRpdmUgZXJybm8gdG8gcmVxdWVzdCBhIHJldHJ5IHZpYSB0aGUgY29yZSBiYWNrb2ZmLgogICoKICAqIHZvaWQgKCpuZG9fd29yaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpOwogICoJUnVuIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoQGV2ZW50cykuCiYjNDM7ICoJUnVucyBpbiBwcm9jZXNzIGNvbnRleHQgdW5kZXIgdGhlIG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciAmIzM0O29wcwomIzQzOyAqCWxvY2tlZCYjMzQ7IGRyaXZlcnMsIG9yIHJ0bmxfbG9jayBmb3IgYWxsIG90aGVyIGRyaXZlcnMuCiAgKgogICogaW50ICgqbmRvX3NldF9tYWNfYWRkcmVzcykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcik7CiAgKglUaGlzIGZ1bmN0aW9uICBpcyBjYWxsZWQgd2hlbiB0aGUgTWVkaWEgQWNjZXNzIENvbnRyb2wgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuYyBiL25ldC9jb3JlL25ldGRldl93b3JrLmMKaW5kZXggZTcyMWEwNmQ1OGRmMS4uYzk5OTY3OTA3ZTE4NSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRkZXZfd29yay5jCkBAIC0zLDcgJiM0MzszLDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZGV2X2xvY2suaCZndDsKQEAgLTEyOSw4ICYjNDM7MTI4LDYgQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLAogCiBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlydG5sX2xvY2soKTsKLQogCXdoaWxlICh0cnVlKSB7CiAJCXVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMCwgY29yZSA9IDA7CiAJCW5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7CkBAIC0xNDMsMTYgJiM0MzsxNDAsMTAgQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCX0KIAkJZGV2ID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO25ldGRldl93b3JrX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLAogCQkJCSAgICAgICB3b3JrX25vZGUpOwotCQkvKiBUYWtlIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzbyBAZGV2IGNhbiYjMzk7dCBiZSBmcmVlZCB3aGlsZSB3ZQotCQkgKiBkcm9wIHRoZSBsb2NrIHRvIGdyYWIgaXRzIG9wcyBsb2NrOyB0aGUgd29yayByZWZlcmVuY2UgaXMKLQkJICogb25seSByZWxlYXNlZCBvbmNlIHdlIGNsYWltIHRoZSB3b3JrIGJlbG93LgotCQkgKiBUaGUgcmUtbG9ja2luZyBkYW5jZSBpcyB0byBlbnN1cmUgdGhhdCBvcHMgbG9jayBpcyBlbm91Z2gKLQkJICogdG8gZW5zdXJlIGNhbmNlbGluZyB3b3JrIGlzIG5vdCByYWN5IHdpdGggZGVxdWV1ZS4KLQkJICovCiAJCW5ldGRldl9ob2xkKGRldiwgJmFtcDt0cmFja2VyLCBHRlBfQVRPTUlDKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZXRkZXZfd29ya19sb2NrKTsKIAotCQluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsJCW5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTsKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7bmV0ZGV2X3dvcmtfbG9jayk7CiAJCWlmICghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7d29ya19ub2RlKSkgewogCQkJbGlzdF9kZWxfaW5pdCgmYW1wO2Rldi0mZ3Q7d29ya19ub2RlKTsKQEAgLTE2OSwxMCAmIzQzOzE2MCw4IEBAIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlzcGluX3VubG9ja19iaCgmYW1wO25ldGRldl93b3JrX2xvY2spOwogCiAJCW5ldGRldl93b3JrX3J1bihkZXYsIGV2ZW50cywgY29yZSk7Ci0JCW5ldGRldl91bmxvY2tfb3BzKGRldik7CiYjNDM7CQluZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTsKIAogCQluZXRkZXZfcHV0KGRldiwgJmFtcDt0cmFja2VyKTsKIAl9Ci0KLQlydG5sX3VubG9jaygpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgRGV2aWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0YCwgYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgLCBhbmQgYG5ldC9jb3JlL25ldGRldl93b3JrLmNgIHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGNvcmUgZGV2aWNlIG1hbmFnZW1lbnQsIHRoZSBkZXZpY2UgZHJpdmVyIGludGVyZmFjZSwgYW5kIHF1aXRlIHBvc3NpYmx5LCB3b3JrZXIgcXVldWUgYmVoYXZpb3IuCgpNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KWAuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGNvdWxkIGJlIGNvbXBhdGliaWxpdHktcmVsYXRlZCwgb3IgYSBsb2NrIG9wZXJhdGlvbiwgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGhvdyBkZXZpY2Ugb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZCBvciBwcm90ZWN0ZWQuIAoKVG8gY2xhcmlmeSB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaCwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdGAuIEEgcXVpY2sgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHNob3VsZCBnaXZlIG1lIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYWxsIHRoZSBwbGFjZXMgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGFuZCBhbGwgZnVuY3Rpb25zIHdoaWNoIG1pZ2h0IGJlIGRlcGVuZGVudCBvbiBpdC4gVGhhdCB3aWxsIGltbWVkaWF0ZWx5IHNoZWQgbGlnaHQgb24gdGhlIGFyZWEgb2YgdGhlIHBhdGNoIHRoYXQgaGFzIHRvIGJlIGludmVzdGlnYXRlZC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoYXQgaXQmIzM5O3MgZG9pbmcgdW5kZXIgdGhlIGhvb2QsIGFuZCBob3cgdGhhdCYjMzk7cyBiZWluZyBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTgzPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTg4LVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDo4OTpzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC05MC17XG4tLVxubmV0L2NvcmUvZGV2LmM9MTEwMT1fX25ldGRldl9wdXRfbG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKm5ldClcbm5ldC9jb3JlL2Rldi5jLTExMDIte1xubmV0L2NvcmUvZGV2LmM6MTEwMzpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9jb3JlL2Rldi5jLTExMDQtXHRpZiAoZGV2LVx1MDAzZXJlZ19zdGF0ZSBcdTAwM2UgTkVUUkVHX1JFR0lTVEVSRUQgfHxcbi0tXG5uZXQvY29yZS9kZXYuaD02MD1ERUZJTkVfRlJFRShuZXRkZXZfdW5sb2NrX29wc19jb21wYXQsIHN0cnVjdCBuZXRfZGV2aWNlICosXG4tLVxubmV0L2NvcmUvZGV2LmgtNjItXG5uZXQvY29yZS9kZXYuaDo2MzojZGVmaW5lIGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgdmFyX25hbWUsIGlmaW5kZXgpXHRcXFxubmV0L2NvcmUvZGV2LmgtNjQtXHRmb3IgKHN0cnVjdCBuZXRfZGV2aWNlICp2YXJfbmFtZSBfX2ZyZWUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KSA9IE5VTEw7IFxcXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz02MTg9aW50IG5ldGRldl9ubF9xdWV1ZV9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTYzOC1cdH0gZWxzZSB7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjYzOTpcdFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTY0MC1cdFx0XHRcdFx0XHQgICAgICAgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTkwMT1pbnQgbmV0ZGV2X25sX3FzdGF0c19nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05MzgtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjkzOTpcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgbmV0ZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05NDAtXHRcdGVyciA9IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBfb25lKG5ldGRldiwgc2NvcGUsIHNrYixcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTEyOT1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0NS1cbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTQ2Olx0XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0Ny1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuLS1cbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jPTU4PWludCBldGhubF9hY3RfY2FibGVfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTc1LVxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM6NzY6XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYy03Ny1cdHBoeWRldiA9IGV0aG5sX3JlcV9nZXRfcGh5ZGV2KFx1MDAyNnJlcV9pbmZvLCB0Yixcbi0tXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYz0zMTk9aW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0X3RkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTM0Mi1cbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jOjM0MzpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTM0NC1cdHBoeWRldiA9IGV0aG5sX3JlcV9nZXRfcGh5ZGV2KFx1MDAyNnJlcV9pbmZvLCB0Yixcbi0tXG5uZXQvZXRodG9vbC9tb2R1bGUuYz00MTc9aW50IGV0aG5sX2FjdF9tb2R1bGVfZndfZmxhc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9tb2R1bGUuYy00MzEtXG5uZXQvZXRodG9vbC9tb2R1bGUuYzo0MzI6XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG5uZXQvZXRodG9vbC9tb2R1bGUuYy00MzMtXHRyZXQgPSBldGhubF9vcHNfYmVnaW4oZGV2KTtcbi0tXG5uZXQvZXRodG9vbC9yc3MuYz00Njg9aW50IGV0aG5sX3Jzc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jLTQ3My1cbm5ldC9ldGh0b29sL3Jzcy5jOjQ3NDpcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2V0aHRvb2wvcnNzLmMtNDc1LVx0XHRpZiAoY3R4LVx1MDAzZW1hdGNoX2lmaW5kZXggXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2VtYXRjaF9pZmluZGV4ICE9IGN0eC1cdTAwM2VpZmluZGV4KVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jPTEwMDI9aW50IGV0aG5sX3Jzc19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL3Jzcy5jLTEwMzYtXG5uZXQvZXRodG9vbC9yc3MuYzoxMDM3Olx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xubmV0L2V0aHRvb2wvcnNzLmMtMTAzOC1cbi0tXG5uZXQvZXRodG9vbC9yc3MuYz0xMTUwPWludCBldGhubF9yc3NfZGVsZXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9yc3MuYy0xMTc3LVxubmV0L2V0aHRvb2wvcnNzLmM6MTE3ODpcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL3Jzcy5jLTExNzktXG4tLVxubmV0L2V0aHRvb2wvdHNpbmZvLmM9NDczPWludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYy00ODEtXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODI6XHRcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4My1cdFx0cmV0ID0gZXRobmxfdHNpbmZvX2R1bXBfb25lX25ldF90b3BvKHNrYiwgZGV2LCBjYik7XG4tLVxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDg3LVxubmV0L2V0aHRvb2wvdHNpbmZvLmM6NDg4Olx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cdTAwM2Vwb3NfaWZpbmRleCkge1xubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDg5LVx0XHRyZXQgPSBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0X3RvcG8oc2tiLCBkZXYsIGNiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQzMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipEaXZpbmcgRGVlcCBpbnRvIGBuZXRkZXZfd29yay5jYCBBcm91bmQgVGhhdCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O09rYXksIGxldCYjMzk7cyBub3QganVzdCBnbGFuY2UgYXQgKnRoYXQqIHNwZWNpZmljIGZ1bmN0aW9uOyB3ZSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZSBoZXJlLiYjMzQ7IEl0JiMzOTtzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIHRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSwgYG5ldC9jb3JlL25ldGRldl93b3JrLmNgLiBJIG5lZWQgdG8gZ3Jhc3AgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgZGV2aWNlIGxheWVyIGFzIGEgd2hvbGUsIHdoYXQgdGhpcyBpcyB0cnlpbmcgdG8gYWNjb21wbGlzaC4KCkxldCYjMzk7cyBkbyBhIGNvbXBsZXRlIHJlYWQtdGhyb3VnaCBpbiBvcmRlciB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcyBhbmQgZG9lcyBub3QgZG8uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBhcmVhcyBzdWNoIGFzIGxvY2tpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoaXMgYWZmZWN0cyB0aGUgc2NoZWR1bGVyLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBjb25jdXJyZW5jeSBjb25jZXJucyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpbiB0aGlzIGFyZWEuIE5vIHNob3J0Y3V0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdywgaXRzIGRlcGVuZGVuY2llcywgYW5kIHdoYXQga2luZCBvZiB3b3JrIGl0IGlzIG1lYW50IHRvIHBlcmZvcm0uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGZvbGxvdyB0aGUgbG9naWMgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRkZXZfd29yay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0XG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gICA5Olx0XG4gIDEwOlx0I2luY2x1ZGUgXCYjMzQ7ZGV2LmhcJiMzNDtcbiAgMTE6XHRcbiAgMTI6XHRzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gIDEzOlx0XG4gIDE0Olx0LyogQG5ldGRldl93b3JrX2xvY2sgcHJvdGVjdHM6XG4gIDE1Olx0ICogIC0gQG5ldGRldl93b3JrX2xpc3RcbiAgMTY6XHQgKiAgLSB3aXRoaW4gdGhlIGxpc3QgZW50cmllcyAoc3RydWN0IG5ldF9kZXZpY2UgZmllbGRzKTpcbiAgMTc6XHQgKlx0LSB3b3JrX25vZGVcbiAgMTg6XHQgKlx0LSB3b3JrX3RyYWNrZXJcbiAgMTk6XHQgKlx0LSB3b3JrX3BlbmRpbmdcbiAgMjA6XHQgKlx0LSB3b3JrX2NvcmVfcGVuZGluZ1xuICAyMTpcdCAqL1xuICAyMjpcdHN0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3dvcmtfbGlzdCk7XG4gIDIzOlx0c3RhdGljIERFRklORV9TUElOTE9DSyhuZXRkZXZfd29ya19sb2NrKTtcbiAgMjQ6XHRzdGF0aWMgREVDTEFSRV9XT1JLKG5ldGRldl93b3JrLCBuZXRkZXZfd29ya19wcm9jKTtcbiAgMjU6XHRcbiAgMjY6XHRzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19lbnF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxuICAyNzpcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBjb3JlKVxuICAyODpcdHtcbiAgMjk6XHRcdGlmICghZXZlbnRzIFx1MDAyNlx1MDAyNiAhY29yZSlcbiAgMzA6XHRcdFx0cmV0dXJuO1xuICAzMTpcdFxuICAzMjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICAzMzpcdFx0aWYgKCFkZXZfaXNhbGl2ZShkZXYpKSB7XG4gIDM0Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICAzNTpcdFx0XHRyZXR1cm47XG4gIDM2Olx0XHR9XG4gIDM3Olx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKSkge1xuICAzODpcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUsIFx1MDAyNm5ldGRldl93b3JrX2xpc3QpO1xuICAzOTpcdFx0XHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuICA0MDpcdFx0fVxuICA0MTpcdFx0ZGV2LVx1MDAzZXdvcmtfcGVuZGluZyB8PSBldmVudHM7XG4gIDQyOlx0XHRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcgfD0gY29yZTtcbiAgNDM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICA0NDpcdFxuICA0NTpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZuZXRkZXZfd29yayk7XG4gIDQ2Olx0fVxuICA0NzpcdFxuICA0ODpcdHN0YXRpYyB1bnNpZ25lZCBsb25nXG4gIDQ5Olx0bmV0ZGV2X3dvcmtfZGVxdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nICpwZW5kaW5nLFxuICA1MDpcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBtYXNrKVxuICA1MTpcdHtcbiAgNTI6XHRcdHVuc2lnbmVkIGxvbmcgZXZlbnRzO1xuICA1MzpcdFxuICA1NDpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuICA1NTpcdFx0ZXZlbnRzID0gKnBlbmRpbmcgXHUwMDI2IG1hc2s7XG4gIDU2Olx0XHQqcGVuZGluZyBcdTAwMjY9IH5ldmVudHM7XG4gIDU3Olx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkgXHUwMDI2XHUwMDI2XG4gIDU4Olx0XHQgICAgIWRldi1cdTAwM2V3b3JrX3BlbmRpbmcgXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcpIHtcbiAgNTk6XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKTtcbiAgNjA6XHRcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIpO1xuICA2MTpcdFx0fVxuICA2MjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gIDYzOlx0XG4gIDY0Olx0XHRyZXR1cm4gZXZlbnRzO1xuICA2NTpcdH1cbiAgNjY6XHRcbiAgNjc6XHR2b2lkIG5ldGRldl93b3JrX2NhbmNlbF9hbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgNjg6XHR7XG4gIDY5Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gIDcwOlx0XHRkZXYtXHUwMDNld29ya19wZW5kaW5nID0gMDtcbiAgNzE6XHRcdGRldi1cdTAwM2V3b3JrX2NvcmVfcGVuZGluZyA9IDA7XG4gIDcyOlx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkpIHtcbiAgNzM6XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKTtcbiAgNzQ6XHRcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIpO1xuICA3NTpcdFx0fVxuICA3NjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gIDc3Olx0fVxuICA3ODpcdFxuICA3OTpcdHZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXG4gIDgwOlx0e1xuICA4MTpcdFx0bmV0ZGV2X3dvcmtfZW5xdWV1ZShkZXYsIGV2ZW50cywgMCk7XG4gIDgyOlx0fVxuICA4MzpcdEVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xuICA4NDpcdFxuICA4NTpcdC8qKlxuICA4NjpcdCAqIG5ldGRldl93b3JrX2NhbmNlbCgpIC0gY2FuY2VsIHNlbGVjdGVkIHdvcmsgZm9yIGEgbmV0ZGV2XG4gIDg3Olx0ICogQGRldjogbmV0X2RldmljZVxuICA4ODpcdCAqIEBtYXNrOiBldmVudHMgdG8gY2FuY2VsXG4gIDg5Olx0ICpcbiAgOTA6XHQgKiBDbGVhciBAbWFzayBmcm9tIHRoZSBkZXZpY2UmIzM5O3Mgd29yayBwZW5kaW5nIG1hc2suIElmIG5vIHdvcmsgaXMgbGVmdCBwZW5kaW5nXG4gIDkxOlx0ICogdGhlIGRldmljZSBpcyBkZXF1ZXVlZCBhbmQgaXRzIG5kb193b3JrIHdvbiYjMzk7dCBiZSBjYWxsZWQuXG4gIDkyOlx0ICpcbiAgOTM6XHQgKiBObyBleHBlY3RhdGlvbnMgb24gbG9ja2luZywgYnV0IGFsc28gbm8gZ3VhcmFudGVlcyBwcm92aWRlZC4gSWYgdGhlIGNhbGxlclxuICA5NDpcdCAqIHdhbnRzIHRvIHRvdWNoIEBkZXYgYWZ0ZXJ3YXJkcyAoZS5nLiBjYWxsIHRoZSB3b3JrIHRoYXQgZ290IGNhbmNlbGVkKVxuICA5NTpcdCAqIHRoZXkgaGF2ZSB0byBlbnN1cmUgQGRldiBkb2VzIG5vdCBnZXQgZnJlZWQuXG4gIDk2Olx0ICpcbiAgOTc6XHQgKiBSZXR1cm5zOiB0aGUgc3Vic2V0IG9mIEBtYXNrIHRoYXQgd2FzIGFjdHVhbGx5IHBlbmRpbmcsIHNvIHRoZSBjYWxsZXIgY2FuIHJ1blxuICA5ODpcdCAqIHRob3NlIGV2ZW50cyBpbmxpbmUuXG4gIDk5Olx0ICovXG4gMTAwOlx0dW5zaWduZWQgbG9uZyBuZXRkZXZfd29ya19jYW5jZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgbmV0ZGV2X3dvcmsuY2AgZmlsZSBmcm9tIHRoZSBgbmV0L2NvcmVgIGRpcmVjdG9yeS4KCioqRGl2aW5nIERlZXAgaW50byBgbmV0ZGV2X3dvcmsuY2AqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBncm9rIHRoZSByZXN0IG9mIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gSSBhbHJlYWR5IGhhdmUgYSBkZWNlbnQgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjayBhcmNoaXRlY3R1cmUsIHNvIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljcyBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5IG9mIHRoZSBuZXR3b3JrIGRldmljZSBvcGVyYXRpb25zIChsaWtlIGhhbmRsaW5nIHBhY2tldCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbikgd2l0aCB0aGUgd29yayBxdWV1ZSBtZWNoYW5pc20uCgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgaG93IG5ldHdvcmsgZGV2aWNlcyBlbnF1ZXVlIHdvcmsgdG8gYmUgZG9uZSBsYXRlciDigJMgdGhlIGNsYXNzaWMgZGVmZXJyZWQgcHJvY2Vzc2luZyBwYXR0ZXJuLiBMaWtlbHksIHRoaXMgaW52b2x2ZXMgaGFuZGxpbmcgaW50ZXJydXB0cywgc2NoZWR1bGluZyB0YXNrcyB0byBhdm9pZCBibG9ja2luZyBjcml0aWNhbCBwYXRocywgYW5kIG1haW50YWluaW5nIHNvbWUgc29ydCBvZiBvcmRlcmluZyBvciBwcmlvcml0aXphdGlvbi4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSBtYW5hZ2UgdGhlIGNvbnRleHQgc3dpdGNoZXMgaW52b2x2ZWQsIGVzcGVjaWFsbHkgaWYgdGhlcmUmIzM5O3MgYW55IGNsZXZlciB1c2Ugb2YgcGVyLUNQVSBxdWV1ZXMgb3Igb3RoZXIgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMgZm9yIG11bHRpLWNvcmUgc3lzdGVtcy4KCkdpdmVuIHRoZSBmaWxlIG5hbWUsIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBkZWFscyB3aXRoIHRoZSB3b3JrcXVldWVzIHNwZWNpZmljYWxseSBmb3IgbmV0d29yayBkZXZpY2Ugb3BlcmF0aW9ucy4gVGhhdCBtZWFucyB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgd29yayBpcyBzdWJtaXR0ZWQsIGhvdyB0aGUgd29ya3F1ZXVlIHRocmVhZHMgYXJlIHdva2VuIHVwLCBhbmQgaG93IHRoZSBuZXR3b3JrIGRldmljZS1zcGVjaWZpYyB3b3JrIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGxpa2Ugc3BpbmxvY2tzIG9yIG11dGV4ZXMgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyBjb25jdXJyZW50IGFjY2VzcyBmcm9tIGRpZmZlcmVudCBjb250ZXh0cy4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBzcGVjaWFsIGhhbmRsaW5nIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgbmV0d29yayBkZXZpY2VzIGxpa2UgdmlydHVhbCBpbnRlcmZhY2VzLCBib25kIGludGVyZmFjZXMsIG9yIGJyaWRnaW5nIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldl93b3JrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMTpcdHtcbiAxMDI6XHRcdHJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgXHUwMDI2ZGV2LVx1MDAzZXdvcmtfcGVuZGluZywgbWFzayk7XG4gMTAzOlx0fVxuIDEwNDpcdEVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfY2FuY2VsKTtcbiAxMDU6XHRcbiAxMDY6XHR2b2lkIF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcbiAxMDc6XHR7XG4gMTA4Olx0XHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgMCwgZXZlbnRzKTtcbiAxMDk6XHR9XG4gMTEwOlx0XG4gMTExOlx0dW5zaWduZWQgbG9uZ1xuIDExMjpcdF9fbmV0ZGV2X3dvcmtfY29yZV9jYW5jZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKVxuIDExMzpcdHtcbiAxMTQ6XHRcdHJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgXHUwMDI2ZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nLCBtYXNrKTtcbiAxMTU6XHR9XG4gMTE2Olx0XG4gMTE3Olx0c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxuIDExODpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGNvcmUpXG4gMTE5Olx0e1xuIDEyMDpcdFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKVxuIDEyMTpcdFx0XHRyZXR1cm47XG4gMTIyOlx0XG4gMTIzOlx0XHRpZiAoY29yZSBcdTAwMjYgTkVUREVWX1dPUktfUlhfTU9ERSlcbiAxMjQ6XHRcdFx0bmV0aWZfcnhfbW9kZV9ydW4oZGV2KTtcbiAxMjU6XHRcdGlmIChldmVudHMgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb193b3JrKVxuIDEyNjpcdFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fd29yayhkZXYsIGV2ZW50cyk7XG4gMTI3Olx0fVxuIDEyODpcdFxuIDEyOTpcdHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDEzMDpcdHtcbiAxMzE6XHRcdHdoaWxlICh0cnVlKSB7XG4gMTMyOlx0XHRcdHVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMCwgY29yZSA9IDA7XG4gMTMzOlx0XHRcdG5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7XG4gMTM0Olx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gMTM1Olx0XG4gMTM2Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAxMzc6XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCkpIHtcbiAxMzg6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAxMzk6XHRcdFx0XHRicmVhaztcbiAxNDA6XHRcdFx0fVxuIDE0MTpcdFx0XHRkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNm5ldGRldl93b3JrX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLFxuIDE0MjpcdFx0XHRcdFx0ICAgICAgIHdvcmtfbm9kZSk7XG4gMTQzOlx0XHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2dHJhY2tlciwgR0ZQX0FUT01JQyk7XG4gMTQ0Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIDE0NTpcdFxuIDE0NjpcdFx0XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG4gMTQ3Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiAxNDg6XHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpKSB7XG4gMTQ5Olx0XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKTtcbiAxNTA6XHRcdFx0XHRjb3JlID0gZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nO1xuIDE1MTpcdFx0XHRcdGRldi1cdTAwM2V3b3JrX2NvcmVfcGVuZGluZyA9IDA7XG4gMTUyOlx0XHRcdFx0ZXZlbnRzID0gZGV2LVx1MDAzZXdvcmtfcGVuZGluZztcbiAxNTM6XHRcdFx0XHRkZXYtXHUwMDNld29ya19wZW5kaW5nID0gMDtcbiAxNTQ6XHRcdFx0XHQvKiBXZSB0b29rIGFub3RoZXIgcmVmIGFib3ZlICovXG4gMTU1Olx0XHRcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIpO1xuIDE1NjpcdFxuIDE1NzpcdFx0XHRcdGlmICghZGV2X2lzYWxpdmUoZGV2KSlcbiAxNTg6XHRcdFx0XHRcdGNvcmUgPSBldmVudHMgPSAwO1xuIDE1OTpcdFx0XHR9XG4gMTYwOlx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIDE2MTpcdFxuIDE2MjpcdFx0XHRuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpO1xuIDE2MzpcdFx0XHRuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTtcbiAxNjQ6XHRcbiAxNjU6XHRcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnRyYWNrZXIpO1xuIDE2NjpcdFx0fVxuIDE2NzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBuZXR3b3JrIGRldmljZSBkcml2ZXIgaW50ZXJuYWxzOgoKKipEaXZpbmcgaW50byB0aGUgbmV0ZGV2X2xvY2sgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYWN0dWFsIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYG5ldGRldl9sb2NrX29wc19jb21wYXRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBoZWFkIG92ZXIgdG8gYGluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGNvbXBhdGliaWxpdHkgbGF5ZXIgZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhpcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGxvY2tpbmcgbWVjaGFuaXNtcyBvZiB0aGUgbmV0d29yayBkZXZpY2UgZHJpdmVyLiBXaGF0IHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgd3JhcHBlZCBvciBtb2RpZmllZCB3aXRoaW4gYG5ldGRldl9sb2NrX29wc19jb21wYXRgPyBBbmQsIHdoYXQmIzM5O3MgdGhlIHB1cnBvc2Ugb2YgaXQ/IElzIGl0IGZvciBoYW5kbGluZyBvbGRlciBkcml2ZXJzLCBvciBhY2NvbW1vZGF0aW5nIHNvbWUgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSBuZWVkPyBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9uYWxpdGllcyBwcm92aWRlZCBieSB0aGlzIHN0cnVjdHVyZSwgYW5kIGhvdyBkb2VzIGl0IGludGVncmF0ZSBpbnRvIHRoZSBsYXJnZXIgbG9ja2luZyBzY2hlbWUgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2s/IFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCBob3cgdG8gaGFuZGxlIGFueSBwb3RlbnRpYWwgaXNzdWVzLCBvciBmb3Igb3B0aW1pemluZyB0aGUgbG9ja2luZyBzdHJhdGVneSBpbiB0aGUgYnJvYWRlciBzY29wZSBvZiBuZXR3b3JrIGRyaXZlciBkZXZlbG9wbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdHtcbiAgNjE6XHRcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxuICA2MjpcdFx0XHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChkZXYpO1xuICA2MzpcdFx0ZWxzZVxuICA2NDpcdFx0XHRuZXRkZXZfdW5sb2NrKGRldik7XG4gIDY1Olx0fVxuICA2NjpcdFxuICA2NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDY4Olx0e1xuICA2OTpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gIDcwOlx0XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuICA3MTpcdFx0ZWxzZVxuICA3MjpcdFx0XHRBU1NFUlRfUlROTCgpO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHRzdGF0aWMgaW5saW5lIHZvaWRcbiAgNzY6XHRuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0X29yX2ludmlzaWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICA3NzpcdHtcbiAgNzg6XHRcdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlID09IE5FVFJFR19SRUdJU1RFUkVEIHx8XG4gIDc5Olx0XHQgICAgZGV2LVx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfVU5SRUdJU1RFUklORylcbiAgODA6XHRcdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzX2NvbXBhdChkZXYpO1xuICA4MTpcdH1cbiAgODI6XHRcbiAgODM6XHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDg0Olx0e1xuICA4NTpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gIDg2Olx0XHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XG4gIDg3Olx0fVxuICA4ODpcdFxuICA4OTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfbG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDkwOlx0e1xuICA5MTpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gIDkyOlx0XHRcdG5ldGRldl9sb2NrKGRldik7XG4gIDkzOlx0XHRlbHNlXG4gIDk0Olx0XHRcdHJ0bmxfbG9jaygpO1xuICA5NTpcdH1cbiAgOTY6XHRcbiAgOTc6XHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDk4Olx0e1xuICA5OTpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gMTAwOlx0XHRcdG5ldGRldl91bmxvY2soZGV2KTtcbiAxMDE6XHRcdGVsc2VcbiAxMDI6XHRcdFx0cnRubF91bmxvY2soKTtcbiAxMDM6XHR9XG4gMTA0Olx0XG4gMTA1Olx0LyogTWF0Y2hpbmcgXCYjMzQ7b3BzIHByb3RlY3RlZFwmIzM0OyBjYXRlZ29yeSBmcm9tIG5ldGRldmljZS5oICovXG4gMTA2Olx0c3RhdGljIGlubGluZSBpbnQgbmV0ZGV2X2lzX2xvY2tlZF9vcHNfY29tcGF0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gMTA3Olx0e1xuIDEwODpcdFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG4gMTA5Olx0XHRcdHJldHVybiBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuIDExMDpcdFx0cmV0dXJuIGxvY2tkZXBfcnRubF9pc19oZWxkKCk7XG4gMTExOlx0fVxuIDExMjpcdFxuIDExMzpcdHN0YXRpYyBpbmxpbmUgaW50IG5ldGRldl9sb2NrX2NtcF9mbihjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmEsXG4gMTE0Olx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqYilcbiAxMTU6XHR7XG4gMTE2Olx0XHRpZiAoYSA9PSBiKVxuIDExNzpcdFx0XHRyZXR1cm4gMDtcbiAxMTg6XHRcbiAxMTk6XHRcdC8qIEFsbG93IGxvY2tpbmcgbXVsdGlwbGUgZGV2aWNlcyBvbmx5IHVuZGVyIHJ0bmxfbG9jayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY0NQoJCQkJCQkJb3V0cHV0OiAyMTQKCQkJCQkJCXRob3VnaHRzOiA3MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRkZXYgV29yayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCBpbnZvbHZlcyBhIGNyaXRpY2FsIGV4YW1pbmF0aW9uIG9mIGl0cyBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIGltcGFjdC4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgaXQmIzM5O3MgYSByZWZhY3RvcmluZyBvZiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIHdpdGhpbiB0aGUgYG5ldGRldl93b3JrX3Byb2NgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gQmVmb3JlLCB3ZSBoYWQgdGhlIGBydG5sX2xvY2soKWAgaGVsZCB1bmNvbmRpdGlvbmFsbHkgb3ZlciB0aGUgZW50aXJlIGxvb3AsIGFsb25nIHdpdGggcGVyLWRldmljZSBsb2NrcyBhcyBuZWVkZWQuIE5vdywgaXQmIzM5O3MgYmVlbiBjaGFuZ2VkIHRvIHVzZSBgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpYCAvIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KWAgb24gYSBwZXItZGV2aWNlIGJhc2lzIHdpdGhpbiB0aGUgbG9vcC4gVGhpcyBsb29rcyBsaWtlIGFuIGF0dGVtcHQgYXQgaW1wcm92aW5nIGNvbmN1cnJlbmN5IGJ5IHJlZHVjaW5nIHRoZSBzY29wZSBvZiB0aGUgYHJ0bmxfbG9ja2AuIFBsdXMsIHRoZXJlIGFyZSBzb21lIHVwZGF0ZXMgdG8gYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBjb21tZW50cyB0byByZWZsZWN0IHRoZSBuZXcgc3luY2hyb25pemF0aW9uIG1vZGVsIGZvciBtZXRob2RzIGxpa2UgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AuCgpOb3csIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgcmlza3MuIEZpcnN0LCB0aGUgbWVtb3J5IHNhZmV0eSBjb25jZXJuczogYW0gSSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZT8gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyBhbnkga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLCBidXQgdGhlcmUgYXJlIG5vbmUuIFNpbWlsYXJseSwgbm8gYnJhbmNoaW5nIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gYWx0ZXJhdGlvbnMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBMb29rcyBsaWtlIGFsbCBtZW1vcnktcmVsYXRlZCBhc3BlY3RzIGFyZSBjb3ZlcmVkLgoKVGhlIG1ham9yIGFyZWEgb2YgY29uY2VybiBoZXJlIGlzIHRoZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbiByZWZhY3RvciBpdHNlbGYuIENvbmN1cnJlbmN5IGlzc3VlcyBsaWtlIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBhbmQgbG9ja2RlcCB2aW9sYXRpb25zIGFyZSB0aGUgcHJpbWFyeSBwb3RlbnRpYWwgcmlza3MuIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcywganVzdCBjaGFuZ2VzIHRoZSBsb2NraW5nIHN0cmF0ZWdpZXMgZm9yIGV4aXN0aW5nIGNvZGUsIGFuZCBJIHNlZSB0aGF0IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBpZGVudGlmeSB0aG9zZSBraW5kcyBvZiBpc3N1ZXMuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgcHVyZWx5IGFib3V0IGxvY2tpbmcgY2hhbmdlcywgYW5kIHNpbmNlIG5vIG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGNvcGllcywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIHVzZXItc3BhY2UgY29waWVzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQsIEkmIzM5O20gZmFpcmx5IGNvbmZpZGVudCB0aGF0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXNuJiMzOTt0IHJlYWxseSBhcHBsaWNhYmxlIGhlcmUuIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2VzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggYXJlbiYjMzk7dCByZWFsbHkgaW4gdGhlIHNjb3BlIG9mIHRoaXMgcmVmYWN0b3JpbmcuIFNvLCBJIG5lZWQgdG8gY29udHJhc3QgS0FTQU4vTE9DS0RFUCB2ZXJzdXMgS01TQU4gaGVyZS4KClRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgSSB0aGluayB0aGlzIGFuYWx5c2lzIGlzIHNvdW5kLiBMZXQmIzM5O3MgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIG1vZGVsIGZvciBkZWZlcnJlZCBuZXRkZXYgd29yayAoYG5ldGRldl93b3JrX3Byb2NgKSBpbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AgYW5kIHVwZGF0ZXMgcmVsYXRlZCBkb2N1bWVudGF0aW9uL2hlYWRlciBjb21tZW50cy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIGBydG5sX2xvY2soKWAgZm9yIHRoZSBlbnRpcmUgbG9vcCBpbiBgbmV0ZGV2X3dvcmtfcHJvY2AsIGl0IGxvY2tzIGVhY2ggbmV0IGRldmljZSBpbmRpdmlkdWFsbHkgdXNpbmcgYG5ldGRldl9sb2NrX29wc19jb21wYXQoKWAgLyBgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KClgLlxuXG5UaGlzIGlzIGEgcHVyZSBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gY2hhbmdlLiBBbnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHJlbGF0ZSB0byBsb2NraW5nIGhpZXJhcmNoeSwgcmFjZSBjb25kaXRpb25zLCBvciBkZXZpY2UgcmVmZXJlbmNlL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIG9yIGJ1ZmZlciBib3VuZGFyeSBoYW5kbGluZy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzeW5jaHJvbml6YXRpb24gbW9kZWwgZm9yIGRlZmVycmVkIG5ldGRldiB3b3JrIChgbmV0ZGV2X3dvcmtfcHJvY2ApIGluIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYCBhbmQgdXBkYXRlcyByZWxhdGVkIGRvY3VtZW50YXRpb24vaGVhZGVyIGNvbW1lbnRzLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgYHJ0bmxfbG9jaygpYCBmb3IgdGhlIGVudGlyZSBsb29wIGluIGBuZXRkZXZfd29ya19wcm9jYCwgaXQgbG9ja3MgZWFjaCBuZXQgZGV2aWNlIGluZGl2aWR1YWxseSB1c2luZyBgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdCgpYCAvIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoKWAuXG5cblRoaXMgaXMgYSBwdXJlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBjaGFuZ2UuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIGxvY2tpbmcgaGllcmFyY2h5LCByYWNlIGNvbmRpdGlvbnMsIG9yIGRldmljZSByZWZlcmVuY2UvbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgb3IgYnVmZmVyIGJvdW5kYXJ5IGhhbmRsaW5nLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzc6NDkuMjk4NzY5NjQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MjYxMTY1Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGRldl93b3JrX3Byb2NcIixcbiAgICBcIm5ldGRldl93b3JrX3J1blwiLFxuICAgIFwibmV0ZGV2X3dvcmtfc2NoZWRcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbFwiLFxuICAgIFwibmV0ZGV2X3dvcmtfY2FuY2VsX2FsbFwiLFxuICAgIFwiX19uZXRkZXZfd29ya19jb3JlX3NjaGVkXCIsXG4gICAgXCJfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsXCIsXG4gICAgXCJuZXRpZl9yeF9tb2RlX3J1blwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIG1vZGVsIGZvciBkZWZlcnJlZCBuZXRkZXYgd29yayAoYG5ldGRldl93b3JrX3Byb2NgKSBpbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AgYW5kIHVwZGF0ZXMgcmVsYXRlZCBkb2N1bWVudGF0aW9uL2hlYWRlciBjb21tZW50cy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIGBydG5sX2xvY2soKWAgZm9yIHRoZSBlbnRpcmUgbG9vcCBpbiBgbmV0ZGV2X3dvcmtfcHJvY2AsIGl0IGxvY2tzIGVhY2ggbmV0IGRldmljZSBpbmRpdmlkdWFsbHkgdXNpbmcgYG5ldGRldl9sb2NrX29wc19jb21wYXQoKWAgLyBgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KClgLlxcblxcblRoaXMgaXMgYSBwdXJlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBjaGFuZ2UuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIGxvY2tpbmcgaGllcmFyY2h5LCByYWNlIGNvbmRpdGlvbnMsIG9yIGRldmljZSByZWZlcmVuY2UvbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgb3IgYnVmZmVyIGJvdW5kYXJ5IGhhbmRsaW5nLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIG1vZGVsIGluIGNvcmUgbmV0d29ya2luZydzIGRlZmVycmVkIHdvcmtxdWV1ZSBoYW5kbGluZyAobmV0L2NvcmUvbmV0ZGV2X3dvcmsuYykuIEl0IHJlbW92ZXMgdGhlIGdsb2JhbCBydG5sX2xvY2sgYXJvdW5kIHRoZSB3b3JrZXIgbG9vcCBhbmQgc3dpdGNoZXMgdG8gcGVyLWRldmljZSBuZXRkZXZfbG9ja19vcHNfY29tcGF0IGxvY2tpbmcgZHVyaW5nIGRlZmVycmVkIG5ldGRldiB3b3JrIGFuZCByeF9tb2RlIGV4ZWN1dGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIG5ldGRldiBzdGF0ZSBoYW5kbGluZyBhbmQgZHJpdmVyIGNhbGxiYWNrcyAoc3VjaCBhcyBWTEFOIGFuZCBhc3luYyByeCBtb2RlIHVwZGF0ZXMpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzc6NDkuMjk4Nzc2NDU1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDMzNzkzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZGM1YWQxNmUwOWEwYzViNmY1YTNmMWI0NzUxOGFhODFjNWU1MmQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDU6Mzc6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XFxuaW5kZXggZGI3MWQ0MjgzMDMyYS4uYWFjMzM0OTc4MTNmYSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3RcXG5AQCAtMjkyLDE1ICsyOTIsMjEgQEAgbmRvX3NldF9yeF9tb2RlOlxcbiBcXHRpbiBwcm9jZXNzIGNvbnRleHQuXFxuIFxcbiBuZG9fc2V0X3J4X21vZGVfYXN5bmM6XFxuLVxcdFN5bmNocm9uaXphdGlvbjogcnRubF9sb2NrKCkgc2VtYXBob3JlLiBJbiBhZGRpdGlvbiwgbmV0ZGV2IGluc3RhbmNlXFxuLVxcdGxvY2sgaWYgdGhlIGRyaXZlciBpbXBsZW1lbnRzIHF1ZXVlIG1hbmFnZW1lbnQgb3Igc2hhcGVyIEFQSS5cXG4rXFx0U3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXFxcIm9wcyBsb2NrZWRcXFwiIGRyaXZlcnMsXFxuK1xcdHJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuXFxuIFxcdENvbnRleHQ6IHByb2Nlc3MgKGZyb20gYSB3b3JrIHF1ZXVlKVxcbiBcXHROb3RlczogQXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzXFxuIFxcdGNvbnRleHQuIFJlY2VpdmVzIHNuYXBzaG90cyBvZiB0aGUgdW5pY2FzdCBhbmQgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMuXFxuIFxcbiBuZG9fY2hhbmdlX3J4X2ZsYWdzOlxcbi1cXHRTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4gSW4gYWRkaXRpb24sIG5ldGRldiBpbnN0YW5jZVxcbi1cXHRsb2NrIGlmIHRoZSBkcml2ZXIgaW1wbGVtZW50cyBxdWV1ZSBtYW5hZ2VtZW50IG9yIHNoYXBlciBBUEkuXFxuK1xcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFxcXCJvcHMgbG9ja2VkXFxcIiBkcml2ZXJzLFxcbitcXHRydG5sX2xvY2soKSBzZW1hcGhvcmUgZm9yIGFsbCBvdGhlciBkcml2ZXJzLlxcbitcXG4rbmRvX3dvcms6XFxuK1xcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFxcXCJvcHMgbG9ja2VkXFxcIiBkcml2ZXJzLFxcbitcXHRydG5sX2xvY2soKSBzZW1hcGhvcmUgZm9yIGFsbCBvdGhlciBkcml2ZXJzLlxcbitcXHRDb250ZXh0OiBwcm9jZXNzIChmcm9tIGEgd29yayBxdWV1ZSlcXG4rXFx0Tm90ZXM6IFJ1bnMgZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZCgpLlxcbiBcXG4gbmRvX3NldHVwX3RjOlxcbiBcXHRMb2NraW5nIGRlcGVuZHMgb24gYGB0Y19zZXR1cF90eXBlYGAuIEZvciBtb3N0IHR5cGVzIHRoZSBjYWxsYmFja1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDg0NTQ2NDZkNmE0NTQuLjE3YjhmYjhlOTRmZWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtMTEzNSwxMyArMTEzNSwxNiBAQCBzdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XFxuICAqXFx0XFx0XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxcbiAgKlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7XFxuICAqXFx0QXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzIGNvbnRleHRcXG4tICpcXHR3aXRoIHJ0bmxfbG9jayBhbmQgbmV0ZGV2X2xvY2tfb3BzKGRldikgaGVsZC4gVGhlIHVjL21jIHBhcmFtZXRlcnNcXG4rICpcXHR1bmRlciB0aGUgbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFxcXCJvcHMgbG9ja2VkXFxcIiBkcml2ZXJzLCBvclxcbisgKlxcdHJ0bmxfbG9jayBmb3IgYWxsIG90aGVyIGRyaXZlcnMuIFRoZSB1Yy9tYyBwYXJhbWV0ZXJzXFxuICAqXFx0YXJlIHNuYXBzaG90cyBvZiB0aGUgYWRkcmVzcyBsaXN0cyAtIGl0ZXJhdGUgd2l0aFxcbiAgKlxcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKS4gUmV0dXJuIDAgb24gc3VjY2VzcyBvciBhXFxuICAqXFx0bmVnYXRpdmUgZXJybm8gdG8gcmVxdWVzdCBhIHJldHJ5IHZpYSB0aGUgY29yZSBiYWNrb2ZmLlxcbiAgKlxcbiAgKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcXG4gICpcXHRSdW4gZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZChAZXZlbnRzKS5cXG4rICpcXHRSdW5zIGluIHByb2Nlc3MgY29udGV4dCB1bmRlciB0aGUgbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFxcXCJvcHNcXG4rICpcXHRsb2NrZWRcXFwiIGRyaXZlcnMsIG9yIHJ0bmxfbG9jayBmb3IgYWxsIG90aGVyIGRyaXZlcnMuXFxuICAqXFxuICAqIGludCAoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpO1xcbiAgKlxcdFRoaXMgZnVuY3Rpb24gIGlzIGNhbGxlZCB3aGVuIHRoZSBNZWRpYSBBY2Nlc3MgQ29udHJvbCBhZGRyZXNzXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldl93b3JrLmMgYi9uZXQvY29yZS9uZXRkZXZfd29yay5jXFxuaW5kZXggZTcyMWEwNmQ1OGRmMS4uYzk5OTY3OTA3ZTE4NSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9uZXRkZXZfd29yay5jXFxuKysrIGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xcbkBAIC0zLDcgKzMsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxuQEAgLTEyOSw4ICsxMjgsNiBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXFxuIFxcbiBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbi1cXHRydG5sX2xvY2soKTtcXG4tXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMCwgY29yZSA9IDA7XFxuIFxcdFxcdG5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7XFxuQEAgLTE0MywxNiArMTQwLDEwIEBAIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRcXHR9XFxuIFxcdFxcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNm5ldGRldl93b3JrX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgd29ya19ub2RlKTtcXG4tXFx0XFx0LyogVGFrZSBhIHRlbXBvcmFyeSByZWZlcmVuY2Ugc28gQGRldiBjYW4ndCBiZSBmcmVlZCB3aGlsZSB3ZVxcbi1cXHRcXHQgKiBkcm9wIHRoZSBsb2NrIHRvIGdyYWIgaXRzIG9wcyBsb2NrOyB0aGUgd29yayByZWZlcmVuY2UgaXNcXG4tXFx0XFx0ICogb25seSByZWxlYXNlZCBvbmNlIHdlIGNsYWltIHRoZSB3b3JrIGJlbG93Llxcbi1cXHRcXHQgKiBUaGUgcmUtbG9ja2luZyBkYW5jZSBpcyB0byBlbnN1cmUgdGhhdCBvcHMgbG9jayBpcyBlbm91Z2hcXG4tXFx0XFx0ICogdG8gZW5zdXJlIGNhbmNlbGluZyB3b3JrIGlzIG5vdCByYWN5IHdpdGggZGVxdWV1ZS5cXG4tXFx0XFx0ICovXFxuIFxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNnRyYWNrZXIsIEdGUF9BVE9NSUMpO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuIFxcbi1cXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG4rXFx0XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbiBcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiBcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKSkge1xcbiBcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSk7XFxuQEAgLTE2OSwxMCArMTYwLDggQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gXFxuIFxcdFxcdG5ldGRldl93b3JrX3J1bihkZXYsIGV2ZW50cywgY29yZSk7XFxuLVxcdFxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuK1xcdFxcdG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdChkZXYpO1xcbiBcXG4gXFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZ0cmFja2VyKTtcXG4gXFx0fVxcbi1cXG4tXFx0cnRubF91bmxvY2soKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozNzo0OS45NDMxNTU5MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc2MjgyNjQ3ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGRldl93b3JrX3Byb2NcIixcbiAgICBcIm5ldGRldl93b3JrX3J1blwiLFxuICAgIFwibmV0ZGV2X3dvcmtfc2NoZWRcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbFwiLFxuICAgIFwibmV0ZGV2X3dvcmtfY2FuY2VsX2FsbFwiLFxuICAgIFwiX19uZXRkZXZfd29ya19jb3JlX3NjaGVkXCIsXG4gICAgXCJfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsXCIsXG4gICAgXCJuZXRpZl9yeF9tb2RlX3J1blwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbW9kZWwgaW4gY29yZSBuZXR3b3JraW5nJ3MgZGVmZXJyZWQgd29ya3F1ZXVlIGhhbmRsaW5nIChuZXQvY29yZS9uZXRkZXZfd29yay5jKS4gSXQgcmVtb3ZlcyB0aGUgZ2xvYmFsIHJ0bmxfbG9jayBhcm91bmQgdGhlIHdvcmtlciBsb29wIGFuZCBzd2l0Y2hlcyB0byBwZXItZGV2aWNlIG5ldGRldl9sb2NrX29wc19jb21wYXQgbG9ja2luZyBkdXJpbmcgZGVmZXJyZWQgbmV0ZGV2IHdvcmsgYW5kIHJ4X21vZGUgZXhlY3V0aW9ucy4gVGhpcyBhZmZlY3RzIGNvcmUgbmV0ZGV2IHN0YXRlIGhhbmRsaW5nIGFuZCBkcml2ZXIgY2FsbGJhY2tzIChzdWNoIGFzIFZMQU4gYW5kIGFzeW5jIHJ4IG1vZGUgdXBkYXRlcyksIHdhcnJhbnRpbmcgZnV6emluZyB0byBkZXRlY3QgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJkYzVhZDE2ZTA5YTBjNWI2ZjVhM2YxYjQ3NTE4YWE4MWM1ZTUyZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA1OjM3OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XG5pbmRleCBkYjcxZDQyODMwMzJhLi5hYWMzMzQ5NzgxM2ZhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3RcbkBAIC0yOTIsMTUgKzI5MiwyMSBAQCBuZG9fc2V0X3J4X21vZGU6XG4gXHRpbiBwcm9jZXNzIGNvbnRleHQuXG4gXG4gbmRvX3NldF9yeF9tb2RlX2FzeW5jOlxuLVx0U3luY2hyb25pemF0aW9uOiBydG5sX2xvY2soKSBzZW1hcGhvcmUuIEluIGFkZGl0aW9uLCBuZXRkZXYgaW5zdGFuY2Vcbi1cdGxvY2sgaWYgdGhlIGRyaXZlciBpbXBsZW1lbnRzIHF1ZXVlIG1hbmFnZW1lbnQgb3Igc2hhcGVyIEFQSS5cbitcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwib3BzIGxvY2tlZFwiIGRyaXZlcnMsXG4rXHRydG5sX2xvY2soKSBzZW1hcGhvcmUgZm9yIGFsbCBvdGhlciBkcml2ZXJzLlxuIFx0Q29udGV4dDogcHJvY2VzcyAoZnJvbSBhIHdvcmsgcXVldWUpXG4gXHROb3RlczogQXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzXG4gXHRjb250ZXh0LiBSZWNlaXZlcyBzbmFwc2hvdHMgb2YgdGhlIHVuaWNhc3QgYW5kIG11bHRpY2FzdCBhZGRyZXNzIGxpc3RzLlxuIFxuIG5kb19jaGFuZ2VfcnhfZmxhZ3M6XG4tXHRTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4gSW4gYWRkaXRpb24sIG5ldGRldiBpbnN0YW5jZVxuLVx0bG9jayBpZiB0aGUgZHJpdmVyIGltcGxlbWVudHMgcXVldWUgbWFuYWdlbWVudCBvciBzaGFwZXIgQVBJLlxuK1x0U3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXCJvcHMgbG9ja2VkXCIgZHJpdmVycyxcbitcdHJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuXG4rXG4rbmRvX3dvcms6XG4rXHRTeW5jaHJvbml6YXRpb246IG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcIm9wcyBsb2NrZWRcIiBkcml2ZXJzLFxuK1x0cnRubF9sb2NrKCkgc2VtYXBob3JlIGZvciBhbGwgb3RoZXIgZHJpdmVycy5cbitcdENvbnRleHQ6IHByb2Nlc3MgKGZyb20gYSB3b3JrIHF1ZXVlKVxuK1x0Tm90ZXM6IFJ1bnMgZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZCgpLlxuIFxuIG5kb19zZXR1cF90YzpcbiBcdExvY2tpbmcgZGVwZW5kcyBvbiBgYHRjX3NldHVwX3R5cGVgYC4gRm9yIG1vc3QgdHlwZXMgdGhlIGNhbGxiYWNrXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDg0NTQ2NDZkNmE0NTQuLjE3YjhmYjhlOTRmZWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMTEzNSwxMyArMTEzNSwxNiBAQCBzdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XG4gICpcdFx0XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcbiAgKlx0XHRcdFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKTtcbiAgKlx0QXN5bmMgdmVyc2lvbiBvZiBuZG9fc2V0X3J4X21vZGUgd2hpY2ggcnVucyBpbiBwcm9jZXNzIGNvbnRleHRcbi0gKlx0d2l0aCBydG5sX2xvY2sgYW5kIG5ldGRldl9sb2NrX29wcyhkZXYpIGhlbGQuIFRoZSB1Yy9tYyBwYXJhbWV0ZXJzXG4rICpcdHVuZGVyIHRoZSBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXCJvcHMgbG9ja2VkXCIgZHJpdmVycywgb3JcbisgKlx0cnRubF9sb2NrIGZvciBhbGwgb3RoZXIgZHJpdmVycy4gVGhlIHVjL21jIHBhcmFtZXRlcnNcbiAgKlx0YXJlIHNuYXBzaG90cyBvZiB0aGUgYWRkcmVzcyBsaXN0cyAtIGl0ZXJhdGUgd2l0aFxuICAqXHRuZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YykuIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgYVxuICAqXHRuZWdhdGl2ZSBlcnJubyB0byByZXF1ZXN0IGEgcmV0cnkgdmlhIHRoZSBjb3JlIGJhY2tvZmYuXG4gICpcbiAgKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcbiAgKlx0UnVuIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoQGV2ZW50cykuXG4rICpcdFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0IHVuZGVyIHRoZSBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXCJvcHNcbisgKlx0bG9ja2VkXCIgZHJpdmVycywgb3IgcnRubF9sb2NrIGZvciBhbGwgb3RoZXIgZHJpdmVycy5cbiAgKlxuICAqIGludCAoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpO1xuICAqXHRUaGlzIGZ1bmN0aW9uICBpcyBjYWxsZWQgd2hlbiB0aGUgTWVkaWEgQWNjZXNzIENvbnRyb2wgYWRkcmVzc1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldGRldl93b3JrLmMgYi9uZXQvY29yZS9uZXRkZXZfd29yay5jXG5pbmRleCBlNzIxYTA2ZDU4ZGYxLi5jOTk5Njc5MDdlMTg1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xuKysrIGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xuQEAgLTMsNyArMyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2VcbkBAIC0xMjksOCArMTI4LDYgQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxuIFxuIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdHJ0bmxfbG9jaygpO1xuLVxuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBldmVudHMgPSAwLCBjb3JlID0gMDtcbiBcdFx0bmV0ZGV2aWNlX3RyYWNrZXIgdHJhY2tlcjtcbkBAIC0xNDMsMTYgKzE0MCwxMCBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0fVxuIFx0XHRkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNm5ldGRldl93b3JrX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLFxuIFx0XHRcdFx0ICAgICAgIHdvcmtfbm9kZSk7XG4tXHRcdC8qIFRha2UgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHNvIEBkZXYgY2FuJ3QgYmUgZnJlZWQgd2hpbGUgd2Vcbi1cdFx0ICogZHJvcCB0aGUgbG9jayB0byBncmFiIGl0cyBvcHMgbG9jazsgdGhlIHdvcmsgcmVmZXJlbmNlIGlzXG4tXHRcdCAqIG9ubHkgcmVsZWFzZWQgb25jZSB3ZSBjbGFpbSB0aGUgd29yayBiZWxvdy5cbi1cdFx0ICogVGhlIHJlLWxvY2tpbmcgZGFuY2UgaXMgdG8gZW5zdXJlIHRoYXQgb3BzIGxvY2sgaXMgZW5vdWdoXG4tXHRcdCAqIHRvIGVuc3VyZSBjYW5jZWxpbmcgd29yayBpcyBub3QgcmFjeSB3aXRoIGRlcXVldWUuXG4tXHRcdCAqL1xuIFx0XHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNnRyYWNrZXIsIEdGUF9BVE9NSUMpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiBcbi1cdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4rXHRcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIFx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkpIHtcbiBcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpO1xuQEAgLTE2OSwxMCArMTYwLDggQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuIFxuIFx0XHRuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpO1xuLVx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuK1x0XHRuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTtcbiBcbiBcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnRyYWNrZXIpO1xuIFx0fVxuLVxuLVx0cnRubF91bmxvY2soKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozNzo0OS45NDMxNTg4NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzIyMjExMTY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uOiBTeXprYWxsZXIgRnV6emluZyBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGJlaW5nIGFza2VkIHRvIGV2YWx1YXRlIGEgTGludXgga2VybmVsIHBhdGNoIHJlbGF0ZWQgdG8gc3l6a2FsbGVyIGZ1enppbmcuIFJpZ2h0IGF3YXksIEkgbmVlZCB0byBmcmFtZSB0aGlzIHdpdGhpbiByaXNrIGFuYWx5c2lzIGFuZCB1bmRlcnN0YW5kIHRoZSByZXF1ZXN0LiBJdCdzIGEga2VybmVsIHBhdGNoIHRyaWFnZSBzcGVjaWZpY2FsbHkgZm9yIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoaXMgaXMgYSBkZWZlbnNpdmUsIHF1YWxpdHkgYXNzdXJhbmNlIGFjdGl2aXR5LiBQdXJlbHkgYmVuaWduLCBzbyB3ZSBjYW4gcmVsYXggYSBsaXR0bGUgaGVyZSwgYXQgbGVhc3QgaW5pdGlhbGx5LlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gVGhlIGZpbGVzIG1vZGlmaWVkIGdpdmUgdXMgdGhlIGZpcnN0IGNsdWVzOiBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0YCwgYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgLCBhbmQsIHNpZ25pZmljYW50bHksIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gTXkgc3BpZGV5LXNlbnNlIHRpbmdsZXMgc2xpZ2h0bHkgd2hlbiBJIHNlZSBjaGFuZ2VzIGluIGNvcmUgbmV0d29ya2luZyBjb2RlLlxuXG5JIHdhbnQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2Agc3BlY2lmaWNhbGx5LiBNeSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IGBuZXRkZXZfd29ya19wcm9jYCBhbmQgYG5ldGRldl9sb2NrX29wc19jb21wYXRgIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IGNvbnRleHQsIGFuZCBob3cgYG5ldGRldl93b3JrX3NjaGVkYCBpcyB1c2VkLiBJJ2xsIHByb2JhYmx5IHJ1biBzb21lIHF1aWNrIGBncmVwYCBjb21tYW5kcyBvciBkaWcgYXJvdW5kIHdpdGggbXkgZmlsZS1yZWFkaW5nIHRvb2xzIGluIHRoYXQgZmlsZSBhbmQgYWxzbyBsb29rIGF0IGBuZXQvbmV0ZGV2X2xvY2suaGAsIGFuZCBnZXQgYSBmZWVsIGZvciB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGhlbiBJIGNhbiBnZXQgYSBmZWVsIGZvciB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjAzLjE2NTI3Mzk1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRkZXZfd29yay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHRcXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4gICA5OlxcdFxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcImRldi5oXFxcIlxcbiAgMTE6XFx0XFxuICAxMjpcXHRzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuICAxMzpcXHRcXG4gIDE0OlxcdC8qIEBuZXRkZXZfd29ya19sb2NrIHByb3RlY3RzOlxcbiAgMTU6XFx0ICogIC0gQG5ldGRldl93b3JrX2xpc3RcXG4gIDE2OlxcdCAqICAtIHdpdGhpbiB0aGUgbGlzdCBlbnRyaWVzIChzdHJ1Y3QgbmV0X2RldmljZSBmaWVsZHMpOlxcbiAgMTc6XFx0ICpcXHQtIHdvcmtfbm9kZVxcbiAgMTg6XFx0ICpcXHQtIHdvcmtfdHJhY2tlclxcbiAgMTk6XFx0ICpcXHQtIHdvcmtfcGVuZGluZ1xcbiAgMjA6XFx0ICpcXHQtIHdvcmtfY29yZV9wZW5kaW5nXFxuICAyMTpcXHQgKi9cXG4gIDIyOlxcdHN0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3dvcmtfbGlzdCk7XFxuICAyMzpcXHRzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ldGRldl93b3JrX2xvY2spO1xcbiAgMjQ6XFx0c3RhdGljIERFQ0xBUkVfV09SSyhuZXRkZXZfd29yaywgbmV0ZGV2X3dvcmtfcHJvYyk7XFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXFxuICAyNzpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGNvcmUpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRpZiAoIWV2ZW50cyBcXHUwMDI2XFx1MDAyNiAhY29yZSlcXG4gIDMwOlxcdFxcdFxcdHJldHVybjtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gIDMzOlxcdFxcdGlmICghZGV2X2lzYWxpdmUoZGV2KSkge1xcbiAgMzQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAgMzU6XFx0XFx0XFx0cmV0dXJuO1xcbiAgMzY6XFx0XFx0fVxcbiAgMzc6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKSkge1xcbiAgMzg6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUsIFxcdTAwMjZuZXRkZXZfd29ya19saXN0KTtcXG4gIDM5OlxcdFxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4gIDQwOlxcdFxcdH1cXG4gIDQxOlxcdFxcdGRldi1cXHUwMDNld29ya19wZW5kaW5nIHw9IGV2ZW50cztcXG4gIDQyOlxcdFxcdGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcgfD0gY29yZTtcXG4gIDQzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bmV0ZGV2X3dvcmspO1xcbiAgNDY6XFx0fVxcbiAgNDc6XFx0XFxuICA0ODpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZ1xcbiAgNDk6XFx0bmV0ZGV2X3dvcmtfZGVxdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nICpwZW5kaW5nLFxcbiAgNTA6XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbWFzaylcXG4gIDUxOlxcdHtcXG4gIDUyOlxcdFxcdHVuc2lnbmVkIGxvbmcgZXZlbnRzO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAgNTU6XFx0XFx0ZXZlbnRzID0gKnBlbmRpbmcgXFx1MDAyNiBtYXNrO1xcbiAgNTY6XFx0XFx0KnBlbmRpbmcgXFx1MDAyNj0gfmV2ZW50cztcXG4gIDU3OlxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpIFxcdTAwMjZcXHUwMDI2XFxuICA1ODpcXHRcXHQgICAgIWRldi1cXHUwMDNld29ya19wZW5kaW5nIFxcdTAwMjZcXHUwMDI2ICFkZXYtXFx1MDAzZXdvcmtfY29yZV9wZW5kaW5nKSB7XFxuICA1OTpcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSk7XFxuICA2MDpcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyKTtcXG4gIDYxOlxcdFxcdH1cXG4gIDYyOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0cmV0dXJuIGV2ZW50cztcXG4gIDY1OlxcdH1cXG4gIDY2OlxcdFxcbiAgNjc6XFx0dm9pZCBuZXRkZXZfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA2ODpcXHR7XFxuICA2OTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAgNzA6XFx0XFx0ZGV2LVxcdTAwM2V3b3JrX3BlbmRpbmcgPSAwO1xcbiAgNzE6XFx0XFx0ZGV2LVxcdTAwM2V3b3JrX2NvcmVfcGVuZGluZyA9IDA7XFxuICA3MjpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKSkge1xcbiAgNzM6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpO1xcbiAgNzQ6XFx0XFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfdHJhY2tlcik7XFxuICA3NTpcXHRcXHR9XFxuICA3NjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuICA3NzpcXHR9XFxuICA3ODpcXHRcXG4gIDc5OlxcdHZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgZXZlbnRzLCAwKTtcXG4gIDgyOlxcdH1cXG4gIDgzOlxcdEVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xcbiAgODQ6XFx0XFxuICA4NTpcXHQvKipcXG4gIDg2OlxcdCAqIG5ldGRldl93b3JrX2NhbmNlbCgpIC0gY2FuY2VsIHNlbGVjdGVkIHdvcmsgZm9yIGEgbmV0ZGV2XFxuICA4NzpcXHQgKiBAZGV2OiBuZXRfZGV2aWNlXFxuICA4ODpcXHQgKiBAbWFzazogZXZlbnRzIHRvIGNhbmNlbFxcbiAgODk6XFx0ICpcXG4gIDkwOlxcdCAqIENsZWFyIEBtYXNrIGZyb20gdGhlIGRldmljZSdzIHdvcmsgcGVuZGluZyBtYXNrLiBJZiBubyB3b3JrIGlzIGxlZnQgcGVuZGluZ1xcbiAgOTE6XFx0ICogdGhlIGRldmljZSBpcyBkZXF1ZXVlZCBhbmQgaXRzIG5kb193b3JrIHdvbid0IGJlIGNhbGxlZC5cXG4gIDkyOlxcdCAqXFxuICA5MzpcXHQgKiBObyBleHBlY3RhdGlvbnMgb24gbG9ja2luZywgYnV0IGFsc28gbm8gZ3VhcmFudGVlcyBwcm92aWRlZC4gSWYgdGhlIGNhbGxlclxcbiAgOTQ6XFx0ICogd2FudHMgdG8gdG91Y2ggQGRldiBhZnRlcndhcmRzIChlLmcuIGNhbGwgdGhlIHdvcmsgdGhhdCBnb3QgY2FuY2VsZWQpXFxuICA5NTpcXHQgKiB0aGV5IGhhdmUgdG8gZW5zdXJlIEBkZXYgZG9lcyBub3QgZ2V0IGZyZWVkLlxcbiAgOTY6XFx0ICpcXG4gIDk3OlxcdCAqIFJldHVybnM6IHRoZSBzdWJzZXQgb2YgQG1hc2sgdGhhdCB3YXMgYWN0dWFsbHkgcGVuZGluZywgc28gdGhlIGNhbGxlciBjYW4gcnVuXFxuICA5ODpcXHQgKiB0aG9zZSBldmVudHMgaW5saW5lLlxcbiAgOTk6XFx0ICovXFxuIDEwMDpcXHR1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjAzLjE2NTM5MzQzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NjY1NDM0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGludmVzdGlnYXRpb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIE5ldHdvcmsgRGV2aWNlIFdvcmtxdWV1ZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdHRlbiBhIGdvb2QgaGFuZGxlIG9uIHNvbWUgb2YgdGhlIGNvcmUgY29uY2VwdHMsIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbi4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIG5ldHdvcmsgZGV2aWNlIHdvcmtxdWV1ZXMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGltbWVyc2UgbXlzZWxmIGluIHRoZSBjb2RlIGFuZCBob3cgdGhlIGxvY2tzIGludGVyYWN0IHdpdGggdGhlbS4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gVGhpcyB3aWxsIHNob3cgbWUgaG93IHdvcmsgaXMgcXVldWVkLCBleGVjdXRlZCwgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgZGV2aWNlcy4gQ3J1Y2lhbGx5LCBJJ20gYWxzbyBnb2luZyB0byBleGFtaW5lIGBpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oYC4gSSAqa25vdyogbG9ja3MgYXJlIGNyaXRpY2FsIGZvciB0aGlzIHNvcnQgb2YgY29uY3VycmVudCBhY2Nlc3MsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBsb2NrIG1lY2hhbmlzbXMgdXNlZCwgaG93IHRoZXkncmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkLCBhbmQgdGhlaXIgc3BlY2lmaWMgYmVoYXZpb3IgcmVsYXRlZCB0byB3b3JrcXVldWUgY29udGV4dCBpcyBwYXJhbW91bnQgdG8gdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBjb25jdXJyZW5jeSBib3R0bGVuZWNrcy4gSSdtIGhvcGluZyB0aGlzIHdpbGwgaWxsdW1pbmF0ZSBob3cgdGhlIHdvcmtxdWV1ZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgaWRlbnRpZnkgYXJlYXMgd2hlcmUgY29udGVudGlvbiBtaWdodCBhcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA1NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzg6MDUuNzMxOTM5NzMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL25ldGRldl93b3JrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdHtcXG4gMTAyOlxcdFxcdHJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya19wZW5kaW5nLCBtYXNrKTtcXG4gMTAzOlxcdH1cXG4gMTA0OlxcdEVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfY2FuY2VsKTtcXG4gMTA1OlxcdFxcbiAxMDY6XFx0dm9pZCBfX25ldGRldl93b3JrX2NvcmVfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXFxuIDEwNzpcXHR7XFxuIDEwODpcXHRcXHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgMCwgZXZlbnRzKTtcXG4gMTA5OlxcdH1cXG4gMTEwOlxcdFxcbiAxMTE6XFx0dW5zaWduZWQgbG9uZ1xcbiAxMTI6XFx0X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXFxuIDExMzpcXHR7XFxuIDExNDpcXHRcXHRyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsIFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfY29yZV9wZW5kaW5nLCBtYXNrKTtcXG4gMTE1OlxcdH1cXG4gMTE2OlxcdFxcbiAxMTc6XFx0c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxcbiAxMTg6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgY29yZSlcXG4gMTE5OlxcdHtcXG4gMTIwOlxcdFxcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4gMTIxOlxcdFxcdFxcdHJldHVybjtcXG4gMTIyOlxcdFxcbiAxMjM6XFx0XFx0aWYgKGNvcmUgXFx1MDAyNiBORVRERVZfV09SS19SWF9NT0RFKVxcbiAxMjQ6XFx0XFx0XFx0bmV0aWZfcnhfbW9kZV9ydW4oZGV2KTtcXG4gMTI1OlxcdFxcdGlmIChldmVudHMgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fd29yaylcXG4gMTI2OlxcdFxcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3dvcmsoZGV2LCBldmVudHMpO1xcbiAxMjc6XFx0fVxcbiAxMjg6XFx0XFxuIDEyOTpcXHRzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gMTMwOlxcdHtcXG4gMTMxOlxcdFxcdHdoaWxlICh0cnVlKSB7XFxuIDEzMjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDAsIGNvcmUgPSAwO1xcbiAxMzM6XFx0XFx0XFx0bmV0ZGV2aWNlX3RyYWNrZXIgdHJhY2tlcjtcXG4gMTM0OlxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuIDEzNzpcXHRcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCkpIHtcXG4gMTM4OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gMTM5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDA6XFx0XFx0XFx0fVxcbiAxNDE6XFx0XFx0XFx0ZGV2ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsXFxuIDE0MjpcXHRcXHRcXHRcXHRcXHQgICAgICAgd29ya19ub2RlKTtcXG4gMTQzOlxcdFxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNnRyYWNrZXIsIEdGUF9BVE9NSUMpO1xcbiAxNDQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAxNDU6XFx0XFxuIDE0NjpcXHRcXHRcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxuIDE0NzpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAxNDg6XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSkpIHtcXG4gMTQ5OlxcdFxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKTtcXG4gMTUwOlxcdFxcdFxcdFxcdGNvcmUgPSBkZXYtXFx1MDAzZXdvcmtfY29yZV9wZW5kaW5nO1xcbiAxNTE6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2V3b3JrX2NvcmVfcGVuZGluZyA9IDA7XFxuIDE1MjpcXHRcXHRcXHRcXHRldmVudHMgPSBkZXYtXFx1MDAzZXdvcmtfcGVuZGluZztcXG4gMTUzOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNld29ya19wZW5kaW5nID0gMDtcXG4gMTU0OlxcdFxcdFxcdFxcdC8qIFdlIHRvb2sgYW5vdGhlciByZWYgYWJvdmUgKi9cXG4gMTU1OlxcdFxcdFxcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX3RyYWNrZXIpO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHRcXHRcXHRpZiAoIWRldl9pc2FsaXZlKGRldikpXFxuIDE1ODpcXHRcXHRcXHRcXHRcXHRjb3JlID0gZXZlbnRzID0gMDtcXG4gMTU5OlxcdFxcdFxcdH1cXG4gMTYwOlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gMTYxOlxcdFxcbiAxNjI6XFx0XFx0XFx0bmV0ZGV2X3dvcmtfcnVuKGRldiwgZXZlbnRzLCBjb3JlKTtcXG4gMTYzOlxcdFxcdFxcdG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdChkZXYpO1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnRyYWNrZXIpO1xcbiAxNjY6XFx0XFx0fVxcbiAxNjc6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozODowNS43MzIwNzI3ODNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI4OTkxOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCB1c2VyOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBLbm93aW5nIHRoZSBrZXJuZWwncyBzdHJ1Y3R1cmUsIGBpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oYCBpcyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LCBvciB3aGVyZXZlciBpdCdzIGFjdHVhbGx5IGRlZmluZWQsIEknbGwgdHJhY2sgaXQgZG93bi4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBrZXkgYXNwZWN0IG9mIGhvdyBuZXR3b3JrIGRldmljZSBsb2NraW5nIGlzIGhhbmRsZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgYmVoYXZpb3IgdG8gZWZmZWN0aXZlbHkgZGlhZ25vc2Ugb3IgbW9kaWZ5IGFueXRoaW5nIHJlbGF0ZWQgdG8gZGV2aWNlIGludGVyYWN0aW9ucy4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjA3LjY2MTA2ODMwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzUyMDk3NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGRldl9sb2NrX29wc19jb21wYXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD04Mz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTg4LVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6ODk6c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTkwLXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExMDE9X19uZXRkZXZfcHV0X2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2NvcmUvZGV2LmMtMTEwMi17XFxubmV0L2NvcmUvZGV2LmM6MTEwMzpcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTEwNC1cXHRpZiAoZGV2LVxcdTAwM2VyZWdfc3RhdGUgXFx1MDAzZSBORVRSRUdfUkVHSVNURVJFRCB8fFxcbi0tXFxubmV0L2NvcmUvZGV2Lmg9NjA9REVGSU5FX0ZSRUUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0LCBzdHJ1Y3QgbmV0X2RldmljZSAqLFxcbi0tXFxubmV0L2NvcmUvZGV2LmgtNjItXFxubmV0L2NvcmUvZGV2Lmg6NjM6I2RlZmluZSBmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIHZhcl9uYW1lLCBpZmluZGV4KVxcdFxcXFxcXG5uZXQvY29yZS9kZXYuaC02NC1cXHRmb3IgKHN0cnVjdCBuZXRfZGV2aWNlICp2YXJfbmFtZSBfX2ZyZWUobmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KSA9IE5VTEw7IFxcXFxcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9NjE4PWludCBuZXRkZXZfbmxfcXVldWVfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTYzOC1cXHR9IGVsc2Uge1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6NjM5OlxcdFxcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgbmV0ZGV2LFxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNjQwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9OTAxPWludCBuZXRkZXZfbmxfcXN0YXRzX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtOTM4LVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6OTM5OlxcdGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgbmV0ZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTk0MC1cXHRcXHRlcnIgPSBuZXRkZXZfbmxfcXN0YXRzX2dldF9kdW1wX29uZShuZXRkZXYsIHNjb3BlLCBza2IsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTEyOT1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTQ1LVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTQ2OlxcdFxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0Ny1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbi0tXFxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM9NTg9aW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYy03NS1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYzo3NjpcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmMtNzctXFx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYoXFx1MDAyNnJlcV9pbmZvLCB0YixcXG4tLVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jPTMxOT1pbnQgZXRobmxfYWN0X2NhYmxlX3Rlc3RfdGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYy0zNDItXFxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM6MzQzOlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYy0zNDQtXFx0cGh5ZGV2ID0gZXRobmxfcmVxX2dldF9waHlkZXYoXFx1MDAyNnJlcV9pbmZvLCB0YixcXG4tLVxcbm5ldC9ldGh0b29sL21vZHVsZS5jPTQxNz1pbnQgZXRobmxfYWN0X21vZHVsZV9md19mbGFzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtNDMxLVxcbm5ldC9ldGh0b29sL21vZHVsZS5jOjQzMjpcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtNDMzLVxcdHJldCA9IGV0aG5sX29wc19iZWdpbihkZXYpO1xcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmM9NDY4PWludCBldGhubF9yc3NfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jLTQ3My1cXG5uZXQvZXRodG9vbC9yc3MuYzo0NzQ6XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9ldGh0b29sL3Jzcy5jLTQ3NS1cXHRcXHRpZiAoY3R4LVxcdTAwM2VtYXRjaF9pZmluZGV4IFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlbWF0Y2hfaWZpbmRleCAhPSBjdHgtXFx1MDAzZWlmaW5kZXgpXFxuLS1cXG5uZXQvZXRodG9vbC9yc3MuYz0xMDAyPWludCBldGhubF9yc3NfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jLTEwMzYtXFxubmV0L2V0aHRvb2wvcnNzLmM6MTAzNzpcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2V0aHRvb2wvcnNzLmMtMTAzOC1cXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jPTExNTA9aW50IGV0aG5sX3Jzc19kZWxldGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmMtMTE3Ny1cXG5uZXQvZXRodG9vbC9yc3MuYzoxMTc4OlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9yc3MuYy0xMTc5LVxcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmM9NDczPWludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4MS1cXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODI6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4My1cXHRcXHRyZXQgPSBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0X3RvcG8oc2tiLCBkZXYsIGNiKTtcXG4tLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4Ny1cXG5uZXQvZXRodG9vbC90c2luZm8uYzo0ODg6XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBkZXYsIGN0eC1cXHUwMDNlcG9zX2lmaW5kZXgpIHtcXG5uZXQvZXRodG9vbC90c2luZm8uYy00ODktXFx0XFx0cmV0ID0gZXRobmxfdHNpbmZvX2R1bXBfb25lX25ldF90b3BvKHNrYiwgZGV2LCBjYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjEyLjAxMzE3MjgwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NDY0NTIwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldCBEZXZpY2UgTG9ja2luZyBNZWNoYW5pc20qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiBuZXQgZGV2aWNlIGxvY2tpbmcuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmhgLCBzcGVjaWZpY2FsbHkgbGluZXMgODAgdGhyb3VnaCAxMjAuIEkgd2FudCB0byBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlIGNvcmUgbG9ja2luZyBwcmltaXRpdmVzLiBBcmUgdGhleSB1c2luZyBzcGlubG9ja3MsIG11dGV4ZXMsIFJDVSwgb3IgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgYXBwcm9hY2g/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgY29udGV4dDsgd2hhdCBhcmUgdGhleSBwcm90ZWN0aW5nLCBhbmQgaG93IGlzIHRoZSBsb2NraW5nIHN0cmF0ZWd5IGRlc2lnbmVkIHRvIGludGVyYWN0IHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IEkgYW50aWNpcGF0ZSBhIGNvbWJpbmF0aW9uIG9mIHRlY2huaXF1ZXMsIGRlcGVuZGluZyBvbiB0aGUgZnJlcXVlbmN5IG9mIGFjY2VzcyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgY29udGVudGlvbi4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGNvbW1lbnRzIGFyZSBoZWxwZnVsIGluIGNsYXJpZnlpbmcgdGhlIGludGVudC4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBiZWhpbmQgdGhpcyBjcnVjaWFsIGxvY2tpbmcgc2V0dXAuIEhvcGVmdWxseSwgdGhlIGNvZGUgY29tbWVudHMgb2ZmZXIgc29tZSBpbnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzg6MTQuOTU5NjI5Nzk3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcXG4gIDgxOlxcdH1cXG4gIDgyOlxcdFxcbiAgODM6XFx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9hc3NlcnRfbG9ja2VkX29wcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgODQ6XFx0e1xcbiAgODU6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuICA4NjpcXHRcXHRcXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChkZXYpO1xcbiAgODc6XFx0fVxcbiAgODg6XFx0XFxuICA4OTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgOTA6XFx0e1xcbiAgOTE6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuICA5MjpcXHRcXHRcXHRuZXRkZXZfbG9jayhkZXYpO1xcbiAgOTM6XFx0XFx0ZWxzZVxcbiAgOTQ6XFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gIDk4OlxcdHtcXG4gIDk5OlxcdFxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbiAxMDA6XFx0XFx0XFx0bmV0ZGV2X3VubG9jayhkZXYpO1xcbiAxMDE6XFx0XFx0ZWxzZVxcbiAxMDI6XFx0XFx0XFx0cnRubF91bmxvY2soKTtcXG4gMTAzOlxcdH1cXG4gMTA0OlxcdFxcbiAxMDU6XFx0LyogTWF0Y2hpbmcgXFxcIm9wcyBwcm90ZWN0ZWRcXFwiIGNhdGVnb3J5IGZyb20gbmV0ZGV2aWNlLmggKi9cXG4gMTA2OlxcdHN0YXRpYyBpbmxpbmUgaW50IG5ldGRldl9pc19sb2NrZWRfb3BzX2NvbXBhdChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAxMDc6XFx0e1xcbiAxMDg6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuIDEwOTpcXHRcXHRcXHRyZXR1cm4gbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbiAxMTA6XFx0XFx0cmV0dXJuIGxvY2tkZXBfcnRubF9pc19oZWxkKCk7XFxuIDExMTpcXHR9XFxuIDExMjpcXHRcXG4gMTEzOlxcdHN0YXRpYyBpbmxpbmUgaW50IG5ldGRldl9sb2NrX2NtcF9mbihjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmEsXFxuIDExNDpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqYilcXG4gMTE1OlxcdHtcXG4gMTE2OlxcdFxcdGlmIChhID09IGIpXFxuIDExNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0LyogQWxsb3cgbG9ja2luZyBtdWx0aXBsZSBkZXZpY2VzIG9ubHkgdW5kZXIgcnRubF9sb2NrLFxcbiAxMjA6XFx0XFx0ICogdGhlIGV4YWN0IG9yZGVyIGRvZXNuJ3QgbWF0dGVyLlxcbiAxMjE6XFx0XFx0ICogTm90ZSB0aGF0IHVwcGVyIGRldmljZXMgZG9uJ3QgbG9jayB0aGVpciBvcHMsIHNvIG5lc3RpbmdcXG4gMTIyOlxcdFxcdCAqIG1vc3RseSBoYXBwZW5zIGluIGJhdGNoZWQgZGV2aWNlIHJlbW92YWwgZm9yIG5vdy5cXG4gMTIzOlxcdFxcdCAqL1xcbiAxMjQ6XFx0XFx0cmV0dXJuIGxvY2tkZXBfcnRubF9pc19oZWxkKCkgPyAtMSA6IDE7XFxuIDEyNTpcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdCNkZWZpbmUgbmV0ZGV2X2xvY2tkZXBfc2V0X2NsYXNzZXMoZGV2KVxcdFxcdFxcdFxcdFxcXFxcXG4gMTI4OlxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDEyOTpcXHRcXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHFkaXNjX3R4X2J1c3lsb2NrX2tleTtcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjE0Ljk1OTczODM5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDMxMTU4MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9ja2luZyBDaGFuZ2VzIGluIGBuZXRkZXZfd29ya19wcm9jYCoqXG5cbk9rYXksIHNvIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaGVyZSBpcyB0aGUgbG9ja2luZyBzdHJhdGVneSBpbiBgbmV0ZGV2X3dvcmtfcHJvY2Agd2l0aGluIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIHdhcyBwcmV0dHkgYmx1bnQ6IGl0IHdhcyBob2xkaW5nIHRoZSBgcnRubF9sb2NrKClgICp1bmNvbmRpdGlvbmFsbHkqIGZvciB0aGUgZW50aXJlIGxvb3AgdGhhdCBwcm9jZXNzZXMgbmV0d29yayBkZXZpY2VzLCBhbmQgb24gdG9wIG9mIHRoYXQsIGl0IHdhcyBhbHNvIGFjcXVpcmluZyB0aGUgZGV2aWNlLXNwZWNpZmljIGxvY2ssIGBuZXRkZXZfbG9ja19vcHMoZGV2KWAuIFRoYXQncyBhIHNlcmlvdXMgcG90ZW50aWFsIGJvdHRsZW5lY2ssIGVzcGVjaWFsbHkgaW4gaGlnaC1jb25jdXJyZW5jeSBzY2VuYXJpb3MuXG5cbk5vdywgdGhpbmdzIGFyZSBzaWduaWZpY2FudGx5IGRpZmZlcmVudC4gVGhlIGBydG5sX2xvY2soKWAgaXMgKmNvbXBsZXRlbHkqIHJlbW92ZWQgZnJvbSB0aGUgb3V0ZXIgbG9vcC4gSW5zdGVhZCwgdGhlIGxvY2tpbmcgaXMgbm93IGhhbmRsZWQgcGVyLWRldmljZS4gSW5zaWRlIHRoZSBsb29wLCB0aGUgcGF0Y2ggbm93IHVzZXMgYG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtgLiBUaGlzIGNsZXZlciBmdW5jdGlvbiBhY3F1aXJlcyBlaXRoZXIgYGRldi1cdTAwM2Vsb2NrYCAqaWYqIHRoZSBkZXZpY2UgYWN0dWFsbHkgKm5lZWRzKiB0aGF0IGxvY2sgKGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCkgb3IsIGlmIHRoZSBkZXZpY2UgZG9lc24ndCByZXF1aXJlIGl0LCBmYWxscyBiYWNrIHRvIHVzaW5nIGBydG5sX2xvY2soKWAuIEFmdGVyIGVhY2ggZGV2aWNlJ3Mgd29yayBpcyBjb21wbGV0ZWQsIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTtgIGlzIHVzZWQuXG5cblRoaXMgaXMgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBsb2NraW5nIHNlbWFudGljcy4gQmVmb3JlLCByZWdhcmRsZXNzIG9mIHRoZSBkZXZpY2UncyBzcGVjaWZpYyBuZWVkcywgZXZlcnkgY2FsbCB0byBgbmV0ZGV2X3dvcmtfcnVuKGRldiwgZXZlbnRzLCBjb3JlKWAg4oCTIGluY2x1ZGluZyB0aG9zZSB0byBgbmV0aWZfcnhfbW9kZV9ydW4oZGV2KWAgYW5kIGBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fd29yayhkZXYsIGV2ZW50cylgIOKAkyB3YXMgZXhlY3V0ZWQgKnVuZGVyKiBgcnRubF9sb2NrKClgLiBOb3csIGl0J3Mgbm90LlxuXG5Ob3csIGNydWNpYWwgYml0cywgZHJpdmVycyB0aGF0IGltcGxlbWVudCBxdWV1ZSBtYW5hZ2VtZW50IG9yIHNoYXBlciBBUElzIGFyZSBydW5uaW5nIGZ1bmN0aW9ucyBsaWtlIGBuZG9fd29ya2AgYW5kIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgICh3aGljaCBpcyBjYWxsZWQgdGhyb3VnaCBgbmV0aWZfcnhfbW9kZV9ydW5gKSAqd2l0aG91dCogYHJ0bmxfbG9jaygpYCBiZWluZyBoZWxkLiBUaGV5J3JlIG9ubHkgdXNpbmcgdGhlIGRldmljZSdzIG93biBgZGV2LVx1MDAzZWxvY2tgISBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHBlcmZvcm1hbmNlIGJlbmVmaXQgc2hvdWxkIHN1cmZhY2UuIFdlJ3ZlIGVmZmVjdGl2ZWx5IHJlcGxhY2VkIGEgZ2xvYmFsIGxvY2sgd2l0aCBwZXItZGV2aWNlIGxvY2tzIGluIG1hbnkgY2FzZXMuXG5cbk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBzZWUgKndobyogaXMgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIGBuZXRkZXZfd29ya19zY2hlZGAsIGBfX25ldGRldl93b3JrX2NvcmVfc2NoZWRgLCBhbmQgZXNwZWNpYWxseSB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHNldHRpbmcgdGhlIHJlY2VpdmUgbW9kZSwgYXMgd2VsbCBhcyBgbmRvX3dvcmtgLCBhbmQgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AgdGhlbXNlbHZlcy4gSSBuZWVkIHRvIHNlYXJjaCBmb3IgdGhvc2UgZXhhY3QgZnVuY3Rpb24gbmFtZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjQ1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzg6MTguOTkwOTAwOTQ0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc1NzU3MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5kb193b3JrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0zMDE9bmRvX2NoYW5nZV9yeF9mbGFnczpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zMDQtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjMwNTpuZG9fd29yazpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMzA2LVxcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFxcXCJvcHMgbG9ja2VkXFxcIiBkcml2ZXJzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmM9MzQ4OT1zdGF0aWMgaW50IHNtb2tlX3N1Ym1pdChzdHJ1Y3QgcHJlZW1wdF9zbW9rZSAqc21va2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYy0zNTM1LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jOjM1MzY6c3RhdGljIHZvaWQgc21va2VfY3Jlc2NlbmRvX3dvcmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYy0zNTM3LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jPTM1NTc9c3RhdGljIGludCBzbW9rZV9jcmVzY2VuZG8oc3RydWN0IHByZWVtcHRfc21va2UgKnNtb2tlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9leGVjbGlzdHMuYy0zNTg1LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jOjM1ODY6XFx0XFx0a3RocmVhZF9pbml0X3dvcmsoXFx1MDAyNmFyZ1tpZF0ud29yaywgc21va2VfY3Jlc2NlbmRvX3dvcmspO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jLTM1ODctXFx0XFx0a3RocmVhZF9xdWV1ZV93b3JrKHdvcmtlcltpZF0sIFxcdTAwMjZhcmdbaWRdLndvcmspO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDcxPXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTE0My0gKlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTE0NDogKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExNDUtICpcXHRSdW4gZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZChAZXZlbnRzKS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTQ1OD1zdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xNDc3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNDc4OlxcdHZvaWRcXHRcXHRcXHQoKm5kb193b3JrKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTQ3OS1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBldmVudHMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xODIxPWVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE5NTQtICpcXHRAd29ya19wZW5kaW5nOlxcdFxcdERyaXZlci1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmssIHBhc3NlZCB0b1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTk1NTogKlxcdFxcdFxcdFxcdG5kb193b3JrKCkgKHNlZSBuZXRkZXZfd29ya19zY2hlZCgpKVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk1Ni0gKlxcdEB3b3JrX2NvcmVfcGVuZGluZzpcXHRDb3JlLWRlZmluZWQgcGVuZGluZyBuZXRkZXZfd29yayAoTkVUREVWX1dPUktfKilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDYzLVxcdC5uZG9fY2hhbmdlX3J4X2ZsYWdzXFx0PSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTA2NDpcXHQubmRvX3dvcmtcXHRcXHQ9IHZsYW5fZGV2X3dvcmssXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTA2NS1cXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gdmxhbl9kZXZfaW9jdGwsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTgzPUVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy05MC0gKiBDbGVhciBAbWFzayBmcm9tIHRoZSBkZXZpY2UncyB3b3JrIHBlbmRpbmcgbWFzay4gSWYgbm8gd29yayBpcyBsZWZ0IHBlbmRpbmdcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjkxOiAqIHRoZSBkZXZpY2UgaXMgZGVxdWV1ZWQgYW5kIGl0cyBuZG9fd29yayB3b24ndCBiZSBjYWxsZWQuXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy05Mi0gKlxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYz0xMTc9c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMjQtXFx0XFx0bmV0aWZfcnhfbW9kZV9ydW4oZGV2KTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEyNTpcXHRpZiAoZXZlbnRzIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3dvcmspXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMjY6XFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fd29yayhkZXYsIGV2ZW50cyk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMjctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozODoyMy45NjY2NjUyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzk1MTkyMzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRGV2aWNlIE9wZXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBgdmxhbl9uZXRkZXZfb3BzYCBsZWFucyBvbiBgbmRvX3dvcmtgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZywgbmF0dXJhbGx5LCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBuZXR3b3JrIGRldmljZSBvcGVyYXRpb25zIHV0aWxpemUgYG5kb193b3JrYCwgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AsIG9yIGBuZXRkZXZfd29ya19zY2hlZGAuIEl0J3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgaGVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIFRoaXMgd2lsbCBpbmZvcm0gbXkgZGVzaWduIGNob2ljZXMsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBvciBzZWN1cml0eSByZXZpZXcsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzODQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozODoyNS43NjE4NjA0ODlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjc4MzMyOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X3dvcmtfc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTMwNT1uZG9fd29yazpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zMDgtXFx0Q29udGV4dDogcHJvY2VzcyAoZnJvbSBhIHdvcmsgcXVldWUpXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjMwOTpcXHROb3RlczogUnVucyBkZWZlcnJlZCB3b3JrIHNjaGVkdWxlZCB3aXRoIG5ldGRldl93b3JrX3NjaGVkKCkuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTMxMC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTA3MT1zdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExNDQtICogdm9pZCAoKm5kb193b3JrKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyk7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxMTQ1OiAqXFx0UnVuIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoQGV2ZW50cykuXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTQ2LSAqXFx0UnVucyBpbiBwcm9jZXNzIGNvbnRleHQgdW5kZXIgdGhlIG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcXFwib3BzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE4MjE9ZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk1NC0gKlxcdEB3b3JrX3BlbmRpbmc6XFx0XFx0RHJpdmVyLWRlZmluZWQgcGVuZGluZyBuZXRkZXZfd29yaywgcGFzc2VkIHRvXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxOTU1OiAqXFx0XFx0XFx0XFx0bmRvX3dvcmsoKSAoc2VlIG5ldGRldl93b3JrX3NjaGVkKCkpXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xOTU2LSAqXFx0QHdvcmtfY29yZV9wZW5kaW5nOlxcdENvcmUtZGVmaW5lZCBwZW5kaW5nIG5ldGRldl93b3JrIChORVRERVZfV09SS18qKVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD01MjE5PXZvaWQgZGV2X2dldF90c3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnMpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTIyMC1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjUyMjE6dm9pZCBuZXRkZXZfd29ya19zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyk7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MjIyLXVuc2lnbmVkIGxvbmcgbmV0ZGV2X3dvcmtfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzayk7XFxuLS1cXG5uZXQvODAyMXEvdmxhbi5jPTM2OD1zdGF0aWMgaW50IHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbi0tXFxubmV0LzgwMjFxL3ZsYW4uYy00MjQtXFxubmV0LzgwMjFxL3ZsYW4uYzo0MjU6XFx0XFx0XFx0bmV0ZGV2X3dvcmtfc2NoZWQodmxhbmRldiwgVkxBTl9XT1JLX01UVSk7XFxubmV0LzgwMjFxL3ZsYW4uYy00MjYtXFx0XFx0fVxcbi0tXFxubmV0LzgwMjFxL3ZsYW4uYy00MzAtXFx0XFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KVxcbm5ldC84MDIxcS92bGFuLmM6NDMxOlxcdFxcdFxcdG5ldGRldl93b3JrX3NjaGVkKHZsYW5kZXYsIFZMQU5fV09SS19GRUFUVVJFUyk7XFxubmV0LzgwMjFxL3ZsYW4uYy00MzItXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvODAyMXEvdmxhbi5jLTQzNi1cXHRcXHR2bGFuX2dyb3VwX2Zvcl9lYWNoX2RldihncnAsIGksIHZsYW5kZXYpXFxubmV0LzgwMjFxL3ZsYW4uYzo0Mzc6XFx0XFx0XFx0bmV0ZGV2X3dvcmtfc2NoZWQodmxhbmRldiwgVkxBTl9XT1JLX0xJTktfU1RBVEUpO1xcbm5ldC84MDIxcS92bGFuLmMtNDM4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYz02Nz12b2lkIG5ldGRldl93b3JrX2NhbmNlbF9hbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNzgtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo3OTp2b2lkIG5ldGRldl93b3JrX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODAte1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy04Mi19XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo4MzpFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTg0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozODozMS4wMjk2OTk2NTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQyNTI4OTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AqKlxuXG5SaWdodCwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AgZnVuY3Rpb24uIFRoaXMgbmFtZSBzY3JlYW1zIFwibmV0d29yayBkZXZpY2Ugb3BlcmF0aW9uXCIgYW5kIFwiYXN5bmNocm9ub3VzLFwiIGltcGx5aW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG5ldHdvcmsgZHJpdmVyIGFuZCBhIG5vbi1ibG9ja2luZyBvcGVyYXRpb24gZm9yIHNldHRpbmcgdGhlIHJlY2VpdmUgbW9kZS4gRXNzZW50aWFsbHksIGl0IGhhbmRsZXMgc2V0dGluZyB0aGUgcmVjZWl2ZSBtb2RlIGZvciBhIG5ldHdvcmsgaW50ZXJmYWNlLCBidXQgaW4gYSB3YXkgdGhhdCBkb2Vzbid0IGhhbHQgb3RoZXIgcHJvY2Vzc2VzIHdoaWxlIGl0IGRvZXMgaXRzIHdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmU6IHRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uLCBwcm9iYWJseSBpbiB0aGUgZHJpdmVyJ3MgaW50ZXJmYWNlIHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IFwiUlggbW9kZVwiIGVuY29tcGFzc2VzIGhlcmUgLSBpcyBpdCBtdWx0aWNhc3QsIHByb21pc2N1b3VzLCBhbGwtZnJhbWVzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byB0aGUgcGFydGljdWxhciBuZXR3b3JrIGNhcmQgaXQgdGFyZ2V0cz8gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCBhbmQgd2hhdCBpdCBkb2VzIGludGVybmFsbHkuIEtub3dpbmcgdGhpcyBnaXZlcyB0aGUgY29udGV4dCBvZiB3aGF0IHNwZWNpZmljIFJYIG1vZGVzIGFyZSBpbnZvbHZlZC4gSSdsbCBhbHNvIHdhbnQgdG8gc2VlIGhvdyB0aGUgYXN5bmMgYXNwZWN0IGlzIGltcGxlbWVudGVkIOKAkyBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHdvcmsgcXVldWUsIGEgY2FsbGJhY2ssIHRocmVhZHMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIHNlYXJjaCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTQ4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzg6MzQuNDU0OTkyNDQzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDA3MjA1NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5kb19zZXRfcnhfbW9kZV9hc3luY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q9Mjg4PW5kb19zZXRfcnhfbW9kZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0yOTAtXFx0Q29udGV4dDogQkhzIGRpc2FibGVkXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjI5MTpcXHROb3RlczogRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBuZG9fc2V0X3J4X21vZGVfYXN5bmMgd2hpY2ggcnVuc1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0yOTItXFx0aW4gcHJvY2VzcyBjb250ZXh0LlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0yOTMtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjI5NDpuZG9fc2V0X3J4X21vZGVfYXN5bmM6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5NS1cXHRTeW5jaHJvbml6YXRpb246IG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcXFwib3BzIGxvY2tlZFxcXCIgZHJpdmVycyxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jPTIxNjg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcG9pYl9uZXRkZXZfb3BzX3BmID0ge1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjE3Ni1cXHQubmRvX3R4X3RpbWVvdXRcXHRcXHQgPSBpcG9pYl90aW1lb3V0LFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jOjIxNzc6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdCA9IGlwb2liX3NldF9yeF9tb2RlX2FzeW5jLFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIxNzgtXFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0ID0gaXBvaWJfZ2V0X2lmbGluayxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jPTIxOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcG9pYl9uZXRkZXZfb3BzX3ZmID0ge1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjE5OS1cXHQubmRvX3R4X3RpbWVvdXRcXHRcXHQgPSBpcG9pYl90aW1lb3V0LFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jOjIyMDA6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdCA9IGlwb2liX3NldF9yeF9tb2RlX2FzeW5jLFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIyMDEtXFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0ID0gaXBvaWJfZ2V0X2lmbGluayxcXG4tLVxcbmRyaXZlcnMvbmV0L2R1bW15LmM9ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkdW1teV9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHVtbXkuYy05Mi1cXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbmRyaXZlcnMvbmV0L2R1bW15LmM6OTM6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gc2V0X211bHRpY2FzdF9saXN0LFxcbmRyaXZlcnMvbmV0L2R1bW15LmMtOTQtXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGV0aF9tYWNfYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jPTY5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFkaW4xMTQwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02OTgtXFx0Lm5kb192YWxpZGF0ZV9hZGRyID0gZXRoX3ZhbGlkYXRlX2FkZHIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmM6Njk5OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmMgPSBhZGluMTE0MF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTcwMC1cXHQubmRvX2V0aF9pb2N0bCA9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jPTMyNzA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBibmdlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMzI3NC1cXHQubmRvX2dldF9zdGF0czY0XFx0PSBibmdlX2dldF9zdGF0czY0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYzozMjc1OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IGJuZ2Vfc2V0X3J4X21vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jLTMyNzYtXFx0Lm5kb19mZWF0dXJlc19jaGVja1xcdD0gYm5nZV9mZWF0dXJlc19jaGVjayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE2MTY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm54dF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTYxNzItXFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gYm54dF9nZXRfc3RhdHM2NCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNjE3MzpcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBibnh0X3NldF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2MTc0LVxcdC5uZG9fZXRoX2lvY3RsXFx0XFx0PSBibnh0X2lvY3RsLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jPTU2ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVuZXRjNF9uZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYy01NjktXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGVuZXRjX3BmX3NldF9tYWNfYWRkcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6NTcwOlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IGVuZXRjNF9wZl9zZXRfcnhfbW9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtNTcxLVxcdC5uZG9fc2V0X2ZlYXR1cmVzXFx0PSBlbmV0YzRfcGZfc2V0X2ZlYXR1cmVzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYz01MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWF2Zl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYy01MTM3LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaWF2Zl94bWl0X2ZyYW1lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM6NTEzODpcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBpYXZmX3NldF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTEzOS1cXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYz01MzI0PWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtbHg1ZV9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01MzMwLVxcdC5uZG9fZ2V0X3N0YXRzNjQgICAgICAgICA9IG1seDVlX2dldF9zdGF0cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jOjUzMzE6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luYyAgID0gbWx4NWVfc2V0X3J4X21vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01MzMyLVxcdC5uZG9fc2V0X21hY19hZGRyZXNzICAgICA9IG1seDVlX3NldF9tYWMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jPTExOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtbHhzd19zcF9wb3J0X25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jLTExOTYtXFx0Lm5kb19zZXR1cF90YyAgICAgICAgICAgPSBtbHhzd19zcF9zZXR1cF90YyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jOjExOTc6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gbWx4c3dfc3Bfc2V0X3J4X21vZGVfYXN5bmMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYy0xMTk4LVxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBtbHhzd19zcF9wb3J0X3NldF9tYWNfYWRkcmVzcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM9NTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZmJuaWNfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmMtNTY2LVxcdC5uZG9fY2hhbmdlX210dVxcdFxcdD0gZmJuaWNfY2hhbmdlX210dSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jOjU2NzpcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBmYm5pY19zZXRfcnhfbW9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTU2OC1cXHQubmRvX2dldF9zdGF0czY0XFx0PSBmYm5pY19nZXRfc3RhdHM2NCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X25ldGRldi5jPTI1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNwYXJ4NV9wb3J0X25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9uZXRkZXYuYy0yNTYtXFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSBzcGFyeDVfcG9ydF94bWl0X2ltcGwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbmV0ZGV2LmM6MjU3OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmMgID0gc3Bhcng1X3NldF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X25ldGRldi5jLTI1OC1cXHQubmRvX2dldF9waHlzX3BvcnRfbmFtZSA9IHNwYXJ4NV9wb3J0X2dldF9waHlzX3BvcnRfbmFtZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz02MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2ltX25ldGRldl9vcHMgPSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTYzNy1cXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IG5zaW1fc3RhcnRfeG1pdCxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NjM4OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IG5zaW1fc2V0X3J4X21vZGUsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTYzOS1cXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gZXRoX21hY19hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTY2MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fdmZfbmV0ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNjYyLVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gbnNpbV9zdGFydF94bWl0X3ZmLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzo2NjM6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gbnNpbV9zZXRfcnhfbW9kZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNjY0LVxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBldGhfbWFjX2FkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYz0zMzE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRraXRfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzNS1cXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IG5ldGtpdF94bWl0LFxcbmRyaXZlcnMvbmV0L25ldGtpdC5jOjMzNjpcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBuZXRraXRfc2V0X211bHRpY2FzdCxcXG5kcml2ZXJzL25ldC9uZXRraXQuYy0zMzctXFx0Lm5kb19zZXRfcnhfaGVhZHJvb21cXHQ9IG5ldGtpdF9zZXRfaGVhZHJvb20sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTEwNzE9c3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTMxLSAqXFx0Q2Fubm90IHNsZWVwLCBjYWxsZWQgd2l0aCBuZXRpZl9hZGRyX2xvY2tfYmggaGVsZC5cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMzI6ICpcXHREZXByZWNhdGVkIGluIGZhdm9yIG9mIG5kb19zZXRfcnhfbW9kZV9hc3luYy5cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMzMtICpcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMzQ6ICogaW50ICgqbmRvX3NldF9yeF9tb2RlX2FzeW5jKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTEzNS0gKlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTQ1OD1zdHJ1Y3QgbmV0X2RldmljZV9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xNDczLVxcdHZvaWRcXHRcXHRcXHQoKm5kb19zZXRfcnhfbW9kZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNDc0OlxcdGludFxcdFxcdFxcdCgqbmRvX3NldF9yeF9tb2RlX2FzeW5jKShcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE0NzUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTExNDQwLVxcdCAgICBkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL2Rldi5jOjExNDQxOlxcdCAgICAhZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMpXFxubmV0L2NvcmUvZGV2LmM6MTE0NDI6XFx0XFx0bmV0ZGV2X1dBUk4oZGV2LCBcXFwib3BzLWxvY2tlZCBkcml2ZXJzIHNob3VsZCB1c2UgbmRvX3NldF9yeF9tb2RlX2FzeW5jXFxcXG5cXFwiKTtcXG5uZXQvY29yZS9kZXYuYy0xMTQ0My1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTI3Nz12b2lkIG5ldGlmX3J4X21vZGVfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyOTQtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMjk1OlxcdGlmIChvcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYykge1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI5Ni1cXHRcXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMxNS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMTY6XFx0aWYgKG9wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMzE3OlxcdFxcdGVyciA9IG9wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKGRldiwgXFx1MDAyNnVjX3NuYXAsIFxcdTAwMjZtY19zbmFwKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzMTgtXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzNjI9dm9pZCBfX2Rldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzczLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3NDpcXHRpZiAob3BzLVxcdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMgfHwgb3BzLVxcdTAwM2VuZG9fY2hhbmdlX3J4X2ZsYWdzIHx8XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzc1LVxcdCAgICBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSB7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzOTA9dm9pZCBkZXZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQwMC0gKlxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTQwMTogKiBEcml2ZXJzIGltcGxlbWVudGluZyBuZG9fc2V0X3J4X21vZGVfYXN5bmMoKSBoYXZlIHRoZWlyIHJ4IG1vZGUgY2FsbGJhY2tcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTE0MDItICogZXhlY3V0ZWQgZnJvbSBhIHdvcmtxdWV1ZS4gVGhpcyBhbGxvd3MgdGhlIGNhbGxiYWNrIHRvIHNsZWVwLCBidXQgbWVhbnNcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jPTU0MT1zdGF0aWMgaW50IGRldl9pZnNpb2Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKmRhdGEsXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01ODgtXFx0Y2FzZSBTSU9DQURETVVMVEk6XFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NTg5OlxcdFxcdGlmICgoIW9wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlIFxcdTAwMjZcXHUwMDI2ICFvcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYykgfHxcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01OTAtXFx0XFx0ICAgIGlmci1cXHUwMDNlaWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gQUZfVU5TUEVDKVxcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNjAwLVxcdGNhc2UgU0lPQ0RFTE1VTFRJOlxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjYwMTpcXHRcXHRpZiAoKCFvcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZSBcXHUwMDI2XFx1MDAyNiAhb3BzLVxcdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMpIHx8XFxubmV0L2NvcmUvZGV2X2lvY3RsLmMtNjAyLVxcdFxcdCAgICBpZnItXFx1MDAzZWlmcl9od2FkZHIuc2FfZmFtaWx5ICE9IEFGX1VOU1BFQylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzg6MzguNDYyMjA1ODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODI0MTQzNzEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgcGF0dGVybiBqdW1wcyBvdXQ6IGBkdW1teWAsIGBuZXRraXRgLCBgbnNpbWAsIGFuZCBgdmxhbmAgKDgwMjFxKSBhbGwgcmVseSBvbiBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYCBvciBgbmRvX3dvcmtgLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGRlZmVycmVkIG5ldGRldiB3b3JrcXVldWUgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhpbmdzLiBXaGF0J3MgY2hhbmdlZCBpcyBob3cgdGhlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIHdvcmtzIGZvciB0aGF0IGRlZmVycmVkIHdvcmtxdWV1ZSwgcmVwbGFjaW5nIHRoZSBnbG9iYWwgYHJ0bmxfbG9jaygpYCB3aXRoIHBlci1kZXZpY2UgYG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KWAgYW5kIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KWAuXG5cblRpbWUgdG8gYXNzZXNzIHRoaXMgYWdhaW5zdCBteSBjcml0ZXJpYS4gRmlyc3QsICoqcmVhY2hhYmlsaXR5KiouIFdlJ3JlIHRhbGtpbmcgY29yZSBuZXR3b3JraW5nLCBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AuIFRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IGhpdCB3aGVuZXZlciBuZXRkZXYgd29yayBnZXRzIHNjaGVkdWxlZCwgYW5kIHRoYXQgY2FuIGhhcHBlbiB3aXRoIFZMQU4gZXZlbnRzLCBSWCBtb2RlIGNoYW5nZXMsIG9yIGFueSBraW5kIG9mIG5ldHdvcmsgZGV2aWNlLCBpbmNsdWRpbmcgdmlydHVhbCBvbmVzIGxpa2UgdGhlIGR1bW15IGludGVyZmFjZSwgbmV0a2l0LCBuZXRkZXZzaW0sIGFuZCBvZiBjb3Vyc2UgYWxsIHRoZSByZWd1bGFyIG5ldHdvcmsgaW50ZXJmYWNlcy4gR29vZCBuZXdzLCBpdCdzIHRvdGFsbHkgcmVhY2hhYmxlIGluIFN5emthbGxlciBhbmQgYSBzdGFuZGFyZCBRRU1VIFZNIHNldHVwLCBzbyB0aGF0IGNoZWNrcyBvdXQuXG5cbk5leHQsICoqV29ydGhGdXp6aW5nKiouIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gV2UncmUgdG91Y2hpbmcgYSBjb3JlIHN1YnN5c3RlbSDigJMgYG5ldC9jb3JlL25ldGRldl93b3JrLmNgIOKAkyBhbmQgZnVuZGFtZW50YWxseSBjaGFuZ2luZyB0aGUgY29uY3VycmVuY3kgbW9kZWwgYW5kIGxvY2tpbmcgYXJvdW5kIHRoZSB3b3JrcXVldWUgaGFuZGxlci4gV2UncmUgbW92aW5nIGZyb20gYSBnbG9iYWwgbG9jayAoYHJ0bmxfbG9ja2ApIHRvIHBlci1kZXZpY2UgbG9ja3MuIFRoaXMgKnNjcmVhbXMqIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBsb2NrZGVwIHNwbGF0cy4gVGhlcmUncyBhbHNvIHRoZSBjaGFuY2Ugb2YgcmVncmVzc2lvbnMgd2l0aCBjb25jdXJyZW50IG5ldGxpbmsgb3IgaW9jdGwgb3BlcmF0aW9ucyB3aGlsZSBuZXRkZXYgd29yayBpcyBydW5uaW5nLiBJJ2Qgc2F5LCB3aXRob3V0IGEgZG91YnQsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gVGhpcyBpcyByaXBlIGZvciBleHBsb2l0YXRpb24uXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCAqKkZvY3VzU3ltYm9scyoqIGFuZCAqKkVuYWJsZUNvbmZpZ3MqKi4gVGhlIHBhdGNoIGltcGFjdHMgdGhlc2UgZnVuY3Rpb25zOlxuXG4xLiAgYG5ldGRldl93b3JrX3Byb2NgIGluIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYCAodGhpcyBpcyB0aGUgbW9kaWZpZWQgd29yayBoYW5kbGVyKVxuMi4gIEZ1bmN0aW9ucyByZWxhdGVkIHRvIGl0OiBgbmV0ZGV2X3dvcmtfcnVuYCwgYG5ldGRldl93b3JrX2VucXVldWVgLCBgbmV0ZGV2X3dvcmtfc2NoZWRgLCBgbmV0aWZfcnhfbW9kZV9ydW5gLCBgdmxhbl9kZXZfd29ya2AuXG5cbk9rYXksIGRpZ2dpbmcgaW50byB0aGUgY29kZTogYG5ldGRldl93b3JrX3Byb2NgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCB3b3JrIGhhbmRsZXJzIG1pZ2h0IGJlIGlubGluZWQuIGBuZXRkZXZfd29ya19ydW5gIGlzIGFsc28gc3RhdGljLCBidXQgYG5ldGRldl93b3JrX3NjaGVkYCwgYG5ldGRldl93b3JrX2NhbmNlbGAsIGBuZXRkZXZfd29ya19jYW5jZWxfYWxsYCwgYF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZGAsIGFuZCBgX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbGAgYXJlIGV4cG9ydGVkL25vbi1zdGF0aWMgc3ltYm9scy4gYG5ldGlmX3J4X21vZGVfcnVuYCBpcyBpbiBgbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY2AuIEFuZCBgdmxhbl9kZXZfd29ya2AgaXMgb3ZlciBpbiBgbmV0LzgwMjFxL3ZsYW5fZGV2LmNgLiBXZSBuZWVkIHRvIHNjcnV0aW5pemUgYG5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNgIGZvciBob3cgYG5ldGlmX3J4X21vZGVfcnVuYCB3b3JrcyB0b28uIFRoaXMgbmVlZHMgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Nzg4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjQ2LjcwMzY0Njc4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5NTUzNTM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRpZl9yeF9tb2RlX3J1blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuaD0xNjk9dm9pZCBuZXRpZl9yeF9tb2RlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L2NvcmUvZGV2Lmg6MTcwOnZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxubmV0L2NvcmUvZGV2LmgtMTcxLXZvaWQgbmV0aWZfcnhfbW9kZV9zeW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMjcxPXZvaWQgbmV0aWZfcnhfbW9kZV9jYW5jZWxfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI3Ni1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyNzc6dm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI3OC17XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTE0MDg9dm9pZCBuZXRpZl9yeF9tb2RlX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQxMC1cXHRpZiAoX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpKVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTQxMTpcXHRcXHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQxMi19XFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTExNz1zdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTEyMy1cXHRpZiAoY29yZSBcXHUwMDI2IE5FVERFVl9XT1JLX1JYX01PREUpXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMjQ6XFx0XFx0bmV0aWZfcnhfbW9kZV9ydW4oZGV2KTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTEyNS1cXHRpZiAoZXZlbnRzIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3dvcmspXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjUxLjc5OTE4OTkyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MjE1MDU0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIFZMQU4gRGV2aWNlIFdvcmsqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhlIFZMQU4gZGV2aWNlJ3Mgd29ya2luZ3MsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIFwidmxhbl9kZXZfd29ya1wiIGZ1bmN0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgcHJvYmxlbSwgaXMgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24uIExldCdzIGhlYWQgc3RyYWlnaHQgdG8gYG5ldC84MDIxcS92bGFuX2Rldi5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgaGVhcnQgb2YgdGhlIFZMQU4gZGV2aWNlIGxvZ2ljIGluIHRoYXQgZmlsZS4gSXQncyB0aGUgc3RhbmRhcmQgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyB3aGVuIHRyb3VibGVzaG9vdGluZyBvciBhbmFseXppbmcgVkxBTi1yZWxhdGVkIG9wZXJhdGlvbnMsIGFuZCBJIGFudGljaXBhdGUgdGhhdCBgdmxhbl9kZXZfd29ya2Agd2lsbCByZXZlYWwgdGhlIGtleSBhY3Rpb25zIG9yIHByb2Nlc3NlcyBiZWluZyB0cmlnZ2VyZWQgYW5kIGhhbmRsZWQgcmVsYXRlZCB0byBWTEFOIGRldmljZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozODo1NC43MjA2OTkzMDhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODkxOTEwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmxhbl9kZXZfd29ya1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvODAyMXEvdmxhbi5oPTEyNj12b2lkIHZsYW5fZmlsdGVyX2Ryb3BfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XFxubmV0LzgwMjFxL3ZsYW4uaC0xMjctXFxubmV0LzgwMjFxL3ZsYW4uaDoxMjg6LyogbmV0ZGV2X3dvcmsgZXZlbnRzIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVhbCBkZXZpY2UsIHNlZSB2bGFuX2Rldl93b3JrKCkuICovXFxubmV0LzgwMjFxL3ZsYW4uaC0xMjktZW51bSB7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDAxPXN0YXRpYyB2b2lkIHZsYW5fdHJhbnNmZXJfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTEwMjItXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTAyMzpzdGF0aWMgdm9pZCB2bGFuX2Rldl93b3JrKHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDI0LXtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTEwNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMDYzLVxcdC5uZG9fY2hhbmdlX3J4X2ZsYWdzXFx0PSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTA2NDpcXHQubmRvX3dvcmtcXHRcXHQ9IHZsYW5fZGV2X3dvcmssXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTA2NS1cXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gdmxhbl9kZXZfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM4OjU5LjAwOTg5NjI4NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzE3MDI3MDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBOZXR3b3JrIENvcmUgQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGdyYW51bGFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AgaXMgY29tcGlsZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvY29yZS9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmN5IGFuZCBidWlsZCBydWxlcyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgYXJlIGRlZmluZWQuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGF0IGZpbGUgdG8gc2VlIHRoZSBzcGVjaWZpYyBmbGFncywgb2JqZWN0IGZpbGVzLCBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB0aGF0IGluZmx1ZW5jZSB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgdGhhdCBwYXJ0aWN1bGFyIEMgZmlsZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGFmZmVjdCBpdHMgaW5jbHVzaW9uIG9yIGJlaGF2aW9yIGJhc2VkIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIG5ldGRldiBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzQyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MDAuNzI2OTI4NDM0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDExMTgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbi0tXFxubmV0L2NvcmUvTWFrZWZpbGUtMTUtXFx0XFx0XFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjE2OlxcdFxcdFxcdG5ldGRldi1nZW5sLm8gbmV0ZGV2LWdlbmwtZ2VuLm8gbmV0ZGV2X3dvcmsubyBnc28ub1xcbm5ldC9jb3JlL01ha2VmaWxlLTE3LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTI0NDE9dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTI1MDgtXFx0XFx0ZGV2X21lbW9yeV9wcm92aWRlcl91bmluc3RhbGwoZGV2KTtcXG5uZXQvY29yZS9kZXYuYzoxMjUwOTpcXHRcXHRuZXRkZXZfd29ya19jYW5jZWxfYWxsKGRldik7XFxubmV0L2NvcmUvZGV2LmMtMTI1MTAtXFx0XFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5oPTE3Mj12b2lkIG5ldGlmX3J4X21vZGVfY2FuY2VsX3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmgtMTc0LS8qIEV2ZW50cyBmb3IgdGhlIGFzeW5jIG5ldGRldiB3b3JrLCB0cmFja2VkIGluIG5ldGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcuICovXFxubmV0L2NvcmUvZGV2Lmg6MTc1OmVudW0gbmV0ZGV2X3dvcmtfY29yZSB7XFxubmV0L2NvcmUvZGV2LmgtMTc2LVxcdE5FVERFVl9XT1JLX1JYX01PREVcXHQ9IEJJVCgwKSxcXHQvKiBydW4gdGhlIHJ4X21vZGUgdXBkYXRlICovXFxuLS1cXG5uZXQvY29yZS9kZXYuaC0xNzgtXFxubmV0L2NvcmUvZGV2Lmg6MTc5OnZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpO1xcbm5ldC9jb3JlL2Rldi5oLTE4MC11bnNpZ25lZCBsb25nXFxubmV0L2NvcmUvZGV2Lmg6MTgxOl9fbmV0ZGV2X3dvcmtfY29yZV9jYW5jZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKTtcXG5uZXQvY29yZS9kZXYuaDoxODI6dm9pZCBuZXRkZXZfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbm5ldC9jb3JlL2Rldi5oLTE4My1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTMzNT1zdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzM2LXtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMzc6XFx0X19uZXRkZXZfd29ya19jb3JlX3NjaGVkKGRldiwgTkVUREVWX1dPUktfUlhfTU9ERSk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzM4LX1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTQwOD12b2lkIG5ldGlmX3J4X21vZGVfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQwOS17XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxNDEwOlxcdGlmIChfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsKGRldiwgTkVUREVWX1dPUktfUlhfTU9ERSkpXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDExLVxcdFxcdG5ldGlmX3J4X21vZGVfcnVuKGRldik7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTExLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTI6c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTMtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNDovKiBAbmV0ZGV2X3dvcmtfbG9jayBwcm90ZWN0czpcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE1OiAqICAtIEBuZXRkZXZfd29ya19saXN0XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNi0gKiAgLSB3aXRoaW4gdGhlIGxpc3QgZW50cmllcyAoc3RydWN0IG5ldF9kZXZpY2UgZmllbGRzKTpcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMjEtICovXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoyMjpzdGF0aWMgTElTVF9IRUFEKG5ldGRldl93b3JrX2xpc3QpO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MjM6c3RhdGljIERFRklORV9TUElOTE9DSyhuZXRkZXZfd29ya19sb2NrKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjI0OnN0YXRpYyBERUNMQVJFX1dPUksobmV0ZGV2X3dvcmssIG5ldGRldl93b3JrX3Byb2MpO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMjUtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoyNjpzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19lbnF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMjctXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjb3JlKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0zMS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjMyOlxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0zMy1cXHRpZiAoIWRldl9pc2FsaXZlKGRldikpIHtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjM0OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTM1LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMzctXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKSkge1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6Mzg6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUsIFxcdTAwMjZuZXRkZXZfd29ya19saXN0KTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTM5LVxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNDItXFx0ZGV2LVxcdTAwM2V3b3JrX2NvcmVfcGVuZGluZyB8PSBjb3JlO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6NDM6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNDQtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo0NTpcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZuZXRkZXZfd29yayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy00Ni19XFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo0OTpuZXRkZXZfd29ya19kZXF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgKnBlbmRpbmcsXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy01MC1cXHRcXHQgICAgdW5zaWduZWQgbG9uZyBtYXNrKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy01My1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjU0OlxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy01NS1cXHRldmVudHMgPSAqcGVuZGluZyBcXHUwMDI2IG1hc2s7XFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTYxLVxcdH1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjYyOlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTYzLVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy02Ni1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjY3OnZvaWQgbmV0ZGV2X3dvcmtfY2FuY2VsX2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNjgte1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6Njk6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTcwLVxcdGRldi1cXHUwMDNld29ya19wZW5kaW5nID0gMDtcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNzUtXFx0fVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6NzY6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNzctfVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtNzgtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo3OTp2b2lkIG5ldGRldl93b3JrX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODAte1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6ODE6XFx0bmV0ZGV2X3dvcmtfZW5xdWV1ZShkZXYsIGV2ZW50cywgMCk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy04Mi19XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo4MzpFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTg0LVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODUtLyoqXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzo4NjogKiBuZXRkZXZfd29ya19jYW5jZWwoKSAtIGNhbmNlbCBzZWxlY3RlZCB3b3JrIGZvciBhIG5ldGRldlxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtODctICogQGRldjogbmV0X2RldmljZVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy05OS0gKi9cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEwMDp1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMDEte1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTAyOlxcdHJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya19wZW5kaW5nLCBtYXNrKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTEwMy19XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMDQ6RVhQT1JUX1NZTUJPTChuZXRkZXZfd29ya19jYW5jZWwpO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTA1LVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTA2OnZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTA3LXtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjEwODpcXHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgMCwgZXZlbnRzKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTEwOS19XFxuLS1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jPTExMT11bnNpZ25lZCBsb25nXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMTI6X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMTMte1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTE0OlxcdHJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcsIG1hc2spO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTE1LX1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTExNi1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjExNzpzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xMTgtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgY29yZSlcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTI4LVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTI5OnN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTMwLXtcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTM1LVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTM2OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMzc6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm5ldGRldl93b3JrX2xpc3QpKSB7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxMzg6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTM5LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTQwLVxcdFxcdH1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE0MTpcXHRcXHRkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZuZXRkZXZfd29ya19saXN0LCBzdHJ1Y3QgbmV0X2RldmljZSxcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0Mi1cXHRcXHRcXHRcXHQgICAgICAgd29ya19ub2RlKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE0My1cXHRcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE0NDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNDUtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNDYtXFx0XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmM6MTQ3OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNDgtXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSkpIHtcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTU5LVxcdFxcdH1cXG5uZXQvY29yZS9uZXRkZXZfd29yay5jOjE2MDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNjEtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNjI6XFx0XFx0bmV0ZGV2X3dvcmtfcnVuKGRldiwgZXZlbnRzLCBjb3JlKTtcXG5uZXQvY29yZS9uZXRkZXZfd29yay5jLTE2My1cXHRcXHRuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MDAuODY4MDUzMDM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMzYyOTAwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgbmV0L2NvcmUvbmV0ZGV2X3dvcmsubyBhbmQgQXNzb2NpYXRlZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIGBuZXQvY29yZS9uZXRkZXZfd29yay5vYCBpcyBidWlsdCB1bmNvbmRpdGlvbmFsbHkgYXMgbG9uZyBhcyBuZXR3b3JraW5nIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGNvbmZpcm1lZCB0aGlzIGJ5IGNoZWNraW5nIHRoZSBgbmV0L01ha2VmaWxlYCwgd2hlcmUgYG9iai15YCBpbmNsdWRlcyBgY29yZS9gIHdoZW4gYENPTkZJR19ORVRgIGlzIHNldC4gIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBpcyB0aGVyZSBhbnl0aGluZyAqZWxzZSogdGhhdCBtaWdodCBiZSBuZWVkZWQ/IE5vLCBgQ09ORklHX05FVGAgaXMgdGhlIGJhc2UgcmVxdWlyZW1lbnQuIEkgcXVpY2tseSBjaGVja2VkIG90aGVyIGNvbW1vbiBuZXR3b3JraW5nIG9wdGlvbnMgbGlrZSBgQ09ORklHX1ZMQU5fODAyMVFgLCBgQ09ORklHX05FVERFVlNJTWAsIGFuZCBgQ09ORklHX0RVTU1ZYCwgYnV0IGBDT05GSUdfTkVUYCBhbG9uZSBpcyB0aGUga2V5IGVuYWJsZXIgaGVyZS5cblxuQWxyaWdodCwgbGV0J3MgbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgaW5jbHVkZWQ6IGBuZXRkZXZfd29ya19wcm9jYCwgYG5ldGRldl93b3JrX3J1bmAsIGBuZXRkZXZfd29ya19zY2hlZGAsIGBuZXRkZXZfd29ya19jYW5jZWxgLCBgbmV0ZGV2X3dvcmtfY2FuY2VsX2FsbGAsIGBfX25ldGRldl93b3JrX2NvcmVfc2NoZWRgLCBgX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbGAsIGFuZCBgbmV0aWZfcnhfbW9kZV9ydW5gLlxuXG5Pa2F5LCBJJ3ZlIGdvdCB0aGUgbWFpbiB3b3JrZXIgZnVuY3Rpb24sIGBuZXRkZXZfd29ya19wcm9jYCwgd2hpY2ggaXMgdGhlIG9uZSBiZWluZyBtb2RpZmllZCwgYWxvbmcgd2l0aCBpdHMgZXhlY3V0aW9uIGZ1bmN0aW9uIGBuZXRkZXZfd29ya19ydW5gLCB0aGUgQVBJIGVudHJ5IHBvaW50cyBgbmV0ZGV2X3dvcmtfc2NoZWRgLCBgbmV0ZGV2X3dvcmtfY2FuY2VsYCwgYW5kIGBuZXRkZXZfd29ya19jYW5jZWxfYWxsYC4gUGx1cywgdGhvc2UgaW1wb3J0YW50IGhlbHBlcnMsIGBfX25ldGRldl93b3JrX2NvcmVfc2NoZWRgLCBhbmQgdGhlIGNvcmUgUlggbW9kZSBmdW5jdGlvbiwgYG5ldGlmX3J4X21vZGVfcnVuYC5cblxuTGV0J3MgcmV2aWV3IHRoZSBFbmFibGVDb25maWdzLiBJdCdzIGp1c3QgYE5FVGAgKHN0YW5kYXJkIG5ldHdvcmtpbmcpLlxuXG5Ob3cgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhpcyByaWdodDpcblxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIk5FVFwiXWBcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcIm5ldGRldl93b3JrX3Byb2NcIiwgXCJuZXRkZXZfd29ya19ydW5cIiwgXCJuZXRkZXZfd29ya19zY2hlZFwiLCBcIm5ldGRldl93b3JrX2NhbmNlbFwiLCBcIm5ldGRldl93b3JrX2NhbmNlbF9hbGxcIiwgXCJfX25ldGRldl93b3JrX2NvcmVfc2NoZWRcIiwgXCJfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsXCIsIFwibmV0aWZfcnhfbW9kZV9ydW5cIl1gXG5cbiogICBgUmVhc29uaW5nYDogT2theSwgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIG1vZGVsIGZvciB0aGUgZGVmZXJyZWQgbmV0ZGV2IHdvcmtxdWV1ZSBwcm9jZXNzaW5nIChgbmV0ZGV2X3dvcmtfcHJvY2ApIHdpdGhpbiBjb3JlIG5ldHdvcmtpbmcgKGBuZXQvY29yZS9uZXRkZXZfd29yay5jYCkuIEl0J3MgcmVwbGFjaW5nIHRoZSBnbG9iYWwgYHJ0bmxfbG9ja2Agd2l0aCBwZXItZGV2aWNlIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YC4gVGhpcyBjbGVhcmx5IGhpdHMgY29yZSBuZXR3b3JraW5nIGFuZCBuZXR3b3JrIGRyaXZlcnMgKFZMQU4sIHJ4IG1vZGUgdXBkYXRlcywgZXRjLikgYW5kIGNvdWxkIGV4cG9zZSByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2RlcCB2aW9sYXRpb25zIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gSXQncyBhZmZlY3RpbmcgY29uY3VycmVudCBuZXRkZXYgb3BlcmF0aW9ucywgc28gZnV6emluZyBpcyBqdXN0aWZpZWQuXG5cbiogICBgV29ydGhGdXp6aW5nYDogdHJ1ZVxuXG5ZZXMsIEknbSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2MDEsIk91dHB1dFRva2VucyI6MjEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM5OjA2LjAwNDM0NzUyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNDUxNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfd29ya19wcm9jXCIsXG4gICAgXCJuZXRkZXZfd29ya19ydW5cIixcbiAgICBcIm5ldGRldl93b3JrX3NjaGVkXCIsXG4gICAgXCJuZXRkZXZfd29ya19jYW5jZWxcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbF9hbGxcIixcbiAgICBcIl9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZFwiLFxuICAgIFwiX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbFwiLFxuICAgIFwibmV0aWZfcnhfbW9kZV9ydW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIG1vZGVsIGluIGNvcmUgbmV0d29ya2luZydzIGRlZmVycmVkIHdvcmtxdWV1ZSBoYW5kbGluZyAobmV0L2NvcmUvbmV0ZGV2X3dvcmsuYykuIEl0IHJlbW92ZXMgdGhlIGdsb2JhbCBydG5sX2xvY2sgYXJvdW5kIHRoZSB3b3JrZXIgbG9vcCBhbmQgc3dpdGNoZXMgdG8gcGVyLWRldmljZSBuZXRkZXZfbG9ja19vcHNfY29tcGF0IGxvY2tpbmcgZHVyaW5nIGRlZmVycmVkIG5ldGRldiB3b3JrIGFuZCByeF9tb2RlIGV4ZWN1dGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIG5ldGRldiBzdGF0ZSBoYW5kbGluZyBhbmQgZHJpdmVyIGNhbGxiYWNrcyAoc3VjaCBhcyBWTEFOIGFuZCBhc3luYyByeCBtb2RlIHVwZGF0ZXMpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfd29ya19wcm9jXCIsXG4gICAgXCJuZXRkZXZfd29ya19ydW5cIixcbiAgICBcIm5ldGRldl93b3JrX3NjaGVkXCIsXG4gICAgXCJuZXRkZXZfd29ya19jYW5jZWxcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbF9hbGxcIixcbiAgICBcIl9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZFwiLFxuICAgIFwiX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbFwiLFxuICAgIFwibmV0aWZfcnhfbW9kZV9ydW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIG1vZGVsIGluIGNvcmUgbmV0d29ya2luZydzIGRlZmVycmVkIHdvcmtxdWV1ZSBoYW5kbGluZyAobmV0L2NvcmUvbmV0ZGV2X3dvcmsuYykuIEl0IHJlbW92ZXMgdGhlIGdsb2JhbCBydG5sX2xvY2sgYXJvdW5kIHRoZSB3b3JrZXIgbG9vcCBhbmQgc3dpdGNoZXMgdG8gcGVyLWRldmljZSBuZXRkZXZfbG9ja19vcHNfY29tcGF0IGxvY2tpbmcgZHVyaW5nIGRlZmVycmVkIG5ldGRldiB3b3JrIGFuZCByeF9tb2RlIGV4ZWN1dGlvbnMuIFRoaXMgYWZmZWN0cyBjb3JlIG5ldGRldiBzdGF0ZSBoYW5kbGluZyBhbmQgZHJpdmVyIGNhbGxiYWNrcyAoc3VjaCBhcyBWTEFOIGFuZCBhc3luYyByeCBtb2RlIHVwZGF0ZXMpLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZGV0ZWN0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MDYuMjI1ODA5NjJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzM0MTA4MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MDYuMjI3ODE3NjlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyOTMzMjA5NTEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIG1vZGVsIGZvciBkZWZlcnJlZCBuZXRkZXYgd29yayAoYG5ldGRldl93b3JrX3Byb2NgKSBpbiBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AgYW5kIHVwZGF0ZXMgcmVsYXRlZCBkb2N1bWVudGF0aW9uL2hlYWRlciBjb21tZW50cy4gSW5zdGVhZCBvZiB1bmNvbmRpdGlvbmFsbHkgYWNxdWlyaW5nIGBydG5sX2xvY2soKWAgZm9yIHRoZSBlbnRpcmUgbG9vcCBpbiBgbmV0ZGV2X3dvcmtfcHJvY2AsIGl0IGxvY2tzIGVhY2ggbmV0IGRldmljZSBpbmRpdmlkdWFsbHkgdXNpbmcgYG5ldGRldl9sb2NrX29wc19jb21wYXQoKWAgLyBgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KClgLlxcblxcblRoaXMgaXMgYSBwdXJlIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBjaGFuZ2UuIEFueSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnMgcmVsYXRlIHRvIGxvY2tpbmcgaGllcmFyY2h5LCByYWNlIGNvbmRpdGlvbnMsIG9yIGRldmljZSByZWZlcmVuY2UvbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHZhcmlhYmxlIGluaXRpYWxpemF0aW9ucywgb3IgYnVmZmVyIGJvdW5kYXJ5IGhhbmRsaW5nLiBDb25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZGM1YWQxNmUwOWEwYzViNmY1YTNmMWI0NzUxOGFhODFjNWU1MmQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTozNzo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxuaW5kZXggZGI3MWQ0MjgzMDMyYS4uYWFjMzM0OTc4MTNmYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XG5AQCAtMjkyLDE1ICsyOTIsMjEgQEAgbmRvX3NldF9yeF9tb2RlOlxuIFx0aW4gcHJvY2VzcyBjb250ZXh0LlxuIFxuIG5kb19zZXRfcnhfbW9kZV9hc3luYzpcbi1cdFN5bmNocm9uaXphdGlvbjogcnRubF9sb2NrKCkgc2VtYXBob3JlLiBJbiBhZGRpdGlvbiwgbmV0ZGV2IGluc3RhbmNlXG4tXHRsb2NrIGlmIHRoZSBkcml2ZXIgaW1wbGVtZW50cyBxdWV1ZSBtYW5hZ2VtZW50IG9yIHNoYXBlciBBUEkuXG4rXHRTeW5jaHJvbml6YXRpb246IG5ldGRldiBpbnN0YW5jZSBsb2NrIGZvciBcIm9wcyBsb2NrZWRcIiBkcml2ZXJzLFxuK1x0cnRubF9sb2NrKCkgc2VtYXBob3JlIGZvciBhbGwgb3RoZXIgZHJpdmVycy5cbiBcdENvbnRleHQ6IHByb2Nlc3MgKGZyb20gYSB3b3JrIHF1ZXVlKVxuIFx0Tm90ZXM6IEFzeW5jIHZlcnNpb24gb2YgbmRvX3NldF9yeF9tb2RlIHdoaWNoIHJ1bnMgaW4gcHJvY2Vzc1xuIFx0Y29udGV4dC4gUmVjZWl2ZXMgc25hcHNob3RzIG9mIHRoZSB1bmljYXN0IGFuZCBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cy5cbiBcbiBuZG9fY2hhbmdlX3J4X2ZsYWdzOlxuLVx0U3luY2hyb25pemF0aW9uOiBydG5sX2xvY2soKSBzZW1hcGhvcmUuIEluIGFkZGl0aW9uLCBuZXRkZXYgaW5zdGFuY2Vcbi1cdGxvY2sgaWYgdGhlIGRyaXZlciBpbXBsZW1lbnRzIHF1ZXVlIG1hbmFnZW1lbnQgb3Igc2hhcGVyIEFQSS5cbitcdFN5bmNocm9uaXphdGlvbjogbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwib3BzIGxvY2tlZFwiIGRyaXZlcnMsXG4rXHRydG5sX2xvY2soKSBzZW1hcGhvcmUgZm9yIGFsbCBvdGhlciBkcml2ZXJzLlxuK1xuK25kb193b3JrOlxuK1x0U3luY2hyb25pemF0aW9uOiBuZXRkZXYgaW5zdGFuY2UgbG9jayBmb3IgXCJvcHMgbG9ja2VkXCIgZHJpdmVycyxcbitcdHJ0bmxfbG9jaygpIHNlbWFwaG9yZSBmb3IgYWxsIG90aGVyIGRyaXZlcnMuXG4rXHRDb250ZXh0OiBwcm9jZXNzIChmcm9tIGEgd29yayBxdWV1ZSlcbitcdE5vdGVzOiBSdW5zIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoKS5cbiBcbiBuZG9fc2V0dXBfdGM6XG4gXHRMb2NraW5nIGRlcGVuZHMgb24gYGB0Y19zZXR1cF90eXBlYGAuIEZvciBtb3N0IHR5cGVzIHRoZSBjYWxsYmFja1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA4NDU0NjQ2ZDZhNDU0Li4xN2I4ZmI4ZTk0ZmVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTExMzUsMTMgKzExMzUsMTYgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xuICAqXHRcdFx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXG4gICpcdFx0XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7XG4gICpcdEFzeW5jIHZlcnNpb24gb2YgbmRvX3NldF9yeF9tb2RlIHdoaWNoIHJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0XG4tICpcdHdpdGggcnRubF9sb2NrIGFuZCBuZXRkZXZfbG9ja19vcHMoZGV2KSBoZWxkLiBUaGUgdWMvbWMgcGFyYW1ldGVyc1xuKyAqXHR1bmRlciB0aGUgbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwib3BzIGxvY2tlZFwiIGRyaXZlcnMsIG9yXG4rICpcdHJ0bmxfbG9jayBmb3IgYWxsIG90aGVyIGRyaXZlcnMuIFRoZSB1Yy9tYyBwYXJhbWV0ZXJzXG4gICpcdGFyZSBzbmFwc2hvdHMgb2YgdGhlIGFkZHJlc3MgbGlzdHMgLSBpdGVyYXRlIHdpdGhcbiAgKlx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpLiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGFcbiAgKlx0bmVnYXRpdmUgZXJybm8gdG8gcmVxdWVzdCBhIHJldHJ5IHZpYSB0aGUgY29yZSBiYWNrb2ZmLlxuICAqXG4gICogdm9pZCAoKm5kb193b3JrKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyk7XG4gICpcdFJ1biBkZWZlcnJlZCB3b3JrIHNjaGVkdWxlZCB3aXRoIG5ldGRldl93b3JrX3NjaGVkKEBldmVudHMpLlxuKyAqXHRSdW5zIGluIHByb2Nlc3MgY29udGV4dCB1bmRlciB0aGUgbmV0ZGV2IGluc3RhbmNlIGxvY2sgZm9yIFwib3BzXG4rICpcdGxvY2tlZFwiIGRyaXZlcnMsIG9yIHJ0bmxfbG9jayBmb3IgYWxsIG90aGVyIGRyaXZlcnMuXG4gICpcbiAgKiBpbnQgKCpuZG9fc2V0X21hY19hZGRyZXNzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKTtcbiAgKlx0VGhpcyBmdW5jdGlvbiAgaXMgY2FsbGVkIHdoZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIGFkZHJlc3NcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXZfd29yay5jIGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xuaW5kZXggZTcyMWEwNmQ1OGRmMS4uYzk5OTY3OTA3ZTE4NSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldGRldl93b3JrLmNcbisrKyBiL25ldC9jb3JlL25ldGRldl93b3JrLmNcbkBAIC0zLDcgKzMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG5AQCAtMTI5LDggKzEyOCw2IEBAIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyxcbiBcbiBzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4tXHRydG5sX2xvY2soKTtcbi1cbiBcdHdoaWxlICh0cnVlKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMCwgY29yZSA9IDA7XG4gXHRcdG5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7XG5AQCAtMTQzLDE2ICsxNDAsMTAgQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdH1cbiBcdFx0ZGV2ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXRkZXZfd29ya19saXN0LCBzdHJ1Y3QgbmV0X2RldmljZSxcbiBcdFx0XHRcdCAgICAgICB3b3JrX25vZGUpO1xuLVx0XHQvKiBUYWtlIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzbyBAZGV2IGNhbid0IGJlIGZyZWVkIHdoaWxlIHdlXG4tXHRcdCAqIGRyb3AgdGhlIGxvY2sgdG8gZ3JhYiBpdHMgb3BzIGxvY2s7IHRoZSB3b3JrIHJlZmVyZW5jZSBpc1xuLVx0XHQgKiBvbmx5IHJlbGVhc2VkIG9uY2Ugd2UgY2xhaW0gdGhlIHdvcmsgYmVsb3cuXG4tXHRcdCAqIFRoZSByZS1sb2NraW5nIGRhbmNlIGlzIHRvIGVuc3VyZSB0aGF0IG9wcyBsb2NrIGlzIGVub3VnaFxuLVx0XHQgKiB0byBlbnN1cmUgY2FuY2VsaW5nIHdvcmsgaXMgbm90IHJhY3kgd2l0aCBkZXF1ZXVlLlxuLVx0XHQgKi9cbiBcdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4gXG4tXHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuK1x0XHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiBcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpKSB7XG4gXHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKTtcbkBAIC0xNjksMTAgKzE2MCw4IEBAIHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiBcbiBcdFx0bmV0ZGV2X3dvcmtfcnVuKGRldiwgZXZlbnRzLCBjb3JlKTtcbi1cdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbitcdFx0bmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KGRldik7XG4gXG4gXHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZ0cmFja2VyKTtcbiBcdH1cbi1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MDYuMjI3ODE5NjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM5MTc1NzIwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgRGV2aWNlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdGAsIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYCwgYW5kIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYCB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGNvcmUgZGV2aWNlIG1hbmFnZW1lbnQsIHRoZSBkZXZpY2UgZHJpdmVyIGludGVyZmFjZSwgYW5kIHF1aXRlIHBvc3NpYmx5LCB3b3JrZXIgcXVldWUgYmVoYXZpb3IuXG5cbk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldilgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSBjb21wYXRpYmlsaXR5LXJlbGF0ZWQsIG9yIGEgbG9jayBvcGVyYXRpb24sIHBvdGVudGlhbGx5IGltcGFjdGluZyBob3cgZGV2aWNlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQgb3IgcHJvdGVjdGVkLiBcblxuVG8gY2xhcmlmeSB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaCwgSSdsbCBxdWlja2x5IGNoZWNrIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0YC4gQSBxdWljayBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gYW5kLCBtb3JlIGltcG9ydGFudGx5LCBhbGwgdGhlIHBsYWNlcyB3aGVyZSBpdCdzIGNhbGxlZCBhbmQgYWxsIGZ1bmN0aW9ucyB3aGljaCBtaWdodCBiZSBkZXBlbmRlbnQgb24gaXQuIFRoYXQgd2lsbCBpbW1lZGlhdGVseSBzaGVkIGxpZ2h0IG9uIHRoZSBhcmVhIG9mIHRoZSBwYXRjaCB0aGF0IGhhcyB0byBiZSBpbnZlc3RpZ2F0ZWQuIEknbGwgbmVlZCB0byBrbm93IHdoYXQgaXQncyBkb2luZyB1bmRlciB0aGUgaG9vZCwgYW5kIGhvdyB0aGF0J3MgYmVpbmcgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozOToxMi42MTk1ODAzMTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTIzMTQ3OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X2xvY2tfb3BzX2NvbXBhdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTgzPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtODgtXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDo4OTpzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtOTAte1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTEwMT1fX25ldGRldl9wdXRfbG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvY29yZS9kZXYuYy0xMTAyLXtcXG5uZXQvY29yZS9kZXYuYzoxMTAzOlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy0xMTA0LVxcdGlmIChkZXYtXFx1MDAzZXJlZ19zdGF0ZSBcXHUwMDNlIE5FVFJFR19SRUdJU1RFUkVEIHx8XFxuLS1cXG5uZXQvY29yZS9kZXYuaD02MD1ERUZJTkVfRlJFRShuZXRkZXZfdW5sb2NrX29wc19jb21wYXQsIHN0cnVjdCBuZXRfZGV2aWNlICosXFxuLS1cXG5uZXQvY29yZS9kZXYuaC02Mi1cXG5uZXQvY29yZS9kZXYuaDo2MzojZGVmaW5lIGZvcl9lYWNoX25ldGRldl9sb2NrX29wc19jb21wYXRfc2NvcGVkKG5ldCwgdmFyX25hbWUsIGlmaW5kZXgpXFx0XFxcXFxcbm5ldC9jb3JlL2Rldi5oLTY0LVxcdGZvciAoc3RydWN0IG5ldF9kZXZpY2UgKnZhcl9uYW1lIF9fZnJlZShuZXRkZXZfdW5sb2NrX29wc19jb21wYXQpID0gTlVMTDsgXFxcXFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz02MTg9aW50IG5ldGRldl9ubF9xdWV1ZV9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtNjM4LVxcdH0gZWxzZSB7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzo2Mzk6XFx0XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy02NDAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz05MDE9aW50IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy05MzgtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzo5Mzk6XFx0Zm9yX2VhY2hfbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdF9zY29wZWQobmV0LCBuZXRkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtOTQwLVxcdFxcdGVyciA9IG5ldGRldl9ubF9xc3RhdHNfZ2V0X2R1bXBfb25lKG5ldGRldiwgc2NvcGUsIHNrYixcXG4tLVxcbm5ldC9jb3JlL25ldGRldl93b3JrLmM9MTI5PXN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYy0xNDUtXFxubmV0L2NvcmUvbmV0ZGV2X3dvcmsuYzoxNDY6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9jb3JlL25ldGRldl93b3JrLmMtMTQ3LVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuLS1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYz01OD1pbnQgZXRobmxfYWN0X2NhYmxlX3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTc1LVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jOjc2OlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYy03Ny1cXHRwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihcXHUwMDI2cmVxX2luZm8sIHRiLFxcbi0tXFxubmV0L2V0aHRvb2wvY2FibGV0ZXN0LmM9MzE5PWludCBldGhubF9hY3RfY2FibGVfdGVzdF90ZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTM0Mi1cXG5uZXQvZXRodG9vbC9jYWJsZXRlc3QuYzozNDM6XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9ldGh0b29sL2NhYmxldGVzdC5jLTM0NC1cXHRwaHlkZXYgPSBldGhubF9yZXFfZ2V0X3BoeWRldihcXHUwMDI2cmVxX2luZm8sIHRiLFxcbi0tXFxubmV0L2V0aHRvb2wvbW9kdWxlLmM9NDE3PWludCBldGhubF9hY3RfbW9kdWxlX2Z3X2ZsYXNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9tb2R1bGUuYy00MzEtXFxubmV0L2V0aHRvb2wvbW9kdWxlLmM6NDMyOlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9tb2R1bGUuYy00MzMtXFx0cmV0ID0gZXRobmxfb3BzX2JlZ2luKGRldik7XFxuLS1cXG5uZXQvZXRodG9vbC9yc3MuYz00Njg9aW50IGV0aG5sX3Jzc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmMtNDczLVxcbm5ldC9ldGh0b29sL3Jzcy5jOjQ3NDpcXHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2V0aHRvb2wvcnNzLmMtNDc1LVxcdFxcdGlmIChjdHgtXFx1MDAzZW1hdGNoX2lmaW5kZXggXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VtYXRjaF9pZmluZGV4ICE9IGN0eC1cXHUwMDNlaWZpbmRleClcXG4tLVxcbm5ldC9ldGh0b29sL3Jzcy5jPTEwMDI9aW50IGV0aG5sX3Jzc19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmMtMTAzNi1cXG5uZXQvZXRodG9vbC9yc3MuYzoxMDM3OlxcdG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KTtcXG5uZXQvZXRodG9vbC9yc3MuYy0xMDM4LVxcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmM9MTE1MD1pbnQgZXRobmxfcnNzX2RlbGV0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9yc3MuYy0xMTc3LVxcbm5ldC9ldGh0b29sL3Jzcy5jOjExNzg6XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbm5ldC9ldGh0b29sL3Jzcy5jLTExNzktXFxuLS1cXG5uZXQvZXRodG9vbC90c2luZm8uYz00NzM9aW50IGV0aG5sX3RzaW5mb19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDgxLVxcbm5ldC9ldGh0b29sL3RzaW5mby5jOjQ4MjpcXHRcXHRuZXRkZXZfbG9ja19vcHNfY29tcGF0KGRldik7XFxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDgzLVxcdFxcdHJldCA9IGV0aG5sX3RzaW5mb19kdW1wX29uZV9uZXRfdG9wbyhza2IsIGRldiwgY2IpO1xcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNDg3LVxcbm5ldC9ldGh0b29sL3RzaW5mby5jOjQ4ODpcXHRmb3JfZWFjaF9uZXRkZXZfbG9ja19vcHNfY29tcGF0X3Njb3BlZChuZXQsIGRldiwgY3R4LVxcdTAwM2Vwb3NfaWZpbmRleCkge1xcbm5ldC9ldGh0b29sL3RzaW5mby5jLTQ4OS1cXHRcXHRyZXQgPSBldGhubF90c2luZm9fZHVtcF9vbmVfbmV0X3RvcG8oc2tiLCBkZXYsIGNiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MTcuMTMxOTEwOTgyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzIwOTA1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIGBuZXRkZXZfd29yay5jYCBBcm91bmQgVGhhdCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgXCJPa2F5LCBsZXQncyBub3QganVzdCBnbGFuY2UgYXQgKnRoYXQqIHNwZWNpZmljIGZ1bmN0aW9uOyB3ZSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZSBoZXJlLlwiIEl0J3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmaWxlLCBgbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY2AuIEkgbmVlZCB0byBncmFzcCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBkZXZpY2UgbGF5ZXIgYXMgYSB3aG9sZSwgd2hhdCB0aGlzIGlzIHRyeWluZyB0byBhY2NvbXBsaXNoLlxuXG5MZXQncyBkbyBhIGNvbXBsZXRlIHJlYWQtdGhyb3VnaCBpbiBvcmRlciB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcyBhbmQgZG9lcyBub3QgZG8uIEknbGwgYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGFyZWFzIHN1Y2ggYXMgbG9ja2luZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCwgZXNwZWNpYWxseSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhpcyBhZmZlY3RzIHRoZSBzY2hlZHVsZXIuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gY29uY3VycmVuY3kgY29uY2VybnMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhpcyBhcmVhLiBObyBzaG9ydGN1dHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24ncyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdywgaXRzIGRlcGVuZGVuY2llcywgYW5kIHdoYXQga2luZCBvZiB3b3JrIGl0IGlzIG1lYW50IHRvIHBlcmZvcm0uIEknbSBnb2luZyB0byBzdGFydCByZWFkaW5nIGZyb20gdGhlIGJlZ2lubmluZyBhbmQgZm9sbG93IHRoZSBsb2dpYyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDMxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MTkuNDY0MDA1NDExWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRkZXZfd29yay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHRcXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4gICA5OlxcdFxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcImRldi5oXFxcIlxcbiAgMTE6XFx0XFxuICAxMjpcXHRzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuICAxMzpcXHRcXG4gIDE0OlxcdC8qIEBuZXRkZXZfd29ya19sb2NrIHByb3RlY3RzOlxcbiAgMTU6XFx0ICogIC0gQG5ldGRldl93b3JrX2xpc3RcXG4gIDE2OlxcdCAqICAtIHdpdGhpbiB0aGUgbGlzdCBlbnRyaWVzIChzdHJ1Y3QgbmV0X2RldmljZSBmaWVsZHMpOlxcbiAgMTc6XFx0ICpcXHQtIHdvcmtfbm9kZVxcbiAgMTg6XFx0ICpcXHQtIHdvcmtfdHJhY2tlclxcbiAgMTk6XFx0ICpcXHQtIHdvcmtfcGVuZGluZ1xcbiAgMjA6XFx0ICpcXHQtIHdvcmtfY29yZV9wZW5kaW5nXFxuICAyMTpcXHQgKi9cXG4gIDIyOlxcdHN0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3dvcmtfbGlzdCk7XFxuICAyMzpcXHRzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ldGRldl93b3JrX2xvY2spO1xcbiAgMjQ6XFx0c3RhdGljIERFQ0xBUkVfV09SSyhuZXRkZXZfd29yaywgbmV0ZGV2X3dvcmtfcHJvYyk7XFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXFxuICAyNzpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGNvcmUpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRpZiAoIWV2ZW50cyBcXHUwMDI2XFx1MDAyNiAhY29yZSlcXG4gIDMwOlxcdFxcdFxcdHJldHVybjtcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gIDMzOlxcdFxcdGlmICghZGV2X2lzYWxpdmUoZGV2KSkge1xcbiAgMzQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAgMzU6XFx0XFx0XFx0cmV0dXJuO1xcbiAgMzY6XFx0XFx0fVxcbiAgMzc6XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKSkge1xcbiAgMzg6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUsIFxcdTAwMjZuZXRkZXZfd29ya19saXN0KTtcXG4gIDM5OlxcdFxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4gIDQwOlxcdFxcdH1cXG4gIDQxOlxcdFxcdGRldi1cXHUwMDNld29ya19wZW5kaW5nIHw9IGV2ZW50cztcXG4gIDQyOlxcdFxcdGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcgfD0gY29yZTtcXG4gIDQzOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bmV0ZGV2X3dvcmspO1xcbiAgNDY6XFx0fVxcbiAgNDc6XFx0XFxuICA0ODpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZ1xcbiAgNDk6XFx0bmV0ZGV2X3dvcmtfZGVxdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nICpwZW5kaW5nLFxcbiAgNTA6XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbWFzaylcXG4gIDUxOlxcdHtcXG4gIDUyOlxcdFxcdHVuc2lnbmVkIGxvbmcgZXZlbnRzO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAgNTU6XFx0XFx0ZXZlbnRzID0gKnBlbmRpbmcgXFx1MDAyNiBtYXNrO1xcbiAgNTY6XFx0XFx0KnBlbmRpbmcgXFx1MDAyNj0gfmV2ZW50cztcXG4gIDU3OlxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpIFxcdTAwMjZcXHUwMDI2XFxuICA1ODpcXHRcXHQgICAgIWRldi1cXHUwMDNld29ya19wZW5kaW5nIFxcdTAwMjZcXHUwMDI2ICFkZXYtXFx1MDAzZXdvcmtfY29yZV9wZW5kaW5nKSB7XFxuICA1OTpcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSk7XFxuICA2MDpcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyKTtcXG4gIDYxOlxcdFxcdH1cXG4gIDYyOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0cmV0dXJuIGV2ZW50cztcXG4gIDY1OlxcdH1cXG4gIDY2OlxcdFxcbiAgNjc6XFx0dm9pZCBuZXRkZXZfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA2ODpcXHR7XFxuICA2OTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAgNzA6XFx0XFx0ZGV2LVxcdTAwM2V3b3JrX3BlbmRpbmcgPSAwO1xcbiAgNzE6XFx0XFx0ZGV2LVxcdTAwM2V3b3JrX2NvcmVfcGVuZGluZyA9IDA7XFxuICA3MjpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKSkge1xcbiAgNzM6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpO1xcbiAgNzQ6XFx0XFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfdHJhY2tlcik7XFxuICA3NTpcXHRcXHR9XFxuICA3NjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuICA3NzpcXHR9XFxuICA3ODpcXHRcXG4gIDc5OlxcdHZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXFxuICA4MDpcXHR7XFxuICA4MTpcXHRcXHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgZXZlbnRzLCAwKTtcXG4gIDgyOlxcdH1cXG4gIDgzOlxcdEVYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xcbiAgODQ6XFx0XFxuICA4NTpcXHQvKipcXG4gIDg2OlxcdCAqIG5ldGRldl93b3JrX2NhbmNlbCgpIC0gY2FuY2VsIHNlbGVjdGVkIHdvcmsgZm9yIGEgbmV0ZGV2XFxuICA4NzpcXHQgKiBAZGV2OiBuZXRfZGV2aWNlXFxuICA4ODpcXHQgKiBAbWFzazogZXZlbnRzIHRvIGNhbmNlbFxcbiAgODk6XFx0ICpcXG4gIDkwOlxcdCAqIENsZWFyIEBtYXNrIGZyb20gdGhlIGRldmljZSdzIHdvcmsgcGVuZGluZyBtYXNrLiBJZiBubyB3b3JrIGlzIGxlZnQgcGVuZGluZ1xcbiAgOTE6XFx0ICogdGhlIGRldmljZSBpcyBkZXF1ZXVlZCBhbmQgaXRzIG5kb193b3JrIHdvbid0IGJlIGNhbGxlZC5cXG4gIDkyOlxcdCAqXFxuICA5MzpcXHQgKiBObyBleHBlY3RhdGlvbnMgb24gbG9ja2luZywgYnV0IGFsc28gbm8gZ3VhcmFudGVlcyBwcm92aWRlZC4gSWYgdGhlIGNhbGxlclxcbiAgOTQ6XFx0ICogd2FudHMgdG8gdG91Y2ggQGRldiBhZnRlcndhcmRzIChlLmcuIGNhbGwgdGhlIHdvcmsgdGhhdCBnb3QgY2FuY2VsZWQpXFxuICA5NTpcXHQgKiB0aGV5IGhhdmUgdG8gZW5zdXJlIEBkZXYgZG9lcyBub3QgZ2V0IGZyZWVkLlxcbiAgOTY6XFx0ICpcXG4gIDk3OlxcdCAqIFJldHVybnM6IHRoZSBzdWJzZXQgb2YgQG1hc2sgdGhhdCB3YXMgYWN0dWFsbHkgcGVuZGluZywgc28gdGhlIGNhbGxlciBjYW4gcnVuXFxuICA5ODpcXHQgKiB0aG9zZSBldmVudHMgaW5saW5lLlxcbiAgOTk6XFx0ICovXFxuIDEwMDpcXHR1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM5OjE5LjQ2NDE4MTI2MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjgwOTAxMzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGBuZXRkZXZfd29yay5jYCBmaWxlIGZyb20gdGhlIGBuZXQvY29yZWAgZGlyZWN0b3J5LlxuXG4qKkRpdmluZyBEZWVwIGludG8gYG5ldGRldl93b3JrLmNgKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBncm9rIHRoZSByZXN0IG9mIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYC4gSSBhbHJlYWR5IGhhdmUgYSBkZWNlbnQgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjayBhcmNoaXRlY3R1cmUsIHNvIEknbSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWNzIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBpbnRlcnBsYXkgb2YgdGhlIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbnMgKGxpa2UgaGFuZGxpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uKSB3aXRoIHRoZSB3b3JrIHF1ZXVlIG1lY2hhbmlzbS5cblxuSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IG5ldHdvcmsgZGV2aWNlcyBlbnF1ZXVlIHdvcmsgdG8gYmUgZG9uZSBsYXRlciDigJMgdGhlIGNsYXNzaWMgZGVmZXJyZWQgcHJvY2Vzc2luZyBwYXR0ZXJuLiBMaWtlbHksIHRoaXMgaW52b2x2ZXMgaGFuZGxpbmcgaW50ZXJydXB0cywgc2NoZWR1bGluZyB0YXNrcyB0byBhdm9pZCBibG9ja2luZyBjcml0aWNhbCBwYXRocywgYW5kIG1haW50YWluaW5nIHNvbWUgc29ydCBvZiBvcmRlcmluZyBvciBwcmlvcml0aXphdGlvbi4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGV5IG1hbmFnZSB0aGUgY29udGV4dCBzd2l0Y2hlcyBpbnZvbHZlZCwgZXNwZWNpYWxseSBpZiB0aGVyZSdzIGFueSBjbGV2ZXIgdXNlIG9mIHBlci1DUFUgcXVldWVzIG9yIG90aGVyIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGZvciBtdWx0aS1jb3JlIHN5c3RlbXMuXG5cbkdpdmVuIHRoZSBmaWxlIG5hbWUsIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGRlYWxzIHdpdGggdGhlIHdvcmtxdWV1ZXMgc3BlY2lmaWNhbGx5IGZvciBuZXR3b3JrIGRldmljZSBvcGVyYXRpb25zLiBUaGF0IG1lYW5zIHVuZGVyc3RhbmRpbmcgaG93IHRoZSB3b3JrIGlzIHN1Ym1pdHRlZCwgaG93IHRoZSB3b3JrcXVldWUgdGhyZWFkcyBhcmUgd29rZW4gdXAsIGFuZCBob3cgdGhlIG5ldHdvcmsgZGV2aWNlLXNwZWNpZmljIHdvcmsgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBleGVjdXRlZC4gSSdsbCBiZSBsb29raW5nIGZvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBsaWtlIHNwaW5sb2NrcyBvciBtdXRleGVzIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgY29uY3VycmVudCBhY2Nlc3MgZnJvbSBkaWZmZXJlbnQgY29udGV4dHMuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgc3BlY2lhbCBoYW5kbGluZyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIG5ldHdvcmsgZGV2aWNlcyBsaWtlIHZpcnR1YWwgaW50ZXJmYWNlcywgYm9uZCBpbnRlcmZhY2VzLCBvciBicmlkZ2luZyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MjUuNzQ1MDg2MjA2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRkZXZfd29yay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMTpcXHR7XFxuIDEwMjpcXHRcXHRyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsIFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfcGVuZGluZywgbWFzayk7XFxuIDEwMzpcXHR9XFxuIDEwNDpcXHRFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX2NhbmNlbCk7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdHZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxcbiAxMDc6XFx0e1xcbiAxMDg6XFx0XFx0bmV0ZGV2X3dvcmtfZW5xdWV1ZShkZXYsIDAsIGV2ZW50cyk7XFxuIDEwOTpcXHR9XFxuIDExMDpcXHRcXG4gMTExOlxcdHVuc2lnbmVkIGxvbmdcXG4gMTEyOlxcdF9fbmV0ZGV2X3dvcmtfY29yZV9jYW5jZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKVxcbiAxMTM6XFx0e1xcbiAxMTQ6XFx0XFx0cmV0dXJuIG5ldGRldl93b3JrX2RlcXVldWUoZGV2LCBcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX2NvcmVfcGVuZGluZywgbWFzayk7XFxuIDExNTpcXHR9XFxuIDExNjpcXHRcXG4gMTE3OlxcdHN0YXRpYyB2b2lkIG5ldGRldl93b3JrX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyxcXG4gMTE4OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGNvcmUpXFxuIDExOTpcXHR7XFxuIDEyMDpcXHRcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXFxuIDEyMTpcXHRcXHRcXHRyZXR1cm47XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdGlmIChjb3JlIFxcdTAwMjYgTkVUREVWX1dPUktfUlhfTU9ERSlcXG4gMTI0OlxcdFxcdFxcdG5ldGlmX3J4X21vZGVfcnVuKGRldik7XFxuIDEyNTpcXHRcXHRpZiAoZXZlbnRzIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3dvcmspXFxuIDEyNjpcXHRcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb193b3JrKGRldiwgZXZlbnRzKTtcXG4gMTI3OlxcdH1cXG4gMTI4OlxcdFxcbiAxMjk6XFx0c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDEzMDpcXHR7XFxuIDEzMTpcXHRcXHR3aGlsZSAodHJ1ZSkge1xcbiAxMzI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBldmVudHMgPSAwLCBjb3JlID0gMDtcXG4gMTMzOlxcdFxcdFxcdG5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7XFxuIDEzNDpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiAxMzU6XFx0XFxuIDEzNjpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbiAxMzc6XFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm5ldGRldl93b3JrX2xpc3QpKSB7XFxuIDEzODpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuIDEzOTpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTQwOlxcdFxcdFxcdH1cXG4gMTQxOlxcdFxcdFxcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNm5ldGRldl93b3JrX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLFxcbiAxNDI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHdvcmtfbm9kZSk7XFxuIDE0MzpcXHRcXHRcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4gMTQ0OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0XFx0bmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChkZXYpO1xcbiAxNDc6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcXG4gMTQ4OlxcdFxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpKSB7XFxuIDE0OTpcXHRcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSk7XFxuIDE1MDpcXHRcXHRcXHRcXHRjb3JlID0gZGV2LVxcdTAwM2V3b3JrX2NvcmVfcGVuZGluZztcXG4gMTUxOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcgPSAwO1xcbiAxNTI6XFx0XFx0XFx0XFx0ZXZlbnRzID0gZGV2LVxcdTAwM2V3b3JrX3BlbmRpbmc7XFxuIDE1MzpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXdvcmtfcGVuZGluZyA9IDA7XFxuIDE1NDpcXHRcXHRcXHRcXHQvKiBXZSB0b29rIGFub3RoZXIgcmVmIGFib3ZlICovXFxuIDE1NTpcXHRcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyKTtcXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0XFx0XFx0aWYgKCFkZXZfaXNhbGl2ZShkZXYpKVxcbiAxNTg6XFx0XFx0XFx0XFx0XFx0Y29yZSA9IGV2ZW50cyA9IDA7XFxuIDE1OTpcXHRcXHRcXHR9XFxuIDE2MDpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdFxcdG5ldGRldl93b3JrX3J1bihkZXYsIGV2ZW50cywgY29yZSk7XFxuIDE2MzpcXHRcXHRcXHRuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoZGV2KTtcXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZ0cmFja2VyKTtcXG4gMTY2OlxcdFxcdH1cXG4gMTY3OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MjUuNzQ1MTkzMjk2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MjkzMDgwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBuZXR3b3JrIGRldmljZSBkcml2ZXIgaW50ZXJuYWxzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBuZXRkZXZfbG9jayBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYWN0dWFsIGRlZmluaXRpb24gYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYG5ldGRldl9sb2NrX29wc19jb21wYXRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBoZWFkIG92ZXIgdG8gYGluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGNvbXBhdGliaWxpdHkgbGF5ZXIgZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhpcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbG9ja2luZyBtZWNoYW5pc21zIG9mIHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIuIFdoYXQgc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBiZWluZyB3cmFwcGVkIG9yIG1vZGlmaWVkIHdpdGhpbiBgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdGA/IEFuZCwgd2hhdCdzIHRoZSBwdXJwb3NlIG9mIGl0PyBJcyBpdCBmb3IgaGFuZGxpbmcgb2xkZXIgZHJpdmVycywgb3IgYWNjb21tb2RhdGluZyBzb21lIHNwZWNpZmljIGNvbXBhdGliaWxpdHkgbmVlZD8gV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbmFsaXRpZXMgcHJvdmlkZWQgYnkgdGhpcyBzdHJ1Y3R1cmUsIGFuZCBob3cgZG9lcyBpdCBpbnRlZ3JhdGUgaW50byB0aGUgbGFyZ2VyIGxvY2tpbmcgc2NoZW1lIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrPyBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBjcnVjaWFsIGZvciBmaWd1cmluZyBvdXQgaG93IHRvIGhhbmRsZSBhbnkgcG90ZW50aWFsIGlzc3Vlcywgb3IgZm9yIG9wdGltaXppbmcgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgaW4gdGhlIGJyb2FkZXIgc2NvcGUgb2YgbmV0d29yayBkcml2ZXIgZGV2ZWxvcG1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjM5OjI4LjQ3NDUwNDYwNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHR7XFxuICA2MTpcXHRcXHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcXG4gIDYyOlxcdFxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XFxuICA2MzpcXHRcXHRlbHNlXFxuICA2NDpcXHRcXHRcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuICA2NTpcXHR9XFxuICA2NjpcXHRcXG4gIDY3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA2ODpcXHR7XFxuICA2OTpcXHRcXHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcXG4gIDcwOlxcdFxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuICA3MTpcXHRcXHRlbHNlXFxuICA3MjpcXHRcXHRcXHRBU1NFUlRfUlROTCgpO1xcbiAgNzM6XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4gIDc2OlxcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXRfb3JfaW52aXNpYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRpZiAoZGV2LVxcdTAwM2VyZWdfc3RhdGUgPT0gTkVUUkVHX1JFR0lTVEVSRUQgfHxcXG4gIDc5OlxcdFxcdCAgICBkZXYtXFx1MDAzZXJlZ19zdGF0ZSA9PSBORVRSRUdfVU5SRUdJU1RFUklORylcXG4gIDgwOlxcdFxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcXG4gIDgxOlxcdH1cXG4gIDgyOlxcdFxcbiAgODM6XFx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9hc3NlcnRfbG9ja2VkX29wcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgODQ6XFx0e1xcbiAgODU6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuICA4NjpcXHRcXHRcXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChkZXYpO1xcbiAgODc6XFx0fVxcbiAgODg6XFx0XFxuICA4OTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgOTA6XFx0e1xcbiAgOTE6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuICA5MjpcXHRcXHRcXHRuZXRkZXZfbG9jayhkZXYpO1xcbiAgOTM6XFx0XFx0ZWxzZVxcbiAgOTQ6XFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gIDk4OlxcdHtcXG4gIDk5OlxcdFxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbiAxMDA6XFx0XFx0XFx0bmV0ZGV2X3VubG9jayhkZXYpO1xcbiAxMDE6XFx0XFx0ZWxzZVxcbiAxMDI6XFx0XFx0XFx0cnRubF91bmxvY2soKTtcXG4gMTAzOlxcdH1cXG4gMTA0OlxcdFxcbiAxMDU6XFx0LyogTWF0Y2hpbmcgXFxcIm9wcyBwcm90ZWN0ZWRcXFwiIGNhdGVnb3J5IGZyb20gbmV0ZGV2aWNlLmggKi9cXG4gMTA2OlxcdHN0YXRpYyBpbmxpbmUgaW50IG5ldGRldl9pc19sb2NrZWRfb3BzX2NvbXBhdChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAxMDc6XFx0e1xcbiAxMDg6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuIDEwOTpcXHRcXHRcXHRyZXR1cm4gbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbiAxMTA6XFx0XFx0cmV0dXJuIGxvY2tkZXBfcnRubF9pc19oZWxkKCk7XFxuIDExMTpcXHR9XFxuIDExMjpcXHRcXG4gMTEzOlxcdHN0YXRpYyBpbmxpbmUgaW50IG5ldGRldl9sb2NrX2NtcF9mbihjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmEsXFxuIDExNDpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqYilcXG4gMTE1OlxcdHtcXG4gMTE2OlxcdFxcdGlmIChhID09IGIpXFxuIDExNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0LyogQWxsb3cgbG9ja2luZyBtdWx0aXBsZSBkZXZpY2VzIG9ubHkgdW5kZXIgcnRubF9sb2NrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTozOToyOC40NzQ2MjA3NDRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA4NTI2NDc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGRldiBXb3JrIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCBpbnZvbHZlcyBhIGNyaXRpY2FsIGV4YW1pbmF0aW9uIG9mIGl0cyBmdW5jdGlvbiBhbmQgcG90ZW50aWFsIGltcGFjdC4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgaXQncyBhIHJlZmFjdG9yaW5nIG9mIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBgbmV0ZGV2X3dvcmtfcHJvY2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9jb3JlL25ldGRldl93b3JrLmNgLiBCZWZvcmUsIHdlIGhhZCB0aGUgYHJ0bmxfbG9jaygpYCBoZWxkIHVuY29uZGl0aW9uYWxseSBvdmVyIHRoZSBlbnRpcmUgbG9vcCwgYWxvbmcgd2l0aCBwZXItZGV2aWNlIGxvY2tzIGFzIG5lZWRlZC4gTm93LCBpdCdzIGJlZW4gY2hhbmdlZCB0byB1c2UgYG5ldGRldl9sb2NrX29wc19jb21wYXQoZGV2KWAgLyBgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KGRldilgIG9uIGEgcGVyLWRldmljZSBiYXNpcyB3aXRoaW4gdGhlIGxvb3AuIFRoaXMgbG9va3MgbGlrZSBhbiBhdHRlbXB0IGF0IGltcHJvdmluZyBjb25jdXJyZW5jeSBieSByZWR1Y2luZyB0aGUgc2NvcGUgb2YgdGhlIGBydG5sX2xvY2tgLiBQbHVzLCB0aGVyZSBhcmUgc29tZSB1cGRhdGVzIHRvIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudHMgdG8gcmVmbGVjdCB0aGUgbmV3IHN5bmNocm9uaXphdGlvbiBtb2RlbCBmb3IgbWV0aG9kcyBsaWtlIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgLlxuXG5Ob3csIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgcmlza3MuIEZpcnN0LCB0aGUgbWVtb3J5IHNhZmV0eSBjb25jZXJuczogYW0gSSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZT8gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBwYXRjaCBpbnZvbHZlcyBhbnkga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLCBidXQgdGhlcmUgYXJlIG5vbmUuIFNpbWlsYXJseSwgbm8gYnJhbmNoaW5nIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gYWx0ZXJhdGlvbnMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBMb29rcyBsaWtlIGFsbCBtZW1vcnktcmVsYXRlZCBhc3BlY3RzIGFyZSBjb3ZlcmVkLlxuXG5UaGUgbWFqb3IgYXJlYSBvZiBjb25jZXJuIGhlcmUgaXMgdGhlIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIHJlZmFjdG9yIGl0c2VsZi4gQ29uY3VycmVuY3kgaXNzdWVzIGxpa2UgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIGFuZCBsb2NrZGVwIHZpb2xhdGlvbnMgYXJlIHRoZSBwcmltYXJ5IHBvdGVudGlhbCByaXNrcy4gVGhlIHBhdGNoIGl0c2VsZiBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGp1c3QgY2hhbmdlcyB0aGUgbG9ja2luZyBzdHJhdGVnaWVzIGZvciBleGlzdGluZyBjb2RlLCBhbmQgSSBzZWUgdGhhdCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gaWRlbnRpZnkgdGhvc2Uga2luZHMgb2YgaXNzdWVzLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgcHVyZWx5IGFib3V0IGxvY2tpbmcgY2hhbmdlcywgYW5kIHNpbmNlIG5vIG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGNvcGllcywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIHVzZXItc3BhY2UgY29waWVzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQsIEknbSBmYWlybHkgY29uZmlkZW50IHRoYXQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc24ndCByZWFsbHkgYXBwbGljYWJsZSBoZXJlLiBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlcyBhbmQgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGFyZW4ndCByZWFsbHkgaW4gdGhlIHNjb3BlIG9mIHRoaXMgcmVmYWN0b3JpbmcuIFNvLCBJIG5lZWQgdG8gY29udHJhc3QgS0FTQU4vTE9DS0RFUCB2ZXJzdXMgS01TQU4gaGVyZS5cblxuVGhlcmVmb3JlLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nLCBJIHRoaW5rIHRoaXMgYW5hbHlzaXMgaXMgc291bmQuIExldCdzIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NDUsIk91dHB1dFRva2VucyI6MjE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6Mzk6MzUuNTU5ODg4ODI5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzeW5jaHJvbml6YXRpb24gbW9kZWwgZm9yIGRlZmVycmVkIG5ldGRldiB3b3JrIChgbmV0ZGV2X3dvcmtfcHJvY2ApIGluIGBuZXQvY29yZS9uZXRkZXZfd29yay5jYCBhbmQgdXBkYXRlcyByZWxhdGVkIGRvY3VtZW50YXRpb24vaGVhZGVyIGNvbW1lbnRzLiBJbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseSBhY3F1aXJpbmcgYHJ0bmxfbG9jaygpYCBmb3IgdGhlIGVudGlyZSBsb29wIGluIGBuZXRkZXZfd29ya19wcm9jYCwgaXQgbG9ja3MgZWFjaCBuZXQgZGV2aWNlIGluZGl2aWR1YWxseSB1c2luZyBgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdCgpYCAvIGBuZXRkZXZfdW5sb2NrX29wc19jb21wYXQoKWAuXFxuXFxuVGhpcyBpcyBhIHB1cmUgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGNoYW5nZS4gQW55IHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgbW9kaWZpY2F0aW9ucyByZWxhdGUgdG8gbG9ja2luZyBoaWVyYXJjaHksIHJhY2UgY29uZGl0aW9ucywgb3IgZGV2aWNlIHJlZmVyZW5jZS9saWZlY3ljbGUgbWFuYWdlbWVudCwgd2hpY2ggYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBhbHRlciBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdmFyaWFibGUgaW5pdGlhbGl6YXRpb25zLCBvciBidWZmZXIgYm91bmRhcnkgaGFuZGxpbmcuIENvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIHN5bmNocm9uaXphdGlvbiBtb2RlbCBmb3IgZGVmZXJyZWQgbmV0ZGV2IHdvcmsgKGBuZXRkZXZfd29ya19wcm9jYCkgaW4gYG5ldC9jb3JlL25ldGRldl93b3JrLmNgIGFuZCB1cGRhdGVzIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi9oZWFkZXIgY29tbWVudHMuIEluc3RlYWQgb2YgdW5jb25kaXRpb25hbGx5IGFjcXVpcmluZyBgcnRubF9sb2NrKClgIGZvciB0aGUgZW50aXJlIGxvb3AgaW4gYG5ldGRldl93b3JrX3Byb2NgLCBpdCBsb2NrcyBlYWNoIG5ldCBkZXZpY2UgaW5kaXZpZHVhbGx5IHVzaW5nIGBuZXRkZXZfbG9ja19vcHNfY29tcGF0KClgIC8gYG5ldGRldl91bmxvY2tfb3BzX2NvbXBhdCgpYC5cXG5cXG5UaGlzIGlzIGEgcHVyZSBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gY2hhbmdlLiBBbnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHJlbGF0ZSB0byBsb2NraW5nIGhpZXJhcmNoeSwgcmFjZSBjb25kaXRpb25zLCBvciBkZXZpY2UgcmVmZXJlbmNlL2xpZmVjeWNsZSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbnMsIG9yIGJ1ZmZlciBib3VuZGFyeSBoYW5kbGluZy4gQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7k4t[1] Phase: Succeeded StartedAt: 2026-09-06 05:39:47 +0000 UTC FinishedAt: 2026-09-06 05:39:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 05:39:47 +0000 UTC FinishedAt: 2026-09-06 05:39:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2] Phase: Succeeded StartedAt: 2026-09-06 05:39:47 +0000 UTC FinishedAt: 2026-09-06 09:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 05:39:48 +0000 UTC FinishedAt: 2026-09-06 09:38:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 05:39:48 +0000 UTC FinishedAt: 2026-09-06 05:40:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 05:39:48 +0000 UTC FinishedAt: 2026-09-06 05:40:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7k4t/series-workflowm7k4t-convert-artifact-2875982540/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 05:40:22 +0000 UTC FinishedAt: 2026-09-06 06:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 05:40:22 +0000 UTC FinishedAt: 2026-09-06 06:05:49 +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:*faa693d5-a74f-491c-952d-310f9c9cdc50,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-workflowm7k4t/series-workflowm7k4t-convert-artifact-2875982540/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": "cfdff938-0d6a-47b9-b751-7b6f93520d58", "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-workflowm7k4t/series-workflowm7k4t-build-action-2704933114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 05:40:22 +0000 UTC FinishedAt: 2026-09-06 06:05:37 +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:*faa693d5-a74f-491c-952d-310f9c9cdc50,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-workflowm7k4t/series-workflowm7k4t-convert-artifact-2875982540/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": "cfdff938-0d6a-47b9-b751-7b6f93520d58", "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-workflowm7k4t/series-workflowm7k4t-build-action-2704933114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 06:05:49 +0000 UTC FinishedAt: 2026-09-06 06:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 06:05:49 +0000 UTC FinishedAt: 2026-09-06 06:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 06:05:49 +0000 UTC FinishedAt: 2026-09-06 06:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 06:05:49 +0000 UTC FinishedAt: 2026-09-06 06:06:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7k4t/series-workflowm7k4t-convert-artifact-1250796299/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 06:06:13 +0000 UTC FinishedAt: 2026-09-06 06:08:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 06:06:13 +0000 UTC FinishedAt: 2026-09-06 06:07:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cfdff938-0d6a-47b9-b751-7b6f93520d58,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-workflowm7k4t/series-workflowm7k4t-build-action-2704933114/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-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 06:08:09 +0000 UTC FinishedAt: 2026-09-06 06:08:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 06:08:09 +0000 UTC FinishedAt: 2026-09-06 06:08:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 06:08:09 +0000 UTC FinishedAt: 2026-09-06 06:34:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 06:08:09 +0000 UTC FinishedAt: 2026-09-06 06:34:42 +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:*faa693d5-a74f-491c-952d-310f9c9cdc50,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-workflowm7k4t/series-workflowm7k4t-convert-artifact-1250796299/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": "9154181d-3614-4cc3-b43a-b86f621a3e4d", "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-workflowm7k4t/series-workflowm7k4t-build-action-3920118191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 06:08:09 +0000 UTC FinishedAt: 2026-09-06 06:34:29 +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:*faa693d5-a74f-491c-952d-310f9c9cdc50,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-workflowm7k4t/series-workflowm7k4t-convert-artifact-1250796299/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": "9154181d-3614-4cc3-b43a-b86f621a3e4d", "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-workflowm7k4t/series-workflowm7k4t-build-action-3920118191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 06:34:42 +0000 UTC FinishedAt: 2026-09-06 06:34:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 06:34:42 +0000 UTC FinishedAt: 2026-09-06 06:34:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 06:34:42 +0000 UTC FinishedAt: 2026-09-06 06:36:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 06:34:42 +0000 UTC FinishedAt: 2026-09-06 06:36:22 +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:*9154181d-3614-4cc3-b43a-b86f621a3e4d,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-workflowm7k4t/series-workflowm7k4t-build-action-3920118191/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-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 06:36:33 +0000 UTC FinishedAt: 2026-09-06 09:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 06:36:33 +0000 UTC FinishedAt: 2026-09-06 06:36:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 06:36:33 +0000 UTC FinishedAt: 2026-09-06 06:36:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 06:36:34 +0000 UTC FinishedAt: 2026-09-06 09:38:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*cfdff938-0d6a-47b9-b751-7b6f93520d58,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9154181d-3614-4cc3-b43a-b86f621a3e4d,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-workflowm7k4t/series-workflowm7k4t-build-action-2704933114/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-workflowm7k4t/series-workflowm7k4t-build-action-3920118191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 06:36:34 +0000 UTC FinishedAt: 2026-09-06 06:36:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 06:36:34 +0000 UTC FinishedAt: 2026-09-06 06:36:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7k4t/series-workflowm7k4t-convert-artifact-958200228/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 06:36:34 +0000 UTC FinishedAt: 2026-09-06 06:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 06:36:47 +0000 UTC FinishedAt: 2026-09-06 09:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7k4t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_proc","netdev_work_run","netdev_work_sched","netdev_work_cancel","netdev_work_cancel_all","__netdev_work_core_sched","__netdev_work_core_cancel","netif_rx_mode_run"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d5f1bda7e8bbfff4f60b82a150219a72f37e7e5","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"c8ce0b28-1c59-42b9-9a3c-46e7f9d61632","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 06:36:47 +0000 UTC FinishedAt: 2026-09-06 09:38:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cfdff938-0d6a-47b9-b751-7b6f93520d58,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9154181d-3614-4cc3-b43a-b86f621a3e4d,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-workflowm7k4t/series-workflowm7k4t-build-action-2704933114/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-workflowm7k4t/series-workflowm7k4t-build-action-3920118191/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-workflowm7k4t/series-workflowm7k4t-convert-artifact-958200228/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,}