Name: series-workflowtzbwd Phase: Failed StartedAt: 2026-07-20 14:10:37 +0000 UTC FinishedAt: 2026-07-20 14:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzbwd[0] Phase: Succeeded StartedAt: 2026-07-20 14:10:37 +0000 UTC FinishedAt: 2026-07-20 14:33:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzbwd[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 14:10:37 +0000 UTC FinishedAt: 2026-07-20 14:33:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUENJIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UgKFpURSBEaW5nSGFpIEV0aGVybmV0IGNvbnRyb2xsZXIpLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLiBUaGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uIHJlbGllcyBvbiBmaW5kaW5nIHNwZWNpZmljIHZlbmRvci1zcGVjaWZpYyBQQ0kgY2FwYWJpbGl0aWVzLCBtZWFuaW5nIGl0IGNhbm5vdCBiZSBzdWNjZXNzZnVsbHkgZm9yY2UtYm91bmQgdG8gb3RoZXIgdmlydHVhbCBQQ0kgZGV2aWNlcy4gVGhlcmVmb3JlLCB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YWJkMDM5MjJkYmZlOGIwY2IwNDcxNjllNmY5MzJmY2VmNGM3OTExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTQ6MzI6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMmZiMWM3NWFmZDE2MzguLjczNjkyYjA5YmY3YmFiIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMjk0NDAsNiAmIzQzOzI5NDQwLDEyIEBAIFM6XHRNYWludGFpbmVkXG4gVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGl3YWkvc291bmQuZ2l0XG4gRjpcdHNvdW5kL2hkYS9jb2RlY3Mvc2VuYXJ5dGVjaC5jXG4gXG4mIzQzO1pURSBESU5HSEFJIEVUSEVSTkVUIERSSVZFUlxuJiM0MztNOlx0SnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVxuJiM0MztMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuJiM0MztTOlx0TWFpbnRhaW5lZFxuJiM0MztGOlx0ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL1xuJiM0MztcbiBUSEUgUkVTVFxuIE06XHRMaW51cyBUb3J2YWxkcyBcdTAwM2N0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZ1x1MDAzZVxuIEw6XHRsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbmluZGV4IGI4ZjcwZTJhMTc2M2FkLi5jMmI2OTk2YjBjZmUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbkBAIC0xODgsNSAmIzQzOzE4OCw2IEBAIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWdcJiMzNDtcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXCYjMzQ7XG4gXG4gZW5kaWYgIyBFVEhFUk5FVFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbmluZGV4IDU3MzQ0ZmVjNmNlMDQ3Li5hMzRiY2JkNGRmNGU5MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuQEAgLTEwNCwzICYjNDM7MTA0LDQgQEAgb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWElSQ09NKSAmIzQzOz0geGlyY29tL1xuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1NZTk9QU1lTKSAmIzQzOz0gc3lub3BzeXMvXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE8pICYjNDM7PSBwZW5zYW5kby9cbiBvYmotJChDT05GSUdfT0FfVEM2KSAmIzQzOz0gb2FfdGM2Lm9cbiYjNDM7b2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWlRFKSAmIzQzOz0genRlL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjk1YzJmYzdkYjc3YTJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXG5AQCAtMCwwICYjNDM7MSwyMCBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIFpURSBkcml2ZXIgY29uZmlndXJhdGlvblxuJiM0MzsjXG4mIzQzO1xuJiM0Mztjb25maWcgTkVUX1ZFTkRPUl9aVEVcbiYjNDM7ICAgIGJvb2wgXCYjMzQ7WlRFIGRldmljZXNcJiMzNDtcbiYjNDM7ICAgIGRlZmF1bHQgeVxuJiM0MzsgICAgaGVscFxuJiM0MzsgICAgICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiYjNDM7ICAgICAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4mIzQzOyAgICAgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiYjNDM7ICAgICAgdGhlIHF1ZXN0aW9ucyBhYm91dCBadGUgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcbiYjNDM7ICAgICAgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiYjNDM7XG4mIzQzO2lmIE5FVF9WRU5ET1JfWlRFXG4mIzQzO1xuJiM0Mztzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1wmIzM0O1xuJiM0MztcbiYjNDM7ZW5kaWYgIyBORVRfVkVORE9SX1pURVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jZDk5MjliNjE1NTljNlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSw2IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjXG4mIzQzOyMgTWFrZWZpbGUgZm9yIHRoZSBaVEUgZGV2aWNlIGRyaXZlcnNcbiYjNDM7I1xuJiM0MztcbiYjNDM7b2JqLSQoQ09ORklHX0RJTkdIQUkpICYjNDM7PSBkaW5naGFpL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjEyMWJlM2JmNzcwN2ZkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXG5AQCAtMCwwICYjNDM7MSwzNCBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uXG4mIzQzOyNcbiYjNDM7XG4mIzQzO2NvbmZpZyBESU5HSEFJXG4mIzQzOyAgICBib29sIFwmIzM0O1pURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclwmIzM0O1xuJiM0MzsgICAgZGVwZW5kcyBvbiBQQ0lcbiYjNDM7ICAgIHNlbGVjdCBORVRfREVWTElOS1xuJiM0MzsgICAgaGVscFxuJiM0MzsgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLlxuJiM0MztcbiYjNDM7ICAgICAgRGluZ0hhaSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgRXRoZXJuZXQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzXG4mIzQzOyAgICAgIG11bHRpcGxlIGZlYXR1cmVzIGluY2x1ZGluZyBoYXJkd2FyZSBvZmZsb2FkaW5nLCBTUi1JT1YsIGFuZFxuJiM0MzsgICAgICBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMuXG4mIzQzO1xuJiM0MzsgICAgICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgZHJpdmVyIHZhcmlhbnRzIGJlbG93LlxuJiM0MztcbiYjNDM7ICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjNDM7XG4mIzQzO2lmIERJTkdIQUlcbiYjNDM7XG4mIzQzO2NvbmZpZyBESU5HSEFJX1BGXG4mIzQzOyAgICB0cmlzdGF0ZSBcJiMzNDtaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclwmIzM0O1xuJiM0MzsgICAgaGVscFxuJiM0MzsgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBQQ0kgRXhwcmVzcyBFdGhlcm5ldFxuJiM0MzsgICAgICBhZGFwdGVycyAoUEYpLlxuJiM0MztcbiYjNDM7ICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuJiM0MzsgICAgICB3aWxsIGJlIG5hbWVkIGRpbmdoYWkxMGUuXG4mIzQzO1xuJiM0MzsgICAgICBJZiB1bnN1cmUsIHNheSBOLlxuJiM0MztcbiYjNDM7ZW5kaWYgIyBESU5HSEFJXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xMGRmNGViNzllODBlMVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDkgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBNYWtlZmlsZSBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXG4mIzQzOyNcbiYjNDM7XG4mIzQzO2NjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYylcbiYjNDM7XG4mIzQzO29iai0kKENPTkZJR19ESU5HSEFJX1BGKSAmIzQzOz0gZGluZ2hhaTEwZS5vXG4mIzQzO2RpbmdoYWkxMGUteSA6PSBlbl9wZi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWZhYzY3ZjcxNDdjYjlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcbkBAIC0wLDAgJiM0MzsxLDU0IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUENJIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnNcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fREhfUVVFVUVfSF9fXG4mIzQzOyNkZWZpbmUgX19ESF9RVUVVRV9IX19cbiYjNDM7XG4mIzQzOy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi9cbiYjNDM7c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCB7XG4mIzQzO1x0X191OCBjYXBfdm5kcjtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xuJiM0MztcdF9fdTggY2FwX25leHQ7XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi9cbiYjNDM7XHRfX3U4IGNhcF9sZW47XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBjYXBhYmlsaXR5IGxlbmd0aCAqL1xuJiM0MztcdF9fdTggY2ZnX3R5cGU7XHRcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cbiYjNDM7XHRfX3U4IGJhcjtcdFx0LyogV2hlcmUgdG8gZmluZCBpdC4gKi9cbiYjNDM7XHRfX3U4IGlkO1x0XHQvKiBNdWx0aXBsZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZSAqL1xuJiM0MztcdF9fdTggcGFkZGluZ1syXTtcdFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXG4mIzQzO1x0X19sZTMyIG9mZnNldDtcdFx0LyogT2Zmc2V0IHdpdGhpbiBiYXIuICovXG4mIzQzO1x0X19sZTMyIGxlbmd0aDtcdFx0LyogTGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUsIGluIGJ5dGVzLiAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogRmllbGRzIGluIFpYREhfUEZfUENJX0NBUF9DT01NT05fQ0ZHOiAqL1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XG4mIzQzO1x0LyogQWJvdXQgdGhlIHdob2xlIGRldmljZS4gKi9cbiYjNDM7XHRfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIGRldmljZV9mZWF0dXJlO1x0LyogcmVhZC1vbmx5ICovXG4mIzQzO1x0X19sZTMyIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIGd1ZXN0X2ZlYXR1cmU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgbXNpeF9jb25maWc7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgbnVtX3F1ZXVlcztcdFx0LyogcmVhZC1vbmx5ICovXG4mIzQzO1x0X191OCBkZXZpY2Vfc3RhdHVzO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcdC8qIHJlYWQtb25seSAqL1xuJiM0MztcbiYjNDM7XHQvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi9cbiYjNDM7XHRfX2xlMTYgcXVldWVfc2VsZWN0O1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTE2IHF1ZXVlX3NpemU7XHRcdC8qIHJlYWQtd3JpdGUsIHBvd2VyIG9mIDIuICovXG4mIzQzO1x0X19sZTE2IHF1ZXVlX21zaXhfdmVjdG9yO1x0LyogcmVhZC13cml0ZSAqL1xuJiM0MztcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgcXVldWVfbm90aWZ5X29mZjtcdC8qIHJlYWQtb25seSAqL1xuJiM0MztcdF9fbGUzMiBxdWV1ZV9kZXNjX2xvO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIHF1ZXVlX2Rlc2NfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfYXZhaWxfbG87XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfYXZhaWxfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfdXNlZF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuJiM0MztcdF9fbGUzMiBxdWV1ZV91c2VkX2hpO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCBjYXA7XG4mIzQzO1x0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFlNWE3N2RkYWNhNTY5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5AQCAtMCwwICYjNDM7MSw0NjUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbl9wZi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2RoX3F1ZXVlLmhcJiMzNDtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgenhkaF9wZl9kZXZsaW5rX29wcyA9IHt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHp4ZGhfcGZfcGNpX3RhYmxlW10gPSB7XG4mIzQzO1x0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSxcbiYjNDM7XHR7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfVkZfREVWSUNFX0lEKSB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHp4ZGhfcGZfcGNpX3RhYmxlKTtcbiYjNDM7XG4mIzQzO3ZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHR2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYpXG4mIzQzO1x0XHR6eGRoX2Rldi1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XHRyZXR1cm4gcHJpdjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdGtmcmVlKHp4ZGhfZGV2LVx1MDAzZXByaXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfcGNpX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBjaV9zZXRfZHJ2ZGF0YSh6eGRoX2Rldi1cdTAwM2VwZGV2LCB6eGRoX2Rldik7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgRE1BX0JJVF9NQVNLKDMyKSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3BjaTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbiYjNDM7XHRcdFx0XHRcdCAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSksXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtkaC1wZlwmIzM0Oyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX3BjaTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBjaV9zZXRfbWFzdGVyKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdHJldCA9IHBjaV9zYXZlX3N0YXRlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MoenhkaF9kZXYtXHUwMDNlcGRldiwgMCkgXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT0RFVjtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtCQVIgMCBpcyBub3QgYW4gTU1JTyByZXNvdXJjZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdID1cbiYjNDM7XHRcdGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHp4ZGhfZGV2LVx1MDAzZXBkZXYsIDApLFxuJiM0MztcdFx0XHRwY2lfcmVzb3VyY2VfbGVuKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIDApKTtcbiYjNDM7XHRpZiAoIXBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O2RoIHBmIHBjaSBpb3JlbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3BjaV9zYXZlX3N0YXRlOlxuJiM0MztcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xuJiM0MztlcnJfcGNpOlxuJiM0MztcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHp4ZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aW91bm1hcChwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSk7XG4mIzQzO1x0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi1cdTAwM2VwZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7XG4mIzQzO1x0cGNpX2Rpc2FibGVfZGV2aWNlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcbiYjNDM7XHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBvcztcbiYjNDM7XHR1OCB0eXBlO1xuJiM0MztcdHU4IGJhcjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfVk5EUik7IHBvcyBcdTAwM2UgMDtcbiYjNDM7XHQgICAgIHBvcyA9IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eShwZGV2LCBwb3MsIFBDSV9DQVBfSURfVk5EUikpIHtcbiYjNDM7XHRcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRjZmdfdHlwZSksIFx1MDAyNnR5cGUpO1xuJiM0MztcdFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHBvcyAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcdTAwMjZiYXIpO1xuJiM0MztcbiYjNDM7XHRcdC8qIGlnbm9yZSBzdHJ1Y3R1cmVzIHdpdGggcmVzZXJ2ZWQgQkFSIHZhbHVlcyAqL1xuJiM0MztcdFx0aWYgKGJhciBcdTAwM2UgWlhESF9QRl9NQVhfQkFSX1ZBTClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHR5cGUgPT0gY2ZnX3R5cGUpIHtcbiYjNDM7XHRcdFx0aWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpIFx1MDAyNiBpb3Jlc291cmNlX3R5cGVzKSB7XG4mIzQzO1x0XHRcdFx0KmJhcnMgfD0gKDEgXHUwMDNjXHUwMDNjIGJhcik7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIHBvcztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgc3RhcnQsIHUzMiBzaXplLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgKmJhcl9vZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0dm9pZCBfX2lvbWVtICpwO1xuJiM0MztcdHUzMiBvZmZzZXQ7XG4mIzQzO1x0dTMyIGxlbmd0aDtcbiYjNDM7XHR1OCBiYXI7XG4mIzQzO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4mIzQzO1x0XHRcdCAgICAgb2ZmICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFx1MDAyNmJhcik7XG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4mIzQzO1x0XHRcdCAgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxuJiM0MztcdFx0XHRcdFx0XHRvZmZzZXQpLCBcdTAwMjZvZmZzZXQpO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuJiM0MztcdFx0XHQgICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcbiYjNDM7XHRcdFx0XHRcdFx0bGVuZ3RoKSwgXHUwMDI2bGVuZ3RoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJhcl9vZmYpXG4mIzQzO1x0XHQqYmFyX29mZiA9IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGxlbmd0aCBcdTAwM2M9IHN0YXJ0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7YmFkIGNhcGFiaWxpdHkgbGVuICV1IChcdTAwM2UldSBleHBlY3RlZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGxlbmd0aCwgc3RhcnQpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobGVuZ3RoIC0gc3RhcnQgXHUwMDNjIG1pbmxlbikge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlPSV6dSBleHBlY3RlZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGxlbmd0aCwgbWlubGVuKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGVuZ3RoIC09IHN0YXJ0O1xuJiM0MztcdGlmIChzdGFydCAmIzQzOyBvZmZzZXQgXHUwMDNjIG9mZnNldCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O21hcCB3cmFwLWFyb3VuZCAldSYjNDM7JXVcXG5cJiMzNDssIHN0YXJ0LCBvZmZzZXQpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvZmZzZXQgJiM0Mzs9IHN0YXJ0O1xuJiM0MztcdGlmIChvZmZzZXQgXHUwMDI2IChhbGlnbiAtIDEpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7b2Zmc2V0ICV1IG5vdCBhbGlnbmVkIHRvICV1XFxuXCYjMzQ7LCBvZmZzZXQsIGFsaWduKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxlbmd0aCBcdTAwM2Ugc2l6ZSlcbiYjNDM7XHRcdGxlbmd0aCA9IHNpemU7XG4mIzQzO1xuJiM0MztcdGlmIChsZW4pXG4mIzQzO1x0XHQqbGVuID0gbGVuZ3RoO1xuJiM0MztcbiYjNDM7XHRpZiAobWlubGVuICYjNDM7IG9mZnNldCBcdTAwM2MgbWlubGVuIHx8XG4mIzQzO1x0ICAgIG1pbmxlbiAmIzQzOyBvZmZzZXQgXHUwMDNlIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsXG4mIzQzO1x0XHRcdFwmIzM0O21hcCBjdXN0b20gcXVldWUgJXp1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0bWlubGVuLCBvZmZzZXQsIGJhcixcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cCA9IHBjaV9pb21hcF9yYW5nZShwZGV2LCBiYXIsIG9mZnNldCwgbGVuZ3RoKTtcbiYjNDM7XHRpZiAoIXApIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt1bmFibGUgdG8gbWFwIGN1c3RvbSBxdWV1ZSAldUAldSBvbiBiYXIgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGxlbmd0aCwgb2Zmc2V0LCBiYXIpO1xuJiM0MztcdH0gZWxzZSBpZiAocGEpIHtcbiYjNDM7XHRcdCpwYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBiYXIpICYjNDM7IG9mZnNldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbiYjNDM7XHRpbnQgY29tbW9uO1xuJiM0MztcbiYjNDM7XHQvKiBjaGVjayBmb3IgYSBjb21tb24gY29uZmlnOiBpZiBub3QsIHVzZSBsZWdhY3kgbW9kZSAoYmFyIDApLiAqL1xuJiM0MztcdGNvbW1vbiA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfQ09NTU9OX0NGRyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuJiM0MztcdGlmICghY29tbW9uKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0XCYjMzQ7bWlzc2luZyBjYXBhYmlsaXRpZXMsIGxlYXZpbmcgZm9yIGxlZ2FjeSBkcml2ZXJcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZl9kZXYtXHUwMDNlY29tbW9uID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgY29tbW9uLFxuJiM0MztcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLFxuJiM0MztcdFx0XHRcdFx0XHRaWERIX1BGX0FMSUdONCwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcbiYjNDM7XHRcdFx0XHRcdFx0TlVMTCwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKCFwZl9kZXYtXHUwMDNlY29tbW9uKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGZfZGV2LVx1MDAzZWNvbW1vbiBpcyBudWxsXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdHUzMiBub3RpZnlfbGVuZ3RoO1xuJiM0MztcdHUzMiBub3RpZnlfb2Zmc2V0O1xuJiM0MztcdGludCBub3RpZnk7XG4mIzQzO1xuJiM0MztcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xuJiM0MztcdG5vdGlmeSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfTk9USUZZX0NGRyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuJiM0MztcdGlmICghbm90aWZ5KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7bWlzc2luZyBub3RpZnkgY2ZnIGNhcGFiaWxpdHlcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuJiM0MztcdFx0XHRcdG5vdGlmeV9vZmZfbXVsdGlwbGllciksXG4mIzQzO1x0XHRcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyKTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuJiM0MztcdFx0XHRcdGNhcC5sZW5ndGgpLCBcdTAwMjZub3RpZnlfbGVuZ3RoKTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuJiM0MztcdFx0XHRcdGNhcC5vZmZzZXQpLCBcdTAwMjZub3RpZnlfb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0LyogV2UgZG9uJiMzOTt0IGtub3cgaG93IG1hbnkgVlFzIHdlJiMzOTtsbCBtYXAsIGFoZWFkIG9mIHRoZSB0aW1lLlxuJiM0MztcdCAqIElmIG5vdGlmeSBsZW5ndGggaXMgc21hbGwsIG1hcCBpdCBhbGwgbm93LiBPdGhlcndpc2UsXG4mIzQzO1x0ICogbWFwIGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChub3RpZnlfbGVuZ3RoICYjNDM7IChub3RpZnlfb2Zmc2V0ICUgUEFHRV9TSVpFKSBcdTAwM2M9IFBBR0VfU0laRSkge1xuJiM0MztcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2Rldiwgbm90aWZ5LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgWlhESF9QRl9NQVBfTUlOTEVOMixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgWlhESF9QRl9BTElHTjIsIDAsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIG5vdGlmeV9sZW5ndGgsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vub3RpZnlfbGVuLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X3BhLCBOVUxMKTtcbiYjNDM7XHRcdGlmICghcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UgaXMgbnVsbFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwZl9kZXYtXHUwMDNlbm90aWZ5X21hcF9jYXAgPSBub3RpZnk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0aW50IGRldmljZTtcbiYjNDM7XG4mIzQzO1x0LyogRGV2aWNlIGNhcGFiaWxpdHkgaXMgb25seSBtYW5kYXRvcnkgZm9yXG4mIzQzO1x0ICogZGV2aWNlcyB0aGF0IGhhdmUgZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGV2aWNlID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHLFxuJiM0MztcdFx0XHRcdFx0ICAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sXG4mIzQzO1x0XHRcdFx0XHQgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vtb2Rlcm5fYmFycyk7XG4mIzQzO1xuJiM0MztcdC8qIHdlIGRvbiYjMzk7dCBrbm93IGhvdyBtdWNoIHdlIHNob3VsZCBtYXAsXG4mIzQzO1x0ICogYnV0IFBBR0VfU0laRSBpcyBtb3JlIHRoYW4gZW5vdWdoIGZvciBhbGwgZXhpc3RpbmcgZGV2aWNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZGV2aWNlKSB7XG4mIzQzO1x0XHRwZl9kZXYtXHUwMDNlZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgZGV2aWNlLCAwLFxuJiM0MztcdFx0XHRcdFx0XHRcdFpYREhfUEZfQUxJR040LCAwLCBQQUdFX1NJWkUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlZGV2aWNlX2xlbiwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYpO1xuJiM0MztcdFx0aWYgKCFwZl9kZXYtXHUwMDNlZGV2aWNlKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwZl9kZXYtXHUwMDNlZGV2aWNlIGlzIG51bGxcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZWRldmljZSlcbiYjNDM7XHRcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2VkZXZpY2UpO1xuJiM0MztcdGlmIChwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpXG4mIzQzO1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpO1xuJiM0MztcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vjb21tb24pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCh6eGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3p4ZGhfcGZfY29tbW9uX2NmZ19pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0genhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoenhkaF9kZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfbWFwX25vdGlmeTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7enhkaF9wZl9kZXZpY2VfY2ZnX2luaXQgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX21hcF9kZXZpY2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9tYXBfZGV2aWNlOlxuJiM0MztcdGlmIChwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpXG4mIzQzO1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpO1xuJiM0MztlcnJfbWFwX25vdGlmeTpcbiYjNDM7XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlY29tbW9uKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2O1xuJiM0MztcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZXZsaW5rID0gZGV2bGlua19hbGxvYyhcdTAwMjZ6eGRoX3BmX2Rldmxpbmtfb3BzLCBzaXplb2Yoc3RydWN0IHp4ZGhfY29yZV9kZXYpLFxuJiM0MztcdFx0XHRcdFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIWRldmxpbmspIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3p4ZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR6eGRoX2RldiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTtcbiYjNDM7XHR6eGRoX2Rldi1cdTAwM2VkZXZpY2UgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiYjNDM7XHR6eGRoX2Rldi1cdTAwM2VwZGV2ID0gcGRldjtcbiYjNDM7XHR6eGRoX2Rldi1cdTAwM2VkZXZsaW5rID0gZGV2bGluaztcbiYjNDM7XG4mIzQzO1x0cGZfZGV2ID0genhkaF9jb3JlX2FsbG9jX3ByaXYoenhkaF9kZXYsIHNpemVvZigqcGZfZGV2KSk7XG4mIzQzO1x0aWYgKCFwZl9kZXYpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3p4ZGhfcGZfZGV2IGFsbG9jIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfcGZfZGV2O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGZfZGV2LVx1MDAzZWJhcl9jaGFuX3ZhbGlkID0gZmFsc2U7XG4mIzQzO1x0cGZfZGV2LVx1MDAzZXZlcGEgPSBmYWxzZTtcbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0enhkaF9kZXYtXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0genhkaF9wZl9wY2lfaW5pdCh6eGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7enhkaF9wZl9wY2lfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfcGZfaW5pdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDt6eGRoX3BmX21vZGVybl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9jZmdfaW5pdDpcbiYjNDM7XHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG4mIzQzO2Vycl9wZl9pbml0OlxuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xuJiM0MztlcnJfcGZfZGV2OlxuJiM0MztcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayh6eGRoX2Rldik7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG4mIzQzO1x0enhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdCh6eGRoX2Rldik7XG4mIzQzO1x0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xuJiM0MztcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbiYjNDM7XHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXG4mIzQzO1x0XHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XG4mIzQzO1x0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgenhkaF9wZl9kcml2ZXIgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtkaW5naGFpMTBlXCYjMzQ7LFxuJiM0MztcdC5pZF90YWJsZSA9IHp4ZGhfcGZfcGNpX3RhYmxlLFxuJiM0MztcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXG4mIzQzO1x0LnJlbW92ZSA9IHp4ZGhfcGZfcmVtb3ZlLFxuJiM0MztcdC5zaHV0ZG93biA9IHp4ZGhfcGZfc2h1dGRvd24sXG4mIzQzO307XG4mIzQzO1xuJiM0Mzttb2R1bGVfcGNpX2RyaXZlcih6eGRoX3BmX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNThjNWRhOWEwOWZmY2Ncbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbkBAIC0wLDAgJiM0MzsxLDEwMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qXG4mIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBGIGhlYWRlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19aWERIX0VOX1BGX0hfX1xuJiM0MzsjZGVmaW5lIF9fWlhESF9FTl9QRl9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcdDB4MWNmMlxuJiM0MzsjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXHQweDgwNDBcbiYjNDM7I2RlZmluZSBaWERIX1ZGX0RFVklDRV9JRFx0MHg4MDQxXG4mIzQzO1xuJiM0MzsvKiBDb21tb24gY29uZmlndXJhdGlvbiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHXHQxXG4mIzQzOy8qIE5vdGlmaWNhdGlvbnMgKi9cbiYjNDM7I2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1x0MlxuJiM0MzsvKiBJU1IgYWNjZXNzICovXG4mIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0lTUl9DRkdcdFx0M1xuJiM0MzsvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHXHQ0XG4mIzQzOy8qIFBDSSBjb25maWd1cmF0aW9uIGFjY2VzcyAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHXHRcdDVcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9QRl9NQVhfQkFSX1ZBTFx0XHQweDVcbiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdONFx0XHRcdDRcbiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdOMlx0XHRcdDJcbiYjNDM7I2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yXHRcdDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUXHQ0XG4mIzQzO1xuJiM0MztlbnVtIHp4ZGhfY29yZWRldl90eXBlIHtcbiYjNDM7XHRESF9DT1JFREVWX1BGLFxuJiM0MztcdERIX0NPUkVERVZfVkYsXG4mIzQzO1x0REhfQ09SRURFVl9TRixcbiYjNDM7XHRESF9DT1JFREVWX01QRlxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGRldmxpbms7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2aWNlO1xuJiM0MztcdGVudW0genhkaF9jb3JlZGV2X3R5cGUgY29yZWRldl90eXBlO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuJiM0MztcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBQcm90ZWN0cyBkZXZpY2UgY29uZmlndXJhdGlvbiAqL1xuJiM0MztcdHZvaWQgKnByaXY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9kZXYge1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNvbW1vbjtcbiYjNDM7XHQvKiBEZXZpY2Utc3BlY2lmaWMgZGF0YSAobm9uLWxlZ2FjeSBtb2RlKSAgKi9cbiYjNDM7XHQvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovXG4mIzQzO1x0dm9pZCBfX2lvbWVtICpkZXZpY2U7XG4mIzQzO1x0dm9pZCBfX2lvbWVtICpub3RpZnlfYmFzZTtcbiYjNDM7XHR2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlO1xuJiM0MztcdC8qIFBoeXNpY2FsIGJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAqL1xuJiM0MztcdHJlc291cmNlX3NpemVfdCBub3RpZnlfcGE7XG4mIzQzO1x0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cbiYjNDM7XHRzaXplX3Qgbm90aWZ5X2xlbjtcbiYjNDM7XHRzaXplX3QgZGV2aWNlX2xlbjtcbiYjNDM7XHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xuJiM0MztcdHMzMiBub3RpZnlfbWFwX2NhcDtcbiYjNDM7XHR1MzIgbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyO1xuJiM0MztcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXG4mIzQzO1x0czMyIG1vZGVybl9iYXJzO1xuJiM0MztcdHZvaWQgX19pb21lbSAqcGNpX2lvcmVtYXBfYWRkcls2XTtcbiYjNDM7XHR1NjQgc3Jpb3ZfYmFyX3NpemU7XG4mIzQzO1x0dTMyIGRldl9jZmdfYmFyX29mZjtcbiYjNDM7XHRib29sIHBhY2tlZF9zdGF0dXM7XG4mIzQzO1x0Ym9vbCBiYXJfY2hhbl92YWxpZDtcbiYjNDM7XHRib29sIHZlcGE7XG4mIzQzO1x0c3RydWN0IG11dGV4IGlycV9sb2NrOyAvKiBQcm90ZWN0cyBJUlEgb3BlcmF0aW9ucyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBHRVRfQ09SRURFVl9UWVBFKHBkZXYpIFxcXG4mIzQzO1x0KChwZGV2KS1cdTAwM2VkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRilcbiYjNDM7XG4mIzQzO3ZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpO1xuJiM0Mzt2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcbiYjNDM7XHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKTtcbiYjNDM7dm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiwgaW50IG9mZixcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbixcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplX3QgKmxlbiwgcmVzb3VyY2Vfc2l6ZV90ICpwYSxcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiAqYmFyX29mZik7XG4mIzQzO2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4mIzQzO3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX1pYREhfRU5fUEZfSF9fICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQQ0kgZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIGRldmljZSAoWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlcikuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwuIFRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gcmVsaWVzIG9uIGZpbmRpbmcgc3BlY2lmaWMgdmVuZG9yLXNwZWNpZmljIFBDSSBjYXBhYmlsaXRpZXMsIG1lYW5pbmcgaXQgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBmb3JjZS1ib3VuZCB0byBvdGhlciB2aXJ0dWFsIFBDSSBkZXZpY2VzLiBUaGVyZWZvcmUsIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmFiZDAzOTIyZGJmZThiMGNiMDQ3MTY5ZTZmOTMyZmNlZjRjNzkxMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDE0OjMyOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAyZmIxYzc1YWZkMTYzOC4uNzM2OTJiMDliZjdiYWIgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0yOTQ0MCw2ICYjNDM7Mjk0NDAsMTIgQEAgUzoJTWFpbnRhaW5lZAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXdhaS9zb3VuZC5naXQKIEY6CXNvdW5kL2hkYS9jb2RlY3Mvc2VuYXJ5dGVjaC5jCiAKJiM0MztaVEUgRElOR0hBSSBFVEhFUk5FVCBEUklWRVIKJiM0MztNOglKdW55YW5nIEhhbiAmbHQ7aGFuLmp1bnlhbmdAenRlLmNvbS5jbiZndDsKJiM0MztMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJTWFpbnRhaW5lZAomIzQzO0Y6CWRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS8KJiM0MzsKIFRIRSBSRVNUCiBNOglMaW51cyBUb3J2YWxkcyAmbHQ7dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmcmZ3Q7CiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZwppbmRleCBiOGY3MGUyYTE3NjNhZC4uYzJiNjk5NmIwY2ZlMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZwpAQCAtMTg4LDUgJiM0MzsxODgsNiBAQCBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWcmIzM0Owogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWcmIzM0Owogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWcmIzM0Owogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWcmIzM0OwomIzQzO3NvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnJiMzNDsKIAogZW5kaWYgIyBFVEhFUk5FVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQppbmRleCA1NzM0NGZlYzZjZTA0Ny4uYTM0YmNiZDRkZjRlOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlCkBAIC0xMDQsMyAmIzQzOzEwNCw0IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgJiM0Mzs9IHhpcmNvbS8KIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1NZTk9QU1lTKSAmIzQzOz0gc3lub3BzeXMvCiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9QRU5TQU5ETykgJiM0Mzs9IHBlbnNhbmRvLwogb2JqLSQoQ09ORklHX09BX1RDNikgJiM0Mzs9IG9hX3RjNi5vCiYjNDM7b2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWlRFKSAmIzQzOz0genRlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYjk1YzJmYzdkYjc3YTIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZwpAQCAtMCwwICYjNDM7MSwyMCBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIFpURSBkcml2ZXIgY29uZmlndXJhdGlvbgomIzQzOyMKJiM0MzsKJiM0Mztjb25maWcgTkVUX1ZFTkRPUl9aVEUKJiM0MzsgICAgYm9vbCAmIzM0O1pURSBkZXZpY2VzJiMzNDsKJiM0MzsgICAgZGVmYXVsdCB5CiYjNDM7ICAgIGhlbHAKJiM0MzsgICAgICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS4KJiM0MzsgICAgICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGUKJiM0MzsgICAgICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsCiYjNDM7ICAgICAgdGhlIHF1ZXN0aW9ucyBhYm91dCBadGUgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQKJiM0MzsgICAgICBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLgomIzQzOwomIzQzO2lmIE5FVF9WRU5ET1JfWlRFCiYjNDM7CiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZyYjMzQ7CiYjNDM7CiYjNDM7ZW5kaWYgIyBORVRfVkVORE9SX1pURQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jZDk5MjliNjE1NTljNgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw2IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7IwomIzQzOyMgTWFrZWZpbGUgZm9yIHRoZSBaVEUgZGV2aWNlIGRyaXZlcnMKJiM0MzsjCiYjNDM7CiYjNDM7b2JqLSQoQ09ORklHX0RJTkdIQUkpICYjNDM7PSBkaW5naGFpLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjEyMWJlM2JmNzcwN2ZkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZwpAQCAtMCwwICYjNDM7MSwzNCBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uCiYjNDM7IwomIzQzOwomIzQzO2NvbmZpZyBESU5HSEFJCiYjNDM7ICAgIGJvb2wgJiMzNDtaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXImIzM0OwomIzQzOyAgICBkZXBlbmRzIG9uIFBDSQomIzQzOyAgICBzZWxlY3QgTkVUX0RFVkxJTksKJiM0MzsgICAgaGVscAomIzQzOyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuCiYjNDM7CiYjNDM7ICAgICAgRGluZ0hhaSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgRXRoZXJuZXQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzCiYjNDM7ICAgICAgbXVsdGlwbGUgZmVhdHVyZXMgaW5jbHVkaW5nIGhhcmR3YXJlIG9mZmxvYWRpbmcsIFNSLUlPViwgYW5kCiYjNDM7ICAgICAgYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLgomIzQzOwomIzQzOyAgICAgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgY2FuIHNlbGVjdCBzcGVjaWZpYyBkcml2ZXIgdmFyaWFudHMgYmVsb3cuCiYjNDM7CiYjNDM7ICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KJiM0MzsKJiM0MztpZiBESU5HSEFJCiYjNDM7CiYjNDM7Y29uZmlnIERJTkdIQUlfUEYKJiM0MzsgICAgdHJpc3RhdGUgJiMzNDtaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlciYjMzQ7CiYjNDM7ICAgIGhlbHAKJiM0MzsgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBQQ0kgRXhwcmVzcyBFdGhlcm5ldAomIzQzOyAgICAgIGFkYXB0ZXJzIChQRikuCiYjNDM7CiYjNDM7ICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQomIzQzOyAgICAgIHdpbGwgYmUgbmFtZWQgZGluZ2hhaTEwZS4KJiM0MzsKJiM0MzsgICAgICBJZiB1bnN1cmUsIHNheSBOLgomIzQzOwomIzQzO2VuZGlmICMgRElOR0hBSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMTBkZjRlYjc5ZTgwZTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw5IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7IwomIzQzOyMgTWFrZWZpbGUgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlcgomIzQzOyMKJiM0MzsKJiM0MztjY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpCiYjNDM7CiYjNDM7b2JqLSQoQ09ORklHX0RJTkdIQUlfUEYpICYjNDM7PSBkaW5naGFpMTBlLm8KJiM0MztkaW5naGFpMTBlLXkgOj0gZW5fcGYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFmYWM2N2Y3MTQ3Y2I5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaApAQCAtMCwwICYjNDM7MSw1NCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKgomIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBDSSBjYXBhYmlsaXR5IGRlZmluaXRpb25zCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fREhfUVVFVUVfSF9fCiYjNDM7I2RlZmluZSBfX0RIX1FVRVVFX0hfXwomIzQzOwomIzQzOy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi8KJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwIHsKJiM0MzsJX191OCBjYXBfdm5kcjsJCS8qIEdlbmVyaWMgUENJIGZpZWxkOiBQQ0lfQ0FQX0lEX1ZORFIgKi8KJiM0MzsJX191OCBjYXBfbmV4dDsJCS8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi8KJiM0MzsJX191OCBjYXBfbGVuOwkJLyogR2VuZXJpYyBQQ0kgZmllbGQ6IGNhcGFiaWxpdHkgbGVuZ3RoICovCiYjNDM7CV9fdTggY2ZnX3R5cGU7CQkvKiBJZGVudGlmaWVzIHRoZSBzdHJ1Y3R1cmUuICovCiYjNDM7CV9fdTggYmFyOwkJLyogV2hlcmUgdG8gZmluZCBpdC4gKi8KJiM0MzsJX191OCBpZDsJCS8qIE11bHRpcGxlIGNhcGFiaWxpdGllcyBvZiB0aGUgc2FtZSB0eXBlICovCiYjNDM7CV9fdTggcGFkZGluZ1syXTsJCS8qIFBhZCB0byBmdWxsIGR3b3JkLiAqLwomIzQzOwlfX2xlMzIgb2Zmc2V0OwkJLyogT2Zmc2V0IHdpdGhpbiBiYXIuICovCiYjNDM7CV9fbGUzMiBsZW5ndGg7CQkvKiBMZW5ndGggb2YgdGhlIHN0cnVjdHVyZSwgaW4gYnl0ZXMuICovCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBGaWVsZHMgaW4gWlhESF9QRl9QQ0lfQ0FQX0NPTU1PTl9DRkc6ICovCiYjNDM7c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgewomIzQzOwkvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqLwomIzQzOwlfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fbGUzMiBkZXZpY2VfZmVhdHVyZTsJLyogcmVhZC1vbmx5ICovCiYjNDM7CV9fbGUzMiBndWVzdF9mZWF0dXJlX3NlbGVjdDsgLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMzIgZ3Vlc3RfZmVhdHVyZTsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IG1zaXhfY29uZmlnOwkJLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMTYgbnVtX3F1ZXVlczsJCS8qIHJlYWQtb25seSAqLwomIzQzOwlfX3U4IGRldmljZV9zdGF0dXM7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fdTggY29uZmlnX2dlbmVyYXRpb247CS8qIHJlYWQtb25seSAqLwomIzQzOwomIzQzOwkvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi8KJiM0MzsJX19sZTE2IHF1ZXVlX3NlbGVjdDsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX3NpemU7CQkvKiByZWFkLXdyaXRlLCBwb3dlciBvZiAyLiAqLwomIzQzOwlfX2xlMTYgcXVldWVfbXNpeF92ZWN0b3I7CS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX2VuYWJsZTsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX25vdGlmeV9vZmY7CS8qIHJlYWQtb25seSAqLwomIzQzOwlfX2xlMzIgcXVldWVfZGVzY19sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX2Rlc2NfaGk7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fbGUzMiBxdWV1ZV9hdmFpbF9sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX2F2YWlsX2hpOwkJLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMzIgcXVldWVfdXNlZF9sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX3VzZWRfaGk7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwOwomIzQzOwlfX2xlMzIgbm90aWZ5X29mZl9tdWx0aXBsaWVyOyAvKiBNdWx0aXBsaWVyIGZvciBxdWV1ZV9ub3RpZnlfb2ZmLiAqLwomIzQzO307CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fREhfUVVFVUVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYWU1YTc3ZGRhY2E1NjkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jCkBAIC0wLDAgJiM0MzsxLDQ2NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlcgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2RldmxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcHBpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VuX3BmLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZGhfcXVldWUuaCYjMzQ7CiYjNDM7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0p1bnlhbmcgSGFuICZsdDtoYW4uanVueWFuZ0B6dGUuY29tLmNuJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgenhkaF9wZl9kZXZsaW5rX29wcyA9IHt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6eGRoX3BmX3BjaV90YWJsZVtdID0gewomIzQzOwl7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfUEZfREVWSUNFX0lEKSB9LAomIzQzOwl7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfVkZfREVWSUNFX0lEKSB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzOwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7CiYjNDM7CiYjNDM7dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXZvaWQgKnByaXYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwomIzQzOwomIzQzOwlpZiAocHJpdikKJiM0MzsJCXp4ZGhfZGV2LSZndDtwcml2ID0gcHJpdjsKJiM0MzsJcmV0dXJuIHByaXY7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgenhkaF9jb3JlX2ZyZWVfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlrZnJlZSh6eGRoX2Rldi0mZ3Q7cHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgenhkaF9wZl9wY2lfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwY2lfc2V0X2RydmRhdGEoenhkaF9kZXYtJmd0O3BkZXYsIHp4ZGhfZGV2KTsKJiM0MzsKJiM0MzsJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoenhkaF9kZXYtJmd0O3BkZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7cGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtJmd0O2RldmljZSwgRE1BX0JJVF9NQVNLKDY0KSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtJmd0O2RldmljZSwgRE1BX0JJVF9NQVNLKDMyKSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O2RtYV9zZXRfbWFza19hbmRfY29oZXJlbnQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQkJZ290byBlcnJfcGNpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtJmd0O3BkZXYsCiYjNDM7CQkJCQkgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtJmd0O3BkZXYsIElPUkVTT1VSQ0VfTUVNKSwKJiM0MzsJCQkJCSAgICYjMzQ7ZGgtcGYmIzM0Oyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfcGNpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjaV9zZXRfbWFzdGVyKHp4ZGhfZGV2LSZndDtwZGV2KTsKJiM0MzsJcmV0ID0gcGNpX3NhdmVfc3RhdGUoenhkaF9kZXYtJmd0O3BkZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7cGNpX3NhdmVfc3RhdGUgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MoenhkaF9kZXYtJmd0O3BkZXYsIDApICZhbXA7IElPUkVTT1VSQ0VfTUVNKSkgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtCQVIgMCBpcyBub3QgYW4gTU1JTyByZXNvdXJjZVxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfcGNpX3NhdmVfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGZfZGV2LSZndDtwY2lfaW9yZW1hcF9hZGRyWzBdID0KJiM0MzsJCWlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHp4ZGhfZGV2LSZndDtwZGV2LCAwKSwKJiM0MzsJCQlwY2lfcmVzb3VyY2VfbGVuKHp4ZGhfZGV2LSZndDtwZGV2LCAwKSk7CiYjNDM7CWlmICghcGZfZGV2LSZndDtwY2lfaW9yZW1hcF9hZGRyWzBdKSB7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O2RoIHBmIHBjaSBpb3JlbWFwIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfcGNpX3NhdmVfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3BjaV9zYXZlX3N0YXRlOgomIzQzOwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LSZndDtwZGV2LAomIzQzOwkJCQkgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi0mZ3Q7cGRldiwgSU9SRVNPVVJDRV9NRU0pKTsKJiM0MztlcnJfcGNpOgomIzQzOwlwY2lfZGlzYWJsZV9kZXZpY2UoenhkaF9kZXYtJmd0O3BkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlvdW5tYXAocGZfZGV2LSZndDtwY2lfaW9yZW1hcF9hZGRyWzBdKTsKJiM0MzsJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi0mZ3Q7cGRldiwKJiM0MzsJCQkJICAgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtJmd0O3BkZXYsIElPUkVTT1VSQ0VfTUVNKSk7CiYjNDM7CXBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi0mZ3Q7cGRldik7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLAomIzQzOwkJCQl1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKQomIzQzO3sKJiM0MzsJaW50IHBvczsKJiM0MzsJdTggdHlwZTsKJiM0MzsJdTggYmFyOwomIzQzOwomIzQzOwlmb3IgKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9WTkRSKTsgcG9zICZndDsgMDsKJiM0MzsJICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkocGRldiwgcG9zLCBQQ0lfQ0FQX0lEX1ZORFIpKSB7CiYjNDM7CQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LAomIzQzOwkJCQkgICAgIHBvcyAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLAomIzQzOwkJCQkJCQljZmdfdHlwZSksICZhbXA7dHlwZSk7CiYjNDM7CQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LAomIzQzOwkJCQkgICAgIHBvcyAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCAmYW1wO2Jhcik7CiYjNDM7CiYjNDM7CQkvKiBpZ25vcmUgc3RydWN0dXJlcyB3aXRoIHJlc2VydmVkIEJBUiB2YWx1ZXMgKi8KJiM0MzsJCWlmIChiYXIgJmd0OyBaWERIX1BGX01BWF9CQVJfVkFMKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKHR5cGUgPT0gY2ZnX3R5cGUpIHsKJiM0MzsJCQlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcikgJmFtcDsgaW9yZXNvdXJjZV90eXBlcykgewomIzQzOwkJCQkqYmFycyB8PSAoMSAmbHQ7Jmx0OyBiYXIpOwomIzQzOwkJCQlyZXR1cm4gcG9zOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiwgaW50IG9mZiwKJiM0MzsJCQkJICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sCiYjNDM7CQkJCSAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSwKJiM0MzsJCQkJICAgICBzaXplX3QgKmxlbiwgcmVzb3VyY2Vfc2l6ZV90ICpwYSwKJiM0MzsJCQkJICAgICB1MzIgKmJhcl9vZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LSZndDtwZGV2OwomIzQzOwl2b2lkIF9faW9tZW0gKnA7CiYjNDM7CXUzMiBvZmZzZXQ7CiYjNDM7CXUzMiBsZW5ndGg7CiYjNDM7CXU4IGJhcjsKJiM0MzsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwKJiM0MzsJCQkgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCAmYW1wO2Jhcik7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAomIzQzOwkJCSAgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLAomIzQzOwkJCQkJCW9mZnNldCksICZhbXA7b2Zmc2V0KTsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCiYjNDM7CQkJICAgICAgb2ZmICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsCiYjNDM7CQkJCQkJbGVuZ3RoKSwgJmFtcDtsZW5ndGgpOwomIzQzOwomIzQzOwlpZiAoYmFyX29mZikKJiM0MzsJCSpiYXJfb2ZmID0gb2Zmc2V0OwomIzQzOwomIzQzOwlpZiAobGVuZ3RoICZsdDs9IHN0YXJ0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7YmFkIGNhcGFiaWxpdHkgbGVuICV1ICgmZ3Q7JXUgZXhwZWN0ZWQpXG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIHN0YXJ0KTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChsZW5ndGggLSBzdGFydCAmbHQ7IG1pbmxlbikgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoJmd0Oz0lenUgZXhwZWN0ZWQpXG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIG1pbmxlbik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW5ndGggLT0gc3RhcnQ7CiYjNDM7CWlmIChzdGFydCAmIzQzOyBvZmZzZXQgJmx0OyBvZmZzZXQpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDttYXAgd3JhcC1hcm91bmQgJXUmIzQzOyV1XG4mIzM0Oywgc3RhcnQsIG9mZnNldCk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlvZmZzZXQgJiM0Mzs9IHN0YXJ0OwomIzQzOwlpZiAob2Zmc2V0ICZhbXA7IChhbGlnbiAtIDEpKSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7b2Zmc2V0ICV1IG5vdCBhbGlnbmVkIHRvICV1XG4mIzM0Oywgb2Zmc2V0LCBhbGlnbik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGVuZ3RoICZndDsgc2l6ZSkKJiM0MzsJCWxlbmd0aCA9IHNpemU7CiYjNDM7CiYjNDM7CWlmIChsZW4pCiYjNDM7CQkqbGVuID0gbGVuZ3RoOwomIzQzOwomIzQzOwlpZiAobWlubGVuICYjNDM7IG9mZnNldCAmbHQ7IG1pbmxlbiB8fAomIzQzOwkgICAgbWlubGVuICYjNDM7IG9mZnNldCAmZ3Q7IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSYjMzQ7bWFwIGN1c3RvbSBxdWV1ZSAlenVAJXUgb3V0IG9mIHJhbmdlIG9uIGJhciAldSBsZW5ndGggJWx1XG4mIzM0OywKJiM0MzsJCQltaW5sZW4sIG9mZnNldCwgYmFyLAomIzQzOwkJCSh1bnNpZ25lZCBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlwID0gcGNpX2lvbWFwX3JhbmdlKHBkZXYsIGJhciwgb2Zmc2V0LCBsZW5ndGgpOwomIzQzOwlpZiAoIXApIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDt1bmFibGUgdG8gbWFwIGN1c3RvbSBxdWV1ZSAldUAldSBvbiBiYXIgJXVcbiYjMzQ7LAomIzQzOwkJCWxlbmd0aCwgb2Zmc2V0LCBiYXIpOwomIzQzOwl9IGVsc2UgaWYgKHBhKSB7CiYjNDM7CQkqcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSAmIzQzOyBvZmZzZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LSZndDtwZGV2OwomIzQzOwlpbnQgY29tbW9uOwomIzQzOwomIzQzOwkvKiBjaGVjayBmb3IgYSBjb21tb24gY29uZmlnOiBpZiBub3QsIHVzZSBsZWdhY3kgbW9kZSAoYmFyIDApLiAqLwomIzQzOwljb21tb24gPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkcsCiYjNDM7CQkJCQkgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSwKJiM0MzsJCQkJCSAgICAgJmFtcDtwZl9kZXYtJmd0O21vZGVybl9iYXJzKTsKJiM0MzsJaWYgKCFjb21tb24pIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O21pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlwZl9kZXYtJmd0O2NvbW1vbiA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIGNvbW1vbiwKJiM0MzsJCQkJCQlzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLAomIzQzOwkJCQkJCVpYREhfUEZfQUxJR040LCAwLAomIzQzOwkJCQkJCXNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksCiYjNDM7CQkJCQkJTlVMTCwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmICghcGZfZGV2LSZndDtjb21tb24pIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtwZl9kZXYtJmd0O2NvbW1vbiBpcyBudWxsXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CXUzMiBub3RpZnlfbGVuZ3RoOwomIzQzOwl1MzIgbm90aWZ5X29mZnNldDsKJiM0MzsJaW50IG5vdGlmeTsKJiM0MzsKJiM0MzsJLyogSWYgY29tbW9uIGlzIHRoZXJlLCB0aGVzZSBzaG91bGQgYmUgdG9vLi4uICovCiYjNDM7CW5vdGlmeSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfTk9USUZZX0NGRywKJiM0MzsJCQkJCSAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLAomIzQzOwkJCQkJICAgICAmYW1wO3BmX2Rldi0mZ3Q7bW9kZXJuX2JhcnMpOwomIzQzOwlpZiAoIW5vdGlmeSkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O21pc3Npbmcgbm90aWZ5IGNmZyBjYXBhYmlsaXR5XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKJiM0MzsJCQkgICAgICBub3RpZnkgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsCiYjNDM7CQkJCW5vdGlmeV9vZmZfbXVsdGlwbGllciksCiYjNDM7CQkmYW1wO3BmX2Rldi0mZ3Q7bm90aWZ5X29mZnNldF9tdWx0aXBsaWVyKTsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCiYjNDM7CQkJICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLAomIzQzOwkJCQljYXAubGVuZ3RoKSwgJmFtcDtub3RpZnlfbGVuZ3RoKTsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCiYjNDM7CQkJICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLAomIzQzOwkJCQljYXAub2Zmc2V0KSwgJmFtcDtub3RpZnlfb2Zmc2V0KTsKJiM0MzsKJiM0MzsJLyogV2UgZG9uJiMzOTt0IGtub3cgaG93IG1hbnkgVlFzIHdlJiMzOTtsbCBtYXAsIGFoZWFkIG9mIHRoZSB0aW1lLgomIzQzOwkgKiBJZiBub3RpZnkgbGVuZ3RoIGlzIHNtYWxsLCBtYXAgaXQgYWxsIG5vdy4gT3RoZXJ3aXNlLAomIzQzOwkgKiBtYXAgZWFjaCBWUSBpbmRpdmlkdWFsbHkgbGF0ZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAobm90aWZ5X2xlbmd0aCAmIzQzOyAobm90aWZ5X29mZnNldCAlIFBBR0VfU0laRSkgJmx0Oz0gUEFHRV9TSVpFKSB7CiYjNDM7CQlwZl9kZXYtJmd0O25vdGlmeV9iYXNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2Rldiwgbm90aWZ5LAomIzQzOwkJCQkJCQkgICAgIFpYREhfUEZfTUFQX01JTkxFTjIsCiYjNDM7CQkJCQkJCSAgICBaWERIX1BGX0FMSUdOMiwgMCwKJiM0MzsJCQkJCQkJICAgIG5vdGlmeV9sZW5ndGgsCiYjNDM7CQkJCQkJCSAgICAmYW1wO3BmX2Rldi0mZ3Q7bm90aWZ5X2xlbiwKJiM0MzsJCQkJCQkJICAgICZhbXA7cGZfZGV2LSZndDtub3RpZnlfcGEsIE5VTEwpOwomIzQzOwkJaWYgKCFwZl9kZXYtJmd0O25vdGlmeV9iYXNlKSB7CiYjNDM7CQkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UgaXMgbnVsbFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJcGZfZGV2LSZndDtub3RpZnlfbWFwX2NhcCA9IG5vdGlmeTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CWludCBkZXZpY2U7CiYjNDM7CiYjNDM7CS8qIERldmljZSBjYXBhYmlsaXR5IGlzIG9ubHkgbWFuZGF0b3J5IGZvcgomIzQzOwkgKiBkZXZpY2VzIHRoYXQgaGF2ZSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KJiM0MzsJICovCiYjNDM7CWRldmljZSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfREVWSUNFX0NGRywKJiM0MzsJCQkJCSAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLAomIzQzOwkJCQkJICAgICAmYW1wO3BmX2Rldi0mZ3Q7bW9kZXJuX2JhcnMpOwomIzQzOwomIzQzOwkvKiB3ZSBkb24mIzM5O3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLAomIzQzOwkgKiBidXQgUEFHRV9TSVpFIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGFsbCBleGlzdGluZyBkZXZpY2VzLgomIzQzOwkgKi8KJiM0MzsJaWYgKGRldmljZSkgewomIzQzOwkJcGZfZGV2LSZndDtkZXZpY2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBkZXZpY2UsIDAsCiYjNDM7CQkJCQkJCVpYREhfUEZfQUxJR040LCAwLCBQQUdFX1NJWkUsCiYjNDM7CQkJCQkJICAgICAgICZhbXA7cGZfZGV2LSZndDtkZXZpY2VfbGVuLCBOVUxMLAomIzQzOwkJCQkJCSAgICAgICAmYW1wO3BmX2Rldi0mZ3Q7ZGV2X2NmZ19iYXJfb2ZmKTsKJiM0MzsJCWlmICghcGZfZGV2LSZndDtkZXZpY2UpIHsKJiM0MzsJCQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7cGZfZGV2LSZndDtkZXZpY2UgaXMgbnVsbFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi0mZ3Q7cGRldjsKJiM0MzsKJiM0MzsJaWYgKHBmX2Rldi0mZ3Q7ZGV2aWNlKQomIzQzOwkJcGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LSZndDtkZXZpY2UpOwomIzQzOwlpZiAocGZfZGV2LSZndDtub3RpZnlfYmFzZSkKJiM0MzsJCXBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpOwomIzQzOwlwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtJmd0O2NvbW1vbik7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LSZndDtwZGV2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCh6eGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDt6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0genhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7enhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9tYXBfbm90aWZ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHp4ZGhfZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3p4ZGhfcGZfZGV2aWNlX2NmZ19pbml0IGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfbWFwX2RldmljZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfbWFwX2RldmljZToKJiM0MzsJaWYgKHBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpCiYjNDM7CQlwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtJmd0O25vdGlmeV9iYXNlKTsKJiM0MztlcnJfbWFwX25vdGlmeToKJiM0MzsJcGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LSZndDtjb21tb24pOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2OwomIzQzOwlzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXY7CiYjNDM7CXN0cnVjdCBkZXZsaW5rICpkZXZsaW5rOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkZXZsaW5rID0gZGV2bGlua19hbGxvYygmYW1wO3p4ZGhfcGZfZGV2bGlua19vcHMsIHNpemVvZihzdHJ1Y3QgenhkaF9jb3JlX2RldiksCiYjNDM7CQkJCSZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKCFkZXZsaW5rKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXp4ZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspOwomIzQzOwl6eGRoX2Rldi0mZ3Q7ZGV2aWNlID0gJmFtcDtwZGV2LSZndDtkZXY7CiYjNDM7CXp4ZGhfZGV2LSZndDtwZGV2ID0gcGRldjsKJiM0MzsJenhkaF9kZXYtJmd0O2RldmxpbmsgPSBkZXZsaW5rOwomIzQzOwomIzQzOwlwZl9kZXYgPSB6eGRoX2NvcmVfYWxsb2NfcHJpdih6eGRoX2Rldiwgc2l6ZW9mKCpwZl9kZXYpKTsKJiM0MzsJaWYgKCFwZl9kZXYpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7enhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfcGZfZGV2OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmX2Rldi0mZ3Q7YmFyX2NoYW5fdmFsaWQgPSBmYWxzZTsKJiM0MzsJcGZfZGV2LSZndDt2ZXBhID0gZmFsc2U7CiYjNDM7CW11dGV4X2luaXQoJmFtcDt6eGRoX2Rldi0mZ3Q7bG9jayk7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwZl9kZXYtJmd0O2lycV9sb2NrKTsKJiM0MzsKJiM0MzsJenhkaF9kZXYtJmd0O2NvcmVkZXZfdHlwZSA9IEdFVF9DT1JFREVWX1RZUEUocGRldik7CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfcGNpX2luaXQoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGZfcGNpX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9wZl9pbml0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHp4ZGhfZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDt6eGRoX3BmX21vZGVybl9jZmdfaW5pdCBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX2NmZ19pbml0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9jZmdfaW5pdDoKJiM0MzsJenhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpOwomIzQzO2Vycl9wZl9pbml0OgomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7cGZfZGV2LSZndDtpcnFfbG9jayk7CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDt6eGRoX2Rldi0mZ3Q7bG9jayk7CiYjNDM7CXp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpOwomIzQzO2Vycl9wZl9kZXY6CiYjNDM7CWRldmxpbmtfZnJlZShkZXZsaW5rKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgenhkaF9wZl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKHp4ZGhfZGV2KTsKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspOwomIzQzOwl6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTsKJiM0MzsJenhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7cGZfZGV2LSZndDtpcnFfbG9jayk7CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDt6eGRoX2Rldi0mZ3Q7bG9jayk7CiYjNDM7CXp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpOwomIzQzOwlkZXZsaW5rX2ZyZWUoZGV2bGluayk7CiYjNDM7CXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgenhkaF9wZl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1BPV0VSX09GRikKJiM0MzsJCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKJiM0MzsJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgenhkaF9wZl9kcml2ZXIgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtkaW5naGFpMTBlJiMzNDssCiYjNDM7CS5pZF90YWJsZSA9IHp4ZGhfcGZfcGNpX3RhYmxlLAomIzQzOwkucHJvYmUgPSB6eGRoX3BmX3Byb2JlLAomIzQzOwkucmVtb3ZlID0genhkaF9wZl9yZW1vdmUsCiYjNDM7CS5zaHV0ZG93biA9IHp4ZGhfcGZfc2h1dGRvd24sCiYjNDM7fTsKJiM0MzsKJiM0Mzttb2R1bGVfcGNpX2RyaXZlcih6eGRoX3BmX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNThjNWRhOWEwOWZmY2MKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oCkBAIC0wLDAgJiM0MzsxLDEwMSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKgomIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBGIGhlYWRlcgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX1pYREhfRU5fUEZfSF9fCiYjNDM7I2RlZmluZSBfX1pYREhfRU5fUEZfSF9fCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSUQJMHgxY2YyCiYjNDM7I2RlZmluZSBaWERIX1BGX0RFVklDRV9JRAkweDgwNDAKJiM0MzsjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lECTB4ODA0MQomIzQzOwomIzQzOy8qIENvbW1vbiBjb25maWd1cmF0aW9uICovCiYjNDM7I2RlZmluZSBaWERIX1BDSV9DQVBfQ09NTU9OX0NGRwkxCiYjNDM7LyogTm90aWZpY2F0aW9ucyAqLwomIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX05PVElGWV9DRkcJMgomIzQzOy8qIElTUiBhY2Nlc3MgKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9JU1JfQ0ZHCQkzCiYjNDM7LyogRGV2aWNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHCTQKJiM0MzsvKiBQQ0kgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHCQk1CiYjNDM7CiYjNDM7I2RlZmluZSBaWERIX1BGX01BWF9CQVJfVkFMCQkweDUKJiM0MzsjZGVmaW5lIFpYREhfUEZfQUxJR040CQkJNAomIzQzOyNkZWZpbmUgWlhESF9QRl9BTElHTjIJCQkyCiYjNDM7I2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yCQkyCiYjNDM7CiYjNDM7I2RlZmluZSBaWERIX0RFVl9NQUNfSElHSF9PRkZTRVQJNAomIzQzOwomIzQzO2VudW0genhkaF9jb3JlZGV2X3R5cGUgewomIzQzOwlESF9DT1JFREVWX1BGLAomIzQzOwlESF9DT1JFREVWX1ZGLAomIzQzOwlESF9DT1JFREVWX1NGLAomIzQzOwlESF9DT1JFREVWX01QRgomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGRldmxpbms7CiYjNDM7CiYjNDM7c3RydWN0IHp4ZGhfY29yZV9kZXYgewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CiYjNDM7CWVudW0genhkaF9jb3JlZGV2X3R5cGUgY29yZWRldl90eXBlOwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKJiM0MzsJc3RydWN0IGRldmxpbmsgKmRldmxpbms7CiYjNDM7CXN0cnVjdCBtdXRleCBsb2NrOyAvKiBQcm90ZWN0cyBkZXZpY2UgY29uZmlndXJhdGlvbiAqLwomIzQzOwl2b2lkICpwcml2OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHp4ZGhfcGZfZGV2IHsKJiM0MzsJc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uOwomIzQzOwkvKiBEZXZpY2Utc3BlY2lmaWMgZGF0YSAobm9uLWxlZ2FjeSBtb2RlKSAgKi8KJiM0MzsJLyogQmFzZSBvZiB2cSBub3RpZmljYXRpb25zIChub24tbGVnYWN5IG1vZGUpLiAqLwomIzQzOwl2b2lkIF9faW9tZW0gKmRldmljZTsKJiM0MzsJdm9pZCBfX2lvbWVtICpub3RpZnlfYmFzZTsKJiM0MzsJdm9pZCBfX2lvbWVtICpwZl9zcmlvdl9jYXBfYmFzZTsKJiM0MzsJLyogUGh5c2ljYWwgYmFzZSBvZiB2cSBub3RpZmljYXRpb25zICovCiYjNDM7CXJlc291cmNlX3NpemVfdCBub3RpZnlfcGE7CiYjNDM7CS8qIFNvIHdlIGNhbiBzYW5pdHktY2hlY2sgYWNjZXNzZXMuICovCiYjNDM7CXNpemVfdCBub3RpZnlfbGVuOwomIzQzOwlzaXplX3QgZGV2aWNlX2xlbjsKJiM0MzsJLyogQ2FwYWJpbGl0eSBmb3Igd2hlbiB3ZSBuZWVkIHRvIG1hcCBub3RpZmljYXRpb25zIHBlci12cS4gKi8KJiM0MzsJczMyIG5vdGlmeV9tYXBfY2FwOwomIzQzOwl1MzIgbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyOwomIzQzOwkvKiBNdWx0aXBseSBxdWV1ZV9ub3RpZnlfb2ZmIGJ5IHRoaXMgdmFsdWUuIChub24tbGVnYWN5IG1vZGUpLiAqLwomIzQzOwlzMzIgbW9kZXJuX2JhcnM7CiYjNDM7CXZvaWQgX19pb21lbSAqcGNpX2lvcmVtYXBfYWRkcls2XTsKJiM0MzsJdTY0IHNyaW92X2Jhcl9zaXplOwomIzQzOwl1MzIgZGV2X2NmZ19iYXJfb2ZmOwomIzQzOwlib29sIHBhY2tlZF9zdGF0dXM7CiYjNDM7CWJvb2wgYmFyX2NoYW5fdmFsaWQ7CiYjNDM7CWJvb2wgdmVwYTsKJiM0MzsJc3RydWN0IG11dGV4IGlycV9sb2NrOyAvKiBQcm90ZWN0cyBJUlEgb3BlcmF0aW9ucyAqLwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBHRVRfQ09SRURFVl9UWVBFKHBkZXYpIFwKJiM0MzsJKChwZGV2KS0mZ3Q7ZGV2aWNlID09IFpYREhfVkZfREVWSUNFX0lEID8gREhfQ09SRURFVl9WRiA6IERIX0NPUkVERVZfUEYpCiYjNDM7CiYjNDM7dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSk7CiYjNDM7dm9pZCB6eGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7dm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpOwomIzQzO2ludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLAomIzQzOwkJCQl1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKTsKJiM0Mzt2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLAomIzQzOwkJCQkgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbiwKJiM0MzsJCQkJICAgICB1MzIgc3RhcnQsIHUzMiBzaXplLAomIzQzOwkJCQkgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLAomIzQzOwkJCQkgICAgIHUzMiAqYmFyX29mZik7CiYjNDM7aW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7dm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fWlhESF9FTl9QRl9IX18gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzOTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgUGF0aHM6IFRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIG5ldyBFdGhlcm5ldCBkcml2ZXIgZm9yIFpURSBEaW5nSGFpIGRldmljZXMsIHdoaWNoIHNlZW1zIHRvIGJlIGEgUENJIGRyaXZlci4gSXQgaW1wbGVtZW50cyB0aGUgc3RhbmRhcmQgUENJIHByb2JlLCByZW1vdmUsIGFuZCBzaHV0ZG93biBmdW5jdGlvbnMuIEl0JiMzOTtzIHJlZ2lzdGVyZWQgd2l0aCBgcGNpX3JlZ2lzdGVyX2RyaXZlcmAgYW5kIGluY2x1ZGVzIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBhbmQgTWFrZWZpbGUgZW50cmllcywgcGx1cyB0aGUgY29yZSBkcml2ZXIgZmlsZXMuIFRoZSBkcml2ZXIgc3BlY2lmaWNhbGx5IHRhcmdldHMgYSBQQ0kgRXRoZXJuZXQgY29udHJvbGxlciBmcm9tIFpURSAoVmVuZG9yIElEIDB4MWNmMiwgRGV2aWNlIElEIDB4ODA0MCkuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIGZ1enppbmcuIAoKR2l2ZW4gaXQmIzM5O3MgYSBQQ0kgZHJpdmVyLCBpdCBzaG91bGQgYmUgZnV6emFibGUuIFRoZSBxdWVzdGlvbiBpcyBob3cgdG8gZ2V0IHRoZSBgenhkaF9wZl9wcm9iZWAgZnVuY3Rpb24gdG8gcnVuLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHN5emthbGxlci4gRG9lcyBzeXprYWxsZXIgaGF2ZSBnb29kIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcz8gU3l6a2FsbGVyIHN1cHBvcnRzIFBDSSBmdXp6aW5nLCByaWdodD8gU3l6a2FsbGVyIHVzZXMgYHN5el9wY2lgIHBzZXVkby1zeXNjYWxscyBvciBzb21ldGhpbmcgc2ltaWxhciBmb3IgUENJIGZ1enppbmcsIG9yIGRvZXMgaXQgcmVseSBvbiBRRU1VIFBDSSBlbXVsYXRpb24/IExldCYjMzk7cyBiZSBzdXJlLCBgc3l6X3BjaV9kZXZpY2VfYWRkYCBvciBzaW1pbGFyLiBJJiMzOTttIHRyeWluZyB0byByZW1lbWJlciB0aGUgc3BlY2lmaWNzIG9mIHN5emthbGxlciYjMzk7cyBQQ0kgc3VwcG9ydC4gCgpUaGVuIEkgY29tZSBiYWNrIHRvIHRoZSBwcm9tcHQsIHdoaWNoIGhpZ2hsaWdodHMgdGhlIGRpZmZpY3VsdHkgb2YgcmVhY2hpbmcgZHJpdmVycyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIFRoYXQmIzM5O3MgYSBrZXkgcG9pbnQuIFRoaXMgRGluZ0hhaSBkZXZpY2UgKmlzKiBzcGVjaWZpYyBoYXJkd2FyZS4gVGhlcmUmIzM5O3MgcHJvYmFibHkgbm8gUUVNVSBlbXVsYXRpb24gZm9yIHRoaXMgZGV2aWNlLiBObywgbm8gYHN5el9wY2lgLiBUaGUgcHJvbXB0IGlzIHJpZ2h0LiBTbywgY2FuIHdlIGV2ZW4gcHJvYmUgdGhpcyB0aGluZyB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZT8gTm8uCgpUaGUgbmV4dCB0aGluZyB0aGF0IGp1bXBzIHRvIG15IG1pbmQgaXM6IGNhbiB3ZSBleHBsb2l0IHNvbWUga2luZCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgZGV2aWNlPyBJcyB0aGVyZSBhIHZpcnRpby1saWtlIHN0cnVjdHVyZT8gTGV0JiMzOTtzIGNoZWNrLiBZZXMsIHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIFBDSSBjb25maWcgc3BhY2UuIEl0IHNwZWNpZmljYWxseSBsb29rcyBmb3IgdmVuZG9yLXNwZWNpZmljIGNhcGFiaWxpdGllcy4gVGhlIG1vcmUgSSBsb29rLCB0aGUgbW9yZSBpdCByZXNlbWJsZXMgYSB2aXJ0aW8tbmV0IGltcGxlbWVudGF0aW9uIGJ1dCB0aHJvdWdoIHZlbmRvci1zcGVjaWZpYyBQQ0kgY2FwYWJpbGl0aWVzLiBCdXQgdGhlIGRyaXZlciByZXF1aXJlcyBhIHZlcnkgc3BlY2lmaWMgVmVuZG9yIGFuZCBEZXZpY2UgSUQuIFN0YW5kYXJkIHZpcnRpby1uZXQgZGV2aWNlcyAoVmVuZG9yIDB4MWFmNCwgRGV2aWNlIDB4MTAwMC8weDEwNDEpIHdpbGwgbm90IHRyaWdnZXIgdGhpcyBkcml2ZXIuIAoKU28gaXQmIzM5O3MgYSBkZWFkIGVuZCBpZiB3ZSBhcmUgcnVubmluZyBpbiBRRU1VLiBBbmQgc3l6a2FsbGVyIGhhcyBhIHJlYWwgcHJvYmxlbS4gU3l6a2FsbGVyIGNhbm5vdCBjcmVhdGUgdGhlIFBDSSBkZXZpY2UgYnkgaXRzZWxmLiBUaGUgYHp4ZGhfcGZfcHJvYmVgIHdpbGwgbmV2ZXIgYmUgY2FsbGVkIGlmIHRoZSBQQ0kgc3Vic3lzdGVtIGNhbiYjMzk7dCBmaW5kIGEgZGV2aWNlIHdpdGggSUQgMHgxY2YyOjB4ODA0MC4gVGhlcmUgaXMgbm8gc3VjaCBkZXZpY2UgaW4gUUVNVSwgc28gaXQgbG9va3MgaW1wb3NzaWJsZSB0byByZWFjaC4gCgpXYWl0LCBjYW4gd2UgaW5qZWN0IGEgUENJIGRldmljZSB3aXRoIHRoZSBgbmV3X2lkYCBzeXNmcyBhdHRyaWJ1dGU/IE5vcGUsIGl0IGNhbiBvbmx5ICpiaW5kKiB0aGUgZHJpdmVyIHRvICpleGlzdGluZyogZGV2aWNlcy4gSXQgZG9lc24mIzM5O3QgY3JlYXRlIG5ldyBvbmVzLiBXZSBzdGlsbCBuZWVkIHRoZSByaWdodCBraW5kIG9mIFBDSSBkZXZpY2UuIElmIHdlIGJvdW5kIGl0IHRvIGFub3RoZXIgZGV2aWNlLCBpdCB3b3VsZCB0cmlnZ2VyIGB6eGRoX3BmX3Byb2JlYCBidXQgaXQgaXMgdW5saWtlbHkgdG8gbWF0Y2ggdGhlIGV4YWN0IHN0cnVjdHVyZS4KCkkmIzM5O20gc3RhcnRpbmcgdG8gcmVtZW1iZXIgdGhhdCBzeXprYWxsZXIgaGFzIHRvIHJlbHkgb24gUUVNVSYjMzk7cyBQQ0kgZW11bGF0aW9uIG9yIGB2ZmlvYC4gSWYgdGhlIGRldmljZSBpcyBub3QgZW11bGF0ZWQsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLiBUaGlzIGlzIGJhZCBuZXdzLCBpdCBpcyBoYXJkIHRvIGZ1enogd2l0aG91dCBkZXZpY2UgZW11bGF0aW9uLiBJdCB3aWxsIG5vdCB3b3JrLgoKSXMgdGhlcmUgYW55IHdheT8gRG9lcyB0aGUgZHJpdmVyIHJlZ2lzdGVyIGEgYGRldmxpbmtgIGluc3RhbmNlPyBZZXMsIGJ1dCBvbmx5ICppbnNpZGUqIGB6eGRoX3BmX3Byb2JlYC4gU28gaWYgdGhlIHByb2JlIGZ1bmN0aW9uIGlzbiYjMzk7dCBjYWxsZWQsIHdlIGNhbiYjMzk7dCByZWFjaCB0aGUgYGRldmxpbmtgIGluc3RhbmNlIGVpdGhlci4gU28gaXQgd29uJiMzOTt0IGJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBlaXRoZXIuCgpJcyB0aGVyZSBhbnkgd2F5IHRvIGVtdWxhdGUgdGhlIGRyaXZlciBieSB1c2luZyBzb21ldGhpbmcgbGlrZSBhIHZpcnR1YWwgaG9zdCBicmlkZ2U/IE5vLCB0aGVyZSBpcyBubyBnZW5lcmljIFBDSSBob3N0IGJyaWRnZSBpbiB0aGUga2VybmVsIHRoYXQgd291bGQgYWxsb3cgdG8gaW5qZWN0IHRoaXMgc3BlY2lmaWMgZGV2aWNlLgoKSSYjMzk7dmUgZ290IHRvIGZhY2UgdGhlIG11c2ljOiB3aXRob3V0IHNwZWNpZmljIGVtdWxhdGlvbiBmb3IgdGhpcyBaVEUgRGluZ0hhaSBjYXJkLCB0aGlzIGRyaXZlciBpcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiBHQ0UvUUVNVSwgdGh1cyBtYWtpbmcgZWZmZWN0aXZlIGZ1enppbmcgcHJvYmxlbWF0aWMsIGlmIG5vdCBpbXBvc3NpYmxlLiBXZSBuZWVkIGEgd2F5IHRvIGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBkZXZpY2UsIHNvIGl0IGNhbiBiZSByZWFjaGVkLiBUaGlzIHNlZW1zIHRvIGJlIGEgaGFyZHdhcmUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3p4ZGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaC0xMC0vKiBUaGlzIGlzIHRoZSBQQ0kgY2FwYWJpbGl0eSBoZWFkZXI6ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oOjExOnN0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaC0xMi1cdF9fdTggY2FwX3ZuZHI7XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBQQ0lfQ0FQX0lEX1ZORFIgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oLTIzLS8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmg6MjQ6c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaC0yNS1cdC8qIEFib3V0IHRoZSB3aG9sZSBkZXZpY2UuICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaC00OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmg6NDk6c3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaDo1MDpcdHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaC01MS1cdF9fbGUzMiBub3RpZnlfb2ZmX211bHRpcGxpZXI7IC8qIE11bHRpcGxpZXIgZm9yIHF1ZXVlX25vdGlmeV9vZmYuICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYz0xNz1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTk6c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyB6eGRoX3BmX2Rldmxpbmtfb3BzID0ge307XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyMTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjItXHR7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfUEZfREVWSUNFX0lEKSB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyOTp2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMy1cdGlmIChwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNDpcdFx0enhkaF9kZXYtXHUwMDNlcHJpdiA9IHByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM1LVx0cmV0dXJuIHByaXY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Mzg6dm9pZCB6eGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MDpcdGtmcmVlKHp4ZGhfZGV2LVx1MDAzZXByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MS19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MzpzdGF0aWMgaW50IHp4ZGhfcGZfcGNpX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ1Olx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00Ni1cdGludCByZXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0ODpcdHBjaV9zZXRfZHJ2ZGF0YSh6eGRoX2Rldi1cdTAwM2VwZGV2LCB6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo1MDpcdHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy01MS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NTI6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy01My1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTU1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo1NjpcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNTctXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjU4Olx0XHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgRE1BX0JJVF9NQVNLKDMyKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTU5LVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjYwOlx0XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTYxLVx0XHRcdGdvdG8gZXJyX3BjaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo2NTpcdHJldCA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NjY6XHRcdFx0XHRcdCAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTY3LVx0XHRcdFx0XHQgICBcJiMzNDtkaC1wZlwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTY4LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo2OTpcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNzAtXHRcdGdvdG8gZXJyX3BjaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo3MzpcdHBjaV9zZXRfbWFzdGVyKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo3NDpcdHJldCA9IHBjaV9zYXZlX3N0YXRlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy03NS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NzY6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy03Ny1cdFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy03OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6ODA6XHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MoenhkaF9kZXYtXHUwMDNlcGRldiwgMCkgXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy04MS1cdFx0cmV0ID0gLUVOT0RFVjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6ODI6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtCQVIgMCBpcyBub3QgYW4gTU1JTyByZXNvdXJjZVxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTgzLVx0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTg2LVx0cGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0gPVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo4NzpcdFx0aW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoenhkaF9kZXYtXHUwMDNlcGRldiwgMCksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjg4Olx0XHRcdHBjaV9yZXNvdXJjZV9sZW4oenhkaF9kZXYtXHUwMDNlcGRldiwgMCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy04OS1cdGlmICghcGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtOTAtXHRcdHJldCA9IC1FTk9NRU07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjkxOlx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7ZGggcGYgcGNpIGlvcmVtYXAgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtOTItXHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtOTctZXJyX3BjaV9zYXZlX3N0YXRlOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo5ODpcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6OTk6XHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMDAtZXJyX3BjaTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTAxOlx0cGNpX2Rpc2FibGVfZGV2aWNlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMDItXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxMDU6dm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTEwNi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjEwNzpcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTA4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMDktXHRpb3VubWFwKHBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTEwOlx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi1cdTAwM2VwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxMTE6XHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxMTI6XHRwY2lfZGlzYWJsZV9kZXZpY2UoenhkaF9kZXYtXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTExMy19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTExNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTE1OmludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMTYtXHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTI0LVx0XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxMjU6XHRcdFx0XHQgICAgIHBvcyAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMjYtXHRcdFx0XHRcdFx0XHRjZmdfdHlwZSksIFx1MDAyNnR5cGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMjctXHRcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjEyODpcdFx0XHRcdCAgICAgcG9zICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFx1MDAyNmJhcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTEyOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE0NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTQ2OnZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE0Ny1cdFx0XHRcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTUxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTUyOlx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNTMtXHR2b2lkIF9faW9tZW0gKnA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNTgtXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxNTk6XHRcdFx0ICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXHUwMDI2YmFyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTYwLVx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE2MTpcdFx0XHQgICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTYyLVx0XHRcdFx0XHRcdG9mZnNldCksIFx1MDAyNm9mZnNldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE2My1cdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxNjQ6XHRcdFx0ICAgICAgb2ZmICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE2NS1cdFx0XHRcdFx0XHRsZW5ndGgpLCBcdTAwMjZsZW5ndGgpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTcwLVx0aWYgKGxlbmd0aCBcdTAwM2M9IHN0YXJ0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE3MTpcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlJXUgZXhwZWN0ZWQpXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNzItXHRcdFx0bGVuZ3RoLCBzdGFydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNzYtXHRpZiAobGVuZ3RoIC0gc3RhcnQgXHUwMDNjIG1pbmxlbikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxNzc6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFx1MDAzZT0lenUgZXhwZWN0ZWQpXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNzgtXHRcdFx0bGVuZ3RoLCBtaW5sZW4pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTgzLVx0aWYgKHN0YXJ0ICYjNDM7IG9mZnNldCBcdTAwM2Mgb2Zmc2V0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE4NDpcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O21hcCB3cmFwLWFyb3VuZCAldSYjNDM7JXVcXG5cJiMzNDssIHN0YXJ0LCBvZmZzZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xODUtXHRcdHJldHVybiBOVUxMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTg5LVx0aWYgKG9mZnNldCBcdTAwMjYgKGFsaWduIC0gMSkpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTkwOlx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7b2Zmc2V0ICV1IG5vdCBhbGlnbmVkIHRvICV1XFxuXCYjMzQ7LCBvZmZzZXQsIGFsaWduKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTkxLVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIwMS1cdCAgICBtaW5sZW4gJiM0Mzsgb2Zmc2V0IFx1MDAzZSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjAyOlx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjAzLVx0XHRcdFwmIzM0O21hcCBjdXN0b20gcXVldWUgJXp1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIxMC1cdGlmICghcCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyMTE6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt1bmFibGUgdG8gbWFwIGN1c3RvbSBxdWV1ZSAldUAldSBvbiBiYXIgJXVcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIxMi1cdFx0XHRsZW5ndGgsIG9mZnNldCwgYmFyKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIxOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjIwOmludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIyMS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjIyMjpcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjIzOlx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMjQtXHRpbnQgY29tbW9uO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjI2LVx0LyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjI3Olx0Y29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMjgtXHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjMwLVx0aWYgKCFjb21tb24pIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjMxOlx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjMyLVx0XHRcdFwmIzM0O21pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIzNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjM2Olx0cGZfZGV2LVx1MDAzZWNvbW1vbiA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIGNvbW1vbixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjM3Olx0XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIzOC1cdFx0XHRcdFx0XHRaWERIX1BGX0FMSUdONCwgMCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjM5Olx0XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI0MC1cdFx0XHRcdFx0XHROVUxMLCBOVUxMLCBOVUxMKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjQxLVx0aWYgKCFwZl9kZXYtXHUwMDNlY29tbW9uKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI0MjpcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BmX2Rldi1cdTAwM2Vjb21tb24gaXMgbnVsbFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI0My1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI0OTppbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNTAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyNTE6XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI1MjpcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjUzLVx0dTMyIG5vdGlmeV9sZW5ndGg7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNTctXHQvKiBJZiBjb21tb24gaXMgdGhlcmUsIHRoZXNlIHNob3VsZCBiZSB0b28uLi4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjU4Olx0bm90aWZ5ID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNTktXHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjYxLVx0aWYgKCFub3RpZnkpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjYyOlx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7bWlzc2luZyBub3RpZnkgY2ZnIGNhcGFiaWxpdHlcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNjMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjY2LVx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI2NzpcdFx0XHQgICAgICBub3RpZnkgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI2OC1cdFx0XHRcdG5vdGlmeV9vZmZfbXVsdGlwbGllciksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNzAtXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjcxOlx0XHRcdCAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjcyLVx0XHRcdFx0Y2FwLmxlbmd0aCksIFx1MDAyNm5vdGlmeV9sZW5ndGgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNzMtXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Mjc0Olx0XHRcdCAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjc1LVx0XHRcdFx0Y2FwLm9mZnNldCksIFx1MDAyNm5vdGlmeV9vZmZzZXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjgxLVx0aWYgKG5vdGlmeV9sZW5ndGggJiM0MzsgKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpIFx1MDAzYz0gUEFHRV9TSVpFKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI4MjpcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2Rldiwgbm90aWZ5LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yODMtXHRcdFx0XHRcdFx0XHQgICAgIFpYREhfUEZfTUFQX01JTkxFTjIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yODgtXHRcdGlmICghcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI4OTpcdFx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlIGlzIG51bGxcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yOTAtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yOTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI5OTppbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMDAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMDE6XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjMwMjpcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzAzLVx0aW50IGRldmljZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMwNy1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMDg6XHRkZXZpY2UgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMwOS1cdFx0XHRcdFx0ICAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMTUtXHRpZiAoZGV2aWNlKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjMxNjpcdFx0cGZfZGV2LVx1MDAzZWRldmljZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIGRldmljZSwgMCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzE3LVx0XHRcdFx0XHRcdFx0WlhESF9QRl9BTElHTjQsIDAsIFBBR0VfU0laRSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMyMC1cdFx0aWYgKCFwZl9kZXYtXHUwMDNlZGV2aWNlKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjMyMTpcdFx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGZfZGV2LVx1MDAzZWRldmljZSBpcyBudWxsXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzIyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzI3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMjg6dm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzI5LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzMwOlx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMzE6XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMzMi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMzOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzQwOmludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM0MS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM0MjpcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzQzOlx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNDQtXHRpbnQgcmV0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM0NjpcdHJldCA9IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzQ3LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNDg6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNDktXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM1MjpcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzUzLVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNTQ6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNTUtXHRcdGdvdG8gZXJyX21hcF9ub3RpZnk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM1ODpcdHJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzU5LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNjA6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX2RldmljZV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNjEtXHRcdGdvdG8gZXJyX21hcF9kZXZpY2U7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM3NDpzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzc1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Mzc2Olx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM3NzpcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzc4LVx0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zODAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM4MTpcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFx1MDAyNnp4ZGhfcGZfZGV2bGlua19vcHMsIHNpemVvZihzdHJ1Y3QgenhkaF9jb3JlX2RldiksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM4Mi1cdFx0XHRcdFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzgzLVx0aWYgKCFkZXZsaW5rKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM4NDpcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7enhkaF9wZiBkZXZsaW5rIGFsbG9jIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM4NS1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zODctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM4ODpcdHp4ZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozODk6XHR6eGRoX2Rldi1cdTAwM2VkZXZpY2UgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzkwOlx0enhkaF9kZXYtXHUwMDNlcGRldiA9IHBkZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM5MTpcdHp4ZGhfZGV2LVx1MDAzZWRldmxpbmsgPSBkZXZsaW5rO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM5MzpcdHBmX2RldiA9IHp4ZGhfY29yZV9hbGxvY19wcml2KHp4ZGhfZGV2LCBzaXplb2YoKnBmX2RldikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zOTQtXHRpZiAoIXBmX2Rldikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozOTU6XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3p4ZGhfcGZfZGV2IGFsbG9jIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM5Ni1cdFx0cmV0ID0gLUVOT01FTTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQwMS1cdHBmX2Rldi1cdTAwM2V2ZXBhID0gZmFsc2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQwMjpcdG11dGV4X2luaXQoXHUwMDI2enhkaF9kZXYtXHUwMDNlbG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQwMy1cdG11dGV4X2luaXQoXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MDU6XHR6eGRoX2Rldi1cdTAwM2Vjb3JlZGV2X3R5cGUgPSBHRVRfQ09SRURFVl9UWVBFKHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQwNzpcdHJldCA9IHp4ZGhfcGZfcGNpX2luaXQoenhkaF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MDgtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQwOTpcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7enhkaF9wZl9wY2lfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MTAtXHRcdGdvdG8gZXJyX3BmX2luaXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQxMzpcdHJldCA9IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDE0LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MTU6XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3p4ZGhfcGZfbW9kZXJuX2NmZ19pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQxNi1cdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MjMtZXJyX2NmZ19pbml0OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MjQ6XHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQyNS1lcnJfcGZfaW5pdDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDI2LVx0bXV0ZXhfZGVzdHJveShcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0Mjc6XHRtdXRleF9kZXN0cm95KFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0Mjg6XHR6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDI5LWVycl9wZl9kZXY6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQzNDpzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDM1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDM2Olx0c3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0Mzc6XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayh6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQzODpcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NDAtXHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ0MTpcdHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoenhkaF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0NDI6XHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ0My1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDQ0Olx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6eGRoX2Rldi1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDQ1Olx0enhkaF9jb3JlX2ZyZWVfcHJpdih6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ0Ni1cdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDUwOnN0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ1MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ1NzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgenhkaF9wZl9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ1OC1cdC5uYW1lID0gXCYjMzQ7ZGluZ2hhaTEwZVwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDU5Olx0LmlkX3RhYmxlID0genhkaF9wZl9wY2lfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ2MDpcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ2MTpcdC5yZW1vdmUgPSB6eGRoX3BmX3JlbW92ZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDYyOlx0LnNodXRkb3duID0genhkaF9wZl9zaHV0ZG93bixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDYzLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ2NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDY1Om1vZHVsZV9wY2lfZHJpdmVyKHp4ZGhfcGZfZHJpdmVyKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTM3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDozODplbnVtIHp4ZGhfY29yZWRldl90eXBlIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtMzktXHRESF9DT1JFREVWX1BGLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg9NDU9c3RydWN0IGRldmxpbms7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTQ2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo0NzpzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTQ4LVx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo0OTpcdGVudW0genhkaF9jb3JlZGV2X3R5cGUgY29yZWRldl90eXBlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC01MC1cdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjU2OnN0cnVjdCB6eGRoX3BmX2RldiB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjU3Olx0c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC01OC1cdC8qIERldmljZS1zcGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUpICAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjg1OnZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo4Njp2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6ODc6dm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo4ODppbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtODktXHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6OTA6dm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiwgaW50IG9mZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtOTEtXHRcdFx0XHQgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTk0LVx0XHRcdFx0ICAgICB1MzIgKmJhcl9vZmYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo5NTppbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6OTY6aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjk3OmludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo5ODp2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6OTk6aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTEwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjY2NAoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiAzMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgZHJpdmVyIOKAkyBpdCYjMzk7cyBhIFBDSSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlci4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIG9mIHRoaXMgZGV2aWNlIGluIGVpdGhlciBRRU1VIG9yIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZi4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZy4KClRoZSBgenhkaF9wZl9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQmIzM5O3Mgb25seSBnb2luZyB0byBiZSBpbnZva2VkIGlmIGl0IGRldGVjdHMgYSBQQ0kgZGV2aWNlIHdpdGggYSB2ZXJ5IHNwZWNpZmljIFZlbmRvciBJRCAoMHgxY2YyKSBhbmQgRGV2aWNlIElEICgweDgwNDAgb3IgMHg4MDQxKS4gSSBjb3VsZCB0cnkgdG8gZm9yY2UgaXQgdG8gYmluZCB0byBhIGRpZmZlcmVudCBQQ0kgZGV2aWNlIHVzaW5nIGBuZXdfaWRgLCBidXQgSSBrbm93IHRoYXQgd29uJiMzOTt0IHdvcmsuIFRoZSBwcm9iZSBmdW5jdGlvbiBleHBsaWNpdGx5IGNoZWNrcyBmb3Igc29tZSB2ZW5kb3Itc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcyAoYFpYREhfUENJX0NBUF9DT01NT05fQ0ZHYCwgYW5kIHNvIG9uKSB0aGF0IHdvbiYjMzk7dCBiZSBwcmVzZW50IG9uIGFueSBvdGhlciBoYXJkd2FyZS4gRXNzZW50aWFsbHksIHRoZSBkcml2ZXIgZXhwZWN0cyAqdGhhdCogc3BlY2lmaWMgaGFyZHdhcmUuCgpUaGVyZWZvcmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgd2lsbCB0aGlzIGRyaXZlciYjMzk7cyBjb2RlIHBhdGhzIGJlIHJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVS4gSXQmIzM5O3MgYSBoYXJkd2FyZS1kZXBlbmRlbnQgZHJpdmVyLCBhbmQgd2UgZG9uJiMzOTt0IGhhdmUgdGhhdCBoYXJkd2FyZSBhdmFpbGFibGUgaW4gdGhlc2UgdmlydHVhbGl6ZWQgY29udGV4dHMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQuIElzIHRoZXJlIGEgJiMzNDt6eGRoJiMzNDsgdmlydHVhbCBkZXZpY2U/IE5vcGUuIElzIHRoZXJlIGEgbmV0bGluayBpbnRlcmZhY2UgSSBtaWdodCBsZXZlcmFnZSB0aGF0IGRvZXNuJiMzOTt0IGRlcGVuZCBvbiB0aGUgZGV2aWNlIGJlaW5nIHByb2JlZCBmaXJzdD8gTm8gbHVjayB0aGVyZSBlaXRoZXIuIFRoZSBkZXZsaW5rIGludGVyZmFjZSwgdGhhdCYjMzk7cyByZWdpc3RlcmVkIHdpdGhpbiBgenhkaF9wZl9wcm9iZWAsIHNvIGl0IHJlcXVpcmVzIHByb2JlIHRvIHN1Y2NlZWQuIFNvIHRoZXJlIGlzIG5vIHdheSBhcm91bmQgdGhpcy4gVGhlIHByb2JlIG5lZWRzIHRob3NlIHNwZWNpZmljIFBDSSBjYXBhYmlsaXRpZXMsIGFuZCB0aGF0JiMzOTtzIHRoZSBoYXJkIHN0b3AuCgpTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBpcyBub3Qgd29ydGggZnV6emluZy4gSSYjMzk7bSBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCB0aGF0JiMzOTtzIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgaGFyZHdhcmUgZGV2aWNlIChaVEUgRGluZ0hhaSBFdGhlcm5ldCBjb250cm9sbGVyKS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbC4gVGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiByZWxpZXMgb24gZmluZGluZyBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcywgbWVhbmluZyBpdCBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGZvcmNlLWJvdW5kIHRvIG90aGVyIHZpcnR1YWwgUENJIGRldmljZXMuIFRoZXJlZm9yZSwgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgaGFyZHdhcmUgZGV2aWNlIChaVEUgRGluZ0hhaSBFdGhlcm5ldCBjb250cm9sbGVyKS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbC4gVGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiByZWxpZXMgb24gZmluZGluZyBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcywgbWVhbmluZyBpdCBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGZvcmNlLWJvdW5kIHRvIG90aGVyIHZpcnR1YWwgUENJIGRldmljZXMuIFRoZXJlZm9yZSwgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMTQ6MzI6MjMuODY1OTIyMjQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0OTM1MTkxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUENJIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UgKFpURSBEaW5nSGFpIEV0aGVybmV0IGNvbnRyb2xsZXIpLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLiBUaGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gcmVsaWVzIG9uIGZpbmRpbmcgc3BlY2lmaWMgdmVuZG9yLXNwZWNpZmljIFBDSSBjYXBhYmlsaXRpZXMsIG1lYW5pbmcgaXQgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBmb3JjZS1ib3VuZCB0byBvdGhlciB2aXJ0dWFsIFBDSSBkZXZpY2VzLiBUaGVyZWZvcmUsIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTQ6MzI6MjMuODY1OTI5MjUzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQxMjgwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YWJkMDM5MjJkYmZlOGIwY2IwNDcxNjllNmY5MzJmY2VmNGM3OTExXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDIwIDE0OjMyOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAyZmIxYzc1YWZkMTYzOC4uNzM2OTJiMDliZjdiYWIgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0yOTQ0MCw2ICsyOTQ0MCwxMiBAQCBTOlxcdE1haW50YWluZWRcXG4gVDpcXHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3Rpd2FpL3NvdW5kLmdpdFxcbiBGOlxcdHNvdW5kL2hkYS9jb2RlY3Mvc2VuYXJ5dGVjaC5jXFxuIFxcbitaVEUgRElOR0hBSSBFVEhFUk5FVCBEUklWRVJcXG4rTTpcXHRKdW55YW5nIEhhbiBcXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblxcdTAwM2VcXG4rTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuK1M6XFx0TWFpbnRhaW5lZFxcbitGOlxcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9cXG4rXFxuIFRIRSBSRVNUXFxuIE06XFx0TGludXMgVG9ydmFsZHMgXFx1MDAzY3RvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnXFx1MDAzZVxcbiBMOlxcdGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmdcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcXG5pbmRleCBiOGY3MGUyYTE3NjNhZC4uYzJiNjk5NmIwY2ZlMWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcXG5AQCAtMTg4LDUgKzE4OCw2IEBAIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3hpcmNvbS9LY29uZmlnXFxcIlxcbitzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXFxcIlxcbiBcXG4gZW5kaWYgIyBFVEhFUk5FVFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXFxuaW5kZXggNTczNDRmZWM2Y2UwNDcuLmEzNGJjYmQ0ZGY0ZTkyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcXG5AQCAtMTA0LDMgKzEwNCw0IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgKz0geGlyY29tL1xcbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgKz0gc3lub3BzeXMvXFxuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BFTlNBTkRPKSArPSBwZW5zYW5kby9cXG4gb2JqLSQoQ09ORklHX09BX1RDNikgKz0gb2FfdGM2Lm9cXG4rb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWlRFKSArPSB6dGUvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iOTVjMmZjN2RiNzdhMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMjAgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBaVEUgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4rI1xcbitcXG4rY29uZmlnIE5FVF9WRU5ET1JfWlRFXFxuKyAgICBib29sIFxcXCJaVEUgZGV2aWNlc1xcXCJcXG4rICAgIGRlZmF1bHQgeVxcbisgICAgaGVscFxcbisgICAgICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4rICAgICAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4rICAgICAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxcbisgICAgICB0aGUgcXVlc3Rpb25zIGFib3V0IFp0ZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZFxcbisgICAgICBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbitcXG4raWYgTkVUX1ZFTkRPUl9aVEVcXG4rXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xcXCJcXG4rXFxuK2VuZGlmICMgTkVUX1ZFTkRPUl9aVEVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uY2Q5OTI5YjYxNTU5YzZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXFxuQEAgLTAsMCArMSw2IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjXFxuKyMgTWFrZWZpbGUgZm9yIHRoZSBaVEUgZGV2aWNlIGRyaXZlcnNcXG4rI1xcbitcXG4rb2JqLSQoQ09ORklHX0RJTkdIQUkpICs9IGRpbmdoYWkvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTIxYmUzYmY3NzA3ZmRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMzQgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvblxcbisjXFxuK1xcbitjb25maWcgRElOR0hBSVxcbisgICAgYm9vbCBcXFwiWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXFxcIlxcbisgICAgZGVwZW5kcyBvbiBQQ0lcXG4rICAgIHNlbGVjdCBORVRfREVWTElOS1xcbisgICAgaGVscFxcbisgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLlxcbitcXG4rICAgICAgRGluZ0hhaSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgRXRoZXJuZXQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzXFxuKyAgICAgIG11bHRpcGxlIGZlYXR1cmVzIGluY2x1ZGluZyBoYXJkd2FyZSBvZmZsb2FkaW5nLCBTUi1JT1YsIGFuZFxcbisgICAgICBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMuXFxuK1xcbisgICAgICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgZHJpdmVyIHZhcmlhbnRzIGJlbG93LlxcbitcXG4rICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cXG4rXFxuK2lmIERJTkdIQUlcXG4rXFxuK2NvbmZpZyBESU5HSEFJX1BGXFxuKyAgICB0cmlzdGF0ZSBcXFwiWlRFIERpbmdIYWkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXJcXFwiXFxuKyAgICBoZWxwXFxuKyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIFBDSSBFeHByZXNzIEV0aGVybmV0XFxuKyAgICAgIGFkYXB0ZXJzIChQRikuXFxuK1xcbisgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuKyAgICAgIHdpbGwgYmUgbmFtZWQgZGluZ2hhaTEwZS5cXG4rXFxuKyAgICAgIElmIHVuc3VyZSwgc2F5IE4uXFxuK1xcbitlbmRpZiAjIERJTkdIQUlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjEwZGY0ZWI3OWU4MGUxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlXFxuQEAgLTAsMCArMSw5IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjXFxuKyMgTWFrZWZpbGUgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxcbisjXFxuK1xcbitjY2ZsYWdzLXkgKz0gLUkkKHNyYylcXG4rXFxuK29iai0kKENPTkZJR19ESU5HSEFJX1BGKSArPSBkaW5naGFpMTBlLm9cXG4rZGluZ2hhaTEwZS15IDo9IGVuX3BmLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hZmFjNjdmNzE0N2NiOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXFxuQEAgLTAsMCArMSw1NCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBDSSBjYXBhYmlsaXR5IGRlZmluaXRpb25zXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfX0RIX1FVRVVFX0hfX1xcbisjZGVmaW5lIF9fREhfUVVFVUVfSF9fXFxuK1xcbisvKiBUaGlzIGlzIHRoZSBQQ0kgY2FwYWJpbGl0eSBoZWFkZXI6ICovXFxuK3N0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xcbitcXHRfX3U4IGNhcF92bmRyO1xcdFxcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBQQ0lfQ0FQX0lEX1ZORFIgKi9cXG4rXFx0X191OCBjYXBfbmV4dDtcXHRcXHQvKiBHZW5lcmljIFBDSSBmaWVsZDogbmV4dCBwdHIuICovXFxuK1xcdF9fdTggY2FwX2xlbjtcXHRcXHQvKiBHZW5lcmljIFBDSSBmaWVsZDogY2FwYWJpbGl0eSBsZW5ndGggKi9cXG4rXFx0X191OCBjZmdfdHlwZTtcXHRcXHQvKiBJZGVudGlmaWVzIHRoZSBzdHJ1Y3R1cmUuICovXFxuK1xcdF9fdTggYmFyO1xcdFxcdC8qIFdoZXJlIHRvIGZpbmQgaXQuICovXFxuK1xcdF9fdTggaWQ7XFx0XFx0LyogTXVsdGlwbGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzYW1lIHR5cGUgKi9cXG4rXFx0X191OCBwYWRkaW5nWzJdO1xcdFxcdC8qIFBhZCB0byBmdWxsIGR3b3JkLiAqL1xcbitcXHRfX2xlMzIgb2Zmc2V0O1xcdFxcdC8qIE9mZnNldCB3aXRoaW4gYmFyLiAqL1xcbitcXHRfX2xlMzIgbGVuZ3RoO1xcdFxcdC8qIExlbmd0aCBvZiB0aGUgc3RydWN0dXJlLCBpbiBieXRlcy4gKi9cXG4rfTtcXG4rXFxuKy8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cXG4rc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcge1xcbitcXHQvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqL1xcbitcXHRfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBkZXZpY2VfZmVhdHVyZTtcXHQvKiByZWFkLW9ubHkgKi9cXG4rXFx0X19sZTMyIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBndWVzdF9mZWF0dXJlO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTE2IG1zaXhfY29uZmlnO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTE2IG51bV9xdWV1ZXM7XFx0XFx0LyogcmVhZC1vbmx5ICovXFxuK1xcdF9fdTggZGV2aWNlX3N0YXR1cztcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fdTggY29uZmlnX2dlbmVyYXRpb247XFx0LyogcmVhZC1vbmx5ICovXFxuK1xcbitcXHQvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi9cXG4rXFx0X19sZTE2IHF1ZXVlX3NlbGVjdDtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9zaXplO1xcdFxcdC8qIHJlYWQtd3JpdGUsIHBvd2VyIG9mIDIuICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9tc2l4X3ZlY3RvcjtcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMTYgcXVldWVfbm90aWZ5X29mZjtcXHQvKiByZWFkLW9ubHkgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX2Rlc2NfbG87XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMzIgcXVldWVfZGVzY19oaTtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV9hdmFpbF9sbztcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV9hdmFpbF9oaTtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV91c2VkX2xvO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX3VzZWRfaGk7XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbit9O1xcbitcXG4rc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAge1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwIGNhcDtcXG4rXFx0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cXG4rfTtcXG4rXFxuKyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFlNWE3N2RkYWNhNTY5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmNcXG5AQCAtMCwwICsxLDQ2NSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiZW5fcGYuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImRoX3F1ZXVlLmhcXFwiXFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKdW55YW5nIEhhbiBcXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgenhkaF9wZl9kZXZsaW5rX29wcyA9IHt9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHp4ZGhfcGZfcGNpX3RhYmxlW10gPSB7XFxuK1xcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9QRl9ERVZJQ0VfSUQpIH0sXFxuK1xcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sXFxuK1xcdHsgfVxcbit9O1xcbitcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHp4ZGhfcGZfcGNpX3RhYmxlKTtcXG4rXFxuK3ZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0dm9pZCAqcHJpdiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcbitcXHRpZiAocHJpdilcXG4rXFx0XFx0enhkaF9kZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXHRyZXR1cm4gcHJpdjtcXG4rfVxcbitcXG4rdm9pZCB6eGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRrZnJlZSh6eGRoX2Rldi1cXHUwMDNlcHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgenhkaF9wZl9wY2lfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBjaV9zZXRfZHJ2ZGF0YSh6eGRoX2Rldi1cXHUwMDNlcGRldiwgenhkaF9kZXYpO1xcbitcXG4rXFx0cmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoenhkaF9kZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgRE1BX0JJVF9NQVNLKDY0KSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCh6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soMzIpKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3BjaTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcImRoLXBmXFxcIik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9wY2k7XFxuK1xcdH1cXG4rXFxuK1xcdHBjaV9zZXRfbWFzdGVyKHp4ZGhfZGV2LVxcdTAwM2VwZGV2KTtcXG4rXFx0cmV0ID0gcGNpX3NhdmVfc3RhdGUoenhkaF9kZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInBjaV9zYXZlX3N0YXRlIGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MoenhkaF9kZXYtXFx1MDAzZXBkZXYsIDApIFxcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIkJBUiAwIGlzIG5vdCBhbiBNTUlPIHJlc291cmNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XFxuK1xcdH1cXG4rXFxuK1xcdHBmX2Rldi1cXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSA9XFxuK1xcdFxcdGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCAwKSxcXG4rXFx0XFx0XFx0cGNpX3Jlc291cmNlX2xlbih6eGRoX2Rldi1cXHUwMDNlcGRldiwgMCkpO1xcbitcXHRpZiAoIXBmX2Rldi1cXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSkge1xcbitcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJkaCBwZiBwY2kgaW9yZW1hcCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcGNpX3NhdmVfc3RhdGU6XFxuK1xcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xcbitlcnJfcGNpOlxcbitcXHRwY2lfZGlzYWJsZV9kZXZpY2UoenhkaF9kZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbit2b2lkIHp4ZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aW91bm1hcChwZl9kZXYtXFx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pO1xcbitcXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcXG4rXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHp4ZGhfZGV2LVxcdTAwM2VwZGV2KTtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXFxuK1xcdFxcdFxcdFxcdHUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpXFxuK3tcXG4rXFx0aW50IHBvcztcXG4rXFx0dTggdHlwZTtcXG4rXFx0dTggYmFyO1xcbitcXG4rXFx0Zm9yIChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfVk5EUik7IHBvcyBcXHUwMDNlIDA7XFxuK1xcdCAgICAgcG9zID0gcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHBkZXYsIHBvcywgUENJX0NBUF9JRF9WTkRSKSkge1xcbitcXHRcXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHBvcyArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGNmZ190eXBlKSwgXFx1MDAyNnR5cGUpO1xcbitcXHRcXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHBvcyArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFxcdTAwMjZiYXIpO1xcbitcXG4rXFx0XFx0LyogaWdub3JlIHN0cnVjdHVyZXMgd2l0aCByZXNlcnZlZCBCQVIgdmFsdWVzICovXFxuK1xcdFxcdGlmIChiYXIgXFx1MDAzZSBaWERIX1BGX01BWF9CQVJfVkFMKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmICh0eXBlID09IGNmZ190eXBlKSB7XFxuK1xcdFxcdFxcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpIFxcdTAwMjYgaW9yZXNvdXJjZV90eXBlcykge1xcbitcXHRcXHRcXHRcXHQqYmFycyB8PSAoMSBcXHUwMDNjXFx1MDAzYyBiYXIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gcG9zO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyICpiYXJfb2ZmKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHZvaWQgX19pb21lbSAqcDtcXG4rXFx0dTMyIG9mZnNldDtcXG4rXFx0dTMyIGxlbmd0aDtcXG4rXFx0dTggYmFyO1xcbitcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcXG4rXFx0XFx0XFx0ICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcXHUwMDI2YmFyKTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuK1xcdFxcdFxcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG9mZnNldCksIFxcdTAwMjZvZmZzZXQpO1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcXG4rXFx0XFx0XFx0ICAgICAgb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bGVuZ3RoKSwgXFx1MDAyNmxlbmd0aCk7XFxuK1xcbitcXHRpZiAoYmFyX29mZilcXG4rXFx0XFx0KmJhcl9vZmYgPSBvZmZzZXQ7XFxuK1xcbitcXHRpZiAobGVuZ3RoIFxcdTAwM2M9IHN0YXJ0KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcImJhZCBjYXBhYmlsaXR5IGxlbiAldSAoXFx1MDAzZSV1IGV4cGVjdGVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0bGVuZ3RoLCBzdGFydCk7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobGVuZ3RoIC0gc3RhcnQgXFx1MDAzYyBtaW5sZW4pIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiYmFkIGNhcGFiaWxpdHkgbGVuICV1IChcXHUwMDNlPSV6dSBleHBlY3RlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGxlbmd0aCwgbWlubGVuKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGxlbmd0aCAtPSBzdGFydDtcXG4rXFx0aWYgKHN0YXJ0ICsgb2Zmc2V0IFxcdTAwM2Mgb2Zmc2V0KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIm1hcCB3cmFwLWFyb3VuZCAldSsldVxcXFxuXFxcIiwgc3RhcnQsIG9mZnNldCk7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRvZmZzZXQgKz0gc3RhcnQ7XFxuK1xcdGlmIChvZmZzZXQgXFx1MDAyNiAoYWxpZ24gLSAxKSkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJvZmZzZXQgJXUgbm90IGFsaWduZWQgdG8gJXVcXFxcblxcXCIsIG9mZnNldCwgYWxpZ24pO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGxlbmd0aCBcXHUwMDNlIHNpemUpXFxuK1xcdFxcdGxlbmd0aCA9IHNpemU7XFxuK1xcbitcXHRpZiAobGVuKVxcbitcXHRcXHQqbGVuID0gbGVuZ3RoO1xcbitcXG4rXFx0aWYgKG1pbmxlbiArIG9mZnNldCBcXHUwMDNjIG1pbmxlbiB8fFxcbitcXHQgICAgbWlubGVuICsgb2Zmc2V0IFxcdTAwM2UgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcIm1hcCBjdXN0b20gcXVldWUgJXp1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0bWlubGVuLCBvZmZzZXQsIGJhcixcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHAgPSBwY2lfaW9tYXBfcmFuZ2UocGRldiwgYmFyLCBvZmZzZXQsIGxlbmd0aCk7XFxuK1xcdGlmICghcCkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ1bmFibGUgdG8gbWFwIGN1c3RvbSBxdWV1ZSAldUAldSBvbiBiYXIgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGxlbmd0aCwgb2Zmc2V0LCBiYXIpO1xcbitcXHR9IGVsc2UgaWYgKHBhKSB7XFxuK1xcdFxcdCpwYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBiYXIpICsgb2Zmc2V0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcDtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHRpbnQgY29tbW9uO1xcbitcXG4rXFx0LyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi9cXG4rXFx0Y29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vtb2Rlcm5fYmFycyk7XFxuK1xcdGlmICghY29tbW9uKSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcIm1pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFxuK1xcdHBmX2Rldi1cXHUwMDNlY29tbW9uID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgY29tbW9uLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRaWERIX1BGX0FMSUdONCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmICghcGZfZGV2LVxcdTAwM2Vjb21tb24pIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2Vjb21tb24gaXMgbnVsbFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHR1MzIgbm90aWZ5X2xlbmd0aDtcXG4rXFx0dTMyIG5vdGlmeV9vZmZzZXQ7XFxuK1xcdGludCBub3RpZnk7XFxuK1xcbitcXHQvKiBJZiBjb21tb24gaXMgdGhlcmUsIHRoZXNlIHNob3VsZCBiZSB0b28uLi4gKi9cXG4rXFx0bm90aWZ5ID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vtb2Rlcm5fYmFycyk7XFxuK1xcdGlmICghbm90aWZ5KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIm1pc3Npbmcgbm90aWZ5IGNmZyBjYXBhYmlsaXR5XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbitcXHRcXHRcXHQgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcXG4rXFx0XFx0XFx0XFx0bm90aWZ5X29mZl9tdWx0aXBsaWVyKSxcXG4rXFx0XFx0XFx1MDAyNnBmX2Rldi1cXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyKTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuK1xcdFxcdFxcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxcbitcXHRcXHRcXHRcXHRjYXAubGVuZ3RoKSwgXFx1MDAyNm5vdGlmeV9sZW5ndGgpO1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcXG4rXFx0XFx0XFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXFxuK1xcdFxcdFxcdFxcdGNhcC5vZmZzZXQpLCBcXHUwMDI2bm90aWZ5X29mZnNldCk7XFxuK1xcbitcXHQvKiBXZSBkb24ndCBrbm93IGhvdyBtYW55IFZRcyB3ZSdsbCBtYXAsIGFoZWFkIG9mIHRoZSB0aW1lLlxcbitcXHQgKiBJZiBub3RpZnkgbGVuZ3RoIGlzIHNtYWxsLCBtYXAgaXQgYWxsIG5vdy4gT3RoZXJ3aXNlLFxcbitcXHQgKiBtYXAgZWFjaCBWUSBpbmRpdmlkdWFsbHkgbGF0ZXIuXFxuK1xcdCAqL1xcbitcXHRpZiAobm90aWZ5X2xlbmd0aCArIChub3RpZnlfb2Zmc2V0ICUgUEFHRV9TSVpFKSBcXHUwMDNjPSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0cGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIG5vdGlmeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBaWERIX1BGX01BUF9NSU5MRU4yLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgWlhESF9QRl9BTElHTjIsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBub3RpZnlfbGVuZ3RoLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlbm90aWZ5X2xlbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwZl9kZXYtXFx1MDAzZW5vdGlmeV9wYSwgTlVMTCk7XFxuK1xcdFxcdGlmICghcGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwZl9kZXYtXFx1MDAzZW5vdGlmeV9iYXNlIGlzIG51bGxcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwZl9kZXYtXFx1MDAzZW5vdGlmeV9tYXBfY2FwID0gbm90aWZ5O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHRpbnQgZGV2aWNlO1xcbitcXG4rXFx0LyogRGV2aWNlIGNhcGFiaWxpdHkgaXMgb25seSBtYW5kYXRvcnkgZm9yXFxuK1xcdCAqIGRldmljZXMgdGhhdCBoYXZlIGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLlxcbitcXHQgKi9cXG4rXFx0ZGV2aWNlID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vtb2Rlcm5fYmFycyk7XFxuK1xcbitcXHQvKiB3ZSBkb24ndCBrbm93IGhvdyBtdWNoIHdlIHNob3VsZCBtYXAsXFxuK1xcdCAqIGJ1dCBQQUdFX1NJWkUgaXMgbW9yZSB0aGFuIGVub3VnaCBmb3IgYWxsIGV4aXN0aW5nIGRldmljZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoZGV2aWNlKSB7XFxuK1xcdFxcdHBmX2Rldi1cXHUwMDNlZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgZGV2aWNlLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRaWERIX1BGX0FMSUdONCwgMCwgUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlZGV2aWNlX2xlbiwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwZl9kZXYtXFx1MDAzZWRldl9jZmdfYmFyX29mZik7XFxuK1xcdFxcdGlmICghcGZfZGV2LVxcdTAwM2VkZXZpY2UpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2VkZXZpY2UgaXMgbnVsbFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG4rXFxuK1xcdGlmIChwZl9kZXYtXFx1MDAzZWRldmljZSlcXG4rXFx0XFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2VkZXZpY2UpO1xcbitcXHRpZiAocGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSlcXG4rXFx0XFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSk7XFxuK1xcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cXHUwMDNlY29tbW9uKTtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0genhkaF9wZl9jb21tb25fY2ZnX2luaXQoenhkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInp4ZGhfcGZfY29tbW9uX2NmZ19pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHp4ZGhfZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9tYXBfbm90aWZ5O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2RldmljZV9jZmdfaW5pdCh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwienhkaF9wZl9kZXZpY2VfY2ZnX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfbWFwX2RldmljZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfbWFwX2RldmljZTpcXG4rXFx0aWYgKHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpXFxuK1xcdFxcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpO1xcbitlcnJfbWFwX25vdGlmeTpcXG4rXFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2Vjb21tb24pO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldjtcXG4rXFx0c3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFxcdTAwMjZ6eGRoX3BmX2Rldmxpbmtfb3BzLCBzaXplb2Yoc3RydWN0IHp4ZGhfY29yZV9kZXYpLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFkZXZsaW5rKSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInp4ZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0enhkaF9kZXYgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XFxuK1xcdHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbitcXHR6eGRoX2Rldi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuK1xcdHp4ZGhfZGV2LVxcdTAwM2VkZXZsaW5rID0gZGV2bGluaztcXG4rXFxuK1xcdHBmX2RldiA9IHp4ZGhfY29yZV9hbGxvY19wcml2KHp4ZGhfZGV2LCBzaXplb2YoKnBmX2RldikpO1xcbitcXHRpZiAoIXBmX2Rldikge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJ6eGRoX3BmX2RldiBhbGxvYyBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGVycl9wZl9kZXY7XFxuK1xcdH1cXG4rXFxuK1xcdHBmX2Rldi1cXHUwMDNlYmFyX2NoYW5fdmFsaWQgPSBmYWxzZTtcXG4rXFx0cGZfZGV2LVxcdTAwM2V2ZXBhID0gZmFsc2U7XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnp4ZGhfZGV2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cGZfZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuK1xcbitcXHR6eGRoX2Rldi1cXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcXG4rXFxuK1xcdHJldCA9IHp4ZGhfcGZfcGNpX2luaXQoenhkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInp4ZGhfcGZfcGNpX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfcGZfaW5pdDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0genhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoenhkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX2NmZ19pbml0O1xcbitcXHR9XFxuK1xcbitcXHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfY2ZnX2luaXQ6XFxuK1xcdHp4ZGhfcGZfcGNpX2Nsb3NlKHp4ZGhfZGV2KTtcXG4rZXJyX3BmX2luaXQ6XFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnBmX2Rldi1cXHUwMDNlaXJxX2xvY2spO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ6eGRoX2Rldi1cXHUwMDNlbG9jayk7XFxuK1xcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xcbitlcnJfcGZfZGV2OlxcbitcXHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHp4ZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoenhkaF9kZXYpO1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0ZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspO1xcbitcXHR6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTtcXG4rXFx0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZwZl9kZXYtXFx1MDAzZWlycV9sb2NrKTtcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2enhkaF9kZXYtXFx1MDAzZWxvY2spO1xcbitcXHR6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTtcXG4rXFx0ZGV2bGlua19mcmVlKGRldmxpbmspO1xcbitcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKVxcbitcXHRcXHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XFxuK1xcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHp4ZGhfcGZfZHJpdmVyID0ge1xcbitcXHQubmFtZSA9IFxcXCJkaW5naGFpMTBlXFxcIixcXG4rXFx0LmlkX3RhYmxlID0genhkaF9wZl9wY2lfdGFibGUsXFxuK1xcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSB6eGRoX3BmX3JlbW92ZSxcXG4rXFx0LnNodXRkb3duID0genhkaF9wZl9zaHV0ZG93bixcXG4rfTtcXG4rXFxuK21vZHVsZV9wY2lfZHJpdmVyKHp4ZGhfcGZfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41OGM1ZGE5YTA5ZmZjY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXFxuQEAgLTAsMCArMSwxMDEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKlxcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBQRiBoZWFkZXJcXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9fWlhESF9FTl9QRl9IX19cXG4rI2RlZmluZSBfX1pYREhfRU5fUEZfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBaWERIX1BGX1ZFTkRPUl9JRFxcdDB4MWNmMlxcbisjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXFx0MHg4MDQwXFxuKyNkZWZpbmUgWlhESF9WRl9ERVZJQ0VfSURcXHQweDgwNDFcXG4rXFxuKy8qIENvbW1vbiBjb25maWd1cmF0aW9uICovXFxuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkdcXHQxXFxuKy8qIE5vdGlmaWNhdGlvbnMgKi9cXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1xcdDJcXG4rLyogSVNSIGFjY2VzcyAqL1xcbisjZGVmaW5lIFpYREhfUENJX0NBUF9JU1JfQ0ZHXFx0XFx0M1xcbisvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xcbisjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHXFx0NFxcbisvKiBQQ0kgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi9cXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfUENJX0NGR1xcdFxcdDVcXG4rXFxuKyNkZWZpbmUgWlhESF9QRl9NQVhfQkFSX1ZBTFxcdFxcdDB4NVxcbisjZGVmaW5lIFpYREhfUEZfQUxJR040XFx0XFx0XFx0NFxcbisjZGVmaW5lIFpYREhfUEZfQUxJR04yXFx0XFx0XFx0MlxcbisjZGVmaW5lIFpYREhfUEZfTUFQX01JTkxFTjJcXHRcXHQyXFxuK1xcbisjZGVmaW5lIFpYREhfREVWX01BQ19ISUdIX09GRlNFVFxcdDRcXG4rXFxuK2VudW0genhkaF9jb3JlZGV2X3R5cGUge1xcbitcXHRESF9DT1JFREVWX1BGLFxcbitcXHRESF9DT1JFREVWX1ZGLFxcbitcXHRESF9DT1JFREVWX1NGLFxcbitcXHRESF9DT1JFREVWX01QRlxcbit9O1xcbitcXG4rc3RydWN0IGRldmxpbms7XFxuK1xcbitzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldmljZTtcXG4rXFx0ZW51bSB6eGRoX2NvcmVkZXZfdHlwZSBjb3JlZGV2X3R5cGU7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIFByb3RlY3RzIGRldmljZSBjb25maWd1cmF0aW9uICovXFxuK1xcdHZvaWQgKnByaXY7XFxuK307XFxuK1xcbitzdHJ1Y3QgenhkaF9wZl9kZXYge1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjb21tb247XFxuK1xcdC8qIERldmljZS1zcGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUpICAqL1xcbitcXHQvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovXFxuK1xcdHZvaWQgX19pb21lbSAqZGV2aWNlO1xcbitcXHR2b2lkIF9faW9tZW0gKm5vdGlmeV9iYXNlO1xcbitcXHR2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlO1xcbitcXHQvKiBQaHlzaWNhbCBiYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKi9cXG4rXFx0cmVzb3VyY2Vfc2l6ZV90IG5vdGlmeV9wYTtcXG4rXFx0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cXG4rXFx0c2l6ZV90IG5vdGlmeV9sZW47XFxuK1xcdHNpemVfdCBkZXZpY2VfbGVuO1xcbitcXHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xcbitcXHRzMzIgbm90aWZ5X21hcF9jYXA7XFxuK1xcdHUzMiBub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7XFxuK1xcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXFxuK1xcdHMzMiBtb2Rlcm5fYmFycztcXG4rXFx0dm9pZCBfX2lvbWVtICpwY2lfaW9yZW1hcF9hZGRyWzZdO1xcbitcXHR1NjQgc3Jpb3ZfYmFyX3NpemU7XFxuK1xcdHUzMiBkZXZfY2ZnX2Jhcl9vZmY7XFxuK1xcdGJvb2wgcGFja2VkX3N0YXR1cztcXG4rXFx0Ym9vbCBiYXJfY2hhbl92YWxpZDtcXG4rXFx0Ym9vbCB2ZXBhO1xcbitcXHRzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7IC8qIFByb3RlY3RzIElSUSBvcGVyYXRpb25zICovXFxuK307XFxuK1xcbisjZGVmaW5lIEdFVF9DT1JFREVWX1RZUEUocGRldikgXFxcXFxcbitcXHQoKHBkZXYpLVxcdTAwM2VkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRilcXG4rXFxuK3ZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpO1xcbit2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4rdm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcXG4rXFx0XFx0XFx0XFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycyk7XFxuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyICpiYXJfb2ZmKTtcXG4raW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuK2ludCB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4rdm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuK2ludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitcXG4rI2VuZGlmIC8qIF9fWlhESF9FTl9QRl9IX18gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTQ6MzI6MjQuNjMxMDk4Nzc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDcyODMyNjQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQQ0kgZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIGRldmljZSAoWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlcikuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwuIFRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiByZWxpZXMgb24gZmluZGluZyBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcywgbWVhbmluZyBpdCBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGZvcmNlLWJvdW5kIHRvIG90aGVyIHZpcnR1YWwgUENJIGRldmljZXMuIFRoZXJlZm9yZSwgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZhYmQwMzkyMmRiZmU4YjBjYjA0NzE2OWU2ZjkzMmZjZWY0Yzc5MTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxNDozMjoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDJmYjFjNzVhZmQxNjM4Li43MzY5MmIwOWJmN2JhYiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTI5NDQwLDYgKzI5NDQwLDEyIEBAIFM6XHRNYWludGFpbmVkXG4gVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGl3YWkvc291bmQuZ2l0XG4gRjpcdHNvdW5kL2hkYS9jb2RlY3Mvc2VuYXJ5dGVjaC5jXG4gXG4rWlRFIERJTkdIQUkgRVRIRVJORVQgRFJJVkVSXG4rTTpcdEp1bnlhbmcgSGFuIFx1MDAzY2hhbi5qdW55YW5nQHp0ZS5jb20uY25cdTAwM2VcbitMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuK1M6XHRNYWludGFpbmVkXG4rRjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9cbitcbiBUSEUgUkVTVFxuIE06XHRMaW51cyBUb3J2YWxkcyBcdTAwM2N0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZ1x1MDAzZVxuIEw6XHRsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbmluZGV4IGI4ZjcwZTJhMTc2M2FkLi5jMmI2OTk2YjBjZmUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbkBAIC0xODgsNSArMTg4LDYgQEAgc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXCJcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvS2NvbmZpZ1wiXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWdcIlxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3hpcmNvbS9LY29uZmlnXCJcbitzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1wiXG4gXG4gZW5kaWYgIyBFVEhFUk5FVFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbmluZGV4IDU3MzQ0ZmVjNmNlMDQ3Li5hMzRiY2JkNGRmNGU5MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuQEAgLTEwNCwzICsxMDQsNCBAQCBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT00pICs9IHhpcmNvbS9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgKz0gc3lub3BzeXMvXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE8pICs9IHBlbnNhbmRvL1xuIG9iai0kKENPTkZJR19PQV9UQzYpICs9IG9hX3RjNi5vXG4rb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWlRFKSArPSB6dGUvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iOTVjMmZjN2RiNzdhMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcbkBAIC0wLDAgKzEsMjAgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjXG4rIyBaVEUgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbisjXG4rXG4rY29uZmlnIE5FVF9WRU5ET1JfWlRFXG4rICAgIGJvb2wgXCJaVEUgZGV2aWNlc1wiXG4rICAgIGRlZmF1bHQgeVxuKyAgICBoZWxwXG4rICAgICAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4rICAgICAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbisgICAgICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXG4rICAgICAgdGhlIHF1ZXN0aW9ucyBhYm91dCBadGUgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcbisgICAgICBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuK1xuK2lmIE5FVF9WRU5ET1JfWlRFXG4rXG4rc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1wiXG4rXG4rZW5kaWYgIyBORVRfVkVORE9SX1pURVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jZDk5MjliNjE1NTljNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXG5AQCAtMCwwICsxLDYgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjXG4rIyBNYWtlZmlsZSBmb3IgdGhlIFpURSBkZXZpY2UgZHJpdmVyc1xuKyNcbitcbitvYmotJChDT05GSUdfRElOR0hBSSkgKz0gZGluZ2hhaS9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xMjFiZTNiZjc3MDdmZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xuQEAgLTAsMCArMSwzNCBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uXG4rI1xuK1xuK2NvbmZpZyBESU5HSEFJXG4rICAgIGJvb2wgXCJaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcIlxuKyAgICBkZXBlbmRzIG9uIFBDSVxuKyAgICBzZWxlY3QgTkVUX0RFVkxJTktcbisgICAgaGVscFxuKyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuXG4rXG4rICAgICAgRGluZ0hhaSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgRXRoZXJuZXQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzXG4rICAgICAgbXVsdGlwbGUgZmVhdHVyZXMgaW5jbHVkaW5nIGhhcmR3YXJlIG9mZmxvYWRpbmcsIFNSLUlPViwgYW5kXG4rICAgICAgYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLlxuK1xuKyAgICAgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgY2FuIHNlbGVjdCBzcGVjaWZpYyBkcml2ZXIgdmFyaWFudHMgYmVsb3cuXG4rXG4rICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbitcbitpZiBESU5HSEFJXG4rXG4rY29uZmlnIERJTkdIQUlfUEZcbisgICAgdHJpc3RhdGUgXCJaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclwiXG4rICAgIGhlbHBcbisgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBQQ0kgRXhwcmVzcyBFdGhlcm5ldFxuKyAgICAgIGFkYXB0ZXJzIChQRikuXG4rXG4rICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuKyAgICAgIHdpbGwgYmUgbmFtZWQgZGluZ2hhaTEwZS5cbitcbisgICAgICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuK2VuZGlmICMgRElOR0hBSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTBkZjRlYjc5ZTgwZTFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlXG5AQCAtMCwwICsxLDkgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjXG4rIyBNYWtlZmlsZSBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXG4rI1xuK1xuK2NjZmxhZ3MteSArPSAtSSQoc3JjKVxuK1xuK29iai0kKENPTkZJR19ESU5HSEFJX1BGKSArPSBkaW5naGFpMTBlLm9cbitkaW5naGFpMTBlLXkgOj0gZW5fcGYub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFmYWM2N2Y3MTQ3Y2I5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXG5AQCAtMCwwICsxLDU0IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qXG4rICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUENJIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnNcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxuKyAqL1xuK1xuKyNpZm5kZWYgX19ESF9RVUVVRV9IX19cbisjZGVmaW5lIF9fREhfUVVFVUVfSF9fXG4rXG4rLyogVGhpcyBpcyB0aGUgUENJIGNhcGFiaWxpdHkgaGVhZGVyOiAqL1xuK3N0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xuK1x0X191OCBjYXBfdm5kcjtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xuK1x0X191OCBjYXBfbmV4dDtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IG5leHQgcHRyLiAqL1xuK1x0X191OCBjYXBfbGVuO1x0XHQvKiBHZW5lcmljIFBDSSBmaWVsZDogY2FwYWJpbGl0eSBsZW5ndGggKi9cbitcdF9fdTggY2ZnX3R5cGU7XHRcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cbitcdF9fdTggYmFyO1x0XHQvKiBXaGVyZSB0byBmaW5kIGl0LiAqL1xuK1x0X191OCBpZDtcdFx0LyogTXVsdGlwbGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzYW1lIHR5cGUgKi9cbitcdF9fdTggcGFkZGluZ1syXTtcdFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXG4rXHRfX2xlMzIgb2Zmc2V0O1x0XHQvKiBPZmZzZXQgd2l0aGluIGJhci4gKi9cbitcdF9fbGUzMiBsZW5ndGg7XHRcdC8qIExlbmd0aCBvZiB0aGUgc3RydWN0dXJlLCBpbiBieXRlcy4gKi9cbit9O1xuK1xuKy8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cbitzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XG4rXHQvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqL1xuK1x0X19sZTMyIGRldmljZV9mZWF0dXJlX3NlbGVjdDsgLyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIGRldmljZV9mZWF0dXJlO1x0LyogcmVhZC1vbmx5ICovXG4rXHRfX2xlMzIgZ3Vlc3RfZmVhdHVyZV9zZWxlY3Q7IC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUzMiBndWVzdF9mZWF0dXJlO1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMTYgbXNpeF9jb25maWc7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBudW1fcXVldWVzO1x0XHQvKiByZWFkLW9ubHkgKi9cbitcdF9fdTggZGV2aWNlX3N0YXR1cztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcdC8qIHJlYWQtb25seSAqL1xuK1xuK1x0LyogQWJvdXQgYSBzcGVjaWZpYyB2aXJ0cXVldWUuICovXG4rXHRfX2xlMTYgcXVldWVfc2VsZWN0O1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMTYgcXVldWVfc2l6ZTtcdFx0LyogcmVhZC13cml0ZSwgcG93ZXIgb2YgMi4gKi9cbitcdF9fbGUxNiBxdWV1ZV9tc2l4X3ZlY3RvcjtcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBxdWV1ZV9ub3RpZnlfb2ZmO1x0LyogcmVhZC1vbmx5ICovXG4rXHRfX2xlMzIgcXVldWVfZGVzY19sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX2Rlc2NfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUzMiBxdWV1ZV9hdmFpbF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX2F2YWlsX2hpO1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMzIgcXVldWVfdXNlZF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX3VzZWRfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbit9O1xuK1xuK3N0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwIHtcbitcdHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwO1xuK1x0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cbit9O1xuK1xuKyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFlNWE3N2RkYWNhNTY5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5AQCAtMCwwICsxLDQ2NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFwiZW5fcGYuaFwiXG4rI2luY2x1ZGUgXCJkaF9xdWV1ZS5oXCJcbitcbitNT0RVTEVfQVVUSE9SKFwiSnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgenhkaF9wZl9kZXZsaW5rX29wcyA9IHt9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6eGRoX3BmX3BjaV90YWJsZVtdID0ge1xuK1x0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSxcbitcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sXG4rXHR7IH1cbit9O1xuK1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7XG4rXG4rdm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSlcbit7XG4rXHR2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbitcbitcdGlmIChwcml2KVxuK1x0XHR6eGRoX2Rldi1cdTAwM2Vwcml2ID0gcHJpdjtcbitcdHJldHVybiBwcml2O1xuK31cbitcbit2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdGtmcmVlKHp4ZGhfZGV2LVx1MDAzZXByaXYpO1xuK31cbitcbitzdGF0aWMgaW50IHp4ZGhfcGZfcGNpX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRwY2lfc2V0X2RydmRhdGEoenhkaF9kZXYtXHUwMDNlcGRldiwgenhkaF9kZXYpO1xuK1xuK1x0cmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoenhkaF9kZXYtXHUwMDNlcGRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCh6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIERNQV9CSVRfTUFTSygzMikpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwiZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdFx0Z290byBlcnJfcGNpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVx1MDAzZXBkZXYsXG4rXHRcdFx0XHRcdCAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSksXG4rXHRcdFx0XHRcdCAgIFwiZGgtcGZcIik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9wY2k7XG4rXHR9XG4rXG4rXHRwY2lfc2V0X21hc3Rlcih6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbitcdHJldCA9IHBjaV9zYXZlX3N0YXRlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuK1x0fVxuK1xuK1x0aWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIDApIFx1MDAyNiBJT1JFU09VUkNFX01FTSkpIHtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwiQkFSIDAgaXMgbm90IGFuIE1NSU8gcmVzb3VyY2VcXG5cIik7XG4rXHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuK1x0fVxuK1xuK1x0cGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0gPVxuK1x0XHRpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydCh6eGRoX2Rldi1cdTAwM2VwZGV2LCAwKSxcbitcdFx0XHRwY2lfcmVzb3VyY2VfbGVuKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIDApKTtcbitcdGlmICghcGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwiZGggcGYgcGNpIGlvcmVtYXAgZmFpbGVkXFxuXCIpO1xuK1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9wY2lfc2F2ZV9zdGF0ZTpcbitcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbitcdFx0XHRcdCAgICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7XG4rZXJyX3BjaTpcbitcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcbitcdGlvdW5tYXAocGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pO1xuK1x0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi1cdTAwM2VwZGV2LFxuK1x0XHRcdFx0ICAgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcbitcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbit9XG4rXG4raW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXG4rXHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKVxuK3tcbitcdGludCBwb3M7XG4rXHR1OCB0eXBlO1xuK1x0dTggYmFyO1xuK1xuK1x0Zm9yIChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfVk5EUik7IHBvcyBcdTAwM2UgMDtcbitcdCAgICAgcG9zID0gcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHBkZXYsIHBvcywgUENJX0NBUF9JRF9WTkRSKSkge1xuK1x0XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuK1x0XHRcdFx0ICAgICBwb3MgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxuK1x0XHRcdFx0XHRcdFx0Y2ZnX3R5cGUpLCBcdTAwMjZ0eXBlKTtcbitcdFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcbitcdFx0XHRcdCAgICAgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXHUwMDI2YmFyKTtcbitcbitcdFx0LyogaWdub3JlIHN0cnVjdHVyZXMgd2l0aCByZXNlcnZlZCBCQVIgdmFsdWVzICovXG4rXHRcdGlmIChiYXIgXHUwMDNlIFpYREhfUEZfTUFYX0JBUl9WQUwpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICh0eXBlID09IGNmZ190eXBlKSB7XG4rXHRcdFx0aWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcikgXHUwMDI2IGlvcmVzb3VyY2VfdHlwZXMpIHtcbitcdFx0XHRcdCpiYXJzIHw9ICgxIFx1MDAzY1x1MDAzYyBiYXIpO1xuK1x0XHRcdFx0cmV0dXJuIHBvcztcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxuK1x0XHRcdFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXG4rXHRcdFx0XHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXG4rXHRcdFx0XHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxuK1x0XHRcdFx0ICAgICB1MzIgKmJhcl9vZmYpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuK1x0dm9pZCBfX2lvbWVtICpwO1xuK1x0dTMyIG9mZnNldDtcbitcdHUzMiBsZW5ndGg7XG4rXHR1OCBiYXI7XG4rXG4rXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuK1x0XHRcdCAgICAgb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXHUwMDI2YmFyKTtcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4rXHRcdFx0XHRcdFx0b2Zmc2V0KSwgXHUwMDI2b2Zmc2V0KTtcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4rXHRcdFx0XHRcdFx0bGVuZ3RoKSwgXHUwMDI2bGVuZ3RoKTtcbitcbitcdGlmIChiYXJfb2ZmKVxuK1x0XHQqYmFyX29mZiA9IG9mZnNldDtcbitcbitcdGlmIChsZW5ndGggXHUwMDNjPSBzdGFydCkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFx1MDAzZSV1IGV4cGVjdGVkKVxcblwiLFxuK1x0XHRcdGxlbmd0aCwgc3RhcnQpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdGlmIChsZW5ndGggLSBzdGFydCBcdTAwM2MgbWlubGVuKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcImJhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlPSV6dSBleHBlY3RlZClcXG5cIixcbitcdFx0XHRsZW5ndGgsIG1pbmxlbik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0bGVuZ3RoIC09IHN0YXJ0O1xuK1x0aWYgKHN0YXJ0ICsgb2Zmc2V0IFx1MDAzYyBvZmZzZXQpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwibWFwIHdyYXAtYXJvdW5kICV1KyV1XFxuXCIsIHN0YXJ0LCBvZmZzZXQpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdG9mZnNldCArPSBzdGFydDtcbitcdGlmIChvZmZzZXQgXHUwMDI2IChhbGlnbiAtIDEpKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcIm9mZnNldCAldSBub3QgYWxpZ25lZCB0byAldVxcblwiLCBvZmZzZXQsIGFsaWduKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRpZiAobGVuZ3RoIFx1MDAzZSBzaXplKVxuK1x0XHRsZW5ndGggPSBzaXplO1xuK1xuK1x0aWYgKGxlbilcbitcdFx0KmxlbiA9IGxlbmd0aDtcbitcbitcdGlmIChtaW5sZW4gKyBvZmZzZXQgXHUwMDNjIG1pbmxlbiB8fFxuK1x0ICAgIG1pbmxlbiArIG9mZnNldCBcdTAwM2UgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwibWFwIGN1c3RvbSBxdWV1ZSAlenVAJXUgb3V0IG9mIHJhbmdlIG9uIGJhciAldSBsZW5ndGggJWx1XFxuXCIsXG4rXHRcdFx0bWlubGVuLCBvZmZzZXQsIGJhcixcbitcdFx0XHQodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHAgPSBwY2lfaW9tYXBfcmFuZ2UocGRldiwgYmFyLCBvZmZzZXQsIGxlbmd0aCk7XG4rXHRpZiAoIXApIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwidW5hYmxlIHRvIG1hcCBjdXN0b20gcXVldWUgJXVAJXUgb24gYmFyICV1XFxuXCIsXG4rXHRcdFx0bGVuZ3RoLCBvZmZzZXQsIGJhcik7XG4rXHR9IGVsc2UgaWYgKHBhKSB7XG4rXHRcdCpwYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBiYXIpICsgb2Zmc2V0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIHA7XG4rfVxuK1xuK2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuK1x0aW50IGNvbW1vbjtcbitcbitcdC8qIGNoZWNrIGZvciBhIGNvbW1vbiBjb25maWc6IGlmIG5vdCwgdXNlIGxlZ2FjeSBtb2RlIChiYXIgMCkuICovXG4rXHRjb21tb24gPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkcsXG4rXHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuK1x0XHRcdFx0XHQgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vtb2Rlcm5fYmFycyk7XG4rXHRpZiAoIWNvbW1vbikge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSxcbitcdFx0XHRcIm1pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHBmX2Rldi1cdTAwM2Vjb21tb24gPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBjb21tb24sXG4rXHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcbitcdFx0XHRcdFx0XHRaWERIX1BGX0FMSUdONCwgMCxcbitcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLFxuK1x0XHRcdFx0XHRcdE5VTEwsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKCFwZl9kZXYtXHUwMDNlY29tbW9uKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBmX2Rldi1cdTAwM2Vjb21tb24gaXMgbnVsbFxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHR1MzIgbm90aWZ5X2xlbmd0aDtcbitcdHUzMiBub3RpZnlfb2Zmc2V0O1xuK1x0aW50IG5vdGlmeTtcbitcbitcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xuK1x0bm90aWZ5ID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHLFxuK1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcbitcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuK1x0aWYgKCFub3RpZnkpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwibWlzc2luZyBub3RpZnkgY2ZnIGNhcGFiaWxpdHlcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4rXHRcdFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXG4rXHRcdFx0XHRub3RpZnlfb2ZmX211bHRpcGxpZXIpLFxuK1x0XHRcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyKTtcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuK1x0XHRcdFx0Y2FwLmxlbmd0aCksIFx1MDAyNm5vdGlmeV9sZW5ndGgpO1xuK1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4rXHRcdFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXG4rXHRcdFx0XHRjYXAub2Zmc2V0KSwgXHUwMDI2bm90aWZ5X29mZnNldCk7XG4rXG4rXHQvKiBXZSBkb24ndCBrbm93IGhvdyBtYW55IFZRcyB3ZSdsbCBtYXAsIGFoZWFkIG9mIHRoZSB0aW1lLlxuK1x0ICogSWYgbm90aWZ5IGxlbmd0aCBpcyBzbWFsbCwgbWFwIGl0IGFsbCBub3cuIE90aGVyd2lzZSxcbitcdCAqIG1hcCBlYWNoIFZRIGluZGl2aWR1YWxseSBsYXRlci5cbitcdCAqL1xuK1x0aWYgKG5vdGlmeV9sZW5ndGggKyAobm90aWZ5X29mZnNldCAlIFBBR0VfU0laRSkgXHUwMDNjPSBQQUdFX1NJWkUpIHtcbitcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2Rldiwgbm90aWZ5LFxuK1x0XHRcdFx0XHRcdFx0ICAgICBaWERIX1BGX01BUF9NSU5MRU4yLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFpYREhfUEZfQUxJR04yLCAwLFxuK1x0XHRcdFx0XHRcdFx0ICAgIG5vdGlmeV9sZW5ndGgsXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2cGZfZGV2LVx1MDAzZW5vdGlmeV9sZW4sXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2cGZfZGV2LVx1MDAzZW5vdGlmeV9wYSwgTlVMTCk7XG4rXHRcdGlmICghcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKSB7XG4rXHRcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwicGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlIGlzIG51bGxcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHBmX2Rldi1cdTAwM2Vub3RpZnlfbWFwX2NhcCA9IG5vdGlmeTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbitcdGludCBkZXZpY2U7XG4rXG4rXHQvKiBEZXZpY2UgY2FwYWJpbGl0eSBpcyBvbmx5IG1hbmRhdG9yeSBmb3JcbitcdCAqIGRldmljZXMgdGhhdCBoYXZlIGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLlxuK1x0ICovXG4rXHRkZXZpY2UgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkcsXG4rXHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuK1x0XHRcdFx0XHQgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vtb2Rlcm5fYmFycyk7XG4rXG4rXHQvKiB3ZSBkb24ndCBrbm93IGhvdyBtdWNoIHdlIHNob3VsZCBtYXAsXG4rXHQgKiBidXQgUEFHRV9TSVpFIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGFsbCBleGlzdGluZyBkZXZpY2VzLlxuK1x0ICovXG4rXHRpZiAoZGV2aWNlKSB7XG4rXHRcdHBmX2Rldi1cdTAwM2VkZXZpY2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBkZXZpY2UsIDAsXG4rXHRcdFx0XHRcdFx0XHRaWERIX1BGX0FMSUdONCwgMCwgUEFHRV9TSVpFLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlZGV2aWNlX2xlbiwgTlVMTCxcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cGZfZGV2LVx1MDAzZWRldl9jZmdfYmFyX29mZik7XG4rXHRcdGlmICghcGZfZGV2LVx1MDAzZWRldmljZSkge1xuK1x0XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBmX2Rldi1cdTAwM2VkZXZpY2UgaXMgbnVsbFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuK1xuK1x0aWYgKHBmX2Rldi1cdTAwM2VkZXZpY2UpXG4rXHRcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2VkZXZpY2UpO1xuK1x0aWYgKHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSlcbitcdFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKTtcbitcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vjb21tb24pO1xuK31cbitcbitpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInp4ZGhfcGZfY29tbW9uX2NmZ19pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHp4ZGhfZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwienhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9tYXBfbm90aWZ5O1xuK1x0fVxuK1xuK1x0cmV0ID0genhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoenhkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJ6eGRoX3BmX2RldmljZV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdGdvdG8gZXJyX21hcF9kZXZpY2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfbWFwX2RldmljZTpcbitcdGlmIChwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpXG4rXHRcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSk7XG4rZXJyX21hcF9ub3RpZnk6XG4rXHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlY29tbW9uKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgenhkaF9wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2O1xuK1x0c3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2O1xuK1x0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZGV2bGluayA9IGRldmxpbmtfYWxsb2MoXHUwMDI2enhkaF9wZl9kZXZsaW5rX29wcywgc2l6ZW9mKHN0cnVjdCB6eGRoX2NvcmVfZGV2KSxcbitcdFx0XHRcdFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdGlmICghZGV2bGluaykge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInp4ZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0enhkaF9kZXYgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XG4rXHR6eGRoX2Rldi1cdTAwM2VkZXZpY2UgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbitcdHp4ZGhfZGV2LVx1MDAzZXBkZXYgPSBwZGV2O1xuK1x0enhkaF9kZXYtXHUwMDNlZGV2bGluayA9IGRldmxpbms7XG4rXG4rXHRwZl9kZXYgPSB6eGRoX2NvcmVfYWxsb2NfcHJpdih6eGRoX2Rldiwgc2l6ZW9mKCpwZl9kZXYpKTtcbitcdGlmICghcGZfZGV2KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxuXCIpO1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9wZl9kZXY7XG4rXHR9XG4rXG4rXHRwZl9kZXYtXHUwMDNlYmFyX2NoYW5fdmFsaWQgPSBmYWxzZTtcbitcdHBmX2Rldi1cdTAwM2V2ZXBhID0gZmFsc2U7XG4rXHRtdXRleF9pbml0KFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWxvY2spO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuK1xuK1x0enhkaF9kZXYtXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcbitcbitcdHJldCA9IHp4ZGhfcGZfcGNpX2luaXQoenhkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInp4ZGhfcGZfcGNpX2luaXQgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9wZl9pbml0O1xuK1x0fVxuK1xuK1x0cmV0ID0genhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoenhkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4rXHR9XG4rXG4rXHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2NmZ19pbml0OlxuK1x0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xuK2Vycl9wZl9pbml0OlxuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6eGRoX2Rldi1cdTAwM2Vsb2NrKTtcbitcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xuK2Vycl9wZl9kZXY6XG4rXHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayh6eGRoX2Rldik7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXG4rXHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG4rXHR6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTtcbitcdHp4ZGhfcGZfcGNpX2Nsb3NlKHp4ZGhfZGV2KTtcbitcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbitcdG11dGV4X2Rlc3Ryb3koXHUwMDI2enhkaF9kZXYtXHUwMDNlbG9jayk7XG4rXHR6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTtcbitcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbitcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgenhkaF9wZl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXG4rXHRcdHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTtcbitcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHp4ZGhfcGZfZHJpdmVyID0ge1xuK1x0Lm5hbWUgPSBcImRpbmdoYWkxMGVcIixcbitcdC5pZF90YWJsZSA9IHp4ZGhfcGZfcGNpX3RhYmxlLFxuK1x0LnByb2JlID0genhkaF9wZl9wcm9iZSxcbitcdC5yZW1vdmUgPSB6eGRoX3BmX3JlbW92ZSxcbitcdC5zaHV0ZG93biA9IHp4ZGhfcGZfc2h1dGRvd24sXG4rfTtcbitcbittb2R1bGVfcGNpX2RyaXZlcih6eGRoX3BmX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNThjNWRhOWEwOWZmY2Ncbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbkBAIC0wLDAgKzEsMTAxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qXG4rICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUEYgaGVhZGVyXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbisgKi9cbitcbisjaWZuZGVmIF9fWlhESF9FTl9QRl9IX19cbisjZGVmaW5lIF9fWlhESF9FTl9QRl9IX19cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbitcbisjZGVmaW5lIFpYREhfUEZfVkVORE9SX0lEXHQweDFjZjJcbisjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXHQweDgwNDBcbisjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lEXHQweDgwNDFcbitcbisvKiBDb21tb24gY29uZmlndXJhdGlvbiAqL1xuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkdcdDFcbisvKiBOb3RpZmljYXRpb25zICovXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1x0MlxuKy8qIElTUiBhY2Nlc3MgKi9cbisjZGVmaW5lIFpYREhfUENJX0NBUF9JU1JfQ0ZHXHRcdDNcbisvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkdcdDRcbisvKiBQQ0kgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi9cbisjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHXHRcdDVcbitcbisjZGVmaW5lIFpYREhfUEZfTUFYX0JBUl9WQUxcdFx0MHg1XG4rI2RlZmluZSBaWERIX1BGX0FMSUdONFx0XHRcdDRcbisjZGVmaW5lIFpYREhfUEZfQUxJR04yXHRcdFx0MlxuKyNkZWZpbmUgWlhESF9QRl9NQVBfTUlOTEVOMlx0XHQyXG4rXG4rI2RlZmluZSBaWERIX0RFVl9NQUNfSElHSF9PRkZTRVRcdDRcbitcbitlbnVtIHp4ZGhfY29yZWRldl90eXBlIHtcbitcdERIX0NPUkVERVZfUEYsXG4rXHRESF9DT1JFREVWX1ZGLFxuK1x0REhfQ09SRURFVl9TRixcbitcdERIX0NPUkVERVZfTVBGXG4rfTtcbitcbitzdHJ1Y3QgZGV2bGluaztcbitcbitzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG4rXHRlbnVtIHp4ZGhfY29yZWRldl90eXBlIGNvcmVkZXZfdHlwZTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xuK1x0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG4rXHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogUHJvdGVjdHMgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi9cbitcdHZvaWQgKnByaXY7XG4rfTtcbitcbitzdHJ1Y3QgenhkaF9wZl9kZXYge1xuK1x0c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uO1xuK1x0LyogRGV2aWNlLXNwZWNpZmljIGRhdGEgKG5vbi1sZWdhY3kgbW9kZSkgICovXG4rXHQvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovXG4rXHR2b2lkIF9faW9tZW0gKmRldmljZTtcbitcdHZvaWQgX19pb21lbSAqbm90aWZ5X2Jhc2U7XG4rXHR2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlO1xuK1x0LyogUGh5c2ljYWwgYmFzZSBvZiB2cSBub3RpZmljYXRpb25zICovXG4rXHRyZXNvdXJjZV9zaXplX3Qgbm90aWZ5X3BhO1xuK1x0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cbitcdHNpemVfdCBub3RpZnlfbGVuO1xuK1x0c2l6ZV90IGRldmljZV9sZW47XG4rXHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xuK1x0czMyIG5vdGlmeV9tYXBfY2FwO1xuK1x0dTMyIG5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjtcbitcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXG4rXHRzMzIgbW9kZXJuX2JhcnM7XG4rXHR2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2FkZHJbNl07XG4rXHR1NjQgc3Jpb3ZfYmFyX3NpemU7XG4rXHR1MzIgZGV2X2NmZ19iYXJfb2ZmO1xuK1x0Ym9vbCBwYWNrZWRfc3RhdHVzO1xuK1x0Ym9vbCBiYXJfY2hhbl92YWxpZDtcbitcdGJvb2wgdmVwYTtcbitcdHN0cnVjdCBtdXRleCBpcnFfbG9jazsgLyogUHJvdGVjdHMgSVJRIG9wZXJhdGlvbnMgKi9cbit9O1xuK1xuKyNkZWZpbmUgR0VUX0NPUkVERVZfVFlQRShwZGV2KSBcXFxuK1x0KChwZGV2KS1cdTAwM2VkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRilcbitcbit2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKTtcbit2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbit2b2lkIHp4ZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4raW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXG4rXHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKTtcbit2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxuK1x0XHRcdFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXG4rXHRcdFx0XHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXG4rXHRcdFx0XHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxuK1x0XHRcdFx0ICAgICB1MzIgKmJhcl9vZmYpO1xuK2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK2ludCB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK2ludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK2ludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK1xuKyNlbmRpZiAvKiBfX1pYREhfRU5fUEZfSF9fICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNDozMjoyNC42MzExMDA3ODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA5NjMxNjkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIFBhdGhzOiBUaGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgRHJpdmVyKipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIG5ldyBFdGhlcm5ldCBkcml2ZXIgZm9yIFpURSBEaW5nSGFpIGRldmljZXMsIHdoaWNoIHNlZW1zIHRvIGJlIGEgUENJIGRyaXZlci4gSXQgaW1wbGVtZW50cyB0aGUgc3RhbmRhcmQgUENJIHByb2JlLCByZW1vdmUsIGFuZCBzaHV0ZG93biBmdW5jdGlvbnMuIEl0J3MgcmVnaXN0ZXJlZCB3aXRoIGBwY2lfcmVnaXN0ZXJfZHJpdmVyYCBhbmQgaW5jbHVkZXMgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIGFuZCBNYWtlZmlsZSBlbnRyaWVzLCBwbHVzIHRoZSBjb3JlIGRyaXZlciBmaWxlcy4gVGhlIGRyaXZlciBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBhIFBDSSBFdGhlcm5ldCBjb250cm9sbGVyIGZyb20gWlRFIChWZW5kb3IgSUQgMHgxY2YyLCBEZXZpY2UgSUQgMHg4MDQwKS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgZnV6emluZy4gXG5cbkdpdmVuIGl0J3MgYSBQQ0kgZHJpdmVyLCBpdCBzaG91bGQgYmUgZnV6emFibGUuIFRoZSBxdWVzdGlvbiBpcyBob3cgdG8gZ2V0IHRoZSBgenhkaF9wZl9wcm9iZWAgZnVuY3Rpb24gdG8gcnVuLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHN5emthbGxlci4gRG9lcyBzeXprYWxsZXIgaGF2ZSBnb29kIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcz8gU3l6a2FsbGVyIHN1cHBvcnRzIFBDSSBmdXp6aW5nLCByaWdodD8gU3l6a2FsbGVyIHVzZXMgYHN5el9wY2lgIHBzZXVkby1zeXNjYWxscyBvciBzb21ldGhpbmcgc2ltaWxhciBmb3IgUENJIGZ1enppbmcsIG9yIGRvZXMgaXQgcmVseSBvbiBRRU1VIFBDSSBlbXVsYXRpb24/IExldCdzIGJlIHN1cmUsIGBzeXpfcGNpX2RldmljZV9hZGRgIG9yIHNpbWlsYXIuIEknbSB0cnlpbmcgdG8gcmVtZW1iZXIgdGhlIHNwZWNpZmljcyBvZiBzeXprYWxsZXIncyBQQ0kgc3VwcG9ydC4gXG5cblRoZW4gSSBjb21lIGJhY2sgdG8gdGhlIHByb21wdCwgd2hpY2ggaGlnaGxpZ2h0cyB0aGUgZGlmZmljdWx0eSBvZiByZWFjaGluZyBkcml2ZXJzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhhdCdzIGEga2V5IHBvaW50LiBUaGlzIERpbmdIYWkgZGV2aWNlICppcyogc3BlY2lmaWMgaGFyZHdhcmUuIFRoZXJlJ3MgcHJvYmFibHkgbm8gUUVNVSBlbXVsYXRpb24gZm9yIHRoaXMgZGV2aWNlLiBObywgbm8gYHN5el9wY2lgLiBUaGUgcHJvbXB0IGlzIHJpZ2h0LiBTbywgY2FuIHdlIGV2ZW4gcHJvYmUgdGhpcyB0aGluZyB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZT8gTm8uXG5cblRoZSBuZXh0IHRoaW5nIHRoYXQganVtcHMgdG8gbXkgbWluZCBpczogY2FuIHdlIGV4cGxvaXQgc29tZSBraW5kIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBkZXZpY2U/IElzIHRoZXJlIGEgdmlydGlvLWxpa2Ugc3RydWN0dXJlPyBMZXQncyBjaGVjay4gWWVzLCB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBQQ0kgY29uZmlnIHNwYWNlLiBJdCBzcGVjaWZpY2FsbHkgbG9va3MgZm9yIHZlbmRvci1zcGVjaWZpYyBjYXBhYmlsaXRpZXMuIFRoZSBtb3JlIEkgbG9vaywgdGhlIG1vcmUgaXQgcmVzZW1ibGVzIGEgdmlydGlvLW5ldCBpbXBsZW1lbnRhdGlvbiBidXQgdGhyb3VnaCB2ZW5kb3Itc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcy4gQnV0IHRoZSBkcml2ZXIgcmVxdWlyZXMgYSB2ZXJ5IHNwZWNpZmljIFZlbmRvciBhbmQgRGV2aWNlIElELiBTdGFuZGFyZCB2aXJ0aW8tbmV0IGRldmljZXMgKFZlbmRvciAweDFhZjQsIERldmljZSAweDEwMDAvMHgxMDQxKSB3aWxsIG5vdCB0cmlnZ2VyIHRoaXMgZHJpdmVyLiBcblxuU28gaXQncyBhIGRlYWQgZW5kIGlmIHdlIGFyZSBydW5uaW5nIGluIFFFTVUuIEFuZCBzeXprYWxsZXIgaGFzIGEgcmVhbCBwcm9ibGVtLiBTeXprYWxsZXIgY2Fubm90IGNyZWF0ZSB0aGUgUENJIGRldmljZSBieSBpdHNlbGYuIFRoZSBgenhkaF9wZl9wcm9iZWAgd2lsbCBuZXZlciBiZSBjYWxsZWQgaWYgdGhlIFBDSSBzdWJzeXN0ZW0gY2FuJ3QgZmluZCBhIGRldmljZSB3aXRoIElEIDB4MWNmMjoweDgwNDAuIFRoZXJlIGlzIG5vIHN1Y2ggZGV2aWNlIGluIFFFTVUsIHNvIGl0IGxvb2tzIGltcG9zc2libGUgdG8gcmVhY2guIFxuXG5XYWl0LCBjYW4gd2UgaW5qZWN0IGEgUENJIGRldmljZSB3aXRoIHRoZSBgbmV3X2lkYCBzeXNmcyBhdHRyaWJ1dGU/IE5vcGUsIGl0IGNhbiBvbmx5ICpiaW5kKiB0aGUgZHJpdmVyIHRvICpleGlzdGluZyogZGV2aWNlcy4gSXQgZG9lc24ndCBjcmVhdGUgbmV3IG9uZXMuIFdlIHN0aWxsIG5lZWQgdGhlIHJpZ2h0IGtpbmQgb2YgUENJIGRldmljZS4gSWYgd2UgYm91bmQgaXQgdG8gYW5vdGhlciBkZXZpY2UsIGl0IHdvdWxkIHRyaWdnZXIgYHp4ZGhfcGZfcHJvYmVgIGJ1dCBpdCBpcyB1bmxpa2VseSB0byBtYXRjaCB0aGUgZXhhY3Qgc3RydWN0dXJlLlxuXG5JJ20gc3RhcnRpbmcgdG8gcmVtZW1iZXIgdGhhdCBzeXprYWxsZXIgaGFzIHRvIHJlbHkgb24gUUVNVSdzIFBDSSBlbXVsYXRpb24gb3IgYHZmaW9gLiBJZiB0aGUgZGV2aWNlIGlzIG5vdCBlbXVsYXRlZCwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUuIFRoaXMgaXMgYmFkIG5ld3MsIGl0IGlzIGhhcmQgdG8gZnV6eiB3aXRob3V0IGRldmljZSBlbXVsYXRpb24uIEl0IHdpbGwgbm90IHdvcmsuXG5cbklzIHRoZXJlIGFueSB3YXk/IERvZXMgdGhlIGRyaXZlciByZWdpc3RlciBhIGBkZXZsaW5rYCBpbnN0YW5jZT8gWWVzLCBidXQgb25seSAqaW5zaWRlKiBgenhkaF9wZl9wcm9iZWAuIFNvIGlmIHRoZSBwcm9iZSBmdW5jdGlvbiBpc24ndCBjYWxsZWQsIHdlIGNhbid0IHJlYWNoIHRoZSBgZGV2bGlua2AgaW5zdGFuY2UgZWl0aGVyLiBTbyBpdCB3b24ndCBiZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgZWl0aGVyLlxuXG5JcyB0aGVyZSBhbnkgd2F5IHRvIGVtdWxhdGUgdGhlIGRyaXZlciBieSB1c2luZyBzb21ldGhpbmcgbGlrZSBhIHZpcnR1YWwgaG9zdCBicmlkZ2U/IE5vLCB0aGVyZSBpcyBubyBnZW5lcmljIFBDSSBob3N0IGJyaWRnZSBpbiB0aGUga2VybmVsIHRoYXQgd291bGQgYWxsb3cgdG8gaW5qZWN0IHRoaXMgc3BlY2lmaWMgZGV2aWNlLlxuXG5JJ3ZlIGdvdCB0byBmYWNlIHRoZSBtdXNpYzogd2l0aG91dCBzcGVjaWZpYyBlbXVsYXRpb24gZm9yIHRoaXMgWlRFIERpbmdIYWkgY2FyZCwgdGhpcyBkcml2ZXIgaXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgaW4gR0NFL1FFTVUsIHRodXMgbWFraW5nIGVmZmVjdGl2ZSBmdXp6aW5nIHByb2JsZW1hdGljLCBpZiBub3QgaW1wb3NzaWJsZS4gV2UgbmVlZCBhIHdheSB0byBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgZGV2aWNlLCBzbyBpdCBjYW4gYmUgcmVhY2hlZC4gVGhpcyBzZWVtcyB0byBiZSBhIGhhcmR3YXJlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzOTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTQ6MzI6NTkuNzI3NDIwMDAyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNjEzODU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6eGRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oLTEwLS8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oOjExOnN0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmgtMTItXFx0X191OCBjYXBfdm5kcjtcXHRcXHQvKiBHZW5lcmljIFBDSSBmaWVsZDogUENJX0NBUF9JRF9WTkRSICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oLTIzLS8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oOjI0OnN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oLTI1LVxcdC8qIEFib3V0IHRoZSB3aG9sZSBkZXZpY2UuICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oLTQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmg6NDk6c3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmg6NTA6XFx0c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCBjYXA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaC01MS1cXHRfX2xlMzIgbm90aWZ5X29mZl9tdWx0aXBsaWVyOyAvKiBNdWx0aXBsaWVyIGZvciBxdWV1ZV9ub3RpZnlfb2ZmLiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYz0xNz1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgenhkaF9wZl9kZXZsaW5rX29wcyA9IHt9O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyMTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIyLVxcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9QRl9ERVZJQ0VfSUQpIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Mjc6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHp4ZGhfcGZfcGNpX3RhYmxlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Mjk6dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzMtXFx0aWYgKHByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNDpcXHRcXHR6eGRoX2Rldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNS1cXHRyZXR1cm4gcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozODp2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzkte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDA6XFx0a2ZyZWUoenhkaF9kZXYtXFx1MDAzZXByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDEtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MzpzdGF0aWMgaW50IHp4ZGhfcGZfcGNpX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDU6XFx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ2LVxcdGludCByZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ4OlxcdHBjaV9zZXRfZHJ2ZGF0YSh6eGRoX2Rldi1cXHUwMDNlcGRldiwgenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo1MDpcXHRyZXQgPSBwY2lfZW5hYmxlX2RldmljZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy01MS1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo1MjpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNTMtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo1NjpcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIERNQV9CSVRfTUFTSyg2NCkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNTctXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NTg6XFx0XFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCh6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soMzIpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTU5LVxcdFxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjYwOlxcdFxcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcImRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTYxLVxcdFxcdFxcdGdvdG8gZXJyX3BjaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo2NTpcXHRyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NjY6XFx0XFx0XFx0XFx0XFx0ICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy02Ny1cXHRcXHRcXHRcXHRcXHQgICBcXFwiZGgtcGZcXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTY4LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjY5OlxcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTcwLVxcdFxcdGdvdG8gZXJyX3BjaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo3MzpcXHRwY2lfc2V0X21hc3Rlcih6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo3NDpcXHRyZXQgPSBwY2lfc2F2ZV9zdGF0ZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy03NS1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo3NjpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNzctXFx0XFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6ODA6XFx0aWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCAwKSBcXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtODEtXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjgyOlxcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIkJBUiAwIGlzIG5vdCBhbiBNTUlPIHJlc291cmNlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTgzLVxcdFxcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy04Ni1cXHRwZl9kZXYtXFx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0gPVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6ODc6XFx0XFx0aW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoenhkaF9kZXYtXFx1MDAzZXBkZXYsIDApLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6ODg6XFx0XFx0XFx0cGNpX3Jlc291cmNlX2xlbih6eGRoX2Rldi1cXHUwMDNlcGRldiwgMCkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtODktXFx0aWYgKCFwZl9kZXYtXFx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTkwLVxcdFxcdHJldCA9IC1FTk9NRU07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo5MTpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJkaCBwZiBwY2kgaW9yZW1hcCBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtOTItXFx0XFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTk3LWVycl9wY2lfc2F2ZV9zdGF0ZTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjk4OlxcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo5OTpcXHRcXHRcXHRcXHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTEwMC1lcnJfcGNpOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTAxOlxcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMDItXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTA0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTA1OnZvaWQgenhkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTA2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjEwNzpcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTA5LVxcdGlvdW5tYXAocGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjExMDpcXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTExOlxcdFxcdFxcdFxcdCAgICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTEyOlxcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMTMtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTE1OmludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTE2LVxcdFxcdFxcdFxcdHUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTEyNC1cXHRcXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTI1OlxcdFxcdFxcdFxcdCAgICAgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTEyNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjZmdfdHlwZSksIFxcdTAwMjZ0eXBlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTEyNy1cXHRcXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTI4OlxcdFxcdFxcdFxcdCAgICAgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXFx1MDAyNmJhcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE0Njp2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTQ3LVxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNTEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTUyOlxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXFx1MDAzZXBkZXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNTMtXFx0dm9pZCBfX2lvbWVtICpwO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNTgtXFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE1OTpcXHRcXHRcXHQgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFxcdTAwMjZiYXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTYwLVxcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTYxOlxcdFxcdFxcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNjItXFx0XFx0XFx0XFx0XFx0XFx0b2Zmc2V0KSwgXFx1MDAyNm9mZnNldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNjMtXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxNjQ6XFx0XFx0XFx0ICAgICAgb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE2NS1cXHRcXHRcXHRcXHRcXHRcXHRsZW5ndGgpLCBcXHUwMDI2bGVuZ3RoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTcwLVxcdGlmIChsZW5ndGggXFx1MDAzYz0gc3RhcnQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE3MTpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFxcdTAwM2UldSBleHBlY3RlZClcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNzItXFx0XFx0XFx0bGVuZ3RoLCBzdGFydCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE3Ni1cXHRpZiAobGVuZ3RoIC0gc3RhcnQgXFx1MDAzYyBtaW5sZW4pIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE3NzpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFxcdTAwM2U9JXp1IGV4cGVjdGVkKVxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE3OC1cXHRcXHRcXHRsZW5ndGgsIG1pbmxlbik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE4My1cXHRpZiAoc3RhcnQgKyBvZmZzZXQgXFx1MDAzYyBvZmZzZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE4NDpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJtYXAgd3JhcC1hcm91bmQgJXUrJXVcXFxcblxcXCIsIHN0YXJ0LCBvZmZzZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTg1LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xODktXFx0aWYgKG9mZnNldCBcXHUwMDI2IChhbGlnbiAtIDEpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxOTA6XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwib2Zmc2V0ICV1IG5vdCBhbGlnbmVkIHRvICV1XFxcXG5cXFwiLCBvZmZzZXQsIGFsaWduKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE5MS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjAxLVxcdCAgICBtaW5sZW4gKyBvZmZzZXQgXFx1MDAzZSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjIwMjpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMDMtXFx0XFx0XFx0XFxcIm1hcCBjdXN0b20gcXVldWUgJXp1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjEwLVxcdGlmICghcCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjExOlxcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInVuYWJsZSB0byBtYXAgY3VzdG9tIHF1ZXVlICV1QCV1IG9uIGJhciAldVxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIxMi1cXHRcXHRcXHRsZW5ndGgsIG9mZnNldCwgYmFyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjE5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjIwOmludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMjEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjIyOlxcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyMjM6XFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIyNC1cXHRpbnQgY29tbW9uO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMjYtXFx0LyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjIyNzpcXHRjb21tb24gPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMjgtXFx0XFx0XFx0XFx0XFx0ICAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIzMC1cXHRpZiAoIWNvbW1vbikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjMxOlxcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIzMi1cXHRcXHRcXHRcXFwibWlzc2luZyBjYXBhYmlsaXRpZXMsIGxlYXZpbmcgZm9yIGxlZ2FjeSBkcml2ZXJcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyMzY6XFx0cGZfZGV2LVxcdTAwM2Vjb21tb24gPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBjb21tb24sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyMzc6XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIzOC1cXHRcXHRcXHRcXHRcXHRcXHRaWERIX1BGX0FMSUdONCwgMCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjIzOTpcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjQwLVxcdFxcdFxcdFxcdFxcdFxcdE5VTEwsIE5VTEwsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjQxLVxcdGlmICghcGZfZGV2LVxcdTAwM2Vjb21tb24pIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI0MjpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwZl9kZXYtXFx1MDAzZWNvbW1vbiBpcyBudWxsXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI0My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjQ5OmludCB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNTAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjUxOlxcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyNTI6XFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI1My1cXHR1MzIgbm90aWZ5X2xlbmd0aDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjU3LVxcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjU4OlxcdG5vdGlmeSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfTk9USUZZX0NGRyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI1OS1cXHRcXHRcXHRcXHRcXHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjYxLVxcdGlmICghbm90aWZ5KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyNjI6XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwibWlzc2luZyBub3RpZnkgY2ZnIGNhcGFiaWxpdHlcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjYzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNjYtXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyNjc6XFx0XFx0XFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNjgtXFx0XFx0XFx0XFx0bm90aWZ5X29mZl9tdWx0aXBsaWVyKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjcwLVxcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjcxOlxcdFxcdFxcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjcyLVxcdFxcdFxcdFxcdGNhcC5sZW5ndGgpLCBcXHUwMDI2bm90aWZ5X2xlbmd0aCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNzMtXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyNzQ6XFx0XFx0XFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNzUtXFx0XFx0XFx0XFx0Y2FwLm9mZnNldCksIFxcdTAwMjZub3RpZnlfb2Zmc2V0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjgxLVxcdGlmIChub3RpZnlfbGVuZ3RoICsgKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpIFxcdTAwM2M9IFBBR0VfU0laRSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjgyOlxcdFxcdHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBub3RpZnksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yODMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBaWERIX1BGX01BUF9NSU5MRU4yLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yODgtXFx0XFx0aWYgKCFwZl9kZXYtXFx1MDAzZW5vdGlmeV9iYXNlKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyODk6XFx0XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSBpcyBudWxsXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI5MC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjk4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Mjk5OmludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMDAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzAxOlxcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMDI6XFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMwMy1cXHRpbnQgZGV2aWNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMDctXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMDg6XFx0ZGV2aWNlID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzA5LVxcdFxcdFxcdFxcdFxcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMTUtXFx0aWYgKGRldmljZSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzE2OlxcdFxcdHBmX2Rldi1cXHUwMDNlZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgZGV2aWNlLCAwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzE3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFpYREhfUEZfQUxJR040LCAwLCBQQUdFX1NJWkUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMyMC1cXHRcXHRpZiAoIXBmX2Rldi1cXHUwMDNlZGV2aWNlKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMjE6XFx0XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2VkZXZpY2UgaXMgbnVsbFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMjItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjMyODp2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzI5LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjMzMDpcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzMxOlxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXFx1MDAzZXBkZXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMzItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMzOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM0MDppbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzQxLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM0MjpcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzQzOlxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXFx1MDAzZXBkZXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNDQtXFx0aW50IHJldDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM0NjpcXHRyZXQgPSB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCh6eGRoX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNDctXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzQ4OlxcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInp4ZGhfcGZfY29tbW9uX2NmZ19pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNDktXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzUyOlxcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM1My1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNTQ6XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwienhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM1NS1cXHRcXHRnb3RvIGVycl9tYXBfbm90aWZ5O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNTg6XFx0cmV0ID0genhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzU5LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM2MDpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX2RldmljZV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzYxLVxcdFxcdGdvdG8gZXJyX21hcF9kZXZpY2U7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM3NDpzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM3NS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNzY6XFx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNzc6XFx0c3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzc4LVxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zODAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozODE6XFx0ZGV2bGluayA9IGRldmxpbmtfYWxsb2MoXFx1MDAyNnp4ZGhfcGZfZGV2bGlua19vcHMsIHNpemVvZihzdHJ1Y3QgenhkaF9jb3JlX2RldiksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zODItXFx0XFx0XFx0XFx0XFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zODMtXFx0aWYgKCFkZXZsaW5rKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozODQ6XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZiBkZXZsaW5rIGFsbG9jIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zODUtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM4Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM4ODpcXHR6eGRoX2RldiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM4OTpcXHR6eGRoX2Rldi1cXHUwMDNlZGV2aWNlID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM5MDpcXHR6eGRoX2Rldi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozOTE6XFx0enhkaF9kZXYtXFx1MDAzZWRldmxpbmsgPSBkZXZsaW5rO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzkzOlxcdHBmX2RldiA9IHp4ZGhfY29yZV9hbGxvY19wcml2KHp4ZGhfZGV2LCBzaXplb2YoKnBmX2RldikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzk0LVxcdGlmICghcGZfZGV2KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozOTU6XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM5Ni1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MDEtXFx0cGZfZGV2LVxcdTAwM2V2ZXBhID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MDI6XFx0bXV0ZXhfaW5pdChcXHUwMDI2enhkaF9kZXYtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDAzLVxcdG11dGV4X2luaXQoXFx1MDAyNnBmX2Rldi1cXHUwMDNlaXJxX2xvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDA0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDA1OlxcdHp4ZGhfZGV2LVxcdTAwM2Vjb3JlZGV2X3R5cGUgPSBHRVRfQ09SRURFVl9UWVBFKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDA3OlxcdHJldCA9IHp4ZGhfcGZfcGNpX2luaXQoenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDA4LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQwOTpcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJ6eGRoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MTAtXFx0XFx0Z290byBlcnJfcGZfaW5pdDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDEzOlxcdHJldCA9IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQxNC1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MTU6XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQxNi1cXHRcXHRnb3RvIGVycl9jZmdfaW5pdDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDIzLWVycl9jZmdfaW5pdDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQyNDpcXHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MjUtZXJyX3BmX2luaXQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MjYtXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGZfZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0Mjc6XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2enhkaF9kZXYtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDI4OlxcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDI5LWVycl9wZl9kZXY6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQzMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQzNDpzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQzNS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MzY6XFx0c3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDM3OlxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKHp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQzODpcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDQwLVxcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ0MTpcXHR6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ0MjpcXHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NDMtXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGZfZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0NDQ6XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2enhkaF9kZXYtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDQ1OlxcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDQ2LVxcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDUwOnN0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NTEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0NTc6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHp4ZGhfcGZfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDU4LVxcdC5uYW1lID0gXFxcImRpbmdoYWkxMGVcXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDU5OlxcdC5pZF90YWJsZSA9IHp4ZGhfcGZfcGNpX3RhYmxlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDYwOlxcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0NjE6XFx0LnJlbW92ZSA9IHp4ZGhfcGZfcmVtb3ZlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDYyOlxcdC5zaHV0ZG93biA9IHp4ZGhfcGZfc2h1dGRvd24sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NjMtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ2NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ2NTptb2R1bGVfcGNpX2RyaXZlcih6eGRoX3BmX2RyaXZlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6Mzg6ZW51bSB6eGRoX2NvcmVkZXZfdHlwZSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC0zOS1cXHRESF9DT1JFREVWX1BGLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaD00NT1zdHJ1Y3QgZGV2bGluaztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTQ2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6NDc6c3RydWN0IHp4ZGhfY29yZV9kZXYge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtNDgtXFx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6NDk6XFx0ZW51bSB6eGRoX2NvcmVkZXZfdHlwZSBjb3JlZGV2X3R5cGU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC01MC1cXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtNTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo1NjpzdHJ1Y3QgenhkaF9wZl9kZXYge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6NTc6XFx0c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtNTgtXFx0LyogRGV2aWNlLXNwZWNpZmljIGRhdGEgKG5vbi1sZWdhY3kgbW9kZSkgICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6ODU6dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo4Njp2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjg3OnZvaWQgenhkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjg4OmludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtODktXFx0XFx0XFx0XFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo5MDp2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtOTEtXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTk0LVxcdFxcdFxcdFxcdCAgICAgdTMyICpiYXJfb2ZmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjk1OmludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6OTY6aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo5NzppbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjk4OnZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6OTk6aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC0xMDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjMzOjAwLjY2MzYwMDg0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2OTU3NTcxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIGRyaXZlciDigJMgaXQncyBhIFBDSSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlci4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgdGhpcyBkZXZpY2UgaW4gZWl0aGVyIFFFTVUgb3Igd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLlxuXG5UaGUgYHp4ZGhfcGZfcHJvYmVgIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0J3Mgb25seSBnb2luZyB0byBiZSBpbnZva2VkIGlmIGl0IGRldGVjdHMgYSBQQ0kgZGV2aWNlIHdpdGggYSB2ZXJ5IHNwZWNpZmljIFZlbmRvciBJRCAoMHgxY2YyKSBhbmQgRGV2aWNlIElEICgweDgwNDAgb3IgMHg4MDQxKS4gSSBjb3VsZCB0cnkgdG8gZm9yY2UgaXQgdG8gYmluZCB0byBhIGRpZmZlcmVudCBQQ0kgZGV2aWNlIHVzaW5nIGBuZXdfaWRgLCBidXQgSSBrbm93IHRoYXQgd29uJ3Qgd29yay4gVGhlIHByb2JlIGZ1bmN0aW9uIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBzb21lIHZlbmRvci1zcGVjaWZpYyBQQ0kgY2FwYWJpbGl0aWVzIChgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkdgLCBhbmQgc28gb24pIHRoYXQgd29uJ3QgYmUgcHJlc2VudCBvbiBhbnkgb3RoZXIgaGFyZHdhcmUuIEVzc2VudGlhbGx5LCB0aGUgZHJpdmVyIGV4cGVjdHMgKnRoYXQqIHNwZWNpZmljIGhhcmR3YXJlLlxuXG5UaGVyZWZvcmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgd2lsbCB0aGlzIGRyaXZlcidzIGNvZGUgcGF0aHMgYmUgcmVhY2hhYmxlIGluIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VLiBJdCdzIGEgaGFyZHdhcmUtZGVwZW5kZW50IGRyaXZlciwgYW5kIHdlIGRvbid0IGhhdmUgdGhhdCBoYXJkd2FyZSBhdmFpbGFibGUgaW4gdGhlc2UgdmlydHVhbGl6ZWQgY29udGV4dHMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ3ZlIGRvdWJsZS1jaGVja2VkLiBJcyB0aGVyZSBhIFwienhkaFwiIHZpcnR1YWwgZGV2aWNlPyBOb3BlLiBJcyB0aGVyZSBhIG5ldGxpbmsgaW50ZXJmYWNlIEkgbWlnaHQgbGV2ZXJhZ2UgdGhhdCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgZGV2aWNlIGJlaW5nIHByb2JlZCBmaXJzdD8gTm8gbHVjayB0aGVyZSBlaXRoZXIuIFRoZSBkZXZsaW5rIGludGVyZmFjZSwgdGhhdCdzIHJlZ2lzdGVyZWQgd2l0aGluIGB6eGRoX3BmX3Byb2JlYCwgc28gaXQgcmVxdWlyZXMgcHJvYmUgdG8gc3VjY2VlZC4gU28gdGhlcmUgaXMgbm8gd2F5IGFyb3VuZCB0aGlzLiBUaGUgcHJvYmUgbmVlZHMgdGhvc2Ugc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcywgYW5kIHRoYXQncyB0aGUgaGFyZCBzdG9wLlxuXG5TbywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgdGhhdCdzIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjY0LCJPdXRwdXRUb2tlbnMiOjExOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNDozMzowOS4zNTkzNjAzOTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUENJIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UgKFpURSBEaW5nSGFpIEV0aGVybmV0IGNvbnRyb2xsZXIpLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLiBUaGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gcmVsaWVzIG9uIGZpbmRpbmcgc3BlY2lmaWMgdmVuZG9yLXNwZWNpZmljIFBDSSBjYXBhYmlsaXRpZXMsIG1lYW5pbmcgaXQgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBmb3JjZS1ib3VuZCB0byBvdGhlciB2aXJ0dWFsIFBDSSBkZXZpY2VzLiBUaGVyZWZvcmUsIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQQ0kgZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIGRldmljZSAoWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlcikuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwuIFRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiByZWxpZXMgb24gZmluZGluZyBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcywgbWVhbmluZyBpdCBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGZvcmNlLWJvdW5kIHRvIG90aGVyIHZpcnR1YWwgUENJIGRldmljZXMuIFRoZXJlZm9yZSwgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzbwd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 14:10:37 +0000 UTC FinishedAt: 2026-07-20 14:33:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUENJIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UgKFpURSBEaW5nSGFpIEV0aGVybmV0IGNvbnRyb2xsZXIpLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLiBUaGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uIHJlbGllcyBvbiBmaW5kaW5nIHNwZWNpZmljIHZlbmRvci1zcGVjaWZpYyBQQ0kgY2FwYWJpbGl0aWVzLCBtZWFuaW5nIGl0IGNhbm5vdCBiZSBzdWNjZXNzZnVsbHkgZm9yY2UtYm91bmQgdG8gb3RoZXIgdmlydHVhbCBQQ0kgZGV2aWNlcy4gVGhlcmVmb3JlLCB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YWJkMDM5MjJkYmZlOGIwY2IwNDcxNjllNmY5MzJmY2VmNGM3OTExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTQ6MzI6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMmZiMWM3NWFmZDE2MzguLjczNjkyYjA5YmY3YmFiIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMjk0NDAsNiAmIzQzOzI5NDQwLDEyIEBAIFM6XHRNYWludGFpbmVkXG4gVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGl3YWkvc291bmQuZ2l0XG4gRjpcdHNvdW5kL2hkYS9jb2RlY3Mvc2VuYXJ5dGVjaC5jXG4gXG4mIzQzO1pURSBESU5HSEFJIEVUSEVSTkVUIERSSVZFUlxuJiM0MztNOlx0SnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVxuJiM0MztMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuJiM0MztTOlx0TWFpbnRhaW5lZFxuJiM0MztGOlx0ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL1xuJiM0MztcbiBUSEUgUkVTVFxuIE06XHRMaW51cyBUb3J2YWxkcyBcdTAwM2N0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZ1x1MDAzZVxuIEw6XHRsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbmluZGV4IGI4ZjcwZTJhMTc2M2FkLi5jMmI2OTk2YjBjZmUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbkBAIC0xODgsNSAmIzQzOzE4OCw2IEBAIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWdcJiMzNDtcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXCYjMzQ7XG4gXG4gZW5kaWYgIyBFVEhFUk5FVFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbmluZGV4IDU3MzQ0ZmVjNmNlMDQ3Li5hMzRiY2JkNGRmNGU5MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuQEAgLTEwNCwzICYjNDM7MTA0LDQgQEAgb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWElSQ09NKSAmIzQzOz0geGlyY29tL1xuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1NZTk9QU1lTKSAmIzQzOz0gc3lub3BzeXMvXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE8pICYjNDM7PSBwZW5zYW5kby9cbiBvYmotJChDT05GSUdfT0FfVEM2KSAmIzQzOz0gb2FfdGM2Lm9cbiYjNDM7b2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWlRFKSAmIzQzOz0genRlL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjk1YzJmYzdkYjc3YTJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXG5AQCAtMCwwICYjNDM7MSwyMCBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIFpURSBkcml2ZXIgY29uZmlndXJhdGlvblxuJiM0MzsjXG4mIzQzO1xuJiM0Mztjb25maWcgTkVUX1ZFTkRPUl9aVEVcbiYjNDM7ICAgIGJvb2wgXCYjMzQ7WlRFIGRldmljZXNcJiMzNDtcbiYjNDM7ICAgIGRlZmF1bHQgeVxuJiM0MzsgICAgaGVscFxuJiM0MzsgICAgICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiYjNDM7ICAgICAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4mIzQzOyAgICAgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiYjNDM7ICAgICAgdGhlIHF1ZXN0aW9ucyBhYm91dCBadGUgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcbiYjNDM7ICAgICAgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiYjNDM7XG4mIzQzO2lmIE5FVF9WRU5ET1JfWlRFXG4mIzQzO1xuJiM0Mztzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1wmIzM0O1xuJiM0MztcbiYjNDM7ZW5kaWYgIyBORVRfVkVORE9SX1pURVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jZDk5MjliNjE1NTljNlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSw2IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjXG4mIzQzOyMgTWFrZWZpbGUgZm9yIHRoZSBaVEUgZGV2aWNlIGRyaXZlcnNcbiYjNDM7I1xuJiM0MztcbiYjNDM7b2JqLSQoQ09ORklHX0RJTkdIQUkpICYjNDM7PSBkaW5naGFpL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjEyMWJlM2JmNzcwN2ZkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXG5AQCAtMCwwICYjNDM7MSwzNCBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uXG4mIzQzOyNcbiYjNDM7XG4mIzQzO2NvbmZpZyBESU5HSEFJXG4mIzQzOyAgICBib29sIFwmIzM0O1pURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclwmIzM0O1xuJiM0MzsgICAgZGVwZW5kcyBvbiBQQ0lcbiYjNDM7ICAgIHNlbGVjdCBORVRfREVWTElOS1xuJiM0MzsgICAgaGVscFxuJiM0MzsgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLlxuJiM0MztcbiYjNDM7ICAgICAgRGluZ0hhaSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgRXRoZXJuZXQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzXG4mIzQzOyAgICAgIG11bHRpcGxlIGZlYXR1cmVzIGluY2x1ZGluZyBoYXJkd2FyZSBvZmZsb2FkaW5nLCBTUi1JT1YsIGFuZFxuJiM0MzsgICAgICBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMuXG4mIzQzO1xuJiM0MzsgICAgICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgZHJpdmVyIHZhcmlhbnRzIGJlbG93LlxuJiM0MztcbiYjNDM7ICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjNDM7XG4mIzQzO2lmIERJTkdIQUlcbiYjNDM7XG4mIzQzO2NvbmZpZyBESU5HSEFJX1BGXG4mIzQzOyAgICB0cmlzdGF0ZSBcJiMzNDtaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclwmIzM0O1xuJiM0MzsgICAgaGVscFxuJiM0MzsgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBQQ0kgRXhwcmVzcyBFdGhlcm5ldFxuJiM0MzsgICAgICBhZGFwdGVycyAoUEYpLlxuJiM0MztcbiYjNDM7ICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuJiM0MzsgICAgICB3aWxsIGJlIG5hbWVkIGRpbmdoYWkxMGUuXG4mIzQzO1xuJiM0MzsgICAgICBJZiB1bnN1cmUsIHNheSBOLlxuJiM0MztcbiYjNDM7ZW5kaWYgIyBESU5HSEFJXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xMGRmNGViNzllODBlMVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDkgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBNYWtlZmlsZSBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXG4mIzQzOyNcbiYjNDM7XG4mIzQzO2NjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYylcbiYjNDM7XG4mIzQzO29iai0kKENPTkZJR19ESU5HSEFJX1BGKSAmIzQzOz0gZGluZ2hhaTEwZS5vXG4mIzQzO2RpbmdoYWkxMGUteSA6PSBlbl9wZi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWZhYzY3ZjcxNDdjYjlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcbkBAIC0wLDAgJiM0MzsxLDU0IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUENJIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnNcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fREhfUVVFVUVfSF9fXG4mIzQzOyNkZWZpbmUgX19ESF9RVUVVRV9IX19cbiYjNDM7XG4mIzQzOy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi9cbiYjNDM7c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCB7XG4mIzQzO1x0X191OCBjYXBfdm5kcjtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xuJiM0MztcdF9fdTggY2FwX25leHQ7XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi9cbiYjNDM7XHRfX3U4IGNhcF9sZW47XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBjYXBhYmlsaXR5IGxlbmd0aCAqL1xuJiM0MztcdF9fdTggY2ZnX3R5cGU7XHRcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cbiYjNDM7XHRfX3U4IGJhcjtcdFx0LyogV2hlcmUgdG8gZmluZCBpdC4gKi9cbiYjNDM7XHRfX3U4IGlkO1x0XHQvKiBNdWx0aXBsZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZSAqL1xuJiM0MztcdF9fdTggcGFkZGluZ1syXTtcdFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXG4mIzQzO1x0X19sZTMyIG9mZnNldDtcdFx0LyogT2Zmc2V0IHdpdGhpbiBiYXIuICovXG4mIzQzO1x0X19sZTMyIGxlbmd0aDtcdFx0LyogTGVuZ3RoIG9mIHRoZSBzdHJ1Y3R1cmUsIGluIGJ5dGVzLiAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogRmllbGRzIGluIFpYREhfUEZfUENJX0NBUF9DT01NT05fQ0ZHOiAqL1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XG4mIzQzO1x0LyogQWJvdXQgdGhlIHdob2xlIGRldmljZS4gKi9cbiYjNDM7XHRfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIGRldmljZV9mZWF0dXJlO1x0LyogcmVhZC1vbmx5ICovXG4mIzQzO1x0X19sZTMyIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIGd1ZXN0X2ZlYXR1cmU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgbXNpeF9jb25maWc7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgbnVtX3F1ZXVlcztcdFx0LyogcmVhZC1vbmx5ICovXG4mIzQzO1x0X191OCBkZXZpY2Vfc3RhdHVzO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcdC8qIHJlYWQtb25seSAqL1xuJiM0MztcbiYjNDM7XHQvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi9cbiYjNDM7XHRfX2xlMTYgcXVldWVfc2VsZWN0O1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTE2IHF1ZXVlX3NpemU7XHRcdC8qIHJlYWQtd3JpdGUsIHBvd2VyIG9mIDIuICovXG4mIzQzO1x0X19sZTE2IHF1ZXVlX21zaXhfdmVjdG9yO1x0LyogcmVhZC13cml0ZSAqL1xuJiM0MztcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMTYgcXVldWVfbm90aWZ5X29mZjtcdC8qIHJlYWQtb25seSAqL1xuJiM0MztcdF9fbGUzMiBxdWV1ZV9kZXNjX2xvO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO1x0X19sZTMyIHF1ZXVlX2Rlc2NfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfYXZhaWxfbG87XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfYXZhaWxfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbiYjNDM7XHRfX2xlMzIgcXVldWVfdXNlZF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuJiM0MztcdF9fbGUzMiBxdWV1ZV91c2VkX2hpO1x0XHQvKiByZWFkLXdyaXRlICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCBjYXA7XG4mIzQzO1x0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFlNWE3N2RkYWNhNTY5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5AQCAtMCwwICYjNDM7MSw0NjUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbl9wZi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2RoX3F1ZXVlLmhcJiMzNDtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgenhkaF9wZl9kZXZsaW5rX29wcyA9IHt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHp4ZGhfcGZfcGNpX3RhYmxlW10gPSB7XG4mIzQzO1x0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSxcbiYjNDM7XHR7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfVkZfREVWSUNFX0lEKSB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHp4ZGhfcGZfcGNpX3RhYmxlKTtcbiYjNDM7XG4mIzQzO3ZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHR2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYpXG4mIzQzO1x0XHR6eGRoX2Rldi1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XHRyZXR1cm4gcHJpdjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB6eGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdGtmcmVlKHp4ZGhfZGV2LVx1MDAzZXByaXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfcGNpX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBjaV9zZXRfZHJ2ZGF0YSh6eGRoX2Rldi1cdTAwM2VwZGV2LCB6eGRoX2Rldik7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgRE1BX0JJVF9NQVNLKDMyKSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX3BjaTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbiYjNDM7XHRcdFx0XHRcdCAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSksXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtkaC1wZlwmIzM0Oyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX3BjaTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBjaV9zZXRfbWFzdGVyKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdHJldCA9IHBjaV9zYXZlX3N0YXRlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MoenhkaF9kZXYtXHUwMDNlcGRldiwgMCkgXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT0RFVjtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtCQVIgMCBpcyBub3QgYW4gTU1JTyByZXNvdXJjZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdID1cbiYjNDM7XHRcdGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHp4ZGhfZGV2LVx1MDAzZXBkZXYsIDApLFxuJiM0MztcdFx0XHRwY2lfcmVzb3VyY2VfbGVuKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIDApKTtcbiYjNDM7XHRpZiAoIXBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O2RoIHBmIHBjaSBpb3JlbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3BjaV9zYXZlX3N0YXRlOlxuJiM0MztcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xuJiM0MztlcnJfcGNpOlxuJiM0MztcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHp4ZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aW91bm1hcChwZl9kZXYtXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSk7XG4mIzQzO1x0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi1cdTAwM2VwZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7XG4mIzQzO1x0cGNpX2Rpc2FibGVfZGV2aWNlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcbiYjNDM7XHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHBvcztcbiYjNDM7XHR1OCB0eXBlO1xuJiM0MztcdHU4IGJhcjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfVk5EUik7IHBvcyBcdTAwM2UgMDtcbiYjNDM7XHQgICAgIHBvcyA9IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eShwZGV2LCBwb3MsIFBDSV9DQVBfSURfVk5EUikpIHtcbiYjNDM7XHRcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBwb3MgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRjZmdfdHlwZSksIFx1MDAyNnR5cGUpO1xuJiM0MztcdFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHBvcyAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcdTAwMjZiYXIpO1xuJiM0MztcbiYjNDM7XHRcdC8qIGlnbm9yZSBzdHJ1Y3R1cmVzIHdpdGggcmVzZXJ2ZWQgQkFSIHZhbHVlcyAqL1xuJiM0MztcdFx0aWYgKGJhciBcdTAwM2UgWlhESF9QRl9NQVhfQkFSX1ZBTClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHR5cGUgPT0gY2ZnX3R5cGUpIHtcbiYjNDM7XHRcdFx0aWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpIFx1MDAyNiBpb3Jlc291cmNlX3R5cGVzKSB7XG4mIzQzO1x0XHRcdFx0KmJhcnMgfD0gKDEgXHUwMDNjXHUwMDNjIGJhcik7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIHBvcztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgc3RhcnQsIHUzMiBzaXplLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgKmJhcl9vZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0dm9pZCBfX2lvbWVtICpwO1xuJiM0MztcdHUzMiBvZmZzZXQ7XG4mIzQzO1x0dTMyIGxlbmd0aDtcbiYjNDM7XHR1OCBiYXI7XG4mIzQzO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG4mIzQzO1x0XHRcdCAgICAgb2ZmICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFx1MDAyNmJhcik7XG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4mIzQzO1x0XHRcdCAgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxuJiM0MztcdFx0XHRcdFx0XHRvZmZzZXQpLCBcdTAwMjZvZmZzZXQpO1xuJiM0MztcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuJiM0MztcdFx0XHQgICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcbiYjNDM7XHRcdFx0XHRcdFx0bGVuZ3RoKSwgXHUwMDI2bGVuZ3RoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJhcl9vZmYpXG4mIzQzO1x0XHQqYmFyX29mZiA9IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGxlbmd0aCBcdTAwM2M9IHN0YXJ0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7YmFkIGNhcGFiaWxpdHkgbGVuICV1IChcdTAwM2UldSBleHBlY3RlZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGxlbmd0aCwgc3RhcnQpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobGVuZ3RoIC0gc3RhcnQgXHUwMDNjIG1pbmxlbikge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlPSV6dSBleHBlY3RlZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGxlbmd0aCwgbWlubGVuKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGVuZ3RoIC09IHN0YXJ0O1xuJiM0MztcdGlmIChzdGFydCAmIzQzOyBvZmZzZXQgXHUwMDNjIG9mZnNldCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O21hcCB3cmFwLWFyb3VuZCAldSYjNDM7JXVcXG5cJiMzNDssIHN0YXJ0LCBvZmZzZXQpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvZmZzZXQgJiM0Mzs9IHN0YXJ0O1xuJiM0MztcdGlmIChvZmZzZXQgXHUwMDI2IChhbGlnbiAtIDEpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7b2Zmc2V0ICV1IG5vdCBhbGlnbmVkIHRvICV1XFxuXCYjMzQ7LCBvZmZzZXQsIGFsaWduKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxlbmd0aCBcdTAwM2Ugc2l6ZSlcbiYjNDM7XHRcdGxlbmd0aCA9IHNpemU7XG4mIzQzO1xuJiM0MztcdGlmIChsZW4pXG4mIzQzO1x0XHQqbGVuID0gbGVuZ3RoO1xuJiM0MztcbiYjNDM7XHRpZiAobWlubGVuICYjNDM7IG9mZnNldCBcdTAwM2MgbWlubGVuIHx8XG4mIzQzO1x0ICAgIG1pbmxlbiAmIzQzOyBvZmZzZXQgXHUwMDNlIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsXG4mIzQzO1x0XHRcdFwmIzM0O21hcCBjdXN0b20gcXVldWUgJXp1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0bWlubGVuLCBvZmZzZXQsIGJhcixcbiYjNDM7XHRcdFx0KHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cCA9IHBjaV9pb21hcF9yYW5nZShwZGV2LCBiYXIsIG9mZnNldCwgbGVuZ3RoKTtcbiYjNDM7XHRpZiAoIXApIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt1bmFibGUgdG8gbWFwIGN1c3RvbSBxdWV1ZSAldUAldSBvbiBiYXIgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGxlbmd0aCwgb2Zmc2V0LCBiYXIpO1xuJiM0MztcdH0gZWxzZSBpZiAocGEpIHtcbiYjNDM7XHRcdCpwYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBiYXIpICYjNDM7IG9mZnNldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbiYjNDM7XHRpbnQgY29tbW9uO1xuJiM0MztcbiYjNDM7XHQvKiBjaGVjayBmb3IgYSBjb21tb24gY29uZmlnOiBpZiBub3QsIHVzZSBsZWdhY3kgbW9kZSAoYmFyIDApLiAqL1xuJiM0MztcdGNvbW1vbiA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfQ09NTU9OX0NGRyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuJiM0MztcdGlmICghY29tbW9uKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0XCYjMzQ7bWlzc2luZyBjYXBhYmlsaXRpZXMsIGxlYXZpbmcgZm9yIGxlZ2FjeSBkcml2ZXJcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZl9kZXYtXHUwMDNlY29tbW9uID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgY29tbW9uLFxuJiM0MztcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLFxuJiM0MztcdFx0XHRcdFx0XHRaWERIX1BGX0FMSUdONCwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcbiYjNDM7XHRcdFx0XHRcdFx0TlVMTCwgTlVMTCwgTlVMTCk7XG4mIzQzO1x0aWYgKCFwZl9kZXYtXHUwMDNlY29tbW9uKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGZfZGV2LVx1MDAzZWNvbW1vbiBpcyBudWxsXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcdHUzMiBub3RpZnlfbGVuZ3RoO1xuJiM0MztcdHUzMiBub3RpZnlfb2Zmc2V0O1xuJiM0MztcdGludCBub3RpZnk7XG4mIzQzO1xuJiM0MztcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xuJiM0MztcdG5vdGlmeSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfTk9USUZZX0NGRyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuJiM0MztcdGlmICghbm90aWZ5KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7bWlzc2luZyBub3RpZnkgY2ZnIGNhcGFiaWxpdHlcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuJiM0MztcdFx0XHRcdG5vdGlmeV9vZmZfbXVsdGlwbGllciksXG4mIzQzO1x0XHRcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyKTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuJiM0MztcdFx0XHRcdGNhcC5sZW5ndGgpLCBcdTAwMjZub3RpZnlfbGVuZ3RoKTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuJiM0MztcdFx0XHRcdGNhcC5vZmZzZXQpLCBcdTAwMjZub3RpZnlfb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0LyogV2UgZG9uJiMzOTt0IGtub3cgaG93IG1hbnkgVlFzIHdlJiMzOTtsbCBtYXAsIGFoZWFkIG9mIHRoZSB0aW1lLlxuJiM0MztcdCAqIElmIG5vdGlmeSBsZW5ndGggaXMgc21hbGwsIG1hcCBpdCBhbGwgbm93LiBPdGhlcndpc2UsXG4mIzQzO1x0ICogbWFwIGVhY2ggVlEgaW5kaXZpZHVhbGx5IGxhdGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChub3RpZnlfbGVuZ3RoICYjNDM7IChub3RpZnlfb2Zmc2V0ICUgUEFHRV9TSVpFKSBcdTAwM2M9IFBBR0VfU0laRSkge1xuJiM0MztcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2Rldiwgbm90aWZ5LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgWlhESF9QRl9NQVBfTUlOTEVOMixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgWlhESF9QRl9BTElHTjIsIDAsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIG5vdGlmeV9sZW5ndGgsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vub3RpZnlfbGVuLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X3BhLCBOVUxMKTtcbiYjNDM7XHRcdGlmICghcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UgaXMgbnVsbFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwZl9kZXYtXHUwMDNlbm90aWZ5X21hcF9jYXAgPSBub3RpZnk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0aW50IGRldmljZTtcbiYjNDM7XG4mIzQzO1x0LyogRGV2aWNlIGNhcGFiaWxpdHkgaXMgb25seSBtYW5kYXRvcnkgZm9yXG4mIzQzO1x0ICogZGV2aWNlcyB0aGF0IGhhdmUgZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGV2aWNlID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHLFxuJiM0MztcdFx0XHRcdFx0ICAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sXG4mIzQzO1x0XHRcdFx0XHQgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vtb2Rlcm5fYmFycyk7XG4mIzQzO1xuJiM0MztcdC8qIHdlIGRvbiYjMzk7dCBrbm93IGhvdyBtdWNoIHdlIHNob3VsZCBtYXAsXG4mIzQzO1x0ICogYnV0IFBBR0VfU0laRSBpcyBtb3JlIHRoYW4gZW5vdWdoIGZvciBhbGwgZXhpc3RpbmcgZGV2aWNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZGV2aWNlKSB7XG4mIzQzO1x0XHRwZl9kZXYtXHUwMDNlZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgZGV2aWNlLCAwLFxuJiM0MztcdFx0XHRcdFx0XHRcdFpYREhfUEZfQUxJR040LCAwLCBQQUdFX1NJWkUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlZGV2aWNlX2xlbiwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2VkZXZfY2ZnX2Jhcl9vZmYpO1xuJiM0MztcdFx0aWYgKCFwZl9kZXYtXHUwMDNlZGV2aWNlKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwZl9kZXYtXHUwMDNlZGV2aWNlIGlzIG51bGxcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuJiM0MztcbiYjNDM7XHRpZiAocGZfZGV2LVx1MDAzZWRldmljZSlcbiYjNDM7XHRcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2VkZXZpY2UpO1xuJiM0MztcdGlmIChwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpXG4mIzQzO1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpO1xuJiM0MztcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vjb21tb24pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCh6eGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3p4ZGhfcGZfY29tbW9uX2NmZ19pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0genhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoenhkaF9kZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfbWFwX25vdGlmeTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7enhkaF9wZl9kZXZpY2VfY2ZnX2luaXQgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGdvdG8gZXJyX21hcF9kZXZpY2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9tYXBfZGV2aWNlOlxuJiM0MztcdGlmIChwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpXG4mIzQzO1x0XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpO1xuJiM0MztlcnJfbWFwX25vdGlmeTpcbiYjNDM7XHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlY29tbW9uKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2O1xuJiM0MztcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZXZsaW5rID0gZGV2bGlua19hbGxvYyhcdTAwMjZ6eGRoX3BmX2Rldmxpbmtfb3BzLCBzaXplb2Yoc3RydWN0IHp4ZGhfY29yZV9kZXYpLFxuJiM0MztcdFx0XHRcdFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIWRldmxpbmspIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3p4ZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR6eGRoX2RldiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTtcbiYjNDM7XHR6eGRoX2Rldi1cdTAwM2VkZXZpY2UgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiYjNDM7XHR6eGRoX2Rldi1cdTAwM2VwZGV2ID0gcGRldjtcbiYjNDM7XHR6eGRoX2Rldi1cdTAwM2VkZXZsaW5rID0gZGV2bGluaztcbiYjNDM7XG4mIzQzO1x0cGZfZGV2ID0genhkaF9jb3JlX2FsbG9jX3ByaXYoenhkaF9kZXYsIHNpemVvZigqcGZfZGV2KSk7XG4mIzQzO1x0aWYgKCFwZl9kZXYpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3p4ZGhfcGZfZGV2IGFsbG9jIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfcGZfZGV2O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGZfZGV2LVx1MDAzZWJhcl9jaGFuX3ZhbGlkID0gZmFsc2U7XG4mIzQzO1x0cGZfZGV2LVx1MDAzZXZlcGEgPSBmYWxzZTtcbiYjNDM7XHRtdXRleF9pbml0KFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0enhkaF9kZXYtXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0genhkaF9wZl9wY2lfaW5pdCh6eGRoX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7enhkaF9wZl9wY2lfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfcGZfaW5pdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHp4ZGhfZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDt6eGRoX3BmX21vZGVybl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9jZmdfaW5pdDpcbiYjNDM7XHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG4mIzQzO2Vycl9wZl9pbml0OlxuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xuJiM0MztlcnJfcGZfZGV2OlxuJiM0MztcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayh6eGRoX2Rldik7XG4mIzQzO1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG4mIzQzO1x0enhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdCh6eGRoX2Rldik7XG4mIzQzO1x0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbiYjNDM7XHRtdXRleF9kZXN0cm95KFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xuJiM0MztcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbiYjNDM7XHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXG4mIzQzO1x0XHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XG4mIzQzO1x0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgenhkaF9wZl9kcml2ZXIgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtkaW5naGFpMTBlXCYjMzQ7LFxuJiM0MztcdC5pZF90YWJsZSA9IHp4ZGhfcGZfcGNpX3RhYmxlLFxuJiM0MztcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXG4mIzQzO1x0LnJlbW92ZSA9IHp4ZGhfcGZfcmVtb3ZlLFxuJiM0MztcdC5zaHV0ZG93biA9IHp4ZGhfcGZfc2h1dGRvd24sXG4mIzQzO307XG4mIzQzO1xuJiM0Mzttb2R1bGVfcGNpX2RyaXZlcih6eGRoX3BmX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNThjNWRhOWEwOWZmY2Ncbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbkBAIC0wLDAgJiM0MzsxLDEwMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qXG4mIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBGIGhlYWRlclxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19aWERIX0VOX1BGX0hfX1xuJiM0MzsjZGVmaW5lIF9fWlhESF9FTl9QRl9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSURcdDB4MWNmMlxuJiM0MzsjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXHQweDgwNDBcbiYjNDM7I2RlZmluZSBaWERIX1ZGX0RFVklDRV9JRFx0MHg4MDQxXG4mIzQzO1xuJiM0MzsvKiBDb21tb24gY29uZmlndXJhdGlvbiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHXHQxXG4mIzQzOy8qIE5vdGlmaWNhdGlvbnMgKi9cbiYjNDM7I2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1x0MlxuJiM0MzsvKiBJU1IgYWNjZXNzICovXG4mIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0lTUl9DRkdcdFx0M1xuJiM0MzsvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHXHQ0XG4mIzQzOy8qIFBDSSBjb25maWd1cmF0aW9uIGFjY2VzcyAqL1xuJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHXHRcdDVcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9QRl9NQVhfQkFSX1ZBTFx0XHQweDVcbiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdONFx0XHRcdDRcbiYjNDM7I2RlZmluZSBaWERIX1BGX0FMSUdOMlx0XHRcdDJcbiYjNDM7I2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yXHRcdDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlhESF9ERVZfTUFDX0hJR0hfT0ZGU0VUXHQ0XG4mIzQzO1xuJiM0MztlbnVtIHp4ZGhfY29yZWRldl90eXBlIHtcbiYjNDM7XHRESF9DT1JFREVWX1BGLFxuJiM0MztcdERIX0NPUkVERVZfVkYsXG4mIzQzO1x0REhfQ09SRURFVl9TRixcbiYjNDM7XHRESF9DT1JFREVWX01QRlxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGRldmxpbms7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2aWNlO1xuJiM0MztcdGVudW0genhkaF9jb3JlZGV2X3R5cGUgY29yZWRldl90eXBlO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xuJiM0MztcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBQcm90ZWN0cyBkZXZpY2UgY29uZmlndXJhdGlvbiAqL1xuJiM0MztcdHZvaWQgKnByaXY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgenhkaF9wZl9kZXYge1xuJiM0MztcdHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNvbW1vbjtcbiYjNDM7XHQvKiBEZXZpY2Utc3BlY2lmaWMgZGF0YSAobm9uLWxlZ2FjeSBtb2RlKSAgKi9cbiYjNDM7XHQvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovXG4mIzQzO1x0dm9pZCBfX2lvbWVtICpkZXZpY2U7XG4mIzQzO1x0dm9pZCBfX2lvbWVtICpub3RpZnlfYmFzZTtcbiYjNDM7XHR2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlO1xuJiM0MztcdC8qIFBoeXNpY2FsIGJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAqL1xuJiM0MztcdHJlc291cmNlX3NpemVfdCBub3RpZnlfcGE7XG4mIzQzO1x0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cbiYjNDM7XHRzaXplX3Qgbm90aWZ5X2xlbjtcbiYjNDM7XHRzaXplX3QgZGV2aWNlX2xlbjtcbiYjNDM7XHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xuJiM0MztcdHMzMiBub3RpZnlfbWFwX2NhcDtcbiYjNDM7XHR1MzIgbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyO1xuJiM0MztcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXG4mIzQzO1x0czMyIG1vZGVybl9iYXJzO1xuJiM0MztcdHZvaWQgX19pb21lbSAqcGNpX2lvcmVtYXBfYWRkcls2XTtcbiYjNDM7XHR1NjQgc3Jpb3ZfYmFyX3NpemU7XG4mIzQzO1x0dTMyIGRldl9jZmdfYmFyX29mZjtcbiYjNDM7XHRib29sIHBhY2tlZF9zdGF0dXM7XG4mIzQzO1x0Ym9vbCBiYXJfY2hhbl92YWxpZDtcbiYjNDM7XHRib29sIHZlcGE7XG4mIzQzO1x0c3RydWN0IG11dGV4IGlycV9sb2NrOyAvKiBQcm90ZWN0cyBJUlEgb3BlcmF0aW9ucyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBHRVRfQ09SRURFVl9UWVBFKHBkZXYpIFxcXG4mIzQzO1x0KChwZGV2KS1cdTAwM2VkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRilcbiYjNDM7XG4mIzQzO3ZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpO1xuJiM0Mzt2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7dm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcbiYjNDM7XHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKTtcbiYjNDM7dm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiwgaW50IG9mZixcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbixcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgICBzaXplX3QgKmxlbiwgcmVzb3VyY2Vfc2l6ZV90ICpwYSxcbiYjNDM7XHRcdFx0XHQgICAgIHUzMiAqYmFyX29mZik7XG4mIzQzO2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztpbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4mIzQzO3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuJiM0MztpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX1pYREhfRU5fUEZfSF9fICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQQ0kgZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIGRldmljZSAoWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlcikuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwuIFRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gcmVsaWVzIG9uIGZpbmRpbmcgc3BlY2lmaWMgdmVuZG9yLXNwZWNpZmljIFBDSSBjYXBhYmlsaXRpZXMsIG1lYW5pbmcgaXQgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBmb3JjZS1ib3VuZCB0byBvdGhlciB2aXJ0dWFsIFBDSSBkZXZpY2VzLiBUaGVyZWZvcmUsIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmFiZDAzOTIyZGJmZThiMGNiMDQ3MTY5ZTZmOTMyZmNlZjRjNzkxMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDE0OjMyOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAyZmIxYzc1YWZkMTYzOC4uNzM2OTJiMDliZjdiYWIgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0yOTQ0MCw2ICYjNDM7Mjk0NDAsMTIgQEAgUzoJTWFpbnRhaW5lZAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXdhaS9zb3VuZC5naXQKIEY6CXNvdW5kL2hkYS9jb2RlY3Mvc2VuYXJ5dGVjaC5jCiAKJiM0MztaVEUgRElOR0hBSSBFVEhFUk5FVCBEUklWRVIKJiM0MztNOglKdW55YW5nIEhhbiAmbHQ7aGFuLmp1bnlhbmdAenRlLmNvbS5jbiZndDsKJiM0MztMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJTWFpbnRhaW5lZAomIzQzO0Y6CWRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS8KJiM0MzsKIFRIRSBSRVNUCiBNOglMaW51cyBUb3J2YWxkcyAmbHQ7dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmcmZ3Q7CiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZwppbmRleCBiOGY3MGUyYTE3NjNhZC4uYzJiNjk5NmIwY2ZlMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZwpAQCAtMTg4LDUgJiM0MzsxODgsNiBAQCBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWcmIzM0Owogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L0tjb25maWcmIzM0Owogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWcmIzM0Owogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlyY29tL0tjb25maWcmIzM0OwomIzQzO3NvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnJiMzNDsKIAogZW5kaWYgIyBFVEhFUk5FVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQppbmRleCA1NzM0NGZlYzZjZTA0Ny4uYTM0YmNiZDRkZjRlOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlCkBAIC0xMDQsMyAmIzQzOzEwNCw0IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgJiM0Mzs9IHhpcmNvbS8KIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1NZTk9QU1lTKSAmIzQzOz0gc3lub3BzeXMvCiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9QRU5TQU5ETykgJiM0Mzs9IHBlbnNhbmRvLwogb2JqLSQoQ09ORklHX09BX1RDNikgJiM0Mzs9IG9hX3RjNi5vCiYjNDM7b2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWlRFKSAmIzQzOz0genRlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYjk1YzJmYzdkYjc3YTIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZwpAQCAtMCwwICYjNDM7MSwyMCBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIFpURSBkcml2ZXIgY29uZmlndXJhdGlvbgomIzQzOyMKJiM0MzsKJiM0Mztjb25maWcgTkVUX1ZFTkRPUl9aVEUKJiM0MzsgICAgYm9vbCAmIzM0O1pURSBkZXZpY2VzJiMzNDsKJiM0MzsgICAgZGVmYXVsdCB5CiYjNDM7ICAgIGhlbHAKJiM0MzsgICAgICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS4KJiM0MzsgICAgICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGUKJiM0MzsgICAgICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsCiYjNDM7ICAgICAgdGhlIHF1ZXN0aW9ucyBhYm91dCBadGUgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQKJiM0MzsgICAgICBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLgomIzQzOwomIzQzO2lmIE5FVF9WRU5ET1JfWlRFCiYjNDM7CiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZyYjMzQ7CiYjNDM7CiYjNDM7ZW5kaWYgIyBORVRfVkVORE9SX1pURQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jZDk5MjliNjE1NTljNgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw2IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7IwomIzQzOyMgTWFrZWZpbGUgZm9yIHRoZSBaVEUgZGV2aWNlIGRyaXZlcnMKJiM0MzsjCiYjNDM7CiYjNDM7b2JqLSQoQ09ORklHX0RJTkdIQUkpICYjNDM7PSBkaW5naGFpLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjEyMWJlM2JmNzcwN2ZkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZwpAQCAtMCwwICYjNDM7MSwzNCBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uCiYjNDM7IwomIzQzOwomIzQzO2NvbmZpZyBESU5HSEFJCiYjNDM7ICAgIGJvb2wgJiMzNDtaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXImIzM0OwomIzQzOyAgICBkZXBlbmRzIG9uIFBDSQomIzQzOyAgICBzZWxlY3QgTkVUX0RFVkxJTksKJiM0MzsgICAgaGVscAomIzQzOyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuCiYjNDM7CiYjNDM7ICAgICAgRGluZ0hhaSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgRXRoZXJuZXQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzCiYjNDM7ICAgICAgbXVsdGlwbGUgZmVhdHVyZXMgaW5jbHVkaW5nIGhhcmR3YXJlIG9mZmxvYWRpbmcsIFNSLUlPViwgYW5kCiYjNDM7ICAgICAgYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLgomIzQzOwomIzQzOyAgICAgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgY2FuIHNlbGVjdCBzcGVjaWZpYyBkcml2ZXIgdmFyaWFudHMgYmVsb3cuCiYjNDM7CiYjNDM7ICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KJiM0MzsKJiM0MztpZiBESU5HSEFJCiYjNDM7CiYjNDM7Y29uZmlnIERJTkdIQUlfUEYKJiM0MzsgICAgdHJpc3RhdGUgJiMzNDtaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlciYjMzQ7CiYjNDM7ICAgIGhlbHAKJiM0MzsgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBQQ0kgRXhwcmVzcyBFdGhlcm5ldAomIzQzOyAgICAgIGFkYXB0ZXJzIChQRikuCiYjNDM7CiYjNDM7ICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQomIzQzOyAgICAgIHdpbGwgYmUgbmFtZWQgZGluZ2hhaTEwZS4KJiM0MzsKJiM0MzsgICAgICBJZiB1bnN1cmUsIHNheSBOLgomIzQzOwomIzQzO2VuZGlmICMgRElOR0hBSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMTBkZjRlYjc5ZTgwZTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw5IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7IwomIzQzOyMgTWFrZWZpbGUgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlcgomIzQzOyMKJiM0MzsKJiM0MztjY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpCiYjNDM7CiYjNDM7b2JqLSQoQ09ORklHX0RJTkdIQUlfUEYpICYjNDM7PSBkaW5naGFpMTBlLm8KJiM0MztkaW5naGFpMTBlLXkgOj0gZW5fcGYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFmYWM2N2Y3MTQ3Y2I5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaApAQCAtMCwwICYjNDM7MSw1NCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKgomIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBDSSBjYXBhYmlsaXR5IGRlZmluaXRpb25zCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fREhfUVVFVUVfSF9fCiYjNDM7I2RlZmluZSBfX0RIX1FVRVVFX0hfXwomIzQzOwomIzQzOy8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi8KJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwIHsKJiM0MzsJX191OCBjYXBfdm5kcjsJCS8qIEdlbmVyaWMgUENJIGZpZWxkOiBQQ0lfQ0FQX0lEX1ZORFIgKi8KJiM0MzsJX191OCBjYXBfbmV4dDsJCS8qIEdlbmVyaWMgUENJIGZpZWxkOiBuZXh0IHB0ci4gKi8KJiM0MzsJX191OCBjYXBfbGVuOwkJLyogR2VuZXJpYyBQQ0kgZmllbGQ6IGNhcGFiaWxpdHkgbGVuZ3RoICovCiYjNDM7CV9fdTggY2ZnX3R5cGU7CQkvKiBJZGVudGlmaWVzIHRoZSBzdHJ1Y3R1cmUuICovCiYjNDM7CV9fdTggYmFyOwkJLyogV2hlcmUgdG8gZmluZCBpdC4gKi8KJiM0MzsJX191OCBpZDsJCS8qIE11bHRpcGxlIGNhcGFiaWxpdGllcyBvZiB0aGUgc2FtZSB0eXBlICovCiYjNDM7CV9fdTggcGFkZGluZ1syXTsJCS8qIFBhZCB0byBmdWxsIGR3b3JkLiAqLwomIzQzOwlfX2xlMzIgb2Zmc2V0OwkJLyogT2Zmc2V0IHdpdGhpbiBiYXIuICovCiYjNDM7CV9fbGUzMiBsZW5ndGg7CQkvKiBMZW5ndGggb2YgdGhlIHN0cnVjdHVyZSwgaW4gYnl0ZXMuICovCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBGaWVsZHMgaW4gWlhESF9QRl9QQ0lfQ0FQX0NPTU1PTl9DRkc6ICovCiYjNDM7c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgewomIzQzOwkvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqLwomIzQzOwlfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fbGUzMiBkZXZpY2VfZmVhdHVyZTsJLyogcmVhZC1vbmx5ICovCiYjNDM7CV9fbGUzMiBndWVzdF9mZWF0dXJlX3NlbGVjdDsgLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMzIgZ3Vlc3RfZmVhdHVyZTsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IG1zaXhfY29uZmlnOwkJLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMTYgbnVtX3F1ZXVlczsJCS8qIHJlYWQtb25seSAqLwomIzQzOwlfX3U4IGRldmljZV9zdGF0dXM7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fdTggY29uZmlnX2dlbmVyYXRpb247CS8qIHJlYWQtb25seSAqLwomIzQzOwomIzQzOwkvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi8KJiM0MzsJX19sZTE2IHF1ZXVlX3NlbGVjdDsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX3NpemU7CQkvKiByZWFkLXdyaXRlLCBwb3dlciBvZiAyLiAqLwomIzQzOwlfX2xlMTYgcXVldWVfbXNpeF92ZWN0b3I7CS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX2VuYWJsZTsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTE2IHF1ZXVlX25vdGlmeV9vZmY7CS8qIHJlYWQtb25seSAqLwomIzQzOwlfX2xlMzIgcXVldWVfZGVzY19sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX2Rlc2NfaGk7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7CV9fbGUzMiBxdWV1ZV9hdmFpbF9sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX2F2YWlsX2hpOwkJLyogcmVhZC13cml0ZSAqLwomIzQzOwlfX2xlMzIgcXVldWVfdXNlZF9sbzsJCS8qIHJlYWQtd3JpdGUgKi8KJiM0MzsJX19sZTMyIHF1ZXVlX3VzZWRfaGk7CQkvKiByZWFkLXdyaXRlICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCB7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwOwomIzQzOwlfX2xlMzIgbm90aWZ5X29mZl9tdWx0aXBsaWVyOyAvKiBNdWx0aXBsaWVyIGZvciBxdWV1ZV9ub3RpZnlfb2ZmLiAqLwomIzQzO307CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fREhfUVVFVUVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYWU1YTc3ZGRhY2E1NjkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jCkBAIC0wLDAgJiM0MzsxLDQ2NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlcgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2RldmxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcHBpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VuX3BmLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZGhfcXVldWUuaCYjMzQ7CiYjNDM7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0p1bnlhbmcgSGFuICZsdDtoYW4uanVueWFuZ0B6dGUuY29tLmNuJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgenhkaF9wZl9kZXZsaW5rX29wcyA9IHt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6eGRoX3BmX3BjaV90YWJsZVtdID0gewomIzQzOwl7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfUEZfREVWSUNFX0lEKSB9LAomIzQzOwl7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfVkZfREVWSUNFX0lEKSB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzOwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7CiYjNDM7CiYjNDM7dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXZvaWQgKnByaXYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwomIzQzOwomIzQzOwlpZiAocHJpdikKJiM0MzsJCXp4ZGhfZGV2LSZndDtwcml2ID0gcHJpdjsKJiM0MzsJcmV0dXJuIHByaXY7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgenhkaF9jb3JlX2ZyZWVfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlrZnJlZSh6eGRoX2Rldi0mZ3Q7cHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgenhkaF9wZl9wY2lfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwY2lfc2V0X2RydmRhdGEoenhkaF9kZXYtJmd0O3BkZXYsIHp4ZGhfZGV2KTsKJiM0MzsKJiM0MzsJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoenhkaF9kZXYtJmd0O3BkZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7cGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtJmd0O2RldmljZSwgRE1BX0JJVF9NQVNLKDY0KSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtJmd0O2RldmljZSwgRE1BX0JJVF9NQVNLKDMyKSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O2RtYV9zZXRfbWFza19hbmRfY29oZXJlbnQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQkJZ290byBlcnJfcGNpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtJmd0O3BkZXYsCiYjNDM7CQkJCQkgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtJmd0O3BkZXYsIElPUkVTT1VSQ0VfTUVNKSwKJiM0MzsJCQkJCSAgICYjMzQ7ZGgtcGYmIzM0Oyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfcGNpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjaV9zZXRfbWFzdGVyKHp4ZGhfZGV2LSZndDtwZGV2KTsKJiM0MzsJcmV0ID0gcGNpX3NhdmVfc3RhdGUoenhkaF9kZXYtJmd0O3BkZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7cGNpX3NhdmVfc3RhdGUgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MoenhkaF9kZXYtJmd0O3BkZXYsIDApICZhbXA7IElPUkVTT1VSQ0VfTUVNKSkgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtCQVIgMCBpcyBub3QgYW4gTU1JTyByZXNvdXJjZVxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfcGNpX3NhdmVfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGZfZGV2LSZndDtwY2lfaW9yZW1hcF9hZGRyWzBdID0KJiM0MzsJCWlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHp4ZGhfZGV2LSZndDtwZGV2LCAwKSwKJiM0MzsJCQlwY2lfcmVzb3VyY2VfbGVuKHp4ZGhfZGV2LSZndDtwZGV2LCAwKSk7CiYjNDM7CWlmICghcGZfZGV2LSZndDtwY2lfaW9yZW1hcF9hZGRyWzBdKSB7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O2RoIHBmIHBjaSBpb3JlbWFwIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfcGNpX3NhdmVfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3BjaV9zYXZlX3N0YXRlOgomIzQzOwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LSZndDtwZGV2LAomIzQzOwkJCQkgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi0mZ3Q7cGRldiwgSU9SRVNPVVJDRV9NRU0pKTsKJiM0MztlcnJfcGNpOgomIzQzOwlwY2lfZGlzYWJsZV9kZXZpY2UoenhkaF9kZXYtJmd0O3BkZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlvdW5tYXAocGZfZGV2LSZndDtwY2lfaW9yZW1hcF9hZGRyWzBdKTsKJiM0MzsJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi0mZ3Q7cGRldiwKJiM0MzsJCQkJICAgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtJmd0O3BkZXYsIElPUkVTT1VSQ0VfTUVNKSk7CiYjNDM7CXBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi0mZ3Q7cGRldik7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLAomIzQzOwkJCQl1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKQomIzQzO3sKJiM0MzsJaW50IHBvczsKJiM0MzsJdTggdHlwZTsKJiM0MzsJdTggYmFyOwomIzQzOwomIzQzOwlmb3IgKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9WTkRSKTsgcG9zICZndDsgMDsKJiM0MzsJICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkocGRldiwgcG9zLCBQQ0lfQ0FQX0lEX1ZORFIpKSB7CiYjNDM7CQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LAomIzQzOwkJCQkgICAgIHBvcyAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLAomIzQzOwkJCQkJCQljZmdfdHlwZSksICZhbXA7dHlwZSk7CiYjNDM7CQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LAomIzQzOwkJCQkgICAgIHBvcyAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCAmYW1wO2Jhcik7CiYjNDM7CiYjNDM7CQkvKiBpZ25vcmUgc3RydWN0dXJlcyB3aXRoIHJlc2VydmVkIEJBUiB2YWx1ZXMgKi8KJiM0MzsJCWlmIChiYXIgJmd0OyBaWERIX1BGX01BWF9CQVJfVkFMKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKHR5cGUgPT0gY2ZnX3R5cGUpIHsKJiM0MzsJCQlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcikgJmFtcDsgaW9yZXNvdXJjZV90eXBlcykgewomIzQzOwkJCQkqYmFycyB8PSAoMSAmbHQ7Jmx0OyBiYXIpOwomIzQzOwkJCQlyZXR1cm4gcG9zOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiwgaW50IG9mZiwKJiM0MzsJCQkJICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sCiYjNDM7CQkJCSAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSwKJiM0MzsJCQkJICAgICBzaXplX3QgKmxlbiwgcmVzb3VyY2Vfc2l6ZV90ICpwYSwKJiM0MzsJCQkJICAgICB1MzIgKmJhcl9vZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LSZndDtwZGV2OwomIzQzOwl2b2lkIF9faW9tZW0gKnA7CiYjNDM7CXUzMiBvZmZzZXQ7CiYjNDM7CXUzMiBsZW5ndGg7CiYjNDM7CXU4IGJhcjsKJiM0MzsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwKJiM0MzsJCQkgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCAmYW1wO2Jhcik7CiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAomIzQzOwkJCSAgICAgIG9mZiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLAomIzQzOwkJCQkJCW9mZnNldCksICZhbXA7b2Zmc2V0KTsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCiYjNDM7CQkJICAgICAgb2ZmICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsCiYjNDM7CQkJCQkJbGVuZ3RoKSwgJmFtcDtsZW5ndGgpOwomIzQzOwomIzQzOwlpZiAoYmFyX29mZikKJiM0MzsJCSpiYXJfb2ZmID0gb2Zmc2V0OwomIzQzOwomIzQzOwlpZiAobGVuZ3RoICZsdDs9IHN0YXJ0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7YmFkIGNhcGFiaWxpdHkgbGVuICV1ICgmZ3Q7JXUgZXhwZWN0ZWQpXG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIHN0YXJ0KTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChsZW5ndGggLSBzdGFydCAmbHQ7IG1pbmxlbikgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoJmd0Oz0lenUgZXhwZWN0ZWQpXG4mIzM0OywKJiM0MzsJCQlsZW5ndGgsIG1pbmxlbik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW5ndGggLT0gc3RhcnQ7CiYjNDM7CWlmIChzdGFydCAmIzQzOyBvZmZzZXQgJmx0OyBvZmZzZXQpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDttYXAgd3JhcC1hcm91bmQgJXUmIzQzOyV1XG4mIzM0Oywgc3RhcnQsIG9mZnNldCk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlvZmZzZXQgJiM0Mzs9IHN0YXJ0OwomIzQzOwlpZiAob2Zmc2V0ICZhbXA7IChhbGlnbiAtIDEpKSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7b2Zmc2V0ICV1IG5vdCBhbGlnbmVkIHRvICV1XG4mIzM0Oywgb2Zmc2V0LCBhbGlnbik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGVuZ3RoICZndDsgc2l6ZSkKJiM0MzsJCWxlbmd0aCA9IHNpemU7CiYjNDM7CiYjNDM7CWlmIChsZW4pCiYjNDM7CQkqbGVuID0gbGVuZ3RoOwomIzQzOwomIzQzOwlpZiAobWlubGVuICYjNDM7IG9mZnNldCAmbHQ7IG1pbmxlbiB8fAomIzQzOwkgICAgbWlubGVuICYjNDM7IG9mZnNldCAmZ3Q7IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLAomIzQzOwkJCSYjMzQ7bWFwIGN1c3RvbSBxdWV1ZSAlenVAJXUgb3V0IG9mIHJhbmdlIG9uIGJhciAldSBsZW5ndGggJWx1XG4mIzM0OywKJiM0MzsJCQltaW5sZW4sIG9mZnNldCwgYmFyLAomIzQzOwkJCSh1bnNpZ25lZCBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlwID0gcGNpX2lvbWFwX3JhbmdlKHBkZXYsIGJhciwgb2Zmc2V0LCBsZW5ndGgpOwomIzQzOwlpZiAoIXApIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDt1bmFibGUgdG8gbWFwIGN1c3RvbSBxdWV1ZSAldUAldSBvbiBiYXIgJXVcbiYjMzQ7LAomIzQzOwkJCWxlbmd0aCwgb2Zmc2V0LCBiYXIpOwomIzQzOwl9IGVsc2UgaWYgKHBhKSB7CiYjNDM7CQkqcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSAmIzQzOyBvZmZzZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LSZndDtwZGV2OwomIzQzOwlpbnQgY29tbW9uOwomIzQzOwomIzQzOwkvKiBjaGVjayBmb3IgYSBjb21tb24gY29uZmlnOiBpZiBub3QsIHVzZSBsZWdhY3kgbW9kZSAoYmFyIDApLiAqLwomIzQzOwljb21tb24gPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkcsCiYjNDM7CQkJCQkgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSwKJiM0MzsJCQkJCSAgICAgJmFtcDtwZl9kZXYtJmd0O21vZGVybl9iYXJzKTsKJiM0MzsJaWYgKCFjb21tb24pIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwKJiM0MzsJCQkmIzM0O21pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlwZl9kZXYtJmd0O2NvbW1vbiA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIGNvbW1vbiwKJiM0MzsJCQkJCQlzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLAomIzQzOwkJCQkJCVpYREhfUEZfQUxJR040LCAwLAomIzQzOwkJCQkJCXNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksCiYjNDM7CQkJCQkJTlVMTCwgTlVMTCwgTlVMTCk7CiYjNDM7CWlmICghcGZfZGV2LSZndDtjb21tb24pIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDtwZl9kZXYtJmd0O2NvbW1vbiBpcyBudWxsXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CXUzMiBub3RpZnlfbGVuZ3RoOwomIzQzOwl1MzIgbm90aWZ5X29mZnNldDsKJiM0MzsJaW50IG5vdGlmeTsKJiM0MzsKJiM0MzsJLyogSWYgY29tbW9uIGlzIHRoZXJlLCB0aGVzZSBzaG91bGQgYmUgdG9vLi4uICovCiYjNDM7CW5vdGlmeSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfTk9USUZZX0NGRywKJiM0MzsJCQkJCSAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLAomIzQzOwkJCQkJICAgICAmYW1wO3BmX2Rldi0mZ3Q7bW9kZXJuX2JhcnMpOwomIzQzOwlpZiAoIW5vdGlmeSkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O21pc3Npbmcgbm90aWZ5IGNmZyBjYXBhYmlsaXR5XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwKJiM0MzsJCQkgICAgICBub3RpZnkgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsCiYjNDM7CQkJCW5vdGlmeV9vZmZfbXVsdGlwbGllciksCiYjNDM7CQkmYW1wO3BmX2Rldi0mZ3Q7bm90aWZ5X29mZnNldF9tdWx0aXBsaWVyKTsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCiYjNDM7CQkJICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLAomIzQzOwkJCQljYXAubGVuZ3RoKSwgJmFtcDtub3RpZnlfbGVuZ3RoKTsKJiM0MzsJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCiYjNDM7CQkJICAgICAgbm90aWZ5ICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLAomIzQzOwkJCQljYXAub2Zmc2V0KSwgJmFtcDtub3RpZnlfb2Zmc2V0KTsKJiM0MzsKJiM0MzsJLyogV2UgZG9uJiMzOTt0IGtub3cgaG93IG1hbnkgVlFzIHdlJiMzOTtsbCBtYXAsIGFoZWFkIG9mIHRoZSB0aW1lLgomIzQzOwkgKiBJZiBub3RpZnkgbGVuZ3RoIGlzIHNtYWxsLCBtYXAgaXQgYWxsIG5vdy4gT3RoZXJ3aXNlLAomIzQzOwkgKiBtYXAgZWFjaCBWUSBpbmRpdmlkdWFsbHkgbGF0ZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAobm90aWZ5X2xlbmd0aCAmIzQzOyAobm90aWZ5X29mZnNldCAlIFBBR0VfU0laRSkgJmx0Oz0gUEFHRV9TSVpFKSB7CiYjNDM7CQlwZl9kZXYtJmd0O25vdGlmeV9iYXNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2Rldiwgbm90aWZ5LAomIzQzOwkJCQkJCQkgICAgIFpYREhfUEZfTUFQX01JTkxFTjIsCiYjNDM7CQkJCQkJCSAgICBaWERIX1BGX0FMSUdOMiwgMCwKJiM0MzsJCQkJCQkJICAgIG5vdGlmeV9sZW5ndGgsCiYjNDM7CQkJCQkJCSAgICAmYW1wO3BmX2Rldi0mZ3Q7bm90aWZ5X2xlbiwKJiM0MzsJCQkJCQkJICAgICZhbXA7cGZfZGV2LSZndDtub3RpZnlfcGEsIE5VTEwpOwomIzQzOwkJaWYgKCFwZl9kZXYtJmd0O25vdGlmeV9iYXNlKSB7CiYjNDM7CQkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3BmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UgaXMgbnVsbFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJcGZfZGV2LSZndDtub3RpZnlfbWFwX2NhcCA9IG5vdGlmeTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtJmd0O3BkZXY7CiYjNDM7CWludCBkZXZpY2U7CiYjNDM7CiYjNDM7CS8qIERldmljZSBjYXBhYmlsaXR5IGlzIG9ubHkgbWFuZGF0b3J5IGZvcgomIzQzOwkgKiBkZXZpY2VzIHRoYXQgaGF2ZSBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KJiM0MzsJICovCiYjNDM7CWRldmljZSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfREVWSUNFX0NGRywKJiM0MzsJCQkJCSAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLAomIzQzOwkJCQkJICAgICAmYW1wO3BmX2Rldi0mZ3Q7bW9kZXJuX2JhcnMpOwomIzQzOwomIzQzOwkvKiB3ZSBkb24mIzM5O3Qga25vdyBob3cgbXVjaCB3ZSBzaG91bGQgbWFwLAomIzQzOwkgKiBidXQgUEFHRV9TSVpFIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGFsbCBleGlzdGluZyBkZXZpY2VzLgomIzQzOwkgKi8KJiM0MzsJaWYgKGRldmljZSkgewomIzQzOwkJcGZfZGV2LSZndDtkZXZpY2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBkZXZpY2UsIDAsCiYjNDM7CQkJCQkJCVpYREhfUEZfQUxJR040LCAwLCBQQUdFX1NJWkUsCiYjNDM7CQkJCQkJICAgICAgICZhbXA7cGZfZGV2LSZndDtkZXZpY2VfbGVuLCBOVUxMLAomIzQzOwkJCQkJCSAgICAgICAmYW1wO3BmX2Rldi0mZ3Q7ZGV2X2NmZ19iYXJfb2ZmKTsKJiM0MzsJCWlmICghcGZfZGV2LSZndDtkZXZpY2UpIHsKJiM0MzsJCQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7cGZfZGV2LSZndDtkZXZpY2UgaXMgbnVsbFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi0mZ3Q7cGRldjsKJiM0MzsKJiM0MzsJaWYgKHBmX2Rldi0mZ3Q7ZGV2aWNlKQomIzQzOwkJcGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LSZndDtkZXZpY2UpOwomIzQzOwlpZiAocGZfZGV2LSZndDtub3RpZnlfYmFzZSkKJiM0MzsJCXBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpOwomIzQzOwlwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtJmd0O2NvbW1vbik7CiYjNDM7fQomIzQzOwomIzQzO2ludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LSZndDtwZGV2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCh6eGRoX2Rldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoenhkaF9kZXYtJmd0O2RldmljZSwgJiMzNDt6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0genhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHp4ZGhfZGV2LSZndDtkZXZpY2UsICYjMzQ7enhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9tYXBfbm90aWZ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHp4ZGhfZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2Vycih6eGRoX2Rldi0mZ3Q7ZGV2aWNlLCAmIzM0O3p4ZGhfcGZfZGV2aWNlX2NmZ19pbml0IGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJZ290byBlcnJfbWFwX2RldmljZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfbWFwX2RldmljZToKJiM0MzsJaWYgKHBmX2Rldi0mZ3Q7bm90aWZ5X2Jhc2UpCiYjNDM7CQlwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtJmd0O25vdGlmeV9iYXNlKTsKJiM0MztlcnJfbWFwX25vdGlmeToKJiM0MzsJcGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LSZndDtjb21tb24pOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2OwomIzQzOwlzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXY7CiYjNDM7CXN0cnVjdCBkZXZsaW5rICpkZXZsaW5rOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkZXZsaW5rID0gZGV2bGlua19hbGxvYygmYW1wO3p4ZGhfcGZfZGV2bGlua19vcHMsIHNpemVvZihzdHJ1Y3QgenhkaF9jb3JlX2RldiksCiYjNDM7CQkJCSZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKCFkZXZsaW5rKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXp4ZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspOwomIzQzOwl6eGRoX2Rldi0mZ3Q7ZGV2aWNlID0gJmFtcDtwZGV2LSZndDtkZXY7CiYjNDM7CXp4ZGhfZGV2LSZndDtwZGV2ID0gcGRldjsKJiM0MzsJenhkaF9kZXYtJmd0O2RldmxpbmsgPSBkZXZsaW5rOwomIzQzOwomIzQzOwlwZl9kZXYgPSB6eGRoX2NvcmVfYWxsb2NfcHJpdih6eGRoX2Rldiwgc2l6ZW9mKCpwZl9kZXYpKTsKJiM0MzsJaWYgKCFwZl9kZXYpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7enhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfcGZfZGV2OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmX2Rldi0mZ3Q7YmFyX2NoYW5fdmFsaWQgPSBmYWxzZTsKJiM0MzsJcGZfZGV2LSZndDt2ZXBhID0gZmFsc2U7CiYjNDM7CW11dGV4X2luaXQoJmFtcDt6eGRoX2Rldi0mZ3Q7bG9jayk7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwZl9kZXYtJmd0O2lycV9sb2NrKTsKJiM0MzsKJiM0MzsJenhkaF9kZXYtJmd0O2NvcmVkZXZfdHlwZSA9IEdFVF9DT1JFREVWX1RZUEUocGRldik7CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfcGNpX2luaXQoenhkaF9kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O3p4ZGhfcGZfcGNpX2luaXQgZmFpbGVkOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlnb3RvIGVycl9wZl9pbml0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHp4ZGhfZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDt6eGRoX3BmX21vZGVybl9jZmdfaW5pdCBmYWlsZWQ6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWdvdG8gZXJyX2NmZ19pbml0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldmxpbmtfcmVnaXN0ZXIoZGV2bGluayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9jZmdfaW5pdDoKJiM0MzsJenhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpOwomIzQzO2Vycl9wZl9pbml0OgomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7cGZfZGV2LSZndDtpcnFfbG9jayk7CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDt6eGRoX2Rldi0mZ3Q7bG9jayk7CiYjNDM7CXp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpOwomIzQzO2Vycl9wZl9kZXY6CiYjNDM7CWRldmxpbmtfZnJlZShkZXZsaW5rKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgenhkaF9wZl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CXN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKHp4ZGhfZGV2KTsKJiM0MzsJc3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspOwomIzQzOwl6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTsKJiM0MzsJenhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7cGZfZGV2LSZndDtpcnFfbG9jayk7CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDt6eGRoX2Rldi0mZ3Q7bG9jayk7CiYjNDM7CXp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpOwomIzQzOwlkZXZsaW5rX2ZyZWUoZGV2bGluayk7CiYjNDM7CXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgenhkaF9wZl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1BPV0VSX09GRikKJiM0MzsJCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKJiM0MzsJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgenhkaF9wZl9kcml2ZXIgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtkaW5naGFpMTBlJiMzNDssCiYjNDM7CS5pZF90YWJsZSA9IHp4ZGhfcGZfcGNpX3RhYmxlLAomIzQzOwkucHJvYmUgPSB6eGRoX3BmX3Byb2JlLAomIzQzOwkucmVtb3ZlID0genhkaF9wZl9yZW1vdmUsCiYjNDM7CS5zaHV0ZG93biA9IHp4ZGhfcGZfc2h1dGRvd24sCiYjNDM7fTsKJiM0MzsKJiM0Mzttb2R1bGVfcGNpX2RyaXZlcih6eGRoX3BmX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNThjNWRhOWEwOWZmY2MKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oCkBAIC0wLDAgJiM0MzsxLDEwMSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKgomIzQzOyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBGIGhlYWRlcgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX1pYREhfRU5fUEZfSF9fCiYjNDM7I2RlZmluZSBfX1pYREhfRU5fUEZfSF9fCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgWlhESF9QRl9WRU5ET1JfSUQJMHgxY2YyCiYjNDM7I2RlZmluZSBaWERIX1BGX0RFVklDRV9JRAkweDgwNDAKJiM0MzsjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lECTB4ODA0MQomIzQzOwomIzQzOy8qIENvbW1vbiBjb25maWd1cmF0aW9uICovCiYjNDM7I2RlZmluZSBaWERIX1BDSV9DQVBfQ09NTU9OX0NGRwkxCiYjNDM7LyogTm90aWZpY2F0aW9ucyAqLwomIzQzOyNkZWZpbmUgWlhESF9QQ0lfQ0FQX05PVElGWV9DRkcJMgomIzQzOy8qIElTUiBhY2Nlc3MgKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9JU1JfQ0ZHCQkzCiYjNDM7LyogRGV2aWNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHCTQKJiM0MzsvKiBQQ0kgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi8KJiM0MzsjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHCQk1CiYjNDM7CiYjNDM7I2RlZmluZSBaWERIX1BGX01BWF9CQVJfVkFMCQkweDUKJiM0MzsjZGVmaW5lIFpYREhfUEZfQUxJR040CQkJNAomIzQzOyNkZWZpbmUgWlhESF9QRl9BTElHTjIJCQkyCiYjNDM7I2RlZmluZSBaWERIX1BGX01BUF9NSU5MRU4yCQkyCiYjNDM7CiYjNDM7I2RlZmluZSBaWERIX0RFVl9NQUNfSElHSF9PRkZTRVQJNAomIzQzOwomIzQzO2VudW0genhkaF9jb3JlZGV2X3R5cGUgewomIzQzOwlESF9DT1JFREVWX1BGLAomIzQzOwlESF9DT1JFREVWX1ZGLAomIzQzOwlESF9DT1JFREVWX1NGLAomIzQzOwlESF9DT1JFREVWX01QRgomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGRldmxpbms7CiYjNDM7CiYjNDM7c3RydWN0IHp4ZGhfY29yZV9kZXYgewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CiYjNDM7CWVudW0genhkaF9jb3JlZGV2X3R5cGUgY29yZWRldl90eXBlOwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKJiM0MzsJc3RydWN0IGRldmxpbmsgKmRldmxpbms7CiYjNDM7CXN0cnVjdCBtdXRleCBsb2NrOyAvKiBQcm90ZWN0cyBkZXZpY2UgY29uZmlndXJhdGlvbiAqLwomIzQzOwl2b2lkICpwcml2OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHp4ZGhfcGZfZGV2IHsKJiM0MzsJc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uOwomIzQzOwkvKiBEZXZpY2Utc3BlY2lmaWMgZGF0YSAobm9uLWxlZ2FjeSBtb2RlKSAgKi8KJiM0MzsJLyogQmFzZSBvZiB2cSBub3RpZmljYXRpb25zIChub24tbGVnYWN5IG1vZGUpLiAqLwomIzQzOwl2b2lkIF9faW9tZW0gKmRldmljZTsKJiM0MzsJdm9pZCBfX2lvbWVtICpub3RpZnlfYmFzZTsKJiM0MzsJdm9pZCBfX2lvbWVtICpwZl9zcmlvdl9jYXBfYmFzZTsKJiM0MzsJLyogUGh5c2ljYWwgYmFzZSBvZiB2cSBub3RpZmljYXRpb25zICovCiYjNDM7CXJlc291cmNlX3NpemVfdCBub3RpZnlfcGE7CiYjNDM7CS8qIFNvIHdlIGNhbiBzYW5pdHktY2hlY2sgYWNjZXNzZXMuICovCiYjNDM7CXNpemVfdCBub3RpZnlfbGVuOwomIzQzOwlzaXplX3QgZGV2aWNlX2xlbjsKJiM0MzsJLyogQ2FwYWJpbGl0eSBmb3Igd2hlbiB3ZSBuZWVkIHRvIG1hcCBub3RpZmljYXRpb25zIHBlci12cS4gKi8KJiM0MzsJczMyIG5vdGlmeV9tYXBfY2FwOwomIzQzOwl1MzIgbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyOwomIzQzOwkvKiBNdWx0aXBseSBxdWV1ZV9ub3RpZnlfb2ZmIGJ5IHRoaXMgdmFsdWUuIChub24tbGVnYWN5IG1vZGUpLiAqLwomIzQzOwlzMzIgbW9kZXJuX2JhcnM7CiYjNDM7CXZvaWQgX19pb21lbSAqcGNpX2lvcmVtYXBfYWRkcls2XTsKJiM0MzsJdTY0IHNyaW92X2Jhcl9zaXplOwomIzQzOwl1MzIgZGV2X2NmZ19iYXJfb2ZmOwomIzQzOwlib29sIHBhY2tlZF9zdGF0dXM7CiYjNDM7CWJvb2wgYmFyX2NoYW5fdmFsaWQ7CiYjNDM7CWJvb2wgdmVwYTsKJiM0MzsJc3RydWN0IG11dGV4IGlycV9sb2NrOyAvKiBQcm90ZWN0cyBJUlEgb3BlcmF0aW9ucyAqLwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBHRVRfQ09SRURFVl9UWVBFKHBkZXYpIFwKJiM0MzsJKChwZGV2KS0mZ3Q7ZGV2aWNlID09IFpYREhfVkZfREVWSUNFX0lEID8gREhfQ09SRURFVl9WRiA6IERIX0NPUkVERVZfUEYpCiYjNDM7CiYjNDM7dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSk7CiYjNDM7dm9pZCB6eGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7dm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpOwomIzQzO2ludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLAomIzQzOwkJCQl1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKTsKJiM0Mzt2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLAomIzQzOwkJCQkgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbiwKJiM0MzsJCQkJICAgICB1MzIgc3RhcnQsIHUzMiBzaXplLAomIzQzOwkJCQkgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLAomIzQzOwkJCQkgICAgIHUzMiAqYmFyX29mZik7CiYjNDM7aW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7dm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fWlhESF9FTl9QRl9IX18gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzOTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgUGF0aHM6IFRoZSBaVEUgRGluZ0hhaSBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIG5ldyBFdGhlcm5ldCBkcml2ZXIgZm9yIFpURSBEaW5nSGFpIGRldmljZXMsIHdoaWNoIHNlZW1zIHRvIGJlIGEgUENJIGRyaXZlci4gSXQgaW1wbGVtZW50cyB0aGUgc3RhbmRhcmQgUENJIHByb2JlLCByZW1vdmUsIGFuZCBzaHV0ZG93biBmdW5jdGlvbnMuIEl0JiMzOTtzIHJlZ2lzdGVyZWQgd2l0aCBgcGNpX3JlZ2lzdGVyX2RyaXZlcmAgYW5kIGluY2x1ZGVzIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBhbmQgTWFrZWZpbGUgZW50cmllcywgcGx1cyB0aGUgY29yZSBkcml2ZXIgZmlsZXMuIFRoZSBkcml2ZXIgc3BlY2lmaWNhbGx5IHRhcmdldHMgYSBQQ0kgRXRoZXJuZXQgY29udHJvbGxlciBmcm9tIFpURSAoVmVuZG9yIElEIDB4MWNmMiwgRGV2aWNlIElEIDB4ODA0MCkuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIGZ1enppbmcuIAoKR2l2ZW4gaXQmIzM5O3MgYSBQQ0kgZHJpdmVyLCBpdCBzaG91bGQgYmUgZnV6emFibGUuIFRoZSBxdWVzdGlvbiBpcyBob3cgdG8gZ2V0IHRoZSBgenhkaF9wZl9wcm9iZWAgZnVuY3Rpb24gdG8gcnVuLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHN5emthbGxlci4gRG9lcyBzeXprYWxsZXIgaGF2ZSBnb29kIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcz8gU3l6a2FsbGVyIHN1cHBvcnRzIFBDSSBmdXp6aW5nLCByaWdodD8gU3l6a2FsbGVyIHVzZXMgYHN5el9wY2lgIHBzZXVkby1zeXNjYWxscyBvciBzb21ldGhpbmcgc2ltaWxhciBmb3IgUENJIGZ1enppbmcsIG9yIGRvZXMgaXQgcmVseSBvbiBRRU1VIFBDSSBlbXVsYXRpb24/IExldCYjMzk7cyBiZSBzdXJlLCBgc3l6X3BjaV9kZXZpY2VfYWRkYCBvciBzaW1pbGFyLiBJJiMzOTttIHRyeWluZyB0byByZW1lbWJlciB0aGUgc3BlY2lmaWNzIG9mIHN5emthbGxlciYjMzk7cyBQQ0kgc3VwcG9ydC4gCgpUaGVuIEkgY29tZSBiYWNrIHRvIHRoZSBwcm9tcHQsIHdoaWNoIGhpZ2hsaWdodHMgdGhlIGRpZmZpY3VsdHkgb2YgcmVhY2hpbmcgZHJpdmVycyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIFRoYXQmIzM5O3MgYSBrZXkgcG9pbnQuIFRoaXMgRGluZ0hhaSBkZXZpY2UgKmlzKiBzcGVjaWZpYyBoYXJkd2FyZS4gVGhlcmUmIzM5O3MgcHJvYmFibHkgbm8gUUVNVSBlbXVsYXRpb24gZm9yIHRoaXMgZGV2aWNlLiBObywgbm8gYHN5el9wY2lgLiBUaGUgcHJvbXB0IGlzIHJpZ2h0LiBTbywgY2FuIHdlIGV2ZW4gcHJvYmUgdGhpcyB0aGluZyB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZT8gTm8uCgpUaGUgbmV4dCB0aGluZyB0aGF0IGp1bXBzIHRvIG15IG1pbmQgaXM6IGNhbiB3ZSBleHBsb2l0IHNvbWUga2luZCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgZGV2aWNlPyBJcyB0aGVyZSBhIHZpcnRpby1saWtlIHN0cnVjdHVyZT8gTGV0JiMzOTtzIGNoZWNrLiBZZXMsIHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIFBDSSBjb25maWcgc3BhY2UuIEl0IHNwZWNpZmljYWxseSBsb29rcyBmb3IgdmVuZG9yLXNwZWNpZmljIGNhcGFiaWxpdGllcy4gVGhlIG1vcmUgSSBsb29rLCB0aGUgbW9yZSBpdCByZXNlbWJsZXMgYSB2aXJ0aW8tbmV0IGltcGxlbWVudGF0aW9uIGJ1dCB0aHJvdWdoIHZlbmRvci1zcGVjaWZpYyBQQ0kgY2FwYWJpbGl0aWVzLiBCdXQgdGhlIGRyaXZlciByZXF1aXJlcyBhIHZlcnkgc3BlY2lmaWMgVmVuZG9yIGFuZCBEZXZpY2UgSUQuIFN0YW5kYXJkIHZpcnRpby1uZXQgZGV2aWNlcyAoVmVuZG9yIDB4MWFmNCwgRGV2aWNlIDB4MTAwMC8weDEwNDEpIHdpbGwgbm90IHRyaWdnZXIgdGhpcyBkcml2ZXIuIAoKU28gaXQmIzM5O3MgYSBkZWFkIGVuZCBpZiB3ZSBhcmUgcnVubmluZyBpbiBRRU1VLiBBbmQgc3l6a2FsbGVyIGhhcyBhIHJlYWwgcHJvYmxlbS4gU3l6a2FsbGVyIGNhbm5vdCBjcmVhdGUgdGhlIFBDSSBkZXZpY2UgYnkgaXRzZWxmLiBUaGUgYHp4ZGhfcGZfcHJvYmVgIHdpbGwgbmV2ZXIgYmUgY2FsbGVkIGlmIHRoZSBQQ0kgc3Vic3lzdGVtIGNhbiYjMzk7dCBmaW5kIGEgZGV2aWNlIHdpdGggSUQgMHgxY2YyOjB4ODA0MC4gVGhlcmUgaXMgbm8gc3VjaCBkZXZpY2UgaW4gUUVNVSwgc28gaXQgbG9va3MgaW1wb3NzaWJsZSB0byByZWFjaC4gCgpXYWl0LCBjYW4gd2UgaW5qZWN0IGEgUENJIGRldmljZSB3aXRoIHRoZSBgbmV3X2lkYCBzeXNmcyBhdHRyaWJ1dGU/IE5vcGUsIGl0IGNhbiBvbmx5ICpiaW5kKiB0aGUgZHJpdmVyIHRvICpleGlzdGluZyogZGV2aWNlcy4gSXQgZG9lc24mIzM5O3QgY3JlYXRlIG5ldyBvbmVzLiBXZSBzdGlsbCBuZWVkIHRoZSByaWdodCBraW5kIG9mIFBDSSBkZXZpY2UuIElmIHdlIGJvdW5kIGl0IHRvIGFub3RoZXIgZGV2aWNlLCBpdCB3b3VsZCB0cmlnZ2VyIGB6eGRoX3BmX3Byb2JlYCBidXQgaXQgaXMgdW5saWtlbHkgdG8gbWF0Y2ggdGhlIGV4YWN0IHN0cnVjdHVyZS4KCkkmIzM5O20gc3RhcnRpbmcgdG8gcmVtZW1iZXIgdGhhdCBzeXprYWxsZXIgaGFzIHRvIHJlbHkgb24gUUVNVSYjMzk7cyBQQ0kgZW11bGF0aW9uIG9yIGB2ZmlvYC4gSWYgdGhlIGRldmljZSBpcyBub3QgZW11bGF0ZWQsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLiBUaGlzIGlzIGJhZCBuZXdzLCBpdCBpcyBoYXJkIHRvIGZ1enogd2l0aG91dCBkZXZpY2UgZW11bGF0aW9uLiBJdCB3aWxsIG5vdCB3b3JrLgoKSXMgdGhlcmUgYW55IHdheT8gRG9lcyB0aGUgZHJpdmVyIHJlZ2lzdGVyIGEgYGRldmxpbmtgIGluc3RhbmNlPyBZZXMsIGJ1dCBvbmx5ICppbnNpZGUqIGB6eGRoX3BmX3Byb2JlYC4gU28gaWYgdGhlIHByb2JlIGZ1bmN0aW9uIGlzbiYjMzk7dCBjYWxsZWQsIHdlIGNhbiYjMzk7dCByZWFjaCB0aGUgYGRldmxpbmtgIGluc3RhbmNlIGVpdGhlci4gU28gaXQgd29uJiMzOTt0IGJlIHJlYWNoYWJsZSB2aWEgbmV0bGluayBlaXRoZXIuCgpJcyB0aGVyZSBhbnkgd2F5IHRvIGVtdWxhdGUgdGhlIGRyaXZlciBieSB1c2luZyBzb21ldGhpbmcgbGlrZSBhIHZpcnR1YWwgaG9zdCBicmlkZ2U/IE5vLCB0aGVyZSBpcyBubyBnZW5lcmljIFBDSSBob3N0IGJyaWRnZSBpbiB0aGUga2VybmVsIHRoYXQgd291bGQgYWxsb3cgdG8gaW5qZWN0IHRoaXMgc3BlY2lmaWMgZGV2aWNlLgoKSSYjMzk7dmUgZ290IHRvIGZhY2UgdGhlIG11c2ljOiB3aXRob3V0IHNwZWNpZmljIGVtdWxhdGlvbiBmb3IgdGhpcyBaVEUgRGluZ0hhaSBjYXJkLCB0aGlzIGRyaXZlciBpcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiBHQ0UvUUVNVSwgdGh1cyBtYWtpbmcgZWZmZWN0aXZlIGZ1enppbmcgcHJvYmxlbWF0aWMsIGlmIG5vdCBpbXBvc3NpYmxlLiBXZSBuZWVkIGEgd2F5IHRvIGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBkZXZpY2UsIHNvIGl0IGNhbiBiZSByZWFjaGVkLiBUaGlzIHNlZW1zIHRvIGJlIGEgaGFyZHdhcmUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3p4ZGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaC0xMC0vKiBUaGlzIGlzIHRoZSBQQ0kgY2FwYWJpbGl0eSBoZWFkZXI6ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oOjExOnN0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaC0xMi1cdF9fdTggY2FwX3ZuZHI7XHRcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBQQ0lfQ0FQX0lEX1ZORFIgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oLTIzLS8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmg6MjQ6c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaC0yNS1cdC8qIEFib3V0IHRoZSB3aG9sZSBkZXZpY2UuICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaC00OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmg6NDk6c3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaDo1MDpcdHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaC01MS1cdF9fbGUzMiBub3RpZnlfb2ZmX211bHRpcGxpZXI7IC8qIE11bHRpcGxpZXIgZm9yIHF1ZXVlX25vdGlmeV9vZmYuICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYz0xNz1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTk6c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyB6eGRoX3BmX2Rldmxpbmtfb3BzID0ge307XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyMTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjItXHR7IFBDSV9ERVZJQ0UoWlhESF9QRl9WRU5ET1JfSUQsIFpYREhfUEZfREVWSUNFX0lEKSB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyOTp2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMy1cdGlmIChwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNDpcdFx0enhkaF9kZXYtXHUwMDNlcHJpdiA9IHByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM1LVx0cmV0dXJuIHByaXY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Mzg6dm9pZCB6eGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MDpcdGtmcmVlKHp4ZGhfZGV2LVx1MDAzZXByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MS19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MzpzdGF0aWMgaW50IHp4ZGhfcGZfcGNpX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ1Olx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00Ni1cdGludCByZXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0ODpcdHBjaV9zZXRfZHJ2ZGF0YSh6eGRoX2Rldi1cdTAwM2VwZGV2LCB6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo1MDpcdHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy01MS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NTI6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy01My1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTU1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo1NjpcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNTctXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjU4Olx0XHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgRE1BX0JJVF9NQVNLKDMyKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTU5LVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjYwOlx0XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTYxLVx0XHRcdGdvdG8gZXJyX3BjaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo2NTpcdHJldCA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NjY6XHRcdFx0XHRcdCAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTY3LVx0XHRcdFx0XHQgICBcJiMzNDtkaC1wZlwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTY4LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo2OTpcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNzAtXHRcdGdvdG8gZXJyX3BjaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo3MzpcdHBjaV9zZXRfbWFzdGVyKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo3NDpcdHJldCA9IHBjaV9zYXZlX3N0YXRlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy03NS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NzY6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy03Ny1cdFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy03OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6ODA6XHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MoenhkaF9kZXYtXHUwMDNlcGRldiwgMCkgXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy04MS1cdFx0cmV0ID0gLUVOT0RFVjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6ODI6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtCQVIgMCBpcyBub3QgYW4gTU1JTyByZXNvdXJjZVxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTgzLVx0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTg2LVx0cGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0gPVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo4NzpcdFx0aW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoenhkaF9kZXYtXHUwMDNlcGRldiwgMCksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjg4Olx0XHRcdHBjaV9yZXNvdXJjZV9sZW4oenhkaF9kZXYtXHUwMDNlcGRldiwgMCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy04OS1cdGlmICghcGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtOTAtXHRcdHJldCA9IC1FTk9NRU07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjkxOlx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7ZGggcGYgcGNpIGlvcmVtYXAgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtOTItXHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtOTctZXJyX3BjaV9zYXZlX3N0YXRlOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo5ODpcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6OTk6XHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMDAtZXJyX3BjaTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTAxOlx0cGNpX2Rpc2FibGVfZGV2aWNlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMDItXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxMDU6dm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTEwNi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjEwNzpcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTA4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMDktXHRpb3VubWFwKHBmX2Rldi1cdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTEwOlx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi1cdTAwM2VwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxMTE6XHRcdFx0XHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxMTI6XHRwY2lfZGlzYWJsZV9kZXZpY2UoenhkaF9kZXYtXHUwMDNlcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTExMy19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTExNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTE1OmludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMTYtXHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTI0LVx0XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxMjU6XHRcdFx0XHQgICAgIHBvcyAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMjYtXHRcdFx0XHRcdFx0XHRjZmdfdHlwZSksIFx1MDAyNnR5cGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMjctXHRcdHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjEyODpcdFx0XHRcdCAgICAgcG9zICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFx1MDAyNmJhcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTEyOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE0NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTQ2OnZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE0Ny1cdFx0XHRcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTUxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTUyOlx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNTMtXHR2b2lkIF9faW9tZW0gKnA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNTgtXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxNTk6XHRcdFx0ICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXHUwMDI2YmFyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTYwLVx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE2MTpcdFx0XHQgICAgICBvZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTYyLVx0XHRcdFx0XHRcdG9mZnNldCksIFx1MDAyNm9mZnNldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE2My1cdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxNjQ6XHRcdFx0ICAgICAgb2ZmICYjNDM7IG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE2NS1cdFx0XHRcdFx0XHRsZW5ndGgpLCBcdTAwMjZsZW5ndGgpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTcwLVx0aWYgKGxlbmd0aCBcdTAwM2M9IHN0YXJ0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE3MTpcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O2JhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlJXUgZXhwZWN0ZWQpXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNzItXHRcdFx0bGVuZ3RoLCBzdGFydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNzYtXHRpZiAobGVuZ3RoIC0gc3RhcnQgXHUwMDNjIG1pbmxlbikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxNzc6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFx1MDAzZT0lenUgZXhwZWN0ZWQpXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNzgtXHRcdFx0bGVuZ3RoLCBtaW5sZW4pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTgzLVx0aWYgKHN0YXJ0ICYjNDM7IG9mZnNldCBcdTAwM2Mgb2Zmc2V0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE4NDpcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O21hcCB3cmFwLWFyb3VuZCAldSYjNDM7JXVcXG5cJiMzNDssIHN0YXJ0LCBvZmZzZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xODUtXHRcdHJldHVybiBOVUxMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTg5LVx0aWYgKG9mZnNldCBcdTAwMjYgKGFsaWduIC0gMSkpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTkwOlx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7b2Zmc2V0ICV1IG5vdCBhbGlnbmVkIHRvICV1XFxuXCYjMzQ7LCBvZmZzZXQsIGFsaWduKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTkxLVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIwMS1cdCAgICBtaW5sZW4gJiM0Mzsgb2Zmc2V0IFx1MDAzZSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjAyOlx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjAzLVx0XHRcdFwmIzM0O21hcCBjdXN0b20gcXVldWUgJXp1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIxMC1cdGlmICghcCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyMTE6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt1bmFibGUgdG8gbWFwIGN1c3RvbSBxdWV1ZSAldUAldSBvbiBiYXIgJXVcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIxMi1cdFx0XHRsZW5ndGgsIG9mZnNldCwgYmFyKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIxOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjIwOmludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIyMS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjIyMjpcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjIzOlx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMjQtXHRpbnQgY29tbW9uO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjI2LVx0LyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjI3Olx0Y29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMjgtXHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjMwLVx0aWYgKCFjb21tb24pIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjMxOlx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjMyLVx0XHRcdFwmIzM0O21pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIzNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjM2Olx0cGZfZGV2LVx1MDAzZWNvbW1vbiA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIGNvbW1vbixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjM3Olx0XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIzOC1cdFx0XHRcdFx0XHRaWERIX1BGX0FMSUdONCwgMCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjM5Olx0XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI0MC1cdFx0XHRcdFx0XHROVUxMLCBOVUxMLCBOVUxMKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjQxLVx0aWYgKCFwZl9kZXYtXHUwMDNlY29tbW9uKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI0MjpcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwmIzM0O3BmX2Rldi1cdTAwM2Vjb21tb24gaXMgbnVsbFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI0My1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI0OTppbnQgenhkaF9wZl9ub3RpZnlfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNTAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyNTE6XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI1MjpcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjUzLVx0dTMyIG5vdGlmeV9sZW5ndGg7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNTctXHQvKiBJZiBjb21tb24gaXMgdGhlcmUsIHRoZXNlIHNob3VsZCBiZSB0b28uLi4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjU4Olx0bm90aWZ5ID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNTktXHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjYxLVx0aWYgKCFub3RpZnkpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjYyOlx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7bWlzc2luZyBub3RpZnkgY2ZnIGNhcGFiaWxpdHlcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNjMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjY2LVx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI2NzpcdFx0XHQgICAgICBub3RpZnkgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI2OC1cdFx0XHRcdG5vdGlmeV9vZmZfbXVsdGlwbGllciksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNzAtXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjcxOlx0XHRcdCAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjcyLVx0XHRcdFx0Y2FwLmxlbmd0aCksIFx1MDAyNm5vdGlmeV9sZW5ndGgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNzMtXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Mjc0Olx0XHRcdCAgICAgIG5vdGlmeSAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjc1LVx0XHRcdFx0Y2FwLm9mZnNldCksIFx1MDAyNm5vdGlmeV9vZmZzZXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjgxLVx0aWYgKG5vdGlmeV9sZW5ndGggJiM0MzsgKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpIFx1MDAzYz0gUEFHRV9TSVpFKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI4MjpcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2Rldiwgbm90aWZ5LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yODMtXHRcdFx0XHRcdFx0XHQgICAgIFpYREhfUEZfTUFQX01JTkxFTjIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yODgtXHRcdGlmICghcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI4OTpcdFx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlIGlzIG51bGxcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yOTAtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yOTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI5OTppbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMDAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMDE6XHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjMwMjpcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzAzLVx0aW50IGRldmljZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMwNy1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMDg6XHRkZXZpY2UgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMwOS1cdFx0XHRcdFx0ICAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMTUtXHRpZiAoZGV2aWNlKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjMxNjpcdFx0cGZfZGV2LVx1MDAzZWRldmljZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIGRldmljZSwgMCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzE3LVx0XHRcdFx0XHRcdFx0WlhESF9QRl9BTElHTjQsIDAsIFBBR0VfU0laRSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMyMC1cdFx0aWYgKCFwZl9kZXYtXHUwMDNlZGV2aWNlKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjMyMTpcdFx0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7cGZfZGV2LVx1MDAzZWRldmljZSBpcyBudWxsXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzIyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzI3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMjg6dm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzI5LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzMwOlx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMzE6XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMzMi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMzOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzQwOmludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM0MS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM0MjpcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzQzOlx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNDQtXHRpbnQgcmV0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM0NjpcdHJldCA9IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzQ3LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNDg6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNDktXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM1MjpcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzUzLVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNTQ6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNTUtXHRcdGdvdG8gZXJyX21hcF9ub3RpZnk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM1ODpcdHJldCA9IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzU5LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNjA6XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt6eGRoX3BmX2RldmljZV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNjEtXHRcdGdvdG8gZXJyX21hcF9kZXZpY2U7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM3NDpzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzc1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Mzc2Olx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM3NzpcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzc4LVx0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zODAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM4MTpcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFx1MDAyNnp4ZGhfcGZfZGV2bGlua19vcHMsIHNpemVvZihzdHJ1Y3QgenhkaF9jb3JlX2RldiksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM4Mi1cdFx0XHRcdFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzgzLVx0aWYgKCFkZXZsaW5rKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM4NDpcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7enhkaF9wZiBkZXZsaW5rIGFsbG9jIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM4NS1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zODctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM4ODpcdHp4ZGhfZGV2ID0gZGV2bGlua19wcml2KGRldmxpbmspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozODk6XHR6eGRoX2Rldi1cdTAwM2VkZXZpY2UgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzkwOlx0enhkaF9kZXYtXHUwMDNlcGRldiA9IHBkZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM5MTpcdHp4ZGhfZGV2LVx1MDAzZWRldmxpbmsgPSBkZXZsaW5rO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM5MzpcdHBmX2RldiA9IHp4ZGhfY29yZV9hbGxvY19wcml2KHp4ZGhfZGV2LCBzaXplb2YoKnBmX2RldikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zOTQtXHRpZiAoIXBmX2Rldikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozOTU6XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3p4ZGhfcGZfZGV2IGFsbG9jIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM5Ni1cdFx0cmV0ID0gLUVOT01FTTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQwMS1cdHBmX2Rldi1cdTAwM2V2ZXBhID0gZmFsc2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQwMjpcdG11dGV4X2luaXQoXHUwMDI2enhkaF9kZXYtXHUwMDNlbG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQwMy1cdG11dGV4X2luaXQoXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MDU6XHR6eGRoX2Rldi1cdTAwM2Vjb3JlZGV2X3R5cGUgPSBHRVRfQ09SRURFVl9UWVBFKHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQwNzpcdHJldCA9IHp4ZGhfcGZfcGNpX2luaXQoenhkaF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MDgtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQwOTpcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7enhkaF9wZl9wY2lfaW5pdCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MTAtXHRcdGdvdG8gZXJyX3BmX2luaXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQxMzpcdHJldCA9IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDE0LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MTU6XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3p4ZGhfcGZfbW9kZXJuX2NmZ19pbml0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQxNi1cdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MjMtZXJyX2NmZ19pbml0OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MjQ6XHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQyNS1lcnJfcGZfaW5pdDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDI2LVx0bXV0ZXhfZGVzdHJveShcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0Mjc6XHRtdXRleF9kZXN0cm95KFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0Mjg6XHR6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDI5LWVycl9wZl9kZXY6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQzNDpzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDM1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDM2Olx0c3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0Mzc6XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayh6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQzODpcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NDAtXHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ0MTpcdHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoenhkaF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0NDI6XHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ0My1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDQ0Olx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6eGRoX2Rldi1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDQ1Olx0enhkaF9jb3JlX2ZyZWVfcHJpdih6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ0Ni1cdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDUwOnN0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ1MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ1NzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgenhkaF9wZl9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ1OC1cdC5uYW1lID0gXCYjMzQ7ZGluZ2hhaTEwZVwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDU5Olx0LmlkX3RhYmxlID0genhkaF9wZl9wY2lfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ2MDpcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ2MTpcdC5yZW1vdmUgPSB6eGRoX3BmX3JlbW92ZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDYyOlx0LnNodXRkb3duID0genhkaF9wZl9zaHV0ZG93bixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDYzLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ2NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDY1Om1vZHVsZV9wY2lfZHJpdmVyKHp4ZGhfcGZfZHJpdmVyKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTM3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDozODplbnVtIHp4ZGhfY29yZWRldl90eXBlIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtMzktXHRESF9DT1JFREVWX1BGLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg9NDU9c3RydWN0IGRldmxpbms7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTQ2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo0NzpzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTQ4LVx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo0OTpcdGVudW0genhkaF9jb3JlZGV2X3R5cGUgY29yZWRldl90eXBlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC01MC1cdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjU2OnN0cnVjdCB6eGRoX3BmX2RldiB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjU3Olx0c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC01OC1cdC8qIERldmljZS1zcGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUpICAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjg1OnZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo4Njp2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6ODc6dm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo4ODppbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtODktXHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6OTA6dm9pZCBfX2lvbWVtICp6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiwgaW50IG9mZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtOTEtXHRcdFx0XHQgICAgIHNpemVfdCBtaW5sZW4sIHUzMiBhbGlnbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTk0LVx0XHRcdFx0ICAgICB1MzIgKmJhcl9vZmYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo5NTppbnQgenhkaF9wZl9jb21tb25fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6OTY6aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjk3OmludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo5ODp2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6OTk6aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTEwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjY2NAoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiAzMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgZHJpdmVyIOKAkyBpdCYjMzk7cyBhIFBDSSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlci4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIG9mIHRoaXMgZGV2aWNlIGluIGVpdGhlciBRRU1VIG9yIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZi4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZy4KClRoZSBgenhkaF9wZl9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQmIzM5O3Mgb25seSBnb2luZyB0byBiZSBpbnZva2VkIGlmIGl0IGRldGVjdHMgYSBQQ0kgZGV2aWNlIHdpdGggYSB2ZXJ5IHNwZWNpZmljIFZlbmRvciBJRCAoMHgxY2YyKSBhbmQgRGV2aWNlIElEICgweDgwNDAgb3IgMHg4MDQxKS4gSSBjb3VsZCB0cnkgdG8gZm9yY2UgaXQgdG8gYmluZCB0byBhIGRpZmZlcmVudCBQQ0kgZGV2aWNlIHVzaW5nIGBuZXdfaWRgLCBidXQgSSBrbm93IHRoYXQgd29uJiMzOTt0IHdvcmsuIFRoZSBwcm9iZSBmdW5jdGlvbiBleHBsaWNpdGx5IGNoZWNrcyBmb3Igc29tZSB2ZW5kb3Itc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcyAoYFpYREhfUENJX0NBUF9DT01NT05fQ0ZHYCwgYW5kIHNvIG9uKSB0aGF0IHdvbiYjMzk7dCBiZSBwcmVzZW50IG9uIGFueSBvdGhlciBoYXJkd2FyZS4gRXNzZW50aWFsbHksIHRoZSBkcml2ZXIgZXhwZWN0cyAqdGhhdCogc3BlY2lmaWMgaGFyZHdhcmUuCgpUaGVyZWZvcmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgd2lsbCB0aGlzIGRyaXZlciYjMzk7cyBjb2RlIHBhdGhzIGJlIHJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVS4gSXQmIzM5O3MgYSBoYXJkd2FyZS1kZXBlbmRlbnQgZHJpdmVyLCBhbmQgd2UgZG9uJiMzOTt0IGhhdmUgdGhhdCBoYXJkd2FyZSBhdmFpbGFibGUgaW4gdGhlc2UgdmlydHVhbGl6ZWQgY29udGV4dHMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQuIElzIHRoZXJlIGEgJiMzNDt6eGRoJiMzNDsgdmlydHVhbCBkZXZpY2U/IE5vcGUuIElzIHRoZXJlIGEgbmV0bGluayBpbnRlcmZhY2UgSSBtaWdodCBsZXZlcmFnZSB0aGF0IGRvZXNuJiMzOTt0IGRlcGVuZCBvbiB0aGUgZGV2aWNlIGJlaW5nIHByb2JlZCBmaXJzdD8gTm8gbHVjayB0aGVyZSBlaXRoZXIuIFRoZSBkZXZsaW5rIGludGVyZmFjZSwgdGhhdCYjMzk7cyByZWdpc3RlcmVkIHdpdGhpbiBgenhkaF9wZl9wcm9iZWAsIHNvIGl0IHJlcXVpcmVzIHByb2JlIHRvIHN1Y2NlZWQuIFNvIHRoZXJlIGlzIG5vIHdheSBhcm91bmQgdGhpcy4gVGhlIHByb2JlIG5lZWRzIHRob3NlIHNwZWNpZmljIFBDSSBjYXBhYmlsaXRpZXMsIGFuZCB0aGF0JiMzOTtzIHRoZSBoYXJkIHN0b3AuCgpTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBpcyBub3Qgd29ydGggZnV6emluZy4gSSYjMzk7bSBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCB0aGF0JiMzOTtzIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgaGFyZHdhcmUgZGV2aWNlIChaVEUgRGluZ0hhaSBFdGhlcm5ldCBjb250cm9sbGVyKS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbC4gVGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiByZWxpZXMgb24gZmluZGluZyBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcywgbWVhbmluZyBpdCBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGZvcmNlLWJvdW5kIHRvIG90aGVyIHZpcnR1YWwgUENJIGRldmljZXMuIFRoZXJlZm9yZSwgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFBDSSBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgaGFyZHdhcmUgZGV2aWNlIChaVEUgRGluZ0hhaSBFdGhlcm5ldCBjb250cm9sbGVyKS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbC4gVGhlIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbiByZWxpZXMgb24gZmluZGluZyBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcywgbWVhbmluZyBpdCBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGZvcmNlLWJvdW5kIHRvIG90aGVyIHZpcnR1YWwgUENJIGRldmljZXMuIFRoZXJlZm9yZSwgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMTQ6MzI6MjMuODY1OTIyMjQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0OTM1MTkxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUENJIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UgKFpURSBEaW5nSGFpIEV0aGVybmV0IGNvbnRyb2xsZXIpLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLiBUaGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gcmVsaWVzIG9uIGZpbmRpbmcgc3BlY2lmaWMgdmVuZG9yLXNwZWNpZmljIFBDSSBjYXBhYmlsaXRpZXMsIG1lYW5pbmcgaXQgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBmb3JjZS1ib3VuZCB0byBvdGhlciB2aXJ0dWFsIFBDSSBkZXZpY2VzLiBUaGVyZWZvcmUsIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTQ6MzI6MjMuODY1OTI5MjUzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQxMjgwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YWJkMDM5MjJkYmZlOGIwY2IwNDcxNjllNmY5MzJmY2VmNGM3OTExXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDIwIDE0OjMyOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAyZmIxYzc1YWZkMTYzOC4uNzM2OTJiMDliZjdiYWIgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0yOTQ0MCw2ICsyOTQ0MCwxMiBAQCBTOlxcdE1haW50YWluZWRcXG4gVDpcXHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3Rpd2FpL3NvdW5kLmdpdFxcbiBGOlxcdHNvdW5kL2hkYS9jb2RlY3Mvc2VuYXJ5dGVjaC5jXFxuIFxcbitaVEUgRElOR0hBSSBFVEhFUk5FVCBEUklWRVJcXG4rTTpcXHRKdW55YW5nIEhhbiBcXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblxcdTAwM2VcXG4rTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuK1M6XFx0TWFpbnRhaW5lZFxcbitGOlxcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9cXG4rXFxuIFRIRSBSRVNUXFxuIE06XFx0TGludXMgVG9ydmFsZHMgXFx1MDAzY3RvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnXFx1MDAzZVxcbiBMOlxcdGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmdcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcXG5pbmRleCBiOGY3MGUyYTE3NjNhZC4uYzJiNjk5NmIwY2ZlMWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcXG5AQCAtMTg4LDUgKzE4OCw2IEBAIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3hpcmNvbS9LY29uZmlnXFxcIlxcbitzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnXFxcIlxcbiBcXG4gZW5kaWYgIyBFVEhFUk5FVFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXFxuaW5kZXggNTczNDRmZWM2Y2UwNDcuLmEzNGJjYmQ0ZGY0ZTkyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcXG5AQCAtMTA0LDMgKzEwNCw0IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgKz0geGlyY29tL1xcbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgKz0gc3lub3BzeXMvXFxuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BFTlNBTkRPKSArPSBwZW5zYW5kby9cXG4gb2JqLSQoQ09ORklHX09BX1RDNikgKz0gb2FfdGM2Lm9cXG4rb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWlRFKSArPSB6dGUvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iOTVjMmZjN2RiNzdhMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMjAgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBaVEUgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4rI1xcbitcXG4rY29uZmlnIE5FVF9WRU5ET1JfWlRFXFxuKyAgICBib29sIFxcXCJaVEUgZGV2aWNlc1xcXCJcXG4rICAgIGRlZmF1bHQgeVxcbisgICAgaGVscFxcbisgICAgICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4rICAgICAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4rICAgICAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxcbisgICAgICB0aGUgcXVlc3Rpb25zIGFib3V0IFp0ZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZFxcbisgICAgICBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbitcXG4raWYgTkVUX1ZFTkRPUl9aVEVcXG4rXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xcXCJcXG4rXFxuK2VuZGlmICMgTkVUX1ZFTkRPUl9aVEVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uY2Q5OTI5YjYxNTU5YzZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXFxuQEAgLTAsMCArMSw2IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjXFxuKyMgTWFrZWZpbGUgZm9yIHRoZSBaVEUgZGV2aWNlIGRyaXZlcnNcXG4rI1xcbitcXG4rb2JqLSQoQ09ORklHX0RJTkdIQUkpICs9IGRpbmdoYWkvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTIxYmUzYmY3NzA3ZmRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMzQgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvblxcbisjXFxuK1xcbitjb25maWcgRElOR0hBSVxcbisgICAgYm9vbCBcXFwiWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXFxcIlxcbisgICAgZGVwZW5kcyBvbiBQQ0lcXG4rICAgIHNlbGVjdCBORVRfREVWTElOS1xcbisgICAgaGVscFxcbisgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkZXZpY2VzLlxcbitcXG4rICAgICAgRGluZ0hhaSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgRXRoZXJuZXQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzXFxuKyAgICAgIG11bHRpcGxlIGZlYXR1cmVzIGluY2x1ZGluZyBoYXJkd2FyZSBvZmZsb2FkaW5nLCBTUi1JT1YsIGFuZFxcbisgICAgICBhZHZhbmNlZCB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXRpZXMuXFxuK1xcbisgICAgICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IGNhbiBzZWxlY3Qgc3BlY2lmaWMgZHJpdmVyIHZhcmlhbnRzIGJlbG93LlxcbitcXG4rICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cXG4rXFxuK2lmIERJTkdIQUlcXG4rXFxuK2NvbmZpZyBESU5HSEFJX1BGXFxuKyAgICB0cmlzdGF0ZSBcXFwiWlRFIERpbmdIYWkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXJcXFwiXFxuKyAgICBoZWxwXFxuKyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIFBDSSBFeHByZXNzIEV0aGVybmV0XFxuKyAgICAgIGFkYXB0ZXJzIChQRikuXFxuK1xcbisgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuKyAgICAgIHdpbGwgYmUgbmFtZWQgZGluZ2hhaTEwZS5cXG4rXFxuKyAgICAgIElmIHVuc3VyZSwgc2F5IE4uXFxuK1xcbitlbmRpZiAjIERJTkdIQUlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjEwZGY0ZWI3OWU4MGUxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlXFxuQEAgLTAsMCArMSw5IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisjXFxuKyMgTWFrZWZpbGUgZm9yIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxcbisjXFxuK1xcbitjY2ZsYWdzLXkgKz0gLUkkKHNyYylcXG4rXFxuK29iai0kKENPTkZJR19ESU5HSEFJX1BGKSArPSBkaW5naGFpMTBlLm9cXG4rZGluZ2hhaTEwZS15IDo9IGVuX3BmLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hZmFjNjdmNzE0N2NiOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXFxuQEAgLTAsMCArMSw1NCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciAtIFBDSSBjYXBhYmlsaXR5IGRlZmluaXRpb25zXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfX0RIX1FVRVVFX0hfX1xcbisjZGVmaW5lIF9fREhfUVVFVUVfSF9fXFxuK1xcbisvKiBUaGlzIGlzIHRoZSBQQ0kgY2FwYWJpbGl0eSBoZWFkZXI6ICovXFxuK3N0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xcbitcXHRfX3U4IGNhcF92bmRyO1xcdFxcdC8qIEdlbmVyaWMgUENJIGZpZWxkOiBQQ0lfQ0FQX0lEX1ZORFIgKi9cXG4rXFx0X191OCBjYXBfbmV4dDtcXHRcXHQvKiBHZW5lcmljIFBDSSBmaWVsZDogbmV4dCBwdHIuICovXFxuK1xcdF9fdTggY2FwX2xlbjtcXHRcXHQvKiBHZW5lcmljIFBDSSBmaWVsZDogY2FwYWJpbGl0eSBsZW5ndGggKi9cXG4rXFx0X191OCBjZmdfdHlwZTtcXHRcXHQvKiBJZGVudGlmaWVzIHRoZSBzdHJ1Y3R1cmUuICovXFxuK1xcdF9fdTggYmFyO1xcdFxcdC8qIFdoZXJlIHRvIGZpbmQgaXQuICovXFxuK1xcdF9fdTggaWQ7XFx0XFx0LyogTXVsdGlwbGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzYW1lIHR5cGUgKi9cXG4rXFx0X191OCBwYWRkaW5nWzJdO1xcdFxcdC8qIFBhZCB0byBmdWxsIGR3b3JkLiAqL1xcbitcXHRfX2xlMzIgb2Zmc2V0O1xcdFxcdC8qIE9mZnNldCB3aXRoaW4gYmFyLiAqL1xcbitcXHRfX2xlMzIgbGVuZ3RoO1xcdFxcdC8qIExlbmd0aCBvZiB0aGUgc3RydWN0dXJlLCBpbiBieXRlcy4gKi9cXG4rfTtcXG4rXFxuKy8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cXG4rc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcge1xcbitcXHQvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqL1xcbitcXHRfX2xlMzIgZGV2aWNlX2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBkZXZpY2VfZmVhdHVyZTtcXHQvKiByZWFkLW9ubHkgKi9cXG4rXFx0X19sZTMyIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0OyAvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBndWVzdF9mZWF0dXJlO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTE2IG1zaXhfY29uZmlnO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTE2IG51bV9xdWV1ZXM7XFx0XFx0LyogcmVhZC1vbmx5ICovXFxuK1xcdF9fdTggZGV2aWNlX3N0YXR1cztcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fdTggY29uZmlnX2dlbmVyYXRpb247XFx0LyogcmVhZC1vbmx5ICovXFxuK1xcbitcXHQvKiBBYm91dCBhIHNwZWNpZmljIHZpcnRxdWV1ZS4gKi9cXG4rXFx0X19sZTE2IHF1ZXVlX3NlbGVjdDtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9zaXplO1xcdFxcdC8qIHJlYWQtd3JpdGUsIHBvd2VyIG9mIDIuICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9tc2l4X3ZlY3RvcjtcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMTYgcXVldWVfbm90aWZ5X29mZjtcXHQvKiByZWFkLW9ubHkgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX2Rlc2NfbG87XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbitcXHRfX2xlMzIgcXVldWVfZGVzY19oaTtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV9hdmFpbF9sbztcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV9hdmFpbF9oaTtcXHRcXHQvKiByZWFkLXdyaXRlICovXFxuK1xcdF9fbGUzMiBxdWV1ZV91c2VkX2xvO1xcdFxcdC8qIHJlYWQtd3JpdGUgKi9cXG4rXFx0X19sZTMyIHF1ZXVlX3VzZWRfaGk7XFx0XFx0LyogcmVhZC13cml0ZSAqL1xcbit9O1xcbitcXG4rc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAge1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwIGNhcDtcXG4rXFx0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cXG4rfTtcXG4rXFxuKyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFlNWE3N2RkYWNhNTY5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmNcXG5AQCAtMCwwICsxLDQ2NSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiZW5fcGYuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImRoX3F1ZXVlLmhcXFwiXFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKdW55YW5nIEhhbiBcXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgenhkaF9wZl9kZXZsaW5rX29wcyA9IHt9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHp4ZGhfcGZfcGNpX3RhYmxlW10gPSB7XFxuK1xcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9QRl9ERVZJQ0VfSUQpIH0sXFxuK1xcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sXFxuK1xcdHsgfVxcbit9O1xcbitcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHp4ZGhfcGZfcGNpX3RhYmxlKTtcXG4rXFxuK3ZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0dm9pZCAqcHJpdiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcbitcXHRpZiAocHJpdilcXG4rXFx0XFx0enhkaF9kZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXHRyZXR1cm4gcHJpdjtcXG4rfVxcbitcXG4rdm9pZCB6eGRoX2NvcmVfZnJlZV9wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRrZnJlZSh6eGRoX2Rldi1cXHUwMDNlcHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgenhkaF9wZl9wY2lfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBjaV9zZXRfZHJ2ZGF0YSh6eGRoX2Rldi1cXHUwMDNlcGRldiwgenhkaF9kZXYpO1xcbitcXG4rXFx0cmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoenhkaF9kZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgRE1BX0JJVF9NQVNLKDY0KSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCh6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soMzIpKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3BjaTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcImRoLXBmXFxcIik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9wY2k7XFxuK1xcdH1cXG4rXFxuK1xcdHBjaV9zZXRfbWFzdGVyKHp4ZGhfZGV2LVxcdTAwM2VwZGV2KTtcXG4rXFx0cmV0ID0gcGNpX3NhdmVfc3RhdGUoenhkaF9kZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInBjaV9zYXZlX3N0YXRlIGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MoenhkaF9kZXYtXFx1MDAzZXBkZXYsIDApIFxcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIkJBUiAwIGlzIG5vdCBhbiBNTUlPIHJlc291cmNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XFxuK1xcdH1cXG4rXFxuK1xcdHBmX2Rldi1cXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSA9XFxuK1xcdFxcdGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCAwKSxcXG4rXFx0XFx0XFx0cGNpX3Jlc291cmNlX2xlbih6eGRoX2Rldi1cXHUwMDNlcGRldiwgMCkpO1xcbitcXHRpZiAoIXBmX2Rldi1cXHUwMDNlcGNpX2lvcmVtYXBfYWRkclswXSkge1xcbitcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJkaCBwZiBwY2kgaW9yZW1hcCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcGNpX3NhdmVfc3RhdGU6XFxuK1xcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xcbitlcnJfcGNpOlxcbitcXHRwY2lfZGlzYWJsZV9kZXZpY2UoenhkaF9kZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbit2b2lkIHp4ZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aW91bm1hcChwZl9kZXYtXFx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pO1xcbitcXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcXG4rXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHp4ZGhfZGV2LVxcdTAwM2VwZGV2KTtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXFxuK1xcdFxcdFxcdFxcdHUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpXFxuK3tcXG4rXFx0aW50IHBvcztcXG4rXFx0dTggdHlwZTtcXG4rXFx0dTggYmFyO1xcbitcXG4rXFx0Zm9yIChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfVk5EUik7IHBvcyBcXHUwMDNlIDA7XFxuK1xcdCAgICAgcG9zID0gcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHBkZXYsIHBvcywgUENJX0NBUF9JRF9WTkRSKSkge1xcbitcXHRcXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHBvcyArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGNmZ190eXBlKSwgXFx1MDAyNnR5cGUpO1xcbitcXHRcXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHBvcyArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFxcdTAwMjZiYXIpO1xcbitcXG4rXFx0XFx0LyogaWdub3JlIHN0cnVjdHVyZXMgd2l0aCByZXNlcnZlZCBCQVIgdmFsdWVzICovXFxuK1xcdFxcdGlmIChiYXIgXFx1MDAzZSBaWERIX1BGX01BWF9CQVJfVkFMKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmICh0eXBlID09IGNmZ190eXBlKSB7XFxuK1xcdFxcdFxcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpIFxcdTAwMjYgaW9yZXNvdXJjZV90eXBlcykge1xcbitcXHRcXHRcXHRcXHQqYmFycyB8PSAoMSBcXHUwMDNjXFx1MDAzYyBiYXIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gcG9zO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyICpiYXJfb2ZmKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHZvaWQgX19pb21lbSAqcDtcXG4rXFx0dTMyIG9mZnNldDtcXG4rXFx0dTMyIGxlbmd0aDtcXG4rXFx0dTggYmFyO1xcbitcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcXG4rXFx0XFx0XFx0ICAgICBvZmYgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLCBiYXIpLCBcXHUwMDI2YmFyKTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuK1xcdFxcdFxcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG9mZnNldCksIFxcdTAwMjZvZmZzZXQpO1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcXG4rXFx0XFx0XFx0ICAgICAgb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bGVuZ3RoKSwgXFx1MDAyNmxlbmd0aCk7XFxuK1xcbitcXHRpZiAoYmFyX29mZilcXG4rXFx0XFx0KmJhcl9vZmYgPSBvZmZzZXQ7XFxuK1xcbitcXHRpZiAobGVuZ3RoIFxcdTAwM2M9IHN0YXJ0KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcImJhZCBjYXBhYmlsaXR5IGxlbiAldSAoXFx1MDAzZSV1IGV4cGVjdGVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0bGVuZ3RoLCBzdGFydCk7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobGVuZ3RoIC0gc3RhcnQgXFx1MDAzYyBtaW5sZW4pIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwiYmFkIGNhcGFiaWxpdHkgbGVuICV1IChcXHUwMDNlPSV6dSBleHBlY3RlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGxlbmd0aCwgbWlubGVuKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGxlbmd0aCAtPSBzdGFydDtcXG4rXFx0aWYgKHN0YXJ0ICsgb2Zmc2V0IFxcdTAwM2Mgb2Zmc2V0KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIm1hcCB3cmFwLWFyb3VuZCAldSsldVxcXFxuXFxcIiwgc3RhcnQsIG9mZnNldCk7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRvZmZzZXQgKz0gc3RhcnQ7XFxuK1xcdGlmIChvZmZzZXQgXFx1MDAyNiAoYWxpZ24gLSAxKSkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJvZmZzZXQgJXUgbm90IGFsaWduZWQgdG8gJXVcXFxcblxcXCIsIG9mZnNldCwgYWxpZ24pO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGxlbmd0aCBcXHUwMDNlIHNpemUpXFxuK1xcdFxcdGxlbmd0aCA9IHNpemU7XFxuK1xcbitcXHRpZiAobGVuKVxcbitcXHRcXHQqbGVuID0gbGVuZ3RoO1xcbitcXG4rXFx0aWYgKG1pbmxlbiArIG9mZnNldCBcXHUwMDNjIG1pbmxlbiB8fFxcbitcXHQgICAgbWlubGVuICsgb2Zmc2V0IFxcdTAwM2UgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcIm1hcCBjdXN0b20gcXVldWUgJXp1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0bWlubGVuLCBvZmZzZXQsIGJhcixcXG4rXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHAgPSBwY2lfaW9tYXBfcmFuZ2UocGRldiwgYmFyLCBvZmZzZXQsIGxlbmd0aCk7XFxuK1xcdGlmICghcCkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ1bmFibGUgdG8gbWFwIGN1c3RvbSBxdWV1ZSAldUAldSBvbiBiYXIgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGxlbmd0aCwgb2Zmc2V0LCBiYXIpO1xcbitcXHR9IGVsc2UgaWYgKHBhKSB7XFxuK1xcdFxcdCpwYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBiYXIpICsgb2Zmc2V0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcDtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHRpbnQgY29tbW9uO1xcbitcXG4rXFx0LyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi9cXG4rXFx0Y29tbW9uID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9DT01NT05fQ0ZHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vtb2Rlcm5fYmFycyk7XFxuK1xcdGlmICghY29tbW9uKSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFxcIm1pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFxuK1xcdHBmX2Rldi1cXHUwMDNlY29tbW9uID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgY29tbW9uLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRaWERIX1BGX0FMSUdONCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmICghcGZfZGV2LVxcdTAwM2Vjb21tb24pIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2Vjb21tb24gaXMgbnVsbFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHR1MzIgbm90aWZ5X2xlbmd0aDtcXG4rXFx0dTMyIG5vdGlmeV9vZmZzZXQ7XFxuK1xcdGludCBub3RpZnk7XFxuK1xcbitcXHQvKiBJZiBjb21tb24gaXMgdGhlcmUsIHRoZXNlIHNob3VsZCBiZSB0b28uLi4gKi9cXG4rXFx0bm90aWZ5ID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vtb2Rlcm5fYmFycyk7XFxuK1xcdGlmICghbm90aWZ5KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIm1pc3Npbmcgbm90aWZ5IGNmZyBjYXBhYmlsaXR5XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbitcXHRcXHRcXHQgICAgICBub3RpZnkgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfbm90aWZ5X2NhcCxcXG4rXFx0XFx0XFx0XFx0bm90aWZ5X29mZl9tdWx0aXBsaWVyKSxcXG4rXFx0XFx0XFx1MDAyNnBmX2Rldi1cXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyKTtcXG4rXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuK1xcdFxcdFxcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxcbitcXHRcXHRcXHRcXHRjYXAubGVuZ3RoKSwgXFx1MDAyNm5vdGlmeV9sZW5ndGgpO1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldixcXG4rXFx0XFx0XFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXFxuK1xcdFxcdFxcdFxcdGNhcC5vZmZzZXQpLCBcXHUwMDI2bm90aWZ5X29mZnNldCk7XFxuK1xcbitcXHQvKiBXZSBkb24ndCBrbm93IGhvdyBtYW55IFZRcyB3ZSdsbCBtYXAsIGFoZWFkIG9mIHRoZSB0aW1lLlxcbitcXHQgKiBJZiBub3RpZnkgbGVuZ3RoIGlzIHNtYWxsLCBtYXAgaXQgYWxsIG5vdy4gT3RoZXJ3aXNlLFxcbitcXHQgKiBtYXAgZWFjaCBWUSBpbmRpdmlkdWFsbHkgbGF0ZXIuXFxuK1xcdCAqL1xcbitcXHRpZiAobm90aWZ5X2xlbmd0aCArIChub3RpZnlfb2Zmc2V0ICUgUEFHRV9TSVpFKSBcXHUwMDNjPSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0cGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSA9IHp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoenhkaF9kZXYsIG5vdGlmeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBaWERIX1BGX01BUF9NSU5MRU4yLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgWlhESF9QRl9BTElHTjIsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBub3RpZnlfbGVuZ3RoLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlbm90aWZ5X2xlbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZwZl9kZXYtXFx1MDAzZW5vdGlmeV9wYSwgTlVMTCk7XFxuK1xcdFxcdGlmICghcGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwZl9kZXYtXFx1MDAzZW5vdGlmeV9iYXNlIGlzIG51bGxcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwZl9kZXYtXFx1MDAzZW5vdGlmeV9tYXBfY2FwID0gbm90aWZ5O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfZGV2aWNlX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHRpbnQgZGV2aWNlO1xcbitcXG4rXFx0LyogRGV2aWNlIGNhcGFiaWxpdHkgaXMgb25seSBtYW5kYXRvcnkgZm9yXFxuK1xcdCAqIGRldmljZXMgdGhhdCBoYXZlIGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLlxcbitcXHQgKi9cXG4rXFx0ZGV2aWNlID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGZfZGV2LVxcdTAwM2Vtb2Rlcm5fYmFycyk7XFxuK1xcbitcXHQvKiB3ZSBkb24ndCBrbm93IGhvdyBtdWNoIHdlIHNob3VsZCBtYXAsXFxuK1xcdCAqIGJ1dCBQQUdFX1NJWkUgaXMgbW9yZSB0aGFuIGVub3VnaCBmb3IgYWxsIGV4aXN0aW5nIGRldmljZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoZGV2aWNlKSB7XFxuK1xcdFxcdHBmX2Rldi1cXHUwMDNlZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgZGV2aWNlLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRaWERIX1BGX0FMSUdONCwgMCwgUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBmX2Rldi1cXHUwMDNlZGV2aWNlX2xlbiwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwZl9kZXYtXFx1MDAzZWRldl9jZmdfYmFyX29mZik7XFxuK1xcdFxcdGlmICghcGZfZGV2LVxcdTAwM2VkZXZpY2UpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2VkZXZpY2UgaXMgbnVsbFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG4rXFxuK1xcdGlmIChwZl9kZXYtXFx1MDAzZWRldmljZSlcXG4rXFx0XFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2VkZXZpY2UpO1xcbitcXHRpZiAocGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSlcXG4rXFx0XFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSk7XFxuK1xcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cXHUwMDNlY29tbW9uKTtcXG4rfVxcbitcXG4raW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldilcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVxcdTAwM2VwZGV2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0genhkaF9wZl9jb21tb25fY2ZnX2luaXQoenhkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInp4ZGhfcGZfY29tbW9uX2NmZ19pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHp4ZGhfZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX25vdGlmeV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRnb3RvIGVycl9tYXBfbm90aWZ5O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB6eGRoX3BmX2RldmljZV9jZmdfaW5pdCh6eGRoX2Rldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwienhkaF9wZl9kZXZpY2VfY2ZnX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfbWFwX2RldmljZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfbWFwX2RldmljZTpcXG4rXFx0aWYgKHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpXFxuK1xcdFxcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UpO1xcbitlcnJfbWFwX25vdGlmeTpcXG4rXFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVxcdTAwM2Vjb21tb24pO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4re1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldjtcXG4rXFx0c3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRldmxpbmsgPSBkZXZsaW5rX2FsbG9jKFxcdTAwMjZ6eGRoX3BmX2Rldmxpbmtfb3BzLCBzaXplb2Yoc3RydWN0IHp4ZGhfY29yZV9kZXYpLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFkZXZsaW5rKSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInp4ZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0enhkaF9kZXYgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XFxuK1xcdHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbitcXHR6eGRoX2Rldi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuK1xcdHp4ZGhfZGV2LVxcdTAwM2VkZXZsaW5rID0gZGV2bGluaztcXG4rXFxuK1xcdHBmX2RldiA9IHp4ZGhfY29yZV9hbGxvY19wcml2KHp4ZGhfZGV2LCBzaXplb2YoKnBmX2RldikpO1xcbitcXHRpZiAoIXBmX2Rldikge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJ6eGRoX3BmX2RldiBhbGxvYyBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGVycl9wZl9kZXY7XFxuK1xcdH1cXG4rXFxuK1xcdHBmX2Rldi1cXHUwMDNlYmFyX2NoYW5fdmFsaWQgPSBmYWxzZTtcXG4rXFx0cGZfZGV2LVxcdTAwM2V2ZXBhID0gZmFsc2U7XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnp4ZGhfZGV2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cGZfZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuK1xcbitcXHR6eGRoX2Rldi1cXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcXG4rXFxuK1xcdHJldCA9IHp4ZGhfcGZfcGNpX2luaXQoenhkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInp4ZGhfcGZfcGNpX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0Z290byBlcnJfcGZfaW5pdDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0genhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoenhkaF9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdGdvdG8gZXJyX2NmZ19pbml0O1xcbitcXHR9XFxuK1xcbitcXHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfY2ZnX2luaXQ6XFxuK1xcdHp4ZGhfcGZfcGNpX2Nsb3NlKHp4ZGhfZGV2KTtcXG4rZXJyX3BmX2luaXQ6XFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnBmX2Rldi1cXHUwMDNlaXJxX2xvY2spO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ6eGRoX2Rldi1cXHUwMDNlbG9jayk7XFxuK1xcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xcbitlcnJfcGZfZGV2OlxcbitcXHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHp4ZGhfcGZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBwcml2X3RvX2RldmxpbmsoenhkaF9kZXYpO1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0ZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspO1xcbitcXHR6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTtcXG4rXFx0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZwZl9kZXYtXFx1MDAzZWlycV9sb2NrKTtcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2enhkaF9kZXYtXFx1MDAzZWxvY2spO1xcbitcXHR6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTtcXG4rXFx0ZGV2bGlua19mcmVlKGRldmxpbmspO1xcbitcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUE9XRVJfT0ZGKVxcbitcXHRcXHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XFxuK1xcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHp4ZGhfcGZfZHJpdmVyID0ge1xcbitcXHQubmFtZSA9IFxcXCJkaW5naGFpMTBlXFxcIixcXG4rXFx0LmlkX3RhYmxlID0genhkaF9wZl9wY2lfdGFibGUsXFxuK1xcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSB6eGRoX3BmX3JlbW92ZSxcXG4rXFx0LnNodXRkb3duID0genhkaF9wZl9zaHV0ZG93bixcXG4rfTtcXG4rXFxuK21vZHVsZV9wY2lfZHJpdmVyKHp4ZGhfcGZfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41OGM1ZGE5YTA5ZmZjY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oXFxuQEAgLTAsMCArMSwxMDEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKlxcbisgKiBaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXIgLSBQRiBoZWFkZXJcXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9fWlhESF9FTl9QRl9IX19cXG4rI2RlZmluZSBfX1pYREhfRU5fUEZfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBaWERIX1BGX1ZFTkRPUl9JRFxcdDB4MWNmMlxcbisjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXFx0MHg4MDQwXFxuKyNkZWZpbmUgWlhESF9WRl9ERVZJQ0VfSURcXHQweDgwNDFcXG4rXFxuKy8qIENvbW1vbiBjb25maWd1cmF0aW9uICovXFxuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkdcXHQxXFxuKy8qIE5vdGlmaWNhdGlvbnMgKi9cXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1xcdDJcXG4rLyogSVNSIGFjY2VzcyAqL1xcbisjZGVmaW5lIFpYREhfUENJX0NBUF9JU1JfQ0ZHXFx0XFx0M1xcbisvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xcbisjZGVmaW5lIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHXFx0NFxcbisvKiBQQ0kgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi9cXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfUENJX0NGR1xcdFxcdDVcXG4rXFxuKyNkZWZpbmUgWlhESF9QRl9NQVhfQkFSX1ZBTFxcdFxcdDB4NVxcbisjZGVmaW5lIFpYREhfUEZfQUxJR040XFx0XFx0XFx0NFxcbisjZGVmaW5lIFpYREhfUEZfQUxJR04yXFx0XFx0XFx0MlxcbisjZGVmaW5lIFpYREhfUEZfTUFQX01JTkxFTjJcXHRcXHQyXFxuK1xcbisjZGVmaW5lIFpYREhfREVWX01BQ19ISUdIX09GRlNFVFxcdDRcXG4rXFxuK2VudW0genhkaF9jb3JlZGV2X3R5cGUge1xcbitcXHRESF9DT1JFREVWX1BGLFxcbitcXHRESF9DT1JFREVWX1ZGLFxcbitcXHRESF9DT1JFREVWX1NGLFxcbitcXHRESF9DT1JFREVWX01QRlxcbit9O1xcbitcXG4rc3RydWN0IGRldmxpbms7XFxuK1xcbitzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldmljZTtcXG4rXFx0ZW51bSB6eGRoX2NvcmVkZXZfdHlwZSBjb3JlZGV2X3R5cGU7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcXG4rXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIFByb3RlY3RzIGRldmljZSBjb25maWd1cmF0aW9uICovXFxuK1xcdHZvaWQgKnByaXY7XFxuK307XFxuK1xcbitzdHJ1Y3QgenhkaF9wZl9kZXYge1xcbitcXHRzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjb21tb247XFxuK1xcdC8qIERldmljZS1zcGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUpICAqL1xcbitcXHQvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovXFxuK1xcdHZvaWQgX19pb21lbSAqZGV2aWNlO1xcbitcXHR2b2lkIF9faW9tZW0gKm5vdGlmeV9iYXNlO1xcbitcXHR2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlO1xcbitcXHQvKiBQaHlzaWNhbCBiYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKi9cXG4rXFx0cmVzb3VyY2Vfc2l6ZV90IG5vdGlmeV9wYTtcXG4rXFx0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cXG4rXFx0c2l6ZV90IG5vdGlmeV9sZW47XFxuK1xcdHNpemVfdCBkZXZpY2VfbGVuO1xcbitcXHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xcbitcXHRzMzIgbm90aWZ5X21hcF9jYXA7XFxuK1xcdHUzMiBub3RpZnlfb2Zmc2V0X211bHRpcGxpZXI7XFxuK1xcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXFxuK1xcdHMzMiBtb2Rlcm5fYmFycztcXG4rXFx0dm9pZCBfX2lvbWVtICpwY2lfaW9yZW1hcF9hZGRyWzZdO1xcbitcXHR1NjQgc3Jpb3ZfYmFyX3NpemU7XFxuK1xcdHUzMiBkZXZfY2ZnX2Jhcl9vZmY7XFxuK1xcdGJvb2wgcGFja2VkX3N0YXR1cztcXG4rXFx0Ym9vbCBiYXJfY2hhbl92YWxpZDtcXG4rXFx0Ym9vbCB2ZXBhO1xcbitcXHRzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7IC8qIFByb3RlY3RzIElSUSBvcGVyYXRpb25zICovXFxuK307XFxuK1xcbisjZGVmaW5lIEdFVF9DT1JFREVWX1RZUEUocGRldikgXFxcXFxcbitcXHQoKHBkZXYpLVxcdTAwM2VkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRilcXG4rXFxuK3ZvaWQgKnp4ZGhfY29yZV9hbGxvY19wcml2KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldiwgc2l6ZV90IHNpemUpO1xcbit2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4rdm9pZCB6eGRoX3BmX3BjaV9jbG9zZShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBjZmdfdHlwZSxcXG4rXFx0XFx0XFx0XFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycyk7XFxuK3ZvaWQgX19pb21lbSAqenhkaF9wZl9tYXBfY2FwYWJpbGl0eShzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIGludCBvZmYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90ICpsZW4sIHJlc291cmNlX3NpemVfdCAqcGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgdTMyICpiYXJfb2ZmKTtcXG4raW50IHp4ZGhfcGZfY29tbW9uX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuK2ludCB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG4rdm9pZCB6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuK2ludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbitcXG4rI2VuZGlmIC8qIF9fWlhESF9FTl9QRl9IX18gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTQ6MzI6MjQuNjMxMDk4Nzc3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDcyODMyNjQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQQ0kgZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIGRldmljZSAoWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlcikuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwuIFRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiByZWxpZXMgb24gZmluZGluZyBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcywgbWVhbmluZyBpdCBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGZvcmNlLWJvdW5kIHRvIG90aGVyIHZpcnR1YWwgUENJIGRldmljZXMuIFRoZXJlZm9yZSwgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZhYmQwMzkyMmRiZmU4YjBjYjA0NzE2OWU2ZjkzMmZjZWY0Yzc5MTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxNDozMjoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDJmYjFjNzVhZmQxNjM4Li43MzY5MmIwOWJmN2JhYiAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTI5NDQwLDYgKzI5NDQwLDEyIEBAIFM6XHRNYWludGFpbmVkXG4gVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGl3YWkvc291bmQuZ2l0XG4gRjpcdHNvdW5kL2hkYS9jb2RlY3Mvc2VuYXJ5dGVjaC5jXG4gXG4rWlRFIERJTkdIQUkgRVRIRVJORVQgRFJJVkVSXG4rTTpcdEp1bnlhbmcgSGFuIFx1MDAzY2hhbi5qdW55YW5nQHp0ZS5jb20uY25cdTAwM2VcbitMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuK1M6XHRNYWludGFpbmVkXG4rRjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9cbitcbiBUSEUgUkVTVFxuIE06XHRMaW51cyBUb3J2YWxkcyBcdTAwM2N0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZ1x1MDAzZVxuIEw6XHRsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbmluZGV4IGI4ZjcwZTJhMTc2M2FkLi5jMmI2OTk2YjBjZmUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcbkBAIC0xODgsNSArMTg4LDYgQEAgc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnXCJcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvS2NvbmZpZ1wiXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWdcIlxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3hpcmNvbS9LY29uZmlnXCJcbitzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1wiXG4gXG4gZW5kaWYgIyBFVEhFUk5FVFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbmluZGV4IDU3MzQ0ZmVjNmNlMDQ3Li5hMzRiY2JkNGRmNGU5MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuQEAgLTEwNCwzICsxMDQsNCBAQCBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT00pICs9IHhpcmNvbS9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgKz0gc3lub3BzeXMvXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE8pICs9IHBlbnNhbmRvL1xuIG9iai0kKENPTkZJR19PQV9UQzYpICs9IG9hX3RjNi5vXG4rb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWlRFKSArPSB6dGUvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iOTVjMmZjN2RiNzdhMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL0tjb25maWdcbkBAIC0wLDAgKzEsMjAgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjXG4rIyBaVEUgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbisjXG4rXG4rY29uZmlnIE5FVF9WRU5ET1JfWlRFXG4rICAgIGJvb2wgXCJaVEUgZGV2aWNlc1wiXG4rICAgIGRlZmF1bHQgeVxuKyAgICBoZWxwXG4rICAgICAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4rICAgICAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbisgICAgICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXG4rICAgICAgdGhlIHF1ZXN0aW9ucyBhYm91dCBadGUgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWRcbisgICAgICBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuK1xuK2lmIE5FVF9WRU5ET1JfWlRFXG4rXG4rc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1wiXG4rXG4rZW5kaWYgIyBORVRfVkVORE9SX1pURVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jZDk5MjliNjE1NTljNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL01ha2VmaWxlXG5AQCAtMCwwICsxLDYgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjXG4rIyBNYWtlZmlsZSBmb3IgdGhlIFpURSBkZXZpY2UgZHJpdmVyc1xuKyNcbitcbitvYmotJChDT05GSUdfRElOR0hBSSkgKz0gZGluZ2hhaS9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xMjFiZTNiZjc3MDdmZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZ1xuQEAgLTAsMCArMSwzNCBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uXG4rI1xuK1xuK2NvbmZpZyBESU5HSEFJXG4rICAgIGJvb2wgXCJaVEUgRGluZ0hhaSBFdGhlcm5ldCBkcml2ZXJcIlxuKyAgICBkZXBlbmRzIG9uIFBDSVxuKyAgICBzZWxlY3QgTkVUX0RFVkxJTktcbisgICAgaGVscFxuKyAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFpURSBEaW5nSGFpIEV0aGVybmV0IGRldmljZXMuXG4rXG4rICAgICAgRGluZ0hhaSBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgRXRoZXJuZXQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzXG4rICAgICAgbXVsdGlwbGUgZmVhdHVyZXMgaW5jbHVkaW5nIGhhcmR3YXJlIG9mZmxvYWRpbmcsIFNSLUlPViwgYW5kXG4rICAgICAgYWR2YW5jZWQgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0aWVzLlxuK1xuKyAgICAgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgY2FuIHNlbGVjdCBzcGVjaWZpYyBkcml2ZXIgdmFyaWFudHMgYmVsb3cuXG4rXG4rICAgICAgSWYgdW5zdXJlLCBzYXkgTi5cbitcbitpZiBESU5HSEFJXG4rXG4rY29uZmlnIERJTkdIQUlfUEZcbisgICAgdHJpc3RhdGUgXCJaVEUgRGluZ0hhaSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGRyaXZlclwiXG4rICAgIGhlbHBcbisgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBaVEUgRGluZ0hhaSBQQ0kgRXhwcmVzcyBFdGhlcm5ldFxuKyAgICAgIGFkYXB0ZXJzIChQRikuXG4rXG4rICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuKyAgICAgIHdpbGwgYmUgbmFtZWQgZGluZ2hhaTEwZS5cbitcbisgICAgICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuK2VuZGlmICMgRElOR0hBSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTBkZjRlYjc5ZTgwZTFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL01ha2VmaWxlXG5AQCAtMCwwICsxLDkgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjXG4rIyBNYWtlZmlsZSBmb3IgWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyXG4rI1xuK1xuK2NjZmxhZ3MteSArPSAtSSQoc3JjKVxuK1xuK29iai0kKENPTkZJR19ESU5HSEFJX1BGKSArPSBkaW5naGFpMTBlLm9cbitkaW5naGFpMTBlLXkgOj0gZW5fcGYub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFmYWM2N2Y3MTQ3Y2I5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oXG5AQCAtMCwwICsxLDU0IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qXG4rICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUENJIGNhcGFiaWxpdHkgZGVmaW5pdGlvbnNcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgWlRFIENvcnBvcmF0aW9uLlxuKyAqL1xuK1xuKyNpZm5kZWYgX19ESF9RVUVVRV9IX19cbisjZGVmaW5lIF9fREhfUVVFVUVfSF9fXG4rXG4rLyogVGhpcyBpcyB0aGUgUENJIGNhcGFiaWxpdHkgaGVhZGVyOiAqL1xuK3N0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xuK1x0X191OCBjYXBfdm5kcjtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IFBDSV9DQVBfSURfVk5EUiAqL1xuK1x0X191OCBjYXBfbmV4dDtcdFx0LyogR2VuZXJpYyBQQ0kgZmllbGQ6IG5leHQgcHRyLiAqL1xuK1x0X191OCBjYXBfbGVuO1x0XHQvKiBHZW5lcmljIFBDSSBmaWVsZDogY2FwYWJpbGl0eSBsZW5ndGggKi9cbitcdF9fdTggY2ZnX3R5cGU7XHRcdC8qIElkZW50aWZpZXMgdGhlIHN0cnVjdHVyZS4gKi9cbitcdF9fdTggYmFyO1x0XHQvKiBXaGVyZSB0byBmaW5kIGl0LiAqL1xuK1x0X191OCBpZDtcdFx0LyogTXVsdGlwbGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzYW1lIHR5cGUgKi9cbitcdF9fdTggcGFkZGluZ1syXTtcdFx0LyogUGFkIHRvIGZ1bGwgZHdvcmQuICovXG4rXHRfX2xlMzIgb2Zmc2V0O1x0XHQvKiBPZmZzZXQgd2l0aGluIGJhci4gKi9cbitcdF9fbGUzMiBsZW5ndGg7XHRcdC8qIExlbmd0aCBvZiB0aGUgc3RydWN0dXJlLCBpbiBieXRlcy4gKi9cbit9O1xuK1xuKy8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cbitzdHJ1Y3QgenhkaF9wZl9wY2lfY29tbW9uX2NmZyB7XG4rXHQvKiBBYm91dCB0aGUgd2hvbGUgZGV2aWNlLiAqL1xuK1x0X19sZTMyIGRldmljZV9mZWF0dXJlX3NlbGVjdDsgLyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIGRldmljZV9mZWF0dXJlO1x0LyogcmVhZC1vbmx5ICovXG4rXHRfX2xlMzIgZ3Vlc3RfZmVhdHVyZV9zZWxlY3Q7IC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUzMiBndWVzdF9mZWF0dXJlO1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMTYgbXNpeF9jb25maWc7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBudW1fcXVldWVzO1x0XHQvKiByZWFkLW9ubHkgKi9cbitcdF9fdTggZGV2aWNlX3N0YXR1cztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X191OCBjb25maWdfZ2VuZXJhdGlvbjtcdC8qIHJlYWQtb25seSAqL1xuK1xuK1x0LyogQWJvdXQgYSBzcGVjaWZpYyB2aXJ0cXVldWUuICovXG4rXHRfX2xlMTYgcXVldWVfc2VsZWN0O1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMTYgcXVldWVfc2l6ZTtcdFx0LyogcmVhZC13cml0ZSwgcG93ZXIgb2YgMi4gKi9cbitcdF9fbGUxNiBxdWV1ZV9tc2l4X3ZlY3RvcjtcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBxdWV1ZV9lbmFibGU7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUxNiBxdWV1ZV9ub3RpZnlfb2ZmO1x0LyogcmVhZC1vbmx5ICovXG4rXHRfX2xlMzIgcXVldWVfZGVzY19sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX2Rlc2NfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbitcdF9fbGUzMiBxdWV1ZV9hdmFpbF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX2F2YWlsX2hpO1x0XHQvKiByZWFkLXdyaXRlICovXG4rXHRfX2xlMzIgcXVldWVfdXNlZF9sbztcdFx0LyogcmVhZC13cml0ZSAqL1xuK1x0X19sZTMyIHF1ZXVlX3VzZWRfaGk7XHRcdC8qIHJlYWQtd3JpdGUgKi9cbit9O1xuK1xuK3N0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwIHtcbitcdHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAgY2FwO1xuK1x0X19sZTMyIG5vdGlmeV9vZmZfbXVsdGlwbGllcjsgLyogTXVsdGlwbGllciBmb3IgcXVldWVfbm90aWZ5X29mZi4gKi9cbit9O1xuK1xuKyNlbmRpZiAvKiBfX0RIX1FVRVVFX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFlNWE3N2RkYWNhNTY5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jXG5AQCAtMCwwICsxLDQ2NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFpURSBEaW5nSGFpIEV0aGVybmV0IGRyaXZlclxuKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBaVEUgQ29ycG9yYXRpb24uXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFwiZW5fcGYuaFwiXG4rI2luY2x1ZGUgXCJkaF9xdWV1ZS5oXCJcbitcbitNT0RVTEVfQVVUSE9SKFwiSnVueWFuZyBIYW4gXHUwMDNjaGFuLmp1bnlhbmdAenRlLmNvbS5jblx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJaVEUgRGluZ0hhaSBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgenhkaF9wZl9kZXZsaW5rX29wcyA9IHt9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6eGRoX3BmX3BjaV90YWJsZVtdID0ge1xuK1x0eyBQQ0lfREVWSUNFKFpYREhfUEZfVkVORE9SX0lELCBaWERIX1BGX0RFVklDRV9JRCkgfSxcbitcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9WRl9ERVZJQ0VfSUQpIH0sXG4rXHR7IH1cbit9O1xuK1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6eGRoX3BmX3BjaV90YWJsZSk7XG4rXG4rdm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSlcbit7XG4rXHR2b2lkICpwcml2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTtcbitcbitcdGlmIChwcml2KVxuK1x0XHR6eGRoX2Rldi1cdTAwM2Vwcml2ID0gcHJpdjtcbitcdHJldHVybiBwcml2O1xuK31cbitcbit2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdGtmcmVlKHp4ZGhfZGV2LVx1MDAzZXByaXYpO1xuK31cbitcbitzdGF0aWMgaW50IHp4ZGhfcGZfcGNpX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRwY2lfc2V0X2RydmRhdGEoenhkaF9kZXYtXHUwMDNlcGRldiwgenhkaF9kZXYpO1xuK1xuK1x0cmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoenhkaF9kZXYtXHUwMDNlcGRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soNjQpKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCh6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIERNQV9CSVRfTUFTSygzMikpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwiZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdFx0Z290byBlcnJfcGNpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVx1MDAzZXBkZXYsXG4rXHRcdFx0XHRcdCAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSksXG4rXHRcdFx0XHRcdCAgIFwiZGgtcGZcIik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9wY2k7XG4rXHR9XG4rXG4rXHRwY2lfc2V0X21hc3Rlcih6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbitcdHJldCA9IHBjaV9zYXZlX3N0YXRlKHp4ZGhfZGV2LVx1MDAzZXBkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuK1x0fVxuK1xuK1x0aWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIDApIFx1MDAyNiBJT1JFU09VUkNFX01FTSkpIHtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwiQkFSIDAgaXMgbm90IGFuIE1NSU8gcmVzb3VyY2VcXG5cIik7XG4rXHRcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xuK1x0fVxuK1xuK1x0cGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0gPVxuK1x0XHRpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydCh6eGRoX2Rldi1cdTAwM2VwZGV2LCAwKSxcbitcdFx0XHRwY2lfcmVzb3VyY2VfbGVuKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIDApKTtcbitcdGlmICghcGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwiZGggcGYgcGNpIGlvcmVtYXAgZmFpbGVkXFxuXCIpO1xuK1x0XHRnb3RvIGVycl9wY2lfc2F2ZV9zdGF0ZTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9wY2lfc2F2ZV9zdGF0ZTpcbitcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXHUwMDNlcGRldixcbitcdFx0XHRcdCAgICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVx1MDAzZXBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7XG4rZXJyX3BjaTpcbitcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcbitcdGlvdW5tYXAocGZfZGV2LVx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pO1xuK1x0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyh6eGRoX2Rldi1cdTAwM2VwZGV2LFxuK1x0XHRcdFx0ICAgICBwY2lfc2VsZWN0X2JhcnMoenhkaF9kZXYtXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcbitcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cdTAwM2VwZGV2KTtcbit9XG4rXG4raW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXG4rXHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKVxuK3tcbitcdGludCBwb3M7XG4rXHR1OCB0eXBlO1xuK1x0dTggYmFyO1xuK1xuK1x0Zm9yIChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfVk5EUik7IHBvcyBcdTAwM2UgMDtcbitcdCAgICAgcG9zID0gcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHBkZXYsIHBvcywgUENJX0NBUF9JRF9WTkRSKSkge1xuK1x0XHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuK1x0XHRcdFx0ICAgICBwb3MgKyBvZmZzZXRvZihzdHJ1Y3QgenhkaF9wZl9wY2lfY2FwLFxuK1x0XHRcdFx0XHRcdFx0Y2ZnX3R5cGUpLCBcdTAwMjZ0eXBlKTtcbitcdFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcbitcdFx0XHRcdCAgICAgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXHUwMDI2YmFyKTtcbitcbitcdFx0LyogaWdub3JlIHN0cnVjdHVyZXMgd2l0aCByZXNlcnZlZCBCQVIgdmFsdWVzICovXG4rXHRcdGlmIChiYXIgXHUwMDNlIFpYREhfUEZfTUFYX0JBUl9WQUwpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICh0eXBlID09IGNmZ190eXBlKSB7XG4rXHRcdFx0aWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcikgXHUwMDI2IGlvcmVzb3VyY2VfdHlwZXMpIHtcbitcdFx0XHRcdCpiYXJzIHw9ICgxIFx1MDAzY1x1MDAzYyBiYXIpO1xuK1x0XHRcdFx0cmV0dXJuIHBvcztcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxuK1x0XHRcdFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXG4rXHRcdFx0XHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXG4rXHRcdFx0XHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxuK1x0XHRcdFx0ICAgICB1MzIgKmJhcl9vZmYpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuK1x0dm9pZCBfX2lvbWVtICpwO1xuK1x0dTMyIG9mZnNldDtcbitcdHUzMiBsZW5ndGg7XG4rXHR1OCBiYXI7XG4rXG4rXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxuK1x0XHRcdCAgICAgb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXHUwMDI2YmFyKTtcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4rXHRcdFx0XHRcdFx0b2Zmc2V0KSwgXHUwMDI2b2Zmc2V0KTtcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXG4rXHRcdFx0XHRcdFx0bGVuZ3RoKSwgXHUwMDI2bGVuZ3RoKTtcbitcbitcdGlmIChiYXJfb2ZmKVxuK1x0XHQqYmFyX29mZiA9IG9mZnNldDtcbitcbitcdGlmIChsZW5ndGggXHUwMDNjPSBzdGFydCkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFx1MDAzZSV1IGV4cGVjdGVkKVxcblwiLFxuK1x0XHRcdGxlbmd0aCwgc3RhcnQpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdGlmIChsZW5ndGggLSBzdGFydCBcdTAwM2MgbWlubGVuKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcImJhZCBjYXBhYmlsaXR5IGxlbiAldSAoXHUwMDNlPSV6dSBleHBlY3RlZClcXG5cIixcbitcdFx0XHRsZW5ndGgsIG1pbmxlbik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0bGVuZ3RoIC09IHN0YXJ0O1xuK1x0aWYgKHN0YXJ0ICsgb2Zmc2V0IFx1MDAzYyBvZmZzZXQpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwibWFwIHdyYXAtYXJvdW5kICV1KyV1XFxuXCIsIHN0YXJ0LCBvZmZzZXQpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdG9mZnNldCArPSBzdGFydDtcbitcdGlmIChvZmZzZXQgXHUwMDI2IChhbGlnbiAtIDEpKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcIm9mZnNldCAldSBub3QgYWxpZ25lZCB0byAldVxcblwiLCBvZmZzZXQsIGFsaWduKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRpZiAobGVuZ3RoIFx1MDAzZSBzaXplKVxuK1x0XHRsZW5ndGggPSBzaXplO1xuK1xuK1x0aWYgKGxlbilcbitcdFx0KmxlbiA9IGxlbmd0aDtcbitcbitcdGlmIChtaW5sZW4gKyBvZmZzZXQgXHUwMDNjIG1pbmxlbiB8fFxuK1x0ICAgIG1pbmxlbiArIG9mZnNldCBcdTAwM2UgcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLFxuK1x0XHRcdFwibWFwIGN1c3RvbSBxdWV1ZSAlenVAJXUgb3V0IG9mIHJhbmdlIG9uIGJhciAldSBsZW5ndGggJWx1XFxuXCIsXG4rXHRcdFx0bWlubGVuLCBvZmZzZXQsIGJhcixcbitcdFx0XHQodW5zaWduZWQgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHAgPSBwY2lfaW9tYXBfcmFuZ2UocGRldiwgYmFyLCBvZmZzZXQsIGxlbmd0aCk7XG4rXHRpZiAoIXApIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwidW5hYmxlIHRvIG1hcCBjdXN0b20gcXVldWUgJXVAJXUgb24gYmFyICV1XFxuXCIsXG4rXHRcdFx0bGVuZ3RoLCBvZmZzZXQsIGJhcik7XG4rXHR9IGVsc2UgaWYgKHBhKSB7XG4rXHRcdCpwYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBiYXIpICsgb2Zmc2V0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIHA7XG4rfVxuK1xuK2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuK1x0aW50IGNvbW1vbjtcbitcbitcdC8qIGNoZWNrIGZvciBhIGNvbW1vbiBjb25maWc6IGlmIG5vdCwgdXNlIGxlZ2FjeSBtb2RlIChiYXIgMCkuICovXG4rXHRjb21tb24gPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkcsXG4rXHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuK1x0XHRcdFx0XHQgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vtb2Rlcm5fYmFycyk7XG4rXHRpZiAoIWNvbW1vbikge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSxcbitcdFx0XHRcIm1pc3NpbmcgY2FwYWJpbGl0aWVzLCBsZWF2aW5nIGZvciBsZWdhY3kgZHJpdmVyXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHBmX2Rldi1cdTAwM2Vjb21tb24gPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBjb21tb24sXG4rXHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcbitcdFx0XHRcdFx0XHRaWERIX1BGX0FMSUdONCwgMCxcbitcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLFxuK1x0XHRcdFx0XHRcdE5VTEwsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKCFwZl9kZXYtXHUwMDNlY29tbW9uKSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBmX2Rldi1cdTAwM2Vjb21tb24gaXMgbnVsbFxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHp4ZGhfZGV2LVx1MDAzZXBkZXY7XG4rXHR1MzIgbm90aWZ5X2xlbmd0aDtcbitcdHUzMiBub3RpZnlfb2Zmc2V0O1xuK1x0aW50IG5vdGlmeTtcbitcbitcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xuK1x0bm90aWZ5ID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9OT1RJRllfQ0ZHLFxuK1x0XHRcdFx0XHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcbitcdFx0XHRcdFx0ICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlbW9kZXJuX2JhcnMpO1xuK1x0aWYgKCFub3RpZnkpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwibWlzc2luZyBub3RpZnkgY2ZnIGNhcGFiaWxpdHlcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4rXHRcdFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXG4rXHRcdFx0XHRub3RpZnlfb2ZmX211bHRpcGxpZXIpLFxuK1x0XHRcdTAwMjZwZl9kZXYtXHUwMDNlbm90aWZ5X29mZnNldF9tdWx0aXBsaWVyKTtcbitcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxuK1x0XHRcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxuK1x0XHRcdFx0Y2FwLmxlbmd0aCksIFx1MDAyNm5vdGlmeV9sZW5ndGgpO1xuK1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXG4rXHRcdFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXG4rXHRcdFx0XHRjYXAub2Zmc2V0KSwgXHUwMDI2bm90aWZ5X29mZnNldCk7XG4rXG4rXHQvKiBXZSBkb24ndCBrbm93IGhvdyBtYW55IFZRcyB3ZSdsbCBtYXAsIGFoZWFkIG9mIHRoZSB0aW1lLlxuK1x0ICogSWYgbm90aWZ5IGxlbmd0aCBpcyBzbWFsbCwgbWFwIGl0IGFsbCBub3cuIE90aGVyd2lzZSxcbitcdCAqIG1hcCBlYWNoIFZRIGluZGl2aWR1YWxseSBsYXRlci5cbitcdCAqL1xuK1x0aWYgKG5vdGlmeV9sZW5ndGggKyAobm90aWZ5X29mZnNldCAlIFBBR0VfU0laRSkgXHUwMDNjPSBQQUdFX1NJWkUpIHtcbitcdFx0cGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2Rldiwgbm90aWZ5LFxuK1x0XHRcdFx0XHRcdFx0ICAgICBaWERIX1BGX01BUF9NSU5MRU4yLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFpYREhfUEZfQUxJR04yLCAwLFxuK1x0XHRcdFx0XHRcdFx0ICAgIG5vdGlmeV9sZW5ndGgsXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2cGZfZGV2LVx1MDAzZW5vdGlmeV9sZW4sXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2cGZfZGV2LVx1MDAzZW5vdGlmeV9wYSwgTlVMTCk7XG4rXHRcdGlmICghcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKSB7XG4rXHRcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwicGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlIGlzIG51bGxcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHBmX2Rldi1cdTAwM2Vub3RpZnlfbWFwX2NhcCA9IG5vdGlmeTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbitcdGludCBkZXZpY2U7XG4rXG4rXHQvKiBEZXZpY2UgY2FwYWJpbGl0eSBpcyBvbmx5IG1hbmRhdG9yeSBmb3JcbitcdCAqIGRldmljZXMgdGhhdCBoYXZlIGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLlxuK1x0ICovXG4rXHRkZXZpY2UgPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkcsXG4rXHRcdFx0XHRcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxuK1x0XHRcdFx0XHQgICAgIFx1MDAyNnBmX2Rldi1cdTAwM2Vtb2Rlcm5fYmFycyk7XG4rXG4rXHQvKiB3ZSBkb24ndCBrbm93IGhvdyBtdWNoIHdlIHNob3VsZCBtYXAsXG4rXHQgKiBidXQgUEFHRV9TSVpFIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGFsbCBleGlzdGluZyBkZXZpY2VzLlxuK1x0ICovXG4rXHRpZiAoZGV2aWNlKSB7XG4rXHRcdHBmX2Rldi1cdTAwM2VkZXZpY2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBkZXZpY2UsIDAsXG4rXHRcdFx0XHRcdFx0XHRaWERIX1BGX0FMSUdONCwgMCwgUEFHRV9TSVpFLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwZl9kZXYtXHUwMDNlZGV2aWNlX2xlbiwgTlVMTCxcbitcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2cGZfZGV2LVx1MDAzZWRldl9jZmdfYmFyX29mZik7XG4rXHRcdGlmICghcGZfZGV2LVx1MDAzZWRldmljZSkge1xuK1x0XHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInBmX2Rldi1cdTAwM2VkZXZpY2UgaXMgbnVsbFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXG4re1xuK1x0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cdTAwM2Vwcml2O1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cdTAwM2VwZGV2O1xuK1xuK1x0aWYgKHBmX2Rldi1cdTAwM2VkZXZpY2UpXG4rXHRcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2VkZXZpY2UpO1xuK1x0aWYgKHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSlcbitcdFx0cGNpX2lvdW5tYXAocGRldiwgcGZfZGV2LVx1MDAzZW5vdGlmeV9iYXNlKTtcbitcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vjb21tb24pO1xuK31cbitcbitpbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXHUwMDNlcGRldjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCh6eGRoX2Rldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoenhkaF9kZXYtXHUwMDNlZGV2aWNlLCBcInp4ZGhfcGZfY29tbW9uX2NmZ19pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHp4ZGhfZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2Vycih6eGRoX2Rldi1cdTAwM2VkZXZpY2UsIFwienhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9tYXBfbm90aWZ5O1xuK1x0fVxuK1xuK1x0cmV0ID0genhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoenhkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKHp4ZGhfZGV2LVx1MDAzZWRldmljZSwgXCJ6eGRoX3BmX2RldmljZV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4rXHRcdGdvdG8gZXJyX21hcF9kZXZpY2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfbWFwX2RldmljZTpcbitcdGlmIChwZl9kZXYtXHUwMDNlbm90aWZ5X2Jhc2UpXG4rXHRcdHBjaV9pb3VubWFwKHBkZXYsIHBmX2Rldi1cdTAwM2Vub3RpZnlfYmFzZSk7XG4rZXJyX21hcF9ub3RpZnk6XG4rXHRwY2lfaW91bm1hcChwZGV2LCBwZl9kZXYtXHUwMDNlY29tbW9uKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgenhkaF9wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuK3tcbitcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2O1xuK1x0c3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2O1xuK1x0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZGV2bGluayA9IGRldmxpbmtfYWxsb2MoXHUwMDI2enhkaF9wZl9kZXZsaW5rX29wcywgc2l6ZW9mKHN0cnVjdCB6eGRoX2NvcmVfZGV2KSxcbitcdFx0XHRcdFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdGlmICghZGV2bGluaykge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInp4ZGhfcGYgZGV2bGluayBhbGxvYyBmYWlsZWRcXG5cIik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0enhkaF9kZXYgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XG4rXHR6eGRoX2Rldi1cdTAwM2VkZXZpY2UgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbitcdHp4ZGhfZGV2LVx1MDAzZXBkZXYgPSBwZGV2O1xuK1x0enhkaF9kZXYtXHUwMDNlZGV2bGluayA9IGRldmxpbms7XG4rXG4rXHRwZl9kZXYgPSB6eGRoX2NvcmVfYWxsb2NfcHJpdih6eGRoX2Rldiwgc2l6ZW9mKCpwZl9kZXYpKTtcbitcdGlmICghcGZfZGV2KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwienhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxuXCIpO1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9wZl9kZXY7XG4rXHR9XG4rXG4rXHRwZl9kZXYtXHUwMDNlYmFyX2NoYW5fdmFsaWQgPSBmYWxzZTtcbitcdHBmX2Rldi1cdTAwM2V2ZXBhID0gZmFsc2U7XG4rXHRtdXRleF9pbml0KFx1MDAyNnp4ZGhfZGV2LVx1MDAzZWxvY2spO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuK1xuK1x0enhkaF9kZXYtXHUwMDNlY29yZWRldl90eXBlID0gR0VUX0NPUkVERVZfVFlQRShwZGV2KTtcbitcbitcdHJldCA9IHp4ZGhfcGZfcGNpX2luaXQoenhkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInp4ZGhfcGZfcGNpX2luaXQgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRnb3RvIGVycl9wZl9pbml0O1xuK1x0fVxuK1xuK1x0cmV0ID0genhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoenhkaF9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcInp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0IGZhaWxlZDogJWRcXG5cIiwgcmV0KTtcbitcdFx0Z290byBlcnJfY2ZnX2luaXQ7XG4rXHR9XG4rXG4rXHRkZXZsaW5rX3JlZ2lzdGVyKGRldmxpbmspO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2NmZ19pbml0OlxuK1x0enhkaF9wZl9wY2lfY2xvc2UoenhkaF9kZXYpO1xuK2Vycl9wZl9pbml0OlxuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZwZl9kZXYtXHUwMDNlaXJxX2xvY2spO1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6eGRoX2Rldi1cdTAwM2Vsb2NrKTtcbitcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xuK2Vycl9wZl9kZXY6XG4rXHRkZXZsaW5rX2ZyZWUoZGV2bGluayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IHByaXZfdG9fZGV2bGluayh6eGRoX2Rldik7XG4rXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVx1MDAzZXByaXY7XG4rXG4rXHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG4rXHR6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTtcbitcdHp4ZGhfcGZfcGNpX2Nsb3NlKHp4ZGhfZGV2KTtcbitcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGZfZGV2LVx1MDAzZWlycV9sb2NrKTtcbitcdG11dGV4X2Rlc3Ryb3koXHUwMDI2enhkaF9kZXYtXHUwMDNlbG9jayk7XG4rXHR6eGRoX2NvcmVfZnJlZV9wcml2KHp4ZGhfZGV2KTtcbitcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcbitcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgenhkaF9wZl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXG4rXHRcdHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTtcbitcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHp4ZGhfcGZfZHJpdmVyID0ge1xuK1x0Lm5hbWUgPSBcImRpbmdoYWkxMGVcIixcbitcdC5pZF90YWJsZSA9IHp4ZGhfcGZfcGNpX3RhYmxlLFxuK1x0LnByb2JlID0genhkaF9wZl9wcm9iZSxcbitcdC5yZW1vdmUgPSB6eGRoX3BmX3JlbW92ZSxcbitcdC5zaHV0ZG93biA9IHp4ZGhfcGZfc2h1dGRvd24sXG4rfTtcbitcbittb2R1bGVfcGNpX2RyaXZlcih6eGRoX3BmX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNThjNWRhOWEwOWZmY2Ncbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmhcbkBAIC0wLDAgKzEsMTAxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qXG4rICogWlRFIERpbmdIYWkgRXRoZXJuZXQgZHJpdmVyIC0gUEYgaGVhZGVyXG4rICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFpURSBDb3Jwb3JhdGlvbi5cbisgKi9cbitcbisjaWZuZGVmIF9fWlhESF9FTl9QRl9IX19cbisjZGVmaW5lIF9fWlhESF9FTl9QRl9IX19cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbitcbisjZGVmaW5lIFpYREhfUEZfVkVORE9SX0lEXHQweDFjZjJcbisjZGVmaW5lIFpYREhfUEZfREVWSUNFX0lEXHQweDgwNDBcbisjZGVmaW5lIFpYREhfVkZfREVWSUNFX0lEXHQweDgwNDFcbitcbisvKiBDb21tb24gY29uZmlndXJhdGlvbiAqL1xuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkdcdDFcbisvKiBOb3RpZmljYXRpb25zICovXG4rI2RlZmluZSBaWERIX1BDSV9DQVBfTk9USUZZX0NGR1x0MlxuKy8qIElTUiBhY2Nlc3MgKi9cbisjZGVmaW5lIFpYREhfUENJX0NBUF9JU1JfQ0ZHXHRcdDNcbisvKiBEZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqL1xuKyNkZWZpbmUgWlhESF9QQ0lfQ0FQX0RFVklDRV9DRkdcdDRcbisvKiBQQ0kgY29uZmlndXJhdGlvbiBhY2Nlc3MgKi9cbisjZGVmaW5lIFpYREhfUENJX0NBUF9QQ0lfQ0ZHXHRcdDVcbitcbisjZGVmaW5lIFpYREhfUEZfTUFYX0JBUl9WQUxcdFx0MHg1XG4rI2RlZmluZSBaWERIX1BGX0FMSUdONFx0XHRcdDRcbisjZGVmaW5lIFpYREhfUEZfQUxJR04yXHRcdFx0MlxuKyNkZWZpbmUgWlhESF9QRl9NQVBfTUlOTEVOMlx0XHQyXG4rXG4rI2RlZmluZSBaWERIX0RFVl9NQUNfSElHSF9PRkZTRVRcdDRcbitcbitlbnVtIHp4ZGhfY29yZWRldl90eXBlIHtcbitcdERIX0NPUkVERVZfUEYsXG4rXHRESF9DT1JFREVWX1ZGLFxuK1x0REhfQ09SRURFVl9TRixcbitcdERIX0NPUkVERVZfTVBGXG4rfTtcbitcbitzdHJ1Y3QgZGV2bGluaztcbitcbitzdHJ1Y3QgenhkaF9jb3JlX2RldiB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG4rXHRlbnVtIHp4ZGhfY29yZWRldl90eXBlIGNvcmVkZXZfdHlwZTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2O1xuK1x0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG4rXHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogUHJvdGVjdHMgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi9cbitcdHZvaWQgKnByaXY7XG4rfTtcbitcbitzdHJ1Y3QgenhkaF9wZl9kZXYge1xuK1x0c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uO1xuK1x0LyogRGV2aWNlLXNwZWNpZmljIGRhdGEgKG5vbi1sZWdhY3kgbW9kZSkgICovXG4rXHQvKiBCYXNlIG9mIHZxIG5vdGlmaWNhdGlvbnMgKG5vbi1sZWdhY3kgbW9kZSkuICovXG4rXHR2b2lkIF9faW9tZW0gKmRldmljZTtcbitcdHZvaWQgX19pb21lbSAqbm90aWZ5X2Jhc2U7XG4rXHR2b2lkIF9faW9tZW0gKnBmX3NyaW92X2NhcF9iYXNlO1xuK1x0LyogUGh5c2ljYWwgYmFzZSBvZiB2cSBub3RpZmljYXRpb25zICovXG4rXHRyZXNvdXJjZV9zaXplX3Qgbm90aWZ5X3BhO1xuK1x0LyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi9cbitcdHNpemVfdCBub3RpZnlfbGVuO1xuK1x0c2l6ZV90IGRldmljZV9sZW47XG4rXHQvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMgcGVyLXZxLiAqL1xuK1x0czMyIG5vdGlmeV9tYXBfY2FwO1xuK1x0dTMyIG5vdGlmeV9vZmZzZXRfbXVsdGlwbGllcjtcbitcdC8qIE11bHRpcGx5IHF1ZXVlX25vdGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovXG4rXHRzMzIgbW9kZXJuX2JhcnM7XG4rXHR2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2FkZHJbNl07XG4rXHR1NjQgc3Jpb3ZfYmFyX3NpemU7XG4rXHR1MzIgZGV2X2NmZ19iYXJfb2ZmO1xuK1x0Ym9vbCBwYWNrZWRfc3RhdHVzO1xuK1x0Ym9vbCBiYXJfY2hhbl92YWxpZDtcbitcdGJvb2wgdmVwYTtcbitcdHN0cnVjdCBtdXRleCBpcnFfbG9jazsgLyogUHJvdGVjdHMgSVJRIG9wZXJhdGlvbnMgKi9cbit9O1xuK1xuKyNkZWZpbmUgR0VUX0NPUkVERVZfVFlQRShwZGV2KSBcXFxuK1x0KChwZGV2KS1cdTAwM2VkZXZpY2UgPT0gWlhESF9WRl9ERVZJQ0VfSUQgPyBESF9DT1JFREVWX1ZGIDogREhfQ09SRURFVl9QRilcbitcbit2b2lkICp6eGRoX2NvcmVfYWxsb2NfcHJpdihzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYsIHNpemVfdCBzaXplKTtcbit2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcbit2b2lkIHp4ZGhfcGZfcGNpX2Nsb3NlKHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XG4raW50IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggY2ZnX3R5cGUsXG4rXHRcdFx0XHR1MzIgaW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKTtcbit2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxuK1x0XHRcdFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXG4rXHRcdFx0XHQgICAgIHUzMiBzdGFydCwgdTMyIHNpemUsXG4rXHRcdFx0XHQgICAgIHNpemVfdCAqbGVuLCByZXNvdXJjZV9zaXplX3QgKnBhLFxuK1x0XHRcdFx0ICAgICB1MzIgKmJhcl9vZmYpO1xuK2ludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK2ludCB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK2ludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK3ZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK2ludCB6eGRoX3BmX21vZGVybl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xuK1xuKyNlbmRpZiAvKiBfX1pYREhfRU5fUEZfSF9fICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNDozMjoyNC42MzExMDA3ODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA5NjMxNjkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIFBhdGhzOiBUaGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgRHJpdmVyKipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIG5ldyBFdGhlcm5ldCBkcml2ZXIgZm9yIFpURSBEaW5nSGFpIGRldmljZXMsIHdoaWNoIHNlZW1zIHRvIGJlIGEgUENJIGRyaXZlci4gSXQgaW1wbGVtZW50cyB0aGUgc3RhbmRhcmQgUENJIHByb2JlLCByZW1vdmUsIGFuZCBzaHV0ZG93biBmdW5jdGlvbnMuIEl0J3MgcmVnaXN0ZXJlZCB3aXRoIGBwY2lfcmVnaXN0ZXJfZHJpdmVyYCBhbmQgaW5jbHVkZXMgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIGFuZCBNYWtlZmlsZSBlbnRyaWVzLCBwbHVzIHRoZSBjb3JlIGRyaXZlciBmaWxlcy4gVGhlIGRyaXZlciBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBhIFBDSSBFdGhlcm5ldCBjb250cm9sbGVyIGZyb20gWlRFIChWZW5kb3IgSUQgMHgxY2YyLCBEZXZpY2UgSUQgMHg4MDQwKS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgZnV6emluZy4gXG5cbkdpdmVuIGl0J3MgYSBQQ0kgZHJpdmVyLCBpdCBzaG91bGQgYmUgZnV6emFibGUuIFRoZSBxdWVzdGlvbiBpcyBob3cgdG8gZ2V0IHRoZSBgenhkaF9wZl9wcm9iZWAgZnVuY3Rpb24gdG8gcnVuLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHN5emthbGxlci4gRG9lcyBzeXprYWxsZXIgaGF2ZSBnb29kIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcz8gU3l6a2FsbGVyIHN1cHBvcnRzIFBDSSBmdXp6aW5nLCByaWdodD8gU3l6a2FsbGVyIHVzZXMgYHN5el9wY2lgIHBzZXVkby1zeXNjYWxscyBvciBzb21ldGhpbmcgc2ltaWxhciBmb3IgUENJIGZ1enppbmcsIG9yIGRvZXMgaXQgcmVseSBvbiBRRU1VIFBDSSBlbXVsYXRpb24/IExldCdzIGJlIHN1cmUsIGBzeXpfcGNpX2RldmljZV9hZGRgIG9yIHNpbWlsYXIuIEknbSB0cnlpbmcgdG8gcmVtZW1iZXIgdGhlIHNwZWNpZmljcyBvZiBzeXprYWxsZXIncyBQQ0kgc3VwcG9ydC4gXG5cblRoZW4gSSBjb21lIGJhY2sgdG8gdGhlIHByb21wdCwgd2hpY2ggaGlnaGxpZ2h0cyB0aGUgZGlmZmljdWx0eSBvZiByZWFjaGluZyBkcml2ZXJzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gVGhhdCdzIGEga2V5IHBvaW50LiBUaGlzIERpbmdIYWkgZGV2aWNlICppcyogc3BlY2lmaWMgaGFyZHdhcmUuIFRoZXJlJ3MgcHJvYmFibHkgbm8gUUVNVSBlbXVsYXRpb24gZm9yIHRoaXMgZGV2aWNlLiBObywgbm8gYHN5el9wY2lgLiBUaGUgcHJvbXB0IGlzIHJpZ2h0LiBTbywgY2FuIHdlIGV2ZW4gcHJvYmUgdGhpcyB0aGluZyB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZT8gTm8uXG5cblRoZSBuZXh0IHRoaW5nIHRoYXQganVtcHMgdG8gbXkgbWluZCBpczogY2FuIHdlIGV4cGxvaXQgc29tZSBraW5kIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBkZXZpY2U/IElzIHRoZXJlIGEgdmlydGlvLWxpa2Ugc3RydWN0dXJlPyBMZXQncyBjaGVjay4gWWVzLCB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBQQ0kgY29uZmlnIHNwYWNlLiBJdCBzcGVjaWZpY2FsbHkgbG9va3MgZm9yIHZlbmRvci1zcGVjaWZpYyBjYXBhYmlsaXRpZXMuIFRoZSBtb3JlIEkgbG9vaywgdGhlIG1vcmUgaXQgcmVzZW1ibGVzIGEgdmlydGlvLW5ldCBpbXBsZW1lbnRhdGlvbiBidXQgdGhyb3VnaCB2ZW5kb3Itc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcy4gQnV0IHRoZSBkcml2ZXIgcmVxdWlyZXMgYSB2ZXJ5IHNwZWNpZmljIFZlbmRvciBhbmQgRGV2aWNlIElELiBTdGFuZGFyZCB2aXJ0aW8tbmV0IGRldmljZXMgKFZlbmRvciAweDFhZjQsIERldmljZSAweDEwMDAvMHgxMDQxKSB3aWxsIG5vdCB0cmlnZ2VyIHRoaXMgZHJpdmVyLiBcblxuU28gaXQncyBhIGRlYWQgZW5kIGlmIHdlIGFyZSBydW5uaW5nIGluIFFFTVUuIEFuZCBzeXprYWxsZXIgaGFzIGEgcmVhbCBwcm9ibGVtLiBTeXprYWxsZXIgY2Fubm90IGNyZWF0ZSB0aGUgUENJIGRldmljZSBieSBpdHNlbGYuIFRoZSBgenhkaF9wZl9wcm9iZWAgd2lsbCBuZXZlciBiZSBjYWxsZWQgaWYgdGhlIFBDSSBzdWJzeXN0ZW0gY2FuJ3QgZmluZCBhIGRldmljZSB3aXRoIElEIDB4MWNmMjoweDgwNDAuIFRoZXJlIGlzIG5vIHN1Y2ggZGV2aWNlIGluIFFFTVUsIHNvIGl0IGxvb2tzIGltcG9zc2libGUgdG8gcmVhY2guIFxuXG5XYWl0LCBjYW4gd2UgaW5qZWN0IGEgUENJIGRldmljZSB3aXRoIHRoZSBgbmV3X2lkYCBzeXNmcyBhdHRyaWJ1dGU/IE5vcGUsIGl0IGNhbiBvbmx5ICpiaW5kKiB0aGUgZHJpdmVyIHRvICpleGlzdGluZyogZGV2aWNlcy4gSXQgZG9lc24ndCBjcmVhdGUgbmV3IG9uZXMuIFdlIHN0aWxsIG5lZWQgdGhlIHJpZ2h0IGtpbmQgb2YgUENJIGRldmljZS4gSWYgd2UgYm91bmQgaXQgdG8gYW5vdGhlciBkZXZpY2UsIGl0IHdvdWxkIHRyaWdnZXIgYHp4ZGhfcGZfcHJvYmVgIGJ1dCBpdCBpcyB1bmxpa2VseSB0byBtYXRjaCB0aGUgZXhhY3Qgc3RydWN0dXJlLlxuXG5JJ20gc3RhcnRpbmcgdG8gcmVtZW1iZXIgdGhhdCBzeXprYWxsZXIgaGFzIHRvIHJlbHkgb24gUUVNVSdzIFBDSSBlbXVsYXRpb24gb3IgYHZmaW9gLiBJZiB0aGUgZGV2aWNlIGlzIG5vdCBlbXVsYXRlZCwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUuIFRoaXMgaXMgYmFkIG5ld3MsIGl0IGlzIGhhcmQgdG8gZnV6eiB3aXRob3V0IGRldmljZSBlbXVsYXRpb24uIEl0IHdpbGwgbm90IHdvcmsuXG5cbklzIHRoZXJlIGFueSB3YXk/IERvZXMgdGhlIGRyaXZlciByZWdpc3RlciBhIGBkZXZsaW5rYCBpbnN0YW5jZT8gWWVzLCBidXQgb25seSAqaW5zaWRlKiBgenhkaF9wZl9wcm9iZWAuIFNvIGlmIHRoZSBwcm9iZSBmdW5jdGlvbiBpc24ndCBjYWxsZWQsIHdlIGNhbid0IHJlYWNoIHRoZSBgZGV2bGlua2AgaW5zdGFuY2UgZWl0aGVyLiBTbyBpdCB3b24ndCBiZSByZWFjaGFibGUgdmlhIG5ldGxpbmsgZWl0aGVyLlxuXG5JcyB0aGVyZSBhbnkgd2F5IHRvIGVtdWxhdGUgdGhlIGRyaXZlciBieSB1c2luZyBzb21ldGhpbmcgbGlrZSBhIHZpcnR1YWwgaG9zdCBicmlkZ2U/IE5vLCB0aGVyZSBpcyBubyBnZW5lcmljIFBDSSBob3N0IGJyaWRnZSBpbiB0aGUga2VybmVsIHRoYXQgd291bGQgYWxsb3cgdG8gaW5qZWN0IHRoaXMgc3BlY2lmaWMgZGV2aWNlLlxuXG5JJ3ZlIGdvdCB0byBmYWNlIHRoZSBtdXNpYzogd2l0aG91dCBzcGVjaWZpYyBlbXVsYXRpb24gZm9yIHRoaXMgWlRFIERpbmdIYWkgY2FyZCwgdGhpcyBkcml2ZXIgaXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgaW4gR0NFL1FFTVUsIHRodXMgbWFraW5nIGVmZmVjdGl2ZSBmdXp6aW5nIHByb2JsZW1hdGljLCBpZiBub3QgaW1wb3NzaWJsZS4gV2UgbmVlZCBhIHdheSB0byBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgZGV2aWNlLCBzbyBpdCBjYW4gYmUgcmVhY2hlZC4gVGhpcyBzZWVtcyB0byBiZSBhIGhhcmR3YXJlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzOTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTQ6MzI6NTkuNzI3NDIwMDAyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNjEzODU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6eGRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oLTEwLS8qIFRoaXMgaXMgdGhlIFBDSSBjYXBhYmlsaXR5IGhlYWRlcjogKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oOjExOnN0cnVjdCB6eGRoX3BmX3BjaV9jYXAge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmgtMTItXFx0X191OCBjYXBfdm5kcjtcXHRcXHQvKiBHZW5lcmljIFBDSSBmaWVsZDogUENJX0NBUF9JRF9WTkRSICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oLTIzLS8qIEZpZWxkcyBpbiBaWERIX1BGX1BDSV9DQVBfQ09NTU9OX0NGRzogKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oOjI0OnN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oLTI1LVxcdC8qIEFib3V0IHRoZSB3aG9sZSBkZXZpY2UuICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9kaF9xdWV1ZS5oLTQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmg6NDk6c3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2RoX3F1ZXVlLmg6NTA6XFx0c3RydWN0IHp4ZGhfcGZfcGNpX2NhcCBjYXA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZGhfcXVldWUuaC01MS1cXHRfX2xlMzIgbm90aWZ5X29mZl9tdWx0aXBsaWVyOyAvKiBNdWx0aXBsaWVyIGZvciBxdWV1ZV9ub3RpZnlfb2ZmLiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYz0xNz1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgenhkaF9wZl9kZXZsaW5rX29wcyA9IHt9O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyMTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgenhkaF9wZl9wY2lfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIyLVxcdHsgUENJX0RFVklDRShaWERIX1BGX1ZFTkRPUl9JRCwgWlhESF9QRl9ERVZJQ0VfSUQpIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Mjc6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHp4ZGhfcGZfcGNpX3RhYmxlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Mjk6dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzMtXFx0aWYgKHByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNDpcXHRcXHR6eGRoX2Rldi1cXHUwMDNlcHJpdiA9IHByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNS1cXHRyZXR1cm4gcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozODp2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzkte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDA6XFx0a2ZyZWUoenhkaF9kZXYtXFx1MDAzZXByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDEtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MzpzdGF0aWMgaW50IHp4ZGhfcGZfcGNpX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDU6XFx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXYgPSB6eGRoX2Rldi1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ2LVxcdGludCByZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ4OlxcdHBjaV9zZXRfZHJ2ZGF0YSh6eGRoX2Rldi1cXHUwMDNlcGRldiwgenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo1MDpcXHRyZXQgPSBwY2lfZW5hYmxlX2RldmljZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy01MS1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo1MjpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNTMtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo1NjpcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIERNQV9CSVRfTUFTSyg2NCkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNTctXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NTg6XFx0XFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCh6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBETUFfQklUX01BU0soMzIpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTU5LVxcdFxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjYwOlxcdFxcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcImRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTYxLVxcdFxcdFxcdGdvdG8gZXJyX3BjaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo2NTpcXHRyZXQgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NjY6XFx0XFx0XFx0XFx0XFx0ICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy02Ny1cXHRcXHRcXHRcXHRcXHQgICBcXFwiZGgtcGZcXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTY4LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjY5OlxcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTcwLVxcdFxcdGdvdG8gZXJyX3BjaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo3MzpcXHRwY2lfc2V0X21hc3Rlcih6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo3NDpcXHRyZXQgPSBwY2lfc2F2ZV9zdGF0ZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy03NS1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo3NjpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNzctXFx0XFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6ODA6XFx0aWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCAwKSBcXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtODEtXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjgyOlxcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIkJBUiAwIGlzIG5vdCBhbiBNTUlPIHJlc291cmNlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTgzLVxcdFxcdGdvdG8gZXJyX3BjaV9zYXZlX3N0YXRlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy04Ni1cXHRwZl9kZXYtXFx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0gPVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6ODc6XFx0XFx0aW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoenhkaF9kZXYtXFx1MDAzZXBkZXYsIDApLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6ODg6XFx0XFx0XFx0cGNpX3Jlc291cmNlX2xlbih6eGRoX2Rldi1cXHUwMDNlcGRldiwgMCkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtODktXFx0aWYgKCFwZl9kZXYtXFx1MDAzZXBjaV9pb3JlbWFwX2FkZHJbMF0pIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTkwLVxcdFxcdHJldCA9IC1FTk9NRU07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo5MTpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJkaCBwZiBwY2kgaW9yZW1hcCBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtOTItXFx0XFx0Z290byBlcnJfcGNpX3NhdmVfc3RhdGU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTk3LWVycl9wY2lfc2F2ZV9zdGF0ZTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjk4OlxcdHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoenhkaF9kZXYtXFx1MDAzZXBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo5OTpcXHRcXHRcXHRcXHQgICAgIHBjaV9zZWxlY3RfYmFycyh6eGRoX2Rldi1cXHUwMDNlcGRldiwgSU9SRVNPVVJDRV9NRU0pKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTEwMC1lcnJfcGNpOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTAxOlxcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMDItXFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTA0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTA1OnZvaWQgenhkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTA2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjEwNzpcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTA5LVxcdGlvdW5tYXAocGZfZGV2LVxcdTAwM2VwY2lfaW9yZW1hcF9hZGRyWzBdKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjExMDpcXHRwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTExOlxcdFxcdFxcdFxcdCAgICAgcGNpX3NlbGVjdF9iYXJzKHp4ZGhfZGV2LVxcdTAwM2VwZGV2LCBJT1JFU09VUkNFX01FTSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTEyOlxcdHBjaV9kaXNhYmxlX2RldmljZSh6eGRoX2Rldi1cXHUwMDNlcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMTMtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTE1OmludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTE2LVxcdFxcdFxcdFxcdHUzMiBpb3Jlc291cmNlX3R5cGVzLCBpbnQgKmJhcnMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTEyNC1cXHRcXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTI1OlxcdFxcdFxcdFxcdCAgICAgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTEyNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRjZmdfdHlwZSksIFxcdTAwMjZ0eXBlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTEyNy1cXHRcXHRwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTI4OlxcdFxcdFxcdFxcdCAgICAgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCwgYmFyKSwgXFx1MDAyNmJhcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xMjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE0Njp2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTQ3LVxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IG1pbmxlbiwgdTMyIGFsaWduLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNTEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTUyOlxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXFx1MDAzZXBkZXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNTMtXFx0dm9pZCBfX2lvbWVtICpwO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNTgtXFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE1OTpcXHRcXHRcXHQgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsIGJhciksIFxcdTAwMjZiYXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTYwLVxcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MTYxOlxcdFxcdFxcdCAgICAgIG9mZiArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jYXAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNjItXFx0XFx0XFx0XFx0XFx0XFx0b2Zmc2V0KSwgXFx1MDAyNm9mZnNldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNjMtXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxNjQ6XFx0XFx0XFx0ICAgICAgb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NhcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE2NS1cXHRcXHRcXHRcXHRcXHRcXHRsZW5ndGgpLCBcXHUwMDI2bGVuZ3RoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTcwLVxcdGlmIChsZW5ndGggXFx1MDAzYz0gc3RhcnQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE3MTpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFxcdTAwM2UldSBleHBlY3RlZClcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xNzItXFx0XFx0XFx0bGVuZ3RoLCBzdGFydCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE3Ni1cXHRpZiAobGVuZ3RoIC0gc3RhcnQgXFx1MDAzYyBtaW5sZW4pIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE3NzpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJiYWQgY2FwYWJpbGl0eSBsZW4gJXUgKFxcdTAwM2U9JXp1IGV4cGVjdGVkKVxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE3OC1cXHRcXHRcXHRsZW5ndGgsIG1pbmxlbik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE4My1cXHRpZiAoc3RhcnQgKyBvZmZzZXQgXFx1MDAzYyBvZmZzZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjE4NDpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJtYXAgd3JhcC1hcm91bmQgJXUrJXVcXFxcblxcXCIsIHN0YXJ0LCBvZmZzZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMTg1LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0xODktXFx0aWYgKG9mZnNldCBcXHUwMDI2IChhbGlnbiAtIDEpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoxOTA6XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwib2Zmc2V0ICV1IG5vdCBhbGlnbmVkIHRvICV1XFxcXG5cXFwiLCBvZmZzZXQsIGFsaWduKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTE5MS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjAxLVxcdCAgICBtaW5sZW4gKyBvZmZzZXQgXFx1MDAzZSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjIwMjpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMDMtXFx0XFx0XFx0XFxcIm1hcCBjdXN0b20gcXVldWUgJXp1QCV1IG91dCBvZiByYW5nZSBvbiBiYXIgJXUgbGVuZ3RoICVsdVxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjEwLVxcdGlmICghcCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjExOlxcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInVuYWJsZSB0byBtYXAgY3VzdG9tIHF1ZXVlICV1QCV1IG9uIGJhciAldVxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIxMi1cXHRcXHRcXHRsZW5ndGgsIG9mZnNldCwgYmFyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjE5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjIwOmludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMjEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjIyOlxcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyMjM6XFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIyNC1cXHRpbnQgY29tbW9uO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMjYtXFx0LyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1vZGUgKGJhciAwKS4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjIyNzpcXHRjb21tb24gPSB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMjgtXFx0XFx0XFx0XFx0XFx0ICAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIzMC1cXHRpZiAoIWNvbW1vbikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjMxOlxcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIzMi1cXHRcXHRcXHRcXFwibWlzc2luZyBjYXBhYmlsaXRpZXMsIGxlYXZpbmcgZm9yIGxlZ2FjeSBkcml2ZXJcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyMzY6XFx0cGZfZGV2LVxcdTAwM2Vjb21tb24gPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBjb21tb24sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyMzc6XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB6eGRoX3BmX3BjaV9jb21tb25fY2ZnKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTIzOC1cXHRcXHRcXHRcXHRcXHRcXHRaWERIX1BGX0FMSUdONCwgMCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjIzOTpcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjQwLVxcdFxcdFxcdFxcdFxcdFxcdE5VTEwsIE5VTEwsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjQxLVxcdGlmICghcGZfZGV2LVxcdTAwM2Vjb21tb24pIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjI0MjpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJwZl9kZXYtXFx1MDAzZWNvbW1vbiBpcyBudWxsXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI0My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjQ5OmludCB6eGRoX3BmX25vdGlmeV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNTAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjUxOlxcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyNTI6XFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI1My1cXHR1MzIgbm90aWZ5X2xlbmd0aDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjU3LVxcdC8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ugc2hvdWxkIGJlIHRvby4uLiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjU4OlxcdG5vdGlmeSA9IHp4ZGhfcGZfcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBaWERIX1BDSV9DQVBfTk9USUZZX0NGRyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI1OS1cXHRcXHRcXHRcXHRcXHQgICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjYxLVxcdGlmICghbm90aWZ5KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyNjI6XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwibWlzc2luZyBub3RpZnkgY2ZnIGNhcGFiaWxpdHlcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjYzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNjYtXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyNjc6XFx0XFx0XFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNjgtXFx0XFx0XFx0XFx0bm90aWZ5X29mZl9tdWx0aXBsaWVyKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjcwLVxcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjcxOlxcdFxcdFxcdCAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB6eGRoX3BmX3BjaV9ub3RpZnlfY2FwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjcyLVxcdFxcdFxcdFxcdGNhcC5sZW5ndGgpLCBcXHUwMDI2bm90aWZ5X2xlbmd0aCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNzMtXFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyNzQ6XFx0XFx0XFx0ICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHp4ZGhfcGZfcGNpX25vdGlmeV9jYXAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yNzUtXFx0XFx0XFx0XFx0Y2FwLm9mZnNldCksIFxcdTAwMjZub3RpZnlfb2Zmc2V0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjgxLVxcdGlmIChub3RpZnlfbGVuZ3RoICsgKG5vdGlmeV9vZmZzZXQgJSBQQUdFX1NJWkUpIFxcdTAwM2M9IFBBR0VfU0laRSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MjgyOlxcdFxcdHBmX2Rldi1cXHUwMDNlbm90aWZ5X2Jhc2UgPSB6eGRoX3BmX21hcF9jYXBhYmlsaXR5KHp4ZGhfZGV2LCBub3RpZnksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yODMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBaWERIX1BGX01BUF9NSU5MRU4yLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0yODgtXFx0XFx0aWYgKCFwZl9kZXYtXFx1MDAzZW5vdGlmeV9iYXNlKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzoyODk6XFx0XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2Vub3RpZnlfYmFzZSBpcyBudWxsXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTI5MC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMjk4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6Mjk5OmludCB6eGRoX3BmX2RldmljZV9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMDAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzAxOlxcdHN0cnVjdCB6eGRoX3BmX2RldiAqcGZfZGV2ID0genhkaF9kZXYtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMDI6XFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB6eGRoX2Rldi1cXHUwMDNlcGRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMwMy1cXHRpbnQgZGV2aWNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMDctXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMDg6XFx0ZGV2aWNlID0genhkaF9wZl9wY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFpYREhfUENJX0NBUF9ERVZJQ0VfQ0ZHLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzA5LVxcdFxcdFxcdFxcdFxcdCAgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMTUtXFx0aWYgKGRldmljZSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzE2OlxcdFxcdHBmX2Rldi1cXHUwMDNlZGV2aWNlID0genhkaF9wZl9tYXBfY2FwYWJpbGl0eSh6eGRoX2RldiwgZGV2aWNlLCAwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzE3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFpYREhfUEZfQUxJR040LCAwLCBQQUdFX1NJWkUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMyMC1cXHRcXHRpZiAoIXBmX2Rldi1cXHUwMDNlZGV2aWNlKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozMjE6XFx0XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwicGZfZGV2LVxcdTAwM2VkZXZpY2UgaXMgbnVsbFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMjItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjMyODp2b2lkIHp4ZGhfcGZfbW9kZXJuX2NmZ191bmluaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzI5LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjMzMDpcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzMxOlxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXFx1MDAzZXBkZXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zMzItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTMzOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM0MDppbnQgenhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzQxLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM0MjpcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzQzOlxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0genhkaF9kZXYtXFx1MDAzZXBkZXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNDQtXFx0aW50IHJldDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM0NjpcXHRyZXQgPSB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdCh6eGRoX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNDctXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzQ4OlxcdFxcdGRldl9lcnIoenhkaF9kZXYtXFx1MDAzZWRldmljZSwgXFxcInp4ZGhfcGZfY29tbW9uX2NmZ19pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNDktXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzUyOlxcdHJldCA9IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM1My1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNTQ6XFx0XFx0ZGV2X2Vycih6eGRoX2Rldi1cXHUwMDNlZGV2aWNlLCBcXFwienhkaF9wZl9ub3RpZnlfY2ZnX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM1NS1cXHRcXHRnb3RvIGVycl9tYXBfbm90aWZ5O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zNTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNTg6XFx0cmV0ID0genhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzU5LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM2MDpcXHRcXHRkZXZfZXJyKHp4ZGhfZGV2LVxcdTAwM2VkZXZpY2UsIFxcXCJ6eGRoX3BmX2RldmljZV9jZmdfaW5pdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzYxLVxcdFxcdGdvdG8gZXJyX21hcF9kZXZpY2U7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM3NDpzdGF0aWMgaW50IHp4ZGhfcGZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM3NS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNzY6XFx0c3RydWN0IHp4ZGhfcGZfZGV2ICpwZl9kZXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozNzc6XFx0c3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzc4LVxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zODAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozODE6XFx0ZGV2bGluayA9IGRldmxpbmtfYWxsb2MoXFx1MDAyNnp4ZGhfcGZfZGV2bGlua19vcHMsIHNpemVvZihzdHJ1Y3QgenhkaF9jb3JlX2RldiksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zODItXFx0XFx0XFx0XFx0XFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zODMtXFx0aWYgKCFkZXZsaW5rKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozODQ6XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZiBkZXZsaW5rIGFsbG9jIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy0zODUtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM4Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM4ODpcXHR6eGRoX2RldiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM4OTpcXHR6eGRoX2Rldi1cXHUwMDNlZGV2aWNlID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjM5MDpcXHR6eGRoX2Rldi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozOTE6XFx0enhkaF9kZXYtXFx1MDAzZWRldmxpbmsgPSBkZXZsaW5rO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6MzkzOlxcdHBmX2RldiA9IHp4ZGhfY29yZV9hbGxvY19wcml2KHp4ZGhfZGV2LCBzaXplb2YoKnBmX2RldikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtMzk0LVxcdGlmICghcGZfZGV2KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzozOTU6XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9kZXYgYWxsb2MgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTM5Ni1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MDEtXFx0cGZfZGV2LVxcdTAwM2V2ZXBhID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MDI6XFx0bXV0ZXhfaW5pdChcXHUwMDI2enhkaF9kZXYtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDAzLVxcdG11dGV4X2luaXQoXFx1MDAyNnBmX2Rldi1cXHUwMDNlaXJxX2xvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDA0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDA1OlxcdHp4ZGhfZGV2LVxcdTAwM2Vjb3JlZGV2X3R5cGUgPSBHRVRfQ09SRURFVl9UWVBFKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDA3OlxcdHJldCA9IHp4ZGhfcGZfcGNpX2luaXQoenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDA4LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQwOTpcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJ6eGRoX3BmX3BjaV9pbml0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MTAtXFx0XFx0Z290byBlcnJfcGZfaW5pdDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDEzOlxcdHJldCA9IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQxNC1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MTU6XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwienhkaF9wZl9tb2Rlcm5fY2ZnX2luaXQgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQxNi1cXHRcXHRnb3RvIGVycl9jZmdfaW5pdDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDIzLWVycl9jZmdfaW5pdDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQyNDpcXHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MjUtZXJyX3BmX2luaXQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00MjYtXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGZfZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0Mjc6XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2enhkaF9kZXYtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDI4OlxcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDI5LWVycl9wZl9kZXY6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQzMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQzNDpzdGF0aWMgdm9pZCB6eGRoX3BmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQzNS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0MzY6XFx0c3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDM3OlxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rID0gcHJpdl90b19kZXZsaW5rKHp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQzODpcXHRzdHJ1Y3QgenhkaF9wZl9kZXYgKnBmX2RldiA9IHp4ZGhfZGV2LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDQwLVxcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ0MTpcXHR6eGRoX3BmX21vZGVybl9jZmdfdW5pbml0KHp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ0MjpcXHR6eGRoX3BmX3BjaV9jbG9zZSh6eGRoX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NDMtXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGZfZGV2LVxcdTAwM2VpcnFfbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0NDQ6XFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2enhkaF9kZXYtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDQ1OlxcdHp4ZGhfY29yZV9mcmVlX3ByaXYoenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDQ2LVxcdGRldmxpbmtfZnJlZShkZXZsaW5rKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDQ5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDUwOnN0YXRpYyB2b2lkIHp4ZGhfcGZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NTEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0NTc6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHp4ZGhfcGZfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmMtNDU4LVxcdC5uYW1lID0gXFxcImRpbmdoYWkxMGVcXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDU5OlxcdC5pZF90YWJsZSA9IHp4ZGhfcGZfcGNpX3RhYmxlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDYwOlxcdC5wcm9iZSA9IHp4ZGhfcGZfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYzo0NjE6XFx0LnJlbW92ZSA9IHp4ZGhfcGZfcmVtb3ZlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmM6NDYyOlxcdC5zaHV0ZG93biA9IHp4ZGhfcGZfc2h1dGRvd24sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuYy00NjMtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jLTQ2NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5jOjQ2NTptb2R1bGVfcGNpX2RyaXZlcih6eGRoX3BmX2RyaXZlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6Mzg6ZW51bSB6eGRoX2NvcmVkZXZfdHlwZSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC0zOS1cXHRESF9DT1JFREVWX1BGLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaD00NT1zdHJ1Y3QgZGV2bGluaztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTQ2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6NDc6c3RydWN0IHp4ZGhfY29yZV9kZXYge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtNDgtXFx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6NDk6XFx0ZW51bSB6eGRoX2NvcmVkZXZfdHlwZSBjb3JlZGV2X3R5cGU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC01MC1cXHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtNTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo1NjpzdHJ1Y3QgenhkaF9wZl9kZXYge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6NTc6XFx0c3RydWN0IHp4ZGhfcGZfcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtNTgtXFx0LyogRGV2aWNlLXNwZWNpZmljIGRhdGEgKG5vbi1sZWdhY3kgbW9kZSkgICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6ODU6dm9pZCAqenhkaF9jb3JlX2FsbG9jX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBzaXplX3Qgc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo4Njp2b2lkIHp4ZGhfY29yZV9mcmVlX3ByaXYoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjg3OnZvaWQgenhkaF9wZl9wY2lfY2xvc2Uoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjg4OmludCB6eGRoX3BmX3BjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IGNmZ190eXBlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtODktXFx0XFx0XFx0XFx0dTMyIGlvcmVzb3VyY2VfdHlwZXMsIGludCAqYmFycyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo5MDp2b2lkIF9faW9tZW0gKnp4ZGhfcGZfbWFwX2NhcGFiaWxpdHkoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2LCBpbnQgb2ZmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmgtOTEtXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgbWlubGVuLCB1MzIgYWxpZ24sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oLTk0LVxcdFxcdFxcdFxcdCAgICAgdTMyICpiYXJfb2ZmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjk1OmludCB6eGRoX3BmX2NvbW1vbl9jZmdfaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6OTY6aW50IHp4ZGhfcGZfbm90aWZ5X2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaDo5NzppbnQgenhkaF9wZl9kZXZpY2VfY2ZnX2luaXQoc3RydWN0IHp4ZGhfY29yZV9kZXYgKnp4ZGhfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC96dGUvZGluZ2hhaS9lbl9wZi5oOjk4OnZvaWQgenhkaF9wZl9tb2Rlcm5fY2ZnX3VuaW5pdChzdHJ1Y3QgenhkaF9jb3JlX2RldiAqenhkaF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL2VuX3BmLmg6OTk6aW50IHp4ZGhfcGZfbW9kZXJuX2NmZ19pbml0KHN0cnVjdCB6eGRoX2NvcmVfZGV2ICp6eGRoX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvZW5fcGYuaC0xMDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjMzOjAwLjY2MzYwMDg0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2OTU3NTcxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIGRyaXZlciDigJMgaXQncyBhIFBDSSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlci4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgdGhpcyBkZXZpY2UgaW4gZWl0aGVyIFFFTVUgb3Igd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLlxuXG5UaGUgYHp4ZGhfcGZfcHJvYmVgIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0J3Mgb25seSBnb2luZyB0byBiZSBpbnZva2VkIGlmIGl0IGRldGVjdHMgYSBQQ0kgZGV2aWNlIHdpdGggYSB2ZXJ5IHNwZWNpZmljIFZlbmRvciBJRCAoMHgxY2YyKSBhbmQgRGV2aWNlIElEICgweDgwNDAgb3IgMHg4MDQxKS4gSSBjb3VsZCB0cnkgdG8gZm9yY2UgaXQgdG8gYmluZCB0byBhIGRpZmZlcmVudCBQQ0kgZGV2aWNlIHVzaW5nIGBuZXdfaWRgLCBidXQgSSBrbm93IHRoYXQgd29uJ3Qgd29yay4gVGhlIHByb2JlIGZ1bmN0aW9uIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBzb21lIHZlbmRvci1zcGVjaWZpYyBQQ0kgY2FwYWJpbGl0aWVzIChgWlhESF9QQ0lfQ0FQX0NPTU1PTl9DRkdgLCBhbmQgc28gb24pIHRoYXQgd29uJ3QgYmUgcHJlc2VudCBvbiBhbnkgb3RoZXIgaGFyZHdhcmUuIEVzc2VudGlhbGx5LCB0aGUgZHJpdmVyIGV4cGVjdHMgKnRoYXQqIHNwZWNpZmljIGhhcmR3YXJlLlxuXG5UaGVyZWZvcmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgd2lsbCB0aGlzIGRyaXZlcidzIGNvZGUgcGF0aHMgYmUgcmVhY2hhYmxlIGluIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VLiBJdCdzIGEgaGFyZHdhcmUtZGVwZW5kZW50IGRyaXZlciwgYW5kIHdlIGRvbid0IGhhdmUgdGhhdCBoYXJkd2FyZSBhdmFpbGFibGUgaW4gdGhlc2UgdmlydHVhbGl6ZWQgY29udGV4dHMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ3ZlIGRvdWJsZS1jaGVja2VkLiBJcyB0aGVyZSBhIFwienhkaFwiIHZpcnR1YWwgZGV2aWNlPyBOb3BlLiBJcyB0aGVyZSBhIG5ldGxpbmsgaW50ZXJmYWNlIEkgbWlnaHQgbGV2ZXJhZ2UgdGhhdCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgZGV2aWNlIGJlaW5nIHByb2JlZCBmaXJzdD8gTm8gbHVjayB0aGVyZSBlaXRoZXIuIFRoZSBkZXZsaW5rIGludGVyZmFjZSwgdGhhdCdzIHJlZ2lzdGVyZWQgd2l0aGluIGB6eGRoX3BmX3Byb2JlYCwgc28gaXQgcmVxdWlyZXMgcHJvYmUgdG8gc3VjY2VlZC4gU28gdGhlcmUgaXMgbm8gd2F5IGFyb3VuZCB0aGlzLiBUaGUgcHJvYmUgbmVlZHMgdGhvc2Ugc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcywgYW5kIHRoYXQncyB0aGUgaGFyZCBzdG9wLlxuXG5TbywgSSdtIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgdGhhdCdzIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjY0LCJPdXRwdXRUb2tlbnMiOjExOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNDozMzowOS4zNTkzNjAzOTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgUENJIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2UgKFpURSBEaW5nSGFpIEV0aGVybmV0IGNvbnRyb2xsZXIpLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLiBUaGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gcmVsaWVzIG9uIGZpbmRpbmcgc3BlY2lmaWMgdmVuZG9yLXNwZWNpZmljIFBDSSBjYXBhYmlsaXRpZXMsIG1lYW5pbmcgaXQgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBmb3JjZS1ib3VuZCB0byBvdGhlciB2aXJ0dWFsIFBDSSBkZXZpY2VzLiBUaGVyZWZvcmUsIHRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBQQ0kgZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIGRldmljZSAoWlRFIERpbmdIYWkgRXRoZXJuZXQgY29udHJvbGxlcikuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwuIFRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiByZWxpZXMgb24gZmluZGluZyBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgUENJIGNhcGFiaWxpdGllcywgbWVhbmluZyBpdCBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGZvcmNlLWJvdW5kIHRvIG90aGVyIHZpcnR1YWwgUENJIGRldmljZXMuIFRoZXJlZm9yZSwgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzbwd[1] Phase: Running StartedAt: 2026-07-20 14:33:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzbwd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-20 14:33:21 +0000 UTC FinishedAt: 2026-07-20 14:33:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}