Name: series-workflow4ncz9 Phase: Succeeded StartedAt: 2026-08-15 17:36:25 +0000 UTC FinishedAt: 2026-08-15 22:02:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[0] Phase: Succeeded StartedAt: 2026-08-15 17:36:25 +0000 UTC FinishedAt: 2026-08-15 18:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[0].run-triage Phase: Succeeded StartedAt: 2026-08-15 17:36:25 +0000 UTC FinishedAt: 2026-08-15 18:21:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "BRIDGE", "BRIDGE_IGMP_SNOOPING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "BRIDGE", "BRIDGE_IGMP_SNOOPING" ], "series_id": "667e793f-b680-4356-b189-03dfa5806fe0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_multicast_join_snoopers", "br_multicast_leave_snoopers", "br_multicast_toggle" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X2xlYXZlX3Nub29wZXJzJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaW5fZGV2X2dldGAgdG8gdXNlIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2Agd2hlbiBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gYW4gYGluX2RldmljZWAgdW5kZXIgUkNVLiBUaGlzIGlzIGEgY2xhc3NpYyBmaXggZm9yIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgcmVmY291bnQgYnVnLCBwcmV2ZW50aW5nIHRoZSBhY3F1aXNpdGlvbiBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gU2luY2UgdGhpcyBwYXRjaCBkZWFscyBlbnRpcmVseSB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByZWZjb3VudCBidWcgaW4gYGluX2Rldl9nZXRgIGJ5IHVzaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUgbmV0d29ya2luZyBpbmxpbmUgZnVuY3Rpb24gdXNlZCBieSBicmlkZ2UgbXVsdGljYXN0IHNub29waW5nLCBJUHY0IGRldmluZXQgbmV0bGluayBjYWxsYmFja3MsIGFuZCBzZXZlcmFsIGRyaXZlcnMuIEl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNmRmMDBmMDQwMmFiZjc1ZmQ0NjlkNmU2ZjEzNTA2MWYyNDJkM2RiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTg6MTk6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFxuaW5kZXggNjAzMmVlYTI1MzlhNi4uYTE0NDZkYTY0MjAwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFxuQEAgLTI0NSw4ICYjNDM7MjQ1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG4tXHRpZiAoaW5fZGV2KVxuLVx0XHRyZWZjb3VudF9pbmMoXHUwMDI2aW5fZGV2LVx1MDAzZXJlZmNudCk7XG4mIzQzO1x0aWYgKGluX2RldiBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZpbl9kZXYtXHUwMDNlcmVmY250KSlcbiYjNDM7XHRcdGluX2RldiA9IE5VTEw7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBpbl9kZXY7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX211bHRpY2FzdF9qb2luX3Nub29wZXJzJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGJ1ZyBpbiBgaW5fZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AgaW5zdGVhZCBvZiBgcmVmY291bnRfaW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBuZXR3b3JraW5nIGlubGluZSBmdW5jdGlvbiB1c2VkIGJ5IGJyaWRnZSBtdWx0aWNhc3Qgc25vb3BpbmcsIElQdjQgZGV2aW5ldCBuZXRsaW5rIGNhbGxiYWNrcywgYW5kIHNldmVyYWwgZHJpdmVycy4gSXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE2ZGYwMGYwNDAyYWJmNzVmZDQ2OWQ2ZTZmMTM1MDYxZjI0MmQzZGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAxODoxOTozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKaW5kZXggNjAzMmVlYTI1MzlhNi4uYTE0NDZkYTY0MjAwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKQEAgLTI0NSw4ICYjNDM7MjQ1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwotCWlmIChpbl9kZXYpCi0JCXJlZmNvdW50X2luYygmYW1wO2luX2Rldi0mZ3Q7cmVmY250KTsKJiM0MzsJaWYgKGluX2RldiAmYW1wOyZhbXA7ICFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtpbl9kZXYtJmd0O3JlZmNudCkpCiYjNDM7CQlpbl9kZXYgPSBOVUxMOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBpbl9kZXY7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgUmVmY291bnQgSXNzdWUgaW4gdGhlIEtlcm5lbCYjMzk7cyBOZXR3b3JrIFN0YWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgbWFraW5nIGEgc2VlbWluZ2x5IHNtYWxsLCBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBjaGFuZ2UgdG8gYGluX2Rldl9nZXRgIGluIGBpbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaGAuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgcmVwbGFjaW5nIGEgc2ltcGxlIGByZWZjb3VudF9pbmNgIHdpdGggYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhZGRyZXNzaW5nIGEgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZywgdmVyeSBsaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSBvciBhIHNpbWlsYXIgbWVtb3J5IHNhZmV0eSBpc3N1ZSB3aXRoaW4gdGhlIGBpbl9kZXZpY2VgIHN0cnVjdHVyZS4gVGhpcyBgaW5fZGV2X2dldGAgZnVuY3Rpb24gaXMgaW5saW5lLCB3aGljaCBtZWFucyBpdCYjMzk7cyBzcHJpbmtsZWQgdGhyb3VnaG91dCB0aGUga2VybmVsIHNvdXJjZSBjb2RlLCBzbyBhIGJ1ZyBoZXJlIGNvdWxkIGJlIHF1aXRlIHdpZGVzcHJlYWQgYW5kIGRpZmZpY3VsdCB0byB0cmFjayBkb3duIHdpdGhvdXQgcHJvcGVyIHNjcnV0aW55LgoKVGhlIHByZXZpb3VzIGNvZGUgc2ltcGx5IGluY3JlbWVudGVkIHRoZSByZWZlcmVuY2UgY291bnQgKGBpbl9kZXYtJmd0O3JlZmNudGApIG9uIHRoZSBgaW5fZGV2aWNlYCBvYmplY3QuIFRoZSBuZXcgY29kZSwgaG93ZXZlciwgY2hlY2tzIGlmIHRoZSByZWZlcmVuY2UgY291bnQgaXMgemVybyBiZWZvcmUgYXR0ZW1wdGluZyB0aGUgaW5jcmVtZW50LiBJZiBpdCAqaXMqIHplcm8sIGFuZCB0aGUgaW5jcmVtZW50IHdvdWxkIGZhaWwsIGBpbl9kZXZgIGlzIHRoZW4gc2V0IHRvIE5VTEwsIHdoaWNoIG1lYW5zIHRoZSBjYWxsZXIgd29uJiMzOTt0IHVzZSBhIGRhbmdsaW5nIHBvaW50ZXIuIFRoaXMgaXMgYSBjbGFzc2ljIHBhdHRlcm4gdG8gcHJldmVudCBhIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBgaW5fZGV2aWNlYCBzdHJ1Y3QgaXMgYWxyZWFkeSBkZWFsbG9jYXRlZC4KCk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgdGhpcyBmdW5jdGlvbi4gR2l2ZW4gaXQmIzM5O3MgaW5saW5lLCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xpbmcsIGxpa2UgYGdyZXBgIG9yIHBlcmhhcHMgYW4gSURFIHdpdGggY29kZSBpbmRleGluZywgdG8gZmluZCBhbGwgaW5zdGFuY2VzIHdoZXJlIGBpbl9kZXZfZ2V0YCBpcyB1c2VkLiBVbmRlcnN0YW5kaW5nICpob3cqIGFuZCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpbGwgYmUgY3J1Y2lhbCB0byBhc3Nlc3NpbmcgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIHZ1bG5lcmFiaWxpdHkgYW5kIGVuc3VyaW5nIHRoZSBwYXRjaCBpcyBlZmZlY3RpdmUgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMuIEl0JiMzOTtsbCBhbHNvIGhlbHAgcGlucG9pbnQgdGhlIGV4YWN0IHNjZW5hcmlvIHRoYXQgdHJpZ2dlcmVkIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gRnJvbSBoZXJlLCBJIHdpbGwgYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbl9kZXZfZ2V0XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jPTMyMzU9c3RhdGljIGludCBwaWNrX2xvY2FsX2lwYWRkcnMoc3RydWN0IGM0aXdfZGV2ICpkZXYsIHN0cnVjdCBpd19jbV9pZCAqY21faWQpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0Mi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jOjMyNDM6XHRpbmQgPSBpbl9kZXZfZ2V0KGRldi1cdTAwM2VyZGV2LmxsZGkucG9ydHNbMF0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0NC1cdGlmICghaW5kKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jPTE3NDQ9c3RhdGljIGludCBpcmRtYV9hZGRfbXFoXzQoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmMtMTc2NC1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jOjE3NjU6XHRcdGlkZXYgPSBpbl9kZXZfZ2V0KGlwX2Rldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNzY2LVx0XHRpZiAoIWlkZXYpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MzIwPXN0YXRpYyBib29sIGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMzMwLVx0Y2FzZSBBRl9JTkVUOlxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MzMxOlx0XHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0zMzItXHRcdGlmICghaW5fZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzIzMD1uZXR4ZW5fY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzIzOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MzIzOTpcdGluZGV2ID0gaW5fZGV2X2dldChkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMjQwLVx0aWYgKCFpbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmM9NDA1ND1xbGNuaWNfY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwNjA6XHRpbmRldiA9IGluX2Rldl9nZXQoZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDYxLVx0aWYgKCFpbmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaD0yMzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICpfX2luX2Rldl9nZXRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQxLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg6MjQyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluX2RldmljZSAqaW5fZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQzLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNTY9c3RhdGljIHZvaWQgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1Ny17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxNTg6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbl9kZXZfZ2V0KGJyLVx1MDAzZWRldik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxNTktXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTg3PXN0YXRpYyB2b2lkIGJyX2lwNF9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTg4LXtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE4OTpcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoYnItXHUwMDNlZGV2KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE5MC1cbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjM3ND1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yNDA1LVx0XHRpZiAoZGV2KVxubmV0L2lwdjQvZGV2aW5ldC5jOjI0MDY6XHRcdFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDctXHRcdGlmICghaW5fZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYGluX2Rldl9nZXRgIEZ1bmN0aW9uIFVzYWdlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW5fZGV2X2dldGAgYW5kIGl0cyB1c2FnZSBhY3Jvc3MgdGhlIGtlcm5lbC4gSSBzZWUgaXQmIzM5O3MgdXNlZCBpbiBgbmV0L2lwdjQvZGV2aW5ldC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UsIHBsdXMgYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIOKAkyBpbnRlcmVzdGluZywgYW5kIGEgZmV3IGRyaXZlcnMgYXMgd2VsbC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhbiBpbmxpbmUgZnVuY3Rpb24gaXMgaW1tZWRpYXRlbHkgbWFraW5nIG1lIHRoaW5rIGFib3V0IHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZSBJIG1pZ2h0IHdhbnQgdG8gbWFrZS4gQW55IG1vZGlmaWNhdGlvbiB0byBgaW5fZGV2X2dldGAgd291bGQgYWZmZWN0ICpldmVyeSogcGxhY2UgaXQmIzM5O3MgY2FsbGVkLiBIbW0sIHJpZ2h0LCBpdCYjMzk7cyBhIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIGJlIGNhcmVmdWwuIExldCBtZSBzZWUuLi4gSSBzaG91bGQgcHJvYmFibHkgaW52ZXN0aWdhdGUgaG93IHdpZGVseSBpdCYjMzk7cyB1c2VkIGJ5IGZpbmRpbmcgKmFsbCogdGhlIGNhbGxlcnMuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBibGFzdCByYWRpdXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbl9kZXZfZ2V0XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jPTMyMzU9c3RhdGljIGludCBwaWNrX2xvY2FsX2lwYWRkcnMoc3RydWN0IGM0aXdfZGV2ICpkZXYsIHN0cnVjdCBpd19jbV9pZCAqY21faWQpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0Mi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jOjMyNDM6XHRpbmQgPSBpbl9kZXZfZ2V0KGRldi1cdTAwM2VyZGV2LmxsZGkucG9ydHNbMF0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0NC1cdGlmICghaW5kKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jPTE3NDQ9c3RhdGljIGludCBpcmRtYV9hZGRfbXFoXzQoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmMtMTc2NC1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jOjE3NjU6XHRcdGlkZXYgPSBpbl9kZXZfZ2V0KGlwX2Rldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNzY2LVx0XHRpZiAoIWlkZXYpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MzIwPXN0YXRpYyBib29sIGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMzMwLVx0Y2FzZSBBRl9JTkVUOlxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MzMxOlx0XHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0zMzItXHRcdGlmICghaW5fZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzIzMD1uZXR4ZW5fY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzIzOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MzIzOTpcdGluZGV2ID0gaW5fZGV2X2dldChkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMjQwLVx0aWYgKCFpbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmM9NDA1ND1xbGNuaWNfY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwNjA6XHRpbmRldiA9IGluX2Rldl9nZXQoZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDYxLVx0aWYgKCFpbmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaD0yMzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICpfX2luX2Rldl9nZXRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQxLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg6MjQyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluX2RldmljZSAqaW5fZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQzLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNTY9c3RhdGljIHZvaWQgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1Ny17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxNTg6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbl9kZXZfZ2V0KGJyLVx1MDAzZWRldik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxNTktXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTg3PXN0YXRpYyB2b2lkIGJyX2lwNF9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTg4LXtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE4OTpcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoYnItXHUwMDNlZGV2KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE5MC1cbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjM3ND1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yNDA1LVx0XHRpZiAoZGV2KVxubmV0L2lwdjQvZGV2aW5ldC5jOjI0MDY6XHRcdFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDctXHRcdGlmICghaW5fZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIGBpbl9kZXZfZ2V0YCBVc2FnZSoqCgpBbHJpZ2h0LCBzbyBgaW5fZGV2X2dldGAgaXMgZGVmaW5pdGVseSBhIGtleSBmdW5jdGlvbiwgSSBjYW4gc2VlIHRoYXQuIEJ1dCBJJiMzOTttIGdldHRpbmcgYSBjbGVhcmVyIHBpY3R1cmUgbm93OyBpdCYjMzk7cyBwZXJoYXBzIG5vdCBxdWl0ZSBhcyB1YmlxdWl0b3VzIGFzIEkgaW5pdGlhbGx5IHN1c3BlY3RlZC4gSW50ZXJlc3RpbmcuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBIb2xkIG9uLCBJIHRob3VnaHQgdGhlcmUgbWlnaHQgYmUgb3RoZXIgbG9jYXRpb25zIGNhbGxpbmcgaXQgd2l0aGluIHRoZSBzYW1lIGZpbGUsIGJ1dCBteSBpbml0aWFsIGdyZXAgb25seSB0dXJuZWQgdXAgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAuIFRoYXQgZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gT2theSwgdGltZSB0byBjaGVjayBgbmV0L2lwdjQvZGV2aW5ldC5jYCBkaXJlY3RseSB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSYjMzk7dmUgZ290IHRoZSBmdWxsIHNjb3BlIG9mIGBpbl9kZXZfZ2V0YCYjMzk7cyBjYWxsZXJzIGluIHRoYXQgY29udGV4dC4gTmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbl9kZXZfZ2V0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZGV2aW5ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2RldmluZXQuYz0yMzc0PXN0YXRpYyBpbnQgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mKHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDUtXHRcdGlmIChkZXYpXG5uZXQvaXB2NC9kZXZpbmV0LmM6MjQwNjpcdFx0XHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2NC9kZXZpbmV0LmMtMjQwNy1cdFx0aWYgKCFpbl9kZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcyMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGluX2Rldl9nZXRgIFVzYWdlKioKCkhtbSwgdGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBNeSBpbnR1aXRpb24sIGJhc2VkIG9uIHBhc3Qgd29yayBpbiBuZXR3b3JraW5nLCB3YXMgdGhhdCBgaW5fZGV2X2dldGAgd2FzIGEgYml0IG1vcmUgdWJpcXVpdG91cyB0aGFuIHdoYXQgSSYjMzk7bSBzZWVpbmcuIEl0IHN1Z2dlc3RzIHRoZXJlJiMzOTtzIGxlc3MgcmVsaWFuY2Ugb24gaXQgdGhhbiBJJiMzOTtkIGluaXRpYWxseSBhc3N1bWVkLiBUaGlzIHdhcnJhbnRzIGRlZXBlciBpbnZlc3RpZ2F0aW9uLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJIG5lZWQgdG8gbG9vayBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGRlbHZlIGludG8gdGhlIGNvcmUgSUdNUCBpbXBsZW1lbnRhdGlvbi4gYG5ldC9pcHY0L2lnbXAuY2AgaXMgYSBwcmltZSBjYW5kaWRhdGUsIGFzIG11bHRpY2FzdCBtZW1iZXJzaGlwIG1hbmFnZW1lbnQgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHRoaXMga2luZCBvZiBmdW5jdGlvbiBiZWluZyBjYWxsZWQgd2l0aCBzb21lIHJlZ3VsYXJpdHkuIEJ1dCBJIHNob3VsZCBleHBhbmQgdGhlIHNlYXJjaCB0byBvdGhlciBhcmVhcyB0aGF0IGludGVyYWN0IHdpdGggaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gb3IgSVAgYWRkcmVzcyBtYW5hZ2VtZW50LCBqdXN0IHRvIGJlIHRob3JvdWdoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5fZGV2X2dldFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9kZXZpbmV0LmM9MjM3ND1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yNDA1LVx0XHRpZiAoZGV2KVxubmV0L2lwdjQvZGV2aW5ldC5jOjI0MDY6XHRcdFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDctXHRcdGlmICghaW5fZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTAzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBpbl9kZXZfZ2V0YCBVc2FnZSoqCgpBbHJpZ2h0LCBzbyBgaW5fZGV2X2dldGAgYXBwZWFycyB0byBiZSBwcmV0dHkgbmFycm93bHkgc2NvcGVkLiBFeGNlbGxlbnQhIExlc3MgY29kZSB0byBzY3J1dGluaXplIGFuZCBsZXNzIHBvdGVudGlhbCBmb3Igd2lkZXNwcmVhZCBpbXBhY3QgaWYgc29tZXRoaW5nJiMzOTtzIGFtaXNzLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgY29uZmlybWVkIOKAkyBpdCYjMzk7cyBub3QgYSBkZWVwbHkgZW1iZWRkZWQgZnVuY3Rpb24gYWNyb3NzIHRoZSBlbnRpcmUgbmV0d29ya2luZyBzdGFjaywgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIHRhcmdldGVkIGRlYnVnZ2luZy4KCk5vdywgaW5zdGVhZCBvZiBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIHRoZSBkaXJlY3QgY2FsbHMsIEkgc2hvdWxkIHJlYWxseSBzaGlmdCBmb2N1cyBhbmQgZGlnIGludG8gaG93IHRob3NlIHNwZWNpZmljIGNhbGxpbmcgcG9pbnRzIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBjcml0aWNhbCBSQ1Ugc3luY2hyb25pemF0aW9uLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGVpdGhlciBgX19pbl9kZXZfZ2V0X3JjdWAgb3IgYF9faW5fZGV2X2dldF9ydG5sYC4gVW5kZXJzdGFuZGluZyB3aGljaCBvZiB0aGVzZSB0d28gaXMgdGhlIGRvbWluYW50IHVzYWdlIHdpbGwgZGV0ZXJtaW5lIGhvdyBkZWVwbHkgSSBuZWVkIHRvIGdvIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSeKAmWxsIHN0YXJ0IHdpdGggd2hpY2hldmVyIGlzIGVhc2llciB0byBuYXZpZ2F0ZSBnaXZlbiB0aGlzIGxpbWl0ZWQgaW5mb3JtYXRpb24uIFRoYXQgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2Ygd2hlcmUgdGhlIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgbWlnaHQgYmUgbHVya2luZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faW5fZGV2X2dldF9yY3VcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvYXJwLmM9MjIzPXN0YXRpYyBpbnQgYXJwX2NvbnN0cnVjdG9yKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKVxuLS1cbm5ldC9pcHY0L2FycC5jLTIzNS1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY0L2FycC5jOjIzNjpcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2FycC5jLTIzNy1cdGlmICghaW5fZGV2KSB7XG4tLVxubmV0L2lwdjQvYXJwLmM9MzMzPXN0YXRpYyB2b2lkIGFycF9zb2xpY2l0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2FycC5jLTM0My1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY0L2FycC5jOjM0NDpcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2FycC5jLTM0NS1cdGlmICghaW5fZGV2KSB7XG4tLVxubmV0L2lwdjQvYXJwLmM9NDc0PXN0YXRpYyBpbmxpbmUgaW50IGFycF9md2RfcHJveHkoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxuLS1cbm5ldC9pcHY0L2FycC5jLTQ5Mi1cbm5ldC9pcHY0L2FycC5jOjQ5MzpcdG91dF9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHJ0LVx1MDAzZWRzdC5kZXYpO1xubmV0L2lwdjQvYXJwLmMtNDk0LVx0aWYgKG91dF9kZXYpXG4tLVxubmV0L2lwdjQvYXJwLmM9NzAyPXN0YXRpYyBpbnQgYXJwX3Byb2Nlc3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvYXJwLmMtNzA0LVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cdTAwM2VkZXY7XG5uZXQvaXB2NC9hcnAuYzo3MDU6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG5uZXQvaXB2NC9hcnAuYy03MDYtXHRzdHJ1Y3QgYXJwaGRyICphcnA7XG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jPTEzNTk9X19iZTMyIGluZXRfc2VsZWN0X2FkZHIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyIGRzdCwgaW50IHNjb3BlKVxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0xMzY5LVx0bmV0ID0gZGV2X25ldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2RldmluZXQuYzoxMzcwOlx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTEzNzEtXHRpZiAoIWluX2Rldilcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTQwMS1cdCAgICAoZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBtYXN0ZXJfaWR4KSkgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC9kZXZpbmV0LmM6MTQwMjpcdCAgICAoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpKSkge1xubmV0L2lwdjQvZGV2aW5ldC5jLTE0MDMtXHRcdGFkZHIgPSBpbl9kZXZfc2VsZWN0X2FkZHIoaW5fZGV2LCBzY29wZSk7XG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTE0MTUtXG5uZXQvaXB2NC9kZXZpbmV0LmM6MTQxNjpcdFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTE0MTctXHRcdGlmICghaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2RldmluZXQuYz0xNDgyPV9fYmUzMiBpbmV0X2NvbmZpcm1fYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldixcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTQ5Mi1cdGZvcl9lYWNoX25ldGRldl9yY3UobmV0LCBkZXYpIHtcbm5ldC9pcHY0L2RldmluZXQuYzoxNDkzOlx0XHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG5uZXQvaXB2NC9kZXZpbmV0LmMtMTQ5NC1cdFx0aWYgKGluX2Rldikge1xuLS1cbm5ldC9pcHY0L2RldmluZXQuYz0xOTI4PXN0YXRpYyBpbnQgaW5ldF9kdW1wX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0xOTYxLVx0XHRcdH1cbm5ldC9pcHY0L2RldmluZXQuYzoxOTYyOlx0XHRcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2RldmluZXQuYy0xOTYzLVx0XHRcdGlmICghaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0xOTczLVx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAodGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2lwdjQvZGV2aW5ldC5jOjE5NzQ6XHRcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2RldmluZXQuYy0xOTc1LVx0XHRpZiAoIWluX2Rldilcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjQzNj1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9kdW1wX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjQ2NS1cdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2lwdjQvZGV2aW5ldC5jOjI0NjY6XHRcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2RldmluZXQuYy0yNDY3LVx0XHRpZiAoIWluX2Rldilcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjUwNz1zdGF0aWMgdm9pZCBkZXZpbmV0X2NvcHlfZGZsdF9jb25mKHN0cnVjdCBuZXQgKm5ldCwgaW50IGkpXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTI1MTQtXG5uZXQvaXB2NC9kZXZpbmV0LmM6MjUxNTpcdFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTI1MTYtXHRcdGlmIChpbl9kZXYgXHUwMDI2XHUwMDI2ICF0ZXN0X2JpdChpLCBpbl9kZXYtXHUwMDNlY25mLnN0YXRlKSlcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0yNzM9X19iZTMyIGZpYl9jb21wdXRlX3NwZWNfZHN0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMjg2LVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6Mjg3Olx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMjg4LVxuLS1cbm5ldC9pcHY0L2ljbXAuYz02NTc9c3RhdGljIF9fYmUzMiBpY21wX2V4dF9paW9fYWRkcjRfZmluZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2ljbXAuYy02NjEtXG5uZXQvaXB2NC9pY21wLmM6NjYyOlx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvaWNtcC5jLTY2My1cdGlmICghaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2ljbXAuYz0xMjkxPWJvb2wgaWNtcF9idWlsZF9wcm9iZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWNtcGhkciAqaWNtcGhkcilcbi0tXG5uZXQvaXB2NC9pY21wLmMtMTM4MS1cbm5ldC9pcHY0L2ljbXAuYzoxMzgyOlx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvaWNtcC5jLTEzODMtXHRpZiAoaW5fZGV2IFx1MDAyNlx1MDAyNiByY3VfYWNjZXNzX3BvaW50ZXIoaW5fZGV2LVx1MDAzZWlmYV9saXN0KSlcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MzYxPXN0YXRpYyBfX2JlMzIgaWdtcHYzX2dldF9zcmNhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTM2My17XG5uZXQvaXB2NC9pZ21wLmM6MzY0Olx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvaWdtcC5jLTM2NS1cdGNvbnN0IHN0cnVjdCBpbl9pZmFkZHIgKmlmYTtcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTEwMz1pbnQgaWdtcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTExNy1cbm5ldC9pcHY0L2lnbXAuYzoxMTE4Olx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvaWdtcC5jLTExMTktXHRpZiAoIWluX2Rldilcbi0tXG5uZXQvaXB2NC9pZ21wLmM9Mjg5ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcF9tY19saXN0ICppZ21wX21jX2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjkwMy1cbm5ldC9pcHY0L2lnbXAuYzoyOTA0Olx0XHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2NC9pZ21wLmMtMjkwNS1cdFx0aWYgKCFpbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jPTI5MTY9c3RhdGljIHN0cnVjdCBpcF9tY19saXN0ICppZ21wX21jX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pXG4tLVxubmV0L2lwdjQvaWdtcC5jLTI5MjYtXHRcdH1cbm5ldC9pcHY0L2lnbXAuYzoyOTI3Olx0XHRzdGF0ZS1cdTAwM2Vpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2NC9pZ21wLmMtMjkyOC1cdFx0aWYgKCFzdGF0ZS1cdTAwM2Vpbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jPTMwMjc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfc2ZfbGlzdCAqaWdtcF9tY2ZfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0zMDM3LVx0XHRzdHJ1Y3QgaW5fZGV2aWNlICppZGV2O1xubmV0L2lwdjQvaWdtcC5jOjMwMzg6XHRcdGlkZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2NC9pZ21wLmMtMzAzOS1cdFx0aWYgKHVubGlrZWx5KCFpZGV2KSlcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MzA1Nj1zdGF0aWMgc3RydWN0IGlwX3NmX2xpc3QgKmlnbXBfbWNmX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0zMDY5LVx0XHRcdH1cbm5ldC9pcHY0L2lnbXAuYzozMDcwOlx0XHRcdHN0YXRlLVx1MDAzZWlkZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2NC9pZ21wLmMtMzA3MS1cdFx0XHRpZiAoIXN0YXRlLVx1MDAzZWlkZXYpXG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYz0yNjk9aXBfcmN2X29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTI5NS1cdGlmICh1bmxpa2VseShvcHQtXHUwMDNlc3JyKSkge1xubmV0L2lwdjQvaXBfaW5wdXQuYzoyOTY6XHRcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjk3LVxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmM9MzYxPXN0YXRpYyBpbnQgaXBfcmN2X2ZpbmlzaF9jb3JlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTQxMS1cdH0gZWxzZSB7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjQxMjpcdFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvaXBfaW5wdXQuYy00MTMtXG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYy00NDEtXHRcdCAgIHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKSB7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjQ0MjpcdFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvaXBfaW5wdXQuYy00NDMtXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3Rwcm94eV9pcHY0LmM9NTA9X19iZTMyIG5mX3Rwcm94eV9sYWRkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHVzZXJfbGFkZHIsIF9fYmUzMiBkYWRkcilcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfdHByb3h5X2lwdjQuYy01OS1cdGxhZGRyID0gMDtcbm5ldC9pcHY0L25ldGZpbHRlci9uZl90cHJveHlfaXB2NC5jOjYwOlx0aW5kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3Rwcm94eV9pcHY0LmMtNjEtXHRpZiAoIWluZGV2KVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9NzczPXN0YXRpYyB2b2lkIF9faXBfZG9fcmVkaXJlY3Qoc3RydWN0IHJ0YWJsZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aTQgKmZsNCxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTc5Ny1cbm5ldC9pcHY0L3JvdXRlLmM6Nzk4Olx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvcm91dGUuYy03OTktXHRpZiAoIWluX2Rldilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTkwMj12b2lkIGlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTkxMS1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY0L3JvdXRlLmM6OTEyOlx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShydC1cdTAwM2Vkc3QuZGV2KTtcbm5ldC9pcHY0L3JvdXRlLmMtOTEzLVx0aWYgKCFpbl9kZXYgfHwgIUlOX0RFVl9UWF9SRURJUkVDVFMoaW5fZGV2KSkge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9OTY1PXN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTk4Mi1cbm5ldC9pcHY0L3JvdXRlLmM6OTgzOlx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvcm91dGUuYy05ODQtXG4tLVxubmV0L2lwdjQvcm91dGUuYz0xNzY2PWlwX3JvdXRlX2lucHV0X21jKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTc2OC17XG5uZXQvaXB2NC9yb3V0ZS5jOjE3Njk6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG5uZXQvaXB2NC9yb3V0ZS5jLTE3NzAtXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBSVENGX01VTFRJQ0FTVDtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTE4MzY9X19ta3JvdXRlX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xODUwLVx0LyogZ2V0IGEgd29ya2luZyByZWZlcmVuY2UgdG8gdGhlIG91dHB1dCBkZXZpY2UgKi9cbm5ldC9pcHY0L3JvdXRlLmM6MTg1MTpcdG91dF9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG5uZXQvaXB2NC9yb3V0ZS5jLTE4NTItXHRpZiAoIW91dF9kZXYpIHtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTIyMTU9aXBfcm91dGVfdXNlX2hpbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yMjE5LVx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG5uZXQvaXB2NC9yb3V0ZS5jOjIyMjA6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG5uZXQvaXB2NC9yb3V0ZS5jLTIyMjEtXHRzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoaGludCk7XG4tLVxubmV0L2lwdjQvcm91dGUuYz0yMjg3PWlwX3JvdXRlX2lucHV0X3Nsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yMjkxLVx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG5uZXQvaXB2NC9yb3V0ZS5jOjIyOTI6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG5uZXQvaXB2NC9yb3V0ZS5jLTIyOTMtXHRzdHJ1Y3QgZmxvd19rZXlzICpmbGtleXMgPSBOVUxMLCBfZmxrZXlzO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MjUxOD1pcF9yb3V0ZV9pbnB1dF9yY3Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yNTM0LVx0XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbm5ldC9pcHY0L3JvdXRlLmM6MjUzNTpcdFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvcm91dGUuYy0yNTM2LVx0XHRpbnQgb3VyID0gMDtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI1NDctXG5uZXQvaXB2NC9yb3V0ZS5jOjI1NDg6XHRcdFx0bDNfaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY0L3JvdXRlLmMtMjU0OS1cdFx0XHRpZiAobDNfaW5fZGV2KVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MjU4Nj1zdGF0aWMgc3RydWN0IHJ0YWJsZSAqX19ta3JvdXRlX291dHB1dChjb25zdCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjU5Ny1cbm5ldC9pcHY0L3JvdXRlLmM6MjU5ODpcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2X291dCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTI1OTktXHRpZiAoIWluX2Rldilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI3MzY9c3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2tleV9oYXNoX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZsNCxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI4MDQtXHRcdC8qIFJBQ0U6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBpbmV0X3NlbGVjdF9hZGRyIGluc3RlYWQuICovXG5uZXQvaXB2NC9yb3V0ZS5jOjI4MDU6XHRcdGlmICghKGRldl9vdXQtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgfHwgIV9faW5fZGV2X2dldF9yY3UoZGV2X291dCkpIHtcbm5ldC9pcHY0L3JvdXRlLmMtMjgwNi1cdFx0XHRydGggPSBFUlJfUFRSKC1FTkVUVU5SRUFDSCk7XG4tLVxubmV0L2lwdjQvdWRwLmM9Mjc2MD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB1ZHBfdjRfZWFybHlfZGVtdXgoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNzc5LVx0aWYgKHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKSB7XG5uZXQvaXB2NC91ZHAuYzoyNzgwOlx0XHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjQvdWRwLmMtMjc4MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQmIzM5O3MgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGlzc3VlIHdpdGhpbiB0aGUgYGluX2Rldl9nZXRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHN3YXBwaW5nIG91dCBhIHNpbXBsZSBgcmVmY291bnRfaW5jYCBmb3IgYHJlZmNvdW50X2luY19ub3RfemVyb2AuICBUaGlzIGlzIGEgZGVmaW5pdGUgY2hhbmdlIGluIGhvdyB0aGUgZnVuY3Rpb24gYmVoYXZlcywgc2luY2UgaXQgbm93IHJldHVybnMgYE5VTExgIGlmIHRoZSByZWZlcmVuY2UgY291bnQgaXMgemVybyAqYmVmb3JlKiBpbmNyZW1lbnRpbmcgaXQsIHJhdGhlciB0aGFuIGluY3JlbWVudGluZyBhbmQgcG90ZW50aWFsbHkgY2F1c2luZyBhbiBpc3N1ZSBkb3duIHRoZSBsaW5lLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYSBzbWFsbCBmdW5jdGlvbmFsIGNoYW5nZSwgYnV0IGxldCBtZSBjb25zaWRlciBmdXp6aW5nLiAgVGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYSBhcmUgaW4gbXkgbWluZDogIGlzIGl0IGEgZG9jdW1lbnRhdGlvbiBjaGFuZ2U/IE5vLiAgUHVyZWx5IGRlY29yYXRpdmU/IE5vcGUuIE51bWVyaWMgY29uc3RhbnRzPyBOby4gIFVucmVhY2hhYmxlIGNvZGUgcGF0aHM/ICBEZWZpbml0ZWx5IG5vdCwgaXQmIzM5O3MgY29yZSBuZXR3b3JraW5nISBWZW5kb3Itc3BlY2lmaWMgZHJpdmVycyByZXF1aXJpbmcgc3BlY2lhbCBoYXJkd2FyZT8gIE5vcGUsIHRoaXMgaXMgZ2VuZXJhbCBuZXR3b3JrIHN0YWNrIGNvZGUuICBUZWFyZG93biBjYWxsYmFja3Mgb25seSBydW4gb24gUENJIGhvdC11bnBsdWc/IE5vIHdheS4KClRoaXMgcGF0Y2ggKmRvZXMqIGFsdGVyIGV4ZWN1dGlvbiBmbG93IGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgcmV0dXJuIHZhbHVlIGJhc2VkIG9uIHJlZmNvdW50IGNvbmRpdGlvbnMuICBJdCAqaXMqIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHNpbmNlIGl0JiMzOTtzIGNvcmUgbmV0d29ya2luZyBjb2RlLiBTbywgdGhlIHBhdGNoIHNlZW1zIGxpa2UgaXQmIzM5O3MgV29ydGhGdXp6aW5nPXRydWUuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgSSB0YXJnZXQgZm9yIGZ1enppbmcgYmFzZWQgb24gdGhpcyBjaGFuZ2U/IFRoZSBjb2RlIGl0c2VsZiBpcyBpbmxpbmVkLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHRoYXQgY2FsbCBgaW5fZGV2X2dldGAuIExldCYjMzk7cyB0cmFjZSB0aGUgY2FsbGVycy4uLiBPa2F5LCBsb29raW5nIGF0IHRoZSBjYWxscyBJJiMzOTttIHNlZWluZzoKLSBgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzYCAoc3RhdGljKSAtJmd0OyBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgIC0mZ3Q7IGBicl9tdWx0aWNhc3RfdG9nZ2xlYCAtJmd0OyBgYnJfbXVsdGljYXN0X3NldF9yb3V0ZXJgIC0mZ3Q7IGBicl9tdWx0aWNhc3Rfcm91dGVyX3NldGAgLSZndDsgYGJyX2Rldl9uZXdsaW5rYCBvciBgYnJfY2hhbmdlbGlua2AKLSBgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AgKHN0YXRpYykgLSZndDsgYGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AgLSZndDsgYGJyX211bHRpY2FzdF90b2dnbGVgIC0mZ3Q7IC4uLgotIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIChzdGF0aWMpIC0mZ3Q7IGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGlzIGNhbGxlZCBieSBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYD8gTm8sIGl0JiMzOTtzIGEgbmV0bGluayBjYWxsYmFjay4KClRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvaXB2NC9kZXZpbmV0LmNgIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGZ1enogdGFyZ2V0cyBiYXNlZCBvbiB0aG9zZSBjYWxsIGNoYWlucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9uZXRjb25mX2dldF9kZXZjb25mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZGV2aW5ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2RldmluZXQuYz0yMzM1PXN0YXRpYyBpbnQgaW5ldF9uZXRjb25mX3ZhbGlkX2dldF9yZXEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjM3My1cbm5ldC9pcHY0L2RldmluZXQuYzoyMzc0OnN0YXRpYyBpbnQgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mKHN0cnVjdCBza19idWZmICppbl9za2IsXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjM3NS1cdFx0XHRcdCAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9Mjk1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgZGV2aW5ldF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yOTYwLVx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX0dFVE5FVENPTkYsXG5uZXQvaXB2NC9kZXZpbmV0LmM6Mjk2MTpcdCAuZG9pdCA9IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZiwgLmR1bXBpdCA9IGluZXRfbmV0Y29uZl9kdW1wX2RldmNvbmYsXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjk2Mi1cdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgTmV0bGluayBDYWxsYmFjayBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgLiBUaGF0JiMzOTtzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGZvciBgUlRNX0dFVE5FVENPTkZgLCB3aGljaCBtYWtlcyBpdCBhIHBvdGVudGlhbGx5IGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtQZXJmZWN0LCBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuJiMzNDsKCkhhbmcgb24gYSBzZWNvbmTigKYgaXQmIzM5O3Mgc3RhdGljISBUaGUgc3R5bGUgZ3VpZGUgKnNwZWNpZmljYWxseSogc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cy4gVGhlIGFyZ3VtZW50IGlzIHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGdldCBpbmxpbmVkLCBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBUaGlzIG1ha2VzIHRoZW0gbGVzcyBhY2Nlc3NpYmxlIGZvciB0aGluZ3MgbGlrZSBkZWJ1Z2dpbmcgYW5kIHRyYWNpbmcuIEJ1dCB3YWl0Li4uIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgZGV2aW5ldF9ydG5sX21zZ19oYW5kbGVyc2AuIFRoYXQgbWVhbnMgaXQgKndvbiYjMzk7dCogYmUgaW5saW5lZCBhbmQgKmRvZXMqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gU28sIEkgbmVlZCB0byByZXRoaW5rIHRoaXMsIGFsdGhvdWdoIGl0JiMzOTtzICp0ZWNobmljYWxseSogY29tcGxpYW50LCB0aGUgc3Bpcml0IG9mIHRoZSBydWxlIGlzIHRvIGF2b2lkIHN0YXRpYy4KCkFscmlnaHQsIHNvIHRoZSBwcm9tcHQgaXMgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMmIzM0Oy4gVG8gc3RheSB0cnVlIHRvIHRoZSBzcGlyaXQgb2YgdGhlIHJ1bGUsIGV2ZW4gaWYgaXQmIzM5O3MgdGVjaG5pY2FsbHkgZmluZSwgSSYjMzk7ZCBsaWtlIHRvIGlkZW50aWZ5ICpvdGhlciogcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSG1tLCBsZXQmIzM5O3MgZXhwbG9yZSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIEkmIzM5O2xsIGhhdmUgYSBsb29rIGF0IHRoYXQgb25lIG5leHQgdG8gY2hlY2sgaWYgaXQmIzM5O3MgbW9yZSBhcHByb3ByaWF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzAzLVx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XG5uZXQvYnJpZGdlL2JyLmM6MzA0Olx0XHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xubmV0L2JyaWRnZS9ici5jLTMwNS1cdFx0YnJlYWs7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTQ2PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE2MC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE2MTpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE2Mi17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTk5PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAte1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjAxOlx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIHRydWUpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLX1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMDQ9dm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDUte1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjA2Olx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwNy19XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00Mjc1PXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMDAtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzMDE6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMDIte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM0NS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM0NjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM0Ny17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU4LVx0XHRcdGNvbnRpbnVlO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzU5Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjAtXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzYyLVx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2MzpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjQtfVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM5OS1cdGxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgXHUwMDI2dmctXHUwMDNldmxhbl9saXN0LCB2bGlzdClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQwMDpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwMS1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDQtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MDU6Ym9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDYte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxNS1cdHZsYW4tXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MTY6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDE3LVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY1ND1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY2NC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY2NTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjY2LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMjk1PXN0YXRpYyBpbnQgYnJfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQ0OS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE0NTA6XHRcdGVyciA9IGJyX211bHRpY2FzdF90b2dnbGUoYnIsIG1jYXN0X3Nub29waW5nLCBleHRhY2spO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQ1MS1cdFx0aWYgKGVycilcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05OTI9aW50IGJyX211bHRpY2FzdF9zZXRfdmxhbl9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggbWNhc3Rfcm91dGVyKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk5MzppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTk0LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTA2OT12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDcxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3Mi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDczOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzQtXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU0Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTAtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTUxOnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTUyLVx0XHRcdFx0XHRcdGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1NS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NTY6c3RhdGljIGlubGluZSBpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTctXHRcdFx0XHRcdFx0ICAgIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2Mi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NjM6c3RhdGljIGlubGluZSBib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjQtXHRcdFx0XHRcdFx0ICAgYm9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9NDE2PXN0YXRpYyBzc2l6ZV90IG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy00MTkte1xubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjQyMDpcdHJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgYnJfbXVsdGljYXN0X3RvZ2dsZSk7XG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtNDIxLX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMjE0LVx0XHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTU6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMjE2LVx0XHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcdTAwMjZtYXN0ZXJ2LVx1MDAzZWJyX21jYXN0X2N0eCk7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVx0X192bGFuX2ZsYWdzX2NvbW1pdCh2LCBmbGFncyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTk6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIHRydWUpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMzYwLVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXHRcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVx1MDAzZXZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0Mjg6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtNDI5LVx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnYtXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTcxOT1zdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjAtXHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc2MTpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2Mi1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04OTQ9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTkyMC1cdFx0YnJfaW5mbyhiciwgXCYjMzQ7dmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWQsIGF1dG9tYXRpY2FsbHkgZGlzYWJsaW5nIG11bHRpY2FzdCB2bGFuIHNub29waW5nXFxuXCYjMzQ7KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkyMTpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKGJyLCBmYWxzZSwgTlVMTCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MjItXHR9XG4tLVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz01NTA9c3RhdGljIGludCBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTU2NC1cdFx0bWNfc25vb3BpbmcgPSBubGFfZ2V0X3U4KHRiW0JSSURHRV9WTEFOREJfR09QVFNfTUNBU1RfU05PT1BJTkddKTtcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NTY1Olx0XHRpZiAoYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbih2LCAhIW1jX3Nub29waW5nKSlcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTY2LVx0XHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNDkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVgIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGlzIGFyZWEuIEFsc28sIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGlzIGEgbmV0bGluayBjYWxsYmFjazsgdGhvc2UgYXJlIG9mdGVuIGdvb2QgZW50cnkgcG9pbnRzIGJlY2F1c2UgdGhleSYjMzk7cmUgZGlyZWN0bHkgaGFuZGxpbmcgbmV0d29yayBjb25maWd1cmF0aW9uIGNoYW5nZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgLCBhbmQgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvaXB2NC9kZXZpbmV0LmNgIHRvIHNlZSBpZiBpdCYjMzk7cyBzdGF0aWMuIFllcywgaXQmIzM5O3Mgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIGltbWVkaWF0ZSB1c2VmdWxuZXNzIGFzIGEgdG9wLWxldmVsIGVudHJ5IHBvaW50LCBhbHRob3VnaCBpdCBiZWluZyBhIG5ldGxpbmsgY2FsbGJhY2sgbWFrZXMgaXQgcmVsZXZhbnQuIE9rYXksIHdoYXQgYWJvdXQgYGluZXRfbmV0Y29uZl9kdW1wX2RldmNvbmZgPyBBbmQsIG5vcGUsIHRoYXQgb25lIGlzIGFsc28gc3RhdGljLiBBbmQgYGluZXRfZHVtcF9hZGRyYCBpcyBzdGF0aWMgdG9vLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIG5vdCB3aGF0IEkgd2FzIGhvcGluZyBmb3IuIFdoYXQgYWJvdXQgYGluZXRfc2VsZWN0X2FkZHJgPyBBaCwgKnRoYXQqIG9uZSBpcyBub24tc3RhdGljLiBUaW1lIHRvIGRpZyBpbnRvIGBpbmV0X3NlbGVjdF9hZGRyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9zZWxlY3RfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9hcnAuYz0zMzM9c3RhdGljIHZvaWQgYXJwX3NvbGljaXQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvYXJwLmMtMzczLVx0aWYgKCFzYWRkcilcbm5ldC9pcHY0L2FycC5jOjM3NDpcdFx0c2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldiwgdGFyZ2V0LCBSVF9TQ09QRV9MSU5LKTtcbm5ldC9pcHY0L2FycC5jLTM3NS1cbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MTM0Mz1zdGF0aWMgX19iZTMyIGluX2Rldl9zZWxlY3RfYWRkcihjb25zdCBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTEzNTgtXG5uZXQvaXB2NC9kZXZpbmV0LmM6MTM1OTpfX2JlMzIgaW5ldF9zZWxlY3RfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMzIgZHN0LCBpbnQgc2NvcGUpXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTM2MC17XG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTE0MjctfVxubmV0L2lwdjQvZGV2aW5ldC5jOjE0Mjg6RVhQT1JUX1NZTUJPTChpbmV0X3NlbGVjdF9hZGRyKTtcbm5ldC9pcHY0L2RldmluZXQuYy0xNDI5LVxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTI3Mz1fX2JlMzIgZmliX2NvbXB1dGVfc3BlY19kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0zMDctXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzozMDg6XHRyZXR1cm4gaW5ldF9zZWxlY3RfYWRkcihkZXYsIGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLCBzY29wZSk7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0zMDktfVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzE1PV9fYmUzMiBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyMS1cdGlmIChuaGMtXHUwMDNlbmhjX2ZhbWlseSAhPSBBRl9JTkVUKVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzMjI6XHRcdHJldHVybiBpbmV0X3NlbGVjdF9hZGRyKG5oYy1cdTAwM2VuaGNfZGV2LCAwLCBzY29wZSk7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyMy1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzI0LVx0bmggPSBjb250YWluZXJfb2YobmhjLCBzdHJ1Y3QgZmliX25oLCBuaF9jb21tb24pO1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzMjU6XHRzYWRkciA9IGluZXRfc2VsZWN0X2FkZHIobmgtXHUwMDNlZmliX25oX2RldiwgbmgtXHUwMDNlZmliX25oX2d3NCwgc2NvcGUpO1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzMjYtXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIyMjM9dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjUxLVx0XHRlbHNlXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjI1MjpcdFx0XHRmbDQtXHUwMDNlc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGwzbWRldiwgMCwgUlRfU0NPUEVfTElOSyk7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjI1My1cdH1cbi0tXG5uZXQvaXB2NC9pY21wLmM9ODE0PXZvaWQgX19pY21wX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IHR5cGUsIGludCBjb2RlLCBfX2JlMzIgaW5mbyxcbi0tXG5uZXQvaXB2NC9pY21wLmMtOTM2LVx0XHRpZiAoZGV2KVxubmV0L2lwdjQvaWNtcC5jOjkzNzpcdFx0XHRzYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2LCBpcGgtXHUwMDNlc2FkZHIsXG5uZXQvaXB2NC9pY21wLmMtOTM4LVx0XHRcdFx0XHRcdCBSVF9TQ09QRV9MSU5LKTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTEzMTM9dm9pZCBpcF9ydF9nZXRfc291cmNlKHU4ICphZGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcnRhYmxlICpydClcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMzQtXHRcdGVsc2Vcbm5ldC9pcHY0L3JvdXRlLmM6MTMzNTpcdFx0XHRzcmMgPSBpbmV0X3NlbGVjdF9hZGRyKHJ0LVx1MDAzZWRzdC5kZXYsXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMzYtXHRcdFx0XHRcdCAgICAgICBydF9uZXh0aG9wKHJ0LCBpcGgtXHUwMDNlZGFkZHIpLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MjczNj1zdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2hfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjgwMy1cbm5ldC9pcHY0L3JvdXRlLmM6MjgwNDpcdFx0LyogUkFDRTogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIGluZXRfc2VsZWN0X2FkZHIgaW5zdGVhZC4gKi9cbm5ldC9pcHY0L3JvdXRlLmMtMjgwNS1cdFx0aWYgKCEoZGV2X291dC1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB8fCAhX19pbl9kZXZfZ2V0X3JjdShkZXZfb3V0KSkge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjgxMi1cdFx0XHRpZiAoIWZsNC1cdTAwM2VzYWRkcilcbm5ldC9pcHY0L3JvdXRlLmM6MjgxMzpcdFx0XHRcdGZsNC1cdTAwM2VzYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCxcbm5ldC9pcHY0L3JvdXRlLmMtMjgxNC1cdFx0XHRcdFx0XHRcdCAgICAgIFJUX1NDT1BFX0xJTkspO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjgxOC1cdFx0XHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoZmw0LVx1MDAzZWRhZGRyKSlcbm5ldC9pcHY0L3JvdXRlLmM6MjgxOTpcdFx0XHRcdGZsNC1cdTAwM2VzYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCxcbm5ldC9pcHY0L3JvdXRlLmMtMjgyMC1cdFx0XHRcdFx0XHRcdCAgICAgIGZsNC1cdTAwM2VmbG93aTRfc2NvcGUpO1xubmV0L2lwdjQvcm91dGUuYy0yODIxLVx0XHRcdGVsc2UgaWYgKCFmbDQtXHUwMDNlZGFkZHIpXG5uZXQvaXB2NC9yb3V0ZS5jOjI4MjI6XHRcdFx0XHRmbDQtXHUwMDNlc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldl9vdXQsIDAsXG5uZXQvaXB2NC9yb3V0ZS5jLTI4MjMtXHRcdFx0XHRcdFx0XHQgICAgICBSVF9TQ09QRV9IT1NUKTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI4NjItXHRcdFx0aWYgKGZsNC1cdTAwM2VzYWRkciA9PSAwKVxubmV0L2lwdjQvcm91dGUuYzoyODYzOlx0XHRcdFx0Zmw0LVx1MDAzZXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXZfb3V0LCAwLFxubmV0L2lwdjQvcm91dGUuYy0yODY0LVx0XHRcdFx0XHRcdFx0ICAgICAgUlRfU0NPUEVfTElOSyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTYzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipSZXZpZXdpbmcgdGhlIGBpbl9kZXZfZ2V0YCBhbmQgYGluZXRfc2VsZWN0X2FkZHJgIFJlbGF0aW9uc2hpcCoqCgpPa2F5LCBzbyBJIHdhcyByZXZpZXdpbmcgdGhlIGNvZGUgYW5kIGluaXRpYWxseSB0aG91Z2h0IGBpbmV0X3NlbGVjdF9hZGRyYCB3YXMgdXNpbmcgYF9faW5fZGV2X2dldF9yY3VgLCBub3QgdGhlIHJlZ3VsYXIgYGluX2Rldl9nZXRgLiBUaGF0IGZlbHQgcmlnaHQsIGJhc2VkIG9uIHRoZSBjb250ZXh0IGFuZCB0eXBpY2FsIHVzZSBjYXNlcy4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIHBhdGNoIOKAkyBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgYWN0dWFsbHkgKm1vZGlmaWVzKiBgaW5fZGV2X2dldGAgaXRzZWxmISBUaGF0JiMzOTtzIGEgZGlmZmVyZW50IHN0b3J5LiBHaXZlbiB0aGUgc2NvcGUgb2YgdGhpcywgSSBuZWVkIHRvIHRob3JvdWdobHkgcmUtZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgaW5fZGV2X2dldGAgbm93IHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5mb3Jlc2VlbiBjb25zZXF1ZW5jZXMgd2l0aCB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb3JlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbi4gVGltZSB0byBnbyBiYWNrIGFuZCBtZXRob2RpY2FsbHkgdHJhY2UgYWxsIHRoZSBjYWxscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbl9kZXZfZ2V0XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jPTMyMzU9c3RhdGljIGludCBwaWNrX2xvY2FsX2lwYWRkcnMoc3RydWN0IGM0aXdfZGV2ICpkZXYsIHN0cnVjdCBpd19jbV9pZCAqY21faWQpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0Mi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jOjMyNDM6XHRpbmQgPSBpbl9kZXZfZ2V0KGRldi1cdTAwM2VyZGV2LmxsZGkucG9ydHNbMF0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0NC1cdGlmICghaW5kKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jPTE3NDQ9c3RhdGljIGludCBpcmRtYV9hZGRfbXFoXzQoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmMtMTc2NC1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jOjE3NjU6XHRcdGlkZXYgPSBpbl9kZXZfZ2V0KGlwX2Rldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNzY2LVx0XHRpZiAoIWlkZXYpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MzIwPXN0YXRpYyBib29sIGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMzMwLVx0Y2FzZSBBRl9JTkVUOlxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MzMxOlx0XHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0zMzItXHRcdGlmICghaW5fZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzIzMD1uZXR4ZW5fY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzIzOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MzIzOTpcdGluZGV2ID0gaW5fZGV2X2dldChkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMjQwLVx0aWYgKCFpbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmM9NDA1ND1xbGNuaWNfY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwNjA6XHRpbmRldiA9IGluX2Rldl9nZXQoZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDYxLVx0aWYgKCFpbmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaD0yMzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICpfX2luX2Rldl9nZXRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQxLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg6MjQyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluX2RldmljZSAqaW5fZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQzLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNTY9c3RhdGljIHZvaWQgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1Ny17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxNTg6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbl9kZXZfZ2V0KGJyLVx1MDAzZWRldik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxNTktXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTg3PXN0YXRpYyB2b2lkIGJyX2lwNF9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTg4LXtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE4OTpcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoYnItXHUwMDNlZGV2KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE5MC1cbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjM3ND1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yNDA1LVx0XHRpZiAoZGV2KVxubmV0L2lwdjQvZGV2aW5ldC5jOjI0MDY6XHRcdFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDctXHRcdGlmICghaW5fZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoIG9mIGBpbl9kZXZfZ2V0YCoqCgpPa2F5LCBzbyBgaW5fZGV2X2dldGAgcG9wcyB1cCBpbiBxdWl0ZSBhIGZldyBwbGFjZXMsIGRvZXNuJiMzOTt0IGl0PyBMZXQmIzM5O3Mgc2VlLCBpdCYjMzk7cyB1c2VkIGluIGBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgLCBgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AsIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgLCBgaXBvaWJfaXNfZGV2X21hdGNoX2FkZHJfcmN1YCwgYHBpY2tfbG9jYWxfaXBhZGRyc2Agd2l0aGluIGN4Z2I0LCBgaXJkbWFfYWRkX21xaF80YCwgYW5kIHRoZW4gYG5ldHhlbl9jb25maWdfaW5kZXZfYWRkcmAgYW5kIGBxbGNuaWNfY29uZmlnX2luZGV2X2FkZHJgLgoKRnJvbSBhIG5ldHdvcmtpbmcgcGVyc3BlY3RpdmUsIGl0JiMzOTtzIG1haW5seSBpbnZvbHZlZCB3aXRoIHRoZSBicmlkZ2UgbXVsdGljYXN0IGNvZGUgKGBicl9tdWx0aWNhc3QuY2ApIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiBjb2RlIChgZGV2aW5ldC5jYCkuIFNvLCBmb3IgdGhlIGJyaWRnZSBtdWx0aWNhc3QgcGF0aCwgdGhlIGVudHJ5IHBvaW50IHNlZW1zIHRvIGJlIGBicl9tdWx0aWNhc3RfdG9nZ2xlYC4gQW5kLCBpbiBgZGV2aW5ldC5jYCwgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAgYXBwZWFycyB0byBiZSB3aGVyZSBpdCYjMzk7cyBiZWluZyBoaXQsIHByb2JhYmx5IHZpYSBuZXRsaW5rLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBvcnRhbmNlLCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAgaW4gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYGluX2Rldl9nZXRgIGlzIGJlaW5nIHV0aWxpemVkIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNDY9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTYxOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxOTk9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwMC17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDE6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDItfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIwND12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwNS17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDY6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjA3LX1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyNzU9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwMC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMwMTp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwMi17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzQ2OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNTgtXHRcdFx0Y29udGludWU7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNTk6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odnBvcnQsIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2MC1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjItXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzYzOlx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NC19XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjUtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjctXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzk5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2bGFuLCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDAwOlx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDAxLVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQwNTpib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNi17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDE1LVx0dmxhbi1cdTAwM2Vwcml2X2ZsYWdzIF49IEJSX1ZMRkxBR19HTE9CQUxfTUNBU1RfRU5BQkxFRDtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQxNjpcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTctXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjU0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjY0LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjY1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2NjYtXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE4MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IEZ1bmN0aW9uIENhbGwqKgoKUmlnaHQsIHNvIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBpc24mIzM5O3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBwYXJ0IG9mIHRoZSBvdmVyYWxsIEFQSSBhbmQgYWNjZXNzaWJsZSBmcm9tIG11bHRpcGxlIGxvY2F0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLCBhbmQgSSYjMzk7bGwgc3RhcnQgd2l0aCBgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCBzdWdnZXN0cyBzb21lIGxpbmsgd2l0aCBJR01QIHNub29waW5nLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgaG93IGl0JiMzOTtzIGFjdHVhbGx5IGludm9rZWQgdGhlcmUgYW5kIHdoYXQgY29udGV4dCBpdCYjMzk7cyBvcGVyYXRpbmcgaW4uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGFyZ3VtZW50cyBiZWluZyBwYXNzZWQsIHRoZSBjb25kaXRpb25hbCBsb2dpYyBzdXJyb3VuZGluZyB0aGUgY2FsbCwgYW5kIG9mIGNvdXJzZSBhbnkgZXJyb3IgaGFuZGxpbmcuIFRoaXMgc2hvdWxkIHF1aWNrbHkgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2YgaXRzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBtdWx0aWNhc3Qgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX2lwNF9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTQxPXZvaWQgYnJfbXVsdGljYXN0X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1NS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE1NjpzdGF0aWMgdm9pZCBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTU3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxODE9dm9pZCBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODIte1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTgzOlx0YnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzKGJyKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE4NC1cdGJyX2lwNl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgKioKCk9rYXksIHNvIGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AgaXMgY2FsbGluZyBgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLCB0aGV5JiMzOTtyZSBsaWtlbHkgcmVsYXRlZC4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCBvZiBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AgaXMgYmVpbmcgKmNhbGxlZCBmcm9tKi4gSSBuZWVkIHRvIHNlZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMuIFRpbWUgdG8gbG9vayBhdCB0aGUgY2FsbCBncmFwaCBmb3IgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbXVsdGljYXN0IHNldHVwLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBjb250cm9sIHBsYW5lIGludGVyYWN0aW9uLCB0aGUgZGF0YSBwYXRoIGhhbmRsaW5nLCBvciBwb3RlbnRpYWxseSBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgZXhpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF9qb2luX3Nub29wZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xNjQ9c3RhdGljIGludCBicl9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTczLVx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTc0Olx0XHRicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE3NS1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNzY9c3RhdGljIGlubGluZSB2b2lkIGJyX2lwNl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTgwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTgxOnZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTgyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2NjU9aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2OTgtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2OTk6XHQvKiBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyBoYXMgdGhlIHBvdGVudGlhbCB0byBjYXVzZVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzAwLVx0ICogYW4gTUxEIFJlcG9ydC9MZWF2ZSB0byBiZSBkZWxpdmVyZWQgdG8gYnJfbXVsdGljYXN0X3Jjdixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MTItXHRcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3MTM6XHRcdFx0YnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoYnIpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzE0LVx0XHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTgwPXZvaWQgYnJfbXVsdGljYXN0X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk4MTp2b2lkIGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05ODItdm9pZCBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNDIxPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQyNC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE0MjU6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MjYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjYxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQnJpZGdlIE11bHRpY2FzdCBDb25maWd1cmF0aW9uIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBicl9kZXZfb3BlbmAgZGlyZWN0bHkgY2FsbHMgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBkb2VzIGFzIHdlbGwuIFRoYXQgbWFrZXMgYGJyX2Rldl9vcGVuYCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVgIHN0cm9uZyBpbml0aWFsIGNhbmRpZGF0ZXMgZm9yIGVudHJ5IHBvaW50cyB3aGVuIGxvb2tpbmcgYXQgbXVsdGljYXN0IHNub29waW5nIGNvbmZpZ3VyYXRpb24gd2l0aGluIGEgYnJpZGdlLiBBaCwgcmlnaHQsIGBicl9kZXZfb3BlbmAgaXMgdGhlIGBuZG9fb3BlbmAgY2FsbGJhY2sgZm9yIGJyaWRnZSBkZXZpY2VzLCBzbyB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpUaGVuIEkgc2VlIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBiZWluZyBjYWxsZWQgZnJvbSBib3RoIGBicl9jaGFuZ2VsaW5rYCBhbmQgYG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZWAuICpUaGF0KiBtYWtlcyBgYnJfY2hhbmdlbGlua2AgYSBsaWtlbHkgZW50cnkgcG9pbnQgdG9vLCBhbm90aGVyIGF2ZW51ZSBmb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbiBvciBpbnZlc3RpZ2F0aW9uLgoKTm93LCBsZXQmIzM5O3Mgbm90IGZvcmdldCBuZXRsaW5rIGNhbGxiYWNrcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGFzIGl0JiMzOTtzIGEgbmV0bGluayBjYWxsYmFjaywgd2hpY2ggaGludHMgYXQgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4gSSBzaG91bGQgYWxzbyBkaWcgaW50byB0aGUgaGFuZGxlcnMgbG9jYXRlZCB3aXRoaW4gYGRldmluZXRfcnRubF9tc2dfaGFuZGxlcnNgIGluIGBuZXQvaXB2NC9kZXZpbmV0LmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyB1c2VmdWwgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmluZXRfcnRubF9tc2dfaGFuZGxlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9kZXZpbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZGV2aW5ldC5jPTI5NDU9c3RhdGljIHN0cnVjdCBydG5sX2FmX29wcyBpbmV0X2FmX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yOTUyLVxubmV0L2lwdjQvZGV2aW5ldC5jOjI5NTM6c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIGRldmluZXRfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbm5ldC9pcHY0L2RldmluZXQuYy0yOTU0LVx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX05FV0FERFIsIC5kb2l0ID0gaW5ldF9ydG1fbmV3YWRkcixcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9Mjk2Nz12b2lkIF9faW5pdCBkZXZpbmV0X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjk3NC1cbm5ldC9pcHY0L2RldmluZXQuYzoyOTc1Olx0cnRubF9yZWdpc3Rlcl9tYW55KGRldmluZXRfcnRubF9tc2dfaGFuZGxlcnMpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTI5NzYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM0OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCBpcyB0aGUgZnVuY3Rpb24gcmVnaXN0ZXJlZCB0byBoYW5kbGUgYFJUTV9HRVRORVRDT05GYC4gVGhhdCBtYWtlcyBpdCBhIHBvdGVudGlhbCBmb2N1cyBzeW1ib2wuIEl0ICpjb3VsZCogYmUgYSBkZWNlbnQgZW50cnkgcG9pbnQsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhlIHByb21wdCwgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLi4uJiMzNDsgTXkgaW5pdGlhbCBjb25jZXJuIGlzIHRoYXQgaXQmIzM5O3MgYHN0YXRpY2AuIEhvd2V2ZXIsIHNpbmNlIGl0JiMzOTtzIHVzZWQgaW4gYSBmdW5jdGlvbiBwb2ludGVyIGFycmF5LCBpdCAqc2hvdWxkbiYjMzk7dCogYmUgaW5saW5lZCwgYW5kIHRoZXJlZm9yZSBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IHN1aXRhYmxlLiBTdGlsbCwganVzdCB0byBiZSBjb21wbGV0ZWx5IHNhZmUsIG1heWJlIEkgY2FuIGZpbmQgYSBtb3JlIHVuaXZlcnNhbGx5IGFjY2VwdGVkIHN5bWJvbC4KClRoZW4gSSBnZXQgZGlzdHJhY3RlZCBhbmQgdGhpbmsgYWJvdXQgYGluX2Rldl9nZXRgLCB3aGljaCBpcyBhbHNvIGEgZGVjZW50IG9wdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcyBiZXNpZGVzIG15IHByaW1hcnkgdXNlLiBNb3N0IG9mIHRoZSBvdGhlciBsb2NhdGlvbnMgaXQmIzM5O3MgdXNlZCBhcmUgaW4gZGV2aWNlIGRyaXZlcnMsIGxpa2UgYGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdWAgYW5kIGBuZXR4ZW5fY29uZmlnX2luZGV2X2FkZHJgLiBNeSBmb2N1cyBpcyB0aGUgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHdoaWNoIGluY2x1ZGVzIGBicl9tdWx0aWNhc3QuY2AgYW5kIGBkZXZpbmV0LmNgLiBTbyBtYXliZSBgYnJfY2hhbmdlbGlua2Agb3IgYGJyX2Rldl9vcGVuYCB3b3VsZCBiZSBiZXR0ZXIgY2hvaWNlcy4gSSB3aWxsIGNoZWNrIHRoZSBmb3JtZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX2NoYW5nZWxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMjQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBicl9wb2xpY3lbSUZMQV9CUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTI5NC1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjEyOTU6c3RhdGljIGludCBicl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpicmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTEyOTYtXHRcdFx0IHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xNTkzPXN0YXRpYyBpbnQgYnJfZGV2X25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNjExLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTYxMjpcdGVyciA9IGJyX2NoYW5nZWxpbmsoZGV2LCB0YiwgZGF0YSwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2MTMtXHRpZiAoZXJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE5NDg9c3RydWN0IHJ0bmxfbGlua19vcHMgYnJfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xOTU1LVx0Lm5ld2xpbmtcdFx0PSBicl9kZXZfbmV3bGluayxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE5NTY6XHQuY2hhbmdlbGlua1x0XHQ9IGJyX2NoYW5nZWxpbmssXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xOTU3LVx0LmRlbGxpbmtcdFx0PSBicl9kZXZfZGVsZXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDI4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OgoKKipTdGF0aWMgVmFyaWFibGVzIGluIHRoZSBCcmlkZ2UgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgYnJfY2hhbmdlbGlua2AuLi4gdGhhdCYjMzk7cyBzdGF0aWMuIEhtbSwgdGhlbiB3aGF0IGFib3V0IGBicl9kZXZfb3BlbmA/ICpUaGF0JiMzOTtzKiBzdGF0aWMgYXMgd2VsbC4gSSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlc2UgdGhpbmdzLiBOb3csIHdoYXQgYWJvdXQgYGJyX211bHRpY2FzdF90b2dnbGVgPyBPaCwgaXQgbG9va3MgbGlrZSB0aGF0IG9uZSBpcyAqbm90KiBzdGF0aWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBnZXR0aW5nIGEgY29tcGxldGUgcGljdHVyZSBoZXJlIC0gbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gVGltZSB0byBjaGVjayBgYnJfbXVsdGljYXN0X3RvZ2dsZWAmIzM5O3MgaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMsIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gR290dGEgdHJhY2UgdGhlIHVzYWdlIGFuZCBlbnN1cmUgSSB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNDY9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTYxOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxOTk9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwMC17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDE6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDItfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIwND12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwNS17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDY6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjA3LX1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyNzU9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwMC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMwMTp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwMi17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzQ2OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNTgtXHRcdFx0Y29udGludWU7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNTk6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odnBvcnQsIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2MC1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjItXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzYzOlx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NC19XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjUtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjctXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzk5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2bGFuLCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDAwOlx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDAxLVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQwNTpib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNi17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDE1LVx0dmxhbi1cdTAwM2Vwcml2X2ZsYWdzIF49IEJSX1ZMRkxBR19HTE9CQUxfTUNBU1RfRU5BQkxFRDtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQxNjpcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTctXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjU0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjY0LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjY1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2NjYtXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTc1NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBpcyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gTm93LCB3aGF0IGFib3V0IGBpbmV0X3NlbGVjdF9hZGRyYD8gSG1tLCBpdCB1c2VzIGBfX2luX2Rldl9nZXRfcmN1YCwgbm90IHRoZSBmdW5jdGlvbiBpbiB0aGUgcGF0Y2gsIGBpbl9kZXZfZ2V0YC4gUmlnaHQsIHRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgYGluX2Rldl9nZXRgLCBzbyB3ZSBuZWVkIHRvIGZvY3VzIG9uIHdoaWNoIGZ1bmN0aW9ucyBjYWxsIHRoYXQuCgpMZXQmIzM5O3Mgc2VlLCB0aGUgY2FsbGVycyBvZiBgaW5fZGV2X2dldGAgYXJlIHF1aXRlIGEgZmV3OgoqICAgYGJyX2lwNF9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AsIHdoaWNoIGZsb3dzIHRvIGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2Agd2hpY2ggZ29lcyB0byBgYnJfbXVsdGljYXN0X3RvZ2dsZWAgYW5kIGBicl9kZXZfb3BlbmAuCiogICBgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AsIHdoaWNoIGZsb3dzIHRvIGBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgIHdoaWNoIGdvZXMgdG8gYGJyX211bHRpY2FzdF90b2dnbGVgIGFuZCBgYnJfZGV2X3N0b3BgLgoqICAgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAsIHdoaWNoIGZsb3dzIHRvIGBkZXZpbmV0X3J0bmxfbXNnX2hhbmRsZXJzYC4KKiAgIGBpcG9pYl9pc19kZXZfbWF0Y2hfYWRkcl9yY3VgLCB3aGljaCBmbG93cyB0byBgaXBvaWJfbWNhc3Rfam9pbmAgYW5kIGdvZXMgdG8gYGlwb2liX21jYXN0X2pvaW5fdGFza2AuCiogICBgcGlja19sb2NhbF9pcGFkZHJzYCwgd2hpY2ggZmxvd3MgdG8gYGM0aXdfY29ubmVjdGAsIGFuZCBgYzRpd19jcmVhdGVfbGlzdGVuYC4KKiAgIGBpcmRtYV9hZGRfbXFoXzRgLCB3aGljaCBmbG93cyB0byBgaXJkbWFfYWRkX21xaGAgd2hpY2ggZ29lcyB0byBgaXJkbWFfY3JlYXRlX2xpc3RlbmAgYW5kIGBpcmRtYV9jb25uZWN0YC4KKiAgIGBuZXR4ZW5fY29uZmlnX2luZGV2X2FkZHJgLCB3aGljaCBmbG93cyB0byBgbmV0eGVuX25pY19wcm9iZWAuCiogICBgcWxjbmljX2NvbmZpZ19pbmRldl9hZGRyYCwgd2hpY2ggZmxvd3MgdG8gYHFsY25pY19wcm9iZWAuCgpTbywgYGJyX211bHRpY2FzdF90b2dnbGVgIGxvb2tzIGxpa2UgYSBzb2xpZCBub24tc3RhdGljIGVudHJ5IHBvaW50LiBBbmQgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCBhbmQgYGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AgYXJlIGFsc28gbm9uLXN0YXRpYywgYnkgZXh0ZW5zaW9uLiBJJiMzOTtsbCBtYWtlIGEgbm90ZSBvZiB0aG9zZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNzY9c3RhdGljIGlubGluZSB2b2lkIGJyX2lwNl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTgwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTgxOnZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTgyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4NDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJyaWRnZSBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgLCBgYnJfbXVsdGljYXN0X2xlYXZlX3Nub29wZXJzYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBhcmUgYWxsIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVxdWlyZWQgZm9yIHRoZW0gdG8gZnVuY3Rpb24gY29ycmVjdGx5LgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGUgYnJvYWRlciBjb250ZXh0LiBJIHJlbWVtYmVyIGBpbl9kZXZfZ2V0YCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaGAuIEFuZCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXQmIzM5O3MgdXRpbGl6ZWQgd2l0aGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gR2l2ZW4gdGhhdCwgSSByZWNhbGwgdGhhdCBgYnJfbXVsdGljYXN0LmNgIHJlbGllcyBvbiBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5ldC9icmlkZ2UvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnPTY9Y29uZmlnIEJSSURHRVxuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyNzUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTmV0d29yayBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBJbmNsdWRpbmcgYEJSSURHRV9JR01QX1NOT09QSU5HYCBzZWVtcyBsaWtlIGEgc29saWQgY2hvaWNlLCBhbmQsIG9idmlvdXNseSwgdGhlIGJhc2UgYEJSSURHRWAgb3B0aW9uIGlzIGVzc2VudGlhbC4gTm93LCBJJiMzOTttIHRyeWluZyB0byByZW1lbWJlci4uLiB3aGF0IGFib3V0IGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgPyBUaGF0JiMzOTtzIGJ1cmllZCBzb21ld2hlcmUgaW4gYG5ldC9pcHY0L2RldmluZXQuY2AsIHJpZ2h0PyBBaGEsIHllcywgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCBpcy4gQW5kIEkgc2VlbSB0byByZWNhbGwgdGhhdCBgZGV2aW5ldC5jYCBvbmx5IGdldHMgY29tcGlsZWQgaWYgYENPTkZJR19JTkVUYCBpcyBlbmFibGVkIOKAkyBhIGNydWNpYWwgZGVwZW5kZW5jeSB0byBrZWVwIGluIG1pbmQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIGFuZCBjb25maXJtIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2aW5ldFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlLTEzLVx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTE1LVx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzcxMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCcmlkZ2UgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYGRldmluZXQub2AgKmFsd2F5cyogZ2V0cyBjb21waWxlZCB3aXRoIGBDT05GSUdfSU5FVGAgZW5hYmxlZC4gVGhhdCB0ZWxscyBtZSByaWdodCBhd2F5IHRoYXQgYElORVRgIGlzIGEgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gQW5kLCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGJyaWRnZXMgYW5kIG11bHRpY2FzdCwgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBpbmNsdWRlIGBCUklER0VgIGFuZCBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGZvciB0aGUgYnJpZGdlIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IGl0c2VsZi4KCkxldCBtZSB0aGluayBhYm91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgcmVhbGx5IGNlbnRyYWwgdG8gdGhpcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlc2U6IGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AsIGBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVgLiBJIHdhcyBhbHNvIGdvaW5nIHRvIGFkZCBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCwgZXZlbiB0aG91Z2ggaXQgaXMgYSBgc3RhdGljYCBmdW5jdGlvbiwgYmVjYXVzZSBpdCBpcyBjYWxsZWQgYnkgTmV0bGluay4KCkhvbGQgb24sIHRoZSBjb21waWxlciBtaWdodCBvcHRpbWl6ZSBvdXQgYSBkaXN0aW5jdCBzeW1ib2wgZm9yIGEgc3RhdGljIGZ1bmN0aW9uIGlmIGl0IGNhbi4gQnV0IHNpbmNlIGl0cyBhZGRyZXNzICppcyogYmVpbmcgdGFrZW4sIGl0ICpzaG91bGQqIGhhdmUgYSBzeW1ib2wuIFRvIGJlIGFic29sdXRlbHkgc2FmZSwgSSYjMzk7bSB0aGlua2luZyBJIGNhbiBqdXN0IHVzZSB0aGUgYnJpZGdlIGZ1bmN0aW9ucy4gTm9wZSEgQ2hlY2tpbmcgYGRldmluZXQuY2AsIGl0IGxvb2tzIGxpa2UgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAgaXMgdGhlIG9ubHkgY2FsbGVyLiBJIHNob3VsZCBpbmNsdWRlIGl0LgoKVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGhhcyBjaGFuZ2VkIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDE3Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnJfaXA2X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODAtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxODE6dm9pZCBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODIte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY2NT1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY5OC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY5OTpcdC8qIGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGNhdXNlXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MDAtXHQgKiBhbiBNTEQgUmVwb3J0L0xlYXZlIHRvIGJlIGRlbGl2ZXJlZCB0byBicl9tdWx0aWNhc3RfcmN2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcxMi1cdFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDcxMzpcdFx0XHRicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MTQtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2NjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB0aGUgTm9uLVN0YXRpYyBOYXR1cmUgb2YgYSBGdW5jdGlvbiBhbmQgSXRzIFBvdGVudGlhbCBVc2FnZSoqCgpSaWdodCwgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCBpc24mIzM5O3Qgc3RhdGljLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgaW4gYSB3YXkgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgZm9yIG15IGN1cnJlbnQgd29yay4gR2l2ZW4gdGhhdCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGhvdyBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCBpcyB1c2VkIHdpdGhpbiBgbmV0L2lwdjQvZGV2aW5ldC5jYC4gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBjb25maXJtIHRoZSBkZXRhaWxzLCBjb250ZXh0IGFuZCBhbnkgc2lkZSBlZmZlY3RzIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZSB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgd2l0aCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGJlZm9yZSBJIG1vdmUgb24uIFRoaXMgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIGNvdWxkIHNhdmUgbWUgYSBoZWFkYWNoZSBkb3duIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9kZXZpbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZGV2aW5ldC5jPTIzMzU9c3RhdGljIGludCBpbmV0X25ldGNvbmZfdmFsaWRfZ2V0X3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yMzczLVxubmV0L2lwdjQvZGV2aW5ldC5jOjIzNzQ6c3RhdGljIGludCBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9pcHY0L2RldmluZXQuYy0yMzc1LVx0XHRcdFx0ICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYz0yOTUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBkZXZpbmV0X3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTI5NjAtXHR7LnByb3RvY29sID0gUEZfSU5FVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVUQ09ORixcbm5ldC9pcHY0L2RldmluZXQuYzoyOTYxOlx0IC5kb2l0ID0gaW5ldF9uZXRjb25mX2dldF9kZXZjb25mLCAuZHVtcGl0ID0gaW5ldF9uZXRjb25mX2R1bXBfZGV2Y29uZixcbm5ldC9pcHY0L2RldmluZXQuYy0yOTYyLVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI0MAoJCQkJCQkJb3V0cHV0OiAxNzAKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRm9jdXMgU3ltYm9scyBhbmQgUmVhc29uaW5nIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCBob3cgdG8gYmVzdCB0YXJnZXQgdGhpcyBwYXRjaCBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggYGluX2Rldl9nZXRgLiBJbml0aWFsbHksIEkgdGhvdWdodCBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCBtaWdodCBiZSBhIGdvb2QgdGFyZ2V0LCBidXQgc2luY2UgaXQmIzM5O3MgZGVjbGFyZWQgYHN0YXRpY2AsIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSBpdHMgc2NvcGUsIHNvIGl0JiMzOTtzIG91dC4gSSBkbyBuZWVkIHRvIGZhY3RvciBpbiB0aGF0IGBpbl9kZXZfZ2V0YCBpcyBjYWxsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGRyaXZlcnMgc3VjaCBhcyBpbiBgbmV0eGVuX2NvbmZpZ19pbmRldl9hZGRyYCBhbmQgYHFsY25pY19jb25maWdfaW5kZXZfYWRkcmAuCgpNeSBpbnN0aW5jdCBpcyB0byBsZWFuIHRvd2FyZHMgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYXMgcHJpbWFyeSB0YXJnZXRzLiBJIHdlbnQgYmFjayBhbmQgcmUtZXhhbWluZWQgYG5ldC9pcHY0L2RldmluZXQuY2AsIGRvdWJsZS1jaGVja2luZyBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgY2FsbCBgaW5fZGV2X2dldGAsIGJ1dCBJIGNvbmZpcm1lZCBteSBlYXJsaWVyIGdyZXAg4oCTIHRoZSBvbmx5IG90aGVyIGNhbGwgdGhlcmUgd2FzIHRoZSBzdGF0aWMgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAuIEFsc28gdG9vayBhIGxvb2sgYXQgYGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdWAsIGFuZCB0aGF0IGFsc28gaGFwcGVucyB0byBiZSBzdGF0aWMuCgpUaGVyZWZvcmUsIGFmdGVyIGEgZGVlcGVyIGRpdmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlIG9wdGltYWwgZm9jdXMgc3ltYm9scyBhcmU6CgoqICAgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYAoqICAgYGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AKKiAgIGBicl9tdWx0aWNhc3RfdG9nZ2xlYAoKVGhlc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCBmcnVpdGZ1bCBzdGFydGluZyBwb2ludHMsIHdpdGggdGhvc2UgYnJpZGdlIG11bHRpY2FzdCBzbm9vcGluZyBmdW5jdGlvbnMgYmVpbmcgdGhlIGtleS4KClRoZSBjb25maWcgZmxhZ3MgSSYjMzk7bSBwbGFubmluZyB0byB1c2UgYXJlOiBgSU5FVGAsIGBCUklER0VgLCBhbmQgYEJSSURHRV9JR01QX1NOT09QSU5HYC4KCk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgYnVnIGJ5IHJlcGxhY2luZyBgcmVmY291bnRfaW5jYCB3aXRoIGByZWZjb3VudF9pbmNfbm90X3plcm9gIHdoZW4gY2FsbGluZyBgaW5fZGV2X2dldGAuIFRoaXMgaXMgYSBwcmV0dHkgY3JpdGljYWwgY2hhbmdlIGluIGEgY29yZSBuZXR3b3JraW5nIGlubGluZSBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9ucyBJIGlkZW50aWZpZWQgYXJlIHVzZWQgYnkgdGhlIGJyaWRnZSBtdWx0aWNhc3Qgc25vb3BpbmcgZnVuY3Rpb25hbGl0eSwgSVB2NCBkZXZpbmV0IG5ldGxpbmsgY2FsbGJhY2tzLCBhbmQgc2V2ZXJhbCBkcml2ZXJzLiBUaGF0IG1ha2VzIGl0IGxpa2VseSBpdCYjMzk7cyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2Ugc2hvdWxkIGZ1enogdGhvcm91Z2hseS4KCkFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX211bHRpY2FzdF9qb2luX3Nub29wZXJzJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGJ1ZyBpbiBgaW5fZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AgaW5zdGVhZCBvZiBgcmVmY291bnRfaW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBuZXR3b3JraW5nIGlubGluZSBmdW5jdGlvbiB1c2VkIGJ5IGJyaWRnZSBtdWx0aWNhc3Qgc25vb3BpbmcsIElQdjQgZGV2aW5ldCBuZXRsaW5rIGNhbGxiYWNrcywgYW5kIHNldmVyYWwgZHJpdmVycy4gSXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX0lHTVBfU05PT1BJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByZWZjb3VudCBidWcgaW4gYGluX2Rldl9nZXRgIGJ5IHVzaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUgbmV0d29ya2luZyBpbmxpbmUgZnVuY3Rpb24gdXNlZCBieSBicmlkZ2UgbXVsdGljYXN0IHNub29waW5nLCBJUHY0IGRldmluZXQgbmV0bGluayBjYWxsYmFja3MsIGFuZCBzZXZlcmFsIGRyaXZlcnMuIEl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGluX2Rldl9nZXRgIHRvIHVzZSBgcmVmY291bnRfaW5jX25vdF96ZXJvYCBpbnN0ZWFkIG9mIGByZWZjb3VudF9pbmNgIHdoZW4gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHRvIGFuIGBpbl9kZXZpY2VgIHVuZGVyIFJDVS4gVGhpcyBpcyBhIGNsYXNzaWMgZml4IGZvciBhIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJlZmNvdW50IGJ1ZywgcHJldmVudGluZyB0aGUgYWNxdWlzaXRpb24gb2YgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXN0cm95ZWQuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpbGUgS01TQU4gZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MuIFNpbmNlIHRoaXMgcGF0Y2ggZGVhbHMgZW50aXJlbHkgd2l0aCBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTZkZjAwZjA0MDJhYmY3NWZkNDY5ZDZlNmYxMzUwNjFmMjQyZDNkYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDE1IDE4OjE5OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAppbmRleCA2MDMyZWVhMjUzOWE2Li5hMTQ0NmRhNjQyMDBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaApAQCAtMjQ1LDggJiM0MzsyNDUsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7Ci0JaWYgKGluX2RldikKLQkJcmVmY291bnRfaW5jKCZhbXA7aW5fZGV2LSZndDtyZWZjbnQpOwomIzQzOwlpZiAoaW5fZGV2ICZhbXA7JmFtcDsgIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2luX2Rldi0mZ3Q7cmVmY250KSkKJiM0MzsJCWluX2RldiA9IE5VTEw7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGluX2RldjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDUKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBpbl9kZXZfZ2V0YCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBpbl9kZXZfZ2V0YCB3aXRoaW4gYGluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oYCwgYW5kIGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHJlcGxhY2luZyBhIHN0YW5kYXJkIGByZWZjb3VudF9pbmNgIHdpdGggYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFRoZSBvbGRlciBjb2RlIGp1c3QgaW5jcmVtZW50ZWQgdGhlIHJlZmVyZW5jZSBjb3VudCwgcmVnYXJkbGVzcy4gVGhlIG5ldyBjb2RlIGludHJvZHVjZXMgYSBjaGVjazogKmlmKiB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGFscmVhZHkgemVybyAqYmVmb3JlKiB3ZSB0cnkgdG8gaW5jcmVtZW50IGl0LCBpdCBtZWFucyB0aGUgYGluX2RldmAgb2JqZWN0IGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGZyZWVkIOKAkyB3ZSYjMzk7cmUgaW4gdGhlIG1pZGRsZSBvZiB0ZWFyZG93biwgc28gd2UgYWJzb2x1dGVseSAqc2hvdWxkbiYjMzk7dCogdHJ5IHRvIHRha2UgYW5vdGhlciByZWZlcmVuY2UuIEluc3RlYWQsIHdlJiMzOTtsbCBzZXQgYGluX2RldmAgdG8gTlVMTCwgZWZmZWN0aXZlbHkgcHJldmVudGluZyBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIGEgdmVyeSBjbGVhbiBhbmQgdGFyZ2V0ZWQgYXBwcm9hY2ggdG8gYSBwb3RlbnRpYWwgb2JqZWN0IGxpZmV0aW1lIHByb2JsZW0uCgpUaGlzIGlzIHRleHRib29rIHVzZS1hZnRlci1mcmVlIHRlcnJpdG9yeS4gV2Ugd2VyZSBwcm9iYWJseSBzZWVpbmcgYSBzaXR1YXRpb24gd2hlcmUgYSBwb2ludGVyIHdhcyBiZWluZyB1c2VkIGFmdGVyIGl0cyBjb3JyZXNwb25kaW5nIG9iamVjdCBoYWQgYmVlbiBmcmVlZCwgYW5kIHRoaXMgaXMgd2h5IHdlJiMzOTtyZSBjaGFuZ2luZyB0aGlzIHJvdXRpbmUgdG8gcHJldmVudCBpdCBmcm9tIGFjcXVpcmluZyByZWZlcmVuY2VzIHRvIGEgcmVzb3VyY2UgdGhhdCBtYXkgb3IgbWF5IG5vdCBleGlzdCBhdCB0aGF0IHRpbWUuIFdlIHJlYWxseSBkb24mIzM5O3Qgd2FudCB0byBnZXQgaW50byB0aGF0IHNpdHVhdGlvbiEKCkdpdmVuIHRoYXQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBmaXggaXMgcHJpbWFyaWx5IGFkZHJlc3NpbmcgbWVtb3J5IHNhZmV0eSwgc3BlY2lmaWNhbGx5IHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgZXhhY3RseSB0aGVzZSBraW5kcyBvZiBpc3N1ZXMuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgZGVhbHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSYjMzk7cmUgb25seSBjaGFuZ2luZyB0aGUgKmhhbmRsaW5nKiBvZiBleGlzdGluZyBkYXRhLCBzbyBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4KClRoZXJlZm9yZSwgYWZ0ZXIgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gY29uZmlybSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaGlzIGlzIGEgY2xhc3NpYyBVQUYgZml4LCBhbmQgS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgdG8ga2VlcCBhbiBleWUgb24gdGhpcyB0eXBlIG9mIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaW5fZGV2X2dldGAgdG8gdXNlIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2Agd2hlbiBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gYW4gYGluX2RldmljZWAgdW5kZXIgUkNVLiBUaGlzIGlzIGEgY2xhc3NpYyBmaXggZm9yIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgcmVmY291bnQgYnVnLCBwcmV2ZW50aW5nIHRoZSBhY3F1aXNpdGlvbiBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gU2luY2UgdGhpcyBwYXRjaCBkZWFscyBlbnRpcmVseSB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGluX2Rldl9nZXRgIHRvIHVzZSBgcmVmY291bnRfaW5jX25vdF96ZXJvYCBpbnN0ZWFkIG9mIGByZWZjb3VudF9pbmNgIHdoZW4gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHRvIGFuIGBpbl9kZXZpY2VgIHVuZGVyIFJDVS4gVGhpcyBpcyBhIGNsYXNzaWMgZml4IGZvciBhIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJlZmNvdW50IGJ1ZywgcHJldmVudGluZyB0aGUgYWNxdWlzaXRpb24gb2YgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXN0cm95ZWQuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpbGUgS01TQU4gZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MuIFNpbmNlIHRoaXMgcGF0Y2ggZGVhbHMgZW50aXJlbHkgd2l0aCBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MTk6MzUuMzYyNDQ0OTk2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NjgwMDU3NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc1wiLFxuICAgIFwiYnJfbXVsdGljYXN0X2xlYXZlX3Nub29wZXJzXCIsXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW5fZGV2X2dldGAgdG8gdXNlIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2Agd2hlbiBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gYW4gYGluX2RldmljZWAgdW5kZXIgUkNVLiBUaGlzIGlzIGEgY2xhc3NpYyBmaXggZm9yIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgcmVmY291bnQgYnVnLCBwcmV2ZW50aW5nIHRoZSBhY3F1aXNpdGlvbiBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gU2luY2UgdGhpcyBwYXRjaCBkZWFscyBlbnRpcmVseSB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGJ1ZyBpbiBgaW5fZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AgaW5zdGVhZCBvZiBgcmVmY291bnRfaW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBuZXR3b3JraW5nIGlubGluZSBmdW5jdGlvbiB1c2VkIGJ5IGJyaWRnZSBtdWx0aWNhc3Qgc25vb3BpbmcsIElQdjQgZGV2aW5ldCBuZXRsaW5rIGNhbGxiYWNrcywgYW5kIHNldmVyYWwgZHJpdmVycy4gSXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MTk6MzUuMzYyNDUwMjc2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcyNDU3NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTZkZjAwZjA0MDJhYmY3NWZkNDY5ZDZlNmYxMzUwNjFmMjQyZDNkYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxODoxOTozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oXFxuaW5kZXggNjAzMmVlYTI1MzlhNi4uYTE0NDZkYTY0MjAwYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oXFxuQEAgLTI0NSw4ICsyNDUsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbi1cXHRpZiAoaW5fZGV2KVxcbi1cXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmluX2Rldi1cXHUwMDNlcmVmY250KTtcXG4rXFx0aWYgKGluX2RldiBcXHUwMDI2XFx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZpbl9kZXYtXFx1MDAzZXJlZmNudCkpXFxuK1xcdFxcdGluX2RldiA9IE5VTEw7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRyZXR1cm4gaW5fZGV2O1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjE5OjM2LjgzNTQ3OTMzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExODQ3OTUwMjM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9JR01QX1NOT09QSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNcIixcbiAgICBcImJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc1wiLFxuICAgIFwiYnJfbXVsdGljYXN0X3RvZ2dsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGJ1ZyBpbiBgaW5fZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AgaW5zdGVhZCBvZiBgcmVmY291bnRfaW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBuZXR3b3JraW5nIGlubGluZSBmdW5jdGlvbiB1c2VkIGJ5IGJyaWRnZSBtdWx0aWNhc3Qgc25vb3BpbmcsIElQdjQgZGV2aW5ldCBuZXRsaW5rIGNhbGxiYWNrcywgYW5kIHNldmVyYWwgZHJpdmVycy4gSXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTZkZjAwZjA0MDJhYmY3NWZkNDY5ZDZlNmYxMzUwNjFmMjQyZDNkYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDE4OjE5OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFxuaW5kZXggNjAzMmVlYTI1MzlhNi4uYTE0NDZkYTY0MjAwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFxuQEAgLTI0NSw4ICsyNDUsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbi1cdGlmIChpbl9kZXYpXG4tXHRcdHJlZmNvdW50X2luYyhcdTAwMjZpbl9kZXYtXHUwMDNlcmVmY250KTtcbitcdGlmIChpbl9kZXYgXHUwMDI2XHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2aW5fZGV2LVx1MDAzZXJlZmNudCkpXG4rXHRcdGluX2RldiA9IE5VTEw7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBpbl9kZXY7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MTk6MzYuODM1NDgwNzA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNDYwODg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBSZWZjb3VudCBJc3N1ZSBpbiB0aGUgS2VybmVsJ3MgTmV0d29yayBTdGFjayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIG1ha2luZyBhIHNlZW1pbmdseSBzbWFsbCwgYnV0IHBvdGVudGlhbGx5IGltcGFjdGZ1bCwgY2hhbmdlIHRvIGBpbl9kZXZfZ2V0YCBpbiBgaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmhgLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIGlzIHJlcGxhY2luZyBhIHNpbXBsZSBgcmVmY291bnRfaW5jYCB3aXRoIGByZWZjb3VudF9pbmNfbm90X3plcm9gLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYWRkcmVzc2luZyBhIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcsIHZlcnkgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBzaW1pbGFyIG1lbW9yeSBzYWZldHkgaXNzdWUgd2l0aGluIHRoZSBgaW5fZGV2aWNlYCBzdHJ1Y3R1cmUuIFRoaXMgYGluX2Rldl9nZXRgIGZ1bmN0aW9uIGlzIGlubGluZSwgd2hpY2ggbWVhbnMgaXQncyBzcHJpbmtsZWQgdGhyb3VnaG91dCB0aGUga2VybmVsIHNvdXJjZSBjb2RlLCBzbyBhIGJ1ZyBoZXJlIGNvdWxkIGJlIHF1aXRlIHdpZGVzcHJlYWQgYW5kIGRpZmZpY3VsdCB0byB0cmFjayBkb3duIHdpdGhvdXQgcHJvcGVyIHNjcnV0aW55LlxuXG5UaGUgcHJldmlvdXMgY29kZSBzaW1wbHkgaW5jcmVtZW50ZWQgdGhlIHJlZmVyZW5jZSBjb3VudCAoYGluX2Rldi1cdTAwM2VyZWZjbnRgKSBvbiB0aGUgYGluX2RldmljZWAgb2JqZWN0LiBUaGUgbmV3IGNvZGUsIGhvd2V2ZXIsIGNoZWNrcyBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIHplcm8gYmVmb3JlIGF0dGVtcHRpbmcgdGhlIGluY3JlbWVudC4gSWYgaXQgKmlzKiB6ZXJvLCBhbmQgdGhlIGluY3JlbWVudCB3b3VsZCBmYWlsLCBgaW5fZGV2YCBpcyB0aGVuIHNldCB0byBOVUxMLCB3aGljaCBtZWFucyB0aGUgY2FsbGVyIHdvbid0IHVzZSBhIGRhbmdsaW5nIHBvaW50ZXIuIFRoaXMgaXMgYSBjbGFzc2ljIHBhdHRlcm4gdG8gcHJldmVudCBhIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBgaW5fZGV2aWNlYCBzdHJ1Y3QgaXMgYWxyZWFkeSBkZWFsbG9jYXRlZC5cblxuTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBvZiB0aGlzIGZ1bmN0aW9uLiBHaXZlbiBpdCdzIGlubGluZSwgSSdsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xpbmcsIGxpa2UgYGdyZXBgIG9yIHBlcmhhcHMgYW4gSURFIHdpdGggY29kZSBpbmRleGluZywgdG8gZmluZCBhbGwgaW5zdGFuY2VzIHdoZXJlIGBpbl9kZXZfZ2V0YCBpcyB1c2VkLiBVbmRlcnN0YW5kaW5nICpob3cqIGFuZCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpbGwgYmUgY3J1Y2lhbCB0byBhc3Nlc3NpbmcgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIHZ1bG5lcmFiaWxpdHkgYW5kIGVuc3VyaW5nIHRoZSBwYXRjaCBpcyBlZmZlY3RpdmUgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy4gSXQnbGwgYWxzbyBoZWxwIHBpbnBvaW50IHRoZSBleGFjdCBzY2VuYXJpbyB0aGF0IHRyaWdnZXJlZCB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEZyb20gaGVyZSwgSSB3aWxsIGFzc2VzcyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoxOTo0MS44NDAwOTMwMjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4OTg2NTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbl9kZXZfZ2V0XFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmM9MzIzNT1zdGF0aWMgaW50IHBpY2tfbG9jYWxfaXBhZGRycyhzdHJ1Y3QgYzRpd19kZXYgKmRldiwgc3RydWN0IGl3X2NtX2lkICpjbV9pZClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jLTMyNDItXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmM6MzI0MzpcXHRpbmQgPSBpbl9kZXZfZ2V0KGRldi1cXHUwMDNlcmRldi5sbGRpLnBvcnRzWzBdKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYy0zMjQ0LVxcdGlmICghaW5kKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmM9MTc0ND1zdGF0aWMgaW50IGlyZG1hX2FkZF9tcWhfNChzdHJ1Y3QgaXJkbWFfZGV2aWNlICppd2RldixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jLTE3NjQtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmM6MTc2NTpcXHRcXHRpZGV2ID0gaW5fZGV2X2dldChpcF9kZXYpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jLTE3NjYtXFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MzIwPXN0YXRpYyBib29sIGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0zMzAtXFx0Y2FzZSBBRl9JTkVUOlxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jOjMzMTpcXHRcXHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMzMyLVxcdFxcdGlmICghaW5fZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0zMjMwPW5ldHhlbl9jb25maWdfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTMyMzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzozMjM5OlxcdGluZGV2ID0gaW5fZGV2X2dldChkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzI0MC1cXHRpZiAoIWluZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jPTQwNTQ9cWxjbmljX2NvbmZpZ19pbmRldl9hZGRyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDU5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYzo0MDYwOlxcdGluZGV2ID0gaW5fZGV2X2dldChkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDYxLVxcdGlmICghaW5kZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaD0yMzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICpfX2luX2Rldl9nZXRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaC0yNDEtXFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg6MjQyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluX2RldmljZSAqaW5fZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oLTI0My17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNTY9c3RhdGljIHZvaWQgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxNTcte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE1ODpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbl9kZXZfZ2V0KGJyLVxcdTAwM2VkZXYpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1OS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDE4Nz1zdGF0aWMgdm9pZCBicl9pcDRfbXVsdGljYXN0X2xlYXZlX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODgte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE4OTpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbl9kZXZfZ2V0KGJyLVxcdTAwM2VkZXYpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE5MC1cXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYz0yMzc0PXN0YXRpYyBpbnQgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mKHN0cnVjdCBza19idWZmICppbl9za2IsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjQwNS1cXHRcXHRpZiAoZGV2KVxcbm5ldC9pcHY0L2RldmluZXQuYzoyNDA2OlxcdFxcdFxcdGluX2RldiA9IGluX2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjQwNy1cXHRcXHRpZiAoIWluX2RldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MTk6NDQuMDI5OTY1NzU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4ODQxNzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBpbl9kZXZfZ2V0YCBGdW5jdGlvbiBVc2FnZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBpbl9kZXZfZ2V0YCBhbmQgaXRzIHVzYWdlIGFjcm9zcyB0aGUga2VybmVsLiBJIHNlZSBpdCdzIHVzZWQgaW4gYG5ldC9pcHY0L2RldmluZXQuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLCBwbHVzIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCDigJMgaW50ZXJlc3RpbmcsIGFuZCBhIGZldyBkcml2ZXJzIGFzIHdlbGwuIFRoZSBmYWN0IHRoYXQgaXQncyBhbiBpbmxpbmUgZnVuY3Rpb24gaXMgaW1tZWRpYXRlbHkgbWFraW5nIG1lIHRoaW5rIGFib3V0IHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZSBJIG1pZ2h0IHdhbnQgdG8gbWFrZS4gQW55IG1vZGlmaWNhdGlvbiB0byBgaW5fZGV2X2dldGAgd291bGQgYWZmZWN0ICpldmVyeSogcGxhY2UgaXQncyBjYWxsZWQuIEhtbSwgcmlnaHQsIGl0J3MgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24sIHNvIEkgbmVlZCB0byBiZSBjYXJlZnVsLiBMZXQgbWUgc2VlLi4uIEkgc2hvdWxkIHByb2JhYmx5IGludmVzdGlnYXRlIGhvdyB3aWRlbHkgaXQncyB1c2VkIGJ5IGZpbmRpbmcgKmFsbCogdGhlIGNhbGxlcnMuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBibGFzdCByYWRpdXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjE5OjQ3LjIxODM4NjIzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjEyNzExMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluX2Rldl9nZXRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYz0zMjM1PXN0YXRpYyBpbnQgcGlja19sb2NhbF9pcGFkZHJzKHN0cnVjdCBjNGl3X2RldiAqZGV2LCBzdHJ1Y3QgaXdfY21faWQgKmNtX2lkKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0Mi1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYzozMjQzOlxcdGluZCA9IGluX2Rldl9nZXQoZGV2LVxcdTAwM2VyZGV2LmxsZGkucG9ydHNbMF0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jLTMyNDQtXFx0aWYgKCFpbmQpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYz0xNzQ0PXN0YXRpYyBpbnQgaXJkbWFfYWRkX21xaF80KHN0cnVjdCBpcmRtYV9kZXZpY2UgKml3ZGV2LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmMtMTc2NC1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYzoxNzY1OlxcdFxcdGlkZXYgPSBpbl9kZXZfZ2V0KGlwX2Rldik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmMtMTc2Ni1cXHRcXHRpZiAoIWlkZXYpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYz0zMjA9c3RhdGljIGJvb2wgaXBvaWJfaXNfZGV2X21hdGNoX2FkZHJfcmN1KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTMzMC1cXHRjYXNlIEFGX0lORVQ6XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MzMxOlxcdFxcdGluX2RldiA9IGluX2Rldl9nZXQoZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0zMzItXFx0XFx0aWYgKCFpbl9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jPTMyMzA9bmV0eGVuX2NvbmZpZ19pbmRldl9hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzIzOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjMyMzk6XFx0aW5kZXYgPSBpbl9kZXZfZ2V0KGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMjQwLVxcdGlmICghaW5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmM9NDA1ND1xbGNuaWNfY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jLTQwNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwNjA6XFx0aW5kZXYgPSBpbl9kZXZfZ2V0KGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jLTQwNjEtXFx0aWYgKCFpbmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oPTIzNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbl9kZXZpY2UgKl9faW5fZGV2X2dldF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oLTI0MS1cXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaDoyNDI6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQzLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDE1Nj1zdGF0aWMgdm9pZCBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1Ny17XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTU4OlxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoYnItXFx1MDAzZWRldik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTU5LVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTg3PXN0YXRpYyB2b2lkIGJyX2lwNF9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE4OC17XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTg5OlxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoYnItXFx1MDAzZWRldik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTkwLVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jPTIzNzQ9c3RhdGljIGludCBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0yNDA1LVxcdFxcdGlmIChkZXYpXFxubmV0L2lwdjQvZGV2aW5ldC5jOjI0MDY6XFx0XFx0XFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0yNDA3LVxcdFxcdGlmICghaW5fZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoxOTo0OS40MzExMDU2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mzk2NTY3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIGBpbl9kZXZfZ2V0YCBVc2FnZSoqXG5cbkFscmlnaHQsIHNvIGBpbl9kZXZfZ2V0YCBpcyBkZWZpbml0ZWx5IGEga2V5IGZ1bmN0aW9uLCBJIGNhbiBzZWUgdGhhdC4gQnV0IEknbSBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlIG5vdzsgaXQncyBwZXJoYXBzIG5vdCBxdWl0ZSBhcyB1YmlxdWl0b3VzIGFzIEkgaW5pdGlhbGx5IHN1c3BlY3RlZC4gSW50ZXJlc3RpbmcuIExldCdzIGRpZyBkZWVwZXIuIEhvbGQgb24sIEkgdGhvdWdodCB0aGVyZSBtaWdodCBiZSBvdGhlciBsb2NhdGlvbnMgY2FsbGluZyBpdCB3aXRoaW4gdGhlIHNhbWUgZmlsZSwgYnV0IG15IGluaXRpYWwgZ3JlcCBvbmx5IHR1cm5lZCB1cCBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYC4gVGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQuIE9rYXksIHRpbWUgdG8gY2hlY2sgYG5ldC9pcHY0L2RldmluZXQuY2AgZGlyZWN0bHkgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkndmUgZ290IHRoZSBmdWxsIHNjb3BlIG9mIGBpbl9kZXZfZ2V0YCdzIGNhbGxlcnMgaW4gdGhhdCBjb250ZXh0LiBOZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIHNvbWV0aGluZyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoxOTo1My4zNzA3NjU3NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0OTcxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5fZGV2X2dldFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2RldmluZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9kZXZpbmV0LmM9MjM3ND1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDUtXFx0XFx0aWYgKGRldilcXG5uZXQvaXB2NC9kZXZpbmV0LmM6MjQwNjpcXHRcXHRcXHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDctXFx0XFx0aWYgKCFpbl9kZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjE5OjUzLjQyMDI2NjIxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDQ0NzgyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGluX2Rldl9nZXRgIFVzYWdlKipcblxuSG1tLCB0aGF0J3MgdW5leHBlY3RlZC4gTXkgaW50dWl0aW9uLCBiYXNlZCBvbiBwYXN0IHdvcmsgaW4gbmV0d29ya2luZywgd2FzIHRoYXQgYGluX2Rldl9nZXRgIHdhcyBhIGJpdCBtb3JlIHViaXF1aXRvdXMgdGhhbiB3aGF0IEknbSBzZWVpbmcuIEl0IHN1Z2dlc3RzIHRoZXJlJ3MgbGVzcyByZWxpYW5jZSBvbiBpdCB0aGFuIEknZCBpbml0aWFsbHkgYXNzdW1lZC4gVGhpcyB3YXJyYW50cyBkZWVwZXIgaW52ZXN0aWdhdGlvbi5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJIG5lZWQgdG8gbG9vayBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGRlbHZlIGludG8gdGhlIGNvcmUgSUdNUCBpbXBsZW1lbnRhdGlvbi4gYG5ldC9pcHY0L2lnbXAuY2AgaXMgYSBwcmltZSBjYW5kaWRhdGUsIGFzIG11bHRpY2FzdCBtZW1iZXJzaGlwIG1hbmFnZW1lbnQgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgdGhpcyBraW5kIG9mIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCB3aXRoIHNvbWUgcmVndWxhcml0eS4gQnV0IEkgc2hvdWxkIGV4cGFuZCB0aGUgc2VhcmNoIHRvIG90aGVyIGFyZWFzIHRoYXQgaW50ZXJhY3Qgd2l0aCBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBvciBJUCBhZGRyZXNzIG1hbmFnZW1lbnQsIGp1c3QgdG8gYmUgdGhvcm91Z2guIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGFjdHVhbGx5IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoxOTo1Ni42MjQ3NDg4NDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTU5NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluX2Rldl9nZXRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZGV2aW5ldC5jPTIzNzQ9c3RhdGljIGludCBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0yNDA1LVxcdFxcdGlmIChkZXYpXFxubmV0L2lwdjQvZGV2aW5ldC5jOjI0MDY6XFx0XFx0XFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0yNDA3LVxcdFxcdGlmICghaW5fZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoxOTo1Ni42NzQ3MTMyMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4NjI2NjI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBpbl9kZXZfZ2V0YCBVc2FnZSoqXG5cbkFscmlnaHQsIHNvIGBpbl9kZXZfZ2V0YCBhcHBlYXJzIHRvIGJlIHByZXR0eSBuYXJyb3dseSBzY29wZWQuIEV4Y2VsbGVudCEgTGVzcyBjb2RlIHRvIHNjcnV0aW5pemUgYW5kIGxlc3MgcG90ZW50aWFsIGZvciB3aWRlc3ByZWFkIGltcGFjdCBpZiBzb21ldGhpbmcncyBhbWlzcy4gTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIGNvbmZpcm1lZCDigJMgaXQncyBub3QgYSBkZWVwbHkgZW1iZWRkZWQgZnVuY3Rpb24gYWNyb3NzIHRoZSBlbnRpcmUgbmV0d29ya2luZyBzdGFjaywgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIHRhcmdldGVkIGRlYnVnZ2luZy5cblxuTm93LCBpbnN0ZWFkIG9mIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdGhlIGRpcmVjdCBjYWxscywgSSBzaG91bGQgcmVhbGx5IHNoaWZ0IGZvY3VzIGFuZCBkaWcgaW50byBob3cgdGhvc2Ugc3BlY2lmaWMgY2FsbGluZyBwb2ludHMgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIGNyaXRpY2FsIFJDVSBzeW5jaHJvbml6YXRpb24uIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gZWl0aGVyIGBfX2luX2Rldl9nZXRfcmN1YCBvciBgX19pbl9kZXZfZ2V0X3J0bmxgLiBVbmRlcnN0YW5kaW5nIHdoaWNoIG9mIHRoZXNlIHR3byBpcyB0aGUgZG9taW5hbnQgdXNhZ2Ugd2lsbCBkZXRlcm1pbmUgaG93IGRlZXBseSBJIG5lZWQgdG8gZ28gdG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBoYXBwZW5pbmcuIEnigJlsbCBzdGFydCB3aXRoIHdoaWNoZXZlciBpcyBlYXNpZXIgdG8gbmF2aWdhdGUgZ2l2ZW4gdGhpcyBsaW1pdGVkIGluZm9ybWF0aW9uLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIHdoZXJlIHRoZSBib3R0bGVuZWNrcyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG1pZ2h0IGJlIGx1cmtpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTAzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6MDAuMDYwOTgyOTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjcyNDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faW5fZGV2X2dldF9yY3VcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvYXJwLmM9MjIzPXN0YXRpYyBpbnQgYXJwX2NvbnN0cnVjdG9yKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKVxcbi0tXFxubmV0L2lwdjQvYXJwLmMtMjM1LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2NC9hcnAuYzoyMzY6XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2FycC5jLTIzNy1cXHRpZiAoIWluX2Rldikge1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9MzMzPXN0YXRpYyB2b2lkIGFycF9zb2xpY2l0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvYXJwLmMtMzQzLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2NC9hcnAuYzozNDQ6XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2FycC5jLTM0NS1cXHRpZiAoIWluX2Rldikge1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9NDc0PXN0YXRpYyBpbmxpbmUgaW50IGFycF9md2RfcHJveHkoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxcbi0tXFxubmV0L2lwdjQvYXJwLmMtNDkyLVxcbm5ldC9pcHY0L2FycC5jOjQ5MzpcXHRvdXRfZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShydC1cXHUwMDNlZHN0LmRldik7XFxubmV0L2lwdjQvYXJwLmMtNDk0LVxcdGlmIChvdXRfZGV2KVxcbi0tXFxubmV0L2lwdjQvYXJwLmM9NzAyPXN0YXRpYyBpbnQgYXJwX3Byb2Nlc3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9hcnAuYy03MDQtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbm5ldC9pcHY0L2FycC5jOjcwNTpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvYXJwLmMtNzA2LVxcdHN0cnVjdCBhcnBoZHIgKmFycDtcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYz0xMzU5PV9fYmUzMiBpbmV0X3NlbGVjdF9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiBkc3QsIGludCBzY29wZSlcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0xMzY5LVxcdG5ldCA9IGRldl9uZXRfcmN1KGRldik7XFxubmV0L2lwdjQvZGV2aW5ldC5jOjEzNzA6XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0xMzcxLVxcdGlmICghaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTE0MDEtXFx0ICAgIChkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIG1hc3Rlcl9pZHgpKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L2RldmluZXQuYzoxNDAyOlxcdCAgICAoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpKSkge1xcbm5ldC9pcHY0L2RldmluZXQuYy0xNDAzLVxcdFxcdGFkZHIgPSBpbl9kZXZfc2VsZWN0X2FkZHIoaW5fZGV2LCBzY29wZSk7XFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTQxNS1cXG5uZXQvaXB2NC9kZXZpbmV0LmM6MTQxNjpcXHRcXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTE0MTctXFx0XFx0aWYgKCFpbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmM9MTQ4Mj1fX2JlMzIgaW5ldF9jb25maXJtX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTQ5Mi1cXHRmb3JfZWFjaF9uZXRkZXZfcmN1KG5ldCwgZGV2KSB7XFxubmV0L2lwdjQvZGV2aW5ldC5jOjE0OTM6XFx0XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0xNDk0LVxcdFxcdGlmIChpbl9kZXYpIHtcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYz0xOTI4PXN0YXRpYyBpbnQgaW5ldF9kdW1wX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTE5NjEtXFx0XFx0XFx0fVxcbm5ldC9pcHY0L2RldmluZXQuYzoxOTYyOlxcdFxcdFxcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTk2My1cXHRcXHRcXHRpZiAoIWluX2RldilcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0xOTczLVxcdGZvcl9lYWNoX25ldGRldl9kdW1wKHRndF9uZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2lwdjQvZGV2aW5ldC5jOjE5NzQ6XFx0XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0xOTc1LVxcdFxcdGlmICghaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jPTI0MzY9c3RhdGljIGludCBpbmV0X25ldGNvbmZfZHVtcF9kZXZjb25mKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjQ2NS1cXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2lwdjQvZGV2aW5ldC5jOjI0NjY6XFx0XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0yNDY3LVxcdFxcdGlmICghaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jPTI1MDc9c3RhdGljIHZvaWQgZGV2aW5ldF9jb3B5X2RmbHRfY29uZihzdHJ1Y3QgbmV0ICpuZXQsIGludCBpKVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTI1MTQtXFxubmV0L2lwdjQvZGV2aW5ldC5jOjI1MTU6XFx0XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0yNTE2LVxcdFxcdGlmIChpbl9kZXYgXFx1MDAyNlxcdTAwMjYgIXRlc3RfYml0KGksIGluX2Rldi1cXHUwMDNlY25mLnN0YXRlKSlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTI3Mz1fX2JlMzIgZmliX2NvbXB1dGVfc3BlY19kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTI4Ni1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoyODc6XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTI4OC1cXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz02NTc9c3RhdGljIF9fYmUzMiBpY21wX2V4dF9paW9fYWRkcjRfZmluZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTY2MS1cXG5uZXQvaXB2NC9pY21wLmM6NjYyOlxcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcXG5uZXQvaXB2NC9pY21wLmMtNjYzLVxcdGlmICghaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jPTEyOTE9Ym9vbCBpY21wX2J1aWxkX3Byb2JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpY21waGRyICppY21waGRyKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTEzODEtXFxubmV0L2lwdjQvaWNtcC5jOjEzODI6XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2ljbXAuYy0xMzgzLVxcdGlmIChpbl9kZXYgXFx1MDAyNlxcdTAwMjYgcmN1X2FjY2Vzc19wb2ludGVyKGluX2Rldi1cXHUwMDNlaWZhX2xpc3QpKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTM2MT1zdGF0aWMgX19iZTMyIGlnbXB2M19nZXRfc3JjYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTM2My17XFxubmV0L2lwdjQvaWdtcC5jOjM2NDpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvaWdtcC5jLTM2NS1cXHRjb25zdCBzdHJ1Y3QgaW5faWZhZGRyICppZmE7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTEwMz1pbnQgaWdtcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xMTE3LVxcbm5ldC9pcHY0L2lnbXAuYzoxMTE4OlxcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcXG5uZXQvaXB2NC9pZ21wLmMtMTExOS1cXHRpZiAoIWluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yODk0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX21jX2xpc3QgKmlnbXBfbWNfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTI5MDMtXFxubmV0L2lwdjQvaWdtcC5jOjI5MDQ6XFx0XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShzdGF0ZS1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2NC9pZ21wLmMtMjkwNS1cXHRcXHRpZiAoIWluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yOTE2PXN0YXRpYyBzdHJ1Y3QgaXBfbWNfbGlzdCAqaWdtcF9tY19nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGlwX21jX2xpc3QgKmltKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTI5MjYtXFx0XFx0fVxcbm5ldC9pcHY0L2lnbXAuYzoyOTI3OlxcdFxcdHN0YXRlLVxcdTAwM2Vpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY0L2lnbXAuYy0yOTI4LVxcdFxcdGlmICghc3RhdGUtXFx1MDAzZWluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0zMDI3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3NmX2xpc3QgKmlnbXBfbWNmX2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0zMDM3LVxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmlkZXY7XFxubmV0L2lwdjQvaWdtcC5jOjMwMzg6XFx0XFx0aWRldiA9IF9faW5fZGV2X2dldF9yY3Uoc3RhdGUtXFx1MDAzZWRldik7XFxubmV0L2lwdjQvaWdtcC5jLTMwMzktXFx0XFx0aWYgKHVubGlrZWx5KCFpZGV2KSlcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0zMDU2PXN0YXRpYyBzdHJ1Y3QgaXBfc2ZfbGlzdCAqaWdtcF9tY2ZfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBpcF9zZl9saXN0ICpwc2YpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMzA2OS1cXHRcXHRcXHR9XFxubmV0L2lwdjQvaWdtcC5jOjMwNzA6XFx0XFx0XFx0c3RhdGUtXFx1MDAzZWlkZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY0L2lnbXAuYy0zMDcxLVxcdFxcdFxcdGlmICghc3RhdGUtXFx1MDAzZWlkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTI2OT1pcF9yY3Zfb3B0aW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yOTUtXFx0aWYgKHVubGlrZWx5KG9wdC1cXHUwMDNlc3JyKSkge1xcbm5ldC9pcHY0L2lwX2lucHV0LmM6Mjk2OlxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTI5Ny1cXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmM9MzYxPXN0YXRpYyBpbnQgaXBfcmN2X2ZpbmlzaF9jb3JlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtNDExLVxcdH0gZWxzZSB7XFxubmV0L2lwdjQvaXBfaW5wdXQuYzo0MTI6XFx0XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2lwX2lucHV0LmMtNDEzLVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy00NDEtXFx0XFx0ICAgc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKSB7XFxubmV0L2lwdjQvaXBfaW5wdXQuYzo0NDI6XFx0XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2lwX2lucHV0LmMtNDQzLVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3Rwcm94eV9pcHY0LmM9NTA9X19iZTMyIG5mX3Rwcm94eV9sYWRkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHVzZXJfbGFkZHIsIF9fYmUzMiBkYWRkcilcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl90cHJveHlfaXB2NC5jLTU5LVxcdGxhZGRyID0gMDtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfdHByb3h5X2lwdjQuYzo2MDpcXHRpbmRldiA9IF9faW5fZGV2X2dldF9yY3Uoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY0L25ldGZpbHRlci9uZl90cHJveHlfaXB2NC5jLTYxLVxcdGlmICghaW5kZXYpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTc3Mz1zdGF0aWMgdm9pZCBfX2lwX2RvX3JlZGlyZWN0KHN0cnVjdCBydGFibGUgKnJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTc5Ny1cXG5uZXQvaXB2NC9yb3V0ZS5jOjc5ODpcXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy03OTktXFx0aWYgKCFpbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTkwMj12b2lkIGlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtOTExLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2NC9yb3V0ZS5jOjkxMjpcXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHJ0LVxcdTAwM2Vkc3QuZGV2KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTkxMy1cXHRpZiAoIWluX2RldiB8fCAhSU5fREVWX1RYX1JFRElSRUNUUyhpbl9kZXYpKSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTk2NT1zdGF0aWMgaW50IGlwX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTk4Mi1cXG5uZXQvaXB2NC9yb3V0ZS5jOjk4MzpcXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy05ODQtXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE3NjY9aXBfcm91dGVfaW5wdXRfbWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE3Njgte1xcbm5ldC9pcHY0L3JvdXRlLmM6MTc2OTpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy0xNzcwLVxcdHVuc2lnbmVkIGludCBmbGFncyA9IFJUQ0ZfTVVMVElDQVNUO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xODM2PV9fbWtyb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xODUwLVxcdC8qIGdldCBhIHdvcmtpbmcgcmVmZXJlbmNlIHRvIHRoZSBvdXRwdXQgZGV2aWNlICovXFxubmV0L2lwdjQvcm91dGUuYzoxODUxOlxcdG91dF9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy0xODUyLVxcdGlmICghb3V0X2Rldikge1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yMjE1PWlwX3JvdXRlX3VzZV9oaW50KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yMjE5LVxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbm5ldC9pcHY0L3JvdXRlLmM6MjIyMDpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy0yMjIxLVxcdHN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShoaW50KTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjI4Nz1pcF9yb3V0ZV9pbnB1dF9zbG93KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yMjkxLVxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbm5ldC9pcHY0L3JvdXRlLmM6MjI5MjpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy0yMjkzLVxcdHN0cnVjdCBmbG93X2tleXMgKmZsa2V5cyA9IE5VTEwsIF9mbGtleXM7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTI1MTg9aXBfcm91dGVfaW5wdXRfcmN1KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yNTM0LVxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbm5ldC9pcHY0L3JvdXRlLmM6MjUzNTpcXHRcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy0yNTM2LVxcdFxcdGludCBvdXIgPSAwO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yNTQ3LVxcbm5ldC9pcHY0L3JvdXRlLmM6MjU0ODpcXHRcXHRcXHRsM19pbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI1NDktXFx0XFx0XFx0aWYgKGwzX2luX2RldilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjU4Nj1zdGF0aWMgc3RydWN0IHJ0YWJsZSAqX19ta3JvdXRlX291dHB1dChjb25zdCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yNTk3LVxcbm5ldC9pcHY0L3JvdXRlLmM6MjU5ODpcXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldl9vdXQpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMjU5OS1cXHRpZiAoIWluX2RldilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjczNj1zdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2hfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yODA0LVxcdFxcdC8qIFJBQ0U6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBpbmV0X3NlbGVjdF9hZGRyIGluc3RlYWQuICovXFxubmV0L2lwdjQvcm91dGUuYzoyODA1OlxcdFxcdGlmICghKGRldl9vdXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB8fCAhX19pbl9kZXZfZ2V0X3JjdShkZXZfb3V0KSkge1xcbm5ldC9pcHY0L3JvdXRlLmMtMjgwNi1cXHRcXHRcXHRydGggPSBFUlJfUFRSKC1FTkVUVU5SRUFDSCk7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0yNzYwPWVudW0gc2tiX2Ryb3BfcmVhc29uIHVkcF92NF9lYXJseV9kZW11eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjc3OS1cXHRpZiAoc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKSB7XFxubmV0L2lwdjQvdWRwLmM6Mjc4MDpcXHRcXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2NC91ZHAuYy0yNzgxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMDowMC4xMTM2NjA2ODVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1MTc3MzU3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBOZXR3b3JraW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGl0J3MgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGlzc3VlIHdpdGhpbiB0aGUgYGluX2Rldl9nZXRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3Mgc3dhcHBpbmcgb3V0IGEgc2ltcGxlIGByZWZjb3VudF9pbmNgIGZvciBgcmVmY291bnRfaW5jX25vdF96ZXJvYC4gIFRoaXMgaXMgYSBkZWZpbml0ZSBjaGFuZ2UgaW4gaG93IHRoZSBmdW5jdGlvbiBiZWhhdmVzLCBzaW5jZSBpdCBub3cgcmV0dXJucyBgTlVMTGAgaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyB6ZXJvICpiZWZvcmUqIGluY3JlbWVudGluZyBpdCwgcmF0aGVyIHRoYW4gaW5jcmVtZW50aW5nIGFuZCBwb3RlbnRpYWxseSBjYXVzaW5nIGFuIGlzc3VlIGRvd24gdGhlIGxpbmUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYSBzbWFsbCBmdW5jdGlvbmFsIGNoYW5nZSwgYnV0IGxldCBtZSBjb25zaWRlciBmdXp6aW5nLiAgVGhlIHByb21wdCdzIGNyaXRlcmlhIGFyZSBpbiBteSBtaW5kOiAgaXMgaXQgYSBkb2N1bWVudGF0aW9uIGNoYW5nZT8gTm8uICBQdXJlbHkgZGVjb3JhdGl2ZT8gTm9wZS4gTnVtZXJpYyBjb25zdGFudHM/IE5vLiAgVW5yZWFjaGFibGUgY29kZSBwYXRocz8gIERlZmluaXRlbHkgbm90LCBpdCdzIGNvcmUgbmV0d29ya2luZyEgVmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHNwZWNpYWwgaGFyZHdhcmU/ICBOb3BlLCB0aGlzIGlzIGdlbmVyYWwgbmV0d29yayBzdGFjayBjb2RlLiAgVGVhcmRvd24gY2FsbGJhY2tzIG9ubHkgcnVuIG9uIFBDSSBob3QtdW5wbHVnPyBObyB3YXkuXG5cblRoaXMgcGF0Y2ggKmRvZXMqIGFsdGVyIGV4ZWN1dGlvbiBmbG93IGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgcmV0dXJuIHZhbHVlIGJhc2VkIG9uIHJlZmNvdW50IGNvbmRpdGlvbnMuICBJdCAqaXMqIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHNpbmNlIGl0J3MgY29yZSBuZXR3b3JraW5nIGNvZGUuIFNvLCB0aGUgcGF0Y2ggc2VlbXMgbGlrZSBpdCdzIFdvcnRoRnV6emluZz10cnVlLlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgSSB0YXJnZXQgZm9yIGZ1enppbmcgYmFzZWQgb24gdGhpcyBjaGFuZ2U/IFRoZSBjb2RlIGl0c2VsZiBpcyBpbmxpbmVkLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHRoYXQgY2FsbCBgaW5fZGV2X2dldGAuIExldCdzIHRyYWNlIHRoZSBjYWxsZXJzLi4uIE9rYXksIGxvb2tpbmcgYXQgdGhlIGNhbGxzIEknbSBzZWVpbmc6XG4tIGBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgIChzdGF0aWMpIC1cdTAwM2UgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCAtXHUwMDNlIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCAtXHUwMDNlIGBicl9tdWx0aWNhc3Rfc2V0X3JvdXRlcmAgLVx1MDAzZSBgYnJfbXVsdGljYXN0X3JvdXRlcl9zZXRgIC1cdTAwM2UgYGJyX2Rldl9uZXdsaW5rYCBvciBgYnJfY2hhbmdlbGlua2Bcbi0gYGJyX2lwNF9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgIChzdGF0aWMpIC1cdTAwM2UgYGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AgLVx1MDAzZSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAgLVx1MDAzZSAuLi5cbi0gYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAgKHN0YXRpYykgLVx1MDAzZSBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCBpcyBjYWxsZWQgYnkgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmA/IE5vLCBpdCdzIGEgbmV0bGluayBjYWxsYmFjay5cblxuVGltZSB0byBkaXZlIGludG8gYG5ldC9pcHY0L2RldmluZXQuY2AgYW5kIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZnV6eiB0YXJnZXRzIGJhc2VkIG9uIHRob3NlIGNhbGwgY2hhaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg3MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMDoxMC42MzEzOTkzODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTY3MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9kZXZpbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZGV2aW5ldC5jPTIzMzU9c3RhdGljIGludCBpbmV0X25ldGNvbmZfdmFsaWRfZ2V0X3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTIzNzMtXFxubmV0L2lwdjQvZGV2aW5ldC5jOjIzNzQ6c3RhdGljIGludCBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjM3NS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmM9Mjk1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgZGV2aW5ldF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTI5NjAtXFx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX0dFVE5FVENPTkYsXFxubmV0L2lwdjQvZGV2aW5ldC5jOjI5NjE6XFx0IC5kb2l0ID0gaW5ldF9uZXRjb25mX2dldF9kZXZjb25mLCAuZHVtcGl0ID0gaW5ldF9uZXRjb25mX2R1bXBfZGV2Y29uZixcXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjk2Mi1cXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUQgfCBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjEwLjY4NDU3MTUxOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODQyODU3MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIE5ldGxpbmsgQ2FsbGJhY2sgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAuIFRoYXQncyB0aGUgbmV0bGluayBjYWxsYmFjayBmb3IgYFJUTV9HRVRORVRDT05GYCwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWxseSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiUGVyZmVjdCwgbGV0J3Mgc3RhcnQgdGhlcmUuXCJcblxuSGFuZyBvbiBhIHNlY29uZOKApiBpdCdzIHN0YXRpYyEgVGhlIHN0eWxlIGd1aWRlICpzcGVjaWZpY2FsbHkqIHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeSBwb2ludHMuIFRoZSBhcmd1bWVudCBpcyB0aGF0IHN0YXRpYyBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBnZXQgaW5saW5lZCwgZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBUaGlzIG1ha2VzIHRoZW0gbGVzcyBhY2Nlc3NpYmxlIGZvciB0aGluZ3MgbGlrZSBkZWJ1Z2dpbmcgYW5kIHRyYWNpbmcuIEJ1dCB3YWl0Li4uIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgZGV2aW5ldF9ydG5sX21zZ19oYW5kbGVyc2AuIFRoYXQgbWVhbnMgaXQgKndvbid0KiBiZSBpbmxpbmVkIGFuZCAqZG9lcyogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBTbywgSSBuZWVkIHRvIHJldGhpbmsgdGhpcywgYWx0aG91Z2ggaXQncyAqdGVjaG5pY2FsbHkqIGNvbXBsaWFudCwgdGhlIHNwaXJpdCBvZiB0aGUgcnVsZSBpcyB0byBhdm9pZCBzdGF0aWMuXG5cbkFscmlnaHQsIHNvIHRoZSBwcm9tcHQgaXMgXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcIi4gVG8gc3RheSB0cnVlIHRvIHRoZSBzcGlyaXQgb2YgdGhlIHJ1bGUsIGV2ZW4gaWYgaXQncyB0ZWNobmljYWxseSBmaW5lLCBJJ2QgbGlrZSB0byBpZGVudGlmeSAqb3RoZXIqIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIEhtbSwgbGV0J3MgZXhwbG9yZSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIEknbGwgaGF2ZSBhIGxvb2sgYXQgdGhhdCBvbmUgbmV4dCB0byBjaGVjayBpZiBpdCdzIG1vcmUgYXBwcm9wcmlhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTU4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjE2LjUyNzQzMTM2NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzNzI2MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X3RvZ2dsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyLmM9Mjk0PWludCBicl9ib29sb3B0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gYnJfYm9vbG9wdF9pZCBvcHQsIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmMtMzAzLVxcdGNhc2UgQlJfQk9PTE9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HOlxcbm5ldC9icmlkZ2UvYnIuYzozMDQ6XFx0XFx0ZXJyID0gYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKGJyLCBvbiwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyLmMtMzA1LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTQ2PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE2MTpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNjIte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTk5PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAwLXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDE6XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwMi19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMDQ9dm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjA1LXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDY6XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDctfVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00Mjc1PXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwMC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzMDE6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzAyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM0NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNDY6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM1OC1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNTk6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2MC1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjItXFx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjM6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY0LX1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjUtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Ny1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzOTktXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2bGFuLCBcXHUwMDI2dmctXFx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDAwOlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDAxLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDA0LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQwNTpib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDYte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDE1LVxcdHZsYW4tXFx1MDAzZXByaXZfZmxhZ3MgXj0gQlJfVkxGTEFHX0dMT0JBTF9NQ0FTVF9FTkFCTEVEO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQxNjpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4odmxhbiwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxNy1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY1ND1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjY0LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY2NTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY2Ni1cXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMjk1PXN0YXRpYyBpbnQgYnJfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNDQ5LVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE0NTA6XFx0XFx0ZXJyID0gYnJfbXVsdGljYXN0X3RvZ2dsZShiciwgbWNhc3Rfc25vb3BpbmcsIGV4dGFjayk7XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQ1MS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTkyPWludCBicl9tdWx0aWNhc3Rfc2V0X3ZsYW5fcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IG1jYXN0X3JvdXRlcik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTkzOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTk0LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDY5PXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDcyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3Mzpib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NDY9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTAtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1MTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTItXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTUtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1NjpzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTYyLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NjM6c3RhdGljIGlubGluZSBib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTY0LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9NDE2PXN0YXRpYyBzc2l6ZV90IG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTQxOS17XFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjQyMDpcXHRyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIGJyX211bHRpY2FzdF90b2dnbGUpO1xcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy00MjEtfVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MjAzPXN0YXRpYyB2b2lkIGJyX3ZsYW5fcHV0X21hc3RlcihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptYXN0ZXJ2KVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjE0LVxcdFxcdF9fdmxhbl9kZWxfbGlzdChtYXN0ZXJ2KTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTU6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihtYXN0ZXJ2LCBmYWxzZSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjE2LVxcdFxcdGJyX211bHRpY2FzdF9jdHhfZGVpbml0KFxcdTAwMjZtYXN0ZXJ2LVxcdTAwM2Vicl9tY2FzdF9jdHgpO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNTgtXFx0X192bGFuX2ZsYWdzX2NvbW1pdCh2LCBmbGFncyk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MzU5OlxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzYwLVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MzkwPXN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDI3LVxcdFxcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVxcdTAwM2V2aWQpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjQyODpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjktXFx0XFx0YnJfbXVsdGljYXN0X3BvcnRfY3R4X2RlaW5pdChcXHUwMDI2di1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9NzE5PXN0YXRpYyBpbnQgYnJfdmxhbl9hZGRfZXhpc3Rpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzYwLVxcdFxcdCpjaGFuZ2VkID0gdHJ1ZTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3NjE6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCB0cnVlKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjItXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9ODk0PWludCBicl92bGFuX2ZpbHRlcl90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTkyMC1cXHRcXHRicl9pbmZvKGJyLCBcXFwidmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWQsIGF1dG9tYXRpY2FsbHkgZGlzYWJsaW5nIG11bHRpY2FzdCB2bGFuIHNub29waW5nXFxcXG5cXFwiKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo5MjE6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKGJyLCBmYWxzZSwgTlVMTCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTIyLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM9NTUwPXN0YXRpYyBpbnQgYnJfdmxhbl9wcm9jZXNzX2dsb2JhbF9vbmVfb3B0cyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTU2NC1cXHRcXHRtY19zbm9vcGluZyA9IG5sYV9nZXRfdTgodGJbQlJJREdFX1ZMQU5EQl9HT1BUU19NQ0FTVF9TTk9PUElOR10pO1xcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NTY1OlxcdFxcdGlmIChicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHYsICEhbWNfc25vb3BpbmcpKVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTY2LVxcdFxcdFxcdCpjaGFuZ2VkID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6MTYuNTc5ODA2OTIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjE2NzMzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBDb2RlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBhcmVhLiBBbHNvLCBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCBpcyBhIG5ldGxpbmsgY2FsbGJhY2s7IHRob3NlIGFyZSBvZnRlbiBnb29kIGVudHJ5IHBvaW50cyBiZWNhdXNlIHRoZXkncmUgZGlyZWN0bHkgaGFuZGxpbmcgbmV0d29yayBjb25maWd1cmF0aW9uIGNoYW5nZXMuIExldCdzIHN0YXJ0IHdpdGggYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAsIGFuZCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L2lwdjQvZGV2aW5ldC5jYCB0byBzZWUgaWYgaXQncyBzdGF0aWMuIFllcywgaXQncyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgaW1tZWRpYXRlIHVzZWZ1bG5lc3MgYXMgYSB0b3AtbGV2ZWwgZW50cnkgcG9pbnQsIGFsdGhvdWdoIGl0IGJlaW5nIGEgbmV0bGluayBjYWxsYmFjayBtYWtlcyBpdCByZWxldmFudC4gT2theSwgd2hhdCBhYm91dCBgaW5ldF9uZXRjb25mX2R1bXBfZGV2Y29uZmA/IEFuZCwgbm9wZSwgdGhhdCBvbmUgaXMgYWxzbyBzdGF0aWMuIEFuZCBgaW5ldF9kdW1wX2FkZHJgIGlzIHN0YXRpYyB0b28uIEFscmlnaHQsIHRoYXQncyBub3Qgd2hhdCBJIHdhcyBob3BpbmcgZm9yLiBXaGF0IGFib3V0IGBpbmV0X3NlbGVjdF9hZGRyYD8gQWgsICp0aGF0KiBvbmUgaXMgbm9uLXN0YXRpYy4gVGltZSB0byBkaWcgaW50byBgaW5ldF9zZWxlY3RfYWRkcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDQ5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjIxLjU0MTQ4MjMyMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2MjQ3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9zZWxlY3RfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvYXJwLmM9MzMzPXN0YXRpYyB2b2lkIGFycF9zb2xpY2l0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvYXJwLmMtMzczLVxcdGlmICghc2FkZHIpXFxubmV0L2lwdjQvYXJwLmM6Mzc0OlxcdFxcdHNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXYsIHRhcmdldCwgUlRfU0NPUEVfTElOSyk7XFxubmV0L2lwdjQvYXJwLmMtMzc1LVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jPTEzNDM9c3RhdGljIF9fYmUzMiBpbl9kZXZfc2VsZWN0X2FkZHIoY29uc3Qgc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTEzNTgtXFxubmV0L2lwdjQvZGV2aW5ldC5jOjEzNTk6X19iZTMyIGluZXRfc2VsZWN0X2FkZHIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyIGRzdCwgaW50IHNjb3BlKVxcbm5ldC9pcHY0L2RldmluZXQuYy0xMzYwLXtcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0xNDI3LX1cXG5uZXQvaXB2NC9kZXZpbmV0LmM6MTQyODpFWFBPUlRfU1lNQk9MKGluZXRfc2VsZWN0X2FkZHIpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0xNDI5LVxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MjczPV9fYmUzMiBmaWJfY29tcHV0ZV9zcGVjX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMzA3LVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjMwODpcXHRyZXR1cm4gaW5ldF9zZWxlY3RfYWRkcihkZXYsIGlwX2hkcihza2IpLVxcdTAwM2VzYWRkciwgc2NvcGUpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTMwOS19XFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MTMxNT1fX2JlMzIgZmliX2luZm9fdXBkYXRlX25oY19zYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfbmhfY29tbW9uICpuaGMsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyMS1cXHRpZiAobmhjLVxcdTAwM2VuaGNfZmFtaWx5ICE9IEFGX0lORVQpXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzMjI6XFx0XFx0cmV0dXJuIGluZXRfc2VsZWN0X2FkZHIobmhjLVxcdTAwM2VuaGNfZGV2LCAwLCBzY29wZSk7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzMjMtXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzMjQtXFx0bmggPSBjb250YWluZXJfb2YobmhjLCBzdHJ1Y3QgZmliX25oLCBuaF9jb21tb24pO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzI1OlxcdHNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihuaC1cXHUwMDNlZmliX25oX2RldiwgbmgtXFx1MDAzZWZpYl9uaF9ndzQsIHNjb3BlKTtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyNi1cXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMjIzPXZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjUxLVxcdFxcdGVsc2VcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjI1MjpcXHRcXHRcXHRmbDQtXFx1MDAzZXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihsM21kZXYsIDAsIFJUX1NDT1BFX0xJTkspO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjUzLVxcdH1cXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz04MTQ9dm9pZCBfX2ljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvLFxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTkzNi1cXHRcXHRpZiAoZGV2KVxcbm5ldC9pcHY0L2ljbXAuYzo5Mzc6XFx0XFx0XFx0c2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldiwgaXBoLVxcdTAwM2VzYWRkcixcXG5uZXQvaXB2NC9pY21wLmMtOTM4LVxcdFxcdFxcdFxcdFxcdFxcdCBSVF9TQ09QRV9MSU5LKTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTMxMz12b2lkIGlwX3J0X2dldF9zb3VyY2UodTggKmFkZHIsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydGFibGUgKnJ0KVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xMzM0LVxcdFxcdGVsc2VcXG5uZXQvaXB2NC9yb3V0ZS5jOjEzMzU6XFx0XFx0XFx0c3JjID0gaW5ldF9zZWxlY3RfYWRkcihydC1cXHUwMDNlZHN0LmRldixcXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMzYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHJ0X25leHRob3AocnQsIGlwaC1cXHUwMDNlZGFkZHIpLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yNzM2PXN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9rZXlfaGFzaF9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI4MDMtXFxubmV0L2lwdjQvcm91dGUuYzoyODA0OlxcdFxcdC8qIFJBQ0U6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBpbmV0X3NlbGVjdF9hZGRyIGluc3RlYWQuICovXFxubmV0L2lwdjQvcm91dGUuYy0yODA1LVxcdFxcdGlmICghKGRldl9vdXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB8fCAhX19pbl9kZXZfZ2V0X3JjdShkZXZfb3V0KSkge1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yODEyLVxcdFxcdFxcdGlmICghZmw0LVxcdTAwM2VzYWRkcilcXG5uZXQvaXB2NC9yb3V0ZS5jOjI4MTM6XFx0XFx0XFx0XFx0Zmw0LVxcdTAwM2VzYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCxcXG5uZXQvaXB2NC9yb3V0ZS5jLTI4MTQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgUlRfU0NPUEVfTElOSyk7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI4MTgtXFx0XFx0XFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGZsNC1cXHUwMDNlZGFkZHIpKVxcbm5ldC9pcHY0L3JvdXRlLmM6MjgxOTpcXHRcXHRcXHRcXHRmbDQtXFx1MDAzZXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXZfb3V0LCAwLFxcbm5ldC9pcHY0L3JvdXRlLmMtMjgyMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBmbDQtXFx1MDAzZWZsb3dpNF9zY29wZSk7XFxubmV0L2lwdjQvcm91dGUuYy0yODIxLVxcdFxcdFxcdGVsc2UgaWYgKCFmbDQtXFx1MDAzZWRhZGRyKVxcbm5ldC9pcHY0L3JvdXRlLmM6MjgyMjpcXHRcXHRcXHRcXHRmbDQtXFx1MDAzZXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXZfb3V0LCAwLFxcbm5ldC9pcHY0L3JvdXRlLmMtMjgyMy1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBSVF9TQ09QRV9IT1NUKTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjg2Mi1cXHRcXHRcXHRpZiAoZmw0LVxcdTAwM2VzYWRkciA9PSAwKVxcbm5ldC9pcHY0L3JvdXRlLmM6Mjg2MzpcXHRcXHRcXHRcXHRmbDQtXFx1MDAzZXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXZfb3V0LCAwLFxcbm5ldC9pcHY0L3JvdXRlLmMtMjg2NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBSVF9TQ09QRV9MSU5LKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6MjEuNTk0MTEzMTg2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjQxMTY0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqUmV2aWV3aW5nIHRoZSBgaW5fZGV2X2dldGAgYW5kIGBpbmV0X3NlbGVjdF9hZGRyYCBSZWxhdGlvbnNoaXAqKlxuXG5Pa2F5LCBzbyBJIHdhcyByZXZpZXdpbmcgdGhlIGNvZGUgYW5kIGluaXRpYWxseSB0aG91Z2h0IGBpbmV0X3NlbGVjdF9hZGRyYCB3YXMgdXNpbmcgYF9faW5fZGV2X2dldF9yY3VgLCBub3QgdGhlIHJlZ3VsYXIgYGluX2Rldl9nZXRgLiBUaGF0IGZlbHQgcmlnaHQsIGJhc2VkIG9uIHRoZSBjb250ZXh0IGFuZCB0eXBpY2FsIHVzZSBjYXNlcy4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIHBhdGNoIOKAkyBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgYWN0dWFsbHkgKm1vZGlmaWVzKiBgaW5fZGV2X2dldGAgaXRzZWxmISBUaGF0J3MgYSBkaWZmZXJlbnQgc3RvcnkuIEdpdmVuIHRoZSBzY29wZSBvZiB0aGlzLCBJIG5lZWQgdG8gdGhvcm91Z2hseSByZS1leGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBpbl9kZXZfZ2V0YCBub3cgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGNvbnNlcXVlbmNlcyB3aXRoIHRoaXMgY2hhbmdlLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29yZSBmdW5jdGlvbiBtb2RpZmljYXRpb24uIFRpbWUgdG8gZ28gYmFjayBhbmQgbWV0aG9kaWNhbGx5IHRyYWNlIGFsbCB0aGUgY2FsbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NjMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMDoyNi4xNTgyMzIxNjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjA2NDA3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5fZGV2X2dldFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jPTMyMzU9c3RhdGljIGludCBwaWNrX2xvY2FsX2lwYWRkcnMoc3RydWN0IGM0aXdfZGV2ICpkZXYsIHN0cnVjdCBpd19jbV9pZCAqY21faWQpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYy0zMjQyLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jOjMyNDM6XFx0aW5kID0gaW5fZGV2X2dldChkZXYtXFx1MDAzZXJkZXYubGxkaS5wb3J0c1swXSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0NC1cXHRpZiAoIWluZClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jPTE3NDQ9c3RhdGljIGludCBpcmRtYV9hZGRfbXFoXzQoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNzY0LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jOjE3NjU6XFx0XFx0aWRldiA9IGluX2Rldl9nZXQoaXBfZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNzY2LVxcdFxcdGlmICghaWRldilcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jPTMyMD1zdGF0aWMgYm9vbCBpcG9pYl9pc19kZXZfbWF0Y2hfYWRkcl9yY3UoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMzMwLVxcdGNhc2UgQUZfSU5FVDpcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYzozMzE6XFx0XFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTMzMi1cXHRcXHRpZiAoIWluX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzIzMD1uZXR4ZW5fY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMjM4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MzIzOTpcXHRpbmRldiA9IGluX2Rldl9nZXQoZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTMyNDAtXFx0aWYgKCFpbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYz00MDU0PXFsY25pY19jb25maWdfaW5kZXZfYWRkcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMtNDA1OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmM6NDA2MDpcXHRpbmRldiA9IGluX2Rldl9nZXQoZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMtNDA2MS1cXHRpZiAoIWluZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg9MjM3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGluX2RldmljZSAqX19pbl9kZXZfZ2V0X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQxLVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oOjI0MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaC0yNDMte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTU2PXN0YXRpYyB2b2lkIGJyX2lwNF9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTU3LXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxNTg6XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChici1cXHUwMDNlZGV2KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxNTktXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxODc9c3RhdGljIHZvaWQgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTg4LXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxODk6XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChici1cXHUwMDNlZGV2KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxOTAtXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjM3ND1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDUtXFx0XFx0aWYgKGRldilcXG5uZXQvaXB2NC9kZXZpbmV0LmM6MjQwNjpcXHRcXHRcXHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDctXFx0XFx0aWYgKCFpbl9kZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjI4LjIxODg3NzQ4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMDAzMjI0ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaCBvZiBgaW5fZGV2X2dldGAqKlxuXG5Pa2F5LCBzbyBgaW5fZGV2X2dldGAgcG9wcyB1cCBpbiBxdWl0ZSBhIGZldyBwbGFjZXMsIGRvZXNuJ3QgaXQ/IExldCdzIHNlZSwgaXQncyB1c2VkIGluIGBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgLCBgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AsIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgLCBgaXBvaWJfaXNfZGV2X21hdGNoX2FkZHJfcmN1YCwgYHBpY2tfbG9jYWxfaXBhZGRyc2Agd2l0aGluIGN4Z2I0LCBgaXJkbWFfYWRkX21xaF80YCwgYW5kIHRoZW4gYG5ldHhlbl9jb25maWdfaW5kZXZfYWRkcmAgYW5kIGBxbGNuaWNfY29uZmlnX2luZGV2X2FkZHJgLlxuXG5Gcm9tIGEgbmV0d29ya2luZyBwZXJzcGVjdGl2ZSwgaXQncyBtYWlubHkgaW52b2x2ZWQgd2l0aCB0aGUgYnJpZGdlIG11bHRpY2FzdCBjb2RlIChgYnJfbXVsdGljYXN0LmNgKSBhbmQgZGV2aWNlIGNvbmZpZ3VyYXRpb24gY29kZSAoYGRldmluZXQuY2ApLiBTbywgZm9yIHRoZSBicmlkZ2UgbXVsdGljYXN0IHBhdGgsIHRoZSBlbnRyeSBwb2ludCBzZWVtcyB0byBiZSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIEFuZCwgaW4gYGRldmluZXQuY2AsIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGFwcGVhcnMgdG8gYmUgd2hlcmUgaXQncyBiZWluZyBoaXQsIHByb2JhYmx5IHZpYSBuZXRsaW5rLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGltcG9ydGFuY2UsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24uIExldCdzIHN0YXJ0IHdpdGggYGJyX211bHRpY2FzdF90b2dnbGVgIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBpbl9kZXZfZ2V0YCBpcyBiZWluZyB1dGlsaXplZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0MjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6MzQuNDE5MjAzMTIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY1NzI1MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdF90b2dnbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNDY9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNjAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTYxOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE2Mi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxOTk9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIwMTpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIwND12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDUte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIwNjpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwNy19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyNzU9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzAwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMwMTp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMDIte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM0NjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNDcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU4LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM1OTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzYwLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Mi1cXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2MzpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjQtfVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM5OS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MDA6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDEtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDA1OmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTUtXFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDE2OlxcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDE3LVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjU0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2NjQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjY1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjY2LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6MzUuNjg0OTM1MDY5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzEzOTg0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IEZ1bmN0aW9uIENhbGwqKlxuXG5SaWdodCwgc28gYGJyX211bHRpY2FzdF90b2dnbGVgIGlzbid0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCdzIGxpa2VseSBwYXJ0IG9mIHRoZSBvdmVyYWxsIEFQSSBhbmQgYWNjZXNzaWJsZSBmcm9tIG11bHRpcGxlIGxvY2F0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLCBhbmQgSSdsbCBzdGFydCB3aXRoIGBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBiZWNhdXNlIGl0IHN1Z2dlc3RzIHNvbWUgbGluayB3aXRoIElHTVAgc25vb3BpbmcuIExldCdzIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCdzIGFjdHVhbGx5IGludm9rZWQgdGhlcmUgYW5kIHdoYXQgY29udGV4dCBpdCdzIG9wZXJhdGluZyBpbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkLCB0aGUgY29uZGl0aW9uYWwgbG9naWMgc3Vycm91bmRpbmcgdGhlIGNhbGwsIGFuZCBvZiBjb3Vyc2UgYW55IGVycm9yIGhhbmRsaW5nLiBUaGlzIHNob3VsZCBxdWlja2x5IGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIGl0cyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgbXVsdGljYXN0IHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE4MSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjM5LjExNjMzNjQwM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MDAwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTQxPXZvaWQgYnJfbXVsdGljYXN0X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTU1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE1NjpzdGF0aWMgdm9pZCBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1Ny17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxODE9dm9pZCBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTgyLXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxODM6XFx0YnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzKGJyKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODQtXFx0YnJfaXA2X211bHRpY2FzdF9qb2luX3Nub29wZXJzKGJyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6MzkuMTYzMDQxNTI4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTEyNzI5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCoqXG5cbk9rYXksIHNvIGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AgaXMgY2FsbGluZyBgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLCB0aGV5J3JlIGxpa2VseSByZWxhdGVkLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCBpcyBiZWluZyAqY2FsbGVkIGZyb20qLiBJIG5lZWQgdG8gc2VlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucy4gVGltZSB0byBsb29rIGF0IHRoZSBjYWxsIGdyYXBoIGZvciBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBtdWx0aWNhc3Qgc2V0dXAuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgY29udHJvbCBwbGFuZSBpbnRlcmFjdGlvbiwgdGhlIGRhdGEgcGF0aCBoYW5kbGluZywgb3IgcG90ZW50aWFsbHkgYW55IHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGV4aXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY4NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjQzLjk1NDMxNzM5OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MjYzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xNjQ9c3RhdGljIGludCBicl9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzMtXFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3NDpcXHRcXHRicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNzY9c3RhdGljIGlubGluZSB2b2lkIGJyX2lwNl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTgxOnZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE4Mi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2NjU9aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY5OC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2OTk6XFx0LyogYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gY2F1c2VcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MDAtXFx0ICogYW4gTUxEIFJlcG9ydC9MZWF2ZSB0byBiZSBkZWxpdmVyZWQgdG8gYnJfbXVsdGljYXN0X3JjdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcxMi1cXHRcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDcxMzpcXHRcXHRcXHRicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzE0LVxcdFxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTk4MD12b2lkIGJyX211bHRpY2FzdF9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTgxOnZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05ODItdm9pZCBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE0MjE9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MjQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQyNTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MjYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMDo0NC4wMDQwNDY0NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwNTg5MTY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQnJpZGdlIE11bHRpY2FzdCBDb25maWd1cmF0aW9uIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgYnJfZGV2X29wZW5gIGRpcmVjdGx5IGNhbGxzIGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAgZG9lcyBhcyB3ZWxsLiBUaGF0IG1ha2VzIGBicl9kZXZfb3BlbmAgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBzdHJvbmcgaW5pdGlhbCBjYW5kaWRhdGVzIGZvciBlbnRyeSBwb2ludHMgd2hlbiBsb29raW5nIGF0IG11bHRpY2FzdCBzbm9vcGluZyBjb25maWd1cmF0aW9uIHdpdGhpbiBhIGJyaWRnZS4gQWgsIHJpZ2h0LCBgYnJfZGV2X29wZW5gIGlzIHRoZSBgbmRvX29wZW5gIGNhbGxiYWNrIGZvciBicmlkZ2UgZGV2aWNlcywgc28gdGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5UaGVuIEkgc2VlIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBiZWluZyBjYWxsZWQgZnJvbSBib3RoIGBicl9jaGFuZ2VsaW5rYCBhbmQgYG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZWAuICpUaGF0KiBtYWtlcyBgYnJfY2hhbmdlbGlua2AgYSBsaWtlbHkgZW50cnkgcG9pbnQgdG9vLCBhbm90aGVyIGF2ZW51ZSBmb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbiBvciBpbnZlc3RpZ2F0aW9uLlxuXG5Ob3csIGxldCdzIG5vdCBmb3JnZXQgbmV0bGluayBjYWxsYmFja3MuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGNoZWNrIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGFzIGl0J3MgYSBuZXRsaW5rIGNhbGxiYWNrLCB3aGljaCBoaW50cyBhdCB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBJIHNob3VsZCBhbHNvIGRpZyBpbnRvIHRoZSBoYW5kbGVycyBsb2NhdGVkIHdpdGhpbiBgZGV2aW5ldF9ydG5sX21zZ19oYW5kbGVyc2AgaW4gYG5ldC9pcHY0L2RldmluZXQuY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgdXNlZnVsIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjYxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMDo0OS4zMDk5NDA5OTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODk4NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmluZXRfcnRubF9tc2dfaGFuZGxlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvZGV2aW5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2RldmluZXQuYz0yOTQ1PXN0YXRpYyBzdHJ1Y3QgcnRubF9hZl9vcHMgaW5ldF9hZl9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0yOTUyLVxcbm5ldC9pcHY0L2RldmluZXQuYzoyOTUzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBkZXZpbmV0X3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTI5NTQtXFx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX05FV0FERFIsIC5kb2l0ID0gaW5ldF9ydG1fbmV3YWRkcixcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYz0yOTY3PXZvaWQgX19pbml0IGRldmluZXRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTI5NzQtXFxubmV0L2lwdjQvZGV2aW5ldC5jOjI5NzU6XFx0cnRubF9yZWdpc3Rlcl9tYW55KGRldmluZXRfcnRubF9tc2dfaGFuZGxlcnMpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0yOTc2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6NDkuMzU3ODQ3MjkyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNjYwMTE2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCBpcyB0aGUgZnVuY3Rpb24gcmVnaXN0ZXJlZCB0byBoYW5kbGUgYFJUTV9HRVRORVRDT05GYC4gVGhhdCBtYWtlcyBpdCBhIHBvdGVudGlhbCBmb2N1cyBzeW1ib2wuIEl0ICpjb3VsZCogYmUgYSBkZWNlbnQgZW50cnkgcG9pbnQsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhlIHByb21wdCwgXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLi4uXCIgTXkgaW5pdGlhbCBjb25jZXJuIGlzIHRoYXQgaXQncyBgc3RhdGljYC4gSG93ZXZlciwgc2luY2UgaXQncyB1c2VkIGluIGEgZnVuY3Rpb24gcG9pbnRlciBhcnJheSwgaXQgKnNob3VsZG4ndCogYmUgaW5saW5lZCwgYW5kIHRoZXJlZm9yZSBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IHN1aXRhYmxlLiBTdGlsbCwganVzdCB0byBiZSBjb21wbGV0ZWx5IHNhZmUsIG1heWJlIEkgY2FuIGZpbmQgYSBtb3JlIHVuaXZlcnNhbGx5IGFjY2VwdGVkIHN5bWJvbC5cblxuVGhlbiBJIGdldCBkaXN0cmFjdGVkIGFuZCB0aGluayBhYm91dCBgaW5fZGV2X2dldGAsIHdoaWNoIGlzIGFsc28gYSBkZWNlbnQgb3B0aW9uLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBvdGhlciBwbGFjZXMgYmVzaWRlcyBteSBwcmltYXJ5IHVzZS4gTW9zdCBvZiB0aGUgb3RoZXIgbG9jYXRpb25zIGl0J3MgdXNlZCBhcmUgaW4gZGV2aWNlIGRyaXZlcnMsIGxpa2UgYGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdWAgYW5kIGBuZXR4ZW5fY29uZmlnX2luZGV2X2FkZHJgLiBNeSBmb2N1cyBpcyB0aGUgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHdoaWNoIGluY2x1ZGVzIGBicl9tdWx0aWNhc3QuY2AgYW5kIGBkZXZpbmV0LmNgLiBTbyBtYXliZSBgYnJfY2hhbmdlbGlua2Agb3IgYGJyX2Rldl9vcGVuYCB3b3VsZCBiZSBiZXR0ZXIgY2hvaWNlcy4gSSB3aWxsIGNoZWNrIHRoZSBmb3JtZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzQ4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjU0LjcyMzg2MTQ3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODczMzU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9jaGFuZ2VsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTEyNDk9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJyX3BvbGljeVtJRkxBX0JSX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTI5NC1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxMjk1OnN0YXRpYyBpbnQgYnJfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTI5Ni1cXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTU5Mz1zdGF0aWMgaW50IGJyX2Rldl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNjExLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE2MTI6XFx0ZXJyID0gYnJfY2hhbmdlbGluayhkZXYsIHRiLCBkYXRhLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2MTMtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE5NDg9c3RydWN0IHJ0bmxfbGlua19vcHMgYnJfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE5NTUtXFx0Lm5ld2xpbmtcXHRcXHQ9IGJyX2Rldl9uZXdsaW5rLFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE5NTY6XFx0LmNoYW5nZWxpbmtcXHRcXHQ9IGJyX2NoYW5nZWxpbmssXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTk1Ny1cXHQuZGVsbGlua1xcdFxcdD0gYnJfZGV2X2RlbGV0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6NTQuNzcyNjAwNjg1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjI2ODg5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipTdGF0aWMgVmFyaWFibGVzIGluIHRoZSBCcmlkZ2UgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYGJyX2NoYW5nZWxpbmtgLi4uIHRoYXQncyBzdGF0aWMuIEhtbSwgdGhlbiB3aGF0IGFib3V0IGBicl9kZXZfb3BlbmA/ICpUaGF0J3MqIHN0YXRpYyBhcyB3ZWxsLiBJIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGVzZSB0aGluZ3MuIE5vdywgd2hhdCBhYm91dCBgYnJfbXVsdGljYXN0X3RvZ2dsZWA/IE9oLCBpdCBsb29rcyBsaWtlIHRoYXQgb25lIGlzICpub3QqIHN0YXRpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gTGV0J3MgbWFrZSBzdXJlIEknbSBnZXR0aW5nIGEgY29tcGxldGUgcGljdHVyZSBoZXJlIC0gbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGNoZWNrIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCdzIGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLCBpbiBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIEdvdHRhIHRyYWNlIHRoZSB1c2FnZSBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyODMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMDo1OS4xOTUyOTI4MjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Nzk2MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdF90b2dnbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNDY9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNjAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTYxOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE2Mi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxOTk9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIwMTpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIwND12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDUte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIwNjpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwNy19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyNzU9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzAwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMwMTp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMDIte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM0NjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNDcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU4LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM1OTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzYwLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Mi1cXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2MzpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjQtfVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM5OS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MDA6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDEtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDA1OmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTUtXFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDE2OlxcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDE3LVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjU0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2NjQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjY1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjY2LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6NTkuMjQxMDk0MDc0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzExNjc5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBpcyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gTm93LCB3aGF0IGFib3V0IGBpbmV0X3NlbGVjdF9hZGRyYD8gSG1tLCBpdCB1c2VzIGBfX2luX2Rldl9nZXRfcmN1YCwgbm90IHRoZSBmdW5jdGlvbiBpbiB0aGUgcGF0Y2gsIGBpbl9kZXZfZ2V0YC4gUmlnaHQsIHRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgYGluX2Rldl9nZXRgLCBzbyB3ZSBuZWVkIHRvIGZvY3VzIG9uIHdoaWNoIGZ1bmN0aW9ucyBjYWxsIHRoYXQuXG5cbkxldCdzIHNlZSwgdGhlIGNhbGxlcnMgb2YgYGluX2Rldl9nZXRgIGFyZSBxdWl0ZSBhIGZldzpcbiogICBgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzYCwgd2hpY2ggZmxvd3MgdG8gYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCB3aGljaCBnb2VzIHRvIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBhbmQgYGJyX2Rldl9vcGVuYC5cbiogICBgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AsIHdoaWNoIGZsb3dzIHRvIGBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgIHdoaWNoIGdvZXMgdG8gYGJyX211bHRpY2FzdF90b2dnbGVgIGFuZCBgYnJfZGV2X3N0b3BgLlxuKiAgIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgLCB3aGljaCBmbG93cyB0byBgZGV2aW5ldF9ydG5sX21zZ19oYW5kbGVyc2AuXG4qICAgYGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdWAsIHdoaWNoIGZsb3dzIHRvIGBpcG9pYl9tY2FzdF9qb2luYCBhbmQgZ29lcyB0byBgaXBvaWJfbWNhc3Rfam9pbl90YXNrYC5cbiogICBgcGlja19sb2NhbF9pcGFkZHJzYCwgd2hpY2ggZmxvd3MgdG8gYGM0aXdfY29ubmVjdGAsIGFuZCBgYzRpd19jcmVhdGVfbGlzdGVuYC5cbiogICBgaXJkbWFfYWRkX21xaF80YCwgd2hpY2ggZmxvd3MgdG8gYGlyZG1hX2FkZF9tcWhgIHdoaWNoIGdvZXMgdG8gYGlyZG1hX2NyZWF0ZV9saXN0ZW5gIGFuZCBgaXJkbWFfY29ubmVjdGAuXG4qICAgYG5ldHhlbl9jb25maWdfaW5kZXZfYWRkcmAsIHdoaWNoIGZsb3dzIHRvIGBuZXR4ZW5fbmljX3Byb2JlYC5cbiogICBgcWxjbmljX2NvbmZpZ19pbmRldl9hZGRyYCwgd2hpY2ggZmxvd3MgdG8gYHFsY25pY19wcm9iZWAuXG5cblNvLCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAgbG9va3MgbGlrZSBhIHNvbGlkIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQuIEFuZCBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgIGFuZCBgYnJfbXVsdGljYXN0X2xlYXZlX3Nub29wZXJzYCBhcmUgYWxzbyBub24tc3RhdGljLCBieSBleHRlbnNpb24uIEknbGwgbWFrZSBhIG5vdGUgb2YgdGhvc2UuIFRpbWUgdG8gaW52ZXN0aWdhdGUgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3NTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjE6MDYuNTcyMjY0NDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTg5Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNzY9c3RhdGljIGlubGluZSB2b2lkIGJyX2lwNl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTgxOnZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE4Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjA2LjYyMTg2MTk5NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzQ4ODcxMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBCcmlkZ2UgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AsIGBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVgIGFyZSBhbGwgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhlbSB0byBmdW5jdGlvbiBjb3JyZWN0bHkuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGJyb2FkZXIgY29udGV4dC4gSSByZW1lbWJlciBgaW5fZGV2X2dldGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmhgLiBBbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl0J3MgdXRpbGl6ZWQgd2l0aGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gR2l2ZW4gdGhhdCwgSSByZWNhbGwgdGhhdCBgYnJfbXVsdGljYXN0LmNgIHJlbGllcyBvbiBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5ldC9icmlkZ2UvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjg0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMToxMS45NzA3MzY2MjJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTkyNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnPTY9Y29uZmlnIEJSSURHRVxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTM1LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctMzctXFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjEyLjAyNTkzMTY5N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAyMDE3MzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBJbmNsdWRpbmcgYEJSSURHRV9JR01QX1NOT09QSU5HYCBzZWVtcyBsaWtlIGEgc29saWQgY2hvaWNlLCBhbmQsIG9idmlvdXNseSwgdGhlIGJhc2UgYEJSSURHRWAgb3B0aW9uIGlzIGVzc2VudGlhbC4gTm93LCBJJ20gdHJ5aW5nIHRvIHJlbWVtYmVyLi4uIHdoYXQgYWJvdXQgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmA/IFRoYXQncyBidXJpZWQgc29tZXdoZXJlIGluIGBuZXQvaXB2NC9kZXZpbmV0LmNgLCByaWdodD8gQWhhLCB5ZXMsIEknbSBwcmV0dHkgc3VyZSBpdCBpcy4gQW5kIEkgc2VlbSB0byByZWNhbGwgdGhhdCBgZGV2aW5ldC5jYCBvbmx5IGdldHMgY29tcGlsZWQgaWYgYENPTkZJR19JTkVUYCBpcyBlbmFibGVkIOKAkyBhIGNydWNpYWwgZGVwZW5kZW5jeSB0byBrZWVwIGluIG1pbmQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpcm0gdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI3NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjE1LjcyNzk1MjE0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYxNDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZpbmV0XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTEzLVxcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTQ6XFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTUtXFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjE1Ljc3MjU3MjIxNVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Njc1NzczOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJyaWRnZSBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBkZXZpbmV0Lm9gICphbHdheXMqIGdldHMgY29tcGlsZWQgd2l0aCBgQ09ORklHX0lORVRgIGVuYWJsZWQuIFRoYXQgdGVsbHMgbWUgcmlnaHQgYXdheSB0aGF0IGBJTkVUYCBpcyBhIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24uIEFuZCwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGJyaWRnZXMgYW5kIG11bHRpY2FzdCwgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGluY2x1ZGUgYEJSSURHRWAgYW5kIGBCUklER0VfSUdNUF9TTk9PUElOR2AgZm9yIHRoZSBicmlkZ2UgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkgaXRzZWxmLlxuXG5MZXQgbWUgdGhpbmsgYWJvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIHJlYWxseSBjZW50cmFsIHRvIHRoaXMuIEknbGwgZm9jdXMgb24gdGhlc2U6IGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AsIGBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVgLiBJIHdhcyBhbHNvIGdvaW5nIHRvIGFkZCBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCwgZXZlbiB0aG91Z2ggaXQgaXMgYSBgc3RhdGljYCBmdW5jdGlvbiwgYmVjYXVzZSBpdCBpcyBjYWxsZWQgYnkgTmV0bGluay5cblxuSG9sZCBvbiwgdGhlIGNvbXBpbGVyIG1pZ2h0IG9wdGltaXplIG91dCBhIGRpc3RpbmN0IHN5bWJvbCBmb3IgYSBzdGF0aWMgZnVuY3Rpb24gaWYgaXQgY2FuLiBCdXQgc2luY2UgaXRzIGFkZHJlc3MgKmlzKiBiZWluZyB0YWtlbiwgaXQgKnNob3VsZCogaGF2ZSBhIHN5bWJvbC4gVG8gYmUgYWJzb2x1dGVseSBzYWZlLCBJJ20gdGhpbmtpbmcgSSBjYW4ganVzdCB1c2UgdGhlIGJyaWRnZSBmdW5jdGlvbnMuIE5vcGUhIENoZWNraW5nIGBkZXZpbmV0LmNgLCBpdCBsb29rcyBsaWtlIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGlzIHRoZSBvbmx5IGNhbGxlci4gSSBzaG91bGQgaW5jbHVkZSBpdC5cblxuVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGhhcyBjaGFuZ2VkIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3MTEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjE6MjIuNDQ4MzQ4NDgxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzIxMTU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDE3Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnJfaXA2X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE4MC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxODE6dm9pZCBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTgyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY2NT1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Njk4LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY5OTpcXHQvKiBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyBoYXMgdGhlIHBvdGVudGlhbCB0byBjYXVzZVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcwMC1cXHQgKiBhbiBNTEQgUmVwb3J0L0xlYXZlIHRvIGJlIGRlbGl2ZXJlZCB0byBicl9tdWx0aWNhc3RfcmN2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzEyLVxcdFxcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NzEzOlxcdFxcdFxcdGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzKGJyKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MTQtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMToyMi41MDE1NjE4ODdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5Mjk2OTQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIE5vbi1TdGF0aWMgTmF0dXJlIG9mIGEgRnVuY3Rpb24gYW5kIEl0cyBQb3RlbnRpYWwgVXNhZ2UqKlxuXG5SaWdodCwgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCBpc24ndCBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0J3MgbGlrZWx5IGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIHBvdGVudGlhbGx5IGluIGEgd2F5IHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGZvciBteSBjdXJyZW50IHdvcmsuIEdpdmVuIHRoYXQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBob3cgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAgaXMgdXNlZCB3aXRoaW4gYG5ldC9pcHY0L2RldmluZXQuY2AuIEl0J3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBjb25maXJtIHRoZSBkZXRhaWxzLCBjb250ZXh0IGFuZCBhbnkgc2lkZSBlZmZlY3RzIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZSB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgd2l0aCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGJlZm9yZSBJIG1vdmUgb24uIFRoaXMgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIGNvdWxkIHNhdmUgbWUgYSBoZWFkYWNoZSBkb3duIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY2MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjI2LjM5NDUzNDIyMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MTU4NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9uZXRjb25mX2dldF9kZXZjb25mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2RldmluZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9kZXZpbmV0LmM9MjMzNT1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl92YWxpZF9nZXRfcmVxKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjM3My1cXG5uZXQvaXB2NC9kZXZpbmV0LmM6MjM3NDpzdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbm5ldC9pcHY0L2RldmluZXQuYy0yMzc1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYz0yOTUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBkZXZpbmV0X3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjk2MC1cXHR7LnByb3RvY29sID0gUEZfSU5FVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVUQ09ORixcXG5uZXQvaXB2NC9kZXZpbmV0LmM6Mjk2MTpcXHQgLmRvaXQgPSBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmYsIC5kdW1waXQgPSBpbmV0X25ldGNvbmZfZHVtcF9kZXZjb25mLFxcbm5ldC9pcHY0L2RldmluZXQuYy0yOTYyLVxcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjE6MjYuNDQyMjU0MTg2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4MDM5NDk3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRm9jdXMgU3ltYm9scyBhbmQgUmVhc29uaW5nIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgdGFyZ2V0IHRoaXMgcGF0Y2ggZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIGBpbl9kZXZfZ2V0YC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAgbWlnaHQgYmUgYSBnb29kIHRhcmdldCwgYnV0IHNpbmNlIGl0J3MgZGVjbGFyZWQgYHN0YXRpY2AsIGl0J3Mgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBzY29wZSwgc28gaXQncyBvdXQuIEkgZG8gbmVlZCB0byBmYWN0b3IgaW4gdGhhdCBgaW5fZGV2X2dldGAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBkcml2ZXJzIHN1Y2ggYXMgaW4gYG5ldHhlbl9jb25maWdfaW5kZXZfYWRkcmAgYW5kIGBxbGNuaWNfY29uZmlnX2luZGV2X2FkZHJgLlxuXG5NeSBpbnN0aW5jdCBpcyB0byBsZWFuIHRvd2FyZHMgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYXMgcHJpbWFyeSB0YXJnZXRzLiBJIHdlbnQgYmFjayBhbmQgcmUtZXhhbWluZWQgYG5ldC9pcHY0L2RldmluZXQuY2AsIGRvdWJsZS1jaGVja2luZyBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgY2FsbCBgaW5fZGV2X2dldGAsIGJ1dCBJIGNvbmZpcm1lZCBteSBlYXJsaWVyIGdyZXAg4oCTIHRoZSBvbmx5IG90aGVyIGNhbGwgdGhlcmUgd2FzIHRoZSBzdGF0aWMgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAuIEFsc28gdG9vayBhIGxvb2sgYXQgYGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdWAsIGFuZCB0aGF0IGFsc28gaGFwcGVucyB0byBiZSBzdGF0aWMuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgYSBkZWVwZXIgZGl2ZSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBvcHRpbWFsIGZvY3VzIHN5bWJvbHMgYXJlOlxuXG4qICAgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYFxuKiAgIGBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgXG4qICAgYGJyX211bHRpY2FzdF90b2dnbGVgXG5cblRoZXNlIHNlZW0gdG8gYmUgdGhlIG1vc3QgZnJ1aXRmdWwgc3RhcnRpbmcgcG9pbnRzLCB3aXRoIHRob3NlIGJyaWRnZSBtdWx0aWNhc3Qgc25vb3BpbmcgZnVuY3Rpb25zIGJlaW5nIHRoZSBrZXkuXG5cblRoZSBjb25maWcgZmxhZ3MgSSdtIHBsYW5uaW5nIHRvIHVzZSBhcmU6IGBJTkVUYCwgYEJSSURHRWAsIGFuZCBgQlJJREdFX0lHTVBfU05PT1BJTkdgLlxuXG5NeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGJ1ZyBieSByZXBsYWNpbmcgYHJlZmNvdW50X2luY2Agd2l0aCBgcmVmY291bnRfaW5jX25vdF96ZXJvYCB3aGVuIGNhbGxpbmcgYGluX2Rldl9nZXRgLiBUaGlzIGlzIGEgcHJldHR5IGNyaXRpY2FsIGNoYW5nZSBpbiBhIGNvcmUgbmV0d29ya2luZyBpbmxpbmUgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbnMgSSBpZGVudGlmaWVkIGFyZSB1c2VkIGJ5IHRoZSBicmlkZ2UgbXVsdGljYXN0IHNub29waW5nIGZ1bmN0aW9uYWxpdHksIElQdjQgZGV2aW5ldCBuZXRsaW5rIGNhbGxiYWNrcywgYW5kIHNldmVyYWwgZHJpdmVycy4gVGhhdCBtYWtlcyBpdCBsaWtlbHkgaXQncyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBhbmQgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBzaG91bGQgZnV6eiB0aG9yb3VnaGx5LlxuXG5BbHJpZ2h0LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjQwLCJPdXRwdXRUb2tlbnMiOjE3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMTozNS4yNDYyMDYzMTZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc3Mjg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzXCIsXG4gICAgXCJicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByZWZjb3VudCBidWcgaW4gYGluX2Rldl9nZXRgIGJ5IHVzaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUgbmV0d29ya2luZyBpbmxpbmUgZnVuY3Rpb24gdXNlZCBieSBicmlkZ2UgbXVsdGljYXN0IHNub29waW5nLCBJUHY0IGRldmluZXQgbmV0bGluayBjYWxsYmFja3MsIGFuZCBzZXZlcmFsIGRyaXZlcnMuIEl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzXCIsXG4gICAgXCJicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByZWZjb3VudCBidWcgaW4gYGluX2Rldl9nZXRgIGJ5IHVzaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUgbmV0d29ya2luZyBpbmxpbmUgZnVuY3Rpb24gdXNlZCBieSBicmlkZ2UgbXVsdGljYXN0IHNub29waW5nLCBJUHY0IGRldmluZXQgbmV0bGluayBjYWxsYmFja3MsIGFuZCBzZXZlcmFsIGRyaXZlcnMuIEl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjM1LjMxNDk4NTA3NFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyNzUwNzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjM1LjMxNTQwMjEyNFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NzI3MDg3MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW5fZGV2X2dldGAgdG8gdXNlIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2Agd2hlbiBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gYW4gYGluX2RldmljZWAgdW5kZXIgUkNVLiBUaGlzIGlzIGEgY2xhc3NpYyBmaXggZm9yIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgcmVmY291bnQgYnVnLCBwcmV2ZW50aW5nIHRoZSBhY3F1aXNpdGlvbiBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gU2luY2UgdGhpcyBwYXRjaCBkZWFscyBlbnRpcmVseSB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE2ZGYwMGYwNDAyYWJmNzVmZDQ2OWQ2ZTZmMTM1MDYxZjI0MmQzZGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxODoxOTozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmhcbmluZGV4IDYwMzJlZWEyNTM5YTYuLmExNDQ2ZGE2NDIwMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmhcbkBAIC0yNDUsOCArMjQ1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG4tXHRpZiAoaW5fZGV2KVxuLVx0XHRyZWZjb3VudF9pbmMoXHUwMDI2aW5fZGV2LVx1MDAzZXJlZmNudCk7XG4rXHRpZiAoaW5fZGV2IFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmluX2Rldi1cdTAwM2VyZWZjbnQpKVxuK1x0XHRpbl9kZXYgPSBOVUxMO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gaW5fZGV2O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjM1LjMxNTQwMjk5NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzI3MDY0ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBpbl9kZXZfZ2V0YCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgaW5fZGV2X2dldGAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaGAsIGFuZCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUuIEl0IGxvb2tzIGxpa2Ugd2UncmUgcmVwbGFjaW5nIGEgc3RhbmRhcmQgYHJlZmNvdW50X2luY2Agd2l0aCBgcmVmY291bnRfaW5jX25vdF96ZXJvYC4gVGhlIG9sZGVyIGNvZGUganVzdCBpbmNyZW1lbnRlZCB0aGUgcmVmZXJlbmNlIGNvdW50LCByZWdhcmRsZXNzLiBUaGUgbmV3IGNvZGUgaW50cm9kdWNlcyBhIGNoZWNrOiAqaWYqIHRoZSByZWZlcmVuY2UgY291bnQgaXMgYWxyZWFkeSB6ZXJvICpiZWZvcmUqIHdlIHRyeSB0byBpbmNyZW1lbnQgaXQsIGl0IG1lYW5zIHRoZSBgaW5fZGV2YCBvYmplY3QgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQg4oCTIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgdGVhcmRvd24sIHNvIHdlIGFic29sdXRlbHkgKnNob3VsZG4ndCogdHJ5IHRvIHRha2UgYW5vdGhlciByZWZlcmVuY2UuIEluc3RlYWQsIHdlJ2xsIHNldCBgaW5fZGV2YCB0byBOVUxMLCBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoaXMgaXMgYSB2ZXJ5IGNsZWFuIGFuZCB0YXJnZXRlZCBhcHByb2FjaCB0byBhIHBvdGVudGlhbCBvYmplY3QgbGlmZXRpbWUgcHJvYmxlbS5cblxuVGhpcyBpcyB0ZXh0Ym9vayB1c2UtYWZ0ZXItZnJlZSB0ZXJyaXRvcnkuIFdlIHdlcmUgcHJvYmFibHkgc2VlaW5nIGEgc2l0dWF0aW9uIHdoZXJlIGEgcG9pbnRlciB3YXMgYmVpbmcgdXNlZCBhZnRlciBpdHMgY29ycmVzcG9uZGluZyBvYmplY3QgaGFkIGJlZW4gZnJlZWQsIGFuZCB0aGlzIGlzIHdoeSB3ZSdyZSBjaGFuZ2luZyB0aGlzIHJvdXRpbmUgdG8gcHJldmVudCBpdCBmcm9tIGFjcXVpcmluZyByZWZlcmVuY2VzIHRvIGEgcmVzb3VyY2UgdGhhdCBtYXkgb3IgbWF5IG5vdCBleGlzdCBhdCB0aGF0IHRpbWUuIFdlIHJlYWxseSBkb24ndCB3YW50IHRvIGdldCBpbnRvIHRoYXQgc2l0dWF0aW9uIVxuXG5HaXZlbiB0aGF0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgZml4IGlzIHByaW1hcmlseSBhZGRyZXNzaW5nIG1lbW9yeSBzYWZldHksIHNwZWNpZmljYWxseSB1c2UtYWZ0ZXItZnJlZSBidWdzLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IGV4YWN0bHkgdGhlc2Uga2luZHMgb2YgaXNzdWVzLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSdyZSBvbmx5IGNoYW5naW5nIHRoZSAqaGFuZGxpbmcqIG9mIGV4aXN0aW5nIGRhdGEsIHNvIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gY29uZmlybSwgSSdtIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIFRoaXMgaXMgYSBjbGFzc2ljIFVBRiBmaXgsIGFuZCBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBrZWVwIGFuIGV5ZSBvbiB0aGlzIHR5cGUgb2YgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDUsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjE6NDIuMDQyNDcxMDQ3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW5fZGV2X2dldGAgdG8gdXNlIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2Agd2hlbiBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gYW4gYGluX2RldmljZWAgdW5kZXIgUkNVLiBUaGlzIGlzIGEgY2xhc3NpYyBmaXggZm9yIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgcmVmY291bnQgYnVnLCBwcmV2ZW50aW5nIHRoZSBhY3F1aXNpdGlvbiBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gU2luY2UgdGhpcyBwYXRjaCBkZWFscyBlbnRpcmVseSB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpbl9kZXZfZ2V0YCB0byB1c2UgYHJlZmNvdW50X2luY19ub3RfemVyb2AgaW5zdGVhZCBvZiBgcmVmY291bnRfaW5jYCB3aGVuIGFjcXVpcmluZyBhIHJlZmVyZW5jZSB0byBhbiBgaW5fZGV2aWNlYCB1bmRlciBSQ1UuIFRoaXMgaXMgYSBjbGFzc2ljIGZpeCBmb3IgYSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBvciByZWZjb3VudCBidWcsIHByZXZlbnRpbmcgdGhlIGFjcXVpc2l0aW9uIG9mIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVzdHJveWVkLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWxlIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzLiBTaW5jZSB0aGlzIHBhdGNoIGRlYWxzIGVudGlyZWx5IHdpdGggb2JqZWN0IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4ncz9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-15 17:36:25 +0000 UTC FinishedAt: 2026-08-15 18:21:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "BRIDGE", "BRIDGE_IGMP_SNOOPING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "BRIDGE", "BRIDGE_IGMP_SNOOPING" ], "series_id": "667e793f-b680-4356-b189-03dfa5806fe0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_multicast_join_snoopers", "br_multicast_leave_snoopers", "br_multicast_toggle" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X2xlYXZlX3Nub29wZXJzJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF90b2dnbGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaW5fZGV2X2dldGAgdG8gdXNlIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2Agd2hlbiBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gYW4gYGluX2RldmljZWAgdW5kZXIgUkNVLiBUaGlzIGlzIGEgY2xhc3NpYyBmaXggZm9yIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgcmVmY291bnQgYnVnLCBwcmV2ZW50aW5nIHRoZSBhY3F1aXNpdGlvbiBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gU2luY2UgdGhpcyBwYXRjaCBkZWFscyBlbnRpcmVseSB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByZWZjb3VudCBidWcgaW4gYGluX2Rldl9nZXRgIGJ5IHVzaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUgbmV0d29ya2luZyBpbmxpbmUgZnVuY3Rpb24gdXNlZCBieSBicmlkZ2UgbXVsdGljYXN0IHNub29waW5nLCBJUHY0IGRldmluZXQgbmV0bGluayBjYWxsYmFja3MsIGFuZCBzZXZlcmFsIGRyaXZlcnMuIEl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNmRmMDBmMDQwMmFiZjc1ZmQ0NjlkNmU2ZjEzNTA2MWYyNDJkM2RiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMTg6MTk6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFxuaW5kZXggNjAzMmVlYTI1MzlhNi4uYTE0NDZkYTY0MjAwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFxuQEAgLTI0NSw4ICYjNDM7MjQ1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG4tXHRpZiAoaW5fZGV2KVxuLVx0XHRyZWZjb3VudF9pbmMoXHUwMDI2aW5fZGV2LVx1MDAzZXJlZmNudCk7XG4mIzQzO1x0aWYgKGluX2RldiBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZpbl9kZXYtXHUwMDNlcmVmY250KSlcbiYjNDM7XHRcdGluX2RldiA9IE5VTEw7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBpbl9kZXY7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX211bHRpY2FzdF9qb2luX3Nub29wZXJzJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGJ1ZyBpbiBgaW5fZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AgaW5zdGVhZCBvZiBgcmVmY291bnRfaW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBuZXR3b3JraW5nIGlubGluZSBmdW5jdGlvbiB1c2VkIGJ5IGJyaWRnZSBtdWx0aWNhc3Qgc25vb3BpbmcsIElQdjQgZGV2aW5ldCBuZXRsaW5rIGNhbGxiYWNrcywgYW5kIHNldmVyYWwgZHJpdmVycy4gSXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE2ZGYwMGYwNDAyYWJmNzVmZDQ2OWQ2ZTZmMTM1MDYxZjI0MmQzZGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAxODoxOTozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKaW5kZXggNjAzMmVlYTI1MzlhNi4uYTE0NDZkYTY0MjAwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKQEAgLTI0NSw4ICYjNDM7MjQ1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwotCWlmIChpbl9kZXYpCi0JCXJlZmNvdW50X2luYygmYW1wO2luX2Rldi0mZ3Q7cmVmY250KTsKJiM0MzsJaWYgKGluX2RldiAmYW1wOyZhbXA7ICFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtpbl9kZXYtJmd0O3JlZmNudCkpCiYjNDM7CQlpbl9kZXYgPSBOVUxMOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBpbl9kZXY7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgUmVmY291bnQgSXNzdWUgaW4gdGhlIEtlcm5lbCYjMzk7cyBOZXR3b3JrIFN0YWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgbWFraW5nIGEgc2VlbWluZ2x5IHNtYWxsLCBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBjaGFuZ2UgdG8gYGluX2Rldl9nZXRgIGluIGBpbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaGAuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgcmVwbGFjaW5nIGEgc2ltcGxlIGByZWZjb3VudF9pbmNgIHdpdGggYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhZGRyZXNzaW5nIGEgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZywgdmVyeSBsaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSBvciBhIHNpbWlsYXIgbWVtb3J5IHNhZmV0eSBpc3N1ZSB3aXRoaW4gdGhlIGBpbl9kZXZpY2VgIHN0cnVjdHVyZS4gVGhpcyBgaW5fZGV2X2dldGAgZnVuY3Rpb24gaXMgaW5saW5lLCB3aGljaCBtZWFucyBpdCYjMzk7cyBzcHJpbmtsZWQgdGhyb3VnaG91dCB0aGUga2VybmVsIHNvdXJjZSBjb2RlLCBzbyBhIGJ1ZyBoZXJlIGNvdWxkIGJlIHF1aXRlIHdpZGVzcHJlYWQgYW5kIGRpZmZpY3VsdCB0byB0cmFjayBkb3duIHdpdGhvdXQgcHJvcGVyIHNjcnV0aW55LgoKVGhlIHByZXZpb3VzIGNvZGUgc2ltcGx5IGluY3JlbWVudGVkIHRoZSByZWZlcmVuY2UgY291bnQgKGBpbl9kZXYtJmd0O3JlZmNudGApIG9uIHRoZSBgaW5fZGV2aWNlYCBvYmplY3QuIFRoZSBuZXcgY29kZSwgaG93ZXZlciwgY2hlY2tzIGlmIHRoZSByZWZlcmVuY2UgY291bnQgaXMgemVybyBiZWZvcmUgYXR0ZW1wdGluZyB0aGUgaW5jcmVtZW50LiBJZiBpdCAqaXMqIHplcm8sIGFuZCB0aGUgaW5jcmVtZW50IHdvdWxkIGZhaWwsIGBpbl9kZXZgIGlzIHRoZW4gc2V0IHRvIE5VTEwsIHdoaWNoIG1lYW5zIHRoZSBjYWxsZXIgd29uJiMzOTt0IHVzZSBhIGRhbmdsaW5nIHBvaW50ZXIuIFRoaXMgaXMgYSBjbGFzc2ljIHBhdHRlcm4gdG8gcHJldmVudCBhIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBgaW5fZGV2aWNlYCBzdHJ1Y3QgaXMgYWxyZWFkeSBkZWFsbG9jYXRlZC4KCk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgdGhpcyBmdW5jdGlvbi4gR2l2ZW4gaXQmIzM5O3MgaW5saW5lLCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xpbmcsIGxpa2UgYGdyZXBgIG9yIHBlcmhhcHMgYW4gSURFIHdpdGggY29kZSBpbmRleGluZywgdG8gZmluZCBhbGwgaW5zdGFuY2VzIHdoZXJlIGBpbl9kZXZfZ2V0YCBpcyB1c2VkLiBVbmRlcnN0YW5kaW5nICpob3cqIGFuZCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpbGwgYmUgY3J1Y2lhbCB0byBhc3Nlc3NpbmcgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIHZ1bG5lcmFiaWxpdHkgYW5kIGVuc3VyaW5nIHRoZSBwYXRjaCBpcyBlZmZlY3RpdmUgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMuIEl0JiMzOTtsbCBhbHNvIGhlbHAgcGlucG9pbnQgdGhlIGV4YWN0IHNjZW5hcmlvIHRoYXQgdHJpZ2dlcmVkIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gRnJvbSBoZXJlLCBJIHdpbGwgYXNzZXNzIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbl9kZXZfZ2V0XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jPTMyMzU9c3RhdGljIGludCBwaWNrX2xvY2FsX2lwYWRkcnMoc3RydWN0IGM0aXdfZGV2ICpkZXYsIHN0cnVjdCBpd19jbV9pZCAqY21faWQpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0Mi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jOjMyNDM6XHRpbmQgPSBpbl9kZXZfZ2V0KGRldi1cdTAwM2VyZGV2LmxsZGkucG9ydHNbMF0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0NC1cdGlmICghaW5kKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jPTE3NDQ9c3RhdGljIGludCBpcmRtYV9hZGRfbXFoXzQoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmMtMTc2NC1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jOjE3NjU6XHRcdGlkZXYgPSBpbl9kZXZfZ2V0KGlwX2Rldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNzY2LVx0XHRpZiAoIWlkZXYpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MzIwPXN0YXRpYyBib29sIGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMzMwLVx0Y2FzZSBBRl9JTkVUOlxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MzMxOlx0XHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0zMzItXHRcdGlmICghaW5fZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzIzMD1uZXR4ZW5fY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzIzOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MzIzOTpcdGluZGV2ID0gaW5fZGV2X2dldChkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMjQwLVx0aWYgKCFpbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmM9NDA1ND1xbGNuaWNfY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwNjA6XHRpbmRldiA9IGluX2Rldl9nZXQoZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDYxLVx0aWYgKCFpbmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaD0yMzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICpfX2luX2Rldl9nZXRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQxLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg6MjQyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluX2RldmljZSAqaW5fZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQzLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNTY9c3RhdGljIHZvaWQgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1Ny17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxNTg6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbl9kZXZfZ2V0KGJyLVx1MDAzZWRldik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxNTktXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTg3PXN0YXRpYyB2b2lkIGJyX2lwNF9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTg4LXtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE4OTpcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoYnItXHUwMDNlZGV2KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE5MC1cbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjM3ND1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yNDA1LVx0XHRpZiAoZGV2KVxubmV0L2lwdjQvZGV2aW5ldC5jOjI0MDY6XHRcdFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDctXHRcdGlmICghaW5fZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYGluX2Rldl9nZXRgIEZ1bmN0aW9uIFVzYWdlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW5fZGV2X2dldGAgYW5kIGl0cyB1c2FnZSBhY3Jvc3MgdGhlIGtlcm5lbC4gSSBzZWUgaXQmIzM5O3MgdXNlZCBpbiBgbmV0L2lwdjQvZGV2aW5ldC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UsIHBsdXMgYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIOKAkyBpbnRlcmVzdGluZywgYW5kIGEgZmV3IGRyaXZlcnMgYXMgd2VsbC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhbiBpbmxpbmUgZnVuY3Rpb24gaXMgaW1tZWRpYXRlbHkgbWFraW5nIG1lIHRoaW5rIGFib3V0IHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZSBJIG1pZ2h0IHdhbnQgdG8gbWFrZS4gQW55IG1vZGlmaWNhdGlvbiB0byBgaW5fZGV2X2dldGAgd291bGQgYWZmZWN0ICpldmVyeSogcGxhY2UgaXQmIzM5O3MgY2FsbGVkLiBIbW0sIHJpZ2h0LCBpdCYjMzk7cyBhIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIGJlIGNhcmVmdWwuIExldCBtZSBzZWUuLi4gSSBzaG91bGQgcHJvYmFibHkgaW52ZXN0aWdhdGUgaG93IHdpZGVseSBpdCYjMzk7cyB1c2VkIGJ5IGZpbmRpbmcgKmFsbCogdGhlIGNhbGxlcnMuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBibGFzdCByYWRpdXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbl9kZXZfZ2V0XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jPTMyMzU9c3RhdGljIGludCBwaWNrX2xvY2FsX2lwYWRkcnMoc3RydWN0IGM0aXdfZGV2ICpkZXYsIHN0cnVjdCBpd19jbV9pZCAqY21faWQpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0Mi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jOjMyNDM6XHRpbmQgPSBpbl9kZXZfZ2V0KGRldi1cdTAwM2VyZGV2LmxsZGkucG9ydHNbMF0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0NC1cdGlmICghaW5kKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jPTE3NDQ9c3RhdGljIGludCBpcmRtYV9hZGRfbXFoXzQoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmMtMTc2NC1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jOjE3NjU6XHRcdGlkZXYgPSBpbl9kZXZfZ2V0KGlwX2Rldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNzY2LVx0XHRpZiAoIWlkZXYpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MzIwPXN0YXRpYyBib29sIGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMzMwLVx0Y2FzZSBBRl9JTkVUOlxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MzMxOlx0XHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0zMzItXHRcdGlmICghaW5fZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzIzMD1uZXR4ZW5fY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzIzOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MzIzOTpcdGluZGV2ID0gaW5fZGV2X2dldChkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMjQwLVx0aWYgKCFpbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmM9NDA1ND1xbGNuaWNfY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwNjA6XHRpbmRldiA9IGluX2Rldl9nZXQoZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDYxLVx0aWYgKCFpbmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaD0yMzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICpfX2luX2Rldl9nZXRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQxLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg6MjQyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluX2RldmljZSAqaW5fZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQzLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNTY9c3RhdGljIHZvaWQgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1Ny17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxNTg6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbl9kZXZfZ2V0KGJyLVx1MDAzZWRldik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxNTktXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTg3PXN0YXRpYyB2b2lkIGJyX2lwNF9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTg4LXtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE4OTpcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoYnItXHUwMDNlZGV2KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE5MC1cbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjM3ND1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yNDA1LVx0XHRpZiAoZGV2KVxubmV0L2lwdjQvZGV2aW5ldC5jOjI0MDY6XHRcdFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDctXHRcdGlmICghaW5fZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIGBpbl9kZXZfZ2V0YCBVc2FnZSoqCgpBbHJpZ2h0LCBzbyBgaW5fZGV2X2dldGAgaXMgZGVmaW5pdGVseSBhIGtleSBmdW5jdGlvbiwgSSBjYW4gc2VlIHRoYXQuIEJ1dCBJJiMzOTttIGdldHRpbmcgYSBjbGVhcmVyIHBpY3R1cmUgbm93OyBpdCYjMzk7cyBwZXJoYXBzIG5vdCBxdWl0ZSBhcyB1YmlxdWl0b3VzIGFzIEkgaW5pdGlhbGx5IHN1c3BlY3RlZC4gSW50ZXJlc3RpbmcuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBIb2xkIG9uLCBJIHRob3VnaHQgdGhlcmUgbWlnaHQgYmUgb3RoZXIgbG9jYXRpb25zIGNhbGxpbmcgaXQgd2l0aGluIHRoZSBzYW1lIGZpbGUsIGJ1dCBteSBpbml0aWFsIGdyZXAgb25seSB0dXJuZWQgdXAgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAuIFRoYXQgZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gT2theSwgdGltZSB0byBjaGVjayBgbmV0L2lwdjQvZGV2aW5ldC5jYCBkaXJlY3RseSB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSYjMzk7dmUgZ290IHRoZSBmdWxsIHNjb3BlIG9mIGBpbl9kZXZfZ2V0YCYjMzk7cyBjYWxsZXJzIGluIHRoYXQgY29udGV4dC4gTmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbl9kZXZfZ2V0XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZGV2aW5ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2RldmluZXQuYz0yMzc0PXN0YXRpYyBpbnQgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mKHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDUtXHRcdGlmIChkZXYpXG5uZXQvaXB2NC9kZXZpbmV0LmM6MjQwNjpcdFx0XHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2NC9kZXZpbmV0LmMtMjQwNy1cdFx0aWYgKCFpbl9kZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcyMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGluX2Rldl9nZXRgIFVzYWdlKioKCkhtbSwgdGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBNeSBpbnR1aXRpb24sIGJhc2VkIG9uIHBhc3Qgd29yayBpbiBuZXR3b3JraW5nLCB3YXMgdGhhdCBgaW5fZGV2X2dldGAgd2FzIGEgYml0IG1vcmUgdWJpcXVpdG91cyB0aGFuIHdoYXQgSSYjMzk7bSBzZWVpbmcuIEl0IHN1Z2dlc3RzIHRoZXJlJiMzOTtzIGxlc3MgcmVsaWFuY2Ugb24gaXQgdGhhbiBJJiMzOTtkIGluaXRpYWxseSBhc3N1bWVkLiBUaGlzIHdhcnJhbnRzIGRlZXBlciBpbnZlc3RpZ2F0aW9uLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJIG5lZWQgdG8gbG9vayBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGRlbHZlIGludG8gdGhlIGNvcmUgSUdNUCBpbXBsZW1lbnRhdGlvbi4gYG5ldC9pcHY0L2lnbXAuY2AgaXMgYSBwcmltZSBjYW5kaWRhdGUsIGFzIG11bHRpY2FzdCBtZW1iZXJzaGlwIG1hbmFnZW1lbnQgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHRoaXMga2luZCBvZiBmdW5jdGlvbiBiZWluZyBjYWxsZWQgd2l0aCBzb21lIHJlZ3VsYXJpdHkuIEJ1dCBJIHNob3VsZCBleHBhbmQgdGhlIHNlYXJjaCB0byBvdGhlciBhcmVhcyB0aGF0IGludGVyYWN0IHdpdGggaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gb3IgSVAgYWRkcmVzcyBtYW5hZ2VtZW50LCBqdXN0IHRvIGJlIHRob3JvdWdoLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5fZGV2X2dldFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9kZXZpbmV0LmM9MjM3ND1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yNDA1LVx0XHRpZiAoZGV2KVxubmV0L2lwdjQvZGV2aW5ldC5jOjI0MDY6XHRcdFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDctXHRcdGlmICghaW5fZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTAzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBpbl9kZXZfZ2V0YCBVc2FnZSoqCgpBbHJpZ2h0LCBzbyBgaW5fZGV2X2dldGAgYXBwZWFycyB0byBiZSBwcmV0dHkgbmFycm93bHkgc2NvcGVkLiBFeGNlbGxlbnQhIExlc3MgY29kZSB0byBzY3J1dGluaXplIGFuZCBsZXNzIHBvdGVudGlhbCBmb3Igd2lkZXNwcmVhZCBpbXBhY3QgaWYgc29tZXRoaW5nJiMzOTtzIGFtaXNzLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgY29uZmlybWVkIOKAkyBpdCYjMzk7cyBub3QgYSBkZWVwbHkgZW1iZWRkZWQgZnVuY3Rpb24gYWNyb3NzIHRoZSBlbnRpcmUgbmV0d29ya2luZyBzdGFjaywgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIHRhcmdldGVkIGRlYnVnZ2luZy4KCk5vdywgaW5zdGVhZCBvZiBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIHRoZSBkaXJlY3QgY2FsbHMsIEkgc2hvdWxkIHJlYWxseSBzaGlmdCBmb2N1cyBhbmQgZGlnIGludG8gaG93IHRob3NlIHNwZWNpZmljIGNhbGxpbmcgcG9pbnRzIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBjcml0aWNhbCBSQ1Ugc3luY2hyb25pemF0aW9uLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGVpdGhlciBgX19pbl9kZXZfZ2V0X3JjdWAgb3IgYF9faW5fZGV2X2dldF9ydG5sYC4gVW5kZXJzdGFuZGluZyB3aGljaCBvZiB0aGVzZSB0d28gaXMgdGhlIGRvbWluYW50IHVzYWdlIHdpbGwgZGV0ZXJtaW5lIGhvdyBkZWVwbHkgSSBuZWVkIHRvIGdvIHRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSeKAmWxsIHN0YXJ0IHdpdGggd2hpY2hldmVyIGlzIGVhc2llciB0byBuYXZpZ2F0ZSBnaXZlbiB0aGlzIGxpbWl0ZWQgaW5mb3JtYXRpb24uIFRoYXQgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2Ygd2hlcmUgdGhlIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgbWlnaHQgYmUgbHVya2luZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faW5fZGV2X2dldF9yY3VcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvYXJwLmM9MjIzPXN0YXRpYyBpbnQgYXJwX2NvbnN0cnVjdG9yKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKVxuLS1cbm5ldC9pcHY0L2FycC5jLTIzNS1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY0L2FycC5jOjIzNjpcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2FycC5jLTIzNy1cdGlmICghaW5fZGV2KSB7XG4tLVxubmV0L2lwdjQvYXJwLmM9MzMzPXN0YXRpYyB2b2lkIGFycF9zb2xpY2l0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2FycC5jLTM0My1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY0L2FycC5jOjM0NDpcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2FycC5jLTM0NS1cdGlmICghaW5fZGV2KSB7XG4tLVxubmV0L2lwdjQvYXJwLmM9NDc0PXN0YXRpYyBpbmxpbmUgaW50IGFycF9md2RfcHJveHkoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxuLS1cbm5ldC9pcHY0L2FycC5jLTQ5Mi1cbm5ldC9pcHY0L2FycC5jOjQ5MzpcdG91dF9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHJ0LVx1MDAzZWRzdC5kZXYpO1xubmV0L2lwdjQvYXJwLmMtNDk0LVx0aWYgKG91dF9kZXYpXG4tLVxubmV0L2lwdjQvYXJwLmM9NzAyPXN0YXRpYyBpbnQgYXJwX3Byb2Nlc3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvYXJwLmMtNzA0LVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cdTAwM2VkZXY7XG5uZXQvaXB2NC9hcnAuYzo3MDU6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG5uZXQvaXB2NC9hcnAuYy03MDYtXHRzdHJ1Y3QgYXJwaGRyICphcnA7XG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jPTEzNTk9X19iZTMyIGluZXRfc2VsZWN0X2FkZHIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyIGRzdCwgaW50IHNjb3BlKVxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0xMzY5LVx0bmV0ID0gZGV2X25ldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2RldmluZXQuYzoxMzcwOlx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTEzNzEtXHRpZiAoIWluX2Rldilcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTQwMS1cdCAgICAoZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBtYXN0ZXJfaWR4KSkgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC9kZXZpbmV0LmM6MTQwMjpcdCAgICAoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpKSkge1xubmV0L2lwdjQvZGV2aW5ldC5jLTE0MDMtXHRcdGFkZHIgPSBpbl9kZXZfc2VsZWN0X2FkZHIoaW5fZGV2LCBzY29wZSk7XG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTE0MTUtXG5uZXQvaXB2NC9kZXZpbmV0LmM6MTQxNjpcdFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTE0MTctXHRcdGlmICghaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2RldmluZXQuYz0xNDgyPV9fYmUzMiBpbmV0X2NvbmZpcm1fYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldixcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTQ5Mi1cdGZvcl9lYWNoX25ldGRldl9yY3UobmV0LCBkZXYpIHtcbm5ldC9pcHY0L2RldmluZXQuYzoxNDkzOlx0XHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG5uZXQvaXB2NC9kZXZpbmV0LmMtMTQ5NC1cdFx0aWYgKGluX2Rldikge1xuLS1cbm5ldC9pcHY0L2RldmluZXQuYz0xOTI4PXN0YXRpYyBpbnQgaW5ldF9kdW1wX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0xOTYxLVx0XHRcdH1cbm5ldC9pcHY0L2RldmluZXQuYzoxOTYyOlx0XHRcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2RldmluZXQuYy0xOTYzLVx0XHRcdGlmICghaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0xOTczLVx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAodGd0X25ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2lwdjQvZGV2aW5ldC5jOjE5NzQ6XHRcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2RldmluZXQuYy0xOTc1LVx0XHRpZiAoIWluX2Rldilcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjQzNj1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9kdW1wX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjQ2NS1cdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2lwdjQvZGV2aW5ldC5jOjI0NjY6XHRcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2RldmluZXQuYy0yNDY3LVx0XHRpZiAoIWluX2Rldilcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjUwNz1zdGF0aWMgdm9pZCBkZXZpbmV0X2NvcHlfZGZsdF9jb25mKHN0cnVjdCBuZXQgKm5ldCwgaW50IGkpXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTI1MTQtXG5uZXQvaXB2NC9kZXZpbmV0LmM6MjUxNTpcdFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTI1MTYtXHRcdGlmIChpbl9kZXYgXHUwMDI2XHUwMDI2ICF0ZXN0X2JpdChpLCBpbl9kZXYtXHUwMDNlY25mLnN0YXRlKSlcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0yNzM9X19iZTMyIGZpYl9jb21wdXRlX3NwZWNfZHN0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMjg2LVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6Mjg3Olx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMjg4LVxuLS1cbm5ldC9pcHY0L2ljbXAuYz02NTc9c3RhdGljIF9fYmUzMiBpY21wX2V4dF9paW9fYWRkcjRfZmluZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2ljbXAuYy02NjEtXG5uZXQvaXB2NC9pY21wLmM6NjYyOlx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvaWNtcC5jLTY2My1cdGlmICghaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2ljbXAuYz0xMjkxPWJvb2wgaWNtcF9idWlsZF9wcm9iZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWNtcGhkciAqaWNtcGhkcilcbi0tXG5uZXQvaXB2NC9pY21wLmMtMTM4MS1cbm5ldC9pcHY0L2ljbXAuYzoxMzgyOlx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvaWNtcC5jLTEzODMtXHRpZiAoaW5fZGV2IFx1MDAyNlx1MDAyNiByY3VfYWNjZXNzX3BvaW50ZXIoaW5fZGV2LVx1MDAzZWlmYV9saXN0KSlcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MzYxPXN0YXRpYyBfX2JlMzIgaWdtcHYzX2dldF9zcmNhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTM2My17XG5uZXQvaXB2NC9pZ21wLmM6MzY0Olx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvaWdtcC5jLTM2NS1cdGNvbnN0IHN0cnVjdCBpbl9pZmFkZHIgKmlmYTtcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTEwMz1pbnQgaWdtcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTExNy1cbm5ldC9pcHY0L2lnbXAuYzoxMTE4Olx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvaWdtcC5jLTExMTktXHRpZiAoIWluX2Rldilcbi0tXG5uZXQvaXB2NC9pZ21wLmM9Mjg5ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcF9tY19saXN0ICppZ21wX21jX2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjkwMy1cbm5ldC9pcHY0L2lnbXAuYzoyOTA0Olx0XHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2NC9pZ21wLmMtMjkwNS1cdFx0aWYgKCFpbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jPTI5MTY9c3RhdGljIHN0cnVjdCBpcF9tY19saXN0ICppZ21wX21jX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pXG4tLVxubmV0L2lwdjQvaWdtcC5jLTI5MjYtXHRcdH1cbm5ldC9pcHY0L2lnbXAuYzoyOTI3Olx0XHRzdGF0ZS1cdTAwM2Vpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2NC9pZ21wLmMtMjkyOC1cdFx0aWYgKCFzdGF0ZS1cdTAwM2Vpbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jPTMwMjc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfc2ZfbGlzdCAqaWdtcF9tY2ZfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0zMDM3LVx0XHRzdHJ1Y3QgaW5fZGV2aWNlICppZGV2O1xubmV0L2lwdjQvaWdtcC5jOjMwMzg6XHRcdGlkZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2NC9pZ21wLmMtMzAzOS1cdFx0aWYgKHVubGlrZWx5KCFpZGV2KSlcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MzA1Nj1zdGF0aWMgc3RydWN0IGlwX3NmX2xpc3QgKmlnbXBfbWNmX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0zMDY5LVx0XHRcdH1cbm5ldC9pcHY0L2lnbXAuYzozMDcwOlx0XHRcdHN0YXRlLVx1MDAzZWlkZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2NC9pZ21wLmMtMzA3MS1cdFx0XHRpZiAoIXN0YXRlLVx1MDAzZWlkZXYpXG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYz0yNjk9aXBfcmN2X29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTI5NS1cdGlmICh1bmxpa2VseShvcHQtXHUwMDNlc3JyKSkge1xubmV0L2lwdjQvaXBfaW5wdXQuYzoyOTY6XHRcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbm5ldC9pcHY0L2lwX2lucHV0LmMtMjk3LVxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmM9MzYxPXN0YXRpYyBpbnQgaXBfcmN2X2ZpbmlzaF9jb3JlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTQxMS1cdH0gZWxzZSB7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjQxMjpcdFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvaXBfaW5wdXQuYy00MTMtXG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYy00NDEtXHRcdCAgIHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKSB7XG5uZXQvaXB2NC9pcF9pbnB1dC5jOjQ0MjpcdFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvaXBfaW5wdXQuYy00NDMtXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3Rwcm94eV9pcHY0LmM9NTA9X19iZTMyIG5mX3Rwcm94eV9sYWRkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHVzZXJfbGFkZHIsIF9fYmUzMiBkYWRkcilcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfdHByb3h5X2lwdjQuYy01OS1cdGxhZGRyID0gMDtcbm5ldC9pcHY0L25ldGZpbHRlci9uZl90cHJveHlfaXB2NC5jOjYwOlx0aW5kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3Rwcm94eV9pcHY0LmMtNjEtXHRpZiAoIWluZGV2KVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9NzczPXN0YXRpYyB2b2lkIF9faXBfZG9fcmVkaXJlY3Qoc3RydWN0IHJ0YWJsZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aTQgKmZsNCxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTc5Ny1cbm5ldC9pcHY0L3JvdXRlLmM6Nzk4Olx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvcm91dGUuYy03OTktXHRpZiAoIWluX2Rldilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTkwMj12b2lkIGlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTkxMS1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY0L3JvdXRlLmM6OTEyOlx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShydC1cdTAwM2Vkc3QuZGV2KTtcbm5ldC9pcHY0L3JvdXRlLmMtOTEzLVx0aWYgKCFpbl9kZXYgfHwgIUlOX0RFVl9UWF9SRURJUkVDVFMoaW5fZGV2KSkge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9OTY1PXN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTk4Mi1cbm5ldC9pcHY0L3JvdXRlLmM6OTgzOlx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvcm91dGUuYy05ODQtXG4tLVxubmV0L2lwdjQvcm91dGUuYz0xNzY2PWlwX3JvdXRlX2lucHV0X21jKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTc2OC17XG5uZXQvaXB2NC9yb3V0ZS5jOjE3Njk6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG5uZXQvaXB2NC9yb3V0ZS5jLTE3NzAtXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBSVENGX01VTFRJQ0FTVDtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTE4MzY9X19ta3JvdXRlX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xODUwLVx0LyogZ2V0IGEgd29ya2luZyByZWZlcmVuY2UgdG8gdGhlIG91dHB1dCBkZXZpY2UgKi9cbm5ldC9pcHY0L3JvdXRlLmM6MTg1MTpcdG91dF9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG5uZXQvaXB2NC9yb3V0ZS5jLTE4NTItXHRpZiAoIW91dF9kZXYpIHtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTIyMTU9aXBfcm91dGVfdXNlX2hpbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yMjE5LVx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG5uZXQvaXB2NC9yb3V0ZS5jOjIyMjA6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG5uZXQvaXB2NC9yb3V0ZS5jLTIyMjEtXHRzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoaGludCk7XG4tLVxubmV0L2lwdjQvcm91dGUuYz0yMjg3PWlwX3JvdXRlX2lucHV0X3Nsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yMjkxLVx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG5uZXQvaXB2NC9yb3V0ZS5jOjIyOTI6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG5uZXQvaXB2NC9yb3V0ZS5jLTIyOTMtXHRzdHJ1Y3QgZmxvd19rZXlzICpmbGtleXMgPSBOVUxMLCBfZmxrZXlzO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MjUxOD1pcF9yb3V0ZV9pbnB1dF9yY3Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yNTM0LVx0XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbm5ldC9pcHY0L3JvdXRlLmM6MjUzNTpcdFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xubmV0L2lwdjQvcm91dGUuYy0yNTM2LVx0XHRpbnQgb3VyID0gMDtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI1NDctXG5uZXQvaXB2NC9yb3V0ZS5jOjI1NDg6XHRcdFx0bDNfaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY0L3JvdXRlLmMtMjU0OS1cdFx0XHRpZiAobDNfaW5fZGV2KVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MjU4Nj1zdGF0aWMgc3RydWN0IHJ0YWJsZSAqX19ta3JvdXRlX291dHB1dChjb25zdCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjU5Ny1cbm5ldC9pcHY0L3JvdXRlLmM6MjU5ODpcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2X291dCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTI1OTktXHRpZiAoIWluX2Rldilcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI3MzY9c3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2tleV9oYXNoX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZsNCxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI4MDQtXHRcdC8qIFJBQ0U6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBpbmV0X3NlbGVjdF9hZGRyIGluc3RlYWQuICovXG5uZXQvaXB2NC9yb3V0ZS5jOjI4MDU6XHRcdGlmICghKGRldl9vdXQtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgfHwgIV9faW5fZGV2X2dldF9yY3UoZGV2X291dCkpIHtcbm5ldC9pcHY0L3JvdXRlLmMtMjgwNi1cdFx0XHRydGggPSBFUlJfUFRSKC1FTkVUVU5SRUFDSCk7XG4tLVxubmV0L2lwdjQvdWRwLmM9Mjc2MD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB1ZHBfdjRfZWFybHlfZGVtdXgoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNzc5LVx0aWYgKHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKSB7XG5uZXQvaXB2NC91ZHAuYzoyNzgwOlx0XHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjQvdWRwLmMtMjc4MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQmIzM5O3MgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGlzc3VlIHdpdGhpbiB0aGUgYGluX2Rldl9nZXRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHN3YXBwaW5nIG91dCBhIHNpbXBsZSBgcmVmY291bnRfaW5jYCBmb3IgYHJlZmNvdW50X2luY19ub3RfemVyb2AuICBUaGlzIGlzIGEgZGVmaW5pdGUgY2hhbmdlIGluIGhvdyB0aGUgZnVuY3Rpb24gYmVoYXZlcywgc2luY2UgaXQgbm93IHJldHVybnMgYE5VTExgIGlmIHRoZSByZWZlcmVuY2UgY291bnQgaXMgemVybyAqYmVmb3JlKiBpbmNyZW1lbnRpbmcgaXQsIHJhdGhlciB0aGFuIGluY3JlbWVudGluZyBhbmQgcG90ZW50aWFsbHkgY2F1c2luZyBhbiBpc3N1ZSBkb3duIHRoZSBsaW5lLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYSBzbWFsbCBmdW5jdGlvbmFsIGNoYW5nZSwgYnV0IGxldCBtZSBjb25zaWRlciBmdXp6aW5nLiAgVGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYSBhcmUgaW4gbXkgbWluZDogIGlzIGl0IGEgZG9jdW1lbnRhdGlvbiBjaGFuZ2U/IE5vLiAgUHVyZWx5IGRlY29yYXRpdmU/IE5vcGUuIE51bWVyaWMgY29uc3RhbnRzPyBOby4gIFVucmVhY2hhYmxlIGNvZGUgcGF0aHM/ICBEZWZpbml0ZWx5IG5vdCwgaXQmIzM5O3MgY29yZSBuZXR3b3JraW5nISBWZW5kb3Itc3BlY2lmaWMgZHJpdmVycyByZXF1aXJpbmcgc3BlY2lhbCBoYXJkd2FyZT8gIE5vcGUsIHRoaXMgaXMgZ2VuZXJhbCBuZXR3b3JrIHN0YWNrIGNvZGUuICBUZWFyZG93biBjYWxsYmFja3Mgb25seSBydW4gb24gUENJIGhvdC11bnBsdWc/IE5vIHdheS4KClRoaXMgcGF0Y2ggKmRvZXMqIGFsdGVyIGV4ZWN1dGlvbiBmbG93IGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgcmV0dXJuIHZhbHVlIGJhc2VkIG9uIHJlZmNvdW50IGNvbmRpdGlvbnMuICBJdCAqaXMqIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHNpbmNlIGl0JiMzOTtzIGNvcmUgbmV0d29ya2luZyBjb2RlLiBTbywgdGhlIHBhdGNoIHNlZW1zIGxpa2UgaXQmIzM5O3MgV29ydGhGdXp6aW5nPXRydWUuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgSSB0YXJnZXQgZm9yIGZ1enppbmcgYmFzZWQgb24gdGhpcyBjaGFuZ2U/IFRoZSBjb2RlIGl0c2VsZiBpcyBpbmxpbmVkLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHRoYXQgY2FsbCBgaW5fZGV2X2dldGAuIExldCYjMzk7cyB0cmFjZSB0aGUgY2FsbGVycy4uLiBPa2F5LCBsb29raW5nIGF0IHRoZSBjYWxscyBJJiMzOTttIHNlZWluZzoKLSBgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzYCAoc3RhdGljKSAtJmd0OyBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgIC0mZ3Q7IGBicl9tdWx0aWNhc3RfdG9nZ2xlYCAtJmd0OyBgYnJfbXVsdGljYXN0X3NldF9yb3V0ZXJgIC0mZ3Q7IGBicl9tdWx0aWNhc3Rfcm91dGVyX3NldGAgLSZndDsgYGJyX2Rldl9uZXdsaW5rYCBvciBgYnJfY2hhbmdlbGlua2AKLSBgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AgKHN0YXRpYykgLSZndDsgYGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AgLSZndDsgYGJyX211bHRpY2FzdF90b2dnbGVgIC0mZ3Q7IC4uLgotIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIChzdGF0aWMpIC0mZ3Q7IGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGlzIGNhbGxlZCBieSBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYD8gTm8sIGl0JiMzOTtzIGEgbmV0bGluayBjYWxsYmFjay4KClRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvaXB2NC9kZXZpbmV0LmNgIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGZ1enogdGFyZ2V0cyBiYXNlZCBvbiB0aG9zZSBjYWxsIGNoYWlucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9uZXRjb25mX2dldF9kZXZjb25mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZGV2aW5ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2RldmluZXQuYz0yMzM1PXN0YXRpYyBpbnQgaW5ldF9uZXRjb25mX3ZhbGlkX2dldF9yZXEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjM3My1cbm5ldC9pcHY0L2RldmluZXQuYzoyMzc0OnN0YXRpYyBpbnQgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mKHN0cnVjdCBza19idWZmICppbl9za2IsXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjM3NS1cdFx0XHRcdCAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9Mjk1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgZGV2aW5ldF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yOTYwLVx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX0dFVE5FVENPTkYsXG5uZXQvaXB2NC9kZXZpbmV0LmM6Mjk2MTpcdCAuZG9pdCA9IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZiwgLmR1bXBpdCA9IGluZXRfbmV0Y29uZl9kdW1wX2RldmNvbmYsXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjk2Mi1cdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgTmV0bGluayBDYWxsYmFjayBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgLiBUaGF0JiMzOTtzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGZvciBgUlRNX0dFVE5FVENPTkZgLCB3aGljaCBtYWtlcyBpdCBhIHBvdGVudGlhbGx5IGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtQZXJmZWN0LCBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuJiMzNDsKCkhhbmcgb24gYSBzZWNvbmTigKYgaXQmIzM5O3Mgc3RhdGljISBUaGUgc3R5bGUgZ3VpZGUgKnNwZWNpZmljYWxseSogc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cy4gVGhlIGFyZ3VtZW50IGlzIHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGdldCBpbmxpbmVkLCBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBUaGlzIG1ha2VzIHRoZW0gbGVzcyBhY2Nlc3NpYmxlIGZvciB0aGluZ3MgbGlrZSBkZWJ1Z2dpbmcgYW5kIHRyYWNpbmcuIEJ1dCB3YWl0Li4uIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgZGV2aW5ldF9ydG5sX21zZ19oYW5kbGVyc2AuIFRoYXQgbWVhbnMgaXQgKndvbiYjMzk7dCogYmUgaW5saW5lZCBhbmQgKmRvZXMqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gU28sIEkgbmVlZCB0byByZXRoaW5rIHRoaXMsIGFsdGhvdWdoIGl0JiMzOTtzICp0ZWNobmljYWxseSogY29tcGxpYW50LCB0aGUgc3Bpcml0IG9mIHRoZSBydWxlIGlzIHRvIGF2b2lkIHN0YXRpYy4KCkFscmlnaHQsIHNvIHRoZSBwcm9tcHQgaXMgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMmIzM0Oy4gVG8gc3RheSB0cnVlIHRvIHRoZSBzcGlyaXQgb2YgdGhlIHJ1bGUsIGV2ZW4gaWYgaXQmIzM5O3MgdGVjaG5pY2FsbHkgZmluZSwgSSYjMzk7ZCBsaWtlIHRvIGlkZW50aWZ5ICpvdGhlciogcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSG1tLCBsZXQmIzM5O3MgZXhwbG9yZSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIEkmIzM5O2xsIGhhdmUgYSBsb29rIGF0IHRoYXQgb25lIG5leHQgdG8gY2hlY2sgaWYgaXQmIzM5O3MgbW9yZSBhcHByb3ByaWF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzAzLVx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XG5uZXQvYnJpZGdlL2JyLmM6MzA0Olx0XHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xubmV0L2JyaWRnZS9ici5jLTMwNS1cdFx0YnJlYWs7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTQ2PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE2MC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE2MTpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE2Mi17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTk5PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAte1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjAxOlx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIHRydWUpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLX1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMDQ9dm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDUte1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjA2Olx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwNy19XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00Mjc1PXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMDAtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzMDE6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMDIte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM0NS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM0NjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM0Ny17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU4LVx0XHRcdGNvbnRpbnVlO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzU5Olx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjAtXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzYyLVx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2MzpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjQtfVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM5OS1cdGxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgXHUwMDI2dmctXHUwMDNldmxhbl9saXN0LCB2bGlzdClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQwMDpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwMS1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDQtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MDU6Ym9vbCBicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDYte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxNS1cdHZsYW4tXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MTY6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDE3LVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY1ND1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY2NC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY2NTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjY2LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMjk1PXN0YXRpYyBpbnQgYnJfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQ0OS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE0NTA6XHRcdGVyciA9IGJyX211bHRpY2FzdF90b2dnbGUoYnIsIG1jYXN0X3Nub29waW5nLCBleHRhY2spO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQ1MS1cdFx0aWYgKGVycilcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05OTI9aW50IGJyX211bHRpY2FzdF9zZXRfdmxhbl9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggbWNhc3Rfcm91dGVyKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk5MzppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTk0LVx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTA2OT12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDcxOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3Mi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDczOmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwNzQtXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU0Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTAtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTUxOnN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTUyLVx0XHRcdFx0XHRcdGJvb2wgb24pXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU1NS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NTY6c3RhdGljIGlubGluZSBpbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTctXHRcdFx0XHRcdFx0ICAgIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU2Mi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NjM6c3RhdGljIGlubGluZSBib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NjQtXHRcdFx0XHRcdFx0ICAgYm9vbCBvbilcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9NDE2PXN0YXRpYyBzc2l6ZV90IG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkLFxuLS1cbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy00MTkte1xubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjQyMDpcdHJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgYnJfbXVsdGljYXN0X3RvZ2dsZSk7XG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtNDIxLX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDM9c3RhdGljIHZvaWQgYnJfdmxhbl9wdXRfbWFzdGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMjE0LVx0XHRfX3ZsYW5fZGVsX2xpc3QobWFzdGVydik7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTU6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4obWFzdGVydiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMjE2LVx0XHRicl9tdWx0aWNhc3RfY3R4X2RlaW5pdChcdTAwMjZtYXN0ZXJ2LVx1MDAzZWJyX21jYXN0X2N0eCk7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMzU4LVx0X192bGFuX2ZsYWdzX2NvbW1pdCh2LCBmbGFncyk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzozNTk6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIHRydWUpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMzYwLVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTM5MD1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjctXHRcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVx1MDAzZXZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0Mjg6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtNDI5LVx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnYtXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTcxOT1zdGF0aWMgaW50IGJyX3ZsYW5fYWRkX2V4aXN0aW5nKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjAtXHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjc2MTpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTc2Mi1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz04OTQ9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTkyMC1cdFx0YnJfaW5mbyhiciwgXCYjMzQ7dmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWQsIGF1dG9tYXRpY2FsbHkgZGlzYWJsaW5nIG11bHRpY2FzdCB2bGFuIHNub29waW5nXFxuXCYjMzQ7KTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkyMTpcdFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKGJyLCBmYWxzZSwgTlVMTCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MjItXHR9XG4tLVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYz01NTA9c3RhdGljIGludCBicl92bGFuX3Byb2Nlc3NfZ2xvYmFsX29uZV9vcHRzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTU2NC1cdFx0bWNfc25vb3BpbmcgPSBubGFfZ2V0X3U4KHRiW0JSSURHRV9WTEFOREJfR09QVFNfTUNBU1RfU05PT1BJTkddKTtcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NTY1Olx0XHRpZiAoYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbih2LCAhIW1jX3Nub29waW5nKSlcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTY2LVx0XHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNDkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVgIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGlzIGFyZWEuIEFsc28sIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGlzIGEgbmV0bGluayBjYWxsYmFjazsgdGhvc2UgYXJlIG9mdGVuIGdvb2QgZW50cnkgcG9pbnRzIGJlY2F1c2UgdGhleSYjMzk7cmUgZGlyZWN0bHkgaGFuZGxpbmcgbmV0d29yayBjb25maWd1cmF0aW9uIGNoYW5nZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgLCBhbmQgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBuZXQvaXB2NC9kZXZpbmV0LmNgIHRvIHNlZSBpZiBpdCYjMzk7cyBzdGF0aWMuIFllcywgaXQmIzM5O3Mgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIGltbWVkaWF0ZSB1c2VmdWxuZXNzIGFzIGEgdG9wLWxldmVsIGVudHJ5IHBvaW50LCBhbHRob3VnaCBpdCBiZWluZyBhIG5ldGxpbmsgY2FsbGJhY2sgbWFrZXMgaXQgcmVsZXZhbnQuIE9rYXksIHdoYXQgYWJvdXQgYGluZXRfbmV0Y29uZl9kdW1wX2RldmNvbmZgPyBBbmQsIG5vcGUsIHRoYXQgb25lIGlzIGFsc28gc3RhdGljLiBBbmQgYGluZXRfZHVtcF9hZGRyYCBpcyBzdGF0aWMgdG9vLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIG5vdCB3aGF0IEkgd2FzIGhvcGluZyBmb3IuIFdoYXQgYWJvdXQgYGluZXRfc2VsZWN0X2FkZHJgPyBBaCwgKnRoYXQqIG9uZSBpcyBub24tc3RhdGljLiBUaW1lIHRvIGRpZyBpbnRvIGBpbmV0X3NlbGVjdF9hZGRyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9zZWxlY3RfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9hcnAuYz0zMzM9c3RhdGljIHZvaWQgYXJwX3NvbGljaXQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvYXJwLmMtMzczLVx0aWYgKCFzYWRkcilcbm5ldC9pcHY0L2FycC5jOjM3NDpcdFx0c2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldiwgdGFyZ2V0LCBSVF9TQ09QRV9MSU5LKTtcbm5ldC9pcHY0L2FycC5jLTM3NS1cbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MTM0Mz1zdGF0aWMgX19iZTMyIGluX2Rldl9zZWxlY3RfYWRkcihjb25zdCBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTEzNTgtXG5uZXQvaXB2NC9kZXZpbmV0LmM6MTM1OTpfX2JlMzIgaW5ldF9zZWxlY3RfYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMzIgZHN0LCBpbnQgc2NvcGUpXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTM2MC17XG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTE0MjctfVxubmV0L2lwdjQvZGV2aW5ldC5jOjE0Mjg6RVhQT1JUX1NZTUJPTChpbmV0X3NlbGVjdF9hZGRyKTtcbm5ldC9pcHY0L2RldmluZXQuYy0xNDI5LVxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTI3Mz1fX2JlMzIgZmliX2NvbXB1dGVfc3BlY19kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0zMDctXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzozMDg6XHRyZXR1cm4gaW5ldF9zZWxlY3RfYWRkcihkZXYsIGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLCBzY29wZSk7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0zMDktfVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzE1PV9fYmUzMiBmaWJfaW5mb191cGRhdGVfbmhjX3NhZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9uaF9jb21tb24gKm5oYyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyMS1cdGlmIChuaGMtXHUwMDNlbmhjX2ZhbWlseSAhPSBBRl9JTkVUKVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzMjI6XHRcdHJldHVybiBpbmV0X3NlbGVjdF9hZGRyKG5oYy1cdTAwM2VuaGNfZGV2LCAwLCBzY29wZSk7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyMy1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzI0LVx0bmggPSBjb250YWluZXJfb2YobmhjLCBzdHJ1Y3QgZmliX25oLCBuaF9jb21tb24pO1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzMjU6XHRzYWRkciA9IGluZXRfc2VsZWN0X2FkZHIobmgtXHUwMDNlZmliX25oX2RldiwgbmgtXHUwMDNlZmliX25oX2d3NCwgc2NvcGUpO1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzMjYtXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIyMjM9dm9pZCBmaWJfc2VsZWN0X3BhdGgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjUxLVx0XHRlbHNlXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjI1MjpcdFx0XHRmbDQtXHUwMDNlc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGwzbWRldiwgMCwgUlRfU0NPUEVfTElOSyk7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjI1My1cdH1cbi0tXG5uZXQvaXB2NC9pY21wLmM9ODE0PXZvaWQgX19pY21wX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IHR5cGUsIGludCBjb2RlLCBfX2JlMzIgaW5mbyxcbi0tXG5uZXQvaXB2NC9pY21wLmMtOTM2LVx0XHRpZiAoZGV2KVxubmV0L2lwdjQvaWNtcC5jOjkzNzpcdFx0XHRzYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2LCBpcGgtXHUwMDNlc2FkZHIsXG5uZXQvaXB2NC9pY21wLmMtOTM4LVx0XHRcdFx0XHRcdCBSVF9TQ09QRV9MSU5LKTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTEzMTM9dm9pZCBpcF9ydF9nZXRfc291cmNlKHU4ICphZGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcnRhYmxlICpydClcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMzQtXHRcdGVsc2Vcbm5ldC9pcHY0L3JvdXRlLmM6MTMzNTpcdFx0XHRzcmMgPSBpbmV0X3NlbGVjdF9hZGRyKHJ0LVx1MDAzZWRzdC5kZXYsXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMzYtXHRcdFx0XHRcdCAgICAgICBydF9uZXh0aG9wKHJ0LCBpcGgtXHUwMDNlZGFkZHIpLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MjczNj1zdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2hfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjgwMy1cbm5ldC9pcHY0L3JvdXRlLmM6MjgwNDpcdFx0LyogUkFDRTogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIGluZXRfc2VsZWN0X2FkZHIgaW5zdGVhZC4gKi9cbm5ldC9pcHY0L3JvdXRlLmMtMjgwNS1cdFx0aWYgKCEoZGV2X291dC1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB8fCAhX19pbl9kZXZfZ2V0X3JjdShkZXZfb3V0KSkge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjgxMi1cdFx0XHRpZiAoIWZsNC1cdTAwM2VzYWRkcilcbm5ldC9pcHY0L3JvdXRlLmM6MjgxMzpcdFx0XHRcdGZsNC1cdTAwM2VzYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCxcbm5ldC9pcHY0L3JvdXRlLmMtMjgxNC1cdFx0XHRcdFx0XHRcdCAgICAgIFJUX1NDT1BFX0xJTkspO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjgxOC1cdFx0XHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoZmw0LVx1MDAzZWRhZGRyKSlcbm5ldC9pcHY0L3JvdXRlLmM6MjgxOTpcdFx0XHRcdGZsNC1cdTAwM2VzYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCxcbm5ldC9pcHY0L3JvdXRlLmMtMjgyMC1cdFx0XHRcdFx0XHRcdCAgICAgIGZsNC1cdTAwM2VmbG93aTRfc2NvcGUpO1xubmV0L2lwdjQvcm91dGUuYy0yODIxLVx0XHRcdGVsc2UgaWYgKCFmbDQtXHUwMDNlZGFkZHIpXG5uZXQvaXB2NC9yb3V0ZS5jOjI4MjI6XHRcdFx0XHRmbDQtXHUwMDNlc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldl9vdXQsIDAsXG5uZXQvaXB2NC9yb3V0ZS5jLTI4MjMtXHRcdFx0XHRcdFx0XHQgICAgICBSVF9TQ09QRV9IT1NUKTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI4NjItXHRcdFx0aWYgKGZsNC1cdTAwM2VzYWRkciA9PSAwKVxubmV0L2lwdjQvcm91dGUuYzoyODYzOlx0XHRcdFx0Zmw0LVx1MDAzZXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXZfb3V0LCAwLFxubmV0L2lwdjQvcm91dGUuYy0yODY0LVx0XHRcdFx0XHRcdFx0ICAgICAgUlRfU0NPUEVfTElOSyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTYzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipSZXZpZXdpbmcgdGhlIGBpbl9kZXZfZ2V0YCBhbmQgYGluZXRfc2VsZWN0X2FkZHJgIFJlbGF0aW9uc2hpcCoqCgpPa2F5LCBzbyBJIHdhcyByZXZpZXdpbmcgdGhlIGNvZGUgYW5kIGluaXRpYWxseSB0aG91Z2h0IGBpbmV0X3NlbGVjdF9hZGRyYCB3YXMgdXNpbmcgYF9faW5fZGV2X2dldF9yY3VgLCBub3QgdGhlIHJlZ3VsYXIgYGluX2Rldl9nZXRgLiBUaGF0IGZlbHQgcmlnaHQsIGJhc2VkIG9uIHRoZSBjb250ZXh0IGFuZCB0eXBpY2FsIHVzZSBjYXNlcy4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIHBhdGNoIOKAkyBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgYWN0dWFsbHkgKm1vZGlmaWVzKiBgaW5fZGV2X2dldGAgaXRzZWxmISBUaGF0JiMzOTtzIGEgZGlmZmVyZW50IHN0b3J5LiBHaXZlbiB0aGUgc2NvcGUgb2YgdGhpcywgSSBuZWVkIHRvIHRob3JvdWdobHkgcmUtZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgaW5fZGV2X2dldGAgbm93IHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5mb3Jlc2VlbiBjb25zZXF1ZW5jZXMgd2l0aCB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb3JlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbi4gVGltZSB0byBnbyBiYWNrIGFuZCBtZXRob2RpY2FsbHkgdHJhY2UgYWxsIHRoZSBjYWxscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbl9kZXZfZ2V0XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jPTMyMzU9c3RhdGljIGludCBwaWNrX2xvY2FsX2lwYWRkcnMoc3RydWN0IGM0aXdfZGV2ICpkZXYsIHN0cnVjdCBpd19jbV9pZCAqY21faWQpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0Mi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jOjMyNDM6XHRpbmQgPSBpbl9kZXZfZ2V0KGRldi1cdTAwM2VyZGV2LmxsZGkucG9ydHNbMF0pO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0NC1cdGlmICghaW5kKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jPTE3NDQ9c3RhdGljIGludCBpcmRtYV9hZGRfbXFoXzQoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmMtMTc2NC1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jOjE3NjU6XHRcdGlkZXYgPSBpbl9kZXZfZ2V0KGlwX2Rldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNzY2LVx0XHRpZiAoIWlkZXYpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MzIwPXN0YXRpYyBib29sIGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMzMwLVx0Y2FzZSBBRl9JTkVUOlxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MzMxOlx0XHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0zMzItXHRcdGlmICghaW5fZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzIzMD1uZXR4ZW5fY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzIzOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MzIzOTpcdGluZGV2ID0gaW5fZGV2X2dldChkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMjQwLVx0aWYgKCFpbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmM9NDA1ND1xbGNuaWNfY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDU5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwNjA6XHRpbmRldiA9IGluX2Rldl9nZXQoZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDYxLVx0aWYgKCFpbmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaD0yMzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICpfX2luX2Rldl9nZXRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQxLVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg6MjQyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluX2RldmljZSAqaW5fZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQzLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNTY9c3RhdGljIHZvaWQgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1Ny17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxNTg6XHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbl9kZXZfZ2V0KGJyLVx1MDAzZWRldik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxNTktXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTg3PXN0YXRpYyB2b2lkIGJyX2lwNF9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTg4LXtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE4OTpcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoYnItXHUwMDNlZGV2KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE5MC1cbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjM3ND1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yNDA1LVx0XHRpZiAoZGV2KVxubmV0L2lwdjQvZGV2aW5ldC5jOjI0MDY6XHRcdFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDctXHRcdGlmICghaW5fZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoIG9mIGBpbl9kZXZfZ2V0YCoqCgpPa2F5LCBzbyBgaW5fZGV2X2dldGAgcG9wcyB1cCBpbiBxdWl0ZSBhIGZldyBwbGFjZXMsIGRvZXNuJiMzOTt0IGl0PyBMZXQmIzM5O3Mgc2VlLCBpdCYjMzk7cyB1c2VkIGluIGBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgLCBgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AsIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgLCBgaXBvaWJfaXNfZGV2X21hdGNoX2FkZHJfcmN1YCwgYHBpY2tfbG9jYWxfaXBhZGRyc2Agd2l0aGluIGN4Z2I0LCBgaXJkbWFfYWRkX21xaF80YCwgYW5kIHRoZW4gYG5ldHhlbl9jb25maWdfaW5kZXZfYWRkcmAgYW5kIGBxbGNuaWNfY29uZmlnX2luZGV2X2FkZHJgLgoKRnJvbSBhIG5ldHdvcmtpbmcgcGVyc3BlY3RpdmUsIGl0JiMzOTtzIG1haW5seSBpbnZvbHZlZCB3aXRoIHRoZSBicmlkZ2UgbXVsdGljYXN0IGNvZGUgKGBicl9tdWx0aWNhc3QuY2ApIGFuZCBkZXZpY2UgY29uZmlndXJhdGlvbiBjb2RlIChgZGV2aW5ldC5jYCkuIFNvLCBmb3IgdGhlIGJyaWRnZSBtdWx0aWNhc3QgcGF0aCwgdGhlIGVudHJ5IHBvaW50IHNlZW1zIHRvIGJlIGBicl9tdWx0aWNhc3RfdG9nZ2xlYC4gQW5kLCBpbiBgZGV2aW5ldC5jYCwgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAgYXBwZWFycyB0byBiZSB3aGVyZSBpdCYjMzk7cyBiZWluZyBoaXQsIHByb2JhYmx5IHZpYSBuZXRsaW5rLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBvcnRhbmNlLCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAgaW4gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYGluX2Rldl9nZXRgIGlzIGJlaW5nIHV0aWxpemVkIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNDY9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTYxOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxOTk9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwMC17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDE6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDItfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIwND12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwNS17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDY6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjA3LX1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyNzU9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwMC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMwMTp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwMi17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzQ2OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNTgtXHRcdFx0Y29udGludWU7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNTk6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odnBvcnQsIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2MC1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjItXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzYzOlx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NC19XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjUtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjctXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzk5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2bGFuLCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDAwOlx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDAxLVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQwNTpib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNi17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDE1LVx0dmxhbi1cdTAwM2Vwcml2X2ZsYWdzIF49IEJSX1ZMRkxBR19HTE9CQUxfTUNBU1RfRU5BQkxFRDtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQxNjpcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTctXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjU0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjY0LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjY1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2NjYtXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE4MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IEZ1bmN0aW9uIENhbGwqKgoKUmlnaHQsIHNvIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBpc24mIzM5O3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBwYXJ0IG9mIHRoZSBvdmVyYWxsIEFQSSBhbmQgYWNjZXNzaWJsZSBmcm9tIG11bHRpcGxlIGxvY2F0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLCBhbmQgSSYjMzk7bGwgc3RhcnQgd2l0aCBgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCBzdWdnZXN0cyBzb21lIGxpbmsgd2l0aCBJR01QIHNub29waW5nLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgaG93IGl0JiMzOTtzIGFjdHVhbGx5IGludm9rZWQgdGhlcmUgYW5kIHdoYXQgY29udGV4dCBpdCYjMzk7cyBvcGVyYXRpbmcgaW4uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGFyZ3VtZW50cyBiZWluZyBwYXNzZWQsIHRoZSBjb25kaXRpb25hbCBsb2dpYyBzdXJyb3VuZGluZyB0aGUgY2FsbCwgYW5kIG9mIGNvdXJzZSBhbnkgZXJyb3IgaGFuZGxpbmcuIFRoaXMgc2hvdWxkIHF1aWNrbHkgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2YgaXRzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBtdWx0aWNhc3Qgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX2lwNF9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTQxPXZvaWQgYnJfbXVsdGljYXN0X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1NS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE1NjpzdGF0aWMgdm9pZCBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTU3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxODE9dm9pZCBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODIte1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTgzOlx0YnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzKGJyKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE4NC1cdGJyX2lwNl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgKioKCk9rYXksIHNvIGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AgaXMgY2FsbGluZyBgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLCB0aGV5JiMzOTtyZSBsaWtlbHkgcmVsYXRlZC4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCBvZiBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AgaXMgYmVpbmcgKmNhbGxlZCBmcm9tKi4gSSBuZWVkIHRvIHNlZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMuIFRpbWUgdG8gbG9vayBhdCB0aGUgY2FsbCBncmFwaCBmb3IgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgbXVsdGljYXN0IHNldHVwLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBjb250cm9sIHBsYW5lIGludGVyYWN0aW9uLCB0aGUgZGF0YSBwYXRoIGhhbmRsaW5nLCBvciBwb3RlbnRpYWxseSBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgZXhpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF9qb2luX3Nub29wZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xNjQ9c3RhdGljIGludCBicl9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTczLVx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTc0Olx0XHRicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE3NS1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNzY9c3RhdGljIGlubGluZSB2b2lkIGJyX2lwNl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTgwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTgxOnZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTgyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2NjU9aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2OTgtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2OTk6XHQvKiBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyBoYXMgdGhlIHBvdGVudGlhbCB0byBjYXVzZVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzAwLVx0ICogYW4gTUxEIFJlcG9ydC9MZWF2ZSB0byBiZSBkZWxpdmVyZWQgdG8gYnJfbXVsdGljYXN0X3Jjdixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MTItXHRcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3MTM6XHRcdFx0YnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoYnIpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzE0LVx0XHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTgwPXZvaWQgYnJfbXVsdGljYXN0X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjk4MTp2b2lkIGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05ODItdm9pZCBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNDIxPXN0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTQyNC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE0MjU6c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MjYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjYxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQnJpZGdlIE11bHRpY2FzdCBDb25maWd1cmF0aW9uIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBicl9kZXZfb3BlbmAgZGlyZWN0bHkgY2FsbHMgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBkb2VzIGFzIHdlbGwuIFRoYXQgbWFrZXMgYGJyX2Rldl9vcGVuYCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVgIHN0cm9uZyBpbml0aWFsIGNhbmRpZGF0ZXMgZm9yIGVudHJ5IHBvaW50cyB3aGVuIGxvb2tpbmcgYXQgbXVsdGljYXN0IHNub29waW5nIGNvbmZpZ3VyYXRpb24gd2l0aGluIGEgYnJpZGdlLiBBaCwgcmlnaHQsIGBicl9kZXZfb3BlbmAgaXMgdGhlIGBuZG9fb3BlbmAgY2FsbGJhY2sgZm9yIGJyaWRnZSBkZXZpY2VzLCBzbyB0aGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpUaGVuIEkgc2VlIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBiZWluZyBjYWxsZWQgZnJvbSBib3RoIGBicl9jaGFuZ2VsaW5rYCBhbmQgYG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZWAuICpUaGF0KiBtYWtlcyBgYnJfY2hhbmdlbGlua2AgYSBsaWtlbHkgZW50cnkgcG9pbnQgdG9vLCBhbm90aGVyIGF2ZW51ZSBmb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbiBvciBpbnZlc3RpZ2F0aW9uLgoKTm93LCBsZXQmIzM5O3Mgbm90IGZvcmdldCBuZXRsaW5rIGNhbGxiYWNrcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGFzIGl0JiMzOTtzIGEgbmV0bGluayBjYWxsYmFjaywgd2hpY2ggaGludHMgYXQgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4gSSBzaG91bGQgYWxzbyBkaWcgaW50byB0aGUgaGFuZGxlcnMgbG9jYXRlZCB3aXRoaW4gYGRldmluZXRfcnRubF9tc2dfaGFuZGxlcnNgIGluIGBuZXQvaXB2NC9kZXZpbmV0LmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyB1c2VmdWwgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmluZXRfcnRubF9tc2dfaGFuZGxlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9kZXZpbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZGV2aW5ldC5jPTI5NDU9c3RhdGljIHN0cnVjdCBydG5sX2FmX29wcyBpbmV0X2FmX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yOTUyLVxubmV0L2lwdjQvZGV2aW5ldC5jOjI5NTM6c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIGRldmluZXRfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbm5ldC9pcHY0L2RldmluZXQuYy0yOTU0LVx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX05FV0FERFIsIC5kb2l0ID0gaW5ldF9ydG1fbmV3YWRkcixcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmM9Mjk2Nz12b2lkIF9faW5pdCBkZXZpbmV0X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjk3NC1cbm5ldC9pcHY0L2RldmluZXQuYzoyOTc1Olx0cnRubF9yZWdpc3Rlcl9tYW55KGRldmluZXRfcnRubF9tc2dfaGFuZGxlcnMpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTI5NzYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM0OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCBpcyB0aGUgZnVuY3Rpb24gcmVnaXN0ZXJlZCB0byBoYW5kbGUgYFJUTV9HRVRORVRDT05GYC4gVGhhdCBtYWtlcyBpdCBhIHBvdGVudGlhbCBmb2N1cyBzeW1ib2wuIEl0ICpjb3VsZCogYmUgYSBkZWNlbnQgZW50cnkgcG9pbnQsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhlIHByb21wdCwgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLi4uJiMzNDsgTXkgaW5pdGlhbCBjb25jZXJuIGlzIHRoYXQgaXQmIzM5O3MgYHN0YXRpY2AuIEhvd2V2ZXIsIHNpbmNlIGl0JiMzOTtzIHVzZWQgaW4gYSBmdW5jdGlvbiBwb2ludGVyIGFycmF5LCBpdCAqc2hvdWxkbiYjMzk7dCogYmUgaW5saW5lZCwgYW5kIHRoZXJlZm9yZSBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IHN1aXRhYmxlLiBTdGlsbCwganVzdCB0byBiZSBjb21wbGV0ZWx5IHNhZmUsIG1heWJlIEkgY2FuIGZpbmQgYSBtb3JlIHVuaXZlcnNhbGx5IGFjY2VwdGVkIHN5bWJvbC4KClRoZW4gSSBnZXQgZGlzdHJhY3RlZCBhbmQgdGhpbmsgYWJvdXQgYGluX2Rldl9nZXRgLCB3aGljaCBpcyBhbHNvIGEgZGVjZW50IG9wdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcyBiZXNpZGVzIG15IHByaW1hcnkgdXNlLiBNb3N0IG9mIHRoZSBvdGhlciBsb2NhdGlvbnMgaXQmIzM5O3MgdXNlZCBhcmUgaW4gZGV2aWNlIGRyaXZlcnMsIGxpa2UgYGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdWAgYW5kIGBuZXR4ZW5fY29uZmlnX2luZGV2X2FkZHJgLiBNeSBmb2N1cyBpcyB0aGUgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHdoaWNoIGluY2x1ZGVzIGBicl9tdWx0aWNhc3QuY2AgYW5kIGBkZXZpbmV0LmNgLiBTbyBtYXliZSBgYnJfY2hhbmdlbGlua2Agb3IgYGJyX2Rldl9vcGVuYCB3b3VsZCBiZSBiZXR0ZXIgY2hvaWNlcy4gSSB3aWxsIGNoZWNrIHRoZSBmb3JtZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX2NoYW5nZWxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMjQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBicl9wb2xpY3lbSUZMQV9CUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTI5NC1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjEyOTU6c3RhdGljIGludCBicl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpicmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTEyOTYtXHRcdFx0IHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xNTkzPXN0YXRpYyBpbnQgYnJfZGV2X25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNjExLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTYxMjpcdGVyciA9IGJyX2NoYW5nZWxpbmsoZGV2LCB0YiwgZGF0YSwgZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2MTMtXHRpZiAoZXJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE5NDg9c3RydWN0IHJ0bmxfbGlua19vcHMgYnJfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xOTU1LVx0Lm5ld2xpbmtcdFx0PSBicl9kZXZfbmV3bGluayxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE5NTY6XHQuY2hhbmdlbGlua1x0XHQ9IGJyX2NoYW5nZWxpbmssXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xOTU3LVx0LmRlbGxpbmtcdFx0PSBicl9kZXZfZGVsZXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDI4MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OgoKKipTdGF0aWMgVmFyaWFibGVzIGluIHRoZSBCcmlkZ2UgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgYnJfY2hhbmdlbGlua2AuLi4gdGhhdCYjMzk7cyBzdGF0aWMuIEhtbSwgdGhlbiB3aGF0IGFib3V0IGBicl9kZXZfb3BlbmA/ICpUaGF0JiMzOTtzKiBzdGF0aWMgYXMgd2VsbC4gSSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlc2UgdGhpbmdzLiBOb3csIHdoYXQgYWJvdXQgYGJyX211bHRpY2FzdF90b2dnbGVgPyBPaCwgaXQgbG9va3MgbGlrZSB0aGF0IG9uZSBpcyAqbm90KiBzdGF0aWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBnZXR0aW5nIGEgY29tcGxldGUgcGljdHVyZSBoZXJlIC0gbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gVGltZSB0byBjaGVjayBgYnJfbXVsdGljYXN0X3RvZ2dsZWAmIzM5O3MgaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMsIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gR290dGEgdHJhY2UgdGhlIHVzYWdlIGFuZCBlbnN1cmUgSSB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNDY9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTYxOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxOTk9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwMC17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDE6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDItfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIwND12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwNS17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDY6XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjA3LX1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyNzU9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwMC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMwMTp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwMi17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzQ2OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNTgtXHRcdFx0Y29udGludWU7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNTk6XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odnBvcnQsIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2MC1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjItXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzYzOlx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NC19XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjUtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjctXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mzk5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2bGFuLCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDAwOlx0XHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4odmxhbiwgb24pO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDAxLVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQwNTpib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNi17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDE1LVx0dmxhbi1cdTAwM2Vwcml2X2ZsYWdzIF49IEJSX1ZMRkxBR19HTE9CQUxfTUNBU1RfRU5BQkxFRDtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQxNjpcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTctXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjU0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjY0LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjY1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2NjYtXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTc1NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBpcyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gTm93LCB3aGF0IGFib3V0IGBpbmV0X3NlbGVjdF9hZGRyYD8gSG1tLCBpdCB1c2VzIGBfX2luX2Rldl9nZXRfcmN1YCwgbm90IHRoZSBmdW5jdGlvbiBpbiB0aGUgcGF0Y2gsIGBpbl9kZXZfZ2V0YC4gUmlnaHQsIHRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgYGluX2Rldl9nZXRgLCBzbyB3ZSBuZWVkIHRvIGZvY3VzIG9uIHdoaWNoIGZ1bmN0aW9ucyBjYWxsIHRoYXQuCgpMZXQmIzM5O3Mgc2VlLCB0aGUgY2FsbGVycyBvZiBgaW5fZGV2X2dldGAgYXJlIHF1aXRlIGEgZmV3OgoqICAgYGJyX2lwNF9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AsIHdoaWNoIGZsb3dzIHRvIGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2Agd2hpY2ggZ29lcyB0byBgYnJfbXVsdGljYXN0X3RvZ2dsZWAgYW5kIGBicl9kZXZfb3BlbmAuCiogICBgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AsIHdoaWNoIGZsb3dzIHRvIGBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgIHdoaWNoIGdvZXMgdG8gYGJyX211bHRpY2FzdF90b2dnbGVgIGFuZCBgYnJfZGV2X3N0b3BgLgoqICAgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAsIHdoaWNoIGZsb3dzIHRvIGBkZXZpbmV0X3J0bmxfbXNnX2hhbmRsZXJzYC4KKiAgIGBpcG9pYl9pc19kZXZfbWF0Y2hfYWRkcl9yY3VgLCB3aGljaCBmbG93cyB0byBgaXBvaWJfbWNhc3Rfam9pbmAgYW5kIGdvZXMgdG8gYGlwb2liX21jYXN0X2pvaW5fdGFza2AuCiogICBgcGlja19sb2NhbF9pcGFkZHJzYCwgd2hpY2ggZmxvd3MgdG8gYGM0aXdfY29ubmVjdGAsIGFuZCBgYzRpd19jcmVhdGVfbGlzdGVuYC4KKiAgIGBpcmRtYV9hZGRfbXFoXzRgLCB3aGljaCBmbG93cyB0byBgaXJkbWFfYWRkX21xaGAgd2hpY2ggZ29lcyB0byBgaXJkbWFfY3JlYXRlX2xpc3RlbmAgYW5kIGBpcmRtYV9jb25uZWN0YC4KKiAgIGBuZXR4ZW5fY29uZmlnX2luZGV2X2FkZHJgLCB3aGljaCBmbG93cyB0byBgbmV0eGVuX25pY19wcm9iZWAuCiogICBgcWxjbmljX2NvbmZpZ19pbmRldl9hZGRyYCwgd2hpY2ggZmxvd3MgdG8gYHFsY25pY19wcm9iZWAuCgpTbywgYGJyX211bHRpY2FzdF90b2dnbGVgIGxvb2tzIGxpa2UgYSBzb2xpZCBub24tc3RhdGljIGVudHJ5IHBvaW50LiBBbmQgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCBhbmQgYGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AgYXJlIGFsc28gbm9uLXN0YXRpYywgYnkgZXh0ZW5zaW9uLiBJJiMzOTtsbCBtYWtlIGEgbm90ZSBvZiB0aG9zZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNzY9c3RhdGljIGlubGluZSB2b2lkIGJyX2lwNl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTgwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTgxOnZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTgyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4NDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJyaWRnZSBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgLCBgYnJfbXVsdGljYXN0X2xlYXZlX3Nub29wZXJzYCwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBhcmUgYWxsIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVxdWlyZWQgZm9yIHRoZW0gdG8gZnVuY3Rpb24gY29ycmVjdGx5LgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGUgYnJvYWRlciBjb250ZXh0LiBJIHJlbWVtYmVyIGBpbl9kZXZfZ2V0YCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaGAuIEFuZCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXQmIzM5O3MgdXRpbGl6ZWQgd2l0aGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gR2l2ZW4gdGhhdCwgSSByZWNhbGwgdGhhdCBgYnJfbXVsdGljYXN0LmNgIHJlbGllcyBvbiBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5ldC9icmlkZ2UvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnPTY9Y29uZmlnIEJSSURHRVxuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyNzUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTmV0d29yayBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBJbmNsdWRpbmcgYEJSSURHRV9JR01QX1NOT09QSU5HYCBzZWVtcyBsaWtlIGEgc29saWQgY2hvaWNlLCBhbmQsIG9idmlvdXNseSwgdGhlIGJhc2UgYEJSSURHRWAgb3B0aW9uIGlzIGVzc2VudGlhbC4gTm93LCBJJiMzOTttIHRyeWluZyB0byByZW1lbWJlci4uLiB3aGF0IGFib3V0IGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgPyBUaGF0JiMzOTtzIGJ1cmllZCBzb21ld2hlcmUgaW4gYG5ldC9pcHY0L2RldmluZXQuY2AsIHJpZ2h0PyBBaGEsIHllcywgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCBpcy4gQW5kIEkgc2VlbSB0byByZWNhbGwgdGhhdCBgZGV2aW5ldC5jYCBvbmx5IGdldHMgY29tcGlsZWQgaWYgYENPTkZJR19JTkVUYCBpcyBlbmFibGVkIOKAkyBhIGNydWNpYWwgZGVwZW5kZW5jeSB0byBrZWVwIGluIG1pbmQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIGFuZCBjb25maXJtIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2aW5ldFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlLTEzLVx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTE1LVx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzcxMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCcmlkZ2UgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYGRldmluZXQub2AgKmFsd2F5cyogZ2V0cyBjb21waWxlZCB3aXRoIGBDT05GSUdfSU5FVGAgZW5hYmxlZC4gVGhhdCB0ZWxscyBtZSByaWdodCBhd2F5IHRoYXQgYElORVRgIGlzIGEgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gQW5kLCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGJyaWRnZXMgYW5kIG11bHRpY2FzdCwgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBpbmNsdWRlIGBCUklER0VgIGFuZCBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGZvciB0aGUgYnJpZGdlIG11bHRpY2FzdCBmdW5jdGlvbmFsaXR5IGl0c2VsZi4KCkxldCBtZSB0aGluayBhYm91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgcmVhbGx5IGNlbnRyYWwgdG8gdGhpcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlc2U6IGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AsIGBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVgLiBJIHdhcyBhbHNvIGdvaW5nIHRvIGFkZCBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCwgZXZlbiB0aG91Z2ggaXQgaXMgYSBgc3RhdGljYCBmdW5jdGlvbiwgYmVjYXVzZSBpdCBpcyBjYWxsZWQgYnkgTmV0bGluay4KCkhvbGQgb24sIHRoZSBjb21waWxlciBtaWdodCBvcHRpbWl6ZSBvdXQgYSBkaXN0aW5jdCBzeW1ib2wgZm9yIGEgc3RhdGljIGZ1bmN0aW9uIGlmIGl0IGNhbi4gQnV0IHNpbmNlIGl0cyBhZGRyZXNzICppcyogYmVpbmcgdGFrZW4sIGl0ICpzaG91bGQqIGhhdmUgYSBzeW1ib2wuIFRvIGJlIGFic29sdXRlbHkgc2FmZSwgSSYjMzk7bSB0aGlua2luZyBJIGNhbiBqdXN0IHVzZSB0aGUgYnJpZGdlIGZ1bmN0aW9ucy4gTm9wZSEgQ2hlY2tpbmcgYGRldmluZXQuY2AsIGl0IGxvb2tzIGxpa2UgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAgaXMgdGhlIG9ubHkgY2FsbGVyLiBJIHNob3VsZCBpbmNsdWRlIGl0LgoKVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGhhcyBjaGFuZ2VkIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDE3Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnJfaXA2X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODAtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxODE6dm9pZCBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODIte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY2NT1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY5OC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY5OTpcdC8qIGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGNhdXNlXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MDAtXHQgKiBhbiBNTEQgUmVwb3J0L0xlYXZlIHRvIGJlIGRlbGl2ZXJlZCB0byBicl9tdWx0aWNhc3RfcmN2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcxMi1cdFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDcxMzpcdFx0XHRicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MTQtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2NjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyB0aGUgTm9uLVN0YXRpYyBOYXR1cmUgb2YgYSBGdW5jdGlvbiBhbmQgSXRzIFBvdGVudGlhbCBVc2FnZSoqCgpSaWdodCwgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCBpc24mIzM5O3Qgc3RhdGljLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgaW4gYSB3YXkgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgZm9yIG15IGN1cnJlbnQgd29yay4gR2l2ZW4gdGhhdCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGhvdyBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCBpcyB1c2VkIHdpdGhpbiBgbmV0L2lwdjQvZGV2aW5ldC5jYC4gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBjb25maXJtIHRoZSBkZXRhaWxzLCBjb250ZXh0IGFuZCBhbnkgc2lkZSBlZmZlY3RzIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZSB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgd2l0aCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGJlZm9yZSBJIG1vdmUgb24uIFRoaXMgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIGNvdWxkIHNhdmUgbWUgYSBoZWFkYWNoZSBkb3duIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9kZXZpbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZGV2aW5ldC5jPTIzMzU9c3RhdGljIGludCBpbmV0X25ldGNvbmZfdmFsaWRfZ2V0X3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYy0yMzczLVxubmV0L2lwdjQvZGV2aW5ldC5jOjIzNzQ6c3RhdGljIGludCBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9pcHY0L2RldmluZXQuYy0yMzc1LVx0XHRcdFx0ICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY0L2RldmluZXQuYz0yOTUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBkZXZpbmV0X3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTI5NjAtXHR7LnByb3RvY29sID0gUEZfSU5FVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVUQ09ORixcbm5ldC9pcHY0L2RldmluZXQuYzoyOTYxOlx0IC5kb2l0ID0gaW5ldF9uZXRjb25mX2dldF9kZXZjb25mLCAuZHVtcGl0ID0gaW5ldF9uZXRjb25mX2R1bXBfZGV2Y29uZixcbm5ldC9pcHY0L2RldmluZXQuYy0yOTYyLVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI0MAoJCQkJCQkJb3V0cHV0OiAxNzAKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRm9jdXMgU3ltYm9scyBhbmQgUmVhc29uaW5nIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCBob3cgdG8gYmVzdCB0YXJnZXQgdGhpcyBwYXRjaCBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggYGluX2Rldl9nZXRgLiBJbml0aWFsbHksIEkgdGhvdWdodCBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCBtaWdodCBiZSBhIGdvb2QgdGFyZ2V0LCBidXQgc2luY2UgaXQmIzM5O3MgZGVjbGFyZWQgYHN0YXRpY2AsIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSBpdHMgc2NvcGUsIHNvIGl0JiMzOTtzIG91dC4gSSBkbyBuZWVkIHRvIGZhY3RvciBpbiB0aGF0IGBpbl9kZXZfZ2V0YCBpcyBjYWxsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGRyaXZlcnMgc3VjaCBhcyBpbiBgbmV0eGVuX2NvbmZpZ19pbmRldl9hZGRyYCBhbmQgYHFsY25pY19jb25maWdfaW5kZXZfYWRkcmAuCgpNeSBpbnN0aW5jdCBpcyB0byBsZWFuIHRvd2FyZHMgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYXMgcHJpbWFyeSB0YXJnZXRzLiBJIHdlbnQgYmFjayBhbmQgcmUtZXhhbWluZWQgYG5ldC9pcHY0L2RldmluZXQuY2AsIGRvdWJsZS1jaGVja2luZyBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgY2FsbCBgaW5fZGV2X2dldGAsIGJ1dCBJIGNvbmZpcm1lZCBteSBlYXJsaWVyIGdyZXAg4oCTIHRoZSBvbmx5IG90aGVyIGNhbGwgdGhlcmUgd2FzIHRoZSBzdGF0aWMgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAuIEFsc28gdG9vayBhIGxvb2sgYXQgYGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdWAsIGFuZCB0aGF0IGFsc28gaGFwcGVucyB0byBiZSBzdGF0aWMuCgpUaGVyZWZvcmUsIGFmdGVyIGEgZGVlcGVyIGRpdmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlIG9wdGltYWwgZm9jdXMgc3ltYm9scyBhcmU6CgoqICAgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYAoqICAgYGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AKKiAgIGBicl9tdWx0aWNhc3RfdG9nZ2xlYAoKVGhlc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCBmcnVpdGZ1bCBzdGFydGluZyBwb2ludHMsIHdpdGggdGhvc2UgYnJpZGdlIG11bHRpY2FzdCBzbm9vcGluZyBmdW5jdGlvbnMgYmVpbmcgdGhlIGtleS4KClRoZSBjb25maWcgZmxhZ3MgSSYjMzk7bSBwbGFubmluZyB0byB1c2UgYXJlOiBgSU5FVGAsIGBCUklER0VgLCBhbmQgYEJSSURHRV9JR01QX1NOT09QSU5HYC4KCk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgYnVnIGJ5IHJlcGxhY2luZyBgcmVmY291bnRfaW5jYCB3aXRoIGByZWZjb3VudF9pbmNfbm90X3plcm9gIHdoZW4gY2FsbGluZyBgaW5fZGV2X2dldGAuIFRoaXMgaXMgYSBwcmV0dHkgY3JpdGljYWwgY2hhbmdlIGluIGEgY29yZSBuZXR3b3JraW5nIGlubGluZSBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9ucyBJIGlkZW50aWZpZWQgYXJlIHVzZWQgYnkgdGhlIGJyaWRnZSBtdWx0aWNhc3Qgc25vb3BpbmcgZnVuY3Rpb25hbGl0eSwgSVB2NCBkZXZpbmV0IG5ldGxpbmsgY2FsbGJhY2tzLCBhbmQgc2V2ZXJhbCBkcml2ZXJzLiBUaGF0IG1ha2VzIGl0IGxpa2VseSBpdCYjMzk7cyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2Ugc2hvdWxkIGZ1enogdGhvcm91Z2hseS4KCkFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX211bHRpY2FzdF9qb2luX3Nub29wZXJzJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfdG9nZ2xlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGJ1ZyBpbiBgaW5fZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AgaW5zdGVhZCBvZiBgcmVmY291bnRfaW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBuZXR3b3JraW5nIGlubGluZSBmdW5jdGlvbiB1c2VkIGJ5IGJyaWRnZSBtdWx0aWNhc3Qgc25vb3BpbmcsIElQdjQgZGV2aW5ldCBuZXRsaW5rIGNhbGxiYWNrcywgYW5kIHNldmVyYWwgZHJpdmVycy4gSXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX0lHTVBfU05PT1BJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X3RvZ2dsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByZWZjb3VudCBidWcgaW4gYGluX2Rldl9nZXRgIGJ5IHVzaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUgbmV0d29ya2luZyBpbmxpbmUgZnVuY3Rpb24gdXNlZCBieSBicmlkZ2UgbXVsdGljYXN0IHNub29waW5nLCBJUHY0IGRldmluZXQgbmV0bGluayBjYWxsYmFja3MsIGFuZCBzZXZlcmFsIGRyaXZlcnMuIEl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMTg6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGluX2Rldl9nZXRgIHRvIHVzZSBgcmVmY291bnRfaW5jX25vdF96ZXJvYCBpbnN0ZWFkIG9mIGByZWZjb3VudF9pbmNgIHdoZW4gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHRvIGFuIGBpbl9kZXZpY2VgIHVuZGVyIFJDVS4gVGhpcyBpcyBhIGNsYXNzaWMgZml4IGZvciBhIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJlZmNvdW50IGJ1ZywgcHJldmVudGluZyB0aGUgYWNxdWlzaXRpb24gb2YgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXN0cm95ZWQuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpbGUgS01TQU4gZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MuIFNpbmNlIHRoaXMgcGF0Y2ggZGVhbHMgZW50aXJlbHkgd2l0aCBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTZkZjAwZjA0MDJhYmY3NWZkNDY5ZDZlNmYxMzUwNjFmMjQyZDNkYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDE1IDE4OjE5OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAppbmRleCA2MDMyZWVhMjUzOWE2Li5hMTQ0NmRhNjQyMDBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaApAQCAtMjQ1LDggJiM0MzsyNDUsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7Ci0JaWYgKGluX2RldikKLQkJcmVmY291bnRfaW5jKCZhbXA7aW5fZGV2LSZndDtyZWZjbnQpOwomIzQzOwlpZiAoaW5fZGV2ICZhbXA7JmFtcDsgIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2luX2Rldi0mZ3Q7cmVmY250KSkKJiM0MzsJCWluX2RldiA9IE5VTEw7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGluX2RldjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDE4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDUKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBpbl9kZXZfZ2V0YCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBpbl9kZXZfZ2V0YCB3aXRoaW4gYGluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oYCwgYW5kIGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHJlcGxhY2luZyBhIHN0YW5kYXJkIGByZWZjb3VudF9pbmNgIHdpdGggYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFRoZSBvbGRlciBjb2RlIGp1c3QgaW5jcmVtZW50ZWQgdGhlIHJlZmVyZW5jZSBjb3VudCwgcmVnYXJkbGVzcy4gVGhlIG5ldyBjb2RlIGludHJvZHVjZXMgYSBjaGVjazogKmlmKiB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGFscmVhZHkgemVybyAqYmVmb3JlKiB3ZSB0cnkgdG8gaW5jcmVtZW50IGl0LCBpdCBtZWFucyB0aGUgYGluX2RldmAgb2JqZWN0IGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGZyZWVkIOKAkyB3ZSYjMzk7cmUgaW4gdGhlIG1pZGRsZSBvZiB0ZWFyZG93biwgc28gd2UgYWJzb2x1dGVseSAqc2hvdWxkbiYjMzk7dCogdHJ5IHRvIHRha2UgYW5vdGhlciByZWZlcmVuY2UuIEluc3RlYWQsIHdlJiMzOTtsbCBzZXQgYGluX2RldmAgdG8gTlVMTCwgZWZmZWN0aXZlbHkgcHJldmVudGluZyBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIGEgdmVyeSBjbGVhbiBhbmQgdGFyZ2V0ZWQgYXBwcm9hY2ggdG8gYSBwb3RlbnRpYWwgb2JqZWN0IGxpZmV0aW1lIHByb2JsZW0uCgpUaGlzIGlzIHRleHRib29rIHVzZS1hZnRlci1mcmVlIHRlcnJpdG9yeS4gV2Ugd2VyZSBwcm9iYWJseSBzZWVpbmcgYSBzaXR1YXRpb24gd2hlcmUgYSBwb2ludGVyIHdhcyBiZWluZyB1c2VkIGFmdGVyIGl0cyBjb3JyZXNwb25kaW5nIG9iamVjdCBoYWQgYmVlbiBmcmVlZCwgYW5kIHRoaXMgaXMgd2h5IHdlJiMzOTtyZSBjaGFuZ2luZyB0aGlzIHJvdXRpbmUgdG8gcHJldmVudCBpdCBmcm9tIGFjcXVpcmluZyByZWZlcmVuY2VzIHRvIGEgcmVzb3VyY2UgdGhhdCBtYXkgb3IgbWF5IG5vdCBleGlzdCBhdCB0aGF0IHRpbWUuIFdlIHJlYWxseSBkb24mIzM5O3Qgd2FudCB0byBnZXQgaW50byB0aGF0IHNpdHVhdGlvbiEKCkdpdmVuIHRoYXQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBmaXggaXMgcHJpbWFyaWx5IGFkZHJlc3NpbmcgbWVtb3J5IHNhZmV0eSwgc3BlY2lmaWNhbGx5IHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgZXhhY3RseSB0aGVzZSBraW5kcyBvZiBpc3N1ZXMuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgZGVhbHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSYjMzk7cmUgb25seSBjaGFuZ2luZyB0aGUgKmhhbmRsaW5nKiBvZiBleGlzdGluZyBkYXRhLCBzbyBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4KClRoZXJlZm9yZSwgYWZ0ZXIgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gY29uZmlybSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaGlzIGlzIGEgY2xhc3NpYyBVQUYgZml4LCBhbmQgS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgdG8ga2VlcCBhbiBleWUgb24gdGhpcyB0eXBlIG9mIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaW5fZGV2X2dldGAgdG8gdXNlIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2Agd2hlbiBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gYW4gYGluX2RldmljZWAgdW5kZXIgUkNVLiBUaGlzIGlzIGEgY2xhc3NpYyBmaXggZm9yIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgcmVmY291bnQgYnVnLCBwcmV2ZW50aW5nIHRoZSBhY3F1aXNpdGlvbiBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gU2luY2UgdGhpcyBwYXRjaCBkZWFscyBlbnRpcmVseSB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGluX2Rldl9nZXRgIHRvIHVzZSBgcmVmY291bnRfaW5jX25vdF96ZXJvYCBpbnN0ZWFkIG9mIGByZWZjb3VudF9pbmNgIHdoZW4gYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHRvIGFuIGBpbl9kZXZpY2VgIHVuZGVyIFJDVS4gVGhpcyBpcyBhIGNsYXNzaWMgZml4IGZvciBhIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIHJlZmNvdW50IGJ1ZywgcHJldmVudGluZyB0aGUgYWNxdWlzaXRpb24gb2YgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXN0cm95ZWQuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpbGUgS01TQU4gZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MuIFNpbmNlIHRoaXMgcGF0Y2ggZGVhbHMgZW50aXJlbHkgd2l0aCBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MTk6MzUuMzYyNDQ0OTk2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NjgwMDU3NTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc1wiLFxuICAgIFwiYnJfbXVsdGljYXN0X2xlYXZlX3Nub29wZXJzXCIsXG4gICAgXCJicl9tdWx0aWNhc3RfdG9nZ2xlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW5fZGV2X2dldGAgdG8gdXNlIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2Agd2hlbiBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gYW4gYGluX2RldmljZWAgdW5kZXIgUkNVLiBUaGlzIGlzIGEgY2xhc3NpYyBmaXggZm9yIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgcmVmY291bnQgYnVnLCBwcmV2ZW50aW5nIHRoZSBhY3F1aXNpdGlvbiBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gU2luY2UgdGhpcyBwYXRjaCBkZWFscyBlbnRpcmVseSB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGJ1ZyBpbiBgaW5fZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AgaW5zdGVhZCBvZiBgcmVmY291bnRfaW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBuZXR3b3JraW5nIGlubGluZSBmdW5jdGlvbiB1c2VkIGJ5IGJyaWRnZSBtdWx0aWNhc3Qgc25vb3BpbmcsIElQdjQgZGV2aW5ldCBuZXRsaW5rIGNhbGxiYWNrcywgYW5kIHNldmVyYWwgZHJpdmVycy4gSXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MTk6MzUuMzYyNDUwMjc2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcyNDU3NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTZkZjAwZjA0MDJhYmY3NWZkNDY5ZDZlNmYxMzUwNjFmMjQyZDNkYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxODoxOTozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oXFxuaW5kZXggNjAzMmVlYTI1MzlhNi4uYTE0NDZkYTY0MjAwYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oXFxuQEAgLTI0NSw4ICsyNDUsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbi1cXHRpZiAoaW5fZGV2KVxcbi1cXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmluX2Rldi1cXHUwMDNlcmVmY250KTtcXG4rXFx0aWYgKGluX2RldiBcXHUwMDI2XFx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZpbl9kZXYtXFx1MDAzZXJlZmNudCkpXFxuK1xcdFxcdGluX2RldiA9IE5VTEw7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRyZXR1cm4gaW5fZGV2O1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjE5OjM2LjgzNTQ3OTMzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExODQ3OTUwMjM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9JR01QX1NOT09QSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNcIixcbiAgICBcImJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc1wiLFxuICAgIFwiYnJfbXVsdGljYXN0X3RvZ2dsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGJ1ZyBpbiBgaW5fZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AgaW5zdGVhZCBvZiBgcmVmY291bnRfaW5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBuZXR3b3JraW5nIGlubGluZSBmdW5jdGlvbiB1c2VkIGJ5IGJyaWRnZSBtdWx0aWNhc3Qgc25vb3BpbmcsIElQdjQgZGV2aW5ldCBuZXRsaW5rIGNhbGxiYWNrcywgYW5kIHNldmVyYWwgZHJpdmVycy4gSXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTZkZjAwZjA0MDJhYmY3NWZkNDY5ZDZlNmYxMzUwNjFmMjQyZDNkYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDE4OjE5OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFxuaW5kZXggNjAzMmVlYTI1MzlhNi4uYTE0NDZkYTY0MjAwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFxuQEAgLTI0NSw4ICsyNDUsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcbi1cdGlmIChpbl9kZXYpXG4tXHRcdHJlZmNvdW50X2luYyhcdTAwMjZpbl9kZXYtXHUwMDNlcmVmY250KTtcbitcdGlmIChpbl9kZXYgXHUwMDI2XHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2aW5fZGV2LVx1MDAzZXJlZmNudCkpXG4rXHRcdGluX2RldiA9IE5VTEw7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBpbl9kZXY7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MTk6MzYuODM1NDgwNzA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNDYwODg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBSZWZjb3VudCBJc3N1ZSBpbiB0aGUgS2VybmVsJ3MgTmV0d29yayBTdGFjayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIG1ha2luZyBhIHNlZW1pbmdseSBzbWFsbCwgYnV0IHBvdGVudGlhbGx5IGltcGFjdGZ1bCwgY2hhbmdlIHRvIGBpbl9kZXZfZ2V0YCBpbiBgaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmhgLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIGlzIHJlcGxhY2luZyBhIHNpbXBsZSBgcmVmY291bnRfaW5jYCB3aXRoIGByZWZjb3VudF9pbmNfbm90X3plcm9gLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYWRkcmVzc2luZyBhIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcsIHZlcnkgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBzaW1pbGFyIG1lbW9yeSBzYWZldHkgaXNzdWUgd2l0aGluIHRoZSBgaW5fZGV2aWNlYCBzdHJ1Y3R1cmUuIFRoaXMgYGluX2Rldl9nZXRgIGZ1bmN0aW9uIGlzIGlubGluZSwgd2hpY2ggbWVhbnMgaXQncyBzcHJpbmtsZWQgdGhyb3VnaG91dCB0aGUga2VybmVsIHNvdXJjZSBjb2RlLCBzbyBhIGJ1ZyBoZXJlIGNvdWxkIGJlIHF1aXRlIHdpZGVzcHJlYWQgYW5kIGRpZmZpY3VsdCB0byB0cmFjayBkb3duIHdpdGhvdXQgcHJvcGVyIHNjcnV0aW55LlxuXG5UaGUgcHJldmlvdXMgY29kZSBzaW1wbHkgaW5jcmVtZW50ZWQgdGhlIHJlZmVyZW5jZSBjb3VudCAoYGluX2Rldi1cdTAwM2VyZWZjbnRgKSBvbiB0aGUgYGluX2RldmljZWAgb2JqZWN0LiBUaGUgbmV3IGNvZGUsIGhvd2V2ZXIsIGNoZWNrcyBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIHplcm8gYmVmb3JlIGF0dGVtcHRpbmcgdGhlIGluY3JlbWVudC4gSWYgaXQgKmlzKiB6ZXJvLCBhbmQgdGhlIGluY3JlbWVudCB3b3VsZCBmYWlsLCBgaW5fZGV2YCBpcyB0aGVuIHNldCB0byBOVUxMLCB3aGljaCBtZWFucyB0aGUgY2FsbGVyIHdvbid0IHVzZSBhIGRhbmdsaW5nIHBvaW50ZXIuIFRoaXMgaXMgYSBjbGFzc2ljIHBhdHRlcm4gdG8gcHJldmVudCBhIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBgaW5fZGV2aWNlYCBzdHJ1Y3QgaXMgYWxyZWFkeSBkZWFsbG9jYXRlZC5cblxuTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBvZiB0aGlzIGZ1bmN0aW9uLiBHaXZlbiBpdCdzIGlubGluZSwgSSdsbCBuZWVkIHRvIHVzZSBzb21lIHRvb2xpbmcsIGxpa2UgYGdyZXBgIG9yIHBlcmhhcHMgYW4gSURFIHdpdGggY29kZSBpbmRleGluZywgdG8gZmluZCBhbGwgaW5zdGFuY2VzIHdoZXJlIGBpbl9kZXZfZ2V0YCBpcyB1c2VkLiBVbmRlcnN0YW5kaW5nICpob3cqIGFuZCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpbGwgYmUgY3J1Y2lhbCB0byBhc3Nlc3NpbmcgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIHZ1bG5lcmFiaWxpdHkgYW5kIGVuc3VyaW5nIHRoZSBwYXRjaCBpcyBlZmZlY3RpdmUgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy4gSXQnbGwgYWxzbyBoZWxwIHBpbnBvaW50IHRoZSBleGFjdCBzY2VuYXJpbyB0aGF0IHRyaWdnZXJlZCB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEZyb20gaGVyZSwgSSB3aWxsIGFzc2VzcyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoxOTo0MS44NDAwOTMwMjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4OTg2NTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbl9kZXZfZ2V0XFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmM9MzIzNT1zdGF0aWMgaW50IHBpY2tfbG9jYWxfaXBhZGRycyhzdHJ1Y3QgYzRpd19kZXYgKmRldiwgc3RydWN0IGl3X2NtX2lkICpjbV9pZClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jLTMyNDItXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmM6MzI0MzpcXHRpbmQgPSBpbl9kZXZfZ2V0KGRldi1cXHUwMDNlcmRldi5sbGRpLnBvcnRzWzBdKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYy0zMjQ0LVxcdGlmICghaW5kKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmM9MTc0ND1zdGF0aWMgaW50IGlyZG1hX2FkZF9tcWhfNChzdHJ1Y3QgaXJkbWFfZGV2aWNlICppd2RldixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jLTE3NjQtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmM6MTc2NTpcXHRcXHRpZGV2ID0gaW5fZGV2X2dldChpcF9kZXYpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jLTE3NjYtXFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MzIwPXN0YXRpYyBib29sIGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0zMzAtXFx0Y2FzZSBBRl9JTkVUOlxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jOjMzMTpcXHRcXHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMzMyLVxcdFxcdGlmICghaW5fZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYz0zMjMwPW5ldHhlbl9jb25maWdfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTMyMzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYzozMjM5OlxcdGluZGV2ID0gaW5fZGV2X2dldChkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzI0MC1cXHRpZiAoIWluZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jPTQwNTQ9cWxjbmljX2NvbmZpZ19pbmRldl9hZGRyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDU5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYzo0MDYwOlxcdGluZGV2ID0gaW5fZGV2X2dldChkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYy00MDYxLVxcdGlmICghaW5kZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaD0yMzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICpfX2luX2Rldl9nZXRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaC0yNDEtXFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg6MjQyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluX2RldmljZSAqaW5fZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oLTI0My17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNTY9c3RhdGljIHZvaWQgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxNTcte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE1ODpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbl9kZXZfZ2V0KGJyLVxcdTAwM2VkZXYpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1OS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDE4Nz1zdGF0aWMgdm9pZCBicl9pcDRfbXVsdGljYXN0X2xlYXZlX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODgte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE4OTpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbl9kZXZfZ2V0KGJyLVxcdTAwM2VkZXYpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE5MC1cXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYz0yMzc0PXN0YXRpYyBpbnQgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mKHN0cnVjdCBza19idWZmICppbl9za2IsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjQwNS1cXHRcXHRpZiAoZGV2KVxcbm5ldC9pcHY0L2RldmluZXQuYzoyNDA2OlxcdFxcdFxcdGluX2RldiA9IGluX2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjQwNy1cXHRcXHRpZiAoIWluX2RldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MTk6NDQuMDI5OTY1NzU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4ODQxNzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBpbl9kZXZfZ2V0YCBGdW5jdGlvbiBVc2FnZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBpbl9kZXZfZ2V0YCBhbmQgaXRzIHVzYWdlIGFjcm9zcyB0aGUga2VybmVsLiBJIHNlZSBpdCdzIHVzZWQgaW4gYG5ldC9pcHY0L2RldmluZXQuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLCBwbHVzIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCDigJMgaW50ZXJlc3RpbmcsIGFuZCBhIGZldyBkcml2ZXJzIGFzIHdlbGwuIFRoZSBmYWN0IHRoYXQgaXQncyBhbiBpbmxpbmUgZnVuY3Rpb24gaXMgaW1tZWRpYXRlbHkgbWFraW5nIG1lIHRoaW5rIGFib3V0IHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZSBJIG1pZ2h0IHdhbnQgdG8gbWFrZS4gQW55IG1vZGlmaWNhdGlvbiB0byBgaW5fZGV2X2dldGAgd291bGQgYWZmZWN0ICpldmVyeSogcGxhY2UgaXQncyBjYWxsZWQuIEhtbSwgcmlnaHQsIGl0J3MgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24sIHNvIEkgbmVlZCB0byBiZSBjYXJlZnVsLiBMZXQgbWUgc2VlLi4uIEkgc2hvdWxkIHByb2JhYmx5IGludmVzdGlnYXRlIGhvdyB3aWRlbHkgaXQncyB1c2VkIGJ5IGZpbmRpbmcgKmFsbCogdGhlIGNhbGxlcnMuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBibGFzdCByYWRpdXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjE5OjQ3LjIxODM4NjIzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjEyNzExMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluX2Rldl9nZXRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYz0zMjM1PXN0YXRpYyBpbnQgcGlja19sb2NhbF9pcGFkZHJzKHN0cnVjdCBjNGl3X2RldiAqZGV2LCBzdHJ1Y3QgaXdfY21faWQgKmNtX2lkKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0Mi1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYzozMjQzOlxcdGluZCA9IGluX2Rldl9nZXQoZGV2LVxcdTAwM2VyZGV2LmxsZGkucG9ydHNbMF0pO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jLTMyNDQtXFx0aWYgKCFpbmQpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYz0xNzQ0PXN0YXRpYyBpbnQgaXJkbWFfYWRkX21xaF80KHN0cnVjdCBpcmRtYV9kZXZpY2UgKml3ZGV2LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmMtMTc2NC1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYzoxNzY1OlxcdFxcdGlkZXYgPSBpbl9kZXZfZ2V0KGlwX2Rldik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmMtMTc2Ni1cXHRcXHRpZiAoIWlkZXYpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYz0zMjA9c3RhdGljIGJvb2wgaXBvaWJfaXNfZGV2X21hdGNoX2FkZHJfcmN1KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTMzMC1cXHRjYXNlIEFGX0lORVQ6XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MzMxOlxcdFxcdGluX2RldiA9IGluX2Rldl9nZXQoZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0zMzItXFx0XFx0aWYgKCFpbl9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jPTMyMzA9bmV0eGVuX2NvbmZpZ19pbmRldl9hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMtMzIzOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jOjMyMzk6XFx0aW5kZXYgPSBpbl9kZXZfZ2V0KGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMjQwLVxcdGlmICghaW5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmM9NDA1ND1xbGNuaWNfY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jLTQwNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jOjQwNjA6XFx0aW5kZXYgPSBpbl9kZXZfZ2V0KGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWFpbi5jLTQwNjEtXFx0aWYgKCFpbmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oPTIzNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbl9kZXZpY2UgKl9faW5fZGV2X2dldF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oLTI0MS1cXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaDoyNDI6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQzLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDE1Nj1zdGF0aWMgdm9pZCBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1Ny17XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTU4OlxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoYnItXFx1MDAzZWRldik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTU5LVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTg3PXN0YXRpYyB2b2lkIGJyX2lwNF9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE4OC17XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTg5OlxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoYnItXFx1MDAzZWRldik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTkwLVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jPTIzNzQ9c3RhdGljIGludCBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0yNDA1LVxcdFxcdGlmIChkZXYpXFxubmV0L2lwdjQvZGV2aW5ldC5jOjI0MDY6XFx0XFx0XFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0yNDA3LVxcdFxcdGlmICghaW5fZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoxOTo0OS40MzExMDU2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mzk2NTY3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIGBpbl9kZXZfZ2V0YCBVc2FnZSoqXG5cbkFscmlnaHQsIHNvIGBpbl9kZXZfZ2V0YCBpcyBkZWZpbml0ZWx5IGEga2V5IGZ1bmN0aW9uLCBJIGNhbiBzZWUgdGhhdC4gQnV0IEknbSBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlIG5vdzsgaXQncyBwZXJoYXBzIG5vdCBxdWl0ZSBhcyB1YmlxdWl0b3VzIGFzIEkgaW5pdGlhbGx5IHN1c3BlY3RlZC4gSW50ZXJlc3RpbmcuIExldCdzIGRpZyBkZWVwZXIuIEhvbGQgb24sIEkgdGhvdWdodCB0aGVyZSBtaWdodCBiZSBvdGhlciBsb2NhdGlvbnMgY2FsbGluZyBpdCB3aXRoaW4gdGhlIHNhbWUgZmlsZSwgYnV0IG15IGluaXRpYWwgZ3JlcCBvbmx5IHR1cm5lZCB1cCBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYC4gVGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQuIE9rYXksIHRpbWUgdG8gY2hlY2sgYG5ldC9pcHY0L2RldmluZXQuY2AgZGlyZWN0bHkgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkndmUgZ290IHRoZSBmdWxsIHNjb3BlIG9mIGBpbl9kZXZfZ2V0YCdzIGNhbGxlcnMgaW4gdGhhdCBjb250ZXh0LiBOZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIHNvbWV0aGluZyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoxOTo1My4zNzA3NjU3NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0OTcxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5fZGV2X2dldFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2RldmluZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9kZXZpbmV0LmM9MjM3ND1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDUtXFx0XFx0aWYgKGRldilcXG5uZXQvaXB2NC9kZXZpbmV0LmM6MjQwNjpcXHRcXHRcXHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDctXFx0XFx0aWYgKCFpbl9kZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjE5OjUzLjQyMDI2NjIxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDQ0NzgyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGluX2Rldl9nZXRgIFVzYWdlKipcblxuSG1tLCB0aGF0J3MgdW5leHBlY3RlZC4gTXkgaW50dWl0aW9uLCBiYXNlZCBvbiBwYXN0IHdvcmsgaW4gbmV0d29ya2luZywgd2FzIHRoYXQgYGluX2Rldl9nZXRgIHdhcyBhIGJpdCBtb3JlIHViaXF1aXRvdXMgdGhhbiB3aGF0IEknbSBzZWVpbmcuIEl0IHN1Z2dlc3RzIHRoZXJlJ3MgbGVzcyByZWxpYW5jZSBvbiBpdCB0aGFuIEknZCBpbml0aWFsbHkgYXNzdW1lZC4gVGhpcyB3YXJyYW50cyBkZWVwZXIgaW52ZXN0aWdhdGlvbi5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJIG5lZWQgdG8gbG9vayBiZXlvbmQgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGRlbHZlIGludG8gdGhlIGNvcmUgSUdNUCBpbXBsZW1lbnRhdGlvbi4gYG5ldC9pcHY0L2lnbXAuY2AgaXMgYSBwcmltZSBjYW5kaWRhdGUsIGFzIG11bHRpY2FzdCBtZW1iZXJzaGlwIG1hbmFnZW1lbnQgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgdGhpcyBraW5kIG9mIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCB3aXRoIHNvbWUgcmVndWxhcml0eS4gQnV0IEkgc2hvdWxkIGV4cGFuZCB0aGUgc2VhcmNoIHRvIG90aGVyIGFyZWFzIHRoYXQgaW50ZXJhY3Qgd2l0aCBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBvciBJUCBhZGRyZXNzIG1hbmFnZW1lbnQsIGp1c3QgdG8gYmUgdGhvcm91Z2guIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGFjdHVhbGx5IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoxOTo1Ni42MjQ3NDg4NDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTU5NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluX2Rldl9nZXRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZGV2aW5ldC5jPTIzNzQ9c3RhdGljIGludCBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0yNDA1LVxcdFxcdGlmIChkZXYpXFxubmV0L2lwdjQvZGV2aW5ldC5jOjI0MDY6XFx0XFx0XFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0yNDA3LVxcdFxcdGlmICghaW5fZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoxOTo1Ni42NzQ3MTMyMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4NjI2NjI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBpbl9kZXZfZ2V0YCBVc2FnZSoqXG5cbkFscmlnaHQsIHNvIGBpbl9kZXZfZ2V0YCBhcHBlYXJzIHRvIGJlIHByZXR0eSBuYXJyb3dseSBzY29wZWQuIEV4Y2VsbGVudCEgTGVzcyBjb2RlIHRvIHNjcnV0aW5pemUgYW5kIGxlc3MgcG90ZW50aWFsIGZvciB3aWRlc3ByZWFkIGltcGFjdCBpZiBzb21ldGhpbmcncyBhbWlzcy4gTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIGNvbmZpcm1lZCDigJMgaXQncyBub3QgYSBkZWVwbHkgZW1iZWRkZWQgZnVuY3Rpb24gYWNyb3NzIHRoZSBlbnRpcmUgbmV0d29ya2luZyBzdGFjaywgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIHRhcmdldGVkIGRlYnVnZ2luZy5cblxuTm93LCBpbnN0ZWFkIG9mIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gdGhlIGRpcmVjdCBjYWxscywgSSBzaG91bGQgcmVhbGx5IHNoaWZ0IGZvY3VzIGFuZCBkaWcgaW50byBob3cgdGhvc2Ugc3BlY2lmaWMgY2FsbGluZyBwb2ludHMgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIGNyaXRpY2FsIFJDVSBzeW5jaHJvbml6YXRpb24uIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gZWl0aGVyIGBfX2luX2Rldl9nZXRfcmN1YCBvciBgX19pbl9kZXZfZ2V0X3J0bmxgLiBVbmRlcnN0YW5kaW5nIHdoaWNoIG9mIHRoZXNlIHR3byBpcyB0aGUgZG9taW5hbnQgdXNhZ2Ugd2lsbCBkZXRlcm1pbmUgaG93IGRlZXBseSBJIG5lZWQgdG8gZ28gdG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBoYXBwZW5pbmcuIEnigJlsbCBzdGFydCB3aXRoIHdoaWNoZXZlciBpcyBlYXNpZXIgdG8gbmF2aWdhdGUgZ2l2ZW4gdGhpcyBsaW1pdGVkIGluZm9ybWF0aW9uLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIHdoZXJlIHRoZSBib3R0bGVuZWNrcyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG1pZ2h0IGJlIGx1cmtpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTAzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6MDAuMDYwOTgyOTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjcyNDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faW5fZGV2X2dldF9yY3VcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvYXJwLmM9MjIzPXN0YXRpYyBpbnQgYXJwX2NvbnN0cnVjdG9yKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKVxcbi0tXFxubmV0L2lwdjQvYXJwLmMtMjM1LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2NC9hcnAuYzoyMzY6XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2FycC5jLTIzNy1cXHRpZiAoIWluX2Rldikge1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9MzMzPXN0YXRpYyB2b2lkIGFycF9zb2xpY2l0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvYXJwLmMtMzQzLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2NC9hcnAuYzozNDQ6XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2FycC5jLTM0NS1cXHRpZiAoIWluX2Rldikge1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9NDc0PXN0YXRpYyBpbmxpbmUgaW50IGFycF9md2RfcHJveHkoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxcbi0tXFxubmV0L2lwdjQvYXJwLmMtNDkyLVxcbm5ldC9pcHY0L2FycC5jOjQ5MzpcXHRvdXRfZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShydC1cXHUwMDNlZHN0LmRldik7XFxubmV0L2lwdjQvYXJwLmMtNDk0LVxcdGlmIChvdXRfZGV2KVxcbi0tXFxubmV0L2lwdjQvYXJwLmM9NzAyPXN0YXRpYyBpbnQgYXJwX3Byb2Nlc3Moc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9hcnAuYy03MDQtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbm5ldC9pcHY0L2FycC5jOjcwNTpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvYXJwLmMtNzA2LVxcdHN0cnVjdCBhcnBoZHIgKmFycDtcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYz0xMzU5PV9fYmUzMiBpbmV0X3NlbGVjdF9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiBkc3QsIGludCBzY29wZSlcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0xMzY5LVxcdG5ldCA9IGRldl9uZXRfcmN1KGRldik7XFxubmV0L2lwdjQvZGV2aW5ldC5jOjEzNzA6XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0xMzcxLVxcdGlmICghaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTE0MDEtXFx0ICAgIChkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIG1hc3Rlcl9pZHgpKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pcHY0L2RldmluZXQuYzoxNDAyOlxcdCAgICAoaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpKSkge1xcbm5ldC9pcHY0L2RldmluZXQuYy0xNDAzLVxcdFxcdGFkZHIgPSBpbl9kZXZfc2VsZWN0X2FkZHIoaW5fZGV2LCBzY29wZSk7XFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTQxNS1cXG5uZXQvaXB2NC9kZXZpbmV0LmM6MTQxNjpcXHRcXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTE0MTctXFx0XFx0aWYgKCFpbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmM9MTQ4Mj1fX2JlMzIgaW5ldF9jb25maXJtX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTQ5Mi1cXHRmb3JfZWFjaF9uZXRkZXZfcmN1KG5ldCwgZGV2KSB7XFxubmV0L2lwdjQvZGV2aW5ldC5jOjE0OTM6XFx0XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0xNDk0LVxcdFxcdGlmIChpbl9kZXYpIHtcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYz0xOTI4PXN0YXRpYyBpbnQgaW5ldF9kdW1wX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTE5NjEtXFx0XFx0XFx0fVxcbm5ldC9pcHY0L2RldmluZXQuYzoxOTYyOlxcdFxcdFxcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTk2My1cXHRcXHRcXHRpZiAoIWluX2RldilcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0xOTczLVxcdGZvcl9lYWNoX25ldGRldl9kdW1wKHRndF9uZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2lwdjQvZGV2aW5ldC5jOjE5NzQ6XFx0XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0xOTc1LVxcdFxcdGlmICghaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jPTI0MzY9c3RhdGljIGludCBpbmV0X25ldGNvbmZfZHVtcF9kZXZjb25mKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjQ2NS1cXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2lwdjQvZGV2aW5ldC5jOjI0NjY6XFx0XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0yNDY3LVxcdFxcdGlmICghaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jPTI1MDc9c3RhdGljIHZvaWQgZGV2aW5ldF9jb3B5X2RmbHRfY29uZihzdHJ1Y3QgbmV0ICpuZXQsIGludCBpKVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTI1MTQtXFxubmV0L2lwdjQvZGV2aW5ldC5jOjI1MTU6XFx0XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0yNTE2LVxcdFxcdGlmIChpbl9kZXYgXFx1MDAyNlxcdTAwMjYgIXRlc3RfYml0KGksIGluX2Rldi1cXHUwMDNlY25mLnN0YXRlKSlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTI3Mz1fX2JlMzIgZmliX2NvbXB1dGVfc3BlY19kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTI4Ni1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoyODc6XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTI4OC1cXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz02NTc9c3RhdGljIF9fYmUzMiBpY21wX2V4dF9paW9fYWRkcjRfZmluZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTY2MS1cXG5uZXQvaXB2NC9pY21wLmM6NjYyOlxcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcXG5uZXQvaXB2NC9pY21wLmMtNjYzLVxcdGlmICghaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jPTEyOTE9Ym9vbCBpY21wX2J1aWxkX3Byb2JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpY21waGRyICppY21waGRyKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTEzODEtXFxubmV0L2lwdjQvaWNtcC5jOjEzODI6XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2ljbXAuYy0xMzgzLVxcdGlmIChpbl9kZXYgXFx1MDAyNlxcdTAwMjYgcmN1X2FjY2Vzc19wb2ludGVyKGluX2Rldi1cXHUwMDNlaWZhX2xpc3QpKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTM2MT1zdGF0aWMgX19iZTMyIGlnbXB2M19nZXRfc3JjYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTM2My17XFxubmV0L2lwdjQvaWdtcC5jOjM2NDpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvaWdtcC5jLTM2NS1cXHRjb25zdCBzdHJ1Y3QgaW5faWZhZGRyICppZmE7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTEwMz1pbnQgaWdtcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xMTE3LVxcbm5ldC9pcHY0L2lnbXAuYzoxMTE4OlxcdGluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcXG5uZXQvaXB2NC9pZ21wLmMtMTExOS1cXHRpZiAoIWluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yODk0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX21jX2xpc3QgKmlnbXBfbWNfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTI5MDMtXFxubmV0L2lwdjQvaWdtcC5jOjI5MDQ6XFx0XFx0aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShzdGF0ZS1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2NC9pZ21wLmMtMjkwNS1cXHRcXHRpZiAoIWluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yOTE2PXN0YXRpYyBzdHJ1Y3QgaXBfbWNfbGlzdCAqaWdtcF9tY19nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGlwX21jX2xpc3QgKmltKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTI5MjYtXFx0XFx0fVxcbm5ldC9pcHY0L2lnbXAuYzoyOTI3OlxcdFxcdHN0YXRlLVxcdTAwM2Vpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY0L2lnbXAuYy0yOTI4LVxcdFxcdGlmICghc3RhdGUtXFx1MDAzZWluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0zMDI3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3NmX2xpc3QgKmlnbXBfbWNmX2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0zMDM3LVxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmlkZXY7XFxubmV0L2lwdjQvaWdtcC5jOjMwMzg6XFx0XFx0aWRldiA9IF9faW5fZGV2X2dldF9yY3Uoc3RhdGUtXFx1MDAzZWRldik7XFxubmV0L2lwdjQvaWdtcC5jLTMwMzktXFx0XFx0aWYgKHVubGlrZWx5KCFpZGV2KSlcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0zMDU2PXN0YXRpYyBzdHJ1Y3QgaXBfc2ZfbGlzdCAqaWdtcF9tY2ZfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBpcF9zZl9saXN0ICpwc2YpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMzA2OS1cXHRcXHRcXHR9XFxubmV0L2lwdjQvaWdtcC5jOjMwNzA6XFx0XFx0XFx0c3RhdGUtXFx1MDAzZWlkZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY0L2lnbXAuYy0zMDcxLVxcdFxcdFxcdGlmICghc3RhdGUtXFx1MDAzZWlkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTI2OT1pcF9yY3Zfb3B0aW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0yOTUtXFx0aWYgKHVubGlrZWx5KG9wdC1cXHUwMDNlc3JyKSkge1xcbm5ldC9pcHY0L2lwX2lucHV0LmM6Mjk2OlxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTtcXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTI5Ny1cXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmM9MzYxPXN0YXRpYyBpbnQgaXBfcmN2X2ZpbmlzaF9jb3JlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L2lwX2lucHV0LmMtNDExLVxcdH0gZWxzZSB7XFxubmV0L2lwdjQvaXBfaW5wdXQuYzo0MTI6XFx0XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2lwX2lucHV0LmMtNDEzLVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy00NDEtXFx0XFx0ICAgc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKSB7XFxubmV0L2lwdjQvaXBfaW5wdXQuYzo0NDI6XFx0XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpO1xcbm5ldC9pcHY0L2lwX2lucHV0LmMtNDQzLVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3Rwcm94eV9pcHY0LmM9NTA9X19iZTMyIG5mX3Rwcm94eV9sYWRkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHVzZXJfbGFkZHIsIF9fYmUzMiBkYWRkcilcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl90cHJveHlfaXB2NC5jLTU5LVxcdGxhZGRyID0gMDtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfdHByb3h5X2lwdjQuYzo2MDpcXHRpbmRldiA9IF9faW5fZGV2X2dldF9yY3Uoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY0L25ldGZpbHRlci9uZl90cHJveHlfaXB2NC5jLTYxLVxcdGlmICghaW5kZXYpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTc3Mz1zdGF0aWMgdm9pZCBfX2lwX2RvX3JlZGlyZWN0KHN0cnVjdCBydGFibGUgKnJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTc5Ny1cXG5uZXQvaXB2NC9yb3V0ZS5jOjc5ODpcXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy03OTktXFx0aWYgKCFpbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTkwMj12b2lkIGlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtOTExLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2NC9yb3V0ZS5jOjkxMjpcXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHJ0LVxcdTAwM2Vkc3QuZGV2KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTkxMy1cXHRpZiAoIWluX2RldiB8fCAhSU5fREVWX1RYX1JFRElSRUNUUyhpbl9kZXYpKSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTk2NT1zdGF0aWMgaW50IGlwX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTk4Mi1cXG5uZXQvaXB2NC9yb3V0ZS5jOjk4MzpcXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy05ODQtXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE3NjY9aXBfcm91dGVfaW5wdXRfbWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE3Njgte1xcbm5ldC9pcHY0L3JvdXRlLmM6MTc2OTpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy0xNzcwLVxcdHVuc2lnbmVkIGludCBmbGFncyA9IFJUQ0ZfTVVMVElDQVNUO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xODM2PV9fbWtyb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xODUwLVxcdC8qIGdldCBhIHdvcmtpbmcgcmVmZXJlbmNlIHRvIHRoZSBvdXRwdXQgZGV2aWNlICovXFxubmV0L2lwdjQvcm91dGUuYzoxODUxOlxcdG91dF9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy0xODUyLVxcdGlmICghb3V0X2Rldikge1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yMjE1PWlwX3JvdXRlX3VzZV9oaW50KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yMjE5LVxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbm5ldC9pcHY0L3JvdXRlLmM6MjIyMDpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy0yMjIxLVxcdHN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShoaW50KTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjI4Nz1pcF9yb3V0ZV9pbnB1dF9zbG93KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yMjkxLVxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbm5ldC9pcHY0L3JvdXRlLmM6MjI5MjpcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy0yMjkzLVxcdHN0cnVjdCBmbG93X2tleXMgKmZsa2V5cyA9IE5VTEwsIF9mbGtleXM7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTI1MTg9aXBfcm91dGVfaW5wdXRfcmN1KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yNTM0LVxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbm5ldC9pcHY0L3JvdXRlLmM6MjUzNTpcXHRcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XFxubmV0L2lwdjQvcm91dGUuYy0yNTM2LVxcdFxcdGludCBvdXIgPSAwO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yNTQ3LVxcbm5ldC9pcHY0L3JvdXRlLmM6MjU0ODpcXHRcXHRcXHRsM19pbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI1NDktXFx0XFx0XFx0aWYgKGwzX2luX2RldilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjU4Nj1zdGF0aWMgc3RydWN0IHJ0YWJsZSAqX19ta3JvdXRlX291dHB1dChjb25zdCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yNTk3LVxcbm5ldC9pcHY0L3JvdXRlLmM6MjU5ODpcXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldl9vdXQpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMjU5OS1cXHRpZiAoIWluX2RldilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjczNj1zdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2hfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yODA0LVxcdFxcdC8qIFJBQ0U6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBpbmV0X3NlbGVjdF9hZGRyIGluc3RlYWQuICovXFxubmV0L2lwdjQvcm91dGUuYzoyODA1OlxcdFxcdGlmICghKGRldl9vdXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB8fCAhX19pbl9kZXZfZ2V0X3JjdShkZXZfb3V0KSkge1xcbm5ldC9pcHY0L3JvdXRlLmMtMjgwNi1cXHRcXHRcXHRydGggPSBFUlJfUFRSKC1FTkVUVU5SRUFDSCk7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0yNzYwPWVudW0gc2tiX2Ryb3BfcmVhc29uIHVkcF92NF9lYXJseV9kZW11eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjc3OS1cXHRpZiAoc2tiLVxcdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKSB7XFxubmV0L2lwdjQvdWRwLmM6Mjc4MDpcXHRcXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2NC91ZHAuYy0yNzgxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMDowMC4xMTM2NjA2ODVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1MTc3MzU3OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBOZXR3b3JraW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGl0J3MgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGlzc3VlIHdpdGhpbiB0aGUgYGluX2Rldl9nZXRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3Mgc3dhcHBpbmcgb3V0IGEgc2ltcGxlIGByZWZjb3VudF9pbmNgIGZvciBgcmVmY291bnRfaW5jX25vdF96ZXJvYC4gIFRoaXMgaXMgYSBkZWZpbml0ZSBjaGFuZ2UgaW4gaG93IHRoZSBmdW5jdGlvbiBiZWhhdmVzLCBzaW5jZSBpdCBub3cgcmV0dXJucyBgTlVMTGAgaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyB6ZXJvICpiZWZvcmUqIGluY3JlbWVudGluZyBpdCwgcmF0aGVyIHRoYW4gaW5jcmVtZW50aW5nIGFuZCBwb3RlbnRpYWxseSBjYXVzaW5nIGFuIGlzc3VlIGRvd24gdGhlIGxpbmUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgYSBzbWFsbCBmdW5jdGlvbmFsIGNoYW5nZSwgYnV0IGxldCBtZSBjb25zaWRlciBmdXp6aW5nLiAgVGhlIHByb21wdCdzIGNyaXRlcmlhIGFyZSBpbiBteSBtaW5kOiAgaXMgaXQgYSBkb2N1bWVudGF0aW9uIGNoYW5nZT8gTm8uICBQdXJlbHkgZGVjb3JhdGl2ZT8gTm9wZS4gTnVtZXJpYyBjb25zdGFudHM/IE5vLiAgVW5yZWFjaGFibGUgY29kZSBwYXRocz8gIERlZmluaXRlbHkgbm90LCBpdCdzIGNvcmUgbmV0d29ya2luZyEgVmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHNwZWNpYWwgaGFyZHdhcmU/ICBOb3BlLCB0aGlzIGlzIGdlbmVyYWwgbmV0d29yayBzdGFjayBjb2RlLiAgVGVhcmRvd24gY2FsbGJhY2tzIG9ubHkgcnVuIG9uIFBDSSBob3QtdW5wbHVnPyBObyB3YXkuXG5cblRoaXMgcGF0Y2ggKmRvZXMqIGFsdGVyIGV4ZWN1dGlvbiBmbG93IGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgcmV0dXJuIHZhbHVlIGJhc2VkIG9uIHJlZmNvdW50IGNvbmRpdGlvbnMuICBJdCAqaXMqIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHNpbmNlIGl0J3MgY29yZSBuZXR3b3JraW5nIGNvZGUuIFNvLCB0aGUgcGF0Y2ggc2VlbXMgbGlrZSBpdCdzIFdvcnRoRnV6emluZz10cnVlLlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgSSB0YXJnZXQgZm9yIGZ1enppbmcgYmFzZWQgb24gdGhpcyBjaGFuZ2U/IFRoZSBjb2RlIGl0c2VsZiBpcyBpbmxpbmVkLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHRoYXQgY2FsbCBgaW5fZGV2X2dldGAuIExldCdzIHRyYWNlIHRoZSBjYWxsZXJzLi4uIE9rYXksIGxvb2tpbmcgYXQgdGhlIGNhbGxzIEknbSBzZWVpbmc6XG4tIGBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgIChzdGF0aWMpIC1cdTAwM2UgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCAtXHUwMDNlIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCAtXHUwMDNlIGBicl9tdWx0aWNhc3Rfc2V0X3JvdXRlcmAgLVx1MDAzZSBgYnJfbXVsdGljYXN0X3JvdXRlcl9zZXRgIC1cdTAwM2UgYGJyX2Rldl9uZXdsaW5rYCBvciBgYnJfY2hhbmdlbGlua2Bcbi0gYGJyX2lwNF9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgIChzdGF0aWMpIC1cdTAwM2UgYGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AgLVx1MDAzZSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAgLVx1MDAzZSAuLi5cbi0gYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAgKHN0YXRpYykgLVx1MDAzZSBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCBpcyBjYWxsZWQgYnkgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmA/IE5vLCBpdCdzIGEgbmV0bGluayBjYWxsYmFjay5cblxuVGltZSB0byBkaXZlIGludG8gYG5ldC9pcHY0L2RldmluZXQuY2AgYW5kIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZnV6eiB0YXJnZXRzIGJhc2VkIG9uIHRob3NlIGNhbGwgY2hhaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg3MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMDoxMC42MzEzOTkzODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTY3MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9kZXZpbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZGV2aW5ldC5jPTIzMzU9c3RhdGljIGludCBpbmV0X25ldGNvbmZfdmFsaWRfZ2V0X3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTIzNzMtXFxubmV0L2lwdjQvZGV2aW5ldC5jOjIzNzQ6c3RhdGljIGludCBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjM3NS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmM9Mjk1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgZGV2aW5ldF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTI5NjAtXFx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX0dFVE5FVENPTkYsXFxubmV0L2lwdjQvZGV2aW5ldC5jOjI5NjE6XFx0IC5kb2l0ID0gaW5ldF9uZXRjb25mX2dldF9kZXZjb25mLCAuZHVtcGl0ID0gaW5ldF9uZXRjb25mX2R1bXBfZGV2Y29uZixcXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjk2Mi1cXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUQgfCBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjEwLjY4NDU3MTUxOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODQyODU3MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIE5ldGxpbmsgQ2FsbGJhY2sgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAuIFRoYXQncyB0aGUgbmV0bGluayBjYWxsYmFjayBmb3IgYFJUTV9HRVRORVRDT05GYCwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWxseSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiUGVyZmVjdCwgbGV0J3Mgc3RhcnQgdGhlcmUuXCJcblxuSGFuZyBvbiBhIHNlY29uZOKApiBpdCdzIHN0YXRpYyEgVGhlIHN0eWxlIGd1aWRlICpzcGVjaWZpY2FsbHkqIHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeSBwb2ludHMuIFRoZSBhcmd1bWVudCBpcyB0aGF0IHN0YXRpYyBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBnZXQgaW5saW5lZCwgZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBUaGlzIG1ha2VzIHRoZW0gbGVzcyBhY2Nlc3NpYmxlIGZvciB0aGluZ3MgbGlrZSBkZWJ1Z2dpbmcgYW5kIHRyYWNpbmcuIEJ1dCB3YWl0Li4uIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgZGV2aW5ldF9ydG5sX21zZ19oYW5kbGVyc2AuIFRoYXQgbWVhbnMgaXQgKndvbid0KiBiZSBpbmxpbmVkIGFuZCAqZG9lcyogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBTbywgSSBuZWVkIHRvIHJldGhpbmsgdGhpcywgYWx0aG91Z2ggaXQncyAqdGVjaG5pY2FsbHkqIGNvbXBsaWFudCwgdGhlIHNwaXJpdCBvZiB0aGUgcnVsZSBpcyB0byBhdm9pZCBzdGF0aWMuXG5cbkFscmlnaHQsIHNvIHRoZSBwcm9tcHQgaXMgXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcIi4gVG8gc3RheSB0cnVlIHRvIHRoZSBzcGlyaXQgb2YgdGhlIHJ1bGUsIGV2ZW4gaWYgaXQncyB0ZWNobmljYWxseSBmaW5lLCBJJ2QgbGlrZSB0byBpZGVudGlmeSAqb3RoZXIqIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIEhtbSwgbGV0J3MgZXhwbG9yZSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIEknbGwgaGF2ZSBhIGxvb2sgYXQgdGhhdCBvbmUgbmV4dCB0byBjaGVjayBpZiBpdCdzIG1vcmUgYXBwcm9wcmlhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTU4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjE2LjUyNzQzMTM2NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzNzI2MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X3RvZ2dsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyLmM9Mjk0PWludCBicl9ib29sb3B0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gYnJfYm9vbG9wdF9pZCBvcHQsIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmMtMzAzLVxcdGNhc2UgQlJfQk9PTE9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HOlxcbm5ldC9icmlkZ2UvYnIuYzozMDQ6XFx0XFx0ZXJyID0gYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKGJyLCBvbiwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyLmMtMzA1LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTQ2PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnRfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTYwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE2MTpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNjIte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTk5PXZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAwLXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDE6XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwMi19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMDQ9dm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjA1LXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDY6XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHBvcnQsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDctfVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00Mjc1PXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwMC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzMDE6dm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzAyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM0NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNDY6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sIGJvb2wgb24pXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM1OC1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNTk6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2cG9ydCwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2MC1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjItXFx0aWYgKGJyX3ZsYW5faXNfYnJlbnRyeSh2bGFuKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjM6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY0LX1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjUtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzY2OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Ny1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzOTktXFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2bGFuLCBcXHUwMDI2dmctXFx1MDAzZXZsYW5fbGlzdCwgdmxpc3QpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDAwOlxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDAxLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDA0LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQwNTpib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDYte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDE1LVxcdHZsYW4tXFx1MDAzZXByaXZfZmxhZ3MgXj0gQlJfVkxGTEFHX0dMT0JBTF9NQ0FTVF9FTkFCTEVEO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQxNjpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4odmxhbiwgb24pO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQxNy1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY1ND1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjY0LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY2NTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY2Ni1cXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMjk1PXN0YXRpYyBpbnQgYnJfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNDQ5LVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE0NTA6XFx0XFx0ZXJyID0gYnJfbXVsdGljYXN0X3RvZ2dsZShiciwgbWNhc3Rfc25vb3BpbmcsIGV4dGFjayk7XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQ1MS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTkyPWludCBicl9tdWx0aWNhc3Rfc2V0X3ZsYW5fcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IG1jYXN0X3JvdXRlcik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTkzOmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTk0LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDY5PXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MDp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3MTppbnQgYnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDcyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTA3Mzpib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTA3NC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE1NDY9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTAtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1MTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTItXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBvbilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTUtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU1NjpzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1NTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTYyLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NjM6c3RhdGljIGlubGluZSBib29sIGJyX211bHRpY2FzdF90b2dnbGVfZ2xvYmFsX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTY0LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9NDE2PXN0YXRpYyBzc2l6ZV90IG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkLFxcbi0tXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTQxOS17XFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjQyMDpcXHRyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIGJyX211bHRpY2FzdF90b2dnbGUpO1xcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy00MjEtfVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MjAzPXN0YXRpYyB2b2lkIGJyX3ZsYW5fcHV0X21hc3RlcihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptYXN0ZXJ2KVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjE0LVxcdFxcdF9fdmxhbl9kZWxfbGlzdChtYXN0ZXJ2KTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMTU6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbihtYXN0ZXJ2LCBmYWxzZSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjE2LVxcdFxcdGJyX211bHRpY2FzdF9jdHhfZGVpbml0KFxcdTAwMjZtYXN0ZXJ2LVxcdTAwM2Vicl9tY2FzdF9jdHgpO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MjYzPXN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0zNTgtXFx0X192bGFuX2ZsYWdzX2NvbW1pdCh2LCBmbGFncyk7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MzU5OlxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtMzYwLVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MzkwPXN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNDI3LVxcdFxcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVxcdTAwM2V2aWQpO1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjQyODpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00MjktXFx0XFx0YnJfbXVsdGljYXN0X3BvcnRfY3R4X2RlaW5pdChcXHUwMDI2di1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9NzE5PXN0YXRpYyBpbnQgYnJfdmxhbl9hZGRfZXhpc3Rpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtNzYwLVxcdFxcdCpjaGFuZ2VkID0gdHJ1ZTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo3NjE6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV9vbmVfdmxhbih2bGFuLCB0cnVlKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy03NjItXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9ODk0PWludCBicl92bGFuX2ZpbHRlcl90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTkyMC1cXHRcXHRicl9pbmZvKGJyLCBcXFwidmxhbiBmaWx0ZXJpbmcgZGlzYWJsZWQsIGF1dG9tYXRpY2FsbHkgZGlzYWJsaW5nIG11bHRpY2FzdCB2bGFuIHNub29waW5nXFxcXG5cXFwiKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo5MjE6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuX3Nub29waW5nKGJyLCBmYWxzZSwgTlVMTCk7XFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTIyLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM9NTUwPXN0YXRpYyBpbnQgYnJfdmxhbl9wcm9jZXNzX2dsb2JhbF9vbmVfb3B0cyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTU2NC1cXHRcXHRtY19zbm9vcGluZyA9IG5sYV9nZXRfdTgodGJbQlJJREdFX1ZMQU5EQl9HT1BUU19NQ0FTVF9TTk9PUElOR10pO1xcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NTY1OlxcdFxcdGlmIChicl9tdWx0aWNhc3RfdG9nZ2xlX2dsb2JhbF92bGFuKHYsICEhbWNfc25vb3BpbmcpKVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNTY2LVxcdFxcdFxcdCpjaGFuZ2VkID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6MTYuNTc5ODA2OTIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjE2NzMzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBDb2RlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSwgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBhcmVhLiBBbHNvLCBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCBpcyBhIG5ldGxpbmsgY2FsbGJhY2s7IHRob3NlIGFyZSBvZnRlbiBnb29kIGVudHJ5IHBvaW50cyBiZWNhdXNlIHRoZXkncmUgZGlyZWN0bHkgaGFuZGxpbmcgbmV0d29yayBjb25maWd1cmF0aW9uIGNoYW5nZXMuIExldCdzIHN0YXJ0IHdpdGggYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAsIGFuZCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L2lwdjQvZGV2aW5ldC5jYCB0byBzZWUgaWYgaXQncyBzdGF0aWMuIFllcywgaXQncyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgaW1tZWRpYXRlIHVzZWZ1bG5lc3MgYXMgYSB0b3AtbGV2ZWwgZW50cnkgcG9pbnQsIGFsdGhvdWdoIGl0IGJlaW5nIGEgbmV0bGluayBjYWxsYmFjayBtYWtlcyBpdCByZWxldmFudC4gT2theSwgd2hhdCBhYm91dCBgaW5ldF9uZXRjb25mX2R1bXBfZGV2Y29uZmA/IEFuZCwgbm9wZSwgdGhhdCBvbmUgaXMgYWxzbyBzdGF0aWMuIEFuZCBgaW5ldF9kdW1wX2FkZHJgIGlzIHN0YXRpYyB0b28uIEFscmlnaHQsIHRoYXQncyBub3Qgd2hhdCBJIHdhcyBob3BpbmcgZm9yLiBXaGF0IGFib3V0IGBpbmV0X3NlbGVjdF9hZGRyYD8gQWgsICp0aGF0KiBvbmUgaXMgbm9uLXN0YXRpYy4gVGltZSB0byBkaWcgaW50byBgaW5ldF9zZWxlY3RfYWRkcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDQ5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjIxLjU0MTQ4MjMyMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2MjQ3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9zZWxlY3RfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvYXJwLmM9MzMzPXN0YXRpYyB2b2lkIGFycF9zb2xpY2l0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvYXJwLmMtMzczLVxcdGlmICghc2FkZHIpXFxubmV0L2lwdjQvYXJwLmM6Mzc0OlxcdFxcdHNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXYsIHRhcmdldCwgUlRfU0NPUEVfTElOSyk7XFxubmV0L2lwdjQvYXJwLmMtMzc1LVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jPTEzNDM9c3RhdGljIF9fYmUzMiBpbl9kZXZfc2VsZWN0X2FkZHIoY29uc3Qgc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTEzNTgtXFxubmV0L2lwdjQvZGV2aW5ldC5jOjEzNTk6X19iZTMyIGluZXRfc2VsZWN0X2FkZHIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyIGRzdCwgaW50IHNjb3BlKVxcbm5ldC9pcHY0L2RldmluZXQuYy0xMzYwLXtcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0xNDI3LX1cXG5uZXQvaXB2NC9kZXZpbmV0LmM6MTQyODpFWFBPUlRfU1lNQk9MKGluZXRfc2VsZWN0X2FkZHIpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0xNDI5LVxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MjczPV9fYmUzMiBmaWJfY29tcHV0ZV9zcGVjX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMzA3LVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjMwODpcXHRyZXR1cm4gaW5ldF9zZWxlY3RfYWRkcihkZXYsIGlwX2hkcihza2IpLVxcdTAwM2VzYWRkciwgc2NvcGUpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTMwOS19XFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MTMxNT1fX2JlMzIgZmliX2luZm9fdXBkYXRlX25oY19zYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfbmhfY29tbW9uICpuaGMsXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyMS1cXHRpZiAobmhjLVxcdTAwM2VuaGNfZmFtaWx5ICE9IEFGX0lORVQpXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzMjI6XFx0XFx0cmV0dXJuIGluZXRfc2VsZWN0X2FkZHIobmhjLVxcdTAwM2VuaGNfZGV2LCAwLCBzY29wZSk7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzMjMtXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzMjQtXFx0bmggPSBjb250YWluZXJfb2YobmhjLCBzdHJ1Y3QgZmliX25oLCBuaF9jb21tb24pO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzI1OlxcdHNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihuaC1cXHUwMDNlZmliX25oX2RldiwgbmgtXFx1MDAzZWZpYl9uaF9ndzQsIHNjb3BlKTtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTMyNi1cXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMjIzPXZvaWQgZmliX3NlbGVjdF9wYXRoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjUxLVxcdFxcdGVsc2VcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjI1MjpcXHRcXHRcXHRmbDQtXFx1MDAzZXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihsM21kZXYsIDAsIFJUX1NDT1BFX0xJTkspO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMjUzLVxcdH1cXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz04MTQ9dm9pZCBfX2ljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvLFxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTkzNi1cXHRcXHRpZiAoZGV2KVxcbm5ldC9pcHY0L2ljbXAuYzo5Mzc6XFx0XFx0XFx0c2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldiwgaXBoLVxcdTAwM2VzYWRkcixcXG5uZXQvaXB2NC9pY21wLmMtOTM4LVxcdFxcdFxcdFxcdFxcdFxcdCBSVF9TQ09QRV9MSU5LKTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTMxMz12b2lkIGlwX3J0X2dldF9zb3VyY2UodTggKmFkZHIsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydGFibGUgKnJ0KVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xMzM0LVxcdFxcdGVsc2VcXG5uZXQvaXB2NC9yb3V0ZS5jOjEzMzU6XFx0XFx0XFx0c3JjID0gaW5ldF9zZWxlY3RfYWRkcihydC1cXHUwMDNlZHN0LmRldixcXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMzYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHJ0X25leHRob3AocnQsIGlwaC1cXHUwMDNlZGFkZHIpLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yNzM2PXN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9rZXlfaGFzaF9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI4MDMtXFxubmV0L2lwdjQvcm91dGUuYzoyODA0OlxcdFxcdC8qIFJBQ0U6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBpbmV0X3NlbGVjdF9hZGRyIGluc3RlYWQuICovXFxubmV0L2lwdjQvcm91dGUuYy0yODA1LVxcdFxcdGlmICghKGRldl9vdXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSB8fCAhX19pbl9kZXZfZ2V0X3JjdShkZXZfb3V0KSkge1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yODEyLVxcdFxcdFxcdGlmICghZmw0LVxcdTAwM2VzYWRkcilcXG5uZXQvaXB2NC9yb3V0ZS5jOjI4MTM6XFx0XFx0XFx0XFx0Zmw0LVxcdTAwM2VzYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCxcXG5uZXQvaXB2NC9yb3V0ZS5jLTI4MTQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgUlRfU0NPUEVfTElOSyk7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI4MTgtXFx0XFx0XFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGZsNC1cXHUwMDNlZGFkZHIpKVxcbm5ldC9pcHY0L3JvdXRlLmM6MjgxOTpcXHRcXHRcXHRcXHRmbDQtXFx1MDAzZXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXZfb3V0LCAwLFxcbm5ldC9pcHY0L3JvdXRlLmMtMjgyMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBmbDQtXFx1MDAzZWZsb3dpNF9zY29wZSk7XFxubmV0L2lwdjQvcm91dGUuYy0yODIxLVxcdFxcdFxcdGVsc2UgaWYgKCFmbDQtXFx1MDAzZWRhZGRyKVxcbm5ldC9pcHY0L3JvdXRlLmM6MjgyMjpcXHRcXHRcXHRcXHRmbDQtXFx1MDAzZXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXZfb3V0LCAwLFxcbm5ldC9pcHY0L3JvdXRlLmMtMjgyMy1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBSVF9TQ09QRV9IT1NUKTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjg2Mi1cXHRcXHRcXHRpZiAoZmw0LVxcdTAwM2VzYWRkciA9PSAwKVxcbm5ldC9pcHY0L3JvdXRlLmM6Mjg2MzpcXHRcXHRcXHRcXHRmbDQtXFx1MDAzZXNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXZfb3V0LCAwLFxcbm5ldC9pcHY0L3JvdXRlLmMtMjg2NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBSVF9TQ09QRV9MSU5LKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6MjEuNTk0MTEzMTg2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjQxMTY0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqUmV2aWV3aW5nIHRoZSBgaW5fZGV2X2dldGAgYW5kIGBpbmV0X3NlbGVjdF9hZGRyYCBSZWxhdGlvbnNoaXAqKlxuXG5Pa2F5LCBzbyBJIHdhcyByZXZpZXdpbmcgdGhlIGNvZGUgYW5kIGluaXRpYWxseSB0aG91Z2h0IGBpbmV0X3NlbGVjdF9hZGRyYCB3YXMgdXNpbmcgYF9faW5fZGV2X2dldF9yY3VgLCBub3QgdGhlIHJlZ3VsYXIgYGluX2Rldl9nZXRgLiBUaGF0IGZlbHQgcmlnaHQsIGJhc2VkIG9uIHRoZSBjb250ZXh0IGFuZCB0eXBpY2FsIHVzZSBjYXNlcy4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIHBhdGNoIOKAkyBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgYWN0dWFsbHkgKm1vZGlmaWVzKiBgaW5fZGV2X2dldGAgaXRzZWxmISBUaGF0J3MgYSBkaWZmZXJlbnQgc3RvcnkuIEdpdmVuIHRoZSBzY29wZSBvZiB0aGlzLCBJIG5lZWQgdG8gdGhvcm91Z2hseSByZS1leGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBpbl9kZXZfZ2V0YCBub3cgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGNvbnNlcXVlbmNlcyB3aXRoIHRoaXMgY2hhbmdlLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29yZSBmdW5jdGlvbiBtb2RpZmljYXRpb24uIFRpbWUgdG8gZ28gYmFjayBhbmQgbWV0aG9kaWNhbGx5IHRyYWNlIGFsbCB0aGUgY2FsbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NjMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMDoyNi4xNTgyMzIxNjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjA2NDA3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5fZGV2X2dldFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jPTMyMzU9c3RhdGljIGludCBwaWNrX2xvY2FsX2lwYWRkcnMoc3RydWN0IGM0aXdfZGV2ICpkZXYsIHN0cnVjdCBpd19jbV9pZCAqY21faWQpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYy0zMjQyLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jOjMyNDM6XFx0aW5kID0gaW5fZGV2X2dldChkZXYtXFx1MDAzZXJkZXYubGxkaS5wb3J0c1swXSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMtMzI0NC1cXHRpZiAoIWluZClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jPTE3NDQ9c3RhdGljIGludCBpcmRtYV9hZGRfbXFoXzQoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNzY0LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jOjE3NjU6XFx0XFx0aWRldiA9IGluX2Rldl9nZXQoaXBfZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNzY2LVxcdFxcdGlmICghaWRldilcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jPTMyMD1zdGF0aWMgYm9vbCBpcG9pYl9pc19kZXZfbWF0Y2hfYWRkcl9yY3UoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMzMwLVxcdGNhc2UgQUZfSU5FVDpcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYzozMzE6XFx0XFx0aW5fZGV2ID0gaW5fZGV2X2dldChkZXYpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTMzMi1cXHRcXHRpZiAoIWluX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM9MzIzMD1uZXR4ZW5fY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYy0zMjM4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmM6MzIzOTpcXHRpbmRldiA9IGluX2Rldl9nZXQoZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jLTMyNDAtXFx0aWYgKCFpbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYz00MDU0PXFsY25pY19jb25maWdfaW5kZXZfYWRkcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMtNDA1OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmM6NDA2MDpcXHRpbmRldiA9IGluX2Rldl9nZXQoZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMtNDA2MS1cXHRpZiAoIWluZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmg9MjM3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGluX2RldmljZSAqX19pbl9kZXZfZ2V0X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgtMjQxLVxcbmluY2x1ZGUvbGludXgvaW5ldGRldmljZS5oOjI0MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaC0yNDMte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTU2PXN0YXRpYyB2b2lkIGJyX2lwNF9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTU3LXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxNTg6XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChici1cXHUwMDNlZGV2KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxNTktXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxODc9c3RhdGljIHZvaWQgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTg4LXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxODk6XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChici1cXHUwMDNlZGV2KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxOTAtXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmM9MjM3ND1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDUtXFx0XFx0aWYgKGRldilcXG5uZXQvaXB2NC9kZXZpbmV0LmM6MjQwNjpcXHRcXHRcXHRpbl9kZXYgPSBpbl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTI0MDctXFx0XFx0aWYgKCFpbl9kZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjI4LjIxODg3NzQ4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMDAzMjI0ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaCBvZiBgaW5fZGV2X2dldGAqKlxuXG5Pa2F5LCBzbyBgaW5fZGV2X2dldGAgcG9wcyB1cCBpbiBxdWl0ZSBhIGZldyBwbGFjZXMsIGRvZXNuJ3QgaXQ/IExldCdzIHNlZSwgaXQncyB1c2VkIGluIGBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgLCBgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AsIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgLCBgaXBvaWJfaXNfZGV2X21hdGNoX2FkZHJfcmN1YCwgYHBpY2tfbG9jYWxfaXBhZGRyc2Agd2l0aGluIGN4Z2I0LCBgaXJkbWFfYWRkX21xaF80YCwgYW5kIHRoZW4gYG5ldHhlbl9jb25maWdfaW5kZXZfYWRkcmAgYW5kIGBxbGNuaWNfY29uZmlnX2luZGV2X2FkZHJgLlxuXG5Gcm9tIGEgbmV0d29ya2luZyBwZXJzcGVjdGl2ZSwgaXQncyBtYWlubHkgaW52b2x2ZWQgd2l0aCB0aGUgYnJpZGdlIG11bHRpY2FzdCBjb2RlIChgYnJfbXVsdGljYXN0LmNgKSBhbmQgZGV2aWNlIGNvbmZpZ3VyYXRpb24gY29kZSAoYGRldmluZXQuY2ApLiBTbywgZm9yIHRoZSBicmlkZ2UgbXVsdGljYXN0IHBhdGgsIHRoZSBlbnRyeSBwb2ludCBzZWVtcyB0byBiZSBgYnJfbXVsdGljYXN0X3RvZ2dsZWAuIEFuZCwgaW4gYGRldmluZXQuY2AsIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGFwcGVhcnMgdG8gYmUgd2hlcmUgaXQncyBiZWluZyBoaXQsIHByb2JhYmx5IHZpYSBuZXRsaW5rLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGltcG9ydGFuY2UsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24uIExldCdzIHN0YXJ0IHdpdGggYGJyX211bHRpY2FzdF90b2dnbGVgIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBpbl9kZXZfZ2V0YCBpcyBiZWluZyB1dGlsaXplZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0MjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6MzQuNDE5MjAzMTIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY1NzI1MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdF90b2dnbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNDY9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNjAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTYxOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE2Mi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxOTk9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIwMTpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIwND12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDUte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIwNjpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwNy19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyNzU9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzAwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMwMTp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMDIte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM0NjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNDcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU4LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM1OTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzYwLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Mi1cXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2MzpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjQtfVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM5OS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MDA6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDEtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDA1OmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTUtXFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDE2OlxcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDE3LVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjU0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2NjQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjY1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjY2LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6MzUuNjg0OTM1MDY5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzEzOTg0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IEZ1bmN0aW9uIENhbGwqKlxuXG5SaWdodCwgc28gYGJyX211bHRpY2FzdF90b2dnbGVgIGlzbid0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCdzIGxpa2VseSBwYXJ0IG9mIHRoZSBvdmVyYWxsIEFQSSBhbmQgYWNjZXNzaWJsZSBmcm9tIG11bHRpcGxlIGxvY2F0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLCBhbmQgSSdsbCBzdGFydCB3aXRoIGBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBiZWNhdXNlIGl0IHN1Z2dlc3RzIHNvbWUgbGluayB3aXRoIElHTVAgc25vb3BpbmcuIExldCdzIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCdzIGFjdHVhbGx5IGludm9rZWQgdGhlcmUgYW5kIHdoYXQgY29udGV4dCBpdCdzIG9wZXJhdGluZyBpbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkLCB0aGUgY29uZGl0aW9uYWwgbG9naWMgc3Vycm91bmRpbmcgdGhlIGNhbGwsIGFuZCBvZiBjb3Vyc2UgYW55IGVycm9yIGhhbmRsaW5nLiBUaGlzIHNob3VsZCBxdWlja2x5IGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIGl0cyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgbXVsdGljYXN0IHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE4MSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjM5LjExNjMzNjQwM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MDAwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MTQxPXZvaWQgYnJfbXVsdGljYXN0X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTU1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDE1NjpzdGF0aWMgdm9pZCBicl9pcDRfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE1Ny17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxODE9dm9pZCBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTgyLXtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxODM6XFx0YnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzKGJyKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODQtXFx0YnJfaXA2X211bHRpY2FzdF9qb2luX3Nub29wZXJzKGJyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6MzkuMTYzMDQxNTI4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTEyNzI5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCoqXG5cbk9rYXksIHNvIGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AgaXMgY2FsbGluZyBgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLCB0aGV5J3JlIGxpa2VseSByZWxhdGVkLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCBpcyBiZWluZyAqY2FsbGVkIGZyb20qLiBJIG5lZWQgdG8gc2VlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucy4gVGltZSB0byBsb29rIGF0IHRoZSBjYWxsIGdyYXBoIGZvciBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBtdWx0aWNhc3Qgc2V0dXAuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgY29udHJvbCBwbGFuZSBpbnRlcmFjdGlvbiwgdGhlIGRhdGEgcGF0aCBoYW5kbGluZywgb3IgcG90ZW50aWFsbHkgYW55IHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGV4aXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY4NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjQzLjk1NDMxNzM5OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MjYzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xNjQ9c3RhdGljIGludCBicl9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzMtXFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3NDpcXHRcXHRicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNzY9c3RhdGljIGlubGluZSB2b2lkIGJyX2lwNl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTgxOnZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE4Mi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2NjU9aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY5OC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2OTk6XFx0LyogYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gY2F1c2VcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MDAtXFx0ICogYW4gTUxEIFJlcG9ydC9MZWF2ZSB0byBiZSBkZWxpdmVyZWQgdG8gYnJfbXVsdGljYXN0X3JjdixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcxMi1cXHRcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDcxMzpcXHRcXHRcXHRicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzE0LVxcdFxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTk4MD12b2lkIGJyX211bHRpY2FzdF9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTgxOnZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05ODItdm9pZCBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE0MjE9c3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MjQtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTQyNTpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE0MjYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMDo0NC4wMDQwNDY0NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwNTg5MTY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQnJpZGdlIE11bHRpY2FzdCBDb25maWd1cmF0aW9uIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgYnJfZGV2X29wZW5gIGRpcmVjdGx5IGNhbGxzIGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AsIGFuZCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAgZG9lcyBhcyB3ZWxsLiBUaGF0IG1ha2VzIGBicl9kZXZfb3BlbmAgYW5kIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBzdHJvbmcgaW5pdGlhbCBjYW5kaWRhdGVzIGZvciBlbnRyeSBwb2ludHMgd2hlbiBsb29raW5nIGF0IG11bHRpY2FzdCBzbm9vcGluZyBjb25maWd1cmF0aW9uIHdpdGhpbiBhIGJyaWRnZS4gQWgsIHJpZ2h0LCBgYnJfZGV2X29wZW5gIGlzIHRoZSBgbmRvX29wZW5gIGNhbGxiYWNrIGZvciBicmlkZ2UgZGV2aWNlcywgc28gdGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5UaGVuIEkgc2VlIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBiZWluZyBjYWxsZWQgZnJvbSBib3RoIGBicl9jaGFuZ2VsaW5rYCBhbmQgYG11bHRpY2FzdF9zbm9vcGluZ19zdG9yZWAuICpUaGF0KiBtYWtlcyBgYnJfY2hhbmdlbGlua2AgYSBsaWtlbHkgZW50cnkgcG9pbnQgdG9vLCBhbm90aGVyIGF2ZW51ZSBmb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbiBvciBpbnZlc3RpZ2F0aW9uLlxuXG5Ob3csIGxldCdzIG5vdCBmb3JnZXQgbmV0bGluayBjYWxsYmFja3MuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGNoZWNrIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGFzIGl0J3MgYSBuZXRsaW5rIGNhbGxiYWNrLCB3aGljaCBoaW50cyBhdCB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBJIHNob3VsZCBhbHNvIGRpZyBpbnRvIHRoZSBoYW5kbGVycyBsb2NhdGVkIHdpdGhpbiBgZGV2aW5ldF9ydG5sX21zZ19oYW5kbGVyc2AgaW4gYG5ldC9pcHY0L2RldmluZXQuY2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgdXNlZnVsIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjYxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMDo0OS4zMDk5NDA5OTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODk4NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmluZXRfcnRubF9tc2dfaGFuZGxlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvZGV2aW5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2RldmluZXQuYz0yOTQ1PXN0YXRpYyBzdHJ1Y3QgcnRubF9hZl9vcHMgaW5ldF9hZl9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYy0yOTUyLVxcbm5ldC9pcHY0L2RldmluZXQuYzoyOTUzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBkZXZpbmV0X3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTI5NTQtXFx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX05FV0FERFIsIC5kb2l0ID0gaW5ldF9ydG1fbmV3YWRkcixcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYz0yOTY3PXZvaWQgX19pbml0IGRldmluZXRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvZGV2aW5ldC5jLTI5NzQtXFxubmV0L2lwdjQvZGV2aW5ldC5jOjI5NzU6XFx0cnRubF9yZWdpc3Rlcl9tYW55KGRldmluZXRfcnRubF9tc2dfaGFuZGxlcnMpO1xcbm5ldC9pcHY0L2RldmluZXQuYy0yOTc2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6NDkuMzU3ODQ3MjkyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNjYwMTE2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCBpcyB0aGUgZnVuY3Rpb24gcmVnaXN0ZXJlZCB0byBoYW5kbGUgYFJUTV9HRVRORVRDT05GYC4gVGhhdCBtYWtlcyBpdCBhIHBvdGVudGlhbCBmb2N1cyBzeW1ib2wuIEl0ICpjb3VsZCogYmUgYSBkZWNlbnQgZW50cnkgcG9pbnQsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhlIHByb21wdCwgXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLi4uXCIgTXkgaW5pdGlhbCBjb25jZXJuIGlzIHRoYXQgaXQncyBgc3RhdGljYC4gSG93ZXZlciwgc2luY2UgaXQncyB1c2VkIGluIGEgZnVuY3Rpb24gcG9pbnRlciBhcnJheSwgaXQgKnNob3VsZG4ndCogYmUgaW5saW5lZCwgYW5kIHRoZXJlZm9yZSBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IHN1aXRhYmxlLiBTdGlsbCwganVzdCB0byBiZSBjb21wbGV0ZWx5IHNhZmUsIG1heWJlIEkgY2FuIGZpbmQgYSBtb3JlIHVuaXZlcnNhbGx5IGFjY2VwdGVkIHN5bWJvbC5cblxuVGhlbiBJIGdldCBkaXN0cmFjdGVkIGFuZCB0aGluayBhYm91dCBgaW5fZGV2X2dldGAsIHdoaWNoIGlzIGFsc28gYSBkZWNlbnQgb3B0aW9uLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBvdGhlciBwbGFjZXMgYmVzaWRlcyBteSBwcmltYXJ5IHVzZS4gTW9zdCBvZiB0aGUgb3RoZXIgbG9jYXRpb25zIGl0J3MgdXNlZCBhcmUgaW4gZGV2aWNlIGRyaXZlcnMsIGxpa2UgYGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdWAgYW5kIGBuZXR4ZW5fY29uZmlnX2luZGV2X2FkZHJgLiBNeSBmb2N1cyBpcyB0aGUgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHdoaWNoIGluY2x1ZGVzIGBicl9tdWx0aWNhc3QuY2AgYW5kIGBkZXZpbmV0LmNgLiBTbyBtYXliZSBgYnJfY2hhbmdlbGlua2Agb3IgYGJyX2Rldl9vcGVuYCB3b3VsZCBiZSBiZXR0ZXIgY2hvaWNlcy4gSSB3aWxsIGNoZWNrIHRoZSBmb3JtZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzQ4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIwOjU0LjcyMzg2MTQ3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODczMzU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9jaGFuZ2VsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTEyNDk9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJyX3BvbGljeVtJRkxBX0JSX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTI5NC1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxMjk1OnN0YXRpYyBpbnQgYnJfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTI5Ni1cXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTU5Mz1zdGF0aWMgaW50IGJyX2Rldl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNjExLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE2MTI6XFx0ZXJyID0gYnJfY2hhbmdlbGluayhkZXYsIHRiLCBkYXRhLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2MTMtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE5NDg9c3RydWN0IHJ0bmxfbGlua19vcHMgYnJfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE5NTUtXFx0Lm5ld2xpbmtcXHRcXHQ9IGJyX2Rldl9uZXdsaW5rLFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE5NTY6XFx0LmNoYW5nZWxpbmtcXHRcXHQ9IGJyX2NoYW5nZWxpbmssXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTk1Ny1cXHQuZGVsbGlua1xcdFxcdD0gYnJfZGV2X2RlbGV0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6NTQuNzcyNjAwNjg1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjI2ODg5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipTdGF0aWMgVmFyaWFibGVzIGluIHRoZSBCcmlkZ2UgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYGJyX2NoYW5nZWxpbmtgLi4uIHRoYXQncyBzdGF0aWMuIEhtbSwgdGhlbiB3aGF0IGFib3V0IGBicl9kZXZfb3BlbmA/ICpUaGF0J3MqIHN0YXRpYyBhcyB3ZWxsLiBJIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGVzZSB0aGluZ3MuIE5vdywgd2hhdCBhYm91dCBgYnJfbXVsdGljYXN0X3RvZ2dsZWA/IE9oLCBpdCBsb29rcyBsaWtlIHRoYXQgb25lIGlzICpub3QqIHN0YXRpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gTGV0J3MgbWFrZSBzdXJlIEknbSBnZXR0aW5nIGEgY29tcGxldGUgcGljdHVyZSBoZXJlIC0gbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGNoZWNrIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCdzIGltcGxlbWVudGF0aW9uLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLCBpbiBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIEdvdHRhIHRyYWNlIHRoZSB1c2FnZSBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyODMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMDo1OS4xOTUyOTI4MjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Nzk2MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdF90b2dnbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxNDY9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNjAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMTYxOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE2Mi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxOTk9dm9pZCBicl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIwMTpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIwND12b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDUte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIwNjpcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQocG9ydCwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwNy19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyNzU9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzAwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMwMTp2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMDIte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQ1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM0NjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNDcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU4LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM1OTpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZwb3J0LCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzYwLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2Mi1cXHRpZiAoYnJfdmxhbl9pc19icmVudHJ5KHZsYW4pKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM2MzpcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNjQtfVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM2NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzNjY6aW50IGJyX211bHRpY2FzdF90b2dnbGVfdmxhbl9zbm9vcGluZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzY3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM5OS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZsYW4sIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0MDA6XFx0XFx0YnJfbXVsdGljYXN0X3RvZ2dsZV92bGFuKHZsYW4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDEtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MDQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDA1OmJvb2wgYnJfbXVsdGljYXN0X3RvZ2dsZV9nbG9iYWxfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwNi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MTUtXFx0dmxhbi1cXHUwMDNlcHJpdl9mbGFncyBePSBCUl9WTEZMQUdfR0xPQkFMX01DQVNUX0VOQUJMRUQ7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDE2OlxcdGJyX211bHRpY2FzdF90b2dnbGVfdmxhbih2bGFuLCBvbik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDE3LVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NjU0PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kaXNhYmxlX2FsbF9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2NjQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjY1OmludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjY2LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjA6NTkuMjQxMDk0MDc0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzExNjc5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBpcyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gTm93LCB3aGF0IGFib3V0IGBpbmV0X3NlbGVjdF9hZGRyYD8gSG1tLCBpdCB1c2VzIGBfX2luX2Rldl9nZXRfcmN1YCwgbm90IHRoZSBmdW5jdGlvbiBpbiB0aGUgcGF0Y2gsIGBpbl9kZXZfZ2V0YC4gUmlnaHQsIHRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgYGluX2Rldl9nZXRgLCBzbyB3ZSBuZWVkIHRvIGZvY3VzIG9uIHdoaWNoIGZ1bmN0aW9ucyBjYWxsIHRoYXQuXG5cbkxldCdzIHNlZSwgdGhlIGNhbGxlcnMgb2YgYGluX2Rldl9nZXRgIGFyZSBxdWl0ZSBhIGZldzpcbiogICBgYnJfaXA0X211bHRpY2FzdF9qb2luX3Nub29wZXJzYCwgd2hpY2ggZmxvd3MgdG8gYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCB3aGljaCBnb2VzIHRvIGBicl9tdWx0aWNhc3RfdG9nZ2xlYCBhbmQgYGJyX2Rldl9vcGVuYC5cbiogICBgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9zbm9vcGVyc2AsIHdoaWNoIGZsb3dzIHRvIGBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgIHdoaWNoIGdvZXMgdG8gYGJyX211bHRpY2FzdF90b2dnbGVgIGFuZCBgYnJfZGV2X3N0b3BgLlxuKiAgIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgLCB3aGljaCBmbG93cyB0byBgZGV2aW5ldF9ydG5sX21zZ19oYW5kbGVyc2AuXG4qICAgYGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdWAsIHdoaWNoIGZsb3dzIHRvIGBpcG9pYl9tY2FzdF9qb2luYCBhbmQgZ29lcyB0byBgaXBvaWJfbWNhc3Rfam9pbl90YXNrYC5cbiogICBgcGlja19sb2NhbF9pcGFkZHJzYCwgd2hpY2ggZmxvd3MgdG8gYGM0aXdfY29ubmVjdGAsIGFuZCBgYzRpd19jcmVhdGVfbGlzdGVuYC5cbiogICBgaXJkbWFfYWRkX21xaF80YCwgd2hpY2ggZmxvd3MgdG8gYGlyZG1hX2FkZF9tcWhgIHdoaWNoIGdvZXMgdG8gYGlyZG1hX2NyZWF0ZV9saXN0ZW5gIGFuZCBgaXJkbWFfY29ubmVjdGAuXG4qICAgYG5ldHhlbl9jb25maWdfaW5kZXZfYWRkcmAsIHdoaWNoIGZsb3dzIHRvIGBuZXR4ZW5fbmljX3Byb2JlYC5cbiogICBgcWxjbmljX2NvbmZpZ19pbmRldl9hZGRyYCwgd2hpY2ggZmxvd3MgdG8gYHFsY25pY19wcm9iZWAuXG5cblNvLCBgYnJfbXVsdGljYXN0X3RvZ2dsZWAgbG9va3MgbGlrZSBhIHNvbGlkIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQuIEFuZCBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgIGFuZCBgYnJfbXVsdGljYXN0X2xlYXZlX3Nub29wZXJzYCBhcmUgYWxzbyBub24tc3RhdGljLCBieSBleHRlbnNpb24uIEknbGwgbWFrZSBhIG5vdGUgb2YgdGhvc2UuIFRpbWUgdG8gaW52ZXN0aWdhdGUgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3NTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjE6MDYuNTcyMjY0NDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTg5Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQxNzY9c3RhdGljIGlubGluZSB2b2lkIGJyX2lwNl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxODAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTgxOnZvaWQgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE4Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjA2LjYyMTg2MTk5NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzQ4ODcxMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBCcmlkZ2UgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AsIGBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVgIGFyZSBhbGwgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhlbSB0byBmdW5jdGlvbiBjb3JyZWN0bHkuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGJyb2FkZXIgY29udGV4dC4gSSByZW1lbWJlciBgaW5fZGV2X2dldGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmhgLiBBbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl0J3MgdXRpbGl6ZWQgd2l0aGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gR2l2ZW4gdGhhdCwgSSByZWNhbGwgdGhhdCBgYnJfbXVsdGljYXN0LmNgIHJlbGllcyBvbiBgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HYC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYG5ldC9icmlkZ2UvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjg0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMToxMS45NzA3MzY2MjJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTkyNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnPTY9Y29uZmlnIEJSSURHRVxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTM1LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctMzctXFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjEyLjAyNTkzMTY5N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAyMDE3MzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBJbmNsdWRpbmcgYEJSSURHRV9JR01QX1NOT09QSU5HYCBzZWVtcyBsaWtlIGEgc29saWQgY2hvaWNlLCBhbmQsIG9idmlvdXNseSwgdGhlIGJhc2UgYEJSSURHRWAgb3B0aW9uIGlzIGVzc2VudGlhbC4gTm93LCBJJ20gdHJ5aW5nIHRvIHJlbWVtYmVyLi4uIHdoYXQgYWJvdXQgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmA/IFRoYXQncyBidXJpZWQgc29tZXdoZXJlIGluIGBuZXQvaXB2NC9kZXZpbmV0LmNgLCByaWdodD8gQWhhLCB5ZXMsIEknbSBwcmV0dHkgc3VyZSBpdCBpcy4gQW5kIEkgc2VlbSB0byByZWNhbGwgdGhhdCBgZGV2aW5ldC5jYCBvbmx5IGdldHMgY29tcGlsZWQgaWYgYENPTkZJR19JTkVUYCBpcyBlbmFibGVkIOKAkyBhIGNydWNpYWwgZGVwZW5kZW5jeSB0byBrZWVwIGluIG1pbmQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpcm0gdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI3NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjE1LjcyNzk1MjE0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYxNDE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZpbmV0XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTEzLVxcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTQ6XFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTUtXFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjE1Ljc3MjU3MjIxNVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Njc1NzczOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJyaWRnZSBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBkZXZpbmV0Lm9gICphbHdheXMqIGdldHMgY29tcGlsZWQgd2l0aCBgQ09ORklHX0lORVRgIGVuYWJsZWQuIFRoYXQgdGVsbHMgbWUgcmlnaHQgYXdheSB0aGF0IGBJTkVUYCBpcyBhIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24uIEFuZCwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIGJyaWRnZXMgYW5kIG11bHRpY2FzdCwgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGluY2x1ZGUgYEJSSURHRWAgYW5kIGBCUklER0VfSUdNUF9TTk9PUElOR2AgZm9yIHRoZSBicmlkZ2UgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkgaXRzZWxmLlxuXG5MZXQgbWUgdGhpbmsgYWJvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIHJlYWxseSBjZW50cmFsIHRvIHRoaXMuIEknbGwgZm9jdXMgb24gdGhlc2U6IGBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc2AsIGBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgLCBhbmQgYGJyX211bHRpY2FzdF90b2dnbGVgLiBJIHdhcyBhbHNvIGdvaW5nIHRvIGFkZCBgaW5ldF9uZXRjb25mX2dldF9kZXZjb25mYCwgZXZlbiB0aG91Z2ggaXQgaXMgYSBgc3RhdGljYCBmdW5jdGlvbiwgYmVjYXVzZSBpdCBpcyBjYWxsZWQgYnkgTmV0bGluay5cblxuSG9sZCBvbiwgdGhlIGNvbXBpbGVyIG1pZ2h0IG9wdGltaXplIG91dCBhIGRpc3RpbmN0IHN5bWJvbCBmb3IgYSBzdGF0aWMgZnVuY3Rpb24gaWYgaXQgY2FuLiBCdXQgc2luY2UgaXRzIGFkZHJlc3MgKmlzKiBiZWluZyB0YWtlbiwgaXQgKnNob3VsZCogaGF2ZSBhIHN5bWJvbC4gVG8gYmUgYWJzb2x1dGVseSBzYWZlLCBJJ20gdGhpbmtpbmcgSSBjYW4ganVzdCB1c2UgdGhlIGJyaWRnZSBmdW5jdGlvbnMuIE5vcGUhIENoZWNraW5nIGBkZXZpbmV0LmNgLCBpdCBsb29rcyBsaWtlIGBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmZgIGlzIHRoZSBvbmx5IGNhbGxlci4gSSBzaG91bGQgaW5jbHVkZSBpdC5cblxuVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgYnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnNgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGhhcyBjaGFuZ2VkIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3MTEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjE6MjIuNDQ4MzQ4NDgxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzIxMTU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDE3Nj1zdGF0aWMgaW5saW5lIHZvaWQgYnJfaXA2X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDE4MC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxODE6dm9pZCBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MTgyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY2NT1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Njk4LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDY5OTpcXHQvKiBicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyBoYXMgdGhlIHBvdGVudGlhbCB0byBjYXVzZVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcwMC1cXHQgKiBhbiBNTEQgUmVwb3J0L0xlYXZlIHRvIGJlIGRlbGl2ZXJlZCB0byBicl9tdWx0aWNhc3RfcmN2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzEyLVxcdFxcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NzEzOlxcdFxcdFxcdGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzKGJyKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MTQtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMToyMi41MDE1NjE4ODdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5Mjk2OTQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIE5vbi1TdGF0aWMgTmF0dXJlIG9mIGEgRnVuY3Rpb24gYW5kIEl0cyBQb3RlbnRpYWwgVXNhZ2UqKlxuXG5SaWdodCwgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYCBpc24ndCBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0J3MgbGlrZWx5IGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIHBvdGVudGlhbGx5IGluIGEgd2F5IHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGZvciBteSBjdXJyZW50IHdvcmsuIEdpdmVuIHRoYXQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBob3cgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAgaXMgdXNlZCB3aXRoaW4gYG5ldC9pcHY0L2RldmluZXQuY2AuIEl0J3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBjb25maXJtIHRoZSBkZXRhaWxzLCBjb250ZXh0IGFuZCBhbnkgc2lkZSBlZmZlY3RzIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZSB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24gYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgd2l0aCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGJlZm9yZSBJIG1vdmUgb24uIFRoaXMgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIGNvdWxkIHNhdmUgbWUgYSBoZWFkYWNoZSBkb3duIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY2MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjI2LjM5NDUzNDIyMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MTU4NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9uZXRjb25mX2dldF9kZXZjb25mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2RldmluZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9kZXZpbmV0LmM9MjMzNT1zdGF0aWMgaW50IGluZXRfbmV0Y29uZl92YWxpZF9nZXRfcmVxKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjM3My1cXG5uZXQvaXB2NC9kZXZpbmV0LmM6MjM3NDpzdGF0aWMgaW50IGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbm5ldC9pcHY0L2RldmluZXQuYy0yMzc1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY0L2RldmluZXQuYz0yOTUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBkZXZpbmV0X3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMjk2MC1cXHR7LnByb3RvY29sID0gUEZfSU5FVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVUQ09ORixcXG5uZXQvaXB2NC9kZXZpbmV0LmM6Mjk2MTpcXHQgLmRvaXQgPSBpbmV0X25ldGNvbmZfZ2V0X2RldmNvbmYsIC5kdW1waXQgPSBpbmV0X25ldGNvbmZfZHVtcF9kZXZjb25mLFxcbm5ldC9pcHY0L2RldmluZXQuYy0yOTYyLVxcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjE6MjYuNDQyMjU0MTg2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4MDM5NDk3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRm9jdXMgU3ltYm9scyBhbmQgUmVhc29uaW5nIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgdGFyZ2V0IHRoaXMgcGF0Y2ggZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIGBpbl9kZXZfZ2V0YC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAgbWlnaHQgYmUgYSBnb29kIHRhcmdldCwgYnV0IHNpbmNlIGl0J3MgZGVjbGFyZWQgYHN0YXRpY2AsIGl0J3Mgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBzY29wZSwgc28gaXQncyBvdXQuIEkgZG8gbmVlZCB0byBmYWN0b3IgaW4gdGhhdCBgaW5fZGV2X2dldGAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBkcml2ZXJzIHN1Y2ggYXMgaW4gYG5ldHhlbl9jb25maWdfaW5kZXZfYWRkcmAgYW5kIGBxbGNuaWNfY29uZmlnX2luZGV2X2FkZHJgLlxuXG5NeSBpbnN0aW5jdCBpcyB0byBsZWFuIHRvd2FyZHMgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgYXMgcHJpbWFyeSB0YXJnZXRzLiBJIHdlbnQgYmFjayBhbmQgcmUtZXhhbWluZWQgYG5ldC9pcHY0L2RldmluZXQuY2AsIGRvdWJsZS1jaGVja2luZyBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgY2FsbCBgaW5fZGV2X2dldGAsIGJ1dCBJIGNvbmZpcm1lZCBteSBlYXJsaWVyIGdyZXAg4oCTIHRoZSBvbmx5IG90aGVyIGNhbGwgdGhlcmUgd2FzIHRoZSBzdGF0aWMgYGluZXRfbmV0Y29uZl9nZXRfZGV2Y29uZmAuIEFsc28gdG9vayBhIGxvb2sgYXQgYGlwb2liX2lzX2Rldl9tYXRjaF9hZGRyX3JjdWAsIGFuZCB0aGF0IGFsc28gaGFwcGVucyB0byBiZSBzdGF0aWMuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgYSBkZWVwZXIgZGl2ZSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBvcHRpbWFsIGZvY3VzIHN5bWJvbHMgYXJlOlxuXG4qICAgYGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzYFxuKiAgIGBicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNgXG4qICAgYGJyX211bHRpY2FzdF90b2dnbGVgXG5cblRoZXNlIHNlZW0gdG8gYmUgdGhlIG1vc3QgZnJ1aXRmdWwgc3RhcnRpbmcgcG9pbnRzLCB3aXRoIHRob3NlIGJyaWRnZSBtdWx0aWNhc3Qgc25vb3BpbmcgZnVuY3Rpb25zIGJlaW5nIHRoZSBrZXkuXG5cblRoZSBjb25maWcgZmxhZ3MgSSdtIHBsYW5uaW5nIHRvIHVzZSBhcmU6IGBJTkVUYCwgYEJSSURHRWAsIGFuZCBgQlJJREdFX0lHTVBfU05PT1BJTkdgLlxuXG5NeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IGJ1ZyBieSByZXBsYWNpbmcgYHJlZmNvdW50X2luY2Agd2l0aCBgcmVmY291bnRfaW5jX25vdF96ZXJvYCB3aGVuIGNhbGxpbmcgYGluX2Rldl9nZXRgLiBUaGlzIGlzIGEgcHJldHR5IGNyaXRpY2FsIGNoYW5nZSBpbiBhIGNvcmUgbmV0d29ya2luZyBpbmxpbmUgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbnMgSSBpZGVudGlmaWVkIGFyZSB1c2VkIGJ5IHRoZSBicmlkZ2UgbXVsdGljYXN0IHNub29waW5nIGZ1bmN0aW9uYWxpdHksIElQdjQgZGV2aW5ldCBuZXRsaW5rIGNhbGxiYWNrcywgYW5kIHNldmVyYWwgZHJpdmVycy4gVGhhdCBtYWtlcyBpdCBsaWtlbHkgaXQncyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBhbmQgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBzaG91bGQgZnV6eiB0aG9yb3VnaGx5LlxuXG5BbHJpZ2h0LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjQwLCJPdXRwdXRUb2tlbnMiOjE3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQxODoyMTozNS4yNDYyMDYzMTZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc3Mjg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzXCIsXG4gICAgXCJicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByZWZjb3VudCBidWcgaW4gYGluX2Rldl9nZXRgIGJ5IHVzaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUgbmV0d29ya2luZyBpbmxpbmUgZnVuY3Rpb24gdXNlZCBieSBicmlkZ2UgbXVsdGljYXN0IHNub29waW5nLCBJUHY0IGRldmluZXQgbmV0bGluayBjYWxsYmFja3MsIGFuZCBzZXZlcmFsIGRyaXZlcnMuIEl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzXCIsXG4gICAgXCJicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnNcIixcbiAgICBcImJyX211bHRpY2FzdF90b2dnbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByZWZjb3VudCBidWcgaW4gYGluX2Rldl9nZXRgIGJ5IHVzaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUgbmV0d29ya2luZyBpbmxpbmUgZnVuY3Rpb24gdXNlZCBieSBicmlkZ2UgbXVsdGljYXN0IHNub29waW5nLCBJUHY0IGRldmluZXQgbmV0bGluayBjYWxsYmFja3MsIGFuZCBzZXZlcmFsIGRyaXZlcnMuIEl0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjM1LjMxNDk4NTA3NFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyNzUwNzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjM1LjMxNTQwMjEyNFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NzI3MDg3MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW5fZGV2X2dldGAgdG8gdXNlIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2Agd2hlbiBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gYW4gYGluX2RldmljZWAgdW5kZXIgUkNVLiBUaGlzIGlzIGEgY2xhc3NpYyBmaXggZm9yIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgcmVmY291bnQgYnVnLCBwcmV2ZW50aW5nIHRoZSBhY3F1aXNpdGlvbiBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gU2luY2UgdGhpcyBwYXRjaCBkZWFscyBlbnRpcmVseSB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE2ZGYwMGYwNDAyYWJmNzVmZDQ2OWQ2ZTZmMTM1MDYxZjI0MmQzZGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAxODoxOTozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmhcbmluZGV4IDYwMzJlZWEyNTM5YTYuLmExNDQ2ZGE2NDIwMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmhcbkBAIC0yNDUsOCArMjQ1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7XG4tXHRpZiAoaW5fZGV2KVxuLVx0XHRyZWZjb3VudF9pbmMoXHUwMDI2aW5fZGV2LVx1MDAzZXJlZmNudCk7XG4rXHRpZiAoaW5fZGV2IFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmluX2Rldi1cdTAwM2VyZWZjbnQpKVxuK1x0XHRpbl9kZXYgPSBOVUxMO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4gaW5fZGV2O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDE4OjIxOjM1LjMxNTQwMjk5NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzI3MDY0ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBpbl9kZXZfZ2V0YCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgaW5fZGV2X2dldGAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaGAsIGFuZCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUuIEl0IGxvb2tzIGxpa2Ugd2UncmUgcmVwbGFjaW5nIGEgc3RhbmRhcmQgYHJlZmNvdW50X2luY2Agd2l0aCBgcmVmY291bnRfaW5jX25vdF96ZXJvYC4gVGhlIG9sZGVyIGNvZGUganVzdCBpbmNyZW1lbnRlZCB0aGUgcmVmZXJlbmNlIGNvdW50LCByZWdhcmRsZXNzLiBUaGUgbmV3IGNvZGUgaW50cm9kdWNlcyBhIGNoZWNrOiAqaWYqIHRoZSByZWZlcmVuY2UgY291bnQgaXMgYWxyZWFkeSB6ZXJvICpiZWZvcmUqIHdlIHRyeSB0byBpbmNyZW1lbnQgaXQsIGl0IG1lYW5zIHRoZSBgaW5fZGV2YCBvYmplY3QgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQg4oCTIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgdGVhcmRvd24sIHNvIHdlIGFic29sdXRlbHkgKnNob3VsZG4ndCogdHJ5IHRvIHRha2UgYW5vdGhlciByZWZlcmVuY2UuIEluc3RlYWQsIHdlJ2xsIHNldCBgaW5fZGV2YCB0byBOVUxMLCBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoaXMgaXMgYSB2ZXJ5IGNsZWFuIGFuZCB0YXJnZXRlZCBhcHByb2FjaCB0byBhIHBvdGVudGlhbCBvYmplY3QgbGlmZXRpbWUgcHJvYmxlbS5cblxuVGhpcyBpcyB0ZXh0Ym9vayB1c2UtYWZ0ZXItZnJlZSB0ZXJyaXRvcnkuIFdlIHdlcmUgcHJvYmFibHkgc2VlaW5nIGEgc2l0dWF0aW9uIHdoZXJlIGEgcG9pbnRlciB3YXMgYmVpbmcgdXNlZCBhZnRlciBpdHMgY29ycmVzcG9uZGluZyBvYmplY3QgaGFkIGJlZW4gZnJlZWQsIGFuZCB0aGlzIGlzIHdoeSB3ZSdyZSBjaGFuZ2luZyB0aGlzIHJvdXRpbmUgdG8gcHJldmVudCBpdCBmcm9tIGFjcXVpcmluZyByZWZlcmVuY2VzIHRvIGEgcmVzb3VyY2UgdGhhdCBtYXkgb3IgbWF5IG5vdCBleGlzdCBhdCB0aGF0IHRpbWUuIFdlIHJlYWxseSBkb24ndCB3YW50IHRvIGdldCBpbnRvIHRoYXQgc2l0dWF0aW9uIVxuXG5HaXZlbiB0aGF0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgZml4IGlzIHByaW1hcmlseSBhZGRyZXNzaW5nIG1lbW9yeSBzYWZldHksIHNwZWNpZmljYWxseSB1c2UtYWZ0ZXItZnJlZSBidWdzLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IGV4YWN0bHkgdGhlc2Uga2luZHMgb2YgaXNzdWVzLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSdyZSBvbmx5IGNoYW5naW5nIHRoZSAqaGFuZGxpbmcqIG9mIGV4aXN0aW5nIGRhdGEsIHNvIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gY29uZmlybSwgSSdtIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIFRoaXMgaXMgYSBjbGFzc2ljIFVBRiBmaXgsIGFuZCBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBrZWVwIGFuIGV5ZSBvbiB0aGlzIHR5cGUgb2YgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDUsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMTg6MjE6NDIuMDQyNDcxMDQ3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaW5fZGV2X2dldGAgdG8gdXNlIGByZWZjb3VudF9pbmNfbm90X3plcm9gIGluc3RlYWQgb2YgYHJlZmNvdW50X2luY2Agd2hlbiBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gYW4gYGluX2RldmljZWAgdW5kZXIgUkNVLiBUaGlzIGlzIGEgY2xhc3NpYyBmaXggZm9yIGEgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgcmVmY291bnQgYnVnLCBwcmV2ZW50aW5nIHRoZSBhY3F1aXNpdGlvbiBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGlsZSBLTVNBTiBmb2N1c2VzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gU2luY2UgdGhpcyBwYXRjaCBkZWFscyBlbnRpcmVseSB3aXRoIG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpbl9kZXZfZ2V0YCB0byB1c2UgYHJlZmNvdW50X2luY19ub3RfemVyb2AgaW5zdGVhZCBvZiBgcmVmY291bnRfaW5jYCB3aGVuIGFjcXVpcmluZyBhIHJlZmVyZW5jZSB0byBhbiBgaW5fZGV2aWNlYCB1bmRlciBSQ1UuIFRoaXMgaXMgYSBjbGFzc2ljIGZpeCBmb3IgYSB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBvciByZWZjb3VudCBidWcsIHByZXZlbnRpbmcgdGhlIGFjcXVpc2l0aW9uIG9mIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZGVzdHJveWVkLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWxlIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzLiBTaW5jZSB0aGlzIHBhdGNoIGRlYWxzIGVudGlyZWx5IHdpdGggb2JqZWN0IGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4ncz9[1] Phase: Succeeded StartedAt: 2026-08-15 18:21:53 +0000 UTC FinishedAt: 2026-08-15 18:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-15 18:21:53 +0000 UTC FinishedAt: 2026-08-15 18:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2] Phase: Succeeded StartedAt: 2026-08-15 18:21:53 +0000 UTC FinishedAt: 2026-08-15 22:02:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-15 18:21:53 +0000 UTC FinishedAt: 2026-08-15 22:02:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-15 18:21:53 +0000 UTC FinishedAt: 2026-08-15 18:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-15 18:21:53 +0000 UTC FinishedAt: 2026-08-15 18:21:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow4ncz9/series-workflow4ncz9-convert-artifact-1592860091/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-15 18:22:03 +0000 UTC FinishedAt: 2026-08-15 18:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-15 18:22:03 +0000 UTC FinishedAt: 2026-08-15 18:38:42 +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:*84ab26c8-f94a-46b4-a549-ab3ff6973bea,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-workflow4ncz9/series-workflow4ncz9-convert-artifact-1592860091/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": "2c008304-3c05-49a5-ab28-a6159736f6fc", "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-workflow4ncz9/series-workflow4ncz9-build-action-784739321/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-15 18:22:03 +0000 UTC FinishedAt: 2026-08-15 18:38:32 +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:*84ab26c8-f94a-46b4-a549-ab3ff6973bea,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-workflow4ncz9/series-workflow4ncz9-convert-artifact-1592860091/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": "2c008304-3c05-49a5-ab28-a6159736f6fc", "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-workflow4ncz9/series-workflow4ncz9-build-action-784739321/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-15 18:38:42 +0000 UTC FinishedAt: 2026-08-15 18:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-15 18:38:42 +0000 UTC FinishedAt: 2026-08-15 18:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-15 18:38:42 +0000 UTC FinishedAt: 2026-08-15 18:38:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-15 18:38:42 +0000 UTC FinishedAt: 2026-08-15 18:38:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow4ncz9/series-workflow4ncz9-convert-artifact-2239598866/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-15 18:38:52 +0000 UTC FinishedAt: 2026-08-15 18:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-15 18:38:52 +0000 UTC FinishedAt: 2026-08-15 18:41:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2c008304-3c05-49a5-ab28-a6159736f6fc,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-workflow4ncz9/series-workflow4ncz9-build-action-784739321/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-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-15 18:41:12 +0000 UTC FinishedAt: 2026-08-15 18:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-15 18:41:12 +0000 UTC FinishedAt: 2026-08-15 18:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-15 18:41:12 +0000 UTC FinishedAt: 2026-08-15 18:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-15 18:41:12 +0000 UTC FinishedAt: 2026-08-15 18:58:00 +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:*84ab26c8-f94a-46b4-a549-ab3ff6973bea,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-workflow4ncz9/series-workflow4ncz9-convert-artifact-2239598866/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": "48326937-5f6c-492a-a562-3673bf94bf97", "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-workflow4ncz9/series-workflow4ncz9-build-action-416681382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-15 18:41:12 +0000 UTC FinishedAt: 2026-08-15 18:57:50 +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:*84ab26c8-f94a-46b4-a549-ab3ff6973bea,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-workflow4ncz9/series-workflow4ncz9-convert-artifact-2239598866/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": "48326937-5f6c-492a-a562-3673bf94bf97", "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-workflow4ncz9/series-workflow4ncz9-build-action-416681382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-15 18:58:00 +0000 UTC FinishedAt: 2026-08-15 18:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-15 18:58:00 +0000 UTC FinishedAt: 2026-08-15 18:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-15 18:58:00 +0000 UTC FinishedAt: 2026-08-15 19:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-15 18:58:00 +0000 UTC FinishedAt: 2026-08-15 18:59:54 +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:*48326937-5f6c-492a-a562-3673bf94bf97,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-workflow4ncz9/series-workflow4ncz9-build-action-416681382/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-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-15 19:00:04 +0000 UTC FinishedAt: 2026-08-15 22:02:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-15 19:00:04 +0000 UTC FinishedAt: 2026-08-15 22:02:30 +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":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"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:*2c008304-3c05-49a5-ab28-a6159736f6fc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*48326937-5f6c-492a-a562-3673bf94bf97,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-workflow4ncz9/series-workflow4ncz9-build-action-784739321/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-workflow4ncz9/series-workflow4ncz9-build-action-416681382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-15 19:00:04 +0000 UTC FinishedAt: 2026-08-15 19:00:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-15 19:00:04 +0000 UTC FinishedAt: 2026-08-15 19:00:08 +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":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"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-workflow4ncz9/series-workflow4ncz9-convert-artifact-593406055/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-15 19:00:04 +0000 UTC FinishedAt: 2026-08-15 19:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-15 19:00:04 +0000 UTC FinishedAt: 2026-08-15 19:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-15 19:00:04 +0000 UTC FinishedAt: 2026-08-15 19:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-15 19:00:14 +0000 UTC FinishedAt: 2026-08-15 22:02:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ncz9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_join_snoopers","br_multicast_leave_snoopers","br_multicast_toggle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"667e793f-b680-4356-b189-03dfa5806fe0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-15 19:00:14 +0000 UTC FinishedAt: 2026-08-15 22:02:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2c008304-3c05-49a5-ab28-a6159736f6fc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*48326937-5f6c-492a-a562-3673bf94bf97,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-workflow4ncz9/series-workflow4ncz9-build-action-784739321/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-workflow4ncz9/series-workflow4ncz9-build-action-416681382/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-workflow4ncz9/series-workflow4ncz9-convert-artifact-593406055/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,}