Name: series-workflowxt4c8 Phase: Succeeded StartedAt: 2026-08-25 19:02:15 +0000 UTC FinishedAt: 2026-08-25 20:12:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[0] Phase: Succeeded StartedAt: 2026-08-25 19:02:15 +0000 UTC FinishedAt: 2026-08-25 19:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 19:02:15 +0000 UTC FinishedAt: 2026-08-25 19:21:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ECONET_FE_SOC_PHY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ECONET_FE_SOC_PHY" ], "series_id": "c3b884f6-e4b9-4313-a019-20e20dfaeaba" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "en751221_fephy_probe", "en751221_fephy_config_init" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VDT05FVF9GRV9TT0NfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW43NTEyMjFfZmVwaHlfcHJvYmUmIzM0OywKICAgICYjMzQ7ZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIEVjb05ldCAxMC8xMDAgU29Dcy4gVGhlIGRyaXZlciBwcmltYXJpbHkgaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIHZpYSBNRElPICh1c2luZyBwaHlsaWIgZnVuY3Rpb25zIGxpa2UgcGh5X3dyaXRlX3BhZ2VkIGFuZCBwaHlfcmVhZF9wYWdlZCkgYW5kIHBlcmZvcm1zIGNhbGlicmF0aW9uIHJvdXRpbmVzLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGUuZy4sIG10a19zb2NwaHlfcHJpdiBhbmQgdGhlIHNoYXJlZCBwYWNrYWdlIGRhdGEpIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGRldm1fa3phbGxvYyBvciBzdGFuZGFyZCBwaHlsaWIgZnVuY3Rpb25zLiBTdGFjayB2YXJpYWJsZXMgbGlrZSBjYWxfY29tcGxldGVfY3R4IGFyZSBhbHNvIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdXNlci1zcGFjZSBBUElzLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3Rscywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnktZGVwZW5kZW50IGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZcyAoYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNgKS4gUEhZIGRyaXZlcnMgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhbiBNRElPIGJ1cy4gRm9yIGV4YW1wbGUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKHN1Y2ggYXMgYHNtc2M5NXh4YCkgdmlhIHRoZSBgdmhjaWAgZHJpdmVyLiBXaGVuIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIGlzIHByb2JlZCwgaXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCBzY2FucyBmb3IgUEhZcyBieSBzZW5kaW5nIE1ESU8gcmVhZCByZXF1ZXN0cyAod2hpY2ggdHJhbnNsYXRlIHRvIFVTQiBjb250cm9sIG1lc3NhZ2VzKS4gQnkgcmV0dXJuaW5nIHRoZSBzcGVjaWZpYyBQSFkgSUQgKGAweDAzYTI5NDE0YCkgZHVyaW5nIHRoZSBNRElPIHNjYW4sIHRoZSBNRElPIGJ1cyB3aWxsIGluc3RhbnRpYXRlIGEgUEhZIGRldmljZSB3aXRoIHRoaXMgSUQsIHRyaWdnZXJpbmcgdGhlIHByb2JlIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgb2YgdGhlIGBlY29uZXQtZmUtc29jYCBQSFkgZHJpdmVyLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0N2JiYzQzNmRlYzI0NTA0YzA3MDMzMGM2ZDQ3Yjc5MTkzMTY4MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxOToxODo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA0NjBjYjcyNjg4NDUwLi43Y2EzZDhkMDhjNjkzIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtOTI1Myw2ICYjNDM7OTI1MywxMiBAQCBXOlx0aHR0cHM6Ly9saW51eHR2Lm9yZ1xuIFE6XHRodHRwOi8vcGF0Y2h3b3JrLmxpbnV4dHYub3JnL3Byb2plY3QvbGludXgtbWVkaWEvbGlzdC9cbiBGOlx0ZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2VjMTAwKlxuIFxuJiM0MztFQ09ORVQgRVRIRVJORVQgUEhZIERSSVZFUlxuJiM0MztNOlx0Q2FsZWIgSmFtZXMgRGVMaXNsZSBcdTAwM2NjamRAY2pkbnMuZnJcdTAwM2VcbiYjNDM7TDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNcbiYjNDM7XG4gRUNPTkVUIE1JUFMgUExBVEZPUk1cbiBNOlx0Q2FsZWIgSmFtZXMgRGVMaXNsZSBcdTAwM2NjamRAY2pkbnMuZnJcdTAwM2VcbiBMOlx0bGludXgtbWlwc0B2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXG5pbmRleCAzYjljZjgyYzBjYjI4Li42NGFiZjViNjk1YWIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXG5AQCAtMSw0ICYjNDM7MSwxOSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MztcbiYjNDM7Y29uZmlnIEVDT05FVF9GRV9TT0NfUEhZXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7RWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZc1wmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gRUNPTkVUIHx8IENPTVBJTEVfVEVTVFxuJiM0MztcdHNlbGVjdCBNVEtfTkVUX1BIWUxJQlxuJiM0MztcdHNlbGVjdCBQSFlfUEFDS0FHRVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFN1cHBvcnRzIEVjb05ldCBTb0MgYnVpbHQtaW4gMTAvMTAwIEV0aGVybmV0IFBIWXMuXG4mIzQzO1xuJiM0MztcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBidWlsdC1pbiBFdGhlcm5ldCBQSFlzIHdoaWNoIGFyZSBwcmVzZW50IGluXG4mIzQzO1x0ICBFTjc1MjZDIGJhc2VkIFNvQ3MgKGluY2x1ZGluZyBFTjc1MjZGKS4gSXQgY2FuIGFsc28gd29yayB3aXRoXG4mIzQzO1x0ICBsZWdhY3kgRU43NTEyIEZFIFBIWXMgd2hpY2ggaWRlbnRpZnkgYXMgMDNhMi45NDEyLCBidXQgc2luY2UgdGhpc1xuJiM0MztcdCAgSUQgaXMgdXNlZCBieSBNRURJQVRFS19HRV9QSFksIHVzZXJzIHdhbnRpbmcgdG8gZm9yY2UgdGhpcyBkcml2ZXJcbiYjNDM7XHQgIG11c3Qgb3ZlcnJpZGUgdGhlIElEIHRvIDAzYTIuOTQxNCBpbiB0aGUgZGV2aWNlIHRyZWUuXG4mIzQzO1xuIGNvbmZpZyBNRURJQVRFS18yUDVHRV9QSFlcbiBcdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIDIuNUdiIEV0aGVybmV0IFBIWXNcJiMzNDtcbiBcdGRlcGVuZHMgb24gKEFSTTY0IFx1MDAyNlx1MDAyNiBBUkNIX01FRElBVEVLKSB8fCBDT01QSUxFX1RFU1RcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGVcbmluZGV4IDZmOWNhY2Y3ZjkwNjUuLjcxMjM5ZTkyYWE1ODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxuQEAgLTEsNCAmIzQzOzEsNSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7b2JqLSQoQ09ORklHX0VDT05FVF9GRV9TT0NfUEhZKVx0XHQmIzQzOz0gZWNvbmV0LWZlLXNvYy5vXG4gb2JqLSQoQ09ORklHX01FRElBVEVLXzJQNUdFX1BIWSlcdCYjNDM7PSBtdGstMnA1Z2Uub1xuIG9iai0kKENPTkZJR19NRURJQVRFS19GRV9TT0NfUEhZKVx0JiM0Mzs9IG10ay1mZS1zb2Mub1xuIG9iai0kKENPTkZJR19NRURJQVRFS19HRV9QSFkpXHRcdCYjNDM7PSBtdGstZ2Uub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmMgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzVkYmIzMmE1ZDFhYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY1xuQEAgLTAsMCAmIzQzOzEsNjMyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL3BoeWxpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O210ay5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbiBvbGRlciB2ZXJzaW9uIG9mIHRoaXMgUEhZIGhhcmR3YXJlIHVzZXMgdGhlIElEIDAzYTIuOTQxMi5cbiYjNDM7ICogVGhpcyBkcml2ZXIgZG9lcyBub3QgbWF0Y2ggb24gaXQgYmVjYXVzZSBpdCBjb2xsaWRlcyB3aXRoXG4mIzQzOyAqIE1US19HUEhZX0lEX01UNzUzMCwgc28gdXNlcnMgd2FudGluZyB0byB1c2UgdGhpcyBkcml2ZXIgc2hvdWxkXG4mIzQzOyAqIG92ZXJyaWRlIHRoZSBQSFkgSUQgaW4gdGhlIGRldmljZSB0cmVlIHRvIDAzYTIuOTQxNC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkNcdFx0MHgwM2EyOTQxNFxuJiM0MztcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzFcdFx0XHQweDEwMDBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzJcdFx0XHQweDIwMDBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzNcdFx0XHQweDMwMDBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzRcdFx0XHQweDQwMDBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzVcdFx0XHQweDUwMDBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzZcdFx0XHQweDYwMDBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzdcdFx0XHQweDcwMDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wwXHRcdFx0MHg4MDAwXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wxXHRcdFx0MHg5MDAwXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wyXHRcdFx0MHhhMDAwXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wzXHRcdFx0MHhiMDAwXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0w0XHRcdFx0MHhjMDAwXG4mIzQzO1xuJiM0MzsvKiA0IHBvcnRzICg4LDksMTAsMTEpIG9yIDMgcG9ydHMgKDksMTAsMTEpICovXG4mIzQzOyNkZWZpbmUgRUNPTkVUX0xFR0FDWV9QT1JUMF9BRERSXHQ4XG4mIzQzOyNkZWZpbmUgRUNPTkVUX0VONzUyNkNfUE9SVDBfQUREUlx0OVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2FsaWJyYXRpb24gcG9sbGluZyBkb2VzIG5vdCBjb21wbGV0ZSB1bnRpbCBFQ09ORVRfQ0FMX01JTl9DWUNMRVNcbiYjNDM7ICogY29uc2VjdXRpdmUgXCYjMzQ7ZG9uZVwmIzM0OyByZXN1bHRzIGFyZSByZWNlaXZlZC4gU2VlOiBwb2xsX2NhbF9jb21wbGV0ZVxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMX01JTl9DWUNMRVNcdFx0MTBcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE1pY3Jvc2Vjb25kcyBwZXIgY2FsaWJyYXRpb24gcG9sbCBjeWNsZSwgY2FsaWJyYXRpb24gdGFrZXMgYXBwcm94aW1hdGVseVxuJiM0MzsgKiBFQ09ORVRfQ0FMX0NZQ0xFX1VTICogRUNPTkVUX0NBTF9NSU5fQ1lDTEVTLiBUb3RhbCBzZXR1cCB0aW1lIGlzIHVzdWFsbHlcbiYjNDM7ICogbGVzcyB0aGFuIDE1MHggdGhpcyBudW1iZXIuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfQ1lDTEVfVVNcdFx0MTBcbiYjNDM7XG4mIzQzOy8qIFRvdGFsIHRpbWUgYWxsb3dlZCBmb3IgY2FsaWJyYXRpb24gcG9sbGluZyBiZWZvcmUgZXJyb3IgaXMgcmV0dXJuZWQuICovXG4mIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9USU1FT1VUX1VTXHRcdDEwMDAwMFxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTm90ZTogVGhlc2UgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgd2VyZSB3cml0dGVuIHdpdGhvdXQgdGhlIGJlbmVmaXQgb2YgdGhlXG4mIzQzOyAqICAgICAgIGhhcmR3YXJlIHNwZWNpZmljYXRpb24sIHNvIG5hbWVzIGFyZSBnaXZlbiBvbmx5IHdoZXJlIHRoZSBtZWFuaW5nIGlzXG4mIzQzOyAqICAgICAgIGZhaXJseSBvYnZpb3VzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOy8qIEc3UjI0ICovXG4mIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9UWVBFX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4mIzQzOyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfUjUwXHRcdEZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4NilcbiYjNDM7I2RlZmluZSAgIEVDT05FVF9DQUxfVFlQRV9UWE9TXHRcdEZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4MylcbiYjNDM7I2RlZmluZSAgIEVDT05FVF9DQUxfVFlQRV9UWEFNUFx0XHRGSUVMRF9QUkVQKEVDT05FVF9DQUxfVFlQRV9NQVNLLCAweDcpXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX01BU0tcdFx0R0VOTUFTSygxMSwgNilcbiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMSU5fRU43NTI2Q1x0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMX0RPTkVfRU43NTI2Q1x0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMX09VVF9FTjc1MjZDXHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7LyogTDRSMjMgKi9cbiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMSU5fTEVHQUNZXHRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfRE9ORV9MRUdBQ1lcdFx0QklUKDYpXG4mIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9PVVRfTEVHQUNZXHRcdEJJVCg0KVxuJiM0MztcbiYjNDM7I2RlZmluZSBFQ09ORVRfREFDX0lOXzJWXHRcdDB4MGYwXG4mIzQzO1xuJiM0MzsvKiBMNFIxNyAqL1xuJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX1NJR05cdFx0QklUKDEzKVxuJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX01BR1x0XHRcdEdFTk1BU0soMTIsIDgpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX0RFRkFVTFRcdFx0MFxuJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX01BWFx0XHRcdDMxXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1RYT1NfTUlOXHRcdFx0LTMxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVDT05FVF9SNTBfWkNBTF9ERUZBVUxUXHRcdDB4MjBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfTUFYXHRcdDB4M2ZcbiYjNDM7XG4mIzQzOy8qIEw0UjIyICovXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1I1MF9UWENBTF9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1I1MF9SWENBTF9NQVNLXHRcdEdFTk1BU0soNywgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRUNPTkVUX1RYQU1QX0RFRkFVTFRcdFx0MHgxMlxuJiM0MzsjZGVmaW5lIEVDT05FVF9UWEFNUF9NQVhcdFx0MHgzZlxuJiM0MztcbiYjNDM7LyogWkNBTCBjb21wZW5zYXRpb24gdGFibGUgcGVyIGNoaXAsIHBlciBwaHksIFJYICYjNDM7IFRYICovXG4mIzQzO3N0cnVjdCBjb21wZW5zYXRpb24ge1xuJiM0MztcdHM4IHpjYWxfdHg7XG4mIzQzO1x0czggemNhbF9yeDtcbiYjNDM7XHRzOCB0eG9zO1xuJiM0MztcdHM4IGFtcDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGVuc2F0aW9uIGVuNzUxMjIxX2NvbXBbMl1bNF0gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0LyogTGVnYWN5ICovXG4mIzQzO1x0XHR7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gLTQsIC50eG9zID0gMCwgLmFtcCA9IDEgfSwgLyogIDggKi9cbiYjNDM7XHRcdHsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSAtNCwgLnR4b3MgPSAxLCAuYW1wID0gMiB9LCAvKiAgOSAqL1xuJiM0MztcdFx0eyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IC00LCAudHhvcyA9IDEsIC5hbXAgPSAxIH0sIC8qIDEwICovXG4mIzQzO1x0XHR7IC56Y2FsX3R4ID0gLTIsIC56Y2FsX3J4ID0gLTgsIC50eG9zID0gMSwgLmFtcCA9IDEgfSwgLyogMTEgKi9cbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC8qIEVONzUyNkMgKi9cbiYjNDM7XHRcdHsgLnpjYWxfdHggPSAzLCAgLnpjYWxfcnggPSA2LCAudHhvcyA9IDEsIC5hbXAgPSAwIH0sIC8qICA5ICovXG4mIzQzO1x0XHR7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gNSwgLnR4b3MgPSAxLCAuYW1wID0gLTEgfSwgLyogMTAgKi9cbiYjNDM7XHRcdHsgLnpjYWxfdHggPSA2LCAgLnpjYWxfcnggPSA2LCAudHhvcyA9IDEsIC5hbXAgPSAtMSB9LCAvKiAxMSAqL1xuJiM0MztcdFx0eyB9LCAvKiBVbnVzZWQgKi9cbiYjNDM7XHR9XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgdTggemNhbF90b19yNTBvaG1bNjRdID0ge1xuJiM0MztcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNiwgMTIzLCAxMjAsIDExNywgMTE0LCAxMTIsIDExMCwgMTA3LCAxMDUsIDEwMyxcbiYjNDM7XHQxMDEsICA5OSwgIDk3LCAgNzksICA3NywgIDc1LCAgNzQsICA3MiwgIDcwLCAgNjksICA2NywgIDY2LCAgNjUsICA0NywgIDQ2LCAgNDUsXG4mIzQzO1x0IDQzLCAgNDIsICA0MSwgIDQwLCAgMzksICAzOCwgIDM3LCAgMzYsICAzNCwgIDM0LCAgMzMsICAzMiwgIDE1LCAgMTQsICAxMywgIDEyLFxuJiM0MztcdCAxMSwgIDEwLCAgMTAsICAgOSwgICA4LCAgIDcsICAgNywgICA2LCAgIDUsICAgNCwgICA0LCAgIDMsICAgMiwgICAyLCAgIDEsICAgMVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkIHtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBjb21wZW5zYXRpb24gZ2V0X2N0YWIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHR1OCBwaHlfb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRwaHlfb2Zmc2V0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAtXHUwMDNlbWRpby5hZGRyO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHBoeV9vZmZzZXQgXHUwMDNlPSBBUlJBWV9TSVpFKGVuNzUxMjIxX2NvbXBbMF0pKSlcbiYjNDM7XHRcdHJldHVybiAoc3RydWN0IGNvbXBlbnNhdGlvbikge307XG4mIzQzO1xuJiM0MztcdHJldHVybiBlbjc1MTIyMV9jb21wW3BoeWRldi1cdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkNdW3BoeV9vZmZzZXRdO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzZXRfY2FsaW5fZmxhZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0dTE2IHNldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHtcbiYjNDM7XHRcdC8qIEc3UjI0IGlzIHNoYXJlZCBzbyBwaHlfbW9kaWZ5X3BhZ2VkIGlzIHJlcXVpcmVkICovXG4mIzQzO1x0XHRzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0VONzUyNkMgOiAwO1xuJiM0MztcdFx0cGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsXG4mIzQzO1x0XHRcdFx0IEVDT05FVF9DQUxJTl9FTjc1MjZDLCBzZXQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0xFR0FDWSA6IDA7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0w0LCAyMywgc2V0KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBjYWxfY29tcGxldGVfY3R4IHtcbiYjNDM7XHR1MTYgY29uc2VjdXRpdmVfdHJ1ZXNcdDogMTU7XG4mIzQzO1x0Ym9vbCBzdGFydGVkXHRcdDogMTtcbiYjNDM7XHRib29sIG9ic2VydmVkX2ZhbHNlXHQ6IDE7XG4mIzQzO1x0dTE2IGFib3J0ZWRfdHJpZXNcdDogNztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwb2xsX2NhbF9jb21wbGV0ZSAtIHBvbGwgZm9yIGNhbGlicmF0aW9uIGNvbXBsZXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIEJlY2F1c2Ugc29tZSBsZWdhY3kgY2hpcHMgYXJlIGtub3duIHRvIGJlIHVucmVsaWFibGUgKGZhbHNlIHBvc2l0aXZlcyksXG4mIzQzOyAqIHJlZmVyZW5jZSBjb2RlIGFkZHMgMTAsMDAwdXMgb2YgZml4ZWQgZGVsYXkgcGVyIGNhbGlicmF0aW9uIGN5Y2xlLlxuJiM0MzsgKiBQcmFjdGljYWxseSwgdGhlcmUgYXJlIGFib3V0IDEwLTUwIGNhbGlicmF0aW9uIGN5Y2xlcyBmb3IgZWFjaCBvZiB0aGVcbiYjNDM7ICogdGhyZWUgdHVuYWJsZXMsIHNvIGFkZGluZyBhIHNpZ25pZmljYW50IGZpeGVkIGRlbGF5IGlzIGNvc3RseS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIHN0YXJ0cyB3aXRoIENBTElOIGRpc2FibGVkLCBwb2xscyBmb3JcbiYjNDM7ICogZG9uZSBzdGF0dXMgZmFsc2UsIHRoZW4gZW5hYmxlcyBDQUxJTiBhbmQgcG9sbHMgdW50aWwgYSB0cnVlIGRvbmVcbiYjNDM7ICogc3RhdHVzIGlzIHJlY29yZGVkIEVDT05FVF9DQUxfTUlOX0NZQ0xFUyB0aW1lcyBjb25zZWN1dGl2ZWx5LlxuJiM0MzsgKlxuJiM0MzsgKiBAcmV0dXJuczpcbiYjNDM7ICogICBcdTAwM2MgMCBvbiBlcnJvclxuJiM0MzsgKiAgIDAgbm90IHlldCBjb21wbGV0ZVxuJiM0MzsgKiAgIDEgY29tcGxldGUgZmFsc2VcbiYjNDM7ICogICAyIGNvbXBsZXRlIHRydWVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcG9sbF9jYWxfY29tcGxldGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgY2FsX2NvbXBsZXRlX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCBkb25lX21hc2s7XG4mIzQzO1x0aW50IG91dF9tYXNrO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlfcmVhZF9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQpO1xuJiM0MztcdFx0ZG9uZV9tYXNrID0gRUNPTkVUX0NBTF9ET05FX0VONzUyNkM7XG4mIzQzO1x0XHRvdXRfbWFzayA9IEVDT05FVF9DQUxfT1VUX0VONzUyNkM7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IHBoeV9yZWFkX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MNCwgMjMpO1xuJiM0MztcdFx0ZG9uZV9tYXNrID0gRUNPTkVUX0NBTF9ET05FX0xFR0FDWTtcbiYjNDM7XHRcdG91dF9tYXNrID0gRUNPTkVUX0NBTF9PVVRfTEVHQUNZO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKChyZXQgXHUwMDI2IGRvbmVfbWFzaykgPT0gMCkge1xuJiM0MztcdFx0Y3R4LVx1MDAzZW9ic2VydmVkX2ZhbHNlID0gdHJ1ZTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VhYm9ydGVkX3RyaWVzICYjNDM7PSAoY3R4LVx1MDAzZWNvbnNlY3V0aXZlX3RydWVzIFx1MDAzZSAwKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2Vjb25zZWN1dGl2ZV90cnVlcyA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFjdHgtXHUwMDNlc3RhcnRlZCkge1xuJiM0MztcdFx0XHRzZXRfY2FsaW5fZmxhZyhwaHlkZXYsIHRydWUpO1xuJiM0MztcdFx0XHRjdHgtXHUwMDNlc3RhcnRlZCA9IHRydWU7XG4mIzQzO1x0XHRcdHJldHVybiBwb2xsX2NhbF9jb21wbGV0ZShwaHlkZXYsIGN0eCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjdHgtXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWNvbnNlY3V0aXZlX3RydWVzIFx1MDAzYyBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgfHwgIWN0eC1cdTAwM2VvYnNlcnZlZF9mYWxzZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWFib3J0ZWRfdHJpZXMpXG4mIzQzO1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0O0NhbGlicmF0aW9uIGN5Y2xlICVkIGZhbHNlIHBvc2l0aXZlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGN0eC1cdTAwM2VhYm9ydGVkX3RyaWVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICgocmV0IFx1MDAyNiBvdXRfbWFzaykgIT0gMCkgPyAyIDogMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBvbGxfY2FsX2NvbXBsZXRlIC0gY2hlY2sgZm9yIGNhbGlicmF0aW9uIHJlZ2lzdGVyXG4mIzQzOyAqIEByZXR1cm5zOiAtZXJyb3Igb3IgMSBpZiBjYWxpYnJhdGlvbiByZXN1bHQgaXMgdHJ1ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY2FsX2NvbXBsZXRlX2N0eCBjY3R4ID0ge307XG4mIzQzO1x0aW50IG91dDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRzZXRfY2FsaW5fZmxhZyhwaHlkZXYsIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQocG9sbF9jYWxfY29tcGxldGUsIG91dCwgb3V0ICE9IDAsXG4mIzQzO1x0XHRcdFx0RUNPTkVUX0NBTF9DWUNMRV9VUywgRUNPTkVUX0NBTF9USU1FT1VUX1VTLFxuJiM0MztcdFx0XHRcdGZhbHNlLCBwaHlkZXYsIFx1MDAyNmNjdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7Q2FsaWJyYXRpb24gdGltZW91dCAlZCAoJWQgLyAlZCAvICVkIC8gJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICByZXQsIGNjdHguY29uc2VjdXRpdmVfdHJ1ZXMsIGNjdHgub2JzZXJ2ZWRfZmFsc2UsXG4mIzQzO1x0XHRcdCAgIGNjdHguYWJvcnRlZF90cmllcywgY2N0eC5zdGFydGVkKTtcbiYjNDM7XHR9IGVsc2UgaWYgKG91dCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0NhbGlicmF0aW9uIGVycm9yICVkXFxuXCYjMzQ7LCBvdXQpO1xuJiM0MztcdFx0cmV0ID0gb3V0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBvdXQgXHUwMDNlIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzZXRfY2FsaW5fZmxhZyhwaHlkZXYsIGZhbHNlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3I1MChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XG4mIzQzO1x0aW50IHpjYWxfc3ogPSBBUlJBWV9TSVpFKHpjYWxfdG9fcjUwb2htKTtcbiYjNDM7XHR1OCByZ196Y2FsX2N0cmwgPSBFQ09ORVRfUjUwX1pDQUxfREVGQVVMVDtcbiYjNDM7XHRpbnQgaW5pdGlhbF9jb21wX291dDtcbiYjNDM7XHRpbnQgcG9sYXJpdHkgPSAwO1xuJiM0MztcdGludCBjb21wX291dDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHR1MTYgcnhjYWw7XG4mIzQzO1x0dTE2IHR4Y2FsO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9SNTApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweGMwMDApO1xuJiM0MztcbiYjNDM7XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgxMDAwLCAweDEwMDApO1xuJiM0MztcbiYjNDM7XHRmb3IgKDs7KSB7XG4mIzQzO1x0XHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcbiYjNDM7XHRcdFx0cGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsXG4mIzQzO1x0XHRcdFx0XHQgRUNPTkVUX1I1MF9aQ0FMX01BU0ssXG4mIzQzO1x0XHRcdFx0XHQgRklFTERfUFJFUChFQ09ORVRfUjUwX1pDQUxfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHJnX3pjYWxfY3RybCkpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNixcbiYjNDM7XHRcdFx0XHRcdHJnX3pjYWxfY3RybCk7XG4mIzQzO1xuJiM0MztcdFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChjb21wX291dCBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRyZXQgPSBjb21wX291dDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBvbGFyaXR5ID09IDApIHtcbiYjNDM7XHRcdFx0LyogRmlyc3QgY3ljbGUgKi9cbiYjNDM7XHRcdFx0aW5pdGlhbF9jb21wX291dCA9IGNvbXBfb3V0O1xuJiM0MztcdFx0XHRwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxO1xuJiM0MztcdFx0fSBlbHNlIGlmIChpbml0aWFsX2NvbXBfb3V0ICE9IGNvbXBfb3V0KSB7XG4mIzQzO1x0XHRcdC8qIEZvdW5kICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJnX3pjYWxfY3RybCAmIzQzOz0gcG9sYXJpdHk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJnX3pjYWxfY3RybCBcdTAwM2UgRUNPTkVUX1I1MF9aQ0FMX01BWCkge1xuJiM0MztcdFx0XHRyZXQgPSAxO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJ4Y2FsID0gbWF4KDAsIG1pbih6Y2FsX3N6IC0gMSwgY3RhYi56Y2FsX3J4ICYjNDM7IHJnX3pjYWxfY3RybCkpO1xuJiM0MztcdHR4Y2FsID0gbWF4KDAsIG1pbih6Y2FsX3N6IC0gMSwgY3RhYi56Y2FsX3R4ICYjNDM7IHJnX3pjYWxfY3RybCkpO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDQsIDIyLFxuJiM0MztcdFx0XHRGSUVMRF9QUkVQKEVDT05FVF9SNTBfVFhDQUxfTUFTSywgdHhjYWwpIHxcbiYjNDM7XHRcdFx0RklFTERfUFJFUChFQ09ORVRfUjUwX1JYQ0FMX01BU0ssIHJ4Y2FsKSk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0LyogWmVybyBvdXQgcmVnaXN0ZXJzICovXG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpXG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweGMwMDApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3R4X29mZnNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XG4mIzQzO1x0aW50IGluaXRpYWxfY29tcF9vdXQ7XG4mIzQzO1x0aW50IHBvbGFyaXR5ID0gMDtcbiYjNDM7XHRpbnQgb2Zmc2V0ID0gRUNPTkVUX1RYT1NfREVGQVVMVDtcbiYjNDM7XHR1MTYgb2Zmc2V0X2JpbjtcbiYjNDM7XHRpbnQgY29tcF9vdXQ7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgyMTAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCAweDUyMDApOyAvKiBmaXggTURJICovXG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfVFhPUyk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDA0MDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHg0ODAwKTtcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4NGMwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyMSwgMHgwODAwLCAweDA4MDApO1xuJiM0MztcbiYjNDM7XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgwMmMwLCAweDAyYzApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDApO1xuJiM0MztcbiYjNDM7XHRmb3IgKDs7KSB7XG4mIzQzO1x0XHRvZmZzZXRfYmluID0gRklFTERfUFJFUChFQ09ORVRfVFhPU19NQUcsIGFicyhvZmZzZXQpKTtcbiYjNDM7XHRcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdG9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjtcbiYjNDM7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDQsIDE3LCBvZmZzZXRfYmluKTtcbiYjNDM7XG4mIzQzO1x0XHRjb21wX291dCA9IGVuNzUxMjIxX2ZlcGh5X2NhbF9jeWNsZShwaHlkZXYpO1xuJiM0MztcdFx0aWYgKGNvbXBfb3V0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdHJldCA9IGNvbXBfb3V0O1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocG9sYXJpdHkgPT0gMCkge1xuJiM0MztcdFx0XHQvKiBGaXJzdCBjeWNsZSAqL1xuJiM0MztcdFx0XHRpbml0aWFsX2NvbXBfb3V0ID0gY29tcF9vdXQ7XG4mIzQzO1x0XHRcdHBvbGFyaXR5ID0gY29tcF9vdXQgPyAtMSA6IDE7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHtcbiYjNDM7XHRcdFx0LyogRm91bmQgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBwb2xhcml0eTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAob2Zmc2V0IFx1MDAzZSBFQ09ORVRfVFhPU19NQVggfHwgb2Zmc2V0IFx1MDAzYyBFQ09ORVRfVFhPU19NSU4pIHtcbiYjNDM7XHRcdFx0cmV0ID0gMTtcbiYjNDM7XHRcdFx0b2Zmc2V0ID0gMDtcbiYjNDM7XHRcdFx0Z290byBzZXRfdmFsO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b2Zmc2V0ICYjNDM7PSBjdGFiLnR4b3MgKiBwb2xhcml0eTtcbiYjNDM7XG4mIzQzO1x0aWYgKG9mZnNldCBcdTAwM2UgRUNPTkVUX1RYT1NfTUFYIHx8IG9mZnNldCBcdTAwM2MgRUNPTkVUX1RYT1NfTUlOKVxuJiM0MztcdFx0b2Zmc2V0IC09IGN0YWIudHhvcyAqIHBvbGFyaXR5O1xuJiM0MztcbiYjNDM7c2V0X3ZhbDpcbiYjNDM7XHRvZmZzZXRfYmluID0gRklFTERfUFJFUChFQ09ORVRfVFhPU19NQUcsIGFicyhvZmZzZXQpKTtcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAzYyAwKVxuJiM0MztcdFx0b2Zmc2V0X2JpbiB8PSBFQ09ORVRfVFhPU19TSUdOO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMTcsIG9mZnNldF9iaW4pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuJiM0MztcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgMHgwMDAwKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV90eF9hbXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgY29tcGVuc2F0aW9uIGN0YWIgPSBnZXRfY3RhYihwaHlkZXYpO1xuJiM0MztcdGludCBpbml0aWFsX2NvbXBfb3V0O1xuJiM0MztcdHU4IHR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUO1xuJiM0MztcdGludCBwb2xhcml0eSA9IDA7XG4mIzQzO1x0aW50IGNvbXBfb3V0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDAsIDB4MjEwMCk7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgMHg1MjAzKTtcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzIsIDI1LCAweDEwYzApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDAgfCBFQ09ORVRfREFDX0lOXzJWKTtcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzQsIDIxLCAweDA4MDApO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MDJjMCk7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHtcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9UWEFNUCk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDA2MDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwKTtcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4Y2EwMCB8IDB4MDQwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKDs7KSB7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIzLCB0eF9hbXApO1xuJiM0MztcbiYjNDM7XHRcdGNvbXBfb3V0ID0gZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHBoeWRldik7XG4mIzQzO1x0XHRpZiAoY29tcF9vdXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0cmV0ID0gY29tcF9vdXQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChwb2xhcml0eSA9PSAwKSB7XG4mIzQzO1x0XHRcdC8qIEZpcnN0IGN5Y2xlICovXG4mIzQzO1x0XHRcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcbiYjNDM7XHRcdFx0cG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoaW5pdGlhbF9jb21wX291dCAhPSBjb21wX291dCkge1xuJiM0MztcdFx0XHQvKiBGb3VuZCAqL1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR0eF9hbXAgJiM0Mzs9IHBvbGFyaXR5O1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eF9hbXAgXHUwMDNlIEVDT05FVF9UWEFNUF9NQVgpIHtcbiYjNDM7XHRcdFx0cmV0ID0gMTtcbiYjNDM7XHRcdFx0dHhfYW1wID0gRUNPTkVUX1RYQU1QX0RFRkFVTFQ7XG4mIzQzO1x0XHRcdGdvdG8gc2V0X3ZhbDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0eF9hbXAgJiM0MzsgY3RhYi5hbXAgXHUwMDNjIEVDT05FVF9UWEFNUF9NQVgpXG4mIzQzO1x0XHR0eF9hbXAgJiM0Mzs9IGN0YWIuYW1wO1xuJiM0MztcbiYjNDM7c2V0X3ZhbDpcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIzLCB0eF9hbXApO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xuJiM0MztcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgwMDAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0dTE2IGwwcjI2X3RlbXA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7UG9ydCB6ZXJvIG11c3QgYmUgY29uZmlndXJlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciBcdTAwM2Mgc2hhcmVkLVx1MDAzZXBoeWRldl9wMC1cdTAwM2VtZGlvLmFkZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdC8qIEdsb2JhbCByZWdpc3RlcnMgKi9cbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzQsIDI2LCAweDgwNDQpO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjEsIDB4MDBlYSk7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNywgMHgwMmYwKTtcbiYjNDM7XG4mIzQzO1x0LyogTG9jYWwgcmVnaXN0ZXJzICovXG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHhhMDAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDEsIDIyLCAweGYwMDApO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjIsIDB4NDQ0NCk7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyNCwgMHgwYzBjKTtcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDI4LCAweDdjNDQpO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMzAsIDB4MDAwNSk7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAxNywgMHgwMDAwKTtcbiYjNDM7XG4mIzQzO1x0LyogRm9yIEUxL0UyLCBFMyByZXF1aXJlcyAweDIyMjAsIGJ1dCBubyBrbm93biBFTjc1MTIyMSBFMyBjaGlwcyBleGlzdCAqL1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MjIwMCk7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4mIzQzO1x0XHQgLyogMTAwTWIgdHggcDJ6X21pZCwgejJuX21pZCwgejJuX292c19wb3N0LCBuMnpfbWlkICovXG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDIyLCAweDAwMzApO1xuJiM0MztcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNSwgMHgwMjQ4KTtcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjcsIDB4MDJmMCk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDI4LCAweDAyMzApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0bDByMjZfdGVtcCA9IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogQkcgdm9sdGFnZSAqL1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7XG4mIzQzO1xuJiM0MztcdC8qIE1ESSAqL1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTYwMyk7XG4mIzQzO1xuJiM0MztcdC8qIGRpc2FibGUgdHggc2xldyBjb250cm9sICovXG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA1OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gZW43NTEyMjFfZmVwaHlfcjUwKHBoeWRldik7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA1OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gZW43NTEyMjFfZmVwaHlfdHhfb2Zmc2V0KHBoeWRldik7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA1OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gZW43NTEyMjFfZmVwaHlfdHhfYW1wKHBoeWRldik7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDAwMDApO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIGwwcjI2X3RlbXApO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjIsIDB4NDQ0NCk7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDMxMDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBvcnQwID0gRUNPTkVUX0VONzUyNkNfUE9SVDBfQUREUjtcbiYjNDM7XHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZDtcbiYjNDM7XHRzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkICE9IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuJiM0MztcdFx0cG9ydDAgPSBFQ09ORVRfTEVHQUNZX1BPUlQwX0FERFI7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fcGh5X3BhY2thZ2Vfam9pbihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHBoeWRldiwgcG9ydDAsXG4mIzQzO1x0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0c2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciA9PSBwb3J0MClcbiYjNDM7XHRcdHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAgPSBwaHlkZXY7XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBlbjc1MTIyMV9mZXBoeV9kcml2ZXJbXSA9IHtcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpLFxuJiM0MztcdFx0Lm5hbWVcdFx0PSBcJiMzNDtFY29OZXQgRU43NTEyMjEgRkVQSFlcJiMzNDssXG4mIzQzO1x0XHQuY29uZmlnX2luaXRcdD0gZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuY29uZmlnX2ludHJcdD0gZ2VucGh5X25vX2NvbmZpZ19pbnRyLFxuJiM0MztcdFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssXG4mIzQzO1x0XHQucHJvYmVcdFx0PSBlbjc1MTIyMV9mZXBoeV9wcm9iZSxcbiYjNDM7XHRcdC5yZWFkX3BhZ2VcdD0gbXRrX3BoeV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXG4mIzQzO1x0fVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bW9kdWxlX3BoeV9kcml2ZXIoZW43NTEyMjFfZmVwaHlfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgZW43NTEyMjFfZmVwaHlfdGJsW10gPSB7XG4mIzQzO1x0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RWNvTmV0IFNvQyAxMC8xMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Q2FsZWIgSmFtZXMgRGVMaXNsZSBcdTAwM2NjamRAY2pkbnMuZnJcdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBlbjc1MTIyMV9mZXBoeV90YmwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFQ09ORVRfRkVfU09DX1BIWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VuNzUxMjIxX2ZlcGh5X3Byb2JlJiMzNDssCiAgICAmIzM0O2VuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZcyAoYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNgKS4gUEhZIGRyaXZlcnMgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhbiBNRElPIGJ1cy4gRm9yIGV4YW1wbGUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKHN1Y2ggYXMgYHNtc2M5NXh4YCkgdmlhIHRoZSBgdmhjaWAgZHJpdmVyLiBXaGVuIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIGlzIHByb2JlZCwgaXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCBzY2FucyBmb3IgUEhZcyBieSBzZW5kaW5nIE1ESU8gcmVhZCByZXF1ZXN0cyAod2hpY2ggdHJhbnNsYXRlIHRvIFVTQiBjb250cm9sIG1lc3NhZ2VzKS4gQnkgcmV0dXJuaW5nIHRoZSBzcGVjaWZpYyBQSFkgSUQgKGAweDAzYTI5NDE0YCkgZHVyaW5nIHRoZSBNRElPIHNjYW4sIHRoZSBNRElPIGJ1cyB3aWxsIGluc3RhbnRpYXRlIGEgUEhZIGRldmljZSB3aXRoIHRoaXMgSUQsIHRyaWdnZXJpbmcgdGhlIHByb2JlIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgb2YgdGhlIGBlY29uZXQtZmUtc29jYCBQSFkgZHJpdmVyLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0N2JiYzQzNmRlYzI0NTA0YzA3MDMzMGM2ZDQ3Yjc5MTkzMTY4MTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxOToxODo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNDYwY2I3MjY4ODQ1MC4uN2NhM2Q4ZDA4YzY5MyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTkyNTMsNiAmIzQzOzkyNTMsMTIgQEAgVzoJaHR0cHM6Ly9saW51eHR2Lm9yZwogUToJaHR0cDovL3BhdGNod29yay5saW51eHR2Lm9yZy9wcm9qZWN0L2xpbnV4LW1lZGlhL2xpc3QvCiBGOglkcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZWMxMDAqCiAKJiM0MztFQ09ORVQgRVRIRVJORVQgUEhZIERSSVZFUgomIzQzO006CUNhbGViIEphbWVzIERlTGlzbGUgJmx0O2NqZEBjamRucy5mciZndDsKJiM0MztMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJTWFpbnRhaW5lZAomIzQzO0Y6CWRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmMKJiM0MzsKIEVDT05FVCBNSVBTIFBMQVRGT1JNCiBNOglDYWxlYiBKYW1lcyBEZUxpc2xlICZsdDtjamRAY2pkbnMuZnImZ3Q7CiBMOglsaW51eC1taXBzQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZwppbmRleCAzYjljZjgyYzBjYjI4Li42NGFiZjViNjk1YWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMSw0ICYjNDM7MSwxOSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7CiYjNDM7Y29uZmlnIEVDT05FVF9GRV9TT0NfUEhZCiYjNDM7CXRyaXN0YXRlICYjMzQ7RWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZcyYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gRUNPTkVUIHx8IENPTVBJTEVfVEVTVAomIzQzOwlzZWxlY3QgTVRLX05FVF9QSFlMSUIKJiM0MzsJc2VsZWN0IFBIWV9QQUNLQUdFCiYjNDM7CWhlbHAKJiM0MzsJICBTdXBwb3J0cyBFY29OZXQgU29DIGJ1aWx0LWluIDEwLzEwMCBFdGhlcm5ldCBQSFlzLgomIzQzOwomIzQzOwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgYnVpbHQtaW4gRXRoZXJuZXQgUEhZcyB3aGljaCBhcmUgcHJlc2VudCBpbgomIzQzOwkgIEVONzUyNkMgYmFzZWQgU29DcyAoaW5jbHVkaW5nIEVONzUyNkYpLiBJdCBjYW4gYWxzbyB3b3JrIHdpdGgKJiM0MzsJICBsZWdhY3kgRU43NTEyIEZFIFBIWXMgd2hpY2ggaWRlbnRpZnkgYXMgMDNhMi45NDEyLCBidXQgc2luY2UgdGhpcwomIzQzOwkgIElEIGlzIHVzZWQgYnkgTUVESUFURUtfR0VfUEhZLCB1c2VycyB3YW50aW5nIHRvIGZvcmNlIHRoaXMgZHJpdmVyCiYjNDM7CSAgbXVzdCBvdmVycmlkZSB0aGUgSUQgdG8gMDNhMi45NDE0IGluIHRoZSBkZXZpY2UgdHJlZS4KJiM0MzsKIGNvbmZpZyBNRURJQVRFS18yUDVHRV9QSFkKIAl0cmlzdGF0ZSAmIzM0O01lZGlhVGVrIDIuNUdiIEV0aGVybmV0IFBIWXMmIzM0OwogCWRlcGVuZHMgb24gKEFSTTY0ICZhbXA7JmFtcDsgQVJDSF9NRURJQVRFSykgfHwgQ09NUElMRV9URVNUCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGUKaW5kZXggNmY5Y2FjZjdmOTA2NS4uNzEyMzllOTJhYTU4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtMSw0ICYjNDM7MSw1IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7b2JqLSQoQ09ORklHX0VDT05FVF9GRV9TT0NfUEhZKQkJJiM0Mzs9IGVjb25ldC1mZS1zb2Mubwogb2JqLSQoQ09ORklHX01FRElBVEVLXzJQNUdFX1BIWSkJJiM0Mzs9IG10ay0ycDVnZS5vCiBvYmotJChDT05GSUdfTUVESUFURUtfRkVfU09DX1BIWSkJJiM0Mzs9IG10ay1mZS1zb2Mubwogb2JqLSQoQ09ORklHX01FRElBVEVLX0dFX1BIWSkJCSYjNDM7PSBtdGstZ2UubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYzVkYmIzMmE1ZDFhYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmMKQEAgLTAsMCAmIzQzOzEsNjMyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3BoeWxpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O210ay5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFuIG9sZGVyIHZlcnNpb24gb2YgdGhpcyBQSFkgaGFyZHdhcmUgdXNlcyB0aGUgSUQgMDNhMi45NDEyLgomIzQzOyAqIFRoaXMgZHJpdmVyIGRvZXMgbm90IG1hdGNoIG9uIGl0IGJlY2F1c2UgaXQgY29sbGlkZXMgd2l0aAomIzQzOyAqIE1US19HUEhZX0lEX01UNzUzMCwgc28gdXNlcnMgd2FudGluZyB0byB1c2UgdGhpcyBkcml2ZXIgc2hvdWxkCiYjNDM7ICogb3ZlcnJpZGUgdGhlIFBIWSBJRCBpbiB0aGUgZGV2aWNlIHRyZWUgdG8gMDNhMi45NDE0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMJCTB4MDNhMjk0MTQKJiM0MzsKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19HMQkJCTB4MTAwMAomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0cyCQkJMHgyMDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzMJCQkweDMwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19HNAkJCTB4NDAwMAomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0c1CQkJMHg1MDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzYJCQkweDYwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19HNwkJCTB4NzAwMAomIzQzOwomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wwCQkJMHg4MDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfTDEJCQkweDkwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19MMgkJCTB4YTAwMAomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wzCQkJMHhiMDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfTDQJCQkweGMwMDAKJiM0MzsKJiM0MzsvKiA0IHBvcnRzICg4LDksMTAsMTEpIG9yIDMgcG9ydHMgKDksMTAsMTEpICovCiYjNDM7I2RlZmluZSBFQ09ORVRfTEVHQUNZX1BPUlQwX0FERFIJOAomIzQzOyNkZWZpbmUgRUNPTkVUX0VONzUyNkNfUE9SVDBfQUREUgk5CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDYWxpYnJhdGlvbiBwb2xsaW5nIGRvZXMgbm90IGNvbXBsZXRlIHVudGlsIEVDT05FVF9DQUxfTUlOX0NZQ0xFUwomIzQzOyAqIGNvbnNlY3V0aXZlICYjMzQ7ZG9uZSYjMzQ7IHJlc3VsdHMgYXJlIHJlY2VpdmVkLiBTZWU6IHBvbGxfY2FsX2NvbXBsZXRlCiYjNDM7ICovCiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMX01JTl9DWUNMRVMJCTEwCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBNaWNyb3NlY29uZHMgcGVyIGNhbGlicmF0aW9uIHBvbGwgY3ljbGUsIGNhbGlicmF0aW9uIHRha2VzIGFwcHJveGltYXRlbHkKJiM0MzsgKiBFQ09ORVRfQ0FMX0NZQ0xFX1VTICogRUNPTkVUX0NBTF9NSU5fQ1lDTEVTLiBUb3RhbCBzZXR1cCB0aW1lIGlzIHVzdWFsbHkKJiM0MzsgKiBsZXNzIHRoYW4gMTUweCB0aGlzIG51bWJlci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfQ1lDTEVfVVMJCTEwCiYjNDM7CiYjNDM7LyogVG90YWwgdGltZSBhbGxvd2VkIGZvciBjYWxpYnJhdGlvbiBwb2xsaW5nIGJlZm9yZSBlcnJvciBpcyByZXR1cm5lZC4gKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfVElNRU9VVF9VUwkJMTAwMDAwCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBOb3RlOiBUaGVzZSByZWdpc3RlciBkZWZpbml0aW9ucyB3ZXJlIHdyaXR0ZW4gd2l0aG91dCB0aGUgYmVuZWZpdCBvZiB0aGUKJiM0MzsgKiAgICAgICBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBzbyBuYW1lcyBhcmUgZ2l2ZW4gb25seSB3aGVyZSB0aGUgbWVhbmluZyBpcwomIzQzOyAqICAgICAgIGZhaXJseSBvYnZpb3VzLgomIzQzOyAqLwomIzQzOwomIzQzOy8qIEc3UjI0ICovCiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMX1RZUEVfTUFTSwkJR0VOTUFTSygxNCwgMTIpCiYjNDM7I2RlZmluZSAgIEVDT05FVF9DQUxfVFlQRV9SNTAJCUZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4NikKJiM0MzsjZGVmaW5lICAgRUNPTkVUX0NBTF9UWVBFX1RYT1MJCUZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4MykKJiM0MzsjZGVmaW5lICAgRUNPTkVUX0NBTF9UWVBFX1RYQU1QCQlGSUVMRF9QUkVQKEVDT05FVF9DQUxfVFlQRV9NQVNLLCAweDcpCiYjNDM7I2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfTUFTSwkJR0VOTUFTSygxMSwgNikKJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxJTl9FTjc1MjZDCQlCSVQoNCkKJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfRE9ORV9FTjc1MjZDCQlCSVQoMSkKJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfT1VUX0VONzUyNkMJCUJJVCgwKQomIzQzOwomIzQzOy8qIEw0UjIzICovCiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMSU5fTEVHQUNZCQlCSVQoMikKJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfRE9ORV9MRUdBQ1kJCUJJVCg2KQomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9PVVRfTEVHQUNZCQlCSVQoNCkKJiM0MzsKJiM0MzsjZGVmaW5lIEVDT05FVF9EQUNfSU5fMlYJCTB4MGYwCiYjNDM7CiYjNDM7LyogTDRSMTcgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX1NJR04JCUJJVCgxMykKJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX01BRwkJCUdFTk1BU0soMTIsIDgpCiYjNDM7CiYjNDM7I2RlZmluZSBFQ09ORVRfVFhPU19ERUZBVUxUCQkwCiYjNDM7I2RlZmluZSBFQ09ORVRfVFhPU19NQVgJCQkzMQomIzQzOyNkZWZpbmUgRUNPTkVUX1RYT1NfTUlOCQkJLTMxCiYjNDM7CiYjNDM7I2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfREVGQVVMVAkJMHgyMAomIzQzOyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX01BWAkJMHgzZgomIzQzOwomIzQzOy8qIEw0UjIyICovCiYjNDM7I2RlZmluZSBFQ09ORVRfUjUwX1RYQ0FMX01BU0sJCUdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBFQ09ORVRfUjUwX1JYQ0FMX01BU0sJCUdFTk1BU0soNywgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEVDT05FVF9UWEFNUF9ERUZBVUxUCQkweDEyCiYjNDM7I2RlZmluZSBFQ09ORVRfVFhBTVBfTUFYCQkweDNmCiYjNDM7CiYjNDM7LyogWkNBTCBjb21wZW5zYXRpb24gdGFibGUgcGVyIGNoaXAsIHBlciBwaHksIFJYICYjNDM7IFRYICovCiYjNDM7c3RydWN0IGNvbXBlbnNhdGlvbiB7CiYjNDM7CXM4IHpjYWxfdHg7CiYjNDM7CXM4IHpjYWxfcng7CiYjNDM7CXM4IHR4b3M7CiYjNDM7CXM4IGFtcDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGVuc2F0aW9uIGVuNzUxMjIxX2NvbXBbMl1bNF0gPSB7CiYjNDM7CXsKJiM0MzsJCS8qIExlZ2FjeSAqLwomIzQzOwkJeyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IC00LCAudHhvcyA9IDAsIC5hbXAgPSAxIH0sIC8qICA4ICovCiYjNDM7CQl7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gLTQsIC50eG9zID0gMSwgLmFtcCA9IDIgfSwgLyogIDkgKi8KJiM0MzsJCXsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSAtNCwgLnR4b3MgPSAxLCAuYW1wID0gMSB9LCAvKiAxMCAqLwomIzQzOwkJeyAuemNhbF90eCA9IC0yLCAuemNhbF9yeCA9IC04LCAudHhvcyA9IDEsIC5hbXAgPSAxIH0sIC8qIDExICovCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS8qIEVONzUyNkMgKi8KJiM0MzsJCXsgLnpjYWxfdHggPSAzLCAgLnpjYWxfcnggPSA2LCAudHhvcyA9IDEsIC5hbXAgPSAwIH0sIC8qICA5ICovCiYjNDM7CQl7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gNSwgLnR4b3MgPSAxLCAuYW1wID0gLTEgfSwgLyogMTAgKi8KJiM0MzsJCXsgLnpjYWxfdHggPSA2LCAgLnpjYWxfcnggPSA2LCAudHhvcyA9IDEsIC5hbXAgPSAtMSB9LCAvKiAxMSAqLwomIzQzOwkJeyB9LCAvKiBVbnVzZWQgKi8KJiM0MzsJfQomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHU4IHpjYWxfdG9fcjUwb2htWzY0XSA9IHsKJiM0MzsJMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI2LCAxMjMsIDEyMCwgMTE3LCAxMTQsIDExMiwgMTEwLCAxMDcsIDEwNSwgMTAzLAomIzQzOwkxMDEsICA5OSwgIDk3LCAgNzksICA3NywgIDc1LCAgNzQsICA3MiwgIDcwLCAgNjksICA2NywgIDY2LCAgNjUsICA0NywgIDQ2LCAgNDUsCiYjNDM7CSA0MywgIDQyLCAgNDEsICA0MCwgIDM5LCAgMzgsICAzNywgIDM2LCAgMzQsICAzNCwgIDMzLCAgMzIsICAxNSwgIDE0LCAgMTMsICAxMiwKJiM0MzsJIDExLCAgMTAsICAxMCwgICA5LCAgIDgsICAgNywgICA3LCAgIDYsICAgNSwgICA0LCAgIDQsICAgMywgICAyLCAgIDIsICAgMSwgICAxCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgewomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBjb21wZW5zYXRpb24gZ2V0X2N0YWIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJdTggcGh5X29mZnNldDsKJiM0MzsKJiM0MzsJcGh5X29mZnNldCA9IHBoeWRldi0mZ3Q7bWRpby5hZGRyIC0gc2hhcmVkLSZndDtwaHlkZXZfcDAtJmd0O21kaW8uYWRkcjsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShwaHlfb2Zmc2V0ICZndDs9IEFSUkFZX1NJWkUoZW43NTEyMjFfY29tcFswXSkpKQomIzQzOwkJcmV0dXJuIChzdHJ1Y3QgY29tcGVuc2F0aW9uKSB7fTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVuNzUxMjIxX2NvbXBbcGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkNdW3BoeV9vZmZzZXRdOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzZXRfY2FsaW5fZmxhZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXUxNiBzZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykgewomIzQzOwkJLyogRzdSMjQgaXMgc2hhcmVkIHNvIHBoeV9tb2RpZnlfcGFnZWQgaXMgcmVxdWlyZWQgKi8KJiM0MzsJCXNldCA9IGVuYWJsZWQgPyBFQ09ORVRfQ0FMSU5fRU43NTI2QyA6IDA7CiYjNDM7CQlwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwKJiM0MzsJCQkJIEVDT05FVF9DQUxJTl9FTjc1MjZDLCBzZXQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc2V0ID0gZW5hYmxlZCA/IEVDT05FVF9DQUxJTl9MRUdBQ1kgOiAwOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDQsIDIzLCBzZXQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBjYWxfY29tcGxldGVfY3R4IHsKJiM0MzsJdTE2IGNvbnNlY3V0aXZlX3RydWVzCTogMTU7CiYjNDM7CWJvb2wgc3RhcnRlZAkJOiAxOwomIzQzOwlib29sIG9ic2VydmVkX2ZhbHNlCTogMTsKJiM0MzsJdTE2IGFib3J0ZWRfdHJpZXMJOiA3OwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcG9sbF9jYWxfY29tcGxldGUgLSBwb2xsIGZvciBjYWxpYnJhdGlvbiBjb21wbGV0aW9uLgomIzQzOyAqCiYjNDM7ICogQmVjYXVzZSBzb21lIGxlZ2FjeSBjaGlwcyBhcmUga25vd24gdG8gYmUgdW5yZWxpYWJsZSAoZmFsc2UgcG9zaXRpdmVzKSwKJiM0MzsgKiByZWZlcmVuY2UgY29kZSBhZGRzIDEwLDAwMHVzIG9mIGZpeGVkIGRlbGF5IHBlciBjYWxpYnJhdGlvbiBjeWNsZS4KJiM0MzsgKiBQcmFjdGljYWxseSwgdGhlcmUgYXJlIGFib3V0IDEwLTUwIGNhbGlicmF0aW9uIGN5Y2xlcyBmb3IgZWFjaCBvZiB0aGUKJiM0MzsgKiB0aHJlZSB0dW5hYmxlcywgc28gYWRkaW5nIGEgc2lnbmlmaWNhbnQgZml4ZWQgZGVsYXkgaXMgY29zdGx5LgomIzQzOyAqCiYjNDM7ICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIHN0YXJ0cyB3aXRoIENBTElOIGRpc2FibGVkLCBwb2xscyBmb3IKJiM0MzsgKiBkb25lIHN0YXR1cyBmYWxzZSwgdGhlbiBlbmFibGVzIENBTElOIGFuZCBwb2xscyB1bnRpbCBhIHRydWUgZG9uZQomIzQzOyAqIHN0YXR1cyBpcyByZWNvcmRlZCBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgdGltZXMgY29uc2VjdXRpdmVseS4KJiM0MzsgKgomIzQzOyAqIEByZXR1cm5zOgomIzQzOyAqICAgJmx0OyAwIG9uIGVycm9yCiYjNDM7ICogICAwIG5vdCB5ZXQgY29tcGxldGUKJiM0MzsgKiAgIDEgY29tcGxldGUgZmFsc2UKJiM0MzsgKiAgIDIgY29tcGxldGUgdHJ1ZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcG9sbF9jYWxfY29tcGxldGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBjYWxfY29tcGxldGVfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCBkb25lX21hc2s7CiYjNDM7CWludCBvdXRfbWFzazsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7cGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7CiYjNDM7CQlyZXQgPSBwaHlfcmVhZF9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQpOwomIzQzOwkJZG9uZV9tYXNrID0gRUNPTkVUX0NBTF9ET05FX0VONzUyNkM7CiYjNDM7CQlvdXRfbWFzayA9IEVDT05FVF9DQUxfT1VUX0VONzUyNkM7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBwaHlfcmVhZF9wYWdlZChzaGFyZWQtJmd0O3BoeWRldl9wMCwgRUNPTkVUX1BHX0w0LCAyMyk7CiYjNDM7CQlkb25lX21hc2sgPSBFQ09ORVRfQ0FMX0RPTkVfTEVHQUNZOwomIzQzOwkJb3V0X21hc2sgPSBFQ09ORVRfQ0FMX09VVF9MRUdBQ1k7CiYjNDM7CX0KJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoKHJldCAmYW1wOyBkb25lX21hc2spID09IDApIHsKJiM0MzsJCWN0eC0mZ3Q7b2JzZXJ2ZWRfZmFsc2UgPSB0cnVlOwomIzQzOwkJY3R4LSZndDthYm9ydGVkX3RyaWVzICYjNDM7PSAoY3R4LSZndDtjb25zZWN1dGl2ZV90cnVlcyAmZ3Q7IDApOwomIzQzOwkJY3R4LSZndDtjb25zZWN1dGl2ZV90cnVlcyA9IDA7CiYjNDM7CiYjNDM7CQlpZiAoIWN0eC0mZ3Q7c3RhcnRlZCkgewomIzQzOwkJCXNldF9jYWxpbl9mbGFnKHBoeWRldiwgdHJ1ZSk7CiYjNDM7CQkJY3R4LSZndDtzdGFydGVkID0gdHJ1ZTsKJiM0MzsJCQlyZXR1cm4gcG9sbF9jYWxfY29tcGxldGUocGh5ZGV2LCBjdHgpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3R4LSZndDtjb25zZWN1dGl2ZV90cnVlcyYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmIChjdHgtJmd0O2NvbnNlY3V0aXZlX3RydWVzICZsdDsgRUNPTkVUX0NBTF9NSU5fQ1lDTEVTIHx8ICFjdHgtJmd0O29ic2VydmVkX2ZhbHNlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChjdHgtJmd0O2Fib3J0ZWRfdHJpZXMpCiYjNDM7CQlwaHlkZXZfd2FybihwaHlkZXYsICYjMzQ7Q2FsaWJyYXRpb24gY3ljbGUgJWQgZmFsc2UgcG9zaXRpdmVzXG4mIzM0OywKJiM0MzsJCQkgICAgY3R4LSZndDthYm9ydGVkX3RyaWVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuICgocmV0ICZhbXA7IG91dF9tYXNrKSAhPSAwKSA/IDIgOiAxOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwb2xsX2NhbF9jb21wbGV0ZSAtIGNoZWNrIGZvciBjYWxpYnJhdGlvbiByZWdpc3RlcgomIzQzOyAqIEByZXR1cm5zOiAtZXJyb3Igb3IgMSBpZiBjYWxpYnJhdGlvbiByZXN1bHQgaXMgdHJ1ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X2NhbF9jeWNsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGNhbF9jb21wbGV0ZV9jdHggY2N0eCA9IHt9OwomIzQzOwlpbnQgb3V0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlzZXRfY2FsaW5fZmxhZyhwaHlkZXYsIGZhbHNlKTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQocG9sbF9jYWxfY29tcGxldGUsIG91dCwgb3V0ICE9IDAsCiYjNDM7CQkJCUVDT05FVF9DQUxfQ1lDTEVfVVMsIEVDT05FVF9DQUxfVElNRU9VVF9VUywKJiM0MzsJCQkJZmFsc2UsIHBoeWRldiwgJmFtcDtjY3R4KTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0NhbGlicmF0aW9uIHRpbWVvdXQgJWQgKCVkIC8gJWQgLyAlZCAvICVkKVxuJiMzNDssCiYjNDM7CQkJICAgcmV0LCBjY3R4LmNvbnNlY3V0aXZlX3RydWVzLCBjY3R4Lm9ic2VydmVkX2ZhbHNlLAomIzQzOwkJCSAgIGNjdHguYWJvcnRlZF90cmllcywgY2N0eC5zdGFydGVkKTsKJiM0MzsJfSBlbHNlIGlmIChvdXQgJmx0OyAwKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtDYWxpYnJhdGlvbiBlcnJvciAlZFxuJiMzNDssIG91dCk7CiYjNDM7CQlyZXQgPSBvdXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBvdXQgJmd0OyAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNldF9jYWxpbl9mbGFnKHBoeWRldiwgZmFsc2UpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3I1MChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlzdHJ1Y3QgY29tcGVuc2F0aW9uIGN0YWIgPSBnZXRfY3RhYihwaHlkZXYpOwomIzQzOwlpbnQgemNhbF9zeiA9IEFSUkFZX1NJWkUoemNhbF90b19yNTBvaG0pOwomIzQzOwl1OCByZ196Y2FsX2N0cmwgPSBFQ09ORVRfUjUwX1pDQUxfREVGQVVMVDsKJiM0MzsJaW50IGluaXRpYWxfY29tcF9vdXQ7CiYjNDM7CWludCBwb2xhcml0eSA9IDA7CiYjNDM7CWludCBjb21wX291dDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CXUxNiByeGNhbDsKJiM0MzsJdTE2IHR4Y2FsOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpCiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfUjUwKTsKJiM0MzsJZWxzZQomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweGMwMDApOwomIzQzOwomIzQzOwlwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgxMDAwLCAweDEwMDApOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpCiYjNDM7CQkJcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsCiYjNDM7CQkJCQkgRUNPTkVUX1I1MF9aQ0FMX01BU0ssCiYjNDM7CQkJCQkgRklFTERfUFJFUChFQ09ORVRfUjUwX1pDQUxfTUFTSywKJiM0MzsJCQkJCQkgICAgcmdfemNhbF9jdHJsKSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI2LAomIzQzOwkJCQkJcmdfemNhbF9jdHJsKTsKJiM0MzsKJiM0MzsJCWNvbXBfb3V0ID0gZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHBoeWRldik7CiYjNDM7CQlpZiAoY29tcF9vdXQgJmx0OyAwKSB7CiYjNDM7CQkJcmV0ID0gY29tcF9vdXQ7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocG9sYXJpdHkgPT0gMCkgewomIzQzOwkJCS8qIEZpcnN0IGN5Y2xlICovCiYjNDM7CQkJaW5pdGlhbF9jb21wX291dCA9IGNvbXBfb3V0OwomIzQzOwkJCXBvbGFyaXR5ID0gY29tcF9vdXQgPyAtMSA6IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHsKJiM0MzsJCQkvKiBGb3VuZCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmdfemNhbF9jdHJsICYjNDM7PSBwb2xhcml0eTsKJiM0MzsKJiM0MzsJCWlmIChyZ196Y2FsX2N0cmwgJmd0OyBFQ09ORVRfUjUwX1pDQUxfTUFYKSB7CiYjNDM7CQkJcmV0ID0gMTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyeGNhbCA9IG1heCgwLCBtaW4oemNhbF9zeiAtIDEsIGN0YWIuemNhbF9yeCAmIzQzOyByZ196Y2FsX2N0cmwpKTsKJiM0MzsJdHhjYWwgPSBtYXgoMCwgbWluKHpjYWxfc3ogLSAxLCBjdGFiLnpjYWxfdHggJiM0MzsgcmdfemNhbF9jdHJsKSk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMjIsCiYjNDM7CQkJRklFTERfUFJFUChFQ09ORVRfUjUwX1RYQ0FMX01BU0ssIHR4Y2FsKSB8CiYjNDM7CQkJRklFTERfUFJFUChFQ09ORVRfUjUwX1JYQ0FMX01BU0ssIHJ4Y2FsKSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwkvKiBaZXJvIG91dCByZWdpc3RlcnMgKi8KJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7cGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKQomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgMHgwMDAwKTsKJiM0MzsJZWxzZQomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweGMwMDApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3R4X29mZnNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlzdHJ1Y3QgY29tcGVuc2F0aW9uIGN0YWIgPSBnZXRfY3RhYihwaHlkZXYpOwomIzQzOwlpbnQgaW5pdGlhbF9jb21wX291dDsKJiM0MzsJaW50IHBvbGFyaXR5ID0gMDsKJiM0MzsJaW50IG9mZnNldCA9IEVDT05FVF9UWE9TX0RFRkFVTFQ7CiYjNDM7CXUxNiBvZmZzZXRfYmluOwomIzQzOwlpbnQgY29tcF9vdXQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDAsIDB4MjEwMCk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTIwMCk7IC8qIGZpeCBNREkgKi8KJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7cGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfVFhPUyk7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDA0MDApOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweDQ4MDApOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHg0YzAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyMSwgMHgwODAwLCAweDA4MDApOwomIzQzOwomIzQzOwlwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgwMmMwLCAweDAyYzApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDApOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlvZmZzZXRfYmluID0gRklFTERfUFJFUChFQ09ORVRfVFhPU19NQUcsIGFicyhvZmZzZXQpKTsKJiM0MzsJCWlmIChvZmZzZXQgJmx0OyAwKQomIzQzOwkJCW9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjsKJiM0MzsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMTcsIG9mZnNldF9iaW4pOwomIzQzOwomIzQzOwkJY29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTsKJiM0MzsJCWlmIChjb21wX291dCAmbHQ7IDApIHsKJiM0MzsJCQlyZXQgPSBjb21wX291dDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChwb2xhcml0eSA9PSAwKSB7CiYjNDM7CQkJLyogRmlyc3QgY3ljbGUgKi8KJiM0MzsJCQlpbml0aWFsX2NvbXBfb3V0ID0gY29tcF9vdXQ7CiYjNDM7CQkJcG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTsKJiM0MzsJCX0gZWxzZSBpZiAoaW5pdGlhbF9jb21wX291dCAhPSBjb21wX291dCkgewomIzQzOwkJCS8qIEZvdW5kICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlvZmZzZXQgJiM0Mzs9IHBvbGFyaXR5OwomIzQzOwomIzQzOwkJaWYgKG9mZnNldCAmZ3Q7IEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgJmx0OyBFQ09ORVRfVFhPU19NSU4pIHsKJiM0MzsJCQlyZXQgPSAxOwomIzQzOwkJCW9mZnNldCA9IDA7CiYjNDM7CQkJZ290byBzZXRfdmFsOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW9mZnNldCAmIzQzOz0gY3RhYi50eG9zICogcG9sYXJpdHk7CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmd0OyBFQ09ORVRfVFhPU19NQVggfHwgb2Zmc2V0ICZsdDsgRUNPTkVUX1RYT1NfTUlOKQomIzQzOwkJb2Zmc2V0IC09IGN0YWIudHhvcyAqIHBvbGFyaXR5OwomIzQzOwomIzQzO3NldF92YWw6CiYjNDM7CW9mZnNldF9iaW4gPSBGSUVMRF9QUkVQKEVDT05FVF9UWE9TX01BRywgYWJzKG9mZnNldCkpOwomIzQzOwlpZiAob2Zmc2V0ICZsdDsgMCkKJiM0MzsJCW9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAxNywgb2Zmc2V0X2Jpbik7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpCiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApOwomIzQzOwllbHNlCiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfdHhfYW1wKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7CiYjNDM7CWludCBpbml0aWFsX2NvbXBfb3V0OwomIzQzOwl1OCB0eF9hbXAgPSBFQ09ORVRfVFhBTVBfREVGQVVMVDsKJiM0MzsJaW50IHBvbGFyaXR5ID0gMDsKJiM0MzsJaW50IGNvbXBfb3V0OwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCAweDUyMDMpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzIsIDI1LCAweDEwYzApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDAgfCBFQ09ORVRfREFDX0lOXzJWKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyMSwgMHgwODAwKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgwMmMwKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7cGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfVFhBTVApOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwNjAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChzaGFyZWQtJmd0O3BoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwKTsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4Y2EwMCB8IDB4MDQwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTsKJiM0MzsKJiM0MzsJCWNvbXBfb3V0ID0gZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHBoeWRldik7CiYjNDM7CQlpZiAoY29tcF9vdXQgJmx0OyAwKSB7CiYjNDM7CQkJcmV0ID0gY29tcF9vdXQ7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocG9sYXJpdHkgPT0gMCkgewomIzQzOwkJCS8qIEZpcnN0IGN5Y2xlICovCiYjNDM7CQkJaW5pdGlhbF9jb21wX291dCA9IGNvbXBfb3V0OwomIzQzOwkJCXBvbGFyaXR5ID0gY29tcF9vdXQgPyAtMSA6IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHsKJiM0MzsJCQkvKiBGb3VuZCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdHhfYW1wICYjNDM7PSBwb2xhcml0eTsKJiM0MzsKJiM0MzsJCWlmICh0eF9hbXAgJmd0OyBFQ09ORVRfVFhBTVBfTUFYKSB7CiYjNDM7CQkJcmV0ID0gMTsKJiM0MzsJCQl0eF9hbXAgPSBFQ09ORVRfVFhBTVBfREVGQVVMVDsKJiM0MzsJCQlnb3RvIHNldF92YWw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHR4X2FtcCAmIzQzOyBjdGFiLmFtcCAmbHQ7IEVDT05FVF9UWEFNUF9NQVgpCiYjNDM7CQl0eF9hbXAgJiM0Mzs9IGN0YWIuYW1wOwomIzQzOwomIzQzO3NldF92YWw6CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjMsIHR4X2FtcCk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIDB4MDAwMCk7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAwMDApOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJdTE2IGwwcjI2X3RlbXA7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIXNoYXJlZC0mZ3Q7cGh5ZGV2X3AwKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtQb3J0IHplcm8gbXVzdCBiZSBjb25maWd1cmVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5hZGRyICZsdDsgc2hhcmVkLSZndDtwaHlkZXZfcDAtJmd0O21kaW8uYWRkcikKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyogR2xvYmFsIHJlZ2lzdGVycyAqLwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzQsIDI2LCAweDgwNDQpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDIxLCAweDAwZWEpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDI3LCAweDAyZjApOwomIzQzOwomIzQzOwkvKiBMb2NhbCByZWdpc3RlcnMgKi8KJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHhhMDAwKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wxLCAyMiwgMHhmMDAwKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMiwgMHg0NDQ0KTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyNCwgMHgwYzBjKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyOCwgMHg3YzQ0KTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAzMCwgMHgwMDA1KTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAxNywgMHgwMDAwKTsKJiM0MzsKJiM0MzsJLyogRm9yIEUxL0UyLCBFMyByZXF1aXJlcyAweDIyMjAsIGJ1dCBubyBrbm93biBFTjc1MTIyMSBFMyBjaGlwcyBleGlzdCAqLwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDIyMDApOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHsKJiM0MzsJCSAvKiAxMDBNYiB0eCBwMnpfbWlkLCB6Mm5fbWlkLCB6Mm5fb3ZzX3Bvc3QsIG4yel9taWQgKi8KJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjIsIDB4MDAzMCk7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDI1LCAweDAyNDgpOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNywgMHgwMmYwKTsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjgsIDB4MDIzMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlsMHIyNl90ZW1wID0gcmV0OwomIzQzOwomIzQzOwkvKiBCRyB2b2x0YWdlICovCiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7CiYjNDM7CiYjNDM7CS8qIE1ESSAqLwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCAweDU2MDMpOwomIzQzOwomIzQzOwkvKiBkaXNhYmxlIHR4IHNsZXcgY29udHJvbCAqLwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDQsIDIxLCAweDAwMDApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDAsIDB4MjEwMCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyA1OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gZW43NTEyMjFfZmVwaHlfcjUwKHBoeWRldik7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBlbjc1MTIyMV9mZXBoeV90eF9vZmZzZXQocGh5ZGV2KTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgNTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJldCA9IGVuNzUxMjIxX2ZlcGh5X3R4X2FtcChwaHlkZXYpOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIGwwcjI2X3RlbXApOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDAwMDApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIyLCAweDQ0NDQpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDAsIDB4MzEwMCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcG9ydDAgPSBFQ09ORVRfRU43NTI2Q19QT1JUMF9BRERSOwomIzQzOwlzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZDsKJiM0MzsJc3RydWN0IG10a19zb2NwaHlfcHJpdiAqcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7cGh5X2lkICE9IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKQomIzQzOwkJcG9ydDAgPSBFQ09ORVRfTEVHQUNZX1BPUlQwX0FERFI7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fcGh5X3BhY2thZ2Vfam9pbigmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYsIHBoeWRldiwgcG9ydDAsCiYjNDM7CQkJCSAgICBzaXplb2Yoc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDttZGlvLmFkZHIgPT0gcG9ydDApCiYjNDM7CQlzaGFyZWQtJmd0O3BoeWRldl9wMCA9IHBoeWRldjsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBlbjc1MTIyMV9mZXBoeV9kcml2ZXJbXSA9IHsKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSwKJiM0MzsJCS5uYW1lCQk9ICYjMzQ7RWNvTmV0IEVONzUxMjIxIEZFUEhZJiMzNDssCiYjNDM7CQkuY29uZmlnX2luaXQJPSBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdCwKJiM0MzsJCS5jb25maWdfaW50cgk9IGdlbnBoeV9ub19jb25maWdfaW50ciwKJiM0MzsJCS5oYW5kbGVfaW50ZXJydXB0ID0gZ2VucGh5X2hhbmRsZV9pbnRlcnJ1cHRfbm9fYWNrLAomIzQzOwkJLnByb2JlCQk9IGVuNzUxMjIxX2ZlcGh5X3Byb2JlLAomIzQzOwkJLnJlYWRfcGFnZQk9IG10a19waHlfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJPSBtdGtfcGh5X3dyaXRlX3BhZ2UsCiYjNDM7CX0KJiM0Mzt9OwomIzQzOwomIzQzO21vZHVsZV9waHlfZHJpdmVyKGVuNzUxMjIxX2ZlcGh5X2RyaXZlcik7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBlbjc1MTIyMV9mZXBoeV90YmxbXSA9IHsKJiM0MzsJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7RWNvTmV0IFNvQyAxMC8xMDAgRXRoZXJuZXQgUEhZIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Q2FsZWIgSmFtZXMgRGVMaXNsZSAmbHQ7Y2pkQGNqZG5zLmZyJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKJiM0MzsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGVuNzUxMjIxX2ZlcGh5X3RibCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBNZWRpYXRlayBFY29OZXQgUEhZIERyaXZlciBpbiBzeXprYWxsZXIqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCB0aGlzIG5ldyBQSFkgZHJpdmVyLCBgZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY2AsIGVuYWJsZWQgYnkgYEVDT05FVF9GRV9TT0NfUEhZYC4gSXQmIzM5O3MgZm9yIGFuIEVjb05ldCAxMC8xMDAgU29DIEV0aGVybmV0IFBIWS4gVGhlIHF1ZXN0aW9uIGlzLCBob3cgZG8gd2UgdHJpZ2dlciBpdCB3aXRoaW4gc3l6a2FsbGVyIGZvciBmdXp6aW5nPwoKTm9ybWFsbHksIFBIWSBkcml2ZXJzIGNvbWUgdG8gbGlmZSB3aGVuIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50LCBvciwgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LCB0aHJvdWdoIE1ESU8gYnVzIGVtdWxhdGlvbi4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBkZWRpY2F0ZWQgTURJTyBlbXVsYXRvciwgd2hpY2ggaXMgYSBwcm9ibGVtLiBJdCBjYW4gdHJpZ2dlciBQSFkgY29kZSwgYnV0IG9ubHkgaWYgdGhlIFBIWSBoYXMgYmVlbiBpbnN0YW50aWF0ZWQuIENhbiB3ZSBldmVuICppbnN0YW50aWF0ZSogdGhpcyBzcGVjaWZpYyBQSFkgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50PwoKVHlwaWNhbGx5LCBQSFkgZHJpdmVycyBnZXQgcHJvYmVkIGVpdGhlciB3aGVuIGEgbmV0d29yayBkcml2ZXIgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCBzY2Fucywgb3IgdGhyb3VnaCBhIGRldmljZSB0cmVlLiBCdXQsIGB2aGNpYCwgYG5ldGRldnNpbWAsIGFuZCBgZHVtbXlgIGluIHN5emthbGxlciBkb24mIzM5O3QgcmVnaXN0ZXIgYXJiaXRyYXJ5IFBIWXMgb24gYW4gTURJTyBidXMuIE5laXRoZXIgZG8gYG1hY3NlY2AsIGB2ZXRoYCwgb3IgYHR1bmAuCgpJcyB0aGVyZSBhIHVzZXItc3BhY2Ugd2F5IHRvICpmb3JjZSogYSBQSFkgcHJvYmU/IE1heWJlIGBTSU9DU01JSVJFR2A/IE5vcGUsIHRoYXQgbmVlZHMgYW4gZXhpc3RpbmcgUEhZLiBDYW4gd2UgcmVnaXN0ZXIgYSBQSFkgZGV2aWNlIHZpYSBzeXNmcyBvciBzb21lIG90aGVyIG1lY2hhbmlzbT8gTGlrZWx5IG5vdC4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IHJlYWxseSBoYXZlIGEgd2F5IHRvIG1ha2UgUEhZIGRyaXZlcnMgYXBwZWFyIHVubGVzcyBhIHZpcnR1YWwgTURJTyBidXMgZXhpc3RzLiBUaGVyZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYSBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgIGVxdWl2YWxlbnQgdG8gaGVscC4gYGRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY2AgaXMgYWxzbyBub3QgdXNlZnVsIGhlcmUuCgpJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHNjb3VyIHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBhbnkgbWVudGlvbiBvZiBgcGh5X2RldmljZV9yZWdpc3RlcmAgb3Igc2ltaWxhciwgYnV0IEkgY2FuJiMzOTt0IHVzZSBzeXotZ3JlcHBlciwgd2hpY2ggbWFrZXMgdGhpcyBkaWZmaWN1bHQuCgpBbmQgdGhlbiwgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgZnV6emluZyBQSFkgZHJpdmVycyBsaWtlIHRoaXMgaXMgZXZlbiBjb25zaWRlcmVkIGEgcHJpb3JpdHkuIFVzdWFsbHksIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgbGlrZSB0aGlzLCB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGRvbiYjMzk7dCBwbGF5IG5pY2VseSBpbiBRRU1VLCBhcmUgYmFzaWNhbGx5IHVucmVhY2hhYmxlLiBUaGUgZGVwZW5kZW5jaWVzIGFyZSB0cmlja3kgdG9vLiBUaGlzIGBFQ09ORVRfRkVfU09DX1BIWWAgZGVwZW5kcyBvbiBgRUNPTkVUIHx8IENPTVBJTEVfVEVTVGAuIGBFQ09ORVRgIGlzbiYjMzk7dCBhIHN0YW5kYXJkIHZpcnR1YWwgZGV2aWNlIQoKU28sIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBsb29rIGZvciBzb21lIHZpcnR1YWwgTURJTyBidXMgZHJpdmVyIHdpdGhpbiB0aGUga2VybmVsIHRoYXQgSSBjb3VsZCBjb250cm9sIGZyb20gdXNlcnNwYWNlLiBUaGF0IGNvdWxkIGJlIGEgd2F5IGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby4qbW9ja3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU4MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIFVzZXJzcGFjZSBQSFkgRGV2aWNlIEluc3RhbnRpYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSBhY3R1YWxseSBpbnN0YW50aWF0ZSBhIFBoeXNpY2FsIExheWVyIChQSFkpIGRldmljZSBmcm9tIHVzZXJzcGFjZT8mIzM0OyBXZSBrbm93IHRoZSB0cmFkaXRpb25hbCBtb2RlbCB1c3VhbGx5IGludm9sdmVzIHRoZSBrZXJuZWwgaGFuZGxpbmcgdGhpcy4gQnV0LCBJJiMzOTttIGN1cmlvdXMuIEFyZSB0aGVyZSBhbnkgY2xldmVyLCB1bmNvbnZlbnRpb25hbCB3YXlzIHRvIGJ5cGFzcyB0aGF0PyBBcmUgdGhlcmUgZXhwb3NlZCBpbnRlcmZhY2VzLCBwZXJoYXBzIHRocm91Z2ggYSBzcGVjaWZpYyBkcml2ZXIgbW9kZWwgb3IgYSB2ZW5kb3Itc3BlY2lmaWMgQVBJLCB0aGF0IG1pZ2h0IGFsbG93IHVzIGRpcmVjdCBvciBpbmRpcmVjdCBjb250cm9sIG92ZXIgUEhZIGluc3RhbnRpYXRpb24gZnJvbSB1c2Vyc3BhY2U/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQga2luZCBvZiBjb250cm9sIHdvdWxkIHdlIGhhdmU/IFdvdWxkIGl0IGJlIGxpbWl0ZWQgdG8gc3BlY2lmaWMgUEhZcyBvciBwcm90b2NvbHM/IENvdWxkIHdlIGNvbXBsZXRlbHkgYWJzdHJhY3QgdGhlIFBIWSBmcm9tIHRoZSBrZXJuZWw/IFdoYXQgYWJvdXQgc2VjdXJpdHkgaW1wbGljYXRpb25zPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2UmIzM5O2QgbmVlZCB0byBjb25zaWRlcj8gSXMgdGhlcmUgYSBuZWVkIGZvciBhIHVzZXJzcGFjZSBQSFkgZGV2aWNlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9kZXZpY2VfY3JlYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYz0xMTc9aW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMzQtXHRlbHNlXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTM1Olx0XHRwaHkgPSBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCwgMCwgTlVMTCk7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM2LVx0aWYgKElTX0VSUihwaHkpKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU4NS1cdFx0LyogUmVhbCBQSFkgSUQgb2YgUG9ydCAxIGlzIDAgKi9cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjU4NjpcdFx0cGh5ID0gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBQSFlfSURfVEpBMTEwMiwgZmFsc2UsIE5VTEwpO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTg3LVx0XHRpZiAoSVNfRVJSKHBoeSkpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTItXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1OTM6XHRcdC8qIE92ZXJ3cml0ZSBwYXJlbnQgZGV2aWNlLiBwaHlfZGV2aWNlX2NyZWF0ZSgpIHNldCBwYXJlbnQgdG9cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU5NC1cdFx0ICogdGhlIG1paV9idXMtXHUwMDNlZGV2LCB3aGljaCBpcyBub3QgY29ycmVjdCBpbiBjYXNlLlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NzI4PXN0YXRpYyBpbnQgcGh5X3JlcXVlc3RfZHJpdmVyX21vZHVsZShzdHJ1Y3QgcGh5X2RldmljZSAqZGV2LCB1MzIgcGh5X2lkKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNzQ3LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo3NDg6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDktXHRcdFx0XHQgICAgIGJvb2wgaXNfYzQ1LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtODM5LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6ODQwOkVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9jcmVhdGUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy04NDEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMDcxPXN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDk2LVx0XHRpZiAoIXIpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEwOTc6XHRcdFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDk4LVx0XHRcdFx0XHRcdCB0cnVlLCBcdTAwMjZjNDVfaWRzKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDE6XHRyZXR1cm4gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBwaHlfaWQsIGlzX2M0NSwgXHUwMDI2YzQ1X2lkcyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDItfVxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjE0OT1pbnQgcGh5X21vZGlmeV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSwgdTMyIHJlZ251bSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIxNTEtXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIxNTI6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTUzLVx0XHRcdFx0ICAgICBib29sIGlzX2M0NSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDcmVhdGluZyBhIFZpcnR1YWwgUEhZIERldmljZSBmcm9tIFVzZXJzcGFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGNvbmp1cmUgdXAgYSBQSFkgZGV2aWNlIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlLiBUeXBpY2FsbHksIHRoZSBNRElPIGJ1cyBkcml2ZXIgaGFuZGxlcyBQSFkgZGV2aWNlIGNyZWF0aW9uIGR1cmluZyBpdHMgYnVzIHNjYW5zLiBJIHdvbmRlciwgaXMgdGhlcmUgYSB2aXJ0dWFsIE1ESU8gYnVzIEkgY291bGQgbGV2ZXJhZ2UgZm9yIHRoaXMgcHVycG9zZT8gTGV0JiMzOTtzIGRpdmUgaW50byBzb21lIGNvZGUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKRmlyc3QgdXAsIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jYC4gTm9wZSwgdGhhdCBkb2VzbiYjMzk7dCBzZWVtIHRvIG9mZmVyIGEgd2F5LiBIb3cgYWJvdXQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1tb2NrdXAuY2Agb3IgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1kdW1teS5jYD8gU3RpbGwgbm8gbHVjay4gT2theSwgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYCBkcml2ZXIuIEl0IGRvZXMgY3JlYXRlIGEgZml4ZWQgUEhZLCBidXQgaXQgZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGUgZHluYW1pYyBkaXNjb3Zlcnkgb2YgYXJiaXRyYXJ5IFBIWSBJRHMsIHdoaWNoIGlzIHdoYXQgSSBuZWVkLiBXaGF0IGFib3V0IGBkcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmNgLCBgZHJpdmVycy9uZXQvcGh5L21kaW8tYml0YmFuZy5jYCwgb3IgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW11eC5jYD8gVGhvc2UgZG9uJiMzOTt0IGxvb2sgcHJvbWlzaW5nIGVpdGhlci4KClNvLCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIEkgc29tZWhvdyB0cmlnZ2VyIGBwaHlfZGV2aWNlX2NyZWF0ZWAgd2l0aCBhIGN1c3RvbSBgcGh5X2lkYCBmcm9tIHVzZXJzcGFjZT8gTXkgaW50dWl0aW9uIHBvaW50cyBtZSB0b3dhcmRzIHNvbWV0aGluZyBsaWtlIG5ldGxpbmsuIE1heWJlIEkgY2FuIGZpbmQgYSBob29rIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2Agb3IgcGVyaGFwcyB3aXRoaW4gdGhlIGBuZXQvZXRodG9vbC9gIGRpcmVjdG9yeSB0aGF0IHdvdWxkIGFsbG93IG1lIHRvIGdldCB0aGlzIGRvbmU/IFRpbWUgdG8gc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZGV2aWNlX2NyZWF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9MTE3PWludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM0LVx0ZWxzZVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjEzNTpcdFx0cGh5ID0gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBwaHlfaWQsIDAsIE5VTEwpO1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEzNi1cdGlmIChJU19FUlIocGh5KSkge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTU1MT1zdGF0aWMgdm9pZCB0amExMTAyX3AxX3JlZ2lzdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01ODUtXHRcdC8qIFJlYWwgUEhZIElEIG9mIFBvcnQgMSBpcyAwICovXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1ODY6XHRcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgUEhZX0lEX1RKQTExMDIsIGZhbHNlLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU4Ny1cdFx0aWYgKElTX0VSUihwaHkpKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTkyLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTkzOlx0XHQvKiBPdmVyd3JpdGUgcGFyZW50IGRldmljZS4gcGh5X2RldmljZV9jcmVhdGUoKSBzZXQgcGFyZW50IHRvXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTQtXHRcdCAqIHRoZSBtaWlfYnVzLVx1MDAzZWRldiwgd2hpY2ggaXMgbm90IGNvcnJlY3QgaW4gY2FzZS5cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTcyOD1zdGF0aWMgaW50IHBoeV9yZXF1ZXN0X2RyaXZlcl9tb2R1bGUoc3RydWN0IHBoeV9kZXZpY2UgKmRldiwgdTMyIHBoeV9pZClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTc0Ny1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NzQ4OnN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyIHBoeV9pZCxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNzQ5LVx0XHRcdFx0ICAgICBib29sIGlzX2M0NSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTgzOS19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjg0MDpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfY3JlYXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtODQxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTA3MT1zdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5Ni1cdFx0aWYgKCFyKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMDk3Olx0XHRcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5OC1cdFx0XHRcdFx0XHQgdHJ1ZSwgXHUwMDI2YzQ1X2lkcyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTAwLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTAxOlx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCBpc19jNDUsIFx1MDAyNmM0NV9pZHMpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTAyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIxNDk9aW50IHBoeV9tb2RpZnlfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UsIHUzMiByZWdudW0sXG4tLVxuaW5jbHVkZS9saW51eC9waHkuaC0yMTUxLVxuaW5jbHVkZS9saW51eC9waHkuaDoyMTUyOnN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyIHBoeV9pZCxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjE1My1cdFx0XHRcdCAgICAgYm9vbCBpc19jNDUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gdHJpZ2dlciBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5YC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBjYWxsZWQgZHVyaW5nIGRldmljZSB0cmVlIG9yIEFDUEkgcGFyc2luZy4gVGhlIG9idmlvdXMgcXVlc3Rpb24gaXM6IGNhbiBJIGluamVjdCBhIGRldmljZSB0cmVlIG92ZXJsYXkgZnJvbSB1c2Vyc3BhY2U/IEhtbSwgcHJvYmFibHkgbm90IGRpcmVjdGx5LiBTeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGhhbmRsZSBhcmJpdHJhcnkgRFQgb3ZlcmxheXMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgcHNldWRvLXN5c2NhbGwgZm9yIHRoYXQsIGFuZCBJIGRvbiYjMzk7dCByZWNhbGwgb25lIGZvciB0aGlzIHB1cnBvc2UuCgpBbHJpZ2h0LCBwaXZvdC4gV2hhdCBhYm91dCBgZ2V0X3BoeV9kZXZpY2VgPyBUaGF0IGdldHMgY2FsbGVkIGJ5IGBtZGlvYnVzX3NjYW5gLiBBbmQgYG1kaW9idXNfc2NhbmAgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgX19tZGlvYnVzX3JlZ2lzdGVyYCB3aGVuIHRoZSBNRElPIGJ1cyBpcyBiZWluZyBzY2FubmVkLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogaXMgdGhlcmUgYW4gTURJTyBidXMgdGhhdCBjb3VsZCBiZSAqcmVnaXN0ZXJlZCogZnJvbSB1c2Vyc3BhY2U/IExldCYjMzk7cyBydWxlIG91dCB0aGUgb2J2aW91czogYGRyaXZlcnMvbmV0L2R1bW15LmNg4oCUbm9wZSwgbm8gTURJTyBidXMgdGhlcmUuIFNhbWUgd2l0aCBgZHJpdmVycy9uZXQvbWFjc2VjLmNgIGFuZCBgZHJpdmVycy9uZXQvdHVuLmNg4oCUdGhvc2UgYXJlIGRlYWQgZW5kcy4KCk5vdywgbGV0JiMzOTtzIGV4cGxvcmUgYGRyaXZlcnMvbmV0L3VzYi9gLiBBaGEsIHNvbWUgVVNCIG5ldHdvcmsgYWRhcHRlcnMgKmRvKiBoYXZlIE1ESU8gYnVzZXMhIFRoaXMgaXMgcHJvbWlzaW5nLiBUaGUgcXVlc3Rpb24gaXMgaWYgc3l6a2FsbGVyIGlzIHVzaW5nIGB2aGNpYCB0byBlbXVsYXRlIFVTQiBuZXR3b3JrIGFkYXB0ZXJzPyBJZiBzbywgdGhlbiBpdCAqY291bGQqIHRoZW9yZXRpY2FsbHkgZW11bGF0ZSB0aGUgTURJTyBidXMgYXMgd2VsbCEgU28sIEkgbmVlZCB0byBjaGVjayB3aGljaCBVU0IgbmV0d29yayBhZGFwdGVyIGRyaXZlcnMgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kLCBjcml0aWNhbGx5LCBhbGxvdyB0aGUgYnVzIHRvIGJlIHNjYW5uZWQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyBkcml2ZXJzIGxpa2UgYGRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jYCBhbmQgYGRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmNgIHRvIHNlZSBpZiB0aGV5IGZpdCB0aGUgYmlsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTEzOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0PTM0OD1NRElPXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0LTM1MC0gIGRldm1fbWRpb2J1c19hbGxvY19zaXplKClcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTE6ICBkZXZtX21kaW9idXNfcmVnaXN0ZXIoKVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0OjM1MjogIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcigpXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3QtMzUzLVxuLS1cbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0PTEyPWRldmljZSAodGhlIHNhbWUgb2JqZWN0cyB0aGF0IGFyZSByZWdpc3RlcmVkIHZpYVxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9tb3RvcmNvbW0teXQ4eHh4LXBoeS5yc3Q6MTM6YGBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoKWBgKS4gTUFDLXNpZGUgY29ubmVjdGlvbiBwcm9wZXJ0aWVzIHN1Y2ggYXNcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0LTE0LWBgcGh5LWhhbmRsZWBgIGFuZCBgYHBoeS1tb2RlYGAgYXJlIGRvY3VtZW50ZWQgaW4gW2FjcGktbWRpby1waHldXy5cbi0tXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3Q9Nz1UaGUgUEhZcyBvbiBhbiBNRElPIGJ1cyBbcGh5XSBhcmUgcHJvYmVkIGFuZCByZWdpc3RlcmVkIHVzaW5nXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3Q6ODpmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoKS5cbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvcGh5LnJzdC05LVxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0PTQwPXJlZ2lzdGVyZWQgYXMgYSBkaXN0aW5jdCBkZXZpY2UuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNTYtICAgZHJpdmVyIG5lZWRzLCBzZXR1cCB0aGUgbWlpX2J1cyBzdHJ1Y3R1cmUsIGFuZCByZWdpc3RlciB3aXRoIHRoZSBQQUwgdXNpbmdcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0OjU3OiAgIG1kaW9idXNfcmVnaXN0ZXIuICBTaW1pbGFybHksIHRoZXJlJiMzOTtzIGEgcmVtb3ZlIGZ1bmN0aW9uIHRvIHVuZG8gYWxsIG9mXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC01OC0gICB0aGF0ICh1c2UgbWRpb2J1c191bnJlZ2lzdGVyKS5cbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jPTEwOT1zdGF0aWMgaW50IGVwODI0OGVfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jLTEzMi1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmM6MTMzOlx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMtMTM0LVx0aWYgKHJldClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYz0yMDc9c3RhdGljIGludCBncGlvX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQzLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmM6MjQ0Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYy0yNDUtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYz02MDc9c3RhdGljIGludCBiY21fc2YyX21kaW9fcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjgzLVxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYzo2ODQ6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNldXNlcl9taWlfYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjg1LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYz0xODc9c3RhdGljIGludCBnc3dpcF9tZGlvKHN0cnVjdCBnc3dpcF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTIxMy1cbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jOjIxNDpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTUtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MzIxPXN0YXRpYyBpbnQga3N6OTQ3N19wY3NfY3JlYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQxLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MzQyOlx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cdTAwM2VkZXYsIGJ1cyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTIzMjE9aW50IGtzel9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjM5Mi1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjIzOTM6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZHMtXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjM5NC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jPTY4NT1zdGF0aWMgaW50IGxhbjkzN3hfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU1LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYzo3NTY6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZHMtXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy03NTctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yNDA5PW10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjQ0NC1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyNDQ1Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0NDYtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jPTI0Mj1zdGF0aWMgaW50IG10NzYyOF9zZXR1cF9pbnRlcm5hbF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYxLVxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jOjI2MjpcdHJldHVybiBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMpO1xuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTI2My19XG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM9MzgzND1zdGF0aWMgaW50IG12ODhlNnh4eF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zODg3LVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6Mzg4ODpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zODg5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTI2Nz1zdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwX21kaW8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5Mi1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjI5MzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTQtXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0xNDk9c3RhdGljIGludCBuZXRjX3BvcnRfY3JlYXRlX2VtZGlvX2J1cyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0xNzktXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoxODA6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTgxLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz05NTc9c3RhdGljIGludCB2c2M5OTU5X21kaW9fYnVzX2FsbG9jKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdClcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xMDEzLVx0LyogTmVlZGVkIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIGJ1cyBtdXRleCBsb2NrICovXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxMDE0Olx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xMDE1LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYz04Nzg9c3RhdGljIGludCB2c2M5OTUzX21kaW9fYnVzX2FsbG9jKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdClcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jLTkwMy1cdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYzo5MDQ6XHRyYyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgTlVMTCk7XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jLTkwNS1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM9MzU3PXN0YXRpYyBpbnQgYXI5MzMxX3N3X21idXNfaW5pdChzdHJ1Y3QgYXI5MzMxX3N3X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODEtXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jOjM4MjpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4My1cdG9mX25vZGVfcHV0KG1ucCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ3PXFjYThrX21kaW9fcmVnaXN0ZXIoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTg2LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTg3Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4OC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM9NzQ9aW50IHJ0bDgzeHhfc2V0dXBfdXNlcl9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtOTktXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MTAwOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTEwMS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jPTExMTc9c3RhdGljIGludCBhNXBzd19wcm9iZV9tZGlvKHN0cnVjdCBhNXBzdyAqYTVwc3csIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDMtXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jOjExNDQ6XHRyZXR1cm4gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0NS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oPTMwNz12b2lkIHNqYTExMDVfZnJhbWVfbWVtb3J5X3BhcnRpdGlvbmluZyhzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMzA5LS8qIEZyb20gc2phMTEwNV9tZGlvLmMgKi9cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaDozMTA6aW50IHNqYTExMDVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMxMS12b2lkIHNqYTExMDVfbWRpb2J1c191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM9MzAyNj1zdGF0aWMgaW50IHNqYTExMDVfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjctXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYzozMDY4Olx0cmMgPSBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoZHMpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMzA2OS1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTI1OD1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3R4X3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMjg3LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6Mjg4Olx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMjg5LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzEyPXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdDFfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDMtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzozNDQ6XHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDUtXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0zNjg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfcGNzX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk1LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6Mzk2Olx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zOTctXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz00Mzk9c3RhdGljIHZvaWQgc2phMTEwNV9tZGlvYnVzX3Bjc191bnJlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDU4LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6NDU5OmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDYwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM9NTk1PXl0OTIxeF9tYnVzX2ludF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTYxMi1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYzo2MTM6XHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTYxNC1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTcyNj15dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDMtXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NzQ0Olx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDUtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jPTQ1OT1zdGF0aWMgaW50IGF4X21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmMtNDc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM6NDc5Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihheC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ4MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jPTEzMjE9c3RhdGljIGludCBvd2xfZW1hY19tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYzoxMzQ2Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cdTAwM2VtaWksIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0Ny1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYz01MDk9c3RhdGljIGludCBhZGluMTExMF9yZWdpc3Rlcl9tZGlvYnVzKHN0cnVjdCBhZGluMTExMF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jOjUzMDpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmMtNTMxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYz02MTc9c3RhdGljIGludCBhZGluMTE0MF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBhZGluMTE0MF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jOjYzNzpcdHJldHVybiBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpZGV2LVx1MDAzZWRldiwgcHJpdi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzOC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYz0xMjkwPXN0YXRpYyBpbnQgZ3JldGhfbWRpb19pbml0KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jOjEzMDc6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGdyZXRoLVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jPTM5MzE9c3RhdGljIGludCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYzo0MDI3Olx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI4LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jPTEyMT1zdGF0aWMgaW50IGFsdGVyYV90c2VfbWRpb19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6MTU4Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1OS1cdGlmIChyZXQgIT0gMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM9MTA2MT1zdGF0aWMgaW50IGF1MTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM6MTIyMjpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXVwLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9MzQyOD1zdGF0aWMgaW50IHhnYmVfcGh5X2luaXQoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxNy1cdHNucHJpbnRmKG1paS1cdTAwM2VpZCwgc2l6ZW9mKG1paS1cdTAwM2VpZCksIFwmIzM0OyVzXCYjMzQ7LCBkZXZfbmFtZShwZGF0YS1cdTAwM2VkZXYpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcxODpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxOS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcyMDpcdFx0ZGV2X2VycihwZGF0YS1cdTAwM2VkZXYsIFwmIzM0O21kaW9idXNfcmVnaXN0ZXIgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcyMS1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jPTk4PWludCB4Z2VfbWRpb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMTgtXHRtZGlvX2J1cy1cdTAwM2VwaHlfbWFzayA9IDB4MTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM6MTE5Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTEyMC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz04Mzc9aW50IHhnZW5lX2VuZXRfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjg4ODpzdGF0aWMgaW50IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODktXHRcdFx0XHQgIHN0cnVjdCBtaWlfYnVzICptZGlvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTEyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MTM6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxNC1cdFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjEtXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTIyOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTkzOT1pbnQgeGdlbmVfZW5ldF9tZGlvX2NvbmZpZyhzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjk1ODpcdHJldCA9IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIocGRhdGEsIG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYz0xMzE9aW50IGFyY19tZGlvX3Byb2JlKHN0cnVjdCBhcmNfZW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM6MTczOlx0ZXJyb3IgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbWRpb19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzQtXHRvZl9ub2RlX3B1dChtZGlvX25vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jPTk2Nj1zdGF0aWMgaW50IGF4ODg3OTZjX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jOjEwMTE6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpLVx1MDAzZWRldiwgYXhfbG9jYWwtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEyLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM9Njg3PXN0YXRpYyBpbnQgYWc3MXh4X21kaW9fcHJvYmUoc3RydWN0IGFnNzF4eCAqYWcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjctXHRtbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjcyODpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyOS1cdG9mX25vZGVfcHV0KG1ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjYwOlx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNjEtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM9MTcxMz1zdGF0aWMgaW50IGJjbV9lbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jOjE4MzA6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MzEtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYz0yMTE9c3RydWN0IG1paV9idXMgKmJjbWFfbWRpb19taWlfcmVnaXN0ZXIoc3RydWN0IGJnbWFjICpiZ21hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYzoyMzY6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNy1cdG9mX25vZGVfcHV0KG5wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz0xOTM9aW50IGJjbWdlbmV0X21paV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBpbml0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzMy1cdFx0cGh5X25hbWUgPSBcJiMzNDtleHRlcm5hbCBSdk1JSVwmIzM0OztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjIzNDpcdFx0Lyogb2ZfbWRpb2J1c19yZWdpc3RlciB0b29rIGNhcmUgb2YgcmVhZGluZyB0aGUgJiMzOTttYXgtc3BlZWQmIzM5O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjM1LVx0XHQgKiBQSFkgcHJvcGVydHkgZm9yIHVzLCBlZmZlY3RpdmVseSBsaW1pdGluZyB0aGUgUEhZIHN1cHBvcnRlZFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYz0yMTU3PXN0YXRpYyBpbnQgc2JtYWNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldiwgbG9uZyBsb25nIGJhc2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjctXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoyMjI4Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihzYy1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTE1MDU9c3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYzoxNTU4Olx0aSA9IG1kaW9idXNfcmVnaXN0ZXIodHAtXHUwMDNlbWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1OS1cdGlmIChpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwOTc6c3RhdGljIGludCBtYWNiX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1hY2IgKmJwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNC1cdGlmIChtZGlvX25wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTA1Olx0XHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMTk6XHRcdFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIwLVx0XHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMjI6XHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMy19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMTI1PXN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTU5Olx0ZXJyID0gbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKGJwLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE2MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYz0xMTA3PXN0YXRpYyBpbnQgZG05MDUxX21kaW9fcmVnaXN0ZXIoc3RydWN0IGJvYXJkX2luZm8gKmRiKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM6MTEyNTpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcdTAwMjZzcGktXHUwMDNlZGV2LCBkYi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTI0MjM9c3RhdGljIGludCB0c25lcF9tZGlvX2luaXQoc3RydWN0IHRzbmVwX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM6MjQ1NTpcdHJldHZhbCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cdTAwM2VtZGlvYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jPTEwMjQ9c3RhdGljIGludCBldGhvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM6MTIwODpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwOS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3MzQ9c3RhdGljIGludCBmdGdtYWMxMDBfc2V0dXBfbWRpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc3MDpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgcHJpdi1cdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc3MS1cdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jPTM2PXN0YXRpYyBpbnQgZW5ldGNfcGNpX21kaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYzo5MTpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBkZXYtXHUwMDNlb2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTI2Nj1zdGF0aWMgaW50IGVuZXRjX21kaW9fcHJvYmUoc3RydWN0IGVuZXRjX3BmICpwZiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjI5MzpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjk0LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MzA4PXN0YXRpYyBpbnQgZW5ldGNfaW1kaW9fY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozNDM6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQ0LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTMwNDI9c3RhdGljIGludCBmZWNfZW5ldF9taWlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozMTYxOlx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihmZXAtXHUwMDNlbWlpX2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYyLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM9NjU9c3RhdGljIGludCBtcGM1Mnh4X2ZlY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM6MTA2Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDctXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM9MTQ5PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYzoxNzY6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM9OTc9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYzoxNjc6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jPTQwOT1zdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6NDk0Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTUtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYz0zNzE9c3RhdGljIGludCB4Z21hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjYtXHRpZiAoaXNfb2Zfbm9kZShmd25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjc6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCB0b19vZl9ub2RlKGZ3bm9kZSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjgtXHRlbHNlIGlmIChpc19hY3BpX25vZGUoZndub2RlKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI5Olx0XHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBmd25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MzAtXHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyOTI6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jPTEwOTQ9c3RhdGljIGludCBoaXg1aGQyX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jOjExODY6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0xMjM9aW50IGhjbGdlX21hY19tZGlvX2NvbmZpZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU0LVx0bWRpb19idXMtXHUwMDNlcGh5X21hc2sgPSB+KDFVIFx1MDAzY1x1MDAzYyBtYWMtXHUwMDNlcGh5X2FkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYzoxNTU6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU2LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jPTQ5NT1zdGF0aWMgaW50IGhuc19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTg0Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTg1LVx0fSBlbHNlIGlmIChpc19hY3BpX25vZGUocGRldi1cdTAwM2VkZXYuZndub2RlKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5Mi1cdFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1OTM6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTQtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYz0yNTYwPXN0YXRpYyBpbnQgZW1hY19kdF9tZGlvX3Byb2JlKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODQtXHRzbnByaW50ZihidXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7JXNcJiMzNDssIGRldi1cdTAwM2VvZmRldi1cdTAwM2VuYW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYzoyNTg1Olx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNmRldi1cdTAwM2VvZmRldi1cdTAwM2VkZXYsIGJ1cywgbWlpX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg2LVx0aWYgKHJlcykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTEwMjY9aW50IGl4Z2JlX21paV9idXNfaW5pdChzdHJ1Y3QgaXhnYmVfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwODgtXHRhZGFwdGVyLVx1MDAzZW1paV9idXMgPSBidXM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoxMDg5Olx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwOTAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM9Mzg1PWx0cV9ldG9wX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDAyLVx0XHQgcHJpdi1cdTAwM2VwZGV2LVx1MDAzZW5hbWUsIHByaXYtXHUwMDNlcGRldi1cdTAwM2VpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jOjQwMzpcdGlmIChtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWlpX2J1cykpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDA0LVx0XHRlcnIgPSAtRU5YSU87XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYz0yODM9c3RhdGljIGludCBvcmlvbl9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODEtXHQvKiBGb3IgdGhlIHBsYXRmb3JtcyBub3Qgc3VwcG9ydGluZyBEVC9BQ1BJIGZhbGwtYmFja1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODI6XHQgKiB0byBtZGlvYnVzX3JlZ2lzdGVyIHZpYSBvZl9tZGlvYnVzX3JlZ2lzdGVyLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODMtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg0LVx0aWYgKGlzX2FjcGlfbm9kZShwZGV2LVx1MDAzZWRldi5md25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODU6XHRcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4Ni1cdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg3Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4OC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYz0xMzg3PXN0YXRpYyBpbnQgcHhhMTY4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTE1MDQtXHRwZXAtXHUwMDNlc21pX2J1cy1cdTAwM2VwaHlfbWFzayA9IDB4ZmZmZmZmZmY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYzoxNTA1Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihwZXAtXHUwMDNlc21pX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA2LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTk5OD1zdGF0aWMgaW50IG10a19tZGlvX2luaXQoc3RydWN0IG10a19ldGggKmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzctXHRkZXZfZGJnKGV0aC1cdTAwM2VkZXYsIFwmIzM0O01EQyBpcyBydW5uaW5nIG9uICVkIEh6XFxuXCYjMzQ7LCBNRENfTUFYX0ZSRVEgLyBldGgtXHUwMDNlbWRjX2RpdmlkZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYzoxMDM4Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihldGgtXHUwMDNlbWlpX2J1cywgbWlpX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMTAzOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM9MTQyMj1zdGF0aWMgaW50IG10a19zdGFyX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzoxNDQ4Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cdTAwM2VtaWksIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jPTI4Nz1pbnQgbWx4YmZfZ2lnZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBtbHhiZl9naWdlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmMtMzMyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYzozMzM6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzNC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM9MjUzPWludCBmYm5pY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmMtMjcyLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTE5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVVNCIEV0aGVybmV0IERyaXZlciBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlc2UgVVNCIEV0aGVybmV0IGRyaXZlcnMsIHBhcnRpY3VsYXJseSBgc21zYzc1eHguY2AgYW5kIGBsYW43OHh4LmNgLiBBbmQgYSBxdWljayBnbGFuY2UgYXQgdGhlaXIgY29kZSBzdWdnZXN0cyB0aGV5JiMzOTtyZSB1c2luZyBgbWRpb2J1c19yZWdpc3RlcmAuIFJpZ2h0LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBtZWFucyB0aGV5JiMzOTtyZSBpbnRlcmFjdGluZyB3aXRoIGFuIE1ESU8gYnVzLiBMZXQmIzM5O3Mgc2VlIGhvdyBwcmV2YWxlbnQgdGhhdCBpcyB3aXRoaW4gVVNCIG5ldHdvcmtpbmcgZHJpdmVycy4gTGV0IG1lIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYG1kaW9idXNfcmVnaXN0ZXJgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9gIGRpcmVjdG9yeS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2Ygd2hpY2ggb3RoZXIgZHJpdmVycyBhcmUgdXNpbmcgdGhpcyBtZXRob2QgYW5kIHBvdGVudGlhbGx5IHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJIGV4cGVjdCB0aGVyZSYjMzk7bGwgYmUgYSBmZXcgbW9yZSwgaXQmIzM5O3Mgbm90IHVudXN1YWwgdG8gdXNlIHRoYXQgaW4gdGhpcyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvYnVzX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjY5PXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02ODYtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg3Olx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz02MT1zdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtNzktXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo4MDpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTgxLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjA5MT1zdGF0aWMgaW50IGxhbjc4eHhfbWRpb19pbml0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEyMS1cdG5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNldWRldi1cdTAwM2VkZXYub2Zfbm9kZSwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMjI6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cdTAwM2VtZGlvYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEyMy1cdG9mX25vZGVfcHV0KG5vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0MS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyNDI6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0My1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MDgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxNjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBFQ09ORVQgRkVQSFkgRHJpdmVyIHZpYSBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gaG93IHdlIGNhbiBnZXQgYXQgdGhpcyBgZWNvbmV0LWZlLXNvY2AgZHJpdmVyIHRocm91Z2ggc3l6a2FsbGVyLiBUaGUgZ2FtZSBwbGFuIGlzIGNsZWFyOiB0aGVzZSBuZXR3b3JrIGRldmljZSBkcml2ZXJzLCBsaWtlIGBzbXNjOTV4eGAsIGBsYW43OHh4YCwgYGFzaXhfZGV2aWNlc2AsIGFuZCBgYXg4ODE3MmFgLCB0aGV5IHJlZ2lzdGVyIGFuIE1ESU8gYnVzLiBUaGF0IE1ESU8gYnVzLCB3aGVuIHJlZ2lzdGVyZWQsIGRvZXMgYSBzY2FuIGZvciBQSFlzLiAgVGhpcyBzY2FuIGlzIHRoZSBrZXkuIFRoZSBzY2FubmluZyBwcm9jZXNzIHJlbGllcyBvbiByZWFkaW5nIFBIWSByZWdpc3RlcnMgdXNpbmcgdGhlIE1ESU8gYnVzIHJlYWQgZnVuY3Rpb24uICBTaW5jZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMgdGhyb3VnaCB2aGNpLCBpdCBjYW4gY29udHJvbCB0aGUgZGF0YSByZXR1cm5lZCBieSB0aG9zZSByZWFkcy4KCk5vdywgaWYgc3l6a2FsbGVyIGZlZWRzIGEgc3BlY2lmaWMgUEhZIElEIGR1cmluZyB0aGUgTURJTyBzY2FuIOKAkyBgMHgwM2EyOTQxNGAsIHdoaWNoIGlzIGBFQ09ORVRfRkVQSFlfSURfRU43NTI2Q2Ag4oCTIHRoZSBNRElPIGJ1cyB3aWxsIGNyZWF0ZSBhIFBIWSBkZXZpY2Ugd2l0aCB0aGF0IElELiAgVGhlIGtlcm5lbCB3aWxsIHRoZW4gdHJ5IHRvIGJpbmQgYSBkcml2ZXIgZm9yIHRoYXQgcGFydGljdWxhciBQSFkgSUQuICBJZiBgQ09ORklHX0VDT05FVF9GRV9TT0NfUEhZYCBpcyBlbmFibGVkLCB0aGUgYGVjb25ldC1mZS1zb2NgIGRyaXZlciB3aWxsIG1hdGNoIGFuZCBpdHMgcHJvYmUgZnVuY3Rpb24gd2lsbCBleGVjdXRlLiBUaGlzIGtpY2tzIG9mZiB0aGUgd2hvbGUgbmV0d29yayBkcml2ZXIgY2hhaW4sIGF0dGFjaGluZyB0aGUgUEhZIGFuZCBzdGFydGluZyB0aGUgUEhZIHN0YXRlIG1hY2hpbmUsIGNhbGxpbmcgc3R1ZmYgbGlrZSBgY29uZmlnX2luaXRgIGFuZCBgcmVhZF9zdGF0dXNgLiBTbywgeWVzLCB0aGUgYGVjb25ldC1mZS1zb2NgIGRyaXZlciBpcyAqYWJzb2x1dGVseSogcmVhY2hhYmxlIGZyb20gc3l6a2FsbGVyIHZpYSBVU0IgdmhjaS4KCkFscmlnaHQsIGxldCYjMzk7cyB2ZXJpZnkgZXZlcnl0aGluZy4gVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY2AuIFRoZSBQSFkgSUQgaXMgaW5kZWVkIGAweDAzYTI5NDE0YC4gTG9va2luZyBhdCB0aGUgZHJpdmVyLCBpdCBkZWZpbmVzIGEgUEhZIGRyaXZlciB0YWJsZToKCmBgYGMKc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGVuNzUxMjIxX2ZlcGh5X2RyaXZlcltdID0gewoJewoJCVBIWV9JRF9NQVRDSF9FWEFDVChFQ09ORVRfRkVQSFlfSURfRU43NTI2QyksCgkJLm5hbWUJCT0gJiMzNDtFY29OZXQgRU43NTEyMjEgRkVQSFkmIzM0OywKCQkuY29uZmlnX2luaXQJPSBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdCwKCQkuY29uZmlnX2ludHIJPSBnZW5waHlfbm9fY29uZmlnX2ludHIsCgkJLmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssCgkJLnByb2JlCQk9IGVuNzUxMjIxX2ZlcGh5X3Byb2JlLAoJCS5yZWFkX3BhZ2UJPSBtdGtfcGh5X3JlYWRfcGFnZSwKCQkud3JpdGVfcGFnZQk9IG10a19waHlfd3JpdGVfcGFnZSwKCX0KfTsKYGBgCgpTbyBpdCBsb29rcyBnb29kLiBOb3csIHRoaXMgYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYCBpcyBpbnRlcmVzdGluZy4gTG9va2luZyBhdCB0aGF0IGZ1bmN0aW9uOgoKYGBgYwpzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCnsKCWludCBwb3J0MCA9IEVDT05FVF9FTjc1MjZDX1BPUlQwX0FERFI7CglzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZDsKCXN0cnVjdCBtdGtfc29jcGh5X3ByaXYgKnByaXY7CglpbnQgcmV0OwoKCWlmIChwaHlkZXYtJmd0O3BoeV9pZCAhPSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykKCQlwb3J0MCA9IEVDT05FVF9MRUdBQ1lfUE9SVDBfQUREUjsKCglyZXQgPSBkZXZtX3BoeV9wYWNrYWdlX2pvaW4oJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LCBwaHlkZXYsIHBvcnQwLAoJCQkJICAgIHNpemVvZihzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQpKTsKCWlmIChyZXQpCgkJcmV0dXJuIHJldDsKCglzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwoKCXByaXYgPSBkZXZtX2t6YWxsb2MoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKCWlmICghcHJpdikKCQlyZXR1cm4gLUVOT01FTTsKCglpZiAocGh5ZGV2LSZndDttZGlvLmFkZHIgPT0gcG9ydDApCgkJc2hhcmVkLSZndDtwaHlkZXZfcDAgPSBwaHlkZXY7CgoJcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKCglyZXR1cm4gMDsKfQpgYGAKCkFuZCB0aGVuIGBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdGAgaXM6CgpgYGBjCnN0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKewoJc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwoJdTE2IGwwcjI2X3RlbXA7CglpbnQgcmV0OwoJaW50IGk7CgoJaWYgKCFzaGFyZWQtJmd0O3BoeWRldl9wMCkgewoJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O1BvcnQgemVybyBtdXN0IGJlIGNvbmZpZ3VyZWRcbiYjMzQ7KTsKCQlyZXR1cm4gLUUKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRUNPTkVUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9LY29uZmlnPTM1OD1jb25maWcgTUFDSF9ERUNTVEFUSU9OXG4tLVxuYXJjaC9taXBzL0tjb25maWctMzk0LVxuYXJjaC9taXBzL0tjb25maWc6Mzk1OmNvbmZpZyBFQ09ORVRcbmFyY2gvbWlwcy9LY29uZmlnLTM5Ni1cdGJvb2wgXCYjMzQ7RWNvTmV0IE1JUFMgZmFtaWx5XCYjMzQ7XG4tLVxuZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnPTcxPWNvbmZpZyBEV19BUEJfVElNRVJfT0Zcbi0tXG5kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWctNzUtXG5kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWc6NzY6Y29uZmlnIEVDT05FVF9FTjc1MTIyMV9USU1FUlxuZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtFY29OZXQgRU43NTEyMjEgSGlnaCBQcmVjaXNpb24gVGltZXJcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tLVxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc9MTk1PWNvbmZpZyBEV19BUEJfSUNUTFxuLS1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTE5OS1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnOjIwMDpjb25maWcgRUNPTkVUX0VONzUxMjIxX0lOVENcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTIwMS1cdGJvb2xcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZy0yLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWc6Mzpjb25maWcgRUNPTkVUX0ZFX1NPQ19QSFlcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFY29OZXQgRHJpdmVyIGZvciBTeXprYWxsZXIgVGVzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgRUNPTkVUYCB0aGluZywgd2hpY2ggYXBwZWFycyB0byBiZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29tcG9uZW50IChgYXJjaC9taXBzL0tjb25maWdgKS4gVGhlIGRyaXZlciBpdHNlbGYgc2VlbXMgdG8gaGluZ2Ugb24gZWl0aGVyIGBFQ09ORVRgIGJlaW5nIGVuYWJsZWQsIG9yLCBjcnVjaWFsbHkgZm9yIG15IHB1cnBvc2VzLCBgQ09NUElMRV9URVNUYC4gRXhjZWxsZW50LCBzeXprYWxsZXIgbGV2ZXJhZ2VzIGBDT01QSUxFX1RFU1RgLCBzbyBJIGNhbiBkaXJlY3RseSBlbmFibGUgYEVDT05FVF9GRV9TT0NfUEhZYC4gSSBicmllZmx5IHdvbmRlcmVkIGFib3V0IGEgZGVwZW5kZW5jeSBvbiBgTVRLX05FVF9QSFlMSUJgLCBidXQgaXQgKnNlbGVjdHMqIGl0LCBzbyBgRUNPTkVUX0ZFX1NPQ19QSFlgIGlzIHRoZSBrZXkuIE5vIG90aGVyIGNvbmZpZ3MgYXBwZWFyIG5lY2Vzc2FyeSwganVzdCB0aGF0IG9uZS4KCk5vdyBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkcml2ZXImIzM5O3MgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jYC4gVGhlIGRyaXZlciBkZWZpbmVzIGBlbjc1MTIyMV9mZXBoeV9kcml2ZXJgLCBhbmQgaXRzIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhcmUgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBhbmQgYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYC4gSSYjMzk7bGwgd2FudCB0byBrZWVwIGFuIGV5ZSBvbiB0aG9zZS4gTGV0JiMzOTtzIGFkZCB0aGVtIHRvIG15ICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgbGlzdC4KCkhtbSwgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBgTUFJTlRBSU5FUlNgIGFuZCB0aGUgYE1ha2VmaWxlYCBhcyB3ZWxsLCBhbmQgYWRkcyBgZWNvbmV0LWZlLXNvYy5jYCDigJMgc3RhbmRhcmQgc3R1ZmYuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbjogY2FuIEkgcmVhbGlzdGljYWxseSByZWFjaCB0aGlzIGNvZGUgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudCwgYW5kIHNwZWNpZmljYWxseSB0aHJvdWdoIHN5emthbGxlcj8gVGhlIGFuc3dlciwgdGhhbmtmdWxseSwgaXMgeWVzISBTeXprYWxsZXIgdXNlcyBgdmhjaWAgdG8gZW11bGF0ZSBVU0IgZGV2aWNlcy4gSSYjMzk7bSB0aGlua2luZyBvZiBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgbGlrZSBgc21zYzk1eHhgLiBUaGUgYHNtc2M5NXh4YCBkcml2ZXIgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGR1cmluZyBpdHMgYmluZCBwcm9jZXNzLiBUaGlzIGJ1cyB0aGVuIHNjYW5zIGZvciBQSFlzIGJ5IHJlYWRpbmcgTURJTyByZWdpc3RlcnMsIHZpYSBVU0IgY29udHJvbCBtZXNzYWdlcy4KCkhlcmUmIzM5O3MgdGhlIHJlYWwgcG93ZXI6IFN5emthbGxlciBpbnRlcmNlcHRzIHRoZXNlIG1lc3NhZ2VzIGZyb20gdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UuIFNvLCBpZiBzeXprYWxsZXIgaXMgY29uZmlndXJlZCB0byByZXR1cm4gdGhlIFBIWSBJRCBgMHgwM2EyOTQxNGAgKGF0LCBzYXksIGFkZHJlc3MgOSkgd2hlbiBxdWVyaWVkIGJ5IHRoZSBNRElPIGJ1cywgdGhlIFBIWSBkcml2ZXIgY29yZSB3aWxsIGNyZWF0ZSBhIFBIWSBkZXZpY2UsIGFuZCB0aGUgUEhZIGRyaXZlciBjb3JlIHdpbGwgbWF0Y2ggdGhpcyBJRCB3aXRoIGBlbjc1MTIyMV9mZXBoeV9kcml2ZXJgLiBJdCBjYWxscyBgZW43NTEyMjFfZmVwaHlfcHJvYmVgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpMYXRlciwgd2hlbiB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgYWN0aXZhdGVkLCBgcGh5X3N0YXJ0YCB3aWxsIHRyaWdnZXIgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgYSBzZXJpZXMgb2YgTURJTyByZWFkcyBhbmQgd3JpdGVzICh2aWEgYHBoeV9yZWFkX3BhZ2VkYCwgYHBoeV93cml0ZV9wYWdlZGAsIGV0Yy4pIOKAkyBhbGwgb2Ygd2hpY2ggdHJhbnNsYXRlIHRvIFVTQiBjb250cm9sIG1lc3NhZ2VzIHRoYXQgc3l6a2FsbGVyIGNhbiBpbnRlcmNlcHQgYW5kIG1hbmlwdWxhdGUhIFRoZXJlZm9yZSwgdGhlIGVudGlyZSBjYWxpYnJhdGlvbiBsb2dpYyBpbiBgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXRgIGlzIGZ1bGx5IHdpdGhpbiBteSBjb250cm9sLiBJIGNhbiBmdXp6IGl0IGV4dGVuc2l2ZWx5IHdpdGggc3l6a2FsbGVyLgoKSnVzdCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc21zYzk1eHhgIGRvZXNuJiMzOTt0IGZpbHRlciBvdXQgUEhZcyDigJMgYWxsIGxvb2tzIGdvb2QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2RldmljZV9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0Mjg1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNRElPIEJ1cyBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gdGhlIGBzbXNjOTV4eGAgZHJpdmVyIGtpY2tzIHRoaW5ncyBvZmYgYnkgcmVnaXN0ZXJpbmcgYW4gTURJTyBidXMgdXNpbmcgYG1kaW9idXNfcmVnaXN0ZXJgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgd2F5IHRvIGRvIGl0LiBOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd29ya3MgaW4gZGV0YWlsLiBUaW1lIHRvIGNyYWNrIG9wZW4gYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBtZGlvYnVzX3JlZ2lzdGVyYCBmdW5jdGlvbiBpdHNlbGYuIEkgd2FudCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qg4oCTIHdoYXQgc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQsIHdoaWNoIGNhbGxiYWNrcyBhcmUgYmVpbmcgc2V0IHVwLCBhbmQgaG93IHRoaXMgYnVzIGlzIG1hZGUgYXZhaWxhYmxlIHRvIG90aGVyIFBIWSBkcml2ZXJzLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBuaXR0eS1ncml0dHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDUzOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTURJTyBCdXMgU2NhbiBMb2NhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE1ESU8gYnVzIGluaXRpYWxpemF0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYSBzYW5pdHkgY2hlY2suIExldCBtZSBqdXN0IGNvbmZpcm0uLi4gYG1kaW9idXNfc2NhbmAuLi4gdGhhdCYjMzk7cyAqcmlnaHQqIHdoZXJlIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlLCBuZXN0bGVkIGluIHRoZSBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgIGZpbGUuIE5vIHN1cnByaXNlcyB0aGVyZS4gR29vZC4gTWFrZXMgc2Vuc2UuIEp1c3QgY29uZmlybWluZyB0aGUgY29kZSBiYXNlIGlzIHN0cnVjdHVyZWQgYXMgSSB3b3VsZCBhbnRpY2lwYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvYnVzX3NjYW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM9OTU4PXN0YXRpYyBpbnQgcHhhMTY4X2luaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmMtOTY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM6OTY4Olx0cGh5ID0gbWRpb2J1c19zY2FuX2MyMihwZXAtXHUwMDNlc21pX2J1cywgcGVwLVx1MDAzZXBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTk2OS1cdGlmIChJU19FUlIocGh5KSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jPTEzMD1zdGF0aWMgaW50IHVuaW1hY19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0xNjMtICpcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6MTY0OiAqIGJ1cy1cdTAwM2VyZXNldCBpcyBpbnZva2VkIGJlZm9yZSBtZGlvYnVzX3NjYW4gZHVyaW5nIG1kaW9idXNfcmVnaXN0ZXIgYW5kIGlzXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTE2NS0gKiB0aGVyZWZvcmUgdGhlIHJpZ2h0IGxvY2F0aW9uIHRvIHN0aWNrIHRoYXQgd29ya2Fyb3VuZC4gU2luY2Ugd2UgZG8gbm90IHdhbnRcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYz0zOTY9c3RhdGljIHZvaWQgb2ZfbWRpb2J1c19saW5rX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cyxcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00MDctXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0MDg6c3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgYzQ1KVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDA5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NDctLyoqXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0NDg6ICogbWRpb2J1c19zY2FuX2MyMiAtIHNjYW4gb25lIGFkZHJlc3Mgb24gYSBidXMgZm9yIEMyMiBNRElPIGRldmljZXMuXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NDktICogQGJ1czogbWlpX2J1cyB0byBzY2FuXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDU4LSAqL1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDU5OnN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW5fYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDYwLXtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ2MTpcdHJldHVybiBtZGlvYnVzX3NjYW4oYnVzLCBhZGRyLCBmYWxzZSk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NjItfVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDYzOkVYUE9SVF9TWU1CT0wobWRpb2J1c19zY2FuX2MyMik7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NjQtXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NjUtLyoqXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0NjY6ICogbWRpb2J1c19zY2FuX2M0NSAtIHNjYW4gb25lIGFkZHJlc3Mgb24gYSBidXMgZm9yIEM0NSBNRElPIGRldmljZXMuXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NjctICogQGJ1czogbWlpX2J1cyB0byBzY2FuXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDc2LSAqL1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDc3OnN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ3OC17XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0Nzk6XHRyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00ODAtfVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDgxLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDgyOnN0YXRpYyBpbnQgbWRpb2J1c19zY2FuX2J1c19jMjIoc3RydWN0IG1paV9idXMgKmJ1cylcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ4My17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDg5LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDkwOlx0XHRcdHBoeWRldiA9IG1kaW9idXNfc2Nhbl9jMjIoYnVzLCBpKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5MS1cdFx0XHRpZiAoSVNfRVJSKHBoeWRldikgXHUwMDI2XHUwMDI2IChQVFJfRVJSKHBoeWRldikgIT0gLUVOT0RFVikpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDk3LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDk4OnN0YXRpYyBpbnQgbWRpb2J1c19zY2FuX2J1c19jNDUoc3RydWN0IG1paV9idXMgKmJ1cylcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNTA5LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NTEwOlx0XHRcdHBoeWRldiA9IG1kaW9idXNfc2Nhbl9jNDUoYnVzLCBpKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTUxMS1cdFx0XHRpZiAoSVNfRVJSKHBoeWRldikgXHUwMDI2XHUwMDI2IChQVFJfRVJSKHBoeWRldikgIT0gLUVOT0RFVikpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM9NTUzPWludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjMyLVx0aWYgKGJ1cy1cdTAwM2VyZWFkKSB7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo2MzM6XHRcdGVyciA9IG1kaW9idXNfc2Nhbl9idXNfYzIyKGJ1cyk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MzQtXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjQwLVx0aWYgKCFwcmV2ZW50X2M0NV9zY2FuIFx1MDAyNlx1MDAyNiBidXMtXHUwMDNlcmVhZF9jNDUpIHtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjY0MTpcdFx0ZXJyID0gbWRpb2J1c19zY2FuX2J1c19jNDUoYnVzKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTY0Mi1cdFx0aWYgKGVycilcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTQ2Mj1zdHJ1Y3QgbWlpX2J1cyAqbWRpb19maW5kX2J1cyhjb25zdCBjaGFyICptZGlvX25hbWUpO1xuaW5jbHVkZS9saW51eC9waHkuaDo0NjM6c3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2Nhbl9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xuaW5jbHVkZS9saW51eC9waHkuaC00NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O3ZlIGdvdC4gSSYjMzk7dmUgcmVhbGl6ZWQgdGhhdCB0aGUgYF9fbWRpb2J1c19yZWdpc3RlcmAgZnVuY3Rpb24sIGFuZCB0aGUgY2hhaW4gb2YgY2FsbHMgc3RlbW1pbmcgZnJvbSBpdOKAlGBtZGlvYnVzX3NjYW5fYnVzX2MyMmAsIGBtZGlvYnVzX3NjYW5fYzIyYCwgYG1kaW9idXNfc2NhbmAsIGBnZXRfcGh5X2RldmljZWAsIGFuZCBmaW5hbGx5IGBwaHlfZGV2aWNlX2NyZWF0ZWDigJRwcm92aWRlcyBhIHBvdGVudGlhbCBlbnRyeSBwb2ludC4gU3BlY2lmaWNhbGx5LCBkcml2ZXJzIHJlZ2lzdGVyaW5nIGFuIE1ESU8gYnVzIHdpdGhvdXQgRGV2aWNlIFRyZWUgaW5mb3JtYXRpb24sIGxpa2UgYHNtc2M5NXh4YCwgd2lsbCB0cmlnZ2VyIGEgYnVzIHNjYW4gYW5kIGRldmljZSBjcmVhdGlvbiBiYXNlZCBvbiBQSFkgSURzIG9idGFpbmVkIGZyb20gdGhlIE1ESU8gcmVhZCBmdW5jdGlvbi4KCk5vdywgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYHNtc2M5NXh4YCB2aWEgYHZoY2lgLCBpdCBjYW4gaW5qZWN0IGEgc3BlY2lmaWMgUEhZIElEIGR1cmluZyB0aGF0IHNjYW4g4oCTIGluIHRoaXMgY2FzZSwgYDB4MDNhMjk0MTRgLiBUaGlzIHNob3VsZCBjYXVzZSB0aGUgYGVjb25ldC1mZS1zb2NgIFBIWSBkcml2ZXIgdG8gYmUgcHJvYmVkLCBhbmQgaXRzIGFzc29jaWF0ZWQgY29kZSB0byBiZSBleGVjdXRlZC4gU28sIGdpdmVuIHRoYXQsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGFuZCB0aGVyZWZvcmUsIHdvcnRoIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBkcml2ZXIuIEkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBkcml2ZXIgZGVmaW5pdGlvbiBhbmQgaXQgbG9va3MgbGlrZSBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGlzOgoKYGBgYwpzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW43NTEyMjFfZmVwaHlfZHJpdmVyW10gPSB7Cgl7CgkJUEhZX0lEX01BVENIX0VYQUNUKEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSwKCQkubmFtZQkJPSAmIzM0O0Vjb05ldCBFTjc1MTIyMSBGRVBIWSYjMzQ7LAoJCS5jb25maWdfaW5pdAk9IGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0LAoJCS5jb25maWdfaW50cgk9IGdlbnBoeV9ub19jb25maWdfaW50ciwKCQkuaGFuZGxlX2ludGVycnVwdCA9IGdlbnBoeV9oYW5kbGVfaW50ZXJydXB0X25vX2FjaywKCQkucHJvYmUJCT0gZW43NTEyMjFfZmVwaHlfcHJvYmUsCgkJLnJlYWRfcGFnZQk9IG10a19waHlfcmVhZF9wYWdlLAoJCS53cml0ZV9wYWdlCT0gbXRrX3BoeV93cml0ZV9wYWdlLAoJfQp9OwpgYGAKCkkgaW5pdGlhbGx5IGlkZW50aWZpZWQgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBhbmQgYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYCBhcyB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcy4gSG93ZXZlciwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBkb24mIzM5O3QganVzdCBjYWxsIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCB3aWxsIGJlIGlubGluZWQsIGJlY2F1c2UgSSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBTdXJlIGVub3VnaCwgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBjYWxscyBzZXZlcmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zOiBgZW43NTEyMjFfZmVwaHlfcjUwYCwgYGVuNzUxMjIxX2ZlcGh5X3R4X29mZnNldGAsIGFuZCBgZW43NTEyMjFfZmVwaHlfdHhfYW1wYC4gVGh1cywgSSB3aWxsIHN0aWNrIHdpdGgganVzdCBgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXRgIGFuZCBgZW43NTEyMjFfZmVwaHlfcHJvYmVgLgoKRmluYWxseSwgc2luY2UgYG10a19waHlfcmVhZF9wYWdlYCBhbmQgYG10a19waHlfd3JpdGVfcGFnZWAgYXBwZWFyIGluIHRoZSBkcml2ZXIgZGVmaW5pdGlvbiwgSSB3YW50IHRvIGNvbmZpcm0gd2hlcmUgdGhleSBhcmUgZGVmaW5lZC4gVGhleSBhcmUgbm90IGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgZmlsZSwgc28gSSBuZWVkIHRvIGNoZWNrIGVpdGhlciBgbXRrLmhgIG9yIGBtdGsuY2AgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHJlbGV2YW50LCBhbmQgaG93IHRvIHJlYWNoIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210a19waHlfcmVhZF9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jPTYwOD1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW43NTEyMjFfZmVwaHlfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYy02MTUtXHRcdC5wcm9iZVx0XHQ9IGVuNzUxMjIxX2ZlcGh5X3Byb2JlLFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYzo2MTY6XHRcdC5yZWFkX3BhZ2VcdD0gbXRrX3BoeV9yZWFkX3BhZ2UsXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jLTYxNy1cdFx0LndyaXRlX3BhZ2VcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstMnA1Z2UuYz0zNzk9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG10a18ycDVnZXBoeV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLTJwNWdlLmMtMzkwLVx0XHQucmVzdW1lID0gZ2VucGh5X3Jlc3VtZSxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstMnA1Z2UuYzozOTE6XHRcdC5yZWFkX3BhZ2UgPSBtdGtfcGh5X3JlYWRfcGFnZSxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstMnA1Z2UuYy0zOTItXHRcdC53cml0ZV9wYWdlID0gbXRrX3BoeV93cml0ZV9wYWdlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM9MTQ5NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX3NvY3BoeV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE1MDQtXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYzoxNTA1Olx0XHQucmVhZF9wYWdlXHQ9IG10a19waHlfcmVhZF9wYWdlLFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNTA2LVx0XHQud3JpdGVfcGFnZVx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNTIxLVx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM6MTUyMjpcdFx0LnJlYWRfcGFnZVx0PSBtdGtfcGh5X3JlYWRfcGFnZSxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTUyMy1cdFx0LndyaXRlX3BhZ2VcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYz05OT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX2dlcGh5X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYy0xMTAtXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jOjExMTpcdFx0LnJlYWRfcGFnZVx0PSBtdGtfcGh5X3JlYWRfcGFnZSxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYy0xMTItXHRcdC53cml0ZV9wYWdlXHQ9IG10a19waHlfd3JpdGVfcGFnZSxcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMtMTI0LVx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYzoxMjU6XHRcdC5yZWFkX3BhZ2VcdD0gbXRrX3BoeV9yZWFkX3BhZ2UsXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMtMTI2LVx0XHQud3JpdGVfcGFnZVx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmM9ODQ9RVhQT1JUX1NZTUJPTF9HUEwoX19tdGtfdHJfY2xyX2JpdHMpO1xuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmMtODUtXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYzo4NjppbnQgbXRrX3BoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstcGh5LWxpYi5jLTg3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYy04OS19XG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYzo5MDpFWFBPUlRfU1lNQk9MX0dQTChtdGtfcGh5X3JlYWRfcGFnZSk7XG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYy05MS1cbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLmg9ODE9dm9pZCBfX210a190cl9jbHJfYml0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay5oLTgzLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay5oOjg0OmludCBtdGtfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaC04NS1pbnQgbXRrX3BoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwNTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgTWVkaWF0ZWsgUEhZIExpYnJhcnkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG10ay1waHktbGliLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgZHJpdmVyLiBGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgYEVuYWJsZUNvbmZpZ3NgLiBBbHJpZ2h0LCBsb29rcyBsaWtlIGBDT05GSUdfRUNPTkVUX0ZFX1NPQ19QSFlgIGlzIHRoZSBrZXkuIEl0JiMzOTtzIGRlcGVuZGVudCBvbiBgRUNPTkVUIHx8IENPTVBJTEVfVEVTVGAsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBCYXNpY2FsbHksIEkganVzdCBuZWVkIGBFQ09ORVRfRkVfU09DX1BIWWAgZW5hYmxlZC4KCk5vdywgYSBxdWljayBzYW5pdHkgY2hlY2suIERvZXMgdGhpcyB0aGluZyBkZXBlbmQgb24gZWl0aGVyIGBNRElPX0RFVklDRWAgb3IgYFBIWUxJQmA/IEFoYSwgaXQgbG9va3MgbGlrZSBgUEhZTElCYCBpcyBzZWxlY3RlZCBieSBgTVRLX05FVF9QSFlMSUJgLCB3aGljaCwgaW4gdHVybiwgaXMgc2VsZWN0ZWQgYnkgYEVDT05FVF9GRV9TT0NfUEhZYC4gR290IGl0ISBXYWl0IGEgbWludXRlLCBgTVRLX05FVF9QSFlMSUJgIGlzIGFjdHVhbGx5IGEgY29uZmlnIG9wdGlvbiBpdHNlbGYuIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiBhYm91dCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1US19ORVRfUEhZTElCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZz00OD1jb25maWcgTUVESUFURUtfR0VfU09DX1BIWVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnLTY2LVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWc6Njc6Y29uZmlnIE1US19ORVRfUEhZTElCXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZy02OC1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTcyCgkJCQkJCQlvdXRwdXQ6IDI2MAoJCQkJCQkJdGhvdWdodHM6IDYwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFzb25pbmcgZm9yIEZ1enppbmcgdGhlIEVjb05ldCBQSFkgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYmFzaWNhbGx5LCBpdCBhZGRzIGEgbmV3IFBIWSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aG9zZSBFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzLCByaWdodD8gVGhlIGtleSBoZXJlIGlzIHJlYWNoYWJpbGl0eSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBhbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IFBIWSBkcml2ZXJzICpjYW4qIGJlIHJlYWNoZWQgZXZlbiBpbiB0aGVzZSB2aXJ0dWFsaXplZCBzZXR1cHMgYmVjYXVzZSB3ZSBjYW4gZW11bGF0ZSBhbiBNRElPIGJ1cy4gVGhpbmsgYWJvdXQgaG93IHN5emthbGxlciBjYW4gZW11bGF0ZSBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIsIGxpa2UgYHNtc2M5NXh4YCwgdXNpbmcgYHZoY2lgLiBXaGVuIHRoYXQgZW11bGF0ZWQgVVNCIGRldmljZSBnZXRzIHByb2JlZCwgaXQgc2V0cyB1cCBhbiBNRElPIGJ1cyBhbmQgc3RhcnRzIHNjYW5uaW5nIGZvciBQSFlzLgoKTm93LCBoZXJlJiMzOTtzIHRoZSBjbGV2ZXIgYml0OiBkdXJpbmcgdGhhdCBNRElPIHNjYW4gKHdoZXJlIGl0JiMzOTtzIGVzc2VudGlhbGx5IHNlbmRpbmcgTURJTyByZWFkIHJlcXVlc3RzIGFzIFVTQiBjb250cm9sIG1lc3NhZ2VzKSwgaWYgd2UgcmV0dXJuIHRoZSBzcGVjaWZpYyBQSFkgSUQsIGluIHRoaXMgY2FzZSBgMHgwM2EyOTQxNGAsIHRoZSBNRElPIGJ1cyB3aWxsIGluc3RhbnRpYXRlIGEgUEhZIGRldmljZSB3aXRoICp0aGF0KiBJRC4gVGhhdCYjMzk7cyB0aGUgdHJpZ2dlciEgVGhhdCB3aWxsIHRoZW4ga2ljayBvZmYgdGhlIGBlY29uZXQtZmUtc29jYCBQSFkgZHJpdmVyJiMzOTtzIHByb2JlIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuIEJpbmdvISBDb2RlIGV4ZWN1dGlvbi4KClNvLCB0aGlzIHBhdGNoIGlzbiYjMzk7dCBqdXN0IGludHJvZHVjaW5nIGEgbmV3IGRyaXZlcjsgaXQmIzM5O3Mgb3BlbmluZyBhIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldC4gV2Uga25vdyB0aGUgY29kZSBpcyByZWFjaGFibGUsIGFuZCB0aGF0IGl0IG1ha2VzIGZ1enppbmcgd29ydGh3aGlsZS4KCkkga25vdyBJIHdhbnQgdG8ga2VlcCBhbiBleWUgb24gYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYCBhbmQgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBmdW5jdGlvbnMgYXMgZW50cnkgcG9pbnRzLgoKSSYjMzk7dmUgbG9va2VkIGF0IHRoZSBjb25maWcgb3B0aW9ucywgYEVDT05FVF9GRV9TT0NfUEhZYCBpcyB0aGUgY3J1Y2lhbCBvbmUgdG8gZW5hYmxlLiBJIGRvdWJsZS1jaGVja2VkIHRoYXQgYFBIWV9QQUNLQUdFYCBpcyBzZWxlY3RlZCwgYW5kIGBNVEtfTkVUX1BIWUxJQmAgaXMgYWxzbyBzZWxlY3RlZCwgYnV0IGBFQ09ORVRfRkVfU09DX1BIWWAgaXMgc3VmZmljaWVudC4gSSBjb25maXJtZWQgdGhhdCBgRUNPTkVUX0ZFX1NPQ19QSFlgIGlzIHRyaXN0YXRlLCBzbyBpdCYjMzk7cyB0aGUgb25seSBvbmUgd2UgcmVhbGx5IG5lZWQuIE5vIG5lZWQgdG8gbGlzdCBgVVNCX05FVF9TTVNDOTVYWGAsIGFzIHN5emthbGxlciB1c3VhbGx5IGhhcyB0aGF0IG9uZSBlbmFibGVkIGFscmVhZHkuCkkmIzM5O20gY29uZmlkZW50IGluIHRoZSBhcHByb2FjaCBhbmQgaGF2ZSBkb2N1bWVudGVkIHRoZSByZWFzb25pbmcuIEkgd2lsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RUNPTkVUX0ZFX1NPQ19QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbjc1MTIyMV9mZXBoeV9wcm9iZSYjMzQ7LAogICAgJiMzNDtlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBIWSBkcml2ZXIgZm9yIEVjb05ldCAxMC8xMDAgU29DIEV0aGVybmV0IFBIWXMgKGBkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jYCkuIFBIWSBkcml2ZXJzIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBlbXVsYXRpbmcgYW4gTURJTyBidXMuIEZvciBleGFtcGxlLCBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBVU0IgbmV0d29yayBhZGFwdGVyIChzdWNoIGFzIGBzbXNjOTV4eGApIHZpYSB0aGUgYHZoY2lgIGRyaXZlci4gV2hlbiB0aGUgZW11bGF0ZWQgVVNCIGRldmljZSBpcyBwcm9iZWQsIGl0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgc2NhbnMgZm9yIFBIWXMgYnkgc2VuZGluZyBNRElPIHJlYWQgcmVxdWVzdHMgKHdoaWNoIHRyYW5zbGF0ZSB0byBVU0IgY29udHJvbCBtZXNzYWdlcykuIEJ5IHJldHVybmluZyB0aGUgc3BlY2lmaWMgUEhZIElEIChgMHgwM2EyOTQxNGApIGR1cmluZyB0aGUgTURJTyBzY2FuLCB0aGUgTURJTyBidXMgd2lsbCBpbnN0YW50aWF0ZSBhIFBIWSBkZXZpY2Ugd2l0aCB0aGlzIElELCB0cmlnZ2VyaW5nIHRoZSBwcm9iZSBhbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIG9mIHRoZSBgZWNvbmV0LWZlLXNvY2AgUEhZIGRyaXZlci4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VDT05FVF9GRV9TT0NfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW43NTEyMjFfZmVwaHlfcHJvYmUmIzM0OywKICAgICYjMzQ7ZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQSFkgZHJpdmVyIGZvciBFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzIChgZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY2ApLiBQSFkgZHJpdmVycyBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgZW11bGF0aW5nIGFuIE1ESU8gYnVzLiBGb3IgZXhhbXBsZSwgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoc3VjaCBhcyBgc21zYzk1eHhgKSB2aWEgdGhlIGB2aGNpYCBkcml2ZXIuIFdoZW4gdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgaXMgcHJvYmVkLCBpdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHNjYW5zIGZvciBQSFlzIGJ5IHNlbmRpbmcgTURJTyByZWFkIHJlcXVlc3RzICh3aGljaCB0cmFuc2xhdGUgdG8gVVNCIGNvbnRyb2wgbWVzc2FnZXMpLiBCeSByZXR1cm5pbmcgdGhlIHNwZWNpZmljIFBIWSBJRCAoYDB4MDNhMjk0MTRgKSBkdXJpbmcgdGhlIE1ESU8gc2NhbiwgdGhlIE1ESU8gYnVzIHdpbGwgaW5zdGFudGlhdGUgYSBQSFkgZGV2aWNlIHdpdGggdGhpcyBJRCwgdHJpZ2dlcmluZyB0aGUgcHJvYmUgYW5kIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyBvZiB0aGUgYGVjb25ldC1mZS1zb2NgIFBIWSBkcml2ZXIuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0NzLiBUaGUgZHJpdmVyIHByaW1hcmlseSBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZSByZWdpc3RlcnMgdmlhIE1ESU8gKHVzaW5nIHBoeWxpYiBmdW5jdGlvbnMgbGlrZSBwaHlfd3JpdGVfcGFnZWQgYW5kIHBoeV9yZWFkX3BhZ2VkKSBhbmQgcGVyZm9ybXMgY2FsaWJyYXRpb24gcm91dGluZXMuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoZS5nLiwgbXRrX3NvY3BoeV9wcml2IGFuZCB0aGUgc2hhcmVkIHBhY2thZ2UgZGF0YSkgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgZGV2bV9remFsbG9jIG9yIHN0YW5kYXJkIHBoeWxpYiBmdW5jdGlvbnMuIFN0YWNrIHZhcmlhYmxlcyBsaWtlIGNhbF9jb21wbGV0ZV9jdHggYXJlIGFsc28gZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1c2VyLXNwYWNlIEFQSXMsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGxzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeS1kZXBlbmRlbnQgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDQ3YmJjNDM2ZGVjMjQ1MDRjMDcwMzMwYzZkNDdiNzkxOTMxNjgxNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDE5OjE4OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA0NjBjYjcyNjg4NDUwLi43Y2EzZDhkMDhjNjkzIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtOTI1Myw2ICYjNDM7OTI1MywxMiBAQCBXOglodHRwczovL2xpbnV4dHYub3JnCiBROglodHRwOi8vcGF0Y2h3b3JrLmxpbnV4dHYub3JnL3Byb2plY3QvbGludXgtbWVkaWEvbGlzdC8KIEY6CWRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9lYzEwMCoKIAomIzQzO0VDT05FVCBFVEhFUk5FVCBQSFkgRFJJVkVSCiYjNDM7TToJQ2FsZWIgSmFtZXMgRGVMaXNsZSAmbHQ7Y2pkQGNqZG5zLmZyJmd0OwomIzQzO0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYwomIzQzOwogRUNPTkVUIE1JUFMgUExBVEZPUk0KIE06CUNhbGViIEphbWVzIERlTGlzbGUgJmx0O2NqZEBjamRucy5mciZndDsKIEw6CWxpbnV4LW1pcHNAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnCmluZGV4IDNiOWNmODJjMGNiMjguLjY0YWJmNWI2OTVhYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnCkBAIC0xLDQgJiM0MzsxLDE5IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsKJiM0Mztjb25maWcgRUNPTkVUX0ZFX1NPQ19QSFkKJiM0MzsJdHJpc3RhdGUgJiMzNDtFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBFQ09ORVQgfHwgQ09NUElMRV9URVNUCiYjNDM7CXNlbGVjdCBNVEtfTkVUX1BIWUxJQgomIzQzOwlzZWxlY3QgUEhZX1BBQ0tBR0UKJiM0MzsJaGVscAomIzQzOwkgIFN1cHBvcnRzIEVjb05ldCBTb0MgYnVpbHQtaW4gMTAvMTAwIEV0aGVybmV0IFBIWXMuCiYjNDM7CiYjNDM7CSAgSW5jbHVkZSBzdXBwb3J0IGZvciBidWlsdC1pbiBFdGhlcm5ldCBQSFlzIHdoaWNoIGFyZSBwcmVzZW50IGluCiYjNDM7CSAgRU43NTI2QyBiYXNlZCBTb0NzIChpbmNsdWRpbmcgRU43NTI2RikuIEl0IGNhbiBhbHNvIHdvcmsgd2l0aAomIzQzOwkgIGxlZ2FjeSBFTjc1MTIgRkUgUEhZcyB3aGljaCBpZGVudGlmeSBhcyAwM2EyLjk0MTIsIGJ1dCBzaW5jZSB0aGlzCiYjNDM7CSAgSUQgaXMgdXNlZCBieSBNRURJQVRFS19HRV9QSFksIHVzZXJzIHdhbnRpbmcgdG8gZm9yY2UgdGhpcyBkcml2ZXIKJiM0MzsJICBtdXN0IG92ZXJyaWRlIHRoZSBJRCB0byAwM2EyLjk0MTQgaW4gdGhlIGRldmljZSB0cmVlLgomIzQzOwogY29uZmlnIE1FRElBVEVLXzJQNUdFX1BIWQogCXRyaXN0YXRlICYjMzQ7TWVkaWFUZWsgMi41R2IgRXRoZXJuZXQgUEhZcyYjMzQ7CiAJZGVwZW5kcyBvbiAoQVJNNjQgJmFtcDsmYW1wOyBBUkNIX01FRElBVEVLKSB8fCBDT01QSUxFX1RFU1QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZQppbmRleCA2ZjljYWNmN2Y5MDY1Li43MTIzOWU5MmFhNTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL01ha2VmaWxlCkBAIC0xLDQgJiM0MzsxLDUgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MztvYmotJChDT05GSUdfRUNPTkVUX0ZFX1NPQ19QSFkpCQkmIzQzOz0gZWNvbmV0LWZlLXNvYy5vCiBvYmotJChDT05GSUdfTUVESUFURUtfMlA1R0VfUEhZKQkmIzQzOz0gbXRrLTJwNWdlLm8KIG9iai0kKENPTkZJR19NRURJQVRFS19GRV9TT0NfUEhZKQkmIzQzOz0gbXRrLWZlLXNvYy5vCiBvYmotJChDT05GSUdfTUVESUFURUtfR0VfUEhZKQkJJiM0Mzs9IG10ay1nZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5jNWRiYjMyYTVkMWFiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYwpAQCAtMCwwICYjNDM7MSw2MzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vcGh5bGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXRrLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQW4gb2xkZXIgdmVyc2lvbiBvZiB0aGlzIFBIWSBoYXJkd2FyZSB1c2VzIHRoZSBJRCAwM2EyLjk0MTIuCiYjNDM7ICogVGhpcyBkcml2ZXIgZG9lcyBub3QgbWF0Y2ggb24gaXQgYmVjYXVzZSBpdCBjb2xsaWRlcyB3aXRoCiYjNDM7ICogTVRLX0dQSFlfSURfTVQ3NTMwLCBzbyB1c2VycyB3YW50aW5nIHRvIHVzZSB0aGlzIGRyaXZlciBzaG91bGQKJiM0MzsgKiBvdmVycmlkZSB0aGUgUEhZIElEIGluIHRoZSBkZXZpY2UgdHJlZSB0byAwM2EyLjk0MTQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QwkJMHgwM2EyOTQxNAomIzQzOwomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0cxCQkJMHgxMDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzIJCQkweDIwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19HMwkJCTB4MzAwMAomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0c0CQkJMHg0MDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzUJCQkweDUwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19HNgkJCTB4NjAwMAomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0c3CQkJMHg3MDAwCiYjNDM7CiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfTDAJCQkweDgwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19MMQkJCTB4OTAwMAomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wyCQkJMHhhMDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfTDMJCQkweGIwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19MNAkJCTB4YzAwMAomIzQzOwomIzQzOy8qIDQgcG9ydHMgKDgsOSwxMCwxMSkgb3IgMyBwb3J0cyAoOSwxMCwxMSkgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9MRUdBQ1lfUE9SVDBfQUREUgk4CiYjNDM7I2RlZmluZSBFQ09ORVRfRU43NTI2Q19QT1JUMF9BRERSCTkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIENhbGlicmF0aW9uIHBvbGxpbmcgZG9lcyBub3QgY29tcGxldGUgdW50aWwgRUNPTkVUX0NBTF9NSU5fQ1lDTEVTCiYjNDM7ICogY29uc2VjdXRpdmUgJiMzNDtkb25lJiMzNDsgcmVzdWx0cyBhcmUgcmVjZWl2ZWQuIFNlZTogcG9sbF9jYWxfY29tcGxldGUKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfTUlOX0NZQ0xFUwkJMTAKJiM0MzsKJiM0MzsvKgomIzQzOyAqIE1pY3Jvc2Vjb25kcyBwZXIgY2FsaWJyYXRpb24gcG9sbCBjeWNsZSwgY2FsaWJyYXRpb24gdGFrZXMgYXBwcm94aW1hdGVseQomIzQzOyAqIEVDT05FVF9DQUxfQ1lDTEVfVVMgKiBFQ09ORVRfQ0FMX01JTl9DWUNMRVMuIFRvdGFsIHNldHVwIHRpbWUgaXMgdXN1YWxseQomIzQzOyAqIGxlc3MgdGhhbiAxNTB4IHRoaXMgbnVtYmVyLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9DWUNMRV9VUwkJMTAKJiM0MzsKJiM0MzsvKiBUb3RhbCB0aW1lIGFsbG93ZWQgZm9yIGNhbGlicmF0aW9uIHBvbGxpbmcgYmVmb3JlIGVycm9yIGlzIHJldHVybmVkLiAqLwomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9USU1FT1VUX1VTCQkxMDAwMDAKJiM0MzsKJiM0MzsvKgomIzQzOyAqIE5vdGU6IFRoZXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIHdlcmUgd3JpdHRlbiB3aXRob3V0IHRoZSBiZW5lZml0IG9mIHRoZQomIzQzOyAqICAgICAgIGhhcmR3YXJlIHNwZWNpZmljYXRpb24sIHNvIG5hbWVzIGFyZSBnaXZlbiBvbmx5IHdoZXJlIHRoZSBtZWFuaW5nIGlzCiYjNDM7ICogICAgICAgZmFpcmx5IG9idmlvdXMuCiYjNDM7ICovCiYjNDM7CiYjNDM7LyogRzdSMjQgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfVFlQRV9NQVNLCQlHRU5NQVNLKDE0LCAxMikKJiM0MzsjZGVmaW5lICAgRUNPTkVUX0NBTF9UWVBFX1I1MAkJRklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHg2KQomIzQzOyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfVFhPUwkJRklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHgzKQomIzQzOyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfVFhBTVAJCUZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4NykKJiM0MzsjZGVmaW5lIEVDT05FVF9SNTBfWkNBTF9NQVNLCQlHRU5NQVNLKDExLCA2KQomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTElOX0VONzUyNkMJCUJJVCg0KQomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0VONzUyNkMJCUJJVCgxKQomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9PVVRfRU43NTI2QwkJQklUKDApCiYjNDM7CiYjNDM7LyogTDRSMjMgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxJTl9MRUdBQ1kJCUJJVCgyKQomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0xFR0FDWQkJQklUKDYpCiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMX09VVF9MRUdBQ1kJCUJJVCg0KQomIzQzOwomIzQzOyNkZWZpbmUgRUNPTkVUX0RBQ19JTl8yVgkJMHgwZjAKJiM0MzsKJiM0MzsvKiBMNFIxNyAqLwomIzQzOyNkZWZpbmUgRUNPTkVUX1RYT1NfU0lHTgkJQklUKDEzKQomIzQzOyNkZWZpbmUgRUNPTkVUX1RYT1NfTUFHCQkJR0VOTUFTSygxMiwgOCkKJiM0MzsKJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX0RFRkFVTFQJCTAKJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX01BWAkJCTMxCiYjNDM7I2RlZmluZSBFQ09ORVRfVFhPU19NSU4JCQktMzEKJiM0MzsKJiM0MzsjZGVmaW5lIEVDT05FVF9SNTBfWkNBTF9ERUZBVUxUCQkweDIwCiYjNDM7I2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfTUFYCQkweDNmCiYjNDM7CiYjNDM7LyogTDRSMjIgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9SNTBfVFhDQUxfTUFTSwkJR0VOTUFTSygxNSwgOCkKJiM0MzsjZGVmaW5lIEVDT05FVF9SNTBfUlhDQUxfTUFTSwkJR0VOTUFTSyg3LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgRUNPTkVUX1RYQU1QX0RFRkFVTFQJCTB4MTIKJiM0MzsjZGVmaW5lIEVDT05FVF9UWEFNUF9NQVgJCTB4M2YKJiM0MzsKJiM0MzsvKiBaQ0FMIGNvbXBlbnNhdGlvbiB0YWJsZSBwZXIgY2hpcCwgcGVyIHBoeSwgUlggJiM0MzsgVFggKi8KJiM0MztzdHJ1Y3QgY29tcGVuc2F0aW9uIHsKJiM0MzsJczggemNhbF90eDsKJiM0MzsJczggemNhbF9yeDsKJiM0MzsJczggdHhvczsKJiM0MzsJczggYW1wOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjb21wZW5zYXRpb24gZW43NTEyMjFfY29tcFsyXVs0XSA9IHsKJiM0MzsJewomIzQzOwkJLyogTGVnYWN5ICovCiYjNDM7CQl7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gLTQsIC50eG9zID0gMCwgLmFtcCA9IDEgfSwgLyogIDggKi8KJiM0MzsJCXsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSAtNCwgLnR4b3MgPSAxLCAuYW1wID0gMiB9LCAvKiAgOSAqLwomIzQzOwkJeyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IC00LCAudHhvcyA9IDEsIC5hbXAgPSAxIH0sIC8qIDEwICovCiYjNDM7CQl7IC56Y2FsX3R4ID0gLTIsIC56Y2FsX3J4ID0gLTgsIC50eG9zID0gMSwgLmFtcCA9IDEgfSwgLyogMTEgKi8KJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLyogRU43NTI2QyAqLwomIzQzOwkJeyAuemNhbF90eCA9IDMsICAuemNhbF9yeCA9IDYsIC50eG9zID0gMSwgLmFtcCA9IDAgfSwgLyogIDkgKi8KJiM0MzsJCXsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSA1LCAudHhvcyA9IDEsIC5hbXAgPSAtMSB9LCAvKiAxMCAqLwomIzQzOwkJeyAuemNhbF90eCA9IDYsICAuemNhbF9yeCA9IDYsIC50eG9zID0gMSwgLmFtcCA9IC0xIH0sIC8qIDExICovCiYjNDM7CQl7IH0sIC8qIFVudXNlZCAqLwomIzQzOwl9CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgdTggemNhbF90b19yNTBvaG1bNjRdID0gewomIzQzOwkxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjYsIDEyMywgMTIwLCAxMTcsIDExNCwgMTEyLCAxMTAsIDEwNywgMTA1LCAxMDMsCiYjNDM7CTEwMSwgIDk5LCAgOTcsICA3OSwgIDc3LCAgNzUsICA3NCwgIDcyLCAgNzAsICA2OSwgIDY3LCAgNjYsICA2NSwgIDQ3LCAgNDYsICA0NSwKJiM0MzsJIDQzLCAgNDIsICA0MSwgIDQwLCAgMzksICAzOCwgIDM3LCAgMzYsICAzNCwgIDM0LCAgMzMsICAzMiwgIDE1LCAgMTQsICAxMywgIDEyLAomIzQzOwkgMTEsICAxMCwgIDEwLCAgIDksICAgOCwgICA3LCAgIDcsICAgNiwgICA1LCAgIDQsICAgNCwgICAzLCAgIDIsICAgMiwgICAxLCAgIDEKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCB7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGNvbXBlbnNhdGlvbiBnZXRfY3RhYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwl1OCBwaHlfb2Zmc2V0OwomIzQzOwomIzQzOwlwaHlfb2Zmc2V0ID0gcGh5ZGV2LSZndDttZGlvLmFkZHIgLSBzaGFyZWQtJmd0O3BoeWRldl9wMC0mZ3Q7bWRpby5hZGRyOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKHBoeV9vZmZzZXQgJmd0Oz0gQVJSQVlfU0laRShlbjc1MTIyMV9jb21wWzBdKSkpCiYjNDM7CQlyZXR1cm4gKHN0cnVjdCBjb21wZW5zYXRpb24pIHt9OwomIzQzOwomIzQzOwlyZXR1cm4gZW43NTEyMjFfY29tcFtwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Q11bcGh5X29mZnNldF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9jYWxpbl9mbGFnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJdTE2IHNldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7cGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7CiYjNDM7CQkvKiBHN1IyNCBpcyBzaGFyZWQgc28gcGh5X21vZGlmeV9wYWdlZCBpcyByZXF1aXJlZCAqLwomIzQzOwkJc2V0ID0gZW5hYmxlZCA/IEVDT05FVF9DQUxJTl9FTjc1MjZDIDogMDsKJiM0MzsJCXBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LAomIzQzOwkJCQkgRUNPTkVUX0NBTElOX0VONzUyNkMsIHNldCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0xFR0FDWSA6IDA7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MNCwgMjMsIHNldCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IGNhbF9jb21wbGV0ZV9jdHggewomIzQzOwl1MTYgY29uc2VjdXRpdmVfdHJ1ZXMJOiAxNTsKJiM0MzsJYm9vbCBzdGFydGVkCQk6IDE7CiYjNDM7CWJvb2wgb2JzZXJ2ZWRfZmFsc2UJOiAxOwomIzQzOwl1MTYgYWJvcnRlZF90cmllcwk6IDc7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwb2xsX2NhbF9jb21wbGV0ZSAtIHBvbGwgZm9yIGNhbGlicmF0aW9uIGNvbXBsZXRpb24uCiYjNDM7ICoKJiM0MzsgKiBCZWNhdXNlIHNvbWUgbGVnYWN5IGNoaXBzIGFyZSBrbm93biB0byBiZSB1bnJlbGlhYmxlIChmYWxzZSBwb3NpdGl2ZXMpLAomIzQzOyAqIHJlZmVyZW5jZSBjb2RlIGFkZHMgMTAsMDAwdXMgb2YgZml4ZWQgZGVsYXkgcGVyIGNhbGlicmF0aW9uIGN5Y2xlLgomIzQzOyAqIFByYWN0aWNhbGx5LCB0aGVyZSBhcmUgYWJvdXQgMTAtNTAgY2FsaWJyYXRpb24gY3ljbGVzIGZvciBlYWNoIG9mIHRoZQomIzQzOyAqIHRocmVlIHR1bmFibGVzLCBzbyBhZGRpbmcgYSBzaWduaWZpY2FudCBmaXhlZCBkZWxheSBpcyBjb3N0bHkuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGltcGxlbWVudGF0aW9uIGluc3RlYWQgc3RhcnRzIHdpdGggQ0FMSU4gZGlzYWJsZWQsIHBvbGxzIGZvcgomIzQzOyAqIGRvbmUgc3RhdHVzIGZhbHNlLCB0aGVuIGVuYWJsZXMgQ0FMSU4gYW5kIHBvbGxzIHVudGlsIGEgdHJ1ZSBkb25lCiYjNDM7ICogc3RhdHVzIGlzIHJlY29yZGVkIEVDT05FVF9DQUxfTUlOX0NZQ0xFUyB0aW1lcyBjb25zZWN1dGl2ZWx5LgomIzQzOyAqCiYjNDM7ICogQHJldHVybnM6CiYjNDM7ICogICAmbHQ7IDAgb24gZXJyb3IKJiM0MzsgKiAgIDAgbm90IHlldCBjb21wbGV0ZQomIzQzOyAqICAgMSBjb21wbGV0ZSBmYWxzZQomIzQzOyAqICAgMiBjb21wbGV0ZSB0cnVlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBwb2xsX2NhbF9jb21wbGV0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCSAgICAgc3RydWN0IGNhbF9jb21wbGV0ZV9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IGRvbmVfbWFzazsKJiM0MzsJaW50IG91dF9tYXNrOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHsKJiM0MzsJCXJldCA9IHBoeV9yZWFkX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCk7CiYjNDM7CQlkb25lX21hc2sgPSBFQ09ORVRfQ0FMX0RPTkVfRU43NTI2QzsKJiM0MzsJCW91dF9tYXNrID0gRUNPTkVUX0NBTF9PVVRfRU43NTI2QzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHBoeV9yZWFkX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDQsIDIzKTsKJiM0MzsJCWRvbmVfbWFzayA9IEVDT05FVF9DQUxfRE9ORV9MRUdBQ1k7CiYjNDM7CQlvdXRfbWFzayA9IEVDT05FVF9DQUxfT1VUX0xFR0FDWTsKJiM0MzsJfQomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmICgocmV0ICZhbXA7IGRvbmVfbWFzaykgPT0gMCkgewomIzQzOwkJY3R4LSZndDtvYnNlcnZlZF9mYWxzZSA9IHRydWU7CiYjNDM7CQljdHgtJmd0O2Fib3J0ZWRfdHJpZXMgJiM0Mzs9IChjdHgtJmd0O2NvbnNlY3V0aXZlX3RydWVzICZndDsgMCk7CiYjNDM7CQljdHgtJmd0O2NvbnNlY3V0aXZlX3RydWVzID0gMDsKJiM0MzsKJiM0MzsJCWlmICghY3R4LSZndDtzdGFydGVkKSB7CiYjNDM7CQkJc2V0X2NhbGluX2ZsYWcocGh5ZGV2LCB0cnVlKTsKJiM0MzsJCQljdHgtJmd0O3N0YXJ0ZWQgPSB0cnVlOwomIzQzOwkJCXJldHVybiBwb2xsX2NhbF9jb21wbGV0ZShwaHlkZXYsIGN0eCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwljdHgtJmd0O2NvbnNlY3V0aXZlX3RydWVzJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJaWYgKGN0eC0mZ3Q7Y29uc2VjdXRpdmVfdHJ1ZXMgJmx0OyBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgfHwgIWN0eC0mZ3Q7b2JzZXJ2ZWRfZmFsc2UpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGN0eC0mZ3Q7YWJvcnRlZF90cmllcykKJiM0MzsJCXBoeWRldl93YXJuKHBoeWRldiwgJiMzNDtDYWxpYnJhdGlvbiBjeWNsZSAlZCBmYWxzZSBwb3NpdGl2ZXNcbiYjMzQ7LAomIzQzOwkJCSAgICBjdHgtJmd0O2Fib3J0ZWRfdHJpZXMpOwomIzQzOwomIzQzOwlyZXR1cm4gKChyZXQgJmFtcDsgb3V0X21hc2spICE9IDApID8gMiA6IDE7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBvbGxfY2FsX2NvbXBsZXRlIC0gY2hlY2sgZm9yIGNhbGlicmF0aW9uIHJlZ2lzdGVyCiYjNDM7ICogQHJldHVybnM6IC1lcnJvciBvciAxIGlmIGNhbGlicmF0aW9uIHJlc3VsdCBpcyB0cnVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY2FsX2NvbXBsZXRlX2N0eCBjY3R4ID0ge307CiYjNDM7CWludCBvdXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXNldF9jYWxpbl9mbGFnKHBoeWRldiwgZmFsc2UpOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dChwb2xsX2NhbF9jb21wbGV0ZSwgb3V0LCBvdXQgIT0gMCwKJiM0MzsJCQkJRUNPTkVUX0NBTF9DWUNMRV9VUywgRUNPTkVUX0NBTF9USU1FT1VUX1VTLAomIzQzOwkJCQlmYWxzZSwgcGh5ZGV2LCAmYW1wO2NjdHgpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7Q2FsaWJyYXRpb24gdGltZW91dCAlZCAoJWQgLyAlZCAvICVkIC8gJWQpXG4mIzM0OywKJiM0MzsJCQkgICByZXQsIGNjdHguY29uc2VjdXRpdmVfdHJ1ZXMsIGNjdHgub2JzZXJ2ZWRfZmFsc2UsCiYjNDM7CQkJICAgY2N0eC5hYm9ydGVkX3RyaWVzLCBjY3R4LnN0YXJ0ZWQpOwomIzQzOwl9IGVsc2UgaWYgKG91dCAmbHQ7IDApIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0NhbGlicmF0aW9uIGVycm9yICVkXG4mIzM0Oywgb3V0KTsKJiM0MzsJCXJldCA9IG91dDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IG91dCAmZ3Q7IDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2V0X2NhbGluX2ZsYWcocGh5ZGV2LCBmYWxzZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfcjUwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7CiYjNDM7CWludCB6Y2FsX3N6ID0gQVJSQVlfU0laRSh6Y2FsX3RvX3I1MG9obSk7CiYjNDM7CXU4IHJnX3pjYWxfY3RybCA9IEVDT05FVF9SNTBfWkNBTF9ERUZBVUxUOwomIzQzOwlpbnQgaW5pdGlhbF9jb21wX291dDsKJiM0MzsJaW50IHBvbGFyaXR5ID0gMDsKJiM0MzsJaW50IGNvbXBfb3V0OwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJdTE2IHJ4Y2FsOwomIzQzOwl1MTYgdHhjYWw7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9SNTApOwomIzQzOwllbHNlCiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7CiYjNDM7CiYjNDM7CXBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDEwMDAsIDB4MTAwMCk7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWlmIChwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykKJiM0MzsJCQlwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwKJiM0MzsJCQkJCSBFQ09ORVRfUjUwX1pDQUxfTUFTSywKJiM0MzsJCQkJCSBGSUVMRF9QUkVQKEVDT05FVF9SNTBfWkNBTF9NQVNLLAomIzQzOwkJCQkJCSAgICByZ196Y2FsX2N0cmwpKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjYsCiYjNDM7CQkJCQlyZ196Y2FsX2N0cmwpOwomIzQzOwomIzQzOwkJY29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTsKJiM0MzsJCWlmIChjb21wX291dCAmbHQ7IDApIHsKJiM0MzsJCQlyZXQgPSBjb21wX291dDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChwb2xhcml0eSA9PSAwKSB7CiYjNDM7CQkJLyogRmlyc3QgY3ljbGUgKi8KJiM0MzsJCQlpbml0aWFsX2NvbXBfb3V0ID0gY29tcF9vdXQ7CiYjNDM7CQkJcG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTsKJiM0MzsJCX0gZWxzZSBpZiAoaW5pdGlhbF9jb21wX291dCAhPSBjb21wX291dCkgewomIzQzOwkJCS8qIEZvdW5kICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZ196Y2FsX2N0cmwgJiM0Mzs9IHBvbGFyaXR5OwomIzQzOwomIzQzOwkJaWYgKHJnX3pjYWxfY3RybCAmZ3Q7IEVDT05FVF9SNTBfWkNBTF9NQVgpIHsKJiM0MzsJCQlyZXQgPSAxOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJ4Y2FsID0gbWF4KDAsIG1pbih6Y2FsX3N6IC0gMSwgY3RhYi56Y2FsX3J4ICYjNDM7IHJnX3pjYWxfY3RybCkpOwomIzQzOwl0eGNhbCA9IG1heCgwLCBtaW4oemNhbF9zeiAtIDEsIGN0YWIuemNhbF90eCAmIzQzOyByZ196Y2FsX2N0cmwpKTsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMiwKJiM0MzsJCQlGSUVMRF9QUkVQKEVDT05FVF9SNTBfVFhDQUxfTUFTSywgdHhjYWwpIHwKJiM0MzsJCQlGSUVMRF9QUkVQKEVDT05FVF9SNTBfUlhDQUxfTUFTSywgcnhjYWwpKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CS8qIFplcm8gb3V0IHJlZ2lzdGVycyAqLwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpCiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApOwomIzQzOwllbHNlCiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfdHhfb2Zmc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7CiYjNDM7CWludCBpbml0aWFsX2NvbXBfb3V0OwomIzQzOwlpbnQgcG9sYXJpdHkgPSAwOwomIzQzOwlpbnQgb2Zmc2V0ID0gRUNPTkVUX1RYT1NfREVGQVVMVDsKJiM0MzsJdTE2IG9mZnNldF9iaW47CiYjNDM7CWludCBjb21wX291dDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgyMTAwKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgMHg1MjAwKTsgLyogZml4IE1ESSAqLwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9UWE9TKTsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDQwMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4NDgwMCk7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDRjMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzQsIDIxLCAweDA4MDAsIDB4MDgwMCk7CiYjNDM7CiYjNDM7CXBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAyYzAsIDB4MDJjMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4ODAwMCk7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCW9mZnNldF9iaW4gPSBGSUVMRF9QUkVQKEVDT05FVF9UWE9TX01BRywgYWJzKG9mZnNldCkpOwomIzQzOwkJaWYgKG9mZnNldCAmbHQ7IDApCiYjNDM7CQkJb2Zmc2V0X2JpbiB8PSBFQ09ORVRfVFhPU19TSUdOOwomIzQzOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAxNywgb2Zmc2V0X2Jpbik7CiYjNDM7CiYjNDM7CQljb21wX291dCA9IGVuNzUxMjIxX2ZlcGh5X2NhbF9jeWNsZShwaHlkZXYpOwomIzQzOwkJaWYgKGNvbXBfb3V0ICZsdDsgMCkgewomIzQzOwkJCXJldCA9IGNvbXBfb3V0OwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHBvbGFyaXR5ID09IDApIHsKJiM0MzsJCQkvKiBGaXJzdCBjeWNsZSAqLwomIzQzOwkJCWluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDsKJiM0MzsJCQlwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxOwomIzQzOwkJfSBlbHNlIGlmIChpbml0aWFsX2NvbXBfb3V0ICE9IGNvbXBfb3V0KSB7CiYjNDM7CQkJLyogRm91bmQgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9mZnNldCAmIzQzOz0gcG9sYXJpdHk7CiYjNDM7CiYjNDM7CQlpZiAob2Zmc2V0ICZndDsgRUNPTkVUX1RYT1NfTUFYIHx8IG9mZnNldCAmbHQ7IEVDT05FVF9UWE9TX01JTikgewomIzQzOwkJCXJldCA9IDE7CiYjNDM7CQkJb2Zmc2V0ID0gMDsKJiM0MzsJCQlnb3RvIHNldF92YWw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2Zmc2V0ICYjNDM7PSBjdGFiLnR4b3MgKiBwb2xhcml0eTsKJiM0MzsKJiM0MzsJaWYgKG9mZnNldCAmZ3Q7IEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgJmx0OyBFQ09ORVRfVFhPU19NSU4pCiYjNDM7CQlvZmZzZXQgLT0gY3RhYi50eG9zICogcG9sYXJpdHk7CiYjNDM7CiYjNDM7c2V0X3ZhbDoKJiM0MzsJb2Zmc2V0X2JpbiA9IEZJRUxEX1BSRVAoRUNPTkVUX1RYT1NfTUFHLCBhYnMob2Zmc2V0KSk7CiYjNDM7CWlmIChvZmZzZXQgJmx0OyAwKQomIzQzOwkJb2Zmc2V0X2JpbiB8PSBFQ09ORVRfVFhPU19TSUdOOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDQsIDE3LCBvZmZzZXRfYmluKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIDB4MDAwMCk7CiYjNDM7CWVsc2UKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChzaGFyZWQtJmd0O3BoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV90eF9hbXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJc3RydWN0IGNvbXBlbnNhdGlvbiBjdGFiID0gZ2V0X2N0YWIocGh5ZGV2KTsKJiM0MzsJaW50IGluaXRpYWxfY29tcF9vdXQ7CiYjNDM7CXU4IHR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUOwomIzQzOwlpbnQgcG9sYXJpdHkgPSAwOwomIzQzOwlpbnQgY29tcF9vdXQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDAsIDB4MjEwMCk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTIwMyk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4ODAwMCB8IEVDT05FVF9EQUNfSU5fMlYpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzQsIDIxLCAweDA4MDApOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAyYzApOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDQsIDIxLCAweDAwMDApOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9UWEFNUCk7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDA2MDApOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweGNhMDApOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwIHwgMHgwNDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIzLCB0eF9hbXApOwomIzQzOwomIzQzOwkJY29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTsKJiM0MzsJCWlmIChjb21wX291dCAmbHQ7IDApIHsKJiM0MzsJCQlyZXQgPSBjb21wX291dDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChwb2xhcml0eSA9PSAwKSB7CiYjNDM7CQkJLyogRmlyc3QgY3ljbGUgKi8KJiM0MzsJCQlpbml0aWFsX2NvbXBfb3V0ID0gY29tcF9vdXQ7CiYjNDM7CQkJcG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTsKJiM0MzsJCX0gZWxzZSBpZiAoaW5pdGlhbF9jb21wX291dCAhPSBjb21wX291dCkgewomIzQzOwkJCS8qIEZvdW5kICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl0eF9hbXAgJiM0Mzs9IHBvbGFyaXR5OwomIzQzOwomIzQzOwkJaWYgKHR4X2FtcCAmZ3Q7IEVDT05FVF9UWEFNUF9NQVgpIHsKJiM0MzsJCQlyZXQgPSAxOwomIzQzOwkJCXR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUOwomIzQzOwkJCWdvdG8gc2V0X3ZhbDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodHhfYW1wICYjNDM7IGN0YWIuYW1wICZsdDsgRUNPTkVUX1RYQU1QX01BWCkKJiM0MzsJCXR4X2FtcCAmIzQzOz0gY3RhYi5hbXA7CiYjNDM7CiYjNDM7c2V0X3ZhbDoKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykgewomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgMHgwMDAwKTsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MDAwMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwl1MTYgbDByMjZfdGVtcDsKJiM0MzsJaW50IHJldDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmICghc2hhcmVkLSZndDtwaHlkZXZfcDApIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O1BvcnQgemVybyBtdXN0IGJlIGNvbmZpZ3VyZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDttZGlvLmFkZHIgJmx0OyBzaGFyZWQtJmd0O3BoeWRldl9wMC0mZ3Q7bWRpby5hZGRyKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKiBHbG9iYWwgcmVnaXN0ZXJzICovCiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNCwgMjYsIDB4ODA0NCk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjEsIDB4MDBlYSk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjcsIDB4MDJmMCk7CiYjNDM7CiYjNDM7CS8qIExvY2FsIHJlZ2lzdGVycyAqLwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweGEwMDApOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDEsIDIyLCAweGYwMDApOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIyLCAweDQ0NDQpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDI0LCAweDBjMGMpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDI4LCAweDdjNDQpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDMwLCAweDAwMDUpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDE3LCAweDAwMDApOwomIzQzOwomIzQzOwkvKiBGb3IgRTEvRTIsIEUzIHJlcXVpcmVzIDB4MjIyMCwgYnV0IG5vIGtub3duIEVONzUxMjIxIEUzIGNoaXBzIGV4aXN0ICovCiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MjIwMCk7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykgewomIzQzOwkJIC8qIDEwME1iIHR4IHAyel9taWQsIHoybl9taWQsIHoybl9vdnNfcG9zdCwgbjJ6X21pZCAqLwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyMiwgMHgwMDMwKTsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjUsIDB4MDI0OCk7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDI3LCAweDAyZjApOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyOCwgMHgwMjMwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZF9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWwwcjI2X3RlbXAgPSByZXQ7CiYjNDM7CiYjNDM7CS8qIEJHIHZvbHRhZ2UgKi8KJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0cyLCAyNSwgMHgxMGMwKTsKJiM0MzsKJiM0MzsJLyogTURJICovCiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTYwMyk7CiYjNDM7CiYjNDM7CS8qIGRpc2FibGUgdHggc2xldyBjb250cm9sICovCiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMjEsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgyMTAwKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBlbjc1MTIyMV9mZXBoeV9yNTAocGh5ZGV2KTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgNTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJldCA9IGVuNzUxMjIxX2ZlcGh5X3R4X29mZnNldChwaHlkZXYpOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyA1OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gZW43NTEyMjFfZmVwaHlfdHhfYW1wKHBoeWRldik7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0cxLCAyNiwgMHgwMDAwKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgbDByMjZfdGVtcCk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjIsIDB4NDQ0NCk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgzMTAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBwb3J0MCA9IEVDT05FVF9FTjc1MjZDX1BPUlQwX0FERFI7CiYjNDM7CXN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkOwomIzQzOwlzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgIT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpCiYjNDM7CQlwb3J0MCA9IEVDT05FVF9MRUdBQ1lfUE9SVDBfQUREUjsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9waHlfcGFja2FnZV9qb2luKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldiwgcGh5ZGV2LCBwb3J0MCwKJiM0MzsJCQkJICAgIHNpemVvZihzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O21kaW8uYWRkciA9PSBwb3J0MCkKJiM0MzsJCXNoYXJlZC0mZ3Q7cGh5ZGV2X3AwID0gcGh5ZGV2OwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3ByaXYgPSBwcml2OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGVuNzUxMjIxX2ZlcGh5X2RyaXZlcltdID0gewomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpLAomIzQzOwkJLm5hbWUJCT0gJiMzNDtFY29OZXQgRU43NTEyMjEgRkVQSFkmIzM0OywKJiM0MzsJCS5jb25maWdfaW5pdAk9IGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0LAomIzQzOwkJLmNvbmZpZ19pbnRyCT0gZ2VucGh5X25vX2NvbmZpZ19pbnRyLAomIzQzOwkJLmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssCiYjNDM7CQkucHJvYmUJCT0gZW43NTEyMjFfZmVwaHlfcHJvYmUsCiYjNDM7CQkucmVhZF9wYWdlCT0gbXRrX3BoeV9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZQk9IG10a19waHlfd3JpdGVfcGFnZSwKJiM0MzsJfQomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BoeV9kcml2ZXIoZW43NTEyMjFfZmVwaHlfZHJpdmVyKTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGVuNzUxMjIxX2ZlcGh5X3RibFtdID0gewomIzQzOwl7IFBIWV9JRF9NQVRDSF9FWEFDVChFQ09ORVRfRkVQSFlfSURfRU43NTI2QykgfSwKJiM0MzsJeyB9CiYjNDM7fTsKJiM0MzsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtFY29OZXQgU29DIDEwLzEwMCBFdGhlcm5ldCBQSFkgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtDYWxlYiBKYW1lcyBEZUxpc2xlICZsdDtjamRAY2pkbnMuZnImZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzOwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgZW43NTEyMjFfZmVwaHlfdGJsKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDk4CgkJCQkJCQlvdXRwdXQ6IDIxOQoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBDb25jZXJucyBBZGRyZXNzZWQ6IEVjb05ldCBQSFkgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgcmV2aWV3ZWQgdGhlIGNvZGUgZm9yIHRoaXMgbmV3IEVjb05ldCAxMC8xMDAgU29DIEV0aGVybmV0IFBIWSBkcml2ZXIsIGBlY29uZXQtZmUtc29jLmNgLCBhbmQgSSYjMzk7bSBmZWVsaW5nIHByZXR0eSBnb29kIGFib3V0IGl0IGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gSXQmIzM5O3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIFBIWSBkcml2ZXIg4oCTIGltcGxlbWVudGluZyBzdGFuZGFyZCBjYWxsYmFja3MgbGlrZSBgY29uZmlnX2luaXRgLCBgcHJvYmVgLCBhbmQgdGhlIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMuIFRoZSBrZXkgaXMgaW4gaG93IGl0IGhhbmRsZXMgbWVtb3J5IGFuZCByZWdpc3RlciBhY2Nlc3MuCgpJIHNlZSBpdCB1dGlsaXplcyBzdGFuZGFyZCBQSFlsaWIgZnVuY3Rpb25zIGxpa2UgYHBoeV93cml0ZV9wYWdlZGAsIGBwaHlfcmVhZF9wYWdlZGAsIGFuZCBgcGh5X21vZGlmeV9wYWdlZGAgdG8gY29uZmlndXJlIHRoZSBQSFkuIEl0IGFsc28gdXNlcyBgZGV2bV9waHlfcGFja2FnZV9qb2luYCBhbmQgYWxsb2NhdGVzIGEgcHJpdmF0ZSBgbXRrX3NvY3BoeV9wcml2YCBzdHJ1Y3R1cmUuIFRoaXMgaXMgYWxsIHN0YW5kYXJkLgoKSW1wb3J0YW50bHksIHRoZXJlJiMzOTtzIG5vIGludGVyYWN0aW9uIHdpdGggdXNlci1zcGFjZSBkYXRhIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBXZSYjMzk7cmUgdGFsa2luZyBkaXJlY3QgTURJTyByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIHBvdGVudGlhbCBsZWFrcy4KClRoZSBhbGxvY2F0aW9uIG9mIHRoZSBgcHJpdmAgc3RydWN0dXJlIHVzaW5nIGBkZXZtX2t6YWxsb2NgIGlzIGVzcGVjaWFsbHkgcmVhc3N1cmluZy4gVGhhdCYjMzk7cyBhIHplcm8taW5pdGlhbGl6ZWQgYWxsb2NhdGlvbiwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudCB0byBhdm9pZCB0aG9zZSB0cmlja3kgS01TQU4gaXNzdWVzLiBBbmQgYGRldm1fcGh5X3BhY2thZ2Vfam9pbmAgaXRzZWxmIGhhbmRsZXMgdGhlIHNoYXJlZCBzdHJ1Y3R1cmUgaW4gYSBzaW1pbGFyIHNhZmUgbWFubmVyLCBpbnRlcm5hbGx5IGNhbGxpbmcgYGt6YWxsb2NgIG9yIGVxdWl2YWxlbnQsIHNvIHRoYXQmIzM5O3MgZ29vZC4KClRvIGJlIGV4dHJhIHN1cmUsIEkganVzdCBkb3VibGUtY2hlY2tlZCBob3cgYGRldm1fcGh5X3BhY2thZ2Vfam9pbmAgZG9lcyBpdHMgdGhpbmcsIHRvby4gSXQmIzM5O3MgYWxsIHplcm9lZCBvdXQgdGhlcmUsIGluY2x1ZGluZyB0aGUgc2hhcmVkIGRhdGEgYW5kIGBwcml2YC4gSSBzZWUgYHN0cnVjdCBjYWxfY29tcGxldGVfY3R4IGNjdHggPSB7fTtgIGlzIHplcm8taW5pdGlhbGl6ZWQgYW5kIGBnZXRfY3RhYihwaHlkZXYpYCByZXR1cm5zIGEgZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGJ5IHZhbHVlLiBFdmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGRyaXZlciwgdGhlIHVzZSBvZiBzdGFuZGFyZCBhbmQgc2FmZSBtZW1vcnkgYWxsb2NhdGlvbiBtZXRob2RzLCBhbmQgdGhlIGxhY2sgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgaW50ZXJhY3Rpbmcgd2l0aCB1c2VyIHNwYWNlLCBJJiMzOTttIGNvbmZpZGVudCB3ZSB3b24mIzM5O3QgYmUgaW50cm9kdWNpbmcgYW55IEtNU0FOLXNwZWNpZmljIGJ1Z3MgaGVyZS4gQW55IGlzc3VlcyBhcmUgZ29pbmcgdG8gYmUgcnVuLW9mLXRoZS1taWxsIHRoaW5ncyB0aGF0IEtBU0FOIHdpbGwgY2F0Y2g6IGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0NzLiBUaGUgZHJpdmVyIHByaW1hcmlseSBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZSByZWdpc3RlcnMgdmlhIE1ESU8gKHVzaW5nIHBoeWxpYiBmdW5jdGlvbnMgbGlrZSBwaHlfd3JpdGVfcGFnZWQgYW5kIHBoeV9yZWFkX3BhZ2VkKSBhbmQgcGVyZm9ybXMgY2FsaWJyYXRpb24gcm91dGluZXMuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoZS5nLiwgbXRrX3NvY3BoeV9wcml2IGFuZCB0aGUgc2hhcmVkIHBhY2thZ2UgZGF0YSkgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgZGV2bV9remFsbG9jIG9yIHN0YW5kYXJkIHBoeWxpYiBmdW5jdGlvbnMuIFN0YWNrIHZhcmlhYmxlcyBsaWtlIGNhbF9jb21wbGV0ZV9jdHggYXJlIGFsc28gZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1c2VyLXNwYWNlIEFQSXMsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGxzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeS1kZXBlbmRlbnQgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0NzLiBUaGUgZHJpdmVyIHByaW1hcmlseSBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZSByZWdpc3RlcnMgdmlhIE1ESU8gKHVzaW5nIHBoeWxpYiBmdW5jdGlvbnMgbGlrZSBwaHlfd3JpdGVfcGFnZWQgYW5kIHBoeV9yZWFkX3BhZ2VkKSBhbmQgcGVyZm9ybXMgY2FsaWJyYXRpb24gcm91dGluZXMuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoZS5nLiwgbXRrX3NvY3BoeV9wcml2IGFuZCB0aGUgc2hhcmVkIHBhY2thZ2UgZGF0YSkgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgZGV2bV9remFsbG9jIG9yIHN0YW5kYXJkIHBoeWxpYiBmdW5jdGlvbnMuIFN0YWNrIHZhcmlhYmxlcyBsaWtlIGNhbF9jb21wbGV0ZV9jdHggYXJlIGFsc28gZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1c2VyLXNwYWNlIEFQSXMsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGxzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeS1kZXBlbmRlbnQgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MTg6NDIuNjI5NTE4ODA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MDA4NjgzMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVDT05FVF9GRV9TT0NfUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW43NTEyMjFfZmVwaHlfcHJvYmVcIixcbiAgICBcImVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIEVjb05ldCAxMC8xMDAgU29Dcy4gVGhlIGRyaXZlciBwcmltYXJpbHkgaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIHZpYSBNRElPICh1c2luZyBwaHlsaWIgZnVuY3Rpb25zIGxpa2UgcGh5X3dyaXRlX3BhZ2VkIGFuZCBwaHlfcmVhZF9wYWdlZCkgYW5kIHBlcmZvcm1zIGNhbGlicmF0aW9uIHJvdXRpbmVzLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGUuZy4sIG10a19zb2NwaHlfcHJpdiBhbmQgdGhlIHNoYXJlZCBwYWNrYWdlIGRhdGEpIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGRldm1fa3phbGxvYyBvciBzdGFuZGFyZCBwaHlsaWIgZnVuY3Rpb25zLiBTdGFjayB2YXJpYWJsZXMgbGlrZSBjYWxfY29tcGxldGVfY3R4IGFyZSBhbHNvIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdXNlci1zcGFjZSBBUElzLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3Rscywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnktZGVwZW5kZW50IGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQSFkgZHJpdmVyIGZvciBFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzIChgZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY2ApLiBQSFkgZHJpdmVycyBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgZW11bGF0aW5nIGFuIE1ESU8gYnVzLiBGb3IgZXhhbXBsZSwgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoc3VjaCBhcyBgc21zYzk1eHhgKSB2aWEgdGhlIGB2aGNpYCBkcml2ZXIuIFdoZW4gdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgaXMgcHJvYmVkLCBpdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHNjYW5zIGZvciBQSFlzIGJ5IHNlbmRpbmcgTURJTyByZWFkIHJlcXVlc3RzICh3aGljaCB0cmFuc2xhdGUgdG8gVVNCIGNvbnRyb2wgbWVzc2FnZXMpLiBCeSByZXR1cm5pbmcgdGhlIHNwZWNpZmljIFBIWSBJRCAoYDB4MDNhMjk0MTRgKSBkdXJpbmcgdGhlIE1ESU8gc2NhbiwgdGhlIE1ESU8gYnVzIHdpbGwgaW5zdGFudGlhdGUgYSBQSFkgZGV2aWNlIHdpdGggdGhpcyBJRCwgdHJpZ2dlcmluZyB0aGUgcHJvYmUgYW5kIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyBvZiB0aGUgYGVjb25ldC1mZS1zb2NgIFBIWSBkcml2ZXIuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToxODo0Mi42Mjk1MjY3NjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MTQxNDc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0N2JiYzQzNmRlYzI0NTA0YzA3MDMzMGM2ZDQ3Yjc5MTkzMTY4MTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTk6MTg6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IDQ2MGNiNzI2ODg0NTAuLjdjYTNkOGQwOGM2OTMgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC05MjUzLDYgKzkyNTMsMTIgQEAgVzpcXHRodHRwczovL2xpbnV4dHYub3JnXFxuIFE6XFx0aHR0cDovL3BhdGNod29yay5saW51eHR2Lm9yZy9wcm9qZWN0L2xpbnV4LW1lZGlhL2xpc3QvXFxuIEY6XFx0ZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2VjMTAwKlxcbiBcXG4rRUNPTkVUIEVUSEVSTkVUIFBIWSBEUklWRVJcXG4rTTpcXHRDYWxlYiBKYW1lcyBEZUxpc2xlIFxcdTAwM2NjamRAY2pkbnMuZnJcXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHRkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jXFxuK1xcbiBFQ09ORVQgTUlQUyBQTEFURk9STVxcbiBNOlxcdENhbGViIEphbWVzIERlTGlzbGUgXFx1MDAzY2NqZEBjamRucy5mclxcdTAwM2VcXG4gTDpcXHRsaW51eC1taXBzQHZnZXIua2VybmVsLm9yZ1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXFxuaW5kZXggM2I5Y2Y4MmMwY2IyOC4uNjRhYmY1YjY5NWFiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXFxuQEAgLTEsNCArMSwxOSBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rXFxuK2NvbmZpZyBFQ09ORVRfRkVfU09DX1BIWVxcbitcXHR0cmlzdGF0ZSBcXFwiRWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZc1xcXCJcXG4rXFx0ZGVwZW5kcyBvbiBFQ09ORVQgfHwgQ09NUElMRV9URVNUXFxuK1xcdHNlbGVjdCBNVEtfTkVUX1BIWUxJQlxcbitcXHRzZWxlY3QgUEhZX1BBQ0tBR0VcXG4rXFx0aGVscFxcbitcXHQgIFN1cHBvcnRzIEVjb05ldCBTb0MgYnVpbHQtaW4gMTAvMTAwIEV0aGVybmV0IFBIWXMuXFxuK1xcbitcXHQgIEluY2x1ZGUgc3VwcG9ydCBmb3IgYnVpbHQtaW4gRXRoZXJuZXQgUEhZcyB3aGljaCBhcmUgcHJlc2VudCBpblxcbitcXHQgIEVONzUyNkMgYmFzZWQgU29DcyAoaW5jbHVkaW5nIEVONzUyNkYpLiBJdCBjYW4gYWxzbyB3b3JrIHdpdGhcXG4rXFx0ICBsZWdhY3kgRU43NTEyIEZFIFBIWXMgd2hpY2ggaWRlbnRpZnkgYXMgMDNhMi45NDEyLCBidXQgc2luY2UgdGhpc1xcbitcXHQgIElEIGlzIHVzZWQgYnkgTUVESUFURUtfR0VfUEhZLCB1c2VycyB3YW50aW5nIHRvIGZvcmNlIHRoaXMgZHJpdmVyXFxuK1xcdCAgbXVzdCBvdmVycmlkZSB0aGUgSUQgdG8gMDNhMi45NDE0IGluIHRoZSBkZXZpY2UgdHJlZS5cXG4rXFxuIGNvbmZpZyBNRURJQVRFS18yUDVHRV9QSFlcXG4gXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIDIuNUdiIEV0aGVybmV0IFBIWXNcXFwiXFxuIFxcdGRlcGVuZHMgb24gKEFSTTY0IFxcdTAwMjZcXHUwMDI2IEFSQ0hfTUVESUFURUspIHx8IENPTVBJTEVfVEVTVFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGVcXG5pbmRleCA2ZjljYWNmN2Y5MDY1Li43MTIzOWU5MmFhNTgxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxcbkBAIC0xLDQgKzEsNSBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK29iai0kKENPTkZJR19FQ09ORVRfRkVfU09DX1BIWSlcXHRcXHQrPSBlY29uZXQtZmUtc29jLm9cXG4gb2JqLSQoQ09ORklHX01FRElBVEVLXzJQNUdFX1BIWSlcXHQrPSBtdGstMnA1Z2Uub1xcbiBvYmotJChDT05GSUdfTUVESUFURUtfRkVfU09DX1BIWSlcXHQrPSBtdGstZmUtc29jLm9cXG4gb2JqLSQoQ09ORklHX01FRElBVEVLX0dFX1BIWSlcXHRcXHQrPSBtdGstZ2Uub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzVkYmIzMmE1ZDFhYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jXFxuQEAgLTAsMCArMSw2MzIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCIuLi9waHlsaWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm10ay5oXFxcIlxcbitcXG4rLypcXG4rICogQW4gb2xkZXIgdmVyc2lvbiBvZiB0aGlzIFBIWSBoYXJkd2FyZSB1c2VzIHRoZSBJRCAwM2EyLjk0MTIuXFxuKyAqIFRoaXMgZHJpdmVyIGRvZXMgbm90IG1hdGNoIG9uIGl0IGJlY2F1c2UgaXQgY29sbGlkZXMgd2l0aFxcbisgKiBNVEtfR1BIWV9JRF9NVDc1MzAsIHNvIHVzZXJzIHdhbnRpbmcgdG8gdXNlIHRoaXMgZHJpdmVyIHNob3VsZFxcbisgKiBvdmVycmlkZSB0aGUgUEhZIElEIGluIHRoZSBkZXZpY2UgdHJlZSB0byAwM2EyLjk0MTQuXFxuKyAqL1xcbisjZGVmaW5lIEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDXFx0XFx0MHgwM2EyOTQxNFxcbitcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzFcXHRcXHRcXHQweDEwMDBcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzJcXHRcXHRcXHQweDIwMDBcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzNcXHRcXHRcXHQweDMwMDBcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzRcXHRcXHRcXHQweDQwMDBcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzVcXHRcXHRcXHQweDUwMDBcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzZcXHRcXHRcXHQweDYwMDBcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzdcXHRcXHRcXHQweDcwMDBcXG4rXFxuKyNkZWZpbmUgRUNPTkVUX1BHX0wwXFx0XFx0XFx0MHg4MDAwXFxuKyNkZWZpbmUgRUNPTkVUX1BHX0wxXFx0XFx0XFx0MHg5MDAwXFxuKyNkZWZpbmUgRUNPTkVUX1BHX0wyXFx0XFx0XFx0MHhhMDAwXFxuKyNkZWZpbmUgRUNPTkVUX1BHX0wzXFx0XFx0XFx0MHhiMDAwXFxuKyNkZWZpbmUgRUNPTkVUX1BHX0w0XFx0XFx0XFx0MHhjMDAwXFxuK1xcbisvKiA0IHBvcnRzICg4LDksMTAsMTEpIG9yIDMgcG9ydHMgKDksMTAsMTEpICovXFxuKyNkZWZpbmUgRUNPTkVUX0xFR0FDWV9QT1JUMF9BRERSXFx0OFxcbisjZGVmaW5lIEVDT05FVF9FTjc1MjZDX1BPUlQwX0FERFJcXHQ5XFxuK1xcbisvKlxcbisgKiBDYWxpYnJhdGlvbiBwb2xsaW5nIGRvZXMgbm90IGNvbXBsZXRlIHVudGlsIEVDT05FVF9DQUxfTUlOX0NZQ0xFU1xcbisgKiBjb25zZWN1dGl2ZSBcXFwiZG9uZVxcXCIgcmVzdWx0cyBhcmUgcmVjZWl2ZWQuIFNlZTogcG9sbF9jYWxfY29tcGxldGVcXG4rICovXFxuKyNkZWZpbmUgRUNPTkVUX0NBTF9NSU5fQ1lDTEVTXFx0XFx0MTBcXG4rXFxuKy8qXFxuKyAqIE1pY3Jvc2Vjb25kcyBwZXIgY2FsaWJyYXRpb24gcG9sbCBjeWNsZSwgY2FsaWJyYXRpb24gdGFrZXMgYXBwcm94aW1hdGVseVxcbisgKiBFQ09ORVRfQ0FMX0NZQ0xFX1VTICogRUNPTkVUX0NBTF9NSU5fQ1lDTEVTLiBUb3RhbCBzZXR1cCB0aW1lIGlzIHVzdWFsbHlcXG4rICogbGVzcyB0aGFuIDE1MHggdGhpcyBudW1iZXIuXFxuKyAqL1xcbisjZGVmaW5lIEVDT05FVF9DQUxfQ1lDTEVfVVNcXHRcXHQxMFxcbitcXG4rLyogVG90YWwgdGltZSBhbGxvd2VkIGZvciBjYWxpYnJhdGlvbiBwb2xsaW5nIGJlZm9yZSBlcnJvciBpcyByZXR1cm5lZC4gKi9cXG4rI2RlZmluZSBFQ09ORVRfQ0FMX1RJTUVPVVRfVVNcXHRcXHQxMDAwMDBcXG4rXFxuKy8qXFxuKyAqIE5vdGU6IFRoZXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIHdlcmUgd3JpdHRlbiB3aXRob3V0IHRoZSBiZW5lZml0IG9mIHRoZVxcbisgKiAgICAgICBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBzbyBuYW1lcyBhcmUgZ2l2ZW4gb25seSB3aGVyZSB0aGUgbWVhbmluZyBpc1xcbisgKiAgICAgICBmYWlybHkgb2J2aW91cy5cXG4rICovXFxuK1xcbisvKiBHN1IyNCAqL1xcbisjZGVmaW5lIEVDT05FVF9DQUxfVFlQRV9NQVNLXFx0XFx0R0VOTUFTSygxNCwgMTIpXFxuKyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfUjUwXFx0XFx0RklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHg2KVxcbisjZGVmaW5lICAgRUNPTkVUX0NBTF9UWVBFX1RYT1NcXHRcXHRGSUVMRF9QUkVQKEVDT05FVF9DQUxfVFlQRV9NQVNLLCAweDMpXFxuKyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfVFhBTVBcXHRcXHRGSUVMRF9QUkVQKEVDT05FVF9DQUxfVFlQRV9NQVNLLCAweDcpXFxuKyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX01BU0tcXHRcXHRHRU5NQVNLKDExLCA2KVxcbisjZGVmaW5lIEVDT05FVF9DQUxJTl9FTjc1MjZDXFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0VONzUyNkNcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSBFQ09ORVRfQ0FMX09VVF9FTjc1MjZDXFx0XFx0QklUKDApXFxuK1xcbisvKiBMNFIyMyAqL1xcbisjZGVmaW5lIEVDT05FVF9DQUxJTl9MRUdBQ1lcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBFQ09ORVRfQ0FMX0RPTkVfTEVHQUNZXFx0XFx0QklUKDYpXFxuKyNkZWZpbmUgRUNPTkVUX0NBTF9PVVRfTEVHQUNZXFx0XFx0QklUKDQpXFxuK1xcbisjZGVmaW5lIEVDT05FVF9EQUNfSU5fMlZcXHRcXHQweDBmMFxcbitcXG4rLyogTDRSMTcgKi9cXG4rI2RlZmluZSBFQ09ORVRfVFhPU19TSUdOXFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIEVDT05FVF9UWE9TX01BR1xcdFxcdFxcdEdFTk1BU0soMTIsIDgpXFxuK1xcbisjZGVmaW5lIEVDT05FVF9UWE9TX0RFRkFVTFRcXHRcXHQwXFxuKyNkZWZpbmUgRUNPTkVUX1RYT1NfTUFYXFx0XFx0XFx0MzFcXG4rI2RlZmluZSBFQ09ORVRfVFhPU19NSU5cXHRcXHRcXHQtMzFcXG4rXFxuKyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX0RFRkFVTFRcXHRcXHQweDIwXFxuKyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX01BWFxcdFxcdDB4M2ZcXG4rXFxuKy8qIEw0UjIyICovXFxuKyNkZWZpbmUgRUNPTkVUX1I1MF9UWENBTF9NQVNLXFx0XFx0R0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBFQ09ORVRfUjUwX1JYQ0FMX01BU0tcXHRcXHRHRU5NQVNLKDcsIDApXFxuK1xcbisjZGVmaW5lIEVDT05FVF9UWEFNUF9ERUZBVUxUXFx0XFx0MHgxMlxcbisjZGVmaW5lIEVDT05FVF9UWEFNUF9NQVhcXHRcXHQweDNmXFxuK1xcbisvKiBaQ0FMIGNvbXBlbnNhdGlvbiB0YWJsZSBwZXIgY2hpcCwgcGVyIHBoeSwgUlggKyBUWCAqL1xcbitzdHJ1Y3QgY29tcGVuc2F0aW9uIHtcXG4rXFx0czggemNhbF90eDtcXG4rXFx0czggemNhbF9yeDtcXG4rXFx0czggdHhvcztcXG4rXFx0czggYW1wO1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wZW5zYXRpb24gZW43NTEyMjFfY29tcFsyXVs0XSA9IHtcXG4rXFx0e1xcbitcXHRcXHQvKiBMZWdhY3kgKi9cXG4rXFx0XFx0eyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IC00LCAudHhvcyA9IDAsIC5hbXAgPSAxIH0sIC8qICA4ICovXFxuK1xcdFxcdHsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSAtNCwgLnR4b3MgPSAxLCAuYW1wID0gMiB9LCAvKiAgOSAqL1xcbitcXHRcXHR7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gLTQsIC50eG9zID0gMSwgLmFtcCA9IDEgfSwgLyogMTAgKi9cXG4rXFx0XFx0eyAuemNhbF90eCA9IC0yLCAuemNhbF9yeCA9IC04LCAudHhvcyA9IDEsIC5hbXAgPSAxIH0sIC8qIDExICovXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LyogRU43NTI2QyAqL1xcbitcXHRcXHR7IC56Y2FsX3R4ID0gMywgIC56Y2FsX3J4ID0gNiwgLnR4b3MgPSAxLCAuYW1wID0gMCB9LCAvKiAgOSAqL1xcbitcXHRcXHR7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gNSwgLnR4b3MgPSAxLCAuYW1wID0gLTEgfSwgLyogMTAgKi9cXG4rXFx0XFx0eyAuemNhbF90eCA9IDYsICAuemNhbF9yeCA9IDYsIC50eG9zID0gMSwgLmFtcCA9IC0xIH0sIC8qIDExICovXFxuK1xcdFxcdHsgfSwgLyogVW51c2VkICovXFxuK1xcdH1cXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCB1OCB6Y2FsX3RvX3I1MG9obVs2NF0gPSB7XFxuK1xcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNiwgMTIzLCAxMjAsIDExNywgMTE0LCAxMTIsIDExMCwgMTA3LCAxMDUsIDEwMyxcXG4rXFx0MTAxLCAgOTksICA5NywgIDc5LCAgNzcsICA3NSwgIDc0LCAgNzIsICA3MCwgIDY5LCAgNjcsICA2NiwgIDY1LCAgNDcsICA0NiwgIDQ1LFxcbitcXHQgNDMsICA0MiwgIDQxLCAgNDAsICAzOSwgIDM4LCAgMzcsICAzNiwgIDM0LCAgMzQsICAzMywgIDMyLCAgMTUsICAxNCwgIDEzLCAgMTIsXFxuK1xcdCAxMSwgIDEwLCAgMTAsICAgOSwgICA4LCAgIDcsICAgNywgICA2LCAgIDUsICAgNCwgICA0LCAgIDMsICAgMiwgICAyLCAgIDEsICAgMVxcbit9O1xcbitcXG4rc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkIHtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgY29tcGVuc2F0aW9uIGdldF9jdGFiKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHR1OCBwaHlfb2Zmc2V0O1xcbitcXG4rXFx0cGh5X29mZnNldCA9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyIC0gc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDAtXFx1MDAzZW1kaW8uYWRkcjtcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UocGh5X29mZnNldCBcXHUwMDNlPSBBUlJBWV9TSVpFKGVuNzUxMjIxX2NvbXBbMF0pKSlcXG4rXFx0XFx0cmV0dXJuIChzdHJ1Y3QgY29tcGVuc2F0aW9uKSB7fTtcXG4rXFxuK1xcdHJldHVybiBlbjc1MTIyMV9jb21wW3BoeWRldi1cXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDXVtwaHlfb2Zmc2V0XTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0X2NhbGluX2ZsYWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGVkKVxcbit7XFxuK1xcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0dTE2IHNldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xcbitcXHRcXHQvKiBHN1IyNCBpcyBzaGFyZWQgc28gcGh5X21vZGlmeV9wYWdlZCBpcyByZXF1aXJlZCAqL1xcbitcXHRcXHRzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0VONzUyNkMgOiAwO1xcbitcXHRcXHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCxcXG4rXFx0XFx0XFx0XFx0IEVDT05FVF9DQUxJTl9FTjc1MjZDLCBzZXQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0xFR0FDWSA6IDA7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChzaGFyZWQtXFx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0w0LCAyMywgc2V0KTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdHJ1Y3QgY2FsX2NvbXBsZXRlX2N0eCB7XFxuK1xcdHUxNiBjb25zZWN1dGl2ZV90cnVlc1xcdDogMTU7XFxuK1xcdGJvb2wgc3RhcnRlZFxcdFxcdDogMTtcXG4rXFx0Ym9vbCBvYnNlcnZlZF9mYWxzZVxcdDogMTtcXG4rXFx0dTE2IGFib3J0ZWRfdHJpZXNcXHQ6IDc7XFxuK307XFxuK1xcbisvKipcXG4rICogcG9sbF9jYWxfY29tcGxldGUgLSBwb2xsIGZvciBjYWxpYnJhdGlvbiBjb21wbGV0aW9uLlxcbisgKlxcbisgKiBCZWNhdXNlIHNvbWUgbGVnYWN5IGNoaXBzIGFyZSBrbm93biB0byBiZSB1bnJlbGlhYmxlIChmYWxzZSBwb3NpdGl2ZXMpLFxcbisgKiByZWZlcmVuY2UgY29kZSBhZGRzIDEwLDAwMHVzIG9mIGZpeGVkIGRlbGF5IHBlciBjYWxpYnJhdGlvbiBjeWNsZS5cXG4rICogUHJhY3RpY2FsbHksIHRoZXJlIGFyZSBhYm91dCAxMC01MCBjYWxpYnJhdGlvbiBjeWNsZXMgZm9yIGVhY2ggb2YgdGhlXFxuKyAqIHRocmVlIHR1bmFibGVzLCBzbyBhZGRpbmcgYSBzaWduaWZpY2FudCBmaXhlZCBkZWxheSBpcyBjb3N0bHkuXFxuKyAqXFxuKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gaW5zdGVhZCBzdGFydHMgd2l0aCBDQUxJTiBkaXNhYmxlZCwgcG9sbHMgZm9yXFxuKyAqIGRvbmUgc3RhdHVzIGZhbHNlLCB0aGVuIGVuYWJsZXMgQ0FMSU4gYW5kIHBvbGxzIHVudGlsIGEgdHJ1ZSBkb25lXFxuKyAqIHN0YXR1cyBpcyByZWNvcmRlZCBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgdGltZXMgY29uc2VjdXRpdmVseS5cXG4rICpcXG4rICogQHJldHVybnM6XFxuKyAqICAgXFx1MDAzYyAwIG9uIGVycm9yXFxuKyAqICAgMCBub3QgeWV0IGNvbXBsZXRlXFxuKyAqICAgMSBjb21wbGV0ZSBmYWxzZVxcbisgKiAgIDIgY29tcGxldGUgdHJ1ZVxcbisgKi9cXG4rc3RhdGljIGludCBwb2xsX2NhbF9jb21wbGV0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBjYWxfY29tcGxldGVfY3R4ICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgZG9uZV9tYXNrO1xcbitcXHRpbnQgb3V0X21hc2s7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHtcXG4rXFx0XFx0cmV0ID0gcGh5X3JlYWRfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0KTtcXG4rXFx0XFx0ZG9uZV9tYXNrID0gRUNPTkVUX0NBTF9ET05FX0VONzUyNkM7XFxuK1xcdFxcdG91dF9tYXNrID0gRUNPTkVUX0NBTF9PVVRfRU43NTI2QztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gcGh5X3JlYWRfcGFnZWQoc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MNCwgMjMpO1xcbitcXHRcXHRkb25lX21hc2sgPSBFQ09ORVRfQ0FMX0RPTkVfTEVHQUNZO1xcbitcXHRcXHRvdXRfbWFzayA9IEVDT05FVF9DQUxfT1VUX0xFR0FDWTtcXG4rXFx0fVxcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmICgocmV0IFxcdTAwMjYgZG9uZV9tYXNrKSA9PSAwKSB7XFxuK1xcdFxcdGN0eC1cXHUwMDNlb2JzZXJ2ZWRfZmFsc2UgPSB0cnVlO1xcbitcXHRcXHRjdHgtXFx1MDAzZWFib3J0ZWRfdHJpZXMgKz0gKGN0eC1cXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMgXFx1MDAzZSAwKTtcXG4rXFx0XFx0Y3R4LVxcdTAwM2Vjb25zZWN1dGl2ZV90cnVlcyA9IDA7XFxuK1xcbitcXHRcXHRpZiAoIWN0eC1cXHUwMDNlc3RhcnRlZCkge1xcbitcXHRcXHRcXHRzZXRfY2FsaW5fZmxhZyhwaHlkZXYsIHRydWUpO1xcbitcXHRcXHRcXHRjdHgtXFx1MDAzZXN0YXJ0ZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gcG9sbF9jYWxfY29tcGxldGUocGh5ZGV2LCBjdHgpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0Y3R4LVxcdTAwM2Vjb25zZWN1dGl2ZV90cnVlcysrO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMgXFx1MDAzYyBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgfHwgIWN0eC1cXHUwMDNlb2JzZXJ2ZWRfZmFsc2UpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNlYWJvcnRlZF90cmllcylcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiQ2FsaWJyYXRpb24gY3ljbGUgJWQgZmFsc2UgcG9zaXRpdmVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgY3R4LVxcdTAwM2VhYm9ydGVkX3RyaWVzKTtcXG4rXFxuK1xcdHJldHVybiAoKHJldCBcXHUwMDI2IG91dF9tYXNrKSAhPSAwKSA/IDIgOiAxO1xcbit9XFxuK1xcbisvKipcXG4rICogcG9sbF9jYWxfY29tcGxldGUgLSBjaGVjayBmb3IgY2FsaWJyYXRpb24gcmVnaXN0ZXJcXG4rICogQHJldHVybnM6IC1lcnJvciBvciAxIGlmIGNhbGlicmF0aW9uIHJlc3VsdCBpcyB0cnVlLlxcbisgKi9cXG4rc3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgY2FsX2NvbXBsZXRlX2N0eCBjY3R4ID0ge307XFxuK1xcdGludCBvdXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzZXRfY2FsaW5fZmxhZyhwaHlkZXYsIGZhbHNlKTtcXG4rXFxuK1xcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHBvbGxfY2FsX2NvbXBsZXRlLCBvdXQsIG91dCAhPSAwLFxcbitcXHRcXHRcXHRcXHRFQ09ORVRfQ0FMX0NZQ0xFX1VTLCBFQ09ORVRfQ0FMX1RJTUVPVVRfVVMsXFxuK1xcdFxcdFxcdFxcdGZhbHNlLCBwaHlkZXYsIFxcdTAwMjZjY3R4KTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiQ2FsaWJyYXRpb24gdGltZW91dCAlZCAoJWQgLyAlZCAvICVkIC8gJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICByZXQsIGNjdHguY29uc2VjdXRpdmVfdHJ1ZXMsIGNjdHgub2JzZXJ2ZWRfZmFsc2UsXFxuK1xcdFxcdFxcdCAgIGNjdHguYWJvcnRlZF90cmllcywgY2N0eC5zdGFydGVkKTtcXG4rXFx0fSBlbHNlIGlmIChvdXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiQ2FsaWJyYXRpb24gZXJyb3IgJWRcXFxcblxcXCIsIG91dCk7XFxuK1xcdFxcdHJldCA9IG91dDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gb3V0IFxcdTAwM2UgMTtcXG4rXFx0fVxcbitcXG4rXFx0c2V0X2NhbGluX2ZsYWcocGh5ZGV2LCBmYWxzZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfcjUwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgY29tcGVuc2F0aW9uIGN0YWIgPSBnZXRfY3RhYihwaHlkZXYpO1xcbitcXHRpbnQgemNhbF9zeiA9IEFSUkFZX1NJWkUoemNhbF90b19yNTBvaG0pO1xcbitcXHR1OCByZ196Y2FsX2N0cmwgPSBFQ09ORVRfUjUwX1pDQUxfREVGQVVMVDtcXG4rXFx0aW50IGluaXRpYWxfY29tcF9vdXQ7XFxuK1xcdGludCBwb2xhcml0eSA9IDA7XFxuK1xcdGludCBjb21wX291dDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdHUxNiByeGNhbDtcXG4rXFx0dTE2IHR4Y2FsO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxcbitcXHRcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfUjUwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7XFxuK1xcbitcXHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgxMDAwLCAweDEwMDApO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpXFxuK1xcdFxcdFxcdHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LFxcbitcXHRcXHRcXHRcXHRcXHQgRUNPTkVUX1I1MF9aQ0FMX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCBGSUVMRF9QUkVQKEVDT05FVF9SNTBfWkNBTF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgcmdfemNhbF9jdHJsKSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cXHUwMDNlcGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI2LFxcbitcXHRcXHRcXHRcXHRcXHRyZ196Y2FsX2N0cmwpO1xcbitcXG4rXFx0XFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKGNvbXBfb3V0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRyZXQgPSBjb21wX291dDtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChwb2xhcml0eSA9PSAwKSB7XFxuK1xcdFxcdFxcdC8qIEZpcnN0IGN5Y2xlICovXFxuK1xcdFxcdFxcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcXG4rXFx0XFx0XFx0cG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTtcXG4rXFx0XFx0fSBlbHNlIGlmIChpbml0aWFsX2NvbXBfb3V0ICE9IGNvbXBfb3V0KSB7XFxuK1xcdFxcdFxcdC8qIEZvdW5kICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZ196Y2FsX2N0cmwgKz0gcG9sYXJpdHk7XFxuK1xcbitcXHRcXHRpZiAocmdfemNhbF9jdHJsIFxcdTAwM2UgRUNPTkVUX1I1MF9aQ0FMX01BWCkge1xcbitcXHRcXHRcXHRyZXQgPSAxO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyeGNhbCA9IG1heCgwLCBtaW4oemNhbF9zeiAtIDEsIGN0YWIuemNhbF9yeCArIHJnX3pjYWxfY3RybCkpO1xcbitcXHR0eGNhbCA9IG1heCgwLCBtaW4oemNhbF9zeiAtIDEsIGN0YWIuemNhbF90eCArIHJnX3pjYWxfY3RybCkpO1xcbitcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMixcXG4rXFx0XFx0XFx0RklFTERfUFJFUChFQ09ORVRfUjUwX1RYQ0FMX01BU0ssIHR4Y2FsKSB8XFxuK1xcdFxcdFxcdEZJRUxEX1BSRVAoRUNPTkVUX1I1MF9SWENBTF9NQVNLLCByeGNhbCkpO1xcbitcXG4rb3V0OlxcbitcXHQvKiBaZXJvIG91dCByZWdpc3RlcnMgKi9cXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcXG4rXFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgMHgwMDAwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7XFxuK1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV90eF9vZmZzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XFxuK1xcdGludCBpbml0aWFsX2NvbXBfb3V0O1xcbitcXHRpbnQgcG9sYXJpdHkgPSAwO1xcbitcXHRpbnQgb2Zmc2V0ID0gRUNPTkVUX1RYT1NfREVGQVVMVDtcXG4rXFx0dTE2IG9mZnNldF9iaW47XFxuK1xcdGludCBjb21wX291dDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDAsIDB4MjEwMCk7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTIwMCk7IC8qIGZpeCBNREkgKi9cXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xcbitcXHRcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfVFhPUyk7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDQwMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChzaGFyZWQtXFx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHg0ODAwKTtcXG4rXFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHg0YzAwKTtcXG4rXFx0fVxcbitcXG4rXFx0cGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNCwgMjEsIDB4MDgwMCwgMHgwODAwKTtcXG4rXFxuK1xcdHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAyYzAsIDB4MDJjMCk7XFxuK1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDApO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRvZmZzZXRfYmluID0gRklFTERfUFJFUChFQ09ORVRfVFhPU19NQUcsIGFicyhvZmZzZXQpKTtcXG4rXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdG9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjtcXG4rXFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMTcsIG9mZnNldF9iaW4pO1xcbitcXG4rXFx0XFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKGNvbXBfb3V0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRyZXQgPSBjb21wX291dDtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChwb2xhcml0eSA9PSAwKSB7XFxuK1xcdFxcdFxcdC8qIEZpcnN0IGN5Y2xlICovXFxuK1xcdFxcdFxcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcXG4rXFx0XFx0XFx0cG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTtcXG4rXFx0XFx0fSBlbHNlIGlmIChpbml0aWFsX2NvbXBfb3V0ICE9IGNvbXBfb3V0KSB7XFxuK1xcdFxcdFxcdC8qIEZvdW5kICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvZmZzZXQgKz0gcG9sYXJpdHk7XFxuK1xcbitcXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2UgRUNPTkVUX1RYT1NfTUFYIHx8IG9mZnNldCBcXHUwMDNjIEVDT05FVF9UWE9TX01JTikge1xcbitcXHRcXHRcXHRyZXQgPSAxO1xcbitcXHRcXHRcXHRvZmZzZXQgPSAwO1xcbitcXHRcXHRcXHRnb3RvIHNldF92YWw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0b2Zmc2V0ICs9IGN0YWIudHhvcyAqIHBvbGFyaXR5O1xcbitcXG4rXFx0aWYgKG9mZnNldCBcXHUwMDNlIEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgXFx1MDAzYyBFQ09ORVRfVFhPU19NSU4pXFxuK1xcdFxcdG9mZnNldCAtPSBjdGFiLnR4b3MgKiBwb2xhcml0eTtcXG4rXFxuK3NldF92YWw6XFxuK1xcdG9mZnNldF9iaW4gPSBGSUVMRF9QUkVQKEVDT05FVF9UWE9TX01BRywgYWJzKG9mZnNldCkpO1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2MgMClcXG4rXFx0XFx0b2Zmc2V0X2JpbiB8PSBFQ09ORVRfVFhPU19TSUdOO1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDQsIDE3LCBvZmZzZXRfYmluKTtcXG4rXFxuK291dDpcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxcbitcXHRcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xcbitcXHRlbHNlXFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChzaGFyZWQtXFx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcXG4rXFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3R4X2FtcChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0c3RydWN0IGNvbXBlbnNhdGlvbiBjdGFiID0gZ2V0X2N0YWIocGh5ZGV2KTtcXG4rXFx0aW50IGluaXRpYWxfY29tcF9vdXQ7XFxuK1xcdHU4IHR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUO1xcbitcXHRpbnQgcG9sYXJpdHkgPSAwO1xcbitcXHRpbnQgY29tcF9vdXQ7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApO1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCAweDUyMDMpO1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzIsIDI1LCAweDEwYzApO1xcbitcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0cxLCAyNiwgMHg4MDAwIHwgRUNPTkVUX0RBQ19JTl8yVik7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNCwgMjEsIDB4MDgwMCk7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MDJjMCk7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMjEsIDB4MDAwMCk7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHtcXG4rXFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgRUNPTkVUX0NBTF9UWVBFX1RYQU1QKTtcXG4rXFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwNjAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cXHUwMDNlcGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweGNhMDApO1xcbitcXHRcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweGNhMDAgfCAweDA0MDApO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjMsIHR4X2FtcCk7XFxuK1xcbitcXHRcXHRjb21wX291dCA9IGVuNzUxMjIxX2ZlcGh5X2NhbF9jeWNsZShwaHlkZXYpO1xcbitcXHRcXHRpZiAoY29tcF9vdXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdHJldCA9IGNvbXBfb3V0O1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHBvbGFyaXR5ID09IDApIHtcXG4rXFx0XFx0XFx0LyogRmlyc3QgY3ljbGUgKi9cXG4rXFx0XFx0XFx0aW5pdGlhbF9jb21wX291dCA9IGNvbXBfb3V0O1xcbitcXHRcXHRcXHRwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxO1xcbitcXHRcXHR9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHtcXG4rXFx0XFx0XFx0LyogRm91bmQgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHR4X2FtcCArPSBwb2xhcml0eTtcXG4rXFxuK1xcdFxcdGlmICh0eF9hbXAgXFx1MDAzZSBFQ09ORVRfVFhBTVBfTUFYKSB7XFxuK1xcdFxcdFxcdHJldCA9IDE7XFxuK1xcdFxcdFxcdHR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUO1xcbitcXHRcXHRcXHRnb3RvIHNldF92YWw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHR4X2FtcCArIGN0YWIuYW1wIFxcdTAwM2MgRUNPTkVUX1RYQU1QX01BWClcXG4rXFx0XFx0dHhfYW1wICs9IGN0YWIuYW1wO1xcbitcXG4rc2V0X3ZhbDpcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTtcXG4rXFxuK291dDpcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIDB4MDAwMCk7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MDAwMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChzaGFyZWQtXFx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHUxNiBsMHIyNl90ZW1wO1xcbitcXHRpbnQgcmV0O1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmICghc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDApIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJQb3J0IHplcm8gbXVzdCBiZSBjb25maWd1cmVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgXFx1MDAzYyBzaGFyZWQtXFx1MDAzZXBoeWRldl9wMC1cXHUwMDNlbWRpby5hZGRyKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKiBHbG9iYWwgcmVnaXN0ZXJzICovXFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNCwgMjYsIDB4ODA0NCk7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjEsIDB4MDBlYSk7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjcsIDB4MDJmMCk7XFxuK1xcbitcXHQvKiBMb2NhbCByZWdpc3RlcnMgKi9cXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHhhMDAwKTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wxLCAyMiwgMHhmMDAwKTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMiwgMHg0NDQ0KTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyNCwgMHgwYzBjKTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyOCwgMHg3YzQ0KTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAzMCwgMHgwMDA1KTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAxNywgMHgwMDAwKTtcXG4rXFxuK1xcdC8qIEZvciBFMS9FMiwgRTMgcmVxdWlyZXMgMHgyMjIwLCBidXQgbm8ga25vd24gRU43NTEyMjEgRTMgY2hpcHMgZXhpc3QgKi9cXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgyMjAwKTtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xcbitcXHRcXHQgLyogMTAwTWIgdHggcDJ6X21pZCwgejJuX21pZCwgejJuX292c19wb3N0LCBuMnpfbWlkICovXFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjIsIDB4MDAzMCk7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjUsIDB4MDI0OCk7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjcsIDB4MDJmMCk7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjgsIDB4MDIzMCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0bDByMjZfdGVtcCA9IHJldDtcXG4rXFxuK1xcdC8qIEJHIHZvbHRhZ2UgKi9cXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0cyLCAyNSwgMHgxMGMwKTtcXG4rXFxuK1xcdC8qIE1ESSAqL1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCAweDU2MDMpO1xcbitcXG4rXFx0LyogZGlzYWJsZSB0eCBzbGV3IGNvbnRyb2wgKi9cXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcXG4rXFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgyMTAwKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA1OyBpKyspIHtcXG4rXFx0XFx0cmV0ID0gZW43NTEyMjFfZmVwaHlfcjUwKHBoeWRldik7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDU7IGkrKykge1xcbitcXHRcXHRyZXQgPSBlbjc1MTIyMV9mZXBoeV90eF9vZmZzZXQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNTsgaSsrKSB7XFxuK1xcdFxcdHJldCA9IGVuNzUxMjIxX2ZlcGh5X3R4X2FtcChwaHlkZXYpO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIGwwcjI2X3RlbXApO1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDAwMDApO1xcbitcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMiwgMHg0NDQ0KTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDMxMDApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcG9ydDAgPSBFQ09ORVRfRU43NTI2Q19QT1JUMF9BRERSO1xcbitcXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZDtcXG4rXFx0c3RydWN0IG10a19zb2NwaHlfcHJpdiAqcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXBoeV9pZCAhPSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcXG4rXFx0XFx0cG9ydDAgPSBFQ09ORVRfTEVHQUNZX1BPUlQwX0FERFI7XFxuK1xcbitcXHRyZXQgPSBkZXZtX3BoeV9wYWNrYWdlX2pvaW4oXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIHBoeWRldiwgcG9ydDAsXFxuK1xcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgPT0gcG9ydDApXFxuK1xcdFxcdHNoYXJlZC1cXHUwMDNlcGh5ZGV2X3AwID0gcGh5ZGV2O1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW43NTEyMjFfZmVwaHlfZHJpdmVyW10gPSB7XFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJFY29OZXQgRU43NTEyMjEgRkVQSFlcXFwiLFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHQ9IGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0LFxcbitcXHRcXHQuY29uZmlnX2ludHJcXHQ9IGdlbnBoeV9ub19jb25maWdfaW50cixcXG4rXFx0XFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssXFxuK1xcdFxcdC5wcm9iZVxcdFxcdD0gZW43NTEyMjFfZmVwaHlfcHJvYmUsXFxuK1xcdFxcdC5yZWFkX3BhZ2VcXHQ9IG10a19waHlfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZVxcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxcbitcXHR9XFxuK307XFxuK1xcbittb2R1bGVfcGh5X2RyaXZlcihlbjc1MTIyMV9mZXBoeV9kcml2ZXIpO1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBlbjc1MTIyMV9mZXBoeV90YmxbXSA9IHtcXG4rXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIH0sXFxuK1xcdHsgfVxcbit9O1xcbitcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJFY29OZXQgU29DIDEwLzEwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkNhbGViIEphbWVzIERlTGlzbGUgXFx1MDAzY2NqZEBjamRucy5mclxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbitcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBlbjc1MTIyMV9mZXBoeV90YmwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToxODo0My4xOTE5MjM4NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzY2NjI3MDkxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRUNPTkVUX0ZFX1NPQ19QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbjc1MTIyMV9mZXBoeV9wcm9iZVwiLFxuICAgIFwiZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBIWSBkcml2ZXIgZm9yIEVjb05ldCAxMC8xMDAgU29DIEV0aGVybmV0IFBIWXMgKGBkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jYCkuIFBIWSBkcml2ZXJzIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBlbXVsYXRpbmcgYW4gTURJTyBidXMuIEZvciBleGFtcGxlLCBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBVU0IgbmV0d29yayBhZGFwdGVyIChzdWNoIGFzIGBzbXNjOTV4eGApIHZpYSB0aGUgYHZoY2lgIGRyaXZlci4gV2hlbiB0aGUgZW11bGF0ZWQgVVNCIGRldmljZSBpcyBwcm9iZWQsIGl0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgc2NhbnMgZm9yIFBIWXMgYnkgc2VuZGluZyBNRElPIHJlYWQgcmVxdWVzdHMgKHdoaWNoIHRyYW5zbGF0ZSB0byBVU0IgY29udHJvbCBtZXNzYWdlcykuIEJ5IHJldHVybmluZyB0aGUgc3BlY2lmaWMgUEhZIElEIChgMHgwM2EyOTQxNGApIGR1cmluZyB0aGUgTURJTyBzY2FuLCB0aGUgTURJTyBidXMgd2lsbCBpbnN0YW50aWF0ZSBhIFBIWSBkZXZpY2Ugd2l0aCB0aGlzIElELCB0cmlnZ2VyaW5nIHRoZSBwcm9iZSBhbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIG9mIHRoZSBgZWNvbmV0LWZlLXNvY2AgUEhZIGRyaXZlci4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0N2JiYzQzNmRlYzI0NTA0YzA3MDMzMGM2ZDQ3Yjc5MTkzMTY4MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxOToxODo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDQ2MGNiNzI2ODg0NTAuLjdjYTNkOGQwOGM2OTMgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC05MjUzLDYgKzkyNTMsMTIgQEAgVzpcdGh0dHBzOi8vbGludXh0di5vcmdcbiBROlx0aHR0cDovL3BhdGNod29yay5saW51eHR2Lm9yZy9wcm9qZWN0L2xpbnV4LW1lZGlhL2xpc3QvXG4gRjpcdGRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9lYzEwMCpcbiBcbitFQ09ORVQgRVRIRVJORVQgUEhZIERSSVZFUlxuK006XHRDYWxlYiBKYW1lcyBEZUxpc2xlIFx1MDAzY2NqZEBjamRucy5mclx1MDAzZVxuK0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4rUzpcdE1haW50YWluZWRcbitGOlx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY1xuK1xuIEVDT05FVCBNSVBTIFBMQVRGT1JNXG4gTTpcdENhbGViIEphbWVzIERlTGlzbGUgXHUwMDNjY2pkQGNqZG5zLmZyXHUwMDNlXG4gTDpcdGxpbnV4LW1pcHNAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xuaW5kZXggM2I5Y2Y4MmMwY2IyOC4uNjRhYmY1YjY5NWFiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xuQEAgLTEsNCArMSwxOSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK1xuK2NvbmZpZyBFQ09ORVRfRkVfU09DX1BIWVxuK1x0dHJpc3RhdGUgXCJFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzXCJcbitcdGRlcGVuZHMgb24gRUNPTkVUIHx8IENPTVBJTEVfVEVTVFxuK1x0c2VsZWN0IE1US19ORVRfUEhZTElCXG4rXHRzZWxlY3QgUEhZX1BBQ0tBR0VcbitcdGhlbHBcbitcdCAgU3VwcG9ydHMgRWNvTmV0IFNvQyBidWlsdC1pbiAxMC8xMDAgRXRoZXJuZXQgUEhZcy5cbitcbitcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBidWlsdC1pbiBFdGhlcm5ldCBQSFlzIHdoaWNoIGFyZSBwcmVzZW50IGluXG4rXHQgIEVONzUyNkMgYmFzZWQgU29DcyAoaW5jbHVkaW5nIEVONzUyNkYpLiBJdCBjYW4gYWxzbyB3b3JrIHdpdGhcbitcdCAgbGVnYWN5IEVONzUxMiBGRSBQSFlzIHdoaWNoIGlkZW50aWZ5IGFzIDAzYTIuOTQxMiwgYnV0IHNpbmNlIHRoaXNcbitcdCAgSUQgaXMgdXNlZCBieSBNRURJQVRFS19HRV9QSFksIHVzZXJzIHdhbnRpbmcgdG8gZm9yY2UgdGhpcyBkcml2ZXJcbitcdCAgbXVzdCBvdmVycmlkZSB0aGUgSUQgdG8gMDNhMi45NDE0IGluIHRoZSBkZXZpY2UgdHJlZS5cbitcbiBjb25maWcgTUVESUFURUtfMlA1R0VfUEhZXG4gXHR0cmlzdGF0ZSBcIk1lZGlhVGVrIDIuNUdiIEV0aGVybmV0IFBIWXNcIlxuIFx0ZGVwZW5kcyBvbiAoQVJNNjQgXHUwMDI2XHUwMDI2IEFSQ0hfTUVESUFURUspIHx8IENPTVBJTEVfVEVTVFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxuaW5kZXggNmY5Y2FjZjdmOTA2NS4uNzEyMzllOTJhYTU4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL01ha2VmaWxlXG5AQCAtMSw0ICsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rb2JqLSQoQ09ORklHX0VDT05FVF9GRV9TT0NfUEhZKVx0XHQrPSBlY29uZXQtZmUtc29jLm9cbiBvYmotJChDT05GSUdfTUVESUFURUtfMlA1R0VfUEhZKVx0Kz0gbXRrLTJwNWdlLm9cbiBvYmotJChDT05GSUdfTUVESUFURUtfRkVfU09DX1BIWSlcdCs9IG10ay1mZS1zb2Mub1xuIG9iai0kKENPTkZJR19NRURJQVRFS19HRV9QSFkpXHRcdCs9IG10ay1nZS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNWRiYjMyYTVkMWFiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jXG5AQCAtMCwwICsxLDYzMiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJtdGsuaFwiXG4rXG4rLypcbisgKiBBbiBvbGRlciB2ZXJzaW9uIG9mIHRoaXMgUEhZIGhhcmR3YXJlIHVzZXMgdGhlIElEIDAzYTIuOTQxMi5cbisgKiBUaGlzIGRyaXZlciBkb2VzIG5vdCBtYXRjaCBvbiBpdCBiZWNhdXNlIGl0IGNvbGxpZGVzIHdpdGhcbisgKiBNVEtfR1BIWV9JRF9NVDc1MzAsIHNvIHVzZXJzIHdhbnRpbmcgdG8gdXNlIHRoaXMgZHJpdmVyIHNob3VsZFxuKyAqIG92ZXJyaWRlIHRoZSBQSFkgSUQgaW4gdGhlIGRldmljZSB0cmVlIHRvIDAzYTIuOTQxNC5cbisgKi9cbisjZGVmaW5lIEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDXHRcdDB4MDNhMjk0MTRcbitcbisjZGVmaW5lIEVDT05FVF9QR19HMVx0XHRcdDB4MTAwMFxuKyNkZWZpbmUgRUNPTkVUX1BHX0cyXHRcdFx0MHgyMDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfRzNcdFx0XHQweDMwMDBcbisjZGVmaW5lIEVDT05FVF9QR19HNFx0XHRcdDB4NDAwMFxuKyNkZWZpbmUgRUNPTkVUX1BHX0c1XHRcdFx0MHg1MDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfRzZcdFx0XHQweDYwMDBcbisjZGVmaW5lIEVDT05FVF9QR19HN1x0XHRcdDB4NzAwMFxuK1xuKyNkZWZpbmUgRUNPTkVUX1BHX0wwXHRcdFx0MHg4MDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfTDFcdFx0XHQweDkwMDBcbisjZGVmaW5lIEVDT05FVF9QR19MMlx0XHRcdDB4YTAwMFxuKyNkZWZpbmUgRUNPTkVUX1BHX0wzXHRcdFx0MHhiMDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfTDRcdFx0XHQweGMwMDBcbitcbisvKiA0IHBvcnRzICg4LDksMTAsMTEpIG9yIDMgcG9ydHMgKDksMTAsMTEpICovXG4rI2RlZmluZSBFQ09ORVRfTEVHQUNZX1BPUlQwX0FERFJcdDhcbisjZGVmaW5lIEVDT05FVF9FTjc1MjZDX1BPUlQwX0FERFJcdDlcbitcbisvKlxuKyAqIENhbGlicmF0aW9uIHBvbGxpbmcgZG9lcyBub3QgY29tcGxldGUgdW50aWwgRUNPTkVUX0NBTF9NSU5fQ1lDTEVTXG4rICogY29uc2VjdXRpdmUgXCJkb25lXCIgcmVzdWx0cyBhcmUgcmVjZWl2ZWQuIFNlZTogcG9sbF9jYWxfY29tcGxldGVcbisgKi9cbisjZGVmaW5lIEVDT05FVF9DQUxfTUlOX0NZQ0xFU1x0XHQxMFxuK1xuKy8qXG4rICogTWljcm9zZWNvbmRzIHBlciBjYWxpYnJhdGlvbiBwb2xsIGN5Y2xlLCBjYWxpYnJhdGlvbiB0YWtlcyBhcHByb3hpbWF0ZWx5XG4rICogRUNPTkVUX0NBTF9DWUNMRV9VUyAqIEVDT05FVF9DQUxfTUlOX0NZQ0xFUy4gVG90YWwgc2V0dXAgdGltZSBpcyB1c3VhbGx5XG4rICogbGVzcyB0aGFuIDE1MHggdGhpcyBudW1iZXIuXG4rICovXG4rI2RlZmluZSBFQ09ORVRfQ0FMX0NZQ0xFX1VTXHRcdDEwXG4rXG4rLyogVG90YWwgdGltZSBhbGxvd2VkIGZvciBjYWxpYnJhdGlvbiBwb2xsaW5nIGJlZm9yZSBlcnJvciBpcyByZXR1cm5lZC4gKi9cbisjZGVmaW5lIEVDT05FVF9DQUxfVElNRU9VVF9VU1x0XHQxMDAwMDBcbitcbisvKlxuKyAqIE5vdGU6IFRoZXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIHdlcmUgd3JpdHRlbiB3aXRob3V0IHRoZSBiZW5lZml0IG9mIHRoZVxuKyAqICAgICAgIGhhcmR3YXJlIHNwZWNpZmljYXRpb24sIHNvIG5hbWVzIGFyZSBnaXZlbiBvbmx5IHdoZXJlIHRoZSBtZWFuaW5nIGlzXG4rICogICAgICAgZmFpcmx5IG9idmlvdXMuXG4rICovXG4rXG4rLyogRzdSMjQgKi9cbisjZGVmaW5lIEVDT05FVF9DQUxfVFlQRV9NQVNLXHRcdEdFTk1BU0soMTQsIDEyKVxuKyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfUjUwXHRcdEZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4NilcbisjZGVmaW5lICAgRUNPTkVUX0NBTF9UWVBFX1RYT1NcdFx0RklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHgzKVxuKyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfVFhBTVBcdFx0RklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHg3KVxuKyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX01BU0tcdFx0R0VOTUFTSygxMSwgNilcbisjZGVmaW5lIEVDT05FVF9DQUxJTl9FTjc1MjZDXHRcdEJJVCg0KVxuKyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0VONzUyNkNcdFx0QklUKDEpXG4rI2RlZmluZSBFQ09ORVRfQ0FMX09VVF9FTjc1MjZDXHRcdEJJVCgwKVxuK1xuKy8qIEw0UjIzICovXG4rI2RlZmluZSBFQ09ORVRfQ0FMSU5fTEVHQUNZXHRcdEJJVCgyKVxuKyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0xFR0FDWVx0XHRCSVQoNilcbisjZGVmaW5lIEVDT05FVF9DQUxfT1VUX0xFR0FDWVx0XHRCSVQoNClcbitcbisjZGVmaW5lIEVDT05FVF9EQUNfSU5fMlZcdFx0MHgwZjBcbitcbisvKiBMNFIxNyAqL1xuKyNkZWZpbmUgRUNPTkVUX1RYT1NfU0lHTlx0XHRCSVQoMTMpXG4rI2RlZmluZSBFQ09ORVRfVFhPU19NQUdcdFx0XHRHRU5NQVNLKDEyLCA4KVxuK1xuKyNkZWZpbmUgRUNPTkVUX1RYT1NfREVGQVVMVFx0XHQwXG4rI2RlZmluZSBFQ09ORVRfVFhPU19NQVhcdFx0XHQzMVxuKyNkZWZpbmUgRUNPTkVUX1RYT1NfTUlOXHRcdFx0LTMxXG4rXG4rI2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfREVGQVVMVFx0XHQweDIwXG4rI2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfTUFYXHRcdDB4M2ZcbitcbisvKiBMNFIyMiAqL1xuKyNkZWZpbmUgRUNPTkVUX1I1MF9UWENBTF9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBFQ09ORVRfUjUwX1JYQ0FMX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuK1xuKyNkZWZpbmUgRUNPTkVUX1RYQU1QX0RFRkFVTFRcdFx0MHgxMlxuKyNkZWZpbmUgRUNPTkVUX1RYQU1QX01BWFx0XHQweDNmXG4rXG4rLyogWkNBTCBjb21wZW5zYXRpb24gdGFibGUgcGVyIGNoaXAsIHBlciBwaHksIFJYICsgVFggKi9cbitzdHJ1Y3QgY29tcGVuc2F0aW9uIHtcbitcdHM4IHpjYWxfdHg7XG4rXHRzOCB6Y2FsX3J4O1xuK1x0czggdHhvcztcbitcdHM4IGFtcDtcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGVuc2F0aW9uIGVuNzUxMjIxX2NvbXBbMl1bNF0gPSB7XG4rXHR7XG4rXHRcdC8qIExlZ2FjeSAqL1xuK1x0XHR7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gLTQsIC50eG9zID0gMCwgLmFtcCA9IDEgfSwgLyogIDggKi9cbitcdFx0eyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IC00LCAudHhvcyA9IDEsIC5hbXAgPSAyIH0sIC8qICA5ICovXG4rXHRcdHsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSAtNCwgLnR4b3MgPSAxLCAuYW1wID0gMSB9LCAvKiAxMCAqL1xuK1x0XHR7IC56Y2FsX3R4ID0gLTIsIC56Y2FsX3J4ID0gLTgsIC50eG9zID0gMSwgLmFtcCA9IDEgfSwgLyogMTEgKi9cbitcdH0sXG4rXHR7XG4rXHRcdC8qIEVONzUyNkMgKi9cbitcdFx0eyAuemNhbF90eCA9IDMsICAuemNhbF9yeCA9IDYsIC50eG9zID0gMSwgLmFtcCA9IDAgfSwgLyogIDkgKi9cbitcdFx0eyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IDUsIC50eG9zID0gMSwgLmFtcCA9IC0xIH0sIC8qIDEwICovXG4rXHRcdHsgLnpjYWxfdHggPSA2LCAgLnpjYWxfcnggPSA2LCAudHhvcyA9IDEsIC5hbXAgPSAtMSB9LCAvKiAxMSAqL1xuK1x0XHR7IH0sIC8qIFVudXNlZCAqL1xuK1x0fVxuK307XG4rXG4rc3RhdGljIGNvbnN0IHU4IHpjYWxfdG9fcjUwb2htWzY0XSA9IHtcbitcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNiwgMTIzLCAxMjAsIDExNywgMTE0LCAxMTIsIDExMCwgMTA3LCAxMDUsIDEwMyxcbitcdDEwMSwgIDk5LCAgOTcsICA3OSwgIDc3LCAgNzUsICA3NCwgIDcyLCAgNzAsICA2OSwgIDY3LCAgNjYsICA2NSwgIDQ3LCAgNDYsICA0NSxcbitcdCA0MywgIDQyLCAgNDEsICA0MCwgIDM5LCAgMzgsICAzNywgIDM2LCAgMzQsICAzNCwgIDMzLCAgMzIsICAxNSwgIDE0LCAgMTMsICAxMixcbitcdCAxMSwgIDEwLCAgMTAsICAgOSwgICA4LCAgIDcsICAgNywgICA2LCAgIDUsICAgNCwgICA0LCAgIDMsICAgMiwgICAyLCAgIDEsICAgMVxuK307XG4rXG4rc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkIHtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGNvbXBlbnNhdGlvbiBnZXRfY3RhYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHU4IHBoeV9vZmZzZXQ7XG4rXG4rXHRwaHlfb2Zmc2V0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAtXHUwMDNlbWRpby5hZGRyO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShwaHlfb2Zmc2V0IFx1MDAzZT0gQVJSQVlfU0laRShlbjc1MTIyMV9jb21wWzBdKSkpXG4rXHRcdHJldHVybiAoc3RydWN0IGNvbXBlbnNhdGlvbikge307XG4rXG4rXHRyZXR1cm4gZW43NTEyMjFfY29tcFtwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDXVtwaHlfb2Zmc2V0XTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X2NhbGluX2ZsYWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGVkKVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHUxNiBzZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xuK1x0XHQvKiBHN1IyNCBpcyBzaGFyZWQgc28gcGh5X21vZGlmeV9wYWdlZCBpcyByZXF1aXJlZCAqL1xuK1x0XHRzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0VONzUyNkMgOiAwO1xuK1x0XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCxcbitcdFx0XHRcdCBFQ09ORVRfQ0FMSU5fRU43NTI2Qywgc2V0KTtcbitcdH0gZWxzZSB7XG4rXHRcdHNldCA9IGVuYWJsZWQgPyBFQ09ORVRfQ0FMSU5fTEVHQUNZIDogMDtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MNCwgMjMsIHNldCk7XG4rXHR9XG4rfVxuK1xuK3N0cnVjdCBjYWxfY29tcGxldGVfY3R4IHtcbitcdHUxNiBjb25zZWN1dGl2ZV90cnVlc1x0OiAxNTtcbitcdGJvb2wgc3RhcnRlZFx0XHQ6IDE7XG4rXHRib29sIG9ic2VydmVkX2ZhbHNlXHQ6IDE7XG4rXHR1MTYgYWJvcnRlZF90cmllc1x0OiA3O1xuK307XG4rXG4rLyoqXG4rICogcG9sbF9jYWxfY29tcGxldGUgLSBwb2xsIGZvciBjYWxpYnJhdGlvbiBjb21wbGV0aW9uLlxuKyAqXG4rICogQmVjYXVzZSBzb21lIGxlZ2FjeSBjaGlwcyBhcmUga25vd24gdG8gYmUgdW5yZWxpYWJsZSAoZmFsc2UgcG9zaXRpdmVzKSxcbisgKiByZWZlcmVuY2UgY29kZSBhZGRzIDEwLDAwMHVzIG9mIGZpeGVkIGRlbGF5IHBlciBjYWxpYnJhdGlvbiBjeWNsZS5cbisgKiBQcmFjdGljYWxseSwgdGhlcmUgYXJlIGFib3V0IDEwLTUwIGNhbGlicmF0aW9uIGN5Y2xlcyBmb3IgZWFjaCBvZiB0aGVcbisgKiB0aHJlZSB0dW5hYmxlcywgc28gYWRkaW5nIGEgc2lnbmlmaWNhbnQgZml4ZWQgZGVsYXkgaXMgY29zdGx5LlxuKyAqXG4rICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIHN0YXJ0cyB3aXRoIENBTElOIGRpc2FibGVkLCBwb2xscyBmb3JcbisgKiBkb25lIHN0YXR1cyBmYWxzZSwgdGhlbiBlbmFibGVzIENBTElOIGFuZCBwb2xscyB1bnRpbCBhIHRydWUgZG9uZVxuKyAqIHN0YXR1cyBpcyByZWNvcmRlZCBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgdGltZXMgY29uc2VjdXRpdmVseS5cbisgKlxuKyAqIEByZXR1cm5zOlxuKyAqICAgXHUwMDNjIDAgb24gZXJyb3JcbisgKiAgIDAgbm90IHlldCBjb21wbGV0ZVxuKyAqICAgMSBjb21wbGV0ZSBmYWxzZVxuKyAqICAgMiBjb21wbGV0ZSB0cnVlXG4rICovXG4rc3RhdGljIGludCBwb2xsX2NhbF9jb21wbGV0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdCAgICAgc3RydWN0IGNhbF9jb21wbGV0ZV9jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgZG9uZV9tYXNrO1xuK1x0aW50IG91dF9tYXNrO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4rXHRcdHJldCA9IHBoeV9yZWFkX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCk7XG4rXHRcdGRvbmVfbWFzayA9IEVDT05FVF9DQUxfRE9ORV9FTjc1MjZDO1xuK1x0XHRvdXRfbWFzayA9IEVDT05FVF9DQUxfT1VUX0VONzUyNkM7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBwaHlfcmVhZF9wYWdlZChzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDQsIDIzKTtcbitcdFx0ZG9uZV9tYXNrID0gRUNPTkVUX0NBTF9ET05FX0xFR0FDWTtcbitcdFx0b3V0X21hc2sgPSBFQ09ORVRfQ0FMX09VVF9MRUdBQ1k7XG4rXHR9XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKChyZXQgXHUwMDI2IGRvbmVfbWFzaykgPT0gMCkge1xuK1x0XHRjdHgtXHUwMDNlb2JzZXJ2ZWRfZmFsc2UgPSB0cnVlO1xuK1x0XHRjdHgtXHUwMDNlYWJvcnRlZF90cmllcyArPSAoY3R4LVx1MDAzZWNvbnNlY3V0aXZlX3RydWVzIFx1MDAzZSAwKTtcbitcdFx0Y3R4LVx1MDAzZWNvbnNlY3V0aXZlX3RydWVzID0gMDtcbitcbitcdFx0aWYgKCFjdHgtXHUwMDNlc3RhcnRlZCkge1xuK1x0XHRcdHNldF9jYWxpbl9mbGFnKHBoeWRldiwgdHJ1ZSk7XG4rXHRcdFx0Y3R4LVx1MDAzZXN0YXJ0ZWQgPSB0cnVlO1xuK1x0XHRcdHJldHVybiBwb2xsX2NhbF9jb21wbGV0ZShwaHlkZXYsIGN0eCk7XG4rXHRcdH1cbitcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRjdHgtXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMrKztcbitcbitcdGlmIChjdHgtXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMgXHUwMDNjIEVDT05FVF9DQUxfTUlOX0NZQ0xFUyB8fCAhY3R4LVx1MDAzZW9ic2VydmVkX2ZhbHNlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChjdHgtXHUwMDNlYWJvcnRlZF90cmllcylcbitcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcIkNhbGlicmF0aW9uIGN5Y2xlICVkIGZhbHNlIHBvc2l0aXZlc1xcblwiLFxuK1x0XHRcdCAgICBjdHgtXHUwMDNlYWJvcnRlZF90cmllcyk7XG4rXG4rXHRyZXR1cm4gKChyZXQgXHUwMDI2IG91dF9tYXNrKSAhPSAwKSA/IDIgOiAxO1xuK31cbitcbisvKipcbisgKiBwb2xsX2NhbF9jb21wbGV0ZSAtIGNoZWNrIGZvciBjYWxpYnJhdGlvbiByZWdpc3RlclxuKyAqIEByZXR1cm5zOiAtZXJyb3Igb3IgMSBpZiBjYWxpYnJhdGlvbiByZXN1bHQgaXMgdHJ1ZS5cbisgKi9cbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X2NhbF9jeWNsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBjYWxfY29tcGxldGVfY3R4IGNjdHggPSB7fTtcbitcdGludCBvdXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0c2V0X2NhbGluX2ZsYWcocGh5ZGV2LCBmYWxzZSk7XG4rXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChwb2xsX2NhbF9jb21wbGV0ZSwgb3V0LCBvdXQgIT0gMCxcbitcdFx0XHRcdEVDT05FVF9DQUxfQ1lDTEVfVVMsIEVDT05FVF9DQUxfVElNRU9VVF9VUyxcbitcdFx0XHRcdGZhbHNlLCBwaHlkZXYsIFx1MDAyNmNjdHgpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJDYWxpYnJhdGlvbiB0aW1lb3V0ICVkICglZCAvICVkIC8gJWQgLyAlZClcXG5cIixcbitcdFx0XHQgICByZXQsIGNjdHguY29uc2VjdXRpdmVfdHJ1ZXMsIGNjdHgub2JzZXJ2ZWRfZmFsc2UsXG4rXHRcdFx0ICAgY2N0eC5hYm9ydGVkX3RyaWVzLCBjY3R4LnN0YXJ0ZWQpO1xuK1x0fSBlbHNlIGlmIChvdXQgXHUwMDNjIDApIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiQ2FsaWJyYXRpb24gZXJyb3IgJWRcXG5cIiwgb3V0KTtcbitcdFx0cmV0ID0gb3V0O1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gb3V0IFx1MDAzZSAxO1xuK1x0fVxuK1xuK1x0c2V0X2NhbGluX2ZsYWcocGh5ZGV2LCBmYWxzZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3I1MChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XG4rXHRpbnQgemNhbF9zeiA9IEFSUkFZX1NJWkUoemNhbF90b19yNTBvaG0pO1xuK1x0dTggcmdfemNhbF9jdHJsID0gRUNPTkVUX1I1MF9aQ0FMX0RFRkFVTFQ7XG4rXHRpbnQgaW5pdGlhbF9jb21wX291dDtcbitcdGludCBwb2xhcml0eSA9IDA7XG4rXHRpbnQgY29tcF9vdXQ7XG4rXHRpbnQgcmV0ID0gMDtcbitcdHUxNiByeGNhbDtcbitcdHUxNiB0eGNhbDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfUjUwKTtcbitcdGVsc2VcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7XG4rXG4rXHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgxMDAwLCAweDEwMDApO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcbitcdFx0XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCxcbitcdFx0XHRcdFx0IEVDT05FVF9SNTBfWkNBTF9NQVNLLFxuK1x0XHRcdFx0XHQgRklFTERfUFJFUChFQ09ORVRfUjUwX1pDQUxfTUFTSyxcbitcdFx0XHRcdFx0XHQgICAgcmdfemNhbF9jdHJsKSk7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNixcbitcdFx0XHRcdFx0cmdfemNhbF9jdHJsKTtcbitcbitcdFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcbitcdFx0aWYgKGNvbXBfb3V0IFx1MDAzYyAwKSB7XG4rXHRcdFx0cmV0ID0gY29tcF9vdXQ7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKHBvbGFyaXR5ID09IDApIHtcbitcdFx0XHQvKiBGaXJzdCBjeWNsZSAqL1xuK1x0XHRcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcbitcdFx0XHRwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxO1xuK1x0XHR9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHtcbitcdFx0XHQvKiBGb3VuZCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHJnX3pjYWxfY3RybCArPSBwb2xhcml0eTtcbitcbitcdFx0aWYgKHJnX3pjYWxfY3RybCBcdTAwM2UgRUNPTkVUX1I1MF9aQ0FMX01BWCkge1xuK1x0XHRcdHJldCA9IDE7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHJ4Y2FsID0gbWF4KDAsIG1pbih6Y2FsX3N6IC0gMSwgY3RhYi56Y2FsX3J4ICsgcmdfemNhbF9jdHJsKSk7XG4rXHR0eGNhbCA9IG1heCgwLCBtaW4oemNhbF9zeiAtIDEsIGN0YWIuemNhbF90eCArIHJnX3pjYWxfY3RybCkpO1xuK1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMixcbitcdFx0XHRGSUVMRF9QUkVQKEVDT05FVF9SNTBfVFhDQUxfTUFTSywgdHhjYWwpIHxcbitcdFx0XHRGSUVMRF9QUkVQKEVDT05FVF9SNTBfUlhDQUxfTUFTSywgcnhjYWwpKTtcbitcbitvdXQ6XG4rXHQvKiBaZXJvIG91dCByZWdpc3RlcnMgKi9cbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgMHgwMDAwKTtcbitcdGVsc2VcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV90eF9vZmZzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRzdHJ1Y3QgY29tcGVuc2F0aW9uIGN0YWIgPSBnZXRfY3RhYihwaHlkZXYpO1xuK1x0aW50IGluaXRpYWxfY29tcF9vdXQ7XG4rXHRpbnQgcG9sYXJpdHkgPSAwO1xuK1x0aW50IG9mZnNldCA9IEVDT05FVF9UWE9TX0RFRkFVTFQ7XG4rXHR1MTYgb2Zmc2V0X2JpbjtcbitcdGludCBjb21wX291dDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgMHg1MjAwKTsgLyogZml4IE1ESSAqL1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgRUNPTkVUX0NBTF9UWVBFX1RYT1MpO1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDA0MDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4NDgwMCk7XG4rXHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4NGMwMCk7XG4rXHR9XG4rXG4rXHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyMSwgMHgwODAwLCAweDA4MDApO1xuK1xuK1x0cGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MDJjMCwgMHgwMmMwKTtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4ODAwMCk7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdG9mZnNldF9iaW4gPSBGSUVMRF9QUkVQKEVDT05FVF9UWE9TX01BRywgYWJzKG9mZnNldCkpO1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzYyAwKVxuK1x0XHRcdG9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjtcbitcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAxNywgb2Zmc2V0X2Jpbik7XG4rXG4rXHRcdGNvbXBfb3V0ID0gZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHBoeWRldik7XG4rXHRcdGlmIChjb21wX291dCBcdTAwM2MgMCkge1xuK1x0XHRcdHJldCA9IGNvbXBfb3V0O1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXG4rXHRcdGlmIChwb2xhcml0eSA9PSAwKSB7XG4rXHRcdFx0LyogRmlyc3QgY3ljbGUgKi9cbitcdFx0XHRpbml0aWFsX2NvbXBfb3V0ID0gY29tcF9vdXQ7XG4rXHRcdFx0cG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTtcbitcdFx0fSBlbHNlIGlmIChpbml0aWFsX2NvbXBfb3V0ICE9IGNvbXBfb3V0KSB7XG4rXHRcdFx0LyogRm91bmQgKi9cbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRvZmZzZXQgKz0gcG9sYXJpdHk7XG4rXG4rXHRcdGlmIChvZmZzZXQgXHUwMDNlIEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgXHUwMDNjIEVDT05FVF9UWE9TX01JTikge1xuK1x0XHRcdHJldCA9IDE7XG4rXHRcdFx0b2Zmc2V0ID0gMDtcbitcdFx0XHRnb3RvIHNldF92YWw7XG4rXHRcdH1cbitcdH1cbitcbitcdG9mZnNldCArPSBjdGFiLnR4b3MgKiBwb2xhcml0eTtcbitcbitcdGlmIChvZmZzZXQgXHUwMDNlIEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgXHUwMDNjIEVDT05FVF9UWE9TX01JTilcbitcdFx0b2Zmc2V0IC09IGN0YWIudHhvcyAqIHBvbGFyaXR5O1xuK1xuK3NldF92YWw6XG4rXHRvZmZzZXRfYmluID0gRklFTERfUFJFUChFQ09ORVRfVFhPU19NQUcsIGFicyhvZmZzZXQpKTtcbitcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4rXHRcdG9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMTcsIG9mZnNldF9iaW4pO1xuK1xuK291dDpcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xuK1x0ZWxzZVxuK1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3R4X2FtcChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XG4rXHRpbnQgaW5pdGlhbF9jb21wX291dDtcbitcdHU4IHR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUO1xuK1x0aW50IHBvbGFyaXR5ID0gMDtcbitcdGludCBjb21wX291dDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgMHg1MjAzKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDAgfCBFQ09ORVRfREFDX0lOXzJWKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNCwgMjEsIDB4MDgwMCk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAyYzApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4rXHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9UWEFNUCk7XG4rXHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDYwMCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwKTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwIHwgMHgwNDAwKTtcbitcdH1cbitcbitcdGZvciAoOzspIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTtcbitcbitcdFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcbitcdFx0aWYgKGNvbXBfb3V0IFx1MDAzYyAwKSB7XG4rXHRcdFx0cmV0ID0gY29tcF9vdXQ7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKHBvbGFyaXR5ID09IDApIHtcbitcdFx0XHQvKiBGaXJzdCBjeWNsZSAqL1xuK1x0XHRcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcbitcdFx0XHRwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxO1xuK1x0XHR9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHtcbitcdFx0XHQvKiBGb3VuZCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHR4X2FtcCArPSBwb2xhcml0eTtcbitcbitcdFx0aWYgKHR4X2FtcCBcdTAwM2UgRUNPTkVUX1RYQU1QX01BWCkge1xuK1x0XHRcdHJldCA9IDE7XG4rXHRcdFx0dHhfYW1wID0gRUNPTkVUX1RYQU1QX0RFRkFVTFQ7XG4rXHRcdFx0Z290byBzZXRfdmFsO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAodHhfYW1wICsgY3RhYi5hbXAgXHUwMDNjIEVDT05FVF9UWEFNUF9NQVgpXG4rXHRcdHR4X2FtcCArPSBjdGFiLmFtcDtcbitcbitzZXRfdmFsOlxuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTtcbitcbitvdXQ6XG4rXHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAwMDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4rXHR9XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHUxNiBsMHIyNl90ZW1wO1xuK1x0aW50IHJldDtcbitcdGludCBpO1xuK1xuK1x0aWYgKCFzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIlBvcnQgemVybyBtdXN0IGJlIGNvbmZpZ3VyZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyIFx1MDAzYyBzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwLVx1MDAzZW1kaW8uYWRkcilcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogR2xvYmFsIHJlZ2lzdGVycyAqL1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyNiwgMHg4MDQ0KTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjEsIDB4MDBlYSk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDI3LCAweDAyZjApO1xuK1xuK1x0LyogTG9jYWwgcmVnaXN0ZXJzICovXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweGEwMDApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wxLCAyMiwgMHhmMDAwKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjIsIDB4NDQ0NCk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDI0LCAweDBjMGMpO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyOCwgMHg3YzQ0KTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMzAsIDB4MDAwNSk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDE3LCAweDAwMDApO1xuK1xuK1x0LyogRm9yIEUxL0UyLCBFMyByZXF1aXJlcyAweDIyMjAsIGJ1dCBubyBrbm93biBFTjc1MTIyMSBFMyBjaGlwcyBleGlzdCAqL1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgyMjAwKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4rXHRcdCAvKiAxMDBNYiB0eCBwMnpfbWlkLCB6Mm5fbWlkLCB6Mm5fb3ZzX3Bvc3QsIG4yel9taWQgKi9cbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyMiwgMHgwMDMwKTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNSwgMHgwMjQ4KTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNywgMHgwMmYwKTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyOCwgMHgwMjMwKTtcbitcdH1cbitcbitcdHJldCA9IHBoeV9yZWFkX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bDByMjZfdGVtcCA9IHJldDtcbitcbitcdC8qIEJHIHZvbHRhZ2UgKi9cbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7XG4rXG4rXHQvKiBNREkgKi9cbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTYwMyk7XG4rXG4rXHQvKiBkaXNhYmxlIHR4IHNsZXcgY29udHJvbCAqL1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgyMTAwKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDU7IGkrKykge1xuK1x0XHRyZXQgPSBlbjc1MTIyMV9mZXBoeV9yNTAocGh5ZGV2KTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSsrKSB7XG4rXHRcdHJldCA9IGVuNzUxMjIxX2ZlcGh5X3R4X29mZnNldChwaHlkZXYpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRicmVhaztcbitcdH1cbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA1OyBpKyspIHtcbitcdFx0cmV0ID0gZW43NTEyMjFfZmVwaHlfdHhfYW1wKHBoeWRldik7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCBsMHIyNl90ZW1wKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIyLCAweDQ0NDQpO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDMxMDApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcG9ydDAgPSBFQ09ORVRfRU43NTI2Q19QT1JUMF9BRERSO1xuK1x0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQ7XG4rXHRzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkICE9IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuK1x0XHRwb3J0MCA9IEVDT05FVF9MRUdBQ1lfUE9SVDBfQUREUjtcbitcbitcdHJldCA9IGRldm1fcGh5X3BhY2thZ2Vfam9pbihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHBoeWRldiwgcG9ydDAsXG4rXHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCkpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXG4rXHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgPT0gcG9ydDApXG4rXHRcdHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAgPSBwaHlkZXY7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGVuNzUxMjIxX2ZlcGh5X2RyaXZlcltdID0ge1xuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpLFxuK1x0XHQubmFtZVx0XHQ9IFwiRWNvTmV0IEVONzUxMjIxIEZFUEhZXCIsXG4rXHRcdC5jb25maWdfaW5pdFx0PSBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdCxcbitcdFx0LmNvbmZpZ19pbnRyXHQ9IGdlbnBoeV9ub19jb25maWdfaW50cixcbitcdFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssXG4rXHRcdC5wcm9iZVx0XHQ9IGVuNzUxMjIxX2ZlcGh5X3Byb2JlLFxuK1x0XHQucmVhZF9wYWdlXHQ9IG10a19waHlfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXG4rXHR9XG4rfTtcbitcbittb2R1bGVfcGh5X2RyaXZlcihlbjc1MTIyMV9mZXBoeV9kcml2ZXIpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgZW43NTEyMjFfZmVwaHlfdGJsW10gPSB7XG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChFQ09ORVRfRkVQSFlfSURfRU43NTI2QykgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiRWNvTmV0IFNvQyAxMC8xMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfQVVUSE9SKFwiQ2FsZWIgSmFtZXMgRGVMaXNsZSBcdTAwM2NjamRAY2pkbnMuZnJcdTAwM2VcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBlbjc1MTIyMV9mZXBoeV90YmwpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MTg6NDMuMTkxOTI1OTMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MzcwMDA1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIE1lZGlhdGVrIEVjb05ldCBQSFkgRHJpdmVyIGluIHN5emthbGxlcioqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCB0aGlzIG5ldyBQSFkgZHJpdmVyLCBgZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY2AsIGVuYWJsZWQgYnkgYEVDT05FVF9GRV9TT0NfUEhZYC4gSXQncyBmb3IgYW4gRWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZLiBUaGUgcXVlc3Rpb24gaXMsIGhvdyBkbyB3ZSB0cmlnZ2VyIGl0IHdpdGhpbiBzeXprYWxsZXIgZm9yIGZ1enppbmc/XG5cbk5vcm1hbGx5LCBQSFkgZHJpdmVycyBjb21lIHRvIGxpZmUgd2hlbiB0aGUgaGFyZHdhcmUgaXMgcHJlc2VudCwgb3IsIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCwgdGhyb3VnaCBNRElPIGJ1cyBlbXVsYXRpb24uIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBkZWRpY2F0ZWQgTURJTyBlbXVsYXRvciwgd2hpY2ggaXMgYSBwcm9ibGVtLiBJdCBjYW4gdHJpZ2dlciBQSFkgY29kZSwgYnV0IG9ubHkgaWYgdGhlIFBIWSBoYXMgYmVlbiBpbnN0YW50aWF0ZWQuIENhbiB3ZSBldmVuICppbnN0YW50aWF0ZSogdGhpcyBzcGVjaWZpYyBQSFkgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50P1xuXG5UeXBpY2FsbHksIFBIWSBkcml2ZXJzIGdldCBwcm9iZWQgZWl0aGVyIHdoZW4gYSBuZXR3b3JrIGRyaXZlciByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHNjYW5zLCBvciB0aHJvdWdoIGEgZGV2aWNlIHRyZWUuIEJ1dCwgYHZoY2lgLCBgbmV0ZGV2c2ltYCwgYW5kIGBkdW1teWAgaW4gc3l6a2FsbGVyIGRvbid0IHJlZ2lzdGVyIGFyYml0cmFyeSBQSFlzIG9uIGFuIE1ESU8gYnVzLiBOZWl0aGVyIGRvIGBtYWNzZWNgLCBgdmV0aGAsIG9yIGB0dW5gLlxuXG5JcyB0aGVyZSBhIHVzZXItc3BhY2Ugd2F5IHRvICpmb3JjZSogYSBQSFkgcHJvYmU/IE1heWJlIGBTSU9DU01JSVJFR2A/IE5vcGUsIHRoYXQgbmVlZHMgYW4gZXhpc3RpbmcgUEhZLiBDYW4gd2UgcmVnaXN0ZXIgYSBQSFkgZGV2aWNlIHZpYSBzeXNmcyBvciBzb21lIG90aGVyIG1lY2hhbmlzbT8gTGlrZWx5IG5vdC4gU3l6a2FsbGVyIGRvZXNuJ3QgcmVhbGx5IGhhdmUgYSB3YXkgdG8gbWFrZSBQSFkgZHJpdmVycyBhcHBlYXIgdW5sZXNzIGEgdmlydHVhbCBNRElPIGJ1cyBleGlzdHMuIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCBlcXVpdmFsZW50IHRvIGhlbHAuIGBkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNgIGlzIGFsc28gbm90IHVzZWZ1bCBoZXJlLlxuXG5JJ20gdGhpbmtpbmcgSSBzaG91bGQgc2NvdXIgdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIGFueSBtZW50aW9uIG9mIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBvciBzaW1pbGFyLCBidXQgSSBjYW4ndCB1c2Ugc3l6LWdyZXBwZXIsIHdoaWNoIG1ha2VzIHRoaXMgZGlmZmljdWx0LlxuXG5BbmQgdGhlbiwgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgZnV6emluZyBQSFkgZHJpdmVycyBsaWtlIHRoaXMgaXMgZXZlbiBjb25zaWRlcmVkIGEgcHJpb3JpdHkuIFVzdWFsbHksIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgbGlrZSB0aGlzLCB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGRvbid0IHBsYXkgbmljZWx5IGluIFFFTVUsIGFyZSBiYXNpY2FsbHkgdW5yZWFjaGFibGUuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIHRyaWNreSB0b28uIFRoaXMgYEVDT05FVF9GRV9TT0NfUEhZYCBkZXBlbmRzIG9uIGBFQ09ORVQgfHwgQ09NUElMRV9URVNUYC4gYEVDT05FVGAgaXNuJ3QgYSBzdGFuZGFyZCB2aXJ0dWFsIGRldmljZSFcblxuU28sIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBsb29rIGZvciBzb21lIHZpcnR1YWwgTURJTyBidXMgZHJpdmVyIHdpdGhpbiB0aGUga2VybmVsIHRoYXQgSSBjb3VsZCBjb250cm9sIGZyb20gdXNlcnNwYWNlLiBUaGF0IGNvdWxkIGJlIGEgd2F5IGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUwMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjE4OjU0LjAyODkzMTY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzc5NTI4NDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKm1vY2t1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MTg6NTcuMTA2ODk2NDQxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4NTQ2OTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgVXNlcnNwYWNlIFBIWSBEZXZpY2UgSW5zdGFudGlhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkNhbiB3ZSBhY3R1YWxseSBpbnN0YW50aWF0ZSBhIFBoeXNpY2FsIExheWVyIChQSFkpIGRldmljZSBmcm9tIHVzZXJzcGFjZT9cIiBXZSBrbm93IHRoZSB0cmFkaXRpb25hbCBtb2RlbCB1c3VhbGx5IGludm9sdmVzIHRoZSBrZXJuZWwgaGFuZGxpbmcgdGhpcy4gQnV0LCBJJ20gY3VyaW91cy4gQXJlIHRoZXJlIGFueSBjbGV2ZXIsIHVuY29udmVudGlvbmFsIHdheXMgdG8gYnlwYXNzIHRoYXQ/IEFyZSB0aGVyZSBleHBvc2VkIGludGVyZmFjZXMsIHBlcmhhcHMgdGhyb3VnaCBhIHNwZWNpZmljIGRyaXZlciBtb2RlbCBvciBhIHZlbmRvci1zcGVjaWZpYyBBUEksIHRoYXQgbWlnaHQgYWxsb3cgdXMgZGlyZWN0IG9yIGluZGlyZWN0IGNvbnRyb2wgb3ZlciBQSFkgaW5zdGFudGlhdGlvbiBmcm9tIHVzZXJzcGFjZT9cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQga2luZCBvZiBjb250cm9sIHdvdWxkIHdlIGhhdmU/IFdvdWxkIGl0IGJlIGxpbWl0ZWQgdG8gc3BlY2lmaWMgUEhZcyBvciBwcm90b2NvbHM/IENvdWxkIHdlIGNvbXBsZXRlbHkgYWJzdHJhY3QgdGhlIFBIWSBmcm9tIHRoZSBrZXJuZWw/IFdoYXQgYWJvdXQgc2VjdXJpdHkgaW1wbGljYXRpb25zPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2UnZCBuZWVkIHRvIGNvbnNpZGVyPyBJcyB0aGVyZSBhIG5lZWQgZm9yIGEgdXNlcnNwYWNlIFBIWSBkZXZpY2U/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTgzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MTk6MDEuMDkyMzY4ODM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjUxNDcxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZV9jcmVhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTExNz1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM0LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTM1OlxcdFxcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCAwLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM2LVxcdGlmIChJU19FUlIocGh5KSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTg1LVxcdFxcdC8qIFJlYWwgUEhZIElEIG9mIFBvcnQgMSBpcyAwICovXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTg2OlxcdFxcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgUEhZX0lEX1RKQTExMDIsIGZhbHNlLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01ODctXFx0XFx0aWYgKElTX0VSUihwaHkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTItXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTkzOlxcdFxcdC8qIE92ZXJ3cml0ZSBwYXJlbnQgZGV2aWNlLiBwaHlfZGV2aWNlX2NyZWF0ZSgpIHNldCBwYXJlbnQgdG9cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTQtXFx0XFx0ICogdGhlIG1paV9idXMtXFx1MDAzZWRldiwgd2hpY2ggaXMgbm90IGNvcnJlY3QgaW4gY2FzZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NzI4PXN0YXRpYyBpbnQgcGh5X3JlcXVlc3RfZHJpdmVyX21vZHVsZShzdHJ1Y3QgcGh5X2RldmljZSAqZGV2LCB1MzIgcGh5X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDctXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo3NDg6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNzQ5LVxcdFxcdFxcdFxcdCAgICAgYm9vbCBpc19jNDUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTgzOS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo4NDA6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX2NyZWF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy04NDEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEwNzE9c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5Ni1cXHRcXHRpZiAoIXIpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMDk3OlxcdFxcdFxcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwOTgtXFx0XFx0XFx0XFx0XFx0XFx0IHRydWUsIFxcdTAwMjZjNDVfaWRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDE6XFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCBpc19jNDUsIFxcdTAwMjZjNDVfaWRzKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDItfVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaD0yMTQ5PWludCBwaHlfbW9kaWZ5X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLCB1MzIgcmVnbnVtLFxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTUxLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjE1MjpzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTUzLVxcdFxcdFxcdFxcdCAgICAgYm9vbCBpc19jNDUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjE5OjAzLjc1NzUyNDY1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MzY0Njc0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ3JlYXRpbmcgYSBWaXJ0dWFsIFBIWSBEZXZpY2UgZnJvbSBVc2Vyc3BhY2UqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBwb3NzaWJsZSB0byBjb25qdXJlIHVwIGEgUEhZIGRldmljZSBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZS4gVHlwaWNhbGx5LCB0aGUgTURJTyBidXMgZHJpdmVyIGhhbmRsZXMgUEhZIGRldmljZSBjcmVhdGlvbiBkdXJpbmcgaXRzIGJ1cyBzY2Fucy4gSSB3b25kZXIsIGlzIHRoZXJlIGEgdmlydHVhbCBNRElPIGJ1cyBJIGNvdWxkIGxldmVyYWdlIGZvciB0aGlzIHB1cnBvc2U/IExldCdzIGRpdmUgaW50byBzb21lIGNvZGUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5GaXJzdCB1cCwgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmNgLiBOb3BlLCB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBvZmZlciBhIHdheS4gSG93IGFib3V0IGBkcml2ZXJzL25ldC9tZGlvL21kaW8tbW9ja3VwLmNgIG9yIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tZHVtbXkuY2A/IFN0aWxsIG5vIGx1Y2suIE9rYXksIGxldCdzIGNvbnNpZGVyIHRoZSBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYCBkcml2ZXIuIEl0IGRvZXMgY3JlYXRlIGEgZml4ZWQgUEhZLCBidXQgaXQgZG9lc24ndCBzdXBwb3J0IHRoZSBkeW5hbWljIGRpc2NvdmVyeSBvZiBhcmJpdHJhcnkgUEhZIElEcywgd2hpY2ggaXMgd2hhdCBJIG5lZWQuIFdoYXQgYWJvdXQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uY2AsIGBkcml2ZXJzL25ldC9waHkvbWRpby1iaXRiYW5nLmNgLCBvciBgZHJpdmVycy9uZXQvcGh5L21kaW8tbXV4LmNgPyBUaG9zZSBkb24ndCBsb29rIHByb21pc2luZyBlaXRoZXIuXG5cblNvLCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIEkgc29tZWhvdyB0cmlnZ2VyIGBwaHlfZGV2aWNlX2NyZWF0ZWAgd2l0aCBhIGN1c3RvbSBgcGh5X2lkYCBmcm9tIHVzZXJzcGFjZT8gTXkgaW50dWl0aW9uIHBvaW50cyBtZSB0b3dhcmRzIHNvbWV0aGluZyBsaWtlIG5ldGxpbmsuIE1heWJlIEkgY2FuIGZpbmQgYSBob29rIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2Agb3IgcGVyaGFwcyB3aXRoaW4gdGhlIGBuZXQvZXRodG9vbC9gIGRpcmVjdG9yeSB0aGF0IHdvdWxkIGFsbG93IG1lIHRvIGdldCB0aGlzIGRvbmU/IFRpbWUgdG8gc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MTk6MTAuNTkzOTk1Nzk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODE3MDQzMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZV9jcmVhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTExNz1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM0LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTM1OlxcdFxcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCAwLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM2LVxcdGlmIChJU19FUlIocGh5KSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTg1LVxcdFxcdC8qIFJlYWwgUEhZIElEIG9mIFBvcnQgMSBpcyAwICovXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTg2OlxcdFxcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgUEhZX0lEX1RKQTExMDIsIGZhbHNlLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01ODctXFx0XFx0aWYgKElTX0VSUihwaHkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTItXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTkzOlxcdFxcdC8qIE92ZXJ3cml0ZSBwYXJlbnQgZGV2aWNlLiBwaHlfZGV2aWNlX2NyZWF0ZSgpIHNldCBwYXJlbnQgdG9cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTQtXFx0XFx0ICogdGhlIG1paV9idXMtXFx1MDAzZWRldiwgd2hpY2ggaXMgbm90IGNvcnJlY3QgaW4gY2FzZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NzI4PXN0YXRpYyBpbnQgcGh5X3JlcXVlc3RfZHJpdmVyX21vZHVsZShzdHJ1Y3QgcGh5X2RldmljZSAqZGV2LCB1MzIgcGh5X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDctXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo3NDg6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNzQ5LVxcdFxcdFxcdFxcdCAgICAgYm9vbCBpc19jNDUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTgzOS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo4NDA6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX2NyZWF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy04NDEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEwNzE9c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5Ni1cXHRcXHRpZiAoIXIpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMDk3OlxcdFxcdFxcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwOTgtXFx0XFx0XFx0XFx0XFx0XFx0IHRydWUsIFxcdTAwMjZjNDVfaWRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDE6XFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCBpc19jNDUsIFxcdTAwMjZjNDVfaWRzKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDItfVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaD0yMTQ5PWludCBwaHlfbW9kaWZ5X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLCB1MzIgcmVnbnVtLFxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTUxLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjE1MjpzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTUzLVxcdFxcdFxcdFxcdCAgICAgYm9vbCBpc19jNDUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjE5OjEzLjA3NTcwNTA1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NDMzOTgwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHRyaWdnZXIgYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeWAuIFRoYXQgZnVuY3Rpb24ncyBjYWxsZWQgZHVyaW5nIGRldmljZSB0cmVlIG9yIEFDUEkgcGFyc2luZy4gVGhlIG9idmlvdXMgcXVlc3Rpb24gaXM6IGNhbiBJIGluamVjdCBhIGRldmljZSB0cmVlIG92ZXJsYXkgZnJvbSB1c2Vyc3BhY2U/IEhtbSwgcHJvYmFibHkgbm90IGRpcmVjdGx5LiBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgaGFuZGxlIGFyYml0cmFyeSBEVCBvdmVybGF5cyB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIHBzZXVkby1zeXNjYWxsIGZvciB0aGF0LCBhbmQgSSBkb24ndCByZWNhbGwgb25lIGZvciB0aGlzIHB1cnBvc2UuXG5cbkFscmlnaHQsIHBpdm90LiBXaGF0IGFib3V0IGBnZXRfcGh5X2RldmljZWA/IFRoYXQgZ2V0cyBjYWxsZWQgYnkgYG1kaW9idXNfc2NhbmAuIEFuZCBgbWRpb2J1c19zY2FuYCBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGBfX21kaW9idXNfcmVnaXN0ZXJgIHdoZW4gdGhlIE1ESU8gYnVzIGlzIGJlaW5nIHNjYW5uZWQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBpcyB0aGVyZSBhbiBNRElPIGJ1cyB0aGF0IGNvdWxkIGJlICpyZWdpc3RlcmVkKiBmcm9tIHVzZXJzcGFjZT8gTGV0J3MgcnVsZSBvdXQgdGhlIG9idmlvdXM6IGBkcml2ZXJzL25ldC9kdW1teS5jYOKAlG5vcGUsIG5vIE1ESU8gYnVzIHRoZXJlLiBTYW1lIHdpdGggYGRyaXZlcnMvbmV0L21hY3NlYy5jYCBhbmQgYGRyaXZlcnMvbmV0L3R1bi5jYOKAlHRob3NlIGFyZSBkZWFkIGVuZHMuXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBgZHJpdmVycy9uZXQvdXNiL2AuIEFoYSwgc29tZSBVU0IgbmV0d29yayBhZGFwdGVycyAqZG8qIGhhdmUgTURJTyBidXNlcyEgVGhpcyBpcyBwcm9taXNpbmcuIFRoZSBxdWVzdGlvbiBpcyBpZiBzeXprYWxsZXIgaXMgdXNpbmcgYHZoY2lgIHRvIGVtdWxhdGUgVVNCIG5ldHdvcmsgYWRhcHRlcnM/IElmIHNvLCB0aGVuIGl0ICpjb3VsZCogdGhlb3JldGljYWxseSBlbXVsYXRlIHRoZSBNRElPIGJ1cyBhcyB3ZWxsISBTbywgSSBuZWVkIHRvIGNoZWNrIHdoaWNoIFVTQiBuZXR3b3JrIGFkYXB0ZXIgZHJpdmVycyByZWdpc3RlciBhbiBNRElPIGJ1cyBhbmQsIGNyaXRpY2FsbHksIGFsbG93IHRoZSBidXMgdG8gYmUgc2Nhbm5lZC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgc3BlY2lmaWMgZHJpdmVycyBsaWtlIGBkcml2ZXJzL25ldC91c2Ivc21zYzc1eHguY2AgYW5kIGBkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jYCB0byBzZWUgaWYgdGhleSBmaXQgdGhlIGJpbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzU5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjE5OjIwLjgxOTEwNjc4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTg2MzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTEzOCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0PTM0OD1NRElPXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3QtMzUwLSAgZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoKVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTE6ICBkZXZtX21kaW9idXNfcmVnaXN0ZXIoKVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTI6ICBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoKVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdC0zNTMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdD0xMj1kZXZpY2UgKHRoZSBzYW1lIG9iamVjdHMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB2aWFcXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdDoxMzpgYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeSgpYGApLiBNQUMtc2lkZSBjb25uZWN0aW9uIHByb3BlcnRpZXMgc3VjaCBhc1xcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0LTE0LWBgcGh5LWhhbmRsZWBgIGFuZCBgYHBoeS1tb2RlYGAgYXJlIGRvY3VtZW50ZWQgaW4gW2FjcGktbWRpby1waHldXy5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvcGh5LnJzdD03PVRoZSBQSFlzIG9uIGFuIE1ESU8gYnVzIFtwaHldIGFyZSBwcm9iZWQgYW5kIHJlZ2lzdGVyZWQgdXNpbmdcXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3Q6ODpmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoKS5cXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3QtOS1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0PTQwPXJlZ2lzdGVyZWQgYXMgYSBkaXN0aW5jdCBkZXZpY2UuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC01Ni0gICBkcml2ZXIgbmVlZHMsIHNldHVwIHRoZSBtaWlfYnVzIHN0cnVjdHVyZSwgYW5kIHJlZ2lzdGVyIHdpdGggdGhlIFBBTCB1c2luZ1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0OjU3OiAgIG1kaW9idXNfcmVnaXN0ZXIuICBTaW1pbGFybHksIHRoZXJlJ3MgYSByZW1vdmUgZnVuY3Rpb24gdG8gdW5kbyBhbGwgb2ZcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC01OC0gICB0aGF0ICh1c2UgbWRpb2J1c191bnJlZ2lzdGVyKS5cXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmM9MTA5PXN0YXRpYyBpbnQgZXA4MjQ4ZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzItXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYzoxMzM6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG9mZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzQtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jPTIwNz1zdGF0aWMgaW50IGdwaW9fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jLTI0My1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYzoyNDQ6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYz02MDc9c3RhdGljIGludCBiY21fc2YyX21kaW9fcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYy02ODMtXFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYzo2ODQ6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2V1c2VyX21paV9idXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjg1LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYz0xODc9c3RhdGljIGludCBnc3dpcF9tZGlvKHN0cnVjdCBnc3dpcF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjEzLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jOjIxNDpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTIxNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQxLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0MjpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LVxcdTAwM2VkZXYsIGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yMzIxPWludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjM5Mi1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMzkzOlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihkcy1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTQtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz02ODU9c3RhdGljIGludCBsYW45Mzd4X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU1LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6NzU2OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihkcy1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQwOT1tdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjQ0NC1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjQ0NTpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0NDYtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jPTI0Mj1zdGF0aWMgaW50IG10NzYyOF9zZXR1cF9pbnRlcm5hbF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy0yNjEtXFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jOjI2MjpcXHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM4MzQ9c3RhdGljIGludCBtdjg4ZTZ4eHhfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zODg3LVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM4ODg6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zODg5LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTI2Nz1zdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwX21kaW8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjkyLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjI5MzpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5NC1cXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jPTE0OT1zdGF0aWMgaW50IG5ldGNfcG9ydF9jcmVhdGVfZW1kaW9fYnVzKHN0cnVjdCBuZXRjX3BvcnQgKm5wLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTc5LVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjE4MDpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE4MS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9OTU3PXN0YXRpYyBpbnQgdnNjOTk1OV9tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xMDEzLVxcdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjEwMTQ6XFx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxNS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jPTg3OD1zdGF0aWMgaW50IHZzYzk5NTNfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDMtXFx0LyogTmVlZGVkIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIGJ1cyBtdXRleCBsb2NrICovXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYzo5MDQ6XFx0cmMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTA1LVxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM9MzU3PXN0YXRpYyBpbnQgYXI5MzMxX3N3X21idXNfaW5pdChzdHJ1Y3QgYXI5MzMxX3N3X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4MS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jOjM4MjpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgzLVxcdG9mX25vZGVfcHV0KG1ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz05NDc9cWNhOGtfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4Ni1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5ODc6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM9NzQ9aW50IHJ0bDgzeHhfc2V0dXBfdXNlcl9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy05OS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MTAwOlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTEwMS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jPTExMTc9c3RhdGljIGludCBhNXBzd19wcm9iZV9tZGlvKHN0cnVjdCBhNXBzdyAqYTVwc3csIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0My1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jOjExNDQ6XFx0cmV0dXJuIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQ1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0zMDc9dm9pZCBzamExMTA1X2ZyYW1lX21lbW9yeV9wYXJ0aXRpb25pbmcoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMzA5LS8qIEZyb20gc2phMTEwNV9tZGlvLmMgKi9cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg6MzEwOmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMzExLXZvaWQgc2phMTEwNV9tZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTMwMjY9c3RhdGljIGludCBzamExMTA1X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjctXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MzA2ODpcXHRyYyA9IHNqYTExMDVfbWRpb2J1c19yZWdpc3Rlcihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMzA2OS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0yNTg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90eF9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMjg3LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjI4ODpcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMjg5LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzEyPXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdDFfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM0My1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzozNDQ6XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM0NS1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTM2OD1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19wY3NfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5NS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzozOTY6XFx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk3LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9NDM5PXN0YXRpYyB2b2lkIHNqYTExMDVfbWRpb2J1c19wY3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDU4LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQ1OTppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00NjAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTU5NT15dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTYxMi1cXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NjEzOlxcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTYxNC1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTcyNj15dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTc0My1cXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NzQ0OlxcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTc0NS1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM9NDU5PXN0YXRpYyBpbnQgYXhfbWlpX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYzo0Nzk6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihheC1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmMtNDgwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM9MTMyMT1zdGF0aWMgaW50IG93bF9lbWFjX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jOjEzNDY6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM9NTA5PXN0YXRpYyBpbnQgYWRpbjExMTBfcmVnaXN0ZXJfbWRpb2J1cyhzdHJ1Y3QgYWRpbjExMTBfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYzo1MzA6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmMtNTMxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYz02MTc9c3RhdGljIGludCBhZGluMTE0MF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBhZGluMTE0MF9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jOjYzNzpcXHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZzcGlkZXYtXFx1MDAzZWRldiwgcHJpdi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjM4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmM9MTI5MD1zdGF0aWMgaW50IGdyZXRoX21kaW9faW5pdChzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYzoxMzA3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoZ3JldGgtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwOC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYz0zOTMxPXN0YXRpYyBpbnQgZXQxMzF4X3BjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM6NDAyNzpcXHRyYyA9IG1kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyOC1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM9MTIxPXN0YXRpYyBpbnQgYWx0ZXJhX3RzZV9tZGlvX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYzoxNTg6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTktXFx0aWYgKHJldCAhPSAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jPTEwNjE9c3RhdGljIGludCBhdTEwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jOjEyMjI6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihhdXAtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMy1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTM0Mjg9c3RhdGljIGludCB4Z2JlX3BoeV9pbml0KHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxNy1cXHRzbnByaW50ZihtaWktXFx1MDAzZWlkLCBzaXplb2YobWlpLVxcdTAwM2VpZCksIFxcXCIlc1xcXCIsIGRldl9uYW1lKHBkYXRhLVxcdTAwM2VkZXYpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MTg6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtaWkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxOS1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzozNzIwOlxcdFxcdGRldl9lcnIocGRhdGEtXFx1MDAzZWRldiwgXFxcIm1kaW9idXNfcmVnaXN0ZXIgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MjEtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM9OTg9aW50IHhnZV9tZGlvX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTE4LVxcdG1kaW9fYnVzLVxcdTAwM2VwaHlfbWFzayA9IDB4MTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jOjExOTpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTEyMC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz04Mzc9aW50IHhnZW5lX2VuZXRfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTg4Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjg4ODpzdGF0aWMgaW50IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg5LVxcdFxcdFxcdFxcdCAgc3RydWN0IG1paV9idXMgKm1kaW8pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkxMzpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTE0LVxcdFxcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjEtXFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MjI6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz05Mzk9aW50IHhnZW5lX2VuZXRfbWRpb19jb25maWcoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5NTg6XFx0cmV0ID0geGdlbmVfbWRpb2J1c19yZWdpc3RlcihwZGF0YSwgbWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYz0xMzE9aW50IGFyY19tZGlvX3Byb2JlKHN0cnVjdCBhcmNfZW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jLTE3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM6MTczOlxcdGVycm9yID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jLTE3NC1cXHRvZl9ub2RlX3B1dChtZGlvX25vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM9OTY2PXN0YXRpYyBpbnQgYXg4ODc5NmNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM6MTAxMTpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBheF9sb2NhbC1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMi1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYz02ODc9c3RhdGljIGludCBhZzcxeHhfbWRpb19wcm9iZShzdHJ1Y3QgYWc3MXh4ICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNzI3LVxcdG1ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM6NzI4OlxcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjktXFx0b2Zfbm9kZV9wdXQobW5wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI2MDpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNjEtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM9MTcxMz1zdGF0aWMgaW50IGJjbV9lbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy0xODI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jOjE4MzA6XFx0XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MzEtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM9MjExPXN0cnVjdCBtaWlfYnVzICpiY21hX21kaW9fbWlpX3JlZ2lzdGVyKHN0cnVjdCBiZ21hYyAqYmdtYWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM6MjM2OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWlpX2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNy1cXHRvZl9ub2RlX3B1dChucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz0xOTM9aW50IGJjbWdlbmV0X21paV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBpbml0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjMzLVxcdFxcdHBoeV9uYW1lID0gXFxcImV4dGVybmFsIFJ2TUlJXFxcIjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoyMzQ6XFx0XFx0Lyogb2ZfbWRpb2J1c19yZWdpc3RlciB0b29rIGNhcmUgb2YgcmVhZGluZyB0aGUgJ21heC1zcGVlZCdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzUtXFx0XFx0ICogUEhZIHByb3BlcnR5IGZvciB1cywgZWZmZWN0aXZlbHkgbGltaXRpbmcgdGhlIFBIWSBzdXBwb3J0ZWRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYz0yMTU3PXN0YXRpYyBpbnQgc2JtYWNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldiwgbG9uZyBsb25nIGJhc2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyNy1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM6MjIyODpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHNjLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyOS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYz0xNTA1PXN0YXRpYyBpbnQgdGczX21kaW9faW5pdChzdHJ1Y3QgdGczICp0cClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM6MTU1ODpcXHRpID0gbWRpb2J1c19yZWdpc3Rlcih0cC1cXHUwMDNlbWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTktXFx0aWYgKGkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTAyMz1zdGF0aWMgaW50IG1hY2JfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMDk3OnN0YXRpYyBpbnQgbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtYWNiICpicCwgc3RydWN0IGRldmljZV9ub2RlICptZGlvX25wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDQtXFx0aWYgKG1kaW9fbnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTA1OlxcdFxcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTE5OlxcdFxcdFxcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIwLVxcdFxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTIyOlxcdHJldHVybiBtZGlvYnVzX3JlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjMtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMTI1PXN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTU5OlxcdGVyciA9IG1hY2JfbWRpb2J1c19yZWdpc3RlcihicCwgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTYwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jPTExMDc9c3RhdGljIGludCBkbTkwNTFfbWRpb19yZWdpc3RlcihzdHJ1Y3QgYm9hcmRfaW5mbyAqZGIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYzoxMTI1OlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIGRiLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjYtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYz0yNDIzPXN0YXRpYyBpbnQgdHNuZXBfbWRpb19pbml0KHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjI0NTU6XFx0cmV0dmFsID0gb2ZfbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVxcdTAwM2VtZGlvYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jPTEwMjQ9c3RhdGljIGludCBldGhvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYy0xMjA3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM6MTIwODpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwOS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3MzQ9c3RhdGljIGludCBmdGdtYWMxMDBfc2V0dXBfbWRpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xNzY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc3MDpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlZGV2LCBwcml2LVxcdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NzEtXFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYz0zNj1zdGF0aWMgaW50IGVuZXRjX3BjaV9tZGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmM6OTE6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIGRldi1cXHUwMDNlb2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0yNjY9c3RhdGljIGludCBlbmV0Y19tZGlvX3Byb2JlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzoyOTM6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjk0LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MzA4PXN0YXRpYyBpbnQgZW5ldGNfaW1kaW9fY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozNDM6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNDQtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9MzA0Mj1zdGF0aWMgaW50IGZlY19lbmV0X21paV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjMxNjE6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihmZXAtXFx1MDAzZW1paV9idXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYz02NT1zdGF0aWMgaW50IG1wYzUyeHhfZmVjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2YpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYzoxMDY6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA3LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jPTE0OT1zdGF0aWMgaW50IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM6MTc2OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgb2ZkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jPTk3PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM6MTY3OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgb2ZkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYz00MDk9c3RhdGljIGludCBmc2xfcHFfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jOjQ5NDpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTUtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYz0zNzE9c3RhdGljIGludCB4Z21hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQyNi1cXHRpZiAoaXNfb2Zfbm9kZShmd25vZGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI3OlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCB0b19vZl9ub2RlKGZ3bm9kZSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI4LVxcdGVsc2UgaWYgKGlzX2FjcGlfbm9kZShmd25vZGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI5OlxcdFxcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIGZ3bm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MzAtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyOTI6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmM9MTA5ND1zdGF0aWMgaW50IGhpeDVoZDJfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmM6MTE4NjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jLTExODctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM9MTIzPWludCBoY2xnZV9tYWNfbWRpb19jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU0LVxcdG1kaW9fYnVzLVxcdTAwM2VwaHlfbWFzayA9IH4oMVUgXFx1MDAzY1xcdTAwM2MgbWFjLVxcdTAwM2VwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYzoxNTU6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0xNTYtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM9NDk1PXN0YXRpYyBpbnQgaG5zX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1ODQ6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTg1LVxcdH0gZWxzZSBpZiAoaXNfYWNwaV9ub2RlKHBkZXYtXFx1MDAzZWRldi5md25vZGUpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTItXFx0XFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTkzOlxcdFxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTk0LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM9MjU2MD1zdGF0aWMgaW50IGVtYWNfZHRfbWRpb19wcm9iZShzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODQtXFx0c25wcmludGYoYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwiJXNcXFwiLCBkZXYtXFx1MDAzZW9mZGV2LVxcdTAwM2VuYW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM6MjU4NTpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNmRldi1cXHUwMDNlb2ZkZXYtXFx1MDAzZWRldiwgYnVzLCBtaWlfbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg2LVxcdGlmIChyZXMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTEwMjY9aW50IGl4Z2JlX21paV9idXNfaW5pdChzdHJ1Y3QgaXhnYmVfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMTA4OC1cXHRhZGFwdGVyLVxcdTAwM2VtaWlfYnVzID0gYnVzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjEwODk6XFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDkwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM9Mzg1PWx0cV9ldG9wX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy00MDItXFx0XFx0IHByaXYtXFx1MDAzZXBkZXYtXFx1MDAzZW5hbWUsIHByaXYtXFx1MDAzZXBkZXYtXFx1MDAzZWlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jOjQwMzpcXHRpZiAobWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtaWlfYnVzKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDA0LVxcdFxcdGVyciA9IC1FTlhJTztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM9MjgzPXN0YXRpYyBpbnQgb3Jpb25fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODEtXFx0LyogRm9yIHRoZSBwbGF0Zm9ybXMgbm90IHN1cHBvcnRpbmcgRFQvQUNQSSBmYWxsLWJhY2tcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4MjpcXHQgKiB0byBtZGlvYnVzX3JlZ2lzdGVyIHZpYSBvZl9tZGlvYnVzX3JlZ2lzdGVyLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgzLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg0LVxcdGlmIChpc19hY3BpX25vZGUocGRldi1cXHUwMDNlZGV2LmZ3bm9kZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODU6XFx0XFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cXHUwMDNlZGV2LmZ3bm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODYtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg3OlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODgtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jPTEzODc9c3RhdGljIGludCBweGExNjhfZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA0LVxcdHBlcC1cXHUwMDNlc21pX2J1cy1cXHUwMDNlcGh5X21hc2sgPSAweGZmZmZmZmZmO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jOjE1MDU6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihwZXAtXFx1MDAzZXNtaV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTE1MDYtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM9OTk4PXN0YXRpYyBpbnQgbXRrX21kaW9faW5pdChzdHJ1Y3QgbXRrX2V0aCAqZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0xMDM3LVxcdGRldl9kYmcoZXRoLVxcdTAwM2VkZXYsIFxcXCJNREMgaXMgcnVubmluZyBvbiAlZCBIelxcXFxuXFxcIiwgTURDX01BWF9GUkVRIC8gZXRoLVxcdTAwM2VtZGNfZGl2aWRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYzoxMDM4OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZXRoLVxcdTAwM2VtaWlfYnVzLCBtaWlfbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMTAzOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYz0xNDIyPXN0YXRpYyBpbnQgbXRrX3N0YXJfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTE0NDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jOjE0NDg6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYy0xNDQ5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYz0yODc9aW50IG1seGJmX2dpZ2VfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgbWx4YmZfZ2lnZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmMtMzMyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmM6MzMzOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYy0zMzQtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jPTI1Mz1pbnQgZmJuaWNfbWRpb2J1c19jcmVhdGUoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmMtMjcyLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToxOToyMy4xODQ5ODExNDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxMTU2MDY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVU0IgRXRoZXJuZXQgRHJpdmVyIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlc2UgVVNCIEV0aGVybmV0IGRyaXZlcnMsIHBhcnRpY3VsYXJseSBgc21zYzc1eHguY2AgYW5kIGBsYW43OHh4LmNgLiBBbmQgYSBxdWljayBnbGFuY2UgYXQgdGhlaXIgY29kZSBzdWdnZXN0cyB0aGV5J3JlIHVzaW5nIGBtZGlvYnVzX3JlZ2lzdGVyYC4gUmlnaHQsIHRoYXQncyBpbnRlcmVzdGluZy4gSXQgbWVhbnMgdGhleSdyZSBpbnRlcmFjdGluZyB3aXRoIGFuIE1ESU8gYnVzLiBMZXQncyBzZWUgaG93IHByZXZhbGVudCB0aGF0IGlzIHdpdGhpbiBVU0IgbmV0d29ya2luZyBkcml2ZXJzLiBMZXQgbWUgZG8gYSBxdWljayBncmVwIGZvciBgbWRpb2J1c19yZWdpc3RlcmAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB3aGljaCBvdGhlciBkcml2ZXJzIGFyZSB1c2luZyB0aGlzIG1ldGhvZCBhbmQgcG90ZW50aWFsbHkgcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgZXhwZWN0IHRoZXJlJ2xsIGJlIGEgZmV3IG1vcmUsIGl0J3Mgbm90IHVudXN1YWwgdG8gdXNlIHRoYXQgaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODkxOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjE5OjI2Ljk5NjU0NDg2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0MzgwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb2J1c19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02Njk9c3RhdGljIGludCBheDg4NzcyX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg2LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2ODc6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtZGlvKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg4LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTYxPXN0YXRpYyBpbnQgYXg4ODE3MmFfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc5LVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjgwOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtODEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMDkxPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjEtXFx0bm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2Lm9mX25vZGUsIFxcXCJtZGlvXFxcIik7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTIyOlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZGV2LVxcdTAwM2VtZGlvYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjMtXFx0b2Zfbm9kZV9wdXQobm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMTQ3PXN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0MS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQyOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocGRhdGEtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDMtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToxOToyNy4wNzA5ODc0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDY1ODQwNjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgRUNPTkVUIEZFUEhZIERyaXZlciB2aWEgU3l6a2FsbGVyKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byBob3cgd2UgY2FuIGdldCBhdCB0aGlzIGBlY29uZXQtZmUtc29jYCBkcml2ZXIgdGhyb3VnaCBzeXprYWxsZXIuIFRoZSBnYW1lIHBsYW4gaXMgY2xlYXI6IHRoZXNlIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMsIGxpa2UgYHNtc2M5NXh4YCwgYGxhbjc4eHhgLCBgYXNpeF9kZXZpY2VzYCwgYW5kIGBheDg4MTcyYWAsIHRoZXkgcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoYXQgTURJTyBidXMsIHdoZW4gcmVnaXN0ZXJlZCwgZG9lcyBhIHNjYW4gZm9yIFBIWXMuICBUaGlzIHNjYW4gaXMgdGhlIGtleS4gVGhlIHNjYW5uaW5nIHByb2Nlc3MgcmVsaWVzIG9uIHJlYWRpbmcgUEhZIHJlZ2lzdGVycyB1c2luZyB0aGUgTURJTyBidXMgcmVhZCBmdW5jdGlvbi4gIFNpbmNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcyB0aHJvdWdoIHZoY2ksIGl0IGNhbiBjb250cm9sIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRob3NlIHJlYWRzLlxuXG5Ob3csIGlmIHN5emthbGxlciBmZWVkcyBhIHNwZWNpZmljIFBIWSBJRCBkdXJpbmcgdGhlIE1ESU8gc2NhbiDigJMgYDB4MDNhMjk0MTRgLCB3aGljaCBpcyBgRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkNgIOKAkyB0aGUgTURJTyBidXMgd2lsbCBjcmVhdGUgYSBQSFkgZGV2aWNlIHdpdGggdGhhdCBJRC4gIFRoZSBrZXJuZWwgd2lsbCB0aGVuIHRyeSB0byBiaW5kIGEgZHJpdmVyIGZvciB0aGF0IHBhcnRpY3VsYXIgUEhZIElELiAgSWYgYENPTkZJR19FQ09ORVRfRkVfU09DX1BIWWAgaXMgZW5hYmxlZCwgdGhlIGBlY29uZXQtZmUtc29jYCBkcml2ZXIgd2lsbCBtYXRjaCBhbmQgaXRzIHByb2JlIGZ1bmN0aW9uIHdpbGwgZXhlY3V0ZS4gVGhpcyBraWNrcyBvZmYgdGhlIHdob2xlIG5ldHdvcmsgZHJpdmVyIGNoYWluLCBhdHRhY2hpbmcgdGhlIFBIWSBhbmQgc3RhcnRpbmcgdGhlIFBIWSBzdGF0ZSBtYWNoaW5lLCBjYWxsaW5nIHN0dWZmIGxpa2UgYGNvbmZpZ19pbml0YCBhbmQgYHJlYWRfc3RhdHVzYC4gU28sIHllcywgdGhlIGBlY29uZXQtZmUtc29jYCBkcml2ZXIgaXMgKmFic29sdXRlbHkqIHJlYWNoYWJsZSBmcm9tIHN5emthbGxlciB2aWEgVVNCIHZoY2kuXG5cbkFscmlnaHQsIGxldCdzIHZlcmlmeSBldmVyeXRoaW5nLiBUaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIGBkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jYC4gVGhlIFBIWSBJRCBpcyBpbmRlZWQgYDB4MDNhMjk0MTRgLiBMb29raW5nIGF0IHRoZSBkcml2ZXIsIGl0IGRlZmluZXMgYSBQSFkgZHJpdmVyIHRhYmxlOlxuXG5gYGBjXG5zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW43NTEyMjFfZmVwaHlfZHJpdmVyW10gPSB7XG5cdHtcblx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpLFxuXHRcdC5uYW1lXHRcdD0gXCJFY29OZXQgRU43NTEyMjEgRkVQSFlcIixcblx0XHQuY29uZmlnX2luaXRcdD0gZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQsXG5cdFx0LmNvbmZpZ19pbnRyXHQ9IGdlbnBoeV9ub19jb25maWdfaW50cixcblx0XHQuaGFuZGxlX2ludGVycnVwdCA9IGdlbnBoeV9oYW5kbGVfaW50ZXJydXB0X25vX2Fjayxcblx0XHQucHJvYmVcdFx0PSBlbjc1MTIyMV9mZXBoeV9wcm9iZSxcblx0XHQucmVhZF9wYWdlXHQ9IG10a19waHlfcmVhZF9wYWdlLFxuXHRcdC53cml0ZV9wYWdlXHQ9IG10a19waHlfd3JpdGVfcGFnZSxcblx0fVxufTtcbmBgYFxuXG5TbyBpdCBsb29rcyBnb29kLiBOb3csIHRoaXMgYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYCBpcyBpbnRlcmVzdGluZy4gTG9va2luZyBhdCB0aGF0IGZ1bmN0aW9uOlxuXG5gYGBjXG5zdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG57XG5cdGludCBwb3J0MCA9IEVDT05FVF9FTjc1MjZDX1BPUlQwX0FERFI7XG5cdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkO1xuXHRzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2O1xuXHRpbnQgcmV0O1xuXG5cdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkICE9IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuXHRcdHBvcnQwID0gRUNPTkVUX0xFR0FDWV9QT1JUMF9BRERSO1xuXG5cdHJldCA9IGRldm1fcGh5X3BhY2thZ2Vfam9pbihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHBoeWRldiwgcG9ydDAsXG5cdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkKSk7XG5cdGlmIChyZXQpXG5cdFx0cmV0dXJuIHJldDtcblxuXHRzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuXG5cdHByaXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcblx0aWYgKCFwcml2KVxuXHRcdHJldHVybiAtRU5PTUVNO1xuXG5cdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyID09IHBvcnQwKVxuXHRcdHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAgPSBwaHlkZXY7XG5cblx0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuXG5cdHJldHVybiAwO1xufVxuYGBgXG5cbkFuZCB0aGVuIGBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdGAgaXM6XG5cbmBgYGNcbnN0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbntcblx0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuXHR1MTYgbDByMjZfdGVtcDtcblx0aW50IHJldDtcblx0aW50IGk7XG5cblx0aWYgKCFzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwKSB7XG5cdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiUG9ydCB6ZXJvIG11c3QgYmUgY29uZmlndXJlZFxcblwiKTtcblx0XHRyZXR1cm4gLUVcblxuIiwiSW5wdXRUb2tlbnMiOjI5NzA4LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToxOTo1MS43MjkzOTcyNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc5NjQ0MTI2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRUNPTkVUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbWlwcy9LY29uZmlnPTM1OD1jb25maWcgTUFDSF9ERUNTVEFUSU9OXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0zOTQtXFxuYXJjaC9taXBzL0tjb25maWc6Mzk1OmNvbmZpZyBFQ09ORVRcXG5hcmNoL21pcHMvS2NvbmZpZy0zOTYtXFx0Ym9vbCBcXFwiRWNvTmV0IE1JUFMgZmFtaWx5XFxcIlxcbi0tXFxuZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnPTcxPWNvbmZpZyBEV19BUEJfVElNRVJfT0ZcXG4tLVxcbmRyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZy03NS1cXG5kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWc6NzY6Y29uZmlnIEVDT05FVF9FTjc1MTIyMV9USU1FUlxcbmRyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZy03Ny1cXHRib29sIFxcXCJFY29OZXQgRU43NTEyMjEgSGlnaCBQcmVjaXNpb24gVGltZXJcXFwiIGlmIENPTVBJTEVfVEVTVFxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc9MTk1PWNvbmZpZyBEV19BUEJfSUNUTFxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL0tjb25maWctMTk5LVxcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnOjIwMDpjb25maWcgRUNPTkVUX0VONzUxMjIxX0lOVENcXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZy0yMDEtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWctMi1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZzozOmNvbmZpZyBFQ09ORVRfRkVfU09DX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkVjb05ldCAxMC8xMDAgU29DIEV0aGVybmV0IFBIWXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjE5OjU0LjUyNTg0NjMyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzM0MDY2MDgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRWNvTmV0IERyaXZlciBmb3IgU3l6a2FsbGVyIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBFQ09ORVRgIHRoaW5nLCB3aGljaCBhcHBlYXJzIHRvIGJlIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb21wb25lbnQgKGBhcmNoL21pcHMvS2NvbmZpZ2ApLiBUaGUgZHJpdmVyIGl0c2VsZiBzZWVtcyB0byBoaW5nZSBvbiBlaXRoZXIgYEVDT05FVGAgYmVpbmcgZW5hYmxlZCwgb3IsIGNydWNpYWxseSBmb3IgbXkgcHVycG9zZXMsIGBDT01QSUxFX1RFU1RgLiBFeGNlbGxlbnQsIHN5emthbGxlciBsZXZlcmFnZXMgYENPTVBJTEVfVEVTVGAsIHNvIEkgY2FuIGRpcmVjdGx5IGVuYWJsZSBgRUNPTkVUX0ZFX1NPQ19QSFlgLiBJIGJyaWVmbHkgd29uZGVyZWQgYWJvdXQgYSBkZXBlbmRlbmN5IG9uIGBNVEtfTkVUX1BIWUxJQmAsIGJ1dCBpdCAqc2VsZWN0cyogaXQsIHNvIGBFQ09ORVRfRkVfU09DX1BIWWAgaXMgdGhlIGtleS4gTm8gb3RoZXIgY29uZmlncyBhcHBlYXIgbmVjZXNzYXJ5LCBqdXN0IHRoYXQgb25lLlxuXG5Ob3cgSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZHJpdmVyJ3MgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jYC4gVGhlIGRyaXZlciBkZWZpbmVzIGBlbjc1MTIyMV9mZXBoeV9kcml2ZXJgLCBhbmQgaXRzIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhcmUgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBhbmQgYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYC4gSSdsbCB3YW50IHRvIGtlZXAgYW4gZXllIG9uIHRob3NlLiBMZXQncyBhZGQgdGhlbSB0byBteSBcIkZvY3VzU3ltYm9sc1wiIGxpc3QuXG5cbkhtbSwgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBgTUFJTlRBSU5FUlNgIGFuZCB0aGUgYE1ha2VmaWxlYCBhcyB3ZWxsLCBhbmQgYWRkcyBgZWNvbmV0LWZlLXNvYy5jYCDigJMgc3RhbmRhcmQgc3R1ZmYuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gSSByZWFsaXN0aWNhbGx5IHJlYWNoIHRoaXMgY29kZSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LCBhbmQgc3BlY2lmaWNhbGx5IHRocm91Z2ggc3l6a2FsbGVyPyBUaGUgYW5zd2VyLCB0aGFua2Z1bGx5LCBpcyB5ZXMhIFN5emthbGxlciB1c2VzIGB2aGNpYCB0byBlbXVsYXRlIFVTQiBkZXZpY2VzLiBJJ20gdGhpbmtpbmcgb2YgYSBVU0IgbmV0d29yayBhZGFwdGVyIGxpa2UgYHNtc2M5NXh4YC4gVGhlIGBzbXNjOTV4eGAgZHJpdmVyIHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBkdXJpbmcgaXRzIGJpbmQgcHJvY2Vzcy4gVGhpcyBidXMgdGhlbiBzY2FucyBmb3IgUEhZcyBieSByZWFkaW5nIE1ESU8gcmVnaXN0ZXJzLCB2aWEgVVNCIGNvbnRyb2wgbWVzc2FnZXMuXG5cbkhlcmUncyB0aGUgcmVhbCBwb3dlcjogU3l6a2FsbGVyIGludGVyY2VwdHMgdGhlc2UgbWVzc2FnZXMgZnJvbSB0aGUgZW11bGF0ZWQgVVNCIGRldmljZS4gU28sIGlmIHN5emthbGxlciBpcyBjb25maWd1cmVkIHRvIHJldHVybiB0aGUgUEhZIElEIGAweDAzYTI5NDE0YCAoYXQsIHNheSwgYWRkcmVzcyA5KSB3aGVuIHF1ZXJpZWQgYnkgdGhlIE1ESU8gYnVzLCB0aGUgUEhZIGRyaXZlciBjb3JlIHdpbGwgY3JlYXRlIGEgUEhZIGRldmljZSwgYW5kIHRoZSBQSFkgZHJpdmVyIGNvcmUgd2lsbCBtYXRjaCB0aGlzIElEIHdpdGggYGVuNzUxMjIxX2ZlcGh5X2RyaXZlcmAuIEl0IGNhbGxzIGBlbjc1MTIyMV9mZXBoeV9wcm9iZWAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTGF0ZXIsIHdoZW4gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGFjdGl2YXRlZCwgYHBoeV9zdGFydGAgd2lsbCB0cmlnZ2VyIGBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdGAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIGEgc2VyaWVzIG9mIE1ESU8gcmVhZHMgYW5kIHdyaXRlcyAodmlhIGBwaHlfcmVhZF9wYWdlZGAsIGBwaHlfd3JpdGVfcGFnZWRgLCBldGMuKSDigJMgYWxsIG9mIHdoaWNoIHRyYW5zbGF0ZSB0byBVU0IgY29udHJvbCBtZXNzYWdlcyB0aGF0IHN5emthbGxlciBjYW4gaW50ZXJjZXB0IGFuZCBtYW5pcHVsYXRlISBUaGVyZWZvcmUsIHRoZSBlbnRpcmUgY2FsaWJyYXRpb24gbG9naWMgaW4gYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBpcyBmdWxseSB3aXRoaW4gbXkgY29udHJvbC4gSSBjYW4gZnV6eiBpdCBleHRlbnNpdmVseSB3aXRoIHN5emthbGxlci5cblxuSnVzdCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc21zYzk1eHhgIGRvZXNuJ3QgZmlsdGVyIG91dCBQSFlzIOKAkyBhbGwgbG9va3MgZ29vZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MzI3MzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6MDcuODY2NTEyNjY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDY4ODMyNjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9kZXZpY2VfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToyMDowOC4xNzM0MDM0MTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNTExNjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ESU8gQnVzIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgc21zYzk1eHhgIGRyaXZlciBraWNrcyB0aGluZ3Mgb2ZmIGJ5IHJlZ2lzdGVyaW5nIGFuIE1ESU8gYnVzIHVzaW5nIGBtZGlvYnVzX3JlZ2lzdGVyYC4gUmlnaHQsIHRoYXQncyB0aGUgc3RhbmRhcmQgd2F5IHRvIGRvIGl0LiBOb3csIGxldCdzIGRpdmUgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyByZWdpc3RyYXRpb24gcHJvY2VzcyB3b3JrcyBpbiBkZXRhaWwuIFRpbWUgdG8gY3JhY2sgb3BlbiBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYG1kaW9idXNfcmVnaXN0ZXJgIGZ1bmN0aW9uIGl0c2VsZi4gSSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIOKAkyB3aGF0IHN0cnVjdHVyZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkLCB3aGljaCBjYWxsYmFja3MgYXJlIGJlaW5nIHNldCB1cCwgYW5kIGhvdyB0aGlzIGJ1cyBpcyBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBQSFkgZHJpdmVycy4gTGV0J3MgZ2V0IHRvIHRoZSBuaXR0eS1ncml0dHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0Mjg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6MTIuNDc4NTI0MDEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTMwNTQ5NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb2J1c19zY2FuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToyMDoxMi41Njc4Mzc3NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTgwNzM3MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1ESU8gQnVzIFNjYW4gTG9jYXRpb24gQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgTURJTyBidXMgaW5pdGlhbGl6YXRpb24sIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyBhIHNhbml0eSBjaGVjay4gTGV0IG1lIGp1c3QgY29uZmlybS4uLiBgbWRpb2J1c19zY2FuYC4uLiB0aGF0J3MgKnJpZ2h0KiB3aGVyZSBJJ2QgZXhwZWN0IGl0IHRvIGJlLCBuZXN0bGVkIGluIHRoZSBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgIGZpbGUuIE5vIHN1cnByaXNlcyB0aGVyZS4gR29vZC4gTWFrZXMgc2Vuc2UuIEp1c3QgY29uZmlybWluZyB0aGUgY29kZSBiYXNlIGlzIHN0cnVjdHVyZWQgYXMgSSB3b3VsZCBhbnRpY2lwYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDUzOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjIwOjE2Ljc0ODU3NzQ1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMjgxMTU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3NjYW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM9OTU4PXN0YXRpYyBpbnQgcHhhMTY4X2luaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy05NjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM6OTY4OlxcdHBoeSA9IG1kaW9idXNfc2Nhbl9jMjIocGVwLVxcdTAwM2VzbWlfYnVzLCBwZXAtXFx1MDAzZXBoeV9hZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy05NjktXFx0aWYgKElTX0VSUihwaHkpKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYz0xMzA9c3RhdGljIGludCB1bmltYWNfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0xNjMtICpcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjE2NDogKiBidXMtXFx1MDAzZXJlc2V0IGlzIGludm9rZWQgYmVmb3JlIG1kaW9idXNfc2NhbiBkdXJpbmcgbWRpb2J1c19yZWdpc3RlciBhbmQgaXNcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTE2NS0gKiB0aGVyZWZvcmUgdGhlIHJpZ2h0IGxvY2F0aW9uIHRvIHN0aWNrIHRoYXQgd29ya2Fyb3VuZC4gU2luY2Ugd2UgZG8gbm90IHdhbnRcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTM5Nj1zdGF0aWMgdm9pZCBvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDA3LVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQwODpzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ0Ny0vKipcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0NDg6ICogbWRpb2J1c19zY2FuX2MyMiAtIHNjYW4gb25lIGFkZHJlc3Mgb24gYSBidXMgZm9yIEMyMiBNRElPIGRldmljZXMuXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDQ5LSAqIEBidXM6IG1paV9idXMgdG8gc2Nhblxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDU4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ1OTpzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NjAte1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ2MTpcXHRyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ2Mi19XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDYzOkVYUE9SVF9TWU1CT0wobWRpb2J1c19zY2FuX2MyMik7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDY0LVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ2NS0vKipcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0NjY6ICogbWRpb2J1c19zY2FuX2M0NSAtIHNjYW4gb25lIGFkZHJlc3Mgb24gYSBidXMgZm9yIEM0NSBNRElPIGRldmljZXMuXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDY3LSAqIEBidXM6IG1paV9idXMgdG8gc2Nhblxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDc2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ3NzpzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2Nhbl9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDc4LXtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0Nzk6XFx0cmV0dXJuIG1kaW9idXNfc2NhbihidXMsIGFkZHIsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ4MC19XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDgxLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ4MjpzdGF0aWMgaW50IG1kaW9idXNfc2Nhbl9idXNfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ4OS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0OTA6XFx0XFx0XFx0cGh5ZGV2ID0gbWRpb2J1c19zY2FuX2MyMihidXMsIGkpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5MS1cXHRcXHRcXHRpZiAoSVNfRVJSKHBoeWRldikgXFx1MDAyNlxcdTAwMjYgKFBUUl9FUlIocGh5ZGV2KSAhPSAtRU5PREVWKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5Ny1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0OTg6c3RhdGljIGludCBtZGlvYnVzX3NjYW5fYnVzX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5OS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01MDktXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NTEwOlxcdFxcdFxcdHBoeWRldiA9IG1kaW9idXNfc2Nhbl9jNDUoYnVzLCBpKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01MTEtXFx0XFx0XFx0aWYgKElTX0VSUihwaHlkZXYpIFxcdTAwMjZcXHUwMDI2IChQVFJfRVJSKHBoeWRldikgIT0gLUVOT0RFVikpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYz01NTM9aW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTYzMi1cXHRpZiAoYnVzLVxcdTAwM2VyZWFkKSB7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NjMzOlxcdFxcdGVyciA9IG1kaW9idXNfc2Nhbl9idXNfYzIyKGJ1cyk7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjM0LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02NDAtXFx0aWYgKCFwcmV2ZW50X2M0NV9zY2FuIFxcdTAwMjZcXHUwMDI2IGJ1cy1cXHUwMDNlcmVhZF9jNDUpIHtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo2NDE6XFx0XFx0ZXJyID0gbWRpb2J1c19zY2FuX2J1c19jNDUoYnVzKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02NDItXFx0XFx0aWYgKGVycilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9NDYyPXN0cnVjdCBtaWlfYnVzICptZGlvX2ZpbmRfYnVzKGNvbnN0IGNoYXIgKm1kaW9fbmFtZSk7XFxuaW5jbHVkZS9saW51eC9waHkuaDo0NjM6c3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2Nhbl9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xcbmluY2x1ZGUvbGludXgvcGh5LmgtNDY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToyMDoxOS40NjEzOTQ4NDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwNjQ0MzgyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkndmUgZ290LiBJJ3ZlIHJlYWxpemVkIHRoYXQgdGhlIGBfX21kaW9idXNfcmVnaXN0ZXJgIGZ1bmN0aW9uLCBhbmQgdGhlIGNoYWluIG9mIGNhbGxzIHN0ZW1taW5nIGZyb20gaXTigJRgbWRpb2J1c19zY2FuX2J1c19jMjJgLCBgbWRpb2J1c19zY2FuX2MyMmAsIGBtZGlvYnVzX3NjYW5gLCBgZ2V0X3BoeV9kZXZpY2VgLCBhbmQgZmluYWxseSBgcGh5X2RldmljZV9jcmVhdGVg4oCUcHJvdmlkZXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuIFNwZWNpZmljYWxseSwgZHJpdmVycyByZWdpc3RlcmluZyBhbiBNRElPIGJ1cyB3aXRob3V0IERldmljZSBUcmVlIGluZm9ybWF0aW9uLCBsaWtlIGBzbXNjOTV4eGAsIHdpbGwgdHJpZ2dlciBhIGJ1cyBzY2FuIGFuZCBkZXZpY2UgY3JlYXRpb24gYmFzZWQgb24gUEhZIElEcyBvYnRhaW5lZCBmcm9tIHRoZSBNRElPIHJlYWQgZnVuY3Rpb24uXG5cbk5vdywgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYHNtc2M5NXh4YCB2aWEgYHZoY2lgLCBpdCBjYW4gaW5qZWN0IGEgc3BlY2lmaWMgUEhZIElEIGR1cmluZyB0aGF0IHNjYW4g4oCTIGluIHRoaXMgY2FzZSwgYDB4MDNhMjk0MTRgLiBUaGlzIHNob3VsZCBjYXVzZSB0aGUgYGVjb25ldC1mZS1zb2NgIFBIWSBkcml2ZXIgdG8gYmUgcHJvYmVkLCBhbmQgaXRzIGFzc29jaWF0ZWQgY29kZSB0byBiZSBleGVjdXRlZC4gU28sIGdpdmVuIHRoYXQsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgYW5kIHRoZXJlZm9yZSwgd29ydGggZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZHJpdmVyLiBJJ3ZlIGV4YW1pbmVkIHRoZSBkcml2ZXIgZGVmaW5pdGlvbiBhbmQgaXQgbG9va3MgbGlrZSBJJ20gZGVhbGluZyB3aXRoIHRoaXM6XG5cbmBgYGNcbnN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBlbjc1MTIyMV9mZXBoeV9kcml2ZXJbXSA9IHtcblx0e1xuXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChFQ09ORVRfRkVQSFlfSURfRU43NTI2QyksXG5cdFx0Lm5hbWVcdFx0PSBcIkVjb05ldCBFTjc1MTIyMSBGRVBIWVwiLFxuXHRcdC5jb25maWdfaW5pdFx0PSBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdCxcblx0XHQuY29uZmlnX2ludHJcdD0gZ2VucGh5X25vX2NvbmZpZ19pbnRyLFxuXHRcdC5oYW5kbGVfaW50ZXJydXB0ID0gZ2VucGh5X2hhbmRsZV9pbnRlcnJ1cHRfbm9fYWNrLFxuXHRcdC5wcm9iZVx0XHQ9IGVuNzUxMjIxX2ZlcGh5X3Byb2JlLFxuXHRcdC5yZWFkX3BhZ2VcdD0gbXRrX3BoeV9yZWFkX3BhZ2UsXG5cdFx0LndyaXRlX3BhZ2VcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxuXHR9XG59O1xuYGBgXG5cbkkgaW5pdGlhbGx5IGlkZW50aWZpZWQgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBhbmQgYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYCBhcyB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcy4gSG93ZXZlciwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBkb24ndCBqdXN0IGNhbGwgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgaW5saW5lZCwgYmVjYXVzZSBJIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIFN1cmUgZW5vdWdoLCBgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXRgIGNhbGxzIHNldmVyYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnM6IGBlbjc1MTIyMV9mZXBoeV9yNTBgLCBgZW43NTEyMjFfZmVwaHlfdHhfb2Zmc2V0YCwgYW5kIGBlbjc1MTIyMV9mZXBoeV90eF9hbXBgLiBUaHVzLCBJIHdpbGwgc3RpY2sgd2l0aCBqdXN0IGBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdGAgYW5kIGBlbjc1MTIyMV9mZXBoeV9wcm9iZWAuXG5cbkZpbmFsbHksIHNpbmNlIGBtdGtfcGh5X3JlYWRfcGFnZWAgYW5kIGBtdGtfcGh5X3dyaXRlX3BhZ2VgIGFwcGVhciBpbiB0aGUgZHJpdmVyIGRlZmluaXRpb24sIEkgd2FudCB0byBjb25maXJtIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQuIFRoZXkgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBjdXJyZW50IGZpbGUsIHNvIEkgbmVlZCB0byBjaGVjayBlaXRoZXIgYG10ay5oYCBvciBgbXRrLmNgIHRvIHNlZSBpZiB0aGV5J3JlIHJlbGV2YW50LCBhbmQgaG93IHRvIHJlYWNoIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjIwOjMzLjUyNTgzNjAzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NTY0NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10a19waHlfcmVhZF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYz02MDg9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGVuNzUxMjIxX2ZlcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYy02MTUtXFx0XFx0LnByb2JlXFx0XFx0PSBlbjc1MTIyMV9mZXBoeV9wcm9iZSxcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jOjYxNjpcXHRcXHQucmVhZF9wYWdlXFx0PSBtdGtfcGh5X3JlYWRfcGFnZSxcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jLTYxNy1cXHRcXHQud3JpdGVfcGFnZVxcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay0ycDVnZS5jPTM3OT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrXzJwNWdlcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay0ycDVnZS5jLTM5MC1cXHRcXHQucmVzdW1lID0gZ2VucGh5X3Jlc3VtZSxcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLTJwNWdlLmM6MzkxOlxcdFxcdC5yZWFkX3BhZ2UgPSBtdGtfcGh5X3JlYWRfcGFnZSxcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLTJwNWdlLmMtMzkyLVxcdFxcdC53cml0ZV9wYWdlID0gbXRrX3BoeV93cml0ZV9wYWdlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYz0xNDk1PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdGtfc29jcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNTA0LVxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYzoxNTA1OlxcdFxcdC5yZWFkX3BhZ2VcXHQ9IG10a19waHlfcmVhZF9wYWdlLFxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTUwNi1cXHRcXHQud3JpdGVfcGFnZVxcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNTIxLVxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYzoxNTIyOlxcdFxcdC5yZWFkX3BhZ2VcXHQ9IG10a19waHlfcmVhZF9wYWdlLFxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTUyMy1cXHRcXHQud3JpdGVfcGFnZVxcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jPTk5PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdGtfZ2VwaHlfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMtMTEwLVxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jOjExMTpcXHRcXHQucmVhZF9wYWdlXFx0PSBtdGtfcGh5X3JlYWRfcGFnZSxcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMtMTEyLVxcdFxcdC53cml0ZV9wYWdlXFx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMtMTI0LVxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jOjEyNTpcXHRcXHQucmVhZF9wYWdlXFx0PSBtdGtfcGh5X3JlYWRfcGFnZSxcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMtMTI2LVxcdFxcdC53cml0ZV9wYWdlXFx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYz04ND1FWFBPUlRfU1lNQk9MX0dQTChfX210a190cl9jbHJfYml0cyk7XFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmMtODUtXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmM6ODY6aW50IG10a19waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmMtODcte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmMtODktfVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstcGh5LWxpYi5jOjkwOkVYUE9SVF9TWU1CT0xfR1BMKG10a19waHlfcmVhZF9wYWdlKTtcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYy05MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaD04MT12b2lkIF9fbXRrX3RyX2Nscl9iaXRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaC04My1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLmg6ODQ6aW50IG10a19waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaC04NS1pbnQgbXRrX3BoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6MzMuNjMyNDA2NjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ1NzIyMDA2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgTWVkaWF0ZWsgUEhZIExpYnJhcnkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBtdGstcGh5LWxpYi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIGRyaXZlci4gRmlyc3QsIGxldCdzIGxvb2sgYXQgYEVuYWJsZUNvbmZpZ3NgLiBBbHJpZ2h0LCBsb29rcyBsaWtlIGBDT05GSUdfRUNPTkVUX0ZFX1NPQ19QSFlgIGlzIHRoZSBrZXkuIEl0J3MgZGVwZW5kZW50IG9uIGBFQ09ORVQgfHwgQ09NUElMRV9URVNUYCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIEJhc2ljYWxseSwgSSBqdXN0IG5lZWQgYEVDT05FVF9GRV9TT0NfUEhZYCBlbmFibGVkLlxuXG5Ob3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBEb2VzIHRoaXMgdGhpbmcgZGVwZW5kIG9uIGVpdGhlciBgTURJT19ERVZJQ0VgIG9yIGBQSFlMSUJgPyBBaGEsIGl0IGxvb2tzIGxpa2UgYFBIWUxJQmAgaXMgc2VsZWN0ZWQgYnkgYE1US19ORVRfUEhZTElCYCwgd2hpY2gsIGluIHR1cm4sIGlzIHNlbGVjdGVkIGJ5IGBFQ09ORVRfRkVfU09DX1BIWWAuIEdvdCBpdCEgV2FpdCBhIG1pbnV0ZSwgYE1US19ORVRfUEhZTElCYCBpcyBhY3R1YWxseSBhIGNvbmZpZyBvcHRpb24gaXRzZWxmLiBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiBhYm91dCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwNTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6NDguMjA0NjEwODgxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTE0NDA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVRLX05FVF9QSFlMSUJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZz00OD1jb25maWcgTUVESUFURUtfR0VfU09DX1BIWVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWctNjYtXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWc6Njc6Y29uZmlnIE1US19ORVRfUEhZTElCXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWctNjgtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6NDguMjczNzYyMTA4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDQxNzE2NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYXNvbmluZyBmb3IgRnV6emluZyB0aGUgRWNvTmV0IFBIWSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYmFzaWNhbGx5LCBpdCBhZGRzIGEgbmV3IFBIWSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aG9zZSBFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzLCByaWdodD8gVGhlIGtleSBoZXJlIGlzIHJlYWNoYWJpbGl0eSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBhbmQgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbkkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBQSFkgZHJpdmVycyAqY2FuKiBiZSByZWFjaGVkIGV2ZW4gaW4gdGhlc2UgdmlydHVhbGl6ZWQgc2V0dXBzIGJlY2F1c2Ugd2UgY2FuIGVtdWxhdGUgYW4gTURJTyBidXMuIFRoaW5rIGFib3V0IGhvdyBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBVU0IgbmV0d29yayBhZGFwdGVyLCBsaWtlIGBzbXNjOTV4eGAsIHVzaW5nIGB2aGNpYC4gV2hlbiB0aGF0IGVtdWxhdGVkIFVTQiBkZXZpY2UgZ2V0cyBwcm9iZWQsIGl0IHNldHMgdXAgYW4gTURJTyBidXMgYW5kIHN0YXJ0cyBzY2FubmluZyBmb3IgUEhZcy5cblxuTm93LCBoZXJlJ3MgdGhlIGNsZXZlciBiaXQ6IGR1cmluZyB0aGF0IE1ESU8gc2NhbiAod2hlcmUgaXQncyBlc3NlbnRpYWxseSBzZW5kaW5nIE1ESU8gcmVhZCByZXF1ZXN0cyBhcyBVU0IgY29udHJvbCBtZXNzYWdlcyksIGlmIHdlIHJldHVybiB0aGUgc3BlY2lmaWMgUEhZIElELCBpbiB0aGlzIGNhc2UgYDB4MDNhMjk0MTRgLCB0aGUgTURJTyBidXMgd2lsbCBpbnN0YW50aWF0ZSBhIFBIWSBkZXZpY2Ugd2l0aCAqdGhhdCogSUQuIFRoYXQncyB0aGUgdHJpZ2dlciEgVGhhdCB3aWxsIHRoZW4ga2ljayBvZmYgdGhlIGBlY29uZXQtZmUtc29jYCBQSFkgZHJpdmVyJ3MgcHJvYmUgYW5kIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4gQmluZ28hIENvZGUgZXhlY3V0aW9uLlxuXG5TbywgdGhpcyBwYXRjaCBpc24ndCBqdXN0IGludHJvZHVjaW5nIGEgbmV3IGRyaXZlcjsgaXQncyBvcGVuaW5nIGEgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LiBXZSBrbm93IHRoZSBjb2RlIGlzIHJlYWNoYWJsZSwgYW5kIHRoYXQgaXQgbWFrZXMgZnV6emluZyB3b3J0aHdoaWxlLlxuXG5JIGtub3cgSSB3YW50IHRvIGtlZXAgYW4gZXllIG9uIGBlbjc1MTIyMV9mZXBoeV9wcm9iZWAgYW5kIGBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdGAgZnVuY3Rpb25zIGFzIGVudHJ5IHBvaW50cy5cblxuSSd2ZSBsb29rZWQgYXQgdGhlIGNvbmZpZyBvcHRpb25zLCBgRUNPTkVUX0ZFX1NPQ19QSFlgIGlzIHRoZSBjcnVjaWFsIG9uZSB0byBlbmFibGUuIEkgZG91YmxlLWNoZWNrZWQgdGhhdCBgUEhZX1BBQ0tBR0VgIGlzIHNlbGVjdGVkLCBhbmQgYE1US19ORVRfUEhZTElCYCBpcyBhbHNvIHNlbGVjdGVkLCBidXQgYEVDT05FVF9GRV9TT0NfUEhZYCBpcyBzdWZmaWNpZW50LiBJIGNvbmZpcm1lZCB0aGF0IGBFQ09ORVRfRkVfU09DX1BIWWAgaXMgdHJpc3RhdGUsIHNvIGl0J3MgdGhlIG9ubHkgb25lIHdlIHJlYWxseSBuZWVkLiBObyBuZWVkIHRvIGxpc3QgYFVTQl9ORVRfU01TQzk1WFhgLCBhcyBzeXprYWxsZXIgdXN1YWxseSBoYXMgdGhhdCBvbmUgZW5hYmxlZCBhbHJlYWR5LlxuSSdtIGNvbmZpZGVudCBpbiB0aGUgYXBwcm9hY2ggYW5kIGhhdmUgZG9jdW1lbnRlZCB0aGUgcmVhc29uaW5nLiBJIHdpbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1NzIsIk91dHB1dFRva2VucyI6MjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjIwOjU5LjcxNTQ4MjQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MTQ3MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFQ09ORVRfRkVfU09DX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVuNzUxMjIxX2ZlcGh5X3Byb2JlXCIsXG4gICAgXCJlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZcyAoYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNgKS4gUEhZIGRyaXZlcnMgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhbiBNRElPIGJ1cy4gRm9yIGV4YW1wbGUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKHN1Y2ggYXMgYHNtc2M5NXh4YCkgdmlhIHRoZSBgdmhjaWAgZHJpdmVyLiBXaGVuIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIGlzIHByb2JlZCwgaXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCBzY2FucyBmb3IgUEhZcyBieSBzZW5kaW5nIE1ESU8gcmVhZCByZXF1ZXN0cyAod2hpY2ggdHJhbnNsYXRlIHRvIFVTQiBjb250cm9sIG1lc3NhZ2VzKS4gQnkgcmV0dXJuaW5nIHRoZSBzcGVjaWZpYyBQSFkgSUQgKGAweDAzYTI5NDE0YCkgZHVyaW5nIHRoZSBNRElPIHNjYW4sIHRoZSBNRElPIGJ1cyB3aWxsIGluc3RhbnRpYXRlIGEgUEhZIGRldmljZSB3aXRoIHRoaXMgSUQsIHRyaWdnZXJpbmcgdGhlIHByb2JlIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgb2YgdGhlIGBlY29uZXQtZmUtc29jYCBQSFkgZHJpdmVyLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFQ09ORVRfRkVfU09DX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVuNzUxMjIxX2ZlcGh5X3Byb2JlXCIsXG4gICAgXCJlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZcyAoYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNgKS4gUEhZIGRyaXZlcnMgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhbiBNRElPIGJ1cy4gRm9yIGV4YW1wbGUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKHN1Y2ggYXMgYHNtc2M5NXh4YCkgdmlhIHRoZSBgdmhjaWAgZHJpdmVyLiBXaGVuIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIGlzIHByb2JlZCwgaXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCBzY2FucyBmb3IgUEhZcyBieSBzZW5kaW5nIE1ESU8gcmVhZCByZXF1ZXN0cyAod2hpY2ggdHJhbnNsYXRlIHRvIFVTQiBjb250cm9sIG1lc3NhZ2VzKS4gQnkgcmV0dXJuaW5nIHRoZSBzcGVjaWZpYyBQSFkgSUQgKGAweDAzYTI5NDE0YCkgZHVyaW5nIHRoZSBNRElPIHNjYW4sIHRoZSBNRElPIGJ1cyB3aWxsIGluc3RhbnRpYXRlIGEgUEhZIGRldmljZSB3aXRoIHRoaXMgSUQsIHRyaWdnZXJpbmcgdGhlIHByb2JlIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgb2YgdGhlIGBlY29uZXQtZmUtc29jYCBQSFkgZHJpdmVyLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6NTkuODU0NjM2ODQ0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc4MzU1MDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjIwOjU5Ljg1NTIzMDk5NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDc4Mjk1MDI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBFY29OZXQgMTAvMTAwIFNvQ3MuIFRoZSBkcml2ZXIgcHJpbWFyaWx5IGludGVyYWN0cyB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycyB2aWEgTURJTyAodXNpbmcgcGh5bGliIGZ1bmN0aW9ucyBsaWtlIHBoeV93cml0ZV9wYWdlZCBhbmQgcGh5X3JlYWRfcGFnZWQpIGFuZCBwZXJmb3JtcyBjYWxpYnJhdGlvbiByb3V0aW5lcy4gQWxsIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBtdGtfc29jcGh5X3ByaXYgYW5kIHRoZSBzaGFyZWQgcGFja2FnZSBkYXRhKSBhcmUgemVyby1pbml0aWFsaXplZCB1c2luZyBkZXZtX2t6YWxsb2Mgb3Igc3RhbmRhcmQgcGh5bGliIGZ1bmN0aW9ucy4gU3RhY2sgdmFyaWFibGVzIGxpa2UgY2FsX2NvbXBsZXRlX2N0eCBhcmUgYWxzbyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVzZXItc3BhY2UgQVBJcywgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bHMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LWRlcGVuZGVudCBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0N2JiYzQzNmRlYzI0NTA0YzA3MDMzMGM2ZDQ3Yjc5MTkzMTY4MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxOToxODo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDQ2MGNiNzI2ODg0NTAuLjdjYTNkOGQwOGM2OTMgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC05MjUzLDYgKzkyNTMsMTIgQEAgVzpcdGh0dHBzOi8vbGludXh0di5vcmdcbiBROlx0aHR0cDovL3BhdGNod29yay5saW51eHR2Lm9yZy9wcm9qZWN0L2xpbnV4LW1lZGlhL2xpc3QvXG4gRjpcdGRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9lYzEwMCpcbiBcbitFQ09ORVQgRVRIRVJORVQgUEhZIERSSVZFUlxuK006XHRDYWxlYiBKYW1lcyBEZUxpc2xlIFx1MDAzY2NqZEBjamRucy5mclx1MDAzZVxuK0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4rUzpcdE1haW50YWluZWRcbitGOlx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY1xuK1xuIEVDT05FVCBNSVBTIFBMQVRGT1JNXG4gTTpcdENhbGViIEphbWVzIERlTGlzbGUgXHUwMDNjY2pkQGNqZG5zLmZyXHUwMDNlXG4gTDpcdGxpbnV4LW1pcHNAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xuaW5kZXggM2I5Y2Y4MmMwY2IyOC4uNjRhYmY1YjY5NWFiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xuQEAgLTEsNCArMSwxOSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK1xuK2NvbmZpZyBFQ09ORVRfRkVfU09DX1BIWVxuK1x0dHJpc3RhdGUgXCJFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzXCJcbitcdGRlcGVuZHMgb24gRUNPTkVUIHx8IENPTVBJTEVfVEVTVFxuK1x0c2VsZWN0IE1US19ORVRfUEhZTElCXG4rXHRzZWxlY3QgUEhZX1BBQ0tBR0VcbitcdGhlbHBcbitcdCAgU3VwcG9ydHMgRWNvTmV0IFNvQyBidWlsdC1pbiAxMC8xMDAgRXRoZXJuZXQgUEhZcy5cbitcbitcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBidWlsdC1pbiBFdGhlcm5ldCBQSFlzIHdoaWNoIGFyZSBwcmVzZW50IGluXG4rXHQgIEVONzUyNkMgYmFzZWQgU29DcyAoaW5jbHVkaW5nIEVONzUyNkYpLiBJdCBjYW4gYWxzbyB3b3JrIHdpdGhcbitcdCAgbGVnYWN5IEVONzUxMiBGRSBQSFlzIHdoaWNoIGlkZW50aWZ5IGFzIDAzYTIuOTQxMiwgYnV0IHNpbmNlIHRoaXNcbitcdCAgSUQgaXMgdXNlZCBieSBNRURJQVRFS19HRV9QSFksIHVzZXJzIHdhbnRpbmcgdG8gZm9yY2UgdGhpcyBkcml2ZXJcbitcdCAgbXVzdCBvdmVycmlkZSB0aGUgSUQgdG8gMDNhMi45NDE0IGluIHRoZSBkZXZpY2UgdHJlZS5cbitcbiBjb25maWcgTUVESUFURUtfMlA1R0VfUEhZXG4gXHR0cmlzdGF0ZSBcIk1lZGlhVGVrIDIuNUdiIEV0aGVybmV0IFBIWXNcIlxuIFx0ZGVwZW5kcyBvbiAoQVJNNjQgXHUwMDI2XHUwMDI2IEFSQ0hfTUVESUFURUspIHx8IENPTVBJTEVfVEVTVFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxuaW5kZXggNmY5Y2FjZjdmOTA2NS4uNzEyMzllOTJhYTU4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL01ha2VmaWxlXG5AQCAtMSw0ICsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rb2JqLSQoQ09ORklHX0VDT05FVF9GRV9TT0NfUEhZKVx0XHQrPSBlY29uZXQtZmUtc29jLm9cbiBvYmotJChDT05GSUdfTUVESUFURUtfMlA1R0VfUEhZKVx0Kz0gbXRrLTJwNWdlLm9cbiBvYmotJChDT05GSUdfTUVESUFURUtfRkVfU09DX1BIWSlcdCs9IG10ay1mZS1zb2Mub1xuIG9iai0kKENPTkZJR19NRURJQVRFS19HRV9QSFkpXHRcdCs9IG10ay1nZS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNWRiYjMyYTVkMWFiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jXG5AQCAtMCwwICsxLDYzMiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJtdGsuaFwiXG4rXG4rLypcbisgKiBBbiBvbGRlciB2ZXJzaW9uIG9mIHRoaXMgUEhZIGhhcmR3YXJlIHVzZXMgdGhlIElEIDAzYTIuOTQxMi5cbisgKiBUaGlzIGRyaXZlciBkb2VzIG5vdCBtYXRjaCBvbiBpdCBiZWNhdXNlIGl0IGNvbGxpZGVzIHdpdGhcbisgKiBNVEtfR1BIWV9JRF9NVDc1MzAsIHNvIHVzZXJzIHdhbnRpbmcgdG8gdXNlIHRoaXMgZHJpdmVyIHNob3VsZFxuKyAqIG92ZXJyaWRlIHRoZSBQSFkgSUQgaW4gdGhlIGRldmljZSB0cmVlIHRvIDAzYTIuOTQxNC5cbisgKi9cbisjZGVmaW5lIEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDXHRcdDB4MDNhMjk0MTRcbitcbisjZGVmaW5lIEVDT05FVF9QR19HMVx0XHRcdDB4MTAwMFxuKyNkZWZpbmUgRUNPTkVUX1BHX0cyXHRcdFx0MHgyMDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfRzNcdFx0XHQweDMwMDBcbisjZGVmaW5lIEVDT05FVF9QR19HNFx0XHRcdDB4NDAwMFxuKyNkZWZpbmUgRUNPTkVUX1BHX0c1XHRcdFx0MHg1MDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfRzZcdFx0XHQweDYwMDBcbisjZGVmaW5lIEVDT05FVF9QR19HN1x0XHRcdDB4NzAwMFxuK1xuKyNkZWZpbmUgRUNPTkVUX1BHX0wwXHRcdFx0MHg4MDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfTDFcdFx0XHQweDkwMDBcbisjZGVmaW5lIEVDT05FVF9QR19MMlx0XHRcdDB4YTAwMFxuKyNkZWZpbmUgRUNPTkVUX1BHX0wzXHRcdFx0MHhiMDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfTDRcdFx0XHQweGMwMDBcbitcbisvKiA0IHBvcnRzICg4LDksMTAsMTEpIG9yIDMgcG9ydHMgKDksMTAsMTEpICovXG4rI2RlZmluZSBFQ09ORVRfTEVHQUNZX1BPUlQwX0FERFJcdDhcbisjZGVmaW5lIEVDT05FVF9FTjc1MjZDX1BPUlQwX0FERFJcdDlcbitcbisvKlxuKyAqIENhbGlicmF0aW9uIHBvbGxpbmcgZG9lcyBub3QgY29tcGxldGUgdW50aWwgRUNPTkVUX0NBTF9NSU5fQ1lDTEVTXG4rICogY29uc2VjdXRpdmUgXCJkb25lXCIgcmVzdWx0cyBhcmUgcmVjZWl2ZWQuIFNlZTogcG9sbF9jYWxfY29tcGxldGVcbisgKi9cbisjZGVmaW5lIEVDT05FVF9DQUxfTUlOX0NZQ0xFU1x0XHQxMFxuK1xuKy8qXG4rICogTWljcm9zZWNvbmRzIHBlciBjYWxpYnJhdGlvbiBwb2xsIGN5Y2xlLCBjYWxpYnJhdGlvbiB0YWtlcyBhcHByb3hpbWF0ZWx5XG4rICogRUNPTkVUX0NBTF9DWUNMRV9VUyAqIEVDT05FVF9DQUxfTUlOX0NZQ0xFUy4gVG90YWwgc2V0dXAgdGltZSBpcyB1c3VhbGx5XG4rICogbGVzcyB0aGFuIDE1MHggdGhpcyBudW1iZXIuXG4rICovXG4rI2RlZmluZSBFQ09ORVRfQ0FMX0NZQ0xFX1VTXHRcdDEwXG4rXG4rLyogVG90YWwgdGltZSBhbGxvd2VkIGZvciBjYWxpYnJhdGlvbiBwb2xsaW5nIGJlZm9yZSBlcnJvciBpcyByZXR1cm5lZC4gKi9cbisjZGVmaW5lIEVDT05FVF9DQUxfVElNRU9VVF9VU1x0XHQxMDAwMDBcbitcbisvKlxuKyAqIE5vdGU6IFRoZXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIHdlcmUgd3JpdHRlbiB3aXRob3V0IHRoZSBiZW5lZml0IG9mIHRoZVxuKyAqICAgICAgIGhhcmR3YXJlIHNwZWNpZmljYXRpb24sIHNvIG5hbWVzIGFyZSBnaXZlbiBvbmx5IHdoZXJlIHRoZSBtZWFuaW5nIGlzXG4rICogICAgICAgZmFpcmx5IG9idmlvdXMuXG4rICovXG4rXG4rLyogRzdSMjQgKi9cbisjZGVmaW5lIEVDT05FVF9DQUxfVFlQRV9NQVNLXHRcdEdFTk1BU0soMTQsIDEyKVxuKyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfUjUwXHRcdEZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4NilcbisjZGVmaW5lICAgRUNPTkVUX0NBTF9UWVBFX1RYT1NcdFx0RklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHgzKVxuKyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfVFhBTVBcdFx0RklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHg3KVxuKyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX01BU0tcdFx0R0VOTUFTSygxMSwgNilcbisjZGVmaW5lIEVDT05FVF9DQUxJTl9FTjc1MjZDXHRcdEJJVCg0KVxuKyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0VONzUyNkNcdFx0QklUKDEpXG4rI2RlZmluZSBFQ09ORVRfQ0FMX09VVF9FTjc1MjZDXHRcdEJJVCgwKVxuK1xuKy8qIEw0UjIzICovXG4rI2RlZmluZSBFQ09ORVRfQ0FMSU5fTEVHQUNZXHRcdEJJVCgyKVxuKyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0xFR0FDWVx0XHRCSVQoNilcbisjZGVmaW5lIEVDT05FVF9DQUxfT1VUX0xFR0FDWVx0XHRCSVQoNClcbitcbisjZGVmaW5lIEVDT05FVF9EQUNfSU5fMlZcdFx0MHgwZjBcbitcbisvKiBMNFIxNyAqL1xuKyNkZWZpbmUgRUNPTkVUX1RYT1NfU0lHTlx0XHRCSVQoMTMpXG4rI2RlZmluZSBFQ09ORVRfVFhPU19NQUdcdFx0XHRHRU5NQVNLKDEyLCA4KVxuK1xuKyNkZWZpbmUgRUNPTkVUX1RYT1NfREVGQVVMVFx0XHQwXG4rI2RlZmluZSBFQ09ORVRfVFhPU19NQVhcdFx0XHQzMVxuKyNkZWZpbmUgRUNPTkVUX1RYT1NfTUlOXHRcdFx0LTMxXG4rXG4rI2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfREVGQVVMVFx0XHQweDIwXG4rI2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfTUFYXHRcdDB4M2ZcbitcbisvKiBMNFIyMiAqL1xuKyNkZWZpbmUgRUNPTkVUX1I1MF9UWENBTF9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBFQ09ORVRfUjUwX1JYQ0FMX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuK1xuKyNkZWZpbmUgRUNPTkVUX1RYQU1QX0RFRkFVTFRcdFx0MHgxMlxuKyNkZWZpbmUgRUNPTkVUX1RYQU1QX01BWFx0XHQweDNmXG4rXG4rLyogWkNBTCBjb21wZW5zYXRpb24gdGFibGUgcGVyIGNoaXAsIHBlciBwaHksIFJYICsgVFggKi9cbitzdHJ1Y3QgY29tcGVuc2F0aW9uIHtcbitcdHM4IHpjYWxfdHg7XG4rXHRzOCB6Y2FsX3J4O1xuK1x0czggdHhvcztcbitcdHM4IGFtcDtcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGVuc2F0aW9uIGVuNzUxMjIxX2NvbXBbMl1bNF0gPSB7XG4rXHR7XG4rXHRcdC8qIExlZ2FjeSAqL1xuK1x0XHR7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gLTQsIC50eG9zID0gMCwgLmFtcCA9IDEgfSwgLyogIDggKi9cbitcdFx0eyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IC00LCAudHhvcyA9IDEsIC5hbXAgPSAyIH0sIC8qICA5ICovXG4rXHRcdHsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSAtNCwgLnR4b3MgPSAxLCAuYW1wID0gMSB9LCAvKiAxMCAqL1xuK1x0XHR7IC56Y2FsX3R4ID0gLTIsIC56Y2FsX3J4ID0gLTgsIC50eG9zID0gMSwgLmFtcCA9IDEgfSwgLyogMTEgKi9cbitcdH0sXG4rXHR7XG4rXHRcdC8qIEVONzUyNkMgKi9cbitcdFx0eyAuemNhbF90eCA9IDMsICAuemNhbF9yeCA9IDYsIC50eG9zID0gMSwgLmFtcCA9IDAgfSwgLyogIDkgKi9cbitcdFx0eyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IDUsIC50eG9zID0gMSwgLmFtcCA9IC0xIH0sIC8qIDEwICovXG4rXHRcdHsgLnpjYWxfdHggPSA2LCAgLnpjYWxfcnggPSA2LCAudHhvcyA9IDEsIC5hbXAgPSAtMSB9LCAvKiAxMSAqL1xuK1x0XHR7IH0sIC8qIFVudXNlZCAqL1xuK1x0fVxuK307XG4rXG4rc3RhdGljIGNvbnN0IHU4IHpjYWxfdG9fcjUwb2htWzY0XSA9IHtcbitcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNiwgMTIzLCAxMjAsIDExNywgMTE0LCAxMTIsIDExMCwgMTA3LCAxMDUsIDEwMyxcbitcdDEwMSwgIDk5LCAgOTcsICA3OSwgIDc3LCAgNzUsICA3NCwgIDcyLCAgNzAsICA2OSwgIDY3LCAgNjYsICA2NSwgIDQ3LCAgNDYsICA0NSxcbitcdCA0MywgIDQyLCAgNDEsICA0MCwgIDM5LCAgMzgsICAzNywgIDM2LCAgMzQsICAzNCwgIDMzLCAgMzIsICAxNSwgIDE0LCAgMTMsICAxMixcbitcdCAxMSwgIDEwLCAgMTAsICAgOSwgICA4LCAgIDcsICAgNywgICA2LCAgIDUsICAgNCwgICA0LCAgIDMsICAgMiwgICAyLCAgIDEsICAgMVxuK307XG4rXG4rc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkIHtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGNvbXBlbnNhdGlvbiBnZXRfY3RhYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHU4IHBoeV9vZmZzZXQ7XG4rXG4rXHRwaHlfb2Zmc2V0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAtXHUwMDNlbWRpby5hZGRyO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShwaHlfb2Zmc2V0IFx1MDAzZT0gQVJSQVlfU0laRShlbjc1MTIyMV9jb21wWzBdKSkpXG4rXHRcdHJldHVybiAoc3RydWN0IGNvbXBlbnNhdGlvbikge307XG4rXG4rXHRyZXR1cm4gZW43NTEyMjFfY29tcFtwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDXVtwaHlfb2Zmc2V0XTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X2NhbGluX2ZsYWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGVkKVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHUxNiBzZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xuK1x0XHQvKiBHN1IyNCBpcyBzaGFyZWQgc28gcGh5X21vZGlmeV9wYWdlZCBpcyByZXF1aXJlZCAqL1xuK1x0XHRzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0VONzUyNkMgOiAwO1xuK1x0XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCxcbitcdFx0XHRcdCBFQ09ORVRfQ0FMSU5fRU43NTI2Qywgc2V0KTtcbitcdH0gZWxzZSB7XG4rXHRcdHNldCA9IGVuYWJsZWQgPyBFQ09ORVRfQ0FMSU5fTEVHQUNZIDogMDtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MNCwgMjMsIHNldCk7XG4rXHR9XG4rfVxuK1xuK3N0cnVjdCBjYWxfY29tcGxldGVfY3R4IHtcbitcdHUxNiBjb25zZWN1dGl2ZV90cnVlc1x0OiAxNTtcbitcdGJvb2wgc3RhcnRlZFx0XHQ6IDE7XG4rXHRib29sIG9ic2VydmVkX2ZhbHNlXHQ6IDE7XG4rXHR1MTYgYWJvcnRlZF90cmllc1x0OiA3O1xuK307XG4rXG4rLyoqXG4rICogcG9sbF9jYWxfY29tcGxldGUgLSBwb2xsIGZvciBjYWxpYnJhdGlvbiBjb21wbGV0aW9uLlxuKyAqXG4rICogQmVjYXVzZSBzb21lIGxlZ2FjeSBjaGlwcyBhcmUga25vd24gdG8gYmUgdW5yZWxpYWJsZSAoZmFsc2UgcG9zaXRpdmVzKSxcbisgKiByZWZlcmVuY2UgY29kZSBhZGRzIDEwLDAwMHVzIG9mIGZpeGVkIGRlbGF5IHBlciBjYWxpYnJhdGlvbiBjeWNsZS5cbisgKiBQcmFjdGljYWxseSwgdGhlcmUgYXJlIGFib3V0IDEwLTUwIGNhbGlicmF0aW9uIGN5Y2xlcyBmb3IgZWFjaCBvZiB0aGVcbisgKiB0aHJlZSB0dW5hYmxlcywgc28gYWRkaW5nIGEgc2lnbmlmaWNhbnQgZml4ZWQgZGVsYXkgaXMgY29zdGx5LlxuKyAqXG4rICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIHN0YXJ0cyB3aXRoIENBTElOIGRpc2FibGVkLCBwb2xscyBmb3JcbisgKiBkb25lIHN0YXR1cyBmYWxzZSwgdGhlbiBlbmFibGVzIENBTElOIGFuZCBwb2xscyB1bnRpbCBhIHRydWUgZG9uZVxuKyAqIHN0YXR1cyBpcyByZWNvcmRlZCBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgdGltZXMgY29uc2VjdXRpdmVseS5cbisgKlxuKyAqIEByZXR1cm5zOlxuKyAqICAgXHUwMDNjIDAgb24gZXJyb3JcbisgKiAgIDAgbm90IHlldCBjb21wbGV0ZVxuKyAqICAgMSBjb21wbGV0ZSBmYWxzZVxuKyAqICAgMiBjb21wbGV0ZSB0cnVlXG4rICovXG4rc3RhdGljIGludCBwb2xsX2NhbF9jb21wbGV0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdCAgICAgc3RydWN0IGNhbF9jb21wbGV0ZV9jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgZG9uZV9tYXNrO1xuK1x0aW50IG91dF9tYXNrO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4rXHRcdHJldCA9IHBoeV9yZWFkX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCk7XG4rXHRcdGRvbmVfbWFzayA9IEVDT05FVF9DQUxfRE9ORV9FTjc1MjZDO1xuK1x0XHRvdXRfbWFzayA9IEVDT05FVF9DQUxfT1VUX0VONzUyNkM7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBwaHlfcmVhZF9wYWdlZChzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDQsIDIzKTtcbitcdFx0ZG9uZV9tYXNrID0gRUNPTkVUX0NBTF9ET05FX0xFR0FDWTtcbitcdFx0b3V0X21hc2sgPSBFQ09ORVRfQ0FMX09VVF9MRUdBQ1k7XG4rXHR9XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKChyZXQgXHUwMDI2IGRvbmVfbWFzaykgPT0gMCkge1xuK1x0XHRjdHgtXHUwMDNlb2JzZXJ2ZWRfZmFsc2UgPSB0cnVlO1xuK1x0XHRjdHgtXHUwMDNlYWJvcnRlZF90cmllcyArPSAoY3R4LVx1MDAzZWNvbnNlY3V0aXZlX3RydWVzIFx1MDAzZSAwKTtcbitcdFx0Y3R4LVx1MDAzZWNvbnNlY3V0aXZlX3RydWVzID0gMDtcbitcbitcdFx0aWYgKCFjdHgtXHUwMDNlc3RhcnRlZCkge1xuK1x0XHRcdHNldF9jYWxpbl9mbGFnKHBoeWRldiwgdHJ1ZSk7XG4rXHRcdFx0Y3R4LVx1MDAzZXN0YXJ0ZWQgPSB0cnVlO1xuK1x0XHRcdHJldHVybiBwb2xsX2NhbF9jb21wbGV0ZShwaHlkZXYsIGN0eCk7XG4rXHRcdH1cbitcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRjdHgtXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMrKztcbitcbitcdGlmIChjdHgtXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMgXHUwMDNjIEVDT05FVF9DQUxfTUlOX0NZQ0xFUyB8fCAhY3R4LVx1MDAzZW9ic2VydmVkX2ZhbHNlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChjdHgtXHUwMDNlYWJvcnRlZF90cmllcylcbitcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcIkNhbGlicmF0aW9uIGN5Y2xlICVkIGZhbHNlIHBvc2l0aXZlc1xcblwiLFxuK1x0XHRcdCAgICBjdHgtXHUwMDNlYWJvcnRlZF90cmllcyk7XG4rXG4rXHRyZXR1cm4gKChyZXQgXHUwMDI2IG91dF9tYXNrKSAhPSAwKSA/IDIgOiAxO1xuK31cbitcbisvKipcbisgKiBwb2xsX2NhbF9jb21wbGV0ZSAtIGNoZWNrIGZvciBjYWxpYnJhdGlvbiByZWdpc3RlclxuKyAqIEByZXR1cm5zOiAtZXJyb3Igb3IgMSBpZiBjYWxpYnJhdGlvbiByZXN1bHQgaXMgdHJ1ZS5cbisgKi9cbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X2NhbF9jeWNsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBjYWxfY29tcGxldGVfY3R4IGNjdHggPSB7fTtcbitcdGludCBvdXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0c2V0X2NhbGluX2ZsYWcocGh5ZGV2LCBmYWxzZSk7XG4rXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChwb2xsX2NhbF9jb21wbGV0ZSwgb3V0LCBvdXQgIT0gMCxcbitcdFx0XHRcdEVDT05FVF9DQUxfQ1lDTEVfVVMsIEVDT05FVF9DQUxfVElNRU9VVF9VUyxcbitcdFx0XHRcdGZhbHNlLCBwaHlkZXYsIFx1MDAyNmNjdHgpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJDYWxpYnJhdGlvbiB0aW1lb3V0ICVkICglZCAvICVkIC8gJWQgLyAlZClcXG5cIixcbitcdFx0XHQgICByZXQsIGNjdHguY29uc2VjdXRpdmVfdHJ1ZXMsIGNjdHgub2JzZXJ2ZWRfZmFsc2UsXG4rXHRcdFx0ICAgY2N0eC5hYm9ydGVkX3RyaWVzLCBjY3R4LnN0YXJ0ZWQpO1xuK1x0fSBlbHNlIGlmIChvdXQgXHUwMDNjIDApIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiQ2FsaWJyYXRpb24gZXJyb3IgJWRcXG5cIiwgb3V0KTtcbitcdFx0cmV0ID0gb3V0O1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gb3V0IFx1MDAzZSAxO1xuK1x0fVxuK1xuK1x0c2V0X2NhbGluX2ZsYWcocGh5ZGV2LCBmYWxzZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3I1MChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XG4rXHRpbnQgemNhbF9zeiA9IEFSUkFZX1NJWkUoemNhbF90b19yNTBvaG0pO1xuK1x0dTggcmdfemNhbF9jdHJsID0gRUNPTkVUX1I1MF9aQ0FMX0RFRkFVTFQ7XG4rXHRpbnQgaW5pdGlhbF9jb21wX291dDtcbitcdGludCBwb2xhcml0eSA9IDA7XG4rXHRpbnQgY29tcF9vdXQ7XG4rXHRpbnQgcmV0ID0gMDtcbitcdHUxNiByeGNhbDtcbitcdHUxNiB0eGNhbDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfUjUwKTtcbitcdGVsc2VcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7XG4rXG4rXHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgxMDAwLCAweDEwMDApO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcbitcdFx0XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCxcbitcdFx0XHRcdFx0IEVDT05FVF9SNTBfWkNBTF9NQVNLLFxuK1x0XHRcdFx0XHQgRklFTERfUFJFUChFQ09ORVRfUjUwX1pDQUxfTUFTSyxcbitcdFx0XHRcdFx0XHQgICAgcmdfemNhbF9jdHJsKSk7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNixcbitcdFx0XHRcdFx0cmdfemNhbF9jdHJsKTtcbitcbitcdFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcbitcdFx0aWYgKGNvbXBfb3V0IFx1MDAzYyAwKSB7XG4rXHRcdFx0cmV0ID0gY29tcF9vdXQ7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKHBvbGFyaXR5ID09IDApIHtcbitcdFx0XHQvKiBGaXJzdCBjeWNsZSAqL1xuK1x0XHRcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcbitcdFx0XHRwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxO1xuK1x0XHR9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHtcbitcdFx0XHQvKiBGb3VuZCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHJnX3pjYWxfY3RybCArPSBwb2xhcml0eTtcbitcbitcdFx0aWYgKHJnX3pjYWxfY3RybCBcdTAwM2UgRUNPTkVUX1I1MF9aQ0FMX01BWCkge1xuK1x0XHRcdHJldCA9IDE7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHJ4Y2FsID0gbWF4KDAsIG1pbih6Y2FsX3N6IC0gMSwgY3RhYi56Y2FsX3J4ICsgcmdfemNhbF9jdHJsKSk7XG4rXHR0eGNhbCA9IG1heCgwLCBtaW4oemNhbF9zeiAtIDEsIGN0YWIuemNhbF90eCArIHJnX3pjYWxfY3RybCkpO1xuK1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMixcbitcdFx0XHRGSUVMRF9QUkVQKEVDT05FVF9SNTBfVFhDQUxfTUFTSywgdHhjYWwpIHxcbitcdFx0XHRGSUVMRF9QUkVQKEVDT05FVF9SNTBfUlhDQUxfTUFTSywgcnhjYWwpKTtcbitcbitvdXQ6XG4rXHQvKiBaZXJvIG91dCByZWdpc3RlcnMgKi9cbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgMHgwMDAwKTtcbitcdGVsc2VcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV90eF9vZmZzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRzdHJ1Y3QgY29tcGVuc2F0aW9uIGN0YWIgPSBnZXRfY3RhYihwaHlkZXYpO1xuK1x0aW50IGluaXRpYWxfY29tcF9vdXQ7XG4rXHRpbnQgcG9sYXJpdHkgPSAwO1xuK1x0aW50IG9mZnNldCA9IEVDT05FVF9UWE9TX0RFRkFVTFQ7XG4rXHR1MTYgb2Zmc2V0X2JpbjtcbitcdGludCBjb21wX291dDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgMHg1MjAwKTsgLyogZml4IE1ESSAqL1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgRUNPTkVUX0NBTF9UWVBFX1RYT1MpO1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDA0MDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4NDgwMCk7XG4rXHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4NGMwMCk7XG4rXHR9XG4rXG4rXHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyMSwgMHgwODAwLCAweDA4MDApO1xuK1xuK1x0cGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MDJjMCwgMHgwMmMwKTtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4ODAwMCk7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdG9mZnNldF9iaW4gPSBGSUVMRF9QUkVQKEVDT05FVF9UWE9TX01BRywgYWJzKG9mZnNldCkpO1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzYyAwKVxuK1x0XHRcdG9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjtcbitcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAxNywgb2Zmc2V0X2Jpbik7XG4rXG4rXHRcdGNvbXBfb3V0ID0gZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHBoeWRldik7XG4rXHRcdGlmIChjb21wX291dCBcdTAwM2MgMCkge1xuK1x0XHRcdHJldCA9IGNvbXBfb3V0O1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXG4rXHRcdGlmIChwb2xhcml0eSA9PSAwKSB7XG4rXHRcdFx0LyogRmlyc3QgY3ljbGUgKi9cbitcdFx0XHRpbml0aWFsX2NvbXBfb3V0ID0gY29tcF9vdXQ7XG4rXHRcdFx0cG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTtcbitcdFx0fSBlbHNlIGlmIChpbml0aWFsX2NvbXBfb3V0ICE9IGNvbXBfb3V0KSB7XG4rXHRcdFx0LyogRm91bmQgKi9cbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRvZmZzZXQgKz0gcG9sYXJpdHk7XG4rXG4rXHRcdGlmIChvZmZzZXQgXHUwMDNlIEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgXHUwMDNjIEVDT05FVF9UWE9TX01JTikge1xuK1x0XHRcdHJldCA9IDE7XG4rXHRcdFx0b2Zmc2V0ID0gMDtcbitcdFx0XHRnb3RvIHNldF92YWw7XG4rXHRcdH1cbitcdH1cbitcbitcdG9mZnNldCArPSBjdGFiLnR4b3MgKiBwb2xhcml0eTtcbitcbitcdGlmIChvZmZzZXQgXHUwMDNlIEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgXHUwMDNjIEVDT05FVF9UWE9TX01JTilcbitcdFx0b2Zmc2V0IC09IGN0YWIudHhvcyAqIHBvbGFyaXR5O1xuK1xuK3NldF92YWw6XG4rXHRvZmZzZXRfYmluID0gRklFTERfUFJFUChFQ09ORVRfVFhPU19NQUcsIGFicyhvZmZzZXQpKTtcbitcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4rXHRcdG9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMTcsIG9mZnNldF9iaW4pO1xuK1xuK291dDpcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xuK1x0ZWxzZVxuK1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3R4X2FtcChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XG4rXHRpbnQgaW5pdGlhbF9jb21wX291dDtcbitcdHU4IHR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUO1xuK1x0aW50IHBvbGFyaXR5ID0gMDtcbitcdGludCBjb21wX291dDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgMHg1MjAzKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDAgfCBFQ09ORVRfREFDX0lOXzJWKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNCwgMjEsIDB4MDgwMCk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAyYzApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4rXHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9UWEFNUCk7XG4rXHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDYwMCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwKTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwIHwgMHgwNDAwKTtcbitcdH1cbitcbitcdGZvciAoOzspIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTtcbitcbitcdFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcbitcdFx0aWYgKGNvbXBfb3V0IFx1MDAzYyAwKSB7XG4rXHRcdFx0cmV0ID0gY29tcF9vdXQ7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKHBvbGFyaXR5ID09IDApIHtcbitcdFx0XHQvKiBGaXJzdCBjeWNsZSAqL1xuK1x0XHRcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcbitcdFx0XHRwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxO1xuK1x0XHR9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHtcbitcdFx0XHQvKiBGb3VuZCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHR4X2FtcCArPSBwb2xhcml0eTtcbitcbitcdFx0aWYgKHR4X2FtcCBcdTAwM2UgRUNPTkVUX1RYQU1QX01BWCkge1xuK1x0XHRcdHJldCA9IDE7XG4rXHRcdFx0dHhfYW1wID0gRUNPTkVUX1RYQU1QX0RFRkFVTFQ7XG4rXHRcdFx0Z290byBzZXRfdmFsO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAodHhfYW1wICsgY3RhYi5hbXAgXHUwMDNjIEVDT05FVF9UWEFNUF9NQVgpXG4rXHRcdHR4X2FtcCArPSBjdGFiLmFtcDtcbitcbitzZXRfdmFsOlxuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTtcbitcbitvdXQ6XG4rXHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAwMDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4rXHR9XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHUxNiBsMHIyNl90ZW1wO1xuK1x0aW50IHJldDtcbitcdGludCBpO1xuK1xuK1x0aWYgKCFzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIlBvcnQgemVybyBtdXN0IGJlIGNvbmZpZ3VyZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyIFx1MDAzYyBzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwLVx1MDAzZW1kaW8uYWRkcilcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogR2xvYmFsIHJlZ2lzdGVycyAqL1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyNiwgMHg4MDQ0KTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjEsIDB4MDBlYSk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDI3LCAweDAyZjApO1xuK1xuK1x0LyogTG9jYWwgcmVnaXN0ZXJzICovXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweGEwMDApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wxLCAyMiwgMHhmMDAwKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjIsIDB4NDQ0NCk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDI0LCAweDBjMGMpO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyOCwgMHg3YzQ0KTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMzAsIDB4MDAwNSk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDE3LCAweDAwMDApO1xuK1xuK1x0LyogRm9yIEUxL0UyLCBFMyByZXF1aXJlcyAweDIyMjAsIGJ1dCBubyBrbm93biBFTjc1MTIyMSBFMyBjaGlwcyBleGlzdCAqL1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgyMjAwKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4rXHRcdCAvKiAxMDBNYiB0eCBwMnpfbWlkLCB6Mm5fbWlkLCB6Mm5fb3ZzX3Bvc3QsIG4yel9taWQgKi9cbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyMiwgMHgwMDMwKTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNSwgMHgwMjQ4KTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNywgMHgwMmYwKTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyOCwgMHgwMjMwKTtcbitcdH1cbitcbitcdHJldCA9IHBoeV9yZWFkX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bDByMjZfdGVtcCA9IHJldDtcbitcbitcdC8qIEJHIHZvbHRhZ2UgKi9cbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7XG4rXG4rXHQvKiBNREkgKi9cbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTYwMyk7XG4rXG4rXHQvKiBkaXNhYmxlIHR4IHNsZXcgY29udHJvbCAqL1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgyMTAwKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDU7IGkrKykge1xuK1x0XHRyZXQgPSBlbjc1MTIyMV9mZXBoeV9yNTAocGh5ZGV2KTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSsrKSB7XG4rXHRcdHJldCA9IGVuNzUxMjIxX2ZlcGh5X3R4X29mZnNldChwaHlkZXYpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRicmVhaztcbitcdH1cbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA1OyBpKyspIHtcbitcdFx0cmV0ID0gZW43NTEyMjFfZmVwaHlfdHhfYW1wKHBoeWRldik7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCBsMHIyNl90ZW1wKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIyLCAweDQ0NDQpO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDMxMDApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcG9ydDAgPSBFQ09ORVRfRU43NTI2Q19QT1JUMF9BRERSO1xuK1x0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQ7XG4rXHRzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkICE9IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuK1x0XHRwb3J0MCA9IEVDT05FVF9MRUdBQ1lfUE9SVDBfQUREUjtcbitcbitcdHJldCA9IGRldm1fcGh5X3BhY2thZ2Vfam9pbihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHBoeWRldiwgcG9ydDAsXG4rXHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCkpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXG4rXHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgPT0gcG9ydDApXG4rXHRcdHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAgPSBwaHlkZXY7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGVuNzUxMjIxX2ZlcGh5X2RyaXZlcltdID0ge1xuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpLFxuK1x0XHQubmFtZVx0XHQ9IFwiRWNvTmV0IEVONzUxMjIxIEZFUEhZXCIsXG4rXHRcdC5jb25maWdfaW5pdFx0PSBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdCxcbitcdFx0LmNvbmZpZ19pbnRyXHQ9IGdlbnBoeV9ub19jb25maWdfaW50cixcbitcdFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssXG4rXHRcdC5wcm9iZVx0XHQ9IGVuNzUxMjIxX2ZlcGh5X3Byb2JlLFxuK1x0XHQucmVhZF9wYWdlXHQ9IG10a19waHlfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXG4rXHR9XG4rfTtcbitcbittb2R1bGVfcGh5X2RyaXZlcihlbjc1MTIyMV9mZXBoeV9kcml2ZXIpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgZW43NTEyMjFfZmVwaHlfdGJsW10gPSB7XG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChFQ09ORVRfRkVQSFlfSURfRU43NTI2QykgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiRWNvTmV0IFNvQyAxMC8xMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfQVVUSE9SKFwiQ2FsZWIgSmFtZXMgRGVMaXNsZSBcdTAwM2NjamRAY2pkbnMuZnJcdTAwM2VcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBlbjc1MTIyMV9mZXBoeV90YmwpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6NTkuODU1MjM0NjY0WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzgyOTE1MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIENvbmNlcm5zIEFkZHJlc3NlZDogRWNvTmV0IFBIWSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhlIGNvZGUgZm9yIHRoaXMgbmV3IEVjb05ldCAxMC8xMDAgU29DIEV0aGVybmV0IFBIWSBkcml2ZXIsIGBlY29uZXQtZmUtc29jLmNgLCBhbmQgSSdtIGZlZWxpbmcgcHJldHR5IGdvb2QgYWJvdXQgaXQgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBJdCdzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBQSFkgZHJpdmVyIOKAkyBpbXBsZW1lbnRpbmcgc3RhbmRhcmQgY2FsbGJhY2tzIGxpa2UgYGNvbmZpZ19pbml0YCwgYHByb2JlYCwgYW5kIHRoZSByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zLiBUaGUga2V5IGlzIGluIGhvdyBpdCBoYW5kbGVzIG1lbW9yeSBhbmQgcmVnaXN0ZXIgYWNjZXNzLlxuXG5JIHNlZSBpdCB1dGlsaXplcyBzdGFuZGFyZCBQSFlsaWIgZnVuY3Rpb25zIGxpa2UgYHBoeV93cml0ZV9wYWdlZGAsIGBwaHlfcmVhZF9wYWdlZGAsIGFuZCBgcGh5X21vZGlmeV9wYWdlZGAgdG8gY29uZmlndXJlIHRoZSBQSFkuIEl0IGFsc28gdXNlcyBgZGV2bV9waHlfcGFja2FnZV9qb2luYCBhbmQgYWxsb2NhdGVzIGEgcHJpdmF0ZSBgbXRrX3NvY3BoeV9wcml2YCBzdHJ1Y3R1cmUuIFRoaXMgaXMgYWxsIHN0YW5kYXJkLlxuXG5JbXBvcnRhbnRseSwgdGhlcmUncyBubyBpbnRlcmFjdGlvbiB3aXRoIHVzZXItc3BhY2UgZGF0YSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZC4gV2UncmUgdGFsa2luZyBkaXJlY3QgTURJTyByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzLiBJJ20gbm90IHNlZWluZyBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgb3IgcG90ZW50aWFsIGxlYWtzLlxuXG5UaGUgYWxsb2NhdGlvbiBvZiB0aGUgYHByaXZgIHN0cnVjdHVyZSB1c2luZyBgZGV2bV9remFsbG9jYCBpcyBlc3BlY2lhbGx5IHJlYXNzdXJpbmcuIFRoYXQncyBhIHplcm8taW5pdGlhbGl6ZWQgYWxsb2NhdGlvbiwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudCB0byBhdm9pZCB0aG9zZSB0cmlja3kgS01TQU4gaXNzdWVzLiBBbmQgYGRldm1fcGh5X3BhY2thZ2Vfam9pbmAgaXRzZWxmIGhhbmRsZXMgdGhlIHNoYXJlZCBzdHJ1Y3R1cmUgaW4gYSBzaW1pbGFyIHNhZmUgbWFubmVyLCBpbnRlcm5hbGx5IGNhbGxpbmcgYGt6YWxsb2NgIG9yIGVxdWl2YWxlbnQsIHNvIHRoYXQncyBnb29kLlxuXG5UbyBiZSBleHRyYSBzdXJlLCBJIGp1c3QgZG91YmxlLWNoZWNrZWQgaG93IGBkZXZtX3BoeV9wYWNrYWdlX2pvaW5gIGRvZXMgaXRzIHRoaW5nLCB0b28uIEl0J3MgYWxsIHplcm9lZCBvdXQgdGhlcmUsIGluY2x1ZGluZyB0aGUgc2hhcmVkIGRhdGEgYW5kIGBwcml2YC4gSSBzZWUgYHN0cnVjdCBjYWxfY29tcGxldGVfY3R4IGNjdHggPSB7fTtgIGlzIHplcm8taW5pdGlhbGl6ZWQgYW5kIGBnZXRfY3RhYihwaHlkZXYpYCByZXR1cm5zIGEgZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGJ5IHZhbHVlLiBFdmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZHJpdmVyLCB0aGUgdXNlIG9mIHN0YW5kYXJkIGFuZCBzYWZlIG1lbW9yeSBhbGxvY2F0aW9uIG1ldGhvZHMsIGFuZCB0aGUgbGFjayBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnRlcmFjdGluZyB3aXRoIHVzZXIgc3BhY2UsIEknbSBjb25maWRlbnQgd2Ugd29uJ3QgYmUgaW50cm9kdWNpbmcgYW55IEtNU0FOLXNwZWNpZmljIGJ1Z3MgaGVyZS4gQW55IGlzc3VlcyBhcmUgZ29pbmcgdG8gYmUgcnVuLW9mLXRoZS1taWxsIHRoaW5ncyB0aGF0IEtBU0FOIHdpbGwgY2F0Y2g6IGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0OTgsIk91dHB1dFRva2VucyI6MjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjE6MTAuNjM4MTUzOTg0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIEVjb05ldCAxMC8xMDAgU29Dcy4gVGhlIGRyaXZlciBwcmltYXJpbHkgaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIHZpYSBNRElPICh1c2luZyBwaHlsaWIgZnVuY3Rpb25zIGxpa2UgcGh5X3dyaXRlX3BhZ2VkIGFuZCBwaHlfcmVhZF9wYWdlZCkgYW5kIHBlcmZvcm1zIGNhbGlicmF0aW9uIHJvdXRpbmVzLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGUuZy4sIG10a19zb2NwaHlfcHJpdiBhbmQgdGhlIHNoYXJlZCBwYWNrYWdlIGRhdGEpIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGRldm1fa3phbGxvYyBvciBzdGFuZGFyZCBwaHlsaWIgZnVuY3Rpb25zLiBTdGFjayB2YXJpYWJsZXMgbGlrZSBjYWxfY29tcGxldGVfY3R4IGFyZSBhbHNvIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdXNlci1zcGFjZSBBUElzLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3Rscywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnktZGVwZW5kZW50IGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBFY29OZXQgMTAvMTAwIFNvQ3MuIFRoZSBkcml2ZXIgcHJpbWFyaWx5IGludGVyYWN0cyB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycyB2aWEgTURJTyAodXNpbmcgcGh5bGliIGZ1bmN0aW9ucyBsaWtlIHBoeV93cml0ZV9wYWdlZCBhbmQgcGh5X3JlYWRfcGFnZWQpIGFuZCBwZXJmb3JtcyBjYWxpYnJhdGlvbiByb3V0aW5lcy4gQWxsIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBtdGtfc29jcGh5X3ByaXYgYW5kIHRoZSBzaGFyZWQgcGFja2FnZSBkYXRhKSBhcmUgemVyby1pbml0aWFsaXplZCB1c2luZyBkZXZtX2t6YWxsb2Mgb3Igc3RhbmRhcmQgcGh5bGliIGZ1bmN0aW9ucy4gU3RhY2sgdmFyaWFibGVzIGxpa2UgY2FsX2NvbXBsZXRlX2N0eCBhcmUgYWxzbyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVzZXItc3BhY2UgQVBJcywgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bHMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LWRlcGVuZGVudCBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt4c8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 19:02:15 +0000 UTC FinishedAt: 2026-08-25 19:21:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ECONET_FE_SOC_PHY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ECONET_FE_SOC_PHY" ], "series_id": "c3b884f6-e4b9-4313-a019-20e20dfaeaba" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "en751221_fephy_probe", "en751221_fephy_config_init" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VDT05FVF9GRV9TT0NfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW43NTEyMjFfZmVwaHlfcHJvYmUmIzM0OywKICAgICYjMzQ7ZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIEVjb05ldCAxMC8xMDAgU29Dcy4gVGhlIGRyaXZlciBwcmltYXJpbHkgaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIHZpYSBNRElPICh1c2luZyBwaHlsaWIgZnVuY3Rpb25zIGxpa2UgcGh5X3dyaXRlX3BhZ2VkIGFuZCBwaHlfcmVhZF9wYWdlZCkgYW5kIHBlcmZvcm1zIGNhbGlicmF0aW9uIHJvdXRpbmVzLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGUuZy4sIG10a19zb2NwaHlfcHJpdiBhbmQgdGhlIHNoYXJlZCBwYWNrYWdlIGRhdGEpIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGRldm1fa3phbGxvYyBvciBzdGFuZGFyZCBwaHlsaWIgZnVuY3Rpb25zLiBTdGFjayB2YXJpYWJsZXMgbGlrZSBjYWxfY29tcGxldGVfY3R4IGFyZSBhbHNvIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdXNlci1zcGFjZSBBUElzLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3Rscywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnktZGVwZW5kZW50IGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZcyAoYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNgKS4gUEhZIGRyaXZlcnMgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhbiBNRElPIGJ1cy4gRm9yIGV4YW1wbGUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKHN1Y2ggYXMgYHNtc2M5NXh4YCkgdmlhIHRoZSBgdmhjaWAgZHJpdmVyLiBXaGVuIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIGlzIHByb2JlZCwgaXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCBzY2FucyBmb3IgUEhZcyBieSBzZW5kaW5nIE1ESU8gcmVhZCByZXF1ZXN0cyAod2hpY2ggdHJhbnNsYXRlIHRvIFVTQiBjb250cm9sIG1lc3NhZ2VzKS4gQnkgcmV0dXJuaW5nIHRoZSBzcGVjaWZpYyBQSFkgSUQgKGAweDAzYTI5NDE0YCkgZHVyaW5nIHRoZSBNRElPIHNjYW4sIHRoZSBNRElPIGJ1cyB3aWxsIGluc3RhbnRpYXRlIGEgUEhZIGRldmljZSB3aXRoIHRoaXMgSUQsIHRyaWdnZXJpbmcgdGhlIHByb2JlIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgb2YgdGhlIGBlY29uZXQtZmUtc29jYCBQSFkgZHJpdmVyLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0N2JiYzQzNmRlYzI0NTA0YzA3MDMzMGM2ZDQ3Yjc5MTkzMTY4MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxOToxODo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA0NjBjYjcyNjg4NDUwLi43Y2EzZDhkMDhjNjkzIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtOTI1Myw2ICYjNDM7OTI1MywxMiBAQCBXOlx0aHR0cHM6Ly9saW51eHR2Lm9yZ1xuIFE6XHRodHRwOi8vcGF0Y2h3b3JrLmxpbnV4dHYub3JnL3Byb2plY3QvbGludXgtbWVkaWEvbGlzdC9cbiBGOlx0ZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2VjMTAwKlxuIFxuJiM0MztFQ09ORVQgRVRIRVJORVQgUEhZIERSSVZFUlxuJiM0MztNOlx0Q2FsZWIgSmFtZXMgRGVMaXNsZSBcdTAwM2NjamRAY2pkbnMuZnJcdTAwM2VcbiYjNDM7TDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNcbiYjNDM7XG4gRUNPTkVUIE1JUFMgUExBVEZPUk1cbiBNOlx0Q2FsZWIgSmFtZXMgRGVMaXNsZSBcdTAwM2NjamRAY2pkbnMuZnJcdTAwM2VcbiBMOlx0bGludXgtbWlwc0B2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXG5pbmRleCAzYjljZjgyYzBjYjI4Li42NGFiZjViNjk1YWIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXG5AQCAtMSw0ICYjNDM7MSwxOSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MztcbiYjNDM7Y29uZmlnIEVDT05FVF9GRV9TT0NfUEhZXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7RWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZc1wmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gRUNPTkVUIHx8IENPTVBJTEVfVEVTVFxuJiM0MztcdHNlbGVjdCBNVEtfTkVUX1BIWUxJQlxuJiM0MztcdHNlbGVjdCBQSFlfUEFDS0FHRVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFN1cHBvcnRzIEVjb05ldCBTb0MgYnVpbHQtaW4gMTAvMTAwIEV0aGVybmV0IFBIWXMuXG4mIzQzO1xuJiM0MztcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBidWlsdC1pbiBFdGhlcm5ldCBQSFlzIHdoaWNoIGFyZSBwcmVzZW50IGluXG4mIzQzO1x0ICBFTjc1MjZDIGJhc2VkIFNvQ3MgKGluY2x1ZGluZyBFTjc1MjZGKS4gSXQgY2FuIGFsc28gd29yayB3aXRoXG4mIzQzO1x0ICBsZWdhY3kgRU43NTEyIEZFIFBIWXMgd2hpY2ggaWRlbnRpZnkgYXMgMDNhMi45NDEyLCBidXQgc2luY2UgdGhpc1xuJiM0MztcdCAgSUQgaXMgdXNlZCBieSBNRURJQVRFS19HRV9QSFksIHVzZXJzIHdhbnRpbmcgdG8gZm9yY2UgdGhpcyBkcml2ZXJcbiYjNDM7XHQgIG11c3Qgb3ZlcnJpZGUgdGhlIElEIHRvIDAzYTIuOTQxNCBpbiB0aGUgZGV2aWNlIHRyZWUuXG4mIzQzO1xuIGNvbmZpZyBNRURJQVRFS18yUDVHRV9QSFlcbiBcdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIDIuNUdiIEV0aGVybmV0IFBIWXNcJiMzNDtcbiBcdGRlcGVuZHMgb24gKEFSTTY0IFx1MDAyNlx1MDAyNiBBUkNIX01FRElBVEVLKSB8fCBDT01QSUxFX1RFU1RcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGVcbmluZGV4IDZmOWNhY2Y3ZjkwNjUuLjcxMjM5ZTkyYWE1ODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxuQEAgLTEsNCAmIzQzOzEsNSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7b2JqLSQoQ09ORklHX0VDT05FVF9GRV9TT0NfUEhZKVx0XHQmIzQzOz0gZWNvbmV0LWZlLXNvYy5vXG4gb2JqLSQoQ09ORklHX01FRElBVEVLXzJQNUdFX1BIWSlcdCYjNDM7PSBtdGstMnA1Z2Uub1xuIG9iai0kKENPTkZJR19NRURJQVRFS19GRV9TT0NfUEhZKVx0JiM0Mzs9IG10ay1mZS1zb2Mub1xuIG9iai0kKENPTkZJR19NRURJQVRFS19HRV9QSFkpXHRcdCYjNDM7PSBtdGstZ2Uub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmMgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzVkYmIzMmE1ZDFhYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY1xuQEAgLTAsMCAmIzQzOzEsNjMyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL3BoeWxpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O210ay5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbiBvbGRlciB2ZXJzaW9uIG9mIHRoaXMgUEhZIGhhcmR3YXJlIHVzZXMgdGhlIElEIDAzYTIuOTQxMi5cbiYjNDM7ICogVGhpcyBkcml2ZXIgZG9lcyBub3QgbWF0Y2ggb24gaXQgYmVjYXVzZSBpdCBjb2xsaWRlcyB3aXRoXG4mIzQzOyAqIE1US19HUEhZX0lEX01UNzUzMCwgc28gdXNlcnMgd2FudGluZyB0byB1c2UgdGhpcyBkcml2ZXIgc2hvdWxkXG4mIzQzOyAqIG92ZXJyaWRlIHRoZSBQSFkgSUQgaW4gdGhlIGRldmljZSB0cmVlIHRvIDAzYTIuOTQxNC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkNcdFx0MHgwM2EyOTQxNFxuJiM0MztcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzFcdFx0XHQweDEwMDBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzJcdFx0XHQweDIwMDBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzNcdFx0XHQweDMwMDBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzRcdFx0XHQweDQwMDBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzVcdFx0XHQweDUwMDBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzZcdFx0XHQweDYwMDBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzdcdFx0XHQweDcwMDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wwXHRcdFx0MHg4MDAwXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wxXHRcdFx0MHg5MDAwXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wyXHRcdFx0MHhhMDAwXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wzXHRcdFx0MHhiMDAwXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0w0XHRcdFx0MHhjMDAwXG4mIzQzO1xuJiM0MzsvKiA0IHBvcnRzICg4LDksMTAsMTEpIG9yIDMgcG9ydHMgKDksMTAsMTEpICovXG4mIzQzOyNkZWZpbmUgRUNPTkVUX0xFR0FDWV9QT1JUMF9BRERSXHQ4XG4mIzQzOyNkZWZpbmUgRUNPTkVUX0VONzUyNkNfUE9SVDBfQUREUlx0OVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2FsaWJyYXRpb24gcG9sbGluZyBkb2VzIG5vdCBjb21wbGV0ZSB1bnRpbCBFQ09ORVRfQ0FMX01JTl9DWUNMRVNcbiYjNDM7ICogY29uc2VjdXRpdmUgXCYjMzQ7ZG9uZVwmIzM0OyByZXN1bHRzIGFyZSByZWNlaXZlZC4gU2VlOiBwb2xsX2NhbF9jb21wbGV0ZVxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMX01JTl9DWUNMRVNcdFx0MTBcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE1pY3Jvc2Vjb25kcyBwZXIgY2FsaWJyYXRpb24gcG9sbCBjeWNsZSwgY2FsaWJyYXRpb24gdGFrZXMgYXBwcm94aW1hdGVseVxuJiM0MzsgKiBFQ09ORVRfQ0FMX0NZQ0xFX1VTICogRUNPTkVUX0NBTF9NSU5fQ1lDTEVTLiBUb3RhbCBzZXR1cCB0aW1lIGlzIHVzdWFsbHlcbiYjNDM7ICogbGVzcyB0aGFuIDE1MHggdGhpcyBudW1iZXIuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfQ1lDTEVfVVNcdFx0MTBcbiYjNDM7XG4mIzQzOy8qIFRvdGFsIHRpbWUgYWxsb3dlZCBmb3IgY2FsaWJyYXRpb24gcG9sbGluZyBiZWZvcmUgZXJyb3IgaXMgcmV0dXJuZWQuICovXG4mIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9USU1FT1VUX1VTXHRcdDEwMDAwMFxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTm90ZTogVGhlc2UgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgd2VyZSB3cml0dGVuIHdpdGhvdXQgdGhlIGJlbmVmaXQgb2YgdGhlXG4mIzQzOyAqICAgICAgIGhhcmR3YXJlIHNwZWNpZmljYXRpb24sIHNvIG5hbWVzIGFyZSBnaXZlbiBvbmx5IHdoZXJlIHRoZSBtZWFuaW5nIGlzXG4mIzQzOyAqICAgICAgIGZhaXJseSBvYnZpb3VzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOy8qIEc3UjI0ICovXG4mIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9UWVBFX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4mIzQzOyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfUjUwXHRcdEZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4NilcbiYjNDM7I2RlZmluZSAgIEVDT05FVF9DQUxfVFlQRV9UWE9TXHRcdEZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4MylcbiYjNDM7I2RlZmluZSAgIEVDT05FVF9DQUxfVFlQRV9UWEFNUFx0XHRGSUVMRF9QUkVQKEVDT05FVF9DQUxfVFlQRV9NQVNLLCAweDcpXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX01BU0tcdFx0R0VOTUFTSygxMSwgNilcbiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMSU5fRU43NTI2Q1x0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMX0RPTkVfRU43NTI2Q1x0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMX09VVF9FTjc1MjZDXHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7LyogTDRSMjMgKi9cbiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMSU5fTEVHQUNZXHRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfRE9ORV9MRUdBQ1lcdFx0QklUKDYpXG4mIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9PVVRfTEVHQUNZXHRcdEJJVCg0KVxuJiM0MztcbiYjNDM7I2RlZmluZSBFQ09ORVRfREFDX0lOXzJWXHRcdDB4MGYwXG4mIzQzO1xuJiM0MzsvKiBMNFIxNyAqL1xuJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX1NJR05cdFx0QklUKDEzKVxuJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX01BR1x0XHRcdEdFTk1BU0soMTIsIDgpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX0RFRkFVTFRcdFx0MFxuJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX01BWFx0XHRcdDMxXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1RYT1NfTUlOXHRcdFx0LTMxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVDT05FVF9SNTBfWkNBTF9ERUZBVUxUXHRcdDB4MjBcbiYjNDM7I2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfTUFYXHRcdDB4M2ZcbiYjNDM7XG4mIzQzOy8qIEw0UjIyICovXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1I1MF9UWENBTF9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgRUNPTkVUX1I1MF9SWENBTF9NQVNLXHRcdEdFTk1BU0soNywgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRUNPTkVUX1RYQU1QX0RFRkFVTFRcdFx0MHgxMlxuJiM0MzsjZGVmaW5lIEVDT05FVF9UWEFNUF9NQVhcdFx0MHgzZlxuJiM0MztcbiYjNDM7LyogWkNBTCBjb21wZW5zYXRpb24gdGFibGUgcGVyIGNoaXAsIHBlciBwaHksIFJYICYjNDM7IFRYICovXG4mIzQzO3N0cnVjdCBjb21wZW5zYXRpb24ge1xuJiM0MztcdHM4IHpjYWxfdHg7XG4mIzQzO1x0czggemNhbF9yeDtcbiYjNDM7XHRzOCB0eG9zO1xuJiM0MztcdHM4IGFtcDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGVuc2F0aW9uIGVuNzUxMjIxX2NvbXBbMl1bNF0gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0LyogTGVnYWN5ICovXG4mIzQzO1x0XHR7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gLTQsIC50eG9zID0gMCwgLmFtcCA9IDEgfSwgLyogIDggKi9cbiYjNDM7XHRcdHsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSAtNCwgLnR4b3MgPSAxLCAuYW1wID0gMiB9LCAvKiAgOSAqL1xuJiM0MztcdFx0eyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IC00LCAudHhvcyA9IDEsIC5hbXAgPSAxIH0sIC8qIDEwICovXG4mIzQzO1x0XHR7IC56Y2FsX3R4ID0gLTIsIC56Y2FsX3J4ID0gLTgsIC50eG9zID0gMSwgLmFtcCA9IDEgfSwgLyogMTEgKi9cbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC8qIEVONzUyNkMgKi9cbiYjNDM7XHRcdHsgLnpjYWxfdHggPSAzLCAgLnpjYWxfcnggPSA2LCAudHhvcyA9IDEsIC5hbXAgPSAwIH0sIC8qICA5ICovXG4mIzQzO1x0XHR7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gNSwgLnR4b3MgPSAxLCAuYW1wID0gLTEgfSwgLyogMTAgKi9cbiYjNDM7XHRcdHsgLnpjYWxfdHggPSA2LCAgLnpjYWxfcnggPSA2LCAudHhvcyA9IDEsIC5hbXAgPSAtMSB9LCAvKiAxMSAqL1xuJiM0MztcdFx0eyB9LCAvKiBVbnVzZWQgKi9cbiYjNDM7XHR9XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgdTggemNhbF90b19yNTBvaG1bNjRdID0ge1xuJiM0MztcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNiwgMTIzLCAxMjAsIDExNywgMTE0LCAxMTIsIDExMCwgMTA3LCAxMDUsIDEwMyxcbiYjNDM7XHQxMDEsICA5OSwgIDk3LCAgNzksICA3NywgIDc1LCAgNzQsICA3MiwgIDcwLCAgNjksICA2NywgIDY2LCAgNjUsICA0NywgIDQ2LCAgNDUsXG4mIzQzO1x0IDQzLCAgNDIsICA0MSwgIDQwLCAgMzksICAzOCwgIDM3LCAgMzYsICAzNCwgIDM0LCAgMzMsICAzMiwgIDE1LCAgMTQsICAxMywgIDEyLFxuJiM0MztcdCAxMSwgIDEwLCAgMTAsICAgOSwgICA4LCAgIDcsICAgNywgICA2LCAgIDUsICAgNCwgICA0LCAgIDMsICAgMiwgICAyLCAgIDEsICAgMVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkIHtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBjb21wZW5zYXRpb24gZ2V0X2N0YWIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHR1OCBwaHlfb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRwaHlfb2Zmc2V0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAtXHUwMDNlbWRpby5hZGRyO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHBoeV9vZmZzZXQgXHUwMDNlPSBBUlJBWV9TSVpFKGVuNzUxMjIxX2NvbXBbMF0pKSlcbiYjNDM7XHRcdHJldHVybiAoc3RydWN0IGNvbXBlbnNhdGlvbikge307XG4mIzQzO1xuJiM0MztcdHJldHVybiBlbjc1MTIyMV9jb21wW3BoeWRldi1cdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkNdW3BoeV9vZmZzZXRdO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzZXRfY2FsaW5fZmxhZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0dTE2IHNldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHtcbiYjNDM7XHRcdC8qIEc3UjI0IGlzIHNoYXJlZCBzbyBwaHlfbW9kaWZ5X3BhZ2VkIGlzIHJlcXVpcmVkICovXG4mIzQzO1x0XHRzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0VONzUyNkMgOiAwO1xuJiM0MztcdFx0cGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsXG4mIzQzO1x0XHRcdFx0IEVDT05FVF9DQUxJTl9FTjc1MjZDLCBzZXQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0xFR0FDWSA6IDA7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0w0LCAyMywgc2V0KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBjYWxfY29tcGxldGVfY3R4IHtcbiYjNDM7XHR1MTYgY29uc2VjdXRpdmVfdHJ1ZXNcdDogMTU7XG4mIzQzO1x0Ym9vbCBzdGFydGVkXHRcdDogMTtcbiYjNDM7XHRib29sIG9ic2VydmVkX2ZhbHNlXHQ6IDE7XG4mIzQzO1x0dTE2IGFib3J0ZWRfdHJpZXNcdDogNztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwb2xsX2NhbF9jb21wbGV0ZSAtIHBvbGwgZm9yIGNhbGlicmF0aW9uIGNvbXBsZXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIEJlY2F1c2Ugc29tZSBsZWdhY3kgY2hpcHMgYXJlIGtub3duIHRvIGJlIHVucmVsaWFibGUgKGZhbHNlIHBvc2l0aXZlcyksXG4mIzQzOyAqIHJlZmVyZW5jZSBjb2RlIGFkZHMgMTAsMDAwdXMgb2YgZml4ZWQgZGVsYXkgcGVyIGNhbGlicmF0aW9uIGN5Y2xlLlxuJiM0MzsgKiBQcmFjdGljYWxseSwgdGhlcmUgYXJlIGFib3V0IDEwLTUwIGNhbGlicmF0aW9uIGN5Y2xlcyBmb3IgZWFjaCBvZiB0aGVcbiYjNDM7ICogdGhyZWUgdHVuYWJsZXMsIHNvIGFkZGluZyBhIHNpZ25pZmljYW50IGZpeGVkIGRlbGF5IGlzIGNvc3RseS5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIHN0YXJ0cyB3aXRoIENBTElOIGRpc2FibGVkLCBwb2xscyBmb3JcbiYjNDM7ICogZG9uZSBzdGF0dXMgZmFsc2UsIHRoZW4gZW5hYmxlcyBDQUxJTiBhbmQgcG9sbHMgdW50aWwgYSB0cnVlIGRvbmVcbiYjNDM7ICogc3RhdHVzIGlzIHJlY29yZGVkIEVDT05FVF9DQUxfTUlOX0NZQ0xFUyB0aW1lcyBjb25zZWN1dGl2ZWx5LlxuJiM0MzsgKlxuJiM0MzsgKiBAcmV0dXJuczpcbiYjNDM7ICogICBcdTAwM2MgMCBvbiBlcnJvclxuJiM0MzsgKiAgIDAgbm90IHlldCBjb21wbGV0ZVxuJiM0MzsgKiAgIDEgY29tcGxldGUgZmFsc2VcbiYjNDM7ICogICAyIGNvbXBsZXRlIHRydWVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcG9sbF9jYWxfY29tcGxldGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgY2FsX2NvbXBsZXRlX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCBkb25lX21hc2s7XG4mIzQzO1x0aW50IG91dF9tYXNrO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlfcmVhZF9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQpO1xuJiM0MztcdFx0ZG9uZV9tYXNrID0gRUNPTkVUX0NBTF9ET05FX0VONzUyNkM7XG4mIzQzO1x0XHRvdXRfbWFzayA9IEVDT05FVF9DQUxfT1VUX0VONzUyNkM7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IHBoeV9yZWFkX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MNCwgMjMpO1xuJiM0MztcdFx0ZG9uZV9tYXNrID0gRUNPTkVUX0NBTF9ET05FX0xFR0FDWTtcbiYjNDM7XHRcdG91dF9tYXNrID0gRUNPTkVUX0NBTF9PVVRfTEVHQUNZO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKChyZXQgXHUwMDI2IGRvbmVfbWFzaykgPT0gMCkge1xuJiM0MztcdFx0Y3R4LVx1MDAzZW9ic2VydmVkX2ZhbHNlID0gdHJ1ZTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VhYm9ydGVkX3RyaWVzICYjNDM7PSAoY3R4LVx1MDAzZWNvbnNlY3V0aXZlX3RydWVzIFx1MDAzZSAwKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2Vjb25zZWN1dGl2ZV90cnVlcyA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFjdHgtXHUwMDNlc3RhcnRlZCkge1xuJiM0MztcdFx0XHRzZXRfY2FsaW5fZmxhZyhwaHlkZXYsIHRydWUpO1xuJiM0MztcdFx0XHRjdHgtXHUwMDNlc3RhcnRlZCA9IHRydWU7XG4mIzQzO1x0XHRcdHJldHVybiBwb2xsX2NhbF9jb21wbGV0ZShwaHlkZXYsIGN0eCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjdHgtXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWNvbnNlY3V0aXZlX3RydWVzIFx1MDAzYyBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgfHwgIWN0eC1cdTAwM2VvYnNlcnZlZF9mYWxzZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWFib3J0ZWRfdHJpZXMpXG4mIzQzO1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0O0NhbGlicmF0aW9uIGN5Y2xlICVkIGZhbHNlIHBvc2l0aXZlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGN0eC1cdTAwM2VhYm9ydGVkX3RyaWVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICgocmV0IFx1MDAyNiBvdXRfbWFzaykgIT0gMCkgPyAyIDogMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBvbGxfY2FsX2NvbXBsZXRlIC0gY2hlY2sgZm9yIGNhbGlicmF0aW9uIHJlZ2lzdGVyXG4mIzQzOyAqIEByZXR1cm5zOiAtZXJyb3Igb3IgMSBpZiBjYWxpYnJhdGlvbiByZXN1bHQgaXMgdHJ1ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY2FsX2NvbXBsZXRlX2N0eCBjY3R4ID0ge307XG4mIzQzO1x0aW50IG91dDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRzZXRfY2FsaW5fZmxhZyhwaHlkZXYsIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQocG9sbF9jYWxfY29tcGxldGUsIG91dCwgb3V0ICE9IDAsXG4mIzQzO1x0XHRcdFx0RUNPTkVUX0NBTF9DWUNMRV9VUywgRUNPTkVUX0NBTF9USU1FT1VUX1VTLFxuJiM0MztcdFx0XHRcdGZhbHNlLCBwaHlkZXYsIFx1MDAyNmNjdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7Q2FsaWJyYXRpb24gdGltZW91dCAlZCAoJWQgLyAlZCAvICVkIC8gJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICByZXQsIGNjdHguY29uc2VjdXRpdmVfdHJ1ZXMsIGNjdHgub2JzZXJ2ZWRfZmFsc2UsXG4mIzQzO1x0XHRcdCAgIGNjdHguYWJvcnRlZF90cmllcywgY2N0eC5zdGFydGVkKTtcbiYjNDM7XHR9IGVsc2UgaWYgKG91dCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O0NhbGlicmF0aW9uIGVycm9yICVkXFxuXCYjMzQ7LCBvdXQpO1xuJiM0MztcdFx0cmV0ID0gb3V0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBvdXQgXHUwMDNlIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzZXRfY2FsaW5fZmxhZyhwaHlkZXYsIGZhbHNlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3I1MChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XG4mIzQzO1x0aW50IHpjYWxfc3ogPSBBUlJBWV9TSVpFKHpjYWxfdG9fcjUwb2htKTtcbiYjNDM7XHR1OCByZ196Y2FsX2N0cmwgPSBFQ09ORVRfUjUwX1pDQUxfREVGQVVMVDtcbiYjNDM7XHRpbnQgaW5pdGlhbF9jb21wX291dDtcbiYjNDM7XHRpbnQgcG9sYXJpdHkgPSAwO1xuJiM0MztcdGludCBjb21wX291dDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHR1MTYgcnhjYWw7XG4mIzQzO1x0dTE2IHR4Y2FsO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9SNTApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweGMwMDApO1xuJiM0MztcbiYjNDM7XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgxMDAwLCAweDEwMDApO1xuJiM0MztcbiYjNDM7XHRmb3IgKDs7KSB7XG4mIzQzO1x0XHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcbiYjNDM7XHRcdFx0cGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsXG4mIzQzO1x0XHRcdFx0XHQgRUNPTkVUX1I1MF9aQ0FMX01BU0ssXG4mIzQzO1x0XHRcdFx0XHQgRklFTERfUFJFUChFQ09ORVRfUjUwX1pDQUxfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHJnX3pjYWxfY3RybCkpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNixcbiYjNDM7XHRcdFx0XHRcdHJnX3pjYWxfY3RybCk7XG4mIzQzO1xuJiM0MztcdFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChjb21wX291dCBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRyZXQgPSBjb21wX291dDtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBvbGFyaXR5ID09IDApIHtcbiYjNDM7XHRcdFx0LyogRmlyc3QgY3ljbGUgKi9cbiYjNDM7XHRcdFx0aW5pdGlhbF9jb21wX291dCA9IGNvbXBfb3V0O1xuJiM0MztcdFx0XHRwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxO1xuJiM0MztcdFx0fSBlbHNlIGlmIChpbml0aWFsX2NvbXBfb3V0ICE9IGNvbXBfb3V0KSB7XG4mIzQzO1x0XHRcdC8qIEZvdW5kICovXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJnX3pjYWxfY3RybCAmIzQzOz0gcG9sYXJpdHk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJnX3pjYWxfY3RybCBcdTAwM2UgRUNPTkVUX1I1MF9aQ0FMX01BWCkge1xuJiM0MztcdFx0XHRyZXQgPSAxO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJ4Y2FsID0gbWF4KDAsIG1pbih6Y2FsX3N6IC0gMSwgY3RhYi56Y2FsX3J4ICYjNDM7IHJnX3pjYWxfY3RybCkpO1xuJiM0MztcdHR4Y2FsID0gbWF4KDAsIG1pbih6Y2FsX3N6IC0gMSwgY3RhYi56Y2FsX3R4ICYjNDM7IHJnX3pjYWxfY3RybCkpO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDQsIDIyLFxuJiM0MztcdFx0XHRGSUVMRF9QUkVQKEVDT05FVF9SNTBfVFhDQUxfTUFTSywgdHhjYWwpIHxcbiYjNDM7XHRcdFx0RklFTERfUFJFUChFQ09ORVRfUjUwX1JYQ0FMX01BU0ssIHJ4Y2FsKSk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0LyogWmVybyBvdXQgcmVnaXN0ZXJzICovXG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpXG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweGMwMDApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3R4X29mZnNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XG4mIzQzO1x0aW50IGluaXRpYWxfY29tcF9vdXQ7XG4mIzQzO1x0aW50IHBvbGFyaXR5ID0gMDtcbiYjNDM7XHRpbnQgb2Zmc2V0ID0gRUNPTkVUX1RYT1NfREVGQVVMVDtcbiYjNDM7XHR1MTYgb2Zmc2V0X2JpbjtcbiYjNDM7XHRpbnQgY29tcF9vdXQ7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgyMTAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCAweDUyMDApOyAvKiBmaXggTURJICovXG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfVFhPUyk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDA0MDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHg0ODAwKTtcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4NGMwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyMSwgMHgwODAwLCAweDA4MDApO1xuJiM0MztcbiYjNDM7XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgwMmMwLCAweDAyYzApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDApO1xuJiM0MztcbiYjNDM7XHRmb3IgKDs7KSB7XG4mIzQzO1x0XHRvZmZzZXRfYmluID0gRklFTERfUFJFUChFQ09ORVRfVFhPU19NQUcsIGFicyhvZmZzZXQpKTtcbiYjNDM7XHRcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdG9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjtcbiYjNDM7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDQsIDE3LCBvZmZzZXRfYmluKTtcbiYjNDM7XG4mIzQzO1x0XHRjb21wX291dCA9IGVuNzUxMjIxX2ZlcGh5X2NhbF9jeWNsZShwaHlkZXYpO1xuJiM0MztcdFx0aWYgKGNvbXBfb3V0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdHJldCA9IGNvbXBfb3V0O1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocG9sYXJpdHkgPT0gMCkge1xuJiM0MztcdFx0XHQvKiBGaXJzdCBjeWNsZSAqL1xuJiM0MztcdFx0XHRpbml0aWFsX2NvbXBfb3V0ID0gY29tcF9vdXQ7XG4mIzQzO1x0XHRcdHBvbGFyaXR5ID0gY29tcF9vdXQgPyAtMSA6IDE7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHtcbiYjNDM7XHRcdFx0LyogRm91bmQgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBwb2xhcml0eTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAob2Zmc2V0IFx1MDAzZSBFQ09ORVRfVFhPU19NQVggfHwgb2Zmc2V0IFx1MDAzYyBFQ09ORVRfVFhPU19NSU4pIHtcbiYjNDM7XHRcdFx0cmV0ID0gMTtcbiYjNDM7XHRcdFx0b2Zmc2V0ID0gMDtcbiYjNDM7XHRcdFx0Z290byBzZXRfdmFsO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b2Zmc2V0ICYjNDM7PSBjdGFiLnR4b3MgKiBwb2xhcml0eTtcbiYjNDM7XG4mIzQzO1x0aWYgKG9mZnNldCBcdTAwM2UgRUNPTkVUX1RYT1NfTUFYIHx8IG9mZnNldCBcdTAwM2MgRUNPTkVUX1RYT1NfTUlOKVxuJiM0MztcdFx0b2Zmc2V0IC09IGN0YWIudHhvcyAqIHBvbGFyaXR5O1xuJiM0MztcbiYjNDM7c2V0X3ZhbDpcbiYjNDM7XHRvZmZzZXRfYmluID0gRklFTERfUFJFUChFQ09ORVRfVFhPU19NQUcsIGFicyhvZmZzZXQpKTtcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAzYyAwKVxuJiM0MztcdFx0b2Zmc2V0X2JpbiB8PSBFQ09ORVRfVFhPU19TSUdOO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMTcsIG9mZnNldF9iaW4pO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuJiM0MztcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgMHgwMDAwKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV90eF9hbXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgY29tcGVuc2F0aW9uIGN0YWIgPSBnZXRfY3RhYihwaHlkZXYpO1xuJiM0MztcdGludCBpbml0aWFsX2NvbXBfb3V0O1xuJiM0MztcdHU4IHR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUO1xuJiM0MztcdGludCBwb2xhcml0eSA9IDA7XG4mIzQzO1x0aW50IGNvbXBfb3V0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDAsIDB4MjEwMCk7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgMHg1MjAzKTtcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzIsIDI1LCAweDEwYzApO1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDAgfCBFQ09ORVRfREFDX0lOXzJWKTtcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzQsIDIxLCAweDA4MDApO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MDJjMCk7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHtcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9UWEFNUCk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDA2MDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwKTtcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4Y2EwMCB8IDB4MDQwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKDs7KSB7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIzLCB0eF9hbXApO1xuJiM0MztcbiYjNDM7XHRcdGNvbXBfb3V0ID0gZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHBoeWRldik7XG4mIzQzO1x0XHRpZiAoY29tcF9vdXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0cmV0ID0gY29tcF9vdXQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChwb2xhcml0eSA9PSAwKSB7XG4mIzQzO1x0XHRcdC8qIEZpcnN0IGN5Y2xlICovXG4mIzQzO1x0XHRcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcbiYjNDM7XHRcdFx0cG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoaW5pdGlhbF9jb21wX291dCAhPSBjb21wX291dCkge1xuJiM0MztcdFx0XHQvKiBGb3VuZCAqL1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR0eF9hbXAgJiM0Mzs9IHBvbGFyaXR5O1xuJiM0MztcbiYjNDM7XHRcdGlmICh0eF9hbXAgXHUwMDNlIEVDT05FVF9UWEFNUF9NQVgpIHtcbiYjNDM7XHRcdFx0cmV0ID0gMTtcbiYjNDM7XHRcdFx0dHhfYW1wID0gRUNPTkVUX1RYQU1QX0RFRkFVTFQ7XG4mIzQzO1x0XHRcdGdvdG8gc2V0X3ZhbDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0eF9hbXAgJiM0MzsgY3RhYi5hbXAgXHUwMDNjIEVDT05FVF9UWEFNUF9NQVgpXG4mIzQzO1x0XHR0eF9hbXAgJiM0Mzs9IGN0YWIuYW1wO1xuJiM0MztcbiYjNDM7c2V0X3ZhbDpcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIzLCB0eF9hbXApO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xuJiM0MztcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgwMDAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0dTE2IGwwcjI2X3RlbXA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7UG9ydCB6ZXJvIG11c3QgYmUgY29uZmlndXJlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciBcdTAwM2Mgc2hhcmVkLVx1MDAzZXBoeWRldl9wMC1cdTAwM2VtZGlvLmFkZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdC8qIEdsb2JhbCByZWdpc3RlcnMgKi9cbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzQsIDI2LCAweDgwNDQpO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjEsIDB4MDBlYSk7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNywgMHgwMmYwKTtcbiYjNDM7XG4mIzQzO1x0LyogTG9jYWwgcmVnaXN0ZXJzICovXG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHhhMDAwKTtcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDEsIDIyLCAweGYwMDApO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjIsIDB4NDQ0NCk7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyNCwgMHgwYzBjKTtcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDI4LCAweDdjNDQpO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMzAsIDB4MDAwNSk7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAxNywgMHgwMDAwKTtcbiYjNDM7XG4mIzQzO1x0LyogRm9yIEUxL0UyLCBFMyByZXF1aXJlcyAweDIyMjAsIGJ1dCBubyBrbm93biBFTjc1MTIyMSBFMyBjaGlwcyBleGlzdCAqL1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MjIwMCk7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4mIzQzO1x0XHQgLyogMTAwTWIgdHggcDJ6X21pZCwgejJuX21pZCwgejJuX292c19wb3N0LCBuMnpfbWlkICovXG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDIyLCAweDAwMzApO1xuJiM0MztcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNSwgMHgwMjQ4KTtcbiYjNDM7XHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjcsIDB4MDJmMCk7XG4mIzQzO1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDI4LCAweDAyMzApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0bDByMjZfdGVtcCA9IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogQkcgdm9sdGFnZSAqL1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7XG4mIzQzO1xuJiM0MztcdC8qIE1ESSAqL1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTYwMyk7XG4mIzQzO1xuJiM0MztcdC8qIGRpc2FibGUgdHggc2xldyBjb250cm9sICovXG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA1OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gZW43NTEyMjFfZmVwaHlfcjUwKHBoeWRldik7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA1OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gZW43NTEyMjFfZmVwaHlfdHhfb2Zmc2V0KHBoeWRldik7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA1OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gZW43NTEyMjFfZmVwaHlfdHhfYW1wKHBoeWRldik7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDAwMDApO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIGwwcjI2X3RlbXApO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7XG4mIzQzO1xuJiM0MztcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjIsIDB4NDQ0NCk7XG4mIzQzO1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDMxMDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBvcnQwID0gRUNPTkVUX0VONzUyNkNfUE9SVDBfQUREUjtcbiYjNDM7XHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZDtcbiYjNDM7XHRzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkICE9IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuJiM0MztcdFx0cG9ydDAgPSBFQ09ORVRfTEVHQUNZX1BPUlQwX0FERFI7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fcGh5X3BhY2thZ2Vfam9pbihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHBoeWRldiwgcG9ydDAsXG4mIzQzO1x0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0c2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciA9PSBwb3J0MClcbiYjNDM7XHRcdHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAgPSBwaHlkZXY7XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBlbjc1MTIyMV9mZXBoeV9kcml2ZXJbXSA9IHtcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpLFxuJiM0MztcdFx0Lm5hbWVcdFx0PSBcJiMzNDtFY29OZXQgRU43NTEyMjEgRkVQSFlcJiMzNDssXG4mIzQzO1x0XHQuY29uZmlnX2luaXRcdD0gZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuY29uZmlnX2ludHJcdD0gZ2VucGh5X25vX2NvbmZpZ19pbnRyLFxuJiM0MztcdFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssXG4mIzQzO1x0XHQucHJvYmVcdFx0PSBlbjc1MTIyMV9mZXBoeV9wcm9iZSxcbiYjNDM7XHRcdC5yZWFkX3BhZ2VcdD0gbXRrX3BoeV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXG4mIzQzO1x0fVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bW9kdWxlX3BoeV9kcml2ZXIoZW43NTEyMjFfZmVwaHlfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgZW43NTEyMjFfZmVwaHlfdGJsW10gPSB7XG4mIzQzO1x0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RWNvTmV0IFNvQyAxMC8xMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7Q2FsZWIgSmFtZXMgRGVMaXNsZSBcdTAwM2NjamRAY2pkbnMuZnJcdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBlbjc1MTIyMV9mZXBoeV90YmwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFQ09ORVRfRkVfU09DX1BIWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VuNzUxMjIxX2ZlcGh5X3Byb2JlJiMzNDssCiAgICAmIzM0O2VuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZcyAoYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNgKS4gUEhZIGRyaXZlcnMgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhbiBNRElPIGJ1cy4gRm9yIGV4YW1wbGUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKHN1Y2ggYXMgYHNtc2M5NXh4YCkgdmlhIHRoZSBgdmhjaWAgZHJpdmVyLiBXaGVuIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIGlzIHByb2JlZCwgaXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCBzY2FucyBmb3IgUEhZcyBieSBzZW5kaW5nIE1ESU8gcmVhZCByZXF1ZXN0cyAod2hpY2ggdHJhbnNsYXRlIHRvIFVTQiBjb250cm9sIG1lc3NhZ2VzKS4gQnkgcmV0dXJuaW5nIHRoZSBzcGVjaWZpYyBQSFkgSUQgKGAweDAzYTI5NDE0YCkgZHVyaW5nIHRoZSBNRElPIHNjYW4sIHRoZSBNRElPIGJ1cyB3aWxsIGluc3RhbnRpYXRlIGEgUEhZIGRldmljZSB3aXRoIHRoaXMgSUQsIHRyaWdnZXJpbmcgdGhlIHByb2JlIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgb2YgdGhlIGBlY29uZXQtZmUtc29jYCBQSFkgZHJpdmVyLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0N2JiYzQzNmRlYzI0NTA0YzA3MDMzMGM2ZDQ3Yjc5MTkzMTY4MTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxOToxODo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNDYwY2I3MjY4ODQ1MC4uN2NhM2Q4ZDA4YzY5MyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTkyNTMsNiAmIzQzOzkyNTMsMTIgQEAgVzoJaHR0cHM6Ly9saW51eHR2Lm9yZwogUToJaHR0cDovL3BhdGNod29yay5saW51eHR2Lm9yZy9wcm9qZWN0L2xpbnV4LW1lZGlhL2xpc3QvCiBGOglkcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZWMxMDAqCiAKJiM0MztFQ09ORVQgRVRIRVJORVQgUEhZIERSSVZFUgomIzQzO006CUNhbGViIEphbWVzIERlTGlzbGUgJmx0O2NqZEBjamRucy5mciZndDsKJiM0MztMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJTWFpbnRhaW5lZAomIzQzO0Y6CWRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmMKJiM0MzsKIEVDT05FVCBNSVBTIFBMQVRGT1JNCiBNOglDYWxlYiBKYW1lcyBEZUxpc2xlICZsdDtjamRAY2pkbnMuZnImZ3Q7CiBMOglsaW51eC1taXBzQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZwppbmRleCAzYjljZjgyYzBjYjI4Li42NGFiZjViNjk1YWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMSw0ICYjNDM7MSwxOSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7CiYjNDM7Y29uZmlnIEVDT05FVF9GRV9TT0NfUEhZCiYjNDM7CXRyaXN0YXRlICYjMzQ7RWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZcyYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gRUNPTkVUIHx8IENPTVBJTEVfVEVTVAomIzQzOwlzZWxlY3QgTVRLX05FVF9QSFlMSUIKJiM0MzsJc2VsZWN0IFBIWV9QQUNLQUdFCiYjNDM7CWhlbHAKJiM0MzsJICBTdXBwb3J0cyBFY29OZXQgU29DIGJ1aWx0LWluIDEwLzEwMCBFdGhlcm5ldCBQSFlzLgomIzQzOwomIzQzOwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgYnVpbHQtaW4gRXRoZXJuZXQgUEhZcyB3aGljaCBhcmUgcHJlc2VudCBpbgomIzQzOwkgIEVONzUyNkMgYmFzZWQgU29DcyAoaW5jbHVkaW5nIEVONzUyNkYpLiBJdCBjYW4gYWxzbyB3b3JrIHdpdGgKJiM0MzsJICBsZWdhY3kgRU43NTEyIEZFIFBIWXMgd2hpY2ggaWRlbnRpZnkgYXMgMDNhMi45NDEyLCBidXQgc2luY2UgdGhpcwomIzQzOwkgIElEIGlzIHVzZWQgYnkgTUVESUFURUtfR0VfUEhZLCB1c2VycyB3YW50aW5nIHRvIGZvcmNlIHRoaXMgZHJpdmVyCiYjNDM7CSAgbXVzdCBvdmVycmlkZSB0aGUgSUQgdG8gMDNhMi45NDE0IGluIHRoZSBkZXZpY2UgdHJlZS4KJiM0MzsKIGNvbmZpZyBNRURJQVRFS18yUDVHRV9QSFkKIAl0cmlzdGF0ZSAmIzM0O01lZGlhVGVrIDIuNUdiIEV0aGVybmV0IFBIWXMmIzM0OwogCWRlcGVuZHMgb24gKEFSTTY0ICZhbXA7JmFtcDsgQVJDSF9NRURJQVRFSykgfHwgQ09NUElMRV9URVNUCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGUKaW5kZXggNmY5Y2FjZjdmOTA2NS4uNzEyMzllOTJhYTU4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtMSw0ICYjNDM7MSw1IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7b2JqLSQoQ09ORklHX0VDT05FVF9GRV9TT0NfUEhZKQkJJiM0Mzs9IGVjb25ldC1mZS1zb2Mubwogb2JqLSQoQ09ORklHX01FRElBVEVLXzJQNUdFX1BIWSkJJiM0Mzs9IG10ay0ycDVnZS5vCiBvYmotJChDT05GSUdfTUVESUFURUtfRkVfU09DX1BIWSkJJiM0Mzs9IG10ay1mZS1zb2Mubwogb2JqLSQoQ09ORklHX01FRElBVEVLX0dFX1BIWSkJCSYjNDM7PSBtdGstZ2UubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYzVkYmIzMmE1ZDFhYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmMKQEAgLTAsMCAmIzQzOzEsNjMyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3BoeWxpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O210ay5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFuIG9sZGVyIHZlcnNpb24gb2YgdGhpcyBQSFkgaGFyZHdhcmUgdXNlcyB0aGUgSUQgMDNhMi45NDEyLgomIzQzOyAqIFRoaXMgZHJpdmVyIGRvZXMgbm90IG1hdGNoIG9uIGl0IGJlY2F1c2UgaXQgY29sbGlkZXMgd2l0aAomIzQzOyAqIE1US19HUEhZX0lEX01UNzUzMCwgc28gdXNlcnMgd2FudGluZyB0byB1c2UgdGhpcyBkcml2ZXIgc2hvdWxkCiYjNDM7ICogb3ZlcnJpZGUgdGhlIFBIWSBJRCBpbiB0aGUgZGV2aWNlIHRyZWUgdG8gMDNhMi45NDE0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMJCTB4MDNhMjk0MTQKJiM0MzsKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19HMQkJCTB4MTAwMAomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0cyCQkJMHgyMDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzMJCQkweDMwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19HNAkJCTB4NDAwMAomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0c1CQkJMHg1MDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzYJCQkweDYwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19HNwkJCTB4NzAwMAomIzQzOwomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wwCQkJMHg4MDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfTDEJCQkweDkwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19MMgkJCTB4YTAwMAomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wzCQkJMHhiMDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfTDQJCQkweGMwMDAKJiM0MzsKJiM0MzsvKiA0IHBvcnRzICg4LDksMTAsMTEpIG9yIDMgcG9ydHMgKDksMTAsMTEpICovCiYjNDM7I2RlZmluZSBFQ09ORVRfTEVHQUNZX1BPUlQwX0FERFIJOAomIzQzOyNkZWZpbmUgRUNPTkVUX0VONzUyNkNfUE9SVDBfQUREUgk5CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDYWxpYnJhdGlvbiBwb2xsaW5nIGRvZXMgbm90IGNvbXBsZXRlIHVudGlsIEVDT05FVF9DQUxfTUlOX0NZQ0xFUwomIzQzOyAqIGNvbnNlY3V0aXZlICYjMzQ7ZG9uZSYjMzQ7IHJlc3VsdHMgYXJlIHJlY2VpdmVkLiBTZWU6IHBvbGxfY2FsX2NvbXBsZXRlCiYjNDM7ICovCiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMX01JTl9DWUNMRVMJCTEwCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBNaWNyb3NlY29uZHMgcGVyIGNhbGlicmF0aW9uIHBvbGwgY3ljbGUsIGNhbGlicmF0aW9uIHRha2VzIGFwcHJveGltYXRlbHkKJiM0MzsgKiBFQ09ORVRfQ0FMX0NZQ0xFX1VTICogRUNPTkVUX0NBTF9NSU5fQ1lDTEVTLiBUb3RhbCBzZXR1cCB0aW1lIGlzIHVzdWFsbHkKJiM0MzsgKiBsZXNzIHRoYW4gMTUweCB0aGlzIG51bWJlci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfQ1lDTEVfVVMJCTEwCiYjNDM7CiYjNDM7LyogVG90YWwgdGltZSBhbGxvd2VkIGZvciBjYWxpYnJhdGlvbiBwb2xsaW5nIGJlZm9yZSBlcnJvciBpcyByZXR1cm5lZC4gKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfVElNRU9VVF9VUwkJMTAwMDAwCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBOb3RlOiBUaGVzZSByZWdpc3RlciBkZWZpbml0aW9ucyB3ZXJlIHdyaXR0ZW4gd2l0aG91dCB0aGUgYmVuZWZpdCBvZiB0aGUKJiM0MzsgKiAgICAgICBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBzbyBuYW1lcyBhcmUgZ2l2ZW4gb25seSB3aGVyZSB0aGUgbWVhbmluZyBpcwomIzQzOyAqICAgICAgIGZhaXJseSBvYnZpb3VzLgomIzQzOyAqLwomIzQzOwomIzQzOy8qIEc3UjI0ICovCiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMX1RZUEVfTUFTSwkJR0VOTUFTSygxNCwgMTIpCiYjNDM7I2RlZmluZSAgIEVDT05FVF9DQUxfVFlQRV9SNTAJCUZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4NikKJiM0MzsjZGVmaW5lICAgRUNPTkVUX0NBTF9UWVBFX1RYT1MJCUZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4MykKJiM0MzsjZGVmaW5lICAgRUNPTkVUX0NBTF9UWVBFX1RYQU1QCQlGSUVMRF9QUkVQKEVDT05FVF9DQUxfVFlQRV9NQVNLLCAweDcpCiYjNDM7I2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfTUFTSwkJR0VOTUFTSygxMSwgNikKJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxJTl9FTjc1MjZDCQlCSVQoNCkKJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfRE9ORV9FTjc1MjZDCQlCSVQoMSkKJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfT1VUX0VONzUyNkMJCUJJVCgwKQomIzQzOwomIzQzOy8qIEw0UjIzICovCiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMSU5fTEVHQUNZCQlCSVQoMikKJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfRE9ORV9MRUdBQ1kJCUJJVCg2KQomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9PVVRfTEVHQUNZCQlCSVQoNCkKJiM0MzsKJiM0MzsjZGVmaW5lIEVDT05FVF9EQUNfSU5fMlYJCTB4MGYwCiYjNDM7CiYjNDM7LyogTDRSMTcgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX1NJR04JCUJJVCgxMykKJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX01BRwkJCUdFTk1BU0soMTIsIDgpCiYjNDM7CiYjNDM7I2RlZmluZSBFQ09ORVRfVFhPU19ERUZBVUxUCQkwCiYjNDM7I2RlZmluZSBFQ09ORVRfVFhPU19NQVgJCQkzMQomIzQzOyNkZWZpbmUgRUNPTkVUX1RYT1NfTUlOCQkJLTMxCiYjNDM7CiYjNDM7I2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfREVGQVVMVAkJMHgyMAomIzQzOyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX01BWAkJMHgzZgomIzQzOwomIzQzOy8qIEw0UjIyICovCiYjNDM7I2RlZmluZSBFQ09ORVRfUjUwX1RYQ0FMX01BU0sJCUdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBFQ09ORVRfUjUwX1JYQ0FMX01BU0sJCUdFTk1BU0soNywgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEVDT05FVF9UWEFNUF9ERUZBVUxUCQkweDEyCiYjNDM7I2RlZmluZSBFQ09ORVRfVFhBTVBfTUFYCQkweDNmCiYjNDM7CiYjNDM7LyogWkNBTCBjb21wZW5zYXRpb24gdGFibGUgcGVyIGNoaXAsIHBlciBwaHksIFJYICYjNDM7IFRYICovCiYjNDM7c3RydWN0IGNvbXBlbnNhdGlvbiB7CiYjNDM7CXM4IHpjYWxfdHg7CiYjNDM7CXM4IHpjYWxfcng7CiYjNDM7CXM4IHR4b3M7CiYjNDM7CXM4IGFtcDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGVuc2F0aW9uIGVuNzUxMjIxX2NvbXBbMl1bNF0gPSB7CiYjNDM7CXsKJiM0MzsJCS8qIExlZ2FjeSAqLwomIzQzOwkJeyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IC00LCAudHhvcyA9IDAsIC5hbXAgPSAxIH0sIC8qICA4ICovCiYjNDM7CQl7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gLTQsIC50eG9zID0gMSwgLmFtcCA9IDIgfSwgLyogIDkgKi8KJiM0MzsJCXsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSAtNCwgLnR4b3MgPSAxLCAuYW1wID0gMSB9LCAvKiAxMCAqLwomIzQzOwkJeyAuemNhbF90eCA9IC0yLCAuemNhbF9yeCA9IC04LCAudHhvcyA9IDEsIC5hbXAgPSAxIH0sIC8qIDExICovCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS8qIEVONzUyNkMgKi8KJiM0MzsJCXsgLnpjYWxfdHggPSAzLCAgLnpjYWxfcnggPSA2LCAudHhvcyA9IDEsIC5hbXAgPSAwIH0sIC8qICA5ICovCiYjNDM7CQl7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gNSwgLnR4b3MgPSAxLCAuYW1wID0gLTEgfSwgLyogMTAgKi8KJiM0MzsJCXsgLnpjYWxfdHggPSA2LCAgLnpjYWxfcnggPSA2LCAudHhvcyA9IDEsIC5hbXAgPSAtMSB9LCAvKiAxMSAqLwomIzQzOwkJeyB9LCAvKiBVbnVzZWQgKi8KJiM0MzsJfQomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHU4IHpjYWxfdG9fcjUwb2htWzY0XSA9IHsKJiM0MzsJMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI2LCAxMjMsIDEyMCwgMTE3LCAxMTQsIDExMiwgMTEwLCAxMDcsIDEwNSwgMTAzLAomIzQzOwkxMDEsICA5OSwgIDk3LCAgNzksICA3NywgIDc1LCAgNzQsICA3MiwgIDcwLCAgNjksICA2NywgIDY2LCAgNjUsICA0NywgIDQ2LCAgNDUsCiYjNDM7CSA0MywgIDQyLCAgNDEsICA0MCwgIDM5LCAgMzgsICAzNywgIDM2LCAgMzQsICAzNCwgIDMzLCAgMzIsICAxNSwgIDE0LCAgMTMsICAxMiwKJiM0MzsJIDExLCAgMTAsICAxMCwgICA5LCAgIDgsICAgNywgICA3LCAgIDYsICAgNSwgICA0LCAgIDQsICAgMywgICAyLCAgIDIsICAgMSwgICAxCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgewomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2X3AwOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBjb21wZW5zYXRpb24gZ2V0X2N0YWIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJdTggcGh5X29mZnNldDsKJiM0MzsKJiM0MzsJcGh5X29mZnNldCA9IHBoeWRldi0mZ3Q7bWRpby5hZGRyIC0gc2hhcmVkLSZndDtwaHlkZXZfcDAtJmd0O21kaW8uYWRkcjsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShwaHlfb2Zmc2V0ICZndDs9IEFSUkFZX1NJWkUoZW43NTEyMjFfY29tcFswXSkpKQomIzQzOwkJcmV0dXJuIChzdHJ1Y3QgY29tcGVuc2F0aW9uKSB7fTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVuNzUxMjIxX2NvbXBbcGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkNdW3BoeV9vZmZzZXRdOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzZXRfY2FsaW5fZmxhZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXUxNiBzZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykgewomIzQzOwkJLyogRzdSMjQgaXMgc2hhcmVkIHNvIHBoeV9tb2RpZnlfcGFnZWQgaXMgcmVxdWlyZWQgKi8KJiM0MzsJCXNldCA9IGVuYWJsZWQgPyBFQ09ORVRfQ0FMSU5fRU43NTI2QyA6IDA7CiYjNDM7CQlwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwKJiM0MzsJCQkJIEVDT05FVF9DQUxJTl9FTjc1MjZDLCBzZXQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc2V0ID0gZW5hYmxlZCA/IEVDT05FVF9DQUxJTl9MRUdBQ1kgOiAwOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDQsIDIzLCBzZXQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBjYWxfY29tcGxldGVfY3R4IHsKJiM0MzsJdTE2IGNvbnNlY3V0aXZlX3RydWVzCTogMTU7CiYjNDM7CWJvb2wgc3RhcnRlZAkJOiAxOwomIzQzOwlib29sIG9ic2VydmVkX2ZhbHNlCTogMTsKJiM0MzsJdTE2IGFib3J0ZWRfdHJpZXMJOiA3OwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcG9sbF9jYWxfY29tcGxldGUgLSBwb2xsIGZvciBjYWxpYnJhdGlvbiBjb21wbGV0aW9uLgomIzQzOyAqCiYjNDM7ICogQmVjYXVzZSBzb21lIGxlZ2FjeSBjaGlwcyBhcmUga25vd24gdG8gYmUgdW5yZWxpYWJsZSAoZmFsc2UgcG9zaXRpdmVzKSwKJiM0MzsgKiByZWZlcmVuY2UgY29kZSBhZGRzIDEwLDAwMHVzIG9mIGZpeGVkIGRlbGF5IHBlciBjYWxpYnJhdGlvbiBjeWNsZS4KJiM0MzsgKiBQcmFjdGljYWxseSwgdGhlcmUgYXJlIGFib3V0IDEwLTUwIGNhbGlicmF0aW9uIGN5Y2xlcyBmb3IgZWFjaCBvZiB0aGUKJiM0MzsgKiB0aHJlZSB0dW5hYmxlcywgc28gYWRkaW5nIGEgc2lnbmlmaWNhbnQgZml4ZWQgZGVsYXkgaXMgY29zdGx5LgomIzQzOyAqCiYjNDM7ICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIHN0YXJ0cyB3aXRoIENBTElOIGRpc2FibGVkLCBwb2xscyBmb3IKJiM0MzsgKiBkb25lIHN0YXR1cyBmYWxzZSwgdGhlbiBlbmFibGVzIENBTElOIGFuZCBwb2xscyB1bnRpbCBhIHRydWUgZG9uZQomIzQzOyAqIHN0YXR1cyBpcyByZWNvcmRlZCBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgdGltZXMgY29uc2VjdXRpdmVseS4KJiM0MzsgKgomIzQzOyAqIEByZXR1cm5zOgomIzQzOyAqICAgJmx0OyAwIG9uIGVycm9yCiYjNDM7ICogICAwIG5vdCB5ZXQgY29tcGxldGUKJiM0MzsgKiAgIDEgY29tcGxldGUgZmFsc2UKJiM0MzsgKiAgIDIgY29tcGxldGUgdHJ1ZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcG9sbF9jYWxfY29tcGxldGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBjYWxfY29tcGxldGVfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCBkb25lX21hc2s7CiYjNDM7CWludCBvdXRfbWFzazsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7cGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7CiYjNDM7CQlyZXQgPSBwaHlfcmVhZF9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQpOwomIzQzOwkJZG9uZV9tYXNrID0gRUNPTkVUX0NBTF9ET05FX0VONzUyNkM7CiYjNDM7CQlvdXRfbWFzayA9IEVDT05FVF9DQUxfT1VUX0VONzUyNkM7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBwaHlfcmVhZF9wYWdlZChzaGFyZWQtJmd0O3BoeWRldl9wMCwgRUNPTkVUX1BHX0w0LCAyMyk7CiYjNDM7CQlkb25lX21hc2sgPSBFQ09ORVRfQ0FMX0RPTkVfTEVHQUNZOwomIzQzOwkJb3V0X21hc2sgPSBFQ09ORVRfQ0FMX09VVF9MRUdBQ1k7CiYjNDM7CX0KJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoKHJldCAmYW1wOyBkb25lX21hc2spID09IDApIHsKJiM0MzsJCWN0eC0mZ3Q7b2JzZXJ2ZWRfZmFsc2UgPSB0cnVlOwomIzQzOwkJY3R4LSZndDthYm9ydGVkX3RyaWVzICYjNDM7PSAoY3R4LSZndDtjb25zZWN1dGl2ZV90cnVlcyAmZ3Q7IDApOwomIzQzOwkJY3R4LSZndDtjb25zZWN1dGl2ZV90cnVlcyA9IDA7CiYjNDM7CiYjNDM7CQlpZiAoIWN0eC0mZ3Q7c3RhcnRlZCkgewomIzQzOwkJCXNldF9jYWxpbl9mbGFnKHBoeWRldiwgdHJ1ZSk7CiYjNDM7CQkJY3R4LSZndDtzdGFydGVkID0gdHJ1ZTsKJiM0MzsJCQlyZXR1cm4gcG9sbF9jYWxfY29tcGxldGUocGh5ZGV2LCBjdHgpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3R4LSZndDtjb25zZWN1dGl2ZV90cnVlcyYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmIChjdHgtJmd0O2NvbnNlY3V0aXZlX3RydWVzICZsdDsgRUNPTkVUX0NBTF9NSU5fQ1lDTEVTIHx8ICFjdHgtJmd0O29ic2VydmVkX2ZhbHNlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChjdHgtJmd0O2Fib3J0ZWRfdHJpZXMpCiYjNDM7CQlwaHlkZXZfd2FybihwaHlkZXYsICYjMzQ7Q2FsaWJyYXRpb24gY3ljbGUgJWQgZmFsc2UgcG9zaXRpdmVzXG4mIzM0OywKJiM0MzsJCQkgICAgY3R4LSZndDthYm9ydGVkX3RyaWVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuICgocmV0ICZhbXA7IG91dF9tYXNrKSAhPSAwKSA/IDIgOiAxOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwb2xsX2NhbF9jb21wbGV0ZSAtIGNoZWNrIGZvciBjYWxpYnJhdGlvbiByZWdpc3RlcgomIzQzOyAqIEByZXR1cm5zOiAtZXJyb3Igb3IgMSBpZiBjYWxpYnJhdGlvbiByZXN1bHQgaXMgdHJ1ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X2NhbF9jeWNsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGNhbF9jb21wbGV0ZV9jdHggY2N0eCA9IHt9OwomIzQzOwlpbnQgb3V0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlzZXRfY2FsaW5fZmxhZyhwaHlkZXYsIGZhbHNlKTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQocG9sbF9jYWxfY29tcGxldGUsIG91dCwgb3V0ICE9IDAsCiYjNDM7CQkJCUVDT05FVF9DQUxfQ1lDTEVfVVMsIEVDT05FVF9DQUxfVElNRU9VVF9VUywKJiM0MzsJCQkJZmFsc2UsIHBoeWRldiwgJmFtcDtjY3R4KTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0NhbGlicmF0aW9uIHRpbWVvdXQgJWQgKCVkIC8gJWQgLyAlZCAvICVkKVxuJiMzNDssCiYjNDM7CQkJICAgcmV0LCBjY3R4LmNvbnNlY3V0aXZlX3RydWVzLCBjY3R4Lm9ic2VydmVkX2ZhbHNlLAomIzQzOwkJCSAgIGNjdHguYWJvcnRlZF90cmllcywgY2N0eC5zdGFydGVkKTsKJiM0MzsJfSBlbHNlIGlmIChvdXQgJmx0OyAwKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtDYWxpYnJhdGlvbiBlcnJvciAlZFxuJiMzNDssIG91dCk7CiYjNDM7CQlyZXQgPSBvdXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBvdXQgJmd0OyAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNldF9jYWxpbl9mbGFnKHBoeWRldiwgZmFsc2UpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3I1MChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlzdHJ1Y3QgY29tcGVuc2F0aW9uIGN0YWIgPSBnZXRfY3RhYihwaHlkZXYpOwomIzQzOwlpbnQgemNhbF9zeiA9IEFSUkFZX1NJWkUoemNhbF90b19yNTBvaG0pOwomIzQzOwl1OCByZ196Y2FsX2N0cmwgPSBFQ09ORVRfUjUwX1pDQUxfREVGQVVMVDsKJiM0MzsJaW50IGluaXRpYWxfY29tcF9vdXQ7CiYjNDM7CWludCBwb2xhcml0eSA9IDA7CiYjNDM7CWludCBjb21wX291dDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CXUxNiByeGNhbDsKJiM0MzsJdTE2IHR4Y2FsOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpCiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfUjUwKTsKJiM0MzsJZWxzZQomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweGMwMDApOwomIzQzOwomIzQzOwlwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgxMDAwLCAweDEwMDApOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpCiYjNDM7CQkJcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsCiYjNDM7CQkJCQkgRUNPTkVUX1I1MF9aQ0FMX01BU0ssCiYjNDM7CQkJCQkgRklFTERfUFJFUChFQ09ORVRfUjUwX1pDQUxfTUFTSywKJiM0MzsJCQkJCQkgICAgcmdfemNhbF9jdHJsKSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI2LAomIzQzOwkJCQkJcmdfemNhbF9jdHJsKTsKJiM0MzsKJiM0MzsJCWNvbXBfb3V0ID0gZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHBoeWRldik7CiYjNDM7CQlpZiAoY29tcF9vdXQgJmx0OyAwKSB7CiYjNDM7CQkJcmV0ID0gY29tcF9vdXQ7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocG9sYXJpdHkgPT0gMCkgewomIzQzOwkJCS8qIEZpcnN0IGN5Y2xlICovCiYjNDM7CQkJaW5pdGlhbF9jb21wX291dCA9IGNvbXBfb3V0OwomIzQzOwkJCXBvbGFyaXR5ID0gY29tcF9vdXQgPyAtMSA6IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHsKJiM0MzsJCQkvKiBGb3VuZCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmdfemNhbF9jdHJsICYjNDM7PSBwb2xhcml0eTsKJiM0MzsKJiM0MzsJCWlmIChyZ196Y2FsX2N0cmwgJmd0OyBFQ09ORVRfUjUwX1pDQUxfTUFYKSB7CiYjNDM7CQkJcmV0ID0gMTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyeGNhbCA9IG1heCgwLCBtaW4oemNhbF9zeiAtIDEsIGN0YWIuemNhbF9yeCAmIzQzOyByZ196Y2FsX2N0cmwpKTsKJiM0MzsJdHhjYWwgPSBtYXgoMCwgbWluKHpjYWxfc3ogLSAxLCBjdGFiLnpjYWxfdHggJiM0MzsgcmdfemNhbF9jdHJsKSk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMjIsCiYjNDM7CQkJRklFTERfUFJFUChFQ09ORVRfUjUwX1RYQ0FMX01BU0ssIHR4Y2FsKSB8CiYjNDM7CQkJRklFTERfUFJFUChFQ09ORVRfUjUwX1JYQ0FMX01BU0ssIHJ4Y2FsKSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwkvKiBaZXJvIG91dCByZWdpc3RlcnMgKi8KJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7cGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKQomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgMHgwMDAwKTsKJiM0MzsJZWxzZQomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweGMwMDApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3R4X29mZnNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlzdHJ1Y3QgY29tcGVuc2F0aW9uIGN0YWIgPSBnZXRfY3RhYihwaHlkZXYpOwomIzQzOwlpbnQgaW5pdGlhbF9jb21wX291dDsKJiM0MzsJaW50IHBvbGFyaXR5ID0gMDsKJiM0MzsJaW50IG9mZnNldCA9IEVDT05FVF9UWE9TX0RFRkFVTFQ7CiYjNDM7CXUxNiBvZmZzZXRfYmluOwomIzQzOwlpbnQgY29tcF9vdXQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDAsIDB4MjEwMCk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTIwMCk7IC8qIGZpeCBNREkgKi8KJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7cGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfVFhPUyk7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDA0MDApOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweDQ4MDApOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHg0YzAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyMSwgMHgwODAwLCAweDA4MDApOwomIzQzOwomIzQzOwlwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgwMmMwLCAweDAyYzApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDApOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlvZmZzZXRfYmluID0gRklFTERfUFJFUChFQ09ORVRfVFhPU19NQUcsIGFicyhvZmZzZXQpKTsKJiM0MzsJCWlmIChvZmZzZXQgJmx0OyAwKQomIzQzOwkJCW9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjsKJiM0MzsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMTcsIG9mZnNldF9iaW4pOwomIzQzOwomIzQzOwkJY29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTsKJiM0MzsJCWlmIChjb21wX291dCAmbHQ7IDApIHsKJiM0MzsJCQlyZXQgPSBjb21wX291dDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChwb2xhcml0eSA9PSAwKSB7CiYjNDM7CQkJLyogRmlyc3QgY3ljbGUgKi8KJiM0MzsJCQlpbml0aWFsX2NvbXBfb3V0ID0gY29tcF9vdXQ7CiYjNDM7CQkJcG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTsKJiM0MzsJCX0gZWxzZSBpZiAoaW5pdGlhbF9jb21wX291dCAhPSBjb21wX291dCkgewomIzQzOwkJCS8qIEZvdW5kICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlvZmZzZXQgJiM0Mzs9IHBvbGFyaXR5OwomIzQzOwomIzQzOwkJaWYgKG9mZnNldCAmZ3Q7IEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgJmx0OyBFQ09ORVRfVFhPU19NSU4pIHsKJiM0MzsJCQlyZXQgPSAxOwomIzQzOwkJCW9mZnNldCA9IDA7CiYjNDM7CQkJZ290byBzZXRfdmFsOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW9mZnNldCAmIzQzOz0gY3RhYi50eG9zICogcG9sYXJpdHk7CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmd0OyBFQ09ORVRfVFhPU19NQVggfHwgb2Zmc2V0ICZsdDsgRUNPTkVUX1RYT1NfTUlOKQomIzQzOwkJb2Zmc2V0IC09IGN0YWIudHhvcyAqIHBvbGFyaXR5OwomIzQzOwomIzQzO3NldF92YWw6CiYjNDM7CW9mZnNldF9iaW4gPSBGSUVMRF9QUkVQKEVDT05FVF9UWE9TX01BRywgYWJzKG9mZnNldCkpOwomIzQzOwlpZiAob2Zmc2V0ICZsdDsgMCkKJiM0MzsJCW9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAxNywgb2Zmc2V0X2Jpbik7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpCiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApOwomIzQzOwllbHNlCiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfdHhfYW1wKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7CiYjNDM7CWludCBpbml0aWFsX2NvbXBfb3V0OwomIzQzOwl1OCB0eF9hbXAgPSBFQ09ORVRfVFhBTVBfREVGQVVMVDsKJiM0MzsJaW50IHBvbGFyaXR5ID0gMDsKJiM0MzsJaW50IGNvbXBfb3V0OwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCAweDUyMDMpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzIsIDI1LCAweDEwYzApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDAgfCBFQ09ORVRfREFDX0lOXzJWKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyMSwgMHgwODAwKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgwMmMwKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7cGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfVFhBTVApOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwNjAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChzaGFyZWQtJmd0O3BoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwKTsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4Y2EwMCB8IDB4MDQwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTsKJiM0MzsKJiM0MzsJCWNvbXBfb3V0ID0gZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHBoeWRldik7CiYjNDM7CQlpZiAoY29tcF9vdXQgJmx0OyAwKSB7CiYjNDM7CQkJcmV0ID0gY29tcF9vdXQ7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocG9sYXJpdHkgPT0gMCkgewomIzQzOwkJCS8qIEZpcnN0IGN5Y2xlICovCiYjNDM7CQkJaW5pdGlhbF9jb21wX291dCA9IGNvbXBfb3V0OwomIzQzOwkJCXBvbGFyaXR5ID0gY29tcF9vdXQgPyAtMSA6IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHsKJiM0MzsJCQkvKiBGb3VuZCAqLwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdHhfYW1wICYjNDM7PSBwb2xhcml0eTsKJiM0MzsKJiM0MzsJCWlmICh0eF9hbXAgJmd0OyBFQ09ORVRfVFhBTVBfTUFYKSB7CiYjNDM7CQkJcmV0ID0gMTsKJiM0MzsJCQl0eF9hbXAgPSBFQ09ORVRfVFhBTVBfREVGQVVMVDsKJiM0MzsJCQlnb3RvIHNldF92YWw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHR4X2FtcCAmIzQzOyBjdGFiLmFtcCAmbHQ7IEVDT05FVF9UWEFNUF9NQVgpCiYjNDM7CQl0eF9hbXAgJiM0Mzs9IGN0YWIuYW1wOwomIzQzOwomIzQzO3NldF92YWw6CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjMsIHR4X2FtcCk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIDB4MDAwMCk7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAwMDApOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJdTE2IGwwcjI2X3RlbXA7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIXNoYXJlZC0mZ3Q7cGh5ZGV2X3AwKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtQb3J0IHplcm8gbXVzdCBiZSBjb25maWd1cmVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5hZGRyICZsdDsgc2hhcmVkLSZndDtwaHlkZXZfcDAtJmd0O21kaW8uYWRkcikKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyogR2xvYmFsIHJlZ2lzdGVycyAqLwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzQsIDI2LCAweDgwNDQpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDIxLCAweDAwZWEpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDI3LCAweDAyZjApOwomIzQzOwomIzQzOwkvKiBMb2NhbCByZWdpc3RlcnMgKi8KJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHhhMDAwKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wxLCAyMiwgMHhmMDAwKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMiwgMHg0NDQ0KTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyNCwgMHgwYzBjKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyOCwgMHg3YzQ0KTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAzMCwgMHgwMDA1KTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAxNywgMHgwMDAwKTsKJiM0MzsKJiM0MzsJLyogRm9yIEUxL0UyLCBFMyByZXF1aXJlcyAweDIyMjAsIGJ1dCBubyBrbm93biBFTjc1MTIyMSBFMyBjaGlwcyBleGlzdCAqLwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDIyMDApOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHsKJiM0MzsJCSAvKiAxMDBNYiB0eCBwMnpfbWlkLCB6Mm5fbWlkLCB6Mm5fb3ZzX3Bvc3QsIG4yel9taWQgKi8KJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjIsIDB4MDAzMCk7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDI1LCAweDAyNDgpOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNywgMHgwMmYwKTsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjgsIDB4MDIzMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlsMHIyNl90ZW1wID0gcmV0OwomIzQzOwomIzQzOwkvKiBCRyB2b2x0YWdlICovCiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7CiYjNDM7CiYjNDM7CS8qIE1ESSAqLwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCAweDU2MDMpOwomIzQzOwomIzQzOwkvKiBkaXNhYmxlIHR4IHNsZXcgY29udHJvbCAqLwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDQsIDIxLCAweDAwMDApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDAsIDB4MjEwMCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyA1OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gZW43NTEyMjFfZmVwaHlfcjUwKHBoeWRldik7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBlbjc1MTIyMV9mZXBoeV90eF9vZmZzZXQocGh5ZGV2KTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgNTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJldCA9IGVuNzUxMjIxX2ZlcGh5X3R4X2FtcChwaHlkZXYpOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIGwwcjI2X3RlbXApOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDAwMDApOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIyLCAweDQ0NDQpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDAsIDB4MzEwMCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcG9ydDAgPSBFQ09ORVRfRU43NTI2Q19QT1JUMF9BRERSOwomIzQzOwlzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZDsKJiM0MzsJc3RydWN0IG10a19zb2NwaHlfcHJpdiAqcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7cGh5X2lkICE9IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKQomIzQzOwkJcG9ydDAgPSBFQ09ORVRfTEVHQUNZX1BPUlQwX0FERFI7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fcGh5X3BhY2thZ2Vfam9pbigmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYsIHBoeWRldiwgcG9ydDAsCiYjNDM7CQkJCSAgICBzaXplb2Yoc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDttZGlvLmFkZHIgPT0gcG9ydDApCiYjNDM7CQlzaGFyZWQtJmd0O3BoeWRldl9wMCA9IHBoeWRldjsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBlbjc1MTIyMV9mZXBoeV9kcml2ZXJbXSA9IHsKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSwKJiM0MzsJCS5uYW1lCQk9ICYjMzQ7RWNvTmV0IEVONzUxMjIxIEZFUEhZJiMzNDssCiYjNDM7CQkuY29uZmlnX2luaXQJPSBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdCwKJiM0MzsJCS5jb25maWdfaW50cgk9IGdlbnBoeV9ub19jb25maWdfaW50ciwKJiM0MzsJCS5oYW5kbGVfaW50ZXJydXB0ID0gZ2VucGh5X2hhbmRsZV9pbnRlcnJ1cHRfbm9fYWNrLAomIzQzOwkJLnByb2JlCQk9IGVuNzUxMjIxX2ZlcGh5X3Byb2JlLAomIzQzOwkJLnJlYWRfcGFnZQk9IG10a19waHlfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJPSBtdGtfcGh5X3dyaXRlX3BhZ2UsCiYjNDM7CX0KJiM0Mzt9OwomIzQzOwomIzQzO21vZHVsZV9waHlfZHJpdmVyKGVuNzUxMjIxX2ZlcGh5X2RyaXZlcik7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBlbjc1MTIyMV9mZXBoeV90YmxbXSA9IHsKJiM0MzsJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7RWNvTmV0IFNvQyAxMC8xMDAgRXRoZXJuZXQgUEhZIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Q2FsZWIgSmFtZXMgRGVMaXNsZSAmbHQ7Y2pkQGNqZG5zLmZyJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKJiM0MzsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGVuNzUxMjIxX2ZlcGh5X3RibCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBNZWRpYXRlayBFY29OZXQgUEhZIERyaXZlciBpbiBzeXprYWxsZXIqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCB0aGlzIG5ldyBQSFkgZHJpdmVyLCBgZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY2AsIGVuYWJsZWQgYnkgYEVDT05FVF9GRV9TT0NfUEhZYC4gSXQmIzM5O3MgZm9yIGFuIEVjb05ldCAxMC8xMDAgU29DIEV0aGVybmV0IFBIWS4gVGhlIHF1ZXN0aW9uIGlzLCBob3cgZG8gd2UgdHJpZ2dlciBpdCB3aXRoaW4gc3l6a2FsbGVyIGZvciBmdXp6aW5nPwoKTm9ybWFsbHksIFBIWSBkcml2ZXJzIGNvbWUgdG8gbGlmZSB3aGVuIHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50LCBvciwgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LCB0aHJvdWdoIE1ESU8gYnVzIGVtdWxhdGlvbi4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBkZWRpY2F0ZWQgTURJTyBlbXVsYXRvciwgd2hpY2ggaXMgYSBwcm9ibGVtLiBJdCBjYW4gdHJpZ2dlciBQSFkgY29kZSwgYnV0IG9ubHkgaWYgdGhlIFBIWSBoYXMgYmVlbiBpbnN0YW50aWF0ZWQuIENhbiB3ZSBldmVuICppbnN0YW50aWF0ZSogdGhpcyBzcGVjaWZpYyBQSFkgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50PwoKVHlwaWNhbGx5LCBQSFkgZHJpdmVycyBnZXQgcHJvYmVkIGVpdGhlciB3aGVuIGEgbmV0d29yayBkcml2ZXIgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCBzY2Fucywgb3IgdGhyb3VnaCBhIGRldmljZSB0cmVlLiBCdXQsIGB2aGNpYCwgYG5ldGRldnNpbWAsIGFuZCBgZHVtbXlgIGluIHN5emthbGxlciBkb24mIzM5O3QgcmVnaXN0ZXIgYXJiaXRyYXJ5IFBIWXMgb24gYW4gTURJTyBidXMuIE5laXRoZXIgZG8gYG1hY3NlY2AsIGB2ZXRoYCwgb3IgYHR1bmAuCgpJcyB0aGVyZSBhIHVzZXItc3BhY2Ugd2F5IHRvICpmb3JjZSogYSBQSFkgcHJvYmU/IE1heWJlIGBTSU9DU01JSVJFR2A/IE5vcGUsIHRoYXQgbmVlZHMgYW4gZXhpc3RpbmcgUEhZLiBDYW4gd2UgcmVnaXN0ZXIgYSBQSFkgZGV2aWNlIHZpYSBzeXNmcyBvciBzb21lIG90aGVyIG1lY2hhbmlzbT8gTGlrZWx5IG5vdC4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IHJlYWxseSBoYXZlIGEgd2F5IHRvIG1ha2UgUEhZIGRyaXZlcnMgYXBwZWFyIHVubGVzcyBhIHZpcnR1YWwgTURJTyBidXMgZXhpc3RzLiBUaGVyZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYSBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgIGVxdWl2YWxlbnQgdG8gaGVscC4gYGRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuY2AgaXMgYWxzbyBub3QgdXNlZnVsIGhlcmUuCgpJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHNjb3VyIHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBhbnkgbWVudGlvbiBvZiBgcGh5X2RldmljZV9yZWdpc3RlcmAgb3Igc2ltaWxhciwgYnV0IEkgY2FuJiMzOTt0IHVzZSBzeXotZ3JlcHBlciwgd2hpY2ggbWFrZXMgdGhpcyBkaWZmaWN1bHQuCgpBbmQgdGhlbiwgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgZnV6emluZyBQSFkgZHJpdmVycyBsaWtlIHRoaXMgaXMgZXZlbiBjb25zaWRlcmVkIGEgcHJpb3JpdHkuIFVzdWFsbHksIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgbGlrZSB0aGlzLCB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGRvbiYjMzk7dCBwbGF5IG5pY2VseSBpbiBRRU1VLCBhcmUgYmFzaWNhbGx5IHVucmVhY2hhYmxlLiBUaGUgZGVwZW5kZW5jaWVzIGFyZSB0cmlja3kgdG9vLiBUaGlzIGBFQ09ORVRfRkVfU09DX1BIWWAgZGVwZW5kcyBvbiBgRUNPTkVUIHx8IENPTVBJTEVfVEVTVGAuIGBFQ09ORVRgIGlzbiYjMzk7dCBhIHN0YW5kYXJkIHZpcnR1YWwgZGV2aWNlIQoKU28sIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBsb29rIGZvciBzb21lIHZpcnR1YWwgTURJTyBidXMgZHJpdmVyIHdpdGhpbiB0aGUga2VybmVsIHRoYXQgSSBjb3VsZCBjb250cm9sIGZyb20gdXNlcnNwYWNlLiBUaGF0IGNvdWxkIGJlIGEgd2F5IGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby4qbW9ja3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU4MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIFVzZXJzcGFjZSBQSFkgRGV2aWNlIEluc3RhbnRpYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSBhY3R1YWxseSBpbnN0YW50aWF0ZSBhIFBoeXNpY2FsIExheWVyIChQSFkpIGRldmljZSBmcm9tIHVzZXJzcGFjZT8mIzM0OyBXZSBrbm93IHRoZSB0cmFkaXRpb25hbCBtb2RlbCB1c3VhbGx5IGludm9sdmVzIHRoZSBrZXJuZWwgaGFuZGxpbmcgdGhpcy4gQnV0LCBJJiMzOTttIGN1cmlvdXMuIEFyZSB0aGVyZSBhbnkgY2xldmVyLCB1bmNvbnZlbnRpb25hbCB3YXlzIHRvIGJ5cGFzcyB0aGF0PyBBcmUgdGhlcmUgZXhwb3NlZCBpbnRlcmZhY2VzLCBwZXJoYXBzIHRocm91Z2ggYSBzcGVjaWZpYyBkcml2ZXIgbW9kZWwgb3IgYSB2ZW5kb3Itc3BlY2lmaWMgQVBJLCB0aGF0IG1pZ2h0IGFsbG93IHVzIGRpcmVjdCBvciBpbmRpcmVjdCBjb250cm9sIG92ZXIgUEhZIGluc3RhbnRpYXRpb24gZnJvbSB1c2Vyc3BhY2U/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQga2luZCBvZiBjb250cm9sIHdvdWxkIHdlIGhhdmU/IFdvdWxkIGl0IGJlIGxpbWl0ZWQgdG8gc3BlY2lmaWMgUEhZcyBvciBwcm90b2NvbHM/IENvdWxkIHdlIGNvbXBsZXRlbHkgYWJzdHJhY3QgdGhlIFBIWSBmcm9tIHRoZSBrZXJuZWw/IFdoYXQgYWJvdXQgc2VjdXJpdHkgaW1wbGljYXRpb25zPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2UmIzM5O2QgbmVlZCB0byBjb25zaWRlcj8gSXMgdGhlcmUgYSBuZWVkIGZvciBhIHVzZXJzcGFjZSBQSFkgZGV2aWNlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9kZXZpY2VfY3JlYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYz0xMTc9aW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMzQtXHRlbHNlXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTM1Olx0XHRwaHkgPSBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCwgMCwgTlVMTCk7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM2LVx0aWYgKElTX0VSUihwaHkpKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU4NS1cdFx0LyogUmVhbCBQSFkgSUQgb2YgUG9ydCAxIGlzIDAgKi9cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjU4NjpcdFx0cGh5ID0gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBQSFlfSURfVEpBMTEwMiwgZmFsc2UsIE5VTEwpO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTg3LVx0XHRpZiAoSVNfRVJSKHBoeSkpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTItXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1OTM6XHRcdC8qIE92ZXJ3cml0ZSBwYXJlbnQgZGV2aWNlLiBwaHlfZGV2aWNlX2NyZWF0ZSgpIHNldCBwYXJlbnQgdG9cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU5NC1cdFx0ICogdGhlIG1paV9idXMtXHUwMDNlZGV2LCB3aGljaCBpcyBub3QgY29ycmVjdCBpbiBjYXNlLlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NzI4PXN0YXRpYyBpbnQgcGh5X3JlcXVlc3RfZHJpdmVyX21vZHVsZShzdHJ1Y3QgcGh5X2RldmljZSAqZGV2LCB1MzIgcGh5X2lkKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNzQ3LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo3NDg6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDktXHRcdFx0XHQgICAgIGJvb2wgaXNfYzQ1LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtODM5LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6ODQwOkVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9jcmVhdGUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy04NDEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMDcxPXN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDk2LVx0XHRpZiAoIXIpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEwOTc6XHRcdFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMDk4LVx0XHRcdFx0XHRcdCB0cnVlLCBcdTAwMjZjNDVfaWRzKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDE6XHRyZXR1cm4gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBwaHlfaWQsIGlzX2M0NSwgXHUwMDI2YzQ1X2lkcyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDItfVxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjE0OT1pbnQgcGh5X21vZGlmeV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSwgdTMyIHJlZ251bSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIxNTEtXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIxNTI6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTUzLVx0XHRcdFx0ICAgICBib29sIGlzX2M0NSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDcmVhdGluZyBhIFZpcnR1YWwgUEhZIERldmljZSBmcm9tIFVzZXJzcGFjZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGNvbmp1cmUgdXAgYSBQSFkgZGV2aWNlIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlLiBUeXBpY2FsbHksIHRoZSBNRElPIGJ1cyBkcml2ZXIgaGFuZGxlcyBQSFkgZGV2aWNlIGNyZWF0aW9uIGR1cmluZyBpdHMgYnVzIHNjYW5zLiBJIHdvbmRlciwgaXMgdGhlcmUgYSB2aXJ0dWFsIE1ESU8gYnVzIEkgY291bGQgbGV2ZXJhZ2UgZm9yIHRoaXMgcHVycG9zZT8gTGV0JiMzOTtzIGRpdmUgaW50byBzb21lIGNvZGUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKRmlyc3QgdXAsIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jYC4gTm9wZSwgdGhhdCBkb2VzbiYjMzk7dCBzZWVtIHRvIG9mZmVyIGEgd2F5LiBIb3cgYWJvdXQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1tb2NrdXAuY2Agb3IgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1kdW1teS5jYD8gU3RpbGwgbm8gbHVjay4gT2theSwgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYCBkcml2ZXIuIEl0IGRvZXMgY3JlYXRlIGEgZml4ZWQgUEhZLCBidXQgaXQgZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGUgZHluYW1pYyBkaXNjb3Zlcnkgb2YgYXJiaXRyYXJ5IFBIWSBJRHMsIHdoaWNoIGlzIHdoYXQgSSBuZWVkLiBXaGF0IGFib3V0IGBkcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmNgLCBgZHJpdmVycy9uZXQvcGh5L21kaW8tYml0YmFuZy5jYCwgb3IgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW11eC5jYD8gVGhvc2UgZG9uJiMzOTt0IGxvb2sgcHJvbWlzaW5nIGVpdGhlci4KClNvLCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIEkgc29tZWhvdyB0cmlnZ2VyIGBwaHlfZGV2aWNlX2NyZWF0ZWAgd2l0aCBhIGN1c3RvbSBgcGh5X2lkYCBmcm9tIHVzZXJzcGFjZT8gTXkgaW50dWl0aW9uIHBvaW50cyBtZSB0b3dhcmRzIHNvbWV0aGluZyBsaWtlIG5ldGxpbmsuIE1heWJlIEkgY2FuIGZpbmQgYSBob29rIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2Agb3IgcGVyaGFwcyB3aXRoaW4gdGhlIGBuZXQvZXRodG9vbC9gIGRpcmVjdG9yeSB0aGF0IHdvdWxkIGFsbG93IG1lIHRvIGdldCB0aGlzIGRvbmU/IFRpbWUgdG8gc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZGV2aWNlX2NyZWF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9MTE3PWludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM0LVx0ZWxzZVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjEzNTpcdFx0cGh5ID0gcGh5X2RldmljZV9jcmVhdGUoYnVzLCBhZGRyLCBwaHlfaWQsIDAsIE5VTEwpO1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEzNi1cdGlmIChJU19FUlIocGh5KSkge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTU1MT1zdGF0aWMgdm9pZCB0amExMTAyX3AxX3JlZ2lzdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01ODUtXHRcdC8qIFJlYWwgUEhZIElEIG9mIFBvcnQgMSBpcyAwICovXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1ODY6XHRcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgUEhZX0lEX1RKQTExMDIsIGZhbHNlLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTU4Ny1cdFx0aWYgKElTX0VSUihwaHkpKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTkyLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTkzOlx0XHQvKiBPdmVyd3JpdGUgcGFyZW50IGRldmljZS4gcGh5X2RldmljZV9jcmVhdGUoKSBzZXQgcGFyZW50IHRvXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTQtXHRcdCAqIHRoZSBtaWlfYnVzLVx1MDAzZWRldiwgd2hpY2ggaXMgbm90IGNvcnJlY3QgaW4gY2FzZS5cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTcyOD1zdGF0aWMgaW50IHBoeV9yZXF1ZXN0X2RyaXZlcl9tb2R1bGUoc3RydWN0IHBoeV9kZXZpY2UgKmRldiwgdTMyIHBoeV9pZClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTc0Ny1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NzQ4OnN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyIHBoeV9pZCxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNzQ5LVx0XHRcdFx0ICAgICBib29sIGlzX2M0NSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTgzOS19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjg0MDpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfY3JlYXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtODQxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTA3MT1zdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5Ni1cdFx0aWYgKCFyKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMDk3Olx0XHRcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5OC1cdFx0XHRcdFx0XHQgdHJ1ZSwgXHUwMDI2YzQ1X2lkcyk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTAwLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTAxOlx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCBpc19jNDUsIFx1MDAyNmM0NV9pZHMpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTAyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIxNDk9aW50IHBoeV9tb2RpZnlfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UsIHUzMiByZWdudW0sXG4tLVxuaW5jbHVkZS9saW51eC9waHkuaC0yMTUxLVxuaW5jbHVkZS9saW51eC9waHkuaDoyMTUyOnN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyIHBoeV9pZCxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjE1My1cdFx0XHRcdCAgICAgYm9vbCBpc19jNDUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gdHJpZ2dlciBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5YC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBjYWxsZWQgZHVyaW5nIGRldmljZSB0cmVlIG9yIEFDUEkgcGFyc2luZy4gVGhlIG9idmlvdXMgcXVlc3Rpb24gaXM6IGNhbiBJIGluamVjdCBhIGRldmljZSB0cmVlIG92ZXJsYXkgZnJvbSB1c2Vyc3BhY2U/IEhtbSwgcHJvYmFibHkgbm90IGRpcmVjdGx5LiBTeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGhhbmRsZSBhcmJpdHJhcnkgRFQgb3ZlcmxheXMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgcHNldWRvLXN5c2NhbGwgZm9yIHRoYXQsIGFuZCBJIGRvbiYjMzk7dCByZWNhbGwgb25lIGZvciB0aGlzIHB1cnBvc2UuCgpBbHJpZ2h0LCBwaXZvdC4gV2hhdCBhYm91dCBgZ2V0X3BoeV9kZXZpY2VgPyBUaGF0IGdldHMgY2FsbGVkIGJ5IGBtZGlvYnVzX3NjYW5gLiBBbmQgYG1kaW9idXNfc2NhbmAgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgX19tZGlvYnVzX3JlZ2lzdGVyYCB3aGVuIHRoZSBNRElPIGJ1cyBpcyBiZWluZyBzY2FubmVkLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogaXMgdGhlcmUgYW4gTURJTyBidXMgdGhhdCBjb3VsZCBiZSAqcmVnaXN0ZXJlZCogZnJvbSB1c2Vyc3BhY2U/IExldCYjMzk7cyBydWxlIG91dCB0aGUgb2J2aW91czogYGRyaXZlcnMvbmV0L2R1bW15LmNg4oCUbm9wZSwgbm8gTURJTyBidXMgdGhlcmUuIFNhbWUgd2l0aCBgZHJpdmVycy9uZXQvbWFjc2VjLmNgIGFuZCBgZHJpdmVycy9uZXQvdHVuLmNg4oCUdGhvc2UgYXJlIGRlYWQgZW5kcy4KCk5vdywgbGV0JiMzOTtzIGV4cGxvcmUgYGRyaXZlcnMvbmV0L3VzYi9gLiBBaGEsIHNvbWUgVVNCIG5ldHdvcmsgYWRhcHRlcnMgKmRvKiBoYXZlIE1ESU8gYnVzZXMhIFRoaXMgaXMgcHJvbWlzaW5nLiBUaGUgcXVlc3Rpb24gaXMgaWYgc3l6a2FsbGVyIGlzIHVzaW5nIGB2aGNpYCB0byBlbXVsYXRlIFVTQiBuZXR3b3JrIGFkYXB0ZXJzPyBJZiBzbywgdGhlbiBpdCAqY291bGQqIHRoZW9yZXRpY2FsbHkgZW11bGF0ZSB0aGUgTURJTyBidXMgYXMgd2VsbCEgU28sIEkgbmVlZCB0byBjaGVjayB3aGljaCBVU0IgbmV0d29yayBhZGFwdGVyIGRyaXZlcnMgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kLCBjcml0aWNhbGx5LCBhbGxvdyB0aGUgYnVzIHRvIGJlIHNjYW5uZWQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyBkcml2ZXJzIGxpa2UgYGRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jYCBhbmQgYGRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmNgIHRvIHNlZSBpZiB0aGV5IGZpdCB0aGUgYmlsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTEzOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0PTM0OD1NRElPXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0LTM1MC0gIGRldm1fbWRpb2J1c19hbGxvY19zaXplKClcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTE6ICBkZXZtX21kaW9idXNfcmVnaXN0ZXIoKVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0OjM1MjogIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcigpXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3QtMzUzLVxuLS1cbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0PTEyPWRldmljZSAodGhlIHNhbWUgb2JqZWN0cyB0aGF0IGFyZSByZWdpc3RlcmVkIHZpYVxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2RzZC9tb3RvcmNvbW0teXQ4eHh4LXBoeS5yc3Q6MTM6YGBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoKWBgKS4gTUFDLXNpZGUgY29ubmVjdGlvbiBwcm9wZXJ0aWVzIHN1Y2ggYXNcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0LTE0LWBgcGh5LWhhbmRsZWBgIGFuZCBgYHBoeS1tb2RlYGAgYXJlIGRvY3VtZW50ZWQgaW4gW2FjcGktbWRpby1waHldXy5cbi0tXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3Q9Nz1UaGUgUEhZcyBvbiBhbiBNRElPIGJ1cyBbcGh5XSBhcmUgcHJvYmVkIGFuZCByZWdpc3RlcmVkIHVzaW5nXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3Q6ODpmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoKS5cbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvcGh5LnJzdC05LVxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0PTQwPXJlZ2lzdGVyZWQgYXMgYSBkaXN0aW5jdCBkZXZpY2UuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNTYtICAgZHJpdmVyIG5lZWRzLCBzZXR1cCB0aGUgbWlpX2J1cyBzdHJ1Y3R1cmUsIGFuZCByZWdpc3RlciB3aXRoIHRoZSBQQUwgdXNpbmdcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0OjU3OiAgIG1kaW9idXNfcmVnaXN0ZXIuICBTaW1pbGFybHksIHRoZXJlJiMzOTtzIGEgcmVtb3ZlIGZ1bmN0aW9uIHRvIHVuZG8gYWxsIG9mXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC01OC0gICB0aGF0ICh1c2UgbWRpb2J1c191bnJlZ2lzdGVyKS5cbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jPTEwOT1zdGF0aWMgaW50IGVwODI0OGVfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jLTEzMi1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmM6MTMzOlx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMtMTM0LVx0aWYgKHJldClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYz0yMDc9c3RhdGljIGludCBncGlvX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQzLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmM6MjQ0Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYy0yNDUtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYz02MDc9c3RhdGljIGludCBiY21fc2YyX21kaW9fcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjgzLVxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYzo2ODQ6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNldXNlcl9taWlfYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjg1LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYz0xODc9c3RhdGljIGludCBnc3dpcF9tZGlvKHN0cnVjdCBnc3dpcF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTIxMy1cbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jOjIxNDpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy0yMTUtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MzIxPXN0YXRpYyBpbnQga3N6OTQ3N19wY3NfY3JlYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQxLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MzQyOlx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cdTAwM2VkZXYsIGJ1cyk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTIzMjE9aW50IGtzel9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjM5Mi1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjIzOTM6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZHMtXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjM5NC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jPTY4NT1zdGF0aWMgaW50IGxhbjkzN3hfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU1LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYzo3NTY6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZHMtXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy03NTctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yNDA5PW10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjQ0NC1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyNDQ1Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0NDYtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jPTI0Mj1zdGF0aWMgaW50IG10NzYyOF9zZXR1cF9pbnRlcm5hbF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYxLVxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jOjI2MjpcdHJldHVybiBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMpO1xuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jLTI2My19XG4tLVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM9MzgzND1zdGF0aWMgaW50IG12ODhlNnh4eF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zODg3LVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6Mzg4ODpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zODg5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTI2Nz1zdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwX21kaW8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5Mi1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjI5MzpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yOTQtXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz0xNDk9c3RhdGljIGludCBuZXRjX3BvcnRfY3JlYXRlX2VtZGlvX2J1cyhzdHJ1Y3QgbmV0Y19wb3J0ICpucCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy0xNzktXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzoxODA6XHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTgxLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz05NTc9c3RhdGljIGludCB2c2M5OTU5X21kaW9fYnVzX2FsbG9jKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdClcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xMDEzLVx0LyogTmVlZGVkIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIGJ1cyBtdXRleCBsb2NrICovXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoxMDE0Olx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xMDE1LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYz04Nzg9c3RhdGljIGludCB2c2M5OTUzX21kaW9fYnVzX2FsbG9jKHN0cnVjdCBvY2Vsb3QgKm9jZWxvdClcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jLTkwMy1cdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYzo5MDQ6XHRyYyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgTlVMTCk7XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jLTkwNS1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM9MzU3PXN0YXRpYyBpbnQgYXI5MzMxX3N3X21idXNfaW5pdChzdHJ1Y3QgYXI5MzMxX3N3X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYy0zODEtXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jOjM4MjpcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4My1cdG9mX25vZGVfcHV0KG1ucCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM9OTQ3PXFjYThrX21kaW9fcmVnaXN0ZXIoc3RydWN0IHFjYThrX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtOTg2LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6OTg3Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvKTtcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4OC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM9NzQ9aW50IHJ0bDgzeHhfc2V0dXBfdXNlcl9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmMtOTktXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MTAwOlx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTEwMS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jPTExMTc9c3RhdGljIGludCBhNXBzd19wcm9iZV9tZGlvKHN0cnVjdCBhNXBzdyAqYTVwc3csIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTExNDMtXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jOjExNDQ6XHRyZXR1cm4gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0NS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oPTMwNz12b2lkIHNqYTExMDVfZnJhbWVfbWVtb3J5X3BhcnRpdGlvbmluZyhzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMzA5LS8qIEZyb20gc2phMTEwNV9tZGlvLmMgKi9cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaDozMTA6aW50IHNqYTExMDVfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oLTMxMS12b2lkIHNqYTExMDVfbWRpb2J1c191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM9MzAyNj1zdGF0aWMgaW50IHNqYTExMDVfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjctXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYzozMDY4Olx0cmMgPSBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoZHMpO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMzA2OS1cdGlmIChyYyBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTI1OD1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19iYXNlX3R4X3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMjg3LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6Mjg4Olx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMjg5LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzEyPXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdDFfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDMtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzozNDQ6XHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zNDUtXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0zNjg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfcGNzX3JlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk1LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6Mzk2Olx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy0zOTctXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz00Mzk9c3RhdGljIHZvaWQgc2phMTEwNV9tZGlvYnVzX3Bjc191bnJlZ2lzdGVyKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDU4LVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM6NDU5OmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDYwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM9NTk1PXl0OTIxeF9tYnVzX2ludF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTYxMi1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYzo2MTM6XHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTYxNC1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTcyNj15dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDMtXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NzQ0Olx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy03NDUtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jPTQ1OT1zdGF0aWMgaW50IGF4X21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmMtNDc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM6NDc5Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihheC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ4MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jPTEzMjE9c3RhdGljIGludCBvd2xfZW1hY19tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYzoxMzQ2Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cdTAwM2VtaWksIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM0Ny1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYz01MDk9c3RhdGljIGludCBhZGluMTExMF9yZWdpc3Rlcl9tZGlvYnVzKHN0cnVjdCBhZGluMTExMF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jOjUzMDpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmMtNTMxLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYz02MTc9c3RhdGljIGludCBhZGluMTE0MF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBhZGluMTE0MF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jOjYzNzpcdHJldHVybiBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpZGV2LVx1MDAzZWRldiwgcHJpdi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTYzOC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYz0xMjkwPXN0YXRpYyBpbnQgZ3JldGhfbWRpb19pbml0KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jOjEzMDc6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKGdyZXRoLVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYy0xMzA4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jPTM5MzE9c3RhdGljIGludCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYzo0MDI3Olx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGFkYXB0ZXItXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy00MDI4LVx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jPTEyMT1zdGF0aWMgaW50IGFsdGVyYV90c2VfbWRpb19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6MTU4Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTE1OS1cdGlmIChyZXQgIT0gMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM9MTA2MT1zdGF0aWMgaW50IGF1MTAwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM6MTIyMjpcdGVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXVwLVx1MDAzZW1paV9idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy0xMjIzLVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9MzQyOD1zdGF0aWMgaW50IHhnYmVfcGh5X2luaXQoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxNy1cdHNucHJpbnRmKG1paS1cdTAwM2VpZCwgc2l6ZW9mKG1paS1cdTAwM2VpZCksIFwmIzM0OyVzXCYjMzQ7LCBkZXZfbmFtZShwZGF0YS1cdTAwM2VkZXYpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcxODpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWlpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxOS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6MzcyMDpcdFx0ZGV2X2VycihwZGF0YS1cdTAwM2VkZXYsIFwmIzM0O21kaW9idXNfcmVnaXN0ZXIgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcyMS1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jPTk4PWludCB4Z2VfbWRpb19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21kaW8uYy0xMTgtXHRtZGlvX2J1cy1cdTAwM2VwaHlfbWFzayA9IDB4MTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM6MTE5Olx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTEyMC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz04Mzc9aW50IHhnZW5lX2VuZXRfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjg4ODpzdGF0aWMgaW50IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy04ODktXHRcdFx0XHQgIHN0cnVjdCBtaWlfYnVzICptZGlvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTEyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MTM6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxNC1cdFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjEtXHQvKiBSZWdpc3RlciB0aGUgTURJTyBidXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmM6OTIyOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTIzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jPTkzOT1pbnQgeGdlbmVfZW5ldF9tZGlvX2NvbmZpZyhzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjk1ODpcdHJldCA9IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIocGRhdGEsIG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYz0xMzE9aW50IGFyY19tZGlvX3Byb2JlKHN0cnVjdCBhcmNfZW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM6MTczOlx0ZXJyb3IgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbWRpb19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYy0xNzQtXHRvZl9ub2RlX3B1dChtZGlvX25vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jPTk2Nj1zdGF0aWMgaW50IGF4ODg3OTZjX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jOjEwMTE6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXHUwMDI2c3BpLVx1MDAzZWRldiwgYXhfbG9jYWwtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDEyLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM9Njg3PXN0YXRpYyBpbnQgYWc3MXh4X21kaW9fcHJvYmUoc3RydWN0IGFnNzF4eCAqYWcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjctXHRtbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjcyODpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMsIG1ucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTcyOS1cdG9mX25vZGVfcHV0KG1ucCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjYwOlx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNjEtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM9MTcxMz1zdGF0aWMgaW50IGJjbV9lbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtMTgyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jOjE4MzA6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MzEtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYz0yMTE9c3RydWN0IG1paV9idXMgKmJjbWFfbWRpb19taWlfcmVnaXN0ZXIoc3RydWN0IGJnbWFjICpiZ21hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYzoyMzY6XHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNy1cdG9mX25vZGVfcHV0KG5wKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz0xOTM9aW50IGJjbWdlbmV0X21paV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBpbml0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jLTIzMy1cdFx0cGh5X25hbWUgPSBcJiMzNDtleHRlcm5hbCBSdk1JSVwmIzM0OztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbW1paS5jOjIzNDpcdFx0Lyogb2ZfbWRpb2J1c19yZWdpc3RlciB0b29rIGNhcmUgb2YgcmVhZGluZyB0aGUgJiMzOTttYXgtc3BlZWQmIzM5O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjM1LVx0XHQgKiBQSFkgcHJvcGVydHkgZm9yIHVzLCBlZmZlY3RpdmVseSBsaW1pdGluZyB0aGUgUEhZIHN1cHBvcnRlZFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYz0yMTU3PXN0YXRpYyBpbnQgc2JtYWNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldiwgbG9uZyBsb25nIGJhc2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jLTIyMjctXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoyMjI4Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihzYy1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMjI5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTE1MDU9c3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYzoxNTU4Olx0aSA9IG1kaW9idXNfcmVnaXN0ZXIodHAtXHUwMDNlbWRpb19idXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMTU1OS1cdGlmIChpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwOTc6c3RhdGljIGludCBtYWNiX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1hY2IgKmJwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNC1cdGlmIChtZGlvX25wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTA1Olx0XHRyZXR1cm4gb2ZfbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEwNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMTk6XHRcdFx0cmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cywgbnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIwLVx0XHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExMjI6XHRyZXR1cm4gbWRpb2J1c19yZWdpc3RlcihicC1cdTAwM2VtaWlfYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTEyMy19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMTI1PXN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTU5Olx0ZXJyID0gbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKGJwLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE2MC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYz0xMTA3PXN0YXRpYyBpbnQgZG05MDUxX21kaW9fcmVnaXN0ZXIoc3RydWN0IGJvYXJkX2luZm8gKmRiKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmM6MTEyNTpcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcdTAwMjZzcGktXHUwMDNlZGV2LCBkYi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDUxLmMtMTEyNi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTI0MjM9c3RhdGljIGludCB0c25lcF9tZGlvX2luaXQoc3RydWN0IHRzbmVwX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmM6MjQ1NTpcdHJldHZhbCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cdTAwM2VtZGlvYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMjQ1Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jPTEwMjQ9c3RhdGljIGludCBldGhvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM6MTIwODpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwOS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3MzQ9c3RhdGljIGludCBmdGdtYWMxMDBfc2V0dXBfbWRpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc3MDpcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZWRldiwgcHJpdi1cdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTc3MS1cdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wY2lfbWRpby5jPTM2PXN0YXRpYyBpbnQgZW5ldGNfcGNpX21kaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYzo5MTpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBkZXYtXHUwMDNlb2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYy05Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTI2Nj1zdGF0aWMgaW50IGVuZXRjX21kaW9fcHJvYmUoc3RydWN0IGVuZXRjX3BmICpwZiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjI5MzpcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjk0LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MzA4PXN0YXRpYyBpbnQgZW5ldGNfaW1kaW9fY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTM0Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozNDM6XHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQ0LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTMwNDI9c3RhdGljIGludCBmZWNfZW5ldF9taWlfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozMTYxOlx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihmZXAtXHUwMDNlbWlpX2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYyLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM9NjU9c3RhdGljIGludCBtcGM1Mnh4X2ZlY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmM6MTA2Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYy0xMDctXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM9MTQ5PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWJpdGJhbmcuYzoxNzY6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM9OTc9c3RhdGljIGludCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYzoxNjc6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LVx1MDAzZWRldi5vZl9ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1mZWMuYy0xNjgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jPTQwOT1zdGF0aWMgaW50IGZzbF9wcV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmM6NDk0Olx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTUtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYz0zNzE9c3RhdGljIGludCB4Z21hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjYtXHRpZiAoaXNfb2Zfbm9kZShmd25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYzo0Mjc6XHRcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCB0b19vZl9ub2RlKGZ3bm9kZSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MjgtXHRlbHNlIGlmIChpc19hY3BpX25vZGUoZndub2RlKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI5Olx0XHRyZXQgPSBhY3BpX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBmd25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MzAtXHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyOTI6XHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtZGlvX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTI5My1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jPTEwOTQ9c3RhdGljIGludCBoaXg1aGQyX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXg1aGQyX2dtYWMuYy0xMTg1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jOjExODY6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0xMjM9aW50IGhjbGdlX21hY19tZGlvX2NvbmZpZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU0LVx0bWRpb19idXMtXHUwMDNlcGh5X21hc2sgPSB+KDFVIFx1MDAzY1x1MDAzYyBtYWMtXHUwMDNlcGh5X2FkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYzoxNTU6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU2LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jPTQ5NT1zdGF0aWMgaW50IGhuc19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTg0Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTg1LVx0fSBlbHNlIGlmIChpc19hY3BpX25vZGUocGRldi1cdTAwM2VkZXYuZndub2RlKSkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU5Mi1cdFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1OTM6XHRcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTQtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYz0yNTYwPXN0YXRpYyBpbnQgZW1hY19kdF9tZGlvX3Byb2JlKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODQtXHRzbnByaW50ZihidXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7JXNcJiMzNDssIGRldi1cdTAwM2VvZmRldi1cdTAwM2VuYW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYzoyNTg1Olx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNmRldi1cdTAwM2VvZmRldi1cdTAwM2VkZXYsIGJ1cywgbWlpX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg2LVx0aWYgKHJlcykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTEwMjY9aW50IGl4Z2JlX21paV9idXNfaW5pdChzdHJ1Y3QgaXhnYmVfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwODgtXHRhZGFwdGVyLVx1MDAzZW1paV9idXMgPSBidXM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoxMDg5Olx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTEwOTAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM9Mzg1PWx0cV9ldG9wX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDAyLVx0XHQgcHJpdi1cdTAwM2VwZGV2LVx1MDAzZW5hbWUsIHByaXYtXHUwMDNlcGRldi1cdTAwM2VpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jOjQwMzpcdGlmIChtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWlpX2J1cykpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDA0LVx0XHRlcnIgPSAtRU5YSU87XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYz0yODM9c3RhdGljIGludCBvcmlvbl9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODEtXHQvKiBGb3IgdGhlIHBsYXRmb3JtcyBub3Qgc3VwcG9ydGluZyBEVC9BQ1BJIGZhbGwtYmFja1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODI6XHQgKiB0byBtZGlvYnVzX3JlZ2lzdGVyIHZpYSBvZl9tZGlvYnVzX3JlZ2lzdGVyLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODMtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg0LVx0aWYgKGlzX2FjcGlfbm9kZShwZGV2LVx1MDAzZWRldi5md25vZGUpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODU6XHRcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXHUwMDNlZGV2LmZ3bm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4Ni1cdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg3Olx0XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jLTM4OC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYz0xMzg3PXN0YXRpYyBpbnQgcHhhMTY4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTE1MDQtXHRwZXAtXHUwMDNlc21pX2J1cy1cdTAwM2VwaHlfbWFzayA9IDB4ZmZmZmZmZmY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYzoxNTA1Olx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihwZXAtXHUwMDNlc21pX2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA2LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jPTk5OD1zdGF0aWMgaW50IG10a19tZGlvX2luaXQoc3RydWN0IG10a19ldGggKmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTEwMzctXHRkZXZfZGJnKGV0aC1cdTAwM2VkZXYsIFwmIzM0O01EQyBpcyBydW5uaW5nIG9uICVkIEh6XFxuXCYjMzQ7LCBNRENfTUFYX0ZSRVEgLyBldGgtXHUwMDNlbWRjX2RpdmlkZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYzoxMDM4Olx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihldGgtXHUwMDNlbWlpX2J1cywgbWlpX25wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMTAzOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM9MTQyMj1zdGF0aWMgaW50IG10a19zdGFyX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzoxNDQ4Olx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cdTAwM2VtaWksIG1kaW9fbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtMTQ0OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jPTI4Nz1pbnQgbWx4YmZfZ2lnZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBtbHhiZl9naWdlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmMtMzMyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYzozMzM6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWRpby5jLTMzNC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmM9MjUzPWludCBmYm5pY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmMtMjcyLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTE5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVVNCIEV0aGVybmV0IERyaXZlciBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlc2UgVVNCIEV0aGVybmV0IGRyaXZlcnMsIHBhcnRpY3VsYXJseSBgc21zYzc1eHguY2AgYW5kIGBsYW43OHh4LmNgLiBBbmQgYSBxdWljayBnbGFuY2UgYXQgdGhlaXIgY29kZSBzdWdnZXN0cyB0aGV5JiMzOTtyZSB1c2luZyBgbWRpb2J1c19yZWdpc3RlcmAuIFJpZ2h0LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBtZWFucyB0aGV5JiMzOTtyZSBpbnRlcmFjdGluZyB3aXRoIGFuIE1ESU8gYnVzLiBMZXQmIzM5O3Mgc2VlIGhvdyBwcmV2YWxlbnQgdGhhdCBpcyB3aXRoaW4gVVNCIG5ldHdvcmtpbmcgZHJpdmVycy4gTGV0IG1lIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYG1kaW9idXNfcmVnaXN0ZXJgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9gIGRpcmVjdG9yeS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2Ygd2hpY2ggb3RoZXIgZHJpdmVycyBhcmUgdXNpbmcgdGhpcyBtZXRob2QgYW5kIHBvdGVudGlhbGx5IHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJIGV4cGVjdCB0aGVyZSYjMzk7bGwgYmUgYSBmZXcgbW9yZSwgaXQmIzM5O3Mgbm90IHVudXN1YWwgdG8gdXNlIHRoYXQgaW4gdGhpcyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvYnVzX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjY5PXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02ODYtXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg3Olx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz02MT1zdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtNzktXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo4MDpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTgxLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjA5MT1zdGF0aWMgaW50IGxhbjc4eHhfbWRpb19pbml0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEyMS1cdG5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNldWRldi1cdTAwM2VkZXYub2Zfbm9kZSwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMjI6XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cdTAwM2VtZGlvYnVzLCBub2RlKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEyMy1cdG9mX25vZGVfcHV0KG5vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0MS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyNDI6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0My1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MDgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxNjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBFQ09ORVQgRkVQSFkgRHJpdmVyIHZpYSBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gaG93IHdlIGNhbiBnZXQgYXQgdGhpcyBgZWNvbmV0LWZlLXNvY2AgZHJpdmVyIHRocm91Z2ggc3l6a2FsbGVyLiBUaGUgZ2FtZSBwbGFuIGlzIGNsZWFyOiB0aGVzZSBuZXR3b3JrIGRldmljZSBkcml2ZXJzLCBsaWtlIGBzbXNjOTV4eGAsIGBsYW43OHh4YCwgYGFzaXhfZGV2aWNlc2AsIGFuZCBgYXg4ODE3MmFgLCB0aGV5IHJlZ2lzdGVyIGFuIE1ESU8gYnVzLiBUaGF0IE1ESU8gYnVzLCB3aGVuIHJlZ2lzdGVyZWQsIGRvZXMgYSBzY2FuIGZvciBQSFlzLiAgVGhpcyBzY2FuIGlzIHRoZSBrZXkuIFRoZSBzY2FubmluZyBwcm9jZXNzIHJlbGllcyBvbiByZWFkaW5nIFBIWSByZWdpc3RlcnMgdXNpbmcgdGhlIE1ESU8gYnVzIHJlYWQgZnVuY3Rpb24uICBTaW5jZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMgdGhyb3VnaCB2aGNpLCBpdCBjYW4gY29udHJvbCB0aGUgZGF0YSByZXR1cm5lZCBieSB0aG9zZSByZWFkcy4KCk5vdywgaWYgc3l6a2FsbGVyIGZlZWRzIGEgc3BlY2lmaWMgUEhZIElEIGR1cmluZyB0aGUgTURJTyBzY2FuIOKAkyBgMHgwM2EyOTQxNGAsIHdoaWNoIGlzIGBFQ09ORVRfRkVQSFlfSURfRU43NTI2Q2Ag4oCTIHRoZSBNRElPIGJ1cyB3aWxsIGNyZWF0ZSBhIFBIWSBkZXZpY2Ugd2l0aCB0aGF0IElELiAgVGhlIGtlcm5lbCB3aWxsIHRoZW4gdHJ5IHRvIGJpbmQgYSBkcml2ZXIgZm9yIHRoYXQgcGFydGljdWxhciBQSFkgSUQuICBJZiBgQ09ORklHX0VDT05FVF9GRV9TT0NfUEhZYCBpcyBlbmFibGVkLCB0aGUgYGVjb25ldC1mZS1zb2NgIGRyaXZlciB3aWxsIG1hdGNoIGFuZCBpdHMgcHJvYmUgZnVuY3Rpb24gd2lsbCBleGVjdXRlLiBUaGlzIGtpY2tzIG9mZiB0aGUgd2hvbGUgbmV0d29yayBkcml2ZXIgY2hhaW4sIGF0dGFjaGluZyB0aGUgUEhZIGFuZCBzdGFydGluZyB0aGUgUEhZIHN0YXRlIG1hY2hpbmUsIGNhbGxpbmcgc3R1ZmYgbGlrZSBgY29uZmlnX2luaXRgIGFuZCBgcmVhZF9zdGF0dXNgLiBTbywgeWVzLCB0aGUgYGVjb25ldC1mZS1zb2NgIGRyaXZlciBpcyAqYWJzb2x1dGVseSogcmVhY2hhYmxlIGZyb20gc3l6a2FsbGVyIHZpYSBVU0IgdmhjaS4KCkFscmlnaHQsIGxldCYjMzk7cyB2ZXJpZnkgZXZlcnl0aGluZy4gVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY2AuIFRoZSBQSFkgSUQgaXMgaW5kZWVkIGAweDAzYTI5NDE0YC4gTG9va2luZyBhdCB0aGUgZHJpdmVyLCBpdCBkZWZpbmVzIGEgUEhZIGRyaXZlciB0YWJsZToKCmBgYGMKc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGVuNzUxMjIxX2ZlcGh5X2RyaXZlcltdID0gewoJewoJCVBIWV9JRF9NQVRDSF9FWEFDVChFQ09ORVRfRkVQSFlfSURfRU43NTI2QyksCgkJLm5hbWUJCT0gJiMzNDtFY29OZXQgRU43NTEyMjEgRkVQSFkmIzM0OywKCQkuY29uZmlnX2luaXQJPSBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdCwKCQkuY29uZmlnX2ludHIJPSBnZW5waHlfbm9fY29uZmlnX2ludHIsCgkJLmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssCgkJLnByb2JlCQk9IGVuNzUxMjIxX2ZlcGh5X3Byb2JlLAoJCS5yZWFkX3BhZ2UJPSBtdGtfcGh5X3JlYWRfcGFnZSwKCQkud3JpdGVfcGFnZQk9IG10a19waHlfd3JpdGVfcGFnZSwKCX0KfTsKYGBgCgpTbyBpdCBsb29rcyBnb29kLiBOb3csIHRoaXMgYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYCBpcyBpbnRlcmVzdGluZy4gTG9va2luZyBhdCB0aGF0IGZ1bmN0aW9uOgoKYGBgYwpzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCnsKCWludCBwb3J0MCA9IEVDT05FVF9FTjc1MjZDX1BPUlQwX0FERFI7CglzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZDsKCXN0cnVjdCBtdGtfc29jcGh5X3ByaXYgKnByaXY7CglpbnQgcmV0OwoKCWlmIChwaHlkZXYtJmd0O3BoeV9pZCAhPSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykKCQlwb3J0MCA9IEVDT05FVF9MRUdBQ1lfUE9SVDBfQUREUjsKCglyZXQgPSBkZXZtX3BoeV9wYWNrYWdlX2pvaW4oJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LCBwaHlkZXYsIHBvcnQwLAoJCQkJICAgIHNpemVvZihzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQpKTsKCWlmIChyZXQpCgkJcmV0dXJuIHJldDsKCglzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwoKCXByaXYgPSBkZXZtX2t6YWxsb2MoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKCWlmICghcHJpdikKCQlyZXR1cm4gLUVOT01FTTsKCglpZiAocGh5ZGV2LSZndDttZGlvLmFkZHIgPT0gcG9ydDApCgkJc2hhcmVkLSZndDtwaHlkZXZfcDAgPSBwaHlkZXY7CgoJcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKCglyZXR1cm4gMDsKfQpgYGAKCkFuZCB0aGVuIGBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdGAgaXM6CgpgYGBjCnN0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKewoJc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwoJdTE2IGwwcjI2X3RlbXA7CglpbnQgcmV0OwoJaW50IGk7CgoJaWYgKCFzaGFyZWQtJmd0O3BoeWRldl9wMCkgewoJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O1BvcnQgemVybyBtdXN0IGJlIGNvbmZpZ3VyZWRcbiYjMzQ7KTsKCQlyZXR1cm4gLUUKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRUNPTkVUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9LY29uZmlnPTM1OD1jb25maWcgTUFDSF9ERUNTVEFUSU9OXG4tLVxuYXJjaC9taXBzL0tjb25maWctMzk0LVxuYXJjaC9taXBzL0tjb25maWc6Mzk1OmNvbmZpZyBFQ09ORVRcbmFyY2gvbWlwcy9LY29uZmlnLTM5Ni1cdGJvb2wgXCYjMzQ7RWNvTmV0IE1JUFMgZmFtaWx5XCYjMzQ7XG4tLVxuZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnPTcxPWNvbmZpZyBEV19BUEJfVElNRVJfT0Zcbi0tXG5kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWctNzUtXG5kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWc6NzY6Y29uZmlnIEVDT05FVF9FTjc1MTIyMV9USU1FUlxuZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtFY29OZXQgRU43NTEyMjEgSGlnaCBQcmVjaXNpb24gVGltZXJcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tLVxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc9MTk1PWNvbmZpZyBEV19BUEJfSUNUTFxuLS1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTE5OS1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnOjIwMDpjb25maWcgRUNPTkVUX0VONzUxMjIxX0lOVENcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTIwMS1cdGJvb2xcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZy0yLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWc6Mzpjb25maWcgRUNPTkVUX0ZFX1NPQ19QSFlcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFY29OZXQgRHJpdmVyIGZvciBTeXprYWxsZXIgVGVzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgRUNPTkVUYCB0aGluZywgd2hpY2ggYXBwZWFycyB0byBiZSBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29tcG9uZW50IChgYXJjaC9taXBzL0tjb25maWdgKS4gVGhlIGRyaXZlciBpdHNlbGYgc2VlbXMgdG8gaGluZ2Ugb24gZWl0aGVyIGBFQ09ORVRgIGJlaW5nIGVuYWJsZWQsIG9yLCBjcnVjaWFsbHkgZm9yIG15IHB1cnBvc2VzLCBgQ09NUElMRV9URVNUYC4gRXhjZWxsZW50LCBzeXprYWxsZXIgbGV2ZXJhZ2VzIGBDT01QSUxFX1RFU1RgLCBzbyBJIGNhbiBkaXJlY3RseSBlbmFibGUgYEVDT05FVF9GRV9TT0NfUEhZYC4gSSBicmllZmx5IHdvbmRlcmVkIGFib3V0IGEgZGVwZW5kZW5jeSBvbiBgTVRLX05FVF9QSFlMSUJgLCBidXQgaXQgKnNlbGVjdHMqIGl0LCBzbyBgRUNPTkVUX0ZFX1NPQ19QSFlgIGlzIHRoZSBrZXkuIE5vIG90aGVyIGNvbmZpZ3MgYXBwZWFyIG5lY2Vzc2FyeSwganVzdCB0aGF0IG9uZS4KCk5vdyBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBkcml2ZXImIzM5O3MgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jYC4gVGhlIGRyaXZlciBkZWZpbmVzIGBlbjc1MTIyMV9mZXBoeV9kcml2ZXJgLCBhbmQgaXRzIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhcmUgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBhbmQgYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYC4gSSYjMzk7bGwgd2FudCB0byBrZWVwIGFuIGV5ZSBvbiB0aG9zZS4gTGV0JiMzOTtzIGFkZCB0aGVtIHRvIG15ICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgbGlzdC4KCkhtbSwgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBgTUFJTlRBSU5FUlNgIGFuZCB0aGUgYE1ha2VmaWxlYCBhcyB3ZWxsLCBhbmQgYWRkcyBgZWNvbmV0LWZlLXNvYy5jYCDigJMgc3RhbmRhcmQgc3R1ZmYuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbjogY2FuIEkgcmVhbGlzdGljYWxseSByZWFjaCB0aGlzIGNvZGUgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudCwgYW5kIHNwZWNpZmljYWxseSB0aHJvdWdoIHN5emthbGxlcj8gVGhlIGFuc3dlciwgdGhhbmtmdWxseSwgaXMgeWVzISBTeXprYWxsZXIgdXNlcyBgdmhjaWAgdG8gZW11bGF0ZSBVU0IgZGV2aWNlcy4gSSYjMzk7bSB0aGlua2luZyBvZiBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgbGlrZSBgc21zYzk1eHhgLiBUaGUgYHNtc2M5NXh4YCBkcml2ZXIgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGR1cmluZyBpdHMgYmluZCBwcm9jZXNzLiBUaGlzIGJ1cyB0aGVuIHNjYW5zIGZvciBQSFlzIGJ5IHJlYWRpbmcgTURJTyByZWdpc3RlcnMsIHZpYSBVU0IgY29udHJvbCBtZXNzYWdlcy4KCkhlcmUmIzM5O3MgdGhlIHJlYWwgcG93ZXI6IFN5emthbGxlciBpbnRlcmNlcHRzIHRoZXNlIG1lc3NhZ2VzIGZyb20gdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UuIFNvLCBpZiBzeXprYWxsZXIgaXMgY29uZmlndXJlZCB0byByZXR1cm4gdGhlIFBIWSBJRCBgMHgwM2EyOTQxNGAgKGF0LCBzYXksIGFkZHJlc3MgOSkgd2hlbiBxdWVyaWVkIGJ5IHRoZSBNRElPIGJ1cywgdGhlIFBIWSBkcml2ZXIgY29yZSB3aWxsIGNyZWF0ZSBhIFBIWSBkZXZpY2UsIGFuZCB0aGUgUEhZIGRyaXZlciBjb3JlIHdpbGwgbWF0Y2ggdGhpcyBJRCB3aXRoIGBlbjc1MTIyMV9mZXBoeV9kcml2ZXJgLiBJdCBjYWxscyBgZW43NTEyMjFfZmVwaHlfcHJvYmVgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpMYXRlciwgd2hlbiB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgYWN0aXZhdGVkLCBgcGh5X3N0YXJ0YCB3aWxsIHRyaWdnZXIgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgYSBzZXJpZXMgb2YgTURJTyByZWFkcyBhbmQgd3JpdGVzICh2aWEgYHBoeV9yZWFkX3BhZ2VkYCwgYHBoeV93cml0ZV9wYWdlZGAsIGV0Yy4pIOKAkyBhbGwgb2Ygd2hpY2ggdHJhbnNsYXRlIHRvIFVTQiBjb250cm9sIG1lc3NhZ2VzIHRoYXQgc3l6a2FsbGVyIGNhbiBpbnRlcmNlcHQgYW5kIG1hbmlwdWxhdGUhIFRoZXJlZm9yZSwgdGhlIGVudGlyZSBjYWxpYnJhdGlvbiBsb2dpYyBpbiBgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXRgIGlzIGZ1bGx5IHdpdGhpbiBteSBjb250cm9sLiBJIGNhbiBmdXp6IGl0IGV4dGVuc2l2ZWx5IHdpdGggc3l6a2FsbGVyLgoKSnVzdCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc21zYzk1eHhgIGRvZXNuJiMzOTt0IGZpbHRlciBvdXQgUEhZcyDigJMgYWxsIGxvb2tzIGdvb2QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2RldmljZV9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0Mjg1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNRElPIEJ1cyBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gdGhlIGBzbXNjOTV4eGAgZHJpdmVyIGtpY2tzIHRoaW5ncyBvZmYgYnkgcmVnaXN0ZXJpbmcgYW4gTURJTyBidXMgdXNpbmcgYG1kaW9idXNfcmVnaXN0ZXJgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgd2F5IHRvIGRvIGl0LiBOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd29ya3MgaW4gZGV0YWlsLiBUaW1lIHRvIGNyYWNrIG9wZW4gYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBtZGlvYnVzX3JlZ2lzdGVyYCBmdW5jdGlvbiBpdHNlbGYuIEkgd2FudCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2Qg4oCTIHdoYXQgc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQsIHdoaWNoIGNhbGxiYWNrcyBhcmUgYmVpbmcgc2V0IHVwLCBhbmQgaG93IHRoaXMgYnVzIGlzIG1hZGUgYXZhaWxhYmxlIHRvIG90aGVyIFBIWSBkcml2ZXJzLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBuaXR0eS1ncml0dHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDUzOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTURJTyBCdXMgU2NhbiBMb2NhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE1ESU8gYnVzIGluaXRpYWxpemF0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYSBzYW5pdHkgY2hlY2suIExldCBtZSBqdXN0IGNvbmZpcm0uLi4gYG1kaW9idXNfc2NhbmAuLi4gdGhhdCYjMzk7cyAqcmlnaHQqIHdoZXJlIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlLCBuZXN0bGVkIGluIHRoZSBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgIGZpbGUuIE5vIHN1cnByaXNlcyB0aGVyZS4gR29vZC4gTWFrZXMgc2Vuc2UuIEp1c3QgY29uZmlybWluZyB0aGUgY29kZSBiYXNlIGlzIHN0cnVjdHVyZWQgYXMgSSB3b3VsZCBhbnRpY2lwYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvYnVzX3NjYW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM9OTU4PXN0YXRpYyBpbnQgcHhhMTY4X2luaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmMtOTY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM6OTY4Olx0cGh5ID0gbWRpb2J1c19zY2FuX2MyMihwZXAtXHUwMDNlc21pX2J1cywgcGVwLVx1MDAzZXBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTk2OS1cdGlmIChJU19FUlIocGh5KSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jPTEzMD1zdGF0aWMgaW50IHVuaW1hY19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0xNjMtICpcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6MTY0OiAqIGJ1cy1cdTAwM2VyZXNldCBpcyBpbnZva2VkIGJlZm9yZSBtZGlvYnVzX3NjYW4gZHVyaW5nIG1kaW9idXNfcmVnaXN0ZXIgYW5kIGlzXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTE2NS0gKiB0aGVyZWZvcmUgdGhlIHJpZ2h0IGxvY2F0aW9uIHRvIHN0aWNrIHRoYXQgd29ya2Fyb3VuZC4gU2luY2Ugd2UgZG8gbm90IHdhbnRcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYz0zOTY9c3RhdGljIHZvaWQgb2ZfbWRpb2J1c19saW5rX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cyxcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00MDctXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0MDg6c3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgYzQ1KVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDA5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NDctLyoqXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0NDg6ICogbWRpb2J1c19zY2FuX2MyMiAtIHNjYW4gb25lIGFkZHJlc3Mgb24gYSBidXMgZm9yIEMyMiBNRElPIGRldmljZXMuXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NDktICogQGJ1czogbWlpX2J1cyB0byBzY2FuXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDU4LSAqL1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDU5OnN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW5fYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDYwLXtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ2MTpcdHJldHVybiBtZGlvYnVzX3NjYW4oYnVzLCBhZGRyLCBmYWxzZSk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NjItfVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDYzOkVYUE9SVF9TWU1CT0wobWRpb2J1c19zY2FuX2MyMik7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NjQtXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NjUtLyoqXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0NjY6ICogbWRpb2J1c19zY2FuX2M0NSAtIHNjYW4gb25lIGFkZHJlc3Mgb24gYSBidXMgZm9yIEM0NSBNRElPIGRldmljZXMuXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NjctICogQGJ1czogbWlpX2J1cyB0byBzY2FuXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDc2LSAqL1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDc3OnN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ3OC17XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0Nzk6XHRyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00ODAtfVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDgxLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDgyOnN0YXRpYyBpbnQgbWRpb2J1c19zY2FuX2J1c19jMjIoc3RydWN0IG1paV9idXMgKmJ1cylcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ4My17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDg5LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDkwOlx0XHRcdHBoeWRldiA9IG1kaW9idXNfc2Nhbl9jMjIoYnVzLCBpKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5MS1cdFx0XHRpZiAoSVNfRVJSKHBoeWRldikgXHUwMDI2XHUwMDI2IChQVFJfRVJSKHBoeWRldikgIT0gLUVOT0RFVikpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDk3LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDk4OnN0YXRpYyBpbnQgbWRpb2J1c19zY2FuX2J1c19jNDUoc3RydWN0IG1paV9idXMgKmJ1cylcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNTA5LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NTEwOlx0XHRcdHBoeWRldiA9IG1kaW9idXNfc2Nhbl9jNDUoYnVzLCBpKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTUxMS1cdFx0XHRpZiAoSVNfRVJSKHBoeWRldikgXHUwMDI2XHUwMDI2IChQVFJfRVJSKHBoeWRldikgIT0gLUVOT0RFVikpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM9NTUzPWludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjMyLVx0aWYgKGJ1cy1cdTAwM2VyZWFkKSB7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo2MzM6XHRcdGVyciA9IG1kaW9idXNfc2Nhbl9idXNfYzIyKGJ1cyk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MzQtXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjQwLVx0aWYgKCFwcmV2ZW50X2M0NV9zY2FuIFx1MDAyNlx1MDAyNiBidXMtXHUwMDNlcmVhZF9jNDUpIHtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjY0MTpcdFx0ZXJyID0gbWRpb2J1c19zY2FuX2J1c19jNDUoYnVzKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTY0Mi1cdFx0aWYgKGVycilcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTQ2Mj1zdHJ1Y3QgbWlpX2J1cyAqbWRpb19maW5kX2J1cyhjb25zdCBjaGFyICptZGlvX25hbWUpO1xuaW5jbHVkZS9saW51eC9waHkuaDo0NjM6c3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2Nhbl9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xuaW5jbHVkZS9saW51eC9waHkuaC00NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O3ZlIGdvdC4gSSYjMzk7dmUgcmVhbGl6ZWQgdGhhdCB0aGUgYF9fbWRpb2J1c19yZWdpc3RlcmAgZnVuY3Rpb24sIGFuZCB0aGUgY2hhaW4gb2YgY2FsbHMgc3RlbW1pbmcgZnJvbSBpdOKAlGBtZGlvYnVzX3NjYW5fYnVzX2MyMmAsIGBtZGlvYnVzX3NjYW5fYzIyYCwgYG1kaW9idXNfc2NhbmAsIGBnZXRfcGh5X2RldmljZWAsIGFuZCBmaW5hbGx5IGBwaHlfZGV2aWNlX2NyZWF0ZWDigJRwcm92aWRlcyBhIHBvdGVudGlhbCBlbnRyeSBwb2ludC4gU3BlY2lmaWNhbGx5LCBkcml2ZXJzIHJlZ2lzdGVyaW5nIGFuIE1ESU8gYnVzIHdpdGhvdXQgRGV2aWNlIFRyZWUgaW5mb3JtYXRpb24sIGxpa2UgYHNtc2M5NXh4YCwgd2lsbCB0cmlnZ2VyIGEgYnVzIHNjYW4gYW5kIGRldmljZSBjcmVhdGlvbiBiYXNlZCBvbiBQSFkgSURzIG9idGFpbmVkIGZyb20gdGhlIE1ESU8gcmVhZCBmdW5jdGlvbi4KCk5vdywgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYHNtc2M5NXh4YCB2aWEgYHZoY2lgLCBpdCBjYW4gaW5qZWN0IGEgc3BlY2lmaWMgUEhZIElEIGR1cmluZyB0aGF0IHNjYW4g4oCTIGluIHRoaXMgY2FzZSwgYDB4MDNhMjk0MTRgLiBUaGlzIHNob3VsZCBjYXVzZSB0aGUgYGVjb25ldC1mZS1zb2NgIFBIWSBkcml2ZXIgdG8gYmUgcHJvYmVkLCBhbmQgaXRzIGFzc29jaWF0ZWQgY29kZSB0byBiZSBleGVjdXRlZC4gU28sIGdpdmVuIHRoYXQsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGFuZCB0aGVyZWZvcmUsIHdvcnRoIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBkcml2ZXIuIEkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBkcml2ZXIgZGVmaW5pdGlvbiBhbmQgaXQgbG9va3MgbGlrZSBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGlzOgoKYGBgYwpzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW43NTEyMjFfZmVwaHlfZHJpdmVyW10gPSB7Cgl7CgkJUEhZX0lEX01BVENIX0VYQUNUKEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSwKCQkubmFtZQkJPSAmIzM0O0Vjb05ldCBFTjc1MTIyMSBGRVBIWSYjMzQ7LAoJCS5jb25maWdfaW5pdAk9IGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0LAoJCS5jb25maWdfaW50cgk9IGdlbnBoeV9ub19jb25maWdfaW50ciwKCQkuaGFuZGxlX2ludGVycnVwdCA9IGdlbnBoeV9oYW5kbGVfaW50ZXJydXB0X25vX2FjaywKCQkucHJvYmUJCT0gZW43NTEyMjFfZmVwaHlfcHJvYmUsCgkJLnJlYWRfcGFnZQk9IG10a19waHlfcmVhZF9wYWdlLAoJCS53cml0ZV9wYWdlCT0gbXRrX3BoeV93cml0ZV9wYWdlLAoJfQp9OwpgYGAKCkkgaW5pdGlhbGx5IGlkZW50aWZpZWQgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBhbmQgYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYCBhcyB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcy4gSG93ZXZlciwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBkb24mIzM5O3QganVzdCBjYWxsIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCB3aWxsIGJlIGlubGluZWQsIGJlY2F1c2UgSSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBTdXJlIGVub3VnaCwgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBjYWxscyBzZXZlcmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zOiBgZW43NTEyMjFfZmVwaHlfcjUwYCwgYGVuNzUxMjIxX2ZlcGh5X3R4X29mZnNldGAsIGFuZCBgZW43NTEyMjFfZmVwaHlfdHhfYW1wYC4gVGh1cywgSSB3aWxsIHN0aWNrIHdpdGgganVzdCBgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXRgIGFuZCBgZW43NTEyMjFfZmVwaHlfcHJvYmVgLgoKRmluYWxseSwgc2luY2UgYG10a19waHlfcmVhZF9wYWdlYCBhbmQgYG10a19waHlfd3JpdGVfcGFnZWAgYXBwZWFyIGluIHRoZSBkcml2ZXIgZGVmaW5pdGlvbiwgSSB3YW50IHRvIGNvbmZpcm0gd2hlcmUgdGhleSBhcmUgZGVmaW5lZC4gVGhleSBhcmUgbm90IGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgZmlsZSwgc28gSSBuZWVkIHRvIGNoZWNrIGVpdGhlciBgbXRrLmhgIG9yIGBtdGsuY2AgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHJlbGV2YW50LCBhbmQgaG93IHRvIHJlYWNoIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210a19waHlfcmVhZF9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jPTYwOD1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW43NTEyMjFfZmVwaHlfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYy02MTUtXHRcdC5wcm9iZVx0XHQ9IGVuNzUxMjIxX2ZlcGh5X3Byb2JlLFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYzo2MTY6XHRcdC5yZWFkX3BhZ2VcdD0gbXRrX3BoeV9yZWFkX3BhZ2UsXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jLTYxNy1cdFx0LndyaXRlX3BhZ2VcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstMnA1Z2UuYz0zNzk9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG10a18ycDVnZXBoeV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLTJwNWdlLmMtMzkwLVx0XHQucmVzdW1lID0gZ2VucGh5X3Jlc3VtZSxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstMnA1Z2UuYzozOTE6XHRcdC5yZWFkX3BhZ2UgPSBtdGtfcGh5X3JlYWRfcGFnZSxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstMnA1Z2UuYy0zOTItXHRcdC53cml0ZV9wYWdlID0gbXRrX3BoeV93cml0ZV9wYWdlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM9MTQ5NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX3NvY3BoeV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE1MDQtXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYzoxNTA1Olx0XHQucmVhZF9wYWdlXHQ9IG10a19waHlfcmVhZF9wYWdlLFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNTA2LVx0XHQud3JpdGVfcGFnZVx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNTIxLVx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM6MTUyMjpcdFx0LnJlYWRfcGFnZVx0PSBtdGtfcGh5X3JlYWRfcGFnZSxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTUyMy1cdFx0LndyaXRlX3BhZ2VcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYz05OT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX2dlcGh5X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYy0xMTAtXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jOjExMTpcdFx0LnJlYWRfcGFnZVx0PSBtdGtfcGh5X3JlYWRfcGFnZSxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYy0xMTItXHRcdC53cml0ZV9wYWdlXHQ9IG10a19waHlfd3JpdGVfcGFnZSxcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMtMTI0LVx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYzoxMjU6XHRcdC5yZWFkX3BhZ2VcdD0gbXRrX3BoeV9yZWFkX3BhZ2UsXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMtMTI2LVx0XHQud3JpdGVfcGFnZVx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmM9ODQ9RVhQT1JUX1NZTUJPTF9HUEwoX19tdGtfdHJfY2xyX2JpdHMpO1xuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmMtODUtXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYzo4NjppbnQgbXRrX3BoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstcGh5LWxpYi5jLTg3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYy04OS19XG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYzo5MDpFWFBPUlRfU1lNQk9MX0dQTChtdGtfcGh5X3JlYWRfcGFnZSk7XG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYy05MS1cbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLmg9ODE9dm9pZCBfX210a190cl9jbHJfYml0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCBjaF9hZGRyLCB1OCBub2RlX2FkZHIsXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay5oLTgzLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay5oOjg0OmludCBtdGtfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaC04NS1pbnQgbXRrX3BoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwNTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgTWVkaWF0ZWsgUEhZIExpYnJhcnkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG10ay1waHktbGliLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgZHJpdmVyLiBGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgYEVuYWJsZUNvbmZpZ3NgLiBBbHJpZ2h0LCBsb29rcyBsaWtlIGBDT05GSUdfRUNPTkVUX0ZFX1NPQ19QSFlgIGlzIHRoZSBrZXkuIEl0JiMzOTtzIGRlcGVuZGVudCBvbiBgRUNPTkVUIHx8IENPTVBJTEVfVEVTVGAsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBCYXNpY2FsbHksIEkganVzdCBuZWVkIGBFQ09ORVRfRkVfU09DX1BIWWAgZW5hYmxlZC4KCk5vdywgYSBxdWljayBzYW5pdHkgY2hlY2suIERvZXMgdGhpcyB0aGluZyBkZXBlbmQgb24gZWl0aGVyIGBNRElPX0RFVklDRWAgb3IgYFBIWUxJQmA/IEFoYSwgaXQgbG9va3MgbGlrZSBgUEhZTElCYCBpcyBzZWxlY3RlZCBieSBgTVRLX05FVF9QSFlMSUJgLCB3aGljaCwgaW4gdHVybiwgaXMgc2VsZWN0ZWQgYnkgYEVDT05FVF9GRV9TT0NfUEhZYC4gR290IGl0ISBXYWl0IGEgbWludXRlLCBgTVRLX05FVF9QSFlMSUJgIGlzIGFjdHVhbGx5IGEgY29uZmlnIG9wdGlvbiBpdHNlbGYuIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiBhYm91dCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1US19ORVRfUEhZTElCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZz00OD1jb25maWcgTUVESUFURUtfR0VfU09DX1BIWVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnLTY2LVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWc6Njc6Y29uZmlnIE1US19ORVRfUEhZTElCXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZy02OC1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTcyCgkJCQkJCQlvdXRwdXQ6IDI2MAoJCQkJCQkJdGhvdWdodHM6IDYwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFzb25pbmcgZm9yIEZ1enppbmcgdGhlIEVjb05ldCBQSFkgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYmFzaWNhbGx5LCBpdCBhZGRzIGEgbmV3IFBIWSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aG9zZSBFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzLCByaWdodD8gVGhlIGtleSBoZXJlIGlzIHJlYWNoYWJpbGl0eSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBhbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IFBIWSBkcml2ZXJzICpjYW4qIGJlIHJlYWNoZWQgZXZlbiBpbiB0aGVzZSB2aXJ0dWFsaXplZCBzZXR1cHMgYmVjYXVzZSB3ZSBjYW4gZW11bGF0ZSBhbiBNRElPIGJ1cy4gVGhpbmsgYWJvdXQgaG93IHN5emthbGxlciBjYW4gZW11bGF0ZSBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIsIGxpa2UgYHNtc2M5NXh4YCwgdXNpbmcgYHZoY2lgLiBXaGVuIHRoYXQgZW11bGF0ZWQgVVNCIGRldmljZSBnZXRzIHByb2JlZCwgaXQgc2V0cyB1cCBhbiBNRElPIGJ1cyBhbmQgc3RhcnRzIHNjYW5uaW5nIGZvciBQSFlzLgoKTm93LCBoZXJlJiMzOTtzIHRoZSBjbGV2ZXIgYml0OiBkdXJpbmcgdGhhdCBNRElPIHNjYW4gKHdoZXJlIGl0JiMzOTtzIGVzc2VudGlhbGx5IHNlbmRpbmcgTURJTyByZWFkIHJlcXVlc3RzIGFzIFVTQiBjb250cm9sIG1lc3NhZ2VzKSwgaWYgd2UgcmV0dXJuIHRoZSBzcGVjaWZpYyBQSFkgSUQsIGluIHRoaXMgY2FzZSBgMHgwM2EyOTQxNGAsIHRoZSBNRElPIGJ1cyB3aWxsIGluc3RhbnRpYXRlIGEgUEhZIGRldmljZSB3aXRoICp0aGF0KiBJRC4gVGhhdCYjMzk7cyB0aGUgdHJpZ2dlciEgVGhhdCB3aWxsIHRoZW4ga2ljayBvZmYgdGhlIGBlY29uZXQtZmUtc29jYCBQSFkgZHJpdmVyJiMzOTtzIHByb2JlIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuIEJpbmdvISBDb2RlIGV4ZWN1dGlvbi4KClNvLCB0aGlzIHBhdGNoIGlzbiYjMzk7dCBqdXN0IGludHJvZHVjaW5nIGEgbmV3IGRyaXZlcjsgaXQmIzM5O3Mgb3BlbmluZyBhIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldC4gV2Uga25vdyB0aGUgY29kZSBpcyByZWFjaGFibGUsIGFuZCB0aGF0IGl0IG1ha2VzIGZ1enppbmcgd29ydGh3aGlsZS4KCkkga25vdyBJIHdhbnQgdG8ga2VlcCBhbiBleWUgb24gYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYCBhbmQgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBmdW5jdGlvbnMgYXMgZW50cnkgcG9pbnRzLgoKSSYjMzk7dmUgbG9va2VkIGF0IHRoZSBjb25maWcgb3B0aW9ucywgYEVDT05FVF9GRV9TT0NfUEhZYCBpcyB0aGUgY3J1Y2lhbCBvbmUgdG8gZW5hYmxlLiBJIGRvdWJsZS1jaGVja2VkIHRoYXQgYFBIWV9QQUNLQUdFYCBpcyBzZWxlY3RlZCwgYW5kIGBNVEtfTkVUX1BIWUxJQmAgaXMgYWxzbyBzZWxlY3RlZCwgYnV0IGBFQ09ORVRfRkVfU09DX1BIWWAgaXMgc3VmZmljaWVudC4gSSBjb25maXJtZWQgdGhhdCBgRUNPTkVUX0ZFX1NPQ19QSFlgIGlzIHRyaXN0YXRlLCBzbyBpdCYjMzk7cyB0aGUgb25seSBvbmUgd2UgcmVhbGx5IG5lZWQuIE5vIG5lZWQgdG8gbGlzdCBgVVNCX05FVF9TTVNDOTVYWGAsIGFzIHN5emthbGxlciB1c3VhbGx5IGhhcyB0aGF0IG9uZSBlbmFibGVkIGFscmVhZHkuCkkmIzM5O20gY29uZmlkZW50IGluIHRoZSBhcHByb2FjaCBhbmQgaGF2ZSBkb2N1bWVudGVkIHRoZSByZWFzb25pbmcuIEkgd2lsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RUNPTkVUX0ZFX1NPQ19QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbjc1MTIyMV9mZXBoeV9wcm9iZSYjMzQ7LAogICAgJiMzNDtlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBIWSBkcml2ZXIgZm9yIEVjb05ldCAxMC8xMDAgU29DIEV0aGVybmV0IFBIWXMgKGBkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jYCkuIFBIWSBkcml2ZXJzIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBlbXVsYXRpbmcgYW4gTURJTyBidXMuIEZvciBleGFtcGxlLCBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBVU0IgbmV0d29yayBhZGFwdGVyIChzdWNoIGFzIGBzbXNjOTV4eGApIHZpYSB0aGUgYHZoY2lgIGRyaXZlci4gV2hlbiB0aGUgZW11bGF0ZWQgVVNCIGRldmljZSBpcyBwcm9iZWQsIGl0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgc2NhbnMgZm9yIFBIWXMgYnkgc2VuZGluZyBNRElPIHJlYWQgcmVxdWVzdHMgKHdoaWNoIHRyYW5zbGF0ZSB0byBVU0IgY29udHJvbCBtZXNzYWdlcykuIEJ5IHJldHVybmluZyB0aGUgc3BlY2lmaWMgUEhZIElEIChgMHgwM2EyOTQxNGApIGR1cmluZyB0aGUgTURJTyBzY2FuLCB0aGUgTURJTyBidXMgd2lsbCBpbnN0YW50aWF0ZSBhIFBIWSBkZXZpY2Ugd2l0aCB0aGlzIElELCB0cmlnZ2VyaW5nIHRoZSBwcm9iZSBhbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIG9mIHRoZSBgZWNvbmV0LWZlLXNvY2AgUEhZIGRyaXZlci4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VDT05FVF9GRV9TT0NfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW43NTEyMjFfZmVwaHlfcHJvYmUmIzM0OywKICAgICYjMzQ7ZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQSFkgZHJpdmVyIGZvciBFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzIChgZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY2ApLiBQSFkgZHJpdmVycyBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgZW11bGF0aW5nIGFuIE1ESU8gYnVzLiBGb3IgZXhhbXBsZSwgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoc3VjaCBhcyBgc21zYzk1eHhgKSB2aWEgdGhlIGB2aGNpYCBkcml2ZXIuIFdoZW4gdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgaXMgcHJvYmVkLCBpdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHNjYW5zIGZvciBQSFlzIGJ5IHNlbmRpbmcgTURJTyByZWFkIHJlcXVlc3RzICh3aGljaCB0cmFuc2xhdGUgdG8gVVNCIGNvbnRyb2wgbWVzc2FnZXMpLiBCeSByZXR1cm5pbmcgdGhlIHNwZWNpZmljIFBIWSBJRCAoYDB4MDNhMjk0MTRgKSBkdXJpbmcgdGhlIE1ESU8gc2NhbiwgdGhlIE1ESU8gYnVzIHdpbGwgaW5zdGFudGlhdGUgYSBQSFkgZGV2aWNlIHdpdGggdGhpcyBJRCwgdHJpZ2dlcmluZyB0aGUgcHJvYmUgYW5kIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyBvZiB0aGUgYGVjb25ldC1mZS1zb2NgIFBIWSBkcml2ZXIuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxOToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0NzLiBUaGUgZHJpdmVyIHByaW1hcmlseSBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZSByZWdpc3RlcnMgdmlhIE1ESU8gKHVzaW5nIHBoeWxpYiBmdW5jdGlvbnMgbGlrZSBwaHlfd3JpdGVfcGFnZWQgYW5kIHBoeV9yZWFkX3BhZ2VkKSBhbmQgcGVyZm9ybXMgY2FsaWJyYXRpb24gcm91dGluZXMuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoZS5nLiwgbXRrX3NvY3BoeV9wcml2IGFuZCB0aGUgc2hhcmVkIHBhY2thZ2UgZGF0YSkgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgZGV2bV9remFsbG9jIG9yIHN0YW5kYXJkIHBoeWxpYiBmdW5jdGlvbnMuIFN0YWNrIHZhcmlhYmxlcyBsaWtlIGNhbF9jb21wbGV0ZV9jdHggYXJlIGFsc28gZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1c2VyLXNwYWNlIEFQSXMsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGxzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeS1kZXBlbmRlbnQgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDQ3YmJjNDM2ZGVjMjQ1MDRjMDcwMzMwYzZkNDdiNzkxOTMxNjgxNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDE5OjE4OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA0NjBjYjcyNjg4NDUwLi43Y2EzZDhkMDhjNjkzIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtOTI1Myw2ICYjNDM7OTI1MywxMiBAQCBXOglodHRwczovL2xpbnV4dHYub3JnCiBROglodHRwOi8vcGF0Y2h3b3JrLmxpbnV4dHYub3JnL3Byb2plY3QvbGludXgtbWVkaWEvbGlzdC8KIEY6CWRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9lYzEwMCoKIAomIzQzO0VDT05FVCBFVEhFUk5FVCBQSFkgRFJJVkVSCiYjNDM7TToJQ2FsZWIgSmFtZXMgRGVMaXNsZSAmbHQ7Y2pkQGNqZG5zLmZyJmd0OwomIzQzO0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYwomIzQzOwogRUNPTkVUIE1JUFMgUExBVEZPUk0KIE06CUNhbGViIEphbWVzIERlTGlzbGUgJmx0O2NqZEBjamRucy5mciZndDsKIEw6CWxpbnV4LW1pcHNAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnCmluZGV4IDNiOWNmODJjMGNiMjguLjY0YWJmNWI2OTVhYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnCkBAIC0xLDQgJiM0MzsxLDE5IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsKJiM0Mztjb25maWcgRUNPTkVUX0ZFX1NPQ19QSFkKJiM0MzsJdHJpc3RhdGUgJiMzNDtFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBFQ09ORVQgfHwgQ09NUElMRV9URVNUCiYjNDM7CXNlbGVjdCBNVEtfTkVUX1BIWUxJQgomIzQzOwlzZWxlY3QgUEhZX1BBQ0tBR0UKJiM0MzsJaGVscAomIzQzOwkgIFN1cHBvcnRzIEVjb05ldCBTb0MgYnVpbHQtaW4gMTAvMTAwIEV0aGVybmV0IFBIWXMuCiYjNDM7CiYjNDM7CSAgSW5jbHVkZSBzdXBwb3J0IGZvciBidWlsdC1pbiBFdGhlcm5ldCBQSFlzIHdoaWNoIGFyZSBwcmVzZW50IGluCiYjNDM7CSAgRU43NTI2QyBiYXNlZCBTb0NzIChpbmNsdWRpbmcgRU43NTI2RikuIEl0IGNhbiBhbHNvIHdvcmsgd2l0aAomIzQzOwkgIGxlZ2FjeSBFTjc1MTIgRkUgUEhZcyB3aGljaCBpZGVudGlmeSBhcyAwM2EyLjk0MTIsIGJ1dCBzaW5jZSB0aGlzCiYjNDM7CSAgSUQgaXMgdXNlZCBieSBNRURJQVRFS19HRV9QSFksIHVzZXJzIHdhbnRpbmcgdG8gZm9yY2UgdGhpcyBkcml2ZXIKJiM0MzsJICBtdXN0IG92ZXJyaWRlIHRoZSBJRCB0byAwM2EyLjk0MTQgaW4gdGhlIGRldmljZSB0cmVlLgomIzQzOwogY29uZmlnIE1FRElBVEVLXzJQNUdFX1BIWQogCXRyaXN0YXRlICYjMzQ7TWVkaWFUZWsgMi41R2IgRXRoZXJuZXQgUEhZcyYjMzQ7CiAJZGVwZW5kcyBvbiAoQVJNNjQgJmFtcDsmYW1wOyBBUkNIX01FRElBVEVLKSB8fCBDT01QSUxFX1RFU1QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZQppbmRleCA2ZjljYWNmN2Y5MDY1Li43MTIzOWU5MmFhNTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL01ha2VmaWxlCkBAIC0xLDQgJiM0MzsxLDUgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MztvYmotJChDT05GSUdfRUNPTkVUX0ZFX1NPQ19QSFkpCQkmIzQzOz0gZWNvbmV0LWZlLXNvYy5vCiBvYmotJChDT05GSUdfTUVESUFURUtfMlA1R0VfUEhZKQkmIzQzOz0gbXRrLTJwNWdlLm8KIG9iai0kKENPTkZJR19NRURJQVRFS19GRV9TT0NfUEhZKQkmIzQzOz0gbXRrLWZlLXNvYy5vCiBvYmotJChDT05GSUdfTUVESUFURUtfR0VfUEhZKQkJJiM0Mzs9IG10ay1nZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5jNWRiYjMyYTVkMWFiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYwpAQCAtMCwwICYjNDM7MSw2MzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vcGh5bGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXRrLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQW4gb2xkZXIgdmVyc2lvbiBvZiB0aGlzIFBIWSBoYXJkd2FyZSB1c2VzIHRoZSBJRCAwM2EyLjk0MTIuCiYjNDM7ICogVGhpcyBkcml2ZXIgZG9lcyBub3QgbWF0Y2ggb24gaXQgYmVjYXVzZSBpdCBjb2xsaWRlcyB3aXRoCiYjNDM7ICogTVRLX0dQSFlfSURfTVQ3NTMwLCBzbyB1c2VycyB3YW50aW5nIHRvIHVzZSB0aGlzIGRyaXZlciBzaG91bGQKJiM0MzsgKiBvdmVycmlkZSB0aGUgUEhZIElEIGluIHRoZSBkZXZpY2UgdHJlZSB0byAwM2EyLjk0MTQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QwkJMHgwM2EyOTQxNAomIzQzOwomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0cxCQkJMHgxMDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzIJCQkweDIwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19HMwkJCTB4MzAwMAomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0c0CQkJMHg0MDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfRzUJCQkweDUwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19HNgkJCTB4NjAwMAomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0c3CQkJMHg3MDAwCiYjNDM7CiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfTDAJCQkweDgwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19MMQkJCTB4OTAwMAomIzQzOyNkZWZpbmUgRUNPTkVUX1BHX0wyCQkJMHhhMDAwCiYjNDM7I2RlZmluZSBFQ09ORVRfUEdfTDMJCQkweGIwMDAKJiM0MzsjZGVmaW5lIEVDT05FVF9QR19MNAkJCTB4YzAwMAomIzQzOwomIzQzOy8qIDQgcG9ydHMgKDgsOSwxMCwxMSkgb3IgMyBwb3J0cyAoOSwxMCwxMSkgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9MRUdBQ1lfUE9SVDBfQUREUgk4CiYjNDM7I2RlZmluZSBFQ09ORVRfRU43NTI2Q19QT1JUMF9BRERSCTkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIENhbGlicmF0aW9uIHBvbGxpbmcgZG9lcyBub3QgY29tcGxldGUgdW50aWwgRUNPTkVUX0NBTF9NSU5fQ1lDTEVTCiYjNDM7ICogY29uc2VjdXRpdmUgJiMzNDtkb25lJiMzNDsgcmVzdWx0cyBhcmUgcmVjZWl2ZWQuIFNlZTogcG9sbF9jYWxfY29tcGxldGUKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfTUlOX0NZQ0xFUwkJMTAKJiM0MzsKJiM0MzsvKgomIzQzOyAqIE1pY3Jvc2Vjb25kcyBwZXIgY2FsaWJyYXRpb24gcG9sbCBjeWNsZSwgY2FsaWJyYXRpb24gdGFrZXMgYXBwcm94aW1hdGVseQomIzQzOyAqIEVDT05FVF9DQUxfQ1lDTEVfVVMgKiBFQ09ORVRfQ0FMX01JTl9DWUNMRVMuIFRvdGFsIHNldHVwIHRpbWUgaXMgdXN1YWxseQomIzQzOyAqIGxlc3MgdGhhbiAxNTB4IHRoaXMgbnVtYmVyLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9DWUNMRV9VUwkJMTAKJiM0MzsKJiM0MzsvKiBUb3RhbCB0aW1lIGFsbG93ZWQgZm9yIGNhbGlicmF0aW9uIHBvbGxpbmcgYmVmb3JlIGVycm9yIGlzIHJldHVybmVkLiAqLwomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9USU1FT1VUX1VTCQkxMDAwMDAKJiM0MzsKJiM0MzsvKgomIzQzOyAqIE5vdGU6IFRoZXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIHdlcmUgd3JpdHRlbiB3aXRob3V0IHRoZSBiZW5lZml0IG9mIHRoZQomIzQzOyAqICAgICAgIGhhcmR3YXJlIHNwZWNpZmljYXRpb24sIHNvIG5hbWVzIGFyZSBnaXZlbiBvbmx5IHdoZXJlIHRoZSBtZWFuaW5nIGlzCiYjNDM7ICogICAgICAgZmFpcmx5IG9idmlvdXMuCiYjNDM7ICovCiYjNDM7CiYjNDM7LyogRzdSMjQgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxfVFlQRV9NQVNLCQlHRU5NQVNLKDE0LCAxMikKJiM0MzsjZGVmaW5lICAgRUNPTkVUX0NBTF9UWVBFX1I1MAkJRklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHg2KQomIzQzOyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfVFhPUwkJRklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHgzKQomIzQzOyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfVFhBTVAJCUZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4NykKJiM0MzsjZGVmaW5lIEVDT05FVF9SNTBfWkNBTF9NQVNLCQlHRU5NQVNLKDExLCA2KQomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTElOX0VONzUyNkMJCUJJVCg0KQomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0VONzUyNkMJCUJJVCgxKQomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9PVVRfRU43NTI2QwkJQklUKDApCiYjNDM7CiYjNDM7LyogTDRSMjMgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9DQUxJTl9MRUdBQ1kJCUJJVCgyKQomIzQzOyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0xFR0FDWQkJQklUKDYpCiYjNDM7I2RlZmluZSBFQ09ORVRfQ0FMX09VVF9MRUdBQ1kJCUJJVCg0KQomIzQzOwomIzQzOyNkZWZpbmUgRUNPTkVUX0RBQ19JTl8yVgkJMHgwZjAKJiM0MzsKJiM0MzsvKiBMNFIxNyAqLwomIzQzOyNkZWZpbmUgRUNPTkVUX1RYT1NfU0lHTgkJQklUKDEzKQomIzQzOyNkZWZpbmUgRUNPTkVUX1RYT1NfTUFHCQkJR0VOTUFTSygxMiwgOCkKJiM0MzsKJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX0RFRkFVTFQJCTAKJiM0MzsjZGVmaW5lIEVDT05FVF9UWE9TX01BWAkJCTMxCiYjNDM7I2RlZmluZSBFQ09ORVRfVFhPU19NSU4JCQktMzEKJiM0MzsKJiM0MzsjZGVmaW5lIEVDT05FVF9SNTBfWkNBTF9ERUZBVUxUCQkweDIwCiYjNDM7I2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfTUFYCQkweDNmCiYjNDM7CiYjNDM7LyogTDRSMjIgKi8KJiM0MzsjZGVmaW5lIEVDT05FVF9SNTBfVFhDQUxfTUFTSwkJR0VOTUFTSygxNSwgOCkKJiM0MzsjZGVmaW5lIEVDT05FVF9SNTBfUlhDQUxfTUFTSwkJR0VOTUFTSyg3LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgRUNPTkVUX1RYQU1QX0RFRkFVTFQJCTB4MTIKJiM0MzsjZGVmaW5lIEVDT05FVF9UWEFNUF9NQVgJCTB4M2YKJiM0MzsKJiM0MzsvKiBaQ0FMIGNvbXBlbnNhdGlvbiB0YWJsZSBwZXIgY2hpcCwgcGVyIHBoeSwgUlggJiM0MzsgVFggKi8KJiM0MztzdHJ1Y3QgY29tcGVuc2F0aW9uIHsKJiM0MzsJczggemNhbF90eDsKJiM0MzsJczggemNhbF9yeDsKJiM0MzsJczggdHhvczsKJiM0MzsJczggYW1wOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjb21wZW5zYXRpb24gZW43NTEyMjFfY29tcFsyXVs0XSA9IHsKJiM0MzsJewomIzQzOwkJLyogTGVnYWN5ICovCiYjNDM7CQl7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gLTQsIC50eG9zID0gMCwgLmFtcCA9IDEgfSwgLyogIDggKi8KJiM0MzsJCXsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSAtNCwgLnR4b3MgPSAxLCAuYW1wID0gMiB9LCAvKiAgOSAqLwomIzQzOwkJeyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IC00LCAudHhvcyA9IDEsIC5hbXAgPSAxIH0sIC8qIDEwICovCiYjNDM7CQl7IC56Y2FsX3R4ID0gLTIsIC56Y2FsX3J4ID0gLTgsIC50eG9zID0gMSwgLmFtcCA9IDEgfSwgLyogMTEgKi8KJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLyogRU43NTI2QyAqLwomIzQzOwkJeyAuemNhbF90eCA9IDMsICAuemNhbF9yeCA9IDYsIC50eG9zID0gMSwgLmFtcCA9IDAgfSwgLyogIDkgKi8KJiM0MzsJCXsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSA1LCAudHhvcyA9IDEsIC5hbXAgPSAtMSB9LCAvKiAxMCAqLwomIzQzOwkJeyAuemNhbF90eCA9IDYsICAuemNhbF9yeCA9IDYsIC50eG9zID0gMSwgLmFtcCA9IC0xIH0sIC8qIDExICovCiYjNDM7CQl7IH0sIC8qIFVudXNlZCAqLwomIzQzOwl9CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgdTggemNhbF90b19yNTBvaG1bNjRdID0gewomIzQzOwkxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjYsIDEyMywgMTIwLCAxMTcsIDExNCwgMTEyLCAxMTAsIDEwNywgMTA1LCAxMDMsCiYjNDM7CTEwMSwgIDk5LCAgOTcsICA3OSwgIDc3LCAgNzUsICA3NCwgIDcyLCAgNzAsICA2OSwgIDY3LCAgNjYsICA2NSwgIDQ3LCAgNDYsICA0NSwKJiM0MzsJIDQzLCAgNDIsICA0MSwgIDQwLCAgMzksICAzOCwgIDM3LCAgMzYsICAzNCwgIDM0LCAgMzMsICAzMiwgIDE1LCAgMTQsICAxMywgIDEyLAomIzQzOwkgMTEsICAxMCwgIDEwLCAgIDksICAgOCwgICA3LCAgIDcsICAgNiwgICA1LCAgIDQsICAgNCwgICAzLCAgIDIsICAgMiwgICAxLCAgIDEKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCB7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGNvbXBlbnNhdGlvbiBnZXRfY3RhYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwl1OCBwaHlfb2Zmc2V0OwomIzQzOwomIzQzOwlwaHlfb2Zmc2V0ID0gcGh5ZGV2LSZndDttZGlvLmFkZHIgLSBzaGFyZWQtJmd0O3BoeWRldl9wMC0mZ3Q7bWRpby5hZGRyOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKHBoeV9vZmZzZXQgJmd0Oz0gQVJSQVlfU0laRShlbjc1MTIyMV9jb21wWzBdKSkpCiYjNDM7CQlyZXR1cm4gKHN0cnVjdCBjb21wZW5zYXRpb24pIHt9OwomIzQzOwomIzQzOwlyZXR1cm4gZW43NTEyMjFfY29tcFtwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Q11bcGh5X29mZnNldF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9jYWxpbl9mbGFnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJdTE2IHNldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7cGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7CiYjNDM7CQkvKiBHN1IyNCBpcyBzaGFyZWQgc28gcGh5X21vZGlmeV9wYWdlZCBpcyByZXF1aXJlZCAqLwomIzQzOwkJc2V0ID0gZW5hYmxlZCA/IEVDT05FVF9DQUxJTl9FTjc1MjZDIDogMDsKJiM0MzsJCXBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LAomIzQzOwkJCQkgRUNPTkVUX0NBTElOX0VONzUyNkMsIHNldCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0xFR0FDWSA6IDA7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MNCwgMjMsIHNldCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IGNhbF9jb21wbGV0ZV9jdHggewomIzQzOwl1MTYgY29uc2VjdXRpdmVfdHJ1ZXMJOiAxNTsKJiM0MzsJYm9vbCBzdGFydGVkCQk6IDE7CiYjNDM7CWJvb2wgb2JzZXJ2ZWRfZmFsc2UJOiAxOwomIzQzOwl1MTYgYWJvcnRlZF90cmllcwk6IDc7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwb2xsX2NhbF9jb21wbGV0ZSAtIHBvbGwgZm9yIGNhbGlicmF0aW9uIGNvbXBsZXRpb24uCiYjNDM7ICoKJiM0MzsgKiBCZWNhdXNlIHNvbWUgbGVnYWN5IGNoaXBzIGFyZSBrbm93biB0byBiZSB1bnJlbGlhYmxlIChmYWxzZSBwb3NpdGl2ZXMpLAomIzQzOyAqIHJlZmVyZW5jZSBjb2RlIGFkZHMgMTAsMDAwdXMgb2YgZml4ZWQgZGVsYXkgcGVyIGNhbGlicmF0aW9uIGN5Y2xlLgomIzQzOyAqIFByYWN0aWNhbGx5LCB0aGVyZSBhcmUgYWJvdXQgMTAtNTAgY2FsaWJyYXRpb24gY3ljbGVzIGZvciBlYWNoIG9mIHRoZQomIzQzOyAqIHRocmVlIHR1bmFibGVzLCBzbyBhZGRpbmcgYSBzaWduaWZpY2FudCBmaXhlZCBkZWxheSBpcyBjb3N0bHkuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGltcGxlbWVudGF0aW9uIGluc3RlYWQgc3RhcnRzIHdpdGggQ0FMSU4gZGlzYWJsZWQsIHBvbGxzIGZvcgomIzQzOyAqIGRvbmUgc3RhdHVzIGZhbHNlLCB0aGVuIGVuYWJsZXMgQ0FMSU4gYW5kIHBvbGxzIHVudGlsIGEgdHJ1ZSBkb25lCiYjNDM7ICogc3RhdHVzIGlzIHJlY29yZGVkIEVDT05FVF9DQUxfTUlOX0NZQ0xFUyB0aW1lcyBjb25zZWN1dGl2ZWx5LgomIzQzOyAqCiYjNDM7ICogQHJldHVybnM6CiYjNDM7ICogICAmbHQ7IDAgb24gZXJyb3IKJiM0MzsgKiAgIDAgbm90IHlldCBjb21wbGV0ZQomIzQzOyAqICAgMSBjb21wbGV0ZSBmYWxzZQomIzQzOyAqICAgMiBjb21wbGV0ZSB0cnVlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBwb2xsX2NhbF9jb21wbGV0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCSAgICAgc3RydWN0IGNhbF9jb21wbGV0ZV9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IGRvbmVfbWFzazsKJiM0MzsJaW50IG91dF9tYXNrOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHsKJiM0MzsJCXJldCA9IHBoeV9yZWFkX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCk7CiYjNDM7CQlkb25lX21hc2sgPSBFQ09ORVRfQ0FMX0RPTkVfRU43NTI2QzsKJiM0MzsJCW91dF9tYXNrID0gRUNPTkVUX0NBTF9PVVRfRU43NTI2QzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHBoeV9yZWFkX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDQsIDIzKTsKJiM0MzsJCWRvbmVfbWFzayA9IEVDT05FVF9DQUxfRE9ORV9MRUdBQ1k7CiYjNDM7CQlvdXRfbWFzayA9IEVDT05FVF9DQUxfT1VUX0xFR0FDWTsKJiM0MzsJfQomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmICgocmV0ICZhbXA7IGRvbmVfbWFzaykgPT0gMCkgewomIzQzOwkJY3R4LSZndDtvYnNlcnZlZF9mYWxzZSA9IHRydWU7CiYjNDM7CQljdHgtJmd0O2Fib3J0ZWRfdHJpZXMgJiM0Mzs9IChjdHgtJmd0O2NvbnNlY3V0aXZlX3RydWVzICZndDsgMCk7CiYjNDM7CQljdHgtJmd0O2NvbnNlY3V0aXZlX3RydWVzID0gMDsKJiM0MzsKJiM0MzsJCWlmICghY3R4LSZndDtzdGFydGVkKSB7CiYjNDM7CQkJc2V0X2NhbGluX2ZsYWcocGh5ZGV2LCB0cnVlKTsKJiM0MzsJCQljdHgtJmd0O3N0YXJ0ZWQgPSB0cnVlOwomIzQzOwkJCXJldHVybiBwb2xsX2NhbF9jb21wbGV0ZShwaHlkZXYsIGN0eCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwljdHgtJmd0O2NvbnNlY3V0aXZlX3RydWVzJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJaWYgKGN0eC0mZ3Q7Y29uc2VjdXRpdmVfdHJ1ZXMgJmx0OyBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgfHwgIWN0eC0mZ3Q7b2JzZXJ2ZWRfZmFsc2UpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGN0eC0mZ3Q7YWJvcnRlZF90cmllcykKJiM0MzsJCXBoeWRldl93YXJuKHBoeWRldiwgJiMzNDtDYWxpYnJhdGlvbiBjeWNsZSAlZCBmYWxzZSBwb3NpdGl2ZXNcbiYjMzQ7LAomIzQzOwkJCSAgICBjdHgtJmd0O2Fib3J0ZWRfdHJpZXMpOwomIzQzOwomIzQzOwlyZXR1cm4gKChyZXQgJmFtcDsgb3V0X21hc2spICE9IDApID8gMiA6IDE7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBvbGxfY2FsX2NvbXBsZXRlIC0gY2hlY2sgZm9yIGNhbGlicmF0aW9uIHJlZ2lzdGVyCiYjNDM7ICogQHJldHVybnM6IC1lcnJvciBvciAxIGlmIGNhbGlicmF0aW9uIHJlc3VsdCBpcyB0cnVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY2FsX2NvbXBsZXRlX2N0eCBjY3R4ID0ge307CiYjNDM7CWludCBvdXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXNldF9jYWxpbl9mbGFnKHBoeWRldiwgZmFsc2UpOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dChwb2xsX2NhbF9jb21wbGV0ZSwgb3V0LCBvdXQgIT0gMCwKJiM0MzsJCQkJRUNPTkVUX0NBTF9DWUNMRV9VUywgRUNPTkVUX0NBTF9USU1FT1VUX1VTLAomIzQzOwkJCQlmYWxzZSwgcGh5ZGV2LCAmYW1wO2NjdHgpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7Q2FsaWJyYXRpb24gdGltZW91dCAlZCAoJWQgLyAlZCAvICVkIC8gJWQpXG4mIzM0OywKJiM0MzsJCQkgICByZXQsIGNjdHguY29uc2VjdXRpdmVfdHJ1ZXMsIGNjdHgub2JzZXJ2ZWRfZmFsc2UsCiYjNDM7CQkJICAgY2N0eC5hYm9ydGVkX3RyaWVzLCBjY3R4LnN0YXJ0ZWQpOwomIzQzOwl9IGVsc2UgaWYgKG91dCAmbHQ7IDApIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O0NhbGlicmF0aW9uIGVycm9yICVkXG4mIzM0Oywgb3V0KTsKJiM0MzsJCXJldCA9IG91dDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IG91dCAmZ3Q7IDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2V0X2NhbGluX2ZsYWcocGh5ZGV2LCBmYWxzZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfcjUwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7CiYjNDM7CWludCB6Y2FsX3N6ID0gQVJSQVlfU0laRSh6Y2FsX3RvX3I1MG9obSk7CiYjNDM7CXU4IHJnX3pjYWxfY3RybCA9IEVDT05FVF9SNTBfWkNBTF9ERUZBVUxUOwomIzQzOwlpbnQgaW5pdGlhbF9jb21wX291dDsKJiM0MzsJaW50IHBvbGFyaXR5ID0gMDsKJiM0MzsJaW50IGNvbXBfb3V0OwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJdTE2IHJ4Y2FsOwomIzQzOwl1MTYgdHhjYWw7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9SNTApOwomIzQzOwllbHNlCiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7CiYjNDM7CiYjNDM7CXBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDEwMDAsIDB4MTAwMCk7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWlmIChwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykKJiM0MzsJCQlwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwKJiM0MzsJCQkJCSBFQ09ORVRfUjUwX1pDQUxfTUFTSywKJiM0MzsJCQkJCSBGSUVMRF9QUkVQKEVDT05FVF9SNTBfWkNBTF9NQVNLLAomIzQzOwkJCQkJCSAgICByZ196Y2FsX2N0cmwpKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjYsCiYjNDM7CQkJCQlyZ196Y2FsX2N0cmwpOwomIzQzOwomIzQzOwkJY29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTsKJiM0MzsJCWlmIChjb21wX291dCAmbHQ7IDApIHsKJiM0MzsJCQlyZXQgPSBjb21wX291dDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChwb2xhcml0eSA9PSAwKSB7CiYjNDM7CQkJLyogRmlyc3QgY3ljbGUgKi8KJiM0MzsJCQlpbml0aWFsX2NvbXBfb3V0ID0gY29tcF9vdXQ7CiYjNDM7CQkJcG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTsKJiM0MzsJCX0gZWxzZSBpZiAoaW5pdGlhbF9jb21wX291dCAhPSBjb21wX291dCkgewomIzQzOwkJCS8qIEZvdW5kICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZ196Y2FsX2N0cmwgJiM0Mzs9IHBvbGFyaXR5OwomIzQzOwomIzQzOwkJaWYgKHJnX3pjYWxfY3RybCAmZ3Q7IEVDT05FVF9SNTBfWkNBTF9NQVgpIHsKJiM0MzsJCQlyZXQgPSAxOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJ4Y2FsID0gbWF4KDAsIG1pbih6Y2FsX3N6IC0gMSwgY3RhYi56Y2FsX3J4ICYjNDM7IHJnX3pjYWxfY3RybCkpOwomIzQzOwl0eGNhbCA9IG1heCgwLCBtaW4oemNhbF9zeiAtIDEsIGN0YWIuemNhbF90eCAmIzQzOyByZ196Y2FsX2N0cmwpKTsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMiwKJiM0MzsJCQlGSUVMRF9QUkVQKEVDT05FVF9SNTBfVFhDQUxfTUFTSywgdHhjYWwpIHwKJiM0MzsJCQlGSUVMRF9QUkVQKEVDT05FVF9SNTBfUlhDQUxfTUFTSywgcnhjYWwpKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CS8qIFplcm8gb3V0IHJlZ2lzdGVycyAqLwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpCiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApOwomIzQzOwllbHNlCiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfdHhfb2Zmc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7CiYjNDM7CWludCBpbml0aWFsX2NvbXBfb3V0OwomIzQzOwlpbnQgcG9sYXJpdHkgPSAwOwomIzQzOwlpbnQgb2Zmc2V0ID0gRUNPTkVUX1RYT1NfREVGQVVMVDsKJiM0MzsJdTE2IG9mZnNldF9iaW47CiYjNDM7CWludCBjb21wX291dDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgyMTAwKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgMHg1MjAwKTsgLyogZml4IE1ESSAqLwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9UWE9TKTsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDQwMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4NDgwMCk7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDRjMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzQsIDIxLCAweDA4MDAsIDB4MDgwMCk7CiYjNDM7CiYjNDM7CXBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAyYzAsIDB4MDJjMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4ODAwMCk7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCW9mZnNldF9iaW4gPSBGSUVMRF9QUkVQKEVDT05FVF9UWE9TX01BRywgYWJzKG9mZnNldCkpOwomIzQzOwkJaWYgKG9mZnNldCAmbHQ7IDApCiYjNDM7CQkJb2Zmc2V0X2JpbiB8PSBFQ09ORVRfVFhPU19TSUdOOwomIzQzOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAxNywgb2Zmc2V0X2Jpbik7CiYjNDM7CiYjNDM7CQljb21wX291dCA9IGVuNzUxMjIxX2ZlcGh5X2NhbF9jeWNsZShwaHlkZXYpOwomIzQzOwkJaWYgKGNvbXBfb3V0ICZsdDsgMCkgewomIzQzOwkJCXJldCA9IGNvbXBfb3V0OwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHBvbGFyaXR5ID09IDApIHsKJiM0MzsJCQkvKiBGaXJzdCBjeWNsZSAqLwomIzQzOwkJCWluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDsKJiM0MzsJCQlwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxOwomIzQzOwkJfSBlbHNlIGlmIChpbml0aWFsX2NvbXBfb3V0ICE9IGNvbXBfb3V0KSB7CiYjNDM7CQkJLyogRm91bmQgKi8KJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9mZnNldCAmIzQzOz0gcG9sYXJpdHk7CiYjNDM7CiYjNDM7CQlpZiAob2Zmc2V0ICZndDsgRUNPTkVUX1RYT1NfTUFYIHx8IG9mZnNldCAmbHQ7IEVDT05FVF9UWE9TX01JTikgewomIzQzOwkJCXJldCA9IDE7CiYjNDM7CQkJb2Zmc2V0ID0gMDsKJiM0MzsJCQlnb3RvIHNldF92YWw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2Zmc2V0ICYjNDM7PSBjdGFiLnR4b3MgKiBwb2xhcml0eTsKJiM0MzsKJiM0MzsJaWYgKG9mZnNldCAmZ3Q7IEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgJmx0OyBFQ09ORVRfVFhPU19NSU4pCiYjNDM7CQlvZmZzZXQgLT0gY3RhYi50eG9zICogcG9sYXJpdHk7CiYjNDM7CiYjNDM7c2V0X3ZhbDoKJiM0MzsJb2Zmc2V0X2JpbiA9IEZJRUxEX1BSRVAoRUNPTkVUX1RYT1NfTUFHLCBhYnMob2Zmc2V0KSk7CiYjNDM7CWlmIChvZmZzZXQgJmx0OyAwKQomIzQzOwkJb2Zmc2V0X2JpbiB8PSBFQ09ORVRfVFhPU19TSUdOOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDQsIDE3LCBvZmZzZXRfYmluKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIDB4MDAwMCk7CiYjNDM7CWVsc2UKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChzaGFyZWQtJmd0O3BoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV90eF9hbXAoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJc3RydWN0IGNvbXBlbnNhdGlvbiBjdGFiID0gZ2V0X2N0YWIocGh5ZGV2KTsKJiM0MzsJaW50IGluaXRpYWxfY29tcF9vdXQ7CiYjNDM7CXU4IHR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUOwomIzQzOwlpbnQgcG9sYXJpdHkgPSAwOwomIzQzOwlpbnQgY29tcF9vdXQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDAsIDB4MjEwMCk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTIwMyk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4ODAwMCB8IEVDT05FVF9EQUNfSU5fMlYpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzQsIDIxLCAweDA4MDApOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAyYzApOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDQsIDIxLCAweDAwMDApOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9UWEFNUCk7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDA2MDApOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC0mZ3Q7cGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweGNhMDApOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwIHwgMHgwNDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIzLCB0eF9hbXApOwomIzQzOwomIzQzOwkJY29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTsKJiM0MzsJCWlmIChjb21wX291dCAmbHQ7IDApIHsKJiM0MzsJCQlyZXQgPSBjb21wX291dDsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChwb2xhcml0eSA9PSAwKSB7CiYjNDM7CQkJLyogRmlyc3QgY3ljbGUgKi8KJiM0MzsJCQlpbml0aWFsX2NvbXBfb3V0ID0gY29tcF9vdXQ7CiYjNDM7CQkJcG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTsKJiM0MzsJCX0gZWxzZSBpZiAoaW5pdGlhbF9jb21wX291dCAhPSBjb21wX291dCkgewomIzQzOwkJCS8qIEZvdW5kICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl0eF9hbXAgJiM0Mzs9IHBvbGFyaXR5OwomIzQzOwomIzQzOwkJaWYgKHR4X2FtcCAmZ3Q7IEVDT05FVF9UWEFNUF9NQVgpIHsKJiM0MzsJCQlyZXQgPSAxOwomIzQzOwkJCXR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUOwomIzQzOwkJCWdvdG8gc2V0X3ZhbDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodHhfYW1wICYjNDM7IGN0YWIuYW1wICZsdDsgRUNPTkVUX1RYQU1QX01BWCkKJiM0MzsJCXR4X2FtcCAmIzQzOz0gY3RhYi5hbXA7CiYjNDM7CiYjNDM7c2V0X3ZhbDoKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykgewomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgMHgwMDAwKTsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MDAwMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLSZndDtwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwl1MTYgbDByMjZfdGVtcDsKJiM0MzsJaW50IHJldDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmICghc2hhcmVkLSZndDtwaHlkZXZfcDApIHsKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O1BvcnQgemVybyBtdXN0IGJlIGNvbmZpZ3VyZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDttZGlvLmFkZHIgJmx0OyBzaGFyZWQtJmd0O3BoeWRldl9wMC0mZ3Q7bWRpby5hZGRyKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKiBHbG9iYWwgcmVnaXN0ZXJzICovCiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNCwgMjYsIDB4ODA0NCk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjEsIDB4MDBlYSk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjcsIDB4MDJmMCk7CiYjNDM7CiYjNDM7CS8qIExvY2FsIHJlZ2lzdGVycyAqLwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweGEwMDApOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDEsIDIyLCAweGYwMDApOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIyLCAweDQ0NDQpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDI0LCAweDBjMGMpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDI4LCAweDdjNDQpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDMwLCAweDAwMDUpOwomIzQzOwlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDE3LCAweDAwMDApOwomIzQzOwomIzQzOwkvKiBGb3IgRTEvRTIsIEUzIHJlcXVpcmVzIDB4MjIyMCwgYnV0IG5vIGtub3duIEVONzUxMjIxIEUzIGNoaXBzIGV4aXN0ICovCiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MjIwMCk7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QykgewomIzQzOwkJIC8qIDEwME1iIHR4IHAyel9taWQsIHoybl9taWQsIHoybl9vdnNfcG9zdCwgbjJ6X21pZCAqLwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyMiwgMHgwMDMwKTsKJiM0MzsJCXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjUsIDB4MDI0OCk7CiYjNDM7CQlwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDI3LCAweDAyZjApOwomIzQzOwkJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyOCwgMHgwMjMwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZF9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWwwcjI2X3RlbXAgPSByZXQ7CiYjNDM7CiYjNDM7CS8qIEJHIHZvbHRhZ2UgKi8KJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0cyLCAyNSwgMHgxMGMwKTsKJiM0MzsKJiM0MzsJLyogTURJICovCiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTYwMyk7CiYjNDM7CiYjNDM7CS8qIGRpc2FibGUgdHggc2xldyBjb250cm9sICovCiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMjEsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgyMTAwKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBlbjc1MTIyMV9mZXBoeV9yNTAocGh5ZGV2KTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgNTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJldCA9IGVuNzUxMjIxX2ZlcGh5X3R4X29mZnNldChwaHlkZXYpOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyA1OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gZW43NTEyMjFfZmVwaHlfdHhfYW1wKHBoeWRldik7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0cxLCAyNiwgMHgwMDAwKTsKJiM0MzsJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgbDByMjZfdGVtcCk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjIsIDB4NDQ0NCk7CiYjNDM7CXBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgzMTAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBwb3J0MCA9IEVDT05FVF9FTjc1MjZDX1BPUlQwX0FERFI7CiYjNDM7CXN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkOwomIzQzOwlzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtwaHlfaWQgIT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpCiYjNDM7CQlwb3J0MCA9IEVDT05FVF9MRUdBQ1lfUE9SVDBfQUREUjsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9waHlfcGFja2FnZV9qb2luKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldiwgcGh5ZGV2LCBwb3J0MCwKJiM0MzsJCQkJICAgIHNpemVvZihzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O21kaW8uYWRkciA9PSBwb3J0MCkKJiM0MzsJCXNoYXJlZC0mZ3Q7cGh5ZGV2X3AwID0gcGh5ZGV2OwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3ByaXYgPSBwcml2OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGVuNzUxMjIxX2ZlcGh5X2RyaXZlcltdID0gewomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpLAomIzQzOwkJLm5hbWUJCT0gJiMzNDtFY29OZXQgRU43NTEyMjEgRkVQSFkmIzM0OywKJiM0MzsJCS5jb25maWdfaW5pdAk9IGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0LAomIzQzOwkJLmNvbmZpZ19pbnRyCT0gZ2VucGh5X25vX2NvbmZpZ19pbnRyLAomIzQzOwkJLmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssCiYjNDM7CQkucHJvYmUJCT0gZW43NTEyMjFfZmVwaHlfcHJvYmUsCiYjNDM7CQkucmVhZF9wYWdlCT0gbXRrX3BoeV9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZQk9IG10a19waHlfd3JpdGVfcGFnZSwKJiM0MzsJfQomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BoeV9kcml2ZXIoZW43NTEyMjFfZmVwaHlfZHJpdmVyKTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGVuNzUxMjIxX2ZlcGh5X3RibFtdID0gewomIzQzOwl7IFBIWV9JRF9NQVRDSF9FWEFDVChFQ09ORVRfRkVQSFlfSURfRU43NTI2QykgfSwKJiM0MzsJeyB9CiYjNDM7fTsKJiM0MzsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtFY29OZXQgU29DIDEwLzEwMCBFdGhlcm5ldCBQSFkgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtDYWxlYiBKYW1lcyBEZUxpc2xlICZsdDtjamRAY2pkbnMuZnImZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzOwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgZW43NTEyMjFfZmVwaHlfdGJsKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDk4CgkJCQkJCQlvdXRwdXQ6IDIxOQoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBDb25jZXJucyBBZGRyZXNzZWQ6IEVjb05ldCBQSFkgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgcmV2aWV3ZWQgdGhlIGNvZGUgZm9yIHRoaXMgbmV3IEVjb05ldCAxMC8xMDAgU29DIEV0aGVybmV0IFBIWSBkcml2ZXIsIGBlY29uZXQtZmUtc29jLmNgLCBhbmQgSSYjMzk7bSBmZWVsaW5nIHByZXR0eSBnb29kIGFib3V0IGl0IGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gSXQmIzM5O3MgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIFBIWSBkcml2ZXIg4oCTIGltcGxlbWVudGluZyBzdGFuZGFyZCBjYWxsYmFja3MgbGlrZSBgY29uZmlnX2luaXRgLCBgcHJvYmVgLCBhbmQgdGhlIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMuIFRoZSBrZXkgaXMgaW4gaG93IGl0IGhhbmRsZXMgbWVtb3J5IGFuZCByZWdpc3RlciBhY2Nlc3MuCgpJIHNlZSBpdCB1dGlsaXplcyBzdGFuZGFyZCBQSFlsaWIgZnVuY3Rpb25zIGxpa2UgYHBoeV93cml0ZV9wYWdlZGAsIGBwaHlfcmVhZF9wYWdlZGAsIGFuZCBgcGh5X21vZGlmeV9wYWdlZGAgdG8gY29uZmlndXJlIHRoZSBQSFkuIEl0IGFsc28gdXNlcyBgZGV2bV9waHlfcGFja2FnZV9qb2luYCBhbmQgYWxsb2NhdGVzIGEgcHJpdmF0ZSBgbXRrX3NvY3BoeV9wcml2YCBzdHJ1Y3R1cmUuIFRoaXMgaXMgYWxsIHN0YW5kYXJkLgoKSW1wb3J0YW50bHksIHRoZXJlJiMzOTtzIG5vIGludGVyYWN0aW9uIHdpdGggdXNlci1zcGFjZSBkYXRhIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBXZSYjMzk7cmUgdGFsa2luZyBkaXJlY3QgTURJTyByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIG9yIHBvdGVudGlhbCBsZWFrcy4KClRoZSBhbGxvY2F0aW9uIG9mIHRoZSBgcHJpdmAgc3RydWN0dXJlIHVzaW5nIGBkZXZtX2t6YWxsb2NgIGlzIGVzcGVjaWFsbHkgcmVhc3N1cmluZy4gVGhhdCYjMzk7cyBhIHplcm8taW5pdGlhbGl6ZWQgYWxsb2NhdGlvbiwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudCB0byBhdm9pZCB0aG9zZSB0cmlja3kgS01TQU4gaXNzdWVzLiBBbmQgYGRldm1fcGh5X3BhY2thZ2Vfam9pbmAgaXRzZWxmIGhhbmRsZXMgdGhlIHNoYXJlZCBzdHJ1Y3R1cmUgaW4gYSBzaW1pbGFyIHNhZmUgbWFubmVyLCBpbnRlcm5hbGx5IGNhbGxpbmcgYGt6YWxsb2NgIG9yIGVxdWl2YWxlbnQsIHNvIHRoYXQmIzM5O3MgZ29vZC4KClRvIGJlIGV4dHJhIHN1cmUsIEkganVzdCBkb3VibGUtY2hlY2tlZCBob3cgYGRldm1fcGh5X3BhY2thZ2Vfam9pbmAgZG9lcyBpdHMgdGhpbmcsIHRvby4gSXQmIzM5O3MgYWxsIHplcm9lZCBvdXQgdGhlcmUsIGluY2x1ZGluZyB0aGUgc2hhcmVkIGRhdGEgYW5kIGBwcml2YC4gSSBzZWUgYHN0cnVjdCBjYWxfY29tcGxldGVfY3R4IGNjdHggPSB7fTtgIGlzIHplcm8taW5pdGlhbGl6ZWQgYW5kIGBnZXRfY3RhYihwaHlkZXYpYCByZXR1cm5zIGEgZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGJ5IHZhbHVlLiBFdmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGRyaXZlciwgdGhlIHVzZSBvZiBzdGFuZGFyZCBhbmQgc2FmZSBtZW1vcnkgYWxsb2NhdGlvbiBtZXRob2RzLCBhbmQgdGhlIGxhY2sgb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgaW50ZXJhY3Rpbmcgd2l0aCB1c2VyIHNwYWNlLCBJJiMzOTttIGNvbmZpZGVudCB3ZSB3b24mIzM5O3QgYmUgaW50cm9kdWNpbmcgYW55IEtNU0FOLXNwZWNpZmljIGJ1Z3MgaGVyZS4gQW55IGlzc3VlcyBhcmUgZ29pbmcgdG8gYmUgcnVuLW9mLXRoZS1taWxsIHRoaW5ncyB0aGF0IEtBU0FOIHdpbGwgY2F0Y2g6IGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0NzLiBUaGUgZHJpdmVyIHByaW1hcmlseSBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZSByZWdpc3RlcnMgdmlhIE1ESU8gKHVzaW5nIHBoeWxpYiBmdW5jdGlvbnMgbGlrZSBwaHlfd3JpdGVfcGFnZWQgYW5kIHBoeV9yZWFkX3BhZ2VkKSBhbmQgcGVyZm9ybXMgY2FsaWJyYXRpb24gcm91dGluZXMuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoZS5nLiwgbXRrX3NvY3BoeV9wcml2IGFuZCB0aGUgc2hhcmVkIHBhY2thZ2UgZGF0YSkgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgZGV2bV9remFsbG9jIG9yIHN0YW5kYXJkIHBoeWxpYiBmdW5jdGlvbnMuIFN0YWNrIHZhcmlhYmxlcyBsaWtlIGNhbF9jb21wbGV0ZV9jdHggYXJlIGFsc28gZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1c2VyLXNwYWNlIEFQSXMsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGxzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeS1kZXBlbmRlbnQgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0NzLiBUaGUgZHJpdmVyIHByaW1hcmlseSBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZSByZWdpc3RlcnMgdmlhIE1ESU8gKHVzaW5nIHBoeWxpYiBmdW5jdGlvbnMgbGlrZSBwaHlfd3JpdGVfcGFnZWQgYW5kIHBoeV9yZWFkX3BhZ2VkKSBhbmQgcGVyZm9ybXMgY2FsaWJyYXRpb24gcm91dGluZXMuIEFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoZS5nLiwgbXRrX3NvY3BoeV9wcml2IGFuZCB0aGUgc2hhcmVkIHBhY2thZ2UgZGF0YSkgYXJlIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgZGV2bV9remFsbG9jIG9yIHN0YW5kYXJkIHBoeWxpYiBmdW5jdGlvbnMuIFN0YWNrIHZhcmlhYmxlcyBsaWtlIGNhbF9jb21wbGV0ZV9jdHggYXJlIGFsc28gZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1c2VyLXNwYWNlIEFQSXMsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGxzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeS1kZXBlbmRlbnQgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MTg6NDIuNjI5NTE4ODA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MDA4NjgzMjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVDT05FVF9GRV9TT0NfUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW43NTEyMjFfZmVwaHlfcHJvYmVcIixcbiAgICBcImVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIEVjb05ldCAxMC8xMDAgU29Dcy4gVGhlIGRyaXZlciBwcmltYXJpbHkgaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIHZpYSBNRElPICh1c2luZyBwaHlsaWIgZnVuY3Rpb25zIGxpa2UgcGh5X3dyaXRlX3BhZ2VkIGFuZCBwaHlfcmVhZF9wYWdlZCkgYW5kIHBlcmZvcm1zIGNhbGlicmF0aW9uIHJvdXRpbmVzLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGUuZy4sIG10a19zb2NwaHlfcHJpdiBhbmQgdGhlIHNoYXJlZCBwYWNrYWdlIGRhdGEpIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGRldm1fa3phbGxvYyBvciBzdGFuZGFyZCBwaHlsaWIgZnVuY3Rpb25zLiBTdGFjayB2YXJpYWJsZXMgbGlrZSBjYWxfY29tcGxldGVfY3R4IGFyZSBhbHNvIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdXNlci1zcGFjZSBBUElzLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3Rscywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnktZGVwZW5kZW50IGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQSFkgZHJpdmVyIGZvciBFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzIChgZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY2ApLiBQSFkgZHJpdmVycyBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgZW11bGF0aW5nIGFuIE1ESU8gYnVzLiBGb3IgZXhhbXBsZSwgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoc3VjaCBhcyBgc21zYzk1eHhgKSB2aWEgdGhlIGB2aGNpYCBkcml2ZXIuIFdoZW4gdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgaXMgcHJvYmVkLCBpdCByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHNjYW5zIGZvciBQSFlzIGJ5IHNlbmRpbmcgTURJTyByZWFkIHJlcXVlc3RzICh3aGljaCB0cmFuc2xhdGUgdG8gVVNCIGNvbnRyb2wgbWVzc2FnZXMpLiBCeSByZXR1cm5pbmcgdGhlIHNwZWNpZmljIFBIWSBJRCAoYDB4MDNhMjk0MTRgKSBkdXJpbmcgdGhlIE1ESU8gc2NhbiwgdGhlIE1ESU8gYnVzIHdpbGwgaW5zdGFudGlhdGUgYSBQSFkgZGV2aWNlIHdpdGggdGhpcyBJRCwgdHJpZ2dlcmluZyB0aGUgcHJvYmUgYW5kIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyBvZiB0aGUgYGVjb25ldC1mZS1zb2NgIFBIWSBkcml2ZXIuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToxODo0Mi42Mjk1MjY3NjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MTQxNDc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0N2JiYzQzNmRlYzI0NTA0YzA3MDMzMGM2ZDQ3Yjc5MTkzMTY4MTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTk6MTg6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IDQ2MGNiNzI2ODg0NTAuLjdjYTNkOGQwOGM2OTMgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC05MjUzLDYgKzkyNTMsMTIgQEAgVzpcXHRodHRwczovL2xpbnV4dHYub3JnXFxuIFE6XFx0aHR0cDovL3BhdGNod29yay5saW51eHR2Lm9yZy9wcm9qZWN0L2xpbnV4LW1lZGlhL2xpc3QvXFxuIEY6XFx0ZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2VjMTAwKlxcbiBcXG4rRUNPTkVUIEVUSEVSTkVUIFBIWSBEUklWRVJcXG4rTTpcXHRDYWxlYiBKYW1lcyBEZUxpc2xlIFxcdTAwM2NjamRAY2pkbnMuZnJcXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitTOlxcdE1haW50YWluZWRcXG4rRjpcXHRkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jXFxuK1xcbiBFQ09ORVQgTUlQUyBQTEFURk9STVxcbiBNOlxcdENhbGViIEphbWVzIERlTGlzbGUgXFx1MDAzY2NqZEBjamRucy5mclxcdTAwM2VcXG4gTDpcXHRsaW51eC1taXBzQHZnZXIua2VybmVsLm9yZ1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXFxuaW5kZXggM2I5Y2Y4MmMwY2IyOC4uNjRhYmY1YjY5NWFiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXFxuQEAgLTEsNCArMSwxOSBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rXFxuK2NvbmZpZyBFQ09ORVRfRkVfU09DX1BIWVxcbitcXHR0cmlzdGF0ZSBcXFwiRWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZc1xcXCJcXG4rXFx0ZGVwZW5kcyBvbiBFQ09ORVQgfHwgQ09NUElMRV9URVNUXFxuK1xcdHNlbGVjdCBNVEtfTkVUX1BIWUxJQlxcbitcXHRzZWxlY3QgUEhZX1BBQ0tBR0VcXG4rXFx0aGVscFxcbitcXHQgIFN1cHBvcnRzIEVjb05ldCBTb0MgYnVpbHQtaW4gMTAvMTAwIEV0aGVybmV0IFBIWXMuXFxuK1xcbitcXHQgIEluY2x1ZGUgc3VwcG9ydCBmb3IgYnVpbHQtaW4gRXRoZXJuZXQgUEhZcyB3aGljaCBhcmUgcHJlc2VudCBpblxcbitcXHQgIEVONzUyNkMgYmFzZWQgU29DcyAoaW5jbHVkaW5nIEVONzUyNkYpLiBJdCBjYW4gYWxzbyB3b3JrIHdpdGhcXG4rXFx0ICBsZWdhY3kgRU43NTEyIEZFIFBIWXMgd2hpY2ggaWRlbnRpZnkgYXMgMDNhMi45NDEyLCBidXQgc2luY2UgdGhpc1xcbitcXHQgIElEIGlzIHVzZWQgYnkgTUVESUFURUtfR0VfUEhZLCB1c2VycyB3YW50aW5nIHRvIGZvcmNlIHRoaXMgZHJpdmVyXFxuK1xcdCAgbXVzdCBvdmVycmlkZSB0aGUgSUQgdG8gMDNhMi45NDE0IGluIHRoZSBkZXZpY2UgdHJlZS5cXG4rXFxuIGNvbmZpZyBNRURJQVRFS18yUDVHRV9QSFlcXG4gXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIDIuNUdiIEV0aGVybmV0IFBIWXNcXFwiXFxuIFxcdGRlcGVuZHMgb24gKEFSTTY0IFxcdTAwMjZcXHUwMDI2IEFSQ0hfTUVESUFURUspIHx8IENPTVBJTEVfVEVTVFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvTWFrZWZpbGVcXG5pbmRleCA2ZjljYWNmN2Y5MDY1Li43MTIzOWU5MmFhNTgxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxcbkBAIC0xLDQgKzEsNSBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK29iai0kKENPTkZJR19FQ09ORVRfRkVfU09DX1BIWSlcXHRcXHQrPSBlY29uZXQtZmUtc29jLm9cXG4gb2JqLSQoQ09ORklHX01FRElBVEVLXzJQNUdFX1BIWSlcXHQrPSBtdGstMnA1Z2Uub1xcbiBvYmotJChDT05GSUdfTUVESUFURUtfRkVfU09DX1BIWSlcXHQrPSBtdGstZmUtc29jLm9cXG4gb2JqLSQoQ09ORklHX01FRElBVEVLX0dFX1BIWSlcXHRcXHQrPSBtdGstZ2Uub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzVkYmIzMmE1ZDFhYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jXFxuQEAgLTAsMCArMSw2MzIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCIuLi9waHlsaWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm10ay5oXFxcIlxcbitcXG4rLypcXG4rICogQW4gb2xkZXIgdmVyc2lvbiBvZiB0aGlzIFBIWSBoYXJkd2FyZSB1c2VzIHRoZSBJRCAwM2EyLjk0MTIuXFxuKyAqIFRoaXMgZHJpdmVyIGRvZXMgbm90IG1hdGNoIG9uIGl0IGJlY2F1c2UgaXQgY29sbGlkZXMgd2l0aFxcbisgKiBNVEtfR1BIWV9JRF9NVDc1MzAsIHNvIHVzZXJzIHdhbnRpbmcgdG8gdXNlIHRoaXMgZHJpdmVyIHNob3VsZFxcbisgKiBvdmVycmlkZSB0aGUgUEhZIElEIGluIHRoZSBkZXZpY2UgdHJlZSB0byAwM2EyLjk0MTQuXFxuKyAqL1xcbisjZGVmaW5lIEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDXFx0XFx0MHgwM2EyOTQxNFxcbitcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzFcXHRcXHRcXHQweDEwMDBcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzJcXHRcXHRcXHQweDIwMDBcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzNcXHRcXHRcXHQweDMwMDBcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzRcXHRcXHRcXHQweDQwMDBcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzVcXHRcXHRcXHQweDUwMDBcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzZcXHRcXHRcXHQweDYwMDBcXG4rI2RlZmluZSBFQ09ORVRfUEdfRzdcXHRcXHRcXHQweDcwMDBcXG4rXFxuKyNkZWZpbmUgRUNPTkVUX1BHX0wwXFx0XFx0XFx0MHg4MDAwXFxuKyNkZWZpbmUgRUNPTkVUX1BHX0wxXFx0XFx0XFx0MHg5MDAwXFxuKyNkZWZpbmUgRUNPTkVUX1BHX0wyXFx0XFx0XFx0MHhhMDAwXFxuKyNkZWZpbmUgRUNPTkVUX1BHX0wzXFx0XFx0XFx0MHhiMDAwXFxuKyNkZWZpbmUgRUNPTkVUX1BHX0w0XFx0XFx0XFx0MHhjMDAwXFxuK1xcbisvKiA0IHBvcnRzICg4LDksMTAsMTEpIG9yIDMgcG9ydHMgKDksMTAsMTEpICovXFxuKyNkZWZpbmUgRUNPTkVUX0xFR0FDWV9QT1JUMF9BRERSXFx0OFxcbisjZGVmaW5lIEVDT05FVF9FTjc1MjZDX1BPUlQwX0FERFJcXHQ5XFxuK1xcbisvKlxcbisgKiBDYWxpYnJhdGlvbiBwb2xsaW5nIGRvZXMgbm90IGNvbXBsZXRlIHVudGlsIEVDT05FVF9DQUxfTUlOX0NZQ0xFU1xcbisgKiBjb25zZWN1dGl2ZSBcXFwiZG9uZVxcXCIgcmVzdWx0cyBhcmUgcmVjZWl2ZWQuIFNlZTogcG9sbF9jYWxfY29tcGxldGVcXG4rICovXFxuKyNkZWZpbmUgRUNPTkVUX0NBTF9NSU5fQ1lDTEVTXFx0XFx0MTBcXG4rXFxuKy8qXFxuKyAqIE1pY3Jvc2Vjb25kcyBwZXIgY2FsaWJyYXRpb24gcG9sbCBjeWNsZSwgY2FsaWJyYXRpb24gdGFrZXMgYXBwcm94aW1hdGVseVxcbisgKiBFQ09ORVRfQ0FMX0NZQ0xFX1VTICogRUNPTkVUX0NBTF9NSU5fQ1lDTEVTLiBUb3RhbCBzZXR1cCB0aW1lIGlzIHVzdWFsbHlcXG4rICogbGVzcyB0aGFuIDE1MHggdGhpcyBudW1iZXIuXFxuKyAqL1xcbisjZGVmaW5lIEVDT05FVF9DQUxfQ1lDTEVfVVNcXHRcXHQxMFxcbitcXG4rLyogVG90YWwgdGltZSBhbGxvd2VkIGZvciBjYWxpYnJhdGlvbiBwb2xsaW5nIGJlZm9yZSBlcnJvciBpcyByZXR1cm5lZC4gKi9cXG4rI2RlZmluZSBFQ09ORVRfQ0FMX1RJTUVPVVRfVVNcXHRcXHQxMDAwMDBcXG4rXFxuKy8qXFxuKyAqIE5vdGU6IFRoZXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIHdlcmUgd3JpdHRlbiB3aXRob3V0IHRoZSBiZW5lZml0IG9mIHRoZVxcbisgKiAgICAgICBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBzbyBuYW1lcyBhcmUgZ2l2ZW4gb25seSB3aGVyZSB0aGUgbWVhbmluZyBpc1xcbisgKiAgICAgICBmYWlybHkgb2J2aW91cy5cXG4rICovXFxuK1xcbisvKiBHN1IyNCAqL1xcbisjZGVmaW5lIEVDT05FVF9DQUxfVFlQRV9NQVNLXFx0XFx0R0VOTUFTSygxNCwgMTIpXFxuKyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfUjUwXFx0XFx0RklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHg2KVxcbisjZGVmaW5lICAgRUNPTkVUX0NBTF9UWVBFX1RYT1NcXHRcXHRGSUVMRF9QUkVQKEVDT05FVF9DQUxfVFlQRV9NQVNLLCAweDMpXFxuKyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfVFhBTVBcXHRcXHRGSUVMRF9QUkVQKEVDT05FVF9DQUxfVFlQRV9NQVNLLCAweDcpXFxuKyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX01BU0tcXHRcXHRHRU5NQVNLKDExLCA2KVxcbisjZGVmaW5lIEVDT05FVF9DQUxJTl9FTjc1MjZDXFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0VONzUyNkNcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSBFQ09ORVRfQ0FMX09VVF9FTjc1MjZDXFx0XFx0QklUKDApXFxuK1xcbisvKiBMNFIyMyAqL1xcbisjZGVmaW5lIEVDT05FVF9DQUxJTl9MRUdBQ1lcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBFQ09ORVRfQ0FMX0RPTkVfTEVHQUNZXFx0XFx0QklUKDYpXFxuKyNkZWZpbmUgRUNPTkVUX0NBTF9PVVRfTEVHQUNZXFx0XFx0QklUKDQpXFxuK1xcbisjZGVmaW5lIEVDT05FVF9EQUNfSU5fMlZcXHRcXHQweDBmMFxcbitcXG4rLyogTDRSMTcgKi9cXG4rI2RlZmluZSBFQ09ORVRfVFhPU19TSUdOXFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIEVDT05FVF9UWE9TX01BR1xcdFxcdFxcdEdFTk1BU0soMTIsIDgpXFxuK1xcbisjZGVmaW5lIEVDT05FVF9UWE9TX0RFRkFVTFRcXHRcXHQwXFxuKyNkZWZpbmUgRUNPTkVUX1RYT1NfTUFYXFx0XFx0XFx0MzFcXG4rI2RlZmluZSBFQ09ORVRfVFhPU19NSU5cXHRcXHRcXHQtMzFcXG4rXFxuKyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX0RFRkFVTFRcXHRcXHQweDIwXFxuKyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX01BWFxcdFxcdDB4M2ZcXG4rXFxuKy8qIEw0UjIyICovXFxuKyNkZWZpbmUgRUNPTkVUX1I1MF9UWENBTF9NQVNLXFx0XFx0R0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBFQ09ORVRfUjUwX1JYQ0FMX01BU0tcXHRcXHRHRU5NQVNLKDcsIDApXFxuK1xcbisjZGVmaW5lIEVDT05FVF9UWEFNUF9ERUZBVUxUXFx0XFx0MHgxMlxcbisjZGVmaW5lIEVDT05FVF9UWEFNUF9NQVhcXHRcXHQweDNmXFxuK1xcbisvKiBaQ0FMIGNvbXBlbnNhdGlvbiB0YWJsZSBwZXIgY2hpcCwgcGVyIHBoeSwgUlggKyBUWCAqL1xcbitzdHJ1Y3QgY29tcGVuc2F0aW9uIHtcXG4rXFx0czggemNhbF90eDtcXG4rXFx0czggemNhbF9yeDtcXG4rXFx0czggdHhvcztcXG4rXFx0czggYW1wO1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wZW5zYXRpb24gZW43NTEyMjFfY29tcFsyXVs0XSA9IHtcXG4rXFx0e1xcbitcXHRcXHQvKiBMZWdhY3kgKi9cXG4rXFx0XFx0eyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IC00LCAudHhvcyA9IDAsIC5hbXAgPSAxIH0sIC8qICA4ICovXFxuK1xcdFxcdHsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSAtNCwgLnR4b3MgPSAxLCAuYW1wID0gMiB9LCAvKiAgOSAqL1xcbitcXHRcXHR7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gLTQsIC50eG9zID0gMSwgLmFtcCA9IDEgfSwgLyogMTAgKi9cXG4rXFx0XFx0eyAuemNhbF90eCA9IC0yLCAuemNhbF9yeCA9IC04LCAudHhvcyA9IDEsIC5hbXAgPSAxIH0sIC8qIDExICovXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LyogRU43NTI2QyAqL1xcbitcXHRcXHR7IC56Y2FsX3R4ID0gMywgIC56Y2FsX3J4ID0gNiwgLnR4b3MgPSAxLCAuYW1wID0gMCB9LCAvKiAgOSAqL1xcbitcXHRcXHR7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gNSwgLnR4b3MgPSAxLCAuYW1wID0gLTEgfSwgLyogMTAgKi9cXG4rXFx0XFx0eyAuemNhbF90eCA9IDYsICAuemNhbF9yeCA9IDYsIC50eG9zID0gMSwgLmFtcCA9IC0xIH0sIC8qIDExICovXFxuK1xcdFxcdHsgfSwgLyogVW51c2VkICovXFxuK1xcdH1cXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCB1OCB6Y2FsX3RvX3I1MG9obVs2NF0gPSB7XFxuK1xcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNiwgMTIzLCAxMjAsIDExNywgMTE0LCAxMTIsIDExMCwgMTA3LCAxMDUsIDEwMyxcXG4rXFx0MTAxLCAgOTksICA5NywgIDc5LCAgNzcsICA3NSwgIDc0LCAgNzIsICA3MCwgIDY5LCAgNjcsICA2NiwgIDY1LCAgNDcsICA0NiwgIDQ1LFxcbitcXHQgNDMsICA0MiwgIDQxLCAgNDAsICAzOSwgIDM4LCAgMzcsICAzNiwgIDM0LCAgMzQsICAzMywgIDMyLCAgMTUsICAxNCwgIDEzLCAgMTIsXFxuK1xcdCAxMSwgIDEwLCAgMTAsICAgOSwgICA4LCAgIDcsICAgNywgICA2LCAgIDUsICAgNCwgICA0LCAgIDMsICAgMiwgICAyLCAgIDEsICAgMVxcbit9O1xcbitcXG4rc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkIHtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9wMDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgY29tcGVuc2F0aW9uIGdldF9jdGFiKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHR1OCBwaHlfb2Zmc2V0O1xcbitcXG4rXFx0cGh5X29mZnNldCA9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyIC0gc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDAtXFx1MDAzZW1kaW8uYWRkcjtcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UocGh5X29mZnNldCBcXHUwMDNlPSBBUlJBWV9TSVpFKGVuNzUxMjIxX2NvbXBbMF0pKSlcXG4rXFx0XFx0cmV0dXJuIChzdHJ1Y3QgY29tcGVuc2F0aW9uKSB7fTtcXG4rXFxuK1xcdHJldHVybiBlbjc1MTIyMV9jb21wW3BoeWRldi1cXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDXVtwaHlfb2Zmc2V0XTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0X2NhbGluX2ZsYWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGVkKVxcbit7XFxuK1xcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0dTE2IHNldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xcbitcXHRcXHQvKiBHN1IyNCBpcyBzaGFyZWQgc28gcGh5X21vZGlmeV9wYWdlZCBpcyByZXF1aXJlZCAqL1xcbitcXHRcXHRzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0VONzUyNkMgOiAwO1xcbitcXHRcXHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCxcXG4rXFx0XFx0XFx0XFx0IEVDT05FVF9DQUxJTl9FTjc1MjZDLCBzZXQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0xFR0FDWSA6IDA7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChzaGFyZWQtXFx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0w0LCAyMywgc2V0KTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdHJ1Y3QgY2FsX2NvbXBsZXRlX2N0eCB7XFxuK1xcdHUxNiBjb25zZWN1dGl2ZV90cnVlc1xcdDogMTU7XFxuK1xcdGJvb2wgc3RhcnRlZFxcdFxcdDogMTtcXG4rXFx0Ym9vbCBvYnNlcnZlZF9mYWxzZVxcdDogMTtcXG4rXFx0dTE2IGFib3J0ZWRfdHJpZXNcXHQ6IDc7XFxuK307XFxuK1xcbisvKipcXG4rICogcG9sbF9jYWxfY29tcGxldGUgLSBwb2xsIGZvciBjYWxpYnJhdGlvbiBjb21wbGV0aW9uLlxcbisgKlxcbisgKiBCZWNhdXNlIHNvbWUgbGVnYWN5IGNoaXBzIGFyZSBrbm93biB0byBiZSB1bnJlbGlhYmxlIChmYWxzZSBwb3NpdGl2ZXMpLFxcbisgKiByZWZlcmVuY2UgY29kZSBhZGRzIDEwLDAwMHVzIG9mIGZpeGVkIGRlbGF5IHBlciBjYWxpYnJhdGlvbiBjeWNsZS5cXG4rICogUHJhY3RpY2FsbHksIHRoZXJlIGFyZSBhYm91dCAxMC01MCBjYWxpYnJhdGlvbiBjeWNsZXMgZm9yIGVhY2ggb2YgdGhlXFxuKyAqIHRocmVlIHR1bmFibGVzLCBzbyBhZGRpbmcgYSBzaWduaWZpY2FudCBmaXhlZCBkZWxheSBpcyBjb3N0bHkuXFxuKyAqXFxuKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gaW5zdGVhZCBzdGFydHMgd2l0aCBDQUxJTiBkaXNhYmxlZCwgcG9sbHMgZm9yXFxuKyAqIGRvbmUgc3RhdHVzIGZhbHNlLCB0aGVuIGVuYWJsZXMgQ0FMSU4gYW5kIHBvbGxzIHVudGlsIGEgdHJ1ZSBkb25lXFxuKyAqIHN0YXR1cyBpcyByZWNvcmRlZCBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgdGltZXMgY29uc2VjdXRpdmVseS5cXG4rICpcXG4rICogQHJldHVybnM6XFxuKyAqICAgXFx1MDAzYyAwIG9uIGVycm9yXFxuKyAqICAgMCBub3QgeWV0IGNvbXBsZXRlXFxuKyAqICAgMSBjb21wbGV0ZSBmYWxzZVxcbisgKiAgIDIgY29tcGxldGUgdHJ1ZVxcbisgKi9cXG4rc3RhdGljIGludCBwb2xsX2NhbF9jb21wbGV0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBjYWxfY29tcGxldGVfY3R4ICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgZG9uZV9tYXNrO1xcbitcXHRpbnQgb3V0X21hc2s7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHtcXG4rXFx0XFx0cmV0ID0gcGh5X3JlYWRfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0KTtcXG4rXFx0XFx0ZG9uZV9tYXNrID0gRUNPTkVUX0NBTF9ET05FX0VONzUyNkM7XFxuK1xcdFxcdG91dF9tYXNrID0gRUNPTkVUX0NBTF9PVVRfRU43NTI2QztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gcGh5X3JlYWRfcGFnZWQoc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MNCwgMjMpO1xcbitcXHRcXHRkb25lX21hc2sgPSBFQ09ORVRfQ0FMX0RPTkVfTEVHQUNZO1xcbitcXHRcXHRvdXRfbWFzayA9IEVDT05FVF9DQUxfT1VUX0xFR0FDWTtcXG4rXFx0fVxcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmICgocmV0IFxcdTAwMjYgZG9uZV9tYXNrKSA9PSAwKSB7XFxuK1xcdFxcdGN0eC1cXHUwMDNlb2JzZXJ2ZWRfZmFsc2UgPSB0cnVlO1xcbitcXHRcXHRjdHgtXFx1MDAzZWFib3J0ZWRfdHJpZXMgKz0gKGN0eC1cXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMgXFx1MDAzZSAwKTtcXG4rXFx0XFx0Y3R4LVxcdTAwM2Vjb25zZWN1dGl2ZV90cnVlcyA9IDA7XFxuK1xcbitcXHRcXHRpZiAoIWN0eC1cXHUwMDNlc3RhcnRlZCkge1xcbitcXHRcXHRcXHRzZXRfY2FsaW5fZmxhZyhwaHlkZXYsIHRydWUpO1xcbitcXHRcXHRcXHRjdHgtXFx1MDAzZXN0YXJ0ZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gcG9sbF9jYWxfY29tcGxldGUocGh5ZGV2LCBjdHgpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0Y3R4LVxcdTAwM2Vjb25zZWN1dGl2ZV90cnVlcysrO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMgXFx1MDAzYyBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgfHwgIWN0eC1cXHUwMDNlb2JzZXJ2ZWRfZmFsc2UpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNlYWJvcnRlZF90cmllcylcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiQ2FsaWJyYXRpb24gY3ljbGUgJWQgZmFsc2UgcG9zaXRpdmVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgY3R4LVxcdTAwM2VhYm9ydGVkX3RyaWVzKTtcXG4rXFxuK1xcdHJldHVybiAoKHJldCBcXHUwMDI2IG91dF9tYXNrKSAhPSAwKSA/IDIgOiAxO1xcbit9XFxuK1xcbisvKipcXG4rICogcG9sbF9jYWxfY29tcGxldGUgLSBjaGVjayBmb3IgY2FsaWJyYXRpb24gcmVnaXN0ZXJcXG4rICogQHJldHVybnM6IC1lcnJvciBvciAxIGlmIGNhbGlicmF0aW9uIHJlc3VsdCBpcyB0cnVlLlxcbisgKi9cXG4rc3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgY2FsX2NvbXBsZXRlX2N0eCBjY3R4ID0ge307XFxuK1xcdGludCBvdXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzZXRfY2FsaW5fZmxhZyhwaHlkZXYsIGZhbHNlKTtcXG4rXFxuK1xcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHBvbGxfY2FsX2NvbXBsZXRlLCBvdXQsIG91dCAhPSAwLFxcbitcXHRcXHRcXHRcXHRFQ09ORVRfQ0FMX0NZQ0xFX1VTLCBFQ09ORVRfQ0FMX1RJTUVPVVRfVVMsXFxuK1xcdFxcdFxcdFxcdGZhbHNlLCBwaHlkZXYsIFxcdTAwMjZjY3R4KTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiQ2FsaWJyYXRpb24gdGltZW91dCAlZCAoJWQgLyAlZCAvICVkIC8gJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICByZXQsIGNjdHguY29uc2VjdXRpdmVfdHJ1ZXMsIGNjdHgub2JzZXJ2ZWRfZmFsc2UsXFxuK1xcdFxcdFxcdCAgIGNjdHguYWJvcnRlZF90cmllcywgY2N0eC5zdGFydGVkKTtcXG4rXFx0fSBlbHNlIGlmIChvdXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiQ2FsaWJyYXRpb24gZXJyb3IgJWRcXFxcblxcXCIsIG91dCk7XFxuK1xcdFxcdHJldCA9IG91dDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gb3V0IFxcdTAwM2UgMTtcXG4rXFx0fVxcbitcXG4rXFx0c2V0X2NhbGluX2ZsYWcocGh5ZGV2LCBmYWxzZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfcjUwKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgY29tcGVuc2F0aW9uIGN0YWIgPSBnZXRfY3RhYihwaHlkZXYpO1xcbitcXHRpbnQgemNhbF9zeiA9IEFSUkFZX1NJWkUoemNhbF90b19yNTBvaG0pO1xcbitcXHR1OCByZ196Y2FsX2N0cmwgPSBFQ09ORVRfUjUwX1pDQUxfREVGQVVMVDtcXG4rXFx0aW50IGluaXRpYWxfY29tcF9vdXQ7XFxuK1xcdGludCBwb2xhcml0eSA9IDA7XFxuK1xcdGludCBjb21wX291dDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdHUxNiByeGNhbDtcXG4rXFx0dTE2IHR4Y2FsO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxcbitcXHRcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfUjUwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7XFxuK1xcbitcXHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgxMDAwLCAweDEwMDApO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpXFxuK1xcdFxcdFxcdHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LFxcbitcXHRcXHRcXHRcXHRcXHQgRUNPTkVUX1I1MF9aQ0FMX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCBGSUVMRF9QUkVQKEVDT05FVF9SNTBfWkNBTF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgcmdfemNhbF9jdHJsKSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cXHUwMDNlcGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI2LFxcbitcXHRcXHRcXHRcXHRcXHRyZ196Y2FsX2N0cmwpO1xcbitcXG4rXFx0XFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKGNvbXBfb3V0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRyZXQgPSBjb21wX291dDtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChwb2xhcml0eSA9PSAwKSB7XFxuK1xcdFxcdFxcdC8qIEZpcnN0IGN5Y2xlICovXFxuK1xcdFxcdFxcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcXG4rXFx0XFx0XFx0cG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTtcXG4rXFx0XFx0fSBlbHNlIGlmIChpbml0aWFsX2NvbXBfb3V0ICE9IGNvbXBfb3V0KSB7XFxuK1xcdFxcdFxcdC8qIEZvdW5kICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZ196Y2FsX2N0cmwgKz0gcG9sYXJpdHk7XFxuK1xcbitcXHRcXHRpZiAocmdfemNhbF9jdHJsIFxcdTAwM2UgRUNPTkVUX1I1MF9aQ0FMX01BWCkge1xcbitcXHRcXHRcXHRyZXQgPSAxO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyeGNhbCA9IG1heCgwLCBtaW4oemNhbF9zeiAtIDEsIGN0YWIuemNhbF9yeCArIHJnX3pjYWxfY3RybCkpO1xcbitcXHR0eGNhbCA9IG1heCgwLCBtaW4oemNhbF9zeiAtIDEsIGN0YWIuemNhbF90eCArIHJnX3pjYWxfY3RybCkpO1xcbitcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMixcXG4rXFx0XFx0XFx0RklFTERfUFJFUChFQ09ORVRfUjUwX1RYQ0FMX01BU0ssIHR4Y2FsKSB8XFxuK1xcdFxcdFxcdEZJRUxEX1BSRVAoRUNPTkVUX1I1MF9SWENBTF9NQVNLLCByeGNhbCkpO1xcbitcXG4rb3V0OlxcbitcXHQvKiBaZXJvIG91dCByZWdpc3RlcnMgKi9cXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcXG4rXFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgMHgwMDAwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7XFxuK1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV90eF9vZmZzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XFxuK1xcdGludCBpbml0aWFsX2NvbXBfb3V0O1xcbitcXHRpbnQgcG9sYXJpdHkgPSAwO1xcbitcXHRpbnQgb2Zmc2V0ID0gRUNPTkVUX1RYT1NfREVGQVVMVDtcXG4rXFx0dTE2IG9mZnNldF9iaW47XFxuK1xcdGludCBjb21wX291dDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDAsIDB4MjEwMCk7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTIwMCk7IC8qIGZpeCBNREkgKi9cXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xcbitcXHRcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfVFhPUyk7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDQwMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChzaGFyZWQtXFx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHg0ODAwKTtcXG4rXFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHg0YzAwKTtcXG4rXFx0fVxcbitcXG4rXFx0cGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNCwgMjEsIDB4MDgwMCwgMHgwODAwKTtcXG4rXFxuK1xcdHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAyYzAsIDB4MDJjMCk7XFxuK1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDApO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRvZmZzZXRfYmluID0gRklFTERfUFJFUChFQ09ORVRfVFhPU19NQUcsIGFicyhvZmZzZXQpKTtcXG4rXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdG9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjtcXG4rXFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMTcsIG9mZnNldF9iaW4pO1xcbitcXG4rXFx0XFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKGNvbXBfb3V0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRyZXQgPSBjb21wX291dDtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChwb2xhcml0eSA9PSAwKSB7XFxuK1xcdFxcdFxcdC8qIEZpcnN0IGN5Y2xlICovXFxuK1xcdFxcdFxcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcXG4rXFx0XFx0XFx0cG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTtcXG4rXFx0XFx0fSBlbHNlIGlmIChpbml0aWFsX2NvbXBfb3V0ICE9IGNvbXBfb3V0KSB7XFxuK1xcdFxcdFxcdC8qIEZvdW5kICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvZmZzZXQgKz0gcG9sYXJpdHk7XFxuK1xcbitcXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2UgRUNPTkVUX1RYT1NfTUFYIHx8IG9mZnNldCBcXHUwMDNjIEVDT05FVF9UWE9TX01JTikge1xcbitcXHRcXHRcXHRyZXQgPSAxO1xcbitcXHRcXHRcXHRvZmZzZXQgPSAwO1xcbitcXHRcXHRcXHRnb3RvIHNldF92YWw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0b2Zmc2V0ICs9IGN0YWIudHhvcyAqIHBvbGFyaXR5O1xcbitcXG4rXFx0aWYgKG9mZnNldCBcXHUwMDNlIEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgXFx1MDAzYyBFQ09ORVRfVFhPU19NSU4pXFxuK1xcdFxcdG9mZnNldCAtPSBjdGFiLnR4b3MgKiBwb2xhcml0eTtcXG4rXFxuK3NldF92YWw6XFxuK1xcdG9mZnNldF9iaW4gPSBGSUVMRF9QUkVQKEVDT05FVF9UWE9TX01BRywgYWJzKG9mZnNldCkpO1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2MgMClcXG4rXFx0XFx0b2Zmc2V0X2JpbiB8PSBFQ09ORVRfVFhPU19TSUdOO1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDQsIDE3LCBvZmZzZXRfYmluKTtcXG4rXFxuK291dDpcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxcbitcXHRcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xcbitcXHRlbHNlXFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChzaGFyZWQtXFx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcXG4rXFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3R4X2FtcChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0c3RydWN0IGNvbXBlbnNhdGlvbiBjdGFiID0gZ2V0X2N0YWIocGh5ZGV2KTtcXG4rXFx0aW50IGluaXRpYWxfY29tcF9vdXQ7XFxuK1xcdHU4IHR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUO1xcbitcXHRpbnQgcG9sYXJpdHkgPSAwO1xcbitcXHRpbnQgY29tcF9vdXQ7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApO1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCAweDUyMDMpO1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzIsIDI1LCAweDEwYzApO1xcbitcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0cxLCAyNiwgMHg4MDAwIHwgRUNPTkVUX0RBQ19JTl8yVik7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNCwgMjEsIDB4MDgwMCk7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MDJjMCk7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMjEsIDB4MDAwMCk7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHtcXG4rXFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgRUNPTkVUX0NBTF9UWVBFX1RYQU1QKTtcXG4rXFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwNjAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cXHUwMDNlcGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDMsIDI1LCAweGNhMDApO1xcbitcXHRcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweGNhMDAgfCAweDA0MDApO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjMsIHR4X2FtcCk7XFxuK1xcbitcXHRcXHRjb21wX291dCA9IGVuNzUxMjIxX2ZlcGh5X2NhbF9jeWNsZShwaHlkZXYpO1xcbitcXHRcXHRpZiAoY29tcF9vdXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdHJldCA9IGNvbXBfb3V0O1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHBvbGFyaXR5ID09IDApIHtcXG4rXFx0XFx0XFx0LyogRmlyc3QgY3ljbGUgKi9cXG4rXFx0XFx0XFx0aW5pdGlhbF9jb21wX291dCA9IGNvbXBfb3V0O1xcbitcXHRcXHRcXHRwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxO1xcbitcXHRcXHR9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHtcXG4rXFx0XFx0XFx0LyogRm91bmQgKi9cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHR4X2FtcCArPSBwb2xhcml0eTtcXG4rXFxuK1xcdFxcdGlmICh0eF9hbXAgXFx1MDAzZSBFQ09ORVRfVFhBTVBfTUFYKSB7XFxuK1xcdFxcdFxcdHJldCA9IDE7XFxuK1xcdFxcdFxcdHR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUO1xcbitcXHRcXHRcXHRnb3RvIHNldF92YWw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHR4X2FtcCArIGN0YWIuYW1wIFxcdTAwM2MgRUNPTkVUX1RYQU1QX01BWClcXG4rXFx0XFx0dHhfYW1wICs9IGN0YWIuYW1wO1xcbitcXG4rc2V0X3ZhbDpcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTtcXG4rXFxuK291dDpcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIDB4MDAwMCk7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MDAwMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChzaGFyZWQtXFx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdHUxNiBsMHIyNl90ZW1wO1xcbitcXHRpbnQgcmV0O1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmICghc2hhcmVkLVxcdTAwM2VwaHlkZXZfcDApIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJQb3J0IHplcm8gbXVzdCBiZSBjb25maWd1cmVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgXFx1MDAzYyBzaGFyZWQtXFx1MDAzZXBoeWRldl9wMC1cXHUwMDNlbWRpby5hZGRyKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKiBHbG9iYWwgcmVnaXN0ZXJzICovXFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNCwgMjYsIDB4ODA0NCk7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjEsIDB4MDBlYSk7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjcsIDB4MDJmMCk7XFxuK1xcbitcXHQvKiBMb2NhbCByZWdpc3RlcnMgKi9cXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHhhMDAwKTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wxLCAyMiwgMHhmMDAwKTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMiwgMHg0NDQ0KTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyNCwgMHgwYzBjKTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyOCwgMHg3YzQ0KTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAzMCwgMHgwMDA1KTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAxNywgMHgwMDAwKTtcXG4rXFxuK1xcdC8qIEZvciBFMS9FMiwgRTMgcmVxdWlyZXMgMHgyMjIwLCBidXQgbm8ga25vd24gRU43NTEyMjEgRTMgY2hpcHMgZXhpc3QgKi9cXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgyMjAwKTtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xcbitcXHRcXHQgLyogMTAwTWIgdHggcDJ6X21pZCwgejJuX21pZCwgejJuX292c19wb3N0LCBuMnpfbWlkICovXFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjIsIDB4MDAzMCk7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjUsIDB4MDI0OCk7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjcsIDB4MDJmMCk7XFxuK1xcdFxcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjgsIDB4MDIzMCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHBoeV9yZWFkX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0bDByMjZfdGVtcCA9IHJldDtcXG4rXFxuK1xcdC8qIEJHIHZvbHRhZ2UgKi9cXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0cyLCAyNSwgMHgxMGMwKTtcXG4rXFxuK1xcdC8qIE1ESSAqL1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCAweDU2MDMpO1xcbitcXG4rXFx0LyogZGlzYWJsZSB0eCBzbGV3IGNvbnRyb2wgKi9cXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcXG4rXFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgyMTAwKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA1OyBpKyspIHtcXG4rXFx0XFx0cmV0ID0gZW43NTEyMjFfZmVwaHlfcjUwKHBoeWRldik7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDU7IGkrKykge1xcbitcXHRcXHRyZXQgPSBlbjc1MTIyMV9mZXBoeV90eF9vZmZzZXQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNTsgaSsrKSB7XFxuK1xcdFxcdHJldCA9IGVuNzUxMjIxX2ZlcGh5X3R4X2FtcChwaHlkZXYpO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7XFxuK1xcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIGwwcjI2X3RlbXApO1xcbitcXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDAwMDApO1xcbitcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMiwgMHg0NDQ0KTtcXG4rXFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDMxMDApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcG9ydDAgPSBFQ09ORVRfRU43NTI2Q19QT1JUMF9BRERSO1xcbitcXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZDtcXG4rXFx0c3RydWN0IG10a19zb2NwaHlfcHJpdiAqcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZXBoeV9pZCAhPSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcXG4rXFx0XFx0cG9ydDAgPSBFQ09ORVRfTEVHQUNZX1BPUlQwX0FERFI7XFxuK1xcbitcXHRyZXQgPSBkZXZtX3BoeV9wYWNrYWdlX2pvaW4oXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIHBoeWRldiwgcG9ydDAsXFxuK1xcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgPT0gcG9ydDApXFxuK1xcdFxcdHNoYXJlZC1cXHUwMDNlcGh5ZGV2X3AwID0gcGh5ZGV2O1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW43NTEyMjFfZmVwaHlfZHJpdmVyW10gPSB7XFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJFY29OZXQgRU43NTEyMjEgRkVQSFlcXFwiLFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHQ9IGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0LFxcbitcXHRcXHQuY29uZmlnX2ludHJcXHQ9IGdlbnBoeV9ub19jb25maWdfaW50cixcXG4rXFx0XFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssXFxuK1xcdFxcdC5wcm9iZVxcdFxcdD0gZW43NTEyMjFfZmVwaHlfcHJvYmUsXFxuK1xcdFxcdC5yZWFkX3BhZ2VcXHQ9IG10a19waHlfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZVxcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxcbitcXHR9XFxuK307XFxuK1xcbittb2R1bGVfcGh5X2RyaXZlcihlbjc1MTIyMV9mZXBoeV9kcml2ZXIpO1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBlbjc1MTIyMV9mZXBoeV90YmxbXSA9IHtcXG4rXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIH0sXFxuK1xcdHsgfVxcbit9O1xcbitcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJFY29OZXQgU29DIDEwLzEwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkNhbGViIEphbWVzIERlTGlzbGUgXFx1MDAzY2NqZEBjamRucy5mclxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbitcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBlbjc1MTIyMV9mZXBoeV90YmwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToxODo0My4xOTE5MjM4NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzY2NjI3MDkxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRUNPTkVUX0ZFX1NPQ19QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbjc1MTIyMV9mZXBoeV9wcm9iZVwiLFxuICAgIFwiZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBIWSBkcml2ZXIgZm9yIEVjb05ldCAxMC8xMDAgU29DIEV0aGVybmV0IFBIWXMgKGBkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jYCkuIFBIWSBkcml2ZXJzIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBlbXVsYXRpbmcgYW4gTURJTyBidXMuIEZvciBleGFtcGxlLCBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBVU0IgbmV0d29yayBhZGFwdGVyIChzdWNoIGFzIGBzbXNjOTV4eGApIHZpYSB0aGUgYHZoY2lgIGRyaXZlci4gV2hlbiB0aGUgZW11bGF0ZWQgVVNCIGRldmljZSBpcyBwcm9iZWQsIGl0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBhbmQgc2NhbnMgZm9yIFBIWXMgYnkgc2VuZGluZyBNRElPIHJlYWQgcmVxdWVzdHMgKHdoaWNoIHRyYW5zbGF0ZSB0byBVU0IgY29udHJvbCBtZXNzYWdlcykuIEJ5IHJldHVybmluZyB0aGUgc3BlY2lmaWMgUEhZIElEIChgMHgwM2EyOTQxNGApIGR1cmluZyB0aGUgTURJTyBzY2FuLCB0aGUgTURJTyBidXMgd2lsbCBpbnN0YW50aWF0ZSBhIFBIWSBkZXZpY2Ugd2l0aCB0aGlzIElELCB0cmlnZ2VyaW5nIHRoZSBwcm9iZSBhbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIG9mIHRoZSBgZWNvbmV0LWZlLXNvY2AgUEhZIGRyaXZlci4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0N2JiYzQzNmRlYzI0NTA0YzA3MDMzMGM2ZDQ3Yjc5MTkzMTY4MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxOToxODo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDQ2MGNiNzI2ODg0NTAuLjdjYTNkOGQwOGM2OTMgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC05MjUzLDYgKzkyNTMsMTIgQEAgVzpcdGh0dHBzOi8vbGludXh0di5vcmdcbiBROlx0aHR0cDovL3BhdGNod29yay5saW51eHR2Lm9yZy9wcm9qZWN0L2xpbnV4LW1lZGlhL2xpc3QvXG4gRjpcdGRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9lYzEwMCpcbiBcbitFQ09ORVQgRVRIRVJORVQgUEhZIERSSVZFUlxuK006XHRDYWxlYiBKYW1lcyBEZUxpc2xlIFx1MDAzY2NqZEBjamRucy5mclx1MDAzZVxuK0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4rUzpcdE1haW50YWluZWRcbitGOlx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY1xuK1xuIEVDT05FVCBNSVBTIFBMQVRGT1JNXG4gTTpcdENhbGViIEphbWVzIERlTGlzbGUgXHUwMDNjY2pkQGNqZG5zLmZyXHUwMDNlXG4gTDpcdGxpbnV4LW1pcHNAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xuaW5kZXggM2I5Y2Y4MmMwY2IyOC4uNjRhYmY1YjY5NWFiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xuQEAgLTEsNCArMSwxOSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK1xuK2NvbmZpZyBFQ09ORVRfRkVfU09DX1BIWVxuK1x0dHJpc3RhdGUgXCJFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzXCJcbitcdGRlcGVuZHMgb24gRUNPTkVUIHx8IENPTVBJTEVfVEVTVFxuK1x0c2VsZWN0IE1US19ORVRfUEhZTElCXG4rXHRzZWxlY3QgUEhZX1BBQ0tBR0VcbitcdGhlbHBcbitcdCAgU3VwcG9ydHMgRWNvTmV0IFNvQyBidWlsdC1pbiAxMC8xMDAgRXRoZXJuZXQgUEhZcy5cbitcbitcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBidWlsdC1pbiBFdGhlcm5ldCBQSFlzIHdoaWNoIGFyZSBwcmVzZW50IGluXG4rXHQgIEVONzUyNkMgYmFzZWQgU29DcyAoaW5jbHVkaW5nIEVONzUyNkYpLiBJdCBjYW4gYWxzbyB3b3JrIHdpdGhcbitcdCAgbGVnYWN5IEVONzUxMiBGRSBQSFlzIHdoaWNoIGlkZW50aWZ5IGFzIDAzYTIuOTQxMiwgYnV0IHNpbmNlIHRoaXNcbitcdCAgSUQgaXMgdXNlZCBieSBNRURJQVRFS19HRV9QSFksIHVzZXJzIHdhbnRpbmcgdG8gZm9yY2UgdGhpcyBkcml2ZXJcbitcdCAgbXVzdCBvdmVycmlkZSB0aGUgSUQgdG8gMDNhMi45NDE0IGluIHRoZSBkZXZpY2UgdHJlZS5cbitcbiBjb25maWcgTUVESUFURUtfMlA1R0VfUEhZXG4gXHR0cmlzdGF0ZSBcIk1lZGlhVGVrIDIuNUdiIEV0aGVybmV0IFBIWXNcIlxuIFx0ZGVwZW5kcyBvbiAoQVJNNjQgXHUwMDI2XHUwMDI2IEFSQ0hfTUVESUFURUspIHx8IENPTVBJTEVfVEVTVFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxuaW5kZXggNmY5Y2FjZjdmOTA2NS4uNzEyMzllOTJhYTU4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL01ha2VmaWxlXG5AQCAtMSw0ICsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rb2JqLSQoQ09ORklHX0VDT05FVF9GRV9TT0NfUEhZKVx0XHQrPSBlY29uZXQtZmUtc29jLm9cbiBvYmotJChDT05GSUdfTUVESUFURUtfMlA1R0VfUEhZKVx0Kz0gbXRrLTJwNWdlLm9cbiBvYmotJChDT05GSUdfTUVESUFURUtfRkVfU09DX1BIWSlcdCs9IG10ay1mZS1zb2Mub1xuIG9iai0kKENPTkZJR19NRURJQVRFS19HRV9QSFkpXHRcdCs9IG10ay1nZS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNWRiYjMyYTVkMWFiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jXG5AQCAtMCwwICsxLDYzMiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJtdGsuaFwiXG4rXG4rLypcbisgKiBBbiBvbGRlciB2ZXJzaW9uIG9mIHRoaXMgUEhZIGhhcmR3YXJlIHVzZXMgdGhlIElEIDAzYTIuOTQxMi5cbisgKiBUaGlzIGRyaXZlciBkb2VzIG5vdCBtYXRjaCBvbiBpdCBiZWNhdXNlIGl0IGNvbGxpZGVzIHdpdGhcbisgKiBNVEtfR1BIWV9JRF9NVDc1MzAsIHNvIHVzZXJzIHdhbnRpbmcgdG8gdXNlIHRoaXMgZHJpdmVyIHNob3VsZFxuKyAqIG92ZXJyaWRlIHRoZSBQSFkgSUQgaW4gdGhlIGRldmljZSB0cmVlIHRvIDAzYTIuOTQxNC5cbisgKi9cbisjZGVmaW5lIEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDXHRcdDB4MDNhMjk0MTRcbitcbisjZGVmaW5lIEVDT05FVF9QR19HMVx0XHRcdDB4MTAwMFxuKyNkZWZpbmUgRUNPTkVUX1BHX0cyXHRcdFx0MHgyMDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfRzNcdFx0XHQweDMwMDBcbisjZGVmaW5lIEVDT05FVF9QR19HNFx0XHRcdDB4NDAwMFxuKyNkZWZpbmUgRUNPTkVUX1BHX0c1XHRcdFx0MHg1MDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfRzZcdFx0XHQweDYwMDBcbisjZGVmaW5lIEVDT05FVF9QR19HN1x0XHRcdDB4NzAwMFxuK1xuKyNkZWZpbmUgRUNPTkVUX1BHX0wwXHRcdFx0MHg4MDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfTDFcdFx0XHQweDkwMDBcbisjZGVmaW5lIEVDT05FVF9QR19MMlx0XHRcdDB4YTAwMFxuKyNkZWZpbmUgRUNPTkVUX1BHX0wzXHRcdFx0MHhiMDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfTDRcdFx0XHQweGMwMDBcbitcbisvKiA0IHBvcnRzICg4LDksMTAsMTEpIG9yIDMgcG9ydHMgKDksMTAsMTEpICovXG4rI2RlZmluZSBFQ09ORVRfTEVHQUNZX1BPUlQwX0FERFJcdDhcbisjZGVmaW5lIEVDT05FVF9FTjc1MjZDX1BPUlQwX0FERFJcdDlcbitcbisvKlxuKyAqIENhbGlicmF0aW9uIHBvbGxpbmcgZG9lcyBub3QgY29tcGxldGUgdW50aWwgRUNPTkVUX0NBTF9NSU5fQ1lDTEVTXG4rICogY29uc2VjdXRpdmUgXCJkb25lXCIgcmVzdWx0cyBhcmUgcmVjZWl2ZWQuIFNlZTogcG9sbF9jYWxfY29tcGxldGVcbisgKi9cbisjZGVmaW5lIEVDT05FVF9DQUxfTUlOX0NZQ0xFU1x0XHQxMFxuK1xuKy8qXG4rICogTWljcm9zZWNvbmRzIHBlciBjYWxpYnJhdGlvbiBwb2xsIGN5Y2xlLCBjYWxpYnJhdGlvbiB0YWtlcyBhcHByb3hpbWF0ZWx5XG4rICogRUNPTkVUX0NBTF9DWUNMRV9VUyAqIEVDT05FVF9DQUxfTUlOX0NZQ0xFUy4gVG90YWwgc2V0dXAgdGltZSBpcyB1c3VhbGx5XG4rICogbGVzcyB0aGFuIDE1MHggdGhpcyBudW1iZXIuXG4rICovXG4rI2RlZmluZSBFQ09ORVRfQ0FMX0NZQ0xFX1VTXHRcdDEwXG4rXG4rLyogVG90YWwgdGltZSBhbGxvd2VkIGZvciBjYWxpYnJhdGlvbiBwb2xsaW5nIGJlZm9yZSBlcnJvciBpcyByZXR1cm5lZC4gKi9cbisjZGVmaW5lIEVDT05FVF9DQUxfVElNRU9VVF9VU1x0XHQxMDAwMDBcbitcbisvKlxuKyAqIE5vdGU6IFRoZXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIHdlcmUgd3JpdHRlbiB3aXRob3V0IHRoZSBiZW5lZml0IG9mIHRoZVxuKyAqICAgICAgIGhhcmR3YXJlIHNwZWNpZmljYXRpb24sIHNvIG5hbWVzIGFyZSBnaXZlbiBvbmx5IHdoZXJlIHRoZSBtZWFuaW5nIGlzXG4rICogICAgICAgZmFpcmx5IG9idmlvdXMuXG4rICovXG4rXG4rLyogRzdSMjQgKi9cbisjZGVmaW5lIEVDT05FVF9DQUxfVFlQRV9NQVNLXHRcdEdFTk1BU0soMTQsIDEyKVxuKyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfUjUwXHRcdEZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4NilcbisjZGVmaW5lICAgRUNPTkVUX0NBTF9UWVBFX1RYT1NcdFx0RklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHgzKVxuKyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfVFhBTVBcdFx0RklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHg3KVxuKyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX01BU0tcdFx0R0VOTUFTSygxMSwgNilcbisjZGVmaW5lIEVDT05FVF9DQUxJTl9FTjc1MjZDXHRcdEJJVCg0KVxuKyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0VONzUyNkNcdFx0QklUKDEpXG4rI2RlZmluZSBFQ09ORVRfQ0FMX09VVF9FTjc1MjZDXHRcdEJJVCgwKVxuK1xuKy8qIEw0UjIzICovXG4rI2RlZmluZSBFQ09ORVRfQ0FMSU5fTEVHQUNZXHRcdEJJVCgyKVxuKyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0xFR0FDWVx0XHRCSVQoNilcbisjZGVmaW5lIEVDT05FVF9DQUxfT1VUX0xFR0FDWVx0XHRCSVQoNClcbitcbisjZGVmaW5lIEVDT05FVF9EQUNfSU5fMlZcdFx0MHgwZjBcbitcbisvKiBMNFIxNyAqL1xuKyNkZWZpbmUgRUNPTkVUX1RYT1NfU0lHTlx0XHRCSVQoMTMpXG4rI2RlZmluZSBFQ09ORVRfVFhPU19NQUdcdFx0XHRHRU5NQVNLKDEyLCA4KVxuK1xuKyNkZWZpbmUgRUNPTkVUX1RYT1NfREVGQVVMVFx0XHQwXG4rI2RlZmluZSBFQ09ORVRfVFhPU19NQVhcdFx0XHQzMVxuKyNkZWZpbmUgRUNPTkVUX1RYT1NfTUlOXHRcdFx0LTMxXG4rXG4rI2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfREVGQVVMVFx0XHQweDIwXG4rI2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfTUFYXHRcdDB4M2ZcbitcbisvKiBMNFIyMiAqL1xuKyNkZWZpbmUgRUNPTkVUX1I1MF9UWENBTF9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBFQ09ORVRfUjUwX1JYQ0FMX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuK1xuKyNkZWZpbmUgRUNPTkVUX1RYQU1QX0RFRkFVTFRcdFx0MHgxMlxuKyNkZWZpbmUgRUNPTkVUX1RYQU1QX01BWFx0XHQweDNmXG4rXG4rLyogWkNBTCBjb21wZW5zYXRpb24gdGFibGUgcGVyIGNoaXAsIHBlciBwaHksIFJYICsgVFggKi9cbitzdHJ1Y3QgY29tcGVuc2F0aW9uIHtcbitcdHM4IHpjYWxfdHg7XG4rXHRzOCB6Y2FsX3J4O1xuK1x0czggdHhvcztcbitcdHM4IGFtcDtcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGVuc2F0aW9uIGVuNzUxMjIxX2NvbXBbMl1bNF0gPSB7XG4rXHR7XG4rXHRcdC8qIExlZ2FjeSAqL1xuK1x0XHR7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gLTQsIC50eG9zID0gMCwgLmFtcCA9IDEgfSwgLyogIDggKi9cbitcdFx0eyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IC00LCAudHhvcyA9IDEsIC5hbXAgPSAyIH0sIC8qICA5ICovXG4rXHRcdHsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSAtNCwgLnR4b3MgPSAxLCAuYW1wID0gMSB9LCAvKiAxMCAqL1xuK1x0XHR7IC56Y2FsX3R4ID0gLTIsIC56Y2FsX3J4ID0gLTgsIC50eG9zID0gMSwgLmFtcCA9IDEgfSwgLyogMTEgKi9cbitcdH0sXG4rXHR7XG4rXHRcdC8qIEVONzUyNkMgKi9cbitcdFx0eyAuemNhbF90eCA9IDMsICAuemNhbF9yeCA9IDYsIC50eG9zID0gMSwgLmFtcCA9IDAgfSwgLyogIDkgKi9cbitcdFx0eyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IDUsIC50eG9zID0gMSwgLmFtcCA9IC0xIH0sIC8qIDEwICovXG4rXHRcdHsgLnpjYWxfdHggPSA2LCAgLnpjYWxfcnggPSA2LCAudHhvcyA9IDEsIC5hbXAgPSAtMSB9LCAvKiAxMSAqL1xuK1x0XHR7IH0sIC8qIFVudXNlZCAqL1xuK1x0fVxuK307XG4rXG4rc3RhdGljIGNvbnN0IHU4IHpjYWxfdG9fcjUwb2htWzY0XSA9IHtcbitcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNiwgMTIzLCAxMjAsIDExNywgMTE0LCAxMTIsIDExMCwgMTA3LCAxMDUsIDEwMyxcbitcdDEwMSwgIDk5LCAgOTcsICA3OSwgIDc3LCAgNzUsICA3NCwgIDcyLCAgNzAsICA2OSwgIDY3LCAgNjYsICA2NSwgIDQ3LCAgNDYsICA0NSxcbitcdCA0MywgIDQyLCAgNDEsICA0MCwgIDM5LCAgMzgsICAzNywgIDM2LCAgMzQsICAzNCwgIDMzLCAgMzIsICAxNSwgIDE0LCAgMTMsICAxMixcbitcdCAxMSwgIDEwLCAgMTAsICAgOSwgICA4LCAgIDcsICAgNywgICA2LCAgIDUsICAgNCwgICA0LCAgIDMsICAgMiwgICAyLCAgIDEsICAgMVxuK307XG4rXG4rc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkIHtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGNvbXBlbnNhdGlvbiBnZXRfY3RhYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHU4IHBoeV9vZmZzZXQ7XG4rXG4rXHRwaHlfb2Zmc2V0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAtXHUwMDNlbWRpby5hZGRyO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShwaHlfb2Zmc2V0IFx1MDAzZT0gQVJSQVlfU0laRShlbjc1MTIyMV9jb21wWzBdKSkpXG4rXHRcdHJldHVybiAoc3RydWN0IGNvbXBlbnNhdGlvbikge307XG4rXG4rXHRyZXR1cm4gZW43NTEyMjFfY29tcFtwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDXVtwaHlfb2Zmc2V0XTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X2NhbGluX2ZsYWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGVkKVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHUxNiBzZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xuK1x0XHQvKiBHN1IyNCBpcyBzaGFyZWQgc28gcGh5X21vZGlmeV9wYWdlZCBpcyByZXF1aXJlZCAqL1xuK1x0XHRzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0VONzUyNkMgOiAwO1xuK1x0XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCxcbitcdFx0XHRcdCBFQ09ORVRfQ0FMSU5fRU43NTI2Qywgc2V0KTtcbitcdH0gZWxzZSB7XG4rXHRcdHNldCA9IGVuYWJsZWQgPyBFQ09ORVRfQ0FMSU5fTEVHQUNZIDogMDtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MNCwgMjMsIHNldCk7XG4rXHR9XG4rfVxuK1xuK3N0cnVjdCBjYWxfY29tcGxldGVfY3R4IHtcbitcdHUxNiBjb25zZWN1dGl2ZV90cnVlc1x0OiAxNTtcbitcdGJvb2wgc3RhcnRlZFx0XHQ6IDE7XG4rXHRib29sIG9ic2VydmVkX2ZhbHNlXHQ6IDE7XG4rXHR1MTYgYWJvcnRlZF90cmllc1x0OiA3O1xuK307XG4rXG4rLyoqXG4rICogcG9sbF9jYWxfY29tcGxldGUgLSBwb2xsIGZvciBjYWxpYnJhdGlvbiBjb21wbGV0aW9uLlxuKyAqXG4rICogQmVjYXVzZSBzb21lIGxlZ2FjeSBjaGlwcyBhcmUga25vd24gdG8gYmUgdW5yZWxpYWJsZSAoZmFsc2UgcG9zaXRpdmVzKSxcbisgKiByZWZlcmVuY2UgY29kZSBhZGRzIDEwLDAwMHVzIG9mIGZpeGVkIGRlbGF5IHBlciBjYWxpYnJhdGlvbiBjeWNsZS5cbisgKiBQcmFjdGljYWxseSwgdGhlcmUgYXJlIGFib3V0IDEwLTUwIGNhbGlicmF0aW9uIGN5Y2xlcyBmb3IgZWFjaCBvZiB0aGVcbisgKiB0aHJlZSB0dW5hYmxlcywgc28gYWRkaW5nIGEgc2lnbmlmaWNhbnQgZml4ZWQgZGVsYXkgaXMgY29zdGx5LlxuKyAqXG4rICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIHN0YXJ0cyB3aXRoIENBTElOIGRpc2FibGVkLCBwb2xscyBmb3JcbisgKiBkb25lIHN0YXR1cyBmYWxzZSwgdGhlbiBlbmFibGVzIENBTElOIGFuZCBwb2xscyB1bnRpbCBhIHRydWUgZG9uZVxuKyAqIHN0YXR1cyBpcyByZWNvcmRlZCBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgdGltZXMgY29uc2VjdXRpdmVseS5cbisgKlxuKyAqIEByZXR1cm5zOlxuKyAqICAgXHUwMDNjIDAgb24gZXJyb3JcbisgKiAgIDAgbm90IHlldCBjb21wbGV0ZVxuKyAqICAgMSBjb21wbGV0ZSBmYWxzZVxuKyAqICAgMiBjb21wbGV0ZSB0cnVlXG4rICovXG4rc3RhdGljIGludCBwb2xsX2NhbF9jb21wbGV0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdCAgICAgc3RydWN0IGNhbF9jb21wbGV0ZV9jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgZG9uZV9tYXNrO1xuK1x0aW50IG91dF9tYXNrO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4rXHRcdHJldCA9IHBoeV9yZWFkX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCk7XG4rXHRcdGRvbmVfbWFzayA9IEVDT05FVF9DQUxfRE9ORV9FTjc1MjZDO1xuK1x0XHRvdXRfbWFzayA9IEVDT05FVF9DQUxfT1VUX0VONzUyNkM7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBwaHlfcmVhZF9wYWdlZChzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDQsIDIzKTtcbitcdFx0ZG9uZV9tYXNrID0gRUNPTkVUX0NBTF9ET05FX0xFR0FDWTtcbitcdFx0b3V0X21hc2sgPSBFQ09ORVRfQ0FMX09VVF9MRUdBQ1k7XG4rXHR9XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKChyZXQgXHUwMDI2IGRvbmVfbWFzaykgPT0gMCkge1xuK1x0XHRjdHgtXHUwMDNlb2JzZXJ2ZWRfZmFsc2UgPSB0cnVlO1xuK1x0XHRjdHgtXHUwMDNlYWJvcnRlZF90cmllcyArPSAoY3R4LVx1MDAzZWNvbnNlY3V0aXZlX3RydWVzIFx1MDAzZSAwKTtcbitcdFx0Y3R4LVx1MDAzZWNvbnNlY3V0aXZlX3RydWVzID0gMDtcbitcbitcdFx0aWYgKCFjdHgtXHUwMDNlc3RhcnRlZCkge1xuK1x0XHRcdHNldF9jYWxpbl9mbGFnKHBoeWRldiwgdHJ1ZSk7XG4rXHRcdFx0Y3R4LVx1MDAzZXN0YXJ0ZWQgPSB0cnVlO1xuK1x0XHRcdHJldHVybiBwb2xsX2NhbF9jb21wbGV0ZShwaHlkZXYsIGN0eCk7XG4rXHRcdH1cbitcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRjdHgtXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMrKztcbitcbitcdGlmIChjdHgtXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMgXHUwMDNjIEVDT05FVF9DQUxfTUlOX0NZQ0xFUyB8fCAhY3R4LVx1MDAzZW9ic2VydmVkX2ZhbHNlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChjdHgtXHUwMDNlYWJvcnRlZF90cmllcylcbitcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcIkNhbGlicmF0aW9uIGN5Y2xlICVkIGZhbHNlIHBvc2l0aXZlc1xcblwiLFxuK1x0XHRcdCAgICBjdHgtXHUwMDNlYWJvcnRlZF90cmllcyk7XG4rXG4rXHRyZXR1cm4gKChyZXQgXHUwMDI2IG91dF9tYXNrKSAhPSAwKSA/IDIgOiAxO1xuK31cbitcbisvKipcbisgKiBwb2xsX2NhbF9jb21wbGV0ZSAtIGNoZWNrIGZvciBjYWxpYnJhdGlvbiByZWdpc3RlclxuKyAqIEByZXR1cm5zOiAtZXJyb3Igb3IgMSBpZiBjYWxpYnJhdGlvbiByZXN1bHQgaXMgdHJ1ZS5cbisgKi9cbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X2NhbF9jeWNsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBjYWxfY29tcGxldGVfY3R4IGNjdHggPSB7fTtcbitcdGludCBvdXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0c2V0X2NhbGluX2ZsYWcocGh5ZGV2LCBmYWxzZSk7XG4rXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChwb2xsX2NhbF9jb21wbGV0ZSwgb3V0LCBvdXQgIT0gMCxcbitcdFx0XHRcdEVDT05FVF9DQUxfQ1lDTEVfVVMsIEVDT05FVF9DQUxfVElNRU9VVF9VUyxcbitcdFx0XHRcdGZhbHNlLCBwaHlkZXYsIFx1MDAyNmNjdHgpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJDYWxpYnJhdGlvbiB0aW1lb3V0ICVkICglZCAvICVkIC8gJWQgLyAlZClcXG5cIixcbitcdFx0XHQgICByZXQsIGNjdHguY29uc2VjdXRpdmVfdHJ1ZXMsIGNjdHgub2JzZXJ2ZWRfZmFsc2UsXG4rXHRcdFx0ICAgY2N0eC5hYm9ydGVkX3RyaWVzLCBjY3R4LnN0YXJ0ZWQpO1xuK1x0fSBlbHNlIGlmIChvdXQgXHUwMDNjIDApIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiQ2FsaWJyYXRpb24gZXJyb3IgJWRcXG5cIiwgb3V0KTtcbitcdFx0cmV0ID0gb3V0O1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gb3V0IFx1MDAzZSAxO1xuK1x0fVxuK1xuK1x0c2V0X2NhbGluX2ZsYWcocGh5ZGV2LCBmYWxzZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3I1MChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XG4rXHRpbnQgemNhbF9zeiA9IEFSUkFZX1NJWkUoemNhbF90b19yNTBvaG0pO1xuK1x0dTggcmdfemNhbF9jdHJsID0gRUNPTkVUX1I1MF9aQ0FMX0RFRkFVTFQ7XG4rXHRpbnQgaW5pdGlhbF9jb21wX291dDtcbitcdGludCBwb2xhcml0eSA9IDA7XG4rXHRpbnQgY29tcF9vdXQ7XG4rXHRpbnQgcmV0ID0gMDtcbitcdHUxNiByeGNhbDtcbitcdHUxNiB0eGNhbDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfUjUwKTtcbitcdGVsc2VcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7XG4rXG4rXHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgxMDAwLCAweDEwMDApO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcbitcdFx0XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCxcbitcdFx0XHRcdFx0IEVDT05FVF9SNTBfWkNBTF9NQVNLLFxuK1x0XHRcdFx0XHQgRklFTERfUFJFUChFQ09ORVRfUjUwX1pDQUxfTUFTSyxcbitcdFx0XHRcdFx0XHQgICAgcmdfemNhbF9jdHJsKSk7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNixcbitcdFx0XHRcdFx0cmdfemNhbF9jdHJsKTtcbitcbitcdFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcbitcdFx0aWYgKGNvbXBfb3V0IFx1MDAzYyAwKSB7XG4rXHRcdFx0cmV0ID0gY29tcF9vdXQ7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKHBvbGFyaXR5ID09IDApIHtcbitcdFx0XHQvKiBGaXJzdCBjeWNsZSAqL1xuK1x0XHRcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcbitcdFx0XHRwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxO1xuK1x0XHR9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHtcbitcdFx0XHQvKiBGb3VuZCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHJnX3pjYWxfY3RybCArPSBwb2xhcml0eTtcbitcbitcdFx0aWYgKHJnX3pjYWxfY3RybCBcdTAwM2UgRUNPTkVUX1I1MF9aQ0FMX01BWCkge1xuK1x0XHRcdHJldCA9IDE7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHJ4Y2FsID0gbWF4KDAsIG1pbih6Y2FsX3N6IC0gMSwgY3RhYi56Y2FsX3J4ICsgcmdfemNhbF9jdHJsKSk7XG4rXHR0eGNhbCA9IG1heCgwLCBtaW4oemNhbF9zeiAtIDEsIGN0YWIuemNhbF90eCArIHJnX3pjYWxfY3RybCkpO1xuK1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMixcbitcdFx0XHRGSUVMRF9QUkVQKEVDT05FVF9SNTBfVFhDQUxfTUFTSywgdHhjYWwpIHxcbitcdFx0XHRGSUVMRF9QUkVQKEVDT05FVF9SNTBfUlhDQUxfTUFTSywgcnhjYWwpKTtcbitcbitvdXQ6XG4rXHQvKiBaZXJvIG91dCByZWdpc3RlcnMgKi9cbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgMHgwMDAwKTtcbitcdGVsc2VcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV90eF9vZmZzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRzdHJ1Y3QgY29tcGVuc2F0aW9uIGN0YWIgPSBnZXRfY3RhYihwaHlkZXYpO1xuK1x0aW50IGluaXRpYWxfY29tcF9vdXQ7XG4rXHRpbnQgcG9sYXJpdHkgPSAwO1xuK1x0aW50IG9mZnNldCA9IEVDT05FVF9UWE9TX0RFRkFVTFQ7XG4rXHR1MTYgb2Zmc2V0X2JpbjtcbitcdGludCBjb21wX291dDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgMHg1MjAwKTsgLyogZml4IE1ESSAqL1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgRUNPTkVUX0NBTF9UWVBFX1RYT1MpO1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDA0MDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4NDgwMCk7XG4rXHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4NGMwMCk7XG4rXHR9XG4rXG4rXHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyMSwgMHgwODAwLCAweDA4MDApO1xuK1xuK1x0cGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MDJjMCwgMHgwMmMwKTtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4ODAwMCk7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdG9mZnNldF9iaW4gPSBGSUVMRF9QUkVQKEVDT05FVF9UWE9TX01BRywgYWJzKG9mZnNldCkpO1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzYyAwKVxuK1x0XHRcdG9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjtcbitcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAxNywgb2Zmc2V0X2Jpbik7XG4rXG4rXHRcdGNvbXBfb3V0ID0gZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHBoeWRldik7XG4rXHRcdGlmIChjb21wX291dCBcdTAwM2MgMCkge1xuK1x0XHRcdHJldCA9IGNvbXBfb3V0O1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXG4rXHRcdGlmIChwb2xhcml0eSA9PSAwKSB7XG4rXHRcdFx0LyogRmlyc3QgY3ljbGUgKi9cbitcdFx0XHRpbml0aWFsX2NvbXBfb3V0ID0gY29tcF9vdXQ7XG4rXHRcdFx0cG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTtcbitcdFx0fSBlbHNlIGlmIChpbml0aWFsX2NvbXBfb3V0ICE9IGNvbXBfb3V0KSB7XG4rXHRcdFx0LyogRm91bmQgKi9cbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRvZmZzZXQgKz0gcG9sYXJpdHk7XG4rXG4rXHRcdGlmIChvZmZzZXQgXHUwMDNlIEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgXHUwMDNjIEVDT05FVF9UWE9TX01JTikge1xuK1x0XHRcdHJldCA9IDE7XG4rXHRcdFx0b2Zmc2V0ID0gMDtcbitcdFx0XHRnb3RvIHNldF92YWw7XG4rXHRcdH1cbitcdH1cbitcbitcdG9mZnNldCArPSBjdGFiLnR4b3MgKiBwb2xhcml0eTtcbitcbitcdGlmIChvZmZzZXQgXHUwMDNlIEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgXHUwMDNjIEVDT05FVF9UWE9TX01JTilcbitcdFx0b2Zmc2V0IC09IGN0YWIudHhvcyAqIHBvbGFyaXR5O1xuK1xuK3NldF92YWw6XG4rXHRvZmZzZXRfYmluID0gRklFTERfUFJFUChFQ09ORVRfVFhPU19NQUcsIGFicyhvZmZzZXQpKTtcbitcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4rXHRcdG9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMTcsIG9mZnNldF9iaW4pO1xuK1xuK291dDpcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xuK1x0ZWxzZVxuK1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3R4X2FtcChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XG4rXHRpbnQgaW5pdGlhbF9jb21wX291dDtcbitcdHU4IHR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUO1xuK1x0aW50IHBvbGFyaXR5ID0gMDtcbitcdGludCBjb21wX291dDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgMHg1MjAzKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDAgfCBFQ09ORVRfREFDX0lOXzJWKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNCwgMjEsIDB4MDgwMCk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAyYzApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4rXHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9UWEFNUCk7XG4rXHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDYwMCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwKTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwIHwgMHgwNDAwKTtcbitcdH1cbitcbitcdGZvciAoOzspIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTtcbitcbitcdFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcbitcdFx0aWYgKGNvbXBfb3V0IFx1MDAzYyAwKSB7XG4rXHRcdFx0cmV0ID0gY29tcF9vdXQ7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKHBvbGFyaXR5ID09IDApIHtcbitcdFx0XHQvKiBGaXJzdCBjeWNsZSAqL1xuK1x0XHRcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcbitcdFx0XHRwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxO1xuK1x0XHR9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHtcbitcdFx0XHQvKiBGb3VuZCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHR4X2FtcCArPSBwb2xhcml0eTtcbitcbitcdFx0aWYgKHR4X2FtcCBcdTAwM2UgRUNPTkVUX1RYQU1QX01BWCkge1xuK1x0XHRcdHJldCA9IDE7XG4rXHRcdFx0dHhfYW1wID0gRUNPTkVUX1RYQU1QX0RFRkFVTFQ7XG4rXHRcdFx0Z290byBzZXRfdmFsO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAodHhfYW1wICsgY3RhYi5hbXAgXHUwMDNjIEVDT05FVF9UWEFNUF9NQVgpXG4rXHRcdHR4X2FtcCArPSBjdGFiLmFtcDtcbitcbitzZXRfdmFsOlxuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTtcbitcbitvdXQ6XG4rXHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAwMDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4rXHR9XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHUxNiBsMHIyNl90ZW1wO1xuK1x0aW50IHJldDtcbitcdGludCBpO1xuK1xuK1x0aWYgKCFzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIlBvcnQgemVybyBtdXN0IGJlIGNvbmZpZ3VyZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyIFx1MDAzYyBzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwLVx1MDAzZW1kaW8uYWRkcilcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogR2xvYmFsIHJlZ2lzdGVycyAqL1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyNiwgMHg4MDQ0KTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjEsIDB4MDBlYSk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDI3LCAweDAyZjApO1xuK1xuK1x0LyogTG9jYWwgcmVnaXN0ZXJzICovXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweGEwMDApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wxLCAyMiwgMHhmMDAwKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjIsIDB4NDQ0NCk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDI0LCAweDBjMGMpO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyOCwgMHg3YzQ0KTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMzAsIDB4MDAwNSk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDE3LCAweDAwMDApO1xuK1xuK1x0LyogRm9yIEUxL0UyLCBFMyByZXF1aXJlcyAweDIyMjAsIGJ1dCBubyBrbm93biBFTjc1MTIyMSBFMyBjaGlwcyBleGlzdCAqL1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgyMjAwKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4rXHRcdCAvKiAxMDBNYiB0eCBwMnpfbWlkLCB6Mm5fbWlkLCB6Mm5fb3ZzX3Bvc3QsIG4yel9taWQgKi9cbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyMiwgMHgwMDMwKTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNSwgMHgwMjQ4KTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNywgMHgwMmYwKTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyOCwgMHgwMjMwKTtcbitcdH1cbitcbitcdHJldCA9IHBoeV9yZWFkX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bDByMjZfdGVtcCA9IHJldDtcbitcbitcdC8qIEJHIHZvbHRhZ2UgKi9cbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7XG4rXG4rXHQvKiBNREkgKi9cbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTYwMyk7XG4rXG4rXHQvKiBkaXNhYmxlIHR4IHNsZXcgY29udHJvbCAqL1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgyMTAwKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDU7IGkrKykge1xuK1x0XHRyZXQgPSBlbjc1MTIyMV9mZXBoeV9yNTAocGh5ZGV2KTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSsrKSB7XG4rXHRcdHJldCA9IGVuNzUxMjIxX2ZlcGh5X3R4X29mZnNldChwaHlkZXYpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRicmVhaztcbitcdH1cbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA1OyBpKyspIHtcbitcdFx0cmV0ID0gZW43NTEyMjFfZmVwaHlfdHhfYW1wKHBoeWRldik7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCBsMHIyNl90ZW1wKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIyLCAweDQ0NDQpO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDMxMDApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcG9ydDAgPSBFQ09ORVRfRU43NTI2Q19QT1JUMF9BRERSO1xuK1x0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQ7XG4rXHRzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkICE9IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuK1x0XHRwb3J0MCA9IEVDT05FVF9MRUdBQ1lfUE9SVDBfQUREUjtcbitcbitcdHJldCA9IGRldm1fcGh5X3BhY2thZ2Vfam9pbihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHBoeWRldiwgcG9ydDAsXG4rXHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCkpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXG4rXHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgPT0gcG9ydDApXG4rXHRcdHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAgPSBwaHlkZXY7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGVuNzUxMjIxX2ZlcGh5X2RyaXZlcltdID0ge1xuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpLFxuK1x0XHQubmFtZVx0XHQ9IFwiRWNvTmV0IEVONzUxMjIxIEZFUEhZXCIsXG4rXHRcdC5jb25maWdfaW5pdFx0PSBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdCxcbitcdFx0LmNvbmZpZ19pbnRyXHQ9IGdlbnBoeV9ub19jb25maWdfaW50cixcbitcdFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssXG4rXHRcdC5wcm9iZVx0XHQ9IGVuNzUxMjIxX2ZlcGh5X3Byb2JlLFxuK1x0XHQucmVhZF9wYWdlXHQ9IG10a19waHlfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXG4rXHR9XG4rfTtcbitcbittb2R1bGVfcGh5X2RyaXZlcihlbjc1MTIyMV9mZXBoeV9kcml2ZXIpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgZW43NTEyMjFfZmVwaHlfdGJsW10gPSB7XG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChFQ09ORVRfRkVQSFlfSURfRU43NTI2QykgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiRWNvTmV0IFNvQyAxMC8xMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfQVVUSE9SKFwiQ2FsZWIgSmFtZXMgRGVMaXNsZSBcdTAwM2NjamRAY2pkbnMuZnJcdTAwM2VcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBlbjc1MTIyMV9mZXBoeV90YmwpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MTg6NDMuMTkxOTI1OTMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MzcwMDA1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIE1lZGlhdGVrIEVjb05ldCBQSFkgRHJpdmVyIGluIHN5emthbGxlcioqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCB0aGlzIG5ldyBQSFkgZHJpdmVyLCBgZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY2AsIGVuYWJsZWQgYnkgYEVDT05FVF9GRV9TT0NfUEhZYC4gSXQncyBmb3IgYW4gRWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZLiBUaGUgcXVlc3Rpb24gaXMsIGhvdyBkbyB3ZSB0cmlnZ2VyIGl0IHdpdGhpbiBzeXprYWxsZXIgZm9yIGZ1enppbmc/XG5cbk5vcm1hbGx5LCBQSFkgZHJpdmVycyBjb21lIHRvIGxpZmUgd2hlbiB0aGUgaGFyZHdhcmUgaXMgcHJlc2VudCwgb3IsIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCwgdGhyb3VnaCBNRElPIGJ1cyBlbXVsYXRpb24uIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBkZWRpY2F0ZWQgTURJTyBlbXVsYXRvciwgd2hpY2ggaXMgYSBwcm9ibGVtLiBJdCBjYW4gdHJpZ2dlciBQSFkgY29kZSwgYnV0IG9ubHkgaWYgdGhlIFBIWSBoYXMgYmVlbiBpbnN0YW50aWF0ZWQuIENhbiB3ZSBldmVuICppbnN0YW50aWF0ZSogdGhpcyBzcGVjaWZpYyBQSFkgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50P1xuXG5UeXBpY2FsbHksIFBIWSBkcml2ZXJzIGdldCBwcm9iZWQgZWl0aGVyIHdoZW4gYSBuZXR3b3JrIGRyaXZlciByZWdpc3RlcnMgYW4gTURJTyBidXMgYW5kIHNjYW5zLCBvciB0aHJvdWdoIGEgZGV2aWNlIHRyZWUuIEJ1dCwgYHZoY2lgLCBgbmV0ZGV2c2ltYCwgYW5kIGBkdW1teWAgaW4gc3l6a2FsbGVyIGRvbid0IHJlZ2lzdGVyIGFyYml0cmFyeSBQSFlzIG9uIGFuIE1ESU8gYnVzLiBOZWl0aGVyIGRvIGBtYWNzZWNgLCBgdmV0aGAsIG9yIGB0dW5gLlxuXG5JcyB0aGVyZSBhIHVzZXItc3BhY2Ugd2F5IHRvICpmb3JjZSogYSBQSFkgcHJvYmU/IE1heWJlIGBTSU9DU01JSVJFR2A/IE5vcGUsIHRoYXQgbmVlZHMgYW4gZXhpc3RpbmcgUEhZLiBDYW4gd2UgcmVnaXN0ZXIgYSBQSFkgZGV2aWNlIHZpYSBzeXNmcyBvciBzb21lIG90aGVyIG1lY2hhbmlzbT8gTGlrZWx5IG5vdC4gU3l6a2FsbGVyIGRvZXNuJ3QgcmVhbGx5IGhhdmUgYSB3YXkgdG8gbWFrZSBQSFkgZHJpdmVycyBhcHBlYXIgdW5sZXNzIGEgdmlydHVhbCBNRElPIGJ1cyBleGlzdHMuIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLW1vY2t1cC5jYCBlcXVpdmFsZW50IHRvIGhlbHAuIGBkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmNgIGlzIGFsc28gbm90IHVzZWZ1bCBoZXJlLlxuXG5JJ20gdGhpbmtpbmcgSSBzaG91bGQgc2NvdXIgdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIGFueSBtZW50aW9uIG9mIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBvciBzaW1pbGFyLCBidXQgSSBjYW4ndCB1c2Ugc3l6LWdyZXBwZXIsIHdoaWNoIG1ha2VzIHRoaXMgZGlmZmljdWx0LlxuXG5BbmQgdGhlbiwgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgZnV6emluZyBQSFkgZHJpdmVycyBsaWtlIHRoaXMgaXMgZXZlbiBjb25zaWRlcmVkIGEgcHJpb3JpdHkuIFVzdWFsbHksIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgbGlrZSB0aGlzLCB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGRvbid0IHBsYXkgbmljZWx5IGluIFFFTVUsIGFyZSBiYXNpY2FsbHkgdW5yZWFjaGFibGUuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIHRyaWNreSB0b28uIFRoaXMgYEVDT05FVF9GRV9TT0NfUEhZYCBkZXBlbmRzIG9uIGBFQ09ORVQgfHwgQ09NUElMRV9URVNUYC4gYEVDT05FVGAgaXNuJ3QgYSBzdGFuZGFyZCB2aXJ0dWFsIGRldmljZSFcblxuU28sIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBsb29rIGZvciBzb21lIHZpcnR1YWwgTURJTyBidXMgZHJpdmVyIHdpdGhpbiB0aGUga2VybmVsIHRoYXQgSSBjb3VsZCBjb250cm9sIGZyb20gdXNlcnNwYWNlLiBUaGF0IGNvdWxkIGJlIGEgd2F5IGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUwMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjE4OjU0LjAyODkzMTY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzc5NTI4NDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKm1vY2t1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MTg6NTcuMTA2ODk2NDQxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4NTQ2OTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgVXNlcnNwYWNlIFBIWSBEZXZpY2UgSW5zdGFudGlhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkNhbiB3ZSBhY3R1YWxseSBpbnN0YW50aWF0ZSBhIFBoeXNpY2FsIExheWVyIChQSFkpIGRldmljZSBmcm9tIHVzZXJzcGFjZT9cIiBXZSBrbm93IHRoZSB0cmFkaXRpb25hbCBtb2RlbCB1c3VhbGx5IGludm9sdmVzIHRoZSBrZXJuZWwgaGFuZGxpbmcgdGhpcy4gQnV0LCBJJ20gY3VyaW91cy4gQXJlIHRoZXJlIGFueSBjbGV2ZXIsIHVuY29udmVudGlvbmFsIHdheXMgdG8gYnlwYXNzIHRoYXQ/IEFyZSB0aGVyZSBleHBvc2VkIGludGVyZmFjZXMsIHBlcmhhcHMgdGhyb3VnaCBhIHNwZWNpZmljIGRyaXZlciBtb2RlbCBvciBhIHZlbmRvci1zcGVjaWZpYyBBUEksIHRoYXQgbWlnaHQgYWxsb3cgdXMgZGlyZWN0IG9yIGluZGlyZWN0IGNvbnRyb2wgb3ZlciBQSFkgaW5zdGFudGlhdGlvbiBmcm9tIHVzZXJzcGFjZT9cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQga2luZCBvZiBjb250cm9sIHdvdWxkIHdlIGhhdmU/IFdvdWxkIGl0IGJlIGxpbWl0ZWQgdG8gc3BlY2lmaWMgUEhZcyBvciBwcm90b2NvbHM/IENvdWxkIHdlIGNvbXBsZXRlbHkgYWJzdHJhY3QgdGhlIFBIWSBmcm9tIHRoZSBrZXJuZWw/IFdoYXQgYWJvdXQgc2VjdXJpdHkgaW1wbGljYXRpb25zPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgd2UnZCBuZWVkIHRvIGNvbnNpZGVyPyBJcyB0aGVyZSBhIG5lZWQgZm9yIGEgdXNlcnNwYWNlIFBIWSBkZXZpY2U/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTgzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MTk6MDEuMDkyMzY4ODM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjUxNDcxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZV9jcmVhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTExNz1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM0LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTM1OlxcdFxcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCAwLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM2LVxcdGlmIChJU19FUlIocGh5KSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTg1LVxcdFxcdC8qIFJlYWwgUEhZIElEIG9mIFBvcnQgMSBpcyAwICovXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTg2OlxcdFxcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgUEhZX0lEX1RKQTExMDIsIGZhbHNlLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01ODctXFx0XFx0aWYgKElTX0VSUihwaHkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTItXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTkzOlxcdFxcdC8qIE92ZXJ3cml0ZSBwYXJlbnQgZGV2aWNlLiBwaHlfZGV2aWNlX2NyZWF0ZSgpIHNldCBwYXJlbnQgdG9cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTQtXFx0XFx0ICogdGhlIG1paV9idXMtXFx1MDAzZWRldiwgd2hpY2ggaXMgbm90IGNvcnJlY3QgaW4gY2FzZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NzI4PXN0YXRpYyBpbnQgcGh5X3JlcXVlc3RfZHJpdmVyX21vZHVsZShzdHJ1Y3QgcGh5X2RldmljZSAqZGV2LCB1MzIgcGh5X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDctXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo3NDg6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNzQ5LVxcdFxcdFxcdFxcdCAgICAgYm9vbCBpc19jNDUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTgzOS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo4NDA6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX2NyZWF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy04NDEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEwNzE9c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5Ni1cXHRcXHRpZiAoIXIpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMDk3OlxcdFxcdFxcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwOTgtXFx0XFx0XFx0XFx0XFx0XFx0IHRydWUsIFxcdTAwMjZjNDVfaWRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDE6XFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCBpc19jNDUsIFxcdTAwMjZjNDVfaWRzKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDItfVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaD0yMTQ5PWludCBwaHlfbW9kaWZ5X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLCB1MzIgcmVnbnVtLFxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTUxLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjE1MjpzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTUzLVxcdFxcdFxcdFxcdCAgICAgYm9vbCBpc19jNDUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjE5OjAzLjc1NzUyNDY1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MzY0Njc0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ3JlYXRpbmcgYSBWaXJ0dWFsIFBIWSBEZXZpY2UgZnJvbSBVc2Vyc3BhY2UqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBwb3NzaWJsZSB0byBjb25qdXJlIHVwIGEgUEhZIGRldmljZSBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZS4gVHlwaWNhbGx5LCB0aGUgTURJTyBidXMgZHJpdmVyIGhhbmRsZXMgUEhZIGRldmljZSBjcmVhdGlvbiBkdXJpbmcgaXRzIGJ1cyBzY2Fucy4gSSB3b25kZXIsIGlzIHRoZXJlIGEgdmlydHVhbCBNRElPIGJ1cyBJIGNvdWxkIGxldmVyYWdlIGZvciB0aGlzIHB1cnBvc2U/IExldCdzIGRpdmUgaW50byBzb21lIGNvZGUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5GaXJzdCB1cCwgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmNgLiBOb3BlLCB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBvZmZlciBhIHdheS4gSG93IGFib3V0IGBkcml2ZXJzL25ldC9tZGlvL21kaW8tbW9ja3VwLmNgIG9yIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tZHVtbXkuY2A/IFN0aWxsIG5vIGx1Y2suIE9rYXksIGxldCdzIGNvbnNpZGVyIHRoZSBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYCBkcml2ZXIuIEl0IGRvZXMgY3JlYXRlIGEgZml4ZWQgUEhZLCBidXQgaXQgZG9lc24ndCBzdXBwb3J0IHRoZSBkeW5hbWljIGRpc2NvdmVyeSBvZiBhcmJpdHJhcnkgUEhZIElEcywgd2hpY2ggaXMgd2hhdCBJIG5lZWQuIFdoYXQgYWJvdXQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uY2AsIGBkcml2ZXJzL25ldC9waHkvbWRpby1iaXRiYW5nLmNgLCBvciBgZHJpdmVycy9uZXQvcGh5L21kaW8tbXV4LmNgPyBUaG9zZSBkb24ndCBsb29rIHByb21pc2luZyBlaXRoZXIuXG5cblNvLCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIEkgc29tZWhvdyB0cmlnZ2VyIGBwaHlfZGV2aWNlX2NyZWF0ZWAgd2l0aCBhIGN1c3RvbSBgcGh5X2lkYCBmcm9tIHVzZXJzcGFjZT8gTXkgaW50dWl0aW9uIHBvaW50cyBtZSB0b3dhcmRzIHNvbWV0aGluZyBsaWtlIG5ldGxpbmsuIE1heWJlIEkgY2FuIGZpbmQgYSBob29rIGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2Agb3IgcGVyaGFwcyB3aXRoaW4gdGhlIGBuZXQvZXRodG9vbC9gIGRpcmVjdG9yeSB0aGF0IHdvdWxkIGFsbG93IG1lIHRvIGdldCB0aGlzIGRvbmU/IFRpbWUgdG8gc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MTk6MTAuNTkzOTk1Nzk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODE3MDQzMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZV9jcmVhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTExNz1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM0LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTM1OlxcdFxcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCAwLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTM2LVxcdGlmIChJU19FUlIocGh5KSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTg1LVxcdFxcdC8qIFJlYWwgUEhZIElEIG9mIFBvcnQgMSBpcyAwICovXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTg2OlxcdFxcdHBoeSA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgUEhZX0lEX1RKQTExMDIsIGZhbHNlLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01ODctXFx0XFx0aWYgKElTX0VSUihwaHkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTItXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM6NTkzOlxcdFxcdC8qIE92ZXJ3cml0ZSBwYXJlbnQgZGV2aWNlLiBwaHlfZGV2aWNlX2NyZWF0ZSgpIHNldCBwYXJlbnQgdG9cXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTQtXFx0XFx0ICogdGhlIG1paV9idXMtXFx1MDAzZWRldiwgd2hpY2ggaXMgbm90IGNvcnJlY3QgaW4gY2FzZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NzI4PXN0YXRpYyBpbnQgcGh5X3JlcXVlc3RfZHJpdmVyX21vZHVsZShzdHJ1Y3QgcGh5X2RldmljZSAqZGV2LCB1MzIgcGh5X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy03NDctXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo3NDg6c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNzQ5LVxcdFxcdFxcdFxcdCAgICAgYm9vbCBpc19jNDUsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTgzOS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzo4NDA6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX2NyZWF0ZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy04NDEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEwNzE9c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTA5Ni1cXHRcXHRpZiAoIXIpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMDk3OlxcdFxcdFxcdHJldHVybiBwaHlfZGV2aWNlX2NyZWF0ZShidXMsIGFkZHIsIHBoeV9pZCxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEwOTgtXFx0XFx0XFx0XFx0XFx0XFx0IHRydWUsIFxcdTAwMjZjNDVfaWRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwMC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDE6XFx0cmV0dXJuIHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkLCBpc19jNDUsIFxcdTAwMjZjNDVfaWRzKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDItfVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaD0yMTQ5PWludCBwaHlfbW9kaWZ5X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLCB1MzIgcmVnbnVtLFxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTUxLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjE1MjpzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTUzLVxcdFxcdFxcdFxcdCAgICAgYm9vbCBpc19jNDUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjE5OjEzLjA3NTcwNTA1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NDMzOTgwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHRyaWdnZXIgYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeWAuIFRoYXQgZnVuY3Rpb24ncyBjYWxsZWQgZHVyaW5nIGRldmljZSB0cmVlIG9yIEFDUEkgcGFyc2luZy4gVGhlIG9idmlvdXMgcXVlc3Rpb24gaXM6IGNhbiBJIGluamVjdCBhIGRldmljZSB0cmVlIG92ZXJsYXkgZnJvbSB1c2Vyc3BhY2U/IEhtbSwgcHJvYmFibHkgbm90IGRpcmVjdGx5LiBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgaGFuZGxlIGFyYml0cmFyeSBEVCBvdmVybGF5cyB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIHBzZXVkby1zeXNjYWxsIGZvciB0aGF0LCBhbmQgSSBkb24ndCByZWNhbGwgb25lIGZvciB0aGlzIHB1cnBvc2UuXG5cbkFscmlnaHQsIHBpdm90LiBXaGF0IGFib3V0IGBnZXRfcGh5X2RldmljZWA/IFRoYXQgZ2V0cyBjYWxsZWQgYnkgYG1kaW9idXNfc2NhbmAuIEFuZCBgbWRpb2J1c19zY2FuYCBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGBfX21kaW9idXNfcmVnaXN0ZXJgIHdoZW4gdGhlIE1ESU8gYnVzIGlzIGJlaW5nIHNjYW5uZWQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBpcyB0aGVyZSBhbiBNRElPIGJ1cyB0aGF0IGNvdWxkIGJlICpyZWdpc3RlcmVkKiBmcm9tIHVzZXJzcGFjZT8gTGV0J3MgcnVsZSBvdXQgdGhlIG9idmlvdXM6IGBkcml2ZXJzL25ldC9kdW1teS5jYOKAlG5vcGUsIG5vIE1ESU8gYnVzIHRoZXJlLiBTYW1lIHdpdGggYGRyaXZlcnMvbmV0L21hY3NlYy5jYCBhbmQgYGRyaXZlcnMvbmV0L3R1bi5jYOKAlHRob3NlIGFyZSBkZWFkIGVuZHMuXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBgZHJpdmVycy9uZXQvdXNiL2AuIEFoYSwgc29tZSBVU0IgbmV0d29yayBhZGFwdGVycyAqZG8qIGhhdmUgTURJTyBidXNlcyEgVGhpcyBpcyBwcm9taXNpbmcuIFRoZSBxdWVzdGlvbiBpcyBpZiBzeXprYWxsZXIgaXMgdXNpbmcgYHZoY2lgIHRvIGVtdWxhdGUgVVNCIG5ldHdvcmsgYWRhcHRlcnM/IElmIHNvLCB0aGVuIGl0ICpjb3VsZCogdGhlb3JldGljYWxseSBlbXVsYXRlIHRoZSBNRElPIGJ1cyBhcyB3ZWxsISBTbywgSSBuZWVkIHRvIGNoZWNrIHdoaWNoIFVTQiBuZXR3b3JrIGFkYXB0ZXIgZHJpdmVycyByZWdpc3RlciBhbiBNRElPIGJ1cyBhbmQsIGNyaXRpY2FsbHksIGFsbG93IHRoZSBidXMgdG8gYmUgc2Nhbm5lZC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgc3BlY2lmaWMgZHJpdmVycyBsaWtlIGBkcml2ZXJzL25ldC91c2Ivc21zYzc1eHguY2AgYW5kIGBkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jYCB0byBzZWUgaWYgdGhleSBmaXQgdGhlIGJpbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzU5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjE5OjIwLjgxOTEwNjc4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NTg2MzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTEzOCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RyaXZlci1tb2RlbC9kZXZyZXMucnN0PTM0OD1NRElPXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3QtMzUwLSAgZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoKVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTE6ICBkZXZtX21kaW9idXNfcmVnaXN0ZXIoKVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdDozNTI6ICBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoKVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdC0zNTMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdD0xMj1kZXZpY2UgKHRoZSBzYW1lIG9iamVjdHMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB2aWFcXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL21vdG9yY29tbS15dDh4eHgtcGh5LnJzdDoxMzpgYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeSgpYGApLiBNQUMtc2lkZSBjb25uZWN0aW9uIHByb3BlcnRpZXMgc3VjaCBhc1xcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvbW90b3Jjb21tLXl0OHh4eC1waHkucnN0LTE0LWBgcGh5LWhhbmRsZWBgIGFuZCBgYHBoeS1tb2RlYGAgYXJlIGRvY3VtZW50ZWQgaW4gW2FjcGktbWRpby1waHldXy5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9kc2QvcGh5LnJzdD03PVRoZSBQSFlzIG9uIGFuIE1ESU8gYnVzIFtwaHldIGFyZSBwcm9iZWQgYW5kIHJlZ2lzdGVyZWQgdXNpbmdcXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3Q6ODpmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoKS5cXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZHNkL3BoeS5yc3QtOS1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0PTQwPXJlZ2lzdGVyZWQgYXMgYSBkaXN0aW5jdCBkZXZpY2UuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC01Ni0gICBkcml2ZXIgbmVlZHMsIHNldHVwIHRoZSBtaWlfYnVzIHN0cnVjdHVyZSwgYW5kIHJlZ2lzdGVyIHdpdGggdGhlIFBBTCB1c2luZ1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0OjU3OiAgIG1kaW9idXNfcmVnaXN0ZXIuICBTaW1pbGFybHksIHRoZXJlJ3MgYSByZW1vdmUgZnVuY3Rpb24gdG8gdW5kbyBhbGwgb2ZcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC01OC0gICB0aGF0ICh1c2UgbWRpb2J1c191bnJlZ2lzdGVyKS5cXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmM9MTA5PXN0YXRpYyBpbnQgZXA4MjQ4ZV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzItXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYzoxMzM6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG9mZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYy0xMzQtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jPTIwNz1zdGF0aWMgaW50IGdwaW9fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2dwaW9fbWRpby5jLTI0My1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9ncGlvX21kaW8uYzoyNDQ6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBucCk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZ3Bpb19tZGlvLmMtMjQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYz02MDc9c3RhdGljIGludCBiY21fc2YyX21kaW9fcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYy02ODMtXFxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYzo2ODQ6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2V1c2VyX21paV9idXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtNjg1LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYz0xODc9c3RhdGljIGludCBnc3dpcF9tZGlvKHN0cnVjdCBnc3dpcF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtMjEzLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jOjIxNDpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTIxNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQxLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0MjpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LVxcdTAwM2VkZXYsIGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMzQzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0yMzIxPWludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMjM5Mi1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzoyMzkzOlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihkcy1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTIzOTQtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz02ODU9c3RhdGljIGludCBsYW45Mzd4X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU1LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6NzU2OlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihkcy1cXHUwMDNlZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtNzU3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjQwOT1tdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjQ0NC1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjQ0NTpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI0NDYtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jPTI0Mj1zdGF0aWMgaW50IG10NzYyOF9zZXR1cF9pbnRlcm5hbF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc2MjguYy0yNjEtXFxuZHJpdmVycy9uZXQvZHNhL210NzYyOC5jOjI2MjpcXHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NjI4LmMtMjYzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTM4MzQ9c3RhdGljIGludCBtdjg4ZTZ4eHhfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zODg3LVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjM4ODg6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy0zODg5LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTI2Nz1zdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwX21kaW8oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjkyLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjI5MzpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTI5NC1cXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jPTE0OT1zdGF0aWMgaW50IG5ldGNfcG9ydF9jcmVhdGVfZW1kaW9fYnVzKHN0cnVjdCBuZXRjX3BvcnQgKm5wLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtMTc5LVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjE4MDpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTE4MS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM9OTU3PXN0YXRpYyBpbnQgdnNjOTk1OV9tZGlvX2J1c19hbGxvYyhzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYy0xMDEzLVxcdC8qIE5lZWRlZCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSBidXMgbXV0ZXggbG9jayAqL1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjEwMTQ6XFx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMTAxNS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L3NldmlsbGVfdnNjOTk1My5jPTg3OD1zdGF0aWMgaW50IHZzYzk5NTNfbWRpb19idXNfYWxsb2Moc3RydWN0IG9jZWxvdCAqb2NlbG90KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYy05MDMtXFx0LyogTmVlZGVkIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIGJ1cyBtdXRleCBsb2NrICovXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9zZXZpbGxlX3ZzYzk5NTMuYzo5MDQ6XFx0cmMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3Qvc2V2aWxsZV92c2M5OTUzLmMtOTA1LVxcdGlmIChyYyBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM9MzU3PXN0YXRpYyBpbnQgYXI5MzMxX3N3X21idXNfaW5pdChzdHJ1Y3QgYXI5MzMxX3N3X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTM4MS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jOjM4MjpcXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtMzgzLVxcdG9mX25vZGVfcHV0KG1ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz05NDc9cWNhOGtfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcWNhOGtfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTk4Ni1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzo5ODc6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtZGlvKTtcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy05ODgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM9NzQ9aW50IHJ0bDgzeHhfc2V0dXBfdXNlcl9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzeHguYy05OS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4M3h4LmM6MTAwOlxcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VkZXYsIGJ1cywgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODN4eC5jLTEwMS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jPTExMTc9c3RhdGljIGludCBhNXBzd19wcm9iZV9tZGlvKHN0cnVjdCBhNXBzdyAqYTVwc3csIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtMTE0My1cXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jOjExNDQ6XFx0cmV0dXJuIGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy0xMTQ1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0zMDc9dm9pZCBzamExMTA1X2ZyYW1lX21lbW9yeV9wYXJ0aXRpb25pbmcoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMzA5LS8qIEZyb20gc2phMTEwNV9tZGlvLmMgKi9cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg6MzEwOmludCBzamExMTA1X21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMzExLXZvaWQgc2phMTEwNV9tZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTMwMjY9c3RhdGljIGludCBzamExMTA1X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTMwNjctXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MzA2ODpcXHRyYyA9IHNqYTExMDVfbWRpb2J1c19yZWdpc3Rlcihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMzA2OS1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYz0yNTg9c3RhdGljIGludCBzamExMTA1X21kaW9idXNfYmFzZV90eF9yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMjg3LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjI4ODpcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMjg5LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzEyPXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX2Jhc2VfdDFfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM0My1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzozNDQ6XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM0NS1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jPTM2OD1zdGF0aWMgaW50IHNqYTExMDVfbWRpb2J1c19wY3NfcmVnaXN0ZXIoc3RydWN0IHNqYTExMDVfcHJpdmF0ZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTM5NS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYzozOTY6XFx0cmMgPSBtZGlvYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtMzk3LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9NDM5PXN0YXRpYyB2b2lkIHNqYTExMDVfbWRpb2J1c19wY3NfdW5yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDU4LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQ1OTppbnQgc2phMTEwNV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21kaW8uYy00NjAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTU5NT15dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTYxMi1cXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NjEzOlxcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTYxNC1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTcyNj15dDkyMXhfbWJ1c19leHRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTc0My1cXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NzQ0OlxcdHJlcyA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1idXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTc0NS1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmM9NDU5PXN0YXRpYyBpbnQgYXhfbWlpX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvYXg4ODc5Ni5jLTQ3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL2F4ODg3OTYuYzo0Nzk6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihheC1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9heDg4Nzk2LmMtNDgwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM9MTMyMT1zdGF0aWMgaW50IG93bF9lbWFjX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jLTEzNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jOjEzNDY6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzQ3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmM9NTA5PXN0YXRpYyBpbnQgYWRpbjExMTBfcmVnaXN0ZXJfbWRpb2J1cyhzdHJ1Y3QgYWRpbjExMTBfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTExMC5jLTUyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExMTAuYzo1MzA6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTEwLmMtNTMxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYz02MTc9c3RhdGljIGludCBhZGluMTE0MF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBhZGluMTE0MF9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jOjYzNzpcXHRyZXR1cm4gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFxcdTAwMjZzcGlkZXYtXFx1MDAzZWRldiwgcHJpdi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjM4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmM9MTI5MD1zdGF0aWMgaW50IGdyZXRoX21kaW9faW5pdChzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZXJvZmxleC9ncmV0aC5jLTEzMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWVyb2ZsZXgvZ3JldGguYzoxMzA3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIoZ3JldGgtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Flcm9mbGV4L2dyZXRoLmMtMTMwOC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYz0zOTMxPXN0YXRpYyBpbnQgZXQxMzF4X3BjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jLTQwMjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM6NDAyNzpcXHRyYyA9IG1kaW9idXNfcmVnaXN0ZXIoYWRhcHRlci1cXHUwMDNlbWlpX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmMtNDAyOC1cXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM9MTIxPXN0YXRpYyBpbnQgYWx0ZXJhX3RzZV9tZGlvX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtMTU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYzoxNTg6XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy0xNTktXFx0aWYgKHJldCAhPSAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jPTEwNjE9c3RhdGljIGludCBhdTEwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jOjEyMjI6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihhdXAtXFx1MDAzZW1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtMTIyMy1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTM0Mjg9c3RhdGljIGludCB4Z2JlX3BoeV9pbml0KHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxNy1cXHRzbnByaW50ZihtaWktXFx1MDAzZWlkLCBzaXplb2YobWlpLVxcdTAwM2VpZCksIFxcXCIlc1xcXCIsIGRldl9uYW1lKHBkYXRhLVxcdTAwM2VkZXYpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjM3MTg6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtaWkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtMzcxOS1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzozNzIwOlxcdFxcdGRldl9lcnIocGRhdGEtXFx1MDAzZWRldiwgXFxcIm1kaW9idXNfcmVnaXN0ZXIgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTM3MjEtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmM9OTg9aW50IHhnZV9tZGlvX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tZGlvLmMtMTE4LVxcdG1kaW9fYnVzLVxcdTAwM2VwaHlfbWFzayA9IDB4MTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jOjExOTpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKG1kaW9fYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWRpby5jLTEyMC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz04Mzc9aW50IHhnZW5lX2VuZXRfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTg4Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjg4ODpzdGF0aWMgaW50IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtODg5LVxcdFxcdFxcdFxcdCAgc3RydWN0IG1paV9idXMgKm1kaW8pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkxMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jOjkxMzpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG1kaW9fbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTE0LVxcdFxcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05MjEtXFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5MjI6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jLTkyMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYz05Mzk9aW50IHhnZW5lX2VuZXRfbWRpb19jb25maWcoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYy05NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYzo5NTg6XFx0cmV0ID0geGdlbmVfbWRpb2J1c19yZWdpc3RlcihwZGF0YSwgbWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMtOTU5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21kaW8uYz0xMzE9aW50IGFyY19tZGlvX3Byb2JlKHN0cnVjdCBhcmNfZW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jLTE3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tZGlvLmM6MTczOlxcdGVycm9yID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG1kaW9fbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWRpby5jLTE3NC1cXHRvZl9ub2RlX3B1dChtZGlvX25vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM9OTY2PXN0YXRpYyBpbnQgYXg4ODc5NmNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM6MTAxMTpcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBheF9sb2NhbC1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTAxMi1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYz02ODc9c3RhdGljIGludCBhZzcxeHhfbWRpb19wcm9iZShzdHJ1Y3QgYWc3MXh4ICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNzI3LVxcdG1ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmM6NzI4OlxcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIG1paV9idXMsIG1ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYy03MjktXFx0b2Zfbm9kZV9wdXQobW5wKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI2MDpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG1paV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyNjEtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM9MTcxMz1zdGF0aWMgaW50IGJjbV9lbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy0xODI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jOjE4MzA6XFx0XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTE4MzEtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM9MjExPXN0cnVjdCBtaWlfYnVzICpiY21hX21kaW9fbWlpX3JlZ2lzdGVyKHN0cnVjdCBiZ21hYyAqYmdtYWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLW1kaW8uYy0yMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS1tZGlvLmM6MjM2OlxcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobWlpX2J1cywgbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLWJjbWEtbWRpby5jLTIzNy1cXHRvZl9ub2RlX3B1dChucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYz0xOTM9aW50IGJjbWdlbmV0X21paV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBpbml0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtbWlpLmMtMjMzLVxcdFxcdHBoeV9uYW1lID0gXFxcImV4dGVybmFsIFJ2TUlJXFxcIjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYzoyMzQ6XFx0XFx0Lyogb2ZfbWRpb2J1c19yZWdpc3RlciB0b29rIGNhcmUgb2YgcmVhZGluZyB0aGUgJ21heC1zcGVlZCdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21taWkuYy0yMzUtXFx0XFx0ICogUEhZIHByb3BlcnR5IGZvciB1cywgZWZmZWN0aXZlbHkgbGltaXRpbmcgdGhlIFBIWSBzdXBwb3J0ZWRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYz0yMTU3PXN0YXRpYyBpbnQgc2JtYWNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldiwgbG9uZyBsb25nIGJhc2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyNy1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM6MjIyODpcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKHNjLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMjIyOS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYz0xNTA1PXN0YXRpYyBpbnQgdGczX21kaW9faW5pdChzdHJ1Y3QgdGczICp0cClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM6MTU1ODpcXHRpID0gbWRpb2J1c19yZWdpc3Rlcih0cC1cXHUwMDNlbWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE1NTktXFx0aWYgKGkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTAyMz1zdGF0aWMgaW50IG1hY2JfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwOTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMDk3OnN0YXRpYyBpbnQgbWFjYl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtYWNiICpicCwgc3RydWN0IGRldmljZV9ub2RlICptZGlvX25wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDQtXFx0aWYgKG1kaW9fbnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTA1OlxcdFxcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMDYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTE5OlxcdFxcdFxcdHJldHVybiBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTIwLVxcdFxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTIyOlxcdHJldHVybiBtZGlvYnVzX3JlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExMjMtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMTI1PXN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMTU5OlxcdGVyciA9IG1hY2JfbWRpb2J1c19yZWdpc3RlcihicCwgbWRpb19ucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTYwLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jPTExMDc9c3RhdGljIGludCBkbTkwNTFfbWRpb19yZWdpc3RlcihzdHJ1Y3QgYm9hcmRfaW5mbyAqZGIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwNTEuYzoxMTI1OlxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIGRiLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTA1MS5jLTExMjYtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYz0yNDIzPXN0YXRpYyBpbnQgdHNuZXBfbWRpb19pbml0KHN0cnVjdCB0c25lcF9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjI0NTU6XFx0cmV0dmFsID0gb2ZfbWRpb2J1c19yZWdpc3RlcihhZGFwdGVyLVxcdTAwM2VtZGlvYnVzLCBucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTI0NTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ldGhvYy5jPTEwMjQ9c3RhdGljIGludCBldGhvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXRob2MuYy0xMjA3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmM6MTIwODpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V0aG9jLmMtMTIwOS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE3MzQ9c3RhdGljIGludCBmdGdtYWMxMDBfc2V0dXBfbWRpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xNzY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTc3MDpcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlZGV2LCBwcml2LVxcdTAwM2VtaWlfYnVzLCBtZGlvX25wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE3NzEtXFx0b2Zfbm9kZV9wdXQobWRpb19ucCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGNpX21kaW8uYz0zNj1zdGF0aWMgaW50IGVuZXRjX3BjaV9tZGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmM6OTE6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIGRldi1cXHUwMDNlb2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BjaV9tZGlvLmMtOTItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz0yNjY9c3RhdGljIGludCBlbmV0Y19tZGlvX3Byb2JlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzoyOTM6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMjk0LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmM9MzA4PXN0YXRpYyBpbnQgZW5ldGNfaW1kaW9fY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtMzQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzozNDM6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy0zNDQtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9MzA0Mj1zdGF0aWMgaW50IGZlY19lbmV0X21paV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMTYwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjMxNjE6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihmZXAtXFx1MDAzZW1paV9idXMsIG5vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMxNjItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYz02NT1zdGF0aWMgaW50IG1wYzUyeHhfZmVjX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2YpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbXBjNTJ4eF9waHkuYzoxMDY6XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21wYzUyeHhfcGh5LmMtMTA3LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jPTE0OT1zdGF0aWMgaW50IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmMtMTc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21paS1iaXRiYW5nLmM6MTc2OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgb2ZkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktYml0YmFuZy5jLTE3Ny1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jPTk3PXN0YXRpYyBpbnQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWlpLWZlYy5jLTE2Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmM6MTY3OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgb2ZkZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9taWktZmVjLmMtMTY4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYz00MDk9c3RhdGljIGludCBmc2xfcHFfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc2xfcHFfbWRpby5jOjQ5NDpcXHRlcnIgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYy00OTUtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYz0zNzE9c3RhdGljIGludCB4Z21hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jLTQyNi1cXHRpZiAoaXNfb2Zfbm9kZShmd25vZGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI3OlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCB0b19vZl9ub2RlKGZ3bm9kZSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMtNDI4LVxcdGVsc2UgaWYgKGlzX2FjcGlfbm9kZShmd25vZGUpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmM6NDI5OlxcdFxcdHJldCA9IGFjcGlfbWRpb2J1c19yZWdpc3RlcihidXMsIGZ3bm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYy00MzAtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYz0yNjY9aW50IGhiZ19tZGlvX2luaXQoc3RydWN0IGhiZ19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yOTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyOTI6XFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWRpb19idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19tZGlvLmMtMjkzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmM9MTA5ND1zdGF0aWMgaW50IGhpeDVoZDJfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmMtMTE4NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGl4NWhkMl9nbWFjLmM6MTE4NjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpeDVoZDJfZ21hYy5jLTExODctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmM9MTIzPWludCBoY2xnZV9tYWNfbWRpb19jb25maWcoc3RydWN0IGhjbGdlX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMTU0LVxcdG1kaW9fYnVzLVxcdTAwM2VwaHlfbWFzayA9IH4oMVUgXFx1MDAzY1xcdTAwM2MgbWFjLVxcdTAwM2VwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYzoxNTU6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0xNTYtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM9NDk1PXN0YXRpYyBpbnQgaG5zX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnNfbWRpby5jLTU4My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYzo1ODQ6XFx0XFx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTg1LVxcdH0gZWxzZSBpZiAoaXNfYWNwaV9ub2RlKHBkZXYtXFx1MDAzZWRldi5md25vZGUpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zX21kaW8uYy01OTItXFx0XFx0LyogUmVnaXN0ZXIgdGhlIE1ESU8gYnVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmM6NTkzOlxcdFxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huc19tZGlvLmMtNTk0LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM9MjU2MD1zdGF0aWMgaW50IGVtYWNfZHRfbWRpb19wcm9iZShzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jLTI1ODQtXFx0c25wcmludGYoYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwiJXNcXFwiLCBkZXYtXFx1MDAzZW9mZGV2LVxcdTAwM2VuYW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmM6MjU4NTpcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoXFx1MDAyNmRldi1cXHUwMDNlb2ZkZXYtXFx1MDAzZWRldiwgYnVzLCBtaWlfbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYy0yNTg2LVxcdGlmIChyZXMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTEwMjY9aW50IGl4Z2JlX21paV9idXNfaW5pdChzdHJ1Y3QgaXhnYmVfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMTA4OC1cXHRhZGFwdGVyLVxcdTAwM2VtaWlfYnVzID0gYnVzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjEwODk6XFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0xMDkwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmM9Mzg1PWx0cV9ldG9wX21kaW9faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy00MDItXFx0XFx0IHByaXYtXFx1MDAzZXBkZXYtXFx1MDAzZW5hbWUsIHByaXYtXFx1MDAzZXBkZXYtXFx1MDAzZWlkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jOjQwMzpcXHRpZiAobWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtaWlfYnVzKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV9ldG9wLmMtNDA0LVxcdFxcdGVyciA9IC1FTlhJTztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM9MjgzPXN0YXRpYyBpbnQgb3Jpb25fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODEtXFx0LyogRm9yIHRoZSBwbGF0Zm9ybXMgbm90IHN1cHBvcnRpbmcgRFQvQUNQSSBmYWxsLWJhY2tcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jOjM4MjpcXHQgKiB0byBtZGlvYnVzX3JlZ2lzdGVyIHZpYSBvZl9tZGlvYnVzX3JlZ2lzdGVyLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzgzLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmMtMzg0LVxcdGlmIChpc19hY3BpX25vZGUocGRldi1cXHUwMDNlZGV2LmZ3bm9kZSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYzozODU6XFx0XFx0cmV0ID0gYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cXHUwMDNlZGV2LmZ3bm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODYtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZtZGlvLmM6Mzg3OlxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm1kaW8uYy0zODgtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jPTEzODc9c3RhdGljIGludCBweGExNjhfZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy0xNTA0LVxcdHBlcC1cXHUwMDNlc21pX2J1cy1cXHUwMDNlcGh5X21hc2sgPSAweGZmZmZmZmZmO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jOjE1MDU6XFx0ZXJyID0gbWRpb2J1c19yZWdpc3RlcihwZXAtXFx1MDAzZXNtaV9idXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHhhMTY4X2V0aC5jLTE1MDYtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM9OTk4PXN0YXRpYyBpbnQgbXRrX21kaW9faW5pdChzdHJ1Y3QgbXRrX2V0aCAqZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0xMDM3LVxcdGRldl9kYmcoZXRoLVxcdTAwM2VkZXYsIFxcXCJNREMgaXMgcnVubmluZyBvbiAlZCBIelxcXFxuXFxcIiwgTURDX01BWF9GUkVRIC8gZXRoLVxcdTAwM2VtZGNfZGl2aWRlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYzoxMDM4OlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZXRoLVxcdTAwM2VtaWlfYnVzLCBtaWlfbnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMTAzOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYz0xNDIyPXN0YXRpYyBpbnQgbXRrX3N0YXJfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTE0NDctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jOjE0NDg6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgcHJpdi1cXHUwMDNlbWlpLCBtZGlvX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYy0xNDQ5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYz0yODc9aW50IG1seGJmX2dpZ2VfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgbWx4YmZfZ2lnZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmMtMzMyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tZGlvLmM6MzMzOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21kaW8uYy0zMzQtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWRpby5jPTI1Mz1pbnQgZmJuaWNfbWRpb2J1c19jcmVhdGUoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tZGlvLmMtMjcyLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToxOToyMy4xODQ5ODExNDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxMTU2MDY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVU0IgRXRoZXJuZXQgRHJpdmVyIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlc2UgVVNCIEV0aGVybmV0IGRyaXZlcnMsIHBhcnRpY3VsYXJseSBgc21zYzc1eHguY2AgYW5kIGBsYW43OHh4LmNgLiBBbmQgYSBxdWljayBnbGFuY2UgYXQgdGhlaXIgY29kZSBzdWdnZXN0cyB0aGV5J3JlIHVzaW5nIGBtZGlvYnVzX3JlZ2lzdGVyYC4gUmlnaHQsIHRoYXQncyBpbnRlcmVzdGluZy4gSXQgbWVhbnMgdGhleSdyZSBpbnRlcmFjdGluZyB3aXRoIGFuIE1ESU8gYnVzLiBMZXQncyBzZWUgaG93IHByZXZhbGVudCB0aGF0IGlzIHdpdGhpbiBVU0IgbmV0d29ya2luZyBkcml2ZXJzLiBMZXQgbWUgZG8gYSBxdWljayBncmVwIGZvciBgbWRpb2J1c19yZWdpc3RlcmAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB3aGljaCBvdGhlciBkcml2ZXJzIGFyZSB1c2luZyB0aGlzIG1ldGhvZCBhbmQgcG90ZW50aWFsbHkgcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgZXhwZWN0IHRoZXJlJ2xsIGJlIGEgZmV3IG1vcmUsIGl0J3Mgbm90IHVudXN1YWwgdG8gdXNlIHRoYXQgaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODkxOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjE5OjI2Ljk5NjU0NDg2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0MzgwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb2J1c19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02Njk9c3RhdGljIGludCBheDg4NzcyX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg2LVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2ODc6XFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVxcdTAwM2VtZGlvKTtcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg4LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTYxPXN0YXRpYyBpbnQgYXg4ODE3MmFfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc5LVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjgwOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtODEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMDkxPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjEtXFx0bm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2Lm9mX25vZGUsIFxcXCJtZGlvXFxcIik7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTIyOlxcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoZGV2LVxcdTAwM2VtZGlvYnVzLCBub2RlKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjMtXFx0b2Zfbm9kZV9wdXQobm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMTQ3PXN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0MS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQyOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocGRhdGEtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDMtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToxOToyNy4wNzA5ODc0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDY1ODQwNjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgRUNPTkVUIEZFUEhZIERyaXZlciB2aWEgU3l6a2FsbGVyKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byBob3cgd2UgY2FuIGdldCBhdCB0aGlzIGBlY29uZXQtZmUtc29jYCBkcml2ZXIgdGhyb3VnaCBzeXprYWxsZXIuIFRoZSBnYW1lIHBsYW4gaXMgY2xlYXI6IHRoZXNlIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMsIGxpa2UgYHNtc2M5NXh4YCwgYGxhbjc4eHhgLCBgYXNpeF9kZXZpY2VzYCwgYW5kIGBheDg4MTcyYWAsIHRoZXkgcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoYXQgTURJTyBidXMsIHdoZW4gcmVnaXN0ZXJlZCwgZG9lcyBhIHNjYW4gZm9yIFBIWXMuICBUaGlzIHNjYW4gaXMgdGhlIGtleS4gVGhlIHNjYW5uaW5nIHByb2Nlc3MgcmVsaWVzIG9uIHJlYWRpbmcgUEhZIHJlZ2lzdGVycyB1c2luZyB0aGUgTURJTyBidXMgcmVhZCBmdW5jdGlvbi4gIFNpbmNlIHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcyB0aHJvdWdoIHZoY2ksIGl0IGNhbiBjb250cm9sIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRob3NlIHJlYWRzLlxuXG5Ob3csIGlmIHN5emthbGxlciBmZWVkcyBhIHNwZWNpZmljIFBIWSBJRCBkdXJpbmcgdGhlIE1ESU8gc2NhbiDigJMgYDB4MDNhMjk0MTRgLCB3aGljaCBpcyBgRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkNgIOKAkyB0aGUgTURJTyBidXMgd2lsbCBjcmVhdGUgYSBQSFkgZGV2aWNlIHdpdGggdGhhdCBJRC4gIFRoZSBrZXJuZWwgd2lsbCB0aGVuIHRyeSB0byBiaW5kIGEgZHJpdmVyIGZvciB0aGF0IHBhcnRpY3VsYXIgUEhZIElELiAgSWYgYENPTkZJR19FQ09ORVRfRkVfU09DX1BIWWAgaXMgZW5hYmxlZCwgdGhlIGBlY29uZXQtZmUtc29jYCBkcml2ZXIgd2lsbCBtYXRjaCBhbmQgaXRzIHByb2JlIGZ1bmN0aW9uIHdpbGwgZXhlY3V0ZS4gVGhpcyBraWNrcyBvZmYgdGhlIHdob2xlIG5ldHdvcmsgZHJpdmVyIGNoYWluLCBhdHRhY2hpbmcgdGhlIFBIWSBhbmQgc3RhcnRpbmcgdGhlIFBIWSBzdGF0ZSBtYWNoaW5lLCBjYWxsaW5nIHN0dWZmIGxpa2UgYGNvbmZpZ19pbml0YCBhbmQgYHJlYWRfc3RhdHVzYC4gU28sIHllcywgdGhlIGBlY29uZXQtZmUtc29jYCBkcml2ZXIgaXMgKmFic29sdXRlbHkqIHJlYWNoYWJsZSBmcm9tIHN5emthbGxlciB2aWEgVVNCIHZoY2kuXG5cbkFscmlnaHQsIGxldCdzIHZlcmlmeSBldmVyeXRoaW5nLiBUaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIGBkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jYC4gVGhlIFBIWSBJRCBpcyBpbmRlZWQgYDB4MDNhMjk0MTRgLiBMb29raW5nIGF0IHRoZSBkcml2ZXIsIGl0IGRlZmluZXMgYSBQSFkgZHJpdmVyIHRhYmxlOlxuXG5gYGBjXG5zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW43NTEyMjFfZmVwaHlfZHJpdmVyW10gPSB7XG5cdHtcblx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpLFxuXHRcdC5uYW1lXHRcdD0gXCJFY29OZXQgRU43NTEyMjEgRkVQSFlcIixcblx0XHQuY29uZmlnX2luaXRcdD0gZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQsXG5cdFx0LmNvbmZpZ19pbnRyXHQ9IGdlbnBoeV9ub19jb25maWdfaW50cixcblx0XHQuaGFuZGxlX2ludGVycnVwdCA9IGdlbnBoeV9oYW5kbGVfaW50ZXJydXB0X25vX2Fjayxcblx0XHQucHJvYmVcdFx0PSBlbjc1MTIyMV9mZXBoeV9wcm9iZSxcblx0XHQucmVhZF9wYWdlXHQ9IG10a19waHlfcmVhZF9wYWdlLFxuXHRcdC53cml0ZV9wYWdlXHQ9IG10a19waHlfd3JpdGVfcGFnZSxcblx0fVxufTtcbmBgYFxuXG5TbyBpdCBsb29rcyBnb29kLiBOb3csIHRoaXMgYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYCBpcyBpbnRlcmVzdGluZy4gTG9va2luZyBhdCB0aGF0IGZ1bmN0aW9uOlxuXG5gYGBjXG5zdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG57XG5cdGludCBwb3J0MCA9IEVDT05FVF9FTjc1MjZDX1BPUlQwX0FERFI7XG5cdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkO1xuXHRzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2O1xuXHRpbnQgcmV0O1xuXG5cdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkICE9IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuXHRcdHBvcnQwID0gRUNPTkVUX0xFR0FDWV9QT1JUMF9BRERSO1xuXG5cdHJldCA9IGRldm1fcGh5X3BhY2thZ2Vfam9pbihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHBoeWRldiwgcG9ydDAsXG5cdFx0XHRcdCAgICBzaXplb2Yoc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkKSk7XG5cdGlmIChyZXQpXG5cdFx0cmV0dXJuIHJldDtcblxuXHRzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuXG5cdHByaXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcblx0aWYgKCFwcml2KVxuXHRcdHJldHVybiAtRU5PTUVNO1xuXG5cdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyID09IHBvcnQwKVxuXHRcdHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAgPSBwaHlkZXY7XG5cblx0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuXG5cdHJldHVybiAwO1xufVxuYGBgXG5cbkFuZCB0aGVuIGBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdGAgaXM6XG5cbmBgYGNcbnN0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbntcblx0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuXHR1MTYgbDByMjZfdGVtcDtcblx0aW50IHJldDtcblx0aW50IGk7XG5cblx0aWYgKCFzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwKSB7XG5cdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiUG9ydCB6ZXJvIG11c3QgYmUgY29uZmlndXJlZFxcblwiKTtcblx0XHRyZXR1cm4gLUVcblxuIiwiSW5wdXRUb2tlbnMiOjI5NzA4LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToxOTo1MS43MjkzOTcyNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc5NjQ0MTI2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRUNPTkVUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbWlwcy9LY29uZmlnPTM1OD1jb25maWcgTUFDSF9ERUNTVEFUSU9OXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0zOTQtXFxuYXJjaC9taXBzL0tjb25maWc6Mzk1OmNvbmZpZyBFQ09ORVRcXG5hcmNoL21pcHMvS2NvbmZpZy0zOTYtXFx0Ym9vbCBcXFwiRWNvTmV0IE1JUFMgZmFtaWx5XFxcIlxcbi0tXFxuZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnPTcxPWNvbmZpZyBEV19BUEJfVElNRVJfT0ZcXG4tLVxcbmRyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZy03NS1cXG5kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWc6NzY6Y29uZmlnIEVDT05FVF9FTjc1MTIyMV9USU1FUlxcbmRyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZy03Ny1cXHRib29sIFxcXCJFY29OZXQgRU43NTEyMjEgSGlnaCBQcmVjaXNpb24gVGltZXJcXFwiIGlmIENPTVBJTEVfVEVTVFxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc9MTk1PWNvbmZpZyBEV19BUEJfSUNUTFxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL0tjb25maWctMTk5LVxcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnOjIwMDpjb25maWcgRUNPTkVUX0VONzUxMjIxX0lOVENcXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZy0yMDEtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWctMi1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZzozOmNvbmZpZyBFQ09ORVRfRkVfU09DX1BIWVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkVjb05ldCAxMC8xMDAgU29DIEV0aGVybmV0IFBIWXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjE5OjU0LjUyNTg0NjMyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzM0MDY2MDgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRWNvTmV0IERyaXZlciBmb3IgU3l6a2FsbGVyIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBFQ09ORVRgIHRoaW5nLCB3aGljaCBhcHBlYXJzIHRvIGJlIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb21wb25lbnQgKGBhcmNoL21pcHMvS2NvbmZpZ2ApLiBUaGUgZHJpdmVyIGl0c2VsZiBzZWVtcyB0byBoaW5nZSBvbiBlaXRoZXIgYEVDT05FVGAgYmVpbmcgZW5hYmxlZCwgb3IsIGNydWNpYWxseSBmb3IgbXkgcHVycG9zZXMsIGBDT01QSUxFX1RFU1RgLiBFeGNlbGxlbnQsIHN5emthbGxlciBsZXZlcmFnZXMgYENPTVBJTEVfVEVTVGAsIHNvIEkgY2FuIGRpcmVjdGx5IGVuYWJsZSBgRUNPTkVUX0ZFX1NPQ19QSFlgLiBJIGJyaWVmbHkgd29uZGVyZWQgYWJvdXQgYSBkZXBlbmRlbmN5IG9uIGBNVEtfTkVUX1BIWUxJQmAsIGJ1dCBpdCAqc2VsZWN0cyogaXQsIHNvIGBFQ09ORVRfRkVfU09DX1BIWWAgaXMgdGhlIGtleS4gTm8gb3RoZXIgY29uZmlncyBhcHBlYXIgbmVjZXNzYXJ5LCBqdXN0IHRoYXQgb25lLlxuXG5Ob3cgSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgZHJpdmVyJ3MgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jYC4gVGhlIGRyaXZlciBkZWZpbmVzIGBlbjc1MTIyMV9mZXBoeV9kcml2ZXJgLCBhbmQgaXRzIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhcmUgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBhbmQgYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYC4gSSdsbCB3YW50IHRvIGtlZXAgYW4gZXllIG9uIHRob3NlLiBMZXQncyBhZGQgdGhlbSB0byBteSBcIkZvY3VzU3ltYm9sc1wiIGxpc3QuXG5cbkhtbSwgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBgTUFJTlRBSU5FUlNgIGFuZCB0aGUgYE1ha2VmaWxlYCBhcyB3ZWxsLCBhbmQgYWRkcyBgZWNvbmV0LWZlLXNvYy5jYCDigJMgc3RhbmRhcmQgc3R1ZmYuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gSSByZWFsaXN0aWNhbGx5IHJlYWNoIHRoaXMgY29kZSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LCBhbmQgc3BlY2lmaWNhbGx5IHRocm91Z2ggc3l6a2FsbGVyPyBUaGUgYW5zd2VyLCB0aGFua2Z1bGx5LCBpcyB5ZXMhIFN5emthbGxlciB1c2VzIGB2aGNpYCB0byBlbXVsYXRlIFVTQiBkZXZpY2VzLiBJJ20gdGhpbmtpbmcgb2YgYSBVU0IgbmV0d29yayBhZGFwdGVyIGxpa2UgYHNtc2M5NXh4YC4gVGhlIGBzbXNjOTV4eGAgZHJpdmVyIHJlZ2lzdGVycyBhbiBNRElPIGJ1cyBkdXJpbmcgaXRzIGJpbmQgcHJvY2Vzcy4gVGhpcyBidXMgdGhlbiBzY2FucyBmb3IgUEhZcyBieSByZWFkaW5nIE1ESU8gcmVnaXN0ZXJzLCB2aWEgVVNCIGNvbnRyb2wgbWVzc2FnZXMuXG5cbkhlcmUncyB0aGUgcmVhbCBwb3dlcjogU3l6a2FsbGVyIGludGVyY2VwdHMgdGhlc2UgbWVzc2FnZXMgZnJvbSB0aGUgZW11bGF0ZWQgVVNCIGRldmljZS4gU28sIGlmIHN5emthbGxlciBpcyBjb25maWd1cmVkIHRvIHJldHVybiB0aGUgUEhZIElEIGAweDAzYTI5NDE0YCAoYXQsIHNheSwgYWRkcmVzcyA5KSB3aGVuIHF1ZXJpZWQgYnkgdGhlIE1ESU8gYnVzLCB0aGUgUEhZIGRyaXZlciBjb3JlIHdpbGwgY3JlYXRlIGEgUEhZIGRldmljZSwgYW5kIHRoZSBQSFkgZHJpdmVyIGNvcmUgd2lsbCBtYXRjaCB0aGlzIElEIHdpdGggYGVuNzUxMjIxX2ZlcGh5X2RyaXZlcmAuIEl0IGNhbGxzIGBlbjc1MTIyMV9mZXBoeV9wcm9iZWAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTGF0ZXIsIHdoZW4gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGFjdGl2YXRlZCwgYHBoeV9zdGFydGAgd2lsbCB0cmlnZ2VyIGBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdGAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIGEgc2VyaWVzIG9mIE1ESU8gcmVhZHMgYW5kIHdyaXRlcyAodmlhIGBwaHlfcmVhZF9wYWdlZGAsIGBwaHlfd3JpdGVfcGFnZWRgLCBldGMuKSDigJMgYWxsIG9mIHdoaWNoIHRyYW5zbGF0ZSB0byBVU0IgY29udHJvbCBtZXNzYWdlcyB0aGF0IHN5emthbGxlciBjYW4gaW50ZXJjZXB0IGFuZCBtYW5pcHVsYXRlISBUaGVyZWZvcmUsIHRoZSBlbnRpcmUgY2FsaWJyYXRpb24gbG9naWMgaW4gYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBpcyBmdWxseSB3aXRoaW4gbXkgY29udHJvbC4gSSBjYW4gZnV6eiBpdCBleHRlbnNpdmVseSB3aXRoIHN5emthbGxlci5cblxuSnVzdCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc21zYzk1eHhgIGRvZXNuJ3QgZmlsdGVyIG91dCBQSFlzIOKAkyBhbGwgbG9va3MgZ29vZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MzI3MzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6MDcuODY2NTEyNjY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDY4ODMyNjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9kZXZpY2VfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToyMDowOC4xNzM0MDM0MTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNTExNjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ESU8gQnVzIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgc21zYzk1eHhgIGRyaXZlciBraWNrcyB0aGluZ3Mgb2ZmIGJ5IHJlZ2lzdGVyaW5nIGFuIE1ESU8gYnVzIHVzaW5nIGBtZGlvYnVzX3JlZ2lzdGVyYC4gUmlnaHQsIHRoYXQncyB0aGUgc3RhbmRhcmQgd2F5IHRvIGRvIGl0LiBOb3csIGxldCdzIGRpdmUgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyByZWdpc3RyYXRpb24gcHJvY2VzcyB3b3JrcyBpbiBkZXRhaWwuIFRpbWUgdG8gY3JhY2sgb3BlbiBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYG1kaW9idXNfcmVnaXN0ZXJgIGZ1bmN0aW9uIGl0c2VsZi4gSSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIOKAkyB3aGF0IHN0cnVjdHVyZXMgYXJlIGJlaW5nIGluaXRpYWxpemVkLCB3aGljaCBjYWxsYmFja3MgYXJlIGJlaW5nIHNldCB1cCwgYW5kIGhvdyB0aGlzIGJ1cyBpcyBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBQSFkgZHJpdmVycy4gTGV0J3MgZ2V0IHRvIHRoZSBuaXR0eS1ncml0dHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0Mjg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6MTIuNDc4NTI0MDEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTMwNTQ5NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb2J1c19zY2FuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToyMDoxMi41Njc4Mzc3NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTgwNzM3MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1ESU8gQnVzIFNjYW4gTG9jYXRpb24gQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgTURJTyBidXMgaW5pdGlhbGl6YXRpb24sIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyBhIHNhbml0eSBjaGVjay4gTGV0IG1lIGp1c3QgY29uZmlybS4uLiBgbWRpb2J1c19zY2FuYC4uLiB0aGF0J3MgKnJpZ2h0KiB3aGVyZSBJJ2QgZXhwZWN0IGl0IHRvIGJlLCBuZXN0bGVkIGluIHRoZSBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgIGZpbGUuIE5vIHN1cnByaXNlcyB0aGVyZS4gR29vZC4gTWFrZXMgc2Vuc2UuIEp1c3QgY29uZmlybWluZyB0aGUgY29kZSBiYXNlIGlzIHN0cnVjdHVyZWQgYXMgSSB3b3VsZCBhbnRpY2lwYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDUzOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjIwOjE2Ljc0ODU3NzQ1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMjgxMTU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3NjYW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM9OTU4PXN0YXRpYyBpbnQgcHhhMTY4X2luaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy05NjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9weGExNjhfZXRoLmM6OTY4OlxcdHBoeSA9IG1kaW9idXNfc2Nhbl9jMjIocGVwLVxcdTAwM2VzbWlfYnVzLCBwZXAtXFx1MDAzZXBoeV9hZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3B4YTE2OF9ldGguYy05NjktXFx0aWYgKElTX0VSUihwaHkpKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYz0xMzA9c3RhdGljIGludCB1bmltYWNfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS11bmltYWMuYy0xNjMtICpcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jOjE2NDogKiBidXMtXFx1MDAzZXJlc2V0IGlzIGludm9rZWQgYmVmb3JlIG1kaW9idXNfc2NhbiBkdXJpbmcgbWRpb2J1c19yZWdpc3RlciBhbmQgaXNcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTE2NS0gKiB0aGVyZWZvcmUgdGhlIHJpZ2h0IGxvY2F0aW9uIHRvIHN0aWNrIHRoYXQgd29ya2Fyb3VuZC4gU2luY2Ugd2UgZG8gbm90IHdhbnRcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTM5Nj1zdGF0aWMgdm9pZCBvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDA3LVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQwODpzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ0Ny0vKipcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0NDg6ICogbWRpb2J1c19zY2FuX2MyMiAtIHNjYW4gb25lIGFkZHJlc3Mgb24gYSBidXMgZm9yIEMyMiBNRElPIGRldmljZXMuXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDQ5LSAqIEBidXM6IG1paV9idXMgdG8gc2Nhblxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDU4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ1OTpzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NjAte1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ2MTpcXHRyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ2Mi19XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDYzOkVYUE9SVF9TWU1CT0wobWRpb2J1c19zY2FuX2MyMik7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDY0LVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ2NS0vKipcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0NjY6ICogbWRpb2J1c19zY2FuX2M0NSAtIHNjYW4gb25lIGFkZHJlc3Mgb24gYSBidXMgZm9yIEM0NSBNRElPIGRldmljZXMuXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDY3LSAqIEBidXM6IG1paV9idXMgdG8gc2Nhblxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDc2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ3NzpzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2Nhbl9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDc4LXtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0Nzk6XFx0cmV0dXJuIG1kaW9idXNfc2NhbihidXMsIGFkZHIsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ4MC19XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDgxLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ4MjpzdGF0aWMgaW50IG1kaW9idXNfc2Nhbl9idXNfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ4OS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0OTA6XFx0XFx0XFx0cGh5ZGV2ID0gbWRpb2J1c19zY2FuX2MyMihidXMsIGkpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5MS1cXHRcXHRcXHRpZiAoSVNfRVJSKHBoeWRldikgXFx1MDAyNlxcdTAwMjYgKFBUUl9FUlIocGh5ZGV2KSAhPSAtRU5PREVWKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5Ny1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo0OTg6c3RhdGljIGludCBtZGlvYnVzX3NjYW5fYnVzX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5OS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01MDktXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NTEwOlxcdFxcdFxcdHBoeWRldiA9IG1kaW9idXNfc2Nhbl9jNDUoYnVzLCBpKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01MTEtXFx0XFx0XFx0aWYgKElTX0VSUihwaHlkZXYpIFxcdTAwMjZcXHUwMDI2IChQVFJfRVJSKHBoeWRldikgIT0gLUVOT0RFVikpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYz01NTM9aW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTYzMi1cXHRpZiAoYnVzLVxcdTAwM2VyZWFkKSB7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NjMzOlxcdFxcdGVyciA9IG1kaW9idXNfc2Nhbl9idXNfYzIyKGJ1cyk7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjM0LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02NDAtXFx0aWYgKCFwcmV2ZW50X2M0NV9zY2FuIFxcdTAwMjZcXHUwMDI2IGJ1cy1cXHUwMDNlcmVhZF9jNDUpIHtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo2NDE6XFx0XFx0ZXJyID0gbWRpb2J1c19zY2FuX2J1c19jNDUoYnVzKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02NDItXFx0XFx0aWYgKGVycilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9NDYyPXN0cnVjdCBtaWlfYnVzICptZGlvX2ZpbmRfYnVzKGNvbnN0IGNoYXIgKm1kaW9fbmFtZSk7XFxuaW5jbHVkZS9saW51eC9waHkuaDo0NjM6c3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2Nhbl9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xcbmluY2x1ZGUvbGludXgvcGh5LmgtNDY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxOToyMDoxOS40NjEzOTQ4NDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwNjQ0MzgyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkndmUgZ290LiBJJ3ZlIHJlYWxpemVkIHRoYXQgdGhlIGBfX21kaW9idXNfcmVnaXN0ZXJgIGZ1bmN0aW9uLCBhbmQgdGhlIGNoYWluIG9mIGNhbGxzIHN0ZW1taW5nIGZyb20gaXTigJRgbWRpb2J1c19zY2FuX2J1c19jMjJgLCBgbWRpb2J1c19zY2FuX2MyMmAsIGBtZGlvYnVzX3NjYW5gLCBgZ2V0X3BoeV9kZXZpY2VgLCBhbmQgZmluYWxseSBgcGh5X2RldmljZV9jcmVhdGVg4oCUcHJvdmlkZXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuIFNwZWNpZmljYWxseSwgZHJpdmVycyByZWdpc3RlcmluZyBhbiBNRElPIGJ1cyB3aXRob3V0IERldmljZSBUcmVlIGluZm9ybWF0aW9uLCBsaWtlIGBzbXNjOTV4eGAsIHdpbGwgdHJpZ2dlciBhIGJ1cyBzY2FuIGFuZCBkZXZpY2UgY3JlYXRpb24gYmFzZWQgb24gUEhZIElEcyBvYnRhaW5lZCBmcm9tIHRoZSBNRElPIHJlYWQgZnVuY3Rpb24uXG5cbk5vdywgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYHNtc2M5NXh4YCB2aWEgYHZoY2lgLCBpdCBjYW4gaW5qZWN0IGEgc3BlY2lmaWMgUEhZIElEIGR1cmluZyB0aGF0IHNjYW4g4oCTIGluIHRoaXMgY2FzZSwgYDB4MDNhMjk0MTRgLiBUaGlzIHNob3VsZCBjYXVzZSB0aGUgYGVjb25ldC1mZS1zb2NgIFBIWSBkcml2ZXIgdG8gYmUgcHJvYmVkLCBhbmQgaXRzIGFzc29jaWF0ZWQgY29kZSB0byBiZSBleGVjdXRlZC4gU28sIGdpdmVuIHRoYXQsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgYW5kIHRoZXJlZm9yZSwgd29ydGggZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZHJpdmVyLiBJJ3ZlIGV4YW1pbmVkIHRoZSBkcml2ZXIgZGVmaW5pdGlvbiBhbmQgaXQgbG9va3MgbGlrZSBJJ20gZGVhbGluZyB3aXRoIHRoaXM6XG5cbmBgYGNcbnN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBlbjc1MTIyMV9mZXBoeV9kcml2ZXJbXSA9IHtcblx0e1xuXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChFQ09ORVRfRkVQSFlfSURfRU43NTI2QyksXG5cdFx0Lm5hbWVcdFx0PSBcIkVjb05ldCBFTjc1MTIyMSBGRVBIWVwiLFxuXHRcdC5jb25maWdfaW5pdFx0PSBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdCxcblx0XHQuY29uZmlnX2ludHJcdD0gZ2VucGh5X25vX2NvbmZpZ19pbnRyLFxuXHRcdC5oYW5kbGVfaW50ZXJydXB0ID0gZ2VucGh5X2hhbmRsZV9pbnRlcnJ1cHRfbm9fYWNrLFxuXHRcdC5wcm9iZVx0XHQ9IGVuNzUxMjIxX2ZlcGh5X3Byb2JlLFxuXHRcdC5yZWFkX3BhZ2VcdD0gbXRrX3BoeV9yZWFkX3BhZ2UsXG5cdFx0LndyaXRlX3BhZ2VcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxuXHR9XG59O1xuYGBgXG5cbkkgaW5pdGlhbGx5IGlkZW50aWZpZWQgYGVuNzUxMjIxX2ZlcGh5X2NvbmZpZ19pbml0YCBhbmQgYGVuNzUxMjIxX2ZlcGh5X3Byb2JlYCBhcyB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcy4gSG93ZXZlciwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBkb24ndCBqdXN0IGNhbGwgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgaW5saW5lZCwgYmVjYXVzZSBJIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIFN1cmUgZW5vdWdoLCBgZW43NTEyMjFfZmVwaHlfY29uZmlnX2luaXRgIGNhbGxzIHNldmVyYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnM6IGBlbjc1MTIyMV9mZXBoeV9yNTBgLCBgZW43NTEyMjFfZmVwaHlfdHhfb2Zmc2V0YCwgYW5kIGBlbjc1MTIyMV9mZXBoeV90eF9hbXBgLiBUaHVzLCBJIHdpbGwgc3RpY2sgd2l0aCBqdXN0IGBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdGAgYW5kIGBlbjc1MTIyMV9mZXBoeV9wcm9iZWAuXG5cbkZpbmFsbHksIHNpbmNlIGBtdGtfcGh5X3JlYWRfcGFnZWAgYW5kIGBtdGtfcGh5X3dyaXRlX3BhZ2VgIGFwcGVhciBpbiB0aGUgZHJpdmVyIGRlZmluaXRpb24sIEkgd2FudCB0byBjb25maXJtIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQuIFRoZXkgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBjdXJyZW50IGZpbGUsIHNvIEkgbmVlZCB0byBjaGVjayBlaXRoZXIgYG10ay5oYCBvciBgbXRrLmNgIHRvIHNlZSBpZiB0aGV5J3JlIHJlbGV2YW50LCBhbmQgaG93IHRvIHJlYWNoIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjIwOjMzLjUyNTgzNjAzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NTY0NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10a19waHlfcmVhZF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYz02MDg9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGVuNzUxMjIxX2ZlcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYy02MTUtXFx0XFx0LnByb2JlXFx0XFx0PSBlbjc1MTIyMV9mZXBoeV9wcm9iZSxcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jOjYxNjpcXHRcXHQucmVhZF9wYWdlXFx0PSBtdGtfcGh5X3JlYWRfcGFnZSxcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jLTYxNy1cXHRcXHQud3JpdGVfcGFnZVxcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay0ycDVnZS5jPTM3OT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrXzJwNWdlcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay0ycDVnZS5jLTM5MC1cXHRcXHQucmVzdW1lID0gZ2VucGh5X3Jlc3VtZSxcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLTJwNWdlLmM6MzkxOlxcdFxcdC5yZWFkX3BhZ2UgPSBtdGtfcGh5X3JlYWRfcGFnZSxcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLTJwNWdlLmMtMzkyLVxcdFxcdC53cml0ZV9wYWdlID0gbXRrX3BoeV93cml0ZV9wYWdlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYz0xNDk1PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdGtfc29jcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNTA0LVxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYzoxNTA1OlxcdFxcdC5yZWFkX3BhZ2VcXHQ9IG10a19waHlfcmVhZF9wYWdlLFxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTUwNi1cXHRcXHQud3JpdGVfcGFnZVxcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNTIxLVxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYzoxNTIyOlxcdFxcdC5yZWFkX3BhZ2VcXHQ9IG10a19waHlfcmVhZF9wYWdlLFxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTUyMy1cXHRcXHQud3JpdGVfcGFnZVxcdD0gbXRrX3BoeV93cml0ZV9wYWdlLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jPTk5PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdGtfZ2VwaHlfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMtMTEwLVxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jOjExMTpcXHRcXHQucmVhZF9wYWdlXFx0PSBtdGtfcGh5X3JlYWRfcGFnZSxcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMtMTEyLVxcdFxcdC53cml0ZV9wYWdlXFx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMtMTI0LVxcdFxcdC5yZXN1bWVcXHRcXHQ9IGdlbnBoeV9yZXN1bWUsXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jOjEyNTpcXHRcXHQucmVhZF9wYWdlXFx0PSBtdGtfcGh5X3JlYWRfcGFnZSxcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmMtMTI2LVxcdFxcdC53cml0ZV9wYWdlXFx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYz04ND1FWFBPUlRfU1lNQk9MX0dQTChfX210a190cl9jbHJfYml0cyk7XFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmMtODUtXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmM6ODY6aW50IG10a19waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmMtODcte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1waHktbGliLmMtODktfVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstcGh5LWxpYi5jOjkwOkVYUE9SVF9TWU1CT0xfR1BMKG10a19waHlfcmVhZF9wYWdlKTtcXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLXBoeS1saWIuYy05MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaD04MT12b2lkIF9fbXRrX3RyX2Nscl9iaXRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IGNoX2FkZHIsIHU4IG5vZGVfYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaC04My1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLmg6ODQ6aW50IG10a19waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGsuaC04NS1pbnQgbXRrX3BoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6MzMuNjMyNDA2NjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ1NzIyMDA2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgTWVkaWF0ZWsgUEhZIExpYnJhcnkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBtdGstcGh5LWxpYi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIGRyaXZlci4gRmlyc3QsIGxldCdzIGxvb2sgYXQgYEVuYWJsZUNvbmZpZ3NgLiBBbHJpZ2h0LCBsb29rcyBsaWtlIGBDT05GSUdfRUNPTkVUX0ZFX1NPQ19QSFlgIGlzIHRoZSBrZXkuIEl0J3MgZGVwZW5kZW50IG9uIGBFQ09ORVQgfHwgQ09NUElMRV9URVNUYCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIEJhc2ljYWxseSwgSSBqdXN0IG5lZWQgYEVDT05FVF9GRV9TT0NfUEhZYCBlbmFibGVkLlxuXG5Ob3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBEb2VzIHRoaXMgdGhpbmcgZGVwZW5kIG9uIGVpdGhlciBgTURJT19ERVZJQ0VgIG9yIGBQSFlMSUJgPyBBaGEsIGl0IGxvb2tzIGxpa2UgYFBIWUxJQmAgaXMgc2VsZWN0ZWQgYnkgYE1US19ORVRfUEhZTElCYCwgd2hpY2gsIGluIHR1cm4sIGlzIHNlbGVjdGVkIGJ5IGBFQ09ORVRfRkVfU09DX1BIWWAuIEdvdCBpdCEgV2FpdCBhIG1pbnV0ZSwgYE1US19ORVRfUEhZTElCYCBpcyBhY3R1YWxseSBhIGNvbmZpZyBvcHRpb24gaXRzZWxmLiBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiBhYm91dCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwNTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6NDguMjA0NjEwODgxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTE0NDA2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVRLX05FVF9QSFlMSUJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZz00OD1jb25maWcgTUVESUFURUtfR0VfU09DX1BIWVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWctNjYtXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWc6Njc6Y29uZmlnIE1US19ORVRfUEhZTElCXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWctNjgtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6NDguMjczNzYyMTA4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDQxNzE2NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYXNvbmluZyBmb3IgRnV6emluZyB0aGUgRWNvTmV0IFBIWSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYmFzaWNhbGx5LCBpdCBhZGRzIGEgbmV3IFBIWSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aG9zZSBFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzLCByaWdodD8gVGhlIGtleSBoZXJlIGlzIHJlYWNoYWJpbGl0eSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBhbmQgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbkkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBQSFkgZHJpdmVycyAqY2FuKiBiZSByZWFjaGVkIGV2ZW4gaW4gdGhlc2UgdmlydHVhbGl6ZWQgc2V0dXBzIGJlY2F1c2Ugd2UgY2FuIGVtdWxhdGUgYW4gTURJTyBidXMuIFRoaW5rIGFib3V0IGhvdyBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBVU0IgbmV0d29yayBhZGFwdGVyLCBsaWtlIGBzbXNjOTV4eGAsIHVzaW5nIGB2aGNpYC4gV2hlbiB0aGF0IGVtdWxhdGVkIFVTQiBkZXZpY2UgZ2V0cyBwcm9iZWQsIGl0IHNldHMgdXAgYW4gTURJTyBidXMgYW5kIHN0YXJ0cyBzY2FubmluZyBmb3IgUEhZcy5cblxuTm93LCBoZXJlJ3MgdGhlIGNsZXZlciBiaXQ6IGR1cmluZyB0aGF0IE1ESU8gc2NhbiAod2hlcmUgaXQncyBlc3NlbnRpYWxseSBzZW5kaW5nIE1ESU8gcmVhZCByZXF1ZXN0cyBhcyBVU0IgY29udHJvbCBtZXNzYWdlcyksIGlmIHdlIHJldHVybiB0aGUgc3BlY2lmaWMgUEhZIElELCBpbiB0aGlzIGNhc2UgYDB4MDNhMjk0MTRgLCB0aGUgTURJTyBidXMgd2lsbCBpbnN0YW50aWF0ZSBhIFBIWSBkZXZpY2Ugd2l0aCAqdGhhdCogSUQuIFRoYXQncyB0aGUgdHJpZ2dlciEgVGhhdCB3aWxsIHRoZW4ga2ljayBvZmYgdGhlIGBlY29uZXQtZmUtc29jYCBQSFkgZHJpdmVyJ3MgcHJvYmUgYW5kIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4gQmluZ28hIENvZGUgZXhlY3V0aW9uLlxuXG5TbywgdGhpcyBwYXRjaCBpc24ndCBqdXN0IGludHJvZHVjaW5nIGEgbmV3IGRyaXZlcjsgaXQncyBvcGVuaW5nIGEgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LiBXZSBrbm93IHRoZSBjb2RlIGlzIHJlYWNoYWJsZSwgYW5kIHRoYXQgaXQgbWFrZXMgZnV6emluZyB3b3J0aHdoaWxlLlxuXG5JIGtub3cgSSB3YW50IHRvIGtlZXAgYW4gZXllIG9uIGBlbjc1MTIyMV9mZXBoeV9wcm9iZWAgYW5kIGBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdGAgZnVuY3Rpb25zIGFzIGVudHJ5IHBvaW50cy5cblxuSSd2ZSBsb29rZWQgYXQgdGhlIGNvbmZpZyBvcHRpb25zLCBgRUNPTkVUX0ZFX1NPQ19QSFlgIGlzIHRoZSBjcnVjaWFsIG9uZSB0byBlbmFibGUuIEkgZG91YmxlLWNoZWNrZWQgdGhhdCBgUEhZX1BBQ0tBR0VgIGlzIHNlbGVjdGVkLCBhbmQgYE1US19ORVRfUEhZTElCYCBpcyBhbHNvIHNlbGVjdGVkLCBidXQgYEVDT05FVF9GRV9TT0NfUEhZYCBpcyBzdWZmaWNpZW50LiBJIGNvbmZpcm1lZCB0aGF0IGBFQ09ORVRfRkVfU09DX1BIWWAgaXMgdHJpc3RhdGUsIHNvIGl0J3MgdGhlIG9ubHkgb25lIHdlIHJlYWxseSBuZWVkLiBObyBuZWVkIHRvIGxpc3QgYFVTQl9ORVRfU01TQzk1WFhgLCBhcyBzeXprYWxsZXIgdXN1YWxseSBoYXMgdGhhdCBvbmUgZW5hYmxlZCBhbHJlYWR5LlxuSSdtIGNvbmZpZGVudCBpbiB0aGUgYXBwcm9hY2ggYW5kIGhhdmUgZG9jdW1lbnRlZCB0aGUgcmVhc29uaW5nLiBJIHdpbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1NzIsIk91dHB1dFRva2VucyI6MjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjIwOjU5LjcxNTQ4MjQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MTQ3MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFQ09ORVRfRkVfU09DX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVuNzUxMjIxX2ZlcGh5X3Byb2JlXCIsXG4gICAgXCJlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZcyAoYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNgKS4gUEhZIGRyaXZlcnMgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhbiBNRElPIGJ1cy4gRm9yIGV4YW1wbGUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKHN1Y2ggYXMgYHNtc2M5NXh4YCkgdmlhIHRoZSBgdmhjaWAgZHJpdmVyLiBXaGVuIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIGlzIHByb2JlZCwgaXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCBzY2FucyBmb3IgUEhZcyBieSBzZW5kaW5nIE1ESU8gcmVhZCByZXF1ZXN0cyAod2hpY2ggdHJhbnNsYXRlIHRvIFVTQiBjb250cm9sIG1lc3NhZ2VzKS4gQnkgcmV0dXJuaW5nIHRoZSBzcGVjaWZpYyBQSFkgSUQgKGAweDAzYTI5NDE0YCkgZHVyaW5nIHRoZSBNRElPIHNjYW4sIHRoZSBNRElPIGJ1cyB3aWxsIGluc3RhbnRpYXRlIGEgUEhZIGRldmljZSB3aXRoIHRoaXMgSUQsIHRyaWdnZXJpbmcgdGhlIHByb2JlIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgb2YgdGhlIGBlY29uZXQtZmUtc29jYCBQSFkgZHJpdmVyLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFQ09ORVRfRkVfU09DX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVuNzUxMjIxX2ZlcGh5X3Byb2JlXCIsXG4gICAgXCJlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUEhZIGRyaXZlciBmb3IgRWNvTmV0IDEwLzEwMCBTb0MgRXRoZXJuZXQgUEhZcyAoYGRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNgKS4gUEhZIGRyaXZlcnMgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGVtdWxhdGluZyBhbiBNRElPIGJ1cy4gRm9yIGV4YW1wbGUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKHN1Y2ggYXMgYHNtc2M5NXh4YCkgdmlhIHRoZSBgdmhjaWAgZHJpdmVyLiBXaGVuIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIGlzIHByb2JlZCwgaXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzIGFuZCBzY2FucyBmb3IgUEhZcyBieSBzZW5kaW5nIE1ESU8gcmVhZCByZXF1ZXN0cyAod2hpY2ggdHJhbnNsYXRlIHRvIFVTQiBjb250cm9sIG1lc3NhZ2VzKS4gQnkgcmV0dXJuaW5nIHRoZSBzcGVjaWZpYyBQSFkgSUQgKGAweDAzYTI5NDE0YCkgZHVyaW5nIHRoZSBNRElPIHNjYW4sIHRoZSBNRElPIGJ1cyB3aWxsIGluc3RhbnRpYXRlIGEgUEhZIGRldmljZSB3aXRoIHRoaXMgSUQsIHRyaWdnZXJpbmcgdGhlIHByb2JlIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgb2YgdGhlIGBlY29uZXQtZmUtc29jYCBQSFkgZHJpdmVyLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6NTkuODU0NjM2ODQ0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc4MzU1MDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE5OjIwOjU5Ljg1NTIzMDk5NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDc4Mjk1MDI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBFY29OZXQgMTAvMTAwIFNvQ3MuIFRoZSBkcml2ZXIgcHJpbWFyaWx5IGludGVyYWN0cyB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycyB2aWEgTURJTyAodXNpbmcgcGh5bGliIGZ1bmN0aW9ucyBsaWtlIHBoeV93cml0ZV9wYWdlZCBhbmQgcGh5X3JlYWRfcGFnZWQpIGFuZCBwZXJmb3JtcyBjYWxpYnJhdGlvbiByb3V0aW5lcy4gQWxsIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBtdGtfc29jcGh5X3ByaXYgYW5kIHRoZSBzaGFyZWQgcGFja2FnZSBkYXRhKSBhcmUgemVyby1pbml0aWFsaXplZCB1c2luZyBkZXZtX2t6YWxsb2Mgb3Igc3RhbmRhcmQgcGh5bGliIGZ1bmN0aW9ucy4gU3RhY2sgdmFyaWFibGVzIGxpa2UgY2FsX2NvbXBsZXRlX2N0eCBhcmUgYWxzbyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVzZXItc3BhY2UgQVBJcywgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bHMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LWRlcGVuZGVudCBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0N2JiYzQzNmRlYzI0NTA0YzA3MDMzMGM2ZDQ3Yjc5MTkzMTY4MTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxOToxODo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDQ2MGNiNzI2ODg0NTAuLjdjYTNkOGQwOGM2OTMgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC05MjUzLDYgKzkyNTMsMTIgQEAgVzpcdGh0dHBzOi8vbGludXh0di5vcmdcbiBROlx0aHR0cDovL3BhdGNod29yay5saW51eHR2Lm9yZy9wcm9qZWN0L2xpbnV4LW1lZGlhL2xpc3QvXG4gRjpcdGRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9lYzEwMCpcbiBcbitFQ09ORVQgRVRIRVJORVQgUEhZIERSSVZFUlxuK006XHRDYWxlYiBKYW1lcyBEZUxpc2xlIFx1MDAzY2NqZEBjamRucy5mclx1MDAzZVxuK0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4rUzpcdE1haW50YWluZWRcbitGOlx0ZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuY1xuK1xuIEVDT05FVCBNSVBTIFBMQVRGT1JNXG4gTTpcdENhbGViIEphbWVzIERlTGlzbGUgXHUwMDNjY2pkQGNqZG5zLmZyXHUwMDNlXG4gTDpcdGxpbnV4LW1pcHNAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xuaW5kZXggM2I5Y2Y4MmMwY2IyOC4uNjRhYmY1YjY5NWFiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvS2NvbmZpZ1xuQEAgLTEsNCArMSwxOSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK1xuK2NvbmZpZyBFQ09ORVRfRkVfU09DX1BIWVxuK1x0dHJpc3RhdGUgXCJFY29OZXQgMTAvMTAwIFNvQyBFdGhlcm5ldCBQSFlzXCJcbitcdGRlcGVuZHMgb24gRUNPTkVUIHx8IENPTVBJTEVfVEVTVFxuK1x0c2VsZWN0IE1US19ORVRfUEhZTElCXG4rXHRzZWxlY3QgUEhZX1BBQ0tBR0VcbitcdGhlbHBcbitcdCAgU3VwcG9ydHMgRWNvTmV0IFNvQyBidWlsdC1pbiAxMC8xMDAgRXRoZXJuZXQgUEhZcy5cbitcbitcdCAgSW5jbHVkZSBzdXBwb3J0IGZvciBidWlsdC1pbiBFdGhlcm5ldCBQSFlzIHdoaWNoIGFyZSBwcmVzZW50IGluXG4rXHQgIEVONzUyNkMgYmFzZWQgU29DcyAoaW5jbHVkaW5nIEVONzUyNkYpLiBJdCBjYW4gYWxzbyB3b3JrIHdpdGhcbitcdCAgbGVnYWN5IEVONzUxMiBGRSBQSFlzIHdoaWNoIGlkZW50aWZ5IGFzIDAzYTIuOTQxMiwgYnV0IHNpbmNlIHRoaXNcbitcdCAgSUQgaXMgdXNlZCBieSBNRURJQVRFS19HRV9QSFksIHVzZXJzIHdhbnRpbmcgdG8gZm9yY2UgdGhpcyBkcml2ZXJcbitcdCAgbXVzdCBvdmVycmlkZSB0aGUgSUQgdG8gMDNhMi45NDE0IGluIHRoZSBkZXZpY2UgdHJlZS5cbitcbiBjb25maWcgTUVESUFURUtfMlA1R0VfUEhZXG4gXHR0cmlzdGF0ZSBcIk1lZGlhVGVrIDIuNUdiIEV0aGVybmV0IFBIWXNcIlxuIFx0ZGVwZW5kcyBvbiAoQVJNNjQgXHUwMDI2XHUwMDI2IEFSQ0hfTUVESUFURUspIHx8IENPTVBJTEVfVEVTVFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxuaW5kZXggNmY5Y2FjZjdmOTA2NS4uNzEyMzllOTJhYTU4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL01ha2VmaWxlXG5AQCAtMSw0ICsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rb2JqLSQoQ09ORklHX0VDT05FVF9GRV9TT0NfUEhZKVx0XHQrPSBlY29uZXQtZmUtc29jLm9cbiBvYmotJChDT05GSUdfTUVESUFURUtfMlA1R0VfUEhZKVx0Kz0gbXRrLTJwNWdlLm9cbiBvYmotJChDT05GSUdfTUVESUFURUtfRkVfU09DX1BIWSlcdCs9IG10ay1mZS1zb2Mub1xuIG9iai0kKENPTkZJR19NRURJQVRFS19HRV9QSFkpXHRcdCs9IG10ay1nZS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL2Vjb25ldC1mZS1zb2MuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9lY29uZXQtZmUtc29jLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNWRiYjMyYTVkMWFiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvZWNvbmV0LWZlLXNvYy5jXG5AQCAtMCwwICsxLDYzMiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJtdGsuaFwiXG4rXG4rLypcbisgKiBBbiBvbGRlciB2ZXJzaW9uIG9mIHRoaXMgUEhZIGhhcmR3YXJlIHVzZXMgdGhlIElEIDAzYTIuOTQxMi5cbisgKiBUaGlzIGRyaXZlciBkb2VzIG5vdCBtYXRjaCBvbiBpdCBiZWNhdXNlIGl0IGNvbGxpZGVzIHdpdGhcbisgKiBNVEtfR1BIWV9JRF9NVDc1MzAsIHNvIHVzZXJzIHdhbnRpbmcgdG8gdXNlIHRoaXMgZHJpdmVyIHNob3VsZFxuKyAqIG92ZXJyaWRlIHRoZSBQSFkgSUQgaW4gdGhlIGRldmljZSB0cmVlIHRvIDAzYTIuOTQxNC5cbisgKi9cbisjZGVmaW5lIEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDXHRcdDB4MDNhMjk0MTRcbitcbisjZGVmaW5lIEVDT05FVF9QR19HMVx0XHRcdDB4MTAwMFxuKyNkZWZpbmUgRUNPTkVUX1BHX0cyXHRcdFx0MHgyMDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfRzNcdFx0XHQweDMwMDBcbisjZGVmaW5lIEVDT05FVF9QR19HNFx0XHRcdDB4NDAwMFxuKyNkZWZpbmUgRUNPTkVUX1BHX0c1XHRcdFx0MHg1MDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfRzZcdFx0XHQweDYwMDBcbisjZGVmaW5lIEVDT05FVF9QR19HN1x0XHRcdDB4NzAwMFxuK1xuKyNkZWZpbmUgRUNPTkVUX1BHX0wwXHRcdFx0MHg4MDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfTDFcdFx0XHQweDkwMDBcbisjZGVmaW5lIEVDT05FVF9QR19MMlx0XHRcdDB4YTAwMFxuKyNkZWZpbmUgRUNPTkVUX1BHX0wzXHRcdFx0MHhiMDAwXG4rI2RlZmluZSBFQ09ORVRfUEdfTDRcdFx0XHQweGMwMDBcbitcbisvKiA0IHBvcnRzICg4LDksMTAsMTEpIG9yIDMgcG9ydHMgKDksMTAsMTEpICovXG4rI2RlZmluZSBFQ09ORVRfTEVHQUNZX1BPUlQwX0FERFJcdDhcbisjZGVmaW5lIEVDT05FVF9FTjc1MjZDX1BPUlQwX0FERFJcdDlcbitcbisvKlxuKyAqIENhbGlicmF0aW9uIHBvbGxpbmcgZG9lcyBub3QgY29tcGxldGUgdW50aWwgRUNPTkVUX0NBTF9NSU5fQ1lDTEVTXG4rICogY29uc2VjdXRpdmUgXCJkb25lXCIgcmVzdWx0cyBhcmUgcmVjZWl2ZWQuIFNlZTogcG9sbF9jYWxfY29tcGxldGVcbisgKi9cbisjZGVmaW5lIEVDT05FVF9DQUxfTUlOX0NZQ0xFU1x0XHQxMFxuK1xuKy8qXG4rICogTWljcm9zZWNvbmRzIHBlciBjYWxpYnJhdGlvbiBwb2xsIGN5Y2xlLCBjYWxpYnJhdGlvbiB0YWtlcyBhcHByb3hpbWF0ZWx5XG4rICogRUNPTkVUX0NBTF9DWUNMRV9VUyAqIEVDT05FVF9DQUxfTUlOX0NZQ0xFUy4gVG90YWwgc2V0dXAgdGltZSBpcyB1c3VhbGx5XG4rICogbGVzcyB0aGFuIDE1MHggdGhpcyBudW1iZXIuXG4rICovXG4rI2RlZmluZSBFQ09ORVRfQ0FMX0NZQ0xFX1VTXHRcdDEwXG4rXG4rLyogVG90YWwgdGltZSBhbGxvd2VkIGZvciBjYWxpYnJhdGlvbiBwb2xsaW5nIGJlZm9yZSBlcnJvciBpcyByZXR1cm5lZC4gKi9cbisjZGVmaW5lIEVDT05FVF9DQUxfVElNRU9VVF9VU1x0XHQxMDAwMDBcbitcbisvKlxuKyAqIE5vdGU6IFRoZXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIHdlcmUgd3JpdHRlbiB3aXRob3V0IHRoZSBiZW5lZml0IG9mIHRoZVxuKyAqICAgICAgIGhhcmR3YXJlIHNwZWNpZmljYXRpb24sIHNvIG5hbWVzIGFyZSBnaXZlbiBvbmx5IHdoZXJlIHRoZSBtZWFuaW5nIGlzXG4rICogICAgICAgZmFpcmx5IG9idmlvdXMuXG4rICovXG4rXG4rLyogRzdSMjQgKi9cbisjZGVmaW5lIEVDT05FVF9DQUxfVFlQRV9NQVNLXHRcdEdFTk1BU0soMTQsIDEyKVxuKyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfUjUwXHRcdEZJRUxEX1BSRVAoRUNPTkVUX0NBTF9UWVBFX01BU0ssIDB4NilcbisjZGVmaW5lICAgRUNPTkVUX0NBTF9UWVBFX1RYT1NcdFx0RklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHgzKVxuKyNkZWZpbmUgICBFQ09ORVRfQ0FMX1RZUEVfVFhBTVBcdFx0RklFTERfUFJFUChFQ09ORVRfQ0FMX1RZUEVfTUFTSywgMHg3KVxuKyNkZWZpbmUgRUNPTkVUX1I1MF9aQ0FMX01BU0tcdFx0R0VOTUFTSygxMSwgNilcbisjZGVmaW5lIEVDT05FVF9DQUxJTl9FTjc1MjZDXHRcdEJJVCg0KVxuKyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0VONzUyNkNcdFx0QklUKDEpXG4rI2RlZmluZSBFQ09ORVRfQ0FMX09VVF9FTjc1MjZDXHRcdEJJVCgwKVxuK1xuKy8qIEw0UjIzICovXG4rI2RlZmluZSBFQ09ORVRfQ0FMSU5fTEVHQUNZXHRcdEJJVCgyKVxuKyNkZWZpbmUgRUNPTkVUX0NBTF9ET05FX0xFR0FDWVx0XHRCSVQoNilcbisjZGVmaW5lIEVDT05FVF9DQUxfT1VUX0xFR0FDWVx0XHRCSVQoNClcbitcbisjZGVmaW5lIEVDT05FVF9EQUNfSU5fMlZcdFx0MHgwZjBcbitcbisvKiBMNFIxNyAqL1xuKyNkZWZpbmUgRUNPTkVUX1RYT1NfU0lHTlx0XHRCSVQoMTMpXG4rI2RlZmluZSBFQ09ORVRfVFhPU19NQUdcdFx0XHRHRU5NQVNLKDEyLCA4KVxuK1xuKyNkZWZpbmUgRUNPTkVUX1RYT1NfREVGQVVMVFx0XHQwXG4rI2RlZmluZSBFQ09ORVRfVFhPU19NQVhcdFx0XHQzMVxuKyNkZWZpbmUgRUNPTkVUX1RYT1NfTUlOXHRcdFx0LTMxXG4rXG4rI2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfREVGQVVMVFx0XHQweDIwXG4rI2RlZmluZSBFQ09ORVRfUjUwX1pDQUxfTUFYXHRcdDB4M2ZcbitcbisvKiBMNFIyMiAqL1xuKyNkZWZpbmUgRUNPTkVUX1I1MF9UWENBTF9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBFQ09ORVRfUjUwX1JYQ0FMX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuK1xuKyNkZWZpbmUgRUNPTkVUX1RYQU1QX0RFRkFVTFRcdFx0MHgxMlxuKyNkZWZpbmUgRUNPTkVUX1RYQU1QX01BWFx0XHQweDNmXG4rXG4rLyogWkNBTCBjb21wZW5zYXRpb24gdGFibGUgcGVyIGNoaXAsIHBlciBwaHksIFJYICsgVFggKi9cbitzdHJ1Y3QgY29tcGVuc2F0aW9uIHtcbitcdHM4IHpjYWxfdHg7XG4rXHRzOCB6Y2FsX3J4O1xuK1x0czggdHhvcztcbitcdHM4IGFtcDtcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGVuc2F0aW9uIGVuNzUxMjIxX2NvbXBbMl1bNF0gPSB7XG4rXHR7XG4rXHRcdC8qIExlZ2FjeSAqL1xuK1x0XHR7IC56Y2FsX3R4ID0gMiwgIC56Y2FsX3J4ID0gLTQsIC50eG9zID0gMCwgLmFtcCA9IDEgfSwgLyogIDggKi9cbitcdFx0eyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IC00LCAudHhvcyA9IDEsIC5hbXAgPSAyIH0sIC8qICA5ICovXG4rXHRcdHsgLnpjYWxfdHggPSAyLCAgLnpjYWxfcnggPSAtNCwgLnR4b3MgPSAxLCAuYW1wID0gMSB9LCAvKiAxMCAqL1xuK1x0XHR7IC56Y2FsX3R4ID0gLTIsIC56Y2FsX3J4ID0gLTgsIC50eG9zID0gMSwgLmFtcCA9IDEgfSwgLyogMTEgKi9cbitcdH0sXG4rXHR7XG4rXHRcdC8qIEVONzUyNkMgKi9cbitcdFx0eyAuemNhbF90eCA9IDMsICAuemNhbF9yeCA9IDYsIC50eG9zID0gMSwgLmFtcCA9IDAgfSwgLyogIDkgKi9cbitcdFx0eyAuemNhbF90eCA9IDIsICAuemNhbF9yeCA9IDUsIC50eG9zID0gMSwgLmFtcCA9IC0xIH0sIC8qIDEwICovXG4rXHRcdHsgLnpjYWxfdHggPSA2LCAgLnpjYWxfcnggPSA2LCAudHhvcyA9IDEsIC5hbXAgPSAtMSB9LCAvKiAxMSAqL1xuK1x0XHR7IH0sIC8qIFVudXNlZCAqL1xuK1x0fVxuK307XG4rXG4rc3RhdGljIGNvbnN0IHU4IHpjYWxfdG9fcjUwb2htWzY0XSA9IHtcbitcdDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNiwgMTIzLCAxMjAsIDExNywgMTE0LCAxMTIsIDExMCwgMTA3LCAxMDUsIDEwMyxcbitcdDEwMSwgIDk5LCAgOTcsICA3OSwgIDc3LCAgNzUsICA3NCwgIDcyLCAgNzAsICA2OSwgIDY3LCAgNjYsICA2NSwgIDQ3LCAgNDYsICA0NSxcbitcdCA0MywgIDQyLCAgNDEsICA0MCwgIDM5LCAgMzgsICAzNywgIDM2LCAgMzQsICAzNCwgIDMzLCAgMzIsICAxNSwgIDE0LCAgMTMsICAxMixcbitcdCAxMSwgIDEwLCAgMTAsICAgOSwgICA4LCAgIDcsICAgNywgICA2LCAgIDUsICAgNCwgICA0LCAgIDMsICAgMiwgICAyLCAgIDEsICAgMVxuK307XG4rXG4rc3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkIHtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfcDA7XG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGNvbXBlbnNhdGlvbiBnZXRfY3RhYihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHU4IHBoeV9vZmZzZXQ7XG4rXG4rXHRwaHlfb2Zmc2V0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAtXHUwMDNlbWRpby5hZGRyO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShwaHlfb2Zmc2V0IFx1MDAzZT0gQVJSQVlfU0laRShlbjc1MTIyMV9jb21wWzBdKSkpXG4rXHRcdHJldHVybiAoc3RydWN0IGNvbXBlbnNhdGlvbikge307XG4rXG4rXHRyZXR1cm4gZW43NTEyMjFfY29tcFtwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDXVtwaHlfb2Zmc2V0XTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0X2NhbGluX2ZsYWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGVkKVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHUxNiBzZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xuK1x0XHQvKiBHN1IyNCBpcyBzaGFyZWQgc28gcGh5X21vZGlmeV9wYWdlZCBpcyByZXF1aXJlZCAqL1xuK1x0XHRzZXQgPSBlbmFibGVkID8gRUNPTkVUX0NBTElOX0VONzUyNkMgOiAwO1xuK1x0XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCxcbitcdFx0XHRcdCBFQ09ORVRfQ0FMSU5fRU43NTI2Qywgc2V0KTtcbitcdH0gZWxzZSB7XG4rXHRcdHNldCA9IGVuYWJsZWQgPyBFQ09ORVRfQ0FMSU5fTEVHQUNZIDogMDtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MNCwgMjMsIHNldCk7XG4rXHR9XG4rfVxuK1xuK3N0cnVjdCBjYWxfY29tcGxldGVfY3R4IHtcbitcdHUxNiBjb25zZWN1dGl2ZV90cnVlc1x0OiAxNTtcbitcdGJvb2wgc3RhcnRlZFx0XHQ6IDE7XG4rXHRib29sIG9ic2VydmVkX2ZhbHNlXHQ6IDE7XG4rXHR1MTYgYWJvcnRlZF90cmllc1x0OiA3O1xuK307XG4rXG4rLyoqXG4rICogcG9sbF9jYWxfY29tcGxldGUgLSBwb2xsIGZvciBjYWxpYnJhdGlvbiBjb21wbGV0aW9uLlxuKyAqXG4rICogQmVjYXVzZSBzb21lIGxlZ2FjeSBjaGlwcyBhcmUga25vd24gdG8gYmUgdW5yZWxpYWJsZSAoZmFsc2UgcG9zaXRpdmVzKSxcbisgKiByZWZlcmVuY2UgY29kZSBhZGRzIDEwLDAwMHVzIG9mIGZpeGVkIGRlbGF5IHBlciBjYWxpYnJhdGlvbiBjeWNsZS5cbisgKiBQcmFjdGljYWxseSwgdGhlcmUgYXJlIGFib3V0IDEwLTUwIGNhbGlicmF0aW9uIGN5Y2xlcyBmb3IgZWFjaCBvZiB0aGVcbisgKiB0aHJlZSB0dW5hYmxlcywgc28gYWRkaW5nIGEgc2lnbmlmaWNhbnQgZml4ZWQgZGVsYXkgaXMgY29zdGx5LlxuKyAqXG4rICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIHN0YXJ0cyB3aXRoIENBTElOIGRpc2FibGVkLCBwb2xscyBmb3JcbisgKiBkb25lIHN0YXR1cyBmYWxzZSwgdGhlbiBlbmFibGVzIENBTElOIGFuZCBwb2xscyB1bnRpbCBhIHRydWUgZG9uZVxuKyAqIHN0YXR1cyBpcyByZWNvcmRlZCBFQ09ORVRfQ0FMX01JTl9DWUNMRVMgdGltZXMgY29uc2VjdXRpdmVseS5cbisgKlxuKyAqIEByZXR1cm5zOlxuKyAqICAgXHUwMDNjIDAgb24gZXJyb3JcbisgKiAgIDAgbm90IHlldCBjb21wbGV0ZVxuKyAqICAgMSBjb21wbGV0ZSBmYWxzZVxuKyAqICAgMiBjb21wbGV0ZSB0cnVlXG4rICovXG4rc3RhdGljIGludCBwb2xsX2NhbF9jb21wbGV0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdCAgICAgc3RydWN0IGNhbF9jb21wbGV0ZV9jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgZG9uZV9tYXNrO1xuK1x0aW50IG91dF9tYXNrO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4rXHRcdHJldCA9IHBoeV9yZWFkX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCk7XG4rXHRcdGRvbmVfbWFzayA9IEVDT05FVF9DQUxfRE9ORV9FTjc1MjZDO1xuK1x0XHRvdXRfbWFzayA9IEVDT05FVF9DQUxfT1VUX0VONzUyNkM7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBwaHlfcmVhZF9wYWdlZChzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwLCBFQ09ORVRfUEdfTDQsIDIzKTtcbitcdFx0ZG9uZV9tYXNrID0gRUNPTkVUX0NBTF9ET05FX0xFR0FDWTtcbitcdFx0b3V0X21hc2sgPSBFQ09ORVRfQ0FMX09VVF9MRUdBQ1k7XG4rXHR9XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKChyZXQgXHUwMDI2IGRvbmVfbWFzaykgPT0gMCkge1xuK1x0XHRjdHgtXHUwMDNlb2JzZXJ2ZWRfZmFsc2UgPSB0cnVlO1xuK1x0XHRjdHgtXHUwMDNlYWJvcnRlZF90cmllcyArPSAoY3R4LVx1MDAzZWNvbnNlY3V0aXZlX3RydWVzIFx1MDAzZSAwKTtcbitcdFx0Y3R4LVx1MDAzZWNvbnNlY3V0aXZlX3RydWVzID0gMDtcbitcbitcdFx0aWYgKCFjdHgtXHUwMDNlc3RhcnRlZCkge1xuK1x0XHRcdHNldF9jYWxpbl9mbGFnKHBoeWRldiwgdHJ1ZSk7XG4rXHRcdFx0Y3R4LVx1MDAzZXN0YXJ0ZWQgPSB0cnVlO1xuK1x0XHRcdHJldHVybiBwb2xsX2NhbF9jb21wbGV0ZShwaHlkZXYsIGN0eCk7XG4rXHRcdH1cbitcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRjdHgtXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMrKztcbitcbitcdGlmIChjdHgtXHUwMDNlY29uc2VjdXRpdmVfdHJ1ZXMgXHUwMDNjIEVDT05FVF9DQUxfTUlOX0NZQ0xFUyB8fCAhY3R4LVx1MDAzZW9ic2VydmVkX2ZhbHNlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChjdHgtXHUwMDNlYWJvcnRlZF90cmllcylcbitcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcIkNhbGlicmF0aW9uIGN5Y2xlICVkIGZhbHNlIHBvc2l0aXZlc1xcblwiLFxuK1x0XHRcdCAgICBjdHgtXHUwMDNlYWJvcnRlZF90cmllcyk7XG4rXG4rXHRyZXR1cm4gKChyZXQgXHUwMDI2IG91dF9tYXNrKSAhPSAwKSA/IDIgOiAxO1xuK31cbitcbisvKipcbisgKiBwb2xsX2NhbF9jb21wbGV0ZSAtIGNoZWNrIGZvciBjYWxpYnJhdGlvbiByZWdpc3RlclxuKyAqIEByZXR1cm5zOiAtZXJyb3Igb3IgMSBpZiBjYWxpYnJhdGlvbiByZXN1bHQgaXMgdHJ1ZS5cbisgKi9cbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X2NhbF9jeWNsZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBjYWxfY29tcGxldGVfY3R4IGNjdHggPSB7fTtcbitcdGludCBvdXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0c2V0X2NhbGluX2ZsYWcocGh5ZGV2LCBmYWxzZSk7XG4rXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChwb2xsX2NhbF9jb21wbGV0ZSwgb3V0LCBvdXQgIT0gMCxcbitcdFx0XHRcdEVDT05FVF9DQUxfQ1lDTEVfVVMsIEVDT05FVF9DQUxfVElNRU9VVF9VUyxcbitcdFx0XHRcdGZhbHNlLCBwaHlkZXYsIFx1MDAyNmNjdHgpO1xuK1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJDYWxpYnJhdGlvbiB0aW1lb3V0ICVkICglZCAvICVkIC8gJWQgLyAlZClcXG5cIixcbitcdFx0XHQgICByZXQsIGNjdHguY29uc2VjdXRpdmVfdHJ1ZXMsIGNjdHgub2JzZXJ2ZWRfZmFsc2UsXG4rXHRcdFx0ICAgY2N0eC5hYm9ydGVkX3RyaWVzLCBjY3R4LnN0YXJ0ZWQpO1xuK1x0fSBlbHNlIGlmIChvdXQgXHUwMDNjIDApIHtcbitcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiQ2FsaWJyYXRpb24gZXJyb3IgJWRcXG5cIiwgb3V0KTtcbitcdFx0cmV0ID0gb3V0O1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gb3V0IFx1MDAzZSAxO1xuK1x0fVxuK1xuK1x0c2V0X2NhbGluX2ZsYWcocGh5ZGV2LCBmYWxzZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3I1MChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XG4rXHRpbnQgemNhbF9zeiA9IEFSUkFZX1NJWkUoemNhbF90b19yNTBvaG0pO1xuK1x0dTggcmdfemNhbF9jdHJsID0gRUNPTkVUX1I1MF9aQ0FMX0RFRkFVTFQ7XG4rXHRpbnQgaW5pdGlhbF9jb21wX291dDtcbitcdGludCBwb2xhcml0eSA9IDA7XG4rXHRpbnQgY29tcF9vdXQ7XG4rXHRpbnQgcmV0ID0gMDtcbitcdHUxNiByeGNhbDtcbitcdHUxNiB0eGNhbDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCBFQ09ORVRfQ0FMX1RZUEVfUjUwKTtcbitcdGVsc2VcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7XG4rXG4rXHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHgxMDAwLCAweDEwMDApO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcbitcdFx0XHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCxcbitcdFx0XHRcdFx0IEVDT05FVF9SNTBfWkNBTF9NQVNLLFxuK1x0XHRcdFx0XHQgRklFTERfUFJFUChFQ09ORVRfUjUwX1pDQUxfTUFTSyxcbitcdFx0XHRcdFx0XHQgICAgcmdfemNhbF9jdHJsKSk7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNixcbitcdFx0XHRcdFx0cmdfemNhbF9jdHJsKTtcbitcbitcdFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcbitcdFx0aWYgKGNvbXBfb3V0IFx1MDAzYyAwKSB7XG4rXHRcdFx0cmV0ID0gY29tcF9vdXQ7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKHBvbGFyaXR5ID09IDApIHtcbitcdFx0XHQvKiBGaXJzdCBjeWNsZSAqL1xuK1x0XHRcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcbitcdFx0XHRwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxO1xuK1x0XHR9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHtcbitcdFx0XHQvKiBGb3VuZCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHJnX3pjYWxfY3RybCArPSBwb2xhcml0eTtcbitcbitcdFx0aWYgKHJnX3pjYWxfY3RybCBcdTAwM2UgRUNPTkVUX1I1MF9aQ0FMX01BWCkge1xuK1x0XHRcdHJldCA9IDE7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHJ4Y2FsID0gbWF4KDAsIG1pbih6Y2FsX3N6IC0gMSwgY3RhYi56Y2FsX3J4ICsgcmdfemNhbF9jdHJsKSk7XG4rXHR0eGNhbCA9IG1heCgwLCBtaW4oemNhbF9zeiAtIDEsIGN0YWIuemNhbF90eCArIHJnX3pjYWxfY3RybCkpO1xuK1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMixcbitcdFx0XHRGSUVMRF9QUkVQKEVDT05FVF9SNTBfVFhDQUxfTUFTSywgdHhjYWwpIHxcbitcdFx0XHRGSUVMRF9QUkVQKEVDT05FVF9SNTBfUlhDQUxfTUFTSywgcnhjYWwpKTtcbitcbitvdXQ6XG4rXHQvKiBaZXJvIG91dCByZWdpc3RlcnMgKi9cbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2QylcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgMHgwMDAwKTtcbitcdGVsc2VcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4YzAwMCk7XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV90eF9vZmZzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZWNvbmV0X3NvY3BoeV9zaGFyZWQgKnNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRzdHJ1Y3QgY29tcGVuc2F0aW9uIGN0YWIgPSBnZXRfY3RhYihwaHlkZXYpO1xuK1x0aW50IGluaXRpYWxfY29tcF9vdXQ7XG4rXHRpbnQgcG9sYXJpdHkgPSAwO1xuK1x0aW50IG9mZnNldCA9IEVDT05FVF9UWE9TX0RFRkFVTFQ7XG4rXHR1MTYgb2Zmc2V0X2JpbjtcbitcdGludCBjb21wX291dDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgMHg1MjAwKTsgLyogZml4IE1ESSAqL1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VwaHlfaWQgPT0gRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c3LCAyNCwgRUNPTkVUX0NBTF9UWVBFX1RYT1MpO1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDA0MDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4NDgwMCk7XG4rXHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4NGMwMCk7XG4rXHR9XG4rXG4rXHRwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyMSwgMHgwODAwLCAweDA4MDApO1xuK1xuK1x0cGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMzAsIDB4MDJjMCwgMHgwMmMwKTtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4ODAwMCk7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdG9mZnNldF9iaW4gPSBGSUVMRF9QUkVQKEVDT05FVF9UWE9TX01BRywgYWJzKG9mZnNldCkpO1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzYyAwKVxuK1x0XHRcdG9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjtcbitcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAxNywgb2Zmc2V0X2Jpbik7XG4rXG4rXHRcdGNvbXBfb3V0ID0gZW43NTEyMjFfZmVwaHlfY2FsX2N5Y2xlKHBoeWRldik7XG4rXHRcdGlmIChjb21wX291dCBcdTAwM2MgMCkge1xuK1x0XHRcdHJldCA9IGNvbXBfb3V0O1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXG4rXHRcdGlmIChwb2xhcml0eSA9PSAwKSB7XG4rXHRcdFx0LyogRmlyc3QgY3ljbGUgKi9cbitcdFx0XHRpbml0aWFsX2NvbXBfb3V0ID0gY29tcF9vdXQ7XG4rXHRcdFx0cG9sYXJpdHkgPSBjb21wX291dCA/IC0xIDogMTtcbitcdFx0fSBlbHNlIGlmIChpbml0aWFsX2NvbXBfb3V0ICE9IGNvbXBfb3V0KSB7XG4rXHRcdFx0LyogRm91bmQgKi9cbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRvZmZzZXQgKz0gcG9sYXJpdHk7XG4rXG4rXHRcdGlmIChvZmZzZXQgXHUwMDNlIEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgXHUwMDNjIEVDT05FVF9UWE9TX01JTikge1xuK1x0XHRcdHJldCA9IDE7XG4rXHRcdFx0b2Zmc2V0ID0gMDtcbitcdFx0XHRnb3RvIHNldF92YWw7XG4rXHRcdH1cbitcdH1cbitcbitcdG9mZnNldCArPSBjdGFiLnR4b3MgKiBwb2xhcml0eTtcbitcbitcdGlmIChvZmZzZXQgXHUwMDNlIEVDT05FVF9UWE9TX01BWCB8fCBvZmZzZXQgXHUwMDNjIEVDT05FVF9UWE9TX01JTilcbitcdFx0b2Zmc2V0IC09IGN0YWIudHhvcyAqIHBvbGFyaXR5O1xuK1xuK3NldF92YWw6XG4rXHRvZmZzZXRfYmluID0gRklFTERfUFJFUChFQ09ORVRfVFhPU19NQUcsIGFicyhvZmZzZXQpKTtcbitcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4rXHRcdG9mZnNldF9iaW4gfD0gRUNPTkVUX1RYT1NfU0lHTjtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MNCwgMTcsIG9mZnNldF9iaW4pO1xuK1xuK291dDpcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xuK1x0ZWxzZVxuK1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHgwMDAwKTtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGVuNzUxMjIxX2ZlcGh5X3R4X2FtcChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBjb21wZW5zYXRpb24gY3RhYiA9IGdldF9jdGFiKHBoeWRldik7XG4rXHRpbnQgaW5pdGlhbF9jb21wX291dDtcbitcdHU4IHR4X2FtcCA9IEVDT05FVF9UWEFNUF9ERUZBVUxUO1xuK1x0aW50IHBvbGFyaXR5ID0gMDtcbitcdGludCBjb21wX291dDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDIxMDApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNiwgMHg1MjAzKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzEsIDI2LCAweDgwMDAgfCBFQ09ORVRfREFDX0lOXzJWKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNCwgMjEsIDB4MDgwMCk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAyYzApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4rXHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNywgMjQsIEVDT05FVF9DQUxfVFlQRV9UWEFNUCk7XG4rXHRcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMywgMjUsIDB4MDYwMCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQoc2hhcmVkLVx1MDAzZXBoeWRldl9wMCwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwKTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wzLCAyNSwgMHhjYTAwIHwgMHgwNDAwKTtcbitcdH1cbitcbitcdGZvciAoOzspIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTtcbitcbitcdFx0Y29tcF9vdXQgPSBlbjc1MTIyMV9mZXBoeV9jYWxfY3ljbGUocGh5ZGV2KTtcbitcdFx0aWYgKGNvbXBfb3V0IFx1MDAzYyAwKSB7XG4rXHRcdFx0cmV0ID0gY29tcF9vdXQ7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKHBvbGFyaXR5ID09IDApIHtcbitcdFx0XHQvKiBGaXJzdCBjeWNsZSAqL1xuK1x0XHRcdGluaXRpYWxfY29tcF9vdXQgPSBjb21wX291dDtcbitcdFx0XHRwb2xhcml0eSA9IGNvbXBfb3V0ID8gLTEgOiAxO1xuK1x0XHR9IGVsc2UgaWYgKGluaXRpYWxfY29tcF9vdXQgIT0gY29tcF9vdXQpIHtcbitcdFx0XHQvKiBGb3VuZCAqL1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHR4X2FtcCArPSBwb2xhcml0eTtcbitcbitcdFx0aWYgKHR4X2FtcCBcdTAwM2UgRUNPTkVUX1RYQU1QX01BWCkge1xuK1x0XHRcdHJldCA9IDE7XG4rXHRcdFx0dHhfYW1wID0gRUNPTkVUX1RYQU1QX0RFRkFVTFQ7XG4rXHRcdFx0Z290byBzZXRfdmFsO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAodHhfYW1wICsgY3RhYi5hbXAgXHUwMDNjIEVDT05FVF9UWEFNUF9NQVgpXG4rXHRcdHR4X2FtcCArPSBjdGFiLmFtcDtcbitcbitzZXRfdmFsOlxuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyMywgdHhfYW1wKTtcbitcbitvdXQ6XG4rXHRpZiAocGh5ZGV2LVx1MDAzZXBoeV9pZCA9PSBFQ09ORVRfRkVQSFlfSURfRU43NTI2Qykge1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzcsIDI0LCAweDAwMDApO1xuK1x0XHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweDAwMDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAsIEVDT05FVF9QR19MMywgMjUsIDB4MDAwMCk7XG4rXHR9XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDI1LCAweDAwMDApO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCAqc2hhcmVkID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHUxNiBsMHIyNl90ZW1wO1xuK1x0aW50IHJldDtcbitcdGludCBpO1xuK1xuK1x0aWYgKCFzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIlBvcnQgemVybyBtdXN0IGJlIGNvbmZpZ3VyZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyIFx1MDAzYyBzaGFyZWQtXHUwMDNlcGh5ZGV2X3AwLVx1MDAzZW1kaW8uYWRkcilcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LyogR2xvYmFsIHJlZ2lzdGVycyAqL1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c0LCAyNiwgMHg4MDQ0KTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HNSwgMjEsIDB4MDBlYSk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfRzUsIDI3LCAweDAyZjApO1xuK1xuK1x0LyogTG9jYWwgcmVnaXN0ZXJzICovXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDMwLCAweGEwMDApO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wxLCAyMiwgMHhmMDAwKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMjIsIDB4NDQ0NCk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDI0LCAweDBjMGMpO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wyLCAyOCwgMHg3YzQ0KTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMiwgMzAsIDB4MDAwNSk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDMsIDE3LCAweDAwMDApO1xuK1xuK1x0LyogRm9yIEUxL0UyLCBFMyByZXF1aXJlcyAweDIyMjAsIGJ1dCBubyBrbm93biBFTjc1MTIyMSBFMyBjaGlwcyBleGlzdCAqL1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAzMCwgMHgyMjAwKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkID09IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKSB7XG4rXHRcdCAvKiAxMDBNYiB0eCBwMnpfbWlkLCB6Mm5fbWlkLCB6Mm5fb3ZzX3Bvc3QsIG4yel9taWQgKi9cbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyMiwgMHgwMDMwKTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNSwgMHgwMjQ4KTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyNywgMHgwMmYwKTtcbitcdFx0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0c1LCAyOCwgMHgwMjMwKTtcbitcdH1cbitcbitcdHJldCA9IHBoeV9yZWFkX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAyNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bDByMjZfdGVtcCA9IHJldDtcbitcbitcdC8qIEJHIHZvbHRhZ2UgKi9cbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMiwgMjUsIDB4MTBjMCk7XG4rXG4rXHQvKiBNREkgKi9cbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMjYsIDB4NTYwMyk7XG4rXG4rXHQvKiBkaXNhYmxlIHR4IHNsZXcgY29udHJvbCAqL1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0w0LCAyMSwgMHgwMDAwKTtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19MMCwgMCwgMHgyMTAwKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDU7IGkrKykge1xuK1x0XHRyZXQgPSBlbjc1MTIyMV9mZXBoeV9yNTAocGh5ZGV2KTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSsrKSB7XG4rXHRcdHJldCA9IGVuNzUxMjIxX2ZlcGh5X3R4X29mZnNldChwaHlkZXYpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRicmVhaztcbitcdH1cbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA1OyBpKyspIHtcbitcdFx0cmV0ID0gZW43NTEyMjFfZmVwaHlfdHhfYW1wKHBoeWRldik7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7XG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDAsIDI2LCBsMHIyNl90ZW1wKTtcbitcdHBoeV93cml0ZV9wYWdlZChwaHlkZXYsIEVDT05FVF9QR19HMSwgMjYsIDB4MDAwMCk7XG4rXG4rXHRwaHlfd3JpdGVfcGFnZWQocGh5ZGV2LCBFQ09ORVRfUEdfTDIsIDIyLCAweDQ0NDQpO1xuK1x0cGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgRUNPTkVUX1BHX0wwLCAwLCAweDMxMDApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW43NTEyMjFfZmVwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcG9ydDAgPSBFQ09ORVRfRU43NTI2Q19QT1JUMF9BRERSO1xuK1x0c3RydWN0IGVjb25ldF9zb2NwaHlfc2hhcmVkICpzaGFyZWQ7XG4rXHRzdHJ1Y3QgbXRrX3NvY3BoeV9wcml2ICpwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlcGh5X2lkICE9IEVDT05FVF9GRVBIWV9JRF9FTjc1MjZDKVxuK1x0XHRwb3J0MCA9IEVDT05FVF9MRUdBQ1lfUE9SVDBfQUREUjtcbitcbitcdHJldCA9IGRldm1fcGh5X3BhY2thZ2Vfam9pbihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIHBoeWRldiwgcG9ydDAsXG4rXHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBlY29uZXRfc29jcGh5X3NoYXJlZCkpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHNoYXJlZCA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXG4rXHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgPT0gcG9ydDApXG4rXHRcdHNoYXJlZC1cdTAwM2VwaHlkZXZfcDAgPSBwaHlkZXY7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGVuNzUxMjIxX2ZlcGh5X2RyaXZlcltdID0ge1xuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoRUNPTkVUX0ZFUEhZX0lEX0VONzUyNkMpLFxuK1x0XHQubmFtZVx0XHQ9IFwiRWNvTmV0IEVONzUxMjIxIEZFUEhZXCIsXG4rXHRcdC5jb25maWdfaW5pdFx0PSBlbjc1MTIyMV9mZXBoeV9jb25maWdfaW5pdCxcbitcdFx0LmNvbmZpZ19pbnRyXHQ9IGdlbnBoeV9ub19jb25maWdfaW50cixcbitcdFx0LmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfaGFuZGxlX2ludGVycnVwdF9ub19hY2ssXG4rXHRcdC5wcm9iZVx0XHQ9IGVuNzUxMjIxX2ZlcGh5X3Byb2JlLFxuK1x0XHQucmVhZF9wYWdlXHQ9IG10a19waHlfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0PSBtdGtfcGh5X3dyaXRlX3BhZ2UsXG4rXHR9XG4rfTtcbitcbittb2R1bGVfcGh5X2RyaXZlcihlbjc1MTIyMV9mZXBoeV9kcml2ZXIpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgZW43NTEyMjFfZmVwaHlfdGJsW10gPSB7XG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChFQ09ORVRfRkVQSFlfSURfRU43NTI2QykgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiRWNvTmV0IFNvQyAxMC8xMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfQVVUSE9SKFwiQ2FsZWIgSmFtZXMgRGVMaXNsZSBcdTAwM2NjamRAY2pkbnMuZnJcdTAwM2VcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBlbjc1MTIyMV9mZXBoeV90YmwpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjA6NTkuODU1MjM0NjY0WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzgyOTE1MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIENvbmNlcm5zIEFkZHJlc3NlZDogRWNvTmV0IFBIWSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhlIGNvZGUgZm9yIHRoaXMgbmV3IEVjb05ldCAxMC8xMDAgU29DIEV0aGVybmV0IFBIWSBkcml2ZXIsIGBlY29uZXQtZmUtc29jLmNgLCBhbmQgSSdtIGZlZWxpbmcgcHJldHR5IGdvb2QgYWJvdXQgaXQgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBJdCdzIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBQSFkgZHJpdmVyIOKAkyBpbXBsZW1lbnRpbmcgc3RhbmRhcmQgY2FsbGJhY2tzIGxpa2UgYGNvbmZpZ19pbml0YCwgYHByb2JlYCwgYW5kIHRoZSByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zLiBUaGUga2V5IGlzIGluIGhvdyBpdCBoYW5kbGVzIG1lbW9yeSBhbmQgcmVnaXN0ZXIgYWNjZXNzLlxuXG5JIHNlZSBpdCB1dGlsaXplcyBzdGFuZGFyZCBQSFlsaWIgZnVuY3Rpb25zIGxpa2UgYHBoeV93cml0ZV9wYWdlZGAsIGBwaHlfcmVhZF9wYWdlZGAsIGFuZCBgcGh5X21vZGlmeV9wYWdlZGAgdG8gY29uZmlndXJlIHRoZSBQSFkuIEl0IGFsc28gdXNlcyBgZGV2bV9waHlfcGFja2FnZV9qb2luYCBhbmQgYWxsb2NhdGVzIGEgcHJpdmF0ZSBgbXRrX3NvY3BoeV9wcml2YCBzdHJ1Y3R1cmUuIFRoaXMgaXMgYWxsIHN0YW5kYXJkLlxuXG5JbXBvcnRhbnRseSwgdGhlcmUncyBubyBpbnRlcmFjdGlvbiB3aXRoIHVzZXItc3BhY2UgZGF0YSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZC4gV2UncmUgdGFsa2luZyBkaXJlY3QgTURJTyByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzLiBJJ20gbm90IHNlZWluZyBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgb3IgcG90ZW50aWFsIGxlYWtzLlxuXG5UaGUgYWxsb2NhdGlvbiBvZiB0aGUgYHByaXZgIHN0cnVjdHVyZSB1c2luZyBgZGV2bV9remFsbG9jYCBpcyBlc3BlY2lhbGx5IHJlYXNzdXJpbmcuIFRoYXQncyBhIHplcm8taW5pdGlhbGl6ZWQgYWxsb2NhdGlvbiwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudCB0byBhdm9pZCB0aG9zZSB0cmlja3kgS01TQU4gaXNzdWVzLiBBbmQgYGRldm1fcGh5X3BhY2thZ2Vfam9pbmAgaXRzZWxmIGhhbmRsZXMgdGhlIHNoYXJlZCBzdHJ1Y3R1cmUgaW4gYSBzaW1pbGFyIHNhZmUgbWFubmVyLCBpbnRlcm5hbGx5IGNhbGxpbmcgYGt6YWxsb2NgIG9yIGVxdWl2YWxlbnQsIHNvIHRoYXQncyBnb29kLlxuXG5UbyBiZSBleHRyYSBzdXJlLCBJIGp1c3QgZG91YmxlLWNoZWNrZWQgaG93IGBkZXZtX3BoeV9wYWNrYWdlX2pvaW5gIGRvZXMgaXRzIHRoaW5nLCB0b28uIEl0J3MgYWxsIHplcm9lZCBvdXQgdGhlcmUsIGluY2x1ZGluZyB0aGUgc2hhcmVkIGRhdGEgYW5kIGBwcml2YC4gSSBzZWUgYHN0cnVjdCBjYWxfY29tcGxldGVfY3R4IGNjdHggPSB7fTtgIGlzIHplcm8taW5pdGlhbGl6ZWQgYW5kIGBnZXRfY3RhYihwaHlkZXYpYCByZXR1cm5zIGEgZnVsbHkgaW5pdGlhbGl6ZWQgc3RydWN0IGJ5IHZhbHVlLiBFdmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZHJpdmVyLCB0aGUgdXNlIG9mIHN0YW5kYXJkIGFuZCBzYWZlIG1lbW9yeSBhbGxvY2F0aW9uIG1ldGhvZHMsIGFuZCB0aGUgbGFjayBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnRlcmFjdGluZyB3aXRoIHVzZXIgc3BhY2UsIEknbSBjb25maWRlbnQgd2Ugd29uJ3QgYmUgaW50cm9kdWNpbmcgYW55IEtNU0FOLXNwZWNpZmljIGJ1Z3MgaGVyZS4gQW55IGlzc3VlcyBhcmUgZ29pbmcgdG8gYmUgcnVuLW9mLXRoZS1taWxsIHRoaW5ncyB0aGF0IEtBU0FOIHdpbGwgY2F0Y2g6IGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0OTgsIk91dHB1dFRva2VucyI6MjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTk6MjE6MTAuNjM4MTUzOTg0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIEVjb05ldCAxMC8xMDAgU29Dcy4gVGhlIGRyaXZlciBwcmltYXJpbHkgaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIHZpYSBNRElPICh1c2luZyBwaHlsaWIgZnVuY3Rpb25zIGxpa2UgcGh5X3dyaXRlX3BhZ2VkIGFuZCBwaHlfcmVhZF9wYWdlZCkgYW5kIHBlcmZvcm1zIGNhbGlicmF0aW9uIHJvdXRpbmVzLiBBbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKGUuZy4sIG10a19zb2NwaHlfcHJpdiBhbmQgdGhlIHNoYXJlZCBwYWNrYWdlIGRhdGEpIGFyZSB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGRldm1fa3phbGxvYyBvciBzdGFuZGFyZCBwaHlsaWIgZnVuY3Rpb25zLiBTdGFjayB2YXJpYWJsZXMgbGlrZSBjYWxfY29tcGxldGVfY3R4IGFyZSBhbHNvIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdXNlci1zcGFjZSBBUElzLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3Rscywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnktZGVwZW5kZW50IGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBFY29OZXQgMTAvMTAwIFNvQ3MuIFRoZSBkcml2ZXIgcHJpbWFyaWx5IGludGVyYWN0cyB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycyB2aWEgTURJTyAodXNpbmcgcGh5bGliIGZ1bmN0aW9ucyBsaWtlIHBoeV93cml0ZV9wYWdlZCBhbmQgcGh5X3JlYWRfcGFnZWQpIGFuZCBwZXJmb3JtcyBjYWxpYnJhdGlvbiByb3V0aW5lcy4gQWxsIGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChlLmcuLCBtdGtfc29jcGh5X3ByaXYgYW5kIHRoZSBzaGFyZWQgcGFja2FnZSBkYXRhKSBhcmUgemVyby1pbml0aWFsaXplZCB1c2luZyBkZXZtX2t6YWxsb2Mgb3Igc3RhbmRhcmQgcGh5bGliIGZ1bmN0aW9ucy4gU3RhY2sgdmFyaWFibGVzIGxpa2UgY2FsX2NvbXBsZXRlX2N0eCBhcmUgYWxzbyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVzZXItc3BhY2UgQVBJcywgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bHMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LWRlcGVuZGVudCBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt4c8[1] Phase: Succeeded StartedAt: 2026-08-25 19:21:21 +0000 UTC FinishedAt: 2026-08-25 19:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 19:21:21 +0000 UTC FinishedAt: 2026-08-25 19:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2] Phase: Succeeded StartedAt: 2026-08-25 19:21:21 +0000 UTC FinishedAt: 2026-08-25 20:12:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 19:21:21 +0000 UTC FinishedAt: 2026-08-25 20:12:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 19:21:21 +0000 UTC FinishedAt: 2026-08-25 19:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 19:21:21 +0000 UTC FinishedAt: 2026-08-25 19:21:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxt4c8/series-workflowxt4c8-convert-artifact-536529362/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 19:21:32 +0000 UTC FinishedAt: 2026-08-25 19:41:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 19:21:32 +0000 UTC FinishedAt: 2026-08-25 19:41:50 +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:*4df4de3e-2028-49fc-922c-413011f72cf5,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-workflowxt4c8/series-workflowxt4c8-convert-artifact-536529362/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": "304052fb-00b3-4a9e-b44f-ee88ee4a4f49", "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-workflowxt4c8/series-workflowxt4c8-build-action-454704720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 19:21:32 +0000 UTC FinishedAt: 2026-08-25 19:41:40 +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:*4df4de3e-2028-49fc-922c-413011f72cf5,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-workflowxt4c8/series-workflowxt4c8-convert-artifact-536529362/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": "304052fb-00b3-4a9e-b44f-ee88ee4a4f49", "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-workflowxt4c8/series-workflowxt4c8-build-action-454704720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 19:41:50 +0000 UTC FinishedAt: 2026-08-25 19:41:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 19:41:50 +0000 UTC FinishedAt: 2026-08-25 19:41:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 19:41:50 +0000 UTC FinishedAt: 2026-08-25 19:42:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 19:41:50 +0000 UTC FinishedAt: 2026-08-25 19:41:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxt4c8/series-workflowxt4c8-convert-artifact-1034113005/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 19:42:01 +0000 UTC FinishedAt: 2026-08-25 19:43:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 19:42:01 +0000 UTC FinishedAt: 2026-08-25 19:43:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*304052fb-00b3-4a9e-b44f-ee88ee4a4f49,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-workflowxt4c8/series-workflowxt4c8-build-action-454704720/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-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 19:43:37 +0000 UTC FinishedAt: 2026-08-25 19:43:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 19:43:37 +0000 UTC FinishedAt: 2026-08-25 19:43:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 19:43:37 +0000 UTC FinishedAt: 2026-08-25 20:03:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 19:43:37 +0000 UTC FinishedAt: 2026-08-25 20:03:56 +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:*4df4de3e-2028-49fc-922c-413011f72cf5,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-workflowxt4c8/series-workflowxt4c8-convert-artifact-1034113005/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": "3ca4cd6b-22a5-4a55-acf1-c1c2609af629", "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-workflowxt4c8/series-workflowxt4c8-build-action-2450129225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 19:43:37 +0000 UTC FinishedAt: 2026-08-25 20:03:46 +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:*4df4de3e-2028-49fc-922c-413011f72cf5,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-workflowxt4c8/series-workflowxt4c8-convert-artifact-1034113005/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": "3ca4cd6b-22a5-4a55-acf1-c1c2609af629", "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-workflowxt4c8/series-workflowxt4c8-build-action-2450129225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 20:03:56 +0000 UTC FinishedAt: 2026-08-25 20:03:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 20:03:56 +0000 UTC FinishedAt: 2026-08-25 20:03:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 20:03:56 +0000 UTC FinishedAt: 2026-08-25 20:06:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 20:03:56 +0000 UTC FinishedAt: 2026-08-25 20:05:57 +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:*3ca4cd6b-22a5-4a55-acf1-c1c2609af629,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-workflowxt4c8/series-workflowxt4c8-build-action-2450129225/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-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 20:06:07 +0000 UTC FinishedAt: 2026-08-25 20:12:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 20:06:07 +0000 UTC FinishedAt: 2026-08-25 20:12:54 +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":["en751221_fephy_probe","en751221_fephy_config_init"],"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:*304052fb-00b3-4a9e-b44f-ee88ee4a4f49,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3ca4cd6b-22a5-4a55-acf1-c1c2609af629,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-workflowxt4c8/series-workflowxt4c8-build-action-454704720/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-workflowxt4c8/series-workflowxt4c8-build-action-2450129225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 20:06:07 +0000 UTC FinishedAt: 2026-08-25 20:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 20:06:07 +0000 UTC FinishedAt: 2026-08-25 20:06:11 +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":["en751221_fephy_probe","en751221_fephy_config_init"],"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-workflowxt4c8/series-workflowxt4c8-convert-artifact-3441705810/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 20:06:07 +0000 UTC FinishedAt: 2026-08-25 20:06:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 20:06:07 +0000 UTC FinishedAt: 2026-08-25 20:06:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 20:06:07 +0000 UTC FinishedAt: 2026-08-25 20:06:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 20:06:17 +0000 UTC FinishedAt: 2026-08-25 20:12:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt4c8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["en751221_fephy_probe","en751221_fephy_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ECONET_FE_SOC_PHY"],"series_id":"c3b884f6-e4b9-4313-a019-20e20dfaeaba","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 20:06:17 +0000 UTC FinishedAt: 2026-08-25 20:12:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*304052fb-00b3-4a9e-b44f-ee88ee4a4f49,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3ca4cd6b-22a5-4a55-acf1-c1c2609af629,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-workflowxt4c8/series-workflowxt4c8-build-action-454704720/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-workflowxt4c8/series-workflowxt4c8-build-action-2450129225/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-workflowxt4c8/series-workflowxt4c8-convert-artifact-3441705810/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,}