Name: series-workflow2ffh5 Phase: Succeeded StartedAt: 2026-09-06 16:55:59 +0000 UTC FinishedAt: 2026-09-06 21:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[0] Phase: Succeeded StartedAt: 2026-09-06 16:55:59 +0000 UTC FinishedAt: 2026-09-06 17:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 16:55:59 +0000 UTC FinishedAt: 2026-09-06 17:22:10 +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": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IEEE802154", "MAC802154", "IEEE802154_NL802154_EXPERIMENTAL", "IEEE802154_FAKELB", "IEEE802154_HWSIM" ], "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": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IEEE802154", "MAC802154", "IEEE802154_NL802154_EXPERIMENTAL", "IEEE802154_FAKELB", "IEEE802154_HWSIM" ], "series_id": "d7d2c900-d761-454a-960c-1664965121df" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cfg802154_netdev_notifier_call", "nl802154_new_interface", "ieee802154_add_iface" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRkFLRUxCJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwmIzM0OywKICAgICYjMzQ7bmw4MDIxNTRfbmV3X2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTU0X2FkZF9pZmFjZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBzdGF0aWMgY29uc3QgZGV2aWNlX3R5cGUgc3RydWN0dXJlIChgd3Bhbl9kZXZfdHlwZWApLCBhIFdBUk5fT04gY2hlY2sgZm9yIHVuc3BlY2lmaWVkIGludGVyZmFjZSB0eXBlcywgYW5kIHNldHMgdGhlIG5ldGRldiBkZXZpY2UgdHlwZSBwb2ludGVyIGR1cmluZyBORVRERVZfUE9TVF9JTklUIG5vdGlmaWNhdGlvbi5cblxuMS4gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbjIuIFRoZSBgd3Bhbl9kZXZfdHlwZWAgc3RydWN0IGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgYXQgY29tcGlsZSB0aW1lLlxuMy4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgYnVmZmVyIGxlbmd0aHMvb2Zmc2V0cyBhcmUgYWZmZWN0ZWQuXG40LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKCkgaW4gdGhlIElFRUUgODAyLjE1LjQgc3Vic3lzdGVtIHRvIHNldCBuZXRkZXYgZGV2aWNlIHR5cGUgb24gTkVUREVWX1BPU1RfSU5JVCBhbmQgYWRkcyBhIG5ldyBydW50aW1lIGFzc2VydGlvbiBXQVJOX09OKHdwYW5fZGV2LVx1MDAzZWlmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChubDgwMjE1NC9ydG5ldGxpbmspIGludGVyZmFjZSBjcmVhdGlvbiBhbmQgbmV0ZGV2IGxpZmVjeWNsZSBldmVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZjE1YmQzYzlhNWNlY2I0OTcyYjZkMTJmN2VlNjBiZjVjYzBlMzEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNzoxOTo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmMgYi9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcbmluZGV4IGMwYjg3MTIwMThhMTYuLmVjNWJmZGY2YmQzMWUgMTAwNjQ0XG4tLS0gYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pZWVlODAyMTU0L2NvcmUuY1xuQEAgLTI3Miw2ICYjNDM7MjcyLDEwIEBAIHZvaWQgY2ZnODAyMTU0X2Rldl9mcmVlKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpXG4gXHRrZnJlZShyZGV2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3Bhbl9kZXZfdHlwZSA9IHtcbiYjNDM7XHQubmFtZVx0PSBcJiMzNDt3cGFuXCYjMzQ7LFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgdm9pZFxuIGNmZzgwMjE1NF91cGRhdGVfaWZhY2VfbnVtKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0ICAgaW50IGlmdHlwZSwgaW50IG51bSlcbkBAIC0yOTMsMTAgJiM0MzsyOTcsMTIgQEAgc3RhdGljIGludCBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiBcbiBcdHJkZXYgPSB3cGFuX3BoeV90b19yZGV2KHdwYW5fZGV2LVx1MDAzZXdwYW5fcGh5KTtcbiBcbi1cdC8qIFRPRE8gV0FSTl9PTiB1bnNwZWMgdHlwZSAqL1xuJiM0MztcdFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xuIFxuIFx0c3dpdGNoIChzdGF0ZSkge1xuLVx0XHQvKiBUT0RPIE5FVERFVl9ERVZUWVBFICovXG4mIzQzO1x0Y2FzZSBORVRERVZfUE9TVF9JTklUOlxuJiM0MztcdFx0U0VUX05FVERFVl9ERVZUWVBFKGRldiwgXHUwMDI2d3Bhbl9kZXZfdHlwZSk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxuIFx0XHRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbiBcdFx0d3Bhbl9kZXYtXHUwMDNlaWRlbnRpZmllciA9ICYjNDM7JiM0MztyZGV2LVx1MDAzZXdwYW5fZGV2X2lkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRkFLRUxCJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwmIzM0OywKICAgICYjMzQ7bmw4MDIxNTRfbmV3X2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTU0X2FkZF9pZmFjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoKSBpbiB0aGUgSUVFRSA4MDIuMTUuNCBzdWJzeXN0ZW0gdG8gc2V0IG5ldGRldiBkZXZpY2UgdHlwZSBvbiBORVRERVZfUE9TVF9JTklUIGFuZCBhZGRzIGEgbmV3IHJ1bnRpbWUgYXNzZXJ0aW9uIFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKG5sODAyMTU0L3J0bmV0bGluaykgaW50ZXJmYWNlIGNyZWF0aW9uIGFuZCBuZXRkZXYgbGlmZWN5Y2xlIGV2ZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhmMTViZDNjOWE1Y2VjYjQ5NzJiNmQxMmY3ZWU2MGJmNWNjMGUzMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE3OjE5OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvY29yZS5jIGIvbmV0L2llZWU4MDIxNTQvY29yZS5jCmluZGV4IGMwYjg3MTIwMThhMTYuLmVjNWJmZGY2YmQzMWUgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWVlZTgwMjE1NC9jb3JlLmMKQEAgLTI3Miw2ICYjNDM7MjcyLDEwIEBAIHZvaWQgY2ZnODAyMTU0X2Rldl9mcmVlKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCiAJa2ZyZWUocmRldik7CiB9CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHdwYW5fZGV2X3R5cGUgPSB7CiYjNDM7CS5uYW1lCT0gJiMzNDt3cGFuJiMzNDssCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyB2b2lkCiBjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgaW50IGlmdHlwZSwgaW50IG51bSkKQEAgLTI5MywxMCAmIzQzOzI5NywxMiBAQCBzdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCiAJcmRldiA9IHdwYW5fcGh5X3RvX3JkZXYod3Bhbl9kZXYtJmd0O3dwYW5fcGh5KTsKIAotCS8qIFRPRE8gV0FSTl9PTiB1bnNwZWMgdHlwZSAqLwomIzQzOwlXQVJOX09OKHdwYW5fZGV2LSZndDtpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQyk7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7Ci0JCS8qIFRPRE8gTkVUREVWX0RFVlRZUEUgKi8KJiM0MzsJY2FzZSBORVRERVZfUE9TVF9JTklUOgomIzQzOwkJU0VUX05FVERFVl9ERVZUWVBFKGRldiwgJmFtcDt3cGFuX2Rldl90eXBlKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgogCQlkZXYtJmd0O25ldG5zX2ltbXV0YWJsZSA9IHRydWU7CiAJCXdwYW5fZGV2LSZndDtpZGVudGlmaWVyID0gJiM0MzsmIzQzO3JkZXYtJmd0O3dwYW5fZGV2X2lkOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTEyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSUVFRSA4MDIuMTUuNCBDb3JlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBkaWZmYCBpdHNlbGYuIEkgY2FuIHNlZSB0aGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AuIEhtbSwgYSBuZXcgYHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3Bhbl9kZXZfdHlwZWAgZGVmaW5pdGlvbiBpcyBpbnRyb2R1Y2VkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgZXN0YWJsaXNoaW5nIGEgc3BlY2lmaWMgZGV2aWNlIHR5cGUgZm9yIFdQQU4gZGV2aWNlcywgY2xlYXJseS4KClRoZW4sIEkgc2VlIHRoZSBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCBmdW5jdGlvbiBoYXMgYSBgTkVUREVWX1BPU1RfSU5JVGAgY2FzZSBhZGRlZCB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgY29yZSBjaGFuZ2UgaW4gdGhlIHBhdGNoLiBOb3csIGluIHRoaXMgY2FzZSwgYFNFVF9ORVRERVZfREVWVFlQRShkZXYsICZhbXA7d3Bhbl9kZXZfdHlwZSlgIGlzIGNhbGxlZC4gU28sIHRoZSBgd3Bhbl9kZXZfdHlwZWAgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldHdvcmsgZGV2aWNlIGF0IHRoYXQgcG9pbnQuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgbmV3bHkgZGVmaW5lZCB0eXBlLgoKVGhlIGBXQVJOX09OYCBjaGVjayBmb3IgYE5MODAyMTU0X0lGVFlQRV9VTlNQRUNgIGlzIGEgZ29vZCBwcmFjdGljZS4gSXQgdmFsaWRhdGVzIGEgc3BlY2lmaWMgaW50ZXJmYWNlIHR5cGUsIHdoaWNoIGlzIGdvb2QuIEl0JiMzOTtzIGEgdXNlZnVsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlbiYjMzk7dCBsZWZ0IHVuZGVmaW5lZC4KCkkgc2hvdWxkIGFsc28gZ28gYWhlYWQgYW5kIGxvYWQgdXAgdGhlIGZpbGUgdG8gcmV2aWV3IGl0IG1vcmUgY2FyZWZ1bGx5IGFuZCBzZWUgaG93IHRoaXMgbmV3IGRldmljZSB0eXBlIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBleGlzdGluZyBjb2RlLiBBbHNvLCBJIHNob3VsZCBjaGVjayB0aGUgcmVsYXRlZCBLY29uZmlnIG9wdGlvbnMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBPdmVyYWxsLCBpdCBhcHBlYXJzIHRvIGJlIGEgcmVhc29uYWJsZSBhZGRpdGlvbiB0byBiZXR0ZXIgZGVmaW5lIHRoZSBkZXZpY2UgdHlwZSBmb3IgV1BBTiBkZXZpY2VzIHdpdGhpbiB0aGUgODAyLjE1LjQgY29yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0dm9pZCBjZmc4MDIxNTRfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbiAyNzE6XHR7XG4gMjcyOlx0XHRrZnJlZShyZGV2KTtcbiAyNzM6XHR9XG4gMjc0Olx0XG4gMjc1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3cGFuX2Rldl90eXBlID0ge1xuIDI3NjpcdFx0Lm5hbWVcdD0gXCYjMzQ7d3BhblwmIzM0OyxcbiAyNzc6XHR9O1xuIDI3ODpcdFxuIDI3OTpcdHN0YXRpYyB2b2lkXG4gMjgwOlx0Y2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiAyODE6XHRcdFx0XHQgICBpbnQgaWZ0eXBlLCBpbnQgbnVtKVxuIDI4MjpcdHtcbiAyODM6XHRcdEFTU0VSVF9SVE5MKCk7XG4gMjg0Olx0XG4gMjg1Olx0XHRyZGV2LVx1MDAzZW51bV9ydW5uaW5nX2lmYWNlcyAmIzQzOz0gbnVtO1xuIDI4NjpcdH1cbiAyODc6XHRcbiAyODg6XHRzdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIDI4OTpcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhdGUsIHZvaWQgKnB0cilcbiAyOTA6XHR7XG4gMjkxOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gMjkyOlx0XHRzdHJ1Y3Qgd3Bhbl9kZXYgKndwYW5fZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxNTRfcHRyO1xuIDI5MzpcdFx0c3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiAyOTQ6XHRcbiAyOTU6XHRcdGlmICghd3Bhbl9kZXYpXG4gMjk2Olx0XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiAyOTc6XHRcbiAyOTg6XHRcdHJkZXYgPSB3cGFuX3BoeV90b19yZGV2KHdwYW5fZGV2LVx1MDAzZXdwYW5fcGh5KTtcbiAyOTk6XHRcbiAzMDA6XHRcdFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xuIDMwMTpcdFxuIDMwMjpcdFx0c3dpdGNoIChzdGF0ZSkge1xuIDMwMzpcdFx0Y2FzZSBORVRERVZfUE9TVF9JTklUOlxuIDMwNDpcdFx0XHRTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcdTAwMjZ3cGFuX2Rldl90eXBlKTtcbiAzMDU6XHRcdFx0YnJlYWs7XG4gMzA2Olx0XHRjYXNlIE5FVERFVl9SRUdJU1RFUjpcbiAzMDc6XHRcdFx0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XG4gMzA4Olx0XHRcdHdwYW5fZGV2LVx1MDAzZWlkZW50aWZpZXIgPSAmIzQzOyYjNDM7cmRldi1cdTAwM2V3cGFuX2Rldl9pZDtcbiAzMDk6XHRcdFx0bGlzdF9hZGRfcmN1KFx1MDAyNndwYW5fZGV2LVx1MDAzZWxpc3QsIFx1MDAyNnJkZXYtXHUwMDNld3Bhbl9kZXZfbGlzdCk7XG4gMzEwOlx0XHRcdHJkZXYtXHUwMDNlZGV2bGlzdF9nZW5lcmF0aW9uJiM0MzsmIzQzOztcbiAzMTE6XHRcdFx0bXV0ZXhfaW5pdChcdTAwMjZ3cGFuX2Rldi1cdTAwM2Vhc3NvY2lhdGlvbl9sb2NrKTtcbiAzMTI6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2d3Bhbl9kZXYtXHUwMDNlY2hpbGRyZW4pO1xuIDMxMzpcdFx0XHR3cGFuX2Rldi1cdTAwM2VtYXhfYXNzb2NpYXRpb25zID0gU1pfMTZLO1xuIDMxNDpcdFxuIDMxNTpcdFx0XHR3cGFuX2Rldi1cdTAwM2VuZXRkZXYgPSBkZXY7XG4gMzE2Olx0XHRcdGJyZWFrO1xuIDMxNzpcdFx0Y2FzZSBORVRERVZfRE9XTjpcbiAzMTg6XHRcdFx0Y2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0ocmRldiwgd3Bhbl9kZXYtXHUwMDNlaWZ0eXBlLCAtMSk7XG4gMzE5Olx0XG4gMzIwOlx0XHRcdHJkZXYtXHUwMDNlb3BlbmNvdW50LS07XG4gMzIxOlx0XHRcdHdha2VfdXAoXHUwMDI2cmRldi1cdTAwM2VkZXZfd2FpdCk7XG4gMzIyOlx0XHRcdGJyZWFrO1xuIDMyMzpcdFx0Y2FzZSBORVRERVZfVVA6XG4gMzI0Olx0XHRcdGNmZzgwMjE1NF91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdwYW5fZGV2LVx1MDAzZWlmdHlwZSwgMSk7XG4gMzI1Olx0XG4gMzI2Olx0XHRcdHJkZXYtXHUwMDNlb3BlbmNvdW50JiM0MzsmIzQzOztcbiAzMjc6XHRcdFx0YnJlYWs7XG4gMzI4Olx0XHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuIDMyOTpcdFx0XHRjZmc4MDIxNTRfZnJlZV9wZWVyX3N0cnVjdHVyZXMod3Bhbl9kZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgSUVFRSA4MDIuMTUuNCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBJRUVFIDgwMi4xNS40IHN1cHBvcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGp1bXAgZGlyZWN0bHkgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIHVuZGVyIGBuZXQvaWVlZTgwMjE1NGAuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBiZSBkZWZpbmVkLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgYXZhaWxhYmxlLCB3aGF0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgZHJpdmVycyBhcmUgaW50ZXJ3b3Zlbi4KCkkgbmVlZCB0byBzZWU6IEFyZSB0aGVyZSBhbnkgbmV3IG9wdGlvbnMgc2luY2UgdGhlIGxhc3QgdGltZSBJIGxvb2tlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGRlcGVuZGVuY2llcyB0aGF0IEkgc2hvdWxkIGtub3cgYWJvdXQgZm9yIHNwZWNpZmljIGhhcmR3YXJlIG9yIHVzZSBjYXNlcz8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IG1pZ2h0IHRyaXAgbWUgdXAgd2hlbiBkZWJ1Z2dpbmcgb3Igb3B0aW1pemluZz8gVW5kZXJzdGFuZGluZyBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhZmZlY3QgdGhlIG92ZXJhbGwgZnVuY3Rpb25hbGl0eSBpcyBjcml0aWNhbC4gVGhlIGdvYWwgaXMgYSBjbGVhciBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJRUVFODAyMTU0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE0MjEgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vNmxvd3Bhbl9pLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi82bG93cGFuX2kuaDoyOiNpZm5kZWYgX19JRUVFODAyMTU0XzZMT1dQQU5fSV9IX19cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vNmxvd3Bhbl9pLmg6MzojZGVmaW5lIF9fSUVFRTgwMjE1NF82TE9XUEFOX0lfSF9fXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuLzZsb3dwYW5faS5oLTQtXG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi82bG93cGFuX2kuaD00Nj1sb3dwYW5fcnhfcmVzdWx0IGxvd3Bhbl9yeF9oX2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuLzZsb3dwYW5faS5oLTQ3LVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi82bG93cGFuX2kuaDo0ODojZW5kaWYgLyogX19JRUVFODAyMTU0XzZMT1dQQU5fSV9IX18gKi9cbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vS2NvbmZpZzoyOmNvbmZpZyBJRUVFODAyMTU0XzZMT1dQQU5cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Nmxvd3BhbiBzdXBwb3J0IG92ZXIgSUVFRSA4MDIuMTUuNFwmIzM0O1xuLS1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vTWFrZWZpbGU6MjpvYmotJChDT05GSUdfSUVFRTgwMjE1NF82TE9XUEFOKSAmIzQzOz0gaWVlZTgwMjE1NF82bG93cGFuLm9cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vTWFrZWZpbGUtMy1cbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYz04Nj1zdGF0aWMgaW50IGxvd3Bhbl9uZWlnaF9jb25zdHJ1Y3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoYm91ciAqbilcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy05MC1cdC8qIGRlZmF1bHQgbm8gc2hvcnRfYWRkciBpcyBhdmFpbGFibGUgZm9yIGEgbmVpZ2hib3VyICovXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzo5MTpcdG5laWdoLVx1MDAzZXNob3J0X2FkZHIgPSBjcHVfdG9fbGUxNihJRUVFODAyMTU0X0FERFJfU0hPUlRfVU5TUEVDKTtcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTkyLVx0cmV0dXJuIDA7XG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM9MTA5PXN0YXRpYyB2b2lkIGxvd3Bhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbGRldilcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTExMC17XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzoxMTE6XHRtZW1zZXQobGRldi1cdTAwM2Vicm9hZGNhc3QsIDB4ZmYsIElFRUU4MDIxNTRfQUREUl9MRU4pO1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmMtMTEyLVx0LyogV2UgbmVlZCBhbiBpcHY2aGRyIGFzIG1pbmltdW0gbGVuIHdoZW4gY2FsbGluZyB4bWl0ICovXG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM9MTIzPXN0YXRpYyBpbnQgbG93cGFuX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xMjYtXHRpZiAodGJbSUZMQV9BRERSRVNTXSkge1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM6MTI3Olx0XHRpZiAobmxhX2xlbih0YltJRkxBX0FERFJFU1NdKSAhPSBJRUVFODAyMTU0X0FERFJfTEVOKVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmMtMTI4LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jPTEzMz1zdGF0aWMgaW50IGxvd3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpsZGV2LFxuLS1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE1Mi1cdFx0cmV0dXJuIC1FTk9ERVY7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzoxNTM6XHRpZiAod2Rldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KSB7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xNTQtXHRcdGRldl9wdXQod2Rldik7XG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmMtMTY0LVx0LyogU2V0IHRoZSBsb3dwYW4gaGFyZHdhcmUgYWRkcmVzcyB0byB0aGUgd3BhbiBoYXJkd2FyZSBhZGRyZXNzLiAqL1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM6MTY1Olx0X19kZXZfYWRkcl9zZXQobGRldiwgd2Rldi1cdTAwM2VkZXZfYWRkciwgSUVFRTgwMjE1NF9BRERSX0xFTik7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xNjYtXHQvKiBXZSBuZWVkIGhlYWRyb29tIGZvciBwb3NzaWJsZSB3cGFuX2Rldl9oYXJkX2hlYWRlciBjYWxsIGFuZCB0YWlscm9vbVxuLS1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE3Ny1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jOjE3ODpcdHJldCA9IGxvd3Bhbl9yZWdpc3Rlcl9uZXRkZXZpY2UobGRldiwgTE9XUEFOX0xMVFlQRV9JRUVFODAyMTU0KTtcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE3OS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYz0yMTg9c3RhdGljIGludCBsb3dwYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuLS1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTIyMy1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jOjIyNDpcdGlmIChuZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0yMjUtXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmM9MjcxPXN0YXRpYyBpbnQgbG93cGFuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqd2Rldixcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmMtMjc1LVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9yeC5jOjI3NjpcdGlmICh3ZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQgfHxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vcnguYy0yNzctXHQgICAgc2tiLVx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9PVEhFUkhPU1QgfHxcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmM9MzEwPXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbG93cGFuX3BhY2tldF90eXBlID0ge1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9yeC5jOjMxMTpcdC50eXBlID0gaHRvbnMoRVRIX1BfSUVFRTgwMjE1NCksXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmMtMzEyLVx0LmZ1bmMgPSBsb3dwYW5fcmN2LFxuLS1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYz0zMz1pbnQgbG93cGFuX2hlYWRlcl9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmxkZXYsXG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTU2LVx0aWYgKCFtZW1jbXAoZGFkZHIsIGxkZXYtXHUwMDNlYnJvYWRjYXN0LCBFVUk2NF9BRERSX0xFTikpIHtcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYzo1NzpcdFx0aW5mby1cdTAwM2VkYWRkci5zaG9ydF9hZGRyID0gY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9BRERSX0JST0FEQ0FTVCk7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NTg6XHRcdGluZm8tXHUwMDNlZGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy01OS1cdH0gZWxzZSB7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NjA6XHRcdF9fbGUxNiBzaG9ydF9hZGRyID0gY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9BRERSX1NIT1JUX1VOU1BFQyk7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtNjEtXHRcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gbmRfdGFibGUoZGV2X25ldChsZGV2KSk7XG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTczLVx0XHRcdGluZm8tXHUwMDNlZGFkZHIuc2hvcnRfYWRkciA9IHNob3J0X2FkZHI7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NzQ6XHRcdFx0aW5mby1cdTAwM2VkYWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX1NIT1JUO1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTc1LVx0XHR9IGVsc2Uge1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jOjc2Olx0XHRcdGluZm8tXHUwMDNlZGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9MT05HO1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTc3LVx0XHRcdGllZWU4MDIxNTRfYmU2NF90b19sZTY0KFx1MDAyNmluZm8tXHUwMDNlZGFkZHIuZXh0ZW5kZWRfYWRkcixcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtODYtXHRcdGlmIChsb3dwYW5fODAyMTU0X2lzX3ZhbGlkX3NyY19zaG9ydF9hZGRyKHdwYW5fZGV2LVx1MDAzZXNob3J0X2FkZHIpKSB7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6ODc6XHRcdFx0aW5mby1cdTAwM2VzYWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX1NIT1JUO1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTg4LVx0XHRcdGluZm8tXHUwMDNlc2FkZHIuc2hvcnRfYWRkciA9IHdwYW5fZGV2LVx1MDAzZXNob3J0X2FkZHI7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtODktXHRcdH0gZWxzZSB7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6OTA6XHRcdFx0aW5mby1cdTAwM2VzYWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtOTEtXHRcdFx0aW5mby1cdTAwM2VzYWRkci5leHRlbmRlZF9hZGRyID0gd3Bhbl9kZXYtXHUwMDNlZXh0ZW5kZWRfYWRkcjtcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtOTMtXHR9IGVsc2Uge1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jOjk0Olx0XHRpbmZvLVx1MDAzZXNhZGRyLm1vZGUgPSBJRUVFODAyMTU0X0FERFJfTE9ORztcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy05NS1cdFx0aWVlZTgwMjE1NF9iZTY0X3RvX2xlNjQoXHUwMDI2aW5mby1cdTAwM2VzYWRkci5leHRlbmRlZF9hZGRyLCBzYWRkcik7XG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jPTIyNT1zdGF0aWMgaW50IGxvd3Bhbl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmxkZXYsXG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTIzOC1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYzoyMzk6XHRjYi1cdTAwM2V0eXBlID0gSUVFRTgwMjE1NF9GQ19UWVBFX0RBVEE7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtMjQwLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jOjI0MTpcdGlmIChpbmZvLmRhZGRyLm1vZGUgPT0gSUVFRTgwMjE1NF9BRERSX1NIT1JUIFx1MDAyNlx1MDAyNlxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTI0Mi1cdCAgICBpZWVlODAyMTU0X2lzX2Jyb2FkY2FzdF9zaG9ydF9hZGRyKGluZm8uZGFkZHIuc2hvcnRfYWRkcikpXG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyOm1lbnVjb25maWcgSUVFRTgwMjE1NFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMy1cbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MTQ6aWYgSUVFRTgwMjE1NFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xNS1cbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MTY6Y29uZmlnIElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE3LVx0Ym9vbCBcJiMzNDtJRUVFIDgwMi4xNS40IGV4cGVyaW1lbnRhbCBuZXRsaW5rIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIwLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyMTpjb25maWcgSUVFRTgwMjE1NF9TT0NLRVRcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjItXHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC9pZWVlODAyMTU0L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTQpICYjNDM7PSBpZWVlODAyMTU0Lm9cbm5ldC9pZWVlODAyMTU0L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfU09DS0VUKSAmIzQzOz0gaWVlZTgwMjE1NF9zb2NrZXQub1xubmV0L2llZWU4MDIxNTQvTWFrZWZpbGUtNC1vYmoteSAmIzQzOz0gNmxvd3Bhbi9cbi0tXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xubmV0L2llZWU4MDIxNTQvY29yZS5oOjI6I2lmbmRlZiBfX0lFRUU4MDIxNTRfQ09SRV9IXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmg6MzojZGVmaW5lIF9fSUVFRTgwMjE1NF9DT1JFX0hcbm5ldC9pZWVlODAyMTU0L2NvcmUuaC00LVxuLS1cbm5ldC9pZWVlODAyMTU0L2NvcmUuaD00OD1zdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5X2lkeF90b193cGFuX3BoeShpbnQgd3Bhbl9waHlfaWR4KTtcbm5ldC9pZWVlODAyMTU0L2NvcmUuaC00OS1cbm5ldC9pZWVlODAyMTU0L2NvcmUuaDo1MDojZW5kaWYgLyogX19JRUVFODAyMTU0X0NPUkVfSCAqL1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz0xNT1pZWVlODAyMTU0X2hkcl9wdXNoX2FkZHIodTggKmJ1ZiwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcixcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMTktXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjA6XHRpZiAoYWRkci1cdTAwM2Vtb2RlID09IElFRUU4MDIxNTRfQUREUl9OT05FKVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTIxLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjgtXHRzd2l0Y2ggKGFkZHItXHUwMDNlbW9kZSkge1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjI5Olx0Y2FzZSBJRUVFODAyMTU0X0FERFJfU0hPUlQ6XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMzAtXHRcdG1lbWNweShidWYgJiM0MzsgcG9zLCBcdTAwMjZhZGRyLVx1MDAzZXNob3J0X2FkZHIsIDIpO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0zMy1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzozNDpcdGNhc2UgSUVFRTgwMjE1NF9BRERSX0xPTkc6XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MzU6XHRcdG1lbWNweShidWYgJiM0MzsgcG9zLCBcdTAwMjZhZGRyLVx1MDAzZWV4dGVuZGVkX2FkZHIsIElFRUU4MDIxNTRfQUREUl9MRU4pO1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjM2Olx0XHRwb3MgJiM0Mzs9IElFRUU4MDIxNTRfQUREUl9MRU47XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMzctXHRcdGJyZWFrO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz00Nz1pZWVlODAyMTU0X2hkcl9wdXNoX3NlY2hkcih1OCAqYnVmLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9zZWNoZHIgKmhkcilcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNTQtXHRzd2l0Y2ggKGhkci1cdTAwM2VrZXlfaWRfbW9kZSkge1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjU1Olx0Y2FzZSBJRUVFODAyMTU0X1NDRl9LRVlfSU1QTElDSVQ6XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNTYtXHRcdHJldHVybiBwb3M7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNTctXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6NTg6XHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9JTkRFWDpcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy01OS1cdFx0YnJlYWs7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNjAtXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6NjE6XHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9TSE9SVF9JTkRFWDpcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy02Mi1cdFx0bWVtY3B5KGJ1ZiAmIzQzOyBwb3MsIFx1MDAyNmhkci1cdTAwM2VzaG9ydF9zcmMsIDQpO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy02NS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzo2NjpcdGNhc2UgSUVFRTgwMjE1NF9TQ0ZfS0VZX0hXX0lOREVYOlxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjY3Olx0XHRtZW1jcHkoYnVmICYjNDM7IHBvcywgXHUwMDI2aGRyLVx1MDAzZWV4dGVuZGVkX3NyYywgSUVFRTgwMjE1NF9BRERSX0xFTik7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6Njg6XHRcdHBvcyAmIzQzOz0gSUVFRTgwMjE1NF9BRERSX0xFTjtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy02OS1cdFx0YnJlYWs7XG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTc4PWllZWU4MDIxNTRfaGRyX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxNTRfaGRyICpoZHIpXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNzkte1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjgwOlx0dTggYnVmW0lFRUU4MDIxNTRfTUFYX0hFQURFUl9MRU5dO1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTgxLVx0aW50IHBvcyA9IDI7XG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTk2LVx0aWYgKGhkci1cdTAwM2Vzb3VyY2UucGFuX2lkID09IGhkci1cdTAwM2VkZXN0LnBhbl9pZCBcdTAwMjZcdTAwMjZcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzo5NzpcdCAgICBoZHItXHUwMDNlZGVzdC5tb2RlICE9IElFRUU4MDIxNTRfQUREUl9OT05FKVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTk4LVx0XHRmYy1cdTAwM2VpbnRyYV9wYW4gPSB0cnVlO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz0xNzE9aWVlZTgwMjE1NF9oZHJfZ2V0X2FkZHIoY29uc3QgdTggKmJ1ZiwgaW50IG1vZGUsIGJvb2wgb21pdF9wYW4sXG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE3NS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoxNzY6XHRpZiAobW9kZSA9PSBJRUVFODAyMTU0X0FERFJfTk9ORSkge1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE3Ny1cdFx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZigqYWRkcikpO1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjE3ODpcdFx0YWRkci1cdTAwM2Vtb2RlID0gSUVFRTgwMjE1NF9BRERSX05PTkU7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMTc5LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMTg4LVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjE4OTpcdGlmIChtb2RlID09IElFRUU4MDIxNTRfQUREUl9TSE9SVCkge1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE5MC1cdFx0bWVtY3B5KFx1MDAyNmFkZHItXHUwMDNlc2hvcnRfYWRkciwgYnVmICYjNDM7IHBvcywgMik7XG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE5Mi1cdH0gZWxzZSB7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MTkzOlx0XHRtZW1jcHkoXHUwMDI2YWRkci1cdTAwM2VleHRlbmRlZF9hZGRyLCBidWYgJiM0MzsgcG9zLCBJRUVFODAyMTU0X0FERFJfTEVOKTtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoxOTQ6XHRcdHJldHVybiBwb3MgJiM0MzsgSUVFRTgwMjE1NF9BRERSX0xFTjtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0xOTUtXHR9XG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTE5OD1zdGF0aWMgaW50IGllZWU4MDIxNTRfaGRyX2FkZHJfbGVuKGludCBtb2RlLCBib29sIG9taXRfcGFuKVxuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yMDItXHRzd2l0Y2ggKG1vZGUpIHtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMDM6XHRjYXNlIElFRUU4MDIxNTRfQUREUl9OT05FOiByZXR1cm4gMDtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMDQ6XHRjYXNlIElFRUU4MDIxNTRfQUREUl9TSE9SVDogcmV0dXJuIDIgJiM0MzsgcGFuX2xlbjtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMDU6XHRjYXNlIElFRUU4MDIxNTRfQUREUl9MT05HOiByZXR1cm4gSUVFRTgwMjE1NF9BRERSX0xFTiAmIzQzOyBwYW5fbGVuO1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTIwNi1cdGRlZmF1bHQ6IHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz0yMTE9aWVlZTgwMjE1NF9oZHJfZ2V0X3NlY2hkcihjb25zdCB1OCAqYnVmLCBzdHJ1Y3QgaWVlZTgwMjE1NF9zZWNoZHIgKmhkcilcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjE4LVx0c3dpdGNoIChoZHItXHUwMDNla2V5X2lkX21vZGUpIHtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMTk6XHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9JTVBMSUNJVDpcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yMjAtXHRcdHJldHVybiBwb3M7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjIxLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjIyMjpcdGNhc2UgSUVFRTgwMjE1NF9TQ0ZfS0VZX0lOREVYOlxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTIyMy1cdFx0YnJlYWs7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjI0LVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjIyNTpcdGNhc2UgSUVFRTgwMjE1NF9TQ0ZfS0VZX1NIT1JUX0lOREVYOlxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTIyNi1cdFx0bWVtY3B5KFx1MDAyNmhkci1cdTAwM2VzaG9ydF9zcmMsIGJ1ZiAmIzQzOyBwb3MsIDQpO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yMjktXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjMwOlx0Y2FzZSBJRUVFODAyMTU0X1NDRl9LRVlfSFdfSU5ERVg6XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjMxOlx0XHRtZW1jcHkoXHUwMDI2aGRyLVx1MDAzZWV4dGVuZGVkX3NyYywgYnVmICYjNDM7IHBvcywgSUVFRTgwMjE1NF9BRERSX0xFTik7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjMyOlx0XHRwb3MgJiM0Mzs9IElFRUU4MDIxNTRfQUREUl9MRU47XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjMzLVx0XHRicmVhaztcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM9MjQxPXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9zZWNoZHJfbGVuZ3Roc1s0XSA9IHtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyNDI6XHRbSUVFRTgwMjE1NF9TQ0ZfS0VZX0lNUExJQ0lUXSA9IDUsXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjQzOlx0W0lFRUU4MDIxNTRfU0NGX0tFWV9JTkRFWF0gPSA2LFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjI0NDpcdFtJRUVFODAyMTU0X1NDRl9LRVlfU0hPUlRfSU5ERVhdID0gMTAsXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjQ1Olx0W0lFRUU4MDIxNTRfU0NGX0tFWV9IV19JTkRFWF0gPSAxNCxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yNDYtfTtcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM9MjQ4PXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9oZHJfc2VjaGRyX2xlbih1OCBzYylcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yNDkte1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjI1MDpcdHJldHVybiBpZWVlODAyMTU0X3NlY2hkcl9sZW5ndGhzW0lFRUU4MDIxNTRfU0NGX0tFWV9JRF9NT0RFKHNjKV07XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjUxLX1cbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM9MzQ3PWllZWU4MDIxNTRfaGRyX3BlZWsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxNTRfaGRyICpoZHIpXG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTM1Ni1cdGlmIChoZHItXHUwMDNlZmMuc2VjdXJpdHlfZW5hYmxlZCkge1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjM1NzpcdFx0dTgga2V5X2lkX21vZGUgPSBJRUVFODAyMTU0X1NDRl9LRVlfSURfTU9ERSgqKGJ1ZiAmIzQzOyBwb3MpKTtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0zNTgtXHRcdGludCB3YW50ID0gcG9zICYjNDM7IGllZWU4MDIxNTRfc2VjaGRyX2xlbmd0aHNba2V5X2lkX21vZGVdO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz0zNzA9aW50IGllZWU4MDIxNTRfbWF4X3BheWxvYWQoY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfaGRyICpoZHIpXG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTM3OC1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzozNzk6XHRyZXR1cm4gSUVFRTgwMjE1NF9NVFUgLSBobGVuIC0gSUVFRTgwMjE1NF9NRlJfU0laRTtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0zODAtfVxuLS1cbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaD05PXZvaWQgaWVlZTgwMjE1NF9ubF9leGl0KHZvaWQpO1xubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTEwLVxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjExOiNkZWZpbmUgSUVFRTgwMjE1NF9PUChfY21kLCBfZnVuYylcdFx0XHRcXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTEyLVx0e1x0XHRcdFx0XHRcdFxcXG4tLVxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTE4LVxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjE5OiNkZWZpbmUgSUVFRTgwMjE1NF9PUF9SRUxBWEVEKF9jbWQsIF9mdW5jKVx0XHRcXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTIwLVx0e1x0XHRcdFx0XHRcdFxcXG4tLVxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTI3LVxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjI4OiNkZWZpbmUgSUVFRTgwMjE1NF9EVU1QKF9jbWQsIF9mdW5jLCBfZHVtcClcdFx0XFxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC0yOS1cdHtcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC0zNC1cbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaDozNTojZGVmaW5lIElFRUU4MDIxNTRfRFVNUF9QUklWKF9jbWQsIF9mdW5jLCBfZHVtcClcdFxcXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0LmgtMzYtXHR7XHRcdFx0XHRcdFx0XFxcbi0tXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg9NTk9ZW51bSBpZWVlODAyMTU0X21jZ3JwX2lkcyB7XG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg6NjA6XHRJRUVFODAyMTU0X0NPT1JEX01DR1JQLFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjYxOlx0SUVFRTgwMjE1NF9CRUFDT05fTUNHUlAsXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0LmgtNjItfTtcbi0tXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM9ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBpZWVlODAyMTU0X29wc1tdID0ge1xubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTg1LVx0Lyogc2VlIG5sLXBoeS5jICovXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6ODY6XHRJRUVFODAyMTU0X0RVTVAoSUVFRTgwMjE1NF9MSVNUX1BIWSwgaWVlZTgwMjE1NF9saXN0X3BoeSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy04Ny1cdFx0XHRpZWVlODAyMTU0X2R1bXBfcGh5KSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzo4ODpcdElFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9BRERfSUZBQ0UsIGllZWU4MDIxNTRfYWRkX2lmYWNlKSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzo4OTpcdElFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9ERUxfSUZBQ0UsIGllZWU4MDIxNTRfZGVsX2lmYWNlKSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy05MC1cdC8qIHNlZSBubC1tYWMuYyAqL1xubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjkxOlx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0FTU09DSUFURV9SRVEsIGllZWU4MDIxNTRfYXNzb2NpYXRlX3JlcSksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTI6XHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfQVNTT0NJQVRFX1JFU1AsIGllZWU4MDIxNTRfYXNzb2NpYXRlX3Jlc3ApLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjkzOlx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0RJU0FTU09DSUFURV9SRVEsIGllZWU4MDIxNTRfZGlzYXNzb2NpYXRlX3JlcSksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTQ6XHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfU0NBTl9SRVEsIGllZWU4MDIxNTRfc2Nhbl9yZXEpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjk1Olx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X1NUQVJUX1JFUSwgaWVlZTgwMjE1NF9zdGFydF9yZXEpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjk2Olx0SUVFRTgwMjE1NF9EVU1QKElFRUU4MDIxNTRfTElTVF9JRkFDRSwgaWVlZTgwMjE1NF9saXN0X2lmYWNlLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTk3LVx0XHRcdGllZWU4MDIxNTRfZHVtcF9pZmFjZSksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTg6XHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfU0VUX01BQ1BBUkFNUywgaWVlZTgwMjE1NF9zZXRfbWFjcGFyYW1zKSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzo5OTpcdElFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9MTFNFQ19HRVRQQVJBTVMsIGllZWU4MDIxNTRfbGxzZWNfZ2V0cGFyYW1zKSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDA6XHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfTExTRUNfU0VUUEFSQU1TLCBpZWVlODAyMTU0X2xsc2VjX3NldHBhcmFtcyksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTAxOlx0SUVFRTgwMjE1NF9EVU1QX1BSSVYoSUVFRTgwMjE1NF9MTFNFQ19MSVNUX0tFWSwgTlVMTCxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMDItXHRcdFx0ICAgICBpZWVlODAyMTU0X2xsc2VjX2R1bXBfa2V5cyksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTAzOlx0SUVFRTgwMjE1NF9PUF9SRUxBWEVEKElFRUU4MDIxNTRfTExTRUNfQUREX0tFWSwgaWVlZTgwMjE1NF9sbHNlY19hZGRfa2V5KSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDQ6XHRJRUVFODAyMTU0X09QX1JFTEFYRUQoSUVFRTgwMjE1NF9MTFNFQ19ERUxfS0VZLCBpZWVlODAyMTU0X2xsc2VjX2RlbF9rZXkpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEwNTpcdElFRUU4MDIxNTRfRFVNUF9QUklWKElFRUU4MDIxNTRfTExTRUNfTElTVF9ERVYsIE5VTEwsXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTA2LVx0XHRcdCAgICAgaWVlZTgwMjE1NF9sbHNlY19kdW1wX2RldnMpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEwNzpcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0FERF9ERVYsIGllZWU4MDIxNTRfbGxzZWNfYWRkX2RldiksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTA4Olx0SUVFRTgwMjE1NF9PUF9SRUxBWEVEKElFRUU4MDIxNTRfTExTRUNfREVMX0RFViwgaWVlZTgwMjE1NF9sbHNlY19kZWxfZGV2KSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDk6XHRJRUVFODAyMTU0X0RVTVBfUFJJVihJRUVFODAyMTU0X0xMU0VDX0xJU1RfREVWS0VZLCBOVUxMLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTExMC1cdFx0XHQgICAgIGllZWU4MDIxNTRfbGxzZWNfZHVtcF9kZXZrZXlzKSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMTE6XHRJRUVFODAyMTU0X09QX1JFTEFYRUQoSUVFRTgwMjE1NF9MTFNFQ19BRERfREVWS0VZLCBpZWVlODAyMTU0X2xsc2VjX2FkZF9kZXZrZXkpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjExMjpcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0RFTF9ERVZLRVksIGllZWU4MDIxNTRfbGxzZWNfZGVsX2RldmtleSksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTEzOlx0SUVFRTgwMjE1NF9EVU1QX1BSSVYoSUVFRTgwMjE1NF9MTFNFQ19MSVNUX1NFQ0xFVkVMLCBOVUxMLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTExNC1cdFx0XHQgICAgIGllZWU4MDIxNTRfbGxzZWNfZHVtcF9zZWNsZXZlbHMpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjExNTpcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0FERF9TRUNMRVZFTCxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMTYtXHRcdFx0ICAgICAgaWVlZTgwMjE1NF9sbHNlY19hZGRfc2VjbGV2ZWwpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjExNzpcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0RFTF9TRUNMRVZFTCxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMTgtXHRcdFx0ICAgICAgaWVlZTgwMjE1NF9sbHNlY19kZWxfc2VjbGV2ZWwpLFxuLS1cbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYz0xMjE9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBpZWVlODAyMTU0X21jZ3Jwc1tdID0ge1xubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEyMjpcdFtJRUVFODAyMTU0X0NPT1JEX01DR1JQXSA9IHsgLm5hbWUgPSBJRUVFODAyMTU0X01DQVNUX0NPT1JEX05BTUUsIH0sXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTIzOlx0W0lFRUU4MDIxNTRfQkVBQ09OX01DR1JQXSA9IHsgLm5hbWUgPSBJRUVFODAyMTU0X01DQVNUX0JFQUNPTl9OQU1FLCB9LFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTEyNC19O1xuLS1cbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYz0xMjY9c3RydWN0IGdlbmxfZmFtaWx5IG5sODAyMTU0X2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTI3LVx0LmhkcnNpemVcdD0gMCxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMjg6XHQubmFtZVx0XHQ9IElFRUU4MDIxNTRfTkxfTkFNRSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMjktXHQudmVyc2lvblx0PSAxLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEzMDpcdC5tYXhhdHRyXHQ9IElFRUU4MDIxNTRfQVRUUl9NQVgsXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTMxLVx0LnBvbGljeVx0XHQ9IGllZWU4MDIxNTRfcG9saWN5LFxuLS1cbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMzQtXHQubl9zbWFsbF9vcHNcdD0gQVJSQVlfU0laRShpZWVlODAyMTU0X29wcyksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTM1Olx0LnJlc3Zfc3RhcnRfb3BcdD0gSUVFRTgwMjE1NF9MTFNFQ19ERUxfU0VDTEVWRUwgJiM0MzsgMSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMzYtXHQubWNncnBzXHRcdD0gaWVlZTgwMjE1NF9tY2dycHMsXG4tLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9NTE9c3RhdGljIGludCBpZWVlODAyMTU0X25sX3N0YXJ0X2NvbmZpcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggc3RhdHVzKVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTU2LVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6NTc6XHRtc2cgPSBpZWVlODAyMTU0X25sX2NyZWF0ZSgwLCBJRUVFODAyMTU0X1NUQVJUX0NPTkYpO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtNTgtXHRpZiAoIW1zZylcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy02MC1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjYxOlx0aWYgKG5sYV9wdXRfc3RyaW5nKG1zZywgSUVFRTgwMjE1NF9BVFRSX0RFVl9OQU1FLCBkZXYtXHUwMDNlbmFtZSkgfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjYyOlx0ICAgIG5sYV9wdXRfdTMyKG1zZywgSUVFRTgwMjE1NF9BVFRSX0RFVl9JTkRFWCwgZGV2LVx1MDAzZWlmaW5kZXgpIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzo2MzpcdCAgICBubGFfcHV0KG1zZywgSUVFRTgwMjE1NF9BVFRSX0hXX0FERFIsIElFRUU4MDIxNTRfQUREUl9MRU4sXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy02NC1cdFx0ICAgIGRldi1cdTAwM2VkZXZfYWRkcikgfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjY1Olx0ICAgIG5sYV9wdXRfdTgobXNnLCBJRUVFODAyMTU0X0FUVFJfU1RBVFVTLCBzdGF0dXMpKVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtNjYtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6Njc6XHRyZXR1cm4gaWVlZTgwMjE1NF9ubF9tY2FzdChtc2csIElFRUU4MDIxNTRfQ09PUkRfTUNHUlApO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtNjgtXG4tLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9NzQ9c3RhdGljIGludCBpZWVlODAyMTU0X25sX2ZpbGxfaWZhY2Uoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCxcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy04NC1cdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgMCwgc2VxLCBcdTAwMjZubDgwMjE1NF9mYW1pbHksIGZsYWdzLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6ODU6XHRcdFx0ICBJRUVFODAyMTU0X0xJU1RfSUZBQ0UpO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtODYtXHRpZiAoIWhkcilcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy05OC1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjk5Olx0aWYgKG5sYV9wdXRfc3RyaW5nKG1zZywgSUVFRTgwMjE1NF9BVFRSX0RFVl9OQU1FLCBkZXYtXHUwMDNlbmFtZSkgfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjEwMDpcdCAgICBubGFfcHV0X3N0cmluZyhtc2csIElFRUU4MDIxNTRfQVRUUl9QSFlfTkFNRSwgd3Bhbl9waHlfbmFtZShwaHkpKSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTAxOlx0ICAgIG5sYV9wdXRfdTMyKG1zZywgSUVFRTgwMjE1NF9BVFRSX0RFVl9JTkRFWCwgZGV2LVx1MDAzZWlmaW5kZXgpIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMDI6XHQgICAgbmxhX3B1dChtc2csIElFRUU4MDIxNTRfQVRUUl9IV19BRERSLCBJRUVFODAyMTU0X0FERFJfTEVOLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTAzLVx0XHQgICAgZGV2LVx1MDAzZWRldl9hZGRyKSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTA0Olx0ICAgIG5sYV9wdXRfc2hvcnRhZGRyKG1zZywgSUVFRTgwMjE1NF9BVFRSX1NIT1JUX0FERFIsIHNob3J0X2FkZHIpIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMDU6XHQgICAgbmxhX3B1dF9zaG9ydGFkZHIobXNnLCBJRUVFODAyMTU0X0FUVFJfUEFOX0lELCBwYW5faWQpKVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTA2LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMTQtXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMTU6XHRcdGlmIChubGFfcHV0X3M4KG1zZywgSUVFRTgwMjE1NF9BVFRSX1RYUE9XRVIsXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMTYtXHRcdFx0ICAgICAgIHBhcmFtcy50cmFuc21pdF9wb3dlciAvIDEwMCkgfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjExNzpcdFx0ICAgIG5sYV9wdXRfdTgobXNnLCBJRUVFODAyMTU0X0FUVFJfTEJUX0VOQUJMRUQsIHBhcmFtcy5sYnQpIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMTg6XHRcdCAgICBubGFfcHV0X3U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX0NDQV9NT0RFLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTE5LVx0XHRcdCAgICAgICBwYXJhbXMuY2NhLm1vZGUpIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMjA6XHRcdCAgICBubGFfcHV0X3MzMihtc2csIElFRUU4MDIxNTRfQVRUUl9DQ0FfRURfTEVWRUwsXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMjEtXHRcdFx0XHRwYXJhbXMuY2NhX2VkX2xldmVsIC8gMTAwKSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTIyOlx0XHQgICAgbmxhX3B1dF91OChtc2csIElFRUU4MDIxNTRfQVRUUl9DU01BX1JFVFJJRVMsXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMjMtXHRcdFx0ICAgICAgIHBhcmFtcy5jc21hX3JldHJpZXMpIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMjQ6XHRcdCAgICBubGFfcHV0X3U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX0NTTUFfTUlOX0JFLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTI1LVx0XHRcdCAgICAgICBwYXJhbXMubWluX2JlKSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTI2Olx0XHQgICAgbmxhX3B1dF91OChtc2csIElFRUU4MDIxNTRfQVRUUl9DU01BX01BWF9CRSxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTEyNy1cdFx0XHQgICAgICAgcGFyYW1zLm1heF9iZSkgfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjEyODpcdFx0ICAgIG5sYV9wdXRfczgobXNnLCBJRUVFODAyMTU0X0FUVFJfRlJBTUVfUkVUUklFUyxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTEyOS1cdFx0XHQgICAgICAgcGFyYW1zLmZyYW1lX3JldHJpZXMpKVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jPTE0NT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmllZWU4MDIxNTRfbmxfZ2V0X2RldihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE0OC1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE0OTpcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRV0pIHtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE1MC1cdFx0Y2hhciBuYW1lW0lGTkFNU0laICYjNDM7IDFdO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTUxLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTUyOlx0XHRubGFfc3Ryc2NweShuYW1lLCBpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRV0sXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xNTMtXHRcdFx0ICAgIHNpemVvZihuYW1lKSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xNTQtXHRcdGRldiA9IGRldl9nZXRfYnlfbmFtZShcdTAwMjZpbml0X25ldCwgbmFtZSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxNTU6XHR9IGVsc2UgaWYgKGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFVl9JTkRFWF0pIHtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE1Ni1cdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChcdTAwMjZpbml0X25ldCxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE1NzpcdFx0XHRubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVZfSU5ERVhdKSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xNTgtXHR9IGVsc2Uge1xuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE2NC1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE2NTpcdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCkge1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTY2LVx0XHRkZXZfcHV0KGRldik7XG4tLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9MTczPWludCBpZWVlODAyMTU0X2Fzc29jaWF0ZV9yZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xNzktXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxODA6XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NIQU5ORUxdIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxODE6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1BBTl9JRF0gfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE4MjpcdCAgICAoIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX0hXX0FERFJdIFx1MDAyNlx1MDAyNlxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTgzOlx0XHQhaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfU0hPUlRfQUREUl0pIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxODQ6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NBUEFCSUxJVFldKVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTg1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xOTItXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxOTM6XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfSFdfQUREUl0pIHtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE5NDpcdFx0YWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xOTUtXHRcdGFkZHIuZXh0ZW5kZWRfYWRkciA9IG5sYV9nZXRfaHdhZGRyKFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTk2Olx0XHRcdFx0aW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfSFdfQUREUl0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTk3LVx0fSBlbHNlIHtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE5ODpcdFx0YWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX1NIT1JUO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTk5LVx0XHRhZGRyLnNob3J0X2FkZHIgPSBubGFfZ2V0X3Nob3J0YWRkcihcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjIwMDpcdFx0XHRcdGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1NIT1JUX0FERFJdKTtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIwMS1cdH1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIwMi1cdGFkZHIucGFuX2lkID0gbmxhX2dldF9zaG9ydGFkZHIoXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMDM6XHRcdFx0aW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfUEFOX0lEXSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMDQtXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMDU6XHRwYWdlID0gbmxhX2dldF91OF9kZWZhdWx0KGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1BBR0VdLCAwKTtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIwNi1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIwNy1cdHJldCA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS1cdTAwM2Vhc3NvY19yZXEoZGV2LCBcdTAwMjZhZGRyLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjA4Olx0XHRcdG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTF0pLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjA5LVx0XHRcdHBhZ2UsXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMTA6XHRcdFx0bmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DQVBBQklMSVRZXSkpO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjExLVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jPTIxNz1pbnQgaWVlZTgwMjE1NF9hc3NvY2lhdGVfcmVzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIyMi1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjIyMzpcdGlmICghaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfU1RBVFVTXSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjI0Olx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX0hXX0FERFJdIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMjU6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfU0hPUlRfQUREUl0pXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMjYtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIzMy1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjIzNDpcdGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9MT05HO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjM1LVx0YWRkci5leHRlbmRlZF9hZGRyID0gbmxhX2dldF9od2FkZHIoXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMzY6XHRcdFx0aW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfREVTVF9IV19BRERSXSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMzctXHRydG5sX2xvY2soKTtcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yNDEtXHRyZXQgPSBpZWVlODAyMTU0X21sbWVfb3BzKGRldiktXHUwMDNlYXNzb2NfcmVzcChkZXYsIFx1MDAyNmFkZHIsXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyNDI6XHRcdG5sYV9nZXRfc2hvcnRhZGRyKGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfU0hPUlRfQUREUl0pLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjQzOlx0XHRubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1NUQVRVU10pKTtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTI0NC1cbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYz0yNTA9aW50IGllZWU4MDIxNTRfZGlzYXNzb2NpYXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTI1NS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI1NjpcdGlmICgoIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfSFdfQUREUl0gXHUwMDI2XHUwMDI2XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyNTc6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfU0hPUlRfQUREUl0pIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyNTg6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1JFQVNPTl0pXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yNTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTI2Ni1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI2NzpcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX0hXX0FERFJdKSB7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyNjg6XHRcdGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9MT05HO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjY5LVx0XHRhZGRyLmV4dGVuZGVkX2FkZHIgPSBubGFfZ2V0X2h3YWRkcihcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI3MDpcdFx0XHRcdGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfSFdfQUREUl0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjcxLVx0fSBlbHNlIHtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI3MjpcdFx0YWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX1NIT1JUO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjczLVx0XHRhZGRyLnNob3J0X2FkZHIgPSBubGFfZ2V0X3Nob3J0YWRkcihcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI3NDpcdFx0XHRcdGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfU0hPUlRfQUREUl0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjc1LVx0fVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTI4MC1cdHJldCA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS1cdTAwM2VkaXNhc3NvY19yZXEoZGV2LCBcdTAwMjZhZGRyLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjgxOlx0XHRcdG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfUkVBU09OXSkpO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjgyLVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jPTI5Mj1pbnQgaWVlZTgwMjE1NF9zdGFydF9yZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMDEtXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDI6XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1BBTl9JRF0gfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMwMzpcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfU0hPUlRfQUREUl0gfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMwNDpcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTF0gfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMwNTpcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQkNOX09SRF0gfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMwNjpcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfU0ZfT1JEXSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzA3Olx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9QQU5fQ09PUkRdIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDg6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0JBVF9FWFRdIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDk6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1JFQUxJR05dXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMTAtXHQgKVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTMyNC1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMyNTpcdGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTMyNi1cdGFkZHIuc2hvcnRfYWRkciA9IG5sYV9nZXRfc2hvcnRhZGRyKFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzI3Olx0XHRcdGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1NIT1JUX0FERFJdKTtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTMyOC1cdGFkZHIucGFuX2lkID0gbmxhX2dldF9zaG9ydGFkZHIoXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMjk6XHRcdFx0aW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfUEFOX0lEXSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMzAtXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMzE6XHRjaGFubmVsID0gbmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DSEFOTkVMXSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMzI6XHRiY25fb3JkID0gbmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9CQ05fT1JEXSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMzM6XHRzZl9vcmQgPSBubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1NGX09SRF0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzM0Olx0cGFuX2Nvb3JkID0gbmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9QQU5fQ09PUkRdKTtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMzNTpcdGJseCA9IG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQkFUX0VYVF0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzM2Olx0Y29vcmRfcmVhbGlnbiA9IG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfUkVBTElHTl0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMzM3LVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzM4Olx0cGFnZSA9IG5sYV9nZXRfdThfZGVmYXVsdChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9QQUdFXSwgMCk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMzktXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozNDA6XHRpZiAoYWRkci5zaG9ydF9hZGRyID09IGNwdV90b19sZTE2KElFRUU4MDIxNTRfQUREUl9CUk9BRENBU1QpKSB7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozNDE6XHRcdGllZWU4MDIxNTRfbmxfc3RhcnRfY29uZmlybShkZXYsIElFRUU4MDIxNTRfTk9fU0hPUlRfQUREUkVTUyk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNDItXHRcdGRldl9wdXQoZGV2KTtcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNTMtXHQgKi9cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjM1NDpcdGllZWU4MDIxNTRfbmxfc3RhcnRfY29uZmlybShkZXYsIElFRUU4MDIxNTRfU1VDQ0VTUyk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNTUtXG4tLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9MzYxPWludCBpZWVlODAyMTU0X3NjYW5fcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMzY5LVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzcwOlx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9TQ0FOX1RZUEVdIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozNzE6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NIQU5ORUxTXSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzcyOlx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9EVVJBVElPTl0pXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNzMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTM4MC1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjM4MTpcdHR5cGUgPSBubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1NDQU5fVFlQRV0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzgyOlx0Y2hhbm5lbHMgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DSEFOTkVMU10pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzgzOlx0ZHVyYXRpb24gPSBubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RVUkFUSU9OXSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zODQtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUxOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipUaW1lIHRvIEludmVzdGlnYXRlIHRoZSBJRUVFIDgwMi4xNS40IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGFuZCBidWlsZCBwcm9jZXNzIGZvciB0aGUgSUVFRSA4MDIuMTUuNCBjb21wb25lbnRzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgZXhhbWluZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBhbmQgTWFrZWZpbGUgZmlsZXMuIFRoZSBgbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgZmlsZSBzaG91bGQgaG9sZCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyB3aXJlbGVzcyBwcm90b2NvbCwgYWxsIHRoZSBzZXR0aW5ncyB0aGF0IHRoZSB1c2VyIGNhbiBzZXQgYXQgY29tcGlsZSB0aW1lLiBJdCBoZWxwcyBtZSB0byB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgZGlmZmVyZW50IGFzcGVjdHMgb2YgODAyLjE1LjQgYXJlIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4KClRoZW4sIHRoZSBgbmV0L2llZWU4MDIxNTQvTWFrZWZpbGVgIGlzIHRoZSBuZXh0IG9idmlvdXMgcGxhY2UuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIHNvdXJjZSBjb2RlIGlzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbmNvcnBvcmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgc291cmNlIGZpbGVzIGFyZSBpbmNsdWRlZCwgd2hhdCBsaWJyYXJpZXMgYXJlIHVzZWQsIGFuZCBob3cgdGhlIGVudGlyZSA4MDIuMTUuNCBzdGFjayBpcyBidWlsdCBhbmQgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0byBhZGQgYSBtb2R1bGUgb3IgZGlzYWJsZSBvbmUuCgpFc3NlbnRpYWxseSwgdGhlc2UgdHdvIGZpbGVzIHByb3ZpZGUgdGhlIGJsdWVwcmludCwgdGhlIGhvdy10byBndWlkZSwgZm9yIGJ1aWxkaW5nIGFuZCBjb25maWd1cmluZyB0aGUgODAyLjE1LjQgbmV0d29ya2luZyBzdGFjay4gR3Jhc3BpbmcgdGhlbSBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIGFueSB3b3JrIEkmIzM5O20gZ29pbmcgdG8gZG8gaW4gdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgSUVFRTgwMjE1NFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRoZWxwXG4gICA1Olx0XHQgIElFRUUgU3RkIDgwMi4xNS40IGRlZmluZXMgYSBsb3cgZGF0YSByYXRlLCBsb3cgcG93ZXIgYW5kIGxvd1xuICAgNjpcdFx0ICBjb21wbGV4aXR5IHNob3J0IHJhbmdlIHdpcmVsZXNzIHBlcnNvbmFsIGFyZWEgbmV0d29ya3MuIEl0IHdhc1xuICAgNzpcdFx0ICBkZXNpZ25lZCB0byBvcmdhbmlzZSBuZXR3b3JrcyBvZiBzZW5zb3JzLCBzd2l0Y2hlcywgZXRjIGF1dG9tYXRpb25cbiAgIDg6XHRcdCAgZGV2aWNlcy4gTWF4aW11bSBhbGxvd2VkIGRhdGEgcmF0ZSBpcyAyNTAga2IvcyBhbmQgdHlwaWNhbCBwZXJzb25hbFxuICAgOTpcdFx0ICBvcGVyYXRpbmcgc3BhY2UgYXJvdW5kIDEwbS5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIExSLVdQQU4gc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cbiAgMTI6XHRcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGVzLlxuICAxMzpcdFxuICAxNDpcdGlmIElFRUU4MDIxNTRcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcbiAgMTc6XHRcdGJvb2wgXCYjMzQ7SUVFRSA4MDIuMTUuNCBleHBlcmltZW50YWwgbmV0bGluayBzdXBwb3J0XCYjMzQ7XG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIEFkZHMgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydCBmb3Igbmw4MDIxNTQuXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIElFRUU4MDIxNTRfU09DS0VUXG4gIDIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcJiMzNDtcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBTb2NrZXQgaW50ZXJmYWNlIGZvciBJRUVFIDgwMi4xNS40LiBDb250YWlucyBER1JBTSBzb2NrZXRzIGludGVyZmFjZVxuICAyNjpcdFx0ICBmb3IgODAyLjE1LjQgZGF0YWZyYW1lcy4gQWxzbyBSQVcgc29ja2V0IGludGVyZmFjZSB0byBidWlsZCBNQUNcbiAgMjc6XHRcdCAgaGVhZGVyIGZyb20gdXNlcnNwYWNlLlxuICAyODpcdFxuICAyOTpcdHNvdXJjZSBcJiMzNDtuZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWdcJiMzNDtcbiAgMzA6XHRcbiAgMzE6XHRlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDIxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBJRUVFIDgwMi4xNS40L1dQQU4gRGV2aWNlIFNpbXVsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIHRlc3QgSUVFRSA4MDIuMTUuNCBhbmQgV1BBTiBmdW5jdGlvbmFsaXR5IHdpdGhpbiBhIHNpbXVsYXRlZCBlbnZpcm9ubWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgZHJpdmVycyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aG9zZSB0ZWNobm9sb2dpZXMuIEkgc2hvdWxkIGV4cGxvcmUgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvYCwgYGRyaXZlcnMvbmV0L3dwYW4vYCwgYW5kIGBtYWM4MDIxNTRgIHRvIHVuZGVyc3RhbmQgdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRyaXZlcnMgYW5kIHRlc3RpbmcgZnJhbWV3b3Jrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB3ZSBjYW4gc2ltdWxhdGUgdGhlc2UgZGV2aWNlcyBkaXJlY3RseSB3aXRoaW4gU3l6a2FsbGVyIG9yIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBvbiB0aGUgbG9va291dCBmb3IgbmFtZXMgbGlrZSBgZmFrZWxiYCBhbmQgYG1hYzgwMjE1NF9od3NpbWAsIHdoaWNoIG1pZ2h0IHByb3ZpZGUgYSBjbHVlLiBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aGVzZSB0byBkZXRlcm1pbmUgdGhlIGF2YWlsYWJpbGl0eSBvZiBzaW11bGF0ZWQgaGFyZHdhcmUgbW9kZWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSUVFRTgwMjE1NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmM9MTc5PXN0YXRpYyB2b2lkIG9mX2dwaW9fdHJ5X2ZpeHVwX3BvbGFyaXR5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYy0yMDctI2VuZGlmXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jOjIwODojaWYgSVNfRU5BQkxFRChDT05GSUdfSUVFRTgwMjE1NF9DQTgyMTApXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jLTIwOS1cdFx0Lypcbi0tXG5kcml2ZXJzL25ldC9NYWtlZmlsZT03MT1vYmotJChDT05GSUdfV0xBTikgJiM0Mzs9IHdpcmVsZXNzL1xuZHJpdmVycy9uZXQvTWFrZWZpbGU6NzI6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTQpICYjNDM7PSBpZWVlODAyMTU0L1xuZHJpdmVycy9uZXQvTWFrZWZpbGUtNzMtb2JqLSQoQ09ORklHX1dXQU4pICYjNDM7PSB3d2FuL1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfRkFLRUxCKSAmIzQzOz0gZmFrZWxiLm9cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfSUVFRTgwMjE1NF9BVDg2UkYyMzApICYjNDM7PSBhdDg2cmYyMzAub1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19JRUVFODAyMTU0X01SRjI0SjQwKSAmIzQzOz0gbXJmMjRqNDAub1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19JRUVFODAyMTU0X0NDMjUyMCkgJiM0Mzs9IGNjMjUyMC5vXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfQVRVU0IpICYjNDM7PSBhdHVzYi5vXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfQURGNzI0MikgJiM0Mzs9IGFkZjcyNDIub1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19JRUVFODAyMTU0X0NBODIxMCkgJiM0Mzs9IGNhODIxMC5vXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfTUNSMjBBKSAmIzQzOz0gbWNyMjBhLm9cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfSFdTSU0pICYjNDM7PSBtYWM4MDIxNTRfaHdzaW0ub1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2E4MjEwLmM9Mjk3OT1zdGF0aWMgdm9pZCBjYTgyMTBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGlfZGV2aWNlKVxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2E4MjEwLmMtMzAxNS1cdFx0fVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYTgyMTAuYzozMDE2Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSUVFRTgwMjE1NF9DQTgyMTBfREVCVUdGUykpXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2NhODIxMC5jLTMwMTctXHRcdFx0Y2E4MjEwX3Rlc3RfaW50ZXJmYWNlX2NsZWFyKHByaXYpO1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2E4MjEwLmM9MzAyNz1zdGF0aWMgaW50IGNhODIxMF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX2RldmljZSlcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2NhODIxMC5jLTMwNTgtXHRzcGlfc2V0X2RydmRhdGEocHJpdi1cdTAwM2VzcGksIHByaXYpO1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYTgyMTAuYzozMDU5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lFRUU4MDIxNTRfQ0E4MjEwX0RFQlVHRlMpKSB7XG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2NhODIxMC5jLTMwNjAtXHRcdGNhc2NvZGFfYXBpX3Vwc3RyZWFtID0gY2E4MjEwX3Rlc3RfaW50X2RyaXZlcl93cml0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3NDYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJRUVFIDgwMi4xNS40IFBhdGNoKioKCk9rYXksIHNvIElFRUUgODAyLjE1LjQgaXMgd2VsbC1jb3ZlcmVkOyB3ZSYjMzk7dmUgZ290IGBtYWM4MDIxNTRfaHdzaW1gLCBgZmFrZWxiYCwgYG5sODAyMTU0IG5ldGxpbmtgLCBgcnRubGAsIHRoZSB3b3JrcywgYW5kIGl0JiMzOTtzIGV2ZW4gZ2V0dGluZyBmdXp6aW5nIGF0dGVudGlvbiBmcm9tIHN5emthbGxlciwgd2hpY2ggaXMgZ3JlYXQgdG8gc2VlLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBzcGVjaWZpYyBwYXRjaC4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgbmV0L2llZWU4MDIxNTQvY29yZS5jYC4KClNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3cGFuX2Rldl90eXBlID0geyAubmFtZSA9ICYjMzQ7d3BhbiYjMzQ7IH07YC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXZpY2UgdHlwZSBkZWZpbml0aW9uLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGFsYXJtaW5nIHRoZXJlLgoKRGlnZ2luZyBkZWVwZXIgaW50byBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBzb21lIGludGVyZXN0aW5nIGxvZ2ljIGFkZGVkLiBUaGVyZSYjMzk7cyBhIGBXQVJOX09OKHdwYW5fZGV2LSZndDtpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQyk7YCB3aGljaCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgYSBzYW5pdHkgY2hlY2ssIHRoYXQgc3VnZ2VzdHMgc29tZSBraW5kIG9mIHVuZXhwZWN0ZWQgc3RhdGUuIFRoZW4sIHRoZSBoYW5kbGluZyBvZiBgTkVUREVWX1BPU1RfSU5JVGAgd2hpY2ggaXMgc2V0dGluZyB0aGUgZGV2aWNlIHR5cGUsIGBTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCAmYW1wO3dwYW5fZGV2X3R5cGUpO2AuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZGV2aWNlIHR5cGUgZGVmaW5pdGlvbiBhYm92ZS4KCk5vdywgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgYW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIHRoYXQuIENvbnRleHQgaXMgZXZlcnl0aGluZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaWVlZTgwMjE1NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaWVlZTgwMjE1NC9jb3JlLmM9MjgwPWNmZzgwMjE1NF91cGRhdGVfaWZhY2VfbnVtKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L2llZWU4MDIxNTQvY29yZS5jLTI4Ny1cbm5ldC9pZWVlODAyMTU0L2NvcmUuYzoyODg6c3RhdGljIGludCBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbm5ldC9pZWVlODAyMTU0L2NvcmUuYy0yODktXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzdGF0ZSwgdm9pZCAqcHRyKVxuLS1cbm5ldC9pZWVlODAyMTU0L2NvcmUuYz0zNTY9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyID0ge1xubmV0L2llZWU4MDIxNTQvY29yZS5jOjM1NzpcdC5ub3RpZmllcl9jYWxsID0gY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsLFxubmV0L2llZWU4MDIxNTQvY29yZS5jLTM1OC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY0MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCwgd2hpY2ggaXMgY2xlYXJseSByZWdpc3RlcmVkIGFzIGEgbmV0ZGV2aWNlIG5vdGlmaWVyIHZpYSBgcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyYCB3aXRoaW4gdGhlIGBpZWVlODAyMTU0X2luaXRgIG9yIHJlbGF0ZWQgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gdGhpcyBub3RpZmllciBpcyBhY3R1YWxseSB0cmlnZ2VyZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyB0aWVkIHRvIG5ldGRldmljZSBldmVudHMuCgpTbywgaXQgbG9va3MgbGlrZSB0aGlzIG5vdGlmaWVyIGdldHMgaW52b2tlZCB3aGVuZXZlciBhIG5ldGRldmljZSwgd2hlcmUgYGRldi0mZ3Q7aWVlZTgwMjE1NF9wdHJgIGlzbiYjMzk7dCBudWxsLCBleHBlcmllbmNlcyBldmVudHMgbGlrZSBgTkVUREVWX1BPU1RfSU5JVGAsIGBORVRERVZfUkVHSVNURVJgLCBgTkVUREVWX0RPV05gLCBgTkVUREVWX1VQYCwgYE5FVERFVl9VTlJFR0lTVEVSYCwgYW5kIHNvIG9uLiBOb3cgSSBzZWUgdGhhdCB3aXRoaW4gdGhpcyBmdW5jdGlvbiB0aGVyZSBpcyBhIGNhbGwgdG8gYHdwYW5fcGh5X3RvX3JkZXZgLCBhIG5ldyBhc3NlcnRpb24gYFdBUk5fT04od3Bhbl9kZXYtJmd0O2lmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKWAsIGFuZCBhbHNvIGEgbmV3IGFzc2lnbm1lbnQgYFNFVF9ORVRERVZfREVWVFlQRShkZXYsICZhbXA7d3Bhbl9kZXZfdHlwZSk7YC4KClRoYXQgbmV3IGFzc2VydGlvbiBpcyBjcml0aWNhbC4gTm93LCBJIHNob3VsZCByZWZlcmVuY2UgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gU2VjdGlvbnMgMSAmYW1wOyAzIGFyZSB0aGUgcmVsZXZhbnQgb25lczogbmV3IG9yIG1vZGlmaWVkIGFzc2VydGlvbnMgaW4gcmVhY2hhYmxlIGNvZGUgKm11c3QqIGJlIGZ1enplZC4gRXZlbiBpZiB5b3UgKnRoaW5rKiBpdCYjMzk7cyBidWxsZXRwcm9vZiwgZnV6emluZyBpcyB2aXRhbCB0byBleHBvc2UgYW55IHVuZXhwZWN0ZWQgb3BlcmF0aW9uIHNlcXVlbmNlcyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhhdCBhc3NlcnRpb24uIEFuZCB0aGUgSUVFRSA4MDIuMTUuNCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdmlydHVhbCBidXNlcyBhbmQgbmV0bGluaywgd2hpY2ggbWVhbnMgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgZmFpciBnYW1lIGZvciBmdXp6aW5nLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC4gVGhlIGNvZGUgcGF0aCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50LgoKTm93LCBsZXQmIzM5O3MgZXN0YWJsaXNoIG15IGBGb2N1c1N5bWJvbHNgLiBXaGF0IGZ1bmN0aW9ucywgYmV5b25kIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50LCBzaG91bGQgSSBjb25zaWRlcj8gSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgYWZmZWN0ZWQgb3IgYWN0IGFzIGVudHJ5cG9pbnRzLiBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCBpbiBgbmV0L2llZWU4MDIxNTQvY29yZS5jYCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0b3VjaGVkLiBJIGhhdmUgdG8gbG9vayBpbnRvIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgIGFuZCByZWxldmFudCBuZXRsaW5rIGludGVyZmFjZXMgYW5kIG90aGVyIGZ1bmN0aW9ucyB0byByb3VuZCBvdXQgbXkgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgU2llbWVucyBBR1xuICAgNDpcdCAqL1xuICAgNTpcdFxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICAxMDpcdFxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY25ldC9jZmc4MDIxNTQuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuICAxMzpcdFxuICAxNDpcdCNpbmNsdWRlIFwmIzM0O2llZWU4MDIxNTQuaFwmIzM0O1xuICAxNTpcdCNpbmNsdWRlIFwmIzM0O25sODAyMTU0LmhcJiMzNDtcbiAgMTY6XHQjaW5jbHVkZSBcJiMzNDtzeXNmcy5oXCYjMzQ7XG4gIDE3Olx0I2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4gIDE4Olx0XG4gIDE5Olx0LyogbmFtZSBmb3Igc3lzZnMsICVkIGlzIGFwcGVuZGVkICovXG4gIDIwOlx0I2RlZmluZSBQSFlfTkFNRSBcJiMzNDtwaHlcJiMzNDtcbiAgMjE6XHRcbiAgMjI6XHQvKiBSQ1UtcHJvdGVjdGVkIChhbmQgUlROTCBmb3Igd3JpdGVycykgKi9cbiAgMjM6XHRMSVNUX0hFQUQoY2ZnODAyMTU0X3JkZXZfbGlzdCk7XG4gIDI0Olx0aW50IGNmZzgwMjE1NF9yZGV2X2xpc3RfZ2VuZXJhdGlvbjtcbiAgMjU6XHRcbiAgMjY6XHRzdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5X2ZpbmQoY29uc3QgY2hhciAqc3RyKVxuICAyNzpcdHtcbiAgMjg6XHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiAgMjk6XHRcbiAgMzA6XHRcdGlmIChXQVJOX09OKCFzdHIpKVxuICAzMTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgMzI6XHRcbiAgMzM6XHRcdGRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlX2J5X25hbWUoXHUwMDI2d3Bhbl9waHlfY2xhc3MsIHN0cik7XG4gIDM0Olx0XHRpZiAoIWRldilcbiAgMzU6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDM2Olx0XG4gIDM3Olx0XHRyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHdwYW5fcGh5LCBkZXYpO1xuICAzODpcdH1cbiAgMzk6XHRFWFBPUlRfU1lNQk9MKHdwYW5fcGh5X2ZpbmQpO1xuICA0MDpcdFxuICA0MTpcdHN0cnVjdCB3cGFuX3BoeV9pdGVyX2RhdGEge1xuICA0MjpcdFx0aW50ICgqZm4pKHN0cnVjdCB3cGFuX3BoeSAqcGh5LCB2b2lkICpkYXRhKTtcbiAgNDM6XHRcdHZvaWQgKmRhdGE7XG4gIDQ0Olx0fTtcbiAgNDU6XHRcbiAgNDY6XHRzdGF0aWMgaW50IHdwYW5fcGh5X2l0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpfZGF0YSlcbiAgNDc6XHR7XG4gIDQ4Olx0XHRzdHJ1Y3Qgd3Bhbl9waHlfaXRlcl9kYXRhICp3cGlkID0gX2RhdGE7XG4gIDQ5Olx0XHRzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB3cGFuX3BoeSwgZGV2KTtcbiAgNTA6XHRcbiAgNTE6XHRcdHJldHVybiB3cGlkLVx1MDAzZWZuKHBoeSwgd3BpZC1cdTAwM2VkYXRhKTtcbiAgNTI6XHR9XG4gIDUzOlx0XG4gIDU0Olx0aW50IHdwYW5fcGh5X2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSwgdm9pZCAqZGF0YSksXG4gIDU1Olx0XHRcdCAgICAgIHZvaWQgKmRhdGEpXG4gIDU2Olx0e1xuICA1NzpcdFx0c3RydWN0IHdwYW5fcGh5X2l0ZXJfZGF0YSB3cGlkID0ge1xuICA1ODpcdFx0XHQuZm4gPSBmbixcbiAgNTk6XHRcdFx0LmRhdGEgPSBkYXRhLFxuICA2MDpcdFx0fTtcbiAgNjE6XHRcbiAgNjI6XHRcdHJldHVybiBjbGFzc19mb3JfZWFjaF9kZXZpY2UoXHUwMDI2d3Bhbl9waHlfY2xhc3MsIE5VTEwsXG4gIDYzOlx0XHRcdFx0XHUwMDI2d3BpZCwgd3Bhbl9waHlfaXRlcik7XG4gIDY0Olx0fVxuICA2NTpcdEVYUE9SVF9TWU1CT0wod3Bhbl9waHlfZm9yX2VhY2gpO1xuICA2NjpcdFxuICA2NzpcdHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKlxuICA2ODpcdGNmZzgwMjE1NF9yZGV2X2J5X3dwYW5fcGh5X2lkeChpbnQgd3Bhbl9waHlfaWR4KVxuICA2OTpcdHtcbiAgNzA6XHRcdHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJlc3VsdCA9IE5VTEwsICpyZGV2O1xuICA3MTpcdFxuICA3MjpcdFx0QVNTRVJUX1JUTkwoKTtcbiAgNzM6XHRcbiAgNzQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgXHUwMDI2Y2ZnODAyMTU0X3JkZXZfbGlzdCwgbGlzdCkge1xuICA3NTpcdFx0XHRpZiAocmRldi1cdTAwM2V3cGFuX3BoeV9pZHggPT0gd3Bhbl9waHlfaWR4KSB7XG4gIDc2Olx0XHRcdFx0cmVzdWx0ID0gcmRldjtcbiAgNzc6XHRcdFx0XHRicmVhaztcbiAgNzg6XHRcdFx0fVxuICA3OTpcdFx0fVxuICA4MDpcdFxuICA4MTpcdFx0cmV0dXJuIHJlc3VsdDtcbiAgODI6XHR9XG4gIDgzOlx0XG4gIDg0Olx0c3RydWN0IHdwYW5fcGh5ICp3cGFuX3BoeV9pZHhfdG9fd3Bhbl9waHkoaW50IHdwYW5fcGh5X2lkeClcbiAgODU6XHR7XG4gIDg2Olx0XHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuICA4NzpcdFxuICA4ODpcdFx0QVNTRVJUX1JUTkwoKTtcbiAgODk6XHRcbiAgOTA6XHRcdHJkZXYgPSBjZmc4MDIxNTRfcmRldl9ieV93cGFuX3BoeV9pZHgod3Bhbl9waHlfaWR4KTtcbiAgOTE6XHRcdGlmICghcmRldilcbiAgOTI6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDkzOlx0XHRyZXR1cm4gXHUwMDI2cmRldi1cdTAwM2V3cGFuX3BoeTtcbiAgOTQ6XHR9XG4gIDk1Olx0XG4gIDk2Olx0c3RydWN0IHdwYW5fcGh5ICpcbiAgOTc6XHR3cGFuX3BoeV9uZXcoY29uc3Qgc3RydWN0IGNmZzgwMjE1NF9vcHMgKm9wcywgc2l6ZV90IHByaXZfc2l6ZSlcbiAgOTg6XHR7XG4gIDk5Olx0XHRzdGF0aWMgYXRvbWljX3Qgd3Bhbl9waHlfY291bnRlciA9IEFUT01JQ19JTklUKDApO1xuIDEwMDpcdFx0c3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMzYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AgLSBMaW5lcyAzMDAtMzYwKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyAzMDAgdG8gMzYwIGluIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgLiBUaGlzIHNlY3Rpb24uLi4gQWgsIGhlcmUgd2UgYXJlLiBPa2F5LCBhZnRlciBhIHF1aWNrIHNraW0sIHRoaXMgbG9va3MgbGlrZSBpdOKAmXMgbGlrZWx5IGhhbmRsaW5nIHRoZSBjcnVjaWFsIHBvcnRpb24gd2hlcmUgdGhlIGxvd2VyIE1BQyBsYXllciBpbnRlcmFjdHMgd2l0aCB0aGUgdXBwZXIgbGF5ZXJzLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgKnJlYWxseSogaW50ZXJlc3Rpbmcgc3R1ZmYgaXMgaGFwcGVuaW5nIOKAkyB0aGUgaGFuZG9mZiBvZiBhIHBhY2tldCwgcGVyaGFwcyB0aGUgbWFuYWdlbWVudCBvZiBBQ0sgcmVxdWVzdHMsIG9yIHBlcmhhcHMgZXZlbiBpbml0aWFsIGRhdGEgcHJvY2Vzc2luZyB1cG9uIHJlY2VpdmluZyBhIG5ldyBwYWNrZXQuCgpJ4oCZbSBndWVzc2luZyBpdOKAmXMgZGVhbGluZyB3aXRoIHNvbWUga2V5IGFzcGVjdHMgb2YgODAyLjE1LjQgZnJhbWUgdHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbi4gSXMgaXQgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgQ1NNQS1DQSBtZWNoYW5pc20/IERvZXMgdGhpcyBjaHVuayBvZiBjb2RlIGluY2x1ZGUgdGhlIGxvZ2ljIGZvciBjaGFubmVsIGFzc2Vzc21lbnQgcHJpb3IgdG8gdHJhbnNtaXNzaW9uPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGZvciBhbnkgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYGllZWU4MDIxNTRfZ2V0X2NoYW5uZWxgIG9yIHBlcmhhcHMgYSBmdW5jdGlvbiBuYW1lZCBgaWVlZTgwMjE1NF9jY2FgLiAKCkxldCYjMzk7cyBjYXJlZnVsbHkgZXhhbWluZSB0aGUgcmVnaXN0ZXIgYW5kIGludGVycnVwdCBoYW5kbGluZywgaWYgYW55IGlzIHByZXNlbnQsIHNpbmNlIHRoaXMgYXJlYSBoYXMgdGhlIHBvdGVudGlhbCB0byBiZWNvbWUgYSBib3R0bGVuZWNrIGR1ZSB0byBpbnRlcnJ1cHQgb3ZlcmhlYWQuIEdpdmVuIHRoZSB0aW1pbmcgY29uc3RyYWludHMgaW5oZXJlbnQgaW4gODAyLjE1LjQsIHRoaXMgaXMgY3JpdGljYWwuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGluZGljYXRpb24gb2YgaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IGZyYW1lIHR5cGVzLCBsaWtlIGRhdGEgZnJhbWVzIHZlcnN1cyBiZWFjb24gZnJhbWVzLCBhcyB0aGlzIGNvdWxkIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gc3lzdGVtIHRocm91Z2hwdXQgYW5kIHBvd2VyIGNvbnN1bXB0aW9uLiBNb3JlIHNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGFkZHJlc3MgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIGludGVyZmVyZW5jZSBvciBjb2xsaXNpb25zIG9uIHRoZSBtZWRpdW0uCgpJIGFsc28gd2FudCB0byBzZWUgdGhlIGVycm9yIGNoZWNraW5nIGhhcHBlbmluZyBhbmQgaG93IGl0IG1pZ2h0IGltcGFjdCB0aGUgaW50ZWdyaXR5IG9mIGEgbWVzc2FnZSB0cmFuc21pc3Npb24uIExldCYjMzk7cyBzZWUgaWYgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIHByb3ZpZGVzIGFueSBjbHVlcyBhYm91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgYmVpbmcgdXNlZC4gQXJlIHRoZXJlIGFueSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciBtYW5pcHVsYXRpb25zPyBJZiB0aGVyZSBhcmUsIHRoYXQgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBleGFjdCByYWRpbyBjaGlwIGZhbWlseSB0aGUgZHJpdmVyJiMzOTtzIGRlc2lnbmVkIGZvci4gVGltZSB0byBkaWcgaW4gYW5kIGNvbmZpcm0gdGhlc2UgZmlyc3QgaW1wcmVzc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRcbiAzMzE6XHRcdFx0LyogSXQgaXMgcG9zc2libGUgdG8gZ2V0IE5FVERFVl9VTlJFR0lTVEVSXG4gMzMyOlx0XHRcdCAqIG11bHRpcGxlIHRpbWVzLiBUbyBkZXRlY3QgdGhhdCwgY2hlY2tcbiAzMzM6XHRcdFx0ICogdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHN0aWxsIG9uIHRoZSBsaXN0XG4gMzM0Olx0XHRcdCAqIG9mIHJlZ2lzdGVyZWQgaW50ZXJmYWNlcywgYW5kIG9ubHkgdGhlblxuIDMzNTpcdFx0XHQgKiByZW1vdmUgYW5kIGNsZWFuIGl0IHVwLlxuIDMzNjpcdFx0XHQgKi9cbiAzMzc6XHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNndwYW5fZGV2LVx1MDAzZWxpc3QpKSB7XG4gMzM4Olx0XHRcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNndwYW5fZGV2LVx1MDAzZWxpc3QpO1xuIDMzOTpcdFx0XHRcdHJkZXYtXHUwMDNlZGV2bGlzdF9nZW5lcmF0aW9uJiM0MzsmIzQzOztcbiAzNDA6XHRcdFx0fVxuIDM0MTpcdFx0XHQvKiBzeW5jaHJvbml6ZSAoc28gdGhhdCB3ZSB3b24mIzM5O3QgZmluZCB0aGlzIG5ldGRldlxuIDM0MjpcdFx0XHQgKiBmcm9tIG90aGVyIGNvZGUgYW55IG1vcmUpIGFuZCB0aGVuIGNsZWFyIHRoZSBsaXN0XG4gMzQzOlx0XHRcdCAqIGhlYWQgc28gdGhhdCB0aGUgYWJvdmUgY29kZSBjYW4gc2FmZWx5IGNoZWNrIGZvclxuIDM0NDpcdFx0XHQgKiAhbGlzdF9lbXB0eSgpIHRvIGF2b2lkIGRvdWJsZS1jbGVhbnVwLlxuIDM0NTpcdFx0XHQgKi9cbiAzNDY6XHRcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gMzQ3Olx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNndwYW5fZGV2LVx1MDAzZWxpc3QpO1xuIDM0ODpcdFx0XHRicmVhaztcbiAzNDk6XHRcdGRlZmF1bHQ6XG4gMzUwOlx0XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiAzNTE6XHRcdH1cbiAzNTI6XHRcbiAzNTM6XHRcdHJldHVybiBOT1RJRllfT0s7XG4gMzU0Olx0fVxuIDM1NTpcdFxuIDM1NjpcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllciA9IHtcbiAzNTc6XHRcdC5ub3RpZmllcl9jYWxsID0gY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsLFxuIDM1ODpcdH07XG4gMzU5Olx0XG4gMzYwOlx0c3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxNTRfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuIDM2MTpcdHtcbiAzNjI6XHRcdHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XG4gMzYzOlx0XG4gMzY0Olx0XHRydG5sX2xvY2soKTtcbiAzNjU6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgXHUwMDI2Y2ZnODAyMTU0X3JkZXZfbGlzdCwgbGlzdCkge1xuIDM2NjpcdFx0XHRpZiAobmV0X2VxKHdwYW5fcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdwYW5fcGh5KSwgbmV0KSlcbiAzNjc6XHRcdFx0XHRjZmc4MDIxNTRfc3dpdGNoX25ldG5zKHJkZXYsIFx1MDAyNmluaXRfbmV0KTtcbiAzNjg6XHRcdH1cbiAzNjk6XHRcdHJ0bmxfdW5sb2NrKCk7XG4gMzcwOlx0fVxuIDM3MTpcdFxuIDM3MjpcdHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgY2ZnODAyMTU0X3Blcm5ldF9vcHMgPSB7XG4gMzczOlx0XHQuZXhpdCA9IGNmZzgwMjE1NF9wZXJuZXRfZXhpdCxcbiAzNzQ6XHR9O1xuIDM3NTpcdFxuIDM3NjpcdHN0YXRpYyBpbnQgX19pbml0IHdwYW5fcGh5X2NsYXNzX2luaXQodm9pZClcbiAzNzc6XHR7XG4gMzc4Olx0XHRpbnQgcmM7XG4gMzc5Olx0XG4gMzgwOlx0XHRyYyA9IHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoXHUwMDI2Y2ZnODAyMTU0X3Blcm5ldF9vcHMpO1xuIDM4MTpcdFx0aWYgKHJjKVxuIDM4MjpcdFx0XHRnb3RvIGVycjtcbiAzODM6XHRcbiAzODQ6XHRcdHJjID0gd3Bhbl9waHlfc3lzZnNfaW5pdCgpO1xuIDM4NTpcdFx0aWYgKHJjKVxuIDM4NjpcdFx0XHRnb3RvIGVycl9zeXNmcztcbiAzODc6XHRcbiAzODg6XHRcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNmNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXIpO1xuIDM4OTpcdFx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU4NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGNmZzgwMjE1NCBOZXRkZXZpY2UgTm90aWZpZXIqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBob3cgYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgZ2V0cyB0cmlnZ2VyZWQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyB0aWVkIHRvIGFueSBuZXRkZXZpY2UgZXZlbnQgcmVsYXRlZCB0byBhIFdQQU4gKHdpcmVsZXNzIHBlcnNvbmFsIGFyZWEgbmV0d29yaykgbmV0X2RldmljZS4gU28sIGFueXRoaW5nIHRoYXQgYWZmZWN0cyBhIFdQQU4gbmV0X2RldmljZSBpcyBnb2luZyB0byB0cmlnZ2VyIHRoaXMgbm90aWZpZXIuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZXZlbnRzIGxpa2UgYWRkaW5nIGFuIGludGVyZmFjZSB1c2luZyBgaWVlZTgwMjE1NF9hZGRfaWZhY2VgLCBkZXZpY2UgcmVnaXN0cmF0aW9uLCBvciB0aGUgbmV0X2RldmljZSBzdGF0ZSBjaGFuZ2luZyBiZXR3ZWVuIFVQIGFuZCBET1dOLgoKTm93LCBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxgIHRvIHNlZSB3aGVyZSB0aGVzZSB0cmlnZ2VyaW5nIGZ1bmN0aW9ucyBhY3R1YWxseSBsaXZlLiBMZXQmIzM5O3MgbG9vayBhdCBgaWVlZTgwMjE1NF9hZGRfaWZhY2VgLCBmb3Igc3RhcnRlcnMuIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zOiBgbmw4MDIxNTRfYWRkX2lmYWNlYCwgYG1hYzgwMjE1NF93cGFuX3VwZGF0ZV9sbHNlY2AsIGFuZCBvdGhlcnMgaW4gdGhlIHNhbWUgdmVpbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG9vLgoKVG8gbWFrZSB0aGlzIGVmZmljaWVudCwgSSBzaG91bGQgYmUgYWJsZSB0byBwZXJmb3JtIGEgc2VhcmNoIGZvciBjb25zdGFudHMgbGlrZSBgTkw4MDIxNTRfSUZUWVBFX1VOU1BFQ2AgYW5kIHRoZW4gbG9vayBmb3IgYXNzb2NpYXRlZCBmdW5jdGlvbnMgc3VjaCBhcyBgaWVlZTgwMjE1NF9hZGRfaWZhY2VgLCBgbmw4MDIxNTRfYWRkX2ludGVyZmFjZWAgb3Igb3RoZXJzIHRoYXQgYXJlIHJlbGV2YW50LiBUaGlzIHNob3VsZCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgcGF0aHdheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05MODAyMTU0X0lGVFlQRV9VTlNQRUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L2NvcmUuYz0yODg9c3RhdGljIGludCBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmMtMjk5LVxubmV0L2llZWU4MDIxNTQvY29yZS5jOjMwMDpcdFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xubmV0L2llZWU4MDIxNTQvY29yZS5jLTMwMS1cbi0tXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jPTkyMj1zdGF0aWMgaW50IG5sODAyMTU0X25ld19pbnRlcmZhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTkyNC1cdHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYzo5MjU6XHRlbnVtIG5sODAyMTU0X2lmdHlwZSB0eXBlID0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQztcbm5ldC9pZWVlODAyMTU0L25sODAyMTU0LmMtOTI2LVx0X19sZTY0IGV4dGVuZGVkX2FkZHIgPSBjcHVfdG9fbGU2NCgweDAwMDAwMDAwMDAwMDAwMDBVTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTUxMQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSA4MDIuMTUuNCBOZXR3b3JrIExheWVyIENvZGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBJRUVFIDgwMi4xNS40IG5ldHdvcmsgbGF5ZXIgaW1wbGVtZW50YXRpb24uIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlIGlzc3VlIG1pZ2h0IGJlIGNlbnRlcmVkIGFyb3VuZCBhIHNwZWNpZmljIHNlY3Rpb24gb2YgY29kZSwgbGlrZWx5IHJlbGF0ZWQgdG8gYSByZWNlbnQgYnVnIHJlcG9ydCBvciBvYnNlcnZlZCBiZWhhdmlvci4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCBsaW5lIDkyMiB3aXRoaW4gdGhlIGBuZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jYCBmaWxlIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgYmVnaW4gYnkgZXhhbWluaW5nIHRoYXQgcGFydGljdWxhciBhcmVhLCBhbmQgYXNzZXNzIHRoZSBzdXJyb3VuZGluZyBsaW5lcy4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBpbml0aWFsIGRpcmVjdGlvbiB0byB0YWtlOyBJJiMzOTtsbCBzdGFydCB3aXRoIHRoaXMgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTIwOlx0fVxuIDkyMTpcdFxuIDkyMjpcdHN0YXRpYyBpbnQgbmw4MDIxNTRfbmV3X2ludGVyZmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIDkyMzpcdHtcbiA5MjQ6XHRcdHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuIDkyNTpcdFx0ZW51bSBubDgwMjE1NF9pZnR5cGUgdHlwZSA9IE5MODAyMTU0X0lGVFlQRV9VTlNQRUM7XG4gOTI2Olx0XHRfX2xlNjQgZXh0ZW5kZWRfYWRkciA9IGNwdV90b19sZTY0KDB4MDAwMDAwMDAwMDAwMDAwMFVMTCk7XG4gOTI3Olx0XG4gOTI4Olx0XHQvKiBUT0RPIGF2b2lkIGZhaWxpbmcgYSBuZXcgaW50ZXJmYWNlXG4gOTI5Olx0XHQgKiBjcmVhdGlvbiBkdWUgdG8gcGVuZGluZyByZW1vdmFsP1xuIDkzMDpcdFx0ICovXG4gOTMxOlx0XG4gOTMyOlx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxNTRfQVRUUl9JRk5BTUVdKVxuIDkzMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5MzQ6XHRcbiA5MzU6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTU0X0FUVFJfSUZUWVBFXSkge1xuIDkzNjpcdFx0XHR0eXBlID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjE1NF9BVFRSX0lGVFlQRV0pO1xuIDkzNzpcdFx0XHRpZiAodHlwZSBcdTAwM2UgTkw4MDIxNTRfSUZUWVBFX01BWCB8fFxuIDkzODpcdFx0XHQgICAgIShyZGV2LVx1MDAzZXdwYW5fcGh5LnN1cHBvcnRlZC5pZnR5cGVzIFx1MDAyNiBCSVQodHlwZSkpKVxuIDkzOTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDk0MDpcdFx0fVxuIDk0MTpcdFxuIDk0MjpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxNTRfQVRUUl9FWFRFTkRFRF9BRERSXSlcbiA5NDM6XHRcdFx0ZXh0ZW5kZWRfYWRkciA9IG5sYV9nZXRfbGU2NChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTU0X0FUVFJfRVhURU5ERURfQUREUl0pO1xuIDk0NDpcdFxuIDk0NTpcdFx0aWYgKCFyZGV2LVx1MDAzZW9wcy1cdTAwM2VhZGRfdmlydHVhbF9pbnRmKVxuIDk0NjpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gOTQ3Olx0XG4gOTQ4Olx0XHRyZXR1cm4gcmRldl9hZGRfdmlydHVhbF9pbnRmKHJkZXYsXG4gOTQ5Olx0XHRcdFx0XHQgICAgIG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxNTRfQVRUUl9JRk5BTUVdKSxcbiA5NTA6XHRcdFx0XHRcdCAgICAgTkVUX05BTUVfVVNFUiwgdHlwZSwgZXh0ZW5kZWRfYWRkcik7XG4gOTUxOlx0fVxuIDk1MjpcdFxuIDk1MzpcdHN0YXRpYyBpbnQgbmw4MDIxNTRfZGVsX2ludGVyZmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIDk1NDpcdHtcbiA5NTU6XHRcdHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuIDk1NjpcdFx0c3RydWN0IHdwYW5fZGV2ICp3cGFuX2RldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4gOTU3Olx0XG4gOTU4Olx0XHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWRlbF92aXJ0dWFsX2ludGYpXG4gOTU5Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQSBCdWcgaW4gdGhlIDgwMi4xNS40IE5ldGxpbmsgSW50ZXJmYWNlIENyZWF0aW9uKioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZyBpbiBgbmw4MDIxNTRfbmV3X2ludGVyZmFjZWAuIElmIHRoZSBOZXRsaW5rIHJlcXVlc3QgKmRvZXNuJiMzOTt0KiBzcGVjaWZ5IGFuIGludGVyZmFjZSB0eXBlLCB3aGljaCBpcyBwZXJmZWN0bHkgdmFsaWQsIHRoZSBjb2RlIGRlZmF1bHRzIHRoZSB0eXBlIHRvIGBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDYC4gTm8gcmVkIGZsYWdzIHRoZXJlLCBpdCBzZWVtcyByZWFzb25hYmxlLiBUaGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBgcmRldl9hZGRfdmlydHVhbF9pbnRmYCB0aGVuIGNyZWF0ZXMgdGhlIHZpcnR1YWwgaW50ZXJmYWNlIHdpdGggdGhpcyAqdW5zcGVjaWZpZWQqIHR5cGUuIEZpbmUgc28gZmFyLgoKTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGJpdGVzIHVzLiBXaGVuIHRoaXMgaW50ZXJmYWNlIGlzIHJlZ2lzdGVyZWQgYW5kIHN0YXJ0cyByZWNlaXZpbmcgbm90aWZpZXIgZXZlbnRzLCBgd3Bhbl9kZXYtJmd0O2lmdHlwZWAgaXMgc3RpbGwsIGFuZCBpbmNvcnJlY3RseSwgYE5MODAyMTU0X0lGVFlQRV9VTlNQRUNgLiBBbmQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB0aGF0IHRyaWdnZXJzIHRoZSBgV0FSTl9PTmAgdGhhdCB3YXMganVzdCBhZGRlZC4gSXQmIzM5O3MgYSB0ZXh0Ym9vayBpbnZhcmlhbnQgdmlvbGF0aW9uLCByaXBlIGZvciBmdXp6aW5nIHRvIGV4cGxvaXQgZGlyZWN0bHkuIENsYXNzaWMuCgpTbywgdGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGJ1ZywgcHJvYmFibHkgZWFzeSB0byByZXByb2R1Y2UsIGFuZCBsaWtlbHkgdG8gYmUgbWlzc2VkIGluIG1hbnVhbCB0ZXN0aW5nLiBXZSYjMzk7dmUgZ290IGEgZGVmYXVsdCBvZiBgTkw4MDIxNTRfSUZUWVBFX1VOU1BFQ2Agbm90IGJlaW5nIHByb3Blcmx5IGhhbmRsZWQgYWZ0ZXIgdGhlIGludGVyZmFjZSBpcyBjcmVhdGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgd2UgY2FuIGJ1aWxkIGFuZCB0ZXN0IHRoaXMgcXVpY2tseS4gTGV0IG1lIGdvIGNoZWNrIGBuZXQvaWVlZTgwMjE1NC9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBleGVyY2lzZSB0aGlzIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaWVlZTgwMjE1NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfSUVFRTgwMjE1NCkgJiM0Mzs9IGllZWU4MDIxNTQub1xuICAgMzpcdG9iai0kKENPTkZJR19JRUVFODAyMTU0X1NPQ0tFVCkgJiM0Mzs9IGllZWU4MDIxNTRfc29ja2V0Lm9cbiAgIDQ6XHRvYmoteSAmIzQzOz0gNmxvd3Bhbi9cbiAgIDU6XHRcbiAgIDY6XHRpZWVlODAyMTU0LXkgOj0gbmV0bGluay5vIG5sLW1hYy5vIG5sLXBoeS5vIG5sX3BvbGljeS5vIGNvcmUubyBcXFxuICAgNzpcdCAgICAgICAgICAgICAgICBoZWFkZXJfb3BzLm8gc3lzZnMubyBubDgwMjE1NC5vIHRyYWNlLm8gcGFuLm9cbiAgIDg6XHRpZWVlODAyMTU0X3NvY2tldC15IDo9IHNvY2tldC5vXG4gICA5Olx0XG4gIDEwOlx0Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMjEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIDgwMi4xNS40IENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIDgwMi4xNS40IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBGaXJzdCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBgQ09ORklHX0lFRUU4MDIxNTRgIGlzIGVuYWJsZWQsIG9idmlvdXNseS4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgaW50byB3aGV0aGVyIHdlJiMzOTtyZSB1c2luZyBleHBlcmltZW50YWwgbmw4MDIxNTQgc3VwcG9ydCwgc28gYENPTkZJR19JRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTGAgbmVlZHMgYSBsb29rLiBPciwgaXMgaXQgYSBzdHJhaWdodCBgQ09ORklHX01BQzgwMjE1NGAgY29uZmlndXJhdGlvbj8gT3IgYXJlIHdlIGRlYWxpbmcgd2l0aCBhIGZha2UgbG93LWJhbmR3aWR0aCBzaXR1YXRpb24gd2l0aCBgQ09ORklHX0lFRUU4MDIxNTRfRkFLRUxCYCBvciBldmVuIHVzaW5nIGBDT05GSUdfSUVFRTgwMjE1NF9IV1NJTWA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIG9uZSYjMzk7cyBpbiBwbGF5LgoKTmV4dCBzdGVwOiBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgS2NvbmZpZyBmaWxlcyB0byBzZWUgd2hlcmUgdGhlc2Ugc2V0dGluZ3MgYXJlIGJlaW5nIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYm90aCBgbmV0L21hYzgwMjE1NC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHdoYXQgdGhlc2Ugc2V0dGluZ3MgYWN0dWFsbHkgZG8uIEdvdHRhIGdldCBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9tYWM4MDIxNTQvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxNTRcbm5ldC9tYWM4MDIxNTQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xNS40IFNvZnQgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTU0KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTg0NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgTUFDIDgwMi4xNS40IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBNQUMgODAyLjE1LjQgbGF5ZXIuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgbmV0L21hYzgwMjE1NC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBnby10byBwbGFjZSBmb3IgYWxsIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgdGhlIGtub2JzIGFuZCBkaWFscyB0aGF0IGNvbnRyb2wgaG93IHRoaXMgc3BlY2lmaWMgTUFDIGltcGxlbWVudGF0aW9uIGJlaGF2ZXMuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aHJvdWdoIGl0cyBjb250ZW50LCBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBncm91cGVkLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBhdmFpbGFibGUgY3VzdG9taXphdGlvbiBwb2ludHMuIEnigJlsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbSwgd2hhdCBpbXBhY3RzIHdoYXQsIGFuZCBhbHNvIGxvb2sgZm9yIGludGVyZXN0aW5nLCBwb3RlbnRpYWxseSBvYnNjdXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgYmUgdXNlZnVsIHRvIGtub3cuIEl04oCZcyBhIGNydWNpYWwgc3RlcCBiZWZvcmUgSSBjYW4gZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxNTQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBNQUM4MDIxNTRcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTUuNCBTb2Z0IE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjE1NClcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSUVFRTgwMjE1NFxuICAgNTpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuICAgNjpcdFx0c2VsZWN0IENSWVBUT1xuICAgNzpcdFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPX0NDTVxuICAgOTpcdFx0c2VsZWN0IENSWVBUT19DVFJcbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjE1LjRcbiAgMTM6XHRcdCAgbmV0d29ya2luZyBzdGFjayBmb3IgU29mdE1BQyBkZXZpY2VzICh0aGUgb25lcyBpbXBsZW1lbnRpbmdcbiAgMTQ6XHRcdCAgb25seSBQSFkgbGV2ZWwgb2YgSUVFRSA4MDIuMTUuNCBzdGFuZGFyZCkuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIE5vdGU6IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbmVpdGhlciBjZXJ0aWZpZWQsIG5vciBmZWF0dXJlXG4gIDE3Olx0XHQgIGNvbXBsZXRlISBDb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIGhhc24mIzM5O3RcbiAgMTg6XHRcdCAgYmVlbiB0ZXN0ZWQgeWV0IVxuICAxOTpcdFxuICAyMDpcdFx0ICBJZiB5b3UgcGxhbiB0byB1c2UgSGFyZE1BQyBJRUVFIDgwMi4xNS40IGRldmljZXMsIHlvdSBjYW5cbiAgMjE6XHRcdCAgc2F5IE4gaGVyZS4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHNheSBNIHRvIGNvbXBpbGUgaXQgYXNcbiAgMjI6XHRcdCAgbW9kdWxlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ0NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKktjb25maWcgRGl2ZSBUaW1lISoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgSUVFRSA4MDIuMTUuNCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGhlYXJ0IG9mIGFueSBnb29kIGtlcm5lbCBtb2R1bGUgY29uZmlndXJhdGlvbjogdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGVzc2VudGlhbCBidWlsZC10aW1lIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIElFRUUgODAyLjE1LjQgbmV0d29ya2luZyBzdGFjayBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGluZ3MgbGlrZSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHZhcmlvdXMgUEhZIGxheWVycywgTUFDIHByb3RvY29scywgc3VwcG9ydGVkIGhhcmR3YXJlIHBsYXRmb3JtcywgZGVidWcgb3B0aW9ucywgYW5kIG1heWJlIGV2ZW4gc29tZSBwZXJmb3JtYW5jZS10dW5pbmcgcGFyYW1ldGVycyBpbiBoZXJlLiBJJiMzOTttIGhvcGluZyBJIGNhbiBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIHRoaXMgZHJpdmVyLiBGcm9tIGhlcmUgSSBjYW4gc2VlIHdoYXQgSSBjYW4gYnVpbGQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBJRUVFODAyMTU0X0RSSVZFUlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0lFRUUgODAyLjE1LjQgZHJpdmVyc1wmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBJRUVFODAyMTU0XG4gICA1Olx0XHRkZWZhdWx0IHlcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgTG93LVJhdGVcbiAgIDg6XHRcdCAgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrIGRldmljZSBkcml2ZXJzLiBUaGlzIG9wdGlvbiBhbG9uZVxuICAgOTpcdFx0ICBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxMDpcdFxuICAxMTpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXG4gIDEyOlx0XHQgIGRpc2FibGVkLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBJRUVFODAyMTU0X0ZBS0VMQlxuICAxNTpcdFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBsb29wYmFjayBkcml2ZXJcJiMzNDtcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGZha2UgZHJpdmVyIHRoYXQgY2FuIGVtdWxhdGUgYSBuZXRcbiAgMTk6XHRcdCAgb2Ygc2V2ZXJhbCBpbnRlcmNvbm5lY3RlZCByYWRpbyBkZXZpY2VzLlxuICAyMDpcdFxuICAyMTpcdFx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gVG8gZG8gc28gc2F5IE0gaGVyZS5cbiAgMjI6XHRcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAmIzM5O2Zha2VsYiYjMzk7LlxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBJRUVFODAyMTU0X0FUODZSRjIzMFxuICAyNTpcdFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7QVQ4NlJGMjMwLzIzMS8yMzMvMjEyIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBTUElcbiAgMjg6XHRcdHNlbGVjdCBSRUdNQVBfU1BJXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBhdDg2cmYyMzAvMjMxLzIzMy8yMTIgU1BJIDgwMi4xNS40IHdpcmVsZXNzXG4gIDMxOlx0XHQgIGNvbnRyb2xsZXIuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUbyBkbyBzbywgc2F5IE0gaGVyZS5cbiAgMzQ6XHRcdCAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAmIzM5O2F0ODZyZjIzMCYjMzk7LlxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBJRUVFODAyMTU0X01SRjI0SjQwXG4gIDM3Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgTVJGMjRKNDAgdHJhbnNjZWl2ZXIgZHJpdmVyXCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcdTAwMjZcdTAwMjYgTUFDODAyMTU0XG4gIDM5Olx0XHRkZXBlbmRzIG9uIFNQSVxuICA0MDpcdFx0c2VsZWN0IFJFR01BUF9TUElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMzODUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIGludG8gdGhpcyBgaWVlZTgwMjE1NGAgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEkgd2FzIGZvY3VzaW5nIG9uIHNvbWV0aGluZyBlbHNlLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGJlIG1ldGhvZGljYWwuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgcmVsYXRlZCB0byBoYXJkd2FyZSBzaW11bGF0aW9uLCBgSUVFRTgwMjE1NF9IV1NJTWAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGZpbGUsIGBkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWdgLCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCBwcm9wZXJseSBhbmQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb2J2aW91cyByZWQgZmxhZ3MgSSYjMzk7dmUgbWlzc2VkLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2ggd2l0aCB0aGUgY29uZmlncywgY29uc2lkZXJpbmcgZGVwZW5kZW5jaWVzIGFuZCBub3QganVzdCB0aGUgY3VycmVudCBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0Y29uZmlnIElFRUU4MDIxNTRfQ0E4MjEwXG4gIDgxOlx0XHR0cmlzdGF0ZSBcJiMzNDtDYXNjb2RhIENBODIxMCB0cmFuc2NlaXZlciBkcml2ZXJcJiMzNDtcbiAgODI6XHRcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFx1MDAyNlx1MDAyNiBNQUM4MDIxNTRcbiAgODM6XHRcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xuICA4NDpcdFx0ZGVwZW5kcyBvbiBTUElcbiAgODU6XHRcdGhlbHBcbiAgODY6XHRcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIENBODIxMCBTUEkgODAyLjE1LjQgd2lyZWxlc3NcbiAgODc6XHRcdCAgY29udHJvbGxlci5cbiAgODg6XHRcbiAgODk6XHRcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvLCBzYXkgTSBoZXJlLlxuICA5MDpcdFx0ICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkICYjMzk7Y2E4MjEwJiMzOTsuXG4gIDkxOlx0XG4gIDkyOlx0Y29uZmlnIElFRUU4MDIxNTRfQ0E4MjEwX0RFQlVHRlNcbiAgOTM6XHRcdGJvb2wgXCYjMzQ7Q0E4MjEwIGRlYnVnZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfQ0E4MjEwXG4gIDk1Olx0XHRkZXBlbmRzIG9uIERFQlVHX0ZTXG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFRoaXMgb3B0aW9uIGNvbXBpbGVzIGRlYnVnZnMgY29kZSBmb3IgdGhlIGNhODIxMCBkcml2ZXIuIFRoaXNcbiAgOTg6XHRcdCAgZXhwb3NlcyBhIGRlYnVnZnMgbm9kZSBmb3IgZWFjaCBDQTgyMTAgaW5zdGFuY2Ugd2hpY2ggYWxsb3dzXG4gIDk5Olx0XHQgIGRpcmVjdCB1c2Ugb2YgdGhlIENhc2NvZGEgQVBJLCBleHBvc2luZyB0aGUgODAyLjE1LjQgTUFDXG4gMTAwOlx0XHQgIG1hbmFnZW1lbnQgZW50aXRpZXMuXG4gMTAxOlx0XG4gMTAyOlx0Y29uZmlnIElFRUU4MDIxNTRfTUNSMjBBXG4gMTAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNQ1IyMEEgdHJhbnNjZWl2ZXIgZHJpdmVyXCYjMzQ7XG4gMTA0Olx0XHRzZWxlY3QgUkVHTUFQX1NQSVxuIDEwNTpcdFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuIDEwNjpcdFx0ZGVwZW5kcyBvbiBTUElcbiAxMDc6XHRcdGhlbHBcbiAxMDg6XHRcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIE1DUjIwQSBTUEkgODAyLjE1LjQgd2lyZWxlc3NcbiAxMDk6XHRcdCAgY29udHJvbGxlci5cbiAxMTA6XHRcbiAxMTE6XHRcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvLCBzYXkgTSBoZXJlLlxuIDExMjpcdFx0ICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkICYjMzk7bWNyMjBhJiMzOTsuXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIElFRUU4MDIxNTRfSFdTSU1cbiAxMTU6XHRcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFx1MDAyNlx1MDAyNiBNQUM4MDIxNTRcbiAxMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjE1NFwmIzM0O1xuIDExNzpcdFx0aGVscFxuIDExODpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XG4gMTE5Olx0XHQgIElFRUUgODAyLjE1LjQgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTU0KSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDMyMQoJCQkJCQkJb3V0cHV0OiAyNTAKCQkJCQkJCXRob3VnaHRzOiA2ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IElFRUUgODAyLjE1LjQgTmV0ZGV2IE5vdGlmaWVyKioKCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhpcyBmdXp6aW5nIHRhcmdldC4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgYElFRUU4MDIxNTRgIGNvbmZpZ3VyYXRpb24g4oCTIHRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZHJpdmVyLCBjb25maXJtZWQgYnkgY2hlY2tpbmcgYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AuIEFkZGl0aW9uYWxseSwgYE1BQzgwMjE1NGAsIGBJRUVFODAyMTU0X0ZBS0VMQmAsIGBJRUVFODAyMTU0X0hXU0lNYCwgb3IgZXZlbiBgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxgIGNvdWxkIGJlIHJlbGV2YW50LCBzbyBJJiMzOTtsbCBrZWVwIHRob3NlIGluIG1pbmQgYXMgcG90ZW50aWFsIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYC4gSG93ZXZlciwgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSB0cmlnZ2VyZWQgYnkgaW50ZXJmYWNlIGNyZWF0aW9uIG9yIGRlbGV0aW9uLiBBZnRlciBjaGVja2luZywgSSBzZWUgdGhlIGZvbGxvd2luZyBhcyBsaWtlbHkgZW50cnkgcG9pbnRzOiBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCAodGhlIG1vZGlmaWVkIGZ1bmN0aW9uKSwgYG5sODAyMTU0X25ld19pbnRlcmZhY2VgICh3aGljaCBjYWxscyBgcmRldl9hZGRfdmlydHVhbF9pbnRmYCBhbmQgY291bGQgdHJpZ2dlciB0aGUgbm90aWZpZXIpLCBgbmw4MDIxNTRfZGVsX2ludGVyZmFjZWAsIGBpZWVlODAyMTU0X2FkZF9pZmFjZWAgYW5kIGBpZWVlODAyMTU0X2RlbF9pZmFjZWAuCgpHaXZlbiB0aGF0IGBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxgIGlzIHRoZSBjZW50cmFsIGZpZ3VyZSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHN0YXRlLCB2b2lkICpwdHIpYC4gU2luY2UgaXQgaXMgc3RhdGljLCBpdCBpcyBzdGlsbCB2aXNpYmxlIGluIHRoZSB2bWxpbnV4IC8ga2FsbHN5bXMgc3ltYm9sIHRhYmxlLgoKVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBhcmU6IGBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxgLCBgbmw4MDIxNTRfbmV3X2ludGVyZmFjZWAsIGFuZCBgaWVlZTgwMjE1NF9hZGRfaWZhY2VgLiBJJiMzOTtsbCB3YW50IHRvIHRhcmdldCB0aGVzZS4KClRvIHN1bW1hcml6ZSBhbmQgZG91YmxlLWNoZWNrLCBmdXp6aW5nIGlzIHdvcnRod2hpbGUgYmVjYXVzZSB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXNzZXJ0aW9uIChgV0FSTl9PTih3cGFuX2Rldi0mZ3Q7aWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpYCkgYW5kIHNldHMgdGhlIGRldmljZSB0eXBlIGR1cmluZyBgTkVUREVWX1BPU1RfSU5JVGAgd2l0aGluIHRoZSBJRUVFIDgwMi4xNS40IG5ldGRldiBub3RpZmllciBjYWxsYmFjay4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgSUVFRTgwMjE1NGAgKG1hbmRhdG9yeSkgYW5kIHBvdGVudGlhbGx5IGBNQUM4MDIxNTRgLCBgSUVFRTgwMjE1NF9IV1NJTWAsIGBJRUVFODAyMTU0X0ZBS0VMQmAsIGFuZCBgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxgLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJRUVFODAyMTU0JiMzNDssCiAgICAmIzM0O01BQzgwMjE1NCYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTCYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0ZBS0VMQiYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsJiMzNDssCiAgICAmIzM0O25sODAyMTU0X25ld19pbnRlcmZhY2UmIzM0OywKICAgICYjMzQ7aWVlZTgwMjE1NF9hZGRfaWZhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKCkgaW4gdGhlIElFRUUgODAyLjE1LjQgc3Vic3lzdGVtIHRvIHNldCBuZXRkZXYgZGV2aWNlIHR5cGUgb24gTkVUREVWX1BPU1RfSU5JVCBhbmQgYWRkcyBhIG5ldyBydW50aW1lIGFzc2VydGlvbiBXQVJOX09OKHdwYW5fZGV2LVx1MDAzZWlmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChubDgwMjE1NC9ydG5ldGxpbmspIGludGVyZmFjZSBjcmVhdGlvbiBhbmQgbmV0ZGV2IGxpZmVjeWNsZSBldmVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRkFLRUxCJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwmIzM0OywKICAgICYjMzQ7bmw4MDIxNTRfbmV3X2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTU0X2FkZF9pZmFjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoKSBpbiB0aGUgSUVFRSA4MDIuMTUuNCBzdWJzeXN0ZW0gdG8gc2V0IG5ldGRldiBkZXZpY2UgdHlwZSBvbiBORVRERVZfUE9TVF9JTklUIGFuZCBhZGRzIGEgbmV3IHJ1bnRpbWUgYXNzZXJ0aW9uIFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKG5sODAyMTU0L3J0bmV0bGluaykgaW50ZXJmYWNlIGNyZWF0aW9uIGFuZCBuZXRkZXYgbGlmZWN5Y2xlIGV2ZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBzdGF0aWMgY29uc3QgZGV2aWNlX3R5cGUgc3RydWN0dXJlIChgd3Bhbl9kZXZfdHlwZWApLCBhIFdBUk5fT04gY2hlY2sgZm9yIHVuc3BlY2lmaWVkIGludGVyZmFjZSB0eXBlcywgYW5kIHNldHMgdGhlIG5ldGRldiBkZXZpY2UgdHlwZSBwb2ludGVyIGR1cmluZyBORVRERVZfUE9TVF9JTklUIG5vdGlmaWNhdGlvbi5cblxuMS4gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbjIuIFRoZSBgd3Bhbl9kZXZfdHlwZWAgc3RydWN0IGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgYXQgY29tcGlsZSB0aW1lLlxuMy4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgYnVmZmVyIGxlbmd0aHMvb2Zmc2V0cyBhcmUgYWZmZWN0ZWQuXG40LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhmMTViZDNjOWE1Y2VjYjQ5NzJiNmQxMmY3ZWU2MGJmNWNjMGUzMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE3OjE5OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvY29yZS5jIGIvbmV0L2llZWU4MDIxNTQvY29yZS5jCmluZGV4IGMwYjg3MTIwMThhMTYuLmVjNWJmZGY2YmQzMWUgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWVlZTgwMjE1NC9jb3JlLmMKQEAgLTI3Miw2ICYjNDM7MjcyLDEwIEBAIHZvaWQgY2ZnODAyMTU0X2Rldl9mcmVlKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCiAJa2ZyZWUocmRldik7CiB9CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHdwYW5fZGV2X3R5cGUgPSB7CiYjNDM7CS5uYW1lCT0gJiMzNDt3cGFuJiMzNDssCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyB2b2lkCiBjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgaW50IGlmdHlwZSwgaW50IG51bSkKQEAgLTI5MywxMCAmIzQzOzI5NywxMiBAQCBzdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCiAJcmRldiA9IHdwYW5fcGh5X3RvX3JkZXYod3Bhbl9kZXYtJmd0O3dwYW5fcGh5KTsKIAotCS8qIFRPRE8gV0FSTl9PTiB1bnNwZWMgdHlwZSAqLwomIzQzOwlXQVJOX09OKHdwYW5fZGV2LSZndDtpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQyk7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7Ci0JCS8qIFRPRE8gTkVUREVWX0RFVlRZUEUgKi8KJiM0MzsJY2FzZSBORVRERVZfUE9TVF9JTklUOgomIzQzOwkJU0VUX05FVERFVl9ERVZUWVBFKGRldiwgJmFtcDt3cGFuX2Rldl90eXBlKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgogCQlkZXYtJmd0O25ldG5zX2ltbXV0YWJsZSA9IHRydWU7CiAJCXdwYW5fZGV2LSZndDtpZGVudGlmaWVyID0gJiM0MzsmIzQzO3JkZXYtJmd0O3dwYW5fZGV2X2lkOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyNAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElFRUUgODAyLjE1LjQgQ29yZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AuIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgZGVmaW5pdGlvbiBvZiBgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3cGFuX2Rldl90eXBlID0geyAubmFtZSA9ICYjMzQ7d3BhbiYjMzQ7IH07YC4gRXNzZW50aWFsbHksIGl0IGVzdGFibGlzaGVzIGEgc3BlY2lmaWMgZGV2aWNlIHR5cGUgZm9yIFdQQU4sIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBjbGFyaXR5IGFuZCBwb3RlbnRpYWwgZnV0dXJlIGVuaGFuY2VtZW50cy4KClRoZW4sIHRoZXJlJiMzOTtzIGEgYFdBUk5fT04od3Bhbl9kZXYtJmd0O2lmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKTtgIGxpbmUgYWRkZWQgd2l0aGluIGBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxgLiBUaGF0JiMzOTtzIGEgc2FuaXR5IGNoZWNrOyBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHRvIHByZXZlbnQgdW5kZWZpbmVkIGJlaGF2aW9yIGJ5IGVuc3VyaW5nIHRoZSBpbnRlcmZhY2UgdHlwZSBpcyBleHBsaWNpdGx5IHNldCAqYmVmb3JlKiB0aGUgbm90aWZpY2F0aW9uIGNhbGwuIEEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgcHJhY3RpY2UsIGFsdGhvdWdoIEkmIzM5O2Qgd2FudCB0byBjaGVjayB3aGVyZSBgd3Bhbl9kZXYtJmd0O2lmdHlwZWAgaXMgaW5pdGlhbGl6ZWQgdG8gY29uZmlybSBpdHMgbmVjZXNzaXR5LgoKRmluYWxseSwgdGhlIGBORVRERVZfUE9TVF9JTklUYCBldmVudCBpbiBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCBub3cgaW5jbHVkZXMgYFNFVF9ORVRERVZfREVWVFlQRShkZXYsICZhbXA7d3Bhbl9kZXZfdHlwZSk7YC4gVGhpcyBpcyB3aGVyZSB0aGUgZGVjbGFyZWQgYHdwYW5fZGV2X3R5cGVgIGNvbWVzIGludG8gcGxheS4gSXQmIzM5O3MgcHJvcGVybHkgYXNzb2NpYXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgbmV0ZGV2IHdpdGggdGhlIFdQQU4gZGV2aWNlIHR5cGUuIFByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGFmdGVyIG5ldGRldiBpbml0aWFsaXphdGlvbiwgd2XigJlyZSBwcm9wZXJseSBtYXJraW5nIGl0IGFzIGEgV1BBTiB0eXBlIGZvciB0aGUga2VybmVsJiMzOTtzIGRldmljZSBtYW5hZ2VtZW50LgoKSSYjMzk7bGwgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBidXQgdGhlc2UgY2hhbmdlcyBzZWVtIGxvZ2ljYWwgYW5kLCBvbiB0aGUgc3VyZmFjZSwgcmVwcmVzZW50IGdvb2QgcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHR2b2lkIGNmZzgwMjE1NF9kZXZfZnJlZShzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuIDI3MTpcdHtcbiAyNzI6XHRcdGtmcmVlKHJkZXYpO1xuIDI3MzpcdH1cbiAyNzQ6XHRcbiAyNzU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHdwYW5fZGV2X3R5cGUgPSB7XG4gMjc2Olx0XHQubmFtZVx0PSBcJiMzNDt3cGFuXCYjMzQ7LFxuIDI3NzpcdH07XG4gMjc4Olx0XG4gMjc5Olx0c3RhdGljIHZvaWRcbiAyODA6XHRjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIDI4MTpcdFx0XHRcdCAgIGludCBpZnR5cGUsIGludCBudW0pXG4gMjgyOlx0e1xuIDI4MzpcdFx0QVNTRVJUX1JUTkwoKTtcbiAyODQ6XHRcbiAyODU6XHRcdHJkZXYtXHUwMDNlbnVtX3J1bm5pbmdfaWZhY2VzICYjNDM7PSBudW07XG4gMjg2Olx0fVxuIDI4NzpcdFxuIDI4ODpcdHN0YXRpYyBpbnQgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gMjg5Olx0XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzdGF0ZSwgdm9pZCAqcHRyKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiAyOTI6XHRcdHN0cnVjdCB3cGFuX2RldiAqd3Bhbl9kZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjE1NF9wdHI7XG4gMjkzOlx0XHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuIDI5NDpcdFxuIDI5NTpcdFx0aWYgKCF3cGFuX2RldilcbiAyOTY6XHRcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIDI5NzpcdFxuIDI5ODpcdFx0cmRldiA9IHdwYW5fcGh5X3RvX3JkZXYod3Bhbl9kZXYtXHUwMDNld3Bhbl9waHkpO1xuIDI5OTpcdFxuIDMwMDpcdFx0V0FSTl9PTih3cGFuX2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQyk7XG4gMzAxOlx0XG4gMzAyOlx0XHRzd2l0Y2ggKHN0YXRlKSB7XG4gMzAzOlx0XHRjYXNlIE5FVERFVl9QT1NUX0lOSVQ6XG4gMzA0Olx0XHRcdFNFVF9ORVRERVZfREVWVFlQRShkZXYsIFx1MDAyNndwYW5fZGV2X3R5cGUpO1xuIDMwNTpcdFx0XHRicmVhaztcbiAzMDY6XHRcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxuIDMwNzpcdFx0XHRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbiAzMDg6XHRcdFx0d3Bhbl9kZXYtXHUwMDNlaWRlbnRpZmllciA9ICYjNDM7JiM0MztyZGV2LVx1MDAzZXdwYW5fZGV2X2lkO1xuIDMwOTpcdFx0XHRsaXN0X2FkZF9yY3UoXHUwMDI2d3Bhbl9kZXYtXHUwMDNlbGlzdCwgXHUwMDI2cmRldi1cdTAwM2V3cGFuX2Rldl9saXN0KTtcbiAzMTA6XHRcdFx0cmRldi1cdTAwM2VkZXZsaXN0X2dlbmVyYXRpb24mIzQzOyYjNDM7O1xuIDMxMTpcdFx0XHRtdXRleF9pbml0KFx1MDAyNndwYW5fZGV2LVx1MDAzZWFzc29jaWF0aW9uX2xvY2spO1xuIDMxMjpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ3cGFuX2Rldi1cdTAwM2VjaGlsZHJlbik7XG4gMzEzOlx0XHRcdHdwYW5fZGV2LVx1MDAzZW1heF9hc3NvY2lhdGlvbnMgPSBTWl8xNks7XG4gMzE0Olx0XG4gMzE1Olx0XHRcdHdwYW5fZGV2LVx1MDAzZW5ldGRldiA9IGRldjtcbiAzMTY6XHRcdFx0YnJlYWs7XG4gMzE3Olx0XHRjYXNlIE5FVERFVl9ET1dOOlxuIDMxODpcdFx0XHRjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShyZGV2LCB3cGFuX2Rldi1cdTAwM2VpZnR5cGUsIC0xKTtcbiAzMTk6XHRcbiAzMjA6XHRcdFx0cmRldi1cdTAwM2VvcGVuY291bnQtLTtcbiAzMjE6XHRcdFx0d2FrZV91cChcdTAwMjZyZGV2LVx1MDAzZWRldl93YWl0KTtcbiAzMjI6XHRcdFx0YnJlYWs7XG4gMzIzOlx0XHRjYXNlIE5FVERFVl9VUDpcbiAzMjQ6XHRcdFx0Y2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0ocmRldiwgd3Bhbl9kZXYtXHUwMDNlaWZ0eXBlLCAxKTtcbiAzMjU6XHRcbiAzMjY6XHRcdFx0cmRldi1cdTAwM2VvcGVuY291bnQmIzQzOyYjNDM7O1xuIDMyNzpcdFx0XHRicmVhaztcbiAzMjg6XHRcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XG4gMzI5Olx0XHRcdGNmZzgwMjE1NF9mcmVlX3BlZXJfc3RydWN0dXJlcyh3cGFuX2Rldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTkKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCYjMzk7cyBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBgc3RydWN0IGRldmljZV90eXBlYCBjYWxsZWQgYHdwYW5fZGV2X3R5cGVgIGFzIGEgc3RhdGljLCByZWFkLW9ubHkgdmFyaWFibGUuIE5vIHByb2JsZW0gdGhlcmUsIGl0JiMzOTtzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLiBUaGVuLCB3ZSBoYXZlIGEgYFdBUk5fT05gIHRoYXQgY2hlY2tzIGB3cGFuX2Rldi0mZ3Q7aWZ0eXBlYC4gQWdhaW4sIHRoaXMgY2hlY2tzIGFuIGV4aXN0aW5nLCBpbml0aWFsaXplZCBmaWVsZC4gRmluYWxseSwgYFNFVF9ORVRERVZfREVWVFlQRWAgaXMgdXNlZCB3aGljaCBqdXN0IHNldHMgYSBwb2ludGVyLCBgZGV2LSZndDtkZXYudHlwZWAsIHRvIG91ciBgd3Bhbl9kZXZfdHlwZWAuCgpNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBsb29rcyBjbGVhbiwgYnV0IGxldCYjMzk7cyBiZSBtZXRob2RpY2FsLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBhbGxvY2F0aW9ucyBvciBidWZmZXIgbWFuaXB1bGF0aW9ucyBpbnZvbHZlZC4gUmV2aWV3aW5nIHRoZSBjb2RlLCB0aGVyZSBhcmUgbm8gdXNlci1jb3B5IG9wZXJhdGlvbnMsIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBtZW1vcnksIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGJ1ZmZlcnMgaW4gYW55IHdheS4gTm8gbmV3IHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCB0aGF0IGFyZSB1bmluaXRpYWxpemVkIGFuZCBubyBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIGFyZSBtb2RpZmllZCB0aGF0IHdvdWxkIG1ha2UgdXMgc3VzcGVjdCBpdC4gU28sIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBXZSYjMzk7cmUgc2FmZSBvbiB0aGF0IGZyb250LgoKVGhlcmVmb3JlLCBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgc3VmZmljaWVudC4gSXQmIzM5O3MgYSBjbGVhciBjYXNlIHdoZXJlIEtNU0FOJiMzOTtzIGRlZXBlciBzY3J1dGlueSBpc24mIzM5O3Qgd2FycmFudGVkLgoKQWxyaWdodCwgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zLiAmIzM0O05lZWRzS01TQU46IFRydWUgb25seSBpZiBjaGFuZ2VzIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4mIzM0OyBUaGF0JiMzOTtzIGEgcmVzb3VuZGluZyAqZmFsc2UqIGluIHRoaXMgY2FzZS4gJiMzNDtLTVNBTlJlYXNvbmluZzogUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHkuJiMzNDsgUGVyZmVjdCwgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQgSSYjMzk7dmUgcHJvdmlkZWQuIE5vdyBJJiMzOTtsbCBkb2N1bWVudCBteSByZWFzb25pbmcgYW5kIHNldCB0aGUgcmVzdWx0cyBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHN0YXRpYyBjb25zdCBkZXZpY2VfdHlwZSBzdHJ1Y3R1cmUgKGB3cGFuX2Rldl90eXBlYCksIGEgV0FSTl9PTiBjaGVjayBmb3IgdW5zcGVjaWZpZWQgaW50ZXJmYWNlIHR5cGVzLCBhbmQgc2V0cyB0aGUgbmV0ZGV2IGRldmljZSB0eXBlIHBvaW50ZXIgZHVyaW5nIE5FVERFVl9QT1NUX0lOSVQgbm90aWZpY2F0aW9uLlxuXG4xLiBObyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuMi4gVGhlIGB3cGFuX2Rldl90eXBlYCBzdHJ1Y3QgaXMgc3RhdGljYWxseSBkZWZpbmVkIGFuZCBpbml0aWFsaXplZCBhdCBjb21waWxlIHRpbWUuXG4zLiBObyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBidWZmZXIgbGVuZ3Rocy9vZmZzZXRzIGFyZSBhZmZlY3RlZC5cbjQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHN0YXRpYyBjb25zdCBkZXZpY2VfdHlwZSBzdHJ1Y3R1cmUgKGB3cGFuX2Rldl90eXBlYCksIGEgV0FSTl9PTiBjaGVjayBmb3IgdW5zcGVjaWZpZWQgaW50ZXJmYWNlIHR5cGVzLCBhbmQgc2V0cyB0aGUgbmV0ZGV2IGRldmljZSB0eXBlIHBvaW50ZXIgZHVyaW5nIE5FVERFVl9QT1NUX0lOSVQgbm90aWZpY2F0aW9uLlxuXG4xLiBObyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuMi4gVGhlIGB3cGFuX2Rldl90eXBlYCBzdHJ1Y3QgaXMgc3RhdGljYWxseSBkZWZpbmVkIGFuZCBpbml0aWFsaXplZCBhdCBjb21waWxlIHRpbWUuXG4zLiBObyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBidWZmZXIgbGVuZ3Rocy9vZmZzZXRzIGFyZSBhZmZlY3RlZC5cbjQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxOTo1MS4zNTUxOTA4NzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc2MDI5MDE3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiTUFDODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTFwiLFxuICAgIFwiSUVFRTgwMjE1NF9GQUtFTEJcIixcbiAgICBcIklFRUU4MDIxNTRfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxcIixcbiAgICBcIm5sODAyMTU0X25ld19pbnRlcmZhY2VcIixcbiAgICBcImllZWU4MDIxNTRfYWRkX2lmYWNlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3RhdGljIGNvbnN0IGRldmljZV90eXBlIHN0cnVjdHVyZSAoYHdwYW5fZGV2X3R5cGVgKSwgYSBXQVJOX09OIGNoZWNrIGZvciB1bnNwZWNpZmllZCBpbnRlcmZhY2UgdHlwZXMsIGFuZCBzZXRzIHRoZSBuZXRkZXYgZGV2aWNlIHR5cGUgcG9pbnRlciBkdXJpbmcgTkVUREVWX1BPU1RfSU5JVCBub3RpZmljYXRpb24uXFxuXFxuMS4gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4yLiBUaGUgYHdwYW5fZGV2X3R5cGVgIHN0cnVjdCBpcyBzdGF0aWNhbGx5IGRlZmluZWQgYW5kIGluaXRpYWxpemVkIGF0IGNvbXBpbGUgdGltZS5cXG4zLiBObyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBidWZmZXIgbGVuZ3Rocy9vZmZzZXRzIGFyZSBhZmZlY3RlZC5cXG40LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbCgpIGluIHRoZSBJRUVFIDgwMi4xNS40IHN1YnN5c3RlbSB0byBzZXQgbmV0ZGV2IGRldmljZSB0eXBlIG9uIE5FVERFVl9QT1NUX0lOSVQgYW5kIGFkZHMgYSBuZXcgcnVudGltZSBhc3NlcnRpb24gV0FSTl9PTih3cGFuX2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKG5sODAyMTU0L3J0bmV0bGluaykgaW50ZXJmYWNlIGNyZWF0aW9uIGFuZCBuZXRkZXYgbGlmZWN5Y2xlIGV2ZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTk6NTEuMzU1MjA0OTk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjgyNzI5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZjE1YmQzYzlhNWNlY2I0OTcyYjZkMTJmN2VlNjBiZjVjYzBlMzEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MTk6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvY29yZS5jIGIvbmV0L2llZWU4MDIxNTQvY29yZS5jXFxuaW5kZXggYzBiODcxMjAxOGExNi4uZWM1YmZkZjZiZDMxZSAxMDA2NDRcXG4tLS0gYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcXG4rKysgYi9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcXG5AQCAtMjcyLDYgKzI3MiwxMCBAQCB2b2lkIGNmZzgwMjE1NF9kZXZfZnJlZShzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxcbiBcXHRrZnJlZShyZGV2KTtcXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3cGFuX2Rldl90eXBlID0ge1xcbitcXHQubmFtZVxcdD0gXFxcIndwYW5cXFwiLFxcbit9O1xcbitcXG4gc3RhdGljIHZvaWRcXG4gY2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0ICAgaW50IGlmdHlwZSwgaW50IG51bSlcXG5AQCAtMjkzLDEwICsyOTcsMTIgQEAgc3RhdGljIGludCBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gXFxuIFxcdHJkZXYgPSB3cGFuX3BoeV90b19yZGV2KHdwYW5fZGV2LVxcdTAwM2V3cGFuX3BoeSk7XFxuIFxcbi1cXHQvKiBUT0RPIFdBUk5fT04gdW5zcGVjIHR5cGUgKi9cXG4rXFx0V0FSTl9PTih3cGFuX2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xcbiBcXG4gXFx0c3dpdGNoIChzdGF0ZSkge1xcbi1cXHRcXHQvKiBUT0RPIE5FVERFVl9ERVZUWVBFICovXFxuK1xcdGNhc2UgTkVUREVWX1BPU1RfSU5JVDpcXG4rXFx0XFx0U0VUX05FVERFVl9ERVZUWVBFKGRldiwgXFx1MDAyNndwYW5fZGV2X3R5cGUpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBORVRERVZfUkVHSVNURVI6XFxuIFxcdFxcdGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcXG4gXFx0XFx0d3Bhbl9kZXYtXFx1MDAzZWlkZW50aWZpZXIgPSArK3JkZXYtXFx1MDAzZXdwYW5fZGV2X2lkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxOTo1MS44ODQxNzU2NTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExMTgzMjE4NTAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJRUVFODAyMTU0XCIsXG4gICAgXCJNQUM4MDIxNTRcIixcbiAgICBcIklFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMXCIsXG4gICAgXCJJRUVFODAyMTU0X0ZBS0VMQlwiLFxuICAgIFwiSUVFRTgwMjE1NF9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbFwiLFxuICAgIFwibmw4MDIxNTRfbmV3X2ludGVyZmFjZVwiLFxuICAgIFwiaWVlZTgwMjE1NF9hZGRfaWZhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoKSBpbiB0aGUgSUVFRSA4MDIuMTUuNCBzdWJzeXN0ZW0gdG8gc2V0IG5ldGRldiBkZXZpY2UgdHlwZSBvbiBORVRERVZfUE9TVF9JTklUIGFuZCBhZGRzIGEgbmV3IHJ1bnRpbWUgYXNzZXJ0aW9uIFdBUk5fT04od3Bhbl9kZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChubDgwMjE1NC9ydG5ldGxpbmspIGludGVyZmFjZSBjcmVhdGlvbiBhbmQgbmV0ZGV2IGxpZmVjeWNsZSBldmVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGYxNWJkM2M5YTVjZWNiNDk3MmI2ZDEyZjdlZTYwYmY1Y2MwZTMxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MTk6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmMgYi9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcbmluZGV4IGMwYjg3MTIwMThhMTYuLmVjNWJmZGY2YmQzMWUgMTAwNjQ0XG4tLS0gYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcbisrKyBiL25ldC9pZWVlODAyMTU0L2NvcmUuY1xuQEAgLTI3Miw2ICsyNzIsMTAgQEAgdm9pZCBjZmc4MDIxNTRfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbiBcdGtmcmVlKHJkZXYpO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHdwYW5fZGV2X3R5cGUgPSB7XG4rXHQubmFtZVx0PSBcIndwYW5cIixcbit9O1xuK1xuIHN0YXRpYyB2b2lkXG4gY2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHQgICBpbnQgaWZ0eXBlLCBpbnQgbnVtKVxuQEAgLTI5MywxMCArMjk3LDEyIEBAIHN0YXRpYyBpbnQgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXG4gXHRyZGV2ID0gd3Bhbl9waHlfdG9fcmRldih3cGFuX2Rldi1cdTAwM2V3cGFuX3BoeSk7XG4gXG4tXHQvKiBUT0RPIFdBUk5fT04gdW5zcGVjIHR5cGUgKi9cbitcdFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xuIFxuIFx0c3dpdGNoIChzdGF0ZSkge1xuLVx0XHQvKiBUT0RPIE5FVERFVl9ERVZUWVBFICovXG4rXHRjYXNlIE5FVERFVl9QT1NUX0lOSVQ6XG4rXHRcdFNFVF9ORVRERVZfREVWVFlQRShkZXYsIFx1MDAyNndwYW5fZGV2X3R5cGUpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxuIFx0XHRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbiBcdFx0d3Bhbl9kZXYtXHUwMDNlaWRlbnRpZmllciA9ICsrcmRldi1cdTAwM2V3cGFuX2Rldl9pZDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjE5OjUxLjg4NDE3Njk5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NzcyOTA2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJRUVFIDgwMi4xNS40IENvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBkaWZmYCBpdHNlbGYuIEkgY2FuIHNlZSB0aGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AuIEhtbSwgYSBuZXcgYHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3Bhbl9kZXZfdHlwZWAgZGVmaW5pdGlvbiBpcyBpbnRyb2R1Y2VkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB3ZSdyZSBlc3RhYmxpc2hpbmcgYSBzcGVjaWZpYyBkZXZpY2UgdHlwZSBmb3IgV1BBTiBkZXZpY2VzLCBjbGVhcmx5LlxuXG5UaGVuLCBJIHNlZSB0aGUgYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgZnVuY3Rpb24gaGFzIGEgYE5FVERFVl9QT1NUX0lOSVRgIGNhc2UgYWRkZWQgdG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGNvcmUgY2hhbmdlIGluIHRoZSBwYXRjaC4gTm93LCBpbiB0aGlzIGNhc2UsIGBTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcdTAwMjZ3cGFuX2Rldl90eXBlKWAgaXMgY2FsbGVkLiBTbywgdGhlIGB3cGFuX2Rldl90eXBlYCB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV0d29yayBkZXZpY2UgYXQgdGhhdCBwb2ludC4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBuZXdseSBkZWZpbmVkIHR5cGUuXG5cblRoZSBgV0FSTl9PTmAgY2hlY2sgZm9yIGBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDYCBpcyBhIGdvb2QgcHJhY3RpY2UuIEl0IHZhbGlkYXRlcyBhIHNwZWNpZmljIGludGVyZmFjZSB0eXBlLCB3aGljaCBpcyBnb29kLiBJdCdzIGEgdXNlZnVsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlbid0IGxlZnQgdW5kZWZpbmVkLlxuXG5JIHNob3VsZCBhbHNvIGdvIGFoZWFkIGFuZCBsb2FkIHVwIHRoZSBmaWxlIHRvIHJldmlldyBpdCBtb3JlIGNhcmVmdWxseSBhbmQgc2VlIGhvdyB0aGlzIG5ldyBkZXZpY2UgdHlwZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZXhpc3RpbmcgY29kZS4gQWxzbywgSSBzaG91bGQgY2hlY2sgdGhlIHJlbGF0ZWQgS2NvbmZpZyBvcHRpb25zIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBPdmVyYWxsLCBpdCBhcHBlYXJzIHRvIGJlIGEgcmVhc29uYWJsZSBhZGRpdGlvbiB0byBiZXR0ZXIgZGVmaW5lIHRoZSBkZXZpY2UgdHlwZSBmb3IgV1BBTiBkZXZpY2VzIHdpdGhpbiB0aGUgODAyLjE1LjQgY29yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExMiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjE5OjU3LjU2MTQ3MDk2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pZWVlODAyMTU0L2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0dm9pZCBjZmc4MDIxNTRfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcXG4gMjcxOlxcdHtcXG4gMjcyOlxcdFxcdGtmcmVlKHJkZXYpO1xcbiAyNzM6XFx0fVxcbiAyNzQ6XFx0XFxuIDI3NTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHdwYW5fZGV2X3R5cGUgPSB7XFxuIDI3NjpcXHRcXHQubmFtZVxcdD0gXFxcIndwYW5cXFwiLFxcbiAyNzc6XFx0fTtcXG4gMjc4OlxcdFxcbiAyNzk6XFx0c3RhdGljIHZvaWRcXG4gMjgwOlxcdGNmZzgwMjE1NF91cGRhdGVfaWZhY2VfbnVtKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIDI4MTpcXHRcXHRcXHRcXHQgICBpbnQgaWZ0eXBlLCBpbnQgbnVtKVxcbiAyODI6XFx0e1xcbiAyODM6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4gMjg0OlxcdFxcbiAyODU6XFx0XFx0cmRldi1cXHUwMDNlbnVtX3J1bm5pbmdfaWZhY2VzICs9IG51bTtcXG4gMjg2OlxcdH1cXG4gMjg3OlxcdFxcbiAyODg6XFx0c3RhdGljIGludCBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gMjg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGF0ZSwgdm9pZCAqcHRyKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiAyOTI6XFx0XFx0c3RydWN0IHdwYW5fZGV2ICp3cGFuX2RldiA9IGRldi1cXHUwMDNlaWVlZTgwMjE1NF9wdHI7XFxuIDI5MzpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xcbiAyOTQ6XFx0XFxuIDI5NTpcXHRcXHRpZiAoIXdwYW5fZGV2KVxcbiAyOTY6XFx0XFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbiAyOTc6XFx0XFxuIDI5ODpcXHRcXHRyZGV2ID0gd3Bhbl9waHlfdG9fcmRldih3cGFuX2Rldi1cXHUwMDNld3Bhbl9waHkpO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRXQVJOX09OKHdwYW5fZGV2LVxcdTAwM2VpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQyk7XFxuIDMwMTpcXHRcXG4gMzAyOlxcdFxcdHN3aXRjaCAoc3RhdGUpIHtcXG4gMzAzOlxcdFxcdGNhc2UgTkVUREVWX1BPU1RfSU5JVDpcXG4gMzA0OlxcdFxcdFxcdFNFVF9ORVRERVZfREVWVFlQRShkZXYsIFxcdTAwMjZ3cGFuX2Rldl90eXBlKTtcXG4gMzA1OlxcdFxcdFxcdGJyZWFrO1xcbiAzMDY6XFx0XFx0Y2FzZSBORVRERVZfUkVHSVNURVI6XFxuIDMwNzpcXHRcXHRcXHRkZXYtXFx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XFxuIDMwODpcXHRcXHRcXHR3cGFuX2Rldi1cXHUwMDNlaWRlbnRpZmllciA9ICsrcmRldi1cXHUwMDNld3Bhbl9kZXZfaWQ7XFxuIDMwOTpcXHRcXHRcXHRsaXN0X2FkZF9yY3UoXFx1MDAyNndwYW5fZGV2LVxcdTAwM2VsaXN0LCBcXHUwMDI2cmRldi1cXHUwMDNld3Bhbl9kZXZfbGlzdCk7XFxuIDMxMDpcXHRcXHRcXHRyZGV2LVxcdTAwM2VkZXZsaXN0X2dlbmVyYXRpb24rKztcXG4gMzExOlxcdFxcdFxcdG11dGV4X2luaXQoXFx1MDAyNndwYW5fZGV2LVxcdTAwM2Vhc3NvY2lhdGlvbl9sb2NrKTtcXG4gMzEyOlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ3cGFuX2Rldi1cXHUwMDNlY2hpbGRyZW4pO1xcbiAzMTM6XFx0XFx0XFx0d3Bhbl9kZXYtXFx1MDAzZW1heF9hc3NvY2lhdGlvbnMgPSBTWl8xNks7XFxuIDMxNDpcXHRcXG4gMzE1OlxcdFxcdFxcdHdwYW5fZGV2LVxcdTAwM2VuZXRkZXYgPSBkZXY7XFxuIDMxNjpcXHRcXHRcXHRicmVhaztcXG4gMzE3OlxcdFxcdGNhc2UgTkVUREVWX0RPV046XFxuIDMxODpcXHRcXHRcXHRjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShyZGV2LCB3cGFuX2Rldi1cXHUwMDNlaWZ0eXBlLCAtMSk7XFxuIDMxOTpcXHRcXG4gMzIwOlxcdFxcdFxcdHJkZXYtXFx1MDAzZW9wZW5jb3VudC0tO1xcbiAzMjE6XFx0XFx0XFx0d2FrZV91cChcXHUwMDI2cmRldi1cXHUwMDNlZGV2X3dhaXQpO1xcbiAzMjI6XFx0XFx0XFx0YnJlYWs7XFxuIDMyMzpcXHRcXHRjYXNlIE5FVERFVl9VUDpcXG4gMzI0OlxcdFxcdFxcdGNmZzgwMjE1NF91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdwYW5fZGV2LVxcdTAwM2VpZnR5cGUsIDEpO1xcbiAzMjU6XFx0XFxuIDMyNjpcXHRcXHRcXHRyZGV2LVxcdTAwM2VvcGVuY291bnQrKztcXG4gMzI3OlxcdFxcdFxcdGJyZWFrO1xcbiAzMjg6XFx0XFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcXG4gMzI5OlxcdFxcdFxcdGNmZzgwMjE1NF9mcmVlX3BlZXJfc3RydWN0dXJlcyh3cGFuX2Rldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjE5OjU3LjU2MTU2NjgzM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODE3NzUzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBJRUVFIDgwMi4xNS40IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBJRUVFIDgwMi4xNS40IHN1cHBvcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGp1bXAgZGlyZWN0bHkgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIHVuZGVyIGBuZXQvaWVlZTgwMjE1NGAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGRlZmluZWQuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGF2YWlsYWJsZSwgd2hhdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgZHJpdmVycyBhcmUgaW50ZXJ3b3Zlbi5cblxuSSBuZWVkIHRvIHNlZTogQXJlIHRoZXJlIGFueSBuZXcgb3B0aW9ucyBzaW5jZSB0aGUgbGFzdCB0aW1lIEkgbG9va2VkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgZGVwZW5kZW5jaWVzIHRoYXQgSSBzaG91bGQga25vdyBhYm91dCBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgb3IgdXNlIGNhc2VzPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBkZWZhdWx0IHNldHRpbmdzIHRoYXQgbWlnaHQgdHJpcCBtZSB1cCB3aGVuIGRlYnVnZ2luZyBvciBvcHRpbWl6aW5nPyBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFmZmVjdCB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5IGlzIGNyaXRpY2FsLiBUaGUgZ29hbCBpcyBhIGNsZWFyIG92ZXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDE3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxOTo1OS40NDMzNDQyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMxNjMwNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSUVFRTgwMjE1NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaWVlZTgwMjE1NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE0MjEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vNmxvd3Bhbl9pLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vNmxvd3Bhbl9pLmg6MjojaWZuZGVmIF9fSUVFRTgwMjE1NF82TE9XUEFOX0lfSF9fXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi82bG93cGFuX2kuaDozOiNkZWZpbmUgX19JRUVFODAyMTU0XzZMT1dQQU5fSV9IX19cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuLzZsb3dwYW5faS5oLTQtXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuLzZsb3dwYW5faS5oPTQ2PWxvd3Bhbl9yeF9yZXN1bHQgbG93cGFuX3J4X2hfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuLzZsb3dwYW5faS5oLTQ3LVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vNmxvd3Bhbl9pLmg6NDg6I2VuZGlmIC8qIF9fSUVFRTgwMjE1NF82TE9XUEFOX0lfSF9fICovXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWc6Mjpjb25maWcgSUVFRTgwMjE1NF82TE9XUEFOXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIjZsb3dwYW4gc3VwcG9ydCBvdmVyIElFRUUgODAyLjE1LjRcXFwiXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9NYWtlZmlsZToyOm9iai0kKENPTkZJR19JRUVFODAyMTU0XzZMT1dQQU4pICs9IGllZWU4MDIxNTRfNmxvd3Bhbi5vXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9NYWtlZmlsZS0zLVxcbi0tXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM9ODY9c3RhdGljIGludCBsb3dwYW5fbmVpZ2hfY29uc3RydWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZWlnaGJvdXIgKm4pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy05MC1cXHQvKiBkZWZhdWx0IG5vIHNob3J0X2FkZHIgaXMgYXZhaWxhYmxlIGZvciBhIG5laWdoYm91ciAqL1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jOjkxOlxcdG5laWdoLVxcdTAwM2VzaG9ydF9hZGRyID0gY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9BRERSX1NIT1JUX1VOU1BFQyk7XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmMtOTItXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYz0xMDk9c3RhdGljIHZvaWQgbG93cGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpsZGV2KVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTExMC17XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM6MTExOlxcdG1lbXNldChsZGV2LVxcdTAwM2Vicm9hZGNhc3QsIDB4ZmYsIElFRUU4MDIxNTRfQUREUl9MRU4pO1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTExMi1cXHQvKiBXZSBuZWVkIGFuIGlwdjZoZHIgYXMgbWluaW11bSBsZW4gd2hlbiBjYWxsaW5nIHhtaXQgKi9cXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jPTEyMz1zdGF0aWMgaW50IGxvd3Bhbl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xMjYtXFx0aWYgKHRiW0lGTEFfQUREUkVTU10pIHtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzoxMjc6XFx0XFx0aWYgKG5sYV9sZW4odGJbSUZMQV9BRERSRVNTXSkgIT0gSUVFRTgwMjE1NF9BRERSX0xFTilcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xMjgtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYz0xMzM9c3RhdGljIGludCBsb3dwYW5fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbGRldixcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE1Mi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzoxNTM6XFx0aWYgKHdkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpIHtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xNTQtXFx0XFx0ZGV2X3B1dCh3ZGV2KTtcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE2NC1cXHQvKiBTZXQgdGhlIGxvd3BhbiBoYXJkd2FyZSBhZGRyZXNzIHRvIHRoZSB3cGFuIGhhcmR3YXJlIGFkZHJlc3MuICovXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM6MTY1OlxcdF9fZGV2X2FkZHJfc2V0KGxkZXYsIHdkZXYtXFx1MDAzZWRldl9hZGRyLCBJRUVFODAyMTU0X0FERFJfTEVOKTtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xNjYtXFx0LyogV2UgbmVlZCBoZWFkcm9vbSBmb3IgcG9zc2libGUgd3Bhbl9kZXZfaGFyZF9oZWFkZXIgY2FsbCBhbmQgdGFpbHJvb21cXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE3Ny1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzoxNzg6XFx0cmV0ID0gbG93cGFuX3JlZ2lzdGVyX25ldGRldmljZShsZGV2LCBMT1dQQU5fTExUWVBFX0lFRUU4MDIxNTQpO1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE3OS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM9MjE4PXN0YXRpYyBpbnQgbG93cGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTIyMy1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzoyMjQ6XFx0aWYgKG5kZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmMtMjI1LVxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vcnguYz0yNzE9c3RhdGljIGludCBsb3dwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICp3ZGV2LFxcbi0tXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9yeC5jLTI3NS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmM6Mjc2OlxcdGlmICh3ZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0IHx8XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9yeC5jLTI3Ny1cXHQgICAgc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUIHx8XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmM9MzEwPXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbG93cGFuX3BhY2tldF90eXBlID0ge1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vcnguYzozMTE6XFx0LnR5cGUgPSBodG9ucyhFVEhfUF9JRUVFODAyMTU0KSxcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmMtMzEyLVxcdC5mdW5jID0gbG93cGFuX3JjdixcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYz0zMz1pbnQgbG93cGFuX2hlYWRlcl9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmxkZXYsXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtNTYtXFx0aWYgKCFtZW1jbXAoZGFkZHIsIGxkZXYtXFx1MDAzZWJyb2FkY2FzdCwgRVVJNjRfQUREUl9MRU4pKSB7XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jOjU3OlxcdFxcdGluZm8tXFx1MDAzZWRhZGRyLnNob3J0X2FkZHIgPSBjcHVfdG9fbGUxNihJRUVFODAyMTU0X0FERFJfQlJPQURDQVNUKTtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NTg6XFx0XFx0aW5mby1cXHUwMDNlZGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtNTktXFx0fSBlbHNlIHtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NjA6XFx0XFx0X19sZTE2IHNob3J0X2FkZHIgPSBjcHVfdG9fbGUxNihJRUVFODAyMTU0X0FERFJfU0hPUlRfVU5TUEVDKTtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtNjEtXFx0XFx0c3RydWN0IG5laWdoX3RhYmxlICp0YmwgPSBuZF90YWJsZShkZXZfbmV0KGxkZXYpKTtcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy03My1cXHRcXHRcXHRpbmZvLVxcdTAwM2VkYWRkci5zaG9ydF9hZGRyID0gc2hvcnRfYWRkcjtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NzQ6XFx0XFx0XFx0aW5mby1cXHUwMDNlZGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtNzUtXFx0XFx0fSBlbHNlIHtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NzY6XFx0XFx0XFx0aW5mby1cXHUwMDNlZGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9MT05HO1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy03Ny1cXHRcXHRcXHRpZWVlODAyMTU0X2JlNjRfdG9fbGU2NChcXHUwMDI2aW5mby1cXHUwMDNlZGFkZHIuZXh0ZW5kZWRfYWRkcixcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy04Ni1cXHRcXHRpZiAobG93cGFuXzgwMjE1NF9pc192YWxpZF9zcmNfc2hvcnRfYWRkcih3cGFuX2Rldi1cXHUwMDNlc2hvcnRfYWRkcikpIHtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6ODc6XFx0XFx0XFx0aW5mby1cXHUwMDNlc2FkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtODgtXFx0XFx0XFx0aW5mby1cXHUwMDNlc2FkZHIuc2hvcnRfYWRkciA9IHdwYW5fZGV2LVxcdTAwM2VzaG9ydF9hZGRyO1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy04OS1cXHRcXHR9IGVsc2Uge1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYzo5MDpcXHRcXHRcXHRpbmZvLVxcdTAwM2VzYWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTkxLVxcdFxcdFxcdGluZm8tXFx1MDAzZXNhZGRyLmV4dGVuZGVkX2FkZHIgPSB3cGFuX2Rldi1cXHUwMDNlZXh0ZW5kZWRfYWRkcjtcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy05My1cXHR9IGVsc2Uge1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYzo5NDpcXHRcXHRpbmZvLVxcdTAwM2VzYWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTk1LVxcdFxcdGllZWU4MDIxNTRfYmU2NF90b19sZTY0KFxcdTAwMjZpbmZvLVxcdTAwM2VzYWRkci5leHRlbmRlZF9hZGRyLCBzYWRkcik7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM9MjI1PXN0YXRpYyBpbnQgbG93cGFuX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbGRldixcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy0yMzgtXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jOjIzOTpcXHRjYi1cXHUwMDNldHlwZSA9IElFRUU4MDIxNTRfRkNfVFlQRV9EQVRBO1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy0yNDAtXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jOjI0MTpcXHRpZiAoaW5mby5kYWRkci5tb2RlID09IElFRUU4MDIxNTRfQUREUl9TSE9SVCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy0yNDItXFx0ICAgIGllZWU4MDIxNTRfaXNfYnJvYWRjYXN0X3Nob3J0X2FkZHIoaW5mby5kYWRkci5zaG9ydF9hZGRyKSlcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI6bWVudWNvbmZpZyBJRUVFODAyMTU0XFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJRUVFIFN0ZCA4MDIuMTUuNCBMb3ctUmF0ZSBXaXJlbGVzcyBQZXJzb25hbCBBcmVhIE5ldHdvcmtzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEzLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MTQ6aWYgSUVFRTgwMjE1NFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE3LVxcdGJvb2wgXFxcIklFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyMTpjb25maWcgSUVFRTgwMjE1NF9TT0NLRVRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19JRUVFODAyMTU0KSArPSBpZWVlODAyMTU0Lm9cXG5uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19JRUVFODAyMTU0X1NPQ0tFVCkgKz0gaWVlZTgwMjE1NF9zb2NrZXQub1xcbm5ldC9pZWVlODAyMTU0L01ha2VmaWxlLTQtb2JqLXkgKz0gNmxvd3Bhbi9cXG4tLVxcbm5ldC9pZWVlODAyMTU0L2NvcmUuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxubmV0L2llZWU4MDIxNTQvY29yZS5oOjI6I2lmbmRlZiBfX0lFRUU4MDIxNTRfQ09SRV9IXFxubmV0L2llZWU4MDIxNTQvY29yZS5oOjM6I2RlZmluZSBfX0lFRUU4MDIxNTRfQ09SRV9IXFxubmV0L2llZWU4MDIxNTQvY29yZS5oLTQtXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmg9NDg9c3RydWN0IHdwYW5fcGh5ICp3cGFuX3BoeV9pZHhfdG9fd3Bhbl9waHkoaW50IHdwYW5fcGh5X2lkeCk7XFxubmV0L2llZWU4MDIxNTQvY29yZS5oLTQ5LVxcbm5ldC9pZWVlODAyMTU0L2NvcmUuaDo1MDojZW5kaWYgLyogX19JRUVFODAyMTU0X0NPUkVfSCAqL1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTE1PWllZWU4MDIxNTRfaGRyX3B1c2hfYWRkcih1OCAqYnVmLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyLFxcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE5LVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMDpcXHRpZiAoYWRkci1cXHUwMDNlbW9kZSA9PSBJRUVFODAyMTU0X0FERFJfTk9ORSlcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjgtXFx0c3dpdGNoIChhZGRyLVxcdTAwM2Vtb2RlKSB7XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjI5OlxcdGNhc2UgSUVFRTgwMjE1NF9BRERSX1NIT1JUOlxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0zMC1cXHRcXHRtZW1jcHkoYnVmICsgcG9zLCBcXHUwMDI2YWRkci1cXHUwMDNlc2hvcnRfYWRkciwgMik7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMzMtXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjM0OlxcdGNhc2UgSUVFRTgwMjE1NF9BRERSX0xPTkc6XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjM1OlxcdFxcdG1lbWNweShidWYgKyBwb3MsIFxcdTAwMjZhZGRyLVxcdTAwM2VleHRlbmRlZF9hZGRyLCBJRUVFODAyMTU0X0FERFJfTEVOKTtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MzY6XFx0XFx0cG9zICs9IElFRUU4MDIxNTRfQUREUl9MRU47XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTM3LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTQ3PWllZWU4MDIxNTRfaGRyX3B1c2hfc2VjaGRyKHU4ICpidWYsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X3NlY2hkciAqaGRyKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTU0LVxcdHN3aXRjaCAoaGRyLVxcdTAwM2VrZXlfaWRfbW9kZSkge1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzo1NTpcXHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9JTVBMSUNJVDpcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNTYtXFx0XFx0cmV0dXJuIHBvcztcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNTctXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjU4OlxcdGNhc2UgSUVFRTgwMjE1NF9TQ0ZfS0VZX0lOREVYOlxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy01OS1cXHRcXHRicmVhaztcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNjAtXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjYxOlxcdGNhc2UgSUVFRTgwMjE1NF9TQ0ZfS0VZX1NIT1JUX0lOREVYOlxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy02Mi1cXHRcXHRtZW1jcHkoYnVmICsgcG9zLCBcXHUwMDI2aGRyLVxcdTAwM2VzaG9ydF9zcmMsIDQpO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTY1LVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzo2NjpcXHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9IV19JTkRFWDpcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6Njc6XFx0XFx0bWVtY3B5KGJ1ZiArIHBvcywgXFx1MDAyNmhkci1cXHUwMDNlZXh0ZW5kZWRfc3JjLCBJRUVFODAyMTU0X0FERFJfTEVOKTtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6Njg6XFx0XFx0cG9zICs9IElFRUU4MDIxNTRfQUREUl9MRU47XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTY5LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTc4PWllZWU4MDIxNTRfaGRyX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxNTRfaGRyICpoZHIpXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTc5LXtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6ODA6XFx0dTggYnVmW0lFRUU4MDIxNTRfTUFYX0hFQURFUl9MRU5dO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy04MS1cXHRpbnQgcG9zID0gMjtcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy05Ni1cXHRpZiAoaGRyLVxcdTAwM2Vzb3VyY2UucGFuX2lkID09IGhkci1cXHUwMDNlZGVzdC5wYW5faWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6OTc6XFx0ICAgIGhkci1cXHUwMDNlZGVzdC5tb2RlICE9IElFRUU4MDIxNTRfQUREUl9OT05FKVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy05OC1cXHRcXHRmYy1cXHUwMDNlaW50cmFfcGFuID0gdHJ1ZTtcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz0xNzE9aWVlZTgwMjE1NF9oZHJfZ2V0X2FkZHIoY29uc3QgdTggKmJ1ZiwgaW50IG1vZGUsIGJvb2wgb21pdF9wYW4sXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMTc1LVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoxNzY6XFx0aWYgKG1vZGUgPT0gSUVFRTgwMjE1NF9BRERSX05PTkUpIHtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMTc3LVxcdFxcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoKmFkZHIpKTtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MTc4OlxcdFxcdGFkZHItXFx1MDAzZW1vZGUgPSBJRUVFODAyMTU0X0FERFJfTk9ORTtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMTc5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE4OC1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MTg5OlxcdGlmIChtb2RlID09IElFRUU4MDIxNTRfQUREUl9TSE9SVCkge1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0xOTAtXFx0XFx0bWVtY3B5KFxcdTAwMjZhZGRyLVxcdTAwM2VzaG9ydF9hZGRyLCBidWYgKyBwb3MsIDIpO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE5Mi1cXHR9IGVsc2Uge1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoxOTM6XFx0XFx0bWVtY3B5KFxcdTAwMjZhZGRyLVxcdTAwM2VleHRlbmRlZF9hZGRyLCBidWYgKyBwb3MsIElFRUU4MDIxNTRfQUREUl9MRU4pO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoxOTQ6XFx0XFx0cmV0dXJuIHBvcyArIElFRUU4MDIxNTRfQUREUl9MRU47XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE5NS1cXHR9XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM9MTk4PXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9oZHJfYWRkcl9sZW4oaW50IG1vZGUsIGJvb2wgb21pdF9wYW4pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjAyLVxcdHN3aXRjaCAobW9kZSkge1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMDM6XFx0Y2FzZSBJRUVFODAyMTU0X0FERFJfTk9ORTogcmV0dXJuIDA7XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjIwNDpcXHRjYXNlIElFRUU4MDIxNTRfQUREUl9TSE9SVDogcmV0dXJuIDIgKyBwYW5fbGVuO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMDU6XFx0Y2FzZSBJRUVFODAyMTU0X0FERFJfTE9ORzogcmV0dXJuIElFRUU4MDIxNTRfQUREUl9MRU4gKyBwYW5fbGVuO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yMDYtXFx0ZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM9MjExPWllZWU4MDIxNTRfaGRyX2dldF9zZWNoZHIoY29uc3QgdTggKmJ1Ziwgc3RydWN0IGllZWU4MDIxNTRfc2VjaGRyICpoZHIpXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjE4LVxcdHN3aXRjaCAoaGRyLVxcdTAwM2VrZXlfaWRfbW9kZSkge1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMTk6XFx0Y2FzZSBJRUVFODAyMTU0X1NDRl9LRVlfSU1QTElDSVQ6XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTIyMC1cXHRcXHRyZXR1cm4gcG9zO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yMjEtXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjIyMjpcXHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9JTkRFWDpcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjIzLVxcdFxcdGJyZWFrO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yMjQtXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjIyNTpcXHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9TSE9SVF9JTkRFWDpcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjI2LVxcdFxcdG1lbWNweShcXHUwMDI2aGRyLVxcdTAwM2VzaG9ydF9zcmMsIGJ1ZiArIHBvcywgNCk7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjI5LVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMzA6XFx0Y2FzZSBJRUVFODAyMTU0X1NDRl9LRVlfSFdfSU5ERVg6XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjIzMTpcXHRcXHRtZW1jcHkoXFx1MDAyNmhkci1cXHUwMDNlZXh0ZW5kZWRfc3JjLCBidWYgKyBwb3MsIElFRUU4MDIxNTRfQUREUl9MRU4pO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMzI6XFx0XFx0cG9zICs9IElFRUU4MDIxNTRfQUREUl9MRU47XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTIzMy1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz0yNDE9c3RhdGljIGludCBpZWVlODAyMTU0X3NlY2hkcl9sZW5ndGhzWzRdID0ge1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyNDI6XFx0W0lFRUU4MDIxNTRfU0NGX0tFWV9JTVBMSUNJVF0gPSA1LFxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyNDM6XFx0W0lFRUU4MDIxNTRfU0NGX0tFWV9JTkRFWF0gPSA2LFxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyNDQ6XFx0W0lFRUU4MDIxNTRfU0NGX0tFWV9TSE9SVF9JTkRFWF0gPSAxMCxcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjQ1OlxcdFtJRUVFODAyMTU0X1NDRl9LRVlfSFdfSU5ERVhdID0gMTQsXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTI0Ni19O1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTI0OD1zdGF0aWMgaW50IGllZWU4MDIxNTRfaGRyX3NlY2hkcl9sZW4odTggc2MpXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTI0OS17XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjI1MDpcXHRyZXR1cm4gaWVlZTgwMjE1NF9zZWNoZHJfbGVuZ3Roc1tJRUVFODAyMTU0X1NDRl9LRVlfSURfTU9ERShzYyldO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yNTEtfVxcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTM0Nz1pZWVlODAyMTU0X2hkcl9wZWVrKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTU0X2hkciAqaGRyKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTM1Ni1cXHRpZiAoaGRyLVxcdTAwM2VmYy5zZWN1cml0eV9lbmFibGVkKSB7XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjM1NzpcXHRcXHR1OCBrZXlfaWRfbW9kZSA9IElFRUU4MDIxNTRfU0NGX0tFWV9JRF9NT0RFKCooYnVmICsgcG9zKSk7XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTM1OC1cXHRcXHRpbnQgd2FudCA9IHBvcyArIGllZWU4MDIxNTRfc2VjaGRyX2xlbmd0aHNba2V5X2lkX21vZGVdO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTM3MD1pbnQgaWVlZTgwMjE1NF9tYXhfcGF5bG9hZChjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgKmhkcilcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0zNzgtXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjM3OTpcXHRyZXR1cm4gSUVFRTgwMjE1NF9NVFUgLSBobGVuIC0gSUVFRTgwMjE1NF9NRlJfU0laRTtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMzgwLX1cXG4tLVxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaD05PXZvaWQgaWVlZTgwMjE1NF9ubF9leGl0KHZvaWQpO1xcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC0xMC1cXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg6MTE6I2RlZmluZSBJRUVFODAyMTU0X09QKF9jbWQsIF9mdW5jKVxcdFxcdFxcdFxcXFxcXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0LmgtMTItXFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC0xOC1cXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg6MTk6I2RlZmluZSBJRUVFODAyMTU0X09QX1JFTEFYRUQoX2NtZCwgX2Z1bmMpXFx0XFx0XFxcXFxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC0yMC1cXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTI3LVxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaDoyODojZGVmaW5lIElFRUU4MDIxNTRfRFVNUChfY21kLCBfZnVuYywgX2R1bXApXFx0XFx0XFxcXFxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC0yOS1cXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTM0LVxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaDozNTojZGVmaW5lIElFRUU4MDIxNTRfRFVNUF9QUklWKF9jbWQsIF9mdW5jLCBfZHVtcClcXHRcXFxcXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTM2LVxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg9NTk9ZW51bSBpZWVlODAyMTU0X21jZ3JwX2lkcyB7XFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjYwOlxcdElFRUU4MDIxNTRfQ09PUkRfTUNHUlAsXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjYxOlxcdElFRUU4MDIxNTRfQkVBQ09OX01DR1JQLFxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC02Mi19O1xcbi0tXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jPTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgaWVlZTgwMjE1NF9vcHNbXSA9IHtcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtODUtXFx0Lyogc2VlIG5sLXBoeS5jICovXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjg2OlxcdElFRUU4MDIxNTRfRFVNUChJRUVFODAyMTU0X0xJU1RfUEhZLCBpZWVlODAyMTU0X2xpc3RfcGh5LFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy04Ny1cXHRcXHRcXHRpZWVlODAyMTU0X2R1bXBfcGh5KSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6ODg6XFx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0FERF9JRkFDRSwgaWVlZTgwMjE1NF9hZGRfaWZhY2UpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzo4OTpcXHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfREVMX0lGQUNFLCBpZWVlODAyMTU0X2RlbF9pZmFjZSksXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTkwLVxcdC8qIHNlZSBubC1tYWMuYyAqL1xcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzo5MTpcXHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfQVNTT0NJQVRFX1JFUSwgaWVlZTgwMjE1NF9hc3NvY2lhdGVfcmVxKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTI6XFx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0FTU09DSUFURV9SRVNQLCBpZWVlODAyMTU0X2Fzc29jaWF0ZV9yZXNwKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTM6XFx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0RJU0FTU09DSUFURV9SRVEsIGllZWU4MDIxNTRfZGlzYXNzb2NpYXRlX3JlcSksXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjk0OlxcdElFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9TQ0FOX1JFUSwgaWVlZTgwMjE1NF9zY2FuX3JlcSksXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjk1OlxcdElFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9TVEFSVF9SRVEsIGllZWU4MDIxNTRfc3RhcnRfcmVxKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTY6XFx0SUVFRTgwMjE1NF9EVU1QKElFRUU4MDIxNTRfTElTVF9JRkFDRSwgaWVlZTgwMjE1NF9saXN0X2lmYWNlLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy05Ny1cXHRcXHRcXHRpZWVlODAyMTU0X2R1bXBfaWZhY2UpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzo5ODpcXHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfU0VUX01BQ1BBUkFNUywgaWVlZTgwMjE1NF9zZXRfbWFjcGFyYW1zKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTk6XFx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0xMU0VDX0dFVFBBUkFNUywgaWVlZTgwMjE1NF9sbHNlY19nZXRwYXJhbXMpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDA6XFx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0xMU0VDX1NFVFBBUkFNUywgaWVlZTgwMjE1NF9sbHNlY19zZXRwYXJhbXMpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDE6XFx0SUVFRTgwMjE1NF9EVU1QX1BSSVYoSUVFRTgwMjE1NF9MTFNFQ19MSVNUX0tFWSwgTlVMTCxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTAyLVxcdFxcdFxcdCAgICAgaWVlZTgwMjE1NF9sbHNlY19kdW1wX2tleXMpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDM6XFx0SUVFRTgwMjE1NF9PUF9SRUxBWEVEKElFRUU4MDIxNTRfTExTRUNfQUREX0tFWSwgaWVlZTgwMjE1NF9sbHNlY19hZGRfa2V5KSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTA0OlxcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0RFTF9LRVksIGllZWU4MDIxNTRfbGxzZWNfZGVsX2tleSksXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEwNTpcXHRJRUVFODAyMTU0X0RVTVBfUFJJVihJRUVFODAyMTU0X0xMU0VDX0xJU1RfREVWLCBOVUxMLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMDYtXFx0XFx0XFx0ICAgICBpZWVlODAyMTU0X2xsc2VjX2R1bXBfZGV2cyksXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEwNzpcXHRJRUVFODAyMTU0X09QX1JFTEFYRUQoSUVFRTgwMjE1NF9MTFNFQ19BRERfREVWLCBpZWVlODAyMTU0X2xsc2VjX2FkZF9kZXYpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDg6XFx0SUVFRTgwMjE1NF9PUF9SRUxBWEVEKElFRUU4MDIxNTRfTExTRUNfREVMX0RFViwgaWVlZTgwMjE1NF9sbHNlY19kZWxfZGV2KSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTA5OlxcdElFRUU4MDIxNTRfRFVNUF9QUklWKElFRUU4MDIxNTRfTExTRUNfTElTVF9ERVZLRVksIE5VTEwsXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTExMC1cXHRcXHRcXHQgICAgIGllZWU4MDIxNTRfbGxzZWNfZHVtcF9kZXZrZXlzKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTExOlxcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0FERF9ERVZLRVksIGllZWU4MDIxNTRfbGxzZWNfYWRkX2RldmtleSksXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjExMjpcXHRJRUVFODAyMTU0X09QX1JFTEFYRUQoSUVFRTgwMjE1NF9MTFNFQ19ERUxfREVWS0VZLCBpZWVlODAyMTU0X2xsc2VjX2RlbF9kZXZrZXkpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMTM6XFx0SUVFRTgwMjE1NF9EVU1QX1BSSVYoSUVFRTgwMjE1NF9MTFNFQ19MSVNUX1NFQ0xFVkVMLCBOVUxMLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMTQtXFx0XFx0XFx0ICAgICBpZWVlODAyMTU0X2xsc2VjX2R1bXBfc2VjbGV2ZWxzKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTE1OlxcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0FERF9TRUNMRVZFTCxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTE2LVxcdFxcdFxcdCAgICAgIGllZWU4MDIxNTRfbGxzZWNfYWRkX3NlY2xldmVsKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTE3OlxcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0RFTF9TRUNMRVZFTCxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTE4LVxcdFxcdFxcdCAgICAgIGllZWU4MDIxNTRfbGxzZWNfZGVsX3NlY2xldmVsKSxcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYz0xMjE9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBpZWVlODAyMTU0X21jZ3Jwc1tdID0ge1xcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMjI6XFx0W0lFRUU4MDIxNTRfQ09PUkRfTUNHUlBdID0geyAubmFtZSA9IElFRUU4MDIxNTRfTUNBU1RfQ09PUkRfTkFNRSwgfSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTIzOlxcdFtJRUVFODAyMTU0X0JFQUNPTl9NQ0dSUF0gPSB7IC5uYW1lID0gSUVFRTgwMjE1NF9NQ0FTVF9CRUFDT05fTkFNRSwgfSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTI0LX07XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM9MTI2PXN0cnVjdCBnZW5sX2ZhbWlseSBubDgwMjE1NF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMjctXFx0LmhkcnNpemVcXHQ9IDAsXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEyODpcXHQubmFtZVxcdFxcdD0gSUVFRTgwMjE1NF9OTF9OQU1FLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMjktXFx0LnZlcnNpb25cXHQ9IDEsXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEzMDpcXHQubWF4YXR0clxcdD0gSUVFRTgwMjE1NF9BVFRSX01BWCxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTMxLVxcdC5wb2xpY3lcXHRcXHQ9IGllZWU4MDIxNTRfcG9saWN5LFxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTEzNC1cXHQubl9zbWFsbF9vcHNcXHQ9IEFSUkFZX1NJWkUoaWVlZTgwMjE1NF9vcHMpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMzU6XFx0LnJlc3Zfc3RhcnRfb3BcXHQ9IElFRUU4MDIxNTRfTExTRUNfREVMX1NFQ0xFVkVMICsgMSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTM2LVxcdC5tY2dycHNcXHRcXHQ9IGllZWU4MDIxNTRfbWNncnBzLFxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9NTE9c3RhdGljIGludCBpZWVlODAyMTU0X25sX3N0YXJ0X2NvbmZpcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggc3RhdHVzKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtNTYtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6NTc6XFx0bXNnID0gaWVlZTgwMjE1NF9ubF9jcmVhdGUoMCwgSUVFRTgwMjE1NF9TVEFSVF9DT05GKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy01OC1cXHRpZiAoIW1zZylcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTYwLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjYxOlxcdGlmIChubGFfcHV0X3N0cmluZyhtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRSwgZGV2LVxcdTAwM2VuYW1lKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjYyOlxcdCAgICBubGFfcHV0X3UzMihtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfSU5ERVgsIGRldi1cXHUwMDNlaWZpbmRleCkgfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzo2MzpcXHQgICAgbmxhX3B1dChtc2csIElFRUU4MDIxNTRfQVRUUl9IV19BRERSLCBJRUVFODAyMTU0X0FERFJfTEVOLFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTY0LVxcdFxcdCAgICBkZXYtXFx1MDAzZWRldl9hZGRyKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjY1OlxcdCAgICBubGFfcHV0X3U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX1NUQVRVUywgc3RhdHVzKSlcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy02Ni1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzo2NzpcXHRyZXR1cm4gaWVlZTgwMjE1NF9ubF9tY2FzdChtc2csIElFRUU4MDIxNTRfQ09PUkRfTUNHUlApO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTY4LVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9NzQ9c3RhdGljIGludCBpZWVlODAyMTU0X25sX2ZpbGxfaWZhY2Uoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCxcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTg0LVxcdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgMCwgc2VxLCBcXHUwMDI2bmw4MDIxNTRfZmFtaWx5LCBmbGFncyxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzo4NTpcXHRcXHRcXHQgIElFRUU4MDIxNTRfTElTVF9JRkFDRSk7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtODYtXFx0aWYgKCFoZHIpXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy05OC1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzo5OTpcXHRpZiAobmxhX3B1dF9zdHJpbmcobXNnLCBJRUVFODAyMTU0X0FUVFJfREVWX05BTUUsIGRldi1cXHUwMDNlbmFtZSkgfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMDA6XFx0ICAgIG5sYV9wdXRfc3RyaW5nKG1zZywgSUVFRTgwMjE1NF9BVFRSX1BIWV9OQU1FLCB3cGFuX3BoeV9uYW1lKHBoeSkpIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTAxOlxcdCAgICBubGFfcHV0X3UzMihtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfSU5ERVgsIGRldi1cXHUwMDNlaWZpbmRleCkgfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMDI6XFx0ICAgIG5sYV9wdXQobXNnLCBJRUVFODAyMTU0X0FUVFJfSFdfQUREUiwgSUVFRTgwMjE1NF9BRERSX0xFTixcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMDMtXFx0XFx0ICAgIGRldi1cXHUwMDNlZGV2X2FkZHIpIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTA0OlxcdCAgICBubGFfcHV0X3Nob3J0YWRkcihtc2csIElFRUU4MDIxNTRfQVRUUl9TSE9SVF9BRERSLCBzaG9ydF9hZGRyKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjEwNTpcXHQgICAgbmxhX3B1dF9zaG9ydGFkZHIobXNnLCBJRUVFODAyMTU0X0FUVFJfUEFOX0lELCBwYW5faWQpKVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTEwNi1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTExNC1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMTU6XFx0XFx0aWYgKG5sYV9wdXRfczgobXNnLCBJRUVFODAyMTU0X0FUVFJfVFhQT1dFUixcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMTYtXFx0XFx0XFx0ICAgICAgIHBhcmFtcy50cmFuc21pdF9wb3dlciAvIDEwMCkgfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMTc6XFx0XFx0ICAgIG5sYV9wdXRfdTgobXNnLCBJRUVFODAyMTU0X0FUVFJfTEJUX0VOQUJMRUQsIHBhcmFtcy5sYnQpIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTE4OlxcdFxcdCAgICBubGFfcHV0X3U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX0NDQV9NT0RFLFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTExOS1cXHRcXHRcXHQgICAgICAgcGFyYW1zLmNjYS5tb2RlKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjEyMDpcXHRcXHQgICAgbmxhX3B1dF9zMzIobXNnLCBJRUVFODAyMTU0X0FUVFJfQ0NBX0VEX0xFVkVMLFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTEyMS1cXHRcXHRcXHRcXHRwYXJhbXMuY2NhX2VkX2xldmVsIC8gMTAwKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjEyMjpcXHRcXHQgICAgbmxhX3B1dF91OChtc2csIElFRUU4MDIxNTRfQVRUUl9DU01BX1JFVFJJRVMsXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTIzLVxcdFxcdFxcdCAgICAgICBwYXJhbXMuY3NtYV9yZXRyaWVzKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjEyNDpcXHRcXHQgICAgbmxhX3B1dF91OChtc2csIElFRUU4MDIxNTRfQVRUUl9DU01BX01JTl9CRSxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMjUtXFx0XFx0XFx0ICAgICAgIHBhcmFtcy5taW5fYmUpIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTI2OlxcdFxcdCAgICBubGFfcHV0X3U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX0NTTUFfTUFYX0JFLFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTEyNy1cXHRcXHRcXHQgICAgICAgcGFyYW1zLm1heF9iZSkgfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMjg6XFx0XFx0ICAgIG5sYV9wdXRfczgobXNnLCBJRUVFODAyMTU0X0FUVFJfRlJBTUVfUkVUUklFUyxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMjktXFx0XFx0XFx0ICAgICAgIHBhcmFtcy5mcmFtZV9yZXRyaWVzKSlcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jPTE0NT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmllZWU4MDIxNTRfbmxfZ2V0X2RldihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTQ4LVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE0OTpcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFVl9OQU1FXSkge1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE1MC1cXHRcXHRjaGFyIG5hbWVbSUZOQU1TSVogKyAxXTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xNTEtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTUyOlxcdFxcdG5sYV9zdHJzY3B5KG5hbWUsIGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRV0sXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTUzLVxcdFxcdFxcdCAgICBzaXplb2YobmFtZSkpO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE1NC1cXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X25hbWUoXFx1MDAyNmluaXRfbmV0LCBuYW1lKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxNTU6XFx0fSBlbHNlIGlmIChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfREVWX0lOREVYXSkge1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE1Ni1cXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KFxcdTAwMjZpbml0X25ldCxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxNTc6XFx0XFx0XFx0bmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFVl9JTkRFWF0pKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xNTgtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE2NC1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxNjU6XFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCkge1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE2Ni1cXHRcXHRkZXZfcHV0KGRldik7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYz0xNzM9aW50IGllZWU4MDIxNTRfYXNzb2NpYXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTc5LVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE4MDpcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DSEFOTkVMXSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE4MTpcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9QQU5fSURdIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTgyOlxcdCAgICAoIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9IV19BRERSXSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE4MzpcXHRcXHQhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1NIT1JUX0FERFJdKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE4NDpcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DQVBBQklMSVRZXSlcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xODUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xOTItXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTkzOlxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfSFdfQUREUl0pIHtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxOTQ6XFx0XFx0YWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTk1LVxcdFxcdGFkZHIuZXh0ZW5kZWRfYWRkciA9IG5sYV9nZXRfaHdhZGRyKFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE5NjpcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfSFdfQUREUl0pO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE5Ny1cXHR9IGVsc2Uge1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE5ODpcXHRcXHRhZGRyLm1vZGUgPSBJRUVFODAyMTU0X0FERFJfU0hPUlQ7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTk5LVxcdFxcdGFkZHIuc2hvcnRfYWRkciA9IG5sYV9nZXRfc2hvcnRhZGRyKFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjIwMDpcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfU0hPUlRfQUREUl0pO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIwMS1cXHR9XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjAyLVxcdGFkZHIucGFuX2lkID0gbmxhX2dldF9zaG9ydGFkZHIoXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjAzOlxcdFxcdFxcdGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9QQU5fSURdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMDQtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjA1OlxcdHBhZ2UgPSBubGFfZ2V0X3U4X2RlZmF1bHQoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1BBR0VdLCAwKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMDYtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjA3LVxcdHJldCA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS1cXHUwMDNlYXNzb2NfcmVxKGRldiwgXFx1MDAyNmFkZHIsXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjA4OlxcdFxcdFxcdG5sYV9nZXRfdTgoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NIQU5ORUxdKSxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMDktXFx0XFx0XFx0cGFnZSxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMTA6XFx0XFx0XFx0bmxhX2dldF91OChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0FQQUJJTElUWV0pKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMTEtXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYz0yMTc9aW50IGllZWU4MDIxNTRfYXNzb2NpYXRlX3Jlc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIyMi1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMjM6XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfU1RBVFVTXSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjIyNDpcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX0hXX0FERFJdIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjI1OlxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfU0hPUlRfQUREUl0pXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjI2LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjMzLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjIzNDpcXHRhZGRyLm1vZGUgPSBJRUVFODAyMTU0X0FERFJfTE9ORztcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMzUtXFx0YWRkci5leHRlbmRlZF9hZGRyID0gbmxhX2dldF9od2FkZHIoXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjM2OlxcdFxcdFxcdGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX0hXX0FERFJdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMzctXFx0cnRubF9sb2NrKCk7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yNDEtXFx0cmV0ID0gaWVlZTgwMjE1NF9tbG1lX29wcyhkZXYpLVxcdTAwM2Vhc3NvY19yZXNwKGRldiwgXFx1MDAyNmFkZHIsXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjQyOlxcdFxcdG5sYV9nZXRfc2hvcnRhZGRyKGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX1NIT1JUX0FERFJdKSxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyNDM6XFx0XFx0bmxhX2dldF91OChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfU1RBVFVTXSkpO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTI0NC1cXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jPTI1MD1pbnQgaWVlZTgwMjE1NF9kaXNhc3NvY2lhdGVfcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yNTUtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjU2OlxcdGlmICgoIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX0hXX0FERFJdIFxcdTAwMjZcXHUwMDI2XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjU3OlxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfU0hPUlRfQUREUl0pIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjU4OlxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1JFQVNPTl0pXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjU5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjY2LVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI2NzpcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfSFdfQUREUl0pIHtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyNjg6XFx0XFx0YWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjY5LVxcdFxcdGFkZHIuZXh0ZW5kZWRfYWRkciA9IG5sYV9nZXRfaHdhZGRyKFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI3MDpcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfREVTVF9IV19BRERSXSk7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjcxLVxcdH0gZWxzZSB7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjcyOlxcdFxcdGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yNzMtXFx0XFx0YWRkci5zaG9ydF9hZGRyID0gbmxhX2dldF9zaG9ydGFkZHIoXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6Mjc0OlxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX1NIT1JUX0FERFJdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yNzUtXFx0fVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjgwLVxcdHJldCA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS1cXHUwMDNlZGlzYXNzb2NfcmVxKGRldiwgXFx1MDAyNmFkZHIsXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjgxOlxcdFxcdFxcdG5sYV9nZXRfdTgoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1JFQVNPTl0pKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yODItXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYz0yOTI9aW50IGllZWU4MDIxNTRfc3RhcnRfcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMDEtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzAyOlxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1BBTl9JRF0gfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDM6XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfU0hPUlRfQUREUl0gfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDQ6XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTF0gfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDU6XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQkNOX09SRF0gfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDY6XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfU0ZfT1JEXSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMwNzpcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9QQU5fQ09PUkRdIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzA4OlxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0JBVF9FWFRdIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzA5OlxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1JFQUxJR05dXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMzEwLVxcdCApXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMjQtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzI1OlxcdGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMjYtXFx0YWRkci5zaG9ydF9hZGRyID0gbmxhX2dldF9zaG9ydGFkZHIoXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzI3OlxcdFxcdFxcdGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9TSE9SVF9BRERSXSk7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMzI4LVxcdGFkZHIucGFuX2lkID0gbmxhX2dldF9zaG9ydGFkZHIoXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzI5OlxcdFxcdFxcdGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9QQU5fSURdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMzAtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzMxOlxcdGNoYW5uZWwgPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DSEFOTkVMXSk7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzMyOlxcdGJjbl9vcmQgPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9CQ05fT1JEXSk7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzMzOlxcdHNmX29yZCA9IG5sYV9nZXRfdTgoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1NGX09SRF0pO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMzNDpcXHRwYW5fY29vcmQgPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9QQU5fQ09PUkRdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMzU6XFx0Ymx4ID0gbmxhX2dldF91OChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQkFUX0VYVF0pO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMzNjpcXHRjb29yZF9yZWFsaWduID0gbmxhX2dldF91OChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfUkVBTElHTl0pO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTMzNy1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMzg6XFx0cGFnZSA9IG5sYV9nZXRfdThfZGVmYXVsdChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfUEFHRV0sIDApO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTMzOS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozNDA6XFx0aWYgKGFkZHIuc2hvcnRfYWRkciA9PSBjcHVfdG9fbGUxNihJRUVFODAyMTU0X0FERFJfQlJPQURDQVNUKSkge1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjM0MTpcXHRcXHRpZWVlODAyMTU0X25sX3N0YXJ0X2NvbmZpcm0oZGV2LCBJRUVFODAyMTU0X05PX1NIT1JUX0FERFJFU1MpO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTM0Mi1cXHRcXHRkZXZfcHV0KGRldik7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNTMtXFx0ICovXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzU0OlxcdGllZWU4MDIxNTRfbmxfc3RhcnRfY29uZmlybShkZXYsIElFRUU4MDIxNTRfU1VDQ0VTUyk7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMzU1LVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9MzYxPWludCBpZWVlODAyMTU0X3NjYW5fcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNjktXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzcwOlxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1NDQU5fVFlQRV0gfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozNzE6XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTFNdIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzcyOlxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RVUkFUSU9OXSlcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNzMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zODAtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzgxOlxcdHR5cGUgPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9TQ0FOX1RZUEVdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozODI6XFx0Y2hhbm5lbHMgPSBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTFNdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozODM6XFx0ZHVyYXRpb24gPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9EVVJBVElPTl0pO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTM4NC1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTk6NTkuNTY2NTExNjkyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3MTY2OTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipUaW1lIHRvIEludmVzdGlnYXRlIHRoZSBJRUVFIDgwMi4xNS40IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBJRUVFIDgwMi4xNS40IGNvbXBvbmVudHMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBleGFtaW5lIHRoZSByZWxldmFudCBLY29uZmlnIGFuZCBNYWtlZmlsZSBmaWxlcy4gVGhlIGBuZXQvaWVlZTgwMjE1NC9LY29uZmlnYCBmaWxlIHNob3VsZCBob2xkIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHdpcmVsZXNzIHByb3RvY29sLCBhbGwgdGhlIHNldHRpbmdzIHRoYXQgdGhlIHVzZXIgY2FuIHNldCBhdCBjb21waWxlIHRpbWUuIEl0IGhlbHBzIG1lIHRvIHVuZGVyc3RhbmQgd2hhdCBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyBkaWZmZXJlbnQgYXNwZWN0cyBvZiA4MDIuMTUuNCBhcmUgY29udHJvbGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLlxuXG5UaGVuLCB0aGUgYG5ldC9pZWVlODAyMTU0L01ha2VmaWxlYCBpcyB0aGUgbmV4dCBvYnZpb3VzIHBsYWNlLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIHNvdXJjZSBjb2RlIGlzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbmNvcnBvcmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBzb3VyY2UgZmlsZXMgYXJlIGluY2x1ZGVkLCB3aGF0IGxpYnJhcmllcyBhcmUgdXNlZCwgYW5kIGhvdyB0aGUgZW50aXJlIDgwMi4xNS40IHN0YWNrIGlzIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRvIGFkZCBhIG1vZHVsZSBvciBkaXNhYmxlIG9uZS5cblxuRXNzZW50aWFsbHksIHRoZXNlIHR3byBmaWxlcyBwcm92aWRlIHRoZSBibHVlcHJpbnQsIHRoZSBob3ctdG8gZ3VpZGUsIGZvciBidWlsZGluZyBhbmQgY29uZmlndXJpbmcgdGhlIDgwMi4xNS40IG5ldHdvcmtpbmcgc3RhY2suIEdyYXNwaW5nIHRoZW0gaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byBhbnkgd29yayBJJ20gZ29pbmcgdG8gZG8gaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUxOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjIwOjAyLjUzODE4MzcyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaWVlZTgwMjE1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElFRUU4MDIxNTRcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJRUVFIFN0ZCA4MDIuMTUuNCBMb3ctUmF0ZSBXaXJlbGVzcyBQZXJzb25hbCBBcmVhIE5ldHdvcmtzIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIElFRUUgU3RkIDgwMi4xNS40IGRlZmluZXMgYSBsb3cgZGF0YSByYXRlLCBsb3cgcG93ZXIgYW5kIGxvd1xcbiAgIDY6XFx0XFx0ICBjb21wbGV4aXR5IHNob3J0IHJhbmdlIHdpcmVsZXNzIHBlcnNvbmFsIGFyZWEgbmV0d29ya3MuIEl0IHdhc1xcbiAgIDc6XFx0XFx0ICBkZXNpZ25lZCB0byBvcmdhbmlzZSBuZXR3b3JrcyBvZiBzZW5zb3JzLCBzd2l0Y2hlcywgZXRjIGF1dG9tYXRpb25cXG4gICA4OlxcdFxcdCAgZGV2aWNlcy4gTWF4aW11bSBhbGxvd2VkIGRhdGEgcmF0ZSBpcyAyNTAga2IvcyBhbmQgdHlwaWNhbCBwZXJzb25hbFxcbiAgIDk6XFx0XFx0ICBvcGVyYXRpbmcgc3BhY2UgYXJvdW5kIDEwbS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgTFItV1BBTiBzdXBwb3J0IGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0b1xcbiAgMTI6XFx0XFx0ICBjb21waWxlIGl0IGFzIG1vZHVsZXMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIElFRUU4MDIxNTRcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMXFxuICAxNzpcXHRcXHRib29sIFxcXCJJRUVFIDgwMi4xNS40IGV4cGVyaW1lbnRhbCBuZXRsaW5rIHN1cHBvcnRcXFwiXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIEFkZHMgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydCBmb3Igbmw4MDIxNTQuXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxcbiAgMjI6XFx0XFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZVxcXCJcXG4gIDIzOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjQ6XFx0XFx0aGVscFxcbiAgMjU6XFx0XFx0ICBTb2NrZXQgaW50ZXJmYWNlIGZvciBJRUVFIDgwMi4xNS40LiBDb250YWlucyBER1JBTSBzb2NrZXRzIGludGVyZmFjZVxcbiAgMjY6XFx0XFx0ICBmb3IgODAyLjE1LjQgZGF0YWZyYW1lcy4gQWxzbyBSQVcgc29ja2V0IGludGVyZmFjZSB0byBidWlsZCBNQUNcXG4gIDI3OlxcdFxcdCAgaGVhZGVyIGZyb20gdXNlcnNwYWNlLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRzb3VyY2UgXFxcIm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vS2NvbmZpZ1xcXCJcXG4gIDMwOlxcdFxcbiAgMzE6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjA6MDIuNTM4Mjg5MDg3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4NDY0ODIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIElFRUUgODAyLjE1LjQvV1BBTiBEZXZpY2UgU2ltdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIHRlc3QgSUVFRSA4MDIuMTUuNCBhbmQgV1BBTiBmdW5jdGlvbmFsaXR5IHdpdGhpbiBhIHNpbXVsYXRlZCBlbnZpcm9ubWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgZHJpdmVycyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aG9zZSB0ZWNobm9sb2dpZXMuIEkgc2hvdWxkIGV4cGxvcmUgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvYCwgYGRyaXZlcnMvbmV0L3dwYW4vYCwgYW5kIGBtYWM4MDIxNTRgIHRvIHVuZGVyc3RhbmQgdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRyaXZlcnMgYW5kIHRlc3RpbmcgZnJhbWV3b3Jrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB3ZSBjYW4gc2ltdWxhdGUgdGhlc2UgZGV2aWNlcyBkaXJlY3RseSB3aXRoaW4gU3l6a2FsbGVyIG9yIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBvbiB0aGUgbG9va291dCBmb3IgbmFtZXMgbGlrZSBgZmFrZWxiYCBhbmQgYG1hYzgwMjE1NF9od3NpbWAsIHdoaWNoIG1pZ2h0IHByb3ZpZGUgYSBjbHVlLiBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aGVzZSB0byBkZXRlcm1pbmUgdGhlIGF2YWlsYWJpbGl0eSBvZiBzaW11bGF0ZWQgaGFyZHdhcmUgbW9kZWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQyMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjA6MDQuOTIyOTQwNDcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMxNTQ1MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JRUVFODAyMTU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmM9MTc5PXN0YXRpYyB2b2lkIG9mX2dwaW9fdHJ5X2ZpeHVwX3BvbGFyaXR5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jLTIwNy0jZW5kaWZcXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jOjIwODojaWYgSVNfRU5BQkxFRChDT05GSUdfSUVFRTgwMjE1NF9DQTgyMTApXFxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYy0yMDktXFx0XFx0LypcXG4tLVxcbmRyaXZlcnMvbmV0L01ha2VmaWxlPTcxPW9iai0kKENPTkZJR19XTEFOKSArPSB3aXJlbGVzcy9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZTo3MjpvYmotJChDT05GSUdfSUVFRTgwMjE1NCkgKz0gaWVlZTgwMjE1NC9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS03My1vYmotJChDT05GSUdfV1dBTikgKz0gd3dhbi9cXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19JRUVFODAyMTU0X0ZBS0VMQikgKz0gZmFrZWxiLm9cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfQVQ4NlJGMjMwKSArPSBhdDg2cmYyMzAub1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfSUVFRTgwMjE1NF9NUkYyNEo0MCkgKz0gbXJmMjRqNDAub1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfSUVFRTgwMjE1NF9DQzI1MjApICs9IGNjMjUyMC5vXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19JRUVFODAyMTU0X0FUVVNCKSArPSBhdHVzYi5vXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19JRUVFODAyMTU0X0FERjcyNDIpICs9IGFkZjcyNDIub1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfSUVFRTgwMjE1NF9DQTgyMTApICs9IGNhODIxMC5vXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JRUVFODAyMTU0X01DUjIwQSkgKz0gbWNyMjBhLm9cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19JRUVFODAyMTU0X0hXU0lNKSArPSBtYWM4MDIxNTRfaHdzaW0ub1xcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYTgyMTAuYz0yOTc5PXN0YXRpYyB2b2lkIGNhODIxMF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaV9kZXZpY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2NhODIxMC5jLTMwMTUtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2E4MjEwLmM6MzAxNjpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSUVFRTgwMjE1NF9DQTgyMTBfREVCVUdGUykpXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYTgyMTAuYy0zMDE3LVxcdFxcdFxcdGNhODIxMF90ZXN0X2ludGVyZmFjZV9jbGVhcihwcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2E4MjEwLmM9MzAyNz1zdGF0aWMgaW50IGNhODIxMF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX2RldmljZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2E4MjEwLmMtMzA1OC1cXHRzcGlfc2V0X2RydmRhdGEocHJpdi1cXHUwMDNlc3BpLCBwcml2KTtcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2NhODIxMC5jOjMwNTk6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lFRUU4MDIxNTRfQ0E4MjEwX0RFQlVHRlMpKSB7XFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYTgyMTAuYy0zMDYwLVxcdFxcdGNhc2NvZGFfYXBpX3Vwc3RyZWFtID0gY2E4MjEwX3Rlc3RfaW50X2RyaXZlcl93cml0ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjA6MDYuMzU0NDkzNzA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNTQwODIzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJRUVFIDgwMi4xNS40IFBhdGNoKipcblxuT2theSwgc28gSUVFRSA4MDIuMTUuNCBpcyB3ZWxsLWNvdmVyZWQ7IHdlJ3ZlIGdvdCBgbWFjODAyMTU0X2h3c2ltYCwgYGZha2VsYmAsIGBubDgwMjE1NCBuZXRsaW5rYCwgYHJ0bmxgLCB0aGUgd29ya3MsIGFuZCBpdCdzIGV2ZW4gZ2V0dGluZyBmdXp6aW5nIGF0dGVudGlvbiBmcm9tIHN5emthbGxlciwgd2hpY2ggaXMgZ3JlYXQgdG8gc2VlLiBOb3csIGxldCdzIGRpdmUgaW50byB0aGlzIHNwZWNpZmljIHBhdGNoLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AuXG5cblNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3cGFuX2Rldl90eXBlID0geyAubmFtZSA9IFwid3BhblwiIH07YC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXZpY2UgdHlwZSBkZWZpbml0aW9uLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGFsYXJtaW5nIHRoZXJlLlxuXG5EaWdnaW5nIGRlZXBlciBpbnRvIGBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxgLCBpdCBsb29rcyBsaWtlIHRoZXJlJ3Mgc29tZSBpbnRlcmVzdGluZyBsb2dpYyBhZGRlZC4gVGhlcmUncyBhIGBXQVJOX09OKHdwYW5fZGV2LVx1MDAzZWlmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKTtgIHdoaWNoIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBJdCdzIGEgc2FuaXR5IGNoZWNrLCB0aGF0IHN1Z2dlc3RzIHNvbWUga2luZCBvZiB1bmV4cGVjdGVkIHN0YXRlLiBUaGVuLCB0aGUgaGFuZGxpbmcgb2YgYE5FVERFVl9QT1NUX0lOSVRgIHdoaWNoIGlzIHNldHRpbmcgdGhlIGRldmljZSB0eXBlLCBgU0VUX05FVERFVl9ERVZUWVBFKGRldiwgXHUwMDI2d3Bhbl9kZXZfdHlwZSk7YC4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBkZXZpY2UgdHlwZSBkZWZpbml0aW9uIGFib3ZlLlxuXG5Ob3csIEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCBhbmQgd2hhdCdzIGdvaW5nIG9uIGFyb3VuZCB0aGF0LiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3NDYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjA6MDkuNjA4NTc4NjEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQ0MzcxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pZWVlODAyMTU0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pZWVlODAyMTU0L2NvcmUuYz0yODA9Y2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2NvcmUuYy0yODctXFxubmV0L2llZWU4MDIxNTQvY29yZS5jOjI4ODpzdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbm5ldC9pZWVlODAyMTU0L2NvcmUuYy0yODktXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHN0YXRlLCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmM9MzU2PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllciA9IHtcXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmM6MzU3OlxcdC5ub3RpZmllcl9jYWxsID0gY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsLFxcbm5ldC9pZWVlODAyMTU0L2NvcmUuYy0zNTgtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjA6MDkuOTIzMDIxOTgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MzQwNDkzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbCoqXG5cbk9rYXksIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSdtIHRoaW5raW5nLiBJJ20gc3RhcnRpbmcgd2l0aCBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCwgd2hpY2ggaXMgY2xlYXJseSByZWdpc3RlcmVkIGFzIGEgbmV0ZGV2aWNlIG5vdGlmaWVyIHZpYSBgcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyYCB3aXRoaW4gdGhlIGBpZWVlODAyMTU0X2luaXRgIG9yIHJlbGF0ZWQgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gdGhpcyBub3RpZmllciBpcyBhY3R1YWxseSB0cmlnZ2VyZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIHRpZWQgdG8gbmV0ZGV2aWNlIGV2ZW50cy5cblxuU28sIGl0IGxvb2tzIGxpa2UgdGhpcyBub3RpZmllciBnZXRzIGludm9rZWQgd2hlbmV2ZXIgYSBuZXRkZXZpY2UsIHdoZXJlIGBkZXYtXHUwMDNlaWVlZTgwMjE1NF9wdHJgIGlzbid0IG51bGwsIGV4cGVyaWVuY2VzIGV2ZW50cyBsaWtlIGBORVRERVZfUE9TVF9JTklUYCwgYE5FVERFVl9SRUdJU1RFUmAsIGBORVRERVZfRE9XTmAsIGBORVRERVZfVVBgLCBgTkVUREVWX1VOUkVHSVNURVJgLCBhbmQgc28gb24uIE5vdyBJIHNlZSB0aGF0IHdpdGhpbiB0aGlzIGZ1bmN0aW9uIHRoZXJlIGlzIGEgY2FsbCB0byBgd3Bhbl9waHlfdG9fcmRldmAsIGEgbmV3IGFzc2VydGlvbiBgV0FSTl9PTih3cGFuX2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQylgLCBhbmQgYWxzbyBhIG5ldyBhc3NpZ25tZW50IGBTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcdTAwMjZ3cGFuX2Rldl90eXBlKTtgLlxuXG5UaGF0IG5ldyBhc3NlcnRpb24gaXMgY3JpdGljYWwuIE5vdywgSSBzaG91bGQgcmVmZXJlbmNlIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFNlY3Rpb25zIDEgXHUwMDI2IDMgYXJlIHRoZSByZWxldmFudCBvbmVzOiBuZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSAqbXVzdCogYmUgZnV6emVkLiBFdmVuIGlmIHlvdSAqdGhpbmsqIGl0J3MgYnVsbGV0cHJvb2YsIGZ1enppbmcgaXMgdml0YWwgdG8gZXhwb3NlIGFueSB1bmV4cGVjdGVkIG9wZXJhdGlvbiBzZXF1ZW5jZXMgdGhhdCBtaWdodCB0cmlnZ2VyIHRoYXQgYXNzZXJ0aW9uLiBBbmQgdGhlIElFRUUgODAyLjE1LjQgY29kZSBpcyByZWFjaGFibGUgdmlhIHZpcnR1YWwgYnVzZXMgYW5kIG5ldGxpbmssIHdoaWNoIG1lYW5zIHRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IGZhaXIgZ2FtZSBmb3IgZnV6emluZy5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC4gVGhlIGNvZGUgcGF0aCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50LlxuXG5Ob3csIGxldCdzIGVzdGFibGlzaCBteSBgRm9jdXNTeW1ib2xzYC4gV2hhdCBmdW5jdGlvbnMsIGJleW9uZCB0aGUgb2J2aW91cyBlbnRyeSBwb2ludCwgc2hvdWxkIEkgY29uc2lkZXI/IEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGFmZmVjdGVkIG9yIGFjdCBhcyBlbnRyeXBvaW50cy4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCBpbiBgbmV0L2llZWU4MDIxNTQvY29yZS5jYCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0b3VjaGVkLiBJIGhhdmUgdG8gbG9vayBpbnRvIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgIGFuZCByZWxldmFudCBuZXRsaW5rIGludGVyZmFjZXMgYW5kIG90aGVyIGZ1bmN0aW9ucyB0byByb3VuZCBvdXQgbXkgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY0MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMDoxNC44NTcwNzQyOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2llZWU4MDIxNTQvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgU2llbWVucyBBR1xcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHRcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuICAxMDpcXHRcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvY2ZnODAyMTU0LmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3J0bmV0bGluay5oXFx1MDAzZVxcbiAgMTM6XFx0XFxuICAxNDpcXHQjaW5jbHVkZSBcXFwiaWVlZTgwMjE1NC5oXFxcIlxcbiAgMTU6XFx0I2luY2x1ZGUgXFxcIm5sODAyMTU0LmhcXFwiXFxuICAxNjpcXHQjaW5jbHVkZSBcXFwic3lzZnMuaFxcXCJcXG4gIDE3OlxcdCNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxuICAxODpcXHRcXG4gIDE5OlxcdC8qIG5hbWUgZm9yIHN5c2ZzLCAlZCBpcyBhcHBlbmRlZCAqL1xcbiAgMjA6XFx0I2RlZmluZSBQSFlfTkFNRSBcXFwicGh5XFxcIlxcbiAgMjE6XFx0XFxuICAyMjpcXHQvKiBSQ1UtcHJvdGVjdGVkIChhbmQgUlROTCBmb3Igd3JpdGVycykgKi9cXG4gIDIzOlxcdExJU1RfSEVBRChjZmc4MDIxNTRfcmRldl9saXN0KTtcXG4gIDI0OlxcdGludCBjZmc4MDIxNTRfcmRldl9saXN0X2dlbmVyYXRpb247XFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0cnVjdCB3cGFuX3BoeSAqd3Bhbl9waHlfZmluZChjb25zdCBjaGFyICpzdHIpXFxuICAyNzpcXHR7XFxuICAyODpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdGlmIChXQVJOX09OKCFzdHIpKVxcbiAgMzE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdGRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlX2J5X25hbWUoXFx1MDAyNndwYW5fcGh5X2NsYXNzLCBzdHIpO1xcbiAgMzQ6XFx0XFx0aWYgKCFkZXYpXFxuICAzNTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB3cGFuX3BoeSwgZGV2KTtcXG4gIDM4OlxcdH1cXG4gIDM5OlxcdEVYUE9SVF9TWU1CT0wod3Bhbl9waHlfZmluZCk7XFxuICA0MDpcXHRcXG4gIDQxOlxcdHN0cnVjdCB3cGFuX3BoeV9pdGVyX2RhdGEge1xcbiAgNDI6XFx0XFx0aW50ICgqZm4pKHN0cnVjdCB3cGFuX3BoeSAqcGh5LCB2b2lkICpkYXRhKTtcXG4gIDQzOlxcdFxcdHZvaWQgKmRhdGE7XFxuICA0NDpcXHR9O1xcbiAgNDU6XFx0XFxuICA0NjpcXHRzdGF0aWMgaW50IHdwYW5fcGh5X2l0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpfZGF0YSlcXG4gIDQ3OlxcdHtcXG4gIDQ4OlxcdFxcdHN0cnVjdCB3cGFuX3BoeV9pdGVyX2RhdGEgKndwaWQgPSBfZGF0YTtcXG4gIDQ5OlxcdFxcdHN0cnVjdCB3cGFuX3BoeSAqcGh5ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHdwYW5fcGh5LCBkZXYpO1xcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHRyZXR1cm4gd3BpZC1cXHUwMDNlZm4ocGh5LCB3cGlkLVxcdTAwM2VkYXRhKTtcXG4gIDUyOlxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0aW50IHdwYW5fcGh5X2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSwgdm9pZCAqZGF0YSksXFxuICA1NTpcXHRcXHRcXHQgICAgICB2b2lkICpkYXRhKVxcbiAgNTY6XFx0e1xcbiAgNTc6XFx0XFx0c3RydWN0IHdwYW5fcGh5X2l0ZXJfZGF0YSB3cGlkID0ge1xcbiAgNTg6XFx0XFx0XFx0LmZuID0gZm4sXFxuICA1OTpcXHRcXHRcXHQuZGF0YSA9IGRhdGEsXFxuICA2MDpcXHRcXHR9O1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRyZXR1cm4gY2xhc3NfZm9yX2VhY2hfZGV2aWNlKFxcdTAwMjZ3cGFuX3BoeV9jbGFzcywgTlVMTCxcXG4gIDYzOlxcdFxcdFxcdFxcdFxcdTAwMjZ3cGlkLCB3cGFuX3BoeV9pdGVyKTtcXG4gIDY0OlxcdH1cXG4gIDY1OlxcdEVYUE9SVF9TWU1CT0wod3Bhbl9waHlfZm9yX2VhY2gpO1xcbiAgNjY6XFx0XFxuICA2NzpcXHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpcXG4gIDY4OlxcdGNmZzgwMjE1NF9yZGV2X2J5X3dwYW5fcGh5X2lkeChpbnQgd3Bhbl9waHlfaWR4KVxcbiAgNjk6XFx0e1xcbiAgNzA6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmVzdWx0ID0gTlVMTCwgKnJkZXY7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgXFx1MDAyNmNmZzgwMjE1NF9yZGV2X2xpc3QsIGxpc3QpIHtcXG4gIDc1OlxcdFxcdFxcdGlmIChyZGV2LVxcdTAwM2V3cGFuX3BoeV9pZHggPT0gd3Bhbl9waHlfaWR4KSB7XFxuICA3NjpcXHRcXHRcXHRcXHRyZXN1bHQgPSByZGV2O1xcbiAgNzc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA3ODpcXHRcXHRcXHR9XFxuICA3OTpcXHRcXHR9XFxuICA4MDpcXHRcXG4gIDgxOlxcdFxcdHJldHVybiByZXN1bHQ7XFxuICA4MjpcXHR9XFxuICA4MzpcXHRcXG4gIDg0OlxcdHN0cnVjdCB3cGFuX3BoeSAqd3Bhbl9waHlfaWR4X3RvX3dwYW5fcGh5KGludCB3cGFuX3BoeV9pZHgpXFxuICA4NTpcXHR7XFxuICA4NjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRyZGV2ID0gY2ZnODAyMTU0X3JkZXZfYnlfd3Bhbl9waHlfaWR4KHdwYW5fcGh5X2lkeCk7XFxuICA5MTpcXHRcXHRpZiAoIXJkZXYpXFxuICA5MjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDkzOlxcdFxcdHJldHVybiBcXHUwMDI2cmRldi1cXHUwMDNld3Bhbl9waHk7XFxuICA5NDpcXHR9XFxuICA5NTpcXHRcXG4gIDk2OlxcdHN0cnVjdCB3cGFuX3BoeSAqXFxuICA5NzpcXHR3cGFuX3BoeV9uZXcoY29uc3Qgc3RydWN0IGNmZzgwMjE1NF9vcHMgKm9wcywgc2l6ZV90IHByaXZfc2l6ZSlcXG4gIDk4OlxcdHtcXG4gIDk5OlxcdFxcdHN0YXRpYyBhdG9taWNfdCB3cGFuX3BoeV9jb3VudGVyID0gQVRPTUlDX0lOSVQoMCk7XFxuIDEwMDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMDoxNC44NTcyOTYwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzYxNjk2MTAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgaW4gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AsIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgIC0gTGluZXMgMzAwLTM2MCoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDMwMCB0byAzNjAgaW4gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AuIFRoaXMgc2VjdGlvbi4uLiBBaCwgaGVyZSB3ZSBhcmUuIE9rYXksIGFmdGVyIGEgcXVpY2sgc2tpbSwgdGhpcyBsb29rcyBsaWtlIGl04oCZcyBsaWtlbHkgaGFuZGxpbmcgdGhlIGNydWNpYWwgcG9ydGlvbiB3aGVyZSB0aGUgbG93ZXIgTUFDIGxheWVyIGludGVyYWN0cyB3aXRoIHRoZSB1cHBlciBsYXllcnMuIEkgc3VzcGVjdCB0aGlzIGlzIHdoZXJlIHRoZSAqcmVhbGx5KiBpbnRlcmVzdGluZyBzdHVmZiBpcyBoYXBwZW5pbmcg4oCTIHRoZSBoYW5kb2ZmIG9mIGEgcGFja2V0LCBwZXJoYXBzIHRoZSBtYW5hZ2VtZW50IG9mIEFDSyByZXF1ZXN0cywgb3IgcGVyaGFwcyBldmVuIGluaXRpYWwgZGF0YSBwcm9jZXNzaW5nIHVwb24gcmVjZWl2aW5nIGEgbmV3IHBhY2tldC5cblxuSeKAmW0gZ3Vlc3NpbmcgaXTigJlzIGRlYWxpbmcgd2l0aCBzb21lIGtleSBhc3BlY3RzIG9mIDgwMi4xNS40IGZyYW1lIHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24uIElzIGl0IGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIENTTUEtQ0EgbWVjaGFuaXNtPyBEb2VzIHRoaXMgY2h1bmsgb2YgY29kZSBpbmNsdWRlIHRoZSBsb2dpYyBmb3IgY2hhbm5lbCBhc3Nlc3NtZW50IHByaW9yIHRvIHRyYW5zbWlzc2lvbj8gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBmb3IgYW55IGNhbGxzIHRvIGZ1bmN0aW9ucyBsaWtlIGBpZWVlODAyMTU0X2dldF9jaGFubmVsYCBvciBwZXJoYXBzIGEgZnVuY3Rpb24gbmFtZWQgYGllZWU4MDIxNTRfY2NhYC4gXG5cbkxldCdzIGNhcmVmdWxseSBleGFtaW5lIHRoZSByZWdpc3RlciBhbmQgaW50ZXJydXB0IGhhbmRsaW5nLCBpZiBhbnkgaXMgcHJlc2VudCwgc2luY2UgdGhpcyBhcmVhIGhhcyB0aGUgcG90ZW50aWFsIHRvIGJlY29tZSBhIGJvdHRsZW5lY2sgZHVlIHRvIGludGVycnVwdCBvdmVyaGVhZC4gR2l2ZW4gdGhlIHRpbWluZyBjb25zdHJhaW50cyBpbmhlcmVudCBpbiA4MDIuMTUuNCwgdGhpcyBpcyBjcml0aWNhbC4gSSdtIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9uIG9mIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBmcmFtZSB0eXBlcywgbGlrZSBkYXRhIGZyYW1lcyB2ZXJzdXMgYmVhY29uIGZyYW1lcywgYXMgdGhpcyBjb3VsZCBoYXZlIGEgc2lnbmlmaWNhbnQgaW1wYWN0IG9uIHN5c3RlbSB0aHJvdWdocHV0IGFuZCBwb3dlciBjb25zdW1wdGlvbi4gTW9yZSBzcGVjaWZpY2FsbHksIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGFkZHJlc3MgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIGludGVyZmVyZW5jZSBvciBjb2xsaXNpb25zIG9uIHRoZSBtZWRpdW0uXG5cbkkgYWxzbyB3YW50IHRvIHNlZSB0aGUgZXJyb3IgY2hlY2tpbmcgaGFwcGVuaW5nIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IHRoZSBpbnRlZ3JpdHkgb2YgYSBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gTGV0J3Mgc2VlIGlmIHRoaXMgcGFydCBvZiB0aGUgY29kZSBwcm92aWRlcyBhbnkgY2x1ZXMgYWJvdXQgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIGJlaW5nIHVzZWQuIEFyZSB0aGVyZSBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgbWFuaXB1bGF0aW9ucz8gSWYgdGhlcmUgYXJlLCB0aGF0IHNob3VsZCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgZXhhY3QgcmFkaW8gY2hpcCBmYW1pbHkgdGhlIGRyaXZlcidzIGRlc2lnbmVkIGZvci4gVGltZSB0byBkaWcgaW4gYW5kIGNvbmZpcm0gdGhlc2UgZmlyc3QgaW1wcmVzc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTM2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMToxOC40NzQyNTk5MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2llZWU4MDIxNTQvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHRcXG4gMzMxOlxcdFxcdFxcdC8qIEl0IGlzIHBvc3NpYmxlIHRvIGdldCBORVRERVZfVU5SRUdJU1RFUlxcbiAzMzI6XFx0XFx0XFx0ICogbXVsdGlwbGUgdGltZXMuIFRvIGRldGVjdCB0aGF0LCBjaGVja1xcbiAzMzM6XFx0XFx0XFx0ICogdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHN0aWxsIG9uIHRoZSBsaXN0XFxuIDMzNDpcXHRcXHRcXHQgKiBvZiByZWdpc3RlcmVkIGludGVyZmFjZXMsIGFuZCBvbmx5IHRoZW5cXG4gMzM1OlxcdFxcdFxcdCAqIHJlbW92ZSBhbmQgY2xlYW4gaXQgdXAuXFxuIDMzNjpcXHRcXHRcXHQgKi9cXG4gMzM3OlxcdFxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2d3Bhbl9kZXYtXFx1MDAzZWxpc3QpKSB7XFxuIDMzODpcXHRcXHRcXHRcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNndwYW5fZGV2LVxcdTAwM2VsaXN0KTtcXG4gMzM5OlxcdFxcdFxcdFxcdHJkZXYtXFx1MDAzZWRldmxpc3RfZ2VuZXJhdGlvbisrO1xcbiAzNDA6XFx0XFx0XFx0fVxcbiAzNDE6XFx0XFx0XFx0Lyogc3luY2hyb25pemUgKHNvIHRoYXQgd2Ugd29uJ3QgZmluZCB0aGlzIG5ldGRldlxcbiAzNDI6XFx0XFx0XFx0ICogZnJvbSBvdGhlciBjb2RlIGFueSBtb3JlKSBhbmQgdGhlbiBjbGVhciB0aGUgbGlzdFxcbiAzNDM6XFx0XFx0XFx0ICogaGVhZCBzbyB0aGF0IHRoZSBhYm92ZSBjb2RlIGNhbiBzYWZlbHkgY2hlY2sgZm9yXFxuIDM0NDpcXHRcXHRcXHQgKiAhbGlzdF9lbXB0eSgpIHRvIGF2b2lkIGRvdWJsZS1jbGVhbnVwLlxcbiAzNDU6XFx0XFx0XFx0ICovXFxuIDM0NjpcXHRcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gMzQ3OlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ3cGFuX2Rldi1cXHUwMDNlbGlzdCk7XFxuIDM0ODpcXHRcXHRcXHRicmVhaztcXG4gMzQ5OlxcdFxcdGRlZmF1bHQ6XFxuIDM1MDpcXHRcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIDM1MTpcXHRcXHR9XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdHJldHVybiBOT1RJRllfT0s7XFxuIDM1NDpcXHR9XFxuIDM1NTpcXHRcXG4gMzU2OlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllciA9IHtcXG4gMzU3OlxcdFxcdC5ub3RpZmllcl9jYWxsID0gY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsLFxcbiAzNTg6XFx0fTtcXG4gMzU5OlxcdFxcbiAzNjA6XFx0c3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxNTRfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbiAzNjE6XFx0e1xcbiAzNjI6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcXG4gMzYzOlxcdFxcbiAzNjQ6XFx0XFx0cnRubF9sb2NrKCk7XFxuIDM2NTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsIFxcdTAwMjZjZmc4MDIxNTRfcmRldl9saXN0LCBsaXN0KSB7XFxuIDM2NjpcXHRcXHRcXHRpZiAobmV0X2VxKHdwYW5fcGh5X25ldChcXHUwMDI2cmRldi1cXHUwMDNld3Bhbl9waHkpLCBuZXQpKVxcbiAzNjc6XFx0XFx0XFx0XFx0Y2ZnODAyMTU0X3N3aXRjaF9uZXRucyhyZGV2LCBcXHUwMDI2aW5pdF9uZXQpO1xcbiAzNjg6XFx0XFx0fVxcbiAzNjk6XFx0XFx0cnRubF91bmxvY2soKTtcXG4gMzcwOlxcdH1cXG4gMzcxOlxcdFxcbiAzNzI6XFx0c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBjZmc4MDIxNTRfcGVybmV0X29wcyA9IHtcXG4gMzczOlxcdFxcdC5leGl0ID0gY2ZnODAyMTU0X3Blcm5ldF9leGl0LFxcbiAzNzQ6XFx0fTtcXG4gMzc1OlxcdFxcbiAzNzY6XFx0c3RhdGljIGludCBfX2luaXQgd3Bhbl9waHlfY2xhc3NfaW5pdCh2b2lkKVxcbiAzNzc6XFx0e1xcbiAzNzg6XFx0XFx0aW50IHJjO1xcbiAzNzk6XFx0XFxuIDM4MDpcXHRcXHRyYyA9IHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoXFx1MDAyNmNmZzgwMjE1NF9wZXJuZXRfb3BzKTtcXG4gMzgxOlxcdFxcdGlmIChyYylcXG4gMzgyOlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRyYyA9IHdwYW5fcGh5X3N5c2ZzX2luaXQoKTtcXG4gMzg1OlxcdFxcdGlmIChyYylcXG4gMzg2OlxcdFxcdFxcdGdvdG8gZXJyX3N5c2ZzO1xcbiAzODc6XFx0XFxuIDM4ODpcXHRcXHRyYyA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2Y2ZnODAyMTU0X25ldGRldl9ub3RpZmllcik7XFxuIDM4OTpcXHRcXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjIxOjE4LjQ3NDMzNzA1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjYwNTUyOTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgY2ZnODAyMTU0IE5ldGRldmljZSBOb3RpZmllcioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBob3cgYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgZ2V0cyB0cmlnZ2VyZWQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCdzIHRpZWQgdG8gYW55IG5ldGRldmljZSBldmVudCByZWxhdGVkIHRvIGEgV1BBTiAod2lyZWxlc3MgcGVyc29uYWwgYXJlYSBuZXR3b3JrKSBuZXRfZGV2aWNlLiBTbywgYW55dGhpbmcgdGhhdCBhZmZlY3RzIGEgV1BBTiBuZXRfZGV2aWNlIGlzIGdvaW5nIHRvIHRyaWdnZXIgdGhpcyBub3RpZmllci5cblxuU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgZXZlbnRzIGxpa2UgYWRkaW5nIGFuIGludGVyZmFjZSB1c2luZyBgaWVlZTgwMjE1NF9hZGRfaWZhY2VgLCBkZXZpY2UgcmVnaXN0cmF0aW9uLCBvciB0aGUgbmV0X2RldmljZSBzdGF0ZSBjaGFuZ2luZyBiZXR3ZWVuIFVQIGFuZCBET1dOLlxuXG5Ob3csIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgdG8gc2VlIHdoZXJlIHRoZXNlIHRyaWdnZXJpbmcgZnVuY3Rpb25zIGFjdHVhbGx5IGxpdmUuIExldCdzIGxvb2sgYXQgYGllZWU4MDIxNTRfYWRkX2lmYWNlYCwgZm9yIHN0YXJ0ZXJzLiBJIGFsc28gbmVlZCB0byBjb25zaWRlciBvdGhlciByZWxhdGVkIGZ1bmN0aW9uczogYG5sODAyMTU0X2FkZF9pZmFjZWAsIGBtYWM4MDIxNTRfd3Bhbl91cGRhdGVfbGxzZWNgLCBhbmQgb3RoZXJzIGluIHRoZSBzYW1lIHZlaW4uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG9vLlxuXG5UbyBtYWtlIHRoaXMgZWZmaWNpZW50LCBJIHNob3VsZCBiZSBhYmxlIHRvIHBlcmZvcm0gYSBzZWFyY2ggZm9yIGNvbnN0YW50cyBsaWtlIGBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDYCBhbmQgdGhlbiBsb29rIGZvciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyBzdWNoIGFzIGBpZWVlODAyMTU0X2FkZF9pZmFjZWAsIGBubDgwMjE1NF9hZGRfaW50ZXJmYWNlYCBvciBvdGhlcnMgdGhhdCBhcmUgcmVsZXZhbnQuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBwYXRod2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1ODYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMToyMS43MzQ4OTMyMjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODE1NTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJOTDgwMjE1NF9JRlRZUEVfVU5TUEVDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2llZWU4MDIxNTQvY29yZS5jPTI4OD1zdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L2llZWU4MDIxNTQvY29yZS5jLTI5OS1cXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmM6MzAwOlxcdFdBUk5fT04od3Bhbl9kZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKTtcXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmMtMzAxLVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYz05MjI9c3RhdGljIGludCBubDgwMjE1NF9uZXdfaW50ZXJmYWNlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTkyNC1cXHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYzo5MjU6XFx0ZW51bSBubDgwMjE1NF9pZnR5cGUgdHlwZSA9IE5MODAyMTU0X0lGVFlQRV9VTlNQRUM7XFxubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYy05MjYtXFx0X19sZTY0IGV4dGVuZGVkX2FkZHIgPSBjcHVfdG9fbGU2NCgweDAwMDAwMDAwMDAwMDAwMDBVTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMToyMi4zNzMwNTMzNDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExNDE4MjAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIDgwMi4xNS40IE5ldHdvcmsgTGF5ZXIgQ29kZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgSUVFRSA4MDIuMTUuNCBuZXR3b3JrIGxheWVyIGltcGxlbWVudGF0aW9uLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZSBpc3N1ZSBtaWdodCBiZSBjZW50ZXJlZCBhcm91bmQgYSBzcGVjaWZpYyBzZWN0aW9uIG9mIGNvZGUsIGxpa2VseSByZWxhdGVkIHRvIGEgcmVjZW50IGJ1ZyByZXBvcnQgb3Igb2JzZXJ2ZWQgYmVoYXZpb3IuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoYXQgbGluZSA5MjIgd2l0aGluIHRoZSBgbmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuY2AgZmlsZSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbGwgYmVnaW4gYnkgZXhhbWluaW5nIHRoYXQgcGFydGljdWxhciBhcmVhLCBhbmQgYXNzZXNzIHRoZSBzdXJyb3VuZGluZyBsaW5lcy4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBpbml0aWFsIGRpcmVjdGlvbiB0byB0YWtlOyBJJ2xsIHN0YXJ0IHdpdGggdGhpcyBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MTEsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMToyNC40ODcyMzc5MjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pZWVlODAyMTU0L25sODAyMTU0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTIwOlxcdH1cXG4gOTIxOlxcdFxcbiA5MjI6XFx0c3RhdGljIGludCBubDgwMjE1NF9uZXdfaW50ZXJmYWNlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIDkyMzpcXHR7XFxuIDkyNDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuIDkyNTpcXHRcXHRlbnVtIG5sODAyMTU0X2lmdHlwZSB0eXBlID0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQztcXG4gOTI2OlxcdFxcdF9fbGU2NCBleHRlbmRlZF9hZGRyID0gY3B1X3RvX2xlNjQoMHgwMDAwMDAwMDAwMDAwMDAwVUxMKTtcXG4gOTI3OlxcdFxcbiA5Mjg6XFx0XFx0LyogVE9ETyBhdm9pZCBmYWlsaW5nIGEgbmV3IGludGVyZmFjZVxcbiA5Mjk6XFx0XFx0ICogY3JlYXRpb24gZHVlIHRvIHBlbmRpbmcgcmVtb3ZhbD9cXG4gOTMwOlxcdFxcdCAqL1xcbiA5MzE6XFx0XFxuIDkzMjpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTU0X0FUVFJfSUZOQU1FXSlcXG4gOTMzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA5MzQ6XFx0XFxuIDkzNTpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxNTRfQVRUUl9JRlRZUEVdKSB7XFxuIDkzNjpcXHRcXHRcXHR0eXBlID0gbmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxNTRfQVRUUl9JRlRZUEVdKTtcXG4gOTM3OlxcdFxcdFxcdGlmICh0eXBlIFxcdTAwM2UgTkw4MDIxNTRfSUZUWVBFX01BWCB8fFxcbiA5Mzg6XFx0XFx0XFx0ICAgICEocmRldi1cXHUwMDNld3Bhbl9waHkuc3VwcG9ydGVkLmlmdHlwZXMgXFx1MDAyNiBCSVQodHlwZSkpKVxcbiA5Mzk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk0MDpcXHRcXHR9XFxuIDk0MTpcXHRcXG4gOTQyOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjE1NF9BVFRSX0VYVEVOREVEX0FERFJdKVxcbiA5NDM6XFx0XFx0XFx0ZXh0ZW5kZWRfYWRkciA9IG5sYV9nZXRfbGU2NChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjE1NF9BVFRSX0VYVEVOREVEX0FERFJdKTtcXG4gOTQ0OlxcdFxcbiA5NDU6XFx0XFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWFkZF92aXJ0dWFsX2ludGYpXFxuIDk0NjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDk0NzpcXHRcXG4gOTQ4OlxcdFxcdHJldHVybiByZGV2X2FkZF92aXJ0dWFsX2ludGYocmRldixcXG4gOTQ5OlxcdFxcdFxcdFxcdFxcdCAgICAgbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxNTRfQVRUUl9JRk5BTUVdKSxcXG4gOTUwOlxcdFxcdFxcdFxcdFxcdCAgICAgTkVUX05BTUVfVVNFUiwgdHlwZSwgZXh0ZW5kZWRfYWRkcik7XFxuIDk1MTpcXHR9XFxuIDk1MjpcXHRcXG4gOTUzOlxcdHN0YXRpYyBpbnQgbmw4MDIxNTRfZGVsX2ludGVyZmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiA5NTQ6XFx0e1xcbiA5NTU6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzBdO1xcbiA5NTY6XFx0XFx0c3RydWN0IHdwYW5fZGV2ICp3cGFuX2RldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbiA5NTc6XFx0XFxuIDk1ODpcXHRcXHRpZiAoIXJkZXYtXFx1MDAzZW9wcy1cXHUwMDNlZGVsX3ZpcnR1YWxfaW50ZilcXG4gOTU5OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjE6MjQuNDg3Mzc1MzI0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNzcyMTU2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQSBCdWcgaW4gdGhlIDgwMi4xNS40IE5ldGxpbmsgSW50ZXJmYWNlIENyZWF0aW9uKipcblxuT2theSwgc28gaGVyZSdzIHdoYXQgSSdtIHNlZWluZyBpbiBgbmw4MDIxNTRfbmV3X2ludGVyZmFjZWAuIElmIHRoZSBOZXRsaW5rIHJlcXVlc3QgKmRvZXNuJ3QqIHNwZWNpZnkgYW4gaW50ZXJmYWNlIHR5cGUsIHdoaWNoIGlzIHBlcmZlY3RseSB2YWxpZCwgdGhlIGNvZGUgZGVmYXVsdHMgdGhlIHR5cGUgdG8gYE5MODAyMTU0X0lGVFlQRV9VTlNQRUNgLiBObyByZWQgZmxhZ3MgdGhlcmUsIGl0IHNlZW1zIHJlYXNvbmFibGUuIFRoZSBwcm9ibGVtIGFyaXNlcyBiZWNhdXNlIGByZGV2X2FkZF92aXJ0dWFsX2ludGZgIHRoZW4gY3JlYXRlcyB0aGUgdmlydHVhbCBpbnRlcmZhY2Ugd2l0aCB0aGlzICp1bnNwZWNpZmllZCogdHlwZS4gRmluZSBzbyBmYXIuXG5cbk5vdywgaGVyZSdzIHdoZXJlIGl0IGJpdGVzIHVzLiBXaGVuIHRoaXMgaW50ZXJmYWNlIGlzIHJlZ2lzdGVyZWQgYW5kIHN0YXJ0cyByZWNlaXZpbmcgbm90aWZpZXIgZXZlbnRzLCBgd3Bhbl9kZXYtXHUwMDNlaWZ0eXBlYCBpcyBzdGlsbCwgYW5kIGluY29ycmVjdGx5LCBgTkw4MDIxNTRfSUZUWVBFX1VOU1BFQ2AuIEFuZCBoZXJlJ3MgdGhlIGtpY2tlcjogdGhhdCB0cmlnZ2VycyB0aGUgYFdBUk5fT05gIHRoYXQgd2FzIGp1c3QgYWRkZWQuIEl0J3MgYSB0ZXh0Ym9vayBpbnZhcmlhbnQgdmlvbGF0aW9uLCByaXBlIGZvciBmdXp6aW5nIHRvIGV4cGxvaXQgZGlyZWN0bHkuIENsYXNzaWMuXG5cblNvLCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnLCBwcm9iYWJseSBlYXN5IHRvIHJlcHJvZHVjZSwgYW5kIGxpa2VseSB0byBiZSBtaXNzZWQgaW4gbWFudWFsIHRlc3RpbmcuIFdlJ3ZlIGdvdCBhIGRlZmF1bHQgb2YgYE5MODAyMTU0X0lGVFlQRV9VTlNQRUNgIG5vdCBiZWluZyBwcm9wZXJseSBoYW5kbGVkIGFmdGVyIHRoZSBpbnRlcmZhY2UgaXMgY3JlYXRlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgd2UgY2FuIGJ1aWxkIGFuZCB0ZXN0IHRoaXMgcXVpY2tseS4gTGV0IG1lIGdvIGNoZWNrIGBuZXQvaWVlZTgwMjE1NC9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBleGVyY2lzZSB0aGlzIGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1MTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMToyNy43NjQ1OTM0MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaWVlZTgwMjE1NC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai0kKENPTkZJR19JRUVFODAyMTU0KSArPSBpZWVlODAyMTU0Lm9cXG4gICAzOlxcdG9iai0kKENPTkZJR19JRUVFODAyMTU0X1NPQ0tFVCkgKz0gaWVlZTgwMjE1NF9zb2NrZXQub1xcbiAgIDQ6XFx0b2JqLXkgKz0gNmxvd3Bhbi9cXG4gICA1OlxcdFxcbiAgIDY6XFx0aWVlZTgwMjE1NC15IDo9IG5ldGxpbmsubyBubC1tYWMubyBubC1waHkubyBubF9wb2xpY3kubyBjb3JlLm8gXFxcXFxcbiAgIDc6XFx0ICAgICAgICAgICAgICAgIGhlYWRlcl9vcHMubyBzeXNmcy5vIG5sODAyMTU0Lm8gdHJhY2UubyBwYW4ub1xcbiAgIDg6XFx0aWVlZTgwMjE1NF9zb2NrZXQteSA6PSBzb2NrZXQub1xcbiAgIDk6XFx0XFxuICAxMDpcXHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMToyNy43NjQ2ODg3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDk5MzE5NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSA4MDIuMTUuNCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIDgwMi4xNS40IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBGaXJzdCwgbGV0J3MgbWFrZSBzdXJlIGBDT05GSUdfSUVFRTgwMjE1NGAgaXMgZW5hYmxlZCwgb2J2aW91c2x5LiBUaGVuLCBJIG5lZWQgdG8gbG9vayBpbnRvIHdoZXRoZXIgd2UncmUgdXNpbmcgZXhwZXJpbWVudGFsIG5sODAyMTU0IHN1cHBvcnQsIHNvIGBDT05GSUdfSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxgIG5lZWRzIGEgbG9vay4gT3IsIGlzIGl0IGEgc3RyYWlnaHQgYENPTkZJR19NQUM4MDIxNTRgIGNvbmZpZ3VyYXRpb24/IE9yIGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBmYWtlIGxvdy1iYW5kd2lkdGggc2l0dWF0aW9uIHdpdGggYENPTkZJR19JRUVFODAyMTU0X0ZBS0VMQmAgb3IgZXZlbiB1c2luZyBgQ09ORklHX0lFRUU4MDIxNTRfSFdTSU1gPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBvbmUncyBpbiBwbGF5LlxuXG5OZXh0IHN0ZXA6IGNyb3NzLXJlZmVyZW5jZSB0aGVzZSBLY29uZmlnIGZpbGVzIHRvIHNlZSB3aGVyZSB0aGVzZSBzZXR0aW5ncyBhcmUgYmVpbmcgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGJvdGggYG5ldC9tYWM4MDIxNTQvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWdgIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3aGF0IHRoZXNlIHNldHRpbmdzIGFjdHVhbGx5IGRvLiBHb3R0YSBnZXQgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBwb3NzaWJsZSBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzMjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTozMC44NjQwMTA3NjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODE0MTEzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxNTRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjE1NC9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjE1NFxcbm5ldC9tYWM4MDIxNTQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjE1LjQgU29mdCBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxNTQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTozMC45NzIxNTc1ODFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwNzQyODU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQUMgODAyLjE1LjQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTUFDIDgwMi4xNS40IGxheWVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgbmV0L21hYzgwMjE1NC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciBhbGwgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLCB0aGUga25vYnMgYW5kIGRpYWxzIHRoYXQgY29udHJvbCBob3cgdGhpcyBzcGVjaWZpYyBNQUMgaW1wbGVtZW50YXRpb24gYmVoYXZlcy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCBpdHMgY29udGVudCwgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgZ3JvdXBlZC4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIGN1c3RvbWl6YXRpb24gcG9pbnRzLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZW0sIHdoYXQgaW1wYWN0cyB3aGF0LCBhbmQgYWxzbyBsb29rIGZvciBpbnRlcmVzdGluZywgcG90ZW50aWFsbHkgb2JzY3VyZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIHVzZWZ1bCB0byBrbm93LiBJdOKAmXMgYSBjcnVjaWFsIHN0ZXAgYmVmb3JlIEkgY2FuIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4NDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTozMy4yNzk1ODkwMDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjE1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTU0XFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xNS40IFNvZnQgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTU0KVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NFxcbiAgIDU6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NDTVxcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19DVFJcXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjE1LjRcXG4gIDEzOlxcdFxcdCAgbmV0d29ya2luZyBzdGFjayBmb3IgU29mdE1BQyBkZXZpY2VzICh0aGUgb25lcyBpbXBsZW1lbnRpbmdcXG4gIDE0OlxcdFxcdCAgb25seSBQSFkgbGV2ZWwgb2YgSUVFRSA4MDIuMTUuNCBzdGFuZGFyZCkuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgTm90ZTogdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBuZWl0aGVyIGNlcnRpZmllZCwgbm9yIGZlYXR1cmVcXG4gIDE3OlxcdFxcdCAgY29tcGxldGUhIENvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgaGFzbid0XFxuICAxODpcXHRcXHQgIGJlZW4gdGVzdGVkIHlldCFcXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBJZiB5b3UgcGxhbiB0byB1c2UgSGFyZE1BQyBJRUVFIDgwMi4xNS40IGRldmljZXMsIHlvdSBjYW5cXG4gIDIxOlxcdFxcdCAgc2F5IE4gaGVyZS4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHNheSBNIHRvIGNvbXBpbGUgaXQgYXNcXG4gIDIyOlxcdFxcdCAgbW9kdWxlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTozMy4yNzk2NTA0MjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4MjYyMTM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqS2NvbmZpZyBEaXZlIFRpbWUhKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgSUVFRSA4MDIuMTUuNCBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgaGVhcnQgb2YgYW55IGdvb2Qga2VybmVsIG1vZHVsZSBjb25maWd1cmF0aW9uOiB0aGUgYEtjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGhlYWRpbmcgc3RyYWlnaHQgdG8gYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBlc3NlbnRpYWwgYnVpbGQtdGltZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBJRUVFIDgwMi4xNS40IG5ldHdvcmtpbmcgc3RhY2sgYXJlIGRlZmluZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhpbmdzIGxpa2UgZW5hYmxpbmcgYW5kIGRpc2FibGluZyB2YXJpb3VzIFBIWSBsYXllcnMsIE1BQyBwcm90b2NvbHMsIHN1cHBvcnRlZCBoYXJkd2FyZSBwbGF0Zm9ybXMsIGRlYnVnIG9wdGlvbnMsIGFuZCBtYXliZSBldmVuIHNvbWUgcGVyZm9ybWFuY2UtdHVuaW5nIHBhcmFtZXRlcnMgaW4gaGVyZS4gSSdtIGhvcGluZyBJIGNhbiBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIHRoaXMgZHJpdmVyLiBGcm9tIGhlcmUgSSBjYW4gc2VlIHdoYXQgSSBjYW4gYnVpbGQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQ0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTozNS42NjIyNzQ0NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBJRUVFODAyMTU0X0RSSVZFUlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJRUVFIDgwMi4xNS40IGRyaXZlcnNcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXFx1MDAyNlxcdTAwMjYgSUVFRTgwMjE1NFxcbiAgIDU6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciBJRUVFIDgwMi4xNS40IExvdy1SYXRlXFxuICAgODpcXHRcXHQgIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29yayBkZXZpY2UgZHJpdmVycy4gVGhpcyBvcHRpb24gYWxvbmVcXG4gICA5OlxcdFxcdCAgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXFxuICAxMjpcXHRcXHQgIGRpc2FibGVkLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgSUVFRTgwMjE1NF9GQUtFTEJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjE1NFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjE1LjQgbG9vcGJhY2sgZHJpdmVyXFxcIlxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgZmFrZSBkcml2ZXIgdGhhdCBjYW4gZW11bGF0ZSBhIG5ldFxcbiAgMTk6XFx0XFx0ICBvZiBzZXZlcmFsIGludGVyY29ubmVjdGVkIHJhZGlvIGRldmljZXMuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvIHNheSBNIGhlcmUuXFxuICAyMjpcXHRcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJ2Zha2VsYicuXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBJRUVFODAyMTU0X0FUODZSRjIzMFxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiQVQ4NlJGMjMwLzIzMS8yMzMvMjEyIHRyYW5zY2VpdmVyIGRyaXZlclxcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gU1BJXFxuICAyODpcXHRcXHRzZWxlY3QgUkVHTUFQX1NQSVxcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgYXQ4NnJmMjMwLzIzMS8yMzMvMjEyIFNQSSA4MDIuMTUuNCB3aXJlbGVzc1xcbiAgMzE6XFx0XFx0ICBjb250cm9sbGVyLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUbyBkbyBzbywgc2F5IE0gaGVyZS5cXG4gIDM0OlxcdFxcdCAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAnYXQ4NnJmMjMwJy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIElFRUU4MDIxNTRfTVJGMjRKNDBcXG4gIDM3OlxcdFxcdHRyaXN0YXRlIFxcXCJNaWNyb2NoaXAgTVJGMjRKNDAgdHJhbnNjZWl2ZXIgZHJpdmVyXFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIFNQSVxcbiAgNDA6XFx0XFx0c2VsZWN0IFJFR01BUF9TUElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjE6MzUuNjYyMzg1NTk2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODI3NDYyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIGludG8gdGhpcyBgaWVlZTgwMjE1NGAgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEkgd2FzIGZvY3VzaW5nIG9uIHNvbWV0aGluZyBlbHNlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSByZWxhdGVkIHRvIGhhcmR3YXJlIHNpbXVsYXRpb24sIGBJRUVFODAyMTU0X0hXU0lNYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoYXQgcGFydGljdWxhciBmaWxlLCBgZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnYCwgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgcHJvcGVybHkgYW5kIHRoZXJlIGFyZW4ndCBhbnkgb2J2aW91cyByZWQgZmxhZ3MgSSd2ZSBtaXNzZWQuIEl04oCZcyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaCB3aXRoIHRoZSBjb25maWdzLCBjb25zaWRlcmluZyBkZXBlbmRlbmNpZXMgYW5kIG5vdCBqdXN0IHRoZSBjdXJyZW50IGZvY3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzM4NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjE6MzcuNzQ1MTM1NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdGNvbmZpZyBJRUVFODAyMTU0X0NBODIxMFxcbiAgODE6XFx0XFx0dHJpc3RhdGUgXFxcIkNhc2NvZGEgQ0E4MjEwIHRyYW5zY2VpdmVyIGRyaXZlclxcXCJcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjE1NFxcbiAgODM6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuICA4NDpcXHRcXHRkZXBlbmRzIG9uIFNQSVxcbiAgODU6XFx0XFx0aGVscFxcbiAgODY6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgQ0E4MjEwIFNQSSA4MDIuMTUuNCB3aXJlbGVzc1xcbiAgODc6XFx0XFx0ICBjb250cm9sbGVyLlxcbiAgODg6XFx0XFxuICA4OTpcXHRcXHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUbyBkbyBzbywgc2F5IE0gaGVyZS5cXG4gIDkwOlxcdFxcdCAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAnY2E4MjEwJy5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIElFRUU4MDIxNTRfQ0E4MjEwX0RFQlVHRlNcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIkNBODIxMCBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG4gIDk0OlxcdFxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9DQTgyMTBcXG4gIDk1OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfRlNcXG4gIDk2OlxcdFxcdGhlbHBcXG4gIDk3OlxcdFxcdCAgVGhpcyBvcHRpb24gY29tcGlsZXMgZGVidWdmcyBjb2RlIGZvciB0aGUgY2E4MjEwIGRyaXZlci4gVGhpc1xcbiAgOTg6XFx0XFx0ICBleHBvc2VzIGEgZGVidWdmcyBub2RlIGZvciBlYWNoIENBODIxMCBpbnN0YW5jZSB3aGljaCBhbGxvd3NcXG4gIDk5OlxcdFxcdCAgZGlyZWN0IHVzZSBvZiB0aGUgQ2FzY29kYSBBUEksIGV4cG9zaW5nIHRoZSA4MDIuMTUuNCBNQUNcXG4gMTAwOlxcdFxcdCAgbWFuYWdlbWVudCBlbnRpdGllcy5cXG4gMTAxOlxcdFxcbiAxMDI6XFx0Y29uZmlnIElFRUU4MDIxNTRfTUNSMjBBXFxuIDEwMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTUNSMjBBIHRyYW5zY2VpdmVyIGRyaXZlclxcXCJcXG4gMTA0OlxcdFxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuIDEwNTpcXHRcXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxNTRcXG4gMTA2OlxcdFxcdGRlcGVuZHMgb24gU1BJXFxuIDEwNzpcXHRcXHRoZWxwXFxuIDEwODpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBNQ1IyMEEgU1BJIDgwMi4xNS40IHdpcmVsZXNzXFxuIDEwOTpcXHRcXHQgIGNvbnRyb2xsZXIuXFxuIDExMDpcXHRcXG4gMTExOlxcdFxcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvLCBzYXkgTSBoZXJlLlxcbiAxMTI6XFx0XFx0ICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkICdtY3IyMGEnLlxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgSUVFRTgwMjE1NF9IV1NJTVxcbiAxMTU6XFx0XFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuIDExNjpcXHRcXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTU0XFxcIlxcbiAxMTc6XFx0XFx0aGVscFxcbiAxMTg6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuIDExOTpcXHRcXHQgIElFRUUgODAyLjE1LjQgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTU0KSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTozNy43NDUyNDcwNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODU1Mzk0Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBJRUVFIDgwMi4xNS40IE5ldGRldiBOb3RpZmllcioqXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB0aGlzIGZ1enppbmcgdGFyZ2V0LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBgSUVFRTgwMjE1NGAgY29uZmlndXJhdGlvbiDigJMgdGhhdCdzIHRoZSBwcmltYXJ5IGRyaXZlciwgY29uZmlybWVkIGJ5IGNoZWNraW5nIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgLiBBZGRpdGlvbmFsbHksIGBNQUM4MDIxNTRgLCBgSUVFRTgwMjE1NF9GQUtFTEJgLCBgSUVFRTgwMjE1NF9IV1NJTWAsIG9yIGV2ZW4gYElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMYCBjb3VsZCBiZSByZWxldmFudCwgc28gSSdsbCBrZWVwIHRob3NlIGluIG1pbmQgYXMgcG90ZW50aWFsIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAuIEhvd2V2ZXIsIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgdHJpZ2dlcmVkIGJ5IGludGVyZmFjZSBjcmVhdGlvbiBvciBkZWxldGlvbi4gQWZ0ZXIgY2hlY2tpbmcsIEkgc2VlIHRoZSBmb2xsb3dpbmcgYXMgbGlrZWx5IGVudHJ5IHBvaW50czogYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgKHRoZSBtb2RpZmllZCBmdW5jdGlvbiksIGBubDgwMjE1NF9uZXdfaW50ZXJmYWNlYCAod2hpY2ggY2FsbHMgYHJkZXZfYWRkX3ZpcnR1YWxfaW50ZmAgYW5kIGNvdWxkIHRyaWdnZXIgdGhlIG5vdGlmaWVyKSwgYG5sODAyMTU0X2RlbF9pbnRlcmZhY2VgLCBgaWVlZTgwMjE1NF9hZGRfaWZhY2VgIGFuZCBgaWVlZTgwMjE1NF9kZWxfaWZhY2VgLlxuXG5HaXZlbiB0aGF0IGBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxgIGlzIHRoZSBjZW50cmFsIGZpZ3VyZSwgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgYWNjZXNzaWJsZS4gSXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHN0YXRlLCB2b2lkICpwdHIpYC4gU2luY2UgaXQgaXMgc3RhdGljLCBpdCBpcyBzdGlsbCB2aXNpYmxlIGluIHRoZSB2bWxpbnV4IC8ga2FsbHN5bXMgc3ltYm9sIHRhYmxlLlxuXG5UaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBmb2N1cyBzeW1ib2xzIGFyZTogYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAsIGBubDgwMjE1NF9uZXdfaW50ZXJmYWNlYCwgYW5kIGBpZWVlODAyMTU0X2FkZF9pZmFjZWAuIEknbGwgd2FudCB0byB0YXJnZXQgdGhlc2UuXG5cblRvIHN1bW1hcml6ZSBhbmQgZG91YmxlLWNoZWNrLCBmdXp6aW5nIGlzIHdvcnRod2hpbGUgYmVjYXVzZSB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXNzZXJ0aW9uIChgV0FSTl9PTih3cGFuX2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQylgKSBhbmQgc2V0cyB0aGUgZGV2aWNlIHR5cGUgZHVyaW5nIGBORVRERVZfUE9TVF9JTklUYCB3aXRoaW4gdGhlIElFRUUgODAyLjE1LjQgbmV0ZGV2IG5vdGlmaWVyIGNhbGxiYWNrLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBJRUVFODAyMTU0YCAobWFuZGF0b3J5KSBhbmQgcG90ZW50aWFsbHkgYE1BQzgwMjE1NGAsIGBJRUVFODAyMTU0X0hXU0lNYCwgYElFRUU4MDIxNTRfRkFLRUxCYCwgYW5kIGBJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTGAuXG5cbkFscmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzIxLCJPdXRwdXRUb2tlbnMiOjI1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjIxOjQzLjYwMDY0NDYyOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTcxMjA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiTUFDODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTFwiLFxuICAgIFwiSUVFRTgwMjE1NF9GQUtFTEJcIixcbiAgICBcIklFRUU4MDIxNTRfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxcIixcbiAgICBcIm5sODAyMTU0X25ld19pbnRlcmZhY2VcIixcbiAgICBcImllZWU4MDIxNTRfYWRkX2lmYWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKCkgaW4gdGhlIElFRUUgODAyLjE1LjQgc3Vic3lzdGVtIHRvIHNldCBuZXRkZXYgZGV2aWNlIHR5cGUgb24gTkVUREVWX1BPU1RfSU5JVCBhbmQgYWRkcyBhIG5ldyBydW50aW1lIGFzc2VydGlvbiBXQVJOX09OKHdwYW5fZGV2LVxcdTAwM2VpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQykuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayAobmw4MDIxNTQvcnRuZXRsaW5rKSBpbnRlcmZhY2UgY3JlYXRpb24gYW5kIG5ldGRldiBsaWZlY3ljbGUgZXZlbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklFRUU4MDIxNTRcIixcbiAgICBcIk1BQzgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcIixcbiAgICBcIklFRUU4MDIxNTRfRkFLRUxCXCIsXG4gICAgXCJJRUVFODAyMTU0X0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsXCIsXG4gICAgXCJubDgwMjE1NF9uZXdfaW50ZXJmYWNlXCIsXG4gICAgXCJpZWVlODAyMTU0X2FkZF9pZmFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbCgpIGluIHRoZSBJRUVFIDgwMi4xNS40IHN1YnN5c3RlbSB0byBzZXQgbmV0ZGV2IGRldmljZSB0eXBlIG9uIE5FVERFVl9QT1NUX0lOSVQgYW5kIGFkZHMgYSBuZXcgcnVudGltZSBhc3NlcnRpb24gV0FSTl9PTih3cGFuX2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKG5sODAyMTU0L3J0bmV0bGluaykgaW50ZXJmYWNlIGNyZWF0aW9uIGFuZCBuZXRkZXYgbGlmZWN5Y2xlIGV2ZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjE6NDMuNzE2MzY2MDgxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI0MTcxNDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjIxOjQzLjcxNzE3MzAzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUyNDA5MDI2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzdGF0aWMgY29uc3QgZGV2aWNlX3R5cGUgc3RydWN0dXJlIChgd3Bhbl9kZXZfdHlwZWApLCBhIFdBUk5fT04gY2hlY2sgZm9yIHVuc3BlY2lmaWVkIGludGVyZmFjZSB0eXBlcywgYW5kIHNldHMgdGhlIG5ldGRldiBkZXZpY2UgdHlwZSBwb2ludGVyIGR1cmluZyBORVRERVZfUE9TVF9JTklUIG5vdGlmaWNhdGlvbi5cXG5cXG4xLiBObyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbjIuIFRoZSBgd3Bhbl9kZXZfdHlwZWAgc3RydWN0IGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgYXQgY29tcGlsZSB0aW1lLlxcbjMuIE5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGJ1ZmZlciBsZW5ndGhzL29mZnNldHMgYXJlIGFmZmVjdGVkLlxcbjQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQ7IHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGYxNWJkM2M5YTVjZWNiNDk3MmI2ZDEyZjdlZTYwYmY1Y2MwZTMxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MTk6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmMgYi9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcbmluZGV4IGMwYjg3MTIwMThhMTYuLmVjNWJmZGY2YmQzMWUgMTAwNjQ0XG4tLS0gYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcbisrKyBiL25ldC9pZWVlODAyMTU0L2NvcmUuY1xuQEAgLTI3Miw2ICsyNzIsMTAgQEAgdm9pZCBjZmc4MDIxNTRfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbiBcdGtmcmVlKHJkZXYpO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHdwYW5fZGV2X3R5cGUgPSB7XG4rXHQubmFtZVx0PSBcIndwYW5cIixcbit9O1xuK1xuIHN0YXRpYyB2b2lkXG4gY2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHQgICBpbnQgaWZ0eXBlLCBpbnQgbnVtKVxuQEAgLTI5MywxMCArMjk3LDEyIEBAIHN0YXRpYyBpbnQgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXG4gXHRyZGV2ID0gd3Bhbl9waHlfdG9fcmRldih3cGFuX2Rldi1cdTAwM2V3cGFuX3BoeSk7XG4gXG4tXHQvKiBUT0RPIFdBUk5fT04gdW5zcGVjIHR5cGUgKi9cbitcdFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xuIFxuIFx0c3dpdGNoIChzdGF0ZSkge1xuLVx0XHQvKiBUT0RPIE5FVERFVl9ERVZUWVBFICovXG4rXHRjYXNlIE5FVERFVl9QT1NUX0lOSVQ6XG4rXHRcdFNFVF9ORVRERVZfREVWVFlQRShkZXYsIFx1MDAyNndwYW5fZGV2X3R5cGUpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxuIFx0XHRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbiBcdFx0d3Bhbl9kZXYtXHUwMDNlaWRlbnRpZmllciA9ICsrcmRldi1cdTAwM2V3cGFuX2Rldl9pZDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjIxOjQzLjcxNzE3NDU3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNzMzMjUzODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSUVFRSA4MDIuMTUuNCBDb3JlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSB3aGF0J3MgY2hhbmdlZCBpbiBgbmV0L2llZWU4MDIxNTQvY29yZS5jYC4gRmlyc3QsIEknbSBub3RpbmcgdGhlIGRlZmluaXRpb24gb2YgYHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3Bhbl9kZXZfdHlwZSA9IHsgLm5hbWUgPSBcIndwYW5cIiB9O2AuIEVzc2VudGlhbGx5LCBpdCBlc3RhYmxpc2hlcyBhIHNwZWNpZmljIGRldmljZSB0eXBlIGZvciBXUEFOLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgY2xhcml0eSBhbmQgcG90ZW50aWFsIGZ1dHVyZSBlbmhhbmNlbWVudHMuXG5cblRoZW4sIHRoZXJlJ3MgYSBgV0FSTl9PTih3cGFuX2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQyk7YCBsaW5lIGFkZGVkIHdpdGhpbiBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYC4gVGhhdCdzIGEgc2FuaXR5IGNoZWNrOyBJJ20gYXNzdW1pbmcgaXQncyB0byBwcmV2ZW50IHVuZGVmaW5lZCBiZWhhdmlvciBieSBlbnN1cmluZyB0aGUgaW50ZXJmYWNlIHR5cGUgaXMgZXhwbGljaXRseSBzZXQgKmJlZm9yZSogdGhlIG5vdGlmaWNhdGlvbiBjYWxsLiBBIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLCBhbHRob3VnaCBJJ2Qgd2FudCB0byBjaGVjayB3aGVyZSBgd3Bhbl9kZXYtXHUwMDNlaWZ0eXBlYCBpcyBpbml0aWFsaXplZCB0byBjb25maXJtIGl0cyBuZWNlc3NpdHkuXG5cbkZpbmFsbHksIHRoZSBgTkVUREVWX1BPU1RfSU5JVGAgZXZlbnQgaW4gYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgbm93IGluY2x1ZGVzIGBTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcdTAwMjZ3cGFuX2Rldl90eXBlKTtgLiBUaGlzIGlzIHdoZXJlIHRoZSBkZWNsYXJlZCBgd3Bhbl9kZXZfdHlwZWAgY29tZXMgaW50byBwbGF5LiBJdCdzIHByb3Blcmx5IGFzc29jaWF0aW5nIHRoZSBuZXdseSBjcmVhdGVkIG5ldGRldiB3aXRoIHRoZSBXUEFOIGRldmljZSB0eXBlLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBhZnRlciBuZXRkZXYgaW5pdGlhbGl6YXRpb24sIHdl4oCZcmUgcHJvcGVybHkgbWFya2luZyBpdCBhcyBhIFdQQU4gdHlwZSBmb3IgdGhlIGtlcm5lbCdzIGRldmljZSBtYW5hZ2VtZW50LlxuXG5JJ2xsIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgYnV0IHRoZXNlIGNoYW5nZXMgc2VlbSBsb2dpY2FsIGFuZCwgb24gdGhlIHN1cmZhY2UsIHJlcHJlc2VudCBnb29kIHByYWN0aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjE6NTQuNDUwNDMxMTQxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaWVlZTgwMjE1NC9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdHZvaWQgY2ZnODAyMTU0X2Rldl9mcmVlKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpXFxuIDI3MTpcXHR7XFxuIDI3MjpcXHRcXHRrZnJlZShyZGV2KTtcXG4gMjczOlxcdH1cXG4gMjc0OlxcdFxcbiAyNzU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3cGFuX2Rldl90eXBlID0ge1xcbiAyNzY6XFx0XFx0Lm5hbWVcXHQ9IFxcXCJ3cGFuXFxcIixcXG4gMjc3OlxcdH07XFxuIDI3ODpcXHRcXG4gMjc5OlxcdHN0YXRpYyB2b2lkXFxuIDI4MDpcXHRjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiAyODE6XFx0XFx0XFx0XFx0ICAgaW50IGlmdHlwZSwgaW50IG51bSlcXG4gMjgyOlxcdHtcXG4gMjgzOlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuIDI4NDpcXHRcXG4gMjg1OlxcdFxcdHJkZXYtXFx1MDAzZW51bV9ydW5uaW5nX2lmYWNlcyArPSBudW07XFxuIDI4NjpcXHR9XFxuIDI4NzpcXHRcXG4gMjg4OlxcdHN0YXRpYyBpbnQgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuIDI4OTpcXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3RhdGUsIHZvaWQgKnB0cilcXG4gMjkwOlxcdHtcXG4gMjkxOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG4gMjkyOlxcdFxcdHN0cnVjdCB3cGFuX2RldiAqd3Bhbl9kZXYgPSBkZXYtXFx1MDAzZWllZWU4MDIxNTRfcHRyO1xcbiAyOTM6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcXG4gMjk0OlxcdFxcbiAyOTU6XFx0XFx0aWYgKCF3cGFuX2RldilcXG4gMjk2OlxcdFxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0cmRldiA9IHdwYW5fcGh5X3RvX3JkZXYod3Bhbl9kZXYtXFx1MDAzZXdwYW5fcGh5KTtcXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0V0FSTl9PTih3cGFuX2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuIDMwMzpcXHRcXHRjYXNlIE5FVERFVl9QT1NUX0lOSVQ6XFxuIDMwNDpcXHRcXHRcXHRTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcXHUwMDI2d3Bhbl9kZXZfdHlwZSk7XFxuIDMwNTpcXHRcXHRcXHRicmVhaztcXG4gMzA2OlxcdFxcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxcbiAzMDc6XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xcbiAzMDg6XFx0XFx0XFx0d3Bhbl9kZXYtXFx1MDAzZWlkZW50aWZpZXIgPSArK3JkZXYtXFx1MDAzZXdwYW5fZGV2X2lkO1xcbiAzMDk6XFx0XFx0XFx0bGlzdF9hZGRfcmN1KFxcdTAwMjZ3cGFuX2Rldi1cXHUwMDNlbGlzdCwgXFx1MDAyNnJkZXYtXFx1MDAzZXdwYW5fZGV2X2xpc3QpO1xcbiAzMTA6XFx0XFx0XFx0cmRldi1cXHUwMDNlZGV2bGlzdF9nZW5lcmF0aW9uKys7XFxuIDMxMTpcXHRcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZ3cGFuX2Rldi1cXHUwMDNlYXNzb2NpYXRpb25fbG9jayk7XFxuIDMxMjpcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2d3Bhbl9kZXYtXFx1MDAzZWNoaWxkcmVuKTtcXG4gMzEzOlxcdFxcdFxcdHdwYW5fZGV2LVxcdTAwM2VtYXhfYXNzb2NpYXRpb25zID0gU1pfMTZLO1xcbiAzMTQ6XFx0XFxuIDMxNTpcXHRcXHRcXHR3cGFuX2Rldi1cXHUwMDNlbmV0ZGV2ID0gZGV2O1xcbiAzMTY6XFx0XFx0XFx0YnJlYWs7XFxuIDMxNzpcXHRcXHRjYXNlIE5FVERFVl9ET1dOOlxcbiAzMTg6XFx0XFx0XFx0Y2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0ocmRldiwgd3Bhbl9kZXYtXFx1MDAzZWlmdHlwZSwgLTEpO1xcbiAzMTk6XFx0XFxuIDMyMDpcXHRcXHRcXHRyZGV2LVxcdTAwM2VvcGVuY291bnQtLTtcXG4gMzIxOlxcdFxcdFxcdHdha2VfdXAoXFx1MDAyNnJkZXYtXFx1MDAzZWRldl93YWl0KTtcXG4gMzIyOlxcdFxcdFxcdGJyZWFrO1xcbiAzMjM6XFx0XFx0Y2FzZSBORVRERVZfVVA6XFxuIDMyNDpcXHRcXHRcXHRjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShyZGV2LCB3cGFuX2Rldi1cXHUwMDNlaWZ0eXBlLCAxKTtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0XFx0cmRldi1cXHUwMDNlb3BlbmNvdW50Kys7XFxuIDMyNzpcXHRcXHRcXHRicmVhaztcXG4gMzI4OlxcdFxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxuIDMyOTpcXHRcXHRcXHRjZmc4MDIxNTRfZnJlZV9wZWVyX3N0cnVjdHVyZXMod3Bhbl9kZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTo1NC40NTA1NTg2MjFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUwNzQ5MzAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gncyBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgYHN0cnVjdCBkZXZpY2VfdHlwZWAgY2FsbGVkIGB3cGFuX2Rldl90eXBlYCBhcyBhIHN0YXRpYywgcmVhZC1vbmx5IHZhcmlhYmxlLiBObyBwcm9ibGVtIHRoZXJlLCBpdCdzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLiBUaGVuLCB3ZSBoYXZlIGEgYFdBUk5fT05gIHRoYXQgY2hlY2tzIGB3cGFuX2Rldi1cdTAwM2VpZnR5cGVgLiBBZ2FpbiwgdGhpcyBjaGVja3MgYW4gZXhpc3RpbmcsIGluaXRpYWxpemVkIGZpZWxkLiBGaW5hbGx5LCBgU0VUX05FVERFVl9ERVZUWVBFYCBpcyB1c2VkIHdoaWNoIGp1c3Qgc2V0cyBhIHBvaW50ZXIsIGBkZXYtXHUwMDNlZGV2LnR5cGVgLCB0byBvdXIgYHdwYW5fZGV2X3R5cGVgLlxuXG5NeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBsb29rcyBjbGVhbiwgYnV0IGxldCdzIGJlIG1ldGhvZGljYWwuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBhbGxvY2F0aW9ucyBvciBidWZmZXIgbWFuaXB1bGF0aW9ucyBpbnZvbHZlZC4gUmV2aWV3aW5nIHRoZSBjb2RlLCB0aGVyZSBhcmUgbm8gdXNlci1jb3B5IG9wZXJhdGlvbnMsIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBtZW1vcnksIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGJ1ZmZlcnMgaW4gYW55IHdheS4gTm8gbmV3IHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCB0aGF0IGFyZSB1bmluaXRpYWxpemVkIGFuZCBubyBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIGFyZSBtb2RpZmllZCB0aGF0IHdvdWxkIG1ha2UgdXMgc3VzcGVjdCBpdC4gU28sIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBXZSdyZSBzYWZlIG9uIHRoYXQgZnJvbnQuXG5cblRoZXJlZm9yZSwgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgc3VmZmljaWVudC4gSXQncyBhIGNsZWFyIGNhc2Ugd2hlcmUgS01TQU4ncyBkZWVwZXIgc2NydXRpbnkgaXNuJ3Qgd2FycmFudGVkLlxuXG5BbHJpZ2h0LCBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMuIFwiTmVlZHNLTVNBTjogVHJ1ZSBvbmx5IGlmIGNoYW5nZXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlwiIFRoYXQncyBhIHJlc291bmRpbmcgKmZhbHNlKiBpbiB0aGlzIGNhc2UuIFwiS01TQU5SZWFzb25pbmc6IFJlYXNvbmluZyBjb250cmFzdGluZyBLTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5LlwiIFBlcmZlY3QsIGFuZCB0aGF0J3MgcHJlY2lzZWx5IHdoYXQgSSd2ZSBwcm92aWRlZC4gTm93IEknbGwgZG9jdW1lbnQgbXkgcmVhc29uaW5nIGFuZCBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MTksIk91dHB1dFRva2VucyI6MTc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjE6NTguOTU4MDU0MTg3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3RhdGljIGNvbnN0IGRldmljZV90eXBlIHN0cnVjdHVyZSAoYHdwYW5fZGV2X3R5cGVgKSwgYSBXQVJOX09OIGNoZWNrIGZvciB1bnNwZWNpZmllZCBpbnRlcmZhY2UgdHlwZXMsIGFuZCBzZXRzIHRoZSBuZXRkZXYgZGV2aWNlIHR5cGUgcG9pbnRlciBkdXJpbmcgTkVUREVWX1BPU1RfSU5JVCBub3RpZmljYXRpb24uXFxuXFxuMS4gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4yLiBUaGUgYHdwYW5fZGV2X3R5cGVgIHN0cnVjdCBpcyBzdGF0aWNhbGx5IGRlZmluZWQgYW5kIGluaXRpYWxpemVkIGF0IGNvbXBpbGUgdGltZS5cXG4zLiBObyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBidWZmZXIgbGVuZ3Rocy9vZmZzZXRzIGFyZSBhZmZlY3RlZC5cXG40LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzdGF0aWMgY29uc3QgZGV2aWNlX3R5cGUgc3RydWN0dXJlIChgd3Bhbl9kZXZfdHlwZWApLCBhIFdBUk5fT04gY2hlY2sgZm9yIHVuc3BlY2lmaWVkIGludGVyZmFjZSB0eXBlcywgYW5kIHNldHMgdGhlIG5ldGRldiBkZXZpY2UgdHlwZSBwb2ludGVyIGR1cmluZyBORVRERVZfUE9TVF9JTklUIG5vdGlmaWNhdGlvbi5cXG5cXG4xLiBObyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbjIuIFRoZSBgd3Bhbl9kZXZfdHlwZWAgc3RydWN0IGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgYXQgY29tcGlsZSB0aW1lLlxcbjMuIE5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGJ1ZmZlciBsZW5ndGhzL29mZnNldHMgYXJlIGFmZmVjdGVkLlxcbjQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQ7IHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow2ffh5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 16:55:59 +0000 UTC FinishedAt: 2026-09-06 17:22:00 +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": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IEEE802154", "MAC802154", "IEEE802154_NL802154_EXPERIMENTAL", "IEEE802154_FAKELB", "IEEE802154_HWSIM" ], "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": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IEEE802154", "MAC802154", "IEEE802154_NL802154_EXPERIMENTAL", "IEEE802154_FAKELB", "IEEE802154_HWSIM" ], "series_id": "d7d2c900-d761-454a-960c-1664965121df" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "cfg802154_netdev_notifier_call", "nl802154_new_interface", "ieee802154_add_iface" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRkFLRUxCJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwmIzM0OywKICAgICYjMzQ7bmw4MDIxNTRfbmV3X2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTU0X2FkZF9pZmFjZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBzdGF0aWMgY29uc3QgZGV2aWNlX3R5cGUgc3RydWN0dXJlIChgd3Bhbl9kZXZfdHlwZWApLCBhIFdBUk5fT04gY2hlY2sgZm9yIHVuc3BlY2lmaWVkIGludGVyZmFjZSB0eXBlcywgYW5kIHNldHMgdGhlIG5ldGRldiBkZXZpY2UgdHlwZSBwb2ludGVyIGR1cmluZyBORVRERVZfUE9TVF9JTklUIG5vdGlmaWNhdGlvbi5cblxuMS4gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbjIuIFRoZSBgd3Bhbl9kZXZfdHlwZWAgc3RydWN0IGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgYXQgY29tcGlsZSB0aW1lLlxuMy4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgYnVmZmVyIGxlbmd0aHMvb2Zmc2V0cyBhcmUgYWZmZWN0ZWQuXG40LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKCkgaW4gdGhlIElFRUUgODAyLjE1LjQgc3Vic3lzdGVtIHRvIHNldCBuZXRkZXYgZGV2aWNlIHR5cGUgb24gTkVUREVWX1BPU1RfSU5JVCBhbmQgYWRkcyBhIG5ldyBydW50aW1lIGFzc2VydGlvbiBXQVJOX09OKHdwYW5fZGV2LVx1MDAzZWlmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChubDgwMjE1NC9ydG5ldGxpbmspIGludGVyZmFjZSBjcmVhdGlvbiBhbmQgbmV0ZGV2IGxpZmVjeWNsZSBldmVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZjE1YmQzYzlhNWNlY2I0OTcyYjZkMTJmN2VlNjBiZjVjYzBlMzEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNzoxOTo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmMgYi9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcbmluZGV4IGMwYjg3MTIwMThhMTYuLmVjNWJmZGY2YmQzMWUgMTAwNjQ0XG4tLS0gYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pZWVlODAyMTU0L2NvcmUuY1xuQEAgLTI3Miw2ICYjNDM7MjcyLDEwIEBAIHZvaWQgY2ZnODAyMTU0X2Rldl9mcmVlKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpXG4gXHRrZnJlZShyZGV2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3Bhbl9kZXZfdHlwZSA9IHtcbiYjNDM7XHQubmFtZVx0PSBcJiMzNDt3cGFuXCYjMzQ7LFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgdm9pZFxuIGNmZzgwMjE1NF91cGRhdGVfaWZhY2VfbnVtKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4gXHRcdFx0ICAgaW50IGlmdHlwZSwgaW50IG51bSlcbkBAIC0yOTMsMTAgJiM0MzsyOTcsMTIgQEAgc3RhdGljIGludCBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiBcbiBcdHJkZXYgPSB3cGFuX3BoeV90b19yZGV2KHdwYW5fZGV2LVx1MDAzZXdwYW5fcGh5KTtcbiBcbi1cdC8qIFRPRE8gV0FSTl9PTiB1bnNwZWMgdHlwZSAqL1xuJiM0MztcdFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xuIFxuIFx0c3dpdGNoIChzdGF0ZSkge1xuLVx0XHQvKiBUT0RPIE5FVERFVl9ERVZUWVBFICovXG4mIzQzO1x0Y2FzZSBORVRERVZfUE9TVF9JTklUOlxuJiM0MztcdFx0U0VUX05FVERFVl9ERVZUWVBFKGRldiwgXHUwMDI2d3Bhbl9kZXZfdHlwZSk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxuIFx0XHRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbiBcdFx0d3Bhbl9kZXYtXHUwMDNlaWRlbnRpZmllciA9ICYjNDM7JiM0MztyZGV2LVx1MDAzZXdwYW5fZGV2X2lkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRkFLRUxCJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwmIzM0OywKICAgICYjMzQ7bmw4MDIxNTRfbmV3X2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTU0X2FkZF9pZmFjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoKSBpbiB0aGUgSUVFRSA4MDIuMTUuNCBzdWJzeXN0ZW0gdG8gc2V0IG5ldGRldiBkZXZpY2UgdHlwZSBvbiBORVRERVZfUE9TVF9JTklUIGFuZCBhZGRzIGEgbmV3IHJ1bnRpbWUgYXNzZXJ0aW9uIFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKG5sODAyMTU0L3J0bmV0bGluaykgaW50ZXJmYWNlIGNyZWF0aW9uIGFuZCBuZXRkZXYgbGlmZWN5Y2xlIGV2ZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhmMTViZDNjOWE1Y2VjYjQ5NzJiNmQxMmY3ZWU2MGJmNWNjMGUzMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE3OjE5OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvY29yZS5jIGIvbmV0L2llZWU4MDIxNTQvY29yZS5jCmluZGV4IGMwYjg3MTIwMThhMTYuLmVjNWJmZGY2YmQzMWUgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWVlZTgwMjE1NC9jb3JlLmMKQEAgLTI3Miw2ICYjNDM7MjcyLDEwIEBAIHZvaWQgY2ZnODAyMTU0X2Rldl9mcmVlKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCiAJa2ZyZWUocmRldik7CiB9CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHdwYW5fZGV2X3R5cGUgPSB7CiYjNDM7CS5uYW1lCT0gJiMzNDt3cGFuJiMzNDssCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyB2b2lkCiBjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgaW50IGlmdHlwZSwgaW50IG51bSkKQEAgLTI5MywxMCAmIzQzOzI5NywxMiBAQCBzdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCiAJcmRldiA9IHdwYW5fcGh5X3RvX3JkZXYod3Bhbl9kZXYtJmd0O3dwYW5fcGh5KTsKIAotCS8qIFRPRE8gV0FSTl9PTiB1bnNwZWMgdHlwZSAqLwomIzQzOwlXQVJOX09OKHdwYW5fZGV2LSZndDtpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQyk7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7Ci0JCS8qIFRPRE8gTkVUREVWX0RFVlRZUEUgKi8KJiM0MzsJY2FzZSBORVRERVZfUE9TVF9JTklUOgomIzQzOwkJU0VUX05FVERFVl9ERVZUWVBFKGRldiwgJmFtcDt3cGFuX2Rldl90eXBlKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgogCQlkZXYtJmd0O25ldG5zX2ltbXV0YWJsZSA9IHRydWU7CiAJCXdwYW5fZGV2LSZndDtpZGVudGlmaWVyID0gJiM0MzsmIzQzO3JkZXYtJmd0O3dwYW5fZGV2X2lkOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTEyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSUVFRSA4MDIuMTUuNCBDb3JlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBkaWZmYCBpdHNlbGYuIEkgY2FuIHNlZSB0aGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AuIEhtbSwgYSBuZXcgYHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3Bhbl9kZXZfdHlwZWAgZGVmaW5pdGlvbiBpcyBpbnRyb2R1Y2VkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgZXN0YWJsaXNoaW5nIGEgc3BlY2lmaWMgZGV2aWNlIHR5cGUgZm9yIFdQQU4gZGV2aWNlcywgY2xlYXJseS4KClRoZW4sIEkgc2VlIHRoZSBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCBmdW5jdGlvbiBoYXMgYSBgTkVUREVWX1BPU1RfSU5JVGAgY2FzZSBhZGRlZCB0byB0aGUgc3dpdGNoIHN0YXRlbWVudCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgY29yZSBjaGFuZ2UgaW4gdGhlIHBhdGNoLiBOb3csIGluIHRoaXMgY2FzZSwgYFNFVF9ORVRERVZfREVWVFlQRShkZXYsICZhbXA7d3Bhbl9kZXZfdHlwZSlgIGlzIGNhbGxlZC4gU28sIHRoZSBgd3Bhbl9kZXZfdHlwZWAgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldHdvcmsgZGV2aWNlIGF0IHRoYXQgcG9pbnQuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgbmV3bHkgZGVmaW5lZCB0eXBlLgoKVGhlIGBXQVJOX09OYCBjaGVjayBmb3IgYE5MODAyMTU0X0lGVFlQRV9VTlNQRUNgIGlzIGEgZ29vZCBwcmFjdGljZS4gSXQgdmFsaWRhdGVzIGEgc3BlY2lmaWMgaW50ZXJmYWNlIHR5cGUsIHdoaWNoIGlzIGdvb2QuIEl0JiMzOTtzIGEgdXNlZnVsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlbiYjMzk7dCBsZWZ0IHVuZGVmaW5lZC4KCkkgc2hvdWxkIGFsc28gZ28gYWhlYWQgYW5kIGxvYWQgdXAgdGhlIGZpbGUgdG8gcmV2aWV3IGl0IG1vcmUgY2FyZWZ1bGx5IGFuZCBzZWUgaG93IHRoaXMgbmV3IGRldmljZSB0eXBlIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBleGlzdGluZyBjb2RlLiBBbHNvLCBJIHNob3VsZCBjaGVjayB0aGUgcmVsYXRlZCBLY29uZmlnIG9wdGlvbnMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBPdmVyYWxsLCBpdCBhcHBlYXJzIHRvIGJlIGEgcmVhc29uYWJsZSBhZGRpdGlvbiB0byBiZXR0ZXIgZGVmaW5lIHRoZSBkZXZpY2UgdHlwZSBmb3IgV1BBTiBkZXZpY2VzIHdpdGhpbiB0aGUgODAyLjE1LjQgY29yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0dm9pZCBjZmc4MDIxNTRfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbiAyNzE6XHR7XG4gMjcyOlx0XHRrZnJlZShyZGV2KTtcbiAyNzM6XHR9XG4gMjc0Olx0XG4gMjc1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3cGFuX2Rldl90eXBlID0ge1xuIDI3NjpcdFx0Lm5hbWVcdD0gXCYjMzQ7d3BhblwmIzM0OyxcbiAyNzc6XHR9O1xuIDI3ODpcdFxuIDI3OTpcdHN0YXRpYyB2b2lkXG4gMjgwOlx0Y2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiAyODE6XHRcdFx0XHQgICBpbnQgaWZ0eXBlLCBpbnQgbnVtKVxuIDI4MjpcdHtcbiAyODM6XHRcdEFTU0VSVF9SVE5MKCk7XG4gMjg0Olx0XG4gMjg1Olx0XHRyZGV2LVx1MDAzZW51bV9ydW5uaW5nX2lmYWNlcyAmIzQzOz0gbnVtO1xuIDI4NjpcdH1cbiAyODc6XHRcbiAyODg6XHRzdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIDI4OTpcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhdGUsIHZvaWQgKnB0cilcbiAyOTA6XHR7XG4gMjkxOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gMjkyOlx0XHRzdHJ1Y3Qgd3Bhbl9kZXYgKndwYW5fZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxNTRfcHRyO1xuIDI5MzpcdFx0c3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiAyOTQ6XHRcbiAyOTU6XHRcdGlmICghd3Bhbl9kZXYpXG4gMjk2Olx0XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiAyOTc6XHRcbiAyOTg6XHRcdHJkZXYgPSB3cGFuX3BoeV90b19yZGV2KHdwYW5fZGV2LVx1MDAzZXdwYW5fcGh5KTtcbiAyOTk6XHRcbiAzMDA6XHRcdFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xuIDMwMTpcdFxuIDMwMjpcdFx0c3dpdGNoIChzdGF0ZSkge1xuIDMwMzpcdFx0Y2FzZSBORVRERVZfUE9TVF9JTklUOlxuIDMwNDpcdFx0XHRTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcdTAwMjZ3cGFuX2Rldl90eXBlKTtcbiAzMDU6XHRcdFx0YnJlYWs7XG4gMzA2Olx0XHRjYXNlIE5FVERFVl9SRUdJU1RFUjpcbiAzMDc6XHRcdFx0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XG4gMzA4Olx0XHRcdHdwYW5fZGV2LVx1MDAzZWlkZW50aWZpZXIgPSAmIzQzOyYjNDM7cmRldi1cdTAwM2V3cGFuX2Rldl9pZDtcbiAzMDk6XHRcdFx0bGlzdF9hZGRfcmN1KFx1MDAyNndwYW5fZGV2LVx1MDAzZWxpc3QsIFx1MDAyNnJkZXYtXHUwMDNld3Bhbl9kZXZfbGlzdCk7XG4gMzEwOlx0XHRcdHJkZXYtXHUwMDNlZGV2bGlzdF9nZW5lcmF0aW9uJiM0MzsmIzQzOztcbiAzMTE6XHRcdFx0bXV0ZXhfaW5pdChcdTAwMjZ3cGFuX2Rldi1cdTAwM2Vhc3NvY2lhdGlvbl9sb2NrKTtcbiAzMTI6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2d3Bhbl9kZXYtXHUwMDNlY2hpbGRyZW4pO1xuIDMxMzpcdFx0XHR3cGFuX2Rldi1cdTAwM2VtYXhfYXNzb2NpYXRpb25zID0gU1pfMTZLO1xuIDMxNDpcdFxuIDMxNTpcdFx0XHR3cGFuX2Rldi1cdTAwM2VuZXRkZXYgPSBkZXY7XG4gMzE2Olx0XHRcdGJyZWFrO1xuIDMxNzpcdFx0Y2FzZSBORVRERVZfRE9XTjpcbiAzMTg6XHRcdFx0Y2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0ocmRldiwgd3Bhbl9kZXYtXHUwMDNlaWZ0eXBlLCAtMSk7XG4gMzE5Olx0XG4gMzIwOlx0XHRcdHJkZXYtXHUwMDNlb3BlbmNvdW50LS07XG4gMzIxOlx0XHRcdHdha2VfdXAoXHUwMDI2cmRldi1cdTAwM2VkZXZfd2FpdCk7XG4gMzIyOlx0XHRcdGJyZWFrO1xuIDMyMzpcdFx0Y2FzZSBORVRERVZfVVA6XG4gMzI0Olx0XHRcdGNmZzgwMjE1NF91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdwYW5fZGV2LVx1MDAzZWlmdHlwZSwgMSk7XG4gMzI1Olx0XG4gMzI2Olx0XHRcdHJkZXYtXHUwMDNlb3BlbmNvdW50JiM0MzsmIzQzOztcbiAzMjc6XHRcdFx0YnJlYWs7XG4gMzI4Olx0XHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuIDMyOTpcdFx0XHRjZmc4MDIxNTRfZnJlZV9wZWVyX3N0cnVjdHVyZXMod3Bhbl9kZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgSUVFRSA4MDIuMTUuNCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBJRUVFIDgwMi4xNS40IHN1cHBvcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGp1bXAgZGlyZWN0bHkgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIHVuZGVyIGBuZXQvaWVlZTgwMjE1NGAuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBiZSBkZWZpbmVkLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgYXZhaWxhYmxlLCB3aGF0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgZHJpdmVycyBhcmUgaW50ZXJ3b3Zlbi4KCkkgbmVlZCB0byBzZWU6IEFyZSB0aGVyZSBhbnkgbmV3IG9wdGlvbnMgc2luY2UgdGhlIGxhc3QgdGltZSBJIGxvb2tlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGRlcGVuZGVuY2llcyB0aGF0IEkgc2hvdWxkIGtub3cgYWJvdXQgZm9yIHNwZWNpZmljIGhhcmR3YXJlIG9yIHVzZSBjYXNlcz8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IG1pZ2h0IHRyaXAgbWUgdXAgd2hlbiBkZWJ1Z2dpbmcgb3Igb3B0aW1pemluZz8gVW5kZXJzdGFuZGluZyBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhZmZlY3QgdGhlIG92ZXJhbGwgZnVuY3Rpb25hbGl0eSBpcyBjcml0aWNhbC4gVGhlIGdvYWwgaXMgYSBjbGVhciBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJRUVFODAyMTU0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE0MjEgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vNmxvd3Bhbl9pLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi82bG93cGFuX2kuaDoyOiNpZm5kZWYgX19JRUVFODAyMTU0XzZMT1dQQU5fSV9IX19cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vNmxvd3Bhbl9pLmg6MzojZGVmaW5lIF9fSUVFRTgwMjE1NF82TE9XUEFOX0lfSF9fXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuLzZsb3dwYW5faS5oLTQtXG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi82bG93cGFuX2kuaD00Nj1sb3dwYW5fcnhfcmVzdWx0IGxvd3Bhbl9yeF9oX2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuLzZsb3dwYW5faS5oLTQ3LVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi82bG93cGFuX2kuaDo0ODojZW5kaWYgLyogX19JRUVFODAyMTU0XzZMT1dQQU5fSV9IX18gKi9cbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vS2NvbmZpZzoyOmNvbmZpZyBJRUVFODAyMTU0XzZMT1dQQU5cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Nmxvd3BhbiBzdXBwb3J0IG92ZXIgSUVFRSA4MDIuMTUuNFwmIzM0O1xuLS1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vTWFrZWZpbGU6MjpvYmotJChDT05GSUdfSUVFRTgwMjE1NF82TE9XUEFOKSAmIzQzOz0gaWVlZTgwMjE1NF82bG93cGFuLm9cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vTWFrZWZpbGUtMy1cbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYz04Nj1zdGF0aWMgaW50IGxvd3Bhbl9uZWlnaF9jb25zdHJ1Y3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoYm91ciAqbilcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy05MC1cdC8qIGRlZmF1bHQgbm8gc2hvcnRfYWRkciBpcyBhdmFpbGFibGUgZm9yIGEgbmVpZ2hib3VyICovXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzo5MTpcdG5laWdoLVx1MDAzZXNob3J0X2FkZHIgPSBjcHVfdG9fbGUxNihJRUVFODAyMTU0X0FERFJfU0hPUlRfVU5TUEVDKTtcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTkyLVx0cmV0dXJuIDA7XG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM9MTA5PXN0YXRpYyB2b2lkIGxvd3Bhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbGRldilcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTExMC17XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzoxMTE6XHRtZW1zZXQobGRldi1cdTAwM2Vicm9hZGNhc3QsIDB4ZmYsIElFRUU4MDIxNTRfQUREUl9MRU4pO1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmMtMTEyLVx0LyogV2UgbmVlZCBhbiBpcHY2aGRyIGFzIG1pbmltdW0gbGVuIHdoZW4gY2FsbGluZyB4bWl0ICovXG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM9MTIzPXN0YXRpYyBpbnQgbG93cGFuX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xMjYtXHRpZiAodGJbSUZMQV9BRERSRVNTXSkge1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM6MTI3Olx0XHRpZiAobmxhX2xlbih0YltJRkxBX0FERFJFU1NdKSAhPSBJRUVFODAyMTU0X0FERFJfTEVOKVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmMtMTI4LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jPTEzMz1zdGF0aWMgaW50IGxvd3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpsZGV2LFxuLS1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE1Mi1cdFx0cmV0dXJuIC1FTk9ERVY7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzoxNTM6XHRpZiAod2Rldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KSB7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xNTQtXHRcdGRldl9wdXQod2Rldik7XG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmMtMTY0LVx0LyogU2V0IHRoZSBsb3dwYW4gaGFyZHdhcmUgYWRkcmVzcyB0byB0aGUgd3BhbiBoYXJkd2FyZSBhZGRyZXNzLiAqL1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM6MTY1Olx0X19kZXZfYWRkcl9zZXQobGRldiwgd2Rldi1cdTAwM2VkZXZfYWRkciwgSUVFRTgwMjE1NF9BRERSX0xFTik7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xNjYtXHQvKiBXZSBuZWVkIGhlYWRyb29tIGZvciBwb3NzaWJsZSB3cGFuX2Rldl9oYXJkX2hlYWRlciBjYWxsIGFuZCB0YWlscm9vbVxuLS1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE3Ny1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jOjE3ODpcdHJldCA9IGxvd3Bhbl9yZWdpc3Rlcl9uZXRkZXZpY2UobGRldiwgTE9XUEFOX0xMVFlQRV9JRUVFODAyMTU0KTtcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE3OS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYz0yMTg9c3RhdGljIGludCBsb3dwYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuLS1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTIyMy1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jOjIyNDpcdGlmIChuZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0yMjUtXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmM9MjcxPXN0YXRpYyBpbnQgbG93cGFuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqd2Rldixcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmMtMjc1LVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9yeC5jOjI3NjpcdGlmICh3ZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQgfHxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vcnguYy0yNzctXHQgICAgc2tiLVx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9PVEhFUkhPU1QgfHxcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmM9MzEwPXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbG93cGFuX3BhY2tldF90eXBlID0ge1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9yeC5jOjMxMTpcdC50eXBlID0gaHRvbnMoRVRIX1BfSUVFRTgwMjE1NCksXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmMtMzEyLVx0LmZ1bmMgPSBsb3dwYW5fcmN2LFxuLS1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYz0zMz1pbnQgbG93cGFuX2hlYWRlcl9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmxkZXYsXG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTU2LVx0aWYgKCFtZW1jbXAoZGFkZHIsIGxkZXYtXHUwMDNlYnJvYWRjYXN0LCBFVUk2NF9BRERSX0xFTikpIHtcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYzo1NzpcdFx0aW5mby1cdTAwM2VkYWRkci5zaG9ydF9hZGRyID0gY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9BRERSX0JST0FEQ0FTVCk7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NTg6XHRcdGluZm8tXHUwMDNlZGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy01OS1cdH0gZWxzZSB7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NjA6XHRcdF9fbGUxNiBzaG9ydF9hZGRyID0gY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9BRERSX1NIT1JUX1VOU1BFQyk7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtNjEtXHRcdHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gbmRfdGFibGUoZGV2X25ldChsZGV2KSk7XG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTczLVx0XHRcdGluZm8tXHUwMDNlZGFkZHIuc2hvcnRfYWRkciA9IHNob3J0X2FkZHI7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NzQ6XHRcdFx0aW5mby1cdTAwM2VkYWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX1NIT1JUO1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTc1LVx0XHR9IGVsc2Uge1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jOjc2Olx0XHRcdGluZm8tXHUwMDNlZGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9MT05HO1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTc3LVx0XHRcdGllZWU4MDIxNTRfYmU2NF90b19sZTY0KFx1MDAyNmluZm8tXHUwMDNlZGFkZHIuZXh0ZW5kZWRfYWRkcixcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtODYtXHRcdGlmIChsb3dwYW5fODAyMTU0X2lzX3ZhbGlkX3NyY19zaG9ydF9hZGRyKHdwYW5fZGV2LVx1MDAzZXNob3J0X2FkZHIpKSB7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6ODc6XHRcdFx0aW5mby1cdTAwM2VzYWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX1NIT1JUO1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTg4LVx0XHRcdGluZm8tXHUwMDNlc2FkZHIuc2hvcnRfYWRkciA9IHdwYW5fZGV2LVx1MDAzZXNob3J0X2FkZHI7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtODktXHRcdH0gZWxzZSB7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6OTA6XHRcdFx0aW5mby1cdTAwM2VzYWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtOTEtXHRcdFx0aW5mby1cdTAwM2VzYWRkci5leHRlbmRlZF9hZGRyID0gd3Bhbl9kZXYtXHUwMDNlZXh0ZW5kZWRfYWRkcjtcbi0tXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtOTMtXHR9IGVsc2Uge1xubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jOjk0Olx0XHRpbmZvLVx1MDAzZXNhZGRyLm1vZGUgPSBJRUVFODAyMTU0X0FERFJfTE9ORztcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy05NS1cdFx0aWVlZTgwMjE1NF9iZTY0X3RvX2xlNjQoXHUwMDI2aW5mby1cdTAwM2VzYWRkci5leHRlbmRlZF9hZGRyLCBzYWRkcik7XG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jPTIyNT1zdGF0aWMgaW50IGxvd3Bhbl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmxkZXYsXG4tLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTIzOC1cbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYzoyMzk6XHRjYi1cdTAwM2V0eXBlID0gSUVFRTgwMjE1NF9GQ19UWVBFX0RBVEE7XG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtMjQwLVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jOjI0MTpcdGlmIChpbmZvLmRhZGRyLm1vZGUgPT0gSUVFRTgwMjE1NF9BRERSX1NIT1JUIFx1MDAyNlx1MDAyNlxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTI0Mi1cdCAgICBpZWVlODAyMTU0X2lzX2Jyb2FkY2FzdF9zaG9ydF9hZGRyKGluZm8uZGFkZHIuc2hvcnRfYWRkcikpXG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyOm1lbnVjb25maWcgSUVFRTgwMjE1NFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMy1cbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MTQ6aWYgSUVFRTgwMjE1NFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xNS1cbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MTY6Y29uZmlnIElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE3LVx0Ym9vbCBcJiMzNDtJRUVFIDgwMi4xNS40IGV4cGVyaW1lbnRhbCBuZXRsaW5rIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIwLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyMTpjb25maWcgSUVFRTgwMjE1NF9TT0NLRVRcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjItXHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC9pZWVlODAyMTU0L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTQpICYjNDM7PSBpZWVlODAyMTU0Lm9cbm5ldC9pZWVlODAyMTU0L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfU09DS0VUKSAmIzQzOz0gaWVlZTgwMjE1NF9zb2NrZXQub1xubmV0L2llZWU4MDIxNTQvTWFrZWZpbGUtNC1vYmoteSAmIzQzOz0gNmxvd3Bhbi9cbi0tXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xubmV0L2llZWU4MDIxNTQvY29yZS5oOjI6I2lmbmRlZiBfX0lFRUU4MDIxNTRfQ09SRV9IXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmg6MzojZGVmaW5lIF9fSUVFRTgwMjE1NF9DT1JFX0hcbm5ldC9pZWVlODAyMTU0L2NvcmUuaC00LVxuLS1cbm5ldC9pZWVlODAyMTU0L2NvcmUuaD00OD1zdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5X2lkeF90b193cGFuX3BoeShpbnQgd3Bhbl9waHlfaWR4KTtcbm5ldC9pZWVlODAyMTU0L2NvcmUuaC00OS1cbm5ldC9pZWVlODAyMTU0L2NvcmUuaDo1MDojZW5kaWYgLyogX19JRUVFODAyMTU0X0NPUkVfSCAqL1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz0xNT1pZWVlODAyMTU0X2hkcl9wdXNoX2FkZHIodTggKmJ1ZiwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcixcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMTktXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjA6XHRpZiAoYWRkci1cdTAwM2Vtb2RlID09IElFRUU4MDIxNTRfQUREUl9OT05FKVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTIxLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjgtXHRzd2l0Y2ggKGFkZHItXHUwMDNlbW9kZSkge1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjI5Olx0Y2FzZSBJRUVFODAyMTU0X0FERFJfU0hPUlQ6XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMzAtXHRcdG1lbWNweShidWYgJiM0MzsgcG9zLCBcdTAwMjZhZGRyLVx1MDAzZXNob3J0X2FkZHIsIDIpO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0zMy1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzozNDpcdGNhc2UgSUVFRTgwMjE1NF9BRERSX0xPTkc6XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MzU6XHRcdG1lbWNweShidWYgJiM0MzsgcG9zLCBcdTAwMjZhZGRyLVx1MDAzZWV4dGVuZGVkX2FkZHIsIElFRUU4MDIxNTRfQUREUl9MRU4pO1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjM2Olx0XHRwb3MgJiM0Mzs9IElFRUU4MDIxNTRfQUREUl9MRU47XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMzctXHRcdGJyZWFrO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz00Nz1pZWVlODAyMTU0X2hkcl9wdXNoX3NlY2hkcih1OCAqYnVmLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9zZWNoZHIgKmhkcilcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNTQtXHRzd2l0Y2ggKGhkci1cdTAwM2VrZXlfaWRfbW9kZSkge1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjU1Olx0Y2FzZSBJRUVFODAyMTU0X1NDRl9LRVlfSU1QTElDSVQ6XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNTYtXHRcdHJldHVybiBwb3M7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNTctXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6NTg6XHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9JTkRFWDpcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy01OS1cdFx0YnJlYWs7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNjAtXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6NjE6XHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9TSE9SVF9JTkRFWDpcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy02Mi1cdFx0bWVtY3B5KGJ1ZiAmIzQzOyBwb3MsIFx1MDAyNmhkci1cdTAwM2VzaG9ydF9zcmMsIDQpO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy02NS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzo2NjpcdGNhc2UgSUVFRTgwMjE1NF9TQ0ZfS0VZX0hXX0lOREVYOlxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjY3Olx0XHRtZW1jcHkoYnVmICYjNDM7IHBvcywgXHUwMDI2aGRyLVx1MDAzZWV4dGVuZGVkX3NyYywgSUVFRTgwMjE1NF9BRERSX0xFTik7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6Njg6XHRcdHBvcyAmIzQzOz0gSUVFRTgwMjE1NF9BRERSX0xFTjtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy02OS1cdFx0YnJlYWs7XG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTc4PWllZWU4MDIxNTRfaGRyX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxNTRfaGRyICpoZHIpXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNzkte1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjgwOlx0dTggYnVmW0lFRUU4MDIxNTRfTUFYX0hFQURFUl9MRU5dO1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTgxLVx0aW50IHBvcyA9IDI7XG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTk2LVx0aWYgKGhkci1cdTAwM2Vzb3VyY2UucGFuX2lkID09IGhkci1cdTAwM2VkZXN0LnBhbl9pZCBcdTAwMjZcdTAwMjZcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzo5NzpcdCAgICBoZHItXHUwMDNlZGVzdC5tb2RlICE9IElFRUU4MDIxNTRfQUREUl9OT05FKVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTk4LVx0XHRmYy1cdTAwM2VpbnRyYV9wYW4gPSB0cnVlO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz0xNzE9aWVlZTgwMjE1NF9oZHJfZ2V0X2FkZHIoY29uc3QgdTggKmJ1ZiwgaW50IG1vZGUsIGJvb2wgb21pdF9wYW4sXG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE3NS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoxNzY6XHRpZiAobW9kZSA9PSBJRUVFODAyMTU0X0FERFJfTk9ORSkge1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE3Ny1cdFx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZigqYWRkcikpO1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjE3ODpcdFx0YWRkci1cdTAwM2Vtb2RlID0gSUVFRTgwMjE1NF9BRERSX05PTkU7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMTc5LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMTg4LVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjE4OTpcdGlmIChtb2RlID09IElFRUU4MDIxNTRfQUREUl9TSE9SVCkge1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE5MC1cdFx0bWVtY3B5KFx1MDAyNmFkZHItXHUwMDNlc2hvcnRfYWRkciwgYnVmICYjNDM7IHBvcywgMik7XG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE5Mi1cdH0gZWxzZSB7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MTkzOlx0XHRtZW1jcHkoXHUwMDI2YWRkci1cdTAwM2VleHRlbmRlZF9hZGRyLCBidWYgJiM0MzsgcG9zLCBJRUVFODAyMTU0X0FERFJfTEVOKTtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoxOTQ6XHRcdHJldHVybiBwb3MgJiM0MzsgSUVFRTgwMjE1NF9BRERSX0xFTjtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0xOTUtXHR9XG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTE5OD1zdGF0aWMgaW50IGllZWU4MDIxNTRfaGRyX2FkZHJfbGVuKGludCBtb2RlLCBib29sIG9taXRfcGFuKVxuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yMDItXHRzd2l0Y2ggKG1vZGUpIHtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMDM6XHRjYXNlIElFRUU4MDIxNTRfQUREUl9OT05FOiByZXR1cm4gMDtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMDQ6XHRjYXNlIElFRUU4MDIxNTRfQUREUl9TSE9SVDogcmV0dXJuIDIgJiM0MzsgcGFuX2xlbjtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMDU6XHRjYXNlIElFRUU4MDIxNTRfQUREUl9MT05HOiByZXR1cm4gSUVFRTgwMjE1NF9BRERSX0xFTiAmIzQzOyBwYW5fbGVuO1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTIwNi1cdGRlZmF1bHQ6IHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz0yMTE9aWVlZTgwMjE1NF9oZHJfZ2V0X3NlY2hkcihjb25zdCB1OCAqYnVmLCBzdHJ1Y3QgaWVlZTgwMjE1NF9zZWNoZHIgKmhkcilcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjE4LVx0c3dpdGNoIChoZHItXHUwMDNla2V5X2lkX21vZGUpIHtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMTk6XHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9JTVBMSUNJVDpcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yMjAtXHRcdHJldHVybiBwb3M7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjIxLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjIyMjpcdGNhc2UgSUVFRTgwMjE1NF9TQ0ZfS0VZX0lOREVYOlxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTIyMy1cdFx0YnJlYWs7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjI0LVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjIyNTpcdGNhc2UgSUVFRTgwMjE1NF9TQ0ZfS0VZX1NIT1JUX0lOREVYOlxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTIyNi1cdFx0bWVtY3B5KFx1MDAyNmhkci1cdTAwM2VzaG9ydF9zcmMsIGJ1ZiAmIzQzOyBwb3MsIDQpO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yMjktXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjMwOlx0Y2FzZSBJRUVFODAyMTU0X1NDRl9LRVlfSFdfSU5ERVg6XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjMxOlx0XHRtZW1jcHkoXHUwMDI2aGRyLVx1MDAzZWV4dGVuZGVkX3NyYywgYnVmICYjNDM7IHBvcywgSUVFRTgwMjE1NF9BRERSX0xFTik7XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjMyOlx0XHRwb3MgJiM0Mzs9IElFRUU4MDIxNTRfQUREUl9MRU47XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjMzLVx0XHRicmVhaztcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM9MjQxPXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9zZWNoZHJfbGVuZ3Roc1s0XSA9IHtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyNDI6XHRbSUVFRTgwMjE1NF9TQ0ZfS0VZX0lNUExJQ0lUXSA9IDUsXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjQzOlx0W0lFRUU4MDIxNTRfU0NGX0tFWV9JTkRFWF0gPSA2LFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjI0NDpcdFtJRUVFODAyMTU0X1NDRl9LRVlfU0hPUlRfSU5ERVhdID0gMTAsXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjQ1Olx0W0lFRUU4MDIxNTRfU0NGX0tFWV9IV19JTkRFWF0gPSAxNCxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yNDYtfTtcbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM9MjQ4PXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9oZHJfc2VjaGRyX2xlbih1OCBzYylcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yNDkte1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjI1MDpcdHJldHVybiBpZWVlODAyMTU0X3NlY2hkcl9sZW5ndGhzW0lFRUU4MDIxNTRfU0NGX0tFWV9JRF9NT0RFKHNjKV07XG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjUxLX1cbi0tXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM9MzQ3PWllZWU4MDIxNTRfaGRyX3BlZWsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxNTRfaGRyICpoZHIpXG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTM1Ni1cdGlmIChoZHItXHUwMDNlZmMuc2VjdXJpdHlfZW5hYmxlZCkge1xubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjM1NzpcdFx0dTgga2V5X2lkX21vZGUgPSBJRUVFODAyMTU0X1NDRl9LRVlfSURfTU9ERSgqKGJ1ZiAmIzQzOyBwb3MpKTtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0zNTgtXHRcdGludCB3YW50ID0gcG9zICYjNDM7IGllZWU4MDIxNTRfc2VjaGRyX2xlbmd0aHNba2V5X2lkX21vZGVdO1xuLS1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz0zNzA9aW50IGllZWU4MDIxNTRfbWF4X3BheWxvYWQoY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfaGRyICpoZHIpXG4tLVxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTM3OC1cbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzozNzk6XHRyZXR1cm4gSUVFRTgwMjE1NF9NVFUgLSBobGVuIC0gSUVFRTgwMjE1NF9NRlJfU0laRTtcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0zODAtfVxuLS1cbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaD05PXZvaWQgaWVlZTgwMjE1NF9ubF9leGl0KHZvaWQpO1xubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTEwLVxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjExOiNkZWZpbmUgSUVFRTgwMjE1NF9PUChfY21kLCBfZnVuYylcdFx0XHRcXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTEyLVx0e1x0XHRcdFx0XHRcdFxcXG4tLVxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTE4LVxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjE5OiNkZWZpbmUgSUVFRTgwMjE1NF9PUF9SRUxBWEVEKF9jbWQsIF9mdW5jKVx0XHRcXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTIwLVx0e1x0XHRcdFx0XHRcdFxcXG4tLVxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTI3LVxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjI4OiNkZWZpbmUgSUVFRTgwMjE1NF9EVU1QKF9jbWQsIF9mdW5jLCBfZHVtcClcdFx0XFxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC0yOS1cdHtcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC0zNC1cbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaDozNTojZGVmaW5lIElFRUU4MDIxNTRfRFVNUF9QUklWKF9jbWQsIF9mdW5jLCBfZHVtcClcdFxcXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0LmgtMzYtXHR7XHRcdFx0XHRcdFx0XFxcbi0tXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg9NTk9ZW51bSBpZWVlODAyMTU0X21jZ3JwX2lkcyB7XG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg6NjA6XHRJRUVFODAyMTU0X0NPT1JEX01DR1JQLFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjYxOlx0SUVFRTgwMjE1NF9CRUFDT05fTUNHUlAsXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0LmgtNjItfTtcbi0tXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM9ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBpZWVlODAyMTU0X29wc1tdID0ge1xubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTg1LVx0Lyogc2VlIG5sLXBoeS5jICovXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6ODY6XHRJRUVFODAyMTU0X0RVTVAoSUVFRTgwMjE1NF9MSVNUX1BIWSwgaWVlZTgwMjE1NF9saXN0X3BoeSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy04Ny1cdFx0XHRpZWVlODAyMTU0X2R1bXBfcGh5KSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzo4ODpcdElFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9BRERfSUZBQ0UsIGllZWU4MDIxNTRfYWRkX2lmYWNlKSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzo4OTpcdElFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9ERUxfSUZBQ0UsIGllZWU4MDIxNTRfZGVsX2lmYWNlKSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy05MC1cdC8qIHNlZSBubC1tYWMuYyAqL1xubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjkxOlx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0FTU09DSUFURV9SRVEsIGllZWU4MDIxNTRfYXNzb2NpYXRlX3JlcSksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTI6XHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfQVNTT0NJQVRFX1JFU1AsIGllZWU4MDIxNTRfYXNzb2NpYXRlX3Jlc3ApLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjkzOlx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0RJU0FTU09DSUFURV9SRVEsIGllZWU4MDIxNTRfZGlzYXNzb2NpYXRlX3JlcSksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTQ6XHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfU0NBTl9SRVEsIGllZWU4MDIxNTRfc2Nhbl9yZXEpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjk1Olx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X1NUQVJUX1JFUSwgaWVlZTgwMjE1NF9zdGFydF9yZXEpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjk2Olx0SUVFRTgwMjE1NF9EVU1QKElFRUU4MDIxNTRfTElTVF9JRkFDRSwgaWVlZTgwMjE1NF9saXN0X2lmYWNlLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTk3LVx0XHRcdGllZWU4MDIxNTRfZHVtcF9pZmFjZSksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTg6XHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfU0VUX01BQ1BBUkFNUywgaWVlZTgwMjE1NF9zZXRfbWFjcGFyYW1zKSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzo5OTpcdElFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9MTFNFQ19HRVRQQVJBTVMsIGllZWU4MDIxNTRfbGxzZWNfZ2V0cGFyYW1zKSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDA6XHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfTExTRUNfU0VUUEFSQU1TLCBpZWVlODAyMTU0X2xsc2VjX3NldHBhcmFtcyksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTAxOlx0SUVFRTgwMjE1NF9EVU1QX1BSSVYoSUVFRTgwMjE1NF9MTFNFQ19MSVNUX0tFWSwgTlVMTCxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMDItXHRcdFx0ICAgICBpZWVlODAyMTU0X2xsc2VjX2R1bXBfa2V5cyksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTAzOlx0SUVFRTgwMjE1NF9PUF9SRUxBWEVEKElFRUU4MDIxNTRfTExTRUNfQUREX0tFWSwgaWVlZTgwMjE1NF9sbHNlY19hZGRfa2V5KSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDQ6XHRJRUVFODAyMTU0X09QX1JFTEFYRUQoSUVFRTgwMjE1NF9MTFNFQ19ERUxfS0VZLCBpZWVlODAyMTU0X2xsc2VjX2RlbF9rZXkpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEwNTpcdElFRUU4MDIxNTRfRFVNUF9QUklWKElFRUU4MDIxNTRfTExTRUNfTElTVF9ERVYsIE5VTEwsXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTA2LVx0XHRcdCAgICAgaWVlZTgwMjE1NF9sbHNlY19kdW1wX2RldnMpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEwNzpcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0FERF9ERVYsIGllZWU4MDIxNTRfbGxzZWNfYWRkX2RldiksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTA4Olx0SUVFRTgwMjE1NF9PUF9SRUxBWEVEKElFRUU4MDIxNTRfTExTRUNfREVMX0RFViwgaWVlZTgwMjE1NF9sbHNlY19kZWxfZGV2KSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDk6XHRJRUVFODAyMTU0X0RVTVBfUFJJVihJRUVFODAyMTU0X0xMU0VDX0xJU1RfREVWS0VZLCBOVUxMLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTExMC1cdFx0XHQgICAgIGllZWU4MDIxNTRfbGxzZWNfZHVtcF9kZXZrZXlzKSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMTE6XHRJRUVFODAyMTU0X09QX1JFTEFYRUQoSUVFRTgwMjE1NF9MTFNFQ19BRERfREVWS0VZLCBpZWVlODAyMTU0X2xsc2VjX2FkZF9kZXZrZXkpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjExMjpcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0RFTF9ERVZLRVksIGllZWU4MDIxNTRfbGxzZWNfZGVsX2RldmtleSksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTEzOlx0SUVFRTgwMjE1NF9EVU1QX1BSSVYoSUVFRTgwMjE1NF9MTFNFQ19MSVNUX1NFQ0xFVkVMLCBOVUxMLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTExNC1cdFx0XHQgICAgIGllZWU4MDIxNTRfbGxzZWNfZHVtcF9zZWNsZXZlbHMpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjExNTpcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0FERF9TRUNMRVZFTCxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMTYtXHRcdFx0ICAgICAgaWVlZTgwMjE1NF9sbHNlY19hZGRfc2VjbGV2ZWwpLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjExNzpcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0RFTF9TRUNMRVZFTCxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMTgtXHRcdFx0ICAgICAgaWVlZTgwMjE1NF9sbHNlY19kZWxfc2VjbGV2ZWwpLFxuLS1cbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYz0xMjE9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBpZWVlODAyMTU0X21jZ3Jwc1tdID0ge1xubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEyMjpcdFtJRUVFODAyMTU0X0NPT1JEX01DR1JQXSA9IHsgLm5hbWUgPSBJRUVFODAyMTU0X01DQVNUX0NPT1JEX05BTUUsIH0sXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTIzOlx0W0lFRUU4MDIxNTRfQkVBQ09OX01DR1JQXSA9IHsgLm5hbWUgPSBJRUVFODAyMTU0X01DQVNUX0JFQUNPTl9OQU1FLCB9LFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTEyNC19O1xuLS1cbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYz0xMjY9c3RydWN0IGdlbmxfZmFtaWx5IG5sODAyMTU0X2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTI3LVx0LmhkcnNpemVcdD0gMCxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMjg6XHQubmFtZVx0XHQ9IElFRUU4MDIxNTRfTkxfTkFNRSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMjktXHQudmVyc2lvblx0PSAxLFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEzMDpcdC5tYXhhdHRyXHQ9IElFRUU4MDIxNTRfQVRUUl9NQVgsXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTMxLVx0LnBvbGljeVx0XHQ9IGllZWU4MDIxNTRfcG9saWN5LFxuLS1cbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMzQtXHQubl9zbWFsbF9vcHNcdD0gQVJSQVlfU0laRShpZWVlODAyMTU0X29wcyksXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTM1Olx0LnJlc3Zfc3RhcnRfb3BcdD0gSUVFRTgwMjE1NF9MTFNFQ19ERUxfU0VDTEVWRUwgJiM0MzsgMSxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMzYtXHQubWNncnBzXHRcdD0gaWVlZTgwMjE1NF9tY2dycHMsXG4tLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9NTE9c3RhdGljIGludCBpZWVlODAyMTU0X25sX3N0YXJ0X2NvbmZpcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggc3RhdHVzKVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTU2LVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6NTc6XHRtc2cgPSBpZWVlODAyMTU0X25sX2NyZWF0ZSgwLCBJRUVFODAyMTU0X1NUQVJUX0NPTkYpO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtNTgtXHRpZiAoIW1zZylcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy02MC1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjYxOlx0aWYgKG5sYV9wdXRfc3RyaW5nKG1zZywgSUVFRTgwMjE1NF9BVFRSX0RFVl9OQU1FLCBkZXYtXHUwMDNlbmFtZSkgfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjYyOlx0ICAgIG5sYV9wdXRfdTMyKG1zZywgSUVFRTgwMjE1NF9BVFRSX0RFVl9JTkRFWCwgZGV2LVx1MDAzZWlmaW5kZXgpIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzo2MzpcdCAgICBubGFfcHV0KG1zZywgSUVFRTgwMjE1NF9BVFRSX0hXX0FERFIsIElFRUU4MDIxNTRfQUREUl9MRU4sXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy02NC1cdFx0ICAgIGRldi1cdTAwM2VkZXZfYWRkcikgfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjY1Olx0ICAgIG5sYV9wdXRfdTgobXNnLCBJRUVFODAyMTU0X0FUVFJfU1RBVFVTLCBzdGF0dXMpKVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtNjYtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6Njc6XHRyZXR1cm4gaWVlZTgwMjE1NF9ubF9tY2FzdChtc2csIElFRUU4MDIxNTRfQ09PUkRfTUNHUlApO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtNjgtXG4tLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9NzQ9c3RhdGljIGludCBpZWVlODAyMTU0X25sX2ZpbGxfaWZhY2Uoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCxcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy04NC1cdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgMCwgc2VxLCBcdTAwMjZubDgwMjE1NF9mYW1pbHksIGZsYWdzLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6ODU6XHRcdFx0ICBJRUVFODAyMTU0X0xJU1RfSUZBQ0UpO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtODYtXHRpZiAoIWhkcilcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy05OC1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjk5Olx0aWYgKG5sYV9wdXRfc3RyaW5nKG1zZywgSUVFRTgwMjE1NF9BVFRSX0RFVl9OQU1FLCBkZXYtXHUwMDNlbmFtZSkgfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjEwMDpcdCAgICBubGFfcHV0X3N0cmluZyhtc2csIElFRUU4MDIxNTRfQVRUUl9QSFlfTkFNRSwgd3Bhbl9waHlfbmFtZShwaHkpKSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTAxOlx0ICAgIG5sYV9wdXRfdTMyKG1zZywgSUVFRTgwMjE1NF9BVFRSX0RFVl9JTkRFWCwgZGV2LVx1MDAzZWlmaW5kZXgpIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMDI6XHQgICAgbmxhX3B1dChtc2csIElFRUU4MDIxNTRfQVRUUl9IV19BRERSLCBJRUVFODAyMTU0X0FERFJfTEVOLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTAzLVx0XHQgICAgZGV2LVx1MDAzZWRldl9hZGRyKSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTA0Olx0ICAgIG5sYV9wdXRfc2hvcnRhZGRyKG1zZywgSUVFRTgwMjE1NF9BVFRSX1NIT1JUX0FERFIsIHNob3J0X2FkZHIpIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMDU6XHQgICAgbmxhX3B1dF9zaG9ydGFkZHIobXNnLCBJRUVFODAyMTU0X0FUVFJfUEFOX0lELCBwYW5faWQpKVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTA2LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMTQtXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMTU6XHRcdGlmIChubGFfcHV0X3M4KG1zZywgSUVFRTgwMjE1NF9BVFRSX1RYUE9XRVIsXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMTYtXHRcdFx0ICAgICAgIHBhcmFtcy50cmFuc21pdF9wb3dlciAvIDEwMCkgfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjExNzpcdFx0ICAgIG5sYV9wdXRfdTgobXNnLCBJRUVFODAyMTU0X0FUVFJfTEJUX0VOQUJMRUQsIHBhcmFtcy5sYnQpIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMTg6XHRcdCAgICBubGFfcHV0X3U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX0NDQV9NT0RFLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTE5LVx0XHRcdCAgICAgICBwYXJhbXMuY2NhLm1vZGUpIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMjA6XHRcdCAgICBubGFfcHV0X3MzMihtc2csIElFRUU4MDIxNTRfQVRUUl9DQ0FfRURfTEVWRUwsXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMjEtXHRcdFx0XHRwYXJhbXMuY2NhX2VkX2xldmVsIC8gMTAwKSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTIyOlx0XHQgICAgbmxhX3B1dF91OChtc2csIElFRUU4MDIxNTRfQVRUUl9DU01BX1JFVFJJRVMsXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMjMtXHRcdFx0ICAgICAgIHBhcmFtcy5jc21hX3JldHJpZXMpIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMjQ6XHRcdCAgICBubGFfcHV0X3U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX0NTTUFfTUlOX0JFLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTI1LVx0XHRcdCAgICAgICBwYXJhbXMubWluX2JlKSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTI2Olx0XHQgICAgbmxhX3B1dF91OChtc2csIElFRUU4MDIxNTRfQVRUUl9DU01BX01BWF9CRSxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTEyNy1cdFx0XHQgICAgICAgcGFyYW1zLm1heF9iZSkgfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjEyODpcdFx0ICAgIG5sYV9wdXRfczgobXNnLCBJRUVFODAyMTU0X0FUVFJfRlJBTUVfUkVUUklFUyxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTEyOS1cdFx0XHQgICAgICAgcGFyYW1zLmZyYW1lX3JldHJpZXMpKVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jPTE0NT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmllZWU4MDIxNTRfbmxfZ2V0X2RldihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE0OC1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE0OTpcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRV0pIHtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE1MC1cdFx0Y2hhciBuYW1lW0lGTkFNU0laICYjNDM7IDFdO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTUxLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTUyOlx0XHRubGFfc3Ryc2NweShuYW1lLCBpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRV0sXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xNTMtXHRcdFx0ICAgIHNpemVvZihuYW1lKSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xNTQtXHRcdGRldiA9IGRldl9nZXRfYnlfbmFtZShcdTAwMjZpbml0X25ldCwgbmFtZSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxNTU6XHR9IGVsc2UgaWYgKGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFVl9JTkRFWF0pIHtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE1Ni1cdFx0ZGV2ID0gZGV2X2dldF9ieV9pbmRleChcdTAwMjZpbml0X25ldCxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE1NzpcdFx0XHRubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVZfSU5ERVhdKSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xNTgtXHR9IGVsc2Uge1xuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE2NC1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE2NTpcdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCkge1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTY2LVx0XHRkZXZfcHV0KGRldik7XG4tLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9MTczPWludCBpZWVlODAyMTU0X2Fzc29jaWF0ZV9yZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xNzktXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxODA6XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NIQU5ORUxdIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxODE6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1BBTl9JRF0gfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE4MjpcdCAgICAoIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX0hXX0FERFJdIFx1MDAyNlx1MDAyNlxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTgzOlx0XHQhaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfU0hPUlRfQUREUl0pIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxODQ6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NBUEFCSUxJVFldKVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTg1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xOTItXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxOTM6XHRpZiAoaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfSFdfQUREUl0pIHtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE5NDpcdFx0YWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xOTUtXHRcdGFkZHIuZXh0ZW5kZWRfYWRkciA9IG5sYV9nZXRfaHdhZGRyKFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTk2Olx0XHRcdFx0aW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfSFdfQUREUl0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTk3LVx0fSBlbHNlIHtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE5ODpcdFx0YWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX1NIT1JUO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTk5LVx0XHRhZGRyLnNob3J0X2FkZHIgPSBubGFfZ2V0X3Nob3J0YWRkcihcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjIwMDpcdFx0XHRcdGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1NIT1JUX0FERFJdKTtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIwMS1cdH1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIwMi1cdGFkZHIucGFuX2lkID0gbmxhX2dldF9zaG9ydGFkZHIoXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMDM6XHRcdFx0aW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfUEFOX0lEXSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMDQtXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMDU6XHRwYWdlID0gbmxhX2dldF91OF9kZWZhdWx0KGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1BBR0VdLCAwKTtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIwNi1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIwNy1cdHJldCA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS1cdTAwM2Vhc3NvY19yZXEoZGV2LCBcdTAwMjZhZGRyLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjA4Olx0XHRcdG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTF0pLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjA5LVx0XHRcdHBhZ2UsXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMTA6XHRcdFx0bmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DQVBBQklMSVRZXSkpO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjExLVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jPTIxNz1pbnQgaWVlZTgwMjE1NF9hc3NvY2lhdGVfcmVzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIyMi1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjIyMzpcdGlmICghaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfU1RBVFVTXSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjI0Olx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX0hXX0FERFJdIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMjU6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfU0hPUlRfQUREUl0pXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMjYtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIzMy1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjIzNDpcdGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9MT05HO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjM1LVx0YWRkci5leHRlbmRlZF9hZGRyID0gbmxhX2dldF9od2FkZHIoXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMzY6XHRcdFx0aW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfREVTVF9IV19BRERSXSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMzctXHRydG5sX2xvY2soKTtcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yNDEtXHRyZXQgPSBpZWVlODAyMTU0X21sbWVfb3BzKGRldiktXHUwMDNlYXNzb2NfcmVzcChkZXYsIFx1MDAyNmFkZHIsXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyNDI6XHRcdG5sYV9nZXRfc2hvcnRhZGRyKGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfU0hPUlRfQUREUl0pLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjQzOlx0XHRubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1NUQVRVU10pKTtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTI0NC1cbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYz0yNTA9aW50IGllZWU4MDIxNTRfZGlzYXNzb2NpYXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTI1NS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI1NjpcdGlmICgoIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfSFdfQUREUl0gXHUwMDI2XHUwMDI2XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyNTc6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfU0hPUlRfQUREUl0pIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyNTg6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1JFQVNPTl0pXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yNTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTI2Ni1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI2NzpcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX0hXX0FERFJdKSB7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyNjg6XHRcdGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9MT05HO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjY5LVx0XHRhZGRyLmV4dGVuZGVkX2FkZHIgPSBubGFfZ2V0X2h3YWRkcihcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI3MDpcdFx0XHRcdGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfSFdfQUREUl0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjcxLVx0fSBlbHNlIHtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI3MjpcdFx0YWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX1NIT1JUO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjczLVx0XHRhZGRyLnNob3J0X2FkZHIgPSBubGFfZ2V0X3Nob3J0YWRkcihcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI3NDpcdFx0XHRcdGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfU0hPUlRfQUREUl0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjc1LVx0fVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTI4MC1cdHJldCA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS1cdTAwM2VkaXNhc3NvY19yZXEoZGV2LCBcdTAwMjZhZGRyLFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjgxOlx0XHRcdG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfUkVBU09OXSkpO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjgyLVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jPTI5Mj1pbnQgaWVlZTgwMjE1NF9zdGFydF9yZXEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMDEtXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDI6XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1BBTl9JRF0gfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMwMzpcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfU0hPUlRfQUREUl0gfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMwNDpcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTF0gfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMwNTpcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQkNOX09SRF0gfHxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMwNjpcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfU0ZfT1JEXSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzA3Olx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9QQU5fQ09PUkRdIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDg6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0JBVF9FWFRdIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDk6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1JFQUxJR05dXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMTAtXHQgKVxuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTMyNC1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMyNTpcdGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTMyNi1cdGFkZHIuc2hvcnRfYWRkciA9IG5sYV9nZXRfc2hvcnRhZGRyKFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzI3Olx0XHRcdGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1NIT1JUX0FERFJdKTtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTMyOC1cdGFkZHIucGFuX2lkID0gbmxhX2dldF9zaG9ydGFkZHIoXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMjk6XHRcdFx0aW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfUEFOX0lEXSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMzAtXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMzE6XHRjaGFubmVsID0gbmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DSEFOTkVMXSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMzI6XHRiY25fb3JkID0gbmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9CQ05fT1JEXSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMzM6XHRzZl9vcmQgPSBubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1NGX09SRF0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzM0Olx0cGFuX2Nvb3JkID0gbmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9QQU5fQ09PUkRdKTtcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMzNTpcdGJseCA9IG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQkFUX0VYVF0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzM2Olx0Y29vcmRfcmVhbGlnbiA9IG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfUkVBTElHTl0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMzM3LVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzM4Olx0cGFnZSA9IG5sYV9nZXRfdThfZGVmYXVsdChpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9QQUdFXSwgMCk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMzktXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozNDA6XHRpZiAoYWRkci5zaG9ydF9hZGRyID09IGNwdV90b19sZTE2KElFRUU4MDIxNTRfQUREUl9CUk9BRENBU1QpKSB7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozNDE6XHRcdGllZWU4MDIxNTRfbmxfc3RhcnRfY29uZmlybShkZXYsIElFRUU4MDIxNTRfTk9fU0hPUlRfQUREUkVTUyk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNDItXHRcdGRldl9wdXQoZGV2KTtcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNTMtXHQgKi9cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjM1NDpcdGllZWU4MDIxNTRfbmxfc3RhcnRfY29uZmlybShkZXYsIElFRUU4MDIxNTRfU1VDQ0VTUyk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNTUtXG4tLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9MzYxPWludCBpZWVlODAyMTU0X3NjYW5fcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMzY5LVxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzcwOlx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9TQ0FOX1RZUEVdIHx8XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozNzE6XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NIQU5ORUxTXSB8fFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzcyOlx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9EVVJBVElPTl0pXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNzMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTM4MC1cbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjM4MTpcdHR5cGUgPSBubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1NDQU5fVFlQRV0pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzgyOlx0Y2hhbm5lbHMgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DSEFOTkVMU10pO1xubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzgzOlx0ZHVyYXRpb24gPSBubGFfZ2V0X3U4KGluZm8tXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RVUkFUSU9OXSk7XG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zODQtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUxOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipUaW1lIHRvIEludmVzdGlnYXRlIHRoZSBJRUVFIDgwMi4xNS40IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGFuZCBidWlsZCBwcm9jZXNzIGZvciB0aGUgSUVFRSA4MDIuMTUuNCBjb21wb25lbnRzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgZXhhbWluZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBhbmQgTWFrZWZpbGUgZmlsZXMuIFRoZSBgbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgZmlsZSBzaG91bGQgaG9sZCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyB3aXJlbGVzcyBwcm90b2NvbCwgYWxsIHRoZSBzZXR0aW5ncyB0aGF0IHRoZSB1c2VyIGNhbiBzZXQgYXQgY29tcGlsZSB0aW1lLiBJdCBoZWxwcyBtZSB0byB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QsIGFuZCBob3cgZGlmZmVyZW50IGFzcGVjdHMgb2YgODAyLjE1LjQgYXJlIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4KClRoZW4sIHRoZSBgbmV0L2llZWU4MDIxNTQvTWFrZWZpbGVgIGlzIHRoZSBuZXh0IG9idmlvdXMgcGxhY2UuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIHNvdXJjZSBjb2RlIGlzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbmNvcnBvcmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgc291cmNlIGZpbGVzIGFyZSBpbmNsdWRlZCwgd2hhdCBsaWJyYXJpZXMgYXJlIHVzZWQsIGFuZCBob3cgdGhlIGVudGlyZSA4MDIuMTUuNCBzdGFjayBpcyBidWlsdCBhbmQgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0byBhZGQgYSBtb2R1bGUgb3IgZGlzYWJsZSBvbmUuCgpFc3NlbnRpYWxseSwgdGhlc2UgdHdvIGZpbGVzIHByb3ZpZGUgdGhlIGJsdWVwcmludCwgdGhlIGhvdy10byBndWlkZSwgZm9yIGJ1aWxkaW5nIGFuZCBjb25maWd1cmluZyB0aGUgODAyLjE1LjQgbmV0d29ya2luZyBzdGFjay4gR3Jhc3BpbmcgdGhlbSBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIGFueSB3b3JrIEkmIzM5O20gZ29pbmcgdG8gZG8gaW4gdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnVjb25maWcgSUVFRTgwMjE1NFxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRoZWxwXG4gICA1Olx0XHQgIElFRUUgU3RkIDgwMi4xNS40IGRlZmluZXMgYSBsb3cgZGF0YSByYXRlLCBsb3cgcG93ZXIgYW5kIGxvd1xuICAgNjpcdFx0ICBjb21wbGV4aXR5IHNob3J0IHJhbmdlIHdpcmVsZXNzIHBlcnNvbmFsIGFyZWEgbmV0d29ya3MuIEl0IHdhc1xuICAgNzpcdFx0ICBkZXNpZ25lZCB0byBvcmdhbmlzZSBuZXR3b3JrcyBvZiBzZW5zb3JzLCBzd2l0Y2hlcywgZXRjIGF1dG9tYXRpb25cbiAgIDg6XHRcdCAgZGV2aWNlcy4gTWF4aW11bSBhbGxvd2VkIGRhdGEgcmF0ZSBpcyAyNTAga2IvcyBhbmQgdHlwaWNhbCBwZXJzb25hbFxuICAgOTpcdFx0ICBvcGVyYXRpbmcgc3BhY2UgYXJvdW5kIDEwbS5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIExSLVdQQU4gc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cbiAgMTI6XHRcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGVzLlxuICAxMzpcdFxuICAxNDpcdGlmIElFRUU4MDIxNTRcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcbiAgMTc6XHRcdGJvb2wgXCYjMzQ7SUVFRSA4MDIuMTUuNCBleHBlcmltZW50YWwgbmV0bGluayBzdXBwb3J0XCYjMzQ7XG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIEFkZHMgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydCBmb3Igbmw4MDIxNTQuXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIElFRUU4MDIxNTRfU09DS0VUXG4gIDIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcJiMzNDtcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBTb2NrZXQgaW50ZXJmYWNlIGZvciBJRUVFIDgwMi4xNS40LiBDb250YWlucyBER1JBTSBzb2NrZXRzIGludGVyZmFjZVxuICAyNjpcdFx0ICBmb3IgODAyLjE1LjQgZGF0YWZyYW1lcy4gQWxzbyBSQVcgc29ja2V0IGludGVyZmFjZSB0byBidWlsZCBNQUNcbiAgMjc6XHRcdCAgaGVhZGVyIGZyb20gdXNlcnNwYWNlLlxuICAyODpcdFxuICAyOTpcdHNvdXJjZSBcJiMzNDtuZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWdcJiMzNDtcbiAgMzA6XHRcbiAgMzE6XHRlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDIxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBJRUVFIDgwMi4xNS40L1dQQU4gRGV2aWNlIFNpbXVsYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIHRlc3QgSUVFRSA4MDIuMTUuNCBhbmQgV1BBTiBmdW5jdGlvbmFsaXR5IHdpdGhpbiBhIHNpbXVsYXRlZCBlbnZpcm9ubWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgZHJpdmVycyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aG9zZSB0ZWNobm9sb2dpZXMuIEkgc2hvdWxkIGV4cGxvcmUgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvYCwgYGRyaXZlcnMvbmV0L3dwYW4vYCwgYW5kIGBtYWM4MDIxNTRgIHRvIHVuZGVyc3RhbmQgdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRyaXZlcnMgYW5kIHRlc3RpbmcgZnJhbWV3b3Jrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB3ZSBjYW4gc2ltdWxhdGUgdGhlc2UgZGV2aWNlcyBkaXJlY3RseSB3aXRoaW4gU3l6a2FsbGVyIG9yIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBvbiB0aGUgbG9va291dCBmb3IgbmFtZXMgbGlrZSBgZmFrZWxiYCBhbmQgYG1hYzgwMjE1NF9od3NpbWAsIHdoaWNoIG1pZ2h0IHByb3ZpZGUgYSBjbHVlLiBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aGVzZSB0byBkZXRlcm1pbmUgdGhlIGF2YWlsYWJpbGl0eSBvZiBzaW11bGF0ZWQgaGFyZHdhcmUgbW9kZWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSUVFRTgwMjE1NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmM9MTc5PXN0YXRpYyB2b2lkIG9mX2dwaW9fdHJ5X2ZpeHVwX3BvbGFyaXR5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYy0yMDctI2VuZGlmXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jOjIwODojaWYgSVNfRU5BQkxFRChDT05GSUdfSUVFRTgwMjE1NF9DQTgyMTApXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jLTIwOS1cdFx0Lypcbi0tXG5kcml2ZXJzL25ldC9NYWtlZmlsZT03MT1vYmotJChDT05GSUdfV0xBTikgJiM0Mzs9IHdpcmVsZXNzL1xuZHJpdmVycy9uZXQvTWFrZWZpbGU6NzI6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTQpICYjNDM7PSBpZWVlODAyMTU0L1xuZHJpdmVycy9uZXQvTWFrZWZpbGUtNzMtb2JqLSQoQ09ORklHX1dXQU4pICYjNDM7PSB3d2FuL1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfRkFLRUxCKSAmIzQzOz0gZmFrZWxiLm9cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfSUVFRTgwMjE1NF9BVDg2UkYyMzApICYjNDM7PSBhdDg2cmYyMzAub1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19JRUVFODAyMTU0X01SRjI0SjQwKSAmIzQzOz0gbXJmMjRqNDAub1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19JRUVFODAyMTU0X0NDMjUyMCkgJiM0Mzs9IGNjMjUyMC5vXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfQVRVU0IpICYjNDM7PSBhdHVzYi5vXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfQURGNzI0MikgJiM0Mzs9IGFkZjcyNDIub1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19JRUVFODAyMTU0X0NBODIxMCkgJiM0Mzs9IGNhODIxMC5vXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfTUNSMjBBKSAmIzQzOz0gbWNyMjBhLm9cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfSFdTSU0pICYjNDM7PSBtYWM4MDIxNTRfaHdzaW0ub1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2E4MjEwLmM9Mjk3OT1zdGF0aWMgdm9pZCBjYTgyMTBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGlfZGV2aWNlKVxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2E4MjEwLmMtMzAxNS1cdFx0fVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYTgyMTAuYzozMDE2Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSUVFRTgwMjE1NF9DQTgyMTBfREVCVUdGUykpXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2NhODIxMC5jLTMwMTctXHRcdFx0Y2E4MjEwX3Rlc3RfaW50ZXJmYWNlX2NsZWFyKHByaXYpO1xuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2E4MjEwLmM9MzAyNz1zdGF0aWMgaW50IGNhODIxMF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX2RldmljZSlcbi0tXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2NhODIxMC5jLTMwNTgtXHRzcGlfc2V0X2RydmRhdGEocHJpdi1cdTAwM2VzcGksIHByaXYpO1xuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYTgyMTAuYzozMDU5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lFRUU4MDIxNTRfQ0E4MjEwX0RFQlVHRlMpKSB7XG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2NhODIxMC5jLTMwNjAtXHRcdGNhc2NvZGFfYXBpX3Vwc3RyZWFtID0gY2E4MjEwX3Rlc3RfaW50X2RyaXZlcl93cml0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3NDYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJRUVFIDgwMi4xNS40IFBhdGNoKioKCk9rYXksIHNvIElFRUUgODAyLjE1LjQgaXMgd2VsbC1jb3ZlcmVkOyB3ZSYjMzk7dmUgZ290IGBtYWM4MDIxNTRfaHdzaW1gLCBgZmFrZWxiYCwgYG5sODAyMTU0IG5ldGxpbmtgLCBgcnRubGAsIHRoZSB3b3JrcywgYW5kIGl0JiMzOTtzIGV2ZW4gZ2V0dGluZyBmdXp6aW5nIGF0dGVudGlvbiBmcm9tIHN5emthbGxlciwgd2hpY2ggaXMgZ3JlYXQgdG8gc2VlLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBzcGVjaWZpYyBwYXRjaC4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgbmV0L2llZWU4MDIxNTQvY29yZS5jYC4KClNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3cGFuX2Rldl90eXBlID0geyAubmFtZSA9ICYjMzQ7d3BhbiYjMzQ7IH07YC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXZpY2UgdHlwZSBkZWZpbml0aW9uLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGFsYXJtaW5nIHRoZXJlLgoKRGlnZ2luZyBkZWVwZXIgaW50byBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBzb21lIGludGVyZXN0aW5nIGxvZ2ljIGFkZGVkLiBUaGVyZSYjMzk7cyBhIGBXQVJOX09OKHdwYW5fZGV2LSZndDtpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQyk7YCB3aGljaCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgYSBzYW5pdHkgY2hlY2ssIHRoYXQgc3VnZ2VzdHMgc29tZSBraW5kIG9mIHVuZXhwZWN0ZWQgc3RhdGUuIFRoZW4sIHRoZSBoYW5kbGluZyBvZiBgTkVUREVWX1BPU1RfSU5JVGAgd2hpY2ggaXMgc2V0dGluZyB0aGUgZGV2aWNlIHR5cGUsIGBTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCAmYW1wO3dwYW5fZGV2X3R5cGUpO2AuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZGV2aWNlIHR5cGUgZGVmaW5pdGlvbiBhYm92ZS4KCk5vdywgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgYW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIHRoYXQuIENvbnRleHQgaXMgZXZlcnl0aGluZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaWVlZTgwMjE1NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaWVlZTgwMjE1NC9jb3JlLmM9MjgwPWNmZzgwMjE1NF91cGRhdGVfaWZhY2VfbnVtKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L2llZWU4MDIxNTQvY29yZS5jLTI4Ny1cbm5ldC9pZWVlODAyMTU0L2NvcmUuYzoyODg6c3RhdGljIGludCBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbm5ldC9pZWVlODAyMTU0L2NvcmUuYy0yODktXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzdGF0ZSwgdm9pZCAqcHRyKVxuLS1cbm5ldC9pZWVlODAyMTU0L2NvcmUuYz0zNTY9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyID0ge1xubmV0L2llZWU4MDIxNTQvY29yZS5jOjM1NzpcdC5ub3RpZmllcl9jYWxsID0gY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsLFxubmV0L2llZWU4MDIxNTQvY29yZS5jLTM1OC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY0MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCwgd2hpY2ggaXMgY2xlYXJseSByZWdpc3RlcmVkIGFzIGEgbmV0ZGV2aWNlIG5vdGlmaWVyIHZpYSBgcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyYCB3aXRoaW4gdGhlIGBpZWVlODAyMTU0X2luaXRgIG9yIHJlbGF0ZWQgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gdGhpcyBub3RpZmllciBpcyBhY3R1YWxseSB0cmlnZ2VyZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyB0aWVkIHRvIG5ldGRldmljZSBldmVudHMuCgpTbywgaXQgbG9va3MgbGlrZSB0aGlzIG5vdGlmaWVyIGdldHMgaW52b2tlZCB3aGVuZXZlciBhIG5ldGRldmljZSwgd2hlcmUgYGRldi0mZ3Q7aWVlZTgwMjE1NF9wdHJgIGlzbiYjMzk7dCBudWxsLCBleHBlcmllbmNlcyBldmVudHMgbGlrZSBgTkVUREVWX1BPU1RfSU5JVGAsIGBORVRERVZfUkVHSVNURVJgLCBgTkVUREVWX0RPV05gLCBgTkVUREVWX1VQYCwgYE5FVERFVl9VTlJFR0lTVEVSYCwgYW5kIHNvIG9uLiBOb3cgSSBzZWUgdGhhdCB3aXRoaW4gdGhpcyBmdW5jdGlvbiB0aGVyZSBpcyBhIGNhbGwgdG8gYHdwYW5fcGh5X3RvX3JkZXZgLCBhIG5ldyBhc3NlcnRpb24gYFdBUk5fT04od3Bhbl9kZXYtJmd0O2lmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKWAsIGFuZCBhbHNvIGEgbmV3IGFzc2lnbm1lbnQgYFNFVF9ORVRERVZfREVWVFlQRShkZXYsICZhbXA7d3Bhbl9kZXZfdHlwZSk7YC4KClRoYXQgbmV3IGFzc2VydGlvbiBpcyBjcml0aWNhbC4gTm93LCBJIHNob3VsZCByZWZlcmVuY2UgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gU2VjdGlvbnMgMSAmYW1wOyAzIGFyZSB0aGUgcmVsZXZhbnQgb25lczogbmV3IG9yIG1vZGlmaWVkIGFzc2VydGlvbnMgaW4gcmVhY2hhYmxlIGNvZGUgKm11c3QqIGJlIGZ1enplZC4gRXZlbiBpZiB5b3UgKnRoaW5rKiBpdCYjMzk7cyBidWxsZXRwcm9vZiwgZnV6emluZyBpcyB2aXRhbCB0byBleHBvc2UgYW55IHVuZXhwZWN0ZWQgb3BlcmF0aW9uIHNlcXVlbmNlcyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhhdCBhc3NlcnRpb24uIEFuZCB0aGUgSUVFRSA4MDIuMTUuNCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdmlydHVhbCBidXNlcyBhbmQgbmV0bGluaywgd2hpY2ggbWVhbnMgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgZmFpciBnYW1lIGZvciBmdXp6aW5nLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC4gVGhlIGNvZGUgcGF0aCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50LgoKTm93LCBsZXQmIzM5O3MgZXN0YWJsaXNoIG15IGBGb2N1c1N5bWJvbHNgLiBXaGF0IGZ1bmN0aW9ucywgYmV5b25kIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50LCBzaG91bGQgSSBjb25zaWRlcj8gSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgYWZmZWN0ZWQgb3IgYWN0IGFzIGVudHJ5cG9pbnRzLiBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCBpbiBgbmV0L2llZWU4MDIxNTQvY29yZS5jYCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0b3VjaGVkLiBJIGhhdmUgdG8gbG9vayBpbnRvIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgIGFuZCByZWxldmFudCBuZXRsaW5rIGludGVyZmFjZXMgYW5kIG90aGVyIGZ1bmN0aW9ucyB0byByb3VuZCBvdXQgbXkgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgU2llbWVucyBBR1xuICAgNDpcdCAqL1xuICAgNTpcdFxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICAxMDpcdFxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY25ldC9jZmc4MDIxNTQuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY25ldC9ydG5ldGxpbmsuaFx1MDAzZVxuICAxMzpcdFxuICAxNDpcdCNpbmNsdWRlIFwmIzM0O2llZWU4MDIxNTQuaFwmIzM0O1xuICAxNTpcdCNpbmNsdWRlIFwmIzM0O25sODAyMTU0LmhcJiMzNDtcbiAgMTY6XHQjaW5jbHVkZSBcJiMzNDtzeXNmcy5oXCYjMzQ7XG4gIDE3Olx0I2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4gIDE4Olx0XG4gIDE5Olx0LyogbmFtZSBmb3Igc3lzZnMsICVkIGlzIGFwcGVuZGVkICovXG4gIDIwOlx0I2RlZmluZSBQSFlfTkFNRSBcJiMzNDtwaHlcJiMzNDtcbiAgMjE6XHRcbiAgMjI6XHQvKiBSQ1UtcHJvdGVjdGVkIChhbmQgUlROTCBmb3Igd3JpdGVycykgKi9cbiAgMjM6XHRMSVNUX0hFQUQoY2ZnODAyMTU0X3JkZXZfbGlzdCk7XG4gIDI0Olx0aW50IGNmZzgwMjE1NF9yZGV2X2xpc3RfZ2VuZXJhdGlvbjtcbiAgMjU6XHRcbiAgMjY6XHRzdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5X2ZpbmQoY29uc3QgY2hhciAqc3RyKVxuICAyNzpcdHtcbiAgMjg6XHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiAgMjk6XHRcbiAgMzA6XHRcdGlmIChXQVJOX09OKCFzdHIpKVxuICAzMTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgMzI6XHRcbiAgMzM6XHRcdGRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlX2J5X25hbWUoXHUwMDI2d3Bhbl9waHlfY2xhc3MsIHN0cik7XG4gIDM0Olx0XHRpZiAoIWRldilcbiAgMzU6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDM2Olx0XG4gIDM3Olx0XHRyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHdwYW5fcGh5LCBkZXYpO1xuICAzODpcdH1cbiAgMzk6XHRFWFBPUlRfU1lNQk9MKHdwYW5fcGh5X2ZpbmQpO1xuICA0MDpcdFxuICA0MTpcdHN0cnVjdCB3cGFuX3BoeV9pdGVyX2RhdGEge1xuICA0MjpcdFx0aW50ICgqZm4pKHN0cnVjdCB3cGFuX3BoeSAqcGh5LCB2b2lkICpkYXRhKTtcbiAgNDM6XHRcdHZvaWQgKmRhdGE7XG4gIDQ0Olx0fTtcbiAgNDU6XHRcbiAgNDY6XHRzdGF0aWMgaW50IHdwYW5fcGh5X2l0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpfZGF0YSlcbiAgNDc6XHR7XG4gIDQ4Olx0XHRzdHJ1Y3Qgd3Bhbl9waHlfaXRlcl9kYXRhICp3cGlkID0gX2RhdGE7XG4gIDQ5Olx0XHRzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB3cGFuX3BoeSwgZGV2KTtcbiAgNTA6XHRcbiAgNTE6XHRcdHJldHVybiB3cGlkLVx1MDAzZWZuKHBoeSwgd3BpZC1cdTAwM2VkYXRhKTtcbiAgNTI6XHR9XG4gIDUzOlx0XG4gIDU0Olx0aW50IHdwYW5fcGh5X2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSwgdm9pZCAqZGF0YSksXG4gIDU1Olx0XHRcdCAgICAgIHZvaWQgKmRhdGEpXG4gIDU2Olx0e1xuICA1NzpcdFx0c3RydWN0IHdwYW5fcGh5X2l0ZXJfZGF0YSB3cGlkID0ge1xuICA1ODpcdFx0XHQuZm4gPSBmbixcbiAgNTk6XHRcdFx0LmRhdGEgPSBkYXRhLFxuICA2MDpcdFx0fTtcbiAgNjE6XHRcbiAgNjI6XHRcdHJldHVybiBjbGFzc19mb3JfZWFjaF9kZXZpY2UoXHUwMDI2d3Bhbl9waHlfY2xhc3MsIE5VTEwsXG4gIDYzOlx0XHRcdFx0XHUwMDI2d3BpZCwgd3Bhbl9waHlfaXRlcik7XG4gIDY0Olx0fVxuICA2NTpcdEVYUE9SVF9TWU1CT0wod3Bhbl9waHlfZm9yX2VhY2gpO1xuICA2NjpcdFxuICA2NzpcdHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKlxuICA2ODpcdGNmZzgwMjE1NF9yZGV2X2J5X3dwYW5fcGh5X2lkeChpbnQgd3Bhbl9waHlfaWR4KVxuICA2OTpcdHtcbiAgNzA6XHRcdHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJlc3VsdCA9IE5VTEwsICpyZGV2O1xuICA3MTpcdFxuICA3MjpcdFx0QVNTRVJUX1JUTkwoKTtcbiAgNzM6XHRcbiAgNzQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgXHUwMDI2Y2ZnODAyMTU0X3JkZXZfbGlzdCwgbGlzdCkge1xuICA3NTpcdFx0XHRpZiAocmRldi1cdTAwM2V3cGFuX3BoeV9pZHggPT0gd3Bhbl9waHlfaWR4KSB7XG4gIDc2Olx0XHRcdFx0cmVzdWx0ID0gcmRldjtcbiAgNzc6XHRcdFx0XHRicmVhaztcbiAgNzg6XHRcdFx0fVxuICA3OTpcdFx0fVxuICA4MDpcdFxuICA4MTpcdFx0cmV0dXJuIHJlc3VsdDtcbiAgODI6XHR9XG4gIDgzOlx0XG4gIDg0Olx0c3RydWN0IHdwYW5fcGh5ICp3cGFuX3BoeV9pZHhfdG9fd3Bhbl9waHkoaW50IHdwYW5fcGh5X2lkeClcbiAgODU6XHR7XG4gIDg2Olx0XHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuICA4NzpcdFxuICA4ODpcdFx0QVNTRVJUX1JUTkwoKTtcbiAgODk6XHRcbiAgOTA6XHRcdHJkZXYgPSBjZmc4MDIxNTRfcmRldl9ieV93cGFuX3BoeV9pZHgod3Bhbl9waHlfaWR4KTtcbiAgOTE6XHRcdGlmICghcmRldilcbiAgOTI6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDkzOlx0XHRyZXR1cm4gXHUwMDI2cmRldi1cdTAwM2V3cGFuX3BoeTtcbiAgOTQ6XHR9XG4gIDk1Olx0XG4gIDk2Olx0c3RydWN0IHdwYW5fcGh5ICpcbiAgOTc6XHR3cGFuX3BoeV9uZXcoY29uc3Qgc3RydWN0IGNmZzgwMjE1NF9vcHMgKm9wcywgc2l6ZV90IHByaXZfc2l6ZSlcbiAgOTg6XHR7XG4gIDk5Olx0XHRzdGF0aWMgYXRvbWljX3Qgd3Bhbl9waHlfY291bnRlciA9IEFUT01JQ19JTklUKDApO1xuIDEwMDpcdFx0c3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMzYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AgLSBMaW5lcyAzMDAtMzYwKioKClJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyAzMDAgdG8gMzYwIGluIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgLiBUaGlzIHNlY3Rpb24uLi4gQWgsIGhlcmUgd2UgYXJlLiBPa2F5LCBhZnRlciBhIHF1aWNrIHNraW0sIHRoaXMgbG9va3MgbGlrZSBpdOKAmXMgbGlrZWx5IGhhbmRsaW5nIHRoZSBjcnVjaWFsIHBvcnRpb24gd2hlcmUgdGhlIGxvd2VyIE1BQyBsYXllciBpbnRlcmFjdHMgd2l0aCB0aGUgdXBwZXIgbGF5ZXJzLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgKnJlYWxseSogaW50ZXJlc3Rpbmcgc3R1ZmYgaXMgaGFwcGVuaW5nIOKAkyB0aGUgaGFuZG9mZiBvZiBhIHBhY2tldCwgcGVyaGFwcyB0aGUgbWFuYWdlbWVudCBvZiBBQ0sgcmVxdWVzdHMsIG9yIHBlcmhhcHMgZXZlbiBpbml0aWFsIGRhdGEgcHJvY2Vzc2luZyB1cG9uIHJlY2VpdmluZyBhIG5ldyBwYWNrZXQuCgpJ4oCZbSBndWVzc2luZyBpdOKAmXMgZGVhbGluZyB3aXRoIHNvbWUga2V5IGFzcGVjdHMgb2YgODAyLjE1LjQgZnJhbWUgdHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbi4gSXMgaXQgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgQ1NNQS1DQSBtZWNoYW5pc20/IERvZXMgdGhpcyBjaHVuayBvZiBjb2RlIGluY2x1ZGUgdGhlIGxvZ2ljIGZvciBjaGFubmVsIGFzc2Vzc21lbnQgcHJpb3IgdG8gdHJhbnNtaXNzaW9uPyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGZvciBhbnkgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYGllZWU4MDIxNTRfZ2V0X2NoYW5uZWxgIG9yIHBlcmhhcHMgYSBmdW5jdGlvbiBuYW1lZCBgaWVlZTgwMjE1NF9jY2FgLiAKCkxldCYjMzk7cyBjYXJlZnVsbHkgZXhhbWluZSB0aGUgcmVnaXN0ZXIgYW5kIGludGVycnVwdCBoYW5kbGluZywgaWYgYW55IGlzIHByZXNlbnQsIHNpbmNlIHRoaXMgYXJlYSBoYXMgdGhlIHBvdGVudGlhbCB0byBiZWNvbWUgYSBib3R0bGVuZWNrIGR1ZSB0byBpbnRlcnJ1cHQgb3ZlcmhlYWQuIEdpdmVuIHRoZSB0aW1pbmcgY29uc3RyYWludHMgaW5oZXJlbnQgaW4gODAyLjE1LjQsIHRoaXMgaXMgY3JpdGljYWwuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGluZGljYXRpb24gb2YgaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IGZyYW1lIHR5cGVzLCBsaWtlIGRhdGEgZnJhbWVzIHZlcnN1cyBiZWFjb24gZnJhbWVzLCBhcyB0aGlzIGNvdWxkIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gc3lzdGVtIHRocm91Z2hwdXQgYW5kIHBvd2VyIGNvbnN1bXB0aW9uLiBNb3JlIHNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGFkZHJlc3MgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIGludGVyZmVyZW5jZSBvciBjb2xsaXNpb25zIG9uIHRoZSBtZWRpdW0uCgpJIGFsc28gd2FudCB0byBzZWUgdGhlIGVycm9yIGNoZWNraW5nIGhhcHBlbmluZyBhbmQgaG93IGl0IG1pZ2h0IGltcGFjdCB0aGUgaW50ZWdyaXR5IG9mIGEgbWVzc2FnZSB0cmFuc21pc3Npb24uIExldCYjMzk7cyBzZWUgaWYgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIHByb3ZpZGVzIGFueSBjbHVlcyBhYm91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgYmVpbmcgdXNlZC4gQXJlIHRoZXJlIGFueSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciBtYW5pcHVsYXRpb25zPyBJZiB0aGVyZSBhcmUsIHRoYXQgc2hvdWxkIGdpdmUgbWUgaW5zaWdodCBpbnRvIHRoZSBleGFjdCByYWRpbyBjaGlwIGZhbWlseSB0aGUgZHJpdmVyJiMzOTtzIGRlc2lnbmVkIGZvci4gVGltZSB0byBkaWcgaW4gYW5kIGNvbmZpcm0gdGhlc2UgZmlyc3QgaW1wcmVzc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRcbiAzMzE6XHRcdFx0LyogSXQgaXMgcG9zc2libGUgdG8gZ2V0IE5FVERFVl9VTlJFR0lTVEVSXG4gMzMyOlx0XHRcdCAqIG11bHRpcGxlIHRpbWVzLiBUbyBkZXRlY3QgdGhhdCwgY2hlY2tcbiAzMzM6XHRcdFx0ICogdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHN0aWxsIG9uIHRoZSBsaXN0XG4gMzM0Olx0XHRcdCAqIG9mIHJlZ2lzdGVyZWQgaW50ZXJmYWNlcywgYW5kIG9ubHkgdGhlblxuIDMzNTpcdFx0XHQgKiByZW1vdmUgYW5kIGNsZWFuIGl0IHVwLlxuIDMzNjpcdFx0XHQgKi9cbiAzMzc6XHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNndwYW5fZGV2LVx1MDAzZWxpc3QpKSB7XG4gMzM4Olx0XHRcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNndwYW5fZGV2LVx1MDAzZWxpc3QpO1xuIDMzOTpcdFx0XHRcdHJkZXYtXHUwMDNlZGV2bGlzdF9nZW5lcmF0aW9uJiM0MzsmIzQzOztcbiAzNDA6XHRcdFx0fVxuIDM0MTpcdFx0XHQvKiBzeW5jaHJvbml6ZSAoc28gdGhhdCB3ZSB3b24mIzM5O3QgZmluZCB0aGlzIG5ldGRldlxuIDM0MjpcdFx0XHQgKiBmcm9tIG90aGVyIGNvZGUgYW55IG1vcmUpIGFuZCB0aGVuIGNsZWFyIHRoZSBsaXN0XG4gMzQzOlx0XHRcdCAqIGhlYWQgc28gdGhhdCB0aGUgYWJvdmUgY29kZSBjYW4gc2FmZWx5IGNoZWNrIGZvclxuIDM0NDpcdFx0XHQgKiAhbGlzdF9lbXB0eSgpIHRvIGF2b2lkIGRvdWJsZS1jbGVhbnVwLlxuIDM0NTpcdFx0XHQgKi9cbiAzNDY6XHRcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gMzQ3Olx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNndwYW5fZGV2LVx1MDAzZWxpc3QpO1xuIDM0ODpcdFx0XHRicmVhaztcbiAzNDk6XHRcdGRlZmF1bHQ6XG4gMzUwOlx0XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiAzNTE6XHRcdH1cbiAzNTI6XHRcbiAzNTM6XHRcdHJldHVybiBOT1RJRllfT0s7XG4gMzU0Olx0fVxuIDM1NTpcdFxuIDM1NjpcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllciA9IHtcbiAzNTc6XHRcdC5ub3RpZmllcl9jYWxsID0gY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsLFxuIDM1ODpcdH07XG4gMzU5Olx0XG4gMzYwOlx0c3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxNTRfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxuIDM2MTpcdHtcbiAzNjI6XHRcdHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7XG4gMzYzOlx0XG4gMzY0Olx0XHRydG5sX2xvY2soKTtcbiAzNjU6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgXHUwMDI2Y2ZnODAyMTU0X3JkZXZfbGlzdCwgbGlzdCkge1xuIDM2NjpcdFx0XHRpZiAobmV0X2VxKHdwYW5fcGh5X25ldChcdTAwMjZyZGV2LVx1MDAzZXdwYW5fcGh5KSwgbmV0KSlcbiAzNjc6XHRcdFx0XHRjZmc4MDIxNTRfc3dpdGNoX25ldG5zKHJkZXYsIFx1MDAyNmluaXRfbmV0KTtcbiAzNjg6XHRcdH1cbiAzNjk6XHRcdHJ0bmxfdW5sb2NrKCk7XG4gMzcwOlx0fVxuIDM3MTpcdFxuIDM3MjpcdHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgY2ZnODAyMTU0X3Blcm5ldF9vcHMgPSB7XG4gMzczOlx0XHQuZXhpdCA9IGNmZzgwMjE1NF9wZXJuZXRfZXhpdCxcbiAzNzQ6XHR9O1xuIDM3NTpcdFxuIDM3NjpcdHN0YXRpYyBpbnQgX19pbml0IHdwYW5fcGh5X2NsYXNzX2luaXQodm9pZClcbiAzNzc6XHR7XG4gMzc4Olx0XHRpbnQgcmM7XG4gMzc5Olx0XG4gMzgwOlx0XHRyYyA9IHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoXHUwMDI2Y2ZnODAyMTU0X3Blcm5ldF9vcHMpO1xuIDM4MTpcdFx0aWYgKHJjKVxuIDM4MjpcdFx0XHRnb3RvIGVycjtcbiAzODM6XHRcbiAzODQ6XHRcdHJjID0gd3Bhbl9waHlfc3lzZnNfaW5pdCgpO1xuIDM4NTpcdFx0aWYgKHJjKVxuIDM4NjpcdFx0XHRnb3RvIGVycl9zeXNmcztcbiAzODc6XHRcbiAzODg6XHRcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNmNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXIpO1xuIDM4OTpcdFx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU4NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGNmZzgwMjE1NCBOZXRkZXZpY2UgTm90aWZpZXIqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBob3cgYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgZ2V0cyB0cmlnZ2VyZWQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyB0aWVkIHRvIGFueSBuZXRkZXZpY2UgZXZlbnQgcmVsYXRlZCB0byBhIFdQQU4gKHdpcmVsZXNzIHBlcnNvbmFsIGFyZWEgbmV0d29yaykgbmV0X2RldmljZS4gU28sIGFueXRoaW5nIHRoYXQgYWZmZWN0cyBhIFdQQU4gbmV0X2RldmljZSBpcyBnb2luZyB0byB0cmlnZ2VyIHRoaXMgbm90aWZpZXIuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZXZlbnRzIGxpa2UgYWRkaW5nIGFuIGludGVyZmFjZSB1c2luZyBgaWVlZTgwMjE1NF9hZGRfaWZhY2VgLCBkZXZpY2UgcmVnaXN0cmF0aW9uLCBvciB0aGUgbmV0X2RldmljZSBzdGF0ZSBjaGFuZ2luZyBiZXR3ZWVuIFVQIGFuZCBET1dOLgoKTm93LCBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxgIHRvIHNlZSB3aGVyZSB0aGVzZSB0cmlnZ2VyaW5nIGZ1bmN0aW9ucyBhY3R1YWxseSBsaXZlLiBMZXQmIzM5O3MgbG9vayBhdCBgaWVlZTgwMjE1NF9hZGRfaWZhY2VgLCBmb3Igc3RhcnRlcnMuIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zOiBgbmw4MDIxNTRfYWRkX2lmYWNlYCwgYG1hYzgwMjE1NF93cGFuX3VwZGF0ZV9sbHNlY2AsIGFuZCBvdGhlcnMgaW4gdGhlIHNhbWUgdmVpbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG9vLgoKVG8gbWFrZSB0aGlzIGVmZmljaWVudCwgSSBzaG91bGQgYmUgYWJsZSB0byBwZXJmb3JtIGEgc2VhcmNoIGZvciBjb25zdGFudHMgbGlrZSBgTkw4MDIxNTRfSUZUWVBFX1VOU1BFQ2AgYW5kIHRoZW4gbG9vayBmb3IgYXNzb2NpYXRlZCBmdW5jdGlvbnMgc3VjaCBhcyBgaWVlZTgwMjE1NF9hZGRfaWZhY2VgLCBgbmw4MDIxNTRfYWRkX2ludGVyZmFjZWAgb3Igb3RoZXJzIHRoYXQgYXJlIHJlbGV2YW50LiBUaGlzIHNob3VsZCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgcGF0aHdheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05MODAyMTU0X0lGVFlQRV9VTlNQRUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L2NvcmUuYz0yODg9c3RhdGljIGludCBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbi0tXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmMtMjk5LVxubmV0L2llZWU4MDIxNTQvY29yZS5jOjMwMDpcdFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xubmV0L2llZWU4MDIxNTQvY29yZS5jLTMwMS1cbi0tXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jPTkyMj1zdGF0aWMgaW50IG5sODAyMTU0X25ld19pbnRlcmZhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTkyNC1cdHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYzo5MjU6XHRlbnVtIG5sODAyMTU0X2lmdHlwZSB0eXBlID0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQztcbm5ldC9pZWVlODAyMTU0L25sODAyMTU0LmMtOTI2LVx0X19sZTY0IGV4dGVuZGVkX2FkZHIgPSBjcHVfdG9fbGU2NCgweDAwMDAwMDAwMDAwMDAwMDBVTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTUxMQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSA4MDIuMTUuNCBOZXR3b3JrIExheWVyIENvZGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBJRUVFIDgwMi4xNS40IG5ldHdvcmsgbGF5ZXIgaW1wbGVtZW50YXRpb24uIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlIGlzc3VlIG1pZ2h0IGJlIGNlbnRlcmVkIGFyb3VuZCBhIHNwZWNpZmljIHNlY3Rpb24gb2YgY29kZSwgbGlrZWx5IHJlbGF0ZWQgdG8gYSByZWNlbnQgYnVnIHJlcG9ydCBvciBvYnNlcnZlZCBiZWhhdmlvci4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCBsaW5lIDkyMiB3aXRoaW4gdGhlIGBuZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jYCBmaWxlIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgYmVnaW4gYnkgZXhhbWluaW5nIHRoYXQgcGFydGljdWxhciBhcmVhLCBhbmQgYXNzZXNzIHRoZSBzdXJyb3VuZGluZyBsaW5lcy4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBpbml0aWFsIGRpcmVjdGlvbiB0byB0YWtlOyBJJiMzOTtsbCBzdGFydCB3aXRoIHRoaXMgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTIwOlx0fVxuIDkyMTpcdFxuIDkyMjpcdHN0YXRpYyBpbnQgbmw4MDIxNTRfbmV3X2ludGVyZmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIDkyMzpcdHtcbiA5MjQ6XHRcdHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuIDkyNTpcdFx0ZW51bSBubDgwMjE1NF9pZnR5cGUgdHlwZSA9IE5MODAyMTU0X0lGVFlQRV9VTlNQRUM7XG4gOTI2Olx0XHRfX2xlNjQgZXh0ZW5kZWRfYWRkciA9IGNwdV90b19sZTY0KDB4MDAwMDAwMDAwMDAwMDAwMFVMTCk7XG4gOTI3Olx0XG4gOTI4Olx0XHQvKiBUT0RPIGF2b2lkIGZhaWxpbmcgYSBuZXcgaW50ZXJmYWNlXG4gOTI5Olx0XHQgKiBjcmVhdGlvbiBkdWUgdG8gcGVuZGluZyByZW1vdmFsP1xuIDkzMDpcdFx0ICovXG4gOTMxOlx0XG4gOTMyOlx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxNTRfQVRUUl9JRk5BTUVdKVxuIDkzMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA5MzQ6XHRcbiA5MzU6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTU0X0FUVFJfSUZUWVBFXSkge1xuIDkzNjpcdFx0XHR0eXBlID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjE1NF9BVFRSX0lGVFlQRV0pO1xuIDkzNzpcdFx0XHRpZiAodHlwZSBcdTAwM2UgTkw4MDIxNTRfSUZUWVBFX01BWCB8fFxuIDkzODpcdFx0XHQgICAgIShyZGV2LVx1MDAzZXdwYW5fcGh5LnN1cHBvcnRlZC5pZnR5cGVzIFx1MDAyNiBCSVQodHlwZSkpKVxuIDkzOTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDk0MDpcdFx0fVxuIDk0MTpcdFxuIDk0MjpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxNTRfQVRUUl9FWFRFTkRFRF9BRERSXSlcbiA5NDM6XHRcdFx0ZXh0ZW5kZWRfYWRkciA9IG5sYV9nZXRfbGU2NChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTU0X0FUVFJfRVhURU5ERURfQUREUl0pO1xuIDk0NDpcdFxuIDk0NTpcdFx0aWYgKCFyZGV2LVx1MDAzZW9wcy1cdTAwM2VhZGRfdmlydHVhbF9pbnRmKVxuIDk0NjpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gOTQ3Olx0XG4gOTQ4Olx0XHRyZXR1cm4gcmRldl9hZGRfdmlydHVhbF9pbnRmKHJkZXYsXG4gOTQ5Olx0XHRcdFx0XHQgICAgIG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxNTRfQVRUUl9JRk5BTUVdKSxcbiA5NTA6XHRcdFx0XHRcdCAgICAgTkVUX05BTUVfVVNFUiwgdHlwZSwgZXh0ZW5kZWRfYWRkcik7XG4gOTUxOlx0fVxuIDk1MjpcdFxuIDk1MzpcdHN0YXRpYyBpbnQgbmw4MDIxNTRfZGVsX2ludGVyZmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIDk1NDpcdHtcbiA5NTU6XHRcdHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuIDk1NjpcdFx0c3RydWN0IHdwYW5fZGV2ICp3cGFuX2RldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4gOTU3Olx0XG4gOTU4Olx0XHRpZiAoIXJkZXYtXHUwMDNlb3BzLVx1MDAzZWRlbF92aXJ0dWFsX2ludGYpXG4gOTU5Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQSBCdWcgaW4gdGhlIDgwMi4xNS40IE5ldGxpbmsgSW50ZXJmYWNlIENyZWF0aW9uKioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZyBpbiBgbmw4MDIxNTRfbmV3X2ludGVyZmFjZWAuIElmIHRoZSBOZXRsaW5rIHJlcXVlc3QgKmRvZXNuJiMzOTt0KiBzcGVjaWZ5IGFuIGludGVyZmFjZSB0eXBlLCB3aGljaCBpcyBwZXJmZWN0bHkgdmFsaWQsIHRoZSBjb2RlIGRlZmF1bHRzIHRoZSB0eXBlIHRvIGBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDYC4gTm8gcmVkIGZsYWdzIHRoZXJlLCBpdCBzZWVtcyByZWFzb25hYmxlLiBUaGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSBgcmRldl9hZGRfdmlydHVhbF9pbnRmYCB0aGVuIGNyZWF0ZXMgdGhlIHZpcnR1YWwgaW50ZXJmYWNlIHdpdGggdGhpcyAqdW5zcGVjaWZpZWQqIHR5cGUuIEZpbmUgc28gZmFyLgoKTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGJpdGVzIHVzLiBXaGVuIHRoaXMgaW50ZXJmYWNlIGlzIHJlZ2lzdGVyZWQgYW5kIHN0YXJ0cyByZWNlaXZpbmcgbm90aWZpZXIgZXZlbnRzLCBgd3Bhbl9kZXYtJmd0O2lmdHlwZWAgaXMgc3RpbGwsIGFuZCBpbmNvcnJlY3RseSwgYE5MODAyMTU0X0lGVFlQRV9VTlNQRUNgLiBBbmQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB0aGF0IHRyaWdnZXJzIHRoZSBgV0FSTl9PTmAgdGhhdCB3YXMganVzdCBhZGRlZC4gSXQmIzM5O3MgYSB0ZXh0Ym9vayBpbnZhcmlhbnQgdmlvbGF0aW9uLCByaXBlIGZvciBmdXp6aW5nIHRvIGV4cGxvaXQgZGlyZWN0bHkuIENsYXNzaWMuCgpTbywgdGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGJ1ZywgcHJvYmFibHkgZWFzeSB0byByZXByb2R1Y2UsIGFuZCBsaWtlbHkgdG8gYmUgbWlzc2VkIGluIG1hbnVhbCB0ZXN0aW5nLiBXZSYjMzk7dmUgZ290IGEgZGVmYXVsdCBvZiBgTkw4MDIxNTRfSUZUWVBFX1VOU1BFQ2Agbm90IGJlaW5nIHByb3Blcmx5IGhhbmRsZWQgYWZ0ZXIgdGhlIGludGVyZmFjZSBpcyBjcmVhdGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgd2UgY2FuIGJ1aWxkIGFuZCB0ZXN0IHRoaXMgcXVpY2tseS4gTGV0IG1lIGdvIGNoZWNrIGBuZXQvaWVlZTgwMjE1NC9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBleGVyY2lzZSB0aGlzIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaWVlZTgwMjE1NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRvYmotJChDT05GSUdfSUVFRTgwMjE1NCkgJiM0Mzs9IGllZWU4MDIxNTQub1xuICAgMzpcdG9iai0kKENPTkZJR19JRUVFODAyMTU0X1NPQ0tFVCkgJiM0Mzs9IGllZWU4MDIxNTRfc29ja2V0Lm9cbiAgIDQ6XHRvYmoteSAmIzQzOz0gNmxvd3Bhbi9cbiAgIDU6XHRcbiAgIDY6XHRpZWVlODAyMTU0LXkgOj0gbmV0bGluay5vIG5sLW1hYy5vIG5sLXBoeS5vIG5sX3BvbGljeS5vIGNvcmUubyBcXFxuICAgNzpcdCAgICAgICAgICAgICAgICBoZWFkZXJfb3BzLm8gc3lzZnMubyBubDgwMjE1NC5vIHRyYWNlLm8gcGFuLm9cbiAgIDg6XHRpZWVlODAyMTU0X3NvY2tldC15IDo9IHNvY2tldC5vXG4gICA5Olx0XG4gIDEwOlx0Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMjEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIDgwMi4xNS40IENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIDgwMi4xNS40IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBGaXJzdCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBgQ09ORklHX0lFRUU4MDIxNTRgIGlzIGVuYWJsZWQsIG9idmlvdXNseS4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgaW50byB3aGV0aGVyIHdlJiMzOTtyZSB1c2luZyBleHBlcmltZW50YWwgbmw4MDIxNTQgc3VwcG9ydCwgc28gYENPTkZJR19JRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTGAgbmVlZHMgYSBsb29rLiBPciwgaXMgaXQgYSBzdHJhaWdodCBgQ09ORklHX01BQzgwMjE1NGAgY29uZmlndXJhdGlvbj8gT3IgYXJlIHdlIGRlYWxpbmcgd2l0aCBhIGZha2UgbG93LWJhbmR3aWR0aCBzaXR1YXRpb24gd2l0aCBgQ09ORklHX0lFRUU4MDIxNTRfRkFLRUxCYCBvciBldmVuIHVzaW5nIGBDT05GSUdfSUVFRTgwMjE1NF9IV1NJTWA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIG9uZSYjMzk7cyBpbiBwbGF5LgoKTmV4dCBzdGVwOiBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgS2NvbmZpZyBmaWxlcyB0byBzZWUgd2hlcmUgdGhlc2Ugc2V0dGluZ3MgYXJlIGJlaW5nIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYm90aCBgbmV0L21hYzgwMjE1NC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHdoYXQgdGhlc2Ugc2V0dGluZ3MgYWN0dWFsbHkgZG8uIEdvdHRhIGdldCBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjE1NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9tYWM4MDIxNTQvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxNTRcbm5ldC9tYWM4MDIxNTQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBJRUVFIDgwMi4xNS40IFNvZnQgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTU0KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTg0NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgTUFDIDgwMi4xNS40IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBNQUMgODAyLjE1LjQgbGF5ZXIuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgbmV0L21hYzgwMjE1NC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBnby10byBwbGFjZSBmb3IgYWxsIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgdGhlIGtub2JzIGFuZCBkaWFscyB0aGF0IGNvbnRyb2wgaG93IHRoaXMgc3BlY2lmaWMgTUFDIGltcGxlbWVudGF0aW9uIGJlaGF2ZXMuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aHJvdWdoIGl0cyBjb250ZW50LCBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBncm91cGVkLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBhdmFpbGFibGUgY3VzdG9taXphdGlvbiBwb2ludHMuIEnigJlsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbSwgd2hhdCBpbXBhY3RzIHdoYXQsIGFuZCBhbHNvIGxvb2sgZm9yIGludGVyZXN0aW5nLCBwb3RlbnRpYWxseSBvYnNjdXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgYmUgdXNlZnVsIHRvIGtub3cuIEl04oCZcyBhIGNydWNpYWwgc3RlcCBiZWZvcmUgSSBjYW4gZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxNTQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBNQUM4MDIxNTRcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTUuNCBTb2Z0IE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjE1NClcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSUVFRTgwMjE1NFxuICAgNTpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuICAgNjpcdFx0c2VsZWN0IENSWVBUT1xuICAgNzpcdFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPX0NDTVxuICAgOTpcdFx0c2VsZWN0IENSWVBUT19DVFJcbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjE1LjRcbiAgMTM6XHRcdCAgbmV0d29ya2luZyBzdGFjayBmb3IgU29mdE1BQyBkZXZpY2VzICh0aGUgb25lcyBpbXBsZW1lbnRpbmdcbiAgMTQ6XHRcdCAgb25seSBQSFkgbGV2ZWwgb2YgSUVFRSA4MDIuMTUuNCBzdGFuZGFyZCkuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIE5vdGU6IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbmVpdGhlciBjZXJ0aWZpZWQsIG5vciBmZWF0dXJlXG4gIDE3Olx0XHQgIGNvbXBsZXRlISBDb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIGhhc24mIzM5O3RcbiAgMTg6XHRcdCAgYmVlbiB0ZXN0ZWQgeWV0IVxuICAxOTpcdFxuICAyMDpcdFx0ICBJZiB5b3UgcGxhbiB0byB1c2UgSGFyZE1BQyBJRUVFIDgwMi4xNS40IGRldmljZXMsIHlvdSBjYW5cbiAgMjE6XHRcdCAgc2F5IE4gaGVyZS4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHNheSBNIHRvIGNvbXBpbGUgaXQgYXNcbiAgMjI6XHRcdCAgbW9kdWxlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ0NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKktjb25maWcgRGl2ZSBUaW1lISoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgSUVFRSA4MDIuMTUuNCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGhlYXJ0IG9mIGFueSBnb29kIGtlcm5lbCBtb2R1bGUgY29uZmlndXJhdGlvbjogdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGVzc2VudGlhbCBidWlsZC10aW1lIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIElFRUUgODAyLjE1LjQgbmV0d29ya2luZyBzdGFjayBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGluZ3MgbGlrZSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHZhcmlvdXMgUEhZIGxheWVycywgTUFDIHByb3RvY29scywgc3VwcG9ydGVkIGhhcmR3YXJlIHBsYXRmb3JtcywgZGVidWcgb3B0aW9ucywgYW5kIG1heWJlIGV2ZW4gc29tZSBwZXJmb3JtYW5jZS10dW5pbmcgcGFyYW1ldGVycyBpbiBoZXJlLiBJJiMzOTttIGhvcGluZyBJIGNhbiBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIHRoaXMgZHJpdmVyLiBGcm9tIGhlcmUgSSBjYW4gc2VlIHdoYXQgSSBjYW4gYnVpbGQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBJRUVFODAyMTU0X0RSSVZFUlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0lFRUUgODAyLjE1LjQgZHJpdmVyc1wmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBJRUVFODAyMTU0XG4gICA1Olx0XHRkZWZhdWx0IHlcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIElFRUUgODAyLjE1LjQgTG93LVJhdGVcbiAgIDg6XHRcdCAgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrIGRldmljZSBkcml2ZXJzLiBUaGlzIG9wdGlvbiBhbG9uZVxuICAgOTpcdFx0ICBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxMDpcdFxuICAxMTpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXG4gIDEyOlx0XHQgIGRpc2FibGVkLlxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBJRUVFODAyMTU0X0ZBS0VMQlxuICAxNTpcdFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBsb29wYmFjayBkcml2ZXJcJiMzNDtcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGZha2UgZHJpdmVyIHRoYXQgY2FuIGVtdWxhdGUgYSBuZXRcbiAgMTk6XHRcdCAgb2Ygc2V2ZXJhbCBpbnRlcmNvbm5lY3RlZCByYWRpbyBkZXZpY2VzLlxuICAyMDpcdFxuICAyMTpcdFx0ICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gVG8gZG8gc28gc2F5IE0gaGVyZS5cbiAgMjI6XHRcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAmIzM5O2Zha2VsYiYjMzk7LlxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBJRUVFODAyMTU0X0FUODZSRjIzMFxuICAyNTpcdFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7QVQ4NlJGMjMwLzIzMS8yMzMvMjEyIHRyYW5zY2VpdmVyIGRyaXZlclwmIzM0O1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBTUElcbiAgMjg6XHRcdHNlbGVjdCBSRUdNQVBfU1BJXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBhdDg2cmYyMzAvMjMxLzIzMy8yMTIgU1BJIDgwMi4xNS40IHdpcmVsZXNzXG4gIDMxOlx0XHQgIGNvbnRyb2xsZXIuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUbyBkbyBzbywgc2F5IE0gaGVyZS5cbiAgMzQ6XHRcdCAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAmIzM5O2F0ODZyZjIzMCYjMzk7LlxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBJRUVFODAyMTU0X01SRjI0SjQwXG4gIDM3Olx0XHR0cmlzdGF0ZSBcJiMzNDtNaWNyb2NoaXAgTVJGMjRKNDAgdHJhbnNjZWl2ZXIgZHJpdmVyXCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcdTAwMjZcdTAwMjYgTUFDODAyMTU0XG4gIDM5Olx0XHRkZXBlbmRzIG9uIFNQSVxuICA0MDpcdFx0c2VsZWN0IFJFR01BUF9TUElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMzODUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIGludG8gdGhpcyBgaWVlZTgwMjE1NGAgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEkgd2FzIGZvY3VzaW5nIG9uIHNvbWV0aGluZyBlbHNlLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIGJlIG1ldGhvZGljYWwuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgcmVsYXRlZCB0byBoYXJkd2FyZSBzaW11bGF0aW9uLCBgSUVFRTgwMjE1NF9IV1NJTWAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGZpbGUsIGBkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWdgLCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCBwcm9wZXJseSBhbmQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb2J2aW91cyByZWQgZmxhZ3MgSSYjMzk7dmUgbWlzc2VkLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2ggd2l0aCB0aGUgY29uZmlncywgY29uc2lkZXJpbmcgZGVwZW5kZW5jaWVzIGFuZCBub3QganVzdCB0aGUgY3VycmVudCBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0Y29uZmlnIElFRUU4MDIxNTRfQ0E4MjEwXG4gIDgxOlx0XHR0cmlzdGF0ZSBcJiMzNDtDYXNjb2RhIENBODIxMCB0cmFuc2NlaXZlciBkcml2ZXJcJiMzNDtcbiAgODI6XHRcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFx1MDAyNlx1MDAyNiBNQUM4MDIxNTRcbiAgODM6XHRcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xuICA4NDpcdFx0ZGVwZW5kcyBvbiBTUElcbiAgODU6XHRcdGhlbHBcbiAgODY6XHRcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIENBODIxMCBTUEkgODAyLjE1LjQgd2lyZWxlc3NcbiAgODc6XHRcdCAgY29udHJvbGxlci5cbiAgODg6XHRcbiAgODk6XHRcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvLCBzYXkgTSBoZXJlLlxuICA5MDpcdFx0ICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkICYjMzk7Y2E4MjEwJiMzOTsuXG4gIDkxOlx0XG4gIDkyOlx0Y29uZmlnIElFRUU4MDIxNTRfQ0E4MjEwX0RFQlVHRlNcbiAgOTM6XHRcdGJvb2wgXCYjMzQ7Q0E4MjEwIGRlYnVnZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfQ0E4MjEwXG4gIDk1Olx0XHRkZXBlbmRzIG9uIERFQlVHX0ZTXG4gIDk2Olx0XHRoZWxwXG4gIDk3Olx0XHQgIFRoaXMgb3B0aW9uIGNvbXBpbGVzIGRlYnVnZnMgY29kZSBmb3IgdGhlIGNhODIxMCBkcml2ZXIuIFRoaXNcbiAgOTg6XHRcdCAgZXhwb3NlcyBhIGRlYnVnZnMgbm9kZSBmb3IgZWFjaCBDQTgyMTAgaW5zdGFuY2Ugd2hpY2ggYWxsb3dzXG4gIDk5Olx0XHQgIGRpcmVjdCB1c2Ugb2YgdGhlIENhc2NvZGEgQVBJLCBleHBvc2luZyB0aGUgODAyLjE1LjQgTUFDXG4gMTAwOlx0XHQgIG1hbmFnZW1lbnQgZW50aXRpZXMuXG4gMTAxOlx0XG4gMTAyOlx0Y29uZmlnIElFRUU4MDIxNTRfTUNSMjBBXG4gMTAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNQ1IyMEEgdHJhbnNjZWl2ZXIgZHJpdmVyXCYjMzQ7XG4gMTA0Olx0XHRzZWxlY3QgUkVHTUFQX1NQSVxuIDEwNTpcdFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuIDEwNjpcdFx0ZGVwZW5kcyBvbiBTUElcbiAxMDc6XHRcdGhlbHBcbiAxMDg6XHRcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIE1DUjIwQSBTUEkgODAyLjE1LjQgd2lyZWxlc3NcbiAxMDk6XHRcdCAgY29udHJvbGxlci5cbiAxMTA6XHRcbiAxMTE6XHRcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvLCBzYXkgTSBoZXJlLlxuIDExMjpcdFx0ICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkICYjMzk7bWNyMjBhJiMzOTsuXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIElFRUU4MDIxNTRfSFdTSU1cbiAxMTU6XHRcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFx1MDAyNlx1MDAyNiBNQUM4MDIxNTRcbiAxMTY6XHRcdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjE1NFwmIzM0O1xuIDExNzpcdFx0aGVscFxuIDExODpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XG4gMTE5Olx0XHQgIElFRUUgODAyLjE1LjQgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTU0KSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDMyMQoJCQkJCQkJb3V0cHV0OiAyNTAKCQkJCQkJCXRob3VnaHRzOiA2ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IElFRUUgODAyLjE1LjQgTmV0ZGV2IE5vdGlmaWVyKioKCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhpcyBmdXp6aW5nIHRhcmdldC4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgYElFRUU4MDIxNTRgIGNvbmZpZ3VyYXRpb24g4oCTIHRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZHJpdmVyLCBjb25maXJtZWQgYnkgY2hlY2tpbmcgYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AuIEFkZGl0aW9uYWxseSwgYE1BQzgwMjE1NGAsIGBJRUVFODAyMTU0X0ZBS0VMQmAsIGBJRUVFODAyMTU0X0hXU0lNYCwgb3IgZXZlbiBgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxgIGNvdWxkIGJlIHJlbGV2YW50LCBzbyBJJiMzOTtsbCBrZWVwIHRob3NlIGluIG1pbmQgYXMgcG90ZW50aWFsIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYC4gSG93ZXZlciwgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSB0cmlnZ2VyZWQgYnkgaW50ZXJmYWNlIGNyZWF0aW9uIG9yIGRlbGV0aW9uLiBBZnRlciBjaGVja2luZywgSSBzZWUgdGhlIGZvbGxvd2luZyBhcyBsaWtlbHkgZW50cnkgcG9pbnRzOiBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCAodGhlIG1vZGlmaWVkIGZ1bmN0aW9uKSwgYG5sODAyMTU0X25ld19pbnRlcmZhY2VgICh3aGljaCBjYWxscyBgcmRldl9hZGRfdmlydHVhbF9pbnRmYCBhbmQgY291bGQgdHJpZ2dlciB0aGUgbm90aWZpZXIpLCBgbmw4MDIxNTRfZGVsX2ludGVyZmFjZWAsIGBpZWVlODAyMTU0X2FkZF9pZmFjZWAgYW5kIGBpZWVlODAyMTU0X2RlbF9pZmFjZWAuCgpHaXZlbiB0aGF0IGBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxgIGlzIHRoZSBjZW50cmFsIGZpZ3VyZSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHN0YXRlLCB2b2lkICpwdHIpYC4gU2luY2UgaXQgaXMgc3RhdGljLCBpdCBpcyBzdGlsbCB2aXNpYmxlIGluIHRoZSB2bWxpbnV4IC8ga2FsbHN5bXMgc3ltYm9sIHRhYmxlLgoKVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBhcmU6IGBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxgLCBgbmw4MDIxNTRfbmV3X2ludGVyZmFjZWAsIGFuZCBgaWVlZTgwMjE1NF9hZGRfaWZhY2VgLiBJJiMzOTtsbCB3YW50IHRvIHRhcmdldCB0aGVzZS4KClRvIHN1bW1hcml6ZSBhbmQgZG91YmxlLWNoZWNrLCBmdXp6aW5nIGlzIHdvcnRod2hpbGUgYmVjYXVzZSB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXNzZXJ0aW9uIChgV0FSTl9PTih3cGFuX2Rldi0mZ3Q7aWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpYCkgYW5kIHNldHMgdGhlIGRldmljZSB0eXBlIGR1cmluZyBgTkVUREVWX1BPU1RfSU5JVGAgd2l0aGluIHRoZSBJRUVFIDgwMi4xNS40IG5ldGRldiBub3RpZmllciBjYWxsYmFjay4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgSUVFRTgwMjE1NGAgKG1hbmRhdG9yeSkgYW5kIHBvdGVudGlhbGx5IGBNQUM4MDIxNTRgLCBgSUVFRTgwMjE1NF9IV1NJTWAsIGBJRUVFODAyMTU0X0ZBS0VMQmAsIGFuZCBgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxgLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJRUVFODAyMTU0JiMzNDssCiAgICAmIzM0O01BQzgwMjE1NCYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTCYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0ZBS0VMQiYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0X0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsJiMzNDssCiAgICAmIzM0O25sODAyMTU0X25ld19pbnRlcmZhY2UmIzM0OywKICAgICYjMzQ7aWVlZTgwMjE1NF9hZGRfaWZhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKCkgaW4gdGhlIElFRUUgODAyLjE1LjQgc3Vic3lzdGVtIHRvIHNldCBuZXRkZXYgZGV2aWNlIHR5cGUgb24gTkVUREVWX1BPU1RfSU5JVCBhbmQgYWRkcyBhIG5ldyBydW50aW1lIGFzc2VydGlvbiBXQVJOX09OKHdwYW5fZGV2LVx1MDAzZWlmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChubDgwMjE1NC9ydG5ldGxpbmspIGludGVyZmFjZSBjcmVhdGlvbiBhbmQgbmV0ZGV2IGxpZmVjeWNsZSBldmVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OywKICAgICYjMzQ7TUFDODAyMTU0JiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfRkFLRUxCJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTRfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwmIzM0OywKICAgICYjMzQ7bmw4MDIxNTRfbmV3X2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTU0X2FkZF9pZmFjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoKSBpbiB0aGUgSUVFRSA4MDIuMTUuNCBzdWJzeXN0ZW0gdG8gc2V0IG5ldGRldiBkZXZpY2UgdHlwZSBvbiBORVRERVZfUE9TVF9JTklUIGFuZCBhZGRzIGEgbmV3IHJ1bnRpbWUgYXNzZXJ0aW9uIFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKG5sODAyMTU0L3J0bmV0bGluaykgaW50ZXJmYWNlIGNyZWF0aW9uIGFuZCBuZXRkZXYgbGlmZWN5Y2xlIGV2ZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNzoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBzdGF0aWMgY29uc3QgZGV2aWNlX3R5cGUgc3RydWN0dXJlIChgd3Bhbl9kZXZfdHlwZWApLCBhIFdBUk5fT04gY2hlY2sgZm9yIHVuc3BlY2lmaWVkIGludGVyZmFjZSB0eXBlcywgYW5kIHNldHMgdGhlIG5ldGRldiBkZXZpY2UgdHlwZSBwb2ludGVyIGR1cmluZyBORVRERVZfUE9TVF9JTklUIG5vdGlmaWNhdGlvbi5cblxuMS4gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbjIuIFRoZSBgd3Bhbl9kZXZfdHlwZWAgc3RydWN0IGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgYXQgY29tcGlsZSB0aW1lLlxuMy4gTm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbmV0bGluayBhdHRyaWJ1dGVzLCBzb2NrZXQgb3B0aW9ucywgb3IgYnVmZmVyIGxlbmd0aHMvb2Zmc2V0cyBhcmUgYWZmZWN0ZWQuXG40LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZDsgc3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGJ1aWxkcyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhmMTViZDNjOWE1Y2VjYjQ5NzJiNmQxMmY3ZWU2MGJmNWNjMGUzMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE3OjE5OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvY29yZS5jIGIvbmV0L2llZWU4MDIxNTQvY29yZS5jCmluZGV4IGMwYjg3MTIwMThhMTYuLmVjNWJmZGY2YmQzMWUgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWVlZTgwMjE1NC9jb3JlLmMKQEAgLTI3Miw2ICYjNDM7MjcyLDEwIEBAIHZvaWQgY2ZnODAyMTU0X2Rldl9mcmVlKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCiAJa2ZyZWUocmRldik7CiB9CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHdwYW5fZGV2X3R5cGUgPSB7CiYjNDM7CS5uYW1lCT0gJiMzNDt3cGFuJiMzNDssCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyB2b2lkCiBjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgaW50IGlmdHlwZSwgaW50IG51bSkKQEAgLTI5MywxMCAmIzQzOzI5NywxMiBAQCBzdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCiAJcmRldiA9IHdwYW5fcGh5X3RvX3JkZXYod3Bhbl9kZXYtJmd0O3dwYW5fcGh5KTsKIAotCS8qIFRPRE8gV0FSTl9PTiB1bnNwZWMgdHlwZSAqLwomIzQzOwlXQVJOX09OKHdwYW5fZGV2LSZndDtpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQyk7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7Ci0JCS8qIFRPRE8gTkVUREVWX0RFVlRZUEUgKi8KJiM0MzsJY2FzZSBORVRERVZfUE9TVF9JTklUOgomIzQzOwkJU0VUX05FVERFVl9ERVZUWVBFKGRldiwgJmFtcDt3cGFuX2Rldl90eXBlKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgogCQlkZXYtJmd0O25ldG5zX2ltbXV0YWJsZSA9IHRydWU7CiAJCXdwYW5fZGV2LSZndDtpZGVudGlmaWVyID0gJiM0MzsmIzQzO3JkZXYtJmd0O3dwYW5fZGV2X2lkOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyNAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElFRUUgODAyLjE1LjQgQ29yZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AuIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgZGVmaW5pdGlvbiBvZiBgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3cGFuX2Rldl90eXBlID0geyAubmFtZSA9ICYjMzQ7d3BhbiYjMzQ7IH07YC4gRXNzZW50aWFsbHksIGl0IGVzdGFibGlzaGVzIGEgc3BlY2lmaWMgZGV2aWNlIHR5cGUgZm9yIFdQQU4sIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBjbGFyaXR5IGFuZCBwb3RlbnRpYWwgZnV0dXJlIGVuaGFuY2VtZW50cy4KClRoZW4sIHRoZXJlJiMzOTtzIGEgYFdBUk5fT04od3Bhbl9kZXYtJmd0O2lmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKTtgIGxpbmUgYWRkZWQgd2l0aGluIGBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxgLiBUaGF0JiMzOTtzIGEgc2FuaXR5IGNoZWNrOyBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHRvIHByZXZlbnQgdW5kZWZpbmVkIGJlaGF2aW9yIGJ5IGVuc3VyaW5nIHRoZSBpbnRlcmZhY2UgdHlwZSBpcyBleHBsaWNpdGx5IHNldCAqYmVmb3JlKiB0aGUgbm90aWZpY2F0aW9uIGNhbGwuIEEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgcHJhY3RpY2UsIGFsdGhvdWdoIEkmIzM5O2Qgd2FudCB0byBjaGVjayB3aGVyZSBgd3Bhbl9kZXYtJmd0O2lmdHlwZWAgaXMgaW5pdGlhbGl6ZWQgdG8gY29uZmlybSBpdHMgbmVjZXNzaXR5LgoKRmluYWxseSwgdGhlIGBORVRERVZfUE9TVF9JTklUYCBldmVudCBpbiBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCBub3cgaW5jbHVkZXMgYFNFVF9ORVRERVZfREVWVFlQRShkZXYsICZhbXA7d3Bhbl9kZXZfdHlwZSk7YC4gVGhpcyBpcyB3aGVyZSB0aGUgZGVjbGFyZWQgYHdwYW5fZGV2X3R5cGVgIGNvbWVzIGludG8gcGxheS4gSXQmIzM5O3MgcHJvcGVybHkgYXNzb2NpYXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgbmV0ZGV2IHdpdGggdGhlIFdQQU4gZGV2aWNlIHR5cGUuIFByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGFmdGVyIG5ldGRldiBpbml0aWFsaXphdGlvbiwgd2XigJlyZSBwcm9wZXJseSBtYXJraW5nIGl0IGFzIGEgV1BBTiB0eXBlIGZvciB0aGUga2VybmVsJiMzOTtzIGRldmljZSBtYW5hZ2VtZW50LgoKSSYjMzk7bGwgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBidXQgdGhlc2UgY2hhbmdlcyBzZWVtIGxvZ2ljYWwgYW5kLCBvbiB0aGUgc3VyZmFjZSwgcmVwcmVzZW50IGdvb2QgcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2llZWU4MDIxNTQvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHR2b2lkIGNmZzgwMjE1NF9kZXZfZnJlZShzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxuIDI3MTpcdHtcbiAyNzI6XHRcdGtmcmVlKHJkZXYpO1xuIDI3MzpcdH1cbiAyNzQ6XHRcbiAyNzU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHdwYW5fZGV2X3R5cGUgPSB7XG4gMjc2Olx0XHQubmFtZVx0PSBcJiMzNDt3cGFuXCYjMzQ7LFxuIDI3NzpcdH07XG4gMjc4Olx0XG4gMjc5Olx0c3RhdGljIHZvaWRcbiAyODA6XHRjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIDI4MTpcdFx0XHRcdCAgIGludCBpZnR5cGUsIGludCBudW0pXG4gMjgyOlx0e1xuIDI4MzpcdFx0QVNTRVJUX1JUTkwoKTtcbiAyODQ6XHRcbiAyODU6XHRcdHJkZXYtXHUwMDNlbnVtX3J1bm5pbmdfaWZhY2VzICYjNDM7PSBudW07XG4gMjg2Olx0fVxuIDI4NzpcdFxuIDI4ODpcdHN0YXRpYyBpbnQgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gMjg5Olx0XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzdGF0ZSwgdm9pZCAqcHRyKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiAyOTI6XHRcdHN0cnVjdCB3cGFuX2RldiAqd3Bhbl9kZXYgPSBkZXYtXHUwMDNlaWVlZTgwMjE1NF9wdHI7XG4gMjkzOlx0XHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xuIDI5NDpcdFxuIDI5NTpcdFx0aWYgKCF3cGFuX2RldilcbiAyOTY6XHRcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIDI5NzpcdFxuIDI5ODpcdFx0cmRldiA9IHdwYW5fcGh5X3RvX3JkZXYod3Bhbl9kZXYtXHUwMDNld3Bhbl9waHkpO1xuIDI5OTpcdFxuIDMwMDpcdFx0V0FSTl9PTih3cGFuX2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQyk7XG4gMzAxOlx0XG4gMzAyOlx0XHRzd2l0Y2ggKHN0YXRlKSB7XG4gMzAzOlx0XHRjYXNlIE5FVERFVl9QT1NUX0lOSVQ6XG4gMzA0Olx0XHRcdFNFVF9ORVRERVZfREVWVFlQRShkZXYsIFx1MDAyNndwYW5fZGV2X3R5cGUpO1xuIDMwNTpcdFx0XHRicmVhaztcbiAzMDY6XHRcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxuIDMwNzpcdFx0XHRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbiAzMDg6XHRcdFx0d3Bhbl9kZXYtXHUwMDNlaWRlbnRpZmllciA9ICYjNDM7JiM0MztyZGV2LVx1MDAzZXdwYW5fZGV2X2lkO1xuIDMwOTpcdFx0XHRsaXN0X2FkZF9yY3UoXHUwMDI2d3Bhbl9kZXYtXHUwMDNlbGlzdCwgXHUwMDI2cmRldi1cdTAwM2V3cGFuX2Rldl9saXN0KTtcbiAzMTA6XHRcdFx0cmRldi1cdTAwM2VkZXZsaXN0X2dlbmVyYXRpb24mIzQzOyYjNDM7O1xuIDMxMTpcdFx0XHRtdXRleF9pbml0KFx1MDAyNndwYW5fZGV2LVx1MDAzZWFzc29jaWF0aW9uX2xvY2spO1xuIDMxMjpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ3cGFuX2Rldi1cdTAwM2VjaGlsZHJlbik7XG4gMzEzOlx0XHRcdHdwYW5fZGV2LVx1MDAzZW1heF9hc3NvY2lhdGlvbnMgPSBTWl8xNks7XG4gMzE0Olx0XG4gMzE1Olx0XHRcdHdwYW5fZGV2LVx1MDAzZW5ldGRldiA9IGRldjtcbiAzMTY6XHRcdFx0YnJlYWs7XG4gMzE3Olx0XHRjYXNlIE5FVERFVl9ET1dOOlxuIDMxODpcdFx0XHRjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShyZGV2LCB3cGFuX2Rldi1cdTAwM2VpZnR5cGUsIC0xKTtcbiAzMTk6XHRcbiAzMjA6XHRcdFx0cmRldi1cdTAwM2VvcGVuY291bnQtLTtcbiAzMjE6XHRcdFx0d2FrZV91cChcdTAwMjZyZGV2LVx1MDAzZWRldl93YWl0KTtcbiAzMjI6XHRcdFx0YnJlYWs7XG4gMzIzOlx0XHRjYXNlIE5FVERFVl9VUDpcbiAzMjQ6XHRcdFx0Y2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0ocmRldiwgd3Bhbl9kZXYtXHUwMDNlaWZ0eXBlLCAxKTtcbiAzMjU6XHRcbiAzMjY6XHRcdFx0cmRldi1cdTAwM2VvcGVuY291bnQmIzQzOyYjNDM7O1xuIDMyNzpcdFx0XHRicmVhaztcbiAzMjg6XHRcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XG4gMzI5Olx0XHRcdGNmZzgwMjE1NF9mcmVlX3BlZXJfc3RydWN0dXJlcyh3cGFuX2Rldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE3OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTkKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCYjMzk7cyBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBgc3RydWN0IGRldmljZV90eXBlYCBjYWxsZWQgYHdwYW5fZGV2X3R5cGVgIGFzIGEgc3RhdGljLCByZWFkLW9ubHkgdmFyaWFibGUuIE5vIHByb2JsZW0gdGhlcmUsIGl0JiMzOTtzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLiBUaGVuLCB3ZSBoYXZlIGEgYFdBUk5fT05gIHRoYXQgY2hlY2tzIGB3cGFuX2Rldi0mZ3Q7aWZ0eXBlYC4gQWdhaW4sIHRoaXMgY2hlY2tzIGFuIGV4aXN0aW5nLCBpbml0aWFsaXplZCBmaWVsZC4gRmluYWxseSwgYFNFVF9ORVRERVZfREVWVFlQRWAgaXMgdXNlZCB3aGljaCBqdXN0IHNldHMgYSBwb2ludGVyLCBgZGV2LSZndDtkZXYudHlwZWAsIHRvIG91ciBgd3Bhbl9kZXZfdHlwZWAuCgpNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBsb29rcyBjbGVhbiwgYnV0IGxldCYjMzk7cyBiZSBtZXRob2RpY2FsLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBhbGxvY2F0aW9ucyBvciBidWZmZXIgbWFuaXB1bGF0aW9ucyBpbnZvbHZlZC4gUmV2aWV3aW5nIHRoZSBjb2RlLCB0aGVyZSBhcmUgbm8gdXNlci1jb3B5IG9wZXJhdGlvbnMsIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBtZW1vcnksIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGJ1ZmZlcnMgaW4gYW55IHdheS4gTm8gbmV3IHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCB0aGF0IGFyZSB1bmluaXRpYWxpemVkIGFuZCBubyBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIGFyZSBtb2RpZmllZCB0aGF0IHdvdWxkIG1ha2UgdXMgc3VzcGVjdCBpdC4gU28sIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBXZSYjMzk7cmUgc2FmZSBvbiB0aGF0IGZyb250LgoKVGhlcmVmb3JlLCBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgc3VmZmljaWVudC4gSXQmIzM5O3MgYSBjbGVhciBjYXNlIHdoZXJlIEtNU0FOJiMzOTtzIGRlZXBlciBzY3J1dGlueSBpc24mIzM5O3Qgd2FycmFudGVkLgoKQWxyaWdodCwgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zLiAmIzM0O05lZWRzS01TQU46IFRydWUgb25seSBpZiBjaGFuZ2VzIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4mIzM0OyBUaGF0JiMzOTtzIGEgcmVzb3VuZGluZyAqZmFsc2UqIGluIHRoaXMgY2FzZS4gJiMzNDtLTVNBTlJlYXNvbmluZzogUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHkuJiMzNDsgUGVyZmVjdCwgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQgSSYjMzk7dmUgcHJvdmlkZWQuIE5vdyBJJiMzOTtsbCBkb2N1bWVudCBteSByZWFzb25pbmcgYW5kIHNldCB0aGUgcmVzdWx0cyBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTc6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHN0YXRpYyBjb25zdCBkZXZpY2VfdHlwZSBzdHJ1Y3R1cmUgKGB3cGFuX2Rldl90eXBlYCksIGEgV0FSTl9PTiBjaGVjayBmb3IgdW5zcGVjaWZpZWQgaW50ZXJmYWNlIHR5cGVzLCBhbmQgc2V0cyB0aGUgbmV0ZGV2IGRldmljZSB0eXBlIHBvaW50ZXIgZHVyaW5nIE5FVERFVl9QT1NUX0lOSVQgbm90aWZpY2F0aW9uLlxuXG4xLiBObyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuMi4gVGhlIGB3cGFuX2Rldl90eXBlYCBzdHJ1Y3QgaXMgc3RhdGljYWxseSBkZWZpbmVkIGFuZCBpbml0aWFsaXplZCBhdCBjb21waWxlIHRpbWUuXG4zLiBObyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBidWZmZXIgbGVuZ3Rocy9vZmZzZXRzIGFyZSBhZmZlY3RlZC5cbjQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHN0YXRpYyBjb25zdCBkZXZpY2VfdHlwZSBzdHJ1Y3R1cmUgKGB3cGFuX2Rldl90eXBlYCksIGEgV0FSTl9PTiBjaGVjayBmb3IgdW5zcGVjaWZpZWQgaW50ZXJmYWNlIHR5cGVzLCBhbmQgc2V0cyB0aGUgbmV0ZGV2IGRldmljZSB0eXBlIHBvaW50ZXIgZHVyaW5nIE5FVERFVl9QT1NUX0lOSVQgbm90aWZpY2F0aW9uLlxuXG4xLiBObyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuMi4gVGhlIGB3cGFuX2Rldl90eXBlYCBzdHJ1Y3QgaXMgc3RhdGljYWxseSBkZWZpbmVkIGFuZCBpbml0aWFsaXplZCBhdCBjb21waWxlIHRpbWUuXG4zLiBObyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBidWZmZXIgbGVuZ3Rocy9vZmZzZXRzIGFyZSBhZmZlY3RlZC5cbjQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxOTo1MS4zNTUxOTA4NzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc2MDI5MDE3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiTUFDODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTFwiLFxuICAgIFwiSUVFRTgwMjE1NF9GQUtFTEJcIixcbiAgICBcIklFRUU4MDIxNTRfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxcIixcbiAgICBcIm5sODAyMTU0X25ld19pbnRlcmZhY2VcIixcbiAgICBcImllZWU4MDIxNTRfYWRkX2lmYWNlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3RhdGljIGNvbnN0IGRldmljZV90eXBlIHN0cnVjdHVyZSAoYHdwYW5fZGV2X3R5cGVgKSwgYSBXQVJOX09OIGNoZWNrIGZvciB1bnNwZWNpZmllZCBpbnRlcmZhY2UgdHlwZXMsIGFuZCBzZXRzIHRoZSBuZXRkZXYgZGV2aWNlIHR5cGUgcG9pbnRlciBkdXJpbmcgTkVUREVWX1BPU1RfSU5JVCBub3RpZmljYXRpb24uXFxuXFxuMS4gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4yLiBUaGUgYHdwYW5fZGV2X3R5cGVgIHN0cnVjdCBpcyBzdGF0aWNhbGx5IGRlZmluZWQgYW5kIGluaXRpYWxpemVkIGF0IGNvbXBpbGUgdGltZS5cXG4zLiBObyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBidWZmZXIgbGVuZ3Rocy9vZmZzZXRzIGFyZSBhZmZlY3RlZC5cXG40LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbCgpIGluIHRoZSBJRUVFIDgwMi4xNS40IHN1YnN5c3RlbSB0byBzZXQgbmV0ZGV2IGRldmljZSB0eXBlIG9uIE5FVERFVl9QT1NUX0lOSVQgYW5kIGFkZHMgYSBuZXcgcnVudGltZSBhc3NlcnRpb24gV0FSTl9PTih3cGFuX2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKG5sODAyMTU0L3J0bmV0bGluaykgaW50ZXJmYWNlIGNyZWF0aW9uIGFuZCBuZXRkZXYgbGlmZWN5Y2xlIGV2ZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTk6NTEuMzU1MjA0OTk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjgyNzI5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZjE1YmQzYzlhNWNlY2I0OTcyYjZkMTJmN2VlNjBiZjVjYzBlMzEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MTk6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvY29yZS5jIGIvbmV0L2llZWU4MDIxNTQvY29yZS5jXFxuaW5kZXggYzBiODcxMjAxOGExNi4uZWM1YmZkZjZiZDMxZSAxMDA2NDRcXG4tLS0gYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcXG4rKysgYi9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcXG5AQCAtMjcyLDYgKzI3MiwxMCBAQCB2b2lkIGNmZzgwMjE1NF9kZXZfZnJlZShzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KVxcbiBcXHRrZnJlZShyZGV2KTtcXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3cGFuX2Rldl90eXBlID0ge1xcbitcXHQubmFtZVxcdD0gXFxcIndwYW5cXFwiLFxcbit9O1xcbitcXG4gc3RhdGljIHZvaWRcXG4gY2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0XFx0XFx0ICAgaW50IGlmdHlwZSwgaW50IG51bSlcXG5AQCAtMjkzLDEwICsyOTcsMTIgQEAgc3RhdGljIGludCBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gXFxuIFxcdHJkZXYgPSB3cGFuX3BoeV90b19yZGV2KHdwYW5fZGV2LVxcdTAwM2V3cGFuX3BoeSk7XFxuIFxcbi1cXHQvKiBUT0RPIFdBUk5fT04gdW5zcGVjIHR5cGUgKi9cXG4rXFx0V0FSTl9PTih3cGFuX2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xcbiBcXG4gXFx0c3dpdGNoIChzdGF0ZSkge1xcbi1cXHRcXHQvKiBUT0RPIE5FVERFVl9ERVZUWVBFICovXFxuK1xcdGNhc2UgTkVUREVWX1BPU1RfSU5JVDpcXG4rXFx0XFx0U0VUX05FVERFVl9ERVZUWVBFKGRldiwgXFx1MDAyNndwYW5fZGV2X3R5cGUpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBORVRERVZfUkVHSVNURVI6XFxuIFxcdFxcdGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcXG4gXFx0XFx0d3Bhbl9kZXYtXFx1MDAzZWlkZW50aWZpZXIgPSArK3JkZXYtXFx1MDAzZXdwYW5fZGV2X2lkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxOTo1MS44ODQxNzU2NTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExMTgzMjE4NTAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJRUVFODAyMTU0XCIsXG4gICAgXCJNQUM4MDIxNTRcIixcbiAgICBcIklFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMXCIsXG4gICAgXCJJRUVFODAyMTU0X0ZBS0VMQlwiLFxuICAgIFwiSUVFRTgwMjE1NF9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbFwiLFxuICAgIFwibmw4MDIxNTRfbmV3X2ludGVyZmFjZVwiLFxuICAgIFwiaWVlZTgwMjE1NF9hZGRfaWZhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoKSBpbiB0aGUgSUVFRSA4MDIuMTUuNCBzdWJzeXN0ZW0gdG8gc2V0IG5ldGRldiBkZXZpY2UgdHlwZSBvbiBORVRERVZfUE9TVF9JTklUIGFuZCBhZGRzIGEgbmV3IHJ1bnRpbWUgYXNzZXJ0aW9uIFdBUk5fT04od3Bhbl9kZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKS4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChubDgwMjE1NC9ydG5ldGxpbmspIGludGVyZmFjZSBjcmVhdGlvbiBhbmQgbmV0ZGV2IGxpZmVjeWNsZSBldmVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGYxNWJkM2M5YTVjZWNiNDk3MmI2ZDEyZjdlZTYwYmY1Y2MwZTMxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MTk6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmMgYi9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcbmluZGV4IGMwYjg3MTIwMThhMTYuLmVjNWJmZGY2YmQzMWUgMTAwNjQ0XG4tLS0gYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcbisrKyBiL25ldC9pZWVlODAyMTU0L2NvcmUuY1xuQEAgLTI3Miw2ICsyNzIsMTAgQEAgdm9pZCBjZmc4MDIxNTRfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbiBcdGtmcmVlKHJkZXYpO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHdwYW5fZGV2X3R5cGUgPSB7XG4rXHQubmFtZVx0PSBcIndwYW5cIixcbit9O1xuK1xuIHN0YXRpYyB2b2lkXG4gY2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHQgICBpbnQgaWZ0eXBlLCBpbnQgbnVtKVxuQEAgLTI5MywxMCArMjk3LDEyIEBAIHN0YXRpYyBpbnQgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXG4gXHRyZGV2ID0gd3Bhbl9waHlfdG9fcmRldih3cGFuX2Rldi1cdTAwM2V3cGFuX3BoeSk7XG4gXG4tXHQvKiBUT0RPIFdBUk5fT04gdW5zcGVjIHR5cGUgKi9cbitcdFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xuIFxuIFx0c3dpdGNoIChzdGF0ZSkge1xuLVx0XHQvKiBUT0RPIE5FVERFVl9ERVZUWVBFICovXG4rXHRjYXNlIE5FVERFVl9QT1NUX0lOSVQ6XG4rXHRcdFNFVF9ORVRERVZfREVWVFlQRShkZXYsIFx1MDAyNndwYW5fZGV2X3R5cGUpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxuIFx0XHRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbiBcdFx0d3Bhbl9kZXYtXHUwMDNlaWRlbnRpZmllciA9ICsrcmRldi1cdTAwM2V3cGFuX2Rldl9pZDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjE5OjUxLjg4NDE3Njk5NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NzcyOTA2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJRUVFIDgwMi4xNS40IENvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBkaWZmYCBpdHNlbGYuIEkgY2FuIHNlZSB0aGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AuIEhtbSwgYSBuZXcgYHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3Bhbl9kZXZfdHlwZWAgZGVmaW5pdGlvbiBpcyBpbnRyb2R1Y2VkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB3ZSdyZSBlc3RhYmxpc2hpbmcgYSBzcGVjaWZpYyBkZXZpY2UgdHlwZSBmb3IgV1BBTiBkZXZpY2VzLCBjbGVhcmx5LlxuXG5UaGVuLCBJIHNlZSB0aGUgYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgZnVuY3Rpb24gaGFzIGEgYE5FVERFVl9QT1NUX0lOSVRgIGNhc2UgYWRkZWQgdG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGNvcmUgY2hhbmdlIGluIHRoZSBwYXRjaC4gTm93LCBpbiB0aGlzIGNhc2UsIGBTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcdTAwMjZ3cGFuX2Rldl90eXBlKWAgaXMgY2FsbGVkLiBTbywgdGhlIGB3cGFuX2Rldl90eXBlYCB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV0d29yayBkZXZpY2UgYXQgdGhhdCBwb2ludC4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBuZXdseSBkZWZpbmVkIHR5cGUuXG5cblRoZSBgV0FSTl9PTmAgY2hlY2sgZm9yIGBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDYCBpcyBhIGdvb2QgcHJhY3RpY2UuIEl0IHZhbGlkYXRlcyBhIHNwZWNpZmljIGludGVyZmFjZSB0eXBlLCB3aGljaCBpcyBnb29kLiBJdCdzIGEgdXNlZnVsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlbid0IGxlZnQgdW5kZWZpbmVkLlxuXG5JIHNob3VsZCBhbHNvIGdvIGFoZWFkIGFuZCBsb2FkIHVwIHRoZSBmaWxlIHRvIHJldmlldyBpdCBtb3JlIGNhcmVmdWxseSBhbmQgc2VlIGhvdyB0aGlzIG5ldyBkZXZpY2UgdHlwZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZXhpc3RpbmcgY29kZS4gQWxzbywgSSBzaG91bGQgY2hlY2sgdGhlIHJlbGF0ZWQgS2NvbmZpZyBvcHRpb25zIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBPdmVyYWxsLCBpdCBhcHBlYXJzIHRvIGJlIGEgcmVhc29uYWJsZSBhZGRpdGlvbiB0byBiZXR0ZXIgZGVmaW5lIHRoZSBkZXZpY2UgdHlwZSBmb3IgV1BBTiBkZXZpY2VzIHdpdGhpbiB0aGUgODAyLjE1LjQgY29yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExMiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjE5OjU3LjU2MTQ3MDk2NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pZWVlODAyMTU0L2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0dm9pZCBjZmc4MDIxNTRfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcXG4gMjcxOlxcdHtcXG4gMjcyOlxcdFxcdGtmcmVlKHJkZXYpO1xcbiAyNzM6XFx0fVxcbiAyNzQ6XFx0XFxuIDI3NTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHdwYW5fZGV2X3R5cGUgPSB7XFxuIDI3NjpcXHRcXHQubmFtZVxcdD0gXFxcIndwYW5cXFwiLFxcbiAyNzc6XFx0fTtcXG4gMjc4OlxcdFxcbiAyNzk6XFx0c3RhdGljIHZvaWRcXG4gMjgwOlxcdGNmZzgwMjE1NF91cGRhdGVfaWZhY2VfbnVtKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIDI4MTpcXHRcXHRcXHRcXHQgICBpbnQgaWZ0eXBlLCBpbnQgbnVtKVxcbiAyODI6XFx0e1xcbiAyODM6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4gMjg0OlxcdFxcbiAyODU6XFx0XFx0cmRldi1cXHUwMDNlbnVtX3J1bm5pbmdfaWZhY2VzICs9IG51bTtcXG4gMjg2OlxcdH1cXG4gMjg3OlxcdFxcbiAyODg6XFx0c3RhdGljIGludCBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gMjg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGF0ZSwgdm9pZCAqcHRyKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiAyOTI6XFx0XFx0c3RydWN0IHdwYW5fZGV2ICp3cGFuX2RldiA9IGRldi1cXHUwMDNlaWVlZTgwMjE1NF9wdHI7XFxuIDI5MzpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xcbiAyOTQ6XFx0XFxuIDI5NTpcXHRcXHRpZiAoIXdwYW5fZGV2KVxcbiAyOTY6XFx0XFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbiAyOTc6XFx0XFxuIDI5ODpcXHRcXHRyZGV2ID0gd3Bhbl9waHlfdG9fcmRldih3cGFuX2Rldi1cXHUwMDNld3Bhbl9waHkpO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRXQVJOX09OKHdwYW5fZGV2LVxcdTAwM2VpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQyk7XFxuIDMwMTpcXHRcXG4gMzAyOlxcdFxcdHN3aXRjaCAoc3RhdGUpIHtcXG4gMzAzOlxcdFxcdGNhc2UgTkVUREVWX1BPU1RfSU5JVDpcXG4gMzA0OlxcdFxcdFxcdFNFVF9ORVRERVZfREVWVFlQRShkZXYsIFxcdTAwMjZ3cGFuX2Rldl90eXBlKTtcXG4gMzA1OlxcdFxcdFxcdGJyZWFrO1xcbiAzMDY6XFx0XFx0Y2FzZSBORVRERVZfUkVHSVNURVI6XFxuIDMwNzpcXHRcXHRcXHRkZXYtXFx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XFxuIDMwODpcXHRcXHRcXHR3cGFuX2Rldi1cXHUwMDNlaWRlbnRpZmllciA9ICsrcmRldi1cXHUwMDNld3Bhbl9kZXZfaWQ7XFxuIDMwOTpcXHRcXHRcXHRsaXN0X2FkZF9yY3UoXFx1MDAyNndwYW5fZGV2LVxcdTAwM2VsaXN0LCBcXHUwMDI2cmRldi1cXHUwMDNld3Bhbl9kZXZfbGlzdCk7XFxuIDMxMDpcXHRcXHRcXHRyZGV2LVxcdTAwM2VkZXZsaXN0X2dlbmVyYXRpb24rKztcXG4gMzExOlxcdFxcdFxcdG11dGV4X2luaXQoXFx1MDAyNndwYW5fZGV2LVxcdTAwM2Vhc3NvY2lhdGlvbl9sb2NrKTtcXG4gMzEyOlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ3cGFuX2Rldi1cXHUwMDNlY2hpbGRyZW4pO1xcbiAzMTM6XFx0XFx0XFx0d3Bhbl9kZXYtXFx1MDAzZW1heF9hc3NvY2lhdGlvbnMgPSBTWl8xNks7XFxuIDMxNDpcXHRcXG4gMzE1OlxcdFxcdFxcdHdwYW5fZGV2LVxcdTAwM2VuZXRkZXYgPSBkZXY7XFxuIDMxNjpcXHRcXHRcXHRicmVhaztcXG4gMzE3OlxcdFxcdGNhc2UgTkVUREVWX0RPV046XFxuIDMxODpcXHRcXHRcXHRjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShyZGV2LCB3cGFuX2Rldi1cXHUwMDNlaWZ0eXBlLCAtMSk7XFxuIDMxOTpcXHRcXG4gMzIwOlxcdFxcdFxcdHJkZXYtXFx1MDAzZW9wZW5jb3VudC0tO1xcbiAzMjE6XFx0XFx0XFx0d2FrZV91cChcXHUwMDI2cmRldi1cXHUwMDNlZGV2X3dhaXQpO1xcbiAzMjI6XFx0XFx0XFx0YnJlYWs7XFxuIDMyMzpcXHRcXHRjYXNlIE5FVERFVl9VUDpcXG4gMzI0OlxcdFxcdFxcdGNmZzgwMjE1NF91cGRhdGVfaWZhY2VfbnVtKHJkZXYsIHdwYW5fZGV2LVxcdTAwM2VpZnR5cGUsIDEpO1xcbiAzMjU6XFx0XFxuIDMyNjpcXHRcXHRcXHRyZGV2LVxcdTAwM2VvcGVuY291bnQrKztcXG4gMzI3OlxcdFxcdFxcdGJyZWFrO1xcbiAzMjg6XFx0XFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcXG4gMzI5OlxcdFxcdFxcdGNmZzgwMjE1NF9mcmVlX3BlZXJfc3RydWN0dXJlcyh3cGFuX2Rldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjE5OjU3LjU2MTU2NjgzM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODE3NzUzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBJRUVFIDgwMi4xNS40IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBJRUVFIDgwMi4xNS40IHN1cHBvcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGp1bXAgZGlyZWN0bHkgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIHVuZGVyIGBuZXQvaWVlZTgwMjE1NGAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGRlZmluZWQuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGF2YWlsYWJsZSwgd2hhdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgZHJpdmVycyBhcmUgaW50ZXJ3b3Zlbi5cblxuSSBuZWVkIHRvIHNlZTogQXJlIHRoZXJlIGFueSBuZXcgb3B0aW9ucyBzaW5jZSB0aGUgbGFzdCB0aW1lIEkgbG9va2VkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgZGVwZW5kZW5jaWVzIHRoYXQgSSBzaG91bGQga25vdyBhYm91dCBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgb3IgdXNlIGNhc2VzPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBkZWZhdWx0IHNldHRpbmdzIHRoYXQgbWlnaHQgdHJpcCBtZSB1cCB3aGVuIGRlYnVnZ2luZyBvciBvcHRpbWl6aW5nPyBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFmZmVjdCB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5IGlzIGNyaXRpY2FsLiBUaGUgZ29hbCBpcyBhIGNsZWFyIG92ZXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDE3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoxOTo1OS40NDMzNDQyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMxNjMwNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSUVFRTgwMjE1NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaWVlZTgwMjE1NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE0MjEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vNmxvd3Bhbl9pLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vNmxvd3Bhbl9pLmg6MjojaWZuZGVmIF9fSUVFRTgwMjE1NF82TE9XUEFOX0lfSF9fXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi82bG93cGFuX2kuaDozOiNkZWZpbmUgX19JRUVFODAyMTU0XzZMT1dQQU5fSV9IX19cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuLzZsb3dwYW5faS5oLTQtXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuLzZsb3dwYW5faS5oPTQ2PWxvd3Bhbl9yeF9yZXN1bHQgbG93cGFuX3J4X2hfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuLzZsb3dwYW5faS5oLTQ3LVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vNmxvd3Bhbl9pLmg6NDg6I2VuZGlmIC8qIF9fSUVFRTgwMjE1NF82TE9XUEFOX0lfSF9fICovXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWc6Mjpjb25maWcgSUVFRTgwMjE1NF82TE9XUEFOXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIjZsb3dwYW4gc3VwcG9ydCBvdmVyIElFRUUgODAyLjE1LjRcXFwiXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9NYWtlZmlsZToyOm9iai0kKENPTkZJR19JRUVFODAyMTU0XzZMT1dQQU4pICs9IGllZWU4MDIxNTRfNmxvd3Bhbi5vXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9NYWtlZmlsZS0zLVxcbi0tXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM9ODY9c3RhdGljIGludCBsb3dwYW5fbmVpZ2hfY29uc3RydWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZWlnaGJvdXIgKm4pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy05MC1cXHQvKiBkZWZhdWx0IG5vIHNob3J0X2FkZHIgaXMgYXZhaWxhYmxlIGZvciBhIG5laWdoYm91ciAqL1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jOjkxOlxcdG5laWdoLVxcdTAwM2VzaG9ydF9hZGRyID0gY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9BRERSX1NIT1JUX1VOU1BFQyk7XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmMtOTItXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYz0xMDk9c3RhdGljIHZvaWQgbG93cGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpsZGV2KVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTExMC17XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM6MTExOlxcdG1lbXNldChsZGV2LVxcdTAwM2Vicm9hZGNhc3QsIDB4ZmYsIElFRUU4MDIxNTRfQUREUl9MRU4pO1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTExMi1cXHQvKiBXZSBuZWVkIGFuIGlwdjZoZHIgYXMgbWluaW11bSBsZW4gd2hlbiBjYWxsaW5nIHhtaXQgKi9cXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jPTEyMz1zdGF0aWMgaW50IGxvd3Bhbl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xMjYtXFx0aWYgKHRiW0lGTEFfQUREUkVTU10pIHtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzoxMjc6XFx0XFx0aWYgKG5sYV9sZW4odGJbSUZMQV9BRERSRVNTXSkgIT0gSUVFRTgwMjE1NF9BRERSX0xFTilcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xMjgtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYz0xMzM9c3RhdGljIGludCBsb3dwYW5fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbGRldixcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE1Mi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzoxNTM6XFx0aWYgKHdkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpIHtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xNTQtXFx0XFx0ZGV2X3B1dCh3ZGV2KTtcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE2NC1cXHQvKiBTZXQgdGhlIGxvd3BhbiBoYXJkd2FyZSBhZGRyZXNzIHRvIHRoZSB3cGFuIGhhcmR3YXJlIGFkZHJlc3MuICovXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM6MTY1OlxcdF9fZGV2X2FkZHJfc2V0KGxkZXYsIHdkZXYtXFx1MDAzZWRldl9hZGRyLCBJRUVFODAyMTU0X0FERFJfTEVOKTtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYy0xNjYtXFx0LyogV2UgbmVlZCBoZWFkcm9vbSBmb3IgcG9zc2libGUgd3Bhbl9kZXZfaGFyZF9oZWFkZXIgY2FsbCBhbmQgdGFpbHJvb21cXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE3Ny1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzoxNzg6XFx0cmV0ID0gbG93cGFuX3JlZ2lzdGVyX25ldGRldmljZShsZGV2LCBMT1dQQU5fTExUWVBFX0lFRUU4MDIxNTQpO1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTE3OS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmM9MjE4PXN0YXRpYyBpbnQgbG93cGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jLTIyMy1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYzoyMjQ6XFx0aWYgKG5kZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9jb3JlLmMtMjI1LVxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vcnguYz0yNzE9c3RhdGljIGludCBsb3dwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICp3ZGV2LFxcbi0tXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9yeC5jLTI3NS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmM6Mjc2OlxcdGlmICh3ZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0IHx8XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9yeC5jLTI3Ny1cXHQgICAgc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUIHx8XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmM9MzEwPXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbG93cGFuX3BhY2tldF90eXBlID0ge1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vcnguYzozMTE6XFx0LnR5cGUgPSBodG9ucyhFVEhfUF9JRUVFODAyMTU0KSxcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3J4LmMtMzEyLVxcdC5mdW5jID0gbG93cGFuX3JjdixcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYz0zMz1pbnQgbG93cGFuX2hlYWRlcl9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmxkZXYsXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtNTYtXFx0aWYgKCFtZW1jbXAoZGFkZHIsIGxkZXYtXFx1MDAzZWJyb2FkY2FzdCwgRVVJNjRfQUREUl9MRU4pKSB7XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jOjU3OlxcdFxcdGluZm8tXFx1MDAzZWRhZGRyLnNob3J0X2FkZHIgPSBjcHVfdG9fbGUxNihJRUVFODAyMTU0X0FERFJfQlJPQURDQVNUKTtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NTg6XFx0XFx0aW5mby1cXHUwMDNlZGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtNTktXFx0fSBlbHNlIHtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NjA6XFx0XFx0X19sZTE2IHNob3J0X2FkZHIgPSBjcHVfdG9fbGUxNihJRUVFODAyMTU0X0FERFJfU0hPUlRfVU5TUEVDKTtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtNjEtXFx0XFx0c3RydWN0IG5laWdoX3RhYmxlICp0YmwgPSBuZF90YWJsZShkZXZfbmV0KGxkZXYpKTtcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy03My1cXHRcXHRcXHRpbmZvLVxcdTAwM2VkYWRkci5zaG9ydF9hZGRyID0gc2hvcnRfYWRkcjtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NzQ6XFx0XFx0XFx0aW5mby1cXHUwMDNlZGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtNzUtXFx0XFx0fSBlbHNlIHtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6NzY6XFx0XFx0XFx0aW5mby1cXHUwMDNlZGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9MT05HO1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy03Ny1cXHRcXHRcXHRpZWVlODAyMTU0X2JlNjRfdG9fbGU2NChcXHUwMDI2aW5mby1cXHUwMDNlZGFkZHIuZXh0ZW5kZWRfYWRkcixcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy04Ni1cXHRcXHRpZiAobG93cGFuXzgwMjE1NF9pc192YWxpZF9zcmNfc2hvcnRfYWRkcih3cGFuX2Rldi1cXHUwMDNlc2hvcnRfYWRkcikpIHtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM6ODc6XFx0XFx0XFx0aW5mby1cXHUwMDNlc2FkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMtODgtXFx0XFx0XFx0aW5mby1cXHUwMDNlc2FkZHIuc2hvcnRfYWRkciA9IHdwYW5fZGV2LVxcdTAwM2VzaG9ydF9hZGRyO1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy04OS1cXHRcXHR9IGVsc2Uge1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYzo5MDpcXHRcXHRcXHRpbmZvLVxcdTAwM2VzYWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTkxLVxcdFxcdFxcdGluZm8tXFx1MDAzZXNhZGRyLmV4dGVuZGVkX2FkZHIgPSB3cGFuX2Rldi1cXHUwMDNlZXh0ZW5kZWRfYWRkcjtcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy05My1cXHR9IGVsc2Uge1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYzo5NDpcXHRcXHRpbmZvLVxcdTAwM2VzYWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jLTk1LVxcdFxcdGllZWU4MDIxNTRfYmU2NF90b19sZTY0KFxcdTAwMjZpbmZvLVxcdTAwM2VzYWRkci5leHRlbmRlZF9hZGRyLCBzYWRkcik7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmM9MjI1PXN0YXRpYyBpbnQgbG93cGFuX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbGRldixcXG4tLVxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy0yMzgtXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jOjIzOTpcXHRjYi1cXHUwMDNldHlwZSA9IElFRUU4MDIxNTRfRkNfVFlQRV9EQVRBO1xcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy0yNDAtXFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jOjI0MTpcXHRpZiAoaW5mby5kYWRkci5tb2RlID09IElFRUU4MDIxNTRfQUREUl9TSE9SVCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vdHguYy0yNDItXFx0ICAgIGllZWU4MDIxNTRfaXNfYnJvYWRjYXN0X3Nob3J0X2FkZHIoaW5mby5kYWRkci5zaG9ydF9hZGRyKSlcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjI6bWVudWNvbmZpZyBJRUVFODAyMTU0XFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJRUVFIFN0ZCA4MDIuMTUuNCBMb3ctUmF0ZSBXaXJlbGVzcyBQZXJzb25hbCBBcmVhIE5ldHdvcmtzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEzLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MTQ6aWYgSUVFRTgwMjE1NFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE3LVxcdGJvb2wgXFxcIklFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyMTpjb25maWcgSUVFRTgwMjE1NF9TT0NLRVRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19JRUVFODAyMTU0KSArPSBpZWVlODAyMTU0Lm9cXG5uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19JRUVFODAyMTU0X1NPQ0tFVCkgKz0gaWVlZTgwMjE1NF9zb2NrZXQub1xcbm5ldC9pZWVlODAyMTU0L01ha2VmaWxlLTQtb2JqLXkgKz0gNmxvd3Bhbi9cXG4tLVxcbm5ldC9pZWVlODAyMTU0L2NvcmUuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxubmV0L2llZWU4MDIxNTQvY29yZS5oOjI6I2lmbmRlZiBfX0lFRUU4MDIxNTRfQ09SRV9IXFxubmV0L2llZWU4MDIxNTQvY29yZS5oOjM6I2RlZmluZSBfX0lFRUU4MDIxNTRfQ09SRV9IXFxubmV0L2llZWU4MDIxNTQvY29yZS5oLTQtXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmg9NDg9c3RydWN0IHdwYW5fcGh5ICp3cGFuX3BoeV9pZHhfdG9fd3Bhbl9waHkoaW50IHdwYW5fcGh5X2lkeCk7XFxubmV0L2llZWU4MDIxNTQvY29yZS5oLTQ5LVxcbm5ldC9pZWVlODAyMTU0L2NvcmUuaDo1MDojZW5kaWYgLyogX19JRUVFODAyMTU0X0NPUkVfSCAqL1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTE1PWllZWU4MDIxNTRfaGRyX3B1c2hfYWRkcih1OCAqYnVmLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyLFxcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE5LVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMDpcXHRpZiAoYWRkci1cXHUwMDNlbW9kZSA9PSBJRUVFODAyMTU0X0FERFJfTk9ORSlcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjgtXFx0c3dpdGNoIChhZGRyLVxcdTAwM2Vtb2RlKSB7XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjI5OlxcdGNhc2UgSUVFRTgwMjE1NF9BRERSX1NIT1JUOlxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0zMC1cXHRcXHRtZW1jcHkoYnVmICsgcG9zLCBcXHUwMDI2YWRkci1cXHUwMDNlc2hvcnRfYWRkciwgMik7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMzMtXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjM0OlxcdGNhc2UgSUVFRTgwMjE1NF9BRERSX0xPTkc6XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjM1OlxcdFxcdG1lbWNweShidWYgKyBwb3MsIFxcdTAwMjZhZGRyLVxcdTAwM2VleHRlbmRlZF9hZGRyLCBJRUVFODAyMTU0X0FERFJfTEVOKTtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MzY6XFx0XFx0cG9zICs9IElFRUU4MDIxNTRfQUREUl9MRU47XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTM3LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTQ3PWllZWU4MDIxNTRfaGRyX3B1c2hfc2VjaGRyKHU4ICpidWYsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X3NlY2hkciAqaGRyKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTU0LVxcdHN3aXRjaCAoaGRyLVxcdTAwM2VrZXlfaWRfbW9kZSkge1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzo1NTpcXHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9JTVBMSUNJVDpcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNTYtXFx0XFx0cmV0dXJuIHBvcztcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNTctXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjU4OlxcdGNhc2UgSUVFRTgwMjE1NF9TQ0ZfS0VZX0lOREVYOlxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy01OS1cXHRcXHRicmVhaztcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtNjAtXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjYxOlxcdGNhc2UgSUVFRTgwMjE1NF9TQ0ZfS0VZX1NIT1JUX0lOREVYOlxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy02Mi1cXHRcXHRtZW1jcHkoYnVmICsgcG9zLCBcXHUwMDI2aGRyLVxcdTAwM2VzaG9ydF9zcmMsIDQpO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTY1LVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzo2NjpcXHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9IV19JTkRFWDpcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6Njc6XFx0XFx0bWVtY3B5KGJ1ZiArIHBvcywgXFx1MDAyNmhkci1cXHUwMDNlZXh0ZW5kZWRfc3JjLCBJRUVFODAyMTU0X0FERFJfTEVOKTtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6Njg6XFx0XFx0cG9zICs9IElFRUU4MDIxNTRfQUREUl9MRU47XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTY5LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTc4PWllZWU4MDIxNTRfaGRyX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxNTRfaGRyICpoZHIpXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTc5LXtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6ODA6XFx0dTggYnVmW0lFRUU4MDIxNTRfTUFYX0hFQURFUl9MRU5dO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy04MS1cXHRpbnQgcG9zID0gMjtcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy05Ni1cXHRpZiAoaGRyLVxcdTAwM2Vzb3VyY2UucGFuX2lkID09IGhkci1cXHUwMDNlZGVzdC5wYW5faWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6OTc6XFx0ICAgIGhkci1cXHUwMDNlZGVzdC5tb2RlICE9IElFRUU4MDIxNTRfQUREUl9OT05FKVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy05OC1cXHRcXHRmYy1cXHUwMDNlaW50cmFfcGFuID0gdHJ1ZTtcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz0xNzE9aWVlZTgwMjE1NF9oZHJfZ2V0X2FkZHIoY29uc3QgdTggKmJ1ZiwgaW50IG1vZGUsIGJvb2wgb21pdF9wYW4sXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMTc1LVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoxNzY6XFx0aWYgKG1vZGUgPT0gSUVFRTgwMjE1NF9BRERSX05PTkUpIHtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMTc3LVxcdFxcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoKmFkZHIpKTtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MTc4OlxcdFxcdGFkZHItXFx1MDAzZW1vZGUgPSBJRUVFODAyMTU0X0FERFJfTk9ORTtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMTc5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE4OC1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MTg5OlxcdGlmIChtb2RlID09IElFRUU4MDIxNTRfQUREUl9TSE9SVCkge1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0xOTAtXFx0XFx0bWVtY3B5KFxcdTAwMjZhZGRyLVxcdTAwM2VzaG9ydF9hZGRyLCBidWYgKyBwb3MsIDIpO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE5Mi1cXHR9IGVsc2Uge1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoxOTM6XFx0XFx0bWVtY3B5KFxcdTAwMjZhZGRyLVxcdTAwM2VleHRlbmRlZF9hZGRyLCBidWYgKyBwb3MsIElFRUU4MDIxNTRfQUREUl9MRU4pO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoxOTQ6XFx0XFx0cmV0dXJuIHBvcyArIElFRUU4MDIxNTRfQUREUl9MRU47XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTE5NS1cXHR9XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM9MTk4PXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9oZHJfYWRkcl9sZW4oaW50IG1vZGUsIGJvb2wgb21pdF9wYW4pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjAyLVxcdHN3aXRjaCAobW9kZSkge1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMDM6XFx0Y2FzZSBJRUVFODAyMTU0X0FERFJfTk9ORTogcmV0dXJuIDA7XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjIwNDpcXHRjYXNlIElFRUU4MDIxNTRfQUREUl9TSE9SVDogcmV0dXJuIDIgKyBwYW5fbGVuO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMDU6XFx0Y2FzZSBJRUVFODAyMTU0X0FERFJfTE9ORzogcmV0dXJuIElFRUU4MDIxNTRfQUREUl9MRU4gKyBwYW5fbGVuO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yMDYtXFx0ZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM9MjExPWllZWU4MDIxNTRfaGRyX2dldF9zZWNoZHIoY29uc3QgdTggKmJ1Ziwgc3RydWN0IGllZWU4MDIxNTRfc2VjaGRyICpoZHIpXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjE4LVxcdHN3aXRjaCAoaGRyLVxcdTAwM2VrZXlfaWRfbW9kZSkge1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMTk6XFx0Y2FzZSBJRUVFODAyMTU0X1NDRl9LRVlfSU1QTElDSVQ6XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTIyMC1cXHRcXHRyZXR1cm4gcG9zO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yMjEtXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjIyMjpcXHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9JTkRFWDpcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjIzLVxcdFxcdGJyZWFrO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yMjQtXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjIyNTpcXHRjYXNlIElFRUU4MDIxNTRfU0NGX0tFWV9TSE9SVF9JTkRFWDpcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjI2LVxcdFxcdG1lbWNweShcXHUwMDI2aGRyLVxcdTAwM2VzaG9ydF9zcmMsIGJ1ZiArIHBvcywgNCk7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMjI5LVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMzA6XFx0Y2FzZSBJRUVFODAyMTU0X1NDRl9LRVlfSFdfSU5ERVg6XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjIzMTpcXHRcXHRtZW1jcHkoXFx1MDAyNmhkci1cXHUwMDNlZXh0ZW5kZWRfc3JjLCBidWYgKyBwb3MsIElFRUU4MDIxNTRfQUREUl9MRU4pO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyMzI6XFx0XFx0cG9zICs9IElFRUU4MDIxNTRfQUREUl9MRU47XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTIzMy1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYz0yNDE9c3RhdGljIGludCBpZWVlODAyMTU0X3NlY2hkcl9sZW5ndGhzWzRdID0ge1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyNDI6XFx0W0lFRUU4MDIxNTRfU0NGX0tFWV9JTVBMSUNJVF0gPSA1LFxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyNDM6XFx0W0lFRUU4MDIxNTRfU0NGX0tFWV9JTkRFWF0gPSA2LFxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYzoyNDQ6XFx0W0lFRUU4MDIxNTRfU0NGX0tFWV9TSE9SVF9JTkRFWF0gPSAxMCxcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmM6MjQ1OlxcdFtJRUVFODAyMTU0X1NDRl9LRVlfSFdfSU5ERVhdID0gMTQsXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTI0Ni19O1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTI0OD1zdGF0aWMgaW50IGllZWU4MDIxNTRfaGRyX3NlY2hkcl9sZW4odTggc2MpXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTI0OS17XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjI1MDpcXHRyZXR1cm4gaWVlZTgwMjE1NF9zZWNoZHJfbGVuZ3Roc1tJRUVFODAyMTU0X1NDRl9LRVlfSURfTU9ERShzYyldO1xcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0yNTEtfVxcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTM0Nz1pZWVlODAyMTU0X2hkcl9wZWVrKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTU0X2hkciAqaGRyKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTM1Ni1cXHRpZiAoaGRyLVxcdTAwM2VmYy5zZWN1cml0eV9lbmFibGVkKSB7XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjM1NzpcXHRcXHR1OCBrZXlfaWRfbW9kZSA9IElFRUU4MDIxNTRfU0NGX0tFWV9JRF9NT0RFKCooYnVmICsgcG9zKSk7XFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jLTM1OC1cXHRcXHRpbnQgd2FudCA9IHBvcyArIGllZWU4MDIxNTRfc2VjaGRyX2xlbmd0aHNba2V5X2lkX21vZGVdO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jPTM3MD1pbnQgaWVlZTgwMjE1NF9tYXhfcGF5bG9hZChjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgKmhkcilcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2hlYWRlcl9vcHMuYy0zNzgtXFxubmV0L2llZWU4MDIxNTQvaGVhZGVyX29wcy5jOjM3OTpcXHRyZXR1cm4gSUVFRTgwMjE1NF9NVFUgLSBobGVuIC0gSUVFRTgwMjE1NF9NRlJfU0laRTtcXG5uZXQvaWVlZTgwMjE1NC9oZWFkZXJfb3BzLmMtMzgwLX1cXG4tLVxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaD05PXZvaWQgaWVlZTgwMjE1NF9ubF9leGl0KHZvaWQpO1xcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC0xMC1cXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg6MTE6I2RlZmluZSBJRUVFODAyMTU0X09QKF9jbWQsIF9mdW5jKVxcdFxcdFxcdFxcXFxcXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0LmgtMTItXFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC0xOC1cXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg6MTk6I2RlZmluZSBJRUVFODAyMTU0X09QX1JFTEFYRUQoX2NtZCwgX2Z1bmMpXFx0XFx0XFxcXFxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC0yMC1cXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTI3LVxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaDoyODojZGVmaW5lIElFRUU4MDIxNTRfRFVNUChfY21kLCBfZnVuYywgX2R1bXApXFx0XFx0XFxcXFxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC0yOS1cXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTM0LVxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaDozNTojZGVmaW5lIElFRUU4MDIxNTRfRFVNUF9QUklWKF9jbWQsIF9mdW5jLCBfZHVtcClcXHRcXFxcXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oLTM2LVxcdHtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9pZWVlODAyMTU0Lmg9NTk9ZW51bSBpZWVlODAyMTU0X21jZ3JwX2lkcyB7XFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjYwOlxcdElFRUU4MDIxNTRfQ09PUkRfTUNHUlAsXFxubmV0L2llZWU4MDIxNTQvaWVlZTgwMjE1NC5oOjYxOlxcdElFRUU4MDIxNTRfQkVBQ09OX01DR1JQLFxcbm5ldC9pZWVlODAyMTU0L2llZWU4MDIxNTQuaC02Mi19O1xcbi0tXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jPTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgaWVlZTgwMjE1NF9vcHNbXSA9IHtcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtODUtXFx0Lyogc2VlIG5sLXBoeS5jICovXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjg2OlxcdElFRUU4MDIxNTRfRFVNUChJRUVFODAyMTU0X0xJU1RfUEhZLCBpZWVlODAyMTU0X2xpc3RfcGh5LFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy04Ny1cXHRcXHRcXHRpZWVlODAyMTU0X2R1bXBfcGh5KSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6ODg6XFx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0FERF9JRkFDRSwgaWVlZTgwMjE1NF9hZGRfaWZhY2UpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzo4OTpcXHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfREVMX0lGQUNFLCBpZWVlODAyMTU0X2RlbF9pZmFjZSksXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTkwLVxcdC8qIHNlZSBubC1tYWMuYyAqL1xcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzo5MTpcXHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfQVNTT0NJQVRFX1JFUSwgaWVlZTgwMjE1NF9hc3NvY2lhdGVfcmVxKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTI6XFx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0FTU09DSUFURV9SRVNQLCBpZWVlODAyMTU0X2Fzc29jaWF0ZV9yZXNwKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTM6XFx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0RJU0FTU09DSUFURV9SRVEsIGllZWU4MDIxNTRfZGlzYXNzb2NpYXRlX3JlcSksXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjk0OlxcdElFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9TQ0FOX1JFUSwgaWVlZTgwMjE1NF9zY2FuX3JlcSksXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjk1OlxcdElFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9TVEFSVF9SRVEsIGllZWU4MDIxNTRfc3RhcnRfcmVxKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTY6XFx0SUVFRTgwMjE1NF9EVU1QKElFRUU4MDIxNTRfTElTVF9JRkFDRSwgaWVlZTgwMjE1NF9saXN0X2lmYWNlLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy05Ny1cXHRcXHRcXHRpZWVlODAyMTU0X2R1bXBfaWZhY2UpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzo5ODpcXHRJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfU0VUX01BQ1BBUkFNUywgaWVlZTgwMjE1NF9zZXRfbWFjcGFyYW1zKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6OTk6XFx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0xMU0VDX0dFVFBBUkFNUywgaWVlZTgwMjE1NF9sbHNlY19nZXRwYXJhbXMpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDA6XFx0SUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X0xMU0VDX1NFVFBBUkFNUywgaWVlZTgwMjE1NF9sbHNlY19zZXRwYXJhbXMpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDE6XFx0SUVFRTgwMjE1NF9EVU1QX1BSSVYoSUVFRTgwMjE1NF9MTFNFQ19MSVNUX0tFWSwgTlVMTCxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTAyLVxcdFxcdFxcdCAgICAgaWVlZTgwMjE1NF9sbHNlY19kdW1wX2tleXMpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDM6XFx0SUVFRTgwMjE1NF9PUF9SRUxBWEVEKElFRUU4MDIxNTRfTExTRUNfQUREX0tFWSwgaWVlZTgwMjE1NF9sbHNlY19hZGRfa2V5KSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTA0OlxcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0RFTF9LRVksIGllZWU4MDIxNTRfbGxzZWNfZGVsX2tleSksXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEwNTpcXHRJRUVFODAyMTU0X0RVTVBfUFJJVihJRUVFODAyMTU0X0xMU0VDX0xJU1RfREVWLCBOVUxMLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMDYtXFx0XFx0XFx0ICAgICBpZWVlODAyMTU0X2xsc2VjX2R1bXBfZGV2cyksXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEwNzpcXHRJRUVFODAyMTU0X09QX1JFTEFYRUQoSUVFRTgwMjE1NF9MTFNFQ19BRERfREVWLCBpZWVlODAyMTU0X2xsc2VjX2FkZF9kZXYpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMDg6XFx0SUVFRTgwMjE1NF9PUF9SRUxBWEVEKElFRUU4MDIxNTRfTExTRUNfREVMX0RFViwgaWVlZTgwMjE1NF9sbHNlY19kZWxfZGV2KSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTA5OlxcdElFRUU4MDIxNTRfRFVNUF9QUklWKElFRUU4MDIxNTRfTExTRUNfTElTVF9ERVZLRVksIE5VTEwsXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTExMC1cXHRcXHRcXHQgICAgIGllZWU4MDIxNTRfbGxzZWNfZHVtcF9kZXZrZXlzKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTExOlxcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0FERF9ERVZLRVksIGllZWU4MDIxNTRfbGxzZWNfYWRkX2RldmtleSksXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjExMjpcXHRJRUVFODAyMTU0X09QX1JFTEFYRUQoSUVFRTgwMjE1NF9MTFNFQ19ERUxfREVWS0VZLCBpZWVlODAyMTU0X2xsc2VjX2RlbF9kZXZrZXkpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMTM6XFx0SUVFRTgwMjE1NF9EVU1QX1BSSVYoSUVFRTgwMjE1NF9MTFNFQ19MSVNUX1NFQ0xFVkVMLCBOVUxMLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMTQtXFx0XFx0XFx0ICAgICBpZWVlODAyMTU0X2xsc2VjX2R1bXBfc2VjbGV2ZWxzKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTE1OlxcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0FERF9TRUNMRVZFTCxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTE2LVxcdFxcdFxcdCAgICAgIGllZWU4MDIxNTRfbGxzZWNfYWRkX3NlY2xldmVsKSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTE3OlxcdElFRUU4MDIxNTRfT1BfUkVMQVhFRChJRUVFODAyMTU0X0xMU0VDX0RFTF9TRUNMRVZFTCxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTE4LVxcdFxcdFxcdCAgICAgIGllZWU4MDIxNTRfbGxzZWNfZGVsX3NlY2xldmVsKSxcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYz0xMjE9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBpZWVlODAyMTU0X21jZ3Jwc1tdID0ge1xcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMjI6XFx0W0lFRUU4MDIxNTRfQ09PUkRfTUNHUlBdID0geyAubmFtZSA9IElFRUU4MDIxNTRfTUNBU1RfQ09PUkRfTkFNRSwgfSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM6MTIzOlxcdFtJRUVFODAyMTU0X0JFQUNPTl9NQ0dSUF0gPSB7IC5uYW1lID0gSUVFRTgwMjE1NF9NQ0FTVF9CRUFDT05fTkFNRSwgfSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTI0LX07XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmM9MTI2PXN0cnVjdCBnZW5sX2ZhbWlseSBubDgwMjE1NF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMjctXFx0LmhkcnNpemVcXHQ9IDAsXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEyODpcXHQubmFtZVxcdFxcdD0gSUVFRTgwMjE1NF9OTF9OQU1FLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYy0xMjktXFx0LnZlcnNpb25cXHQ9IDEsXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jOjEzMDpcXHQubWF4YXR0clxcdD0gSUVFRTgwMjE1NF9BVFRSX01BWCxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTMxLVxcdC5wb2xpY3lcXHRcXHQ9IGllZWU4MDIxNTRfcG9saWN5LFxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmV0bGluay5jLTEzNC1cXHQubl9zbWFsbF9vcHNcXHQ9IEFSUkFZX1NJWkUoaWVlZTgwMjE1NF9vcHMpLFxcbm5ldC9pZWVlODAyMTU0L25ldGxpbmsuYzoxMzU6XFx0LnJlc3Zfc3RhcnRfb3BcXHQ9IElFRUU4MDIxNTRfTExTRUNfREVMX1NFQ0xFVkVMICsgMSxcXG5uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMtMTM2LVxcdC5tY2dycHNcXHRcXHQ9IGllZWU4MDIxNTRfbWNncnBzLFxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9NTE9c3RhdGljIGludCBpZWVlODAyMTU0X25sX3N0YXJ0X2NvbmZpcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggc3RhdHVzKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtNTYtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6NTc6XFx0bXNnID0gaWVlZTgwMjE1NF9ubF9jcmVhdGUoMCwgSUVFRTgwMjE1NF9TVEFSVF9DT05GKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy01OC1cXHRpZiAoIW1zZylcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTYwLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjYxOlxcdGlmIChubGFfcHV0X3N0cmluZyhtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRSwgZGV2LVxcdTAwM2VuYW1lKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjYyOlxcdCAgICBubGFfcHV0X3UzMihtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfSU5ERVgsIGRldi1cXHUwMDNlaWZpbmRleCkgfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzo2MzpcXHQgICAgbmxhX3B1dChtc2csIElFRUU4MDIxNTRfQVRUUl9IV19BRERSLCBJRUVFODAyMTU0X0FERFJfTEVOLFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTY0LVxcdFxcdCAgICBkZXYtXFx1MDAzZWRldl9hZGRyKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjY1OlxcdCAgICBubGFfcHV0X3U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX1NUQVRVUywgc3RhdHVzKSlcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy02Ni1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzo2NzpcXHRyZXR1cm4gaWVlZTgwMjE1NF9ubF9tY2FzdChtc2csIElFRUU4MDIxNTRfQ09PUkRfTUNHUlApO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTY4LVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9NzQ9c3RhdGljIGludCBpZWVlODAyMTU0X25sX2ZpbGxfaWZhY2Uoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCxcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTg0LVxcdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgMCwgc2VxLCBcXHUwMDI2bmw4MDIxNTRfZmFtaWx5LCBmbGFncyxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzo4NTpcXHRcXHRcXHQgIElFRUU4MDIxNTRfTElTVF9JRkFDRSk7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtODYtXFx0aWYgKCFoZHIpXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy05OC1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzo5OTpcXHRpZiAobmxhX3B1dF9zdHJpbmcobXNnLCBJRUVFODAyMTU0X0FUVFJfREVWX05BTUUsIGRldi1cXHUwMDNlbmFtZSkgfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMDA6XFx0ICAgIG5sYV9wdXRfc3RyaW5nKG1zZywgSUVFRTgwMjE1NF9BVFRSX1BIWV9OQU1FLCB3cGFuX3BoeV9uYW1lKHBoeSkpIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTAxOlxcdCAgICBubGFfcHV0X3UzMihtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfSU5ERVgsIGRldi1cXHUwMDNlaWZpbmRleCkgfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMDI6XFx0ICAgIG5sYV9wdXQobXNnLCBJRUVFODAyMTU0X0FUVFJfSFdfQUREUiwgSUVFRTgwMjE1NF9BRERSX0xFTixcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMDMtXFx0XFx0ICAgIGRldi1cXHUwMDNlZGV2X2FkZHIpIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTA0OlxcdCAgICBubGFfcHV0X3Nob3J0YWRkcihtc2csIElFRUU4MDIxNTRfQVRUUl9TSE9SVF9BRERSLCBzaG9ydF9hZGRyKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjEwNTpcXHQgICAgbmxhX3B1dF9zaG9ydGFkZHIobXNnLCBJRUVFODAyMTU0X0FUVFJfUEFOX0lELCBwYW5faWQpKVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTEwNi1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTExNC1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMTU6XFx0XFx0aWYgKG5sYV9wdXRfczgobXNnLCBJRUVFODAyMTU0X0FUVFJfVFhQT1dFUixcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMTYtXFx0XFx0XFx0ICAgICAgIHBhcmFtcy50cmFuc21pdF9wb3dlciAvIDEwMCkgfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMTc6XFx0XFx0ICAgIG5sYV9wdXRfdTgobXNnLCBJRUVFODAyMTU0X0FUVFJfTEJUX0VOQUJMRUQsIHBhcmFtcy5sYnQpIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTE4OlxcdFxcdCAgICBubGFfcHV0X3U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX0NDQV9NT0RFLFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTExOS1cXHRcXHRcXHQgICAgICAgcGFyYW1zLmNjYS5tb2RlKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjEyMDpcXHRcXHQgICAgbmxhX3B1dF9zMzIobXNnLCBJRUVFODAyMTU0X0FUVFJfQ0NBX0VEX0xFVkVMLFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTEyMS1cXHRcXHRcXHRcXHRwYXJhbXMuY2NhX2VkX2xldmVsIC8gMTAwKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjEyMjpcXHRcXHQgICAgbmxhX3B1dF91OChtc2csIElFRUU4MDIxNTRfQVRUUl9DU01BX1JFVFJJRVMsXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTIzLVxcdFxcdFxcdCAgICAgICBwYXJhbXMuY3NtYV9yZXRyaWVzKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjEyNDpcXHRcXHQgICAgbmxhX3B1dF91OChtc2csIElFRUU4MDIxNTRfQVRUUl9DU01BX01JTl9CRSxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMjUtXFx0XFx0XFx0ICAgICAgIHBhcmFtcy5taW5fYmUpIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTI2OlxcdFxcdCAgICBubGFfcHV0X3U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX0NTTUFfTUFYX0JFLFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTEyNy1cXHRcXHRcXHQgICAgICAgcGFyYW1zLm1heF9iZSkgfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxMjg6XFx0XFx0ICAgIG5sYV9wdXRfczgobXNnLCBJRUVFODAyMTU0X0FUVFJfRlJBTUVfUkVUUklFUyxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xMjktXFx0XFx0XFx0ICAgICAgIHBhcmFtcy5mcmFtZV9yZXRyaWVzKSlcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jPTE0NT1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmllZWU4MDIxNTRfbmxfZ2V0X2RldihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTQ4LVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE0OTpcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFVl9OQU1FXSkge1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE1MC1cXHRcXHRjaGFyIG5hbWVbSUZOQU1TSVogKyAxXTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xNTEtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTUyOlxcdFxcdG5sYV9zdHJzY3B5KG5hbWUsIGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRV0sXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTUzLVxcdFxcdFxcdCAgICBzaXplb2YobmFtZSkpO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE1NC1cXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X25hbWUoXFx1MDAyNmluaXRfbmV0LCBuYW1lKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxNTU6XFx0fSBlbHNlIGlmIChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfREVWX0lOREVYXSkge1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE1Ni1cXHRcXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KFxcdTAwMjZpbml0X25ldCxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxNTc6XFx0XFx0XFx0bmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFVl9JTkRFWF0pKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xNTgtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE2NC1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxNjU6XFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCkge1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE2Ni1cXHRcXHRkZXZfcHV0KGRldik7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYz0xNzM9aW50IGllZWU4MDIxNTRfYXNzb2NpYXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTc5LVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE4MDpcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DSEFOTkVMXSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE4MTpcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9QQU5fSURdIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTgyOlxcdCAgICAoIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9IV19BRERSXSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE4MzpcXHRcXHQhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1NIT1JUX0FERFJdKSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE4NDpcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DQVBBQklMSVRZXSlcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xODUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0xOTItXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MTkzOlxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfSFdfQUREUl0pIHtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoxOTQ6XFx0XFx0YWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTk1LVxcdFxcdGFkZHIuZXh0ZW5kZWRfYWRkciA9IG5sYV9nZXRfaHdhZGRyKFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE5NjpcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfSFdfQUREUl0pO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTE5Ny1cXHR9IGVsc2Uge1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjE5ODpcXHRcXHRhZGRyLm1vZGUgPSBJRUVFODAyMTU0X0FERFJfU0hPUlQ7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMTk5LVxcdFxcdGFkZHIuc2hvcnRfYWRkciA9IG5sYV9nZXRfc2hvcnRhZGRyKFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjIwMDpcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfU0hPUlRfQUREUl0pO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIwMS1cXHR9XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjAyLVxcdGFkZHIucGFuX2lkID0gbmxhX2dldF9zaG9ydGFkZHIoXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjAzOlxcdFxcdFxcdGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9QQU5fSURdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMDQtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjA1OlxcdHBhZ2UgPSBubGFfZ2V0X3U4X2RlZmF1bHQoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1BBR0VdLCAwKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMDYtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjA3LVxcdHJldCA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS1cXHUwMDNlYXNzb2NfcmVxKGRldiwgXFx1MDAyNmFkZHIsXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjA4OlxcdFxcdFxcdG5sYV9nZXRfdTgoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NIQU5ORUxdKSxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMDktXFx0XFx0XFx0cGFnZSxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMTA6XFx0XFx0XFx0bmxhX2dldF91OChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0FQQUJJTElUWV0pKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMTEtXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYz0yMTc9aW50IGllZWU4MDIxNTRfYXNzb2NpYXRlX3Jlc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTIyMi1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyMjM6XFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfU1RBVFVTXSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjIyNDpcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX0hXX0FERFJdIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjI1OlxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfU0hPUlRfQUREUl0pXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjI2LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjMzLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjIzNDpcXHRhZGRyLm1vZGUgPSBJRUVFODAyMTU0X0FERFJfTE9ORztcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMzUtXFx0YWRkci5leHRlbmRlZF9hZGRyID0gbmxhX2dldF9od2FkZHIoXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjM2OlxcdFxcdFxcdGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX0hXX0FERFJdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yMzctXFx0cnRubF9sb2NrKCk7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yNDEtXFx0cmV0ID0gaWVlZTgwMjE1NF9tbG1lX29wcyhkZXYpLVxcdTAwM2Vhc3NvY19yZXNwKGRldiwgXFx1MDAyNmFkZHIsXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjQyOlxcdFxcdG5sYV9nZXRfc2hvcnRhZGRyKGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX1NIT1JUX0FERFJdKSxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyNDM6XFx0XFx0bmxhX2dldF91OChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfU1RBVFVTXSkpO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTI0NC1cXG4tLVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jPTI1MD1pbnQgaWVlZTgwMjE1NF9kaXNhc3NvY2lhdGVfcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yNTUtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjU2OlxcdGlmICgoIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX0hXX0FERFJdIFxcdTAwMjZcXHUwMDI2XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjU3OlxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfU0hPUlRfQUREUl0pIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjU4OlxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1JFQVNPTl0pXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjU5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjY2LVxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI2NzpcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFU1RfSFdfQUREUl0pIHtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzoyNjg6XFx0XFx0YWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjY5LVxcdFxcdGFkZHIuZXh0ZW5kZWRfYWRkciA9IG5sYV9nZXRfaHdhZGRyKFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjI3MDpcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfREVTVF9IV19BRERSXSk7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjcxLVxcdH0gZWxzZSB7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjcyOlxcdFxcdGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yNzMtXFx0XFx0YWRkci5zaG9ydF9hZGRyID0gbmxhX2dldF9zaG9ydGFkZHIoXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6Mjc0OlxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVNUX1NIT1JUX0FERFJdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yNzUtXFx0fVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMjgwLVxcdHJldCA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS1cXHUwMDNlZGlzYXNzb2NfcmVxKGRldiwgXFx1MDAyNmFkZHIsXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MjgxOlxcdFxcdFxcdG5sYV9nZXRfdTgoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1JFQVNPTl0pKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0yODItXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYz0yOTI9aW50IGllZWU4MDIxNTRfc3RhcnRfcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMDEtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzAyOlxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1BBTl9JRF0gfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDM6XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfU0hPUlRfQUREUl0gfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDQ6XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTF0gfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDU6XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQkNOX09SRF0gfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMDY6XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfU0ZfT1JEXSB8fFxcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMwNzpcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9QQU5fQ09PUkRdIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzA4OlxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0JBVF9FWFRdIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzA5OlxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1JFQUxJR05dXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMzEwLVxcdCApXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMjQtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzI1OlxcdGFkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMjYtXFx0YWRkci5zaG9ydF9hZGRyID0gbmxhX2dldF9zaG9ydGFkZHIoXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzI3OlxcdFxcdFxcdGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9TSE9SVF9BRERSXSk7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMzI4LVxcdGFkZHIucGFuX2lkID0gbmxhX2dldF9zaG9ydGFkZHIoXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzI5OlxcdFxcdFxcdGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9QQU5fSURdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zMzAtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzMxOlxcdGNoYW5uZWwgPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DSEFOTkVMXSk7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzMyOlxcdGJjbl9vcmQgPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9CQ05fT1JEXSk7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzMzOlxcdHNmX29yZCA9IG5sYV9nZXRfdTgoaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1NGX09SRF0pO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMzNDpcXHRwYW5fY29vcmQgPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9QQU5fQ09PUkRdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMzU6XFx0Ymx4ID0gbmxhX2dldF91OChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQkFUX0VYVF0pO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjMzNjpcXHRjb29yZF9yZWFsaWduID0gbmxhX2dldF91OChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfUkVBTElHTl0pO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTMzNy1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozMzg6XFx0cGFnZSA9IG5sYV9nZXRfdThfZGVmYXVsdChpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfUEFHRV0sIDApO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTMzOS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozNDA6XFx0aWYgKGFkZHIuc2hvcnRfYWRkciA9PSBjcHVfdG9fbGUxNihJRUVFODAyMTU0X0FERFJfQlJPQURDQVNUKSkge1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jOjM0MTpcXHRcXHRpZWVlODAyMTU0X25sX3N0YXJ0X2NvbmZpcm0oZGV2LCBJRUVFODAyMTU0X05PX1NIT1JUX0FERFJFU1MpO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTM0Mi1cXHRcXHRkZXZfcHV0KGRldik7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNTMtXFx0ICovXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzU0OlxcdGllZWU4MDIxNTRfbmxfc3RhcnRfY29uZmlybShkZXYsIElFRUU4MDIxNTRfU1VDQ0VTUyk7XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmMtMzU1LVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM9MzYxPWludCBpZWVlODAyMTU0X3NjYW5fcmVxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNjktXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzcwOlxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX1NDQU5fVFlQRV0gfHxcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozNzE6XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTFNdIHx8XFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzcyOlxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RVUkFUSU9OXSlcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zNzMtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYy0zODAtXFxubmV0L2llZWU4MDIxNTQvbmwtbWFjLmM6MzgxOlxcdHR5cGUgPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9TQ0FOX1RZUEVdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozODI6XFx0Y2hhbm5lbHMgPSBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTFNdKTtcXG5uZXQvaWVlZTgwMjE1NC9ubC1tYWMuYzozODM6XFx0ZHVyYXRpb24gPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW0lFRUU4MDIxNTRfQVRUUl9EVVJBVElPTl0pO1xcbm5ldC9pZWVlODAyMTU0L25sLW1hYy5jLTM4NC1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MTk6NTkuNTY2NTExNjkyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3MTY2OTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipUaW1lIHRvIEludmVzdGlnYXRlIHRoZSBJRUVFIDgwMi4xNS40IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBJRUVFIDgwMi4xNS40IGNvbXBvbmVudHMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSBleGFtaW5lIHRoZSByZWxldmFudCBLY29uZmlnIGFuZCBNYWtlZmlsZSBmaWxlcy4gVGhlIGBuZXQvaWVlZTgwMjE1NC9LY29uZmlnYCBmaWxlIHNob3VsZCBob2xkIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHdpcmVsZXNzIHByb3RvY29sLCBhbGwgdGhlIHNldHRpbmdzIHRoYXQgdGhlIHVzZXIgY2FuIHNldCBhdCBjb21waWxlIHRpbWUuIEl0IGhlbHBzIG1lIHRvIHVuZGVyc3RhbmQgd2hhdCBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyBkaWZmZXJlbnQgYXNwZWN0cyBvZiA4MDIuMTUuNCBhcmUgY29udHJvbGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLlxuXG5UaGVuLCB0aGUgYG5ldC9pZWVlODAyMTU0L01ha2VmaWxlYCBpcyB0aGUgbmV4dCBvYnZpb3VzIHBsYWNlLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIHNvdXJjZSBjb2RlIGlzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbmNvcnBvcmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBzb3VyY2UgZmlsZXMgYXJlIGluY2x1ZGVkLCB3aGF0IGxpYnJhcmllcyBhcmUgdXNlZCwgYW5kIGhvdyB0aGUgZW50aXJlIDgwMi4xNS40IHN0YWNrIGlzIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRvIGFkZCBhIG1vZHVsZSBvciBkaXNhYmxlIG9uZS5cblxuRXNzZW50aWFsbHksIHRoZXNlIHR3byBmaWxlcyBwcm92aWRlIHRoZSBibHVlcHJpbnQsIHRoZSBob3ctdG8gZ3VpZGUsIGZvciBidWlsZGluZyBhbmQgY29uZmlndXJpbmcgdGhlIDgwMi4xNS40IG5ldHdvcmtpbmcgc3RhY2suIEdyYXNwaW5nIHRoZW0gaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byBhbnkgd29yayBJJ20gZ29pbmcgdG8gZG8gaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUxOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjIwOjAyLjUzODE4MzcyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaWVlZTgwMjE1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElFRUU4MDIxNTRcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJRUVFIFN0ZCA4MDIuMTUuNCBMb3ctUmF0ZSBXaXJlbGVzcyBQZXJzb25hbCBBcmVhIE5ldHdvcmtzIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIElFRUUgU3RkIDgwMi4xNS40IGRlZmluZXMgYSBsb3cgZGF0YSByYXRlLCBsb3cgcG93ZXIgYW5kIGxvd1xcbiAgIDY6XFx0XFx0ICBjb21wbGV4aXR5IHNob3J0IHJhbmdlIHdpcmVsZXNzIHBlcnNvbmFsIGFyZWEgbmV0d29ya3MuIEl0IHdhc1xcbiAgIDc6XFx0XFx0ICBkZXNpZ25lZCB0byBvcmdhbmlzZSBuZXR3b3JrcyBvZiBzZW5zb3JzLCBzd2l0Y2hlcywgZXRjIGF1dG9tYXRpb25cXG4gICA4OlxcdFxcdCAgZGV2aWNlcy4gTWF4aW11bSBhbGxvd2VkIGRhdGEgcmF0ZSBpcyAyNTAga2IvcyBhbmQgdHlwaWNhbCBwZXJzb25hbFxcbiAgIDk6XFx0XFx0ICBvcGVyYXRpbmcgc3BhY2UgYXJvdW5kIDEwbS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgTFItV1BBTiBzdXBwb3J0IGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0b1xcbiAgMTI6XFx0XFx0ICBjb21waWxlIGl0IGFzIG1vZHVsZXMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIElFRUU4MDIxNTRcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMXFxuICAxNzpcXHRcXHRib29sIFxcXCJJRUVFIDgwMi4xNS40IGV4cGVyaW1lbnRhbCBuZXRsaW5rIHN1cHBvcnRcXFwiXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIEFkZHMgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydCBmb3Igbmw4MDIxNTQuXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxcbiAgMjI6XFx0XFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZVxcXCJcXG4gIDIzOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjQ6XFx0XFx0aGVscFxcbiAgMjU6XFx0XFx0ICBTb2NrZXQgaW50ZXJmYWNlIGZvciBJRUVFIDgwMi4xNS40LiBDb250YWlucyBER1JBTSBzb2NrZXRzIGludGVyZmFjZVxcbiAgMjY6XFx0XFx0ICBmb3IgODAyLjE1LjQgZGF0YWZyYW1lcy4gQWxzbyBSQVcgc29ja2V0IGludGVyZmFjZSB0byBidWlsZCBNQUNcXG4gIDI3OlxcdFxcdCAgaGVhZGVyIGZyb20gdXNlcnNwYWNlLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRzb3VyY2UgXFxcIm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vS2NvbmZpZ1xcXCJcXG4gIDMwOlxcdFxcbiAgMzE6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjA6MDIuNTM4Mjg5MDg3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4NDY0ODIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIElFRUUgODAyLjE1LjQvV1BBTiBEZXZpY2UgU2ltdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIHRlc3QgSUVFRSA4MDIuMTUuNCBhbmQgV1BBTiBmdW5jdGlvbmFsaXR5IHdpdGhpbiBhIHNpbXVsYXRlZCBlbnZpcm9ubWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgZHJpdmVycyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aG9zZSB0ZWNobm9sb2dpZXMuIEkgc2hvdWxkIGV4cGxvcmUgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvYCwgYGRyaXZlcnMvbmV0L3dwYW4vYCwgYW5kIGBtYWM4MDIxNTRgIHRvIHVuZGVyc3RhbmQgdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRyaXZlcnMgYW5kIHRlc3RpbmcgZnJhbWV3b3Jrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB3ZSBjYW4gc2ltdWxhdGUgdGhlc2UgZGV2aWNlcyBkaXJlY3RseSB3aXRoaW4gU3l6a2FsbGVyIG9yIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBvbiB0aGUgbG9va291dCBmb3IgbmFtZXMgbGlrZSBgZmFrZWxiYCBhbmQgYG1hYzgwMjE1NF9od3NpbWAsIHdoaWNoIG1pZ2h0IHByb3ZpZGUgYSBjbHVlLiBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aGVzZSB0byBkZXRlcm1pbmUgdGhlIGF2YWlsYWJpbGl0eSBvZiBzaW11bGF0ZWQgaGFyZHdhcmUgbW9kZWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQyMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjA6MDQuOTIyOTQwNDcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMxNTQ1MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JRUVFODAyMTU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmM9MTc5PXN0YXRpYyB2b2lkIG9mX2dwaW9fdHJ5X2ZpeHVwX3BvbGFyaXR5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jLTIwNy0jZW5kaWZcXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jOjIwODojaWYgSVNfRU5BQkxFRChDT05GSUdfSUVFRTgwMjE1NF9DQTgyMTApXFxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYy0yMDktXFx0XFx0LypcXG4tLVxcbmRyaXZlcnMvbmV0L01ha2VmaWxlPTcxPW9iai0kKENPTkZJR19XTEFOKSArPSB3aXJlbGVzcy9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZTo3MjpvYmotJChDT05GSUdfSUVFRTgwMjE1NCkgKz0gaWVlZTgwMjE1NC9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS03My1vYmotJChDT05GSUdfV1dBTikgKz0gd3dhbi9cXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19JRUVFODAyMTU0X0ZBS0VMQikgKz0gZmFrZWxiLm9cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfQVQ4NlJGMjMwKSArPSBhdDg2cmYyMzAub1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfSUVFRTgwMjE1NF9NUkYyNEo0MCkgKz0gbXJmMjRqNDAub1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfSUVFRTgwMjE1NF9DQzI1MjApICs9IGNjMjUyMC5vXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19JRUVFODAyMTU0X0FUVVNCKSArPSBhdHVzYi5vXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19JRUVFODAyMTU0X0FERjcyNDIpICs9IGFkZjcyNDIub1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfSUVFRTgwMjE1NF9DQTgyMTApICs9IGNhODIxMC5vXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JRUVFODAyMTU0X01DUjIwQSkgKz0gbWNyMjBhLm9cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19JRUVFODAyMTU0X0hXU0lNKSArPSBtYWM4MDIxNTRfaHdzaW0ub1xcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYTgyMTAuYz0yOTc5PXN0YXRpYyB2b2lkIGNhODIxMF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaV9kZXZpY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2NhODIxMC5jLTMwMTUtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2E4MjEwLmM6MzAxNjpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSUVFRTgwMjE1NF9DQTgyMTBfREVCVUdGUykpXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYTgyMTAuYy0zMDE3LVxcdFxcdFxcdGNhODIxMF90ZXN0X2ludGVyZmFjZV9jbGVhcihwcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2E4MjEwLmM9MzAyNz1zdGF0aWMgaW50IGNhODIxMF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX2RldmljZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2E4MjEwLmMtMzA1OC1cXHRzcGlfc2V0X2RydmRhdGEocHJpdi1cXHUwMDNlc3BpLCBwcml2KTtcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L2NhODIxMC5jOjMwNTk6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lFRUU4MDIxNTRfQ0E4MjEwX0RFQlVHRlMpKSB7XFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYTgyMTAuYy0zMDYwLVxcdFxcdGNhc2NvZGFfYXBpX3Vwc3RyZWFtID0gY2E4MjEwX3Rlc3RfaW50X2RyaXZlcl93cml0ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjA6MDYuMzU0NDkzNzA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNTQwODIzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJRUVFIDgwMi4xNS40IFBhdGNoKipcblxuT2theSwgc28gSUVFRSA4MDIuMTUuNCBpcyB3ZWxsLWNvdmVyZWQ7IHdlJ3ZlIGdvdCBgbWFjODAyMTU0X2h3c2ltYCwgYGZha2VsYmAsIGBubDgwMjE1NCBuZXRsaW5rYCwgYHJ0bmxgLCB0aGUgd29ya3MsIGFuZCBpdCdzIGV2ZW4gZ2V0dGluZyBmdXp6aW5nIGF0dGVudGlvbiBmcm9tIHN5emthbGxlciwgd2hpY2ggaXMgZ3JlYXQgdG8gc2VlLiBOb3csIGxldCdzIGRpdmUgaW50byB0aGlzIHNwZWNpZmljIHBhdGNoLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AuXG5cblNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3cGFuX2Rldl90eXBlID0geyAubmFtZSA9IFwid3BhblwiIH07YC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXZpY2UgdHlwZSBkZWZpbml0aW9uLiBOb3RoaW5nIGltbWVkaWF0ZWx5IGFsYXJtaW5nIHRoZXJlLlxuXG5EaWdnaW5nIGRlZXBlciBpbnRvIGBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxgLCBpdCBsb29rcyBsaWtlIHRoZXJlJ3Mgc29tZSBpbnRlcmVzdGluZyBsb2dpYyBhZGRlZC4gVGhlcmUncyBhIGBXQVJOX09OKHdwYW5fZGV2LVx1MDAzZWlmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKTtgIHdoaWNoIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBJdCdzIGEgc2FuaXR5IGNoZWNrLCB0aGF0IHN1Z2dlc3RzIHNvbWUga2luZCBvZiB1bmV4cGVjdGVkIHN0YXRlLiBUaGVuLCB0aGUgaGFuZGxpbmcgb2YgYE5FVERFVl9QT1NUX0lOSVRgIHdoaWNoIGlzIHNldHRpbmcgdGhlIGRldmljZSB0eXBlLCBgU0VUX05FVERFVl9ERVZUWVBFKGRldiwgXHUwMDI2d3Bhbl9kZXZfdHlwZSk7YC4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBkZXZpY2UgdHlwZSBkZWZpbml0aW9uIGFib3ZlLlxuXG5Ob3csIEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCBhbmQgd2hhdCdzIGdvaW5nIG9uIGFyb3VuZCB0aGF0LiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3NDYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjA6MDkuNjA4NTc4NjEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQ0MzcxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pZWVlODAyMTU0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pZWVlODAyMTU0L2NvcmUuYz0yODA9Y2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC9pZWVlODAyMTU0L2NvcmUuYy0yODctXFxubmV0L2llZWU4MDIxNTQvY29yZS5jOjI4ODpzdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbm5ldC9pZWVlODAyMTU0L2NvcmUuYy0yODktXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHN0YXRlLCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmM9MzU2PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllciA9IHtcXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmM6MzU3OlxcdC5ub3RpZmllcl9jYWxsID0gY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsLFxcbm5ldC9pZWVlODAyMTU0L2NvcmUuYy0zNTgtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjA6MDkuOTIzMDIxOTgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MzQwNDkzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbCoqXG5cbk9rYXksIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSdtIHRoaW5raW5nLiBJJ20gc3RhcnRpbmcgd2l0aCBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCwgd2hpY2ggaXMgY2xlYXJseSByZWdpc3RlcmVkIGFzIGEgbmV0ZGV2aWNlIG5vdGlmaWVyIHZpYSBgcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyYCB3aXRoaW4gdGhlIGBpZWVlODAyMTU0X2luaXRgIG9yIHJlbGF0ZWQgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gdGhpcyBub3RpZmllciBpcyBhY3R1YWxseSB0cmlnZ2VyZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIHRpZWQgdG8gbmV0ZGV2aWNlIGV2ZW50cy5cblxuU28sIGl0IGxvb2tzIGxpa2UgdGhpcyBub3RpZmllciBnZXRzIGludm9rZWQgd2hlbmV2ZXIgYSBuZXRkZXZpY2UsIHdoZXJlIGBkZXYtXHUwMDNlaWVlZTgwMjE1NF9wdHJgIGlzbid0IG51bGwsIGV4cGVyaWVuY2VzIGV2ZW50cyBsaWtlIGBORVRERVZfUE9TVF9JTklUYCwgYE5FVERFVl9SRUdJU1RFUmAsIGBORVRERVZfRE9XTmAsIGBORVRERVZfVVBgLCBgTkVUREVWX1VOUkVHSVNURVJgLCBhbmQgc28gb24uIE5vdyBJIHNlZSB0aGF0IHdpdGhpbiB0aGlzIGZ1bmN0aW9uIHRoZXJlIGlzIGEgY2FsbCB0byBgd3Bhbl9waHlfdG9fcmRldmAsIGEgbmV3IGFzc2VydGlvbiBgV0FSTl9PTih3cGFuX2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQylgLCBhbmQgYWxzbyBhIG5ldyBhc3NpZ25tZW50IGBTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcdTAwMjZ3cGFuX2Rldl90eXBlKTtgLlxuXG5UaGF0IG5ldyBhc3NlcnRpb24gaXMgY3JpdGljYWwuIE5vdywgSSBzaG91bGQgcmVmZXJlbmNlIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFNlY3Rpb25zIDEgXHUwMDI2IDMgYXJlIHRoZSByZWxldmFudCBvbmVzOiBuZXcgb3IgbW9kaWZpZWQgYXNzZXJ0aW9ucyBpbiByZWFjaGFibGUgY29kZSAqbXVzdCogYmUgZnV6emVkLiBFdmVuIGlmIHlvdSAqdGhpbmsqIGl0J3MgYnVsbGV0cHJvb2YsIGZ1enppbmcgaXMgdml0YWwgdG8gZXhwb3NlIGFueSB1bmV4cGVjdGVkIG9wZXJhdGlvbiBzZXF1ZW5jZXMgdGhhdCBtaWdodCB0cmlnZ2VyIHRoYXQgYXNzZXJ0aW9uLiBBbmQgdGhlIElFRUUgODAyLjE1LjQgY29kZSBpcyByZWFjaGFibGUgdmlhIHZpcnR1YWwgYnVzZXMgYW5kIG5ldGxpbmssIHdoaWNoIG1lYW5zIHRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IGZhaXIgZ2FtZSBmb3IgZnV6emluZy5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyB1bmVxdWl2b2NhbGx5IGB0cnVlYC4gVGhlIGNvZGUgcGF0aCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50LlxuXG5Ob3csIGxldCdzIGVzdGFibGlzaCBteSBgRm9jdXNTeW1ib2xzYC4gV2hhdCBmdW5jdGlvbnMsIGJleW9uZCB0aGUgb2J2aW91cyBlbnRyeSBwb2ludCwgc2hvdWxkIEkgY29uc2lkZXI/IEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGFmZmVjdGVkIG9yIGFjdCBhcyBlbnRyeXBvaW50cy4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYCBpbiBgbmV0L2llZWU4MDIxNTQvY29yZS5jYCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0b3VjaGVkLiBJIGhhdmUgdG8gbG9vayBpbnRvIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgIGFuZCByZWxldmFudCBuZXRsaW5rIGludGVyZmFjZXMgYW5kIG90aGVyIGZ1bmN0aW9ucyB0byByb3VuZCBvdXQgbXkgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY0MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMDoxNC44NTcwNzQyOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTkxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2llZWU4MDIxNTQvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgU2llbWVucyBBR1xcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHRcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuICAxMDpcXHRcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvY2ZnODAyMTU0LmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3J0bmV0bGluay5oXFx1MDAzZVxcbiAgMTM6XFx0XFxuICAxNDpcXHQjaW5jbHVkZSBcXFwiaWVlZTgwMjE1NC5oXFxcIlxcbiAgMTU6XFx0I2luY2x1ZGUgXFxcIm5sODAyMTU0LmhcXFwiXFxuICAxNjpcXHQjaW5jbHVkZSBcXFwic3lzZnMuaFxcXCJcXG4gIDE3OlxcdCNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxuICAxODpcXHRcXG4gIDE5OlxcdC8qIG5hbWUgZm9yIHN5c2ZzLCAlZCBpcyBhcHBlbmRlZCAqL1xcbiAgMjA6XFx0I2RlZmluZSBQSFlfTkFNRSBcXFwicGh5XFxcIlxcbiAgMjE6XFx0XFxuICAyMjpcXHQvKiBSQ1UtcHJvdGVjdGVkIChhbmQgUlROTCBmb3Igd3JpdGVycykgKi9cXG4gIDIzOlxcdExJU1RfSEVBRChjZmc4MDIxNTRfcmRldl9saXN0KTtcXG4gIDI0OlxcdGludCBjZmc4MDIxNTRfcmRldl9saXN0X2dlbmVyYXRpb247XFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0cnVjdCB3cGFuX3BoeSAqd3Bhbl9waHlfZmluZChjb25zdCBjaGFyICpzdHIpXFxuICAyNzpcXHR7XFxuICAyODpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdGlmIChXQVJOX09OKCFzdHIpKVxcbiAgMzE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdGRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlX2J5X25hbWUoXFx1MDAyNndwYW5fcGh5X2NsYXNzLCBzdHIpO1xcbiAgMzQ6XFx0XFx0aWYgKCFkZXYpXFxuICAzNTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB3cGFuX3BoeSwgZGV2KTtcXG4gIDM4OlxcdH1cXG4gIDM5OlxcdEVYUE9SVF9TWU1CT0wod3Bhbl9waHlfZmluZCk7XFxuICA0MDpcXHRcXG4gIDQxOlxcdHN0cnVjdCB3cGFuX3BoeV9pdGVyX2RhdGEge1xcbiAgNDI6XFx0XFx0aW50ICgqZm4pKHN0cnVjdCB3cGFuX3BoeSAqcGh5LCB2b2lkICpkYXRhKTtcXG4gIDQzOlxcdFxcdHZvaWQgKmRhdGE7XFxuICA0NDpcXHR9O1xcbiAgNDU6XFx0XFxuICA0NjpcXHRzdGF0aWMgaW50IHdwYW5fcGh5X2l0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpfZGF0YSlcXG4gIDQ3OlxcdHtcXG4gIDQ4OlxcdFxcdHN0cnVjdCB3cGFuX3BoeV9pdGVyX2RhdGEgKndwaWQgPSBfZGF0YTtcXG4gIDQ5OlxcdFxcdHN0cnVjdCB3cGFuX3BoeSAqcGh5ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHdwYW5fcGh5LCBkZXYpO1xcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHRyZXR1cm4gd3BpZC1cXHUwMDNlZm4ocGh5LCB3cGlkLVxcdTAwM2VkYXRhKTtcXG4gIDUyOlxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0aW50IHdwYW5fcGh5X2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSwgdm9pZCAqZGF0YSksXFxuICA1NTpcXHRcXHRcXHQgICAgICB2b2lkICpkYXRhKVxcbiAgNTY6XFx0e1xcbiAgNTc6XFx0XFx0c3RydWN0IHdwYW5fcGh5X2l0ZXJfZGF0YSB3cGlkID0ge1xcbiAgNTg6XFx0XFx0XFx0LmZuID0gZm4sXFxuICA1OTpcXHRcXHRcXHQuZGF0YSA9IGRhdGEsXFxuICA2MDpcXHRcXHR9O1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRyZXR1cm4gY2xhc3NfZm9yX2VhY2hfZGV2aWNlKFxcdTAwMjZ3cGFuX3BoeV9jbGFzcywgTlVMTCxcXG4gIDYzOlxcdFxcdFxcdFxcdFxcdTAwMjZ3cGlkLCB3cGFuX3BoeV9pdGVyKTtcXG4gIDY0OlxcdH1cXG4gIDY1OlxcdEVYUE9SVF9TWU1CT0wod3Bhbl9waHlfZm9yX2VhY2gpO1xcbiAgNjY6XFx0XFxuICA2NzpcXHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpcXG4gIDY4OlxcdGNmZzgwMjE1NF9yZGV2X2J5X3dwYW5fcGh5X2lkeChpbnQgd3Bhbl9waHlfaWR4KVxcbiAgNjk6XFx0e1xcbiAgNzA6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmVzdWx0ID0gTlVMTCwgKnJkZXY7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgXFx1MDAyNmNmZzgwMjE1NF9yZGV2X2xpc3QsIGxpc3QpIHtcXG4gIDc1OlxcdFxcdFxcdGlmIChyZGV2LVxcdTAwM2V3cGFuX3BoeV9pZHggPT0gd3Bhbl9waHlfaWR4KSB7XFxuICA3NjpcXHRcXHRcXHRcXHRyZXN1bHQgPSByZGV2O1xcbiAgNzc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA3ODpcXHRcXHRcXHR9XFxuICA3OTpcXHRcXHR9XFxuICA4MDpcXHRcXG4gIDgxOlxcdFxcdHJldHVybiByZXN1bHQ7XFxuICA4MjpcXHR9XFxuICA4MzpcXHRcXG4gIDg0OlxcdHN0cnVjdCB3cGFuX3BoeSAqd3Bhbl9waHlfaWR4X3RvX3dwYW5fcGh5KGludCB3cGFuX3BoeV9pZHgpXFxuICA4NTpcXHR7XFxuICA4NjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRyZGV2ID0gY2ZnODAyMTU0X3JkZXZfYnlfd3Bhbl9waHlfaWR4KHdwYW5fcGh5X2lkeCk7XFxuICA5MTpcXHRcXHRpZiAoIXJkZXYpXFxuICA5MjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDkzOlxcdFxcdHJldHVybiBcXHUwMDI2cmRldi1cXHUwMDNld3Bhbl9waHk7XFxuICA5NDpcXHR9XFxuICA5NTpcXHRcXG4gIDk2OlxcdHN0cnVjdCB3cGFuX3BoeSAqXFxuICA5NzpcXHR3cGFuX3BoeV9uZXcoY29uc3Qgc3RydWN0IGNmZzgwMjE1NF9vcHMgKm9wcywgc2l6ZV90IHByaXZfc2l6ZSlcXG4gIDk4OlxcdHtcXG4gIDk5OlxcdFxcdHN0YXRpYyBhdG9taWNfdCB3cGFuX3BoeV9jb3VudGVyID0gQVRPTUlDX0lOSVQoMCk7XFxuIDEwMDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMDoxNC44NTcyOTYwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzYxNjk2MTAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgaW4gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AsIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgIC0gTGluZXMgMzAwLTM2MCoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDMwMCB0byAzNjAgaW4gYG5ldC9pZWVlODAyMTU0L2NvcmUuY2AuIFRoaXMgc2VjdGlvbi4uLiBBaCwgaGVyZSB3ZSBhcmUuIE9rYXksIGFmdGVyIGEgcXVpY2sgc2tpbSwgdGhpcyBsb29rcyBsaWtlIGl04oCZcyBsaWtlbHkgaGFuZGxpbmcgdGhlIGNydWNpYWwgcG9ydGlvbiB3aGVyZSB0aGUgbG93ZXIgTUFDIGxheWVyIGludGVyYWN0cyB3aXRoIHRoZSB1cHBlciBsYXllcnMuIEkgc3VzcGVjdCB0aGlzIGlzIHdoZXJlIHRoZSAqcmVhbGx5KiBpbnRlcmVzdGluZyBzdHVmZiBpcyBoYXBwZW5pbmcg4oCTIHRoZSBoYW5kb2ZmIG9mIGEgcGFja2V0LCBwZXJoYXBzIHRoZSBtYW5hZ2VtZW50IG9mIEFDSyByZXF1ZXN0cywgb3IgcGVyaGFwcyBldmVuIGluaXRpYWwgZGF0YSBwcm9jZXNzaW5nIHVwb24gcmVjZWl2aW5nIGEgbmV3IHBhY2tldC5cblxuSeKAmW0gZ3Vlc3NpbmcgaXTigJlzIGRlYWxpbmcgd2l0aCBzb21lIGtleSBhc3BlY3RzIG9mIDgwMi4xNS40IGZyYW1lIHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24uIElzIGl0IGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIENTTUEtQ0EgbWVjaGFuaXNtPyBEb2VzIHRoaXMgY2h1bmsgb2YgY29kZSBpbmNsdWRlIHRoZSBsb2dpYyBmb3IgY2hhbm5lbCBhc3Nlc3NtZW50IHByaW9yIHRvIHRyYW5zbWlzc2lvbj8gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBmb3IgYW55IGNhbGxzIHRvIGZ1bmN0aW9ucyBsaWtlIGBpZWVlODAyMTU0X2dldF9jaGFubmVsYCBvciBwZXJoYXBzIGEgZnVuY3Rpb24gbmFtZWQgYGllZWU4MDIxNTRfY2NhYC4gXG5cbkxldCdzIGNhcmVmdWxseSBleGFtaW5lIHRoZSByZWdpc3RlciBhbmQgaW50ZXJydXB0IGhhbmRsaW5nLCBpZiBhbnkgaXMgcHJlc2VudCwgc2luY2UgdGhpcyBhcmVhIGhhcyB0aGUgcG90ZW50aWFsIHRvIGJlY29tZSBhIGJvdHRsZW5lY2sgZHVlIHRvIGludGVycnVwdCBvdmVyaGVhZC4gR2l2ZW4gdGhlIHRpbWluZyBjb25zdHJhaW50cyBpbmhlcmVudCBpbiA4MDIuMTUuNCwgdGhpcyBpcyBjcml0aWNhbC4gSSdtIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9uIG9mIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBmcmFtZSB0eXBlcywgbGlrZSBkYXRhIGZyYW1lcyB2ZXJzdXMgYmVhY29uIGZyYW1lcywgYXMgdGhpcyBjb3VsZCBoYXZlIGEgc2lnbmlmaWNhbnQgaW1wYWN0IG9uIHN5c3RlbSB0aHJvdWdocHV0IGFuZCBwb3dlciBjb25zdW1wdGlvbi4gTW9yZSBzcGVjaWZpY2FsbHksIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGFkZHJlc3MgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIGludGVyZmVyZW5jZSBvciBjb2xsaXNpb25zIG9uIHRoZSBtZWRpdW0uXG5cbkkgYWxzbyB3YW50IHRvIHNlZSB0aGUgZXJyb3IgY2hlY2tpbmcgaGFwcGVuaW5nIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IHRoZSBpbnRlZ3JpdHkgb2YgYSBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gTGV0J3Mgc2VlIGlmIHRoaXMgcGFydCBvZiB0aGUgY29kZSBwcm92aWRlcyBhbnkgY2x1ZXMgYWJvdXQgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIGJlaW5nIHVzZWQuIEFyZSB0aGVyZSBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgbWFuaXB1bGF0aW9ucz8gSWYgdGhlcmUgYXJlLCB0aGF0IHNob3VsZCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgZXhhY3QgcmFkaW8gY2hpcCBmYW1pbHkgdGhlIGRyaXZlcidzIGRlc2lnbmVkIGZvci4gVGltZSB0byBkaWcgaW4gYW5kIGNvbmZpcm0gdGhlc2UgZmlyc3QgaW1wcmVzc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTM2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMToxOC40NzQyNTk5MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2llZWU4MDIxNTQvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHRcXG4gMzMxOlxcdFxcdFxcdC8qIEl0IGlzIHBvc3NpYmxlIHRvIGdldCBORVRERVZfVU5SRUdJU1RFUlxcbiAzMzI6XFx0XFx0XFx0ICogbXVsdGlwbGUgdGltZXMuIFRvIGRldGVjdCB0aGF0LCBjaGVja1xcbiAzMzM6XFx0XFx0XFx0ICogdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHN0aWxsIG9uIHRoZSBsaXN0XFxuIDMzNDpcXHRcXHRcXHQgKiBvZiByZWdpc3RlcmVkIGludGVyZmFjZXMsIGFuZCBvbmx5IHRoZW5cXG4gMzM1OlxcdFxcdFxcdCAqIHJlbW92ZSBhbmQgY2xlYW4gaXQgdXAuXFxuIDMzNjpcXHRcXHRcXHQgKi9cXG4gMzM3OlxcdFxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2d3Bhbl9kZXYtXFx1MDAzZWxpc3QpKSB7XFxuIDMzODpcXHRcXHRcXHRcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNndwYW5fZGV2LVxcdTAwM2VsaXN0KTtcXG4gMzM5OlxcdFxcdFxcdFxcdHJkZXYtXFx1MDAzZWRldmxpc3RfZ2VuZXJhdGlvbisrO1xcbiAzNDA6XFx0XFx0XFx0fVxcbiAzNDE6XFx0XFx0XFx0Lyogc3luY2hyb25pemUgKHNvIHRoYXQgd2Ugd29uJ3QgZmluZCB0aGlzIG5ldGRldlxcbiAzNDI6XFx0XFx0XFx0ICogZnJvbSBvdGhlciBjb2RlIGFueSBtb3JlKSBhbmQgdGhlbiBjbGVhciB0aGUgbGlzdFxcbiAzNDM6XFx0XFx0XFx0ICogaGVhZCBzbyB0aGF0IHRoZSBhYm92ZSBjb2RlIGNhbiBzYWZlbHkgY2hlY2sgZm9yXFxuIDM0NDpcXHRcXHRcXHQgKiAhbGlzdF9lbXB0eSgpIHRvIGF2b2lkIGRvdWJsZS1jbGVhbnVwLlxcbiAzNDU6XFx0XFx0XFx0ICovXFxuIDM0NjpcXHRcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gMzQ3OlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ3cGFuX2Rldi1cXHUwMDNlbGlzdCk7XFxuIDM0ODpcXHRcXHRcXHRicmVhaztcXG4gMzQ5OlxcdFxcdGRlZmF1bHQ6XFxuIDM1MDpcXHRcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIDM1MTpcXHRcXHR9XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdHJldHVybiBOT1RJRllfT0s7XFxuIDM1NDpcXHR9XFxuIDM1NTpcXHRcXG4gMzU2OlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllciA9IHtcXG4gMzU3OlxcdFxcdC5ub3RpZmllcl9jYWxsID0gY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsLFxcbiAzNTg6XFx0fTtcXG4gMzU5OlxcdFxcbiAzNjA6XFx0c3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxNTRfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbiAzNjE6XFx0e1xcbiAzNjI6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcXG4gMzYzOlxcdFxcbiAzNjQ6XFx0XFx0cnRubF9sb2NrKCk7XFxuIDM2NTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsIFxcdTAwMjZjZmc4MDIxNTRfcmRldl9saXN0LCBsaXN0KSB7XFxuIDM2NjpcXHRcXHRcXHRpZiAobmV0X2VxKHdwYW5fcGh5X25ldChcXHUwMDI2cmRldi1cXHUwMDNld3Bhbl9waHkpLCBuZXQpKVxcbiAzNjc6XFx0XFx0XFx0XFx0Y2ZnODAyMTU0X3N3aXRjaF9uZXRucyhyZGV2LCBcXHUwMDI2aW5pdF9uZXQpO1xcbiAzNjg6XFx0XFx0fVxcbiAzNjk6XFx0XFx0cnRubF91bmxvY2soKTtcXG4gMzcwOlxcdH1cXG4gMzcxOlxcdFxcbiAzNzI6XFx0c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBjZmc4MDIxNTRfcGVybmV0X29wcyA9IHtcXG4gMzczOlxcdFxcdC5leGl0ID0gY2ZnODAyMTU0X3Blcm5ldF9leGl0LFxcbiAzNzQ6XFx0fTtcXG4gMzc1OlxcdFxcbiAzNzY6XFx0c3RhdGljIGludCBfX2luaXQgd3Bhbl9waHlfY2xhc3NfaW5pdCh2b2lkKVxcbiAzNzc6XFx0e1xcbiAzNzg6XFx0XFx0aW50IHJjO1xcbiAzNzk6XFx0XFxuIDM4MDpcXHRcXHRyYyA9IHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoXFx1MDAyNmNmZzgwMjE1NF9wZXJuZXRfb3BzKTtcXG4gMzgxOlxcdFxcdGlmIChyYylcXG4gMzgyOlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRyYyA9IHdwYW5fcGh5X3N5c2ZzX2luaXQoKTtcXG4gMzg1OlxcdFxcdGlmIChyYylcXG4gMzg2OlxcdFxcdFxcdGdvdG8gZXJyX3N5c2ZzO1xcbiAzODc6XFx0XFxuIDM4ODpcXHRcXHRyYyA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2Y2ZnODAyMTU0X25ldGRldl9ub3RpZmllcik7XFxuIDM4OTpcXHRcXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjIxOjE4LjQ3NDMzNzA1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjYwNTUyOTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgY2ZnODAyMTU0IE5ldGRldmljZSBOb3RpZmllcioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBob3cgYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgZ2V0cyB0cmlnZ2VyZWQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCdzIHRpZWQgdG8gYW55IG5ldGRldmljZSBldmVudCByZWxhdGVkIHRvIGEgV1BBTiAod2lyZWxlc3MgcGVyc29uYWwgYXJlYSBuZXR3b3JrKSBuZXRfZGV2aWNlLiBTbywgYW55dGhpbmcgdGhhdCBhZmZlY3RzIGEgV1BBTiBuZXRfZGV2aWNlIGlzIGdvaW5nIHRvIHRyaWdnZXIgdGhpcyBub3RpZmllci5cblxuU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgZXZlbnRzIGxpa2UgYWRkaW5nIGFuIGludGVyZmFjZSB1c2luZyBgaWVlZTgwMjE1NF9hZGRfaWZhY2VgLCBkZXZpY2UgcmVnaXN0cmF0aW9uLCBvciB0aGUgbmV0X2RldmljZSBzdGF0ZSBjaGFuZ2luZyBiZXR3ZWVuIFVQIGFuZCBET1dOLlxuXG5Ob3csIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgdG8gc2VlIHdoZXJlIHRoZXNlIHRyaWdnZXJpbmcgZnVuY3Rpb25zIGFjdHVhbGx5IGxpdmUuIExldCdzIGxvb2sgYXQgYGllZWU4MDIxNTRfYWRkX2lmYWNlYCwgZm9yIHN0YXJ0ZXJzLiBJIGFsc28gbmVlZCB0byBjb25zaWRlciBvdGhlciByZWxhdGVkIGZ1bmN0aW9uczogYG5sODAyMTU0X2FkZF9pZmFjZWAsIGBtYWM4MDIxNTRfd3Bhbl91cGRhdGVfbGxzZWNgLCBhbmQgb3RoZXJzIGluIHRoZSBzYW1lIHZlaW4uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG9vLlxuXG5UbyBtYWtlIHRoaXMgZWZmaWNpZW50LCBJIHNob3VsZCBiZSBhYmxlIHRvIHBlcmZvcm0gYSBzZWFyY2ggZm9yIGNvbnN0YW50cyBsaWtlIGBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDYCBhbmQgdGhlbiBsb29rIGZvciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyBzdWNoIGFzIGBpZWVlODAyMTU0X2FkZF9pZmFjZWAsIGBubDgwMjE1NF9hZGRfaW50ZXJmYWNlYCBvciBvdGhlcnMgdGhhdCBhcmUgcmVsZXZhbnQuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBwYXRod2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1ODYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMToyMS43MzQ4OTMyMjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODE1NTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJOTDgwMjE1NF9JRlRZUEVfVU5TUEVDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2llZWU4MDIxNTQvY29yZS5jPTI4OD1zdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxubmV0L2llZWU4MDIxNTQvY29yZS5jLTI5OS1cXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmM6MzAwOlxcdFdBUk5fT04od3Bhbl9kZXYtXFx1MDAzZWlmdHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfVU5TUEVDKTtcXG5uZXQvaWVlZTgwMjE1NC9jb3JlLmMtMzAxLVxcbi0tXFxubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYz05MjI9c3RhdGljIGludCBubDgwMjE1NF9uZXdfaW50ZXJmYWNlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTkyNC1cXHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYzo5MjU6XFx0ZW51bSBubDgwMjE1NF9pZnR5cGUgdHlwZSA9IE5MODAyMTU0X0lGVFlQRV9VTlNQRUM7XFxubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYy05MjYtXFx0X19sZTY0IGV4dGVuZGVkX2FkZHIgPSBjcHVfdG9fbGU2NCgweDAwMDAwMDAwMDAwMDAwMDBVTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMToyMi4zNzMwNTMzNDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExNDE4MjAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIDgwMi4xNS40IE5ldHdvcmsgTGF5ZXIgQ29kZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgSUVFRSA4MDIuMTUuNCBuZXR3b3JrIGxheWVyIGltcGxlbWVudGF0aW9uLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoZSBpc3N1ZSBtaWdodCBiZSBjZW50ZXJlZCBhcm91bmQgYSBzcGVjaWZpYyBzZWN0aW9uIG9mIGNvZGUsIGxpa2VseSByZWxhdGVkIHRvIGEgcmVjZW50IGJ1ZyByZXBvcnQgb3Igb2JzZXJ2ZWQgYmVoYXZpb3IuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoYXQgbGluZSA5MjIgd2l0aGluIHRoZSBgbmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuY2AgZmlsZSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbGwgYmVnaW4gYnkgZXhhbWluaW5nIHRoYXQgcGFydGljdWxhciBhcmVhLCBhbmQgYXNzZXNzIHRoZSBzdXJyb3VuZGluZyBsaW5lcy4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBpbml0aWFsIGRpcmVjdGlvbiB0byB0YWtlOyBJJ2xsIHN0YXJ0IHdpdGggdGhpcyBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MTEsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMToyNC40ODcyMzc5MjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pZWVlODAyMTU0L25sODAyMTU0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTIwOlxcdH1cXG4gOTIxOlxcdFxcbiA5MjI6XFx0c3RhdGljIGludCBubDgwMjE1NF9uZXdfaW50ZXJmYWNlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIDkyMzpcXHR7XFxuIDkyNDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuIDkyNTpcXHRcXHRlbnVtIG5sODAyMTU0X2lmdHlwZSB0eXBlID0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQztcXG4gOTI2OlxcdFxcdF9fbGU2NCBleHRlbmRlZF9hZGRyID0gY3B1X3RvX2xlNjQoMHgwMDAwMDAwMDAwMDAwMDAwVUxMKTtcXG4gOTI3OlxcdFxcbiA5Mjg6XFx0XFx0LyogVE9ETyBhdm9pZCBmYWlsaW5nIGEgbmV3IGludGVyZmFjZVxcbiA5Mjk6XFx0XFx0ICogY3JlYXRpb24gZHVlIHRvIHBlbmRpbmcgcmVtb3ZhbD9cXG4gOTMwOlxcdFxcdCAqL1xcbiA5MzE6XFx0XFxuIDkzMjpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTU0X0FUVFJfSUZOQU1FXSlcXG4gOTMzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA5MzQ6XFx0XFxuIDkzNTpcXHRcXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxNTRfQVRUUl9JRlRZUEVdKSB7XFxuIDkzNjpcXHRcXHRcXHR0eXBlID0gbmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxNTRfQVRUUl9JRlRZUEVdKTtcXG4gOTM3OlxcdFxcdFxcdGlmICh0eXBlIFxcdTAwM2UgTkw4MDIxNTRfSUZUWVBFX01BWCB8fFxcbiA5Mzg6XFx0XFx0XFx0ICAgICEocmRldi1cXHUwMDNld3Bhbl9waHkuc3VwcG9ydGVkLmlmdHlwZXMgXFx1MDAyNiBCSVQodHlwZSkpKVxcbiA5Mzk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDk0MDpcXHRcXHR9XFxuIDk0MTpcXHRcXG4gOTQyOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjE1NF9BVFRSX0VYVEVOREVEX0FERFJdKVxcbiA5NDM6XFx0XFx0XFx0ZXh0ZW5kZWRfYWRkciA9IG5sYV9nZXRfbGU2NChpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjE1NF9BVFRSX0VYVEVOREVEX0FERFJdKTtcXG4gOTQ0OlxcdFxcbiA5NDU6XFx0XFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWFkZF92aXJ0dWFsX2ludGYpXFxuIDk0NjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDk0NzpcXHRcXG4gOTQ4OlxcdFxcdHJldHVybiByZGV2X2FkZF92aXJ0dWFsX2ludGYocmRldixcXG4gOTQ5OlxcdFxcdFxcdFxcdFxcdCAgICAgbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxNTRfQVRUUl9JRk5BTUVdKSxcXG4gOTUwOlxcdFxcdFxcdFxcdFxcdCAgICAgTkVUX05BTUVfVVNFUiwgdHlwZSwgZXh0ZW5kZWRfYWRkcik7XFxuIDk1MTpcXHR9XFxuIDk1MjpcXHRcXG4gOTUzOlxcdHN0YXRpYyBpbnQgbmw4MDIxNTRfZGVsX2ludGVyZmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiA5NTQ6XFx0e1xcbiA5NTU6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzBdO1xcbiA5NTY6XFx0XFx0c3RydWN0IHdwYW5fZGV2ICp3cGFuX2RldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbiA5NTc6XFx0XFxuIDk1ODpcXHRcXHRpZiAoIXJkZXYtXFx1MDAzZW9wcy1cXHUwMDNlZGVsX3ZpcnR1YWxfaW50ZilcXG4gOTU5OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjE6MjQuNDg3Mzc1MzI0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNzcyMTU2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQSBCdWcgaW4gdGhlIDgwMi4xNS40IE5ldGxpbmsgSW50ZXJmYWNlIENyZWF0aW9uKipcblxuT2theSwgc28gaGVyZSdzIHdoYXQgSSdtIHNlZWluZyBpbiBgbmw4MDIxNTRfbmV3X2ludGVyZmFjZWAuIElmIHRoZSBOZXRsaW5rIHJlcXVlc3QgKmRvZXNuJ3QqIHNwZWNpZnkgYW4gaW50ZXJmYWNlIHR5cGUsIHdoaWNoIGlzIHBlcmZlY3RseSB2YWxpZCwgdGhlIGNvZGUgZGVmYXVsdHMgdGhlIHR5cGUgdG8gYE5MODAyMTU0X0lGVFlQRV9VTlNQRUNgLiBObyByZWQgZmxhZ3MgdGhlcmUsIGl0IHNlZW1zIHJlYXNvbmFibGUuIFRoZSBwcm9ibGVtIGFyaXNlcyBiZWNhdXNlIGByZGV2X2FkZF92aXJ0dWFsX2ludGZgIHRoZW4gY3JlYXRlcyB0aGUgdmlydHVhbCBpbnRlcmZhY2Ugd2l0aCB0aGlzICp1bnNwZWNpZmllZCogdHlwZS4gRmluZSBzbyBmYXIuXG5cbk5vdywgaGVyZSdzIHdoZXJlIGl0IGJpdGVzIHVzLiBXaGVuIHRoaXMgaW50ZXJmYWNlIGlzIHJlZ2lzdGVyZWQgYW5kIHN0YXJ0cyByZWNlaXZpbmcgbm90aWZpZXIgZXZlbnRzLCBgd3Bhbl9kZXYtXHUwMDNlaWZ0eXBlYCBpcyBzdGlsbCwgYW5kIGluY29ycmVjdGx5LCBgTkw4MDIxNTRfSUZUWVBFX1VOU1BFQ2AuIEFuZCBoZXJlJ3MgdGhlIGtpY2tlcjogdGhhdCB0cmlnZ2VycyB0aGUgYFdBUk5fT05gIHRoYXQgd2FzIGp1c3QgYWRkZWQuIEl0J3MgYSB0ZXh0Ym9vayBpbnZhcmlhbnQgdmlvbGF0aW9uLCByaXBlIGZvciBmdXp6aW5nIHRvIGV4cGxvaXQgZGlyZWN0bHkuIENsYXNzaWMuXG5cblNvLCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnLCBwcm9iYWJseSBlYXN5IHRvIHJlcHJvZHVjZSwgYW5kIGxpa2VseSB0byBiZSBtaXNzZWQgaW4gbWFudWFsIHRlc3RpbmcuIFdlJ3ZlIGdvdCBhIGRlZmF1bHQgb2YgYE5MODAyMTU0X0lGVFlQRV9VTlNQRUNgIG5vdCBiZWluZyBwcm9wZXJseSBoYW5kbGVkIGFmdGVyIHRoZSBpbnRlcmZhY2UgaXMgY3JlYXRlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgd2UgY2FuIGJ1aWxkIGFuZCB0ZXN0IHRoaXMgcXVpY2tseS4gTGV0IG1lIGdvIGNoZWNrIGBuZXQvaWVlZTgwMjE1NC9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0IGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBleGVyY2lzZSB0aGlzIGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1MTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMToyNy43NjQ1OTM0MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaWVlZTgwMjE1NC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai0kKENPTkZJR19JRUVFODAyMTU0KSArPSBpZWVlODAyMTU0Lm9cXG4gICAzOlxcdG9iai0kKENPTkZJR19JRUVFODAyMTU0X1NPQ0tFVCkgKz0gaWVlZTgwMjE1NF9zb2NrZXQub1xcbiAgIDQ6XFx0b2JqLXkgKz0gNmxvd3Bhbi9cXG4gICA1OlxcdFxcbiAgIDY6XFx0aWVlZTgwMjE1NC15IDo9IG5ldGxpbmsubyBubC1tYWMubyBubC1waHkubyBubF9wb2xpY3kubyBjb3JlLm8gXFxcXFxcbiAgIDc6XFx0ICAgICAgICAgICAgICAgIGhlYWRlcl9vcHMubyBzeXNmcy5vIG5sODAyMTU0Lm8gdHJhY2UubyBwYW4ub1xcbiAgIDg6XFx0aWVlZTgwMjE1NF9zb2NrZXQteSA6PSBzb2NrZXQub1xcbiAgIDk6XFx0XFxuICAxMDpcXHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMToyNy43NjQ2ODg3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDk5MzE5NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSA4MDIuMTUuNCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIDgwMi4xNS40IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBGaXJzdCwgbGV0J3MgbWFrZSBzdXJlIGBDT05GSUdfSUVFRTgwMjE1NGAgaXMgZW5hYmxlZCwgb2J2aW91c2x5LiBUaGVuLCBJIG5lZWQgdG8gbG9vayBpbnRvIHdoZXRoZXIgd2UncmUgdXNpbmcgZXhwZXJpbWVudGFsIG5sODAyMTU0IHN1cHBvcnQsIHNvIGBDT05GSUdfSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxgIG5lZWRzIGEgbG9vay4gT3IsIGlzIGl0IGEgc3RyYWlnaHQgYENPTkZJR19NQUM4MDIxNTRgIGNvbmZpZ3VyYXRpb24/IE9yIGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBmYWtlIGxvdy1iYW5kd2lkdGggc2l0dWF0aW9uIHdpdGggYENPTkZJR19JRUVFODAyMTU0X0ZBS0VMQmAgb3IgZXZlbiB1c2luZyBgQ09ORklHX0lFRUU4MDIxNTRfSFdTSU1gPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBvbmUncyBpbiBwbGF5LlxuXG5OZXh0IHN0ZXA6IGNyb3NzLXJlZmVyZW5jZSB0aGVzZSBLY29uZmlnIGZpbGVzIHRvIHNlZSB3aGVyZSB0aGVzZSBzZXR0aW5ncyBhcmUgYmVpbmcgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGJvdGggYG5ldC9tYWM4MDIxNTQvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWdgIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3aGF0IHRoZXNlIHNldHRpbmdzIGFjdHVhbGx5IGRvLiBHb3R0YSBnZXQgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBwb3NzaWJsZSBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzMjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTozMC44NjQwMTA3NjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODE0MTEzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxNTRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjE1NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjE1NC9LY29uZmlnOjI6Y29uZmlnIE1BQzgwMjE1NFxcbm5ldC9tYWM4MDIxNTQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjE1LjQgU29mdCBOZXR3b3JraW5nIFN0YWNrIChtYWM4MDIxNTQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTozMC45NzIxNTc1ODFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwNzQyODU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQUMgODAyLjE1LjQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTUFDIDgwMi4xNS40IGxheWVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgbmV0L21hYzgwMjE1NC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciBhbGwgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLCB0aGUga25vYnMgYW5kIGRpYWxzIHRoYXQgY29udHJvbCBob3cgdGhpcyBzcGVjaWZpYyBNQUMgaW1wbGVtZW50YXRpb24gYmVoYXZlcy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCBpdHMgY29udGVudCwgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgZ3JvdXBlZC4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIGN1c3RvbWl6YXRpb24gcG9pbnRzLiBJ4oCZbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZW0sIHdoYXQgaW1wYWN0cyB3aGF0LCBhbmQgYWxzbyBsb29rIGZvciBpbnRlcmVzdGluZywgcG90ZW50aWFsbHkgb2JzY3VyZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIHVzZWZ1bCB0byBrbm93LiBJdOKAmXMgYSBjcnVjaWFsIHN0ZXAgYmVmb3JlIEkgY2FuIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4NDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTozMy4yNzk1ODkwMDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjE1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTU0XFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBJRUVFIDgwMi4xNS40IFNvZnQgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTU0KVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NFxcbiAgIDU6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NDTVxcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19DVFJcXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjE1LjRcXG4gIDEzOlxcdFxcdCAgbmV0d29ya2luZyBzdGFjayBmb3IgU29mdE1BQyBkZXZpY2VzICh0aGUgb25lcyBpbXBsZW1lbnRpbmdcXG4gIDE0OlxcdFxcdCAgb25seSBQSFkgbGV2ZWwgb2YgSUVFRSA4MDIuMTUuNCBzdGFuZGFyZCkuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgTm90ZTogdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBuZWl0aGVyIGNlcnRpZmllZCwgbm9yIGZlYXR1cmVcXG4gIDE3OlxcdFxcdCAgY29tcGxldGUhIENvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgaGFzbid0XFxuICAxODpcXHRcXHQgIGJlZW4gdGVzdGVkIHlldCFcXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBJZiB5b3UgcGxhbiB0byB1c2UgSGFyZE1BQyBJRUVFIDgwMi4xNS40IGRldmljZXMsIHlvdSBjYW5cXG4gIDIxOlxcdFxcdCAgc2F5IE4gaGVyZS4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHNheSBNIHRvIGNvbXBpbGUgaXQgYXNcXG4gIDIyOlxcdFxcdCAgbW9kdWxlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTozMy4yNzk2NTA0MjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4MjYyMTM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqS2NvbmZpZyBEaXZlIFRpbWUhKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgSUVFRSA4MDIuMTUuNCBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgaGVhcnQgb2YgYW55IGdvb2Qga2VybmVsIG1vZHVsZSBjb25maWd1cmF0aW9uOiB0aGUgYEtjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGhlYWRpbmcgc3RyYWlnaHQgdG8gYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBlc3NlbnRpYWwgYnVpbGQtdGltZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBJRUVFIDgwMi4xNS40IG5ldHdvcmtpbmcgc3RhY2sgYXJlIGRlZmluZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhpbmdzIGxpa2UgZW5hYmxpbmcgYW5kIGRpc2FibGluZyB2YXJpb3VzIFBIWSBsYXllcnMsIE1BQyBwcm90b2NvbHMsIHN1cHBvcnRlZCBoYXJkd2FyZSBwbGF0Zm9ybXMsIGRlYnVnIG9wdGlvbnMsIGFuZCBtYXliZSBldmVuIHNvbWUgcGVyZm9ybWFuY2UtdHVuaW5nIHBhcmFtZXRlcnMgaW4gaGVyZS4gSSdtIGhvcGluZyBJIGNhbiBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIHRoaXMgZHJpdmVyLiBGcm9tIGhlcmUgSSBjYW4gc2VlIHdoYXQgSSBjYW4gYnVpbGQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQ0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTozNS42NjIyNzQ0NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBJRUVFODAyMTU0X0RSSVZFUlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJRUVFIDgwMi4xNS40IGRyaXZlcnNcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXFx1MDAyNlxcdTAwMjYgSUVFRTgwMjE1NFxcbiAgIDU6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciBJRUVFIDgwMi4xNS40IExvdy1SYXRlXFxuICAgODpcXHRcXHQgIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29yayBkZXZpY2UgZHJpdmVycy4gVGhpcyBvcHRpb24gYWxvbmVcXG4gICA5OlxcdFxcdCAgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXFxuICAxMjpcXHRcXHQgIGRpc2FibGVkLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgSUVFRTgwMjE1NF9GQUtFTEJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjE1NFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjE1LjQgbG9vcGJhY2sgZHJpdmVyXFxcIlxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgZmFrZSBkcml2ZXIgdGhhdCBjYW4gZW11bGF0ZSBhIG5ldFxcbiAgMTk6XFx0XFx0ICBvZiBzZXZlcmFsIGludGVyY29ubmVjdGVkIHJhZGlvIGRldmljZXMuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvIHNheSBNIGhlcmUuXFxuICAyMjpcXHRcXHQgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgJ2Zha2VsYicuXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBJRUVFODAyMTU0X0FUODZSRjIzMFxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiQVQ4NlJGMjMwLzIzMS8yMzMvMjEyIHRyYW5zY2VpdmVyIGRyaXZlclxcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gU1BJXFxuICAyODpcXHRcXHRzZWxlY3QgUkVHTUFQX1NQSVxcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgYXQ4NnJmMjMwLzIzMS8yMzMvMjEyIFNQSSA4MDIuMTUuNCB3aXJlbGVzc1xcbiAgMzE6XFx0XFx0ICBjb250cm9sbGVyLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUbyBkbyBzbywgc2F5IE0gaGVyZS5cXG4gIDM0OlxcdFxcdCAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAnYXQ4NnJmMjMwJy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIElFRUU4MDIxNTRfTVJGMjRKNDBcXG4gIDM3OlxcdFxcdHRyaXN0YXRlIFxcXCJNaWNyb2NoaXAgTVJGMjRKNDAgdHJhbnNjZWl2ZXIgZHJpdmVyXFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIFNQSVxcbiAgNDA6XFx0XFx0c2VsZWN0IFJFR01BUF9TUElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjE6MzUuNjYyMzg1NTk2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODI3NDYyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIGludG8gdGhpcyBgaWVlZTgwMjE1NGAgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEkgd2FzIGZvY3VzaW5nIG9uIHNvbWV0aGluZyBlbHNlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSByZWxhdGVkIHRvIGhhcmR3YXJlIHNpbXVsYXRpb24sIGBJRUVFODAyMTU0X0hXU0lNYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aGluIHRoYXQgcGFydGljdWxhciBmaWxlLCBgZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnYCwgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgcHJvcGVybHkgYW5kIHRoZXJlIGFyZW4ndCBhbnkgb2J2aW91cyByZWQgZmxhZ3MgSSd2ZSBtaXNzZWQuIEl04oCZcyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaCB3aXRoIHRoZSBjb25maWdzLCBjb25zaWRlcmluZyBkZXBlbmRlbmNpZXMgYW5kIG5vdCBqdXN0IHRoZSBjdXJyZW50IGZvY3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzM4NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjE6MzcuNzQ1MTM1NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdGNvbmZpZyBJRUVFODAyMTU0X0NBODIxMFxcbiAgODE6XFx0XFx0dHJpc3RhdGUgXFxcIkNhc2NvZGEgQ0E4MjEwIHRyYW5zY2VpdmVyIGRyaXZlclxcXCJcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjE1NFxcbiAgODM6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuICA4NDpcXHRcXHRkZXBlbmRzIG9uIFNQSVxcbiAgODU6XFx0XFx0aGVscFxcbiAgODY6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgQ0E4MjEwIFNQSSA4MDIuMTUuNCB3aXJlbGVzc1xcbiAgODc6XFx0XFx0ICBjb250cm9sbGVyLlxcbiAgODg6XFx0XFxuICA4OTpcXHRcXHQgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUbyBkbyBzbywgc2F5IE0gaGVyZS5cXG4gIDkwOlxcdFxcdCAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAnY2E4MjEwJy5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIElFRUU4MDIxNTRfQ0E4MjEwX0RFQlVHRlNcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIkNBODIxMCBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG4gIDk0OlxcdFxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9DQTgyMTBcXG4gIDk1OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfRlNcXG4gIDk2OlxcdFxcdGhlbHBcXG4gIDk3OlxcdFxcdCAgVGhpcyBvcHRpb24gY29tcGlsZXMgZGVidWdmcyBjb2RlIGZvciB0aGUgY2E4MjEwIGRyaXZlci4gVGhpc1xcbiAgOTg6XFx0XFx0ICBleHBvc2VzIGEgZGVidWdmcyBub2RlIGZvciBlYWNoIENBODIxMCBpbnN0YW5jZSB3aGljaCBhbGxvd3NcXG4gIDk5OlxcdFxcdCAgZGlyZWN0IHVzZSBvZiB0aGUgQ2FzY29kYSBBUEksIGV4cG9zaW5nIHRoZSA4MDIuMTUuNCBNQUNcXG4gMTAwOlxcdFxcdCAgbWFuYWdlbWVudCBlbnRpdGllcy5cXG4gMTAxOlxcdFxcbiAxMDI6XFx0Y29uZmlnIElFRUU4MDIxNTRfTUNSMjBBXFxuIDEwMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTUNSMjBBIHRyYW5zY2VpdmVyIGRyaXZlclxcXCJcXG4gMTA0OlxcdFxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuIDEwNTpcXHRcXHRkZXBlbmRzIG9uIElFRUU4MDIxNTRfRFJJVkVSUyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxNTRcXG4gMTA2OlxcdFxcdGRlcGVuZHMgb24gU1BJXFxuIDEwNzpcXHRcXHRoZWxwXFxuIDEwODpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBNQ1IyMEEgU1BJIDgwMi4xNS40IHdpcmVsZXNzXFxuIDEwOTpcXHRcXHQgIGNvbnRyb2xsZXIuXFxuIDExMDpcXHRcXG4gMTExOlxcdFxcdCAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIFRvIGRvIHNvLCBzYXkgTSBoZXJlLlxcbiAxMTI6XFx0XFx0ICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkICdtY3IyMGEnLlxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgSUVFRTgwMjE1NF9IV1NJTVxcbiAxMTU6XFx0XFx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTU0XFxuIDExNjpcXHRcXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTU0XFxcIlxcbiAxMTc6XFx0XFx0aGVscFxcbiAxMTg6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuIDExOTpcXHRcXHQgIElFRUUgODAyLjE1LjQgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTU0KSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTozNy43NDUyNDcwNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODU1Mzk0Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBJRUVFIDgwMi4xNS40IE5ldGRldiBOb3RpZmllcioqXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB0aGlzIGZ1enppbmcgdGFyZ2V0LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBgSUVFRTgwMjE1NGAgY29uZmlndXJhdGlvbiDigJMgdGhhdCdzIHRoZSBwcmltYXJ5IGRyaXZlciwgY29uZmlybWVkIGJ5IGNoZWNraW5nIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgLiBBZGRpdGlvbmFsbHksIGBNQUM4MDIxNTRgLCBgSUVFRTgwMjE1NF9GQUtFTEJgLCBgSUVFRTgwMjE1NF9IV1NJTWAsIG9yIGV2ZW4gYElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMYCBjb3VsZCBiZSByZWxldmFudCwgc28gSSdsbCBrZWVwIHRob3NlIGluIG1pbmQgYXMgcG90ZW50aWFsIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAuIEhvd2V2ZXIsIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgdHJpZ2dlcmVkIGJ5IGludGVyZmFjZSBjcmVhdGlvbiBvciBkZWxldGlvbi4gQWZ0ZXIgY2hlY2tpbmcsIEkgc2VlIHRoZSBmb2xsb3dpbmcgYXMgbGlrZWx5IGVudHJ5IHBvaW50czogYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgKHRoZSBtb2RpZmllZCBmdW5jdGlvbiksIGBubDgwMjE1NF9uZXdfaW50ZXJmYWNlYCAod2hpY2ggY2FsbHMgYHJkZXZfYWRkX3ZpcnR1YWxfaW50ZmAgYW5kIGNvdWxkIHRyaWdnZXIgdGhlIG5vdGlmaWVyKSwgYG5sODAyMTU0X2RlbF9pbnRlcmZhY2VgLCBgaWVlZTgwMjE1NF9hZGRfaWZhY2VgIGFuZCBgaWVlZTgwMjE1NF9kZWxfaWZhY2VgLlxuXG5HaXZlbiB0aGF0IGBjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxgIGlzIHRoZSBjZW50cmFsIGZpZ3VyZSwgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgYWNjZXNzaWJsZS4gSXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHN0YXRlLCB2b2lkICpwdHIpYC4gU2luY2UgaXQgaXMgc3RhdGljLCBpdCBpcyBzdGlsbCB2aXNpYmxlIGluIHRoZSB2bWxpbnV4IC8ga2FsbHN5bXMgc3ltYm9sIHRhYmxlLlxuXG5UaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBmb2N1cyBzeW1ib2xzIGFyZTogYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAsIGBubDgwMjE1NF9uZXdfaW50ZXJmYWNlYCwgYW5kIGBpZWVlODAyMTU0X2FkZF9pZmFjZWAuIEknbGwgd2FudCB0byB0YXJnZXQgdGhlc2UuXG5cblRvIHN1bW1hcml6ZSBhbmQgZG91YmxlLWNoZWNrLCBmdXp6aW5nIGlzIHdvcnRod2hpbGUgYmVjYXVzZSB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXNzZXJ0aW9uIChgV0FSTl9PTih3cGFuX2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQylgKSBhbmQgc2V0cyB0aGUgZGV2aWNlIHR5cGUgZHVyaW5nIGBORVRERVZfUE9TVF9JTklUYCB3aXRoaW4gdGhlIElFRUUgODAyLjE1LjQgbmV0ZGV2IG5vdGlmaWVyIGNhbGxiYWNrLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBJRUVFODAyMTU0YCAobWFuZGF0b3J5KSBhbmQgcG90ZW50aWFsbHkgYE1BQzgwMjE1NGAsIGBJRUVFODAyMTU0X0hXU0lNYCwgYElFRUU4MDIxNTRfRkFLRUxCYCwgYW5kIGBJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTGAuXG5cbkFscmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzIxLCJPdXRwdXRUb2tlbnMiOjI1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjIxOjQzLjYwMDY0NDYyOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTcxMjA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSUVFRTgwMjE1NFwiLFxuICAgIFwiTUFDODAyMTU0XCIsXG4gICAgXCJJRUVFODAyMTU0X05MODAyMTU0X0VYUEVSSU1FTlRBTFwiLFxuICAgIFwiSUVFRTgwMjE1NF9GQUtFTEJcIixcbiAgICBcIklFRUU4MDIxNTRfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZmc4MDIxNTRfbmV0ZGV2X25vdGlmaWVyX2NhbGxcIixcbiAgICBcIm5sODAyMTU0X25ld19pbnRlcmZhY2VcIixcbiAgICBcImllZWU4MDIxNTRfYWRkX2lmYWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKCkgaW4gdGhlIElFRUUgODAyLjE1LjQgc3Vic3lzdGVtIHRvIHNldCBuZXRkZXYgZGV2aWNlIHR5cGUgb24gTkVUREVWX1BPU1RfSU5JVCBhbmQgYWRkcyBhIG5ldyBydW50aW1lIGFzc2VydGlvbiBXQVJOX09OKHdwYW5fZGV2LVxcdTAwM2VpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQykuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayAobmw4MDIxNTQvcnRuZXRsaW5rKSBpbnRlcmZhY2UgY3JlYXRpb24gYW5kIG5ldGRldiBsaWZlY3ljbGUgZXZlbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklFRUU4MDIxNTRcIixcbiAgICBcIk1BQzgwMjE1NFwiLFxuICAgIFwiSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcIixcbiAgICBcIklFRUU4MDIxNTRfRkFLRUxCXCIsXG4gICAgXCJJRUVFODAyMTU0X0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsXCIsXG4gICAgXCJubDgwMjE1NF9uZXdfaW50ZXJmYWNlXCIsXG4gICAgXCJpZWVlODAyMTU0X2FkZF9pZmFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbCgpIGluIHRoZSBJRUVFIDgwMi4xNS40IHN1YnN5c3RlbSB0byBzZXQgbmV0ZGV2IGRldmljZSB0eXBlIG9uIE5FVERFVl9QT1NUX0lOSVQgYW5kIGFkZHMgYSBuZXcgcnVudGltZSBhc3NlcnRpb24gV0FSTl9PTih3cGFuX2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKG5sODAyMTU0L3J0bmV0bGluaykgaW50ZXJmYWNlIGNyZWF0aW9uIGFuZCBuZXRkZXYgbGlmZWN5Y2xlIGV2ZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjE6NDMuNzE2MzY2MDgxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI0MTcxNDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjIxOjQzLjcxNzE3MzAzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUyNDA5MDI2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzdGF0aWMgY29uc3QgZGV2aWNlX3R5cGUgc3RydWN0dXJlIChgd3Bhbl9kZXZfdHlwZWApLCBhIFdBUk5fT04gY2hlY2sgZm9yIHVuc3BlY2lmaWVkIGludGVyZmFjZSB0eXBlcywgYW5kIHNldHMgdGhlIG5ldGRldiBkZXZpY2UgdHlwZSBwb2ludGVyIGR1cmluZyBORVRERVZfUE9TVF9JTklUIG5vdGlmaWNhdGlvbi5cXG5cXG4xLiBObyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbjIuIFRoZSBgd3Bhbl9kZXZfdHlwZWAgc3RydWN0IGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgYXQgY29tcGlsZSB0aW1lLlxcbjMuIE5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGJ1ZmZlciBsZW5ndGhzL29mZnNldHMgYXJlIGFmZmVjdGVkLlxcbjQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQ7IHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGYxNWJkM2M5YTVjZWNiNDk3MmI2ZDEyZjdlZTYwYmY1Y2MwZTMxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTc6MTk6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmMgYi9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcbmluZGV4IGMwYjg3MTIwMThhMTYuLmVjNWJmZGY2YmQzMWUgMTAwNjQ0XG4tLS0gYS9uZXQvaWVlZTgwMjE1NC9jb3JlLmNcbisrKyBiL25ldC9pZWVlODAyMTU0L2NvcmUuY1xuQEAgLTI3Miw2ICsyNzIsMTAgQEAgdm9pZCBjZmc4MDIxNTRfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldilcbiBcdGtmcmVlKHJkZXYpO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHdwYW5fZGV2X3R5cGUgPSB7XG4rXHQubmFtZVx0PSBcIndwYW5cIixcbit9O1xuK1xuIHN0YXRpYyB2b2lkXG4gY2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0oc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdFx0XHQgICBpbnQgaWZ0eXBlLCBpbnQgbnVtKVxuQEAgLTI5MywxMCArMjk3LDEyIEBAIHN0YXRpYyBpbnQgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXG4gXHRyZGV2ID0gd3Bhbl9waHlfdG9fcmRldih3cGFuX2Rldi1cdTAwM2V3cGFuX3BoeSk7XG4gXG4tXHQvKiBUT0RPIFdBUk5fT04gdW5zcGVjIHR5cGUgKi9cbitcdFdBUk5fT04od3Bhbl9kZXYtXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xuIFxuIFx0c3dpdGNoIChzdGF0ZSkge1xuLVx0XHQvKiBUT0RPIE5FVERFVl9ERVZUWVBFICovXG4rXHRjYXNlIE5FVERFVl9QT1NUX0lOSVQ6XG4rXHRcdFNFVF9ORVRERVZfREVWVFlQRShkZXYsIFx1MDAyNndwYW5fZGV2X3R5cGUpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxuIFx0XHRkZXYtXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcbiBcdFx0d3Bhbl9kZXYtXHUwMDNlaWRlbnRpZmllciA9ICsrcmRldi1cdTAwM2V3cGFuX2Rldl9pZDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE3OjIxOjQzLjcxNzE3NDU3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNzMzMjUzODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSUVFRSA4MDIuMTUuNCBDb3JlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSB3aGF0J3MgY2hhbmdlZCBpbiBgbmV0L2llZWU4MDIxNTQvY29yZS5jYC4gRmlyc3QsIEknbSBub3RpbmcgdGhlIGRlZmluaXRpb24gb2YgYHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3Bhbl9kZXZfdHlwZSA9IHsgLm5hbWUgPSBcIndwYW5cIiB9O2AuIEVzc2VudGlhbGx5LCBpdCBlc3RhYmxpc2hlcyBhIHNwZWNpZmljIGRldmljZSB0eXBlIGZvciBXUEFOLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgY2xhcml0eSBhbmQgcG90ZW50aWFsIGZ1dHVyZSBlbmhhbmNlbWVudHMuXG5cblRoZW4sIHRoZXJlJ3MgYSBgV0FSTl9PTih3cGFuX2Rldi1cdTAwM2VpZnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX1VOU1BFQyk7YCBsaW5lIGFkZGVkIHdpdGhpbiBgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsYC4gVGhhdCdzIGEgc2FuaXR5IGNoZWNrOyBJJ20gYXNzdW1pbmcgaXQncyB0byBwcmV2ZW50IHVuZGVmaW5lZCBiZWhhdmlvciBieSBlbnN1cmluZyB0aGUgaW50ZXJmYWNlIHR5cGUgaXMgZXhwbGljaXRseSBzZXQgKmJlZm9yZSogdGhlIG5vdGlmaWNhdGlvbiBjYWxsLiBBIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLCBhbHRob3VnaCBJJ2Qgd2FudCB0byBjaGVjayB3aGVyZSBgd3Bhbl9kZXYtXHUwMDNlaWZ0eXBlYCBpcyBpbml0aWFsaXplZCB0byBjb25maXJtIGl0cyBuZWNlc3NpdHkuXG5cbkZpbmFsbHksIHRoZSBgTkVUREVWX1BPU1RfSU5JVGAgZXZlbnQgaW4gYGNmZzgwMjE1NF9uZXRkZXZfbm90aWZpZXJfY2FsbGAgbm93IGluY2x1ZGVzIGBTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcdTAwMjZ3cGFuX2Rldl90eXBlKTtgLiBUaGlzIGlzIHdoZXJlIHRoZSBkZWNsYXJlZCBgd3Bhbl9kZXZfdHlwZWAgY29tZXMgaW50byBwbGF5LiBJdCdzIHByb3Blcmx5IGFzc29jaWF0aW5nIHRoZSBuZXdseSBjcmVhdGVkIG5ldGRldiB3aXRoIHRoZSBXUEFOIGRldmljZSB0eXBlLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBhZnRlciBuZXRkZXYgaW5pdGlhbGl6YXRpb24sIHdl4oCZcmUgcHJvcGVybHkgbWFya2luZyBpdCBhcyBhIFdQQU4gdHlwZSBmb3IgdGhlIGtlcm5lbCdzIGRldmljZSBtYW5hZ2VtZW50LlxuXG5JJ2xsIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaWVlZTgwMjE1NC9jb3JlLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgYnV0IHRoZXNlIGNoYW5nZXMgc2VlbSBsb2dpY2FsIGFuZCwgb24gdGhlIHN1cmZhY2UsIHJlcHJlc2VudCBnb29kIHByYWN0aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjE6NTQuNDUwNDMxMTQxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaWVlZTgwMjE1NC9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdHZvaWQgY2ZnODAyMTU0X2Rldl9mcmVlKHN0cnVjdCBjZmc4MDIxNTRfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpXFxuIDI3MTpcXHR7XFxuIDI3MjpcXHRcXHRrZnJlZShyZGV2KTtcXG4gMjczOlxcdH1cXG4gMjc0OlxcdFxcbiAyNzU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3cGFuX2Rldl90eXBlID0ge1xcbiAyNzY6XFx0XFx0Lm5hbWVcXHQ9IFxcXCJ3cGFuXFxcIixcXG4gMjc3OlxcdH07XFxuIDI3ODpcXHRcXG4gMjc5OlxcdHN0YXRpYyB2b2lkXFxuIDI4MDpcXHRjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbiAyODE6XFx0XFx0XFx0XFx0ICAgaW50IGlmdHlwZSwgaW50IG51bSlcXG4gMjgyOlxcdHtcXG4gMjgzOlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuIDI4NDpcXHRcXG4gMjg1OlxcdFxcdHJkZXYtXFx1MDAzZW51bV9ydW5uaW5nX2lmYWNlcyArPSBudW07XFxuIDI4NjpcXHR9XFxuIDI4NzpcXHRcXG4gMjg4OlxcdHN0YXRpYyBpbnQgY2ZnODAyMTU0X25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuIDI4OTpcXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3RhdGUsIHZvaWQgKnB0cilcXG4gMjkwOlxcdHtcXG4gMjkxOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG4gMjkyOlxcdFxcdHN0cnVjdCB3cGFuX2RldiAqd3Bhbl9kZXYgPSBkZXYtXFx1MDAzZWllZWU4MDIxNTRfcHRyO1xcbiAyOTM6XFx0XFx0c3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldjtcXG4gMjk0OlxcdFxcbiAyOTU6XFx0XFx0aWYgKCF3cGFuX2RldilcXG4gMjk2OlxcdFxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0cmRldiA9IHdwYW5fcGh5X3RvX3JkZXYod3Bhbl9kZXYtXFx1MDAzZXdwYW5fcGh5KTtcXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0V0FSTl9PTih3cGFuX2Rldi1cXHUwMDNlaWZ0eXBlID09IE5MODAyMTU0X0lGVFlQRV9VTlNQRUMpO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHRzd2l0Y2ggKHN0YXRlKSB7XFxuIDMwMzpcXHRcXHRjYXNlIE5FVERFVl9QT1NUX0lOSVQ6XFxuIDMwNDpcXHRcXHRcXHRTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcXHUwMDI2d3Bhbl9kZXZfdHlwZSk7XFxuIDMwNTpcXHRcXHRcXHRicmVhaztcXG4gMzA2OlxcdFxcdGNhc2UgTkVUREVWX1JFR0lTVEVSOlxcbiAzMDc6XFx0XFx0XFx0ZGV2LVxcdTAwM2VuZXRuc19pbW11dGFibGUgPSB0cnVlO1xcbiAzMDg6XFx0XFx0XFx0d3Bhbl9kZXYtXFx1MDAzZWlkZW50aWZpZXIgPSArK3JkZXYtXFx1MDAzZXdwYW5fZGV2X2lkO1xcbiAzMDk6XFx0XFx0XFx0bGlzdF9hZGRfcmN1KFxcdTAwMjZ3cGFuX2Rldi1cXHUwMDNlbGlzdCwgXFx1MDAyNnJkZXYtXFx1MDAzZXdwYW5fZGV2X2xpc3QpO1xcbiAzMTA6XFx0XFx0XFx0cmRldi1cXHUwMDNlZGV2bGlzdF9nZW5lcmF0aW9uKys7XFxuIDMxMTpcXHRcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZ3cGFuX2Rldi1cXHUwMDNlYXNzb2NpYXRpb25fbG9jayk7XFxuIDMxMjpcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2d3Bhbl9kZXYtXFx1MDAzZWNoaWxkcmVuKTtcXG4gMzEzOlxcdFxcdFxcdHdwYW5fZGV2LVxcdTAwM2VtYXhfYXNzb2NpYXRpb25zID0gU1pfMTZLO1xcbiAzMTQ6XFx0XFxuIDMxNTpcXHRcXHRcXHR3cGFuX2Rldi1cXHUwMDNlbmV0ZGV2ID0gZGV2O1xcbiAzMTY6XFx0XFx0XFx0YnJlYWs7XFxuIDMxNzpcXHRcXHRjYXNlIE5FVERFVl9ET1dOOlxcbiAzMTg6XFx0XFx0XFx0Y2ZnODAyMTU0X3VwZGF0ZV9pZmFjZV9udW0ocmRldiwgd3Bhbl9kZXYtXFx1MDAzZWlmdHlwZSwgLTEpO1xcbiAzMTk6XFx0XFxuIDMyMDpcXHRcXHRcXHRyZGV2LVxcdTAwM2VvcGVuY291bnQtLTtcXG4gMzIxOlxcdFxcdFxcdHdha2VfdXAoXFx1MDAyNnJkZXYtXFx1MDAzZWRldl93YWl0KTtcXG4gMzIyOlxcdFxcdFxcdGJyZWFrO1xcbiAzMjM6XFx0XFx0Y2FzZSBORVRERVZfVVA6XFxuIDMyNDpcXHRcXHRcXHRjZmc4MDIxNTRfdXBkYXRlX2lmYWNlX251bShyZGV2LCB3cGFuX2Rldi1cXHUwMDNlaWZ0eXBlLCAxKTtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0XFx0cmRldi1cXHUwMDNlb3BlbmNvdW50Kys7XFxuIDMyNzpcXHRcXHRcXHRicmVhaztcXG4gMzI4OlxcdFxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxuIDMyOTpcXHRcXHRcXHRjZmc4MDIxNTRfZnJlZV9wZWVyX3N0cnVjdHVyZXMod3Bhbl9kZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNzoyMTo1NC40NTA1NTg2MjFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUwNzQ5MzAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gncyBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgYHN0cnVjdCBkZXZpY2VfdHlwZWAgY2FsbGVkIGB3cGFuX2Rldl90eXBlYCBhcyBhIHN0YXRpYywgcmVhZC1vbmx5IHZhcmlhYmxlLiBObyBwcm9ibGVtIHRoZXJlLCBpdCdzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLiBUaGVuLCB3ZSBoYXZlIGEgYFdBUk5fT05gIHRoYXQgY2hlY2tzIGB3cGFuX2Rldi1cdTAwM2VpZnR5cGVgLiBBZ2FpbiwgdGhpcyBjaGVja3MgYW4gZXhpc3RpbmcsIGluaXRpYWxpemVkIGZpZWxkLiBGaW5hbGx5LCBgU0VUX05FVERFVl9ERVZUWVBFYCBpcyB1c2VkIHdoaWNoIGp1c3Qgc2V0cyBhIHBvaW50ZXIsIGBkZXYtXHUwMDNlZGV2LnR5cGVgLCB0byBvdXIgYHdwYW5fZGV2X3R5cGVgLlxuXG5NeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBsb29rcyBjbGVhbiwgYnV0IGxldCdzIGJlIG1ldGhvZGljYWwuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBhbGxvY2F0aW9ucyBvciBidWZmZXIgbWFuaXB1bGF0aW9ucyBpbnZvbHZlZC4gUmV2aWV3aW5nIHRoZSBjb2RlLCB0aGVyZSBhcmUgbm8gdXNlci1jb3B5IG9wZXJhdGlvbnMsIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBtZW1vcnksIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGJ1ZmZlcnMgaW4gYW55IHdheS4gTm8gbmV3IHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCB0aGF0IGFyZSB1bmluaXRpYWxpemVkIGFuZCBubyBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIGFyZSBtb2RpZmllZCB0aGF0IHdvdWxkIG1ha2UgdXMgc3VzcGVjdCBpdC4gU28sIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBXZSdyZSBzYWZlIG9uIHRoYXQgZnJvbnQuXG5cblRoZXJlZm9yZSwgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgc3VmZmljaWVudC4gSXQncyBhIGNsZWFyIGNhc2Ugd2hlcmUgS01TQU4ncyBkZWVwZXIgc2NydXRpbnkgaXNuJ3Qgd2FycmFudGVkLlxuXG5BbHJpZ2h0LCBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMuIFwiTmVlZHNLTVNBTjogVHJ1ZSBvbmx5IGlmIGNoYW5nZXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlwiIFRoYXQncyBhIHJlc291bmRpbmcgKmZhbHNlKiBpbiB0aGlzIGNhc2UuIFwiS01TQU5SZWFzb25pbmc6IFJlYXNvbmluZyBjb250cmFzdGluZyBLTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5LlwiIFBlcmZlY3QsIGFuZCB0aGF0J3MgcHJlY2lzZWx5IHdoYXQgSSd2ZSBwcm92aWRlZC4gTm93IEknbGwgZG9jdW1lbnQgbXkgcmVhc29uaW5nIGFuZCBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MTksIk91dHB1dFRva2VucyI6MTc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTc6MjE6NTguOTU4MDU0MTg3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3RhdGljIGNvbnN0IGRldmljZV90eXBlIHN0cnVjdHVyZSAoYHdwYW5fZGV2X3R5cGVgKSwgYSBXQVJOX09OIGNoZWNrIGZvciB1bnNwZWNpZmllZCBpbnRlcmZhY2UgdHlwZXMsIGFuZCBzZXRzIHRoZSBuZXRkZXYgZGV2aWNlIHR5cGUgcG9pbnRlciBkdXJpbmcgTkVUREVWX1BPU1RfSU5JVCBub3RpZmljYXRpb24uXFxuXFxuMS4gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4yLiBUaGUgYHdwYW5fZGV2X3R5cGVgIHN0cnVjdCBpcyBzdGF0aWNhbGx5IGRlZmluZWQgYW5kIGluaXRpYWxpemVkIGF0IGNvbXBpbGUgdGltZS5cXG4zLiBObyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIHNvY2tldCBvcHRpb25zLCBvciBidWZmZXIgbGVuZ3Rocy9vZmZzZXRzIGFyZSBhZmZlY3RlZC5cXG40LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkOyBzdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcgYnVpbGRzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzdGF0aWMgY29uc3QgZGV2aWNlX3R5cGUgc3RydWN0dXJlIChgd3Bhbl9kZXZfdHlwZWApLCBhIFdBUk5fT04gY2hlY2sgZm9yIHVuc3BlY2lmaWVkIGludGVyZmFjZSB0eXBlcywgYW5kIHNldHMgdGhlIG5ldGRldiBkZXZpY2UgdHlwZSBwb2ludGVyIGR1cmluZyBORVRERVZfUE9TVF9JTklUIG5vdGlmaWNhdGlvbi5cXG5cXG4xLiBObyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbjIuIFRoZSBgd3Bhbl9kZXZfdHlwZWAgc3RydWN0IGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQgYXQgY29tcGlsZSB0aW1lLlxcbjMuIE5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5ldGxpbmsgYXR0cmlidXRlcywgc29ja2V0IG9wdGlvbnMsIG9yIGJ1ZmZlciBsZW5ndGhzL29mZnNldHMgYXJlIGFmZmVjdGVkLlxcbjQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQ7IHN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow2ffh5[1] Phase: Succeeded StartedAt: 2026-09-06 17:22:10 +0000 UTC FinishedAt: 2026-09-06 17:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 17:22:10 +0000 UTC FinishedAt: 2026-09-06 17:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2] Phase: Succeeded StartedAt: 2026-09-06 17:22:10 +0000 UTC FinishedAt: 2026-09-06 21:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:22:10 +0000 UTC FinishedAt: 2026-09-06 21:01:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:22:10 +0000 UTC FinishedAt: 2026-09-06 17:22:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:22:10 +0000 UTC FinishedAt: 2026-09-06 17:22:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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-workflow2ffh5/series-workflow2ffh5-convert-artifact-76585231/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:22:20 +0000 UTC FinishedAt: 2026-09-06 17:38:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:22:20 +0000 UTC FinishedAt: 2026-09-06 17:38:33 +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:*fd69a06f-c69b-4ea5-bd98-cc0f3dddf9c0,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-workflow2ffh5/series-workflow2ffh5-convert-artifact-76585231/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": "d9cf096f-0851-4523-93d4-5d247f37e78b", "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-workflow2ffh5/series-workflow2ffh5-build-action-3015607893/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:22:20 +0000 UTC FinishedAt: 2026-09-06 17:38:23 +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:*fd69a06f-c69b-4ea5-bd98-cc0f3dddf9c0,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-workflow2ffh5/series-workflow2ffh5-convert-artifact-76585231/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": "d9cf096f-0851-4523-93d4-5d247f37e78b", "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-workflow2ffh5/series-workflow2ffh5-build-action-3015607893/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:38:33 +0000 UTC FinishedAt: 2026-09-06 17:38:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:38:33 +0000 UTC FinishedAt: 2026-09-06 17:38:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:38:33 +0000 UTC FinishedAt: 2026-09-06 17:38:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:38:33 +0000 UTC FinishedAt: 2026-09-06 17:38:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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-workflow2ffh5/series-workflow2ffh5-convert-artifact-3115155294/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:38:43 +0000 UTC FinishedAt: 2026-09-06 17:40:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:38:43 +0000 UTC FinishedAt: 2026-09-06 17:40:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d9cf096f-0851-4523-93d4-5d247f37e78b,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-workflow2ffh5/series-workflow2ffh5-build-action-3015607893/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-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:40:43 +0000 UTC FinishedAt: 2026-09-06 17:40:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:40:43 +0000 UTC FinishedAt: 2026-09-06 17:40:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:40:43 +0000 UTC FinishedAt: 2026-09-06 17:56:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:40:43 +0000 UTC FinishedAt: 2026-09-06 17:56:54 +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:*fd69a06f-c69b-4ea5-bd98-cc0f3dddf9c0,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-workflow2ffh5/series-workflow2ffh5-convert-artifact-3115155294/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": "7af480ac-be04-49a5-adb9-36f21b18e49e", "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-workflow2ffh5/series-workflow2ffh5-build-action-2626603058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:40:43 +0000 UTC FinishedAt: 2026-09-06 17:56:44 +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:*fd69a06f-c69b-4ea5-bd98-cc0f3dddf9c0,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-workflow2ffh5/series-workflow2ffh5-convert-artifact-3115155294/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": "7af480ac-be04-49a5-adb9-36f21b18e49e", "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-workflow2ffh5/series-workflow2ffh5-build-action-2626603058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:56:54 +0000 UTC FinishedAt: 2026-09-06 17:56:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:56:54 +0000 UTC FinishedAt: 2026-09-06 17:56:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:56:54 +0000 UTC FinishedAt: 2026-09-06 17:58:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:56:54 +0000 UTC FinishedAt: 2026-09-06 17:58:40 +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:*7af480ac-be04-49a5-adb9-36f21b18e49e,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-workflow2ffh5/series-workflow2ffh5-build-action-2626603058/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-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:58:50 +0000 UTC FinishedAt: 2026-09-06 21:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:58:50 +0000 UTC FinishedAt: 2026-09-06 21:01:43 +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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"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:*d9cf096f-0851-4523-93d4-5d247f37e78b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7af480ac-be04-49a5-adb9-36f21b18e49e,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-workflow2ffh5/series-workflow2ffh5-build-action-3015607893/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-workflow2ffh5/series-workflow2ffh5-build-action-2626603058/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:58:50 +0000 UTC FinishedAt: 2026-09-06 17:59:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:58:50 +0000 UTC FinishedAt: 2026-09-06 17:58:54 +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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"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-workflow2ffh5/series-workflow2ffh5-convert-artifact-2016656227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:58:50 +0000 UTC FinishedAt: 2026-09-06 17:58:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:58:50 +0000 UTC FinishedAt: 2026-09-06 17:58:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:58:50 +0000 UTC FinishedAt: 2026-09-06 17:58:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:59:00 +0000 UTC FinishedAt: 2026-09-06 21:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ffh5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"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":["cfg802154_netdev_notifier_call","nl802154_new_interface","ieee802154_add_iface"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IEEE802154","MAC802154","IEEE802154_NL802154_EXPERIMENTAL","IEEE802154_FAKELB","IEEE802154_HWSIM"],"series_id":"d7d2c900-d761-454a-960c-1664965121df","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 17:59:00 +0000 UTC FinishedAt: 2026-09-06 21:01:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d9cf096f-0851-4523-93d4-5d247f37e78b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7af480ac-be04-49a5-adb9-36f21b18e49e,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-workflow2ffh5/series-workflow2ffh5-build-action-3015607893/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-workflow2ffh5/series-workflow2ffh5-build-action-2626603058/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-workflow2ffh5/series-workflow2ffh5-convert-artifact-2016656227/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,}